export default { // ログイン login: { title: 'Hermes Web UI', description: 'ユーザー名とパスワードを入力して続行してください。', placeholder: 'アクセストークン', submit: 'ログイン', tokenRequired: 'アクセストークンを入力してください', invalidToken: '無効なトークンです', connectionFailed: 'サーバーに接続できません', passwordLogin: 'パスワード', tokenLogin: 'トークン', usernamePlaceholder: 'ユーザー名', passwordPlaceholder: 'パスワード', defaultCredentialsHint: '既定のユーザー名:admin、既定のパスワード:123456', credentialsRequired: 'ユーザー名とパスワードを入力してください', invalidCredentials: 'ユーザー名またはパスワードが正しくありません', tooManyAttempts: 'ログイン試行回数が多すぎます。しばらくしてからお試しください', lockResetHint: '自分のサーバーの場合は、次のコマンドでログインロックを解除できます:', defaultLoginResetHint: '既定の admin パスワードをリセットするには、次を実行してください:', sessionExpired: 'ログインの有効期限が切れました。再度ログインしてください。', accessDenied: 'このリソースにアクセスする権限がありません。', passwordMismatch: 'パスワードが一致しません', passwordTooShort: 'パスワードは6文字以上必要です', setupSuccess: 'パスワードログインが設定されました', passwordChanged: 'パスワードが変更されました', passwordRemoved: 'パスワードログインが削除されました', setupPassword: 'パスワードログインを設定', changePassword: 'パスワードを変更', changeUsername: 'ユーザー名を変更', removePasswordLogin: '削除', username: 'ユーザー名', currentPassword: '現在のパスワード', newPassword: '新しいパスワード', confirmPassword: 'パスワード確認', newUsername: '新しいユーザー名', usernameChanged: 'ユーザー名が変更されました', usernameTooShort: 'ユーザー名は2文字以上必要です', setupDescription: 'ログインに使用するユーザー名とパスワードを管理します。', removeConfirm: 'ユーザーアカウントにはパスワードログインが必要です。', passwordLoginNotConfigured: 'パスワードログイン未設定', passwordLoginConfigured: '現在のアカウント:{username}', defaultCredentialTitle: '既定のアカウント情報を変更してください', defaultCredentialMessage: '現在のログインアカウントは、既定のユーザー名または既定のパスワードをまだ使用しています。不正アクセスを防ぐため、できるだけ早く現在のアカウントでユーザー名とパスワードを変更してください。', defaultCredentialAction: '変更する', defaultCredentialLater: '後で通知', }, users: { title: 'アカウント管理', description: 'ユーザーを作成し、ロールを割り当て、通常管理者がアクセスできるプロファイルを制御します。', create: 'ユーザー作成', edit: 'ユーザー編集', username: 'ユーザー名', role: 'ロール', statusLabel: 'ステータス', profiles: 'アクセス可能なプロファイル', profilesPlaceholder: 'アクセス可能なプロファイルを選択', allProfiles: 'すべてのプロファイル', noProfiles: 'プロファイル未割り当て', lastLogin: '最終ログイン', newPasswordOptional: '新しいパスワード(空欄なら変更なし)', loadFailed: 'ユーザー一覧の読み込みに失敗しました', deleteConfirm: 'このユーザーを削除しますか?', enable: '有効化', disable: '無効化', roles: { superAdmin: 'スーパー管理者', admin: '管理者', }, status: { active: '有効', disabled: '無効', }, }, // 共通 common: { loading: '読み込み中...', cancel: 'キャンセル', retry: '再試行', delete: '削除', edit: '編集', save: '保存', saved: '保存しました', update: '更新', create: '作成', saveFailed: '保存に失敗しました', deleteFailed: '削除に失敗しました', ok: 'OK', copied: 'コピーしました', copy: 'コピー', noData: 'データがありません', fetch: '取得', add: '追加', enable: '有効化', disable: '無効化', configured: '設定済み', notConfigured: '未設定', confirm: '確認', expand: '展開', collapse: '折りたたむ', stop: '停止', start: '開始', expired: '期限切れ', }, // サイドバー sidebar: { chat: 'チャット', search: '検索', apiRelay: 'APIリレー', history: '履歴', jobs: 'ジョブ', models: 'モデル', profiles: 'プロファイル', plugins: 'プラグイン', skills: 'スキル', memory: 'メモリ', logs: 'ログ', usage: '使用量', performance: 'パフォーマンス', skillsUsage: 'スキル使用状況', channels: 'チャンネル', terminal: 'ターミナル', files: 'ファイル', groupChat: 'グループチャット', groupConversation: '会話', groupConversationShort: '会話', groupAgent: 'エージェント', groupAgentShort: 'エージェント', groupSystem: 'システム', groupSystemShort: 'シス', groupMonitoring: '監視', groupMonitoringShort: '監視', settings: '設定', connected: '接続済み', disconnected: '未接続', updateTip: 'ターミナルで "hermes-web-ui update" を実行して更新してください', updateVersion: 'v{version} にアップグレード', reloadClientVersion: 'v{version} に再読み込み', updating: '更新中...', updateSuccess: '更新が完了しました。しばらくしてからページを再読み込みしてください。長時間起動しない場合は手動で起動してください。', updateFailed: '更新に失敗しました', logout: 'ログアウト', nodeVersionWarning: 'Node.js v{version} が検出されました。バージョン23以降にアップグレードしてください。', changelog: '更新履歴', noChangelog: '更新履歴はありません', kanban: 'カンバン', groupTools: 'ツール', groupPlatform: 'プラットフォーム', gateways: 'ゲートウェイ', expand: 'メニューを展開', collapse: 'メニューを折りたたむ', }, performance: { title: 'パフォーマンス', subtitle: 'システムリソース、Bridge Broker、Workers、アクティブセッションを確認', refresh: '更新', autoRefreshOn: '自動更新', autoRefreshOff: '手動更新', loadFailed: 'パフォーマンスデータの読み込みに失敗しました', systemCpu: 'システム CPU', systemMemory: 'システムメモリ', activeSessions: 'アクティブセッション', runningSessions: '実行中 {count}', workers: 'Workers', totalWorkerMemory: 'Worker 合計メモリ', processes: 'プロセス', uptime: '稼働時間', running: '実行中', stopped: '停止', workerMemory: 'Worker メモリ', lastUpdated: '更新時刻', profile: 'Profile', memory: 'メモリ', sessions: 'セッション', runningActiveSessions: '実行中 / アクティブ', lastUsed: '最終使用', status: '状態', noWorkers: 'Worker はありません', sessionsByProfile: 'Profile 別セッション', noActiveSessions: 'アクティブセッションはありません', }, // ドロワー drawer: { terminal: 'ターミナル', files: 'ワークスペース', }, // チャット chat: { contextRemaining: '残り', contextClickToEdit: 'クリックしてコンテキスト長を編集', contextEditTitle: 'コンテキスト長を編集', contextEditDesc: '現在のモデルのコンテキスト長制限を設定(トークン数)', contextEditPlaceholder: 'コンテキスト長を入力', contextEditHint: '一般的な値:200k (Claude), 128k (GPT-4), 32k (GPT-3.5)', contextEditSave: '保存', contextEditCancel: 'キャンセル', contextEditInvalid: '有効なコンテキスト長を入力してください', contextEditSuccess: 'コンテキスト長を更新しました', contextEditFailed: '更新に失敗しました', emptyState: 'Hermes Agent と会話を開始しましょう', outlineTitle: '会話アウトライン', outlineEmpty: '会話内容はありません', outlineUserQuestion: 'ユーザーの質問', inputPlaceholder: 'メッセージを入力... (Enter で送信、Shift+Enter で改行)', slashCommandArgs: { message: '<メッセージ>', title: '<タイトル>', text: '<テキスト>', }, slashCommands: { usage: '現在のセッション使用量を計算', status: 'セッション状態とキューを表示', abort: '実行中の Bridge を停止', queue: '実行中の処理の後ろにメッセージをキュー追加', clear: '現在の表示をクリア', clearHistory: 'このセッションの保存済みメッセージ履歴を削除', title: 'このセッション名を変更', compress: 'アイドル時にコンテキスト圧縮を実行', steer: '実行中の Bridge に誘導テキストを送信', destroy: 'このセッションの Bridge Agent を解放', }, attachFiles: 'ファイルを添付', showToolCalls: 'ツール呼び出しを表示', hideToolCalls: 'ツール呼び出しを非表示', messageQueue: 'メッセージキュー', removeQueuedMessage: 'キューのメッセージを削除', stop: '停止', send: '送信', contextUsed: 'コンテキスト使用量:', sessions: 'セッション', webUiSessions: 'セッション', allProfiles: 'すべてのプロファイル', profileMissingModelsTip: 'このセッションのプロファイル「{profile}」には利用可能なプロバイダーまたはモデルがありません', sessionScopeHint: 'チャットには Web UI/API Server セッションのみ表示されます。CLI、Telegram、Discord、Cron などのチャンネルセッションは履歴で読み取り専用として表示されます。', openHistory: '履歴を開く', hermesHistory: 'Hermes 履歴', historyScopeHint: '現在の profile の Hermes 履歴セッションをソース別に読み取り専用で表示します。', noSessions: 'セッションがありません', newChat: '新しいチャット', approvalKicker: 'ターミナル権限', approvalTitle: '実行前にコマンドを確認', approvalAllowOnce: '一度だけ許可', approvalAllowSession: 'セッション中は許可', approvalAlways: '常に許可', approvalDeny: '拒否', clarifyKicker: 'エージェントの確認が必要', clarifyTitle: 'エージェントが質問があります', clarifyPlaceholder: '回答を入力...', clarifySubmit: '返信', clarifyDismiss: '閉じる', deleteSession: 'このセッションを削除しますか?', toggleBatchMode: '一括選択', selectAll: 'すべて選択', confirmBatchDelete: '{count}件のセッションを削除しますか?', batchDeleteSuccess: '{count}件のセッションを削除しました', batchDeletePartial: '{failed}件の削除に失敗しました', batchDeleteFailed: '一括削除に失敗しました', sessionDeleted: 'セッションを削除しました', rename: '名前変更', pin: 'ピン留め', unpin: 'ピン留め解除', pinned: 'ピン留め', chatMode: 'チャット', liveMode: 'ライブ', liveSessions: 'ライブセッション', recentBadge: '最近', linkedSessions: '{count} 件の関連', noVisibleMessages: '人間向けに表示できるメッセージはありません。', monitorRoleUser: 'ユーザー', monitorRoleAssistant: 'アシスタント', copySessionLink: 'セッションリンクをコピー', openSessionInNewTab: '新しいタブで開く', sessionLinkCopied: 'Session link copied', copySessionId: 'セッション ID をコピー', export: 'エクスポート', exportFull: 'フルエクスポート (JSON)', exportCompressed: '圧縮エクスポート (TXT)', exportCompressing: 'コンテキストを圧縮中、お待ちください...', exportSuccess: 'セッションをエクスポートしました', exportFailed: 'エクスポートに失敗しました', renamed: '名前を変更しました', renameFailed: '名前の変更に失敗しました', renameSession: 'セッション名の変更', sessionNotFound: 'セッションが見つかりません', enterNewTitle: '新しいタイトルを入力', other: 'その他', runFailed: '実行に失敗しました', error: 'エラー', tool: 'ツール', arguments: '引数', result: '結果', truncated: '... (省略)', executionDuration: '実行時間', thinkingLabel: '思考過程', thinkingInProgress: '思考中…', thinkingShow: '思考過程を表示', thinkingHide: '思考過程を隠す', thinkingDuration: '観測 {duration}', thinkingChars: '{count} 文字', copyBubble: 'メッセージをコピー', copiedBubble: 'コピーしました', copyFailed: 'コピーに失敗しました', playSpeech: '音声を読み上げ', pauseSpeech: '一時停止', resumeSpeech: '再開', stopSpeech: '停止', speechNotSupported: 'このブラウザは音声読み上げをサポートしていません', searchEnterHint: 'Enter で開く · Esc で閉じる', searchHint: 'Cmd/Ctrl+K', searchScope: '検索範囲: Web UI のローカルセッション DB のみ。読み取り専用の Hermes 履歴セッションは含まれません。', searchFailed: 'セッション検索に失敗しました', searchNoSnippet: '表示できる要約がありません', searchNoResults: '一致するセッションがありません', searchRecent: '最近のセッション', searchEmpty: '最近のセッション', searchPlaceholder: 'セッションを検索...', searchSubtitle: 'タイトルまたはメッセージ内容で検索', searchTitle: 'セッション検索', stopGateway: 'Gateway を停止', start: '開始', workspaceSetFailed: 'Workspace の設定に失敗しました', workspaceSet: 'Workspace を設定しました', workspacePlaceholder: 'プロジェクトパスを入力 例: /home/user/project', workspace: 'ワークスペース', setWorkspaceTitle: 'セッション Workspace を設定', setWorkspace: 'Workspace を設定', modelSetFailed: 'モデルの設定に失敗しました', modelSet: 'モデルを設定しました', setModelTitle: 'セッションモデルを設定', setModel: 'モデルを設定', newCliChat: '新規 CLI', cliEmptyState: 'CLI チャットを開始', autoPlaySpeech: '音声を自動再生', }, // スケジュールジョブ jobs: { title: 'スケジュールジョブ', createJob: 'ジョブを作成', editJob: 'ジョブを編集', noJobs: 'スケジュールジョブがありません。作成して始めましょう。', name: '名前', namePlaceholder: 'ジョブ名', schedule: 'スケジュール (Cron 式)', schedulePlaceholder: '例: 0 9 * * *', quickPresets: 'クイックプリセット', selectPreset: 'プリセットを選択...', presetEveryMinute: '毎分', presetEvery5Min: '5分ごと', presetEveryHour: '毎時', presetEveryDay: '毎日 00:00', presetEveryDay9: '毎日 09:00', presetEveryMonday: '毎週月曜 09:00', presetEveryMonth: '毎月1日 09:00', prompt: 'プロンプト', promptPlaceholder: '実行するプロンプト', deliverTarget: '配信先', origin: '配信元', local: 'ローカル', repeatCount: '繰り返し回数(任意)', modelPlaceholder: 'デフォルトモデル', repeatPlaceholder: '空白の場合は無制限', jobCreated: 'ジョブを作成しました', jobUpdated: 'ジョブを更新しました', nameRequired: '名前は必須です', scheduleRequired: 'スケジュールは必須です', loadFailed: 'ジョブの読み込みに失敗しました', jobPaused: 'ジョブを一時停止しました', jobResumed: 'ジョブを再開しました', jobTriggered: 'ジョブをトリガーしました', modelUpdated: 'モデルを更新しました', jobDeleted: 'ジョブを削除しました', status: { running: '実行中', paused: '一時停止', disabled: '無効', scheduled: 'スケジュール済み', }, info: { model: 'モデル', schedule: 'スケジュール', lastRun: '前回実行', nextRun: '次回実行', deliver: '配信', repeat: '繰り返し', }, action: { pause: '一時停止', pauseJob: 'ジョブを一時停止', resume: '再開', resumeJob: 'ジョブを再開', runNow: '今すぐ実行', triggerImmediately: 'すぐにトリガー', }, runHistory: { title: '実行履歴', runs: '件', noRuns: '実行履歴がありません。', }, }, // スキル skills: { title: 'スキル', searchPlaceholder: 'スキルを検索...', noMatch: '検索に一致するスキルがありません', noSkills: 'スキルがありません', backTo: '戻る', attachedFiles: '添付ファイル', loadFailed: 'スキルの読み込みに失敗しました', fileLoadFailed: 'ファイルの読み込みに失敗しました', modified: 'ユーザー変更あり', archived: 'アーカイブ済み', pinned: 'ピン留め', pin: 'スキルをピン留め', unpin: 'ピン留めを解除', pinFailed: 'ピン留め状態の変更に失敗しました', toggleFailed: 'スキルの切り替えに失敗しました', source: { builtin: '組み込み', hub: 'Hub', local: 'ローカル', external: '外部', }, }, // プラグイン plugins: { title: 'プラグイン', refresh: '更新', notice: '検出可能な Hermes プラグイン manifest の読み取り専用インベントリです。検出メタデータはプラグインコードを読み込まずに取得します。v1 の管理操作は CLI のままで、変更は新しい Hermes セッションで有効になります。', loadFailed: 'プラグインの読み込みに失敗しました', commandCopied: 'コマンドをコピーしました', searchPlaceholder: 'key、名前、説明、パスを検索...', source: 'ソース', kind: '種類', statusTitle: 'ステータス', configStatus: 'config: {status}', notAvailable: 'n/a', copyCommand: 'コマンドをコピー', managedElsewhere: '他で管理されています', noMatch: '現在のフィルターに一致するプラグインはありません', enabled: '有効', disabled: '無効', summary: { total: '合計', active: '有効 / 自動', inactive: '非アクティブ', disabled: '無効', providerManaged: 'プロバイダー管理', }, status: { enabled: '有効', 'auto-active': '自動有効', inactive: '非アクティブ', disabled: '無効', 'provider-managed': 'プロバイダー管理', }, statusLabel: { enabled: '設定で有効', 'auto-active': '自動有効', inactive: '非アクティブ', disabled: '無効', 'provider-managed': 'プロバイダー管理', }, configStatuses: { enabled: '有効', disabled: '無効', 'not-enabled': '未有効', auto: '自動', 'provider-managed': 'プロバイダー管理', }, table: { plugin: 'プラグイン', status: 'ステータス', source: 'ソース', kind: '種類', capabilities: '機能', path: 'パス / entrypoint', cli: 'CLI', }, capabilities: { tools: '{count} tools', hooks: '{count} hooks', env: '{count} env', }, metadata: { agentRoot: 'エージェントルート', python: 'Python', scanCwd: 'cwd をスキャン', projectPlugins: 'プロジェクトプラグイン', }, }, // メモリ memory: { title: 'メモリ', refresh: '更新', loadFailed: 'メモリの読み込みに失敗しました', myNotes: 'メモ', noNotes: 'メモはまだありません。', notesPlaceholder: 'メモを入力...', userProfile: 'ユーザープロファイル', noProfile: 'プロファイルはまだありません。', profilePlaceholder: 'プロファイルを入力...', soul: 'ソウル', noSoul: 'ソウル設定はまだありません。', soulPlaceholder: 'ソウル設定を入力...', }, // モデル models: { title: 'モデル', addProvider: 'プロバイダーを追加', providerType: 'プロバイダー種別', preset: 'プリセット', custom: 'カスタム', selectProvider: 'プロバイダーを選択', chooseProvider: 'プロバイダーを選択...', name: '名前', autoGeneratedName: 'ベース URL から自動生成', baseUrl: 'ベース URL', region: 'リージョン', regionIntl: 'インターナショナル', regionCn: '中国本土', baseUrlPlaceholder: '例: https://api.example.com/v1', apiKey: 'API キー', apiKeyPlaceholder: 'sk-...', defaultModel: 'デフォルトモデル', selectOrInput: 'モデルを選択または入力...', selectModel: 'モデルを選択...', providerAdded: 'プロバイダーを追加しました', providerDeleted: 'プロバイダーを削除しました', deleteProvider: 'プロバイダーを削除', deleteConfirm: '「{name}」を削除しますか?', codexLoginTitle: 'OpenAI Codex ログイン', codexWaiting: '認証ページで以下のコードを入力してログインしてください:', codexCopyCode: 'コードをコピーしました', codexOpenLink: '認証ページを開く', codexApproved: 'ログイン成功', codexExpired: '認証の有効期限が切れました。もう一度お試しください。', nousLoginTitle: 'Nous Portal ログイン', nousWaiting: '認証ページでこのコードを入力してください:', nousCopyCode: 'コードをコピーしました', nousOpenLink: '認証ページを開く', nousApproved: 'ログイン成功', nousDenied: '認証が拒否されました', nousExpired: '認証の有効期限が切れました', copilotLoginTitle: 'GitHub Copilot ログイン', copilotWaiting: 'GitHub を開き、以下のデバイスコードを入力して認証してください。承認後、ウィンドウは自動的に閉じます。', copilotCopyCode: 'コードをコピーしました', copilotOpenLink: 'GitHub 認証ページを開く', copilotApproved: 'ログインに成功しました!', copilotDenied: '認証が拒否されました。', copilotExpired: '認証リンクの有効期限が切れました。もう一度お試しください。', copilotAddDetectedTitle: 'GitHub Copilot を検出しました', copilotAddDetected: 'このマシンで GitHub Copilot OAuth トークンを検出しました。「追加」をクリックして Hermes で Copilot を有効化します。', copilotAddSourceEnv: 'ソース: ~/.hermes/.env (COPILOT_GITHUB_TOKEN)', copilotAddSourceGhCli: 'ソース: gh CLI (gh auth token)', copilotAddSourceAppsJson: 'ソース: VS Code Copilot 拡張機能 (apps.json)', copilotDeleteHintEnv: 'この操作で ~/.hermes/.env の COPILOT_GITHUB_TOKEN を消去します。他のツールには影響しません。', copilotDeleteHintGhCli: 'Copilot は Hermes 上で非表示になります。gh CLI のログインには影響しません — `gh auth status` は引き続きログイン状態を表示します。', copilotDeleteHintAppsJson: 'Copilot は Hermes 上で非表示になります。VS Code Copilot 拡張機能のログインには影響しません。', customBadge: 'カスタム', previewBadge: 'プレビュー', disabledBadge: '利用不可', disabledTooltip: "このモデルは現在のアカウントでは利用できません。", customModelPlaceholder: '未掲載のモデル ID', customModelHint: 'プロバイダーは対応しているが API が返さないモデル用です。表示名の変更ではありません。Enter で読み込み。', noProviders: 'プロバイダーがありません。カスタムプロバイダーを追加して始めましょう。', clearVisibleModels: '選択をクリア', currentDefault: '現在のデフォルト', defaultShort: 'デフォルト', builtIn: '組み込み', customType: 'カスタム', provider: 'プロバイダー', contextLength: 'コンテキスト長', contextLengthPlaceholder: '例: 200000(任意)', local: 'ローカル ({host})', selectProviderRequired: 'プロバイダーを選択してください', baseUrlRequired: 'ベース URL は必須です', apiKeyRequired: 'API キーは必須です', modelRequired: 'デフォルトモデルは必須です', enterBaseUrl: 'ベース URL を先に入力してください', unexpectedFormat: '予期しないレスポンス形式です', foundModels: '{count} 個のモデルが見つかりました', fetchFailed: 'モデルの取得に失敗しました', xaiWaiting: '開いた xAI ページで認可を完了してください。承認後、このウィンドウは自動で閉じます。', xaiOpenLink: 'xAI 認可ページを開く', xaiLoginTitle: 'xAI Grok OAuth ログイン', xaiExpired: '認可リンクの期限が切れました。再試行してください。', xaiCopyLink: '認可リンクをコピー', xaiApproved: 'ログイン成功!', visibilitySelectOne: '少なくとも 1 つの表示モデルを残してください', visibilitySaved: '表示モデルを保存しました', visibilitySaveFailed: '表示モデルの保存に失敗しました', visibilityHint: 'Web UI のモデル選択とモデルページの表示だけに影響します。Hermes CLI の provider/model 設定は変更されず、実際の呼び出しは元のモデル ID を使います。', showAllModels: 'すべてのモデルを表示', searchPlaceholder: 'モデルを検索...', removeCustomModel: 'この一覧外モデルを削除', more: '件追加', models: 'モデル一覧', manageVisibleModelsFor: '{name} の表示モデルを管理', manageVisibleModels: '表示モデルを管理', getApiKey: 'API Key を取得', count: '個のモデル', aliasUseOriginal: '元の ID に戻す', aliasTitleFor: '{model} の表示名', aliasTitle: 'モデル表示名', aliasSaveFailed: '表示名の保存に失敗しました', aliasPlaceholder: '空欄の場合は元のモデル ID を使用', aliasManageFor: '{provider} の表示名', aliasManage: '表示名', aliasHint: 'Web UI の表示名だけを変更します。Hermes には元のモデル ID が送信されます。', aliasEdit: '名前変更', aliasCanonical: '元の ID: {model}', }, // プロファイル profiles: { title: 'プロファイル', create: 'プロファイルを作成', import: 'インポート', export: 'エクスポート', rename: '名前変更', delete: '削除', switchTo: 'Hermes Profile を切り替え', switchConfirm: '`hermes profile use {name}` を実行し、Hermes CLI の active profile を切り替えます。続行しますか?', switchSuccess: 'Hermes active profile を「{name}」に切り替えました', switchFailed: 'Hermes Profile の切り替えに失敗しました。ゲートウェイの手動再起動が必要な場合があります。', createSuccess: 'プロファイル「{name}」を作成しました', createFailed: 'プロファイルの作成に失敗しました', renameSuccess: 'プロファイル名を変更しました', renameFailed: 'プロファイル名の変更に失敗しました', deleteConfirm: 'プロファイル「{name}」を削除しますか?', deleteSuccess: 'プロファイルを削除しました', deleteFailed: 'プロファイルの削除に失敗しました', exportSuccess: 'プロファイルをエクスポートしました', exportFailed: 'プロファイルのエクスポートに失敗しました', importSuccess: 'プロファイルをインポートしました', importFailed: 'プロファイルのインポートに失敗しました', importSelectFile: 'アーカイブファイルを選択', importInvalidFile: '有効なアーカイブファイルを選択してください (.tar.gz, .tgz, .gz, .zip)', name: 'プロファイル名', namePlaceholder: '英数字、ハイフンのみ', nameValidation: 'プロファイル名には小文字、数字、アンダースコア、ハイフンのみ使用できます', newName: '新しい名前', newNamePlaceholder: '新しい名前を入力', cloneFromCurrent: '現在のプロファイルから複製', cloneCleanupNotice: '複製時、独占型プラットフォーム認証情報(Weixin / Telegram / Slack など)は自動的にスキップされ、ソースプロファイルとの競合を回避します', cloneStrippedCredentials: '{count} 件の独占認証情報を削除しました:{list}', cloneDisabledPlatforms: '{count} 個のプラットフォームを無効化しました:{list}', cloneStrippedConfigCredentials: 'config.yaml から {count} 件の埋め込み認証情報を削除しました:{list}', archivePath: 'アーカイブパス', archivePathPlaceholder: 'アーカイブファイルのサーバーパス', importName: 'プロファイル名(任意)', importNamePlaceholder: '空白の場合はアーカイブ名を使用', active: 'アクティブ', model: 'モデル', gateway: 'ゲートウェイ', alias: 'エイリアス', provider: 'プロバイダー', path: 'パス', skills: 'スキル', hasEnv: '.env あり', hasSoulMd: 'soul.md あり', noProfiles: 'プロファイルがありません。作成して始めましょう。', avatar: { title: 'カスタムアバター', customize: 'アバター', upload: '画像をアップロード', random: 'ランダム生成', reset: 'デフォルトに戻す', hint: 'PNG、JPEG、WebP 対応、最大 1MB', invalidType: 'PNG、JPEG、WebP 画像を選択してください', tooLarge: 'アバター画像は 1MB 以下にしてください', saveSuccess: 'アバターを保存しました', saveFailed: 'アバターの保存に失敗しました', resetSuccess: 'デフォルトアバターに戻しました', resetFailed: 'デフォルトアバターへの復元に失敗しました', }, runtime: { activeProfile: '現在: {name}', bridgeWorker: 'Bridge 状態', gateway: 'ゲートウェイ', active: 'アクティブ', activeTag: '現在', idle: '待機中', running: '実行中', stopped: '停止中', restartGateway: 'Gateway を再起動', restartProfile: 'プロファイルを再起動', switchProfile: 'フロントエンドプロファイルを切り替え', gatewayRestarted: 'Gateway を再起動しました: {name}', gatewayRestartFailed: 'Gateway の再起動に失敗しました', profileRestarted: 'プロファイルを再起動しました: {name}', profileRestartFailed: 'プロファイルの再起動に失敗しました', }, }, // ログ logs: { title: 'ログ', all: 'すべて', searchPlaceholder: '検索...', refresh: '更新', noEntries: 'ログエントリがありません', }, // 設定 settings: { title: '設定', saved: '保存しました', saveFailed: '保存に失敗しました', tabs: { display: '表示', account: '現在のアカウント', users: 'アカウント管理', agent: 'エージェント', memory: 'メモリ', compression: '圧縮', session: 'セッション', privacy: 'プライバシー', apiServer: 'API サーバー', models: 'モデル', voice: '音声', }, display: { streaming: 'ストリームレスポンス', streamingHint: 'AI の返信をリアルタイムで表示', compact: 'コンパクトモード', compactHint: 'メッセージの間隔を狭める', showReasoning: '推論過程を表示', showReasoningHint: 'モデルの思考プロセスを表示', showCost: 'コストを表示', showCostHint: '返信にトークン使用量を表示', inlineDiffs: 'インライン差分', inlineDiffsHint: 'コード変更をインラインで表示', bellOnComplete: '完了通知音', bellOnCompleteHint: 'AI の応答完了時に通知音を再生', busyInputMode: '処理中入力モード', busyInputModeHint: 'AI 処理中でも入力を許可', theme: 'テーマ', themeHint: 'ライト、ダーク、またはシステム設定に従う', themeLight: 'ライト', themeDark: 'ダーク', themeSystem: 'システム', }, agent: { maxTurns: '最大ターン数', maxTurnsHint: '1回の会話の最大インタラクション回数', gatewayTimeout: 'ゲートウェイタイムアウト', gatewayTimeoutHint: 'リクエストタイムアウト(秒)', restartDrainTimeout: '再起動ドレインタイムアウト', restartDrainTimeoutHint: '再起動前のドレインタイムアウト(秒)', toolEnforcement: 'ツール実行ポリシー', toolEnforcementHint: 'ツール呼び出しの実行モードを制御', auto: '自動', always: '常に', never: 'しない', }, memory: { enabled: 'メモリを有効化', enabledHint: 'AI に会話コンテキストを記憶させる', userProfile: 'ユーザープロファイル', userProfileHint: 'AI にユーザーの設定を記憶させる', charLimit: 'メモリ文字数上限', charLimitHint: 'MEMORY.md の最大文字数', userCharLimit: 'ユーザープロファイル文字数上限', userCharLimitHint: 'USER.md の最大文字数', }, compression: { enabled: '圧縮を有効化', enabledHint: '長いチャット履歴がモデルコンテキストを超える前に自動圧縮', threshold: '圧縮しきい値', thresholdHint: '推定トークンがこのコンテキスト比率を超えたら圧縮を開始', targetRatio: '目標比率', targetRatioHint: '圧縮後の履歴サイズをコンテキスト比率で指定', protectLastN: '直近メッセージを保護', protectLastNHint: 'この数の最新メッセージは圧縮しない', protectFirstN: '先頭メッセージを保護', protectFirstNHint: 'この数の最初のメッセージは圧縮しない', }, session: { mode: 'リセットモード', modeHint: 'セッションリセットのトリガー条件', modeBoth: 'アイドル + スケジュール', modeIdle: 'アイドルのみ', modeDaily: 'スケジュールのみ', modeNone: '無し(手動のみ)', idleMinutes: 'アイドルタイムアウト', idleMinutesHint: '自動リセットまでの待機時間(分)', atHour: 'スケジュールリセット時刻', humanOnly: '人間のセッションのみ表示', humanOnlyHint: 'サブエージェントやセッション監視ノイズを既定で隠します', liveMonitorHumanOnly: 'ライブモニター: 人間のセッションのみ表示', liveMonitorHumanOnlyHint: 'ライブモニターでサブエージェントやセッション監視ノイズを既定で隠します', atHourHint: '毎日指定時刻にセッションをリセット', requireAuth: 'セッション認証', requireAuthHint: 'セッション操作に認証を必要とする', }, privacy: { redactPii: '個人情報のマスキング', redactPiiHint: '機密情報を自動検出して隠す(パスワード、キーなど)', }, apiServer: { enable: '有効化', enableHint: 'API サーバーを有効にする', host: 'ホスト', hostHint: 'リッスンアドレス', port: 'ポート', portHint: 'リッスンポート', key: 'キー', keyHint: 'API アクセスキー', cors: 'CORS 許可元', corsHint: '許可するクロスオリジン', }, voice: { ttsProvider: 'TTS プロバイダー', ttsProviderHint: 'メッセージ読み上げに使用する音声合成エンジンを選択', providerWebSpeech: 'WebSpeech API(ブラウザ)', providerOpenai: 'OpenAI TTS', providerCustom: 'カスタムエンドポイント(OpenAI 互換)', providerEdge: 'Edge TTS(無料、API Key 不要)', // WebSpeech webspeechVoice: '音声', webspeechVoiceHint: 'ブラウザまたは OS から音声を選択', webspeechVoicePlaceholder: '自動(デフォルト音声)', // OpenAI openaiKey: 'API キー', openaiKeyHint: 'TTS アクセス権のある OpenAI API キー', openaiUrl: 'API ベース URL', openaiUrlHint: '例: https://api.openai.com/v1/audio/speech', openaiModel: 'モデル', openaiModelHint: 'tts-1(高速)/ tts-1-hd(高音質)', openaiVoice: '音声', openaiVoiceHint: '合成に使用する音色', // Custom endpoint customHint: 'OpenAI 互換の TTS API を使用可能 — GPT-SoVITS、CosyVoice などに対応', customUrl: 'API URL', customUrlHint: 'TTS サービスのベース URL', customUrlPlaceholder: 'ローカルアダプターで設定したアドレス(例:http://127.0.0.1:9880)', customApiKey: 'API キー(オプション)', customApiKeyHint: '一部のカスタムエンドポイントは認証が必要', customApiKeyPlaceholder: '不要な場合は空欄', // Edge TTS edgeHint: 'Microsoft Edge TTS を搭載(node-edge-tts)。', edgeUrl: 'アダプター URL', edgeUrlHint: 'Edge TTS アダプターのアドレス(例:http://127.0.0.1:9882)', edgeUrlPlaceholder: 'http://127.0.0.1:9882', edgeVoice: '音声', edgeVoiceHint: '音声合成に使用する音色を選択', edgeRate: '速度', edgeRateHint: '音声の速度を調整(0.5~2.0倍)', edgePitch: 'ピッチ', edgePitchHint: '音声のピッチを調整(-20~+20 Hz)', // Test testTitle: '音声テスト', testText: 'テストテキスト', testTextPlaceholder: 'テストするテキストを入力...', testTextDefault: 'こんにちは、これは音声テストです。', testButton: 'テスト', testButtonPlaying: '再生中...', testFailed: 'テスト失敗:{error}', // MiMo TTS providerMimo: 'MiMo TTS', mimoHint: 'Xiaomi MiMo TTS — プリセット音声、音声デザイン、音声クローンの3つのモードをサポート', mimoApiKey: 'API Key', mimoApiKeyHint: 'platform.xiaomimimo.com で取得', mimoApiKeyPlaceholder: 'MiMo API Key', mimoBaseUrl: 'Base URL', mimoBaseUrlHint: 'MiMo API エンドポイントURL', mimoModel: 'モデル', mimoModelHint: '音声合成モデルを選択', mimoModelPreset: 'プリセット音声', mimoModelVoiceDesign: '音声デザイン', mimoModelVoiceClone: '音声クローン', mimoVoice: '音声', mimoVoiceHint: 'プリセット音声を選択', mimoVoiceDesignPrompt: '音声の説明', mimoVoiceDesignPromptHint: '希望する音声の特徴を説明してください', mimoVoiceDesignPromptPlaceholder: '例:温かみのある若い女性の声、少しゆっくり、磁力的なトーン', mimoCloneAudio: '音声アップロード', mimoCloneAudioHint: '音声クローン用の音声サンプルをアップロード(mp3/wav、最大10MB)', mimoCloneAudioUpload: 'ファイルを選択', mimoCloneAudioClear: 'クリア', mimoStylePrompt: 'スタイルプロンプト', mimoStylePromptHint: 'オプション — 自然言語で話すスタイルを説明', mimoStylePromptPlaceholder: '例:明るく弾むようなトーン、速めのテンポ', }, lockedIps: { title: 'ロック済みIP管理', count: '{count}件ロック中', empty: 'ロック済みIPなし', unlock: 'ロック解除', unlockAll: '全て解除', unlockAllConfirm: '全てのロック済みIPを解除しますか?', unlocked: 'IPをロック解除しました', allUnlocked: '{count}件のIPをロック解除しました', }, models: { apiKey: 'API Key', apiKeyPlaceholder: 'API Key を入力', noProviders: '設定済みプロバイダーがありません', save: '保存', saveFailed: '保存に失敗しました', saved: '保存しました', }, }, // プラットフォームチャンネル設定 platform: { requireMention: "メンションが必要", requireMentionGroup: "グループで応答するには {'@'}メンションが必要", requireMentionChannel: "チャンネルで応答するには {'@'}メンションが必要", requireMentionRoom: "ルームで応答するには {'@'}メンションが必要", reactions: 'リアクション', reactionsHint: 'メッセージに絵文字でリアクションする', freeResponseChats: '自由応答チャット', freeResponseChatsHint: "{'@'}メンションなしで応答するチャット ID(カンマ区切り)", freeResponseChannels: '自由応答チャンネル', freeResponseChannelsHint: "{'@'}メンションなしで応答するチャンネル ID(カンマ区切り)", freeResponseRooms: '自由応答ルーム', freeResponseRoomsHint: "{'@'}メンションなしで応答するルーム ID(カンマ区切り)", mentionPatterns: 'カスタムメンションパターン', mentionPatternsHint: '追加のトリガーパターン', autoThread: '自動スレッド', autoThreadHint: "{'@'}メンション後に自動で返信スレッドを作成", autoThreadHintRoom: 'ルームで自動的に返信スレッドを作成', dmMentionThreads: 'DM メンションスレッド', dmMentionThreadsHint: 'DM 内のメンションにスレッド返信を使用', allowBots: 'ボットメッセージを許可', allowBotsHint: '他のボットからのメッセージに応答する', allowedChannels: '許可チャンネル', allowedChannelsHint: 'ホワイトリストのチャンネル ID(カンマ区切り)', ignoredChannels: '除外チャンネル', ignoredChannelsHint: 'ボットが応答しないチャンネル ID(カンマ区切り)', noThreadChannels: 'スレッドなしチャンネル', noThreadChannelsHint: 'スレッドなしで応答するチャンネル ID(カンマ区切り)', exclusiveTokenWarning: 'このプラットフォームは排他的トークンロックを使用します。各プロファイルは他のプロファイルと競合しないように、異なる ID トークンを使用する必要があります。', botToken: 'ボットトークン', botTokenHint: '開発者ポータルから取得したボットトークン', accessToken: 'アクセストークン', accessTokenHint: 'Matrix アクセストークン', homeserver: 'Homeserver URL', homeserverHint: 'Matrix ホームサーバー URL', appId: 'App ID', appIdHint: 'Feishu App ID', appSecret: 'App Secret', appSecretHint: 'Feishu App Secret', clientId: 'Client ID', clientIdHint: 'DingTalk Client ID', clientSecret: 'Client Secret', clientSecretHint: 'DingTalk Client Secret', botId: 'Bot ID', botIdHint: 'WeCom Bot ID', wecomSecretHint: 'WeCom Bot Secret', waEnabled: 'WhatsApp を有効化', waEnabledHint: 'QR コードペアリングで WhatsApp を有効にする', weixinToken: 'Weixin トークン', weixinTokenHint: 'weixin CLI の QR ログインから取得 (hermes weixin)', accountId: 'Account ID', accountIdHint: 'Weixin アカウント ID', qrLogin: 'QR ログイン', qrRelogin: '再ログイン', qrFetching: 'QR コードを取得中...', qrScanHint: 'WeChat でスキャンしてログイン', qrScanedHint: 'スキャン済み、スマートフォンで確認してください...', qqSandboxHint: 'サンドボックス環境を有効化(テスト用)', qqSandbox: 'サンドボックスモード', qqQrScanHint: 'QQ で上の QR コードをスキャンするか、スマホでリンクを開いて連携を完了します', qqMarkdownHint: 'Markdown 形式メッセージを有効化(一部クライアントでは未対応の場合があります)', qqMarkdown: 'Markdown サポート', qqAppSecretHint: 'QQ Open Platform Bot App Secret', qqAppSecret: 'App Secret', qqAppIdHint: 'QQ Open Platform Bot App ID', qqAppId: 'App ID', allowedUsersHint: 'ユーザー ID または OpenID の許可リスト。カンマ区切り', allowedUsers: '許可ユーザー', allowAllUsersHint: '任意のユーザーからのメッセージを許可します。オフの場合は許可リストを使用します', allowAllUsers: 'すべてのユーザーを許可', }, // 言語 language: { label: '言語', zh: '中文', en: 'English', ja: '日本語', }, // ターミナル terminal: { sessions: 'セッション', newTab: '新しいターミナル', closeSession: 'このセッションを閉じますか?', sessionExited: '終了しました', processExited: 'プロセスが終了しました(コード {code})', noSessions: 'ターミナルセッションがありません', connectionFailed: 'ターミナルに接続できませんでした', connectionError: '接続エラー', connectionClosed: '接続が閉じられました', }, // 使用統計 usage: { title: '使用統計', refresh: '更新', totalTokens: '総トークン数', inputTokens: '入力', outputTokens: '出力', totalSessions: '総セッション数', avgPerDay: '1日平均 ~{n}', estimatedCost: '推定コスト', cacheHitRate: 'キャッシュヒット率', modelBreakdown: 'モデル別内訳', dailyTrend: '日別使用量', date: '日付', tokens: 'トークン', cache: 'キャッシュ', cacheRead: 'キャッシュ読み取り', cacheWrite: 'キャッシュ書き込み', sessions: 'セッション', cost: 'コスト', noData: '使用データがありません', }, skillsUsage: { title: 'スキル使用状況', subtitle: 'Hermes セッションでのスキル読み込みと編集を追跡します', refresh: '更新', periodSelector: 'スキル使用期間', periodLabel: '{days}日', summary: '概要', totalActions: '操作数', loads: '読み込み', edits: '編集', distinctSkills: 'スキル数', topSkills: '上位', dailyTrend: '日別', periodSummary: '過去 {days} 日', skill: 'スキル', share: '割合', lastUsed: '最終', noData: 'スキル使用データはありません', loadFailed: 'スキル使用状況の読み込みに失敗しました', otherSkills: 'その他', }, // 更新履歴 changelog: { new_0_5_22_1: 'Hermes セッション一覧 API が Web UI ローカルストアではなく Profile データベースを読むよう修正', new_0_5_23_1: 'Bridge 専用チャットスラッシュコマンドとローカライズ済み候補を追加', new_0_5_23_2: 'モデルコンテキスト、使用量、圧縮を汚さずセッション再生用のコマンド履歴を永続化', new_0_5_23_3: '認証情報が Profile 間で漏れないよう gateway Profile 環境変数を分離', new_0_5_23_4: '起動競合を避けるため gateway 割り当て時に Web UI ポートを予約', new_0_5_23_5: 'self-update restart で成功した helper 終了を失敗として報告しないよう修正', new_0_5_24_1: 'Bridge チャットを API Server のマルチモーダル入力、システムプロンプト、workspace コンテキスト処理に合わせる', new_0_5_25_1: 'グループチャットルームのリセットと複製アクションを追加', new_0_5_25_2: 'カスタムデプロイ構成向けに Web UI 状態ディレクトリを設定可能に変更', new_0_5_25_3: '音声設定に MiMo TTS プロバイダーを追加', new_0_5_25_4: 'ブラウザ CORS エラーを避けるためカスタムプロバイダーのモデル一覧をバックエンド経由で取得', new_0_5_25_5: 'Bridge セッションのツール承認フローを修正', new_0_5_25_6: 'カスタムメディア/ファイル指示を保持するため Bridge プロンプトから強制 CLI プラットフォームヒントを削除', new_0_5_25_7: 'ユーザーメッセージ履歴で base64 画像コンテンツを正しく表示', new_0_5_25_8: 'Playwright ブラウザテスト、チャットストリーミング契約カバレッジ、プロバイダーモデルカバレッジ、カバレッジ基準を追加', new_0_5_26_1: 'チャット履歴とレンダリング済みメッセージで Windows およびローカル Markdown メディアパスをサポート', new_0_5_26_2: '空の assistant 履歴をフィルタし、新しい実行開始時に古い圧縮状態をクリア', new_0_5_26_3: '同時書き込みによる破損を減らすため config と Profile 更新にファイルロック書き込みを追加', new_0_5_26_4: 'QQBot と DingTalk チャンネル設定を追加', new_0_5_26_5: 'CLI ポート検出をポータブル化し、モバイル端末ドロワーのサイズを改善', new_0_5_26_6: 'Bridge Profile 環境を分離し、Python 環境をまたぐ Hermes plugin 検出を修正', new_0_5_26_7: '停止中 gateway 状態に Web UI 診断説明を追加し、ログ読み込み状態を安定化', new_0_5_26_8: 'セッションリセットモード、カスタムプロバイダー Base URL、動的配信先を修正', new_0_5_26_9: 'チャット入力バーにローカル保存の tool-call trace 表示切替を追加', new_0_5_26_10: 'ソース checkout がない場合の Hermes Agent パッケージインストールをサポート', new_0_5_26_11: 'SuperGrok サブスクユーザー向け xAI Grok OAuth ログインを追加し Grok モデルプリセットを更新', new_0_5_26_12: 'ブラウザ、チャットストリーミング、プロバイダー、gateway、config、plugin、Bridge のテストカバレッジを拡張', new_0_5_27_1: 'Bridge チャットにセッション単位のモデル設定を追加し、各セッションで provider と model を独立保存', new_0_5_27_2: 'Bridge セッションを右クリックして「モデル設定」からそのセッションのモデルを切り替え可能', new_0_5_27_3: '実行時にセッションモデルを検証し、保存済みモデルが使えない場合は現在のデフォルトモデルにフォールバック', new_0_5_27_4: 'コンテキスト圧縮はデフォルトで現在の Profile のデフォルト選択モデルに従う', new_0_5_30_1: 'Bridge チャットが構造化履歴を保持し、tool 履歴のテキスト化による応答なしや tool 実行スキップを修正', new_0_5_30_2: '複数 Agent のグループチャット mention ルーティングを改善し、配信前に各 Agent 自身の @ mention を削除し、更新後も表示名を保持', new_0_5_30_3: 'モデルページ、チャットモデルドロップダウン、セッションモデル選択を active Profile にスコープし、デフォルト表示を正確化', new_0_5_30_4: 'Gateway 管理を簡素化:独立 Gateway ページを削除し、各 Profile の平台設定を確認して必要な gateway を起動、軽量 runner で起動/再起動を管理', new_0_5_30_5: 'Docker、Termux、Windows での gateway 起動を改善し、runtime lock、ポート競合、バックグラウンド実行、再起動をサポート', new_0_5_30_6: 'Windows 互換性を強化し、パス検出、ファイルダウンロード、job/update サブプロセスで端末ウィンドウが点滅しないよう修正', new_0_5_30_7: 'config 書き込みと provider preset を修正:.env キー検証、FUN-Codex の Responses API 経由、Z.AI/GLM モデル一覧更新', new_0_5_30_8: '折りたたみサイドバー、短いグループラベル、サイドバー区切り、会話アウトラインなど frontend の細部を調整', new_0_5_30_9: 'コンテキスト圧縮は Profile 圧縮設定に従い、古いスナップショットでは全文再圧縮せず以前の要約と安全な末尾を再利用', new_0_5_31_1: 'Bridge broker の再起動を強化し、グループチャット最終ストリーム表示を修正し、{\'@\'}all ルーティングを追加', new_0_5_31_2: 'ファイルマネージャーで絶対パスをコピー可能にし、モバイルセッションドロワーがチャット内容の背面に回らないよう修正', new_0_5_31_3: 'Profile セレクターにアバター、カスタムアバターアップロード、実行状態モーダル、gateway/Profile 再起動操作を追加', new_0_5_31_4: 'Profile アバターを単聊、グループチャット、折りたたみサイドバーに反映し、Web UI メタデータ保存と Windows 安全パスに対応', new_0_5_31_5: 'Docker、Termux、Windows の gateway 検出と再起動確認を改善し、managed gateway の生存判定に gateway_state/gateway.pid を使用', new_0_5_31_6: 'APIKEY.FUN 生画像メディア endpoint と内蔵 apikey-image-gen skill を追加し、active Profile の fun-codex provider で文生図、図生図、画像編集に対応', new_0_5_33_1: '単聊とグループチャットの実行失敗や Socket エラーを赤い Agent メッセージとしてメッセージ一覧に保持し、一瞬で消えないよう修正', new_0_5_33_2: 'セッション検索を選択中 Profile に絞り込めるようにし、Profile 未選択時は全 Profile を検索', new_0_5_33_3: 'Skills ページに日本語以外では英語へフォールバックする中英推薦ドキュメントを追加し、選択済み Skill の再クリックで選択解除可能に', new_0_5_33_4: '未使用の changelog ローカライズ項目を削除し、frontend i18n サイズを削減', new_0_5_33_5: '中国語 Windows 環境で netstat 出力のエンコード解析に失敗し agent bridge が起動しない問題を修正', new_0_5_33_6: 'Nous Portal の preset モデル一覧を公開 catalog と Portal 推奨モデルに合わせて更新', new_0_5_33_7: 'Profile 一覧と実行状態は Profile 名をディレクトリから、既定モデルを config から読むようにし、CLI 表の列幅による解析ずれを回避', new_0_5_34_1: 'セッション/グループチャット保存時にマルチモーダル tool 結果を正規化し、base64 画像がリプレイに混ざらないよう修正', new_0_5_34_2: 'カスタム Hermes モデルを backend 管理設定に永続化し、モデル追加/削除 endpoint を追加', new_0_5_34_3: 'Bridge 実行完了後の最終コンテキスト使用量と tool 状態更新を正確化', new_0_5_34_4: 'Kanban のボード絞り込み、担当者表示、カード操作、タスク詳細処理を改善', new_0_5_34_5: '固定 prompt/tool コンテキストをキャッシュし、完全コンテキスト token 合計を表示するよう圧縮使用量を修正', new_0_5_34_6: 'グループチャット Agent ごとに固定コンテキストをキャッシュし、実際に圧縮が始まった時だけ進捗を表示', new_0_5_34_7: 'Web UI 内蔵 Skills をすべての Profile に同期注入し、ログに対象 Profile を記録', new_0_5_34_8: 'Windows で Kanban 機能が異常な場合は、最新の Kanban データベース移行修正を取得するため Hermes をアップグレードしてください', new_0_5_35_1: 'Bridge セッションは異なる session 間で並行実行でき、同一 session の実行はメッセージ順序を守るため直列化されます', new_0_5_35_2: 'Performance Monitor ページを追加し、システム CPU/メモリ、Web UI、Bridge Broker、Workers、アクティブセッション状態を確認できます', new_0_5_35_3: 'Worker ごとの CPU、メモリ、Profile、セッション数、実行状態を表示するリソース統計を追加', new_0_5_35_4: 'Bridge worker のライフサイクル cleanup を改善し、Broker 終了時や親プロセス終了時に worker を回収して残留 Python プロセスを減らします', new_0_5_35_5: 'macOS、Windows、Linux、Docker、Termux 向けの fallback を追加し、監視リソース収集のクロスプラットフォーム互換性を強化', new_0_5_35_6: 'Agent 初期化中の worker request で Performance Monitor がブロックされにくくなり、Windows の request timed out を軽減', new_0_5_35_7: 'Chat Markdown にテキスト内容のインラインプレビューを追加し、download アイコンはプレビュー drawer を開かず直接ダウンロードします', new_0_5_35_8: '内容表示 drawer を改善し、モバイルの閉じる操作と全幅表示、デスクトップ 800px 幅、テキスト/Markdown 背景の統一に対応', new_0_6_0_1: 'アカウント別・Profile 別の管理により、セッション、モデル、使用量、Kanban、ジョブ、アップロード、メディア、関連 Hermes API を一貫して保護します', new_0_6_0_2: '内蔵メディア Skills は生成されたサーバートークンをメディア endpoint のみに使用し、要求された Profile から fun-codex/xAI 認証情報を解決します', new_0_6_0_3: '単一チャットとグループチャットは現在の Hermes Profile を run instructions に注入し、Skills が X-Hermes-Profile を送れるようにします', new_0_6_0_4: 'delegate_task の subagent 進行状況をチャット UI に stream 表示し、開始、tool、進行、完了を確認できます', new_0_6_0_5: '停止または中断時に一時イベントをクリアし、古い abort 状態が次のチャットに漏れないようにしました', new_0_6_0_6: 'アカウント管理、既定の認証情報、アカウント/Profile 管理、アップロード/ダウンロード、内蔵メディア Skills のドキュメントとサイト文言を更新', new_0_6_0_7: 'ログイン IP ロックのクリアと既定の admin / 123456 ログインをリセットする CLI メンテナンスコマンドを追加', new_0_6_0_8: '0.6.0 は Web UI の単一ユーザー版とマルチユーザー版の境界です。マルチユーザー機能に問題がある場合は issue を送信し、必要に応じて 0.5.35 の単一ユーザー版へ戻してください', }, // ファイル files: { title: 'ファイル', tree: 'ディレクトリツリー', list: 'ファイル一覧', breadcrumbRoot: 'ホーム', newFile: '新規ファイル', newFolder: '新規フォルダ', upload: 'アップロード', refresh: '更新', open: '開く', edit: '編集', preview: 'プレビュー', download: 'ダウンロード', copyPath: 'パスをコピー', rename: '名前の変更', delete: '削除', name: '名前', size: 'サイズ', modified: '更新日時', actions: '操作', emptyDir: '空のディレクトリ', loading: '読み込み中...', confirmDelete: '「{name}」を削除してもよろしいですか?', confirmDeleteDir: 'ディレクトリ「{name}」とそのすべての内容を削除してもよろしいですか?', deleteFailed: '削除に失敗しました', deleted: '削除しました', renameTo: '名前を変更', newFileName: 'ファイル名', newFolderName: 'フォルダ名', created: '作成しました', createFailed: '作成に失敗しました', renamed: '名前を変更しました', renameFailed: '名前の変更に失敗しました', uploadSuccess: '{count} 個のファイルをアップロードしました', uploadFailed: 'アップロードに失敗しました', saveFailed: '保存に失敗しました', saved: '保存しました', unsavedChanges: '未保存の変更があります。破棄しますか?', pathCopied: 'パスをコピーしました', fileTooLarge: 'ファイルが大きすぎます(最大10MB)', permissionDenied: '保護されたファイルは変更できません', notFound: 'ファイルまたはディレクトリが見つかりません', backendError: 'ファイル操作に失敗しました', dragDropHint: 'ここにファイルをドラッグしてアップロード', closeEditor: 'エディタを閉じる', closePreview: '閉じる', saveFile: '保存', fileTree: 'ファイルツリー', }, // グループチャット groupChat: { title: 'グループチャット', createRoom: 'ルームを作成', joinByCode: 'コードで参加', roomName: 'ルーム名', roomNamePlaceholder: 'ルーム名を入力', inviteCode: '招待コード', autoGenerate: '自動生成', noRooms: 'ルームがありません', selectOrCreate: 'ルームを選択または作成してチャットを開始', agents: 'エージェント', addAgent: 'エージェントを追加', selectProfile: 'プロファイルを選択', agentAdded: 'エージェントが追加されました', agentAlreadyInRoom: 'このエージェントは既にルームにいます', agentAddFailedCount: '{count} 件のエージェントを追加できませんでした: {details}', noAgents: 'このルームにエージェントはいません', members: 'メンバー', roomCreated: 'ルームが作成されました', roomDeleted: 'ルームを削除しました', roomCloned: 'ルームを複製しました', cloneRoom: 'ルームを複製', copyRoomLink: 'ルームリンクをコピー', deleteRoomConfirm: 'このルームを削除しますか?', clearContext: 'コンテキストを削除', clearContextConfirm: 'このルームのコンテキストを削除しますか?メッセージと圧縮スナップショットは削除されますが、エージェントとメンバーは残ります。', contextCleared: 'コンテキストを削除しました', you: 'あなた', joined: 'ルームに参加しました', joinFailed: 'ルームへの参加に失敗しました', inputPlaceholder: 'メッセージを入力... (Enterで送信)', enterCode: '招待コードを入力', yourName: 'あなたの名前', yourNamePlaceholder: '表示名を入力', yourDescription: '自己紹介(任意)', yourDescriptionPlaceholder: '自分について教えてください...', agentName: 'エージェント名', agentNamePlaceholder: 'カスタム名(空欄ならプロファイル名)', agentDesc: 'エージェントの説明', agentDescPlaceholder: 'このエージェントの役割を説明...', agentReplying: 'が返信中...', agentCompressing: 'がコンテキストを圧縮中...', compressionSettings: '圧縮設定', triggerTokens: '圧縮トリガートークン数', triggerTokensDesc: 'このトークン数を超えるとコンテキスト圧縮がトリガーされます', maxHistoryTokens: '最大履歴トークン数', maxHistoryTokensDesc: '圧縮後のLLM送信最大トークン数', tailMessageCount: '末尾メッセージ数', tailMessageCountDesc: '圧縮後にそのまま保持する最近のメッセージ数', compressionConfig: '圧縮設定', compressNow: '今すぐ圧縮', compressingInProgress: '圧縮中です、お待ちください', compressionSaved: '圧縮設定を保存しました', }, // ダウンロード download: { downloading: 'ダウンロード中...', downloadFailed: 'ダウンロードに失敗しました', fileNotFound: 'ファイルが見つからないか削除されています', fileTooLarge: 'ファイルが大きすぎます(制限超過)', backendError: 'ファイルの読み取りに失敗しました。リモート環境が利用できない可能性があります', backendTimeout: 'ファイルの読み取りがタイムアウトしました', unsupportedBackend: '現在のターミナルバックエンドはファイルのダウンロードに対応していません', invalidPath: '無効なファイルパス', contentDisplay: '内容表示', download: 'ダウンロード', downloadFile: 'ファイルをダウンロード', }, gateways: { title: 'ゲートウェイ', running: '実行中', stopped: '停止中', started: '開始しました', startFailed: 'Gateway の起動に失敗しました', stopFailed: 'Gateway の停止に失敗しました', }, kanban: { title: 'Kanban ボード', createTask: '新規タスク', noTasks: 'タスクはありません', allStatuses: 'すべての状態', allAssignees: 'すべての担当者', columns: { triage: '振り分け待ち', todo: '未着手', ready: '準備完了', running: '進行中', blocked: 'ブロック中', done: '完了', archived: 'アーカイブ済み', }, card: { assigneeTooltip: '担当者', priority: { low: '低', medium: '中', high: '高', }, timeAgo: { justNow: 'たった今', minutes: '{count}分前', hours: '{count}時間前', days: '{count}日前', }, }, board: { create: '新規ボード', archive: 'ボードをアーカイブ', archiveConfirm: '現在のボードをアーカイブしますか?', archived: 'ボードをアーカイブしました', created: 'ボードを作成しました', slugPlaceholder: 'ボード識別子 例: project-a', namePlaceholder: '表示名(任意)', slugRequired: 'ボード識別子は必須です', }, form: { title: 'タイトル', titlePlaceholder: 'タスクタイトル', titleRequired: 'タイトルは必須です', body: '説明', bodyPlaceholder: 'タスク説明(任意)', assignee: '担当者', selectAssignee: '担当者を選択...', priority: '優先度', selectPriority: '優先度を選択...', }, detail: { status: '状態', priority: '優先度', assignee: '担当者', tenant: 'テナント', createdAt: '作成時刻', startedAt: '開始時刻', completedAt: '完了時刻', comments: 'コメント', events: 'イベント', runs: '実行履歴', artifacts: '成果物', result: '完了結果', highlights: '重要情報', sources: 'データソース', sessions: '関連セッション', sessionMessages: 'セッション記録', noSessions: '関連セッションが見つかりません。', }, action: { title: '操作', assign: '割り当て', assignTo: '割り当て先...', block: 'ブロック', blockReason: 'ブロック理由', unblock: 'ブロック解除', complete: '完了', completeSummary: '完了サマリー(任意)', }, message: { loadFailed: 'タスクの読み込みに失敗しました', taskCreated: 'タスクを作成しました', taskAssigned: 'タスクを割り当てました', taskBlocked: 'タスクをブロックしました', taskUnblocked: 'タスクのブロックを解除しました', taskCompleted: 'タスクを完了しました', }, stats: { total: '合計', tasks: 'タスク数', }, }, }