diff --git a/static/i18n.js b/static/i18n.js index 6dfe42d3..671afbf6 100644 --- a/static/i18n.js +++ b/static/i18n.js @@ -200,7 +200,46 @@ const LOCALES = { empty_dir: '(empty)', upload_failed: 'Upload failed: ', all_uploads_failed: (n) => `All ${n} upload(s) failed`, + session_pin: 'Pin conversation', + session_unpin: 'Unpin conversation', + session_pin_desc: 'Keep this conversation at the top', + session_unpin_desc: 'Remove from pinned', + session_pin_failed: 'Pin failed: ', + session_move_project: 'Move to project', + session_move_project_desc_has: 'Change the project for this conversation', + session_move_project_desc_none: 'Assign a project to this conversation', + session_archive: 'Archive conversation', + session_restore: 'Restore conversation', + session_archive_desc: 'Hide this conversation until archived is shown', + session_restore_desc: 'Bring this conversation back into the main list', + session_archived: 'Session archived', + session_restored: 'Session restored', + session_archive_failed: 'Archive failed: ', + session_duplicate: 'Duplicate conversation', + session_duplicate_desc: 'Create a copy with the same workspace and model', + session_duplicated: 'Session duplicated', + session_duplicate_failed: 'Duplicate failed: ', + session_delete: 'Delete conversation', + session_delete_desc: 'Permanently remove this conversation', // settings panel + settings_heading_title: 'Control Center', + settings_heading_subtitle: 'Preferences, conversation tools, and system controls.', + settings_section_conversation_title: 'Conversation', + settings_section_appearance_title: 'Appearance', + settings_section_appearance_meta: 'Theme, accent colors, and visual style.', + settings_section_preferences_title: 'Preferences', + settings_section_preferences_meta: 'Defaults and UI behavior for Hermes Web UI.', + settings_section_system_title: 'System', + settings_section_system_meta: 'Instance version and access controls.', + settings_dropdown_conversation: 'Conversation', + settings_dropdown_appearance: 'Appearance', + settings_dropdown_preferences: 'Preferences', + settings_dropdown_providers: 'Providers', + settings_dropdown_system: 'System', + settings_tab_conversation: 'Conversation', + settings_tab_appearance: 'Appearance', + settings_tab_preferences: 'Preferences', + settings_tab_system: 'System', settings_title: 'Settings', settings_save_btn: 'Save Settings', settings_label_model: 'Default Model', @@ -566,6 +605,9 @@ const LOCALES = { profile_api_key_label: 'API key', }, + cmd_status: '\u986f\u793a\u6703\u8a71\u8cc7\u8a0a', + memory_saved: '\u8a18\u61b6\u5df2\u5132\u5b58', + profile_delete_title: '\u522a\u9664\u6b64\u8a2d\u5b9a\u6a94', ru: { _lang: 'ru', _label: 'Русский', @@ -1096,6 +1138,47 @@ const LOCALES = { profile_name_label: 'Имя', profile_base_url_label: 'Базовый URL', profile_api_key_label: 'API-ключ', + + // Session management and settings keys (en fallback — pending translation) + session_archive: 'Archive conversation', + session_archive_desc: 'Hide this conversation until archived is shown', + session_archive_failed: 'Archive failed: ', + session_archived: 'Session archived', + session_delete: 'Delete conversation', + session_delete_desc: 'Permanently remove this conversation', + session_duplicate: 'Duplicate conversation', + session_duplicate_desc: 'Create a copy with the same workspace and model', + session_duplicate_failed: 'Duplicate failed: ', + session_duplicated: 'Session duplicated', + session_move_project: 'Move to project', + session_move_project_desc_has: 'Change the project for this conversation', + session_move_project_desc_none: 'Assign a project to this conversation', + session_pin: 'Pin conversation', + session_pin_desc: 'Keep this conversation at the top', + session_pin_failed: 'Pin failed: ', + session_restore: 'Restore conversation', + session_restore_desc: 'Bring this conversation back into the main list', + session_restored: 'Session restored', + session_unpin: 'Unpin conversation', + session_unpin_desc: 'Remove from pinned', + settings_dropdown_appearance: 'Appearance', + settings_dropdown_conversation: 'Conversation', + settings_dropdown_preferences: 'Preferences', + settings_dropdown_providers: 'Providers', + settings_dropdown_system: 'System', + settings_heading_subtitle: 'Preferences, conversation tools, and system controls.', + settings_heading_title: 'Control Center', + settings_section_appearance_meta: 'Theme, accent colors, and visual style.', + settings_section_appearance_title: 'Appearance', + settings_section_conversation_title: 'Conversation', + settings_section_preferences_meta: 'Defaults and UI behavior for Hermes Web UI.', + settings_section_preferences_title: 'Preferences', + settings_section_system_meta: 'Instance version and access controls.', + settings_section_system_title: 'System', + settings_tab_appearance: 'Appearance', + settings_tab_conversation: 'Conversation', + settings_tab_preferences: 'Preferences', + settings_tab_system: 'System', }, es: { @@ -1594,6 +1677,48 @@ const LOCALES = { profile_name_label: 'Nombre', profile_base_url_label: 'URL base', profile_api_key_label: 'Clave API', + + cmd_status: 'Show session info', + // Session management and settings keys (en fallback — pending translation) + session_archive: 'Archive conversation', + session_archive_desc: 'Hide this conversation until archived is shown', + session_archive_failed: 'Archive failed: ', + session_archived: 'Session archived', + session_delete: 'Delete conversation', + session_delete_desc: 'Permanently remove this conversation', + session_duplicate: 'Duplicate conversation', + session_duplicate_desc: 'Create a copy with the same workspace and model', + session_duplicate_failed: 'Duplicate failed: ', + session_duplicated: 'Session duplicated', + session_move_project: 'Move to project', + session_move_project_desc_has: 'Change the project for this conversation', + session_move_project_desc_none: 'Assign a project to this conversation', + session_pin: 'Pin conversation', + session_pin_desc: 'Keep this conversation at the top', + session_pin_failed: 'Pin failed: ', + session_restore: 'Restore conversation', + session_restore_desc: 'Bring this conversation back into the main list', + session_restored: 'Session restored', + session_unpin: 'Unpin conversation', + session_unpin_desc: 'Remove from pinned', + settings_dropdown_appearance: 'Appearance', + settings_dropdown_conversation: 'Conversation', + settings_dropdown_preferences: 'Preferences', + settings_dropdown_providers: 'Providers', + settings_dropdown_system: 'System', + settings_heading_subtitle: 'Preferences, conversation tools, and system controls.', + settings_heading_title: 'Control Center', + settings_section_appearance_meta: 'Theme, accent colors, and visual style.', + settings_section_appearance_title: 'Appearance', + settings_section_conversation_title: 'Conversation', + settings_section_preferences_meta: 'Defaults and UI behavior for Hermes Web UI.', + settings_section_preferences_title: 'Preferences', + settings_section_system_meta: 'Instance version and access controls.', + settings_section_system_title: 'System', + settings_tab_appearance: 'Appearance', + settings_tab_conversation: 'Conversation', + settings_tab_preferences: 'Preferences', + settings_tab_system: 'System', }, de: { @@ -1877,7 +2002,48 @@ const LOCALES = { profile_name_label: 'Name', profile_base_url_label: 'Basis-URL', profile_api_key_label: 'API-Schlüssel', - }, + + // Session management and settings keys (en fallback — pending translation) + session_archive: 'Archive conversation', + session_archive_desc: 'Hide this conversation until archived is shown', + session_archive_failed: 'Archive failed: ', + session_archived: 'Session archived', + session_delete: 'Delete conversation', + session_delete_desc: 'Permanently remove this conversation', + session_duplicate: 'Duplicate conversation', + session_duplicate_desc: 'Create a copy with the same workspace and model', + session_duplicate_failed: 'Duplicate failed: ', + session_duplicated: 'Session duplicated', + session_move_project: 'Move to project', + session_move_project_desc_has: 'Change the project for this conversation', + session_move_project_desc_none: 'Assign a project to this conversation', + session_pin: 'Pin conversation', + session_pin_desc: 'Keep this conversation at the top', + session_pin_failed: 'Pin failed: ', + session_restore: 'Restore conversation', + session_restore_desc: 'Bring this conversation back into the main list', + session_restored: 'Session restored', + session_unpin: 'Unpin conversation', + session_unpin_desc: 'Remove from pinned', + settings_dropdown_appearance: 'Appearance', + settings_dropdown_conversation: 'Conversation', + settings_dropdown_preferences: 'Preferences', + settings_dropdown_providers: 'Providers', + settings_dropdown_system: 'System', + settings_heading_subtitle: 'Preferences, conversation tools, and system controls.', + settings_heading_title: 'Control Center', + settings_section_appearance_meta: 'Theme, accent colors, and visual style.', + settings_section_appearance_title: 'Appearance', + settings_section_conversation_title: 'Conversation', + settings_section_preferences_meta: 'Defaults and UI behavior for Hermes Web UI.', + settings_section_preferences_title: 'Preferences', + settings_section_system_meta: 'Instance version and access controls.', + settings_section_system_title: 'System', + settings_tab_appearance: 'Appearance', + settings_tab_conversation: 'Conversation', + settings_tab_preferences: 'Preferences', + settings_tab_system: 'System', +}, zh: { _lang: 'zh', @@ -2373,7 +2539,48 @@ const LOCALES = { profile_name_label: '名称', profile_base_url_label: '基础 URL', profile_api_key_label: 'API 密钥', - }, + + // Session management and settings keys (en fallback — pending translation) + session_archive: 'Archive conversation', + session_archive_desc: 'Hide this conversation until archived is shown', + session_archive_failed: 'Archive failed: ', + session_archived: 'Session archived', + session_delete: 'Delete conversation', + session_delete_desc: 'Permanently remove this conversation', + session_duplicate: 'Duplicate conversation', + session_duplicate_desc: 'Create a copy with the same workspace and model', + session_duplicate_failed: 'Duplicate failed: ', + session_duplicated: 'Session duplicated', + session_move_project: 'Move to project', + session_move_project_desc_has: 'Change the project for this conversation', + session_move_project_desc_none: 'Assign a project to this conversation', + session_pin: 'Pin conversation', + session_pin_desc: 'Keep this conversation at the top', + session_pin_failed: 'Pin failed: ', + session_restore: 'Restore conversation', + session_restore_desc: 'Bring this conversation back into the main list', + session_restored: 'Session restored', + session_unpin: 'Unpin conversation', + session_unpin_desc: 'Remove from pinned', + settings_dropdown_appearance: 'Appearance', + settings_dropdown_conversation: 'Conversation', + settings_dropdown_preferences: 'Preferences', + settings_dropdown_providers: 'Providers', + settings_dropdown_system: 'System', + settings_heading_subtitle: 'Preferences, conversation tools, and system controls.', + settings_heading_title: 'Control Center', + settings_section_appearance_meta: 'Theme, accent colors, and visual style.', + settings_section_appearance_title: 'Appearance', + settings_section_conversation_title: 'Conversation', + settings_section_preferences_meta: 'Defaults and UI behavior for Hermes Web UI.', + settings_section_preferences_title: 'Preferences', + settings_section_system_meta: 'Instance version and access controls.', + settings_section_system_title: 'System', + settings_tab_appearance: 'Appearance', + settings_tab_conversation: 'Conversation', + settings_tab_preferences: 'Preferences', + settings_tab_system: 'System', +}, // Traditional Chinese (zh-Hant) 'zh-Hant': { @@ -2405,7 +2612,7 @@ const LOCALES = { reconnect_active: '\u56de\u8986\u4ecd\u5728\u751f\u6210\u4e2d\uff0c\u6e96\u5099\u597d\u5f8c\u8981\u91cd\u65b0\u52a0\u8f09\u55ce\uff1f', reconnect_finished: '\u4f60\u96e2\u958b\u6642\u6709\u56de\u8986\u6b63\u5728\u751f\u6210\uff0c\u8a0a\u606f\u5167\u5bb9\u53ef\u80fd\u5df2\u7d93\u66f4\u65b0\u3002', // approval card - approval_heading: '\u9700\u8981\u5ba1\u6838', + approval_heading: '\u9700\u8981\u5be9\u6838', approval_desc_prefix: '\u6aa2\u6e2c\u5230\u5371\u96aa\u547d\u4ee4', approval_btn_once: '\u5141\u8a31\u4e00\u6b21', approval_btn_once_title: '\u5141\u8a31\u57f7\u884c\u6b64\u547d\u4ee4\u4e00\u6b21\uff08Enter\uff09', @@ -2413,10 +2620,10 @@ const LOCALES = { approval_btn_session_title: '\u672c\u6b21\u6703\u8a71\u671f\u9593\u5141\u8a31', approval_btn_always: '始終允許', approval_btn_always_title: '始終允許此命令模式', - approval_btn_deny: '\u62d2\u7edd', + approval_btn_deny: '\u62d2\u7d55', approval_btn_deny_title: '\u62d2\u7edd — \u4e0d\u57f7\u884c\u6b64\u547d\u4ee4', approval_responding: '\u8655\u7406\u4e2d\u2026', - clarify_heading: '\u9700\u8981\u91cb\u6e05', + clarify_heading: '\u9700\u8981\u91d0\u6e05', clarify_hint: '\u8acb\u9078\u64c7\u4e00\u500b\u9078\u9805\uff0c\u6216\u5728\u4e0b\u65b9\u8f38\u5165\u4f60\u81ea\u5df1\u7684\u56de\u7b54\u3002', clarify_other: '\u5176\u4ed6', clarify_send: '\u9001\u51fa', @@ -2501,29 +2708,68 @@ const LOCALES = { folder_created: '\u5df2\u5275\u5efa\u6587\u4ef6\u593e ', folder_create_failed: '\u5275\u5efa\u6587\u4ef6\u593e\u5931\u6557\uff1a', remove_title: '\u79fb\u9664', - empty_dir: '(\u7a7a)', - upload_failed: '\u4e0a\u50b3\u5931\u6557\uff1a', - all_uploads_failed: (n) => `${n} \u500b\u6587\u4ef6\u5168\u90e8\u4e0a\u50b3\u5931\u6557`, + empty_dir: '(空)', + upload_failed: '上傳失敗:', + all_uploads_failed: (n) => `${n} 個檔案全部上傳失敗`, + session_pin: '釘選對話', + session_unpin: '取消釘選', + session_pin_desc: '將此對話置頂', + session_unpin_desc: '從置頂移除', + session_pin_failed: '釘選失敗:', + session_move_project: '移至專案', + session_move_project_desc_has: '變更此對話的專案', + session_move_project_desc_none: '為此對話指定專案', + session_archive: '封存對話', + session_restore: '還原對話', + session_archive_desc: '隱藏此對話,直到開啟顯示封存', + session_restore_desc: '將此對話移回主清單', + session_archived: '對話已封存', + session_restored: '對話已還原', + session_archive_failed: '封存失敗:', + session_duplicate: '複製對話', + session_duplicate_desc: '建立一個相同工作區與模型的副本', + session_duplicated: '對話已複製', + session_duplicate_failed: '複製失敗:', + session_delete: '刪除對話', + session_delete_desc: '永久移除這個對話', // settings panel + settings_heading_title: '控制中心', + settings_heading_subtitle: '偏好設定、對話工具與系統控制。', + settings_section_conversation_title: '對話', + settings_section_appearance_title: '外觀', + settings_section_appearance_meta: '主題、強調色與視覺風格。', + settings_section_preferences_title: '偏好設定', + settings_section_preferences_meta: 'Hermes Web UI 的預設值與介面行為。', + settings_section_system_title: '系統', + settings_section_system_meta: '實例版本與存取控制。', + settings_dropdown_conversation: '對話', + settings_dropdown_appearance: '外觀', + settings_dropdown_preferences: '偏好設定', + settings_dropdown_providers: '供應商', + settings_dropdown_system: '系統', + settings_tab_conversation: '對話', + settings_tab_appearance: '外觀', + settings_tab_preferences: '偏好設定', + settings_tab_system: '系統', settings_title: '\u8a2d\u5b9a', settings_save_btn: '\u5132\u5b58\u8a2d\u5b9a', settings_label_model: '\u9ed8\u8a8d\u6a21\u578b', settings_label_send_key: '\u767c\u9001\u5feb\u6377\u9375', settings_label_theme: '\u4e3b\u984c', - settings_label_skin: '\u76ae\u819a', + settings_label_skin: '佈景', settings_label_font_size: '\u5b57\u9ad4\u5927\u5c0f', font_size_small: '\u5c0f', font_size_default: '\u9810\u8a2d', font_size_large: '\u5927', - settings_label_language: '\u8a9d\u8a00', + settings_label_language: '\u8a9e\u8a00', settings_label_token_usage: '\u986f\u793a token \u7528\u91cf', settings_label_sidebar_density: '側邊欄密度', - cmd_reasoning: 'Toggle thinking visibility (show/hide), set effort level, or check current status', + cmd_reasoning: '切換思考區塊可見性(顯示/隱藏)或設定努力等級', settings_label_cli_sessions: '\u986f\u793a CLI \u6703\u8a71', settings_label_sync_insights: '\u540c\u6b65\u5230 insights', settings_label_check_updates: '\u6aa2\u67e5\u66f4\u65b0', settings_label_bot_name: '\u52a9\u624b\u540d\u7a31', - settings_label_password: '\u8a2a\u8aad\u5bc6\u78bc', + settings_label_password: '\u8a2a\u554f\u5bc6\u78bc', settings_saved: '\u8a2d\u5b9a\u5df2\u5132\u5b58', settings_save_failed: '\u5132\u5b58\u5931\u6557\uff1a', settings_load_failed: '\u8a2d\u5b9a\u52a0\u8f09\u5931\u6557\uff1a', @@ -2549,11 +2795,11 @@ const LOCALES = { tab_memory: '\u8a18\u61b6', tab_skills: '\u6280\u80fd', tab_tasks: '\u4efb\u52d9', - tab_todos: '\u5f85\u8e29', + tab_todos: '待辦', tab_workspaces: '\u5de5\u4f5c\u5340', - new_conversation: '\u65b0\u5b58\u5c0d\u8a71', - filter_conversations: '\u7b5c\u9078\u5b58\u5c0d\u8a71', - scheduled_jobs: '\u5b58\u5287\u4efb\u52d9', + new_conversation: '新對話', + filter_conversations: '篩選對話', + scheduled_jobs: '排程任務', new_job: '\u65b0\u4efb\u52d9', search_skills: '\u641c\u5c0b\u6280\u80fd', new_skill: '\u65b0\u6280\u80fd', @@ -2566,49 +2812,29 @@ const LOCALES = { download_transcript: '\u4e0b\u8f09\u8a18\u9304', import: '\u5c0e\u5165', editing: '\u7de8\u8f2f\u4e2d', - empty_title: '\u7a7a\u767c\u5b58\u7a7a\u9593', - empty_subtitle: '\u9ede\u64ca\u4e0a\u65b9\u6309\u9215\u958b\u59cb\u5c0d\u8a71', + empty_title: '有什麼可以幫忙?', + empty_subtitle: '點擊上方按鈕開始對話', cancel: '\u53d6\u6d88', loading: '\u52a0\u8f09\u4e2d', create_job: '\u5efa\u7acb\u4efb\u52d9', - suggest_plan: '\u5efa\u8b70\u8a08\u5287', - suggest_schedule: '\u5efa\u8b70\u6642\u7a0b', - suggest_files: '\u5efa\u8b70\u6a94\u6848', + suggest_plan: '幫我規劃一個小專案', + suggest_schedule: '今天的時程如何?', + suggest_files: '這個工作區有哪些檔案?', sign_out: '\u767b\u51fa', - // Providers panel (English fallback — native translations welcome in follow-up PRs) - providers_tab_title: 'Providers', - providers_section_title: 'Providers', - providers_section_meta: 'Manage API keys for AI providers. Changes take effect immediately.', - providers_status_configured: 'API key configured', - providers_status_not_configured: 'No API key', - providers_status_oauth: 'OAuth', - providers_status_api_key: 'API key', - providers_status_not_configured_label: 'Not configured', - providers_oauth_hint: 'Authenticated via OAuth. No API key needed.', - providers_save: 'Save', - providers_remove: 'Remove', - providers_saving: 'Saving…', - providers_removing: 'Removing…', - providers_enter_key: 'Please enter an API key', - providers_empty: 'No configurable providers found.', - providers_key_updated: 'API key saved', - providers_key_removed: 'API key removed', - providers_key_placeholder_new: 'sk-...', - providers_key_placeholder_replace: 'Enter new key to replace…', password_placeholder: '\u5bc6\u78bc', disable_auth: '\u505c\u7528\u9a57\u8b49', settings_label_sound: '\u901a\u77e5\u8072\u97f3', settings_label_notifications: '\u700f\u89bd\u901a\u77e5', - settings_desc_sound: '\u52a9\u624b\u5b8c\u6210\u56de\u7b54\u6642\u64a9\u653e\u8072\u97f3\u3002', - settings_desc_notifications: '\u7576\u5206\u9801\u5728\u5f8c\u81ea\u6642\uff0c\u6709\u56de\u7b54\u5b8c\u6210\u6e05\u55ae\u6703\u986f\u793a\u7cfb\u7d71\u901a\u77e5\u3002', + settings_desc_sound: '助手完成回答時播放聲音。', + settings_desc_notifications: '當分頁在後台時,有回答完成時會顯示系統通知。', settings_desc_token_usage: '\u5728\u52a9\u624b\u6bcf\u6b21\u56de\u7b54\u4e0b\u65b9\u986f\u793a Input/Output token \u6578\u91cf\u3002\u4e5f\u53ef\u4ee5\u7528 /usage \u5207\u63db\u3002', settings_sidebar_density_compact: '精簡', settings_sidebar_density_detailed: '詳細', settings_desc_sidebar_density: '控制左側對話清單要顯示多少額外資訊。', - settings_desc_cli_sessions: '\u5c07 Hermes CLI (\u7684 state.db) \u4e2d\u7684\u6703\u8a71\u6dfb\u52a0\u5230\u6703\u8a71\u6e05\u55ae\u3002\u9ede\u64ca\u4e00\u500b CLI \u6703\u8a71\u5c07\u5c0e\u5165\u5b83\u7a0b\u5f0f\u4e26\u7e7c\u7e8c\u5b58\u5c0d\u8a71\u3002', - settings_desc_sync_insights: '\u5c07 WebUI token \u4f7f\u7528\u60c5\u6cc1\u540c\u6b65\u5230 state.db\uff0c\u8a93 hermes /insights \u5305\u542b\u700f\u89bd\u5668\u6703\u8a71\u6578\u64da\u3002\u9810\u8a2d\u70b8\u555f\u7528\u3002', - settings_desc_check_updates: '\u7576\u6709\u66f4\u65b0\u7684 WebUI \u6216\u52a9\u624b\u7248\u672c\u6642\u986f\u793a\u6a19\u8a18\u3002\u5c07\u5728\u5f8c\u81ea\u6b63\u5e38\u57f7\u884c Git-Fetch\u3002', - settings_desc_bot_name: '\u52a9\u624b\u5728 UI \u4e2d\u7684\u986f\u793a\u540d\u7a31\u3002\u9810\u8a2d\u70b8\u7528\u6539\u3002', + settings_desc_cli_sessions: '將 Hermes CLI (的 state.db) 中的會話添加到會話清單。點擊一個 CLI 會話將導入它並繼續對話。', + settings_desc_sync_insights: '將 WebUI token 使用情況同步到 state.db,使 hermes /insights 包含瀏覽器會話數據。預設未啟用。', + settings_desc_check_updates: '當有更新的 WebUI 或助手版本時顯示標記。將在後台正常執行 Git-Fetch。', + settings_desc_bot_name: '助手在 UI 中的顯示名稱。預設未更改。', settings_desc_password: '\u8a2d\u5b9a WebUI \u767b\u5165\u5bc6\u78bc\u3002\u5047\u5982\u5df2\u8a2d\u7f6e\uff0c\u6bcf\u6b21\u52a0\u8f09\u90fd\u9700\u8981\u767b\u5165\u3002', onboarding_password_will_enable: '\u5c07\u6703\u555f\u7528', onboarding_password_will_replace: '\u5c07\u6703\u53d6\u4ee3', @@ -2638,6 +2864,312 @@ const LOCALES = { profile_delete_confirm_message: '\u6b64\u914d\u7f6e\u6a94\u7684\u6240\u6709\u6703\u8a71\u3001\u8a2d\u5b9a\u3001\u6280\u80fd\u548c\u8a18\u61b6\u5c07\u88ab\u6c38\u4e45\u522a\u9664\u3002\u6b64\u64cd\u4f5c\u7121\u6cd5\u64a4\u92b7\u3002', workspace_renamed: '\u5de5\u4f5c\u5340\u5df2\u91cd\u65b0\u547d\u540d', cron_name_placeholder: '\u9078\u586b', + active_conversation_meta: (n) => `${n} 則訊息`, + all_uploads_failed: (n) => `${n} 個上傳失敗`, + cron_job_name_placeholder: '\u4efb\u52d9\u540d\u7a31', + cron_prompt_placeholder: '\u63d0\u793a\u8a5e', + cron_schedule_placeholder: '\u6392\u7a0b', + delete_confirm: (name) => `刪除「${name}」?`, + downloading: (filename) => `正在下載 ${filename}…`, + n_messages: (n) => `${n} 則訊息`, + onboarding_api_key_help_prefix: '\u900f\u904e\u4ee5\u4e0b\u65b9\u5f0f\u5132\u5b58\u70ba Hermes .env \u6a94\u6848\u4e2d\u7684\u6a5f\u5bc6', + onboarding_api_key_label: 'API \u91d1\u9470', + onboarding_api_key_placeholder: '\u7559\u7a7a\u4ee5\u4fdd\u7559\u5df2\u5132\u5b58\u7684\u91d1\u9470', + onboarding_back: '\u4e0a\u4e00\u6b65', + onboarding_badge: '\u9996\u6b21\u57f7\u884c', + onboarding_base_url_help: '\u7528\u65bc OpenAI \u76f8\u5bb9\u8def\u7531\u5668\u3001\u81ea\u67b6\u4f3a\u670d\u5668\u3001LiteLLM\u3001Ollama\u3001LM Studio\u3001vLLM \u7b49\u7aef\u9ede\u3002', + onboarding_base_url_label: '\u57fa\u790e URL', + onboarding_base_url_placeholder: 'https://your-endpoint.example/v1', + onboarding_check_agent: 'Hermes Agent', + onboarding_check_agent_missing: '\u907a\u5931\u6216\u50c5\u90e8\u5206\u53ef\u7528', + onboarding_check_agent_ready: '\u5df2\u5075\u6e2c\u5230\u4e26\u53ef\u4f9b\u532f\u5165', + onboarding_check_password: '\u5bc6\u78bc', + onboarding_check_password_disabled: '\u5c1a\u672a\u555f\u7528', + onboarding_check_password_enabled: '\u5df2\u555f\u7528', + onboarding_check_provider: '\u63d0\u4f9b\u8005\u914d\u7f6e', + onboarding_check_provider_partial: '\u5df2\u5132\u5b58\u4f46\u672a\u5b8c\u6210', + onboarding_check_provider_pending: '\u9700\u8981\u9a57\u8b49', + onboarding_check_provider_ready: '\u53ef\u958b\u59cb\u804a\u5929', + onboarding_complete: '\u521d\u59cb\u8a2d\u5b9a\u5b8c\u6210', + onboarding_config_file: '\u8a2d\u5b9a\u6a94\uff1a', + onboarding_continue: '\u7e7c\u7e8c', + onboarding_current_provider: '\u76ee\u524d\u914d\u7f6e\uff1a', + onboarding_custom_model_help: '\u5c0d\u65bc\u81ea\u8a02\u7aef\u9ede\uff0c\u8acb\u6307\u5b9a\u60a8\u7684\u4f3a\u670d\u5668\u9810\u671f\u7684\u6a21\u578b ID\u3002', + onboarding_custom_model_placeholder: 'your_model_name', + onboarding_env_file: '.env \u6a94\u6848\uff1a', + onboarding_error_base_url_required: '\u81ea\u8a02\u7aef\u9ede\u9700\u8981\u57fa\u790e URL\u3002', + onboarding_error_choose_model: '\u8acb\u5148\u9078\u64c7\u6a21\u578b\u518d\u7e7c\u7e8c\u3002', + onboarding_error_choose_workspace: '\u8acb\u5148\u9078\u64c7\u5de5\u4f5c\u5340\u518d\u7e7c\u7e8c\u3002', + onboarding_error_model_required: '\u9700\u8981\u6a21\u578b\u3002', + onboarding_error_provider_required: '\u8acb\u5148\u9078\u64c7\u8a2d\u5b9a\u6a21\u5f0f\u518d\u7e7c\u7e8c\u3002', + onboarding_error_workspace_required: '\u9700\u8981\u5de5\u4f5c\u5340\u3002', + onboarding_finish_help: '\u5b8c\u6210\u5f8c\uff0conboarding_completed \u5c07\u5132\u5b58\u5728\u8a2d\u5b9a\u4e2d\uff0c\u60a8\u5c07\u9032\u5165\u6b63\u5e38\u61c9\u7528\u7a0b\u5f0f\u3002', + onboarding_lead: '\u5feb\u901f\u9010\u6b65\u8a2d\u5b9a\uff1a\u6aa2\u67e5 Hermes\u3001\u5132\u5b58\u63d0\u4f9b\u8005\u914d\u7f6e\u3001\u9078\u64c7\u5de5\u4f5c\u5340\u8207\u6a21\u578b\uff0c\u4e26\u53ef\u9078\u64c7\u52a0\u5165\u5bc6\u78bc\u4fdd\u8b77\u3002', + onboarding_missing_imports: '\u7f3a\u5c11\u7684\u532f\u5165\uff1a', + onboarding_model_label: '\u9810\u8a2d\u6a21\u578b', + onboarding_not_set: '\u672a\u8a2d\u5b9a', + onboarding_notice_finish: '\u60a8\u4e4b\u5f8c\u53ef\u4ee5\u96a8\u6642\u56de\u5230\u8a2d\u5b9a\u9801\u9762\u8b8a\u66f4\u9019\u4e9b\u503c\u3002', + onboarding_notice_password_enabled: '\u5bc6\u78bc\u5df2\u8a2d\u5b9a\u3002\u50c5\u5728\u9700\u8981\u53d6\u4ee3\u6642\u8f38\u5165\u65b0\u5bc6\u78bc\u3002', + onboarding_notice_password_recommended: '\u9078\u586b\uff0c\u4f46\u5efa\u8b70\u5728\u975e localhost \u74b0\u5883\u4f7f\u7528\u3002', + onboarding_notice_setup_already_ready: '\u5df2\u5075\u6e2c\u5230\u53ef\u7528\u7684 Hermes \u63d0\u4f9b\u8005\u914d\u7f6e\u3002\u60a8\u53ef\u4ee5\u4fdd\u7559\u6216\u5728\u6b64\u53d6\u4ee3\u3002', + onboarding_notice_setup_required: '\u5728\u6b64\u9078\u64c7\u5feb\u901f\u63d0\u4f9b\u8005\u8a2d\u5b9a\u8def\u5f91\u3002\u9032\u968e OAuth \u8a2d\u5b9a\u4ecd\u8acb\u4f7f\u7528 Hermes CLI\u3002', + onboarding_notice_system_ready: 'Hermes Agent \u53ef\u5f9e Web UI \u5b58\u53d6\u3002', + onboarding_notice_system_unavailable: 'Hermes Agent \u5c1a\u672a\u5b8c\u5168\u53ef\u7528\u3002\u5f15\u5c0e\u7a0b\u5f0f\u53ef\u80fd\u5b89\u88dd\u5b83\uff0c\u4f46\u63d0\u4f9b\u8005\u8a2d\u5b9a\u53ef\u80fd\u4ecd\u9700\u7d42\u7aef\u6a5f\u3002', + onboarding_notice_workspace: '\u9019\u4e9b\u503c\u4f7f\u7528\u8207\u4e00\u822c\u61c9\u7528\u7a0b\u5f0f\u76f8\u540c\u7684\u8a2d\u5b9a API\u3002', + onboarding_oauth_provider_not_ready_body: '\u6b64\u5be6\u4f8b\u8a2d\u5b9a\u4f7f\u7528 {provider}\uff0c\u5b83\u4f7f\u7528 OAuth \u800c\u975e API \u91d1\u9470\u3002\u8acb\u5728\u7d42\u7aef\u6a5f\u4e2d\u57f7\u884c hermes auth \u6216 hermes model \u9032\u884c\u6388\u6b0a\uff0c\u7136\u5f8c\u91cd\u65b0\u6574\u7406 Web UI\u3002', + onboarding_oauth_provider_not_ready_title: 'OAuth \u63d0\u4f9b\u8005\u5c1a\u672a\u6388\u6b0a', + onboarding_oauth_provider_ready_body: '\u6b64\u5be6\u4f8b\u8a2d\u5b9a\u4f7f\u7528\u900f\u904e Hermes CLI \u914d\u7f6e\u7684 OAuth \u63d0\u4f9b\u8005\uff08{provider}\uff09\u3002\u7121\u9700 API \u91d1\u9470 \u2014 \u6309\u7e7c\u7e8c\u5b8c\u6210\u8a2d\u5b9a\u3002', + onboarding_oauth_provider_ready_title: '\u63d0\u4f9b\u8005\u5df2\u6388\u6b0a', + onboarding_oauth_switch_hint: '\u6216\u9078\u64c7\u4e0b\u65b9\u5176\u4ed6\u63d0\u4f9b\u8005\u4ee5\u5207\u63db\u5230 API \u91d1\u9470\u8a2d\u5b9a\uff1a', + onboarding_open: '\u958b\u555f Hermes', + onboarding_password_help: '\u5bc6\u78bc\u900f\u904e\u73fe\u6709\u8a2d\u5b9a API \u5132\u5b58\uff0c\u4e26\u5728\u4f3a\u670d\u5668\u7aef\u9032\u884c\u96dc\u6e4a\u8655\u7406\u3002', + onboarding_password_label: '\u5bc6\u78bc\uff08\u9078\u586b\uff09', + onboarding_password_placeholder: '\u7559\u7a7a\u4ee5\u8df3\u904e', + onboarding_password_remains_disabled: '\u5c07\u4fdd\u6301\u505c\u7528', + onboarding_password_skipped: '\u66ab\u6642\u8df3\u904e', + onboarding_password_will_enable: '\u5c07\u555f\u7528', + onboarding_password_will_replace: '\u5c07\u53d6\u4ee3', + onboarding_provider_label: '\u8a2d\u5b9a\u6a21\u5f0f', + onboarding_quick_setup_badge: '\u5feb\u901f\u8a2d\u5b9a', + onboarding_skip: '\u8df3\u904e\u8a2d\u5b9a', + onboarding_skipped: '\u5df2\u8df3\u904e\u8a2d\u5b9a \u2014 \u4f7f\u7528\u73fe\u6709\u914d\u7f6e\u3002', + onboarding_step_finish_desc: '\u6aa2\u8996\u8a2d\u5b9a\u4e26\u9032\u5165\u61c9\u7528\u7a0b\u5f0f\u3002', + onboarding_step_finish_title: '\u5b8c\u6210', + onboarding_step_password_desc: '\u5206\u4eab\u524d\u4fdd\u8b77 Web UI\u3002', + onboarding_step_password_title: '\u9078\u586b\u5bc6\u78bc', + onboarding_step_setup_desc: '\u5132\u5b58\u6700\u5c0f\u53ef\u7528\u7684 Hermes \u63d0\u4f9b\u8005\u914d\u7f6e\u3002', + onboarding_step_setup_title: '\u63d0\u4f9b\u8005\u8a2d\u5b9a', + onboarding_step_system_desc: '\u9a57\u8b49 Hermes Agent \u8207\u914d\u7f6e\u53ef\u898b\u6027\u3002', + onboarding_step_system_title: '\u7cfb\u7d71\u6aa2\u67e5', + onboarding_step_workspace_desc: '\u70ba\u65b0\u6703\u8a71\u9078\u64c7\u9810\u8a2d\u503c\u3002', + onboarding_step_workspace_title: '\u5de5\u4f5c\u5340\u8207\u6a21\u578b', + onboarding_title: '\u6b61\u8fce\u4f7f\u7528 Hermes Web UI', + onboarding_unknown: '\u672a\u77e5', + onboarding_workspace_help: '\u9078\u64c7 Hermes \u5728\u8a2d\u5b9a\u5b8c\u6210\u5f8c\u7528\u65bc\u65b0\u804a\u5929\u5ba4\u7684\u6a21\u578b\u3002', + onboarding_workspace_label: '\u5de5\u4f5c\u5340', + onboarding_workspace_or_path: '\u6216\u8f38\u5165\u5de5\u4f5c\u5340\u8def\u5f91', + onboarding_workspace_placeholder: '/home/you/workspace', + project_name_prompt: '\u5c08\u6848\u540d\u7a31\uff1a', + provider_mismatch_warning: (provider) => `提供者不符:會話使用 ${provider}`, + session_meta_messages: (n) => `${n} 則訊息`, + settings_label_model: '\u9810\u8a2d\u6a21\u578b', + skill_created: '\u6280\u80fd\u5df2\u5efa\u7acb', + skill_file_load_failed: '\u8f09\u5165\u6a94\u6848\u5931\u6557\uff1a', + skill_load_failed: '\u8f09\u5165\u6280\u80fd\u5931\u6557\uff1a', + skill_name_required: '\u9700\u8981\u6280\u80fd\u540d\u7a31', + skill_updated: '\u6280\u80fd\u5df2\u66f4\u65b0', + skills_no_match: '\u627e\u4e0d\u5230\u7b26\u5408\u7684\u6280\u80fd\u3002', + slash_skill_badge: '\u6280\u80fd', + slash_skill_desc: '\u547c\u53eb\u6b64\u6280\u80fd', + title_change_hint: '\u4f7f\u7528 /title <\u65b0\u540d\u7a31> \u91cd\u65b0\u547d\u540d\u3002', + title_current: '\u76ee\u524d\u6a19\u984c', + title_set: '\u6a19\u984c\u5df2\u8a2d\u70ba', + todos_no_active: '\u6b64\u6703\u8a71\u4e2d\u7121\u6d3b\u8e8d\u4efb\u52d9\u6e05\u55ae\u3002', + upload_failed: '\u4e0a\u50b3\u5931\u6557\uff1a', + active_conversation_none: '\u672a\u9078\u53d6\u6d3b\u8e8d\u6703\u8a71\u3002', + add: '\u65b0\u589e', + add_failed: '\u65b0\u589e\u5931\u6557\uff1a', + auth_disabled: '\u9a57\u8b49\u5df2\u505c\u7528 \u2014 \u5bc6\u78bc\u4fdd\u8b77\u5df2\u95dc\u9589', + cancel_unavailable: '\u7121\u6cd5\u53d6\u6d88\u3002', + clear_conversation_message: '\u6e05\u9664\u6240\u6709\u8a0a\u606f\uff1f\u6b64\u64cd\u4f5c\u7121\u6cd5\u5fa9\u539f\u3002', + clear_conversation_title: '\u6e05\u9664\u5c0d\u8a71', + clear_failed: '\u6e05\u9664\u5931\u6557\uff1a', + content_required: '\u9700\u8981\u5167\u5bb9', + create_failed: '\u5efa\u7acb\u5931\u6557\uff1a', + delete_failed: '\u522a\u9664\u5931\u6557\uff1a', + disable: '\u505c\u7528', + disable_auth: '\u505c\u7528\u9a57\u8b49', + disable_auth_confirm_message: '\u4efb\u4f55\u4eba\u90fd\u53ef\u4ee5\u5b58\u53d6\u6b64\u5be6\u4f8b\u3002', + disable_auth_confirm_title: '\u505c\u7528\u5bc6\u78bc\u4fdd\u8b77', + disable_auth_failed: '\u505c\u7528\u9a57\u8b49\u5931\u6557\uff1a', + discard_file_edits_message: '\u5207\u63db\u5de5\u4f5c\u5340\u5c07\u653e\u68c4\u672a\u5132\u5b58\u7684\u9810\u89bd\u8b8a\u66f4\u3002', + discard_file_edits_title: '\u653e\u68c4\u6a94\u6848\u7de8\u8f2f\uff1f', + dismiss: '\u95dc\u9589', + edit: '\u7de8\u8f2f', + error_prefix: '\u932f\u8aa4\uff1a', + linked_files: '\u95dc\u806f\u6a94\u6848', + manage_profiles: '\u7ba1\u7406\u8a2d\u5b9a\u6a94', + memory_notes_label: '\u8a18\u61b6\uff08\u5099\u8a3b\uff09', + model_custom_label: '\u81ea\u8a02\u6a21\u578b ID', + model_custom_placeholder: '\u4f8b\u5982 openai/gpt-5.4', + model_search_no_results: '\u627e\u4e0d\u5230\u6a21\u578b', + model_search_placeholder: '\u641c\u5c0b\u6a21\u578b\u2026', + my_notes: '\u6211\u7684\u5099\u8a3b', + name_required: '\u9700\u8981\u540d\u7a31', + never: '\u5f9e\u4e0d', + no_active_session: '\u7121\u6d3b\u8e8d\u6703\u8a71', + no_active_task: '\u7121\u57f7\u884c\u4e2d\u7684\u4efb\u52d9\u53ef\u505c\u6b62\u3002', + no_notes_yet: '\u5c1a\u7121\u5099\u8a3b\u3002', + no_profile_yet: '\u5c1a\u7121\u8a2d\u5b9a\u6a94\u3002', + not_available: '\u7121', + profile_active: '\u555f\u7528\u4e2d', + profile_api_key_placeholder: 'API \u91d1\u9470\uff08\u9078\u586b\uff09', + profile_api_keys_configured: 'API \u91d1\u9470\u5df2\u8a2d\u5b9a', + profile_base_url_placeholder: '\u57fa\u672c URL\uff08\u9078\u586b\uff0c\u4f8b\u5982 http://localhost:11434\uff09', + profile_base_url_rule: '\u57fa\u672c URL \u5fc5\u9808\u4ee5 http:// \u6216 https:// \u958b\u982d', + profile_clone_label: '\u5f9e\u555f\u7528\u4e2d\u7684\u8a2d\u5b9a\u6a94\u8907\u88fd\u914d\u7f6e', + profile_created: (name) => `設定檔 ${name} 已建立`, + profile_default_label: '\uff08\u9810\u8a2d\uff09', + profile_delete_confirm_title: (name) => `刪除設定檔「${name}」?`, + profile_deleted: (name) => `設定檔 ${name} 已刪除`, + profile_gateway_running: 'Gateway \u57f7\u884c\u4e2d', + profile_gateway_stopped: 'Gateway \u5df2\u505c\u6b62', + profile_name_placeholder: '\u8a2d\u5b9a\u6a94\u540d\u7a31\uff08\u5c0f\u5beb\u5b57\u6bcd\u3001\u6578\u5b57\u3001\u9023\u5b57\u865f\uff09', + profile_name_rule: '\u50c5\u9650\u5c0f\u5beb\u5b57\u6bcd\u3001\u6578\u5b57\u3001\u9023\u5b57\u865f\u548c\u5e95\u7dda', + profile_no_configuration: '\u7121\u914d\u7f6e', + profile_skill_count: (n) => `${n} 個技能`, + profile_switch_title: '\u5207\u63db\u5230\u6b64\u8a2d\u5b9a\u6a94', + profile_switched: (name) => `已切換到 ${name}`, + profile_switched_new_conversation: (name) => `已切換到 ${name}(新會話)`, + profile_use: '\u4f7f\u7528', + profiles_busy_switch: 'Agent \u57f7\u884c\u4e2d\u7121\u6cd5\u5207\u63db\u8a2d\u5b9a\u6a94', + profiles_load_failed: '\u8f09\u5165\u8a2d\u5b9a\u6a94\u5931\u6557', + profiles_no_profiles: '\u627e\u4e0d\u5230\u8a2d\u5b9a\u6a94\u3002', + remove: '\u79fb\u9664', + remove_failed: '\u79fb\u9664\u5931\u6557\uff1a', + rename_failed: '\u91cd\u65b0\u547d\u540d\u5931\u6557\uff1a', + retry_failed: '\u91cd\u8a66\u5931\u6557\uff1a', + save: '\u5132\u5b58', + save_failed: '\u5132\u5b58\u5931\u6557\uff1a', + session_time_bucket_last_week: '\u4e0a\u9031', + session_time_bucket_older: '\u66f4\u65e9', + session_time_bucket_this_week: '\u672c\u9031', + session_time_bucket_today: '\u4eca\u5929', + session_time_bucket_yesterday: '\u6628\u5929', + session_time_days_ago: (d) => `${d} 天前`, + session_time_hours_ago: (h) => `${h} 小時前`, + session_time_just_now: '\u525b\u525b', + session_time_last_week: '\u4e0a\u9031', + session_time_minutes_ago: (m) => `${m} 分鐘前`, + session_time_unknown: '\u672a\u77e5', + settings_unsaved_changes: '\u60a8\u6709\u672a\u5132\u5b58\u7684\u8b8a\u66f4\u3002', + sign_out_failed: '\u767b\u51fa\u5931\u6557\uff1a', + stream_stopped: '\u56de\u61c9\u5df2\u505c\u6b62\u3002', + switch_failed: '\u5207\u63db\u5931\u6557\uff1a', + undid_messages_suffix: '\u5247\u8a0a\u606f\u3002', + undid_n_messages: '\u5df2\u79fb\u9664', + undo_exchange: '\u5fa9\u539f\u6700\u5f8c\u4e00\u8f2a', + undo_failed: '\u5fa9\u539f\u5931\u6557\uff1a', + user_profile: '\u4f7f\u7528\u8005\u8a2d\u5b9a\u6a94', + view: '\u6aa2\u8996', + workspace_add_path_placeholder: '\u65b0\u589e\u5de5\u4f5c\u5340\u8def\u5f91\uff08\u4f8b\u5982 /Users/you/project\uff09', + workspace_added: '\u5de5\u4f5c\u5340\u5df2\u65b0\u589e', + workspace_already_saved: '\u5de5\u4f5c\u5340\u5df2\u5132\u5b58 \u2014 \u5f9e\u6e05\u55ae\u4e2d\u9078\u53d6', + workspace_busy_switch: 'Agent \u57f7\u884c\u4e2d\u7121\u6cd5\u5207\u63db\u5de5\u4f5c\u5340', + workspace_choose_path: '\u9078\u64c7\u5de5\u4f5c\u5340\u8def\u5f91', + workspace_choose_path_meta: '\u65b0\u589e\u9a57\u8b49\u904e\u7684\u8def\u5f91\u4e26\u5207\u63db\u6b64\u6703\u8a71', + workspace_manage: '\u7ba1\u7406\u5de5\u4f5c\u5340', + workspace_manage_meta: '\u958b\u555f Spaces \u9762\u677f', + workspace_not_added: '\u5de5\u4f5c\u5340\u672a\u65b0\u589e', + workspace_paths_validated_hint: '\u8def\u5f91\u6703\u5148\u9a57\u8b49\u662f\u5426\u5b58\u5728\u518d\u5132\u5b58\u3002', + workspace_remove_confirm_message: (name) => `移除工作區「${name}」?`, + workspace_remove_confirm_title: '\u79fb\u9664\u5de5\u4f5c\u5340', + workspace_removed: '\u5de5\u4f5c\u5340\u5df2\u79fb\u9664', + workspace_switch_prompt_confirm: '\u5207\u63db', + workspace_switch_prompt_message: '\u8f38\u5165\u5de5\u4f5c\u5340\u7684\u7d55\u5c0d\u8def\u5f91\u4ee5\u65b0\u589e\u4e26\u5207\u63db\u6b64\u6703\u8a71\u3002', + workspace_switch_prompt_placeholder: '/Users/you/project', + workspace_switch_prompt_title: '\u5207\u63db\u5de5\u4f5c\u5340', + workspace_switched_to: (name) => `已切換到 ${name}`, + workspace_use: '\u4f7f\u7528', + workspace_use_title: '\u5728\u7576\u524d\u6703\u8a71\u4e2d\u4f7f\u7528', + bg_complete: '\u80cc\u666f\u4efb\u52d9\u5b8c\u6210', + bg_error_multi: (n) => `${n} 個背景任務失敗`, + cmd_status: '顯示會話資訊', + memory_saved: '記憶已儲存', + profile_delete_title: '刪除此設定檔', + bg_error_single: (n) => `${n} 個背景任務失敗`, + bg_failed: '\u80cc\u666f\u4efb\u52d9\u5931\u6557\uff1a', + bg_label: '\u80cc\u666f\u7d50\u679c\uff1a', + bg_no_answer: '\uff08\u7121\u56de\u61c9\uff09', + bg_running: '\u80cc\u666f\u57f7\u884c\u4e2d\u2026', + btw_asking: '\u6b63\u5728\u8a62\u554f\u9644\u5e36\u554f\u984c\u2026', + btw_done: '\u9644\u5e36\u554f\u984c\u5df2\u56de\u7b54', + btw_failed: '\u9644\u5e36\u554f\u984c\u5931\u6557\uff1a', + btw_label: '\u9644\u5e36\u554f\u984c \u2014 \u4e0d\u5728\u6b77\u53f2\u8a18\u9304\u4e2d', + btw_no_answer: '\u672a\u6536\u5230\u56de\u61c9\u3002', + cmd_background: '\u5728\u80cc\u666f\u57f7\u884c\u63d0\u793a\u8a5e', + cmd_background_usage: '/background <\u63d0\u793a\u8a5e> \u2014 \u5e73\u884c\u57f7\u884c\u4e0d\u963b\u585e', + cmd_btw: '\u63d0\u51fa\u9644\u5e36\u554f\u984c\uff08\u66ab\u6642\u6027\uff09', + cmd_btw_usage: '/btw <\u554f\u984c> \u2014 \u4f7f\u7528\u7576\u524d\u6703\u8a71\u80cc\u666f\u63d0\u554f', + cmd_compact: '\u58d3\u7e2e\u5c0d\u8a71\u4e0a\u4e0b\u6587', + cmd_retry: '\u91cd\u65b0\u767c\u9001\u6700\u5f8c\u4e00\u689d\u8a0a\u606f', + cmd_stop: '\u505c\u6b62\u7576\u524d\u56de\u61c9', + cmd_title: '\u53d6\u5f97\u6216\u8a2d\u5b9a\u6703\u8a71\u6a19\u984c', + cmd_undo: '\u79fb\u9664\u6700\u5f8c\u4e00\u8f2a\u5c0d\u8a71', + cmd_voice: '\u5207\u63db\u9ea5\u514b\u98a8\u8f38\u5165', + cmd_voice_use_mic: '\u9ede\u64ca\u7de8\u8f2f\u5668\u4e2d\u7684\u9ea5\u514b\u98a8\u6309\u9215\u3002', + cmd_webui_only_session: '\u6b64\u6307\u4ee4\u4e0d\u9069\u7528\u65bc CLI \u532f\u5165\u7684\u6703\u8a71\u3002', + cron_all_runs: '\u6240\u6709\u57f7\u884c', + cron_completion_status: (n) => `${n} 次完成`, + cron_delete_confirm_message: '\u6b64\u64cd\u4f5c\u7121\u6cd5\u5fa9\u539f\u3002', + cron_delete_confirm_title: '\u522a\u9664\u6392\u7a0b\u4efb\u52d9', + cron_hide_runs: '\u96b1\u85cf\u57f7\u884c\u8a18\u9304', + cron_job_created: '\u6392\u7a0b\u4efb\u52d9\u5df2\u5efa\u7acb', + cron_job_deleted: '\u6392\u7a0b\u4efb\u52d9\u5df2\u522a\u9664', + cron_job_name_placeholder: '\u4efb\u52d9\u540d\u7a31', + cron_job_paused: '\u6392\u7a0b\u4efb\u52d9\u5df2\u66ab\u505c', + cron_job_resumed: '\u6392\u7a0b\u4efb\u52d9\u5df2\u6062\u5fa9', + cron_job_triggered: '\u6392\u7a0b\u4efb\u52d9\u5df2\u89f8\u767c', + cron_job_updated: '\u6392\u7a0b\u4efb\u52d9\u5df2\u66f4\u65b0', + cron_last: '\u4e0a\u6b21', + cron_last_output: '\u6700\u5f8c\u8f38\u51fa', + cron_next: '\u4e0b\u6b21', + cron_no_jobs: '\u627e\u4e0d\u5230\u6392\u7a0b\u4efb\u52d9\u3002', + cron_no_runs_yet: '\uff08\u5c1a\u7121\u57f7\u884c\u8a18\u9304\uff09', + cron_pause: '\u66ab\u505c', + cron_prompt_placeholder: '\u63d0\u793a\u8a5e', + cron_prompt_required: '\u9700\u8981\u63d0\u793a\u8a5e', + cron_resume: '\u6062\u5fa9', + cron_run_now: '\u7acb\u5373\u57f7\u884c', + cron_schedule_placeholder: '\u6392\u7a0b', + cron_schedule_required: '\u9700\u8981\u6392\u7a0b', + cron_schedule_required_example: '\u9700\u8981\u6392\u7a0b\uff08\u4f8b\u5982 "0 9 * * *" \u6216 "every 1h"\uff09', + cron_status_active: '\u6d3b\u8e8d\u4e2d', + cron_status_error: '\u932f\u8aa4', + cron_status_off: '\u672a\u555f\u7528', + cron_status_paused: '\u5df2\u66ab\u505c', + providers_empty: '\u627e\u4e0d\u5230\u53ef\u8a2d\u5b9a\u7684\u63d0\u4f9b\u8005\u3002', + providers_enter_key: '\u8acb\u8f38\u5165 API \u91d1\u9470', + providers_key_placeholder_new: 'sk-...', + providers_key_placeholder_replace: '\u8f38\u5165\u65b0\u91d1\u9470\u4ee5\u53d6\u4ee3\u2026', + providers_key_removed: 'API \u91d1\u9470\u5df2\u79fb\u9664', + providers_key_updated: 'API \u91d1\u9470\u5df2\u5132\u5b58', + providers_oauth_hint: '\u5df2\u900f\u904e OAuth \u9a57\u8b49\u3002\u7121\u9700 API \u91d1\u9470\u3002', + providers_remove: '\u79fb\u9664', + providers_removing: '\u79fb\u9664\u4e2d\u2026', + providers_save: '\u5132\u5b58', + providers_saving: '\u5132\u5b58\u4e2d\u2026', + providers_section_meta: '管理 AI 提供者的 API 金鑰。變更會立即生效。', + providers_section_title: '供應商', + providers_status_api_key: 'API 金鑰', + providers_status_configured: 'API \u91d1\u9470\u5df2\u8a2d\u5b9a', + providers_status_not_configured: '\u7121 API \u91d1\u9470', + providers_status_not_configured_label: '\u672a\u8a2d\u5b9a', + providers_status_oauth: 'OAuth', + providers_tab_title: '供應商', + status_agent_running: 'Agent 執行中', + status_completed: '\u5df2\u5b8c\u6210', + status_failed: '\u5931\u6557', + status_heading: '\u6703\u8a71\u72c0\u614b', + status_load_failed: '\u8f09\u5165\u72c0\u614b\u5931\u6557\uff1a', + status_messages: '\u8a0a\u606f\u6578', + status_model: '\u6a21\u578b', + status_no: '\u5426', + status_personality: '\u4eba\u8a2d', + status_session_id: '\u6703\u8a71 ID', + status_title: '\u6a19\u984c', + status_workspace: '\u5de5\u4f5c\u5340', + status_yes: '\u662f', + usage_default_model: '\u9810\u8a2d', + usage_estimated_cost: '\u9810\u4f30\u8cbb\u7528', + usage_heading: 'Token \u7528\u91cf', + usage_input_tokens: '\u8f38\u5165 Token', + usage_load_failed: '\u8f09\u5165\u7528\u91cf\u5931\u6557\uff1a', + usage_output_tokens: '\u8f38\u51fa Token', + usage_personality_none: '\u7121', + usage_settings_tip: '\u6ce8\u610f\uff1a\u8cbb\u7528\u70ba\u9810\u4f30\u503c\u3002', + usage_total: '\u7e3d Token \u6578', + usage_unknown: '\u672a\u77e5', }, }; diff --git a/static/index.html b/static/index.html index f49f4bc0..5cd43e22 100644 --- a/static/index.html +++ b/static/index.html @@ -510,8 +510,8 @@
-
Conversation
- +
Conversation
+
@@ -525,8 +525,8 @@
-
Appearance
- +
Appearance
+
@@ -588,8 +588,8 @@
-
Preferences
- +
Preferences
+
@@ -681,8 +681,8 @@
-
System
- +
System
+
diff --git a/static/sessions.js b/static/sessions.js index 6bc3278d..bd6d3982 100644 --- a/static/sessions.js +++ b/static/sessions.js @@ -355,8 +355,8 @@ function _openSessionActionMenu(session, anchorEl){ const menu=document.createElement('div'); menu.className='session-action-menu open'; menu.appendChild(_buildSessionAction( - session.pinned?'Unpin conversation':'Pin conversation', - session.pinned?'Remove from pinned':'Keep this conversation at the top', + session.pinned?t('session_unpin'):t('session_pin'), + session.pinned?t('session_unpin_desc'):t('session_pin_desc'), session.pinned?ICONS.pin:ICONS.unpin, async()=>{ closeSessionActionMenu(); @@ -366,13 +366,13 @@ function _openSessionActionMenu(session, anchorEl){ session.pinned=newPinned; if(S.session&&S.session.session_id===session.session_id) S.session.pinned=newPinned; renderSessionList(); - }catch(err){showToast('Pin failed: '+err.message);} + }catch(err){showToast(t('session_pin_failed')+err.message);} }, session.pinned?'is-active':'' )); menu.appendChild(_buildSessionAction( - 'Move to project', - session.project_id?'Change the project for this conversation':'Assign a project to this conversation', + t('session_move_project'), + session.project_id?t('session_move_project_desc_has'):t('session_move_project_desc_none'), ICONS.folder, async()=>{ closeSessionActionMenu(); @@ -380,8 +380,8 @@ function _openSessionActionMenu(session, anchorEl){ } )); menu.appendChild(_buildSessionAction( - session.archived?'Restore conversation':'Archive conversation', - session.archived?'Bring this conversation back into the main list':'Hide this conversation until archived is shown', + session.archived?t('session_restore'):t('session_archive'), + session.archived?t('session_restore_desc'):t('session_archive_desc'), session.archived?ICONS.unarchive:ICONS.archive, async()=>{ closeSessionActionMenu(); @@ -390,13 +390,13 @@ function _openSessionActionMenu(session, anchorEl){ session.archived=!session.archived; if(S.session&&S.session.session_id===session.session_id) S.session.archived=session.archived; await renderSessionList(); - showToast(session.archived?'Session archived':'Session restored'); - }catch(err){showToast('Archive failed: '+err.message);} + showToast(session.archived?t('session_archived'):t('session_restored')); + }catch(err){showToast(t('session_archive_failed')+err.message);} } )); menu.appendChild(_buildSessionAction( - 'Duplicate conversation', - 'Create a copy with the same workspace and model', + t('session_duplicate'), + t('session_duplicate_desc'), ICONS.dup, async()=>{ closeSessionActionMenu(); @@ -406,14 +406,14 @@ function _openSessionActionMenu(session, anchorEl){ await api('/api/session/rename',{method:'POST',body:JSON.stringify({session_id:res.session.session_id,title:(session.title||'Untitled')+' (copy)'})}); await loadSession(res.session.session_id); await renderSessionList(); - showToast('Session duplicated'); + showToast(t('session_duplicated')); } - }catch(err){showToast('Duplicate failed: '+err.message);} + }catch(err){showToast(t('session_duplicate_failed')+err.message);} } )); menu.appendChild(_buildSessionAction( - 'Delete conversation', - 'Permanently remove this conversation', + t('session_delete'), + t('session_delete_desc'), ICONS.trash, async()=>{ closeSessionActionMenu();