i18n: add complete Traditional Chinese (zh-Hant) translations (#954)

* i18n: add complete Traditional Chinese (zh-Hant) translations

- Add 300+ zh-Hant translation entries covering all UI sections:
  onboarding, settings/Control Center, session actions, cron jobs,
  providers panel, workspace management, skills, profiles, todos, BTW
- Fix existing zh-Hant translations: remove mixed Simplified Chinese
  characters, fix typos (e.g. 皮膚→佈景, 待踩→待辦, 新存對話→新對話)
- Update zh locale: fix 需要审批→需要审核 (Simplified Chinese correction)
- Add data-i18n attributes to Control Center HTML (index.html) for
  heading, subtitle, tab names, dropdown, and section titles
- Migrate session action menu (sessions.js) from hardcoded English to
  t() function calls for full i18n support

* fix: translate remaining English entries to Traditional Chinese in zh-Hant locale

- settings_heading_title: 'Control Center' → '控制中心'
- settings_dropdown_providers: 'Providers' → '供應商'
- providers_section_title: 'Providers' → '供應商'
- providers_tab_title: 'Providers' → '供應商'

* fix: add missing locale keys to zh/ru/es/de + restore zh approval_heading

- zh (Simplified): reverted approval_heading to 需要审批 (matches master)
  PR had changed it to 需要审核 which broke the representative-translation test
- zh/ru/es/de: added 39 new session management + settings keys as English
  fallback strings (session_archive, session_pin, settings_dropdown_*, etc.)
  These keys were added to English in this PR but missing from other locales
- es: added cmd_status (English fallback) to fix coverage gap
- Fixes all locale coverage test failures

---------

Co-authored-by: 陳俊宇 <chenjunyu@chenjunyudeMacBook-Air-7.local>
Co-authored-by: nesquena-hermes <nesquena-hermes@users.noreply.github.com>
This commit is contained in:
nesquena-hermes
2026-04-24 11:36:41 -07:00
committed by GitHub
parent ed24010e10
commit 116a510ed3
3 changed files with 602 additions and 70 deletions
+579 -47
View File
@@ -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\uff0c<code>onboarding_completed</code> \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 <strong>{provider}</strong>\uff0c\u5b83\u4f7f\u7528 OAuth \u800c\u975e API \u91d1\u9470\u3002\u8acb\u5728\u7d42\u7aef\u6a5f\u4e2d\u57f7\u884c <code>hermes auth</code> \u6216 <code>hermes model</code> \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<strong>{provider}</strong>\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',
},
};
+8 -8
View File
@@ -510,8 +510,8 @@
<div class="settings-pane active" id="settingsPaneConversation">
<div class="settings-section-head">
<div>
<div class="settings-section-title">Conversation</div>
<div class="settings-section-meta" id="hermesSessionMeta">No active conversation selected.</div>
<div class="settings-section-title" data-i18n="settings_section_conversation_title">Conversation</div>
<div class="settings-section-meta" id="hermesSessionMeta" data-i18n="active_conversation_none">No active conversation selected.</div>
</div>
</div>
<div class="hermes-action-grid">
@@ -525,8 +525,8 @@
<div class="settings-pane" id="settingsPaneAppearance">
<div class="settings-section-head">
<div>
<div class="settings-section-title">Appearance</div>
<div class="settings-section-meta">Theme, accent colors, and visual style.</div>
<div class="settings-section-title" data-i18n="settings_section_appearance_title">Appearance</div>
<div class="settings-section-meta" data-i18n="settings_section_appearance_meta">Theme, accent colors, and visual style.</div>
</div>
</div>
<div class="settings-field">
@@ -588,8 +588,8 @@
<div class="settings-pane" id="settingsPanePreferences">
<div class="settings-section-head">
<div>
<div class="settings-section-title">Preferences</div>
<div class="settings-section-meta">Defaults and UI behavior for Hermes Web UI.</div>
<div class="settings-section-title" data-i18n="settings_section_preferences_title">Preferences</div>
<div class="settings-section-meta" data-i18n="settings_section_preferences_meta">Defaults and UI behavior for Hermes Web UI.</div>
</div>
</div>
<div class="settings-field">
@@ -681,8 +681,8 @@
<div class="settings-pane" id="settingsPaneSystem">
<div class="settings-section-head">
<div>
<div class="settings-section-title">System</div>
<div class="settings-section-meta">Instance version and access controls.</div>
<div class="settings-section-title" data-i18n="settings_section_system_title">System</div>
<div class="settings-section-meta" data-i18n="settings_section_system_meta">Instance version and access controls.</div>
</div>
<span class="settings-version-badge"></span>
</div>
+15 -15
View File
@@ -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();