// ── i18n: locale bundles and t() helper ────────────────────────────────────── // To add a new language: add an entry to LOCALES below with all keys translated. // The language code must match a valid BCP 47 tag (used for speech recognition). // Keys missing in a non-English locale fall back to English automatically. const LOCALES = { en: { offline_title: 'Connection lost', offline_browser_detail: 'Your browser reports that this device is offline.', offline_network_detail: 'Hermes is unreachable from this browser right now.', offline_autorefresh: 'I will refresh this page automatically when Hermes is reachable again.', offline_check_now: 'Check now', offline_checking: 'Checking…', offline_stream_waiting: 'Connection lost. Waiting to refresh…', _lang: 'en', _label: 'English', _speech: 'en-US', // boot.js cancelling: 'Cancelling\u2026', cancel_failed: 'Cancel failed: ', mic_denied: 'Microphone access denied. Check browser permissions.', mic_insecure_origin: 'Voice input needs a secure connection. Open Hermes over HTTPS or from localhost to use the microphone.', mic_no_speech: 'No speech detected. Try again.', mic_network: 'Speech recognition unavailable.', mic_error: 'Voice input error: ', // Composer voice buttons (#1488 — distinct labels for dictation vs voice mode) voice_dictate: 'Dictate', voice_dictate_active: 'Stop dictation', voice_recording_active: 'Stop recording', voice_mode_toggle: 'Voice mode', voice_mode_toggle_active: 'Exit voice mode', // Turn-based voice mode (#1333) voice_listening: 'Listening…', voice_speaking: 'Speaking…', voice_thinking: 'Thinking…', voice_error: 'Voice not supported in this browser', voice_mode_active: 'Voice mode on', voice_mode_off: 'Voice mode off', session_imported: 'Session imported', import_failed: 'Import failed: ', import_invalid_json: 'Invalid JSON', image_pasted: 'Image pasted: ', text_pasted: 'Pasted text attached as ', // messages.js edit_message: 'Edit message', regenerate: 'Regenerate response', copy: 'Copy', copied: 'Copied!', copy_failed: 'Copy failed', selected_text_reply: 'Reply with selection', selected_text_reply_title: 'Append selected chat text as quoted context', selected_text_reply_appended: 'Selected text added to composer', saved_prompts_empty: 'No saved prompts yet.', saved_prompts_save_current: 'Save current input as prompt', saved_prompts_saved: 'Prompt saved', saved_prompts_delete: 'Delete prompt', saved_prompts_empty_input: 'Type a prompt to save first', context_block_name_default: 'Context', context_block_flush_aria: 'Context blocks will be included when you send', context_block_rename_hint: 'Click or press Enter to rename', context_block_rename_aria: 'Rename context block', context_block_remove: 'Remove context block', diff_loading: 'Loading diff', diff_error: 'Could not load patch file', diff_too_large: 'Patch file too large to display inline', tree_view: 'Tree', raw_view: 'Raw', parse_failed_note: 'parse failed', you: 'You', mcp_servers_title: 'MCP Servers', mcp_servers_desc: 'View MCP servers configured in config.yaml.', mcp_no_servers: 'No MCP servers configured.', mcp_add_server: '+ Add Server', mcp_field_name: 'Server Name', mcp_transport_label: 'Transport Type', mcp_field_command: 'Command', mcp_field_args: 'Arguments (comma-separated)', mcp_field_url: 'URL', mcp_field_timeout: 'Timeout (seconds)', mcp_save: 'Save', mcp_cancel: 'Cancel', mcp_name_required: 'Server name is required.', mcp_url_required: 'URL is required for HTTP transport.', mcp_command_required: 'Command is required for stdio transport.', mcp_saved: 'MCP server saved.', mcp_save_failed: 'Failed to save MCP server.', mcp_delete_confirm_title: 'Delete MCP Server', mcp_delete_confirm_message: 'Delete MCP server "{0}"? This action cannot be undone.', mcp_deleted: 'MCP server deleted.', mcp_delete_failed: 'Failed to delete MCP server.', mcp_load_failed: 'Failed to load MCP servers.', mcp_restart_hint: 'Server changes are read-only here for now. Edit config.yaml and restart Hermes for changes to take effect.', mcp_toggle_followup: 'Enable/disable controls are intentionally deferred until MCP reload semantics are explicit.', mcp_status_active: 'Active', mcp_status_configured: 'Configured', mcp_status_disabled: 'Disabled', mcp_status_invalid_config: 'Invalid config', mcp_status_unknown: 'Unknown', mcp_tool_count: '{0} tools', mcp_enabled_yes: 'Enabled', mcp_enabled_no: 'Disabled', mcp_enable_server: 'Enable this MCP server', mcp_disable_server: 'Disable this MCP server', mcp_enabled_toast: (name) => `MCP server "${name}" enabled.`, mcp_disabled_toast: (name) => `MCP server "${name}" disabled.`, mcp_toggle_failed: 'Failed to update MCP server.', mcp_tools_title: 'MCP Tools', mcp_tools_desc: 'Search known tools across active MCP servers.', mcp_tools_search_placeholder: 'Search tools by name, server, or description…', mcp_tools_no_tools: 'No MCP tools are available from the active runtime inventory.', mcp_tools_no_matches: 'No MCP tools match your search.', mcp_tools_load_failed: 'Failed to load MCP tools.', mcp_tools_schema_empty: 'No schema parameters.', mcp_tools_runtime_note: 'Tool inventory only uses already-known active MCP runtime data; the WebUI does not start or probe servers.', mcp_tools_summary_no_matches: (query,total) => `No MCP tools matching “${query}” (${total} total MCP tools).`, mcp_tools_summary_none: 'No MCP tools to show.', mcp_tools_summary_matching: (query) => ` matching “${query}”`, mcp_tools_summary_total_note: (total) => ` (${total} total MCP tools)`, mcp_tools_summary_showing: (start,end,filtered,searchNote,totalNote,page,pages) => `Showing ${start}-${end} of ${filtered} MCP tools${searchNote}${totalNote}. Page ${page} of ${pages}.`, mcp_tools_page_size_prefix: 'Show', mcp_tools_page_size_suffix: 'per page', mcp_tools_per_page_aria: 'MCP tools per page', mcp_tools_inactive_configured_servers: (servers) => `Configured but inactive in this WebUI runtime: ${servers}.`, mcp_tools_pagination_label: 'MCP tools pagination', mcp_tools_previous_page: '‹ Prev', mcp_tools_previous_page_aria: 'Previous MCP tools page', mcp_tools_next_page: 'Next ›', mcp_tools_next_page_aria: 'Next MCP tools page', // PDF preview (#480) pdf_loading: 'Loading PDF {0}…', pdf_too_large: 'PDF too large for inline preview', pdf_no_pages: 'PDF has no pages', pdf_error: 'Failed to render PDF preview', pdf_download: 'Download PDF', pdf_truncated: 'Showing the first {0} of {1} pages — download for the full document', // HTML sandbox preview (#482) html_loading: 'Loading HTML preview…', html_too_large: 'HTML too large for inline preview', html_error: 'Failed to render HTML preview', html_open_full: 'Open full page', html_sandbox_label: 'HTML Preview (sandboxed)', thinking: 'Thinking', expand_all: 'Expand all', collapse_all: 'Collapse all', edit_failed: 'Edit failed: ', regen_failed: 'Regenerate failed: ', reconnect_active: 'A response is still being generated. Reload when ready?', reconnect_finished: 'A response was in progress when you last left. Messages may have updated.', // approval card approval_heading: 'Approval required', approval_desc_prefix: 'Dangerous command detected', approval_btn_once: 'Allow once', approval_btn_once_title: 'Allow this one command (Enter)', approval_btn_session: 'Allow session', approval_btn_session_title: 'Allow for this conversation session', approval_btn_always: 'Always allow', approval_btn_always_title: 'Always allow this command pattern', approval_btn_deny: 'Deny', approval_btn_deny_title: 'Deny — do not run this command', approval_responding: 'Responding\u2026', approval_gateway_unsupported: 'Approvals require a newer gateway. Upgrade the connected Hermes gateway to enable this.', approval_gateway_unsupported_label: 'Approvals not supported', clarify_heading: 'Clarification needed', clarify_hint: 'Pick a choice, or type your own answer below.', clarify_other: 'Other', clarify_send: 'Send', clarify_input_placeholder: 'Type your response…', clarify_responding: 'Responding\u2026', session_attention_approval: (n) => n === 1 ? 'Approval' : `${n} approvals`, session_attention_clarify: (n) => n === 1 ? 'Question' : `${n} questions`, session_attention_generic: (n) => n === 1 ? 'Attention' : `${n} items`, session_attention_approval_title: 'Waiting for permission decision', session_attention_clarify_title: 'Waiting for your answer', session_attention_generic_title: 'Waiting for user action', untitled: 'Untitled', n_messages: (n) => `${n} messages`, load_older_messages: '↑ Scroll up or click to load older messages', session_jump_start: 'Start', session_jump_start_label: 'Jump to beginning of session', session_jump_end: 'End', session_jump_end_label: 'Jump to end of session', session_new_message: 'New message', session_new_message_label: 'New message available, jump to end', jump_to_question: 'to response', jump_to_question_label: 'Jump to the start of this response', queued_label: 'Sends after response', queued_count: (n) => n === 1 ? '1 queued' : `${n} queued`, queued_cancel: 'Cancel queued message', model_unavailable: ' (unavailable)', model_unavailable_title: 'This model is no longer in your current provider list', provider_mismatch_warning: (m,p)=>`"${m}" may not work with your configured provider (${p}). Send anyway, or run \`hermes model\` in your terminal to switch.`, provider_mismatch_label: 'Provider mismatch', gateway_auth_label: 'Gateway authentication failed', gateway_start: 'Start', gateway_stop: 'Stop', gateway_restart: 'Restart', gateway_start_success: 'Gateway start completed.', gateway_stop_success: 'Gateway stop completed.', gateway_restart_success: 'Gateway restart completed.', gateway_start_failed: 'Gateway start failed', gateway_stop_failed: 'Gateway stop failed', gateway_restart_failed: 'Gateway restart failed', gateway_running: 'Running', gateway_session: 'session', gateway_sessions: 'sessions', gateway_status_load_failed: 'Failed to load gateway status', model_not_found_label: 'Model not found', model_custom_label: 'Custom model ID', model_custom_placeholder: 'e.g. openai/gpt-5.4', model_show_all_models: 'Show all {0} models', model_search_placeholder: 'Search models…', model_search_no_results: 'No models found', model_group_configured: 'Configured', ws_search_placeholder: 'Search workspaces…', ws_no_results: 'No workspaces found', workspace_new_worktree_conversation: 'New conversation in worktree', workspace_new_worktree_conversation_meta: 'Create an isolated git worktree for this workspace.', workspace_worktree_created: 'Worktree conversation created', workspace_worktree_failed: 'Worktree creation failed: ', session_worktree_badge: 'Worktree', model_scope_advisory: 'Applies to this conversation from your next message.', model_scope_toast: 'Applies to this conversation from your next message.', // commands.js cmd_clear: 'Clear conversation messages', cmd_help: 'Show available slash commands', cmd_compress: 'Manually compress conversation context (usage: /compress [focus topic])', ctx_compress_hint: 'Compress context to free up space →', ctx_compress_action: '⚠ Compress now to free context', cmd_compact_alias: 'Legacy alias for /compress', cmd_model: 'Switch model (e.g. /model gpt-4o)', cmd_workspace: 'Switch workspace by name', cmd_terminal: 'Open the workspace terminal', cmd_new: 'Start a new chat session', cmd_usage: 'Toggle token usage display on/off', cmd_theme: 'Switch appearance (theme: system/dark/light, skin: default/ares/mono/graphite/slate/poseidon/sisyphus/charizard/sienna/catppuccin/nous/geist-contrast/zeus/verdigris)', cmd_personality: 'Switch agent personality', cmd_skills: 'List available Hermes skills', cmd_use: 'Force a skill for the next message', available_commands: 'Available commands:', type_slash: 'Type / to see commands', conversation_cleared: 'Conversation cleared', command_label: 'Command', context_compaction_label: 'Context compaction', retrieval_context_label: 'Indexed context', retrieval_context_preview: 'Earlier messages are stored and retrievable with context tools', preserved_task_list_label: 'Preserved task list', reference_only_label: 'Reference only', model_usage: 'Usage: /model ', no_model_match: 'No model matching "', model_did_you_mean: (m) => ` — did you mean "${m}"?`, switched_to: 'Switched to ', workspace_usage: 'Usage: /workspace ', no_workspace_match: 'No workspace matching "', switched_workspace: 'Switched to workspace: ', workspace_switch_failed: 'Workspace switch failed: ', new_session: 'New session created', new_session_creating: 'Creating new conversation…', compressing: 'Requesting context compression...', compress_running_label: 'Compressing', compress_complete_label: 'Compression complete', auto_compress_label: 'Automatic compression', compress_failed_label: 'Compression failed', focus_label: 'Focus', token_usage_on: 'Token usage on', token_usage_off: 'Token usage off', usage_cache_hit_detail: 'Cache: {0}% hit ({1} read / {2} write)', usage_cached_percent: '{0}% cached', theme_usage: 'Usage: /theme ', theme_set: 'Theme: ', no_active_session: 'No active session', cmd_queue: 'Queue a message for the next turn', cmd_goal: 'Set or inspect a persistent goal', goal_evaluating_progress: 'Evaluating goal progress…', goal_working_toward: 'Working toward goal…', goal_continuing_toast: 'Continuing toward goal…', goal_status_none: 'No active goal. Set one with /goal .', goal_status_active: (turns, max_turns, goal) => `⊙ Goal (active, ${turns}/${max_turns} turns): ${goal}`, goal_status_paused: (turns, max_turns, reason, goal) => `⏸ Goal (paused, ${turns}/${max_turns}${reason ? `, ${reason}` : ''}): ${goal}`, goal_status_done: (turns, max_turns, goal) => `✓ Goal done (${turns}/${max_turns}): ${goal}`, goal_set: (turns, goal) => `⊙ Goal set (${turns}-turn budget): ${goal}`, goal_paused: (goal) => `⏸ Goal paused: ${goal}`, goal_resumed: (goal) => `▶ Goal resumed: ${goal}`, goal_cleared: 'Goal cleared.', goal_no_goal: 'No active goal.', goal_achieved: (reason) => `✓ Goal achieved: ${reason}`, goal_paused_budget_exhausted: (turns, max_turns) => `⏸ Goal paused — ${turns}/${max_turns} turns used. Use /goal resume to keep going, or /goal clear to stop.`, goal_continuing: (turns, max_turns, reason) => `↻ Continuing toward goal (${turns}/${max_turns}): ${reason}`, cmd_interrupt: 'Cancel current turn and send a new message', cmd_steer: 'Inject a mid-turn correction without interrupting the agent', cmd_queue_no_msg: 'Usage: /queue ', cmd_queue_not_busy: 'No active task — just send normally', cmd_queue_confirm: 'Message queued', cmd_interrupt_no_msg: 'Usage: /interrupt ', cmd_interrupt_confirm: 'Interrupted — sending new message', cmd_steer_no_msg: 'Usage: /steer ', cmd_steer_fallback: 'Steer unavailable — draft restored', cmd_steer_delivered: 'Steer delivered — agent will see it on its next tool result', steer_leftover_queued: 'Steer queued for next turn', busy_steer_fallback: 'Steer unavailable — draft restored', steer_fail_no_cached_agent: 'No agent cached for this session — try refreshing', steer_fail_agent_lacks_steer: 'This agent version does not support steer', steer_fail_session_not_found: 'Session not found — it may have expired', steer_fail_not_running: 'Agent is not currently running', steer_fail_stream_dead: 'The agent stream has ended', steer_fail_steer_error: 'Steer delivery failed — the agent may have finished', steer_fail_network_error: 'Network error — check your connection', steer_fail_unknown: 'Steer unavailable', steer_recovery_retry: 'Retry', steer_recovery_dismiss: 'Dismiss', busy_interrupt_confirm: 'Interrupted — sending new message', settings_label_default_message_mode: 'Default message mode', settings_desc_default_message_mode: 'Controls what happens when you send a message while the agent is running. Queue waits; Interrupt cancels and starts fresh; Steer injects a correction mid-turn without interrupting. If Steer is unavailable, the draft is restored so you can choose the next action.', settings_label_fade_text_effect: 'Fade text effect', settings_desc_fade_text_effect: 'Fade newly streamed words in while the assistant is responding. Similar to OpenWebUI; off by default for maximum performance.', settings_label_max_tokens: 'Max output tokens', settings_desc_max_tokens: 'Caps assistant output for new streaming turns. Leave blank to use the active profile config fallback.', settings_placeholder_max_tokens_none: 'No override', settings_placeholder_max_tokens_fallback: 'No override (fallback: {0})', settings_default_message_mode_queue: 'Queue follow-up', settings_default_message_mode_interrupt: 'Interrupt current turn', settings_default_message_mode_steer: 'Steer (mid-turn correction)', settings_label_busy_placeholder_hint: 'Show busy placeholder hint', settings_desc_busy_placeholder_hint: 'Shows the composer placeholder with the current busy action while the session is running and the draft is empty.', composer_placeholder_busy_queue: 'Enter = queue | /interrupt | /background | /steer', composer_placeholder_busy_interrupt: 'Enter = interrupt | /queue | /background | /steer', composer_placeholder_busy_steer: 'Enter = steer | /queue | /background | /interrupt', slash_skill_badge:'Skill', slash_skill_desc:'Invoke this skill', cmd_stop:'Stop the current response', cmd_title:'Get or set the session title', cmd_retry:'Resend the last message', cmd_undo:'Remove the last exchange', cmd_btw:'Ask a side question (ephemeral)', cmd_btw_usage:'/btw — ask a side question using session context', cmd_background:'Run a prompt in background', cmd_background_usage:'/background — run in parallel without blocking', cmd_branch:'Fork this conversation into a new session', cmd_branch_usage:'/branch [name] — fork conversation (optionally with a name)', branch_forked:'Forked into new session', branch_failed:'Fork failed: ', fork_from_here:'Fork from here', forked_from:'Forked from', subagent_children:'Subagent sessions', btw_asking:'Asking side question...', btw_label:'Side question — not in history', btw_done:'Side question answered', btw_no_answer:'No answer received.', btw_failed:'Side question failed: ', bg_running:'Running in background...', bg_complete:'Background task complete', bg_label:'Background result:', bg_no_answer:'(no answer)', bg_failed:'Background task failed: ', undo_exchange:'Undo last exchange', cmd_status:'Show session info', cmd_voice:'Toggle microphone input', stream_stopped:'Response stopped.', no_active_task:'No active task to stop.', cancel_unavailable:'Cancel not available.', retry_failed:'Retry failed: ', undo_failed:'Undo failed: ', undid_n_messages:'Removed', undid_messages_suffix:'message(s).', status_heading:'Session Status', status_session_id:'Session ID', status_title:'Title', status_model:'Model', status_provider:'Provider', status_workspace:'Workspace', status_personality:'Personality', status_messages:'Messages', status_agent_running:'Agent running', status_profile: 'Profile', status_hermes_home: 'Hermes home', status_started: 'Started', status_updated: 'Updated', status_tokens: 'Tokens', status_ephemeral: 'Ephemeral snapshot — not saved to transcript history.', status_no_tokens: 'No tokens used', status_unknown: 'Unknown', status_yes:'Yes', status_no:'No', status_load_failed:'Failed to load status: ', title_current:'Current title', title_change_hint:'Use `/title ` to rename.', title_set:'Title set to', cmd_webui_only_session:'This command is not available for CLI-imported sessions.', cmd_voice_use_mic:'Click the mic button in the composer.', usage_heading:'Token Usage', usage_default_model:'default', usage_unknown:'unknown', usage_input_tokens:'Input tokens', usage_output_tokens:'Output tokens', usage_total:'Total tokens', usage_estimated_cost:'Estimated cost', usage_settings_tip:'Note: cost estimates are approximate.', usage_load_failed:'Failed to load usage: ', usage_personality_none:'none', // Session toolsets (#493) session_toolsets:'Session Toolsets', session_toolsets_desc:'Use active profile defaults or choose a custom toolset list for this session', session_toolsets_global:'Active profile defaults', session_toolsets_profile_defaults:'Active profile defaults', session_toolsets_custom:'Custom override', session_toolsets_use_profile_defaults:'Use active profile defaults', session_toolsets_configured_servers:'Configured MCP servers', session_toolsets_loading_servers:'Loading configured servers...', session_toolsets_no_configured_servers:'No configured MCP servers', session_toolsets_placeholder:'tool1, tool2, …', session_toolsets_apply:'Apply', session_toolsets_clear:'Use defaults', session_toolsets_applied:'Toolsets updated', session_toolsets_cleared:'Using active profile defaults', session_toolsets_failed:'Failed to update toolsets: ', untitled:'Untitled', no_personalities: 'No personalities found (add them to ~/.hermes/personalities/)', available_personalities: 'Available personalities:', personality_switch_hint: '\n\nUse `/personality ` to switch, or `/personality none` to clear.', personalities_load_failed: 'Failed to load personalities', personality_cleared: 'Personality cleared', personality_set: 'Personality: ', failed_colon: 'Failed: ', // ui.js no_workspace: 'No workspace', terminal_open_title: 'Open workspace terminal', terminal_no_workspace_title: 'Select a workspace to open terminal', terminal_title: 'Terminal', terminal_clear: 'Clear', terminal_copy_output: 'Copy output', terminal_restart: 'Restart', terminal_collapse: 'Collapse', terminal_expand: 'Expand', terminal_close: 'Close', terminal_input_placeholder: 'Run a command...', terminal_start_failed: 'Terminal start failed: ', terminal_input_failed: 'Terminal input failed: ', terminal_copy_failed: 'Copy failed: ', terminal_error: 'Terminal error', terminal_remote_backend_unsupported: 'Embedded terminal is only supported for local terminal backends.', workspace_empty_no_path: 'No workspace selected. Set a workspace in Settings \u2192 Workspace to browse files.', workspace_empty_dir: 'This workspace is empty.', workspace_show_hidden_files: 'Show hidden files', workspace_show_hidden_files_desc: 'Include .DS_Store, .git, node_modules, and other hidden / system files in the file tree.', workspace_hidden_files_visible: 'hidden visible', workspace_hidden_files_visible_title: 'Hidden files are visible — click for options', workspace_options: 'Workspace options', dialog_confirm_title: 'Confirm action', dialog_prompt_title: 'Enter a value', dialog_confirm_btn: 'Confirm', // workspace.js unsaved_confirm: 'You have unsaved changes in the preview. Discard and navigate?', discard: 'Discard', save: 'Save', edit: 'Edit', clear: 'Clear', create: 'Create', remove: 'Remove', save_title: 'Save changes', edit_title: 'Edit this file', saved: 'Saved', save_failed: 'Save failed: ', image_load_failed: 'Could not load image', file_open_failed: 'Could not open file', downloading: (name) => `Downloading ${name}\u2026`, double_click_rename: 'Double-click to rename', symlink_link_to: 'Symlink → {target}', external_link_open_confirm: 'This symlink points outside the workspace. Open it in a read-only external view for this browser session?', external_link_read_only: 'This external view is read-only. Create, rename, move, delete, upload, reveal, and editor actions stay disabled here.', external_link_grant_expired: 'This external view expired. Reopen the escape-target symlink to authorize it again.', session_rename_failed_no_row: 'Could not start rename — row not found.', renamed_to: 'Renamed to ', rename_failed: 'Rename failed: ', moved_to: 'Moved to ', move_failed: 'Move failed: ', delete_title: 'Delete', delete_confirm: (name) => `Delete ${name}?`, delete_dir_confirm: (name) => `Delete folder "${name}" and all its contents?`, rename_title: 'Rename', rename_prompt: 'New name:', deleted: 'Deleted ', delete_failed: 'Delete failed: ', reveal_in_finder: 'Reveal in File Manager', reveal_failed: 'Failed to reveal: ', copy_file_path: 'Copy file path', open_in_vscode: 'Open in VS Code', open_in_vscode_failed: 'Failed to open in VS Code: ', download_folder: 'Download Folder', path_copied: 'File path copied to clipboard', path_copy_failed: 'Failed to copy path: ', session_rename: 'Rename conversation', session_rename_desc: 'Edit the title of this conversation', session_title_regenerate: 'Regenerate title', session_title_regenerate_desc: 'Ask Hermes to generate a fresh title from the conversation', session_title_regenerating: 'Regenerating title…', session_title_regenerated: (title) => `Title regenerated: ${title}`, session_title_regenerate_failed: 'Regenerate title failed: ', session_copy_link: 'Copy conversation link', session_copy_link_desc: 'Copy a direct link to this conversation', session_link_copied: 'Conversation link copied to clipboard', session_link_copy_failed: 'Failed to copy conversation link: ', new_file_prompt: 'New file name (e.g. notes.md):', new_file: 'New File', new_folder: 'New Folder', workspace_root: 'workspace root', new_file_prompt_title: 'New file name in {0}:', new_folder_prompt_title: 'New folder name in {0}:', project_name_prompt: 'Project name:', created: 'Created ', create_failed: 'Create failed: ', new_folder_prompt: 'New folder name:', folder_created: 'Created folder ', folder_create_failed: 'Create folder failed: ', workspace_auto_create_folder: 'Create folder if it doesn\'t exist', folder_add_as_space_btn: 'Add as Space', folder_add_as_space_msg: 'Add this folder as a new space in your workspace list?', folder_add_as_space_title: 'Add as Space?', remove_title: 'Remove', empty_dir: '(empty)', upload_failed: 'Upload failed: ', upload_too_large: (maxMb, fileMb) => `File is too large (${fileMb} MB). Maximum upload size is ${maxMb} MB.`, uploading: 'Uploading…', uploaded: 'Uploaded', all_uploads_failed: (n) => `All ${n} upload(s) failed`, archive_extracted: (n, c) => `Extracted ${n} file(s) from ${c} archive(s)`, 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_hide_external: 'Hide from list', session_restore: 'Restore conversation', session_archive_desc: 'Hide this conversation until archived is shown', session_archive_worktree_desc: 'Hide this conversation; keep its worktree on disk', session_hide_external_desc: 'Hide this imported session from WebUI without deleting the source history.', session_restore_desc: 'Bring this conversation back into the main list', session_archived: 'Session archived', session_archived_worktree: 'Session archived. Worktree remains on disk.', session_hidden: 'Session hidden from list', 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_export_html: 'Export as HTML', session_export_html_desc: 'Download this conversation as a self-contained HTML file', session_duplicated: 'Session duplicated', session_duplicate_failed: 'Duplicate failed: ', session_stop_response: 'Stop response', session_stop_response_desc: 'Cancel the running response for this conversation', session_delete: 'Delete conversation', session_delete_desc: 'Permanently remove this conversation', session_delete_confirm: 'Delete this conversation?', session_delete_worktree_desc: 'Delete only the WebUI conversation; keep the worktree on disk', session_delete_worktree_confirm: (path) => `Delete this conversation? The worktree at ${path} will remain on disk.`, session_deleted: 'Conversation deleted', session_deleted_worktree: 'Conversation deleted. Worktree remains on disk.', session_worktree_remove: 'Remove worktree', session_worktree_remove_desc: (path) => `Delete the git worktree at ${path} from disk`, session_worktree_remove_confirm: (path) => `Remove git worktree from disk?\n\nPath: ${path}\n\nThis will delete the entire worktree directory. Session data remains in WebUI.`, session_worktree_remove_not_exists: (path) => `The worktree at ${path} no longer exists on disk.`, session_worktree_remove_confirm_label: 'Remove', session_worktree_removed: 'Worktree removed.', session_worktree_remove_failed: 'Failed to remove worktree: ', session_worktree_remove_status_failed: 'Failed to read worktree status: ', session_worktree_remove_locked_by_stream: 'Cannot remove — an active streaming session is using this worktree.', session_worktree_remove_locked_by_terminal: 'Cannot remove — an active terminal session is using this worktree.', session_worktree_remove_unsafe_blocked: 'Resolve local changes or unpushed commits before removing this worktree.', session_worktree_remove_dirty_warning: 'WARNING: This worktree has uncommitted changes which will be lost.', session_worktree_remove_untracked_warning: (count) => `${count} untracked file(s) will be permanently deleted.`, session_worktree_remove_ahead_warning: (ahead) => `${ahead} unpushed commit(s) will be lost.`, session_select_mode: 'Select', session_select_mode_desc: 'Select conversations to batch manage', session_select_all: 'Select all', session_deselect_all: 'Deselect all', session_selected_count: '{0} selected', session_batch_archive: 'Archive', session_batch_delete: 'Delete', session_batch_move: 'Move to project', session_batch_delete_confirm: 'Delete {0} conversations?', session_batch_archive_confirm: 'Archive {0} conversations?', session_batch_delete_worktree_confirm: 'Delete {0} conversations? {1} worktree-backed conversation(s) will leave their worktree directories on disk.', session_batch_archive_worktree_confirm: 'Archive {0} conversations? {1} worktree-backed conversation(s) will keep their worktree directories on disk.', session_no_selection: 'No conversations selected', // 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_check_now: 'Check now', settings_checking: 'Checking\u2026', settings_up_to_date: 'Up to date \u2713', settings_updates_available: '{count} update(s) available', settings_updates_disabled: 'Update checks disabled', settings_update_check_failed: 'Update check failed', settings_update_no_git: 'Can\'t check for updates (not a git checkout)', settings_label_workspace_panel_open: 'Keep workspace panel open by default', settings_desc_workspace_panel_open: 'When enabled, the workspace / file browser panel opens automatically with each new session. You can still close it manually at any time.', settings_label_workspace_todos_tab: 'Show Todos tab in workspace panel', settings_desc_workspace_todos_tab: 'When enabled, a Todos tab appears in the workspace panel. The sidebar Todos panel remains available.', settings_label_session_jump_buttons: 'Show session jump buttons', settings_desc_session_jump_buttons: 'Show floating Start and End buttons while reading long session histories.', settings_label_terminal_auto_expand: 'Auto-expand terminal on output', settings_desc_terminal_auto_expand: 'Expand the collapsed terminal panel automatically when a running command emits new output.', settings_label_session_endless_scroll: 'Load older messages while scrolling up', settings_desc_session_endless_scroll: 'When enabled, older messages load automatically as you scroll upward. When disabled, use the older-messages button.', settings_label_auto_scroll_follow: 'Auto-follow new content', settings_desc_auto_scroll_follow: 'When enabled, the view scrolls to the bottom as new tokens stream in. When disabled, you control the scroll position manually.', settings_label_render_user_markdown: 'Render markdown in user messages', settings_label_show_titlebar_profile: 'Show profile switcher in titlebar', settings_desc_show_titlebar_profile: 'When enabled, a profile switcher button appears in the top-left app titlebar so you can change profiles from any tab. Off by default; the composer footer always has a profile switcher regardless of this setting.', settings_desc_render_user_markdown: 'When enabled, bold, italic, links, and other markdown in your own messages are rendered. Off by default; fenced code blocks and math always render regardless of this setting.', settings_label_large_text_paste_as_attachment: 'Attach large pasted text as file', settings_desc_large_text_paste_as_attachment: 'When enabled, long pasted text becomes a .md attachment instead of filling the composer.', settings_label_project_quick_create: 'Show per-project new-conversation buttons', settings_desc_project_quick_create: 'When enabled, each project chip in the sidebar gets a + button to start a conversation in that project.', settings_label_structured_code: 'JSON/YAML code blocks', settings_option_structured_code_auto: 'Auto: Tree for long blocks', settings_option_structured_code_on: 'Tree by default', settings_option_structured_code_off: 'Raw by default', settings_label_structured_code_auto_lines: 'Auto threshold lines', settings_desc_structured_code: 'When Auto is selected, JSON/YAML blocks with at least this many lines open in Tree view. Tree always opens the structured viewer; Raw keeps the syntax-highlighted text. You can still switch Tree/Raw on each block.', settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_chat_activity_display_mode: 'Activity display', settings_desc_chat_activity_display_mode: 'Compact Worklog groups supporting activity into a quiet summary. Transparent Stream keeps each thinking/tool event as its own chronological expandable row.', first_token_time: 'Time to first token', processed_elapsed: _i18nProcessedElapsedEn, worklog_thinking: 'Thinking', tool_target_skill_suffix: 'skill', tool_action_label: _i18nToolActionLabelEn, tool_worklog_summary: _i18nToolWorklogSummaryEn, tool_summary_join: _i18nToolSummaryJoinEn, done: 'Done', settings_option_compact_worklog: 'Compact Worklog', settings_option_transparent_stream: 'Transparent Stream', settings_label_tab_visibility: 'Sidebar tabs', settings_desc_tab_visibility: 'Choose which tabs appear in the sidebar and rail. Drag chips to reorder them. Chat and Settings are always visible.', settings_label_composer_controls: 'Chat footer controls', settings_desc_composer_controls: 'Toggle which controls are shown in the chat footer. Drag chips to reorder each footer group.', settings_label_composer_situational_controls: 'Situational footer controls', settings_desc_composer_situational_controls: 'These controls do not always appear, depending on viewport, mode, or runtime state. You can still toggle them off if needed.', composer_control_attach: 'Attach', composer_control_saved_prompts: 'Saved prompts', composer_control_mic: 'Mic', composer_control_profile: 'Profile', composer_control_workspace: 'Workspace', composer_control_model: 'Model', composer_control_reasoning: 'Reasoning', composer_control_context: 'Context', composer_control_voice_mode: 'Voice mode', composer_control_yolo: 'YOLO', composer_control_bg_badge: 'Background badge', composer_control_mobile_config: 'Mobile config', composer_control_quota_chip: 'Quota chip', composer_control_toolsets: 'Toolsets', composer_control_status: 'Status', open_in_browser: 'Open in browser', 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_plugins: 'Plugins', settings_tab_extensions: 'Extensions', settings_extensions_gallery_tab: 'Gallery', settings_extensions_installed_tab: 'Installed', settings_extensions_diagnostics_tab: 'Diagnostics', settings_extensions_gallery_loading: 'Loading gallery…', settings_extensions_gallery_empty: 'No extensions found in the registry.', settings_extensions_gallery_error: 'Failed to load gallery.', ext_gallery_install: 'Install', ext_gallery_installing: 'Installing…', ext_gallery_installed: 'Installed', ext_gallery_uninstall: 'Uninstall', ext_gallery_uninstalling: 'Uninstalling…', ext_gallery_restart_required: 'Restart required', ext_gallery_permissions_show: 'Permissions', ext_gallery_permissions_hide: 'Hide permissions', ext_gallery_permissions_empty: 'No extra permissions declared.', ext_gallery_version: 'Version', ext_gallery_author: 'Author', ext_gallery_capabilities: 'Capabilities', ext_gallery_next_step: 'Next step', ext_gallery_after_install: 'After install', ext_gallery_local_component_required: 'This extension has a local component. Start the required local app or sidecar after installing.', ext_gallery_local_app_label: 'Local app', ext_gallery_required_suffix: '{0} required', ext_gallery_sidecar_required: 'Sidecar required', ext_gallery_native_host_required: 'Native host required', ext_gallery_open_setup_guide: 'Open setup guide', ext_gallery_install_restart_required: 'Extension installed. Restart required to apply.', ext_gallery_install_followup: 'Extension installed. See the card for next steps.', ext_gallery_install_ok: 'Extension installed successfully.', ext_gallery_uninstall_ok: 'Extension uninstalled.', settings_plugins_title: 'Plugins', plugins_enable_toggle: 'Enable', settings_plugins_meta: 'View installed Hermes plugins and the lifecycle hooks they register. This panel is read-only.', settings_plugins_empty: 'No Hermes plugins are currently visible. Install or enable plugins from the Hermes CLI/config to see them here.', plugins_unnamed: 'Unnamed plugin', plugins_no_description: 'No description provided.', plugins_no_hooks: 'No registered lifecycle hooks', plugins_registered_hooks: 'Registered hooks', plugins_enabled: 'Enabled', plugins_disabled: 'Disabled', plugins_active_provider: 'Active (provider)', plugins_provider_no_hooks: 'Provider plugin — no agent-visibility hooks', plugins_load_failed: 'Failed to load plugins: ', settings_tab_system: 'System', settings_tab_help: 'Help', settings_help_meta: 'Resources and support for Hermes WebUI.', settings_help_docs_label: 'Documentation', settings_help_docs_desc: 'Guides, configuration reference, and the full Hermes WebUI README.', settings_help_docs_link: 'Open Documentation', settings_help_issue_label: 'Having an issue?', settings_help_issue_desc: 'Search existing reports or open a new one on GitHub.', settings_help_issue_link: 'Open GitHub Issues', settings_title: 'Settings', settings_search_placeholder: 'Search settings…', settings_search_no_results: 'No settings found.', settings_save_btn: 'Save Settings', settings_label_model: 'Default Model', settings_desc_model: 'Used for new conversations. Existing conversations keep their selected model.', settings_main_advanced_button_aria: 'Advanced options for main model', settings_main_advanced_title: 'Main model options', settings_main_advanced_subtitle: 'Advanced config for the default chat model.', settings_main_advanced_saved: 'Main model options saved', settings_main_advanced_save_failed: 'Failed to save main model options', settings_main_advanced_service_tier: 'Service tier', settings_main_advanced_service_tier_desc: 'Optional request setting for OpenAI-family providers.', settings_main_advanced_service_tier_default: 'Default / off', settings_main_advanced_service_tier_priority: 'Priority (fast)', settings_label_auxiliary_models: 'Auxiliary Models', settings_desc_auxiliary_models: 'Side-task routing for vision, compression, title generation, etc. "Auto" uses your main chat model.', settings_btn_reset_aux_models: 'Reset all to auto', settings_btn_apply_aux_models: 'Apply changes', settings_aux_provider_auto: 'use main model', settings_aux_model_auto: 'auto (use provider default)', settings_aux_model_custom: 'Custom model…', settings_aux_model_custom_prompt: 'Enter model ID:', settings_aux_loading: 'Loading auxiliary models…', settings_aux_load_failed: 'Could not load auxiliary model settings. Make sure the agent API is available.', settings_aux_reset_confirm_title: 'Reset auxiliary models?', settings_aux_reset_confirm_msg: 'This will set all auxiliary tasks to auto (use main model).', settings_aux_reset_done: 'Auxiliary models reset to auto', settings_aux_save_failed: 'Failed to save auxiliary model', settings_aux_saved: 'Auxiliary models updated', settings_aux_no_changes: 'No changes to apply', settings_aux_task_vision: 'Vision', settings_aux_task_vision_desc: 'image/screenshot analysis', settings_aux_task_compression: 'Compression', settings_aux_task_compression_desc: 'context summarization', settings_aux_task_web_extract: 'Web extract', settings_aux_task_web_extract_desc: 'web page summarization', settings_aux_task_session_search: 'Session search', settings_aux_task_session_search_desc: 'past-conversation recall', settings_aux_task_approval: 'Approval', settings_aux_task_approval_desc: 'smart command approval', settings_aux_task_mcp: 'MCP', settings_aux_task_mcp_desc: 'MCP tool reasoning', settings_aux_task_title_generation: 'Title generation', settings_aux_task_title_generation_desc: 'session titles', settings_aux_task_skills_hub: 'Skills hub', settings_aux_task_skills_hub_desc: 'skills search/install', settings_aux_task_curator: 'Curator', settings_aux_task_curator_desc: 'skill-usage review pass', settings_aux_task_kanban_decomposer: 'Kanban decomposer', settings_aux_task_kanban_decomposer_desc: 'task decomposition', settings_aux_task_profile_describer: 'Profile describer', settings_aux_task_profile_describer_desc: 'profile summaries', settings_aux_task_triage_specifier: 'Triage specifier', settings_aux_task_triage_specifier_desc: 'issue/task triage specs', settings_aux_advanced_button_title: 'Advanced options', settings_aux_advanced_button_aria: 'Advanced options for {task}', settings_aux_advanced_title: '{task} options', settings_aux_advanced_subtitle: 'Advanced config for auxiliary.', settings_aux_advanced_save: 'Save options', settings_aux_advanced_base_url: 'Base URL', settings_aux_advanced_base_url_desc: 'Optional provider endpoint override.', settings_aux_advanced_timeout: 'Timeout seconds', settings_aux_advanced_timeout_desc: 'Request timeout for this auxiliary task. Blank uses Hermes default.', settings_aux_advanced_download_timeout: 'Download timeout seconds', settings_aux_advanced_download_timeout_desc: 'Only relevant for tasks that download media/content, e.g. vision. Blank uses default.', settings_aux_advanced_max_concurrency: 'Max concurrency', settings_aux_advanced_max_concurrency_desc: 'Optional per-task concurrency limit. Blank uses default.', settings_aux_advanced_extra_body: 'Extra body JSON', settings_aux_advanced_extra_body_desc: 'Optional JSON object merged into the model request body.', settings_aux_advanced_api_key: 'API key override', settings_aux_advanced_api_key_set_hint: 'API key is set. Leave blank to keep it, or use clear to remove it.', settings_aux_advanced_api_key_empty_hint: 'Leave blank to use provider/default credentials.', settings_aux_advanced_api_key_clear: 'Clear existing API key override', settings_aux_advanced_extra_body_invalid_json: 'Extra body must be valid JSON', settings_aux_advanced_extra_body_object_required: 'Extra body must be a JSON object', settings_aux_advanced_saved: 'Auxiliary options saved', settings_aux_advanced_save_failed: 'Failed to save auxiliary options', settings_label_send_key: 'Send Key', settings_label_theme: 'Theme', settings_label_skin: 'Skin', settings_label_font_size: 'Font size', font_size_small: 'Small', font_size_default: 'Default', font_size_large: 'Large', font_size_xlarge: 'Extra Large', settings_autosave_saving: 'Saving…', settings_autosave_saved: 'Saved', settings_autosave_failed: 'Save failed', settings_autosave_retry: 'Retry', settings_label_language: 'Language', settings_label_quota_chip: 'Show provider quota chip in composer', settings_desc_quota_chip: 'Displays an ambient remaining-quota indicator (e.g. OpenRouter credit balance) in the composer footer. Default off. Only visible on wide displays (≥1400px) when enabled, to keep the composer uncluttered on laptop and standard desktop widths.', settings_label_conversation_outline: 'Show conversation outline', settings_desc_conversation_outline: 'Show a desktop-only jump list for user questions in the current conversation. Off by default.', settings_label_hide_suggestions: 'Hide new-chat suggestions', settings_desc_hide_suggestions: 'Hide the three default suggestion buttons on the empty new-chat screen to avoid accidental taps.', settings_label_virtualize_transcript: 'Virtualize long transcripts (experimental)', settings_desc_virtualize_transcript: "Experimental. Renders only the visible portion of very long chat transcripts (over 80 messages) to speed up scrolling. Off by default because it can cause scroll flicker on long sessions with large tool-call blocks. Turn it on to try it; leave it off for the full transcript to render at once (and so the browser's Find (Ctrl+F) matches the whole conversation).", settings_label_token_usage: 'Show token usage', settings_label_token_speed: 'Show token speed (TPS)', settings_desc_token_speed: 'Displays tokens per second in assistant message headers while streaming and after a response completes. Off by default.', settings_label_sidebar_density: 'Sidebar density', cmd_reasoning: 'Toggle thinking visibility (show/hide), set effort level, or check current status', settings_label_external_sessions: 'Show non-WebUI sessions', settings_label_claude_code_sessions: 'Show Claude Code sessions', settings_label_cron_sessions: 'Show cron sessions', settings_label_webhook_sessions: 'Show webhook sessions', settings_label_previous_messaging_sessions: 'Show previous messaging sessions', settings_label_sync_insights: 'Sync to insights', settings_label_check_updates: 'Check for updates', settings_label_ignore_agent_updates: 'Ignore Agent updates', settings_label_whats_new_summary: "Summarize What's New with AI", settings_label_bot_name: 'Default assistant name', settings_label_password: 'Access Password', settings_label_pinned_limit: 'Pinned conversations limit', settings_desc_pinned_limit: 'Maximum number of active conversations that can be pinned in the sidebar. Default is 3.', settings_label_dashboard_mode: 'Official Hermes Dashboard', settings_desc_dashboard_mode: 'Show a nav-rail link when the official hermes dashboard is reachable. Public reverse-proxy URLs are stored as browser-only links and are never server-probed.', settings_dashboard_mode_auto: 'Auto-detect', settings_dashboard_mode_always: 'Always show', settings_dashboard_mode_never: 'Never show', settings_dashboard_save: 'Save dashboard link settings', settings_label_gateway_status: 'Gateway Status', settings_desc_gateway_status: 'Status of the Hermes gateway (Telegram, Discord, Slack, etc.)', gateway_not_configured: 'Gateway not configured', gateway_metadata_stale: 'Gateway metadata stale', gateway_endpoint_unreachable: 'Gateway endpoint not reachable', gateway_not_running: 'Gateway not running', gateway_running_label: 'Running', gateway_last_active: 'Last active: ', gateway_session_count: (n) => `${n} ${n === 1 ? 'session' : 'sessions'}`, gateway_load_failed: 'Failed to load gateway status', settings_saved: 'Settings saved', settings_save_failed: 'Save failed: ', settings_load_failed: 'Failed to load settings: ', settings_saved_pw: 'Settings saved — password protection enabled and this browser stays signed in', settings_saved_pw_updated: 'Settings saved — password updated', // login page (used server-side via /api/i18n/login endpoint) login_title: 'Sign in', login_subtitle: 'Enter your password to continue', login_placeholder: 'Password', login_btn: 'Sign in', login_invalid_pw: 'Invalid password', login_conn_failed: 'Connection failed', dialog_confirm_title: 'Confirm action', dialog_prompt_title: 'Enter a value', dialog_confirm_btn: 'Confirm', discard: 'Discard', clear: 'Clear', create: 'Create', remove: 'Remove', project_name_prompt: 'Project name:', // Sidebar & Tabs tab_chat: 'Chat', tab_tasks: 'Tasks', tab_skills: 'Skills', tab_memory: 'Memory', tab_workspaces: 'Spaces', tab_profiles: 'Profiles', tab_kanban: 'Kanban', kanban_board: 'Board', kanban_visible_tasks: '{0} visible tasks', kanban_search_tasks: 'Search tasks', kanban_all_assignees: 'All assignees', kanban_all_tenants: 'All tenants', kanban_include_archived: 'Include archived', kanban_no_matching_tasks: 'No matching tasks', kanban_no_data: 'No Kanban data', kanban_work_queue_hint: 'This is the Hermes Agent work queue. Create or triage a task, assign it, move it to Ready, then let the dispatcher claim it.', kanban_tasks_hidden_by_filters: 'Tasks hidden by filters', kanban_clear_filters: 'Clear filters', kanban_unavailable: 'Kanban unavailable', kanban_read_only: 'Read-only view', kanban_empty: 'Empty', kanban_task: 'Task', kanban_no_description: 'No description', kanban_refresh: 'Refresh', kanban_status_triage: 'Triage', kanban_status_todo: 'Todo', kanban_status_ready: 'Ready', kanban_status_running: 'Running', kanban_status_blocked: 'Blocked', kanban_status_done: 'Done', kanban_comments_count: 'Comments ({0})', kanban_events_count: 'Events ({0})', kanban_links: 'Links', kanban_parents: 'Parents', kanban_children: 'Children', kanban_runs_count: 'Runs ({0})', kanban_no_comments: 'No comments', kanban_no_events: 'No events', kanban_no_runs: 'No runs', kanban_title: 'Title', kanban_description: 'Description', kanban_description_placeholder: 'Optional — what needs to happen, acceptance criteria, links', kanban_status: 'Status', kanban_assignee: 'Assignee', kanban_assignee_placeholder: 'Optional — leave blank for any worker', kanban_tenant: 'Tenant', kanban_tenant_placeholder: 'Optional — project or team slug', kanban_priority: 'Priority', kanban_priority_hint: 'Higher numbers run first. Default 0.', kanban_title_required: 'Title is required.', kanban_new_task: 'New task', kanban_view_lanes: 'Lanes by profile', kanban_view_consolidated: 'Consolidated view', kanban_view_lanes_saved: 'Kanban view: lanes by profile', kanban_view_consolidated_saved: 'Kanban view: consolidated', kanban_view_update_failed: 'Failed to update Kanban view: ', kanban_edit_task: 'Edit task', kanban_status_original_hint: 'Actual status: {0}. This dialog only supports Triage/Todo/Ready edits.', kanban_run_dispatcher: 'Run dispatcher', kanban_run_dispatcher_confirm: 'This will claim Ready tasks on this board and spawn worker subprocesses (one per task, up to 8 per click). Continue?', kanban_assignee_profiles_label: 'Hermes profiles', kanban_assignee_other_label: 'Other (CLI lanes / removed profiles)', kanban_assignee_unassigned: '— Unassigned (won\u2019t auto-run) —', kanban_ready_needs_assignee: 'You picked Unassigned + Ready. The dispatcher will skip this task. Submit again to confirm, or pick a profile.', kanban_dispatch_preview_prefix: 'Preview:', kanban_dispatch_run_prefix: 'Dispatched:', kanban_dispatch_spawned: 'spawned', kanban_dispatch_promoted: 'promoted', kanban_dispatch_reclaimed: 'reclaimed', kanban_dispatch_skipped_unassigned: 'skipped (no assignee)', kanban_dispatch_skipped_nonspawnable: 'skipped (unknown profile)', kanban_dispatch_auto_blocked: 'auto-blocked', kanban_dispatch_timed_out: 'timed out', kanban_dispatch_crashed: 'crashed', kanban_add_comment: 'Add comment', kanban_workspace_kind: 'Workspace kind', kanban_workspace_path: 'Workspace path', kanban_workspace_path_placeholder: 'Path to workspace', kanban_workspace_scratch: 'Scratch', kanban_workspace_worktree: 'Worktree', kanban_workspace_dir: 'Directory', kanban_workspace_path_required: 'Workspace path is required for non-scratch workspaces.', kanban_skills: 'Skills', kanban_skills_placeholder: 'Comma-separated skill names, e.g. python,git', kanban_max_runtime_seconds: 'Max runtime (seconds)', kanban_max_runtime_hint: 'Leave empty for unlimited.', kanban_max_runtime_invalid: 'Max runtime must be a whole number of seconds greater than 0.', kanban_parents_modal: 'Parent dependencies', kanban_parents_placeholder: 'Parent task ID', kanban_add_dependency: 'Add dependency', kanban_remove_dependency: 'Remove dependency', kanban_dependency_placeholder: 'Task ID to link', kanban_dependency_self: 'A task cannot depend on itself', kanban_only_mine: 'Only mine', kanban_bulk_action: 'Bulk action', kanban_nudge_dispatcher: 'Preview dispatcher', kanban_stats: 'Stats', kanban_worker_log: 'Worker log', kanban_block: 'Block', kanban_unblock: 'Unblock', kanban_back_to_board: 'Back to board', kanban_lanes_by_profile: 'Lanes by profile', kanban_new_board: 'New board…', kanban_rename_board: 'Rename current board…', kanban_archive_board: 'Archive current board…', kanban_archive_board_confirm: 'Archive board "{name}"? Tasks remain on disk and the board can be restored from kanban/boards/_archived/.', kanban_board_archived: 'Board archived', kanban_board_name: 'Name', kanban_board_slug: 'Slug (lowercase, hyphens)', kanban_board_description: 'Description (optional)', kanban_board_icon: 'Icon (emoji, optional)', kanban_board_color: 'Color (optional)', kanban_board_name_required: 'Name is required', kanban_board_slug_required: 'Slug is required', kanban_card_complete: 'complete', kanban_card_archive: 'archive', kanban_unassigned: 'unassigned', kanban_status_archived: 'Archived', tab_todos: 'Todos', tab_insights: 'Insights', tab_dashboard: 'Hermes Dashboard', dashboard_loopback_warning: 'Dashboard is loopback-only on the server. Either browse from the server itself or restart it with --host 0.0.0.0 (insecure).', tab_logs: 'Logs', tab_settings: 'Settings', close_menu: 'Close menu', new_conversation: 'New conversation', filter_conversations: 'Filter conversations...', markdown_table_filter: 'Filter table', markdown_table_sort_column: 'Sort column', session_time_unknown: 'Unknown', session_time_minutes_ago: (n) => `${n}m`, session_time_hours_ago: (n) => `${n}h`, session_time_days_ago: (n) => `${n}d`, session_time_last_week: '1w', session_time_bucket_today: 'Today', session_time_bucket_yesterday: 'Yesterday', session_time_bucket_this_week: 'This week', session_time_bucket_last_week: 'Last week', session_time_bucket_older: 'Older', scheduled_jobs: 'Scheduled jobs', new_job: 'New job', loading: 'Loading...', search_skills: 'Search skills...', new_skill: 'New skill', personal_memory: 'Personal memory', current_task_list: 'Current task list', // Logs logs_title: 'Logs', logs_file: 'File', logs_tail: 'Tail', logs_auto_refresh: 'Auto-refresh (5s)', logs_wrap: 'Wrap lines', logs_copy_all: 'Copy all', logs_empty: 'No log lines yet.', logs_loading: 'Loading logs…', logs_load_failed: 'Logs failed to load', logs_status_idle: 'Choose a log file to view recent lines.', logs_no_mtime: 'not written yet', logs_truncated_hint: 'Showing the tail of a large log file; older bytes were skipped to keep memory bounded.', logs_copied: 'Logs copied', logs_severity: 'Severity', logs_severity_all: 'All', logs_severity_errors: 'Errors', logs_severity_warnings: 'Warnings+', logs_filter_active: 'shown (filter active)', // Insights insights_title: 'Usage Analytics', insights_sessions: 'Sessions', insights_messages: 'Messages', insights_tokens: 'Tokens', insights_cost: 'Estimated Cost', insights_no_cost: 'N/A', insights_models: 'Models', insights_activity_by_day: 'Activity by Day', insights_activity_by_hour: 'Activity by Hour', insights_peak_hour: 'Peak: {hour}', insights_token_breakdown: 'Token Breakdown', insights_input_tokens: 'Input', insights_output_tokens: 'Output', insights_total: 'Total', insights_daily_tokens: 'Daily Tokens', insights_model_name: 'Model', insights_model_sessions: 'Sessions', insights_model_tokens: 'Tokens', insights_model_cost: 'Cost', insights_model_cache: 'Cache', insights_cache_hit: 'Prompt-cache hit rate', insights_model_share: 'Share', insights_model_health_title: 'Model health comparison', insights_model_health_provider: 'Provider', insights_model_health_replacement: 'Replacement guide', insights_model_health_cost_per_m: 'Cost / 1M', insights_no_usage_data: 'No usage data yet', insights_footer: 'Showing data from the last {days} days', insights_skill_usage_title: 'Skill Usage', insights_skill_usage_sub: 'Tool invocation frequency', insights_skill_usage_total: 'Total invocations', insights_skill_usage_skills_used: 'Skills used', insights_skill_usage_no_data: 'No skill usage data yet', insights_skill_usage_no_data_hint: 'Skills will appear here once used in conversations.', insights_skill_usage_footer: 'Counts from ~/.hermes/skills/', insights_skill_usage_col_skill: 'Skill', insights_skill_usage_col_uses: 'Uses', insights_skill_usage_col_views: 'Views', insights_skill_usage_col_share: 'Usage %', insights_skill_usage_col_patches: 'Patches', wiki_browse: 'Browse wiki', wiki_search_placeholder: 'Search pages...', wiki_no_pages: 'No wiki pages found', wiki_not_configured: 'Wiki not configured', workspace_desc: 'Add and switch workspaces for your sessions.', session_meta_messages: (n) => `${n} msg${n === 1 ? '' : 's'}`, session_meta_children: (n) => `${n} child${n === 1 ? '' : 'ren'}`, // Softened label: avoids exposing the technical internal term // 'segment' in the default visible badge. User-facing copy remains // translatable for locales that prefer a different wording. (#2155) session_meta_segments: (n) => `${n} prior turn${n === 1 ? '' : 's'}`, session_lineage_toggle_hint: '{0} — earlier context turns are collapsed here. Click to show or hide them.', session_lineage_static_hint: '{0} — earlier context turns are collapsed here.', session_child_toggle_hint: '{0} — child conversations spawned from this session. Click to show or hide them.', session_readonly_title_hint: 'Read-only imported session — {0}', session_lineage_segment_untitled: 'Untitled segment', session_lineage_segment_open: 'Open lineage segment', new_profile: 'New profile', transcript: 'Transcript', download_transcript: 'Download as Markdown', import: 'Import', export_session_json: 'JSON', export_session_json_tooltip: 'Export full session as JSON', export_session_html: 'HTML', export_session_html_tooltip: 'Export as a self-contained HTML page', import_session_json_tooltip: 'Import session from JSON', clear_conversation_btn_tooltip: 'Clear all messages in this conversation', // Settings detail settings_label_rtl: 'Right-to-left chat layout', settings_desc_rtl: 'Flips alignment of chat messages and the composer input for languages like Arabic or Hebrew. Affects only the chat area — sidebar and other panels stay left-to-right.', settings_label_sound: 'Notification sound', settings_desc_sound: 'Play a sound when the assistant finishes a response.', // TTS (#499) tts_listen: 'Listen', tts_not_supported: 'Speech synthesis not supported in this browser.', settings_label_tts: 'Text-to-Speech for responses', settings_desc_tts: "Show a speaker button on each assistant message to read it aloud using your browser's speech synthesis.", settings_label_tts_auto_read: 'Auto-read responses aloud', settings_desc_tts_auto_read: 'Automatically speak each new assistant response when it finishes. Pauses when you start typing.', // Composer voice-mode pref (#1488) settings_label_voice_mode: 'Hands-free voice mode button', settings_desc_voice_mode: 'Show the voice-mode button (audio waveform) next to the dictation mic. Lets you speak naturally — Hermes auto-sends after a pause and reads replies aloud. Requires a browser that supports both speech recognition and TTS.', settings_label_raw_audio: 'Send raw audio instead of transcribing', settings_desc_raw_audio: 'Record and send the original audio file to the agent instead of converting it to text first. The agent can then transcribe it or process the raw audio (emotion, background noise, custom STT). Like Telegram\'s voice message behavior.', voice_send_raw: 'Send raw audio', voice_raw_attached: 'Audio attached. Press Send or type more.', settings_label_tts_voice: 'Voice', settings_desc_tts_voice: "Preferred voice. Populated from your browser's available voices.", settings_label_tts_rate: 'Speech rate', settings_label_tts_pitch: 'Speech pitch', settings_label_tts_engine: 'TTS Engine', settings_desc_tts_engine: 'Choose speech engine. Edge TTS uses Microsoft neural voices via the server.', settings_label_notifications: 'Browser notifications', settings_desc_notifications: 'Show a system notification when a response completes while the app is in the background.', notifications_enable_btn: 'Enable notifications', notifications_test_btn: 'Send test', notifications_permission_status: (status) => `Permission: ${status}`, notifications_enabled_toast: 'Notifications enabled.', notifications_denied: 'Notifications are blocked in this browser. Enable them in browser settings.', notifications_unsupported: 'Notifications are not supported in this browser.', settings_desc_token_usage: 'Displays input/output token count below each assistant reply. Also toggled with /usage.', settings_label_api_redact: 'Redact sensitive data in API responses', settings_desc_api_redact: 'Self-hosted users can disable for transparency (not recommended for shared instances).', settings_sidebar_density_compact: 'Compact', settings_sidebar_density_detailed: 'Detailed', settings_desc_sidebar_density: 'Controls how much metadata the session list shows in the left sidebar.', settings_label_auto_title_refresh: 'Adaptive title refresh', settings_auto_title_refresh_off: 'Off', settings_auto_title_refresh_5: 'Every 5 exchanges', settings_auto_title_refresh_10: 'Every 10 exchanges', settings_auto_title_refresh_20: 'Every 20 exchanges', settings_desc_auto_title_refresh: 'Automatically re-generates the session title based on the latest exchange, keeping it relevant as the conversation evolves. Requires an LLM title generation model to be configured.', settings_desc_external_sessions: 'Show conversations from CLI, Telegram, Discord, Slack, and other channels in the session list. Click to import and continue.', settings_desc_claude_code_sessions: 'Show Claude Code imported sessions in the sidebar, or hide them while leaving other external sessions visible.', settings_desc_cron_sessions: 'Surface cron job output as conversations in the sidebar. Only active when non-WebUI sessions are enabled. Defaults off; high-frequency jobs can flood the sidebar.', settings_desc_webhook_sessions: 'Surface webhook runs as conversations in the sidebar. Only active when non-WebUI sessions are enabled. Defaults off; high-volume routes can flood the sidebar.', settings_desc_previous_messaging_sessions: 'Show older Discord, Telegram, Slack, and Weixin sessions that were replaced by reset or compression.', settings_desc_sync_insights: 'Mirrors WebUI token usage to state.db so hermes /insights includes browser session data. Off by default.', settings_desc_check_updates: 'Show a banner when newer versions of the WebUI or Agent are available. Runs a background git fetch periodically.', settings_desc_ignore_agent_updates: 'Keep WebUI update checks on, but hide Agent update notices and skip Agent update fetches.', settings_desc_whats_new_summary: "Changes the What's New action from opening the raw diff first to generating a short, human-readable summary. The regular diff comparison stays available after the summary.", settings_desc_bot_name: 'Used for the default profile only. Other profiles use their own profile names.', settings_desc_password: 'Enter a new password to set or change it. Leave blank to keep current setting.', password_placeholder: 'Enter new password…', password_env_var_locked: 'The HERMES_WEBUI_PASSWORD environment variable is currently set and takes precedence. Unset it and restart the server to manage the password from here.', password_env_var_locked_placeholder: 'Locked: HERMES_WEBUI_PASSWORD env var is set', disable_auth: 'Disable Auth', sign_out: 'Sign Out', settings_label_shutdown: 'Stop the Hermes WebUI server', settings_desc_shutdown_before_cmd: 'Gracefully stops the local WebUI server. Useful if you launched via ', settings_desc_shutdown_between_cmds: ' and want to stop without switching to a terminal. You\u2019ll need to relaunch the server (', settings_desc_shutdown_after_cmd: ' or the native app) before the WebUI is reachable again.', settings_btn_shutdown: 'Stop server', settings_shutdown_confirm_title: 'Stop Hermes WebUI', settings_shutdown_confirm_message: 'Stop the Hermes WebUI server?', settings_shutdown_confirm_btn: 'Stop', settings_shutdown_stopped_message: 'Server stopped. You can close this tab.', // Providers panel 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_model: 'Model', providers_status_not_configured_label: 'Not configured', providers_oauth_hint: 'Authenticated via OAuth. No API key needed.', providers_oauth_config_yaml_hint: 'Token configured via config.yaml. To update, edit the providers section in your config.yaml or run hermes auth.', providers_oauth_not_configured_hint: 'Not authenticated. Run hermes auth in the terminal to configure this provider.', providers_save: 'Save', providers_refresh_models: 'Refresh models', providers_refreshing: 'Refreshing…', providers_models_refreshed: 'Models refreshed', 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…', provider_quota_title: 'Active provider quota', provider_quota_active_provider: 'Active provider', provider_quota_last_checked_after_refresh: 'Last checked after refresh', provider_quota_last_checked: 'Last checked {0}', provider_quota_refresh_usage: 'Refresh usage', provider_quota_refreshing: 'Refreshing...', provider_quota_refresh_title: 'Refresh provider usage limits now', provider_quota_refresh_succeeded: 'Provider usage refreshed', provider_quota_refresh_failed: 'Provider usage refresh failed', provider_quota_session_limit: '5-hour limit', provider_quota_weekly_limit: 'Weekly limit', provider_quota_window_fallback: 'Window', provider_quota_metric_remaining: 'Remaining', provider_quota_metric_used: 'Used', provider_quota_metric_limit: 'Limit', provider_quota_status_available: 'available', provider_quota_status_exhausted: 'exhausted', provider_quota_status_unavailable: 'unavailable', provider_quota_status_failed: 'failed', provider_quota_status_checked: 'checked', provider_quota_status_no_key: 'no key', provider_quota_status_invalid_key: 'invalid key', provider_quota_status_unsupported: 'unsupported', provider_quota_used_meta: '{0} used', provider_quota_resets_meta: 'resets {0}', provider_quota_credential_pool: 'Credential pool', provider_quota_credential_label: 'Credential {0}', provider_quota_pool_plans: 'Plans: {0}', provider_quota_pool_no_windows: 'No account-limit windows reported.', provider_quota_account_limits_loaded: 'Account limits loaded.', provider_quota_unavailable: 'Quota status unavailable', provider_quota_retry_after: 'Retry after {0}', provider_quota_pool_summary_available: '{0}/{1} available', provider_quota_pool_summary_exhausted: '{0} exhausted', provider_quota_pool_summary_failed: '{0} failed', provider_quota_pool_summary_checked: '{0} checked', provider_cost_budget_label: 'Monthly budget', provider_cost_budget_placeholder: 'e.g. 50.00', provider_cost_budget_set: 'Set', provider_cost_budget_clear: 'Clear', provider_cost_budget_pct: '{0}% of ${1} budget (monthly pace)', provider_cost_budget_save_failed: 'Failed to save budget', cancel: 'Cancel', create_job: 'Create job', save_skill: 'Save skill', editing: 'Editing', // Empty state empty_title: 'What can I help with?', empty_subtitle: 'Ask anything, run commands, explore files, or manage your scheduled tasks.', suggest_files: 'What files are in this workspace?', suggest_schedule: "What's on my schedule today?", suggest_plan: 'Help me plan a small project.', // onboarding onboarding_badge: 'FIRST RUN', onboarding_title: 'Welcome to Hermes Web UI', onboarding_lead: 'A quick guided setup will verify Hermes, save a real provider configuration, choose a workspace and model, and optionally protect the app with a password.', onboarding_back: 'Back', onboarding_continue: 'Continue', onboarding_skip: 'Skip setup', onboarding_skipped: 'Setup skipped — using existing config.', onboarding_open: 'Open Hermes', onboarding_step_system_title: 'System check', onboarding_step_system_desc: 'Verify Hermes Agent and config visibility.', onboarding_step_setup_title: 'Provider setup', onboarding_step_setup_desc: 'Save the minimum Hermes provider config.', onboarding_step_workspace_title: 'Workspace + model', onboarding_step_workspace_desc: 'Pick defaults for new sessions and chat.', onboarding_step_password_title: 'Optional password', onboarding_step_password_desc: 'Protect the Web UI before sharing it.', onboarding_step_finish_title: 'Finish', onboarding_step_finish_desc: 'Review and enter the app.', onboarding_notice_system_ready: 'Hermes Agent looks reachable from the Web UI.', onboarding_notice_system_unavailable: 'Hermes Agent is not fully available yet. Bootstrap can install it, but provider setup may still require a terminal.', onboarding_check_agent: 'Hermes Agent', onboarding_check_agent_ready: 'Detected and importable', onboarding_check_agent_missing: 'Missing or partially importable', onboarding_check_password: 'Password', onboarding_check_password_enabled: 'Already enabled', onboarding_check_password_disabled: 'Not enabled yet', onboarding_check_provider: 'Provider config', onboarding_check_provider_ready: 'Ready to chat', onboarding_check_provider_partial: 'Saved but incomplete', onboarding_check_provider_pending: 'Needs verification', onboarding_config_file: 'Config file:', onboarding_env_file: '.env file:', onboarding_unknown: 'Unknown', onboarding_current_provider: 'Current setup:', onboarding_missing_imports: 'Missing imports:', onboarding_notice_setup_required: 'Choose a simple provider path here. Advanced OAuth flows still belong in the Hermes CLI for now.', onboarding_notice_setup_already_ready: 'A working Hermes provider setup is already detected. You can keep it or replace it here.', onboarding_oauth_provider_ready_title: 'Provider already authenticated', onboarding_oauth_provider_ready_body: 'This instance is configured to use an OAuth provider ({provider}) that was set up via the Hermes CLI. No API key is needed here — click Continue to finish setup.', onboarding_oauth_provider_not_ready_title: 'OAuth provider not yet authenticated', onboarding_oauth_provider_not_ready_body: 'This instance is configured to use {provider}, which uses OAuth rather than an API key. Run hermes auth or hermes model in a terminal to authenticate, then reload the Web UI.', onboarding_oauth_switch_hint: 'Or choose a different provider below to switch to an API-key setup:', oauth_login_codex: 'Login with Codex (ChatGPT)', oauth_codex_step1: 'Step 1: Visit this URL and enter the code', oauth_codex_step2: 'Step 2: Enter this code on the page', oauth_codex_polling: 'Waiting for authorization...', oauth_codex_success: 'Codex OAuth login successful!', oauth_codex_error: 'OAuth login failed', oauth_codex_expired: 'Code expired, please try again', onboarding_notice_workspace: 'These values reuse the same settings APIs as the normal app.', onboarding_workspace_label: 'Workspace', onboarding_workspace_or_path: 'Or enter a workspace path', onboarding_workspace_placeholder: '/home/you/workspace', onboarding_provider_label: 'Setup mode', onboarding_quick_setup_badge: 'quick setup', provider_category_easy_start: 'Easy start', provider_category_self_hosted: 'Open / self-hosted', provider_category_specialized: 'Specialized', onboarding_api_key_label: 'API key', onboarding_api_key_placeholder: 'Leave blank to keep an existing saved key', onboarding_api_key_label_optional: 'API key (optional)', onboarding_api_key_placeholder_optional: 'Leave blank for keyless servers', onboarding_api_key_help_keyless: 'Most LM Studio / Ollama / vLLM installs run keyless — leave this blank if your server doesn\'t require authentication. Use the Test connection button to verify.', onboarding_api_key_help_prefix: 'Saved as a secret in your Hermes .env file using', onboarding_base_url_label: 'Base URL', onboarding_base_url_placeholder: 'https://your-endpoint.example/v1', onboarding_base_url_help: 'Use this for OpenAI-compatible routers, self-hosted servers, LiteLLM, Ollama, LM Studio, vLLM, or similar endpoints.', onboarding_model_label: 'Default model', onboarding_workspace_help: 'Pick the model Hermes should use for new chats after setup completes.', onboarding_custom_model_placeholder: 'your-model-name', onboarding_custom_model_help: 'For custom endpoints, enter the exact model ID your server expects.', onboarding_notice_password_enabled: 'A password is already configured. Enter a new one only if you want to replace it.', onboarding_notice_password_recommended: 'Optional but recommended if you will expose the UI beyond localhost.', onboarding_password_label: 'Password (optional)', onboarding_password_placeholder: 'Leave blank to skip', onboarding_password_help: 'Passwords are stored through the existing settings API and hashed server-side.', onboarding_notice_finish: 'You can reopen Settings later to change any of this.', onboarding_not_set: 'Not set', onboarding_password_will_enable: 'Will be enabled', onboarding_password_will_replace: 'Will be replaced', onboarding_password_keep_existing: 'Keep current password', onboarding_password_remains_disabled: 'Will remain disabled', onboarding_password_skipped: 'Skipped for now', onboarding_finish_help: 'Finishing stores onboarding_completed in settings and drops you into the normal app.', onboarding_error_choose_workspace: 'Choose a workspace before continuing.', onboarding_error_choose_model: 'Choose a model before continuing.', onboarding_error_provider_required: 'Choose a setup mode before continuing.', onboarding_error_base_url_required: 'Base URL is required for custom endpoints.', onboarding_probe_test_button: 'Test connection', onboarding_probe_probing: 'Testing connection…', onboarding_probe_ok: 'Connected. {n} model(s) available.', onboarding_probe_error_generic: 'Could not reach the configured base URL.', onboarding_probe_error_invalid_url: 'Base URL must start with http:// or https://.', onboarding_probe_error_dns: 'Could not resolve the host. Check the URL or use the host\'s IP address.', onboarding_probe_error_connect_refused: 'Connection refused — the server may not be running on that address. From inside Docker, try the host IP instead of localhost.', onboarding_probe_error_timeout: 'The endpoint did not respond in time. Check that the server is running and the URL is correct.', onboarding_probe_error_http_4xx: 'The endpoint returned a client error. Check authentication and the URL path (typically ends in /v1).', onboarding_probe_error_http_5xx: 'The endpoint returned a server error. Check the LM Studio / Ollama server logs.', onboarding_probe_error_parse: 'The endpoint did not return a model list in the expected shape. Verify the URL points to the OpenAI-compatible API root.', onboarding_probe_error_unreachable: 'Could not reach the configured base URL.', onboarding_error_probe_failed: 'Could not validate the configured base URL.', onboarding_error_workspace_required: 'Workspace is required.', onboarding_error_model_required: 'Model is required.', onboarding_complete: 'Onboarding complete', // panel/runtime i18n error_prefix: 'Error: ', default: 'default', search: 'Search', not_available: 'N/A', never: 'never', add: 'Add', add_failed: 'Add failed: ', remove_failed: 'Remove failed: ', switch_failed: 'Switch failed: ', name_required: 'Name is required', content_required: 'Content is required', view: 'View', dismiss: 'Dismiss', disable: 'Disable', cron_no_jobs: 'No scheduled jobs found.', cron_status_off: 'off', cron_status_paused: 'paused', cron_status_error: 'error', cron_status_active: 'active', cron_status_running: 'running\u2026', cron_status_needs_attention: 'needs attention', cron_attention_desc: 'This recurring job has no next run time. The scheduler may have failed to compute its next run.', cron_attention_croniter_hint: 'The Gateway runtime may be missing the croniter package. Restart the Gateway with cron support, then resume this job.', cron_attention_resume: 'Resume and recalculate', cron_jobs_project: 'Cron Jobs', cron_attention_run_once: 'Run once now', cron_attention_copy_diagnostics: 'Copy diagnostics', cron_diagnostics_copied: 'Cron diagnostics copied', cron_next: 'Next', cron_last: 'Last', cron_run_now: 'Run now', cron_pause: 'Pause', cron_resume: 'Resume', cron_job_name_placeholder: 'Job name', cron_schedule_placeholder: 'Schedule', cron_prompt_placeholder: 'Prompt', cron_last_output: 'Last output', cron_expand_prompt: 'Expand prompt', cron_collapse_prompt: 'Collapse prompt', cron_expand_output: 'Expand output', cron_collapse_output: 'Collapse output', cron_mode_agent: 'Agent', cron_mode_script: 'Script', cron_mode_label: 'Mode', cron_script_job_banner: 'Runs a script on schedule — stdout is delivered to the target. No agent, prompt, or skills.', cron_script_card_title: 'Script', cron_script_output: 'Script output', cron_script_path_label: 'Script path', cron_script_path_hint: 'Resolved under ~/.hermes/scripts/ unless an absolute path. Edit the script file on the server to change behavior.', cron_script_badge_title: 'Script job (no agent)', cron_workdir_label: 'Working directory', cron_view_full_output: 'View full output', cron_all_runs: 'All runs', cron_hide_runs: 'Hide runs', cron_no_runs_yet: '(no runs yet)', cron_schedule_required_example: 'Schedule is required (e.g. "0 9 * * *" or "every 1h")', cron_schedule_required: 'Schedule is required', cron_prompt_required: 'Prompt is required', cron_job_created: 'Job created', cron_duplicate: 'Duplicate', cron_duplicated: 'Job duplicated (paused)', cron_job_triggered: 'Job triggered', cron_job_paused: 'Job paused', cron_job_resumed: 'Job resumed', cron_job_updated: 'Job updated', cron_model_label: 'Model Override', cron_model_hint: 'Override the default model for this job.', cron_model_no_agent_hint: 'No-agent jobs run the configured script directly; model is unused.', cron_model_use_default: 'Default (use profile/system default)', cron_delete_confirm_title: 'Delete cron job', cron_delete_confirm_message: 'This cannot be undone.', cron_job_deleted: 'Job deleted', cron_completion_status: (name, status) => `Cron "${name}" ${status}`, status_failed: 'failed', status_completed: 'completed', todos_no_active: 'No active task list in this session.', clear_conversation_title: 'Clear conversation', clear_conversation_message: 'Clear all messages? This cannot be undone.', clear_failed: 'Clear failed: ', skills_no_match: 'No skills match.', skill_enabled: 'Enabled', skill_disabled: 'Disabled', skill_toggle_failed: 'Failed to toggle skill: ', linked_files: 'Linked Files', skill_load_failed: 'Could not load skill: ', skill_file_load_failed: 'Could not load file: ', skill_name_required: 'Skill name is required', skill_updated: 'Skill updated', skill_created: 'Skill created', skill_deleted: 'Skill deleted', skill_delete_confirm: 'Delete skill "{0}"?', skills_empty_title: 'Select a skill', skills_empty_sub: 'Pick a skill from the sidebar to view its contents, or create a new one.', skills_edit: 'Edit', skills_delete: 'Delete', skills_back_to: 'Back to {0}', tasks_empty_title: 'Select a scheduled job', tasks_empty_sub: 'Pick a job from the sidebar to view its details and runs, or create a new one.', workspaces_empty_title: 'Select a space', workspaces_empty_sub: 'Pick a space from the sidebar to view its files and settings, or add a new one.', profiles_empty_title: 'Select a profile', profiles_empty_sub: 'Pick an agent profile from the sidebar to view and edit its settings, or create a new one.', memory_notes_label: 'memory (notes)', memory_saved: 'Memory saved', my_notes: 'My Notes', user_profile: 'User Profile', external_notes_sources: 'Third-party notes', external_notes_empty: 'No note or knowledge MCP sources are visible yet. Configure Joplin, Obsidian, Notion, llm-wiki, or another notes server to list it here.', external_notes_auto_recall_hint: 'Automatic session recall is unchanged; this drawer only shows configured sources and available read/search tools.', external_notes_no_tools: 'No read/search tools are currently visible for this source.', external_notes_tool_count: (count) => `${count} note tool${Number(count)===1?'':'s'} available`, external_notes_configured_hint: 'Tool names are expected from this configured source; live schemas will appear when the WebUI runtime exposes them.', external_notes_recent_ai: 'Recently used by AI', external_notes_auto: 'auto', external_notes_recent_ai_reason: 'Automatic recall', external_notes_search_placeholder: 'Search notes…', external_notes_search_empty: 'Search a configured notes source to preview notes here.', source_active: 'active', source_configured: 'configured', no_notes_yet: 'No notes yet.', no_profile_yet: 'No profile yet.', agent_soul: 'Agent Soul', no_soul_yet: 'No soul defined yet.', workspace_choose_path: 'Choose workspace path', workspace_choose_path_meta: 'Add a validated path and switch this conversation', workspace_manage: 'Manage workspaces', workspace_manage_meta: 'Open the Spaces panel', workspace_use_title: 'Use in current session', workspace_use: 'Use', workspace_add_path_placeholder: 'Add workspace path (e.g. /home/user/my-project)', workspace_paths_validated_hint: 'Paths are validated as existing directories before saving.', workspace_drag_hint: 'Drag to reorder', workspace_reorder_failed: 'Reorder failed', workspace_added: 'Workspace added', workspace_renamed: 'Workspace renamed', workspace_remove_confirm_title: 'Remove workspace', workspace_remove_confirm_message: (path) => `Remove "${path}"?`, workspace_removed: 'Workspace removed', workspace_switch_prompt_title: 'Switch workspace', workspace_switch_prompt_message: 'Enter an absolute workspace path to add and switch this conversation to.', workspace_switch_prompt_confirm: 'Switch', workspace_switch_prompt_placeholder: '/Users/you/project', workspace_not_added: 'Workspace was not added', workspace_already_saved: 'Workspace already saved — choose it from the list', workspace_busy_switch: 'Cannot switch workspace while agent is running', discard_file_edits_title: 'Discard file edits?', discard_file_edits_message: 'Switching workspaces will discard unsaved file edits in the preview.', workspace_switched_to: (name) => `Switched to ${name}`, profiles_no_profiles: 'No profiles found.', profile_api_keys_configured: 'API keys configured', profile_gateway_running: 'Gateway running', profile_gateway_stopped: 'Gateway stopped', profile_active: 'ACTIVE', profile_no_configuration: 'No configuration', profile_skill_count: (count) => `${count} skill${count === 1 ? '' : 's'}`, profile_use: 'Use', profile_switch_title: 'Switch to this profile', profile_delete_title: 'Delete this profile', profile_default_label: '(default)', profile_name_placeholder: 'Profile name (lowercase, a-z 0-9 hyphens)', profile_clone_label: 'Clone config from active profile', profile_model_label: 'Model / provider', profile_model_hint: 'Choose from configured providers and models for this new profile.', profile_model_use_default: 'Use active profile default', profile_base_url_placeholder: 'Base URL (optional, e.g. http://localhost:11434)', profile_api_key_placeholder: 'API key (optional)', manage_profiles: 'Manage profiles', profiles_load_failed: 'Failed to load profiles', profile_switched_new_conversation: (name) => `Switched to profile: ${name} — new conversation started`, profile_switched: (name) => `Switched to profile: ${name}`, profile_name_rule: 'Lowercase letters, numbers, hyphens, underscores only', profile_base_url_rule: 'Base URL must start with http:// or https://', profile_created: (name) => `Profile created: ${name}`, profile_delete_confirm_title: (name) => `Delete profile "${name}"?`, profile_delete_confirm_message: 'All sessions, config, skills, and memory for this profile will be permanently deleted. This cannot be undone.', profile_deleted: (name) => `Profile deleted: ${name}`, active_conversation_none: 'No active conversation selected.', active_conversation_meta: (title, count) => `${title} · ${count} message${count === 1 ? '' : 's'}`, settings_unsaved_changes: 'You have unsaved changes.', sign_out_failed: 'Sign out failed: ', disable_auth_confirm_title: 'Disable password protection', disable_auth_confirm_message: 'Anyone will be able to access this instance.', auth_disabled: 'Auth disabled — password protection removed', disable_auth_failed: 'Failed to disable auth: ', current_password_label: 'Current Password', current_password_placeholder: 'Enter current password\u2026', current_password_required: 'Current password is required to change or disable authentication.', current_password_incorrect: 'Current password is incorrect.', disable_auth_typed_confirm: 'Type DISABLE AUTH to confirm', auth_status_password: 'Password Auth', auth_status_passkey_only: 'Passkey Only', auth_status_unauthenticated: 'Unauthenticated', auth_warning_badge: 'Auth disabled', auth_disabled_warning_message: 'This instance is accessible without authentication.', auth_acknowledged_label: 'I’ve reviewed this risk; show a less-urgent nav warning.', auth_ack_save_failed: 'Failed to update acknowledgement: ', bg_error_single: (title) => `"${title}" has encountered an error`, bg_error_multi: (count) => `${count} sessions have encountered an error`, // skill form skill_name: 'Name', skill_category: 'Category', skill_category_placeholder: 'Optional, e.g. devops', skill_content: 'SKILL.md content', skill_content_placeholder: 'YAML frontmatter + markdown body', skill_rename_not_supported: 'Renaming a skill is not supported. Create a new skill and delete the old one to rename.', skill_metadata: 'Metadata', // cron form cron_name_label: 'Name', cron_name_placeholder: 'Optional', cron_schedule_label: 'Schedule', cron_schedule_preset_label: 'Preset', cron_schedule_preset_hourly: 'Hourly', cron_schedule_preset_daily: 'Daily', cron_schedule_preset_weekdays: 'Weekdays', cron_schedule_preset_weekly: 'Weekly', cron_schedule_preset_monthly: 'Monthly', cron_schedule_preset_custom: 'Custom', cron_schedule_hint: "Use 'every 1h' or a cron expression for recurring jobs. Bare durations like '30m' run once.", cron_schedule_once_warning: "Duration forms like '30m' run once and are removed after running. Use 'every 30m' to keep a recurring job.", cron_prompt_label: 'Prompt', cron_deliver_label: 'Deliver output to', cron_deliver_local: 'Local (save output only)', cron_deliver_custom: 'Custom delivery target', cron_profile_label: 'Profile', cron_profile_server_default: 'server default', cron_profile_server_default_hint: 'Uses the WebUI server default profile at run time. Existing jobs without a profile keep this legacy behavior.', cron_toast_notifications_label: 'Completion toasts', cron_toast_notifications_hint: 'Show a toast when this cron finishes. The Tasks badge and new-run marker still update when this is off.', cron_toast_notifications_enabled: 'Enabled', cron_toast_notifications_disabled: 'Disabled', cron_skills_label: 'Skills', cron_skills_placeholder: 'Add skills (optional)…', cron_skills_edit_hint: 'Skill list is not editable after creation.', // workspace form workspace_name_label: 'Name', workspace_name_placeholder: 'Optional friendly name', workspace_path_label: 'Path', workspace_path_required: 'Path is required', workspace_path_readonly: 'Path cannot be changed. Rename only.', workspace_new_title: 'New space', // profile form profile_name_label: 'Name', profile_base_url_label: 'Base URL', profile_api_key_label: 'API key', cmd_yolo: 'Toggle YOLO mode (skip approvals)', yolo_no_session: 'No active session', yolo_enabled: '⚡ YOLO mode ON — approvals skipped this session', yolo_disabled: 'YOLO mode OFF', yolo_pill_label: 'YOLO', yolo_pill_title_active: 'YOLO mode active — click to disable', approval_skip_all: '⚡ Skip all this session', approval_skip_all_title: 'Skip all approval prompts for this session', // composer action tooltips composer_send: 'Send message', composer_queue: 'Queue message', composer_interrupt: 'Interrupt and send', composer_steer: 'Steer current response', composer_stop: 'Stop generation', composer_disabled_clarify: 'Respond to the clarification request', composer_disabled_compression: 'Waiting for compression to finish', composer_compression_will_queue: 'Type a message — it will queue and send after compression', composer_disabled_empty: 'Type a message to send', composer_mobile_workspace: 'Workspace', composer_mobile_model: 'Model', composer_mobile_quota: 'Quota', composer_mobile_reasoning: 'Reasoning', composer_mobile_context: 'Context', media_audio_label: 'Audio', media_svg_label: 'Diagram', media_video_label: 'Video', media_download: 'Download', csv_loading: 'Loading CSV', csv_too_large: 'CSV file too large for inline rendering', csv_no_data: 'CSV file has insufficient data to render as table', csv_error: 'Failed to load CSV file', csv_header_note: 'First row shown as table header', excalidraw_loading: 'Loading diagram', excalidraw_too_large: 'Excalidraw file too large for inline rendering', excalidraw_invalid: 'Invalid Excalidraw file format', excalidraw_error: 'Failed to load Excalidraw file', excalidraw_label: 'Diagram', excalidraw_download: 'Download', excalidraw_empty: 'Empty diagram', excalidraw_render_error: 'Failed to render diagram', excalidraw_simplified: 'Simplified SVG preview — not pixel-identical to Excalidraw canvas', // ── Checkpoints / Rollback ── checkpoint_title: 'Checkpoints', checkpoint_empty: 'No checkpoints found for this workspace.', checkpoint_loading: 'Loading checkpoints…', checkpoint_error: 'Failed to load checkpoints', checkpoint_date: 'Date', checkpoint_message: 'Message', checkpoint_files: 'Files', checkpoint_view_diff: 'View diff', checkpoint_restore: 'Restore', checkpoint_restore_confirm_title: 'Restore checkpoint?', checkpoint_restore_confirm_message: (ckpt) => `Restore workspace to checkpoint "${ckpt}"? This will overwrite files with the saved versions. Files added after this checkpoint will not be deleted.`, checkpoint_restored: 'Checkpoint restored', checkpoint_diff_title: 'Changes in checkpoint', checkpoint_diff_no_changes: 'No differences found between this checkpoint and the current workspace.', checkpoint_diff_files_changed: (n) => `${n} file${n === 1 ? '' : 's'} changed`, // ── Conversation Outline (#2124) ── outline_title: 'Outline', outline_empty: 'No questions yet.', outline_loading: 'Loading…', }, it: { offline_title: 'Connessione persa', offline_browser_detail: 'Il browser segnala che questo dispositivo è offline.', offline_network_detail: 'Hermes non è raggiungibile da questo browser al momento.', offline_autorefresh: 'Aggiornerò automaticamente la pagina quando Hermes sarà di nuovo raggiungibile.', offline_check_now: 'Verifica ora', offline_checking: 'Verifica in corso…', offline_stream_waiting: 'Connessione persa. In attesa di aggiornare…', _lang: 'it', _label: 'Italiano', _speech: 'it-IT', // boot.js cancelling: 'Annullamento\u2026', cancel_failed: 'Annullamento fallito: ', mic_denied: 'Accesso al microfono negato. Controlla i permessi del browser.', mic_insecure_origin: 'Voice input needs a secure connection. Open Hermes over HTTPS or from localhost to use the microphone.', // TODO: translate mic_no_speech: 'Nessuna voce rilevata. Riprova.', mic_network: 'Riconoscimento vocale non disponibile.', mic_error: 'Errore input vocale: ', // Composer voice buttons (#1488 — distinct labels for dictation vs voice mode) voice_dictate: 'Detta', voice_dictate_active: 'Interrompi dettatura', voice_recording_active: 'Interrompi registrazione', voice_mode_toggle: 'Modalità vocale', voice_mode_toggle_active: 'Esci dalla modalità vocale', // Turn-based voice mode (#1333) voice_listening: 'In ascolto…', voice_speaking: 'Sto parlando…', voice_thinking: 'Pensando…', voice_error: 'Voce non supportata in questo browser', voice_mode_active: 'Modalità vocale attiva', voice_mode_off: 'Modalità vocale disattiva', session_imported: 'Sessione importata', import_failed: 'Importazione fallita: ', import_invalid_json: 'JSON non valido', image_pasted: 'Immagine incollata: ', text_pasted: 'Testo incollato allegato come ', // messages.js edit_message: 'Modifica messaggio', regenerate: 'Rigenera risposta', copy: 'Copia', copied: 'Copiato!', copy_failed: 'Copia fallita', selected_text_reply: 'Rispondi con selezione', selected_text_reply_title: 'Aggiungi il testo della chat selezionato come contesto citato', selected_text_reply_appended: 'Testo selezionato aggiunto al compositore', saved_prompts_empty: 'Nessun prompt salvato.', saved_prompts_save_current: 'Salva input corrente come prompt', saved_prompts_saved: 'Prompt salvato', saved_prompts_delete: 'Elimina prompt', saved_prompts_empty_input: 'Digita un prompt da salvare prima', context_block_name_default: 'Contesto', context_block_flush_aria: 'I blocchi di contesto verranno inclusi quando invii', context_block_rename_hint: 'Fai clic o premi Invio per rinominare', context_block_rename_aria: 'Rinomina blocco di contesto', context_block_remove: 'Rimuovi blocco di contesto', diff_loading: 'Caricamento diff', diff_error: 'Impossibile caricare il file patch', diff_too_large: 'File patch troppo grande per la visualizzazione inline', tree_view: 'Albero', raw_view: 'Raw', parse_failed_note: 'parsing fallito', you: 'Tu', mcp_servers_title: 'Server MCP', mcp_servers_desc: 'Visualizza i server MCP configurati in config.yaml.', mcp_no_servers: 'Nessun server MCP configurato.', mcp_add_server: '+ Aggiungi Server', mcp_field_name: 'Nome Server', mcp_transport_label: 'Tipo Trasporto', mcp_field_command: 'Comando', mcp_field_args: 'Argomenti (separati da virgola)', mcp_field_url: 'URL', mcp_field_timeout: 'Timeout (secondi)', mcp_save: 'Salva', mcp_cancel: 'Annulla', mcp_name_required: 'Il nome del server è obbligatorio.', mcp_url_required: "L'URL è obbligatorio per il trasporto HTTP.", mcp_command_required: 'Il comando è obbligatorio per il trasporto stdio.', mcp_saved: 'Server MCP salvato.', mcp_save_failed: 'Salvataggio server MCP fallito.', mcp_delete_confirm_title: 'Elimina Server MCP', mcp_delete_confirm_message: 'Eliminare il server MCP "{0}"? Questa azione non può essere annullata.', mcp_deleted: 'Server MCP eliminato.', mcp_delete_failed: 'Eliminazione server MCP fallita.', mcp_load_failed: 'Caricamento server MCP fallito.', mcp_restart_hint: 'Le modifiche ai server sono in sola lettura qui. Modifica config.yaml e riavvia Hermes per applicare le modifiche.', mcp_toggle_followup: 'I controlli abilita/disabilita sono rinviati finché la semantica di ricaricamento MCP non sarà esplicita.', mcp_status_active: 'Attivo', mcp_status_configured: 'Configurato', mcp_status_disabled: 'Disabilitato', mcp_status_invalid_config: 'Configurazione non valida', mcp_status_unknown: 'Sconosciuto', mcp_tool_count: '{0} strumenti', mcp_enabled_yes: 'Abilitato', mcp_enabled_no: 'Disabilitato', mcp_enable_server: 'Enable this MCP server', mcp_disable_server: 'Disable this MCP server', mcp_enabled_toast: (name) => `MCP server "${name}" enabled.`, mcp_disabled_toast: (name) => `MCP server "${name}" disabled.`, mcp_toggle_failed: 'Failed to update MCP server.', mcp_tools_title: 'Strumenti MCP', mcp_tools_desc: 'Cerca strumenti noti tra i server MCP attivi.', mcp_tools_search_placeholder: 'Cerca strumenti per nome, server o descrizione…', mcp_tools_no_tools: "Nessuno strumento MCP disponibile dall'inventario runtime attivo.", mcp_tools_no_matches: 'Nessuno strumento MCP corrisponde alla ricerca.', mcp_tools_load_failed: 'Caricamento strumenti MCP fallito.', mcp_tools_schema_empty: 'Nessun parametro schema.', mcp_tools_runtime_note: "L'inventario strumenti usa solo dati runtime MCP già noti; la WebUI non avvia né interroga i server.", mcp_tools_summary_no_matches: (query,total) => `No MCP tools matching “${query}” (${total} total MCP tools).`, mcp_tools_summary_none: 'No MCP tools to show.', mcp_tools_summary_matching: (query) => ` matching “${query}”`, mcp_tools_summary_total_note: (total) => ` (${total} total MCP tools)`, mcp_tools_summary_showing: (start,end,filtered,searchNote,totalNote,page,pages) => `Showing ${start}-${end} of ${filtered} MCP tools${searchNote}${totalNote}. Page ${page} of ${pages}.`, mcp_tools_page_size_prefix: 'Show', mcp_tools_page_size_suffix: 'per page', mcp_tools_per_page_aria: 'MCP tools per page', mcp_tools_inactive_configured_servers: (servers) => `Configured but inactive in this WebUI runtime: ${servers}.`, mcp_tools_pagination_label: 'MCP tools pagination', mcp_tools_previous_page: '‹ Prev', mcp_tools_previous_page_aria: 'Previous MCP tools page', mcp_tools_next_page: 'Next ›', mcp_tools_next_page_aria: 'Next MCP tools page', // PDF preview (#480) pdf_loading: 'Caricamento PDF {0}…', pdf_too_large: "PDF troppo grande per l'anteprima inline", pdf_no_pages: 'Il PDF non ha pagine', pdf_error: 'Rendering anteprima PDF fallito', pdf_download: 'Scarica PDF', pdf_truncated: 'Showing the first {0} of {1} pages — download for the full document', // HTML sandbox preview (#482) html_loading: 'Caricamento anteprima HTML…', html_too_large: "HTML troppo grande per l'anteprima inline", html_error: 'Rendering anteprima HTML fallito', html_open_full: 'Apri pagina intera', html_sandbox_label: 'Anteprima HTML (sandbox)', thinking: 'Pensando', expand_all: 'Espandi tutto', collapse_all: 'Comprimi tutto', edit_failed: 'Modifica fallita: ', regen_failed: 'Rigenerazione fallita: ', reconnect_active: 'Una risposta è ancora in generazione. Ricaricare quando pronta?', reconnect_finished: 'Una risposta era in corso quando hai lasciato. I messaggi potrebbero essere aggiornati.', // approval card approval_heading: 'Approvazione richiesta', approval_desc_prefix: 'Comando pericoloso rilevato', approval_btn_once: 'Consenti una volta', approval_btn_once_title: 'Consenti questo comando (Invio)', approval_btn_session: 'Consenti sessione', approval_btn_session_title: 'Consenti per questa sessione di conversazione', approval_btn_always: 'Consenti sempre', approval_btn_always_title: 'Consenti sempre questo tipo di comando', approval_btn_deny: 'Nega', approval_btn_deny_title: 'Nega — non eseguire questo comando', approval_responding: 'Rispondendo\u2026', approval_gateway_unsupported: 'Approvals require a newer gateway. Upgrade the connected Hermes gateway to enable this.', approval_gateway_unsupported_label: 'Approvazioni non supportate', clarify_heading: 'Chiarimento necessario', clarify_hint: "Scegli un'opzione o scrivi la tua risposta qui sotto.", clarify_other: 'Altro', clarify_send: 'Invia', clarify_input_placeholder: 'Scrivi la tua risposta…', clarify_responding: 'Rispondendo\u2026', session_attention_approval: (n) => n === 1 ? 'Approvazione' : `${n} approvazioni`, session_attention_clarify: (n) => n === 1 ? 'Domanda' : `${n} domande`, session_attention_generic: (n) => n === 1 ? 'Attenzione' : `${n} elementi`, session_attention_approval_title: 'In attesa di una decisione di approvazione', session_attention_clarify_title: 'In attesa della tua risposta', session_attention_generic_title: 'In attesa di un’azione dell’utente', untitled: 'Senza titolo', n_messages: (n) => n === 1 ? `${n} messaggio` : `${n} messaggi`, load_older_messages: '↑ Scorri in alto o clicca per caricare i messaggi precedenti', session_jump_start: 'Inizio', session_jump_start_label: "Vai all'inizio della sessione", session_jump_end: 'Fine', session_jump_end_label: 'Vai alla fine della sessione', session_new_message: 'Nuovo messaggio', session_new_message_label: 'Nuovo messaggio disponibile, vai alla fine', jump_to_question: 'alla risposta', jump_to_question_label: 'Vai all\'inizio di questa risposta', queued_label: 'Inviato dopo la risposta', queued_count: (n) => n === 1 ? '1 in coda' : `${n} in coda`, queued_cancel: 'Annulla messaggio in coda', model_unavailable: ' (non disponibile)', model_unavailable_title: 'Questo modello non è più nella lista provider attuale', provider_mismatch_warning: (m,p)=>`"${m}" potrebbe non funzionare con il provider configurato (${p}). Invia comunque, o esegui \`hermes model\` nel terminale per cambiare.`, provider_mismatch_label: 'Provider non corrispondente', gateway_auth_label: 'Autenticazione Gateway non riuscita', gateway_start: 'Start', gateway_stop: 'Stop', gateway_restart: 'Restart', gateway_start_success: 'Gateway start completed.', gateway_stop_success: 'Gateway stop completed.', gateway_restart_success: 'Gateway restart completed.', gateway_start_failed: 'Gateway start failed', gateway_stop_failed: 'Gateway stop failed', gateway_restart_failed: 'Gateway restart failed', gateway_running: 'Running', gateway_session: 'session', gateway_sessions: 'sessions', gateway_status_load_failed: 'Failed to load gateway status', model_not_found_label: 'Modello non trovato', model_custom_label: 'ID modello personalizzato', model_custom_placeholder: 'es. openai/gpt-5.4', model_show_all_models: 'Mostra tutti i {0} modelli', model_search_placeholder: 'Cerca modelli…', model_search_no_results: 'Nessun modello trovato', model_group_configured: 'Configurato', ws_search_placeholder: 'Cerca workspace…', ws_no_results: 'Nessun workspace trovato', workspace_new_worktree_conversation: 'Nuova conversazione in worktree', workspace_new_worktree_conversation_meta: 'Crea un worktree git isolato per questo workspace.', workspace_worktree_created: 'Conversazione worktree creata', workspace_worktree_failed: 'Creazione worktree fallita: ', session_worktree_badge: 'Worktree', model_scope_advisory: 'Si applica a questa conversazione dal prossimo messaggio.', model_scope_toast: 'Si applica a questa conversazione dal prossimo messaggio.', // commands.js cmd_clear: 'Cancella i messaggi della conversazione', cmd_help: 'Show available slash commands', cmd_compress: 'Comprimi manualmente il contesto della conversazione (uso: /compress [argomento])', ctx_compress_hint: 'Comprimi il contesto per liberare spazio →', ctx_compress_action: '⚠ Comprimi ora per liberare contesto', cmd_compact_alias: 'Alias legacy per /compress', cmd_model: 'Cambia modello (es. /model gpt-4o)', cmd_workspace: 'Cambia workspace per nome', cmd_terminal: 'Apri il terminale del workspace', cmd_new: 'Avvia una nuova sessione di chat', cmd_usage: 'Attiva/disattiva visualizzazione uso token', cmd_theme: 'Cambia aspetto (tema: system/dark/light, skin: default/ares/mono/graphite/slate/poseidon/sisyphus/charizard/sienna/catppuccin/nous/geist-contrast/zeus/verdigris)', cmd_personality: "Cambia personalità dell'agente", cmd_skills: 'Elenca le skill Hermes disponibili', cmd_use: 'Forza una skill per il prossimo messaggio', available_commands: 'Comandi disponibili:', type_slash: 'Digita / per vedere i comandi', conversation_cleared: 'Conversazione cancellata', command_label: 'Comando', context_compaction_label: 'Compattazione contesto', retrieval_context_label: 'Contesto indicizzato', retrieval_context_preview: 'I messaggi precedenti sono archiviati e recuperabili con gli strumenti di contesto', preserved_task_list_label: 'Lista task preservata', reference_only_label: 'Solo riferimento', model_usage: 'Uso: /model ', no_model_match: 'Nessun modello corrispondente a "', model_did_you_mean: (m) => ` — intendevi "${m}"?`, switched_to: 'Passato a ', workspace_usage: 'Uso: /workspace ', no_workspace_match: 'Nessun workspace corrispondente a "', switched_workspace: 'Passato al workspace: ', workspace_switch_failed: 'Cambio workspace fallito: ', new_session: 'Nuova sessione creata', new_session_creating: 'Creazione nuova conversazione…', compressing: 'Richiesta compressione contesto...', compress_running_label: 'Compressione in corso', compress_complete_label: 'Compressione completata', auto_compress_label: 'Compressione automatica', compress_failed_label: 'Compressione fallita', focus_label: 'Focus', token_usage_on: 'Uso token attivo', token_usage_off: 'Uso token disattivo', usage_cache_hit_detail: 'Cache: {0}% in cache ({1} letti / {2} scritti)', usage_cached_percent: '{0}% in cache', theme_usage: 'Uso: /theme ', theme_set: 'Tema: ', no_active_session: 'Nessuna sessione attiva', cmd_queue: 'Metti in coda un messaggio per il prossimo turno', cmd_goal: 'Imposta o controlla un obiettivo persistente', goal_evaluating_progress: 'Valutazione progresso obiettivo…', goal_working_toward: "Lavorando verso l'obiettivo…", goal_continuing_toast: "Proseguendo verso l'obiettivo…", goal_status_none: 'Nessun obiettivo attivo. Impostane uno con /goal .', goal_status_active: (turns, max_turns, goal) => `⊙ Obiettivo (attivo, ${turns}/${max_turns} turni): ${goal}`, goal_status_paused: (turns, max_turns, reason, goal) => `⏸ Obiettivo (in pausa, ${turns}/${max_turns}${reason ? `, ${reason}` : ''}): ${goal}`, goal_status_done: (turns, max_turns, goal) => `✓ Obiettivo completato (${turns}/${max_turns}): ${goal}`, goal_set: (turns, goal) => `⊙ Obiettivo impostato (budget ${turns} turni): ${goal}`, goal_paused: (goal) => `⏸ Obiettivo in pausa: ${goal}`, goal_resumed: (goal) => `▶ Obiettivo ripreso: ${goal}`, goal_cleared: 'Obiettivo rimosso.', goal_no_goal: 'Nessun obiettivo attivo.', goal_achieved: (reason) => `✓ Obiettivo raggiunto: ${reason}`, goal_paused_budget_exhausted: (turns, max_turns) => `⏸ Obiettivo in pausa — ${turns}/${max_turns} turni usati. Usa /goal resume per continuare, o /goal clear per fermarti.`, goal_continuing: (turns, max_turns, reason) => `↻ Proseguendo verso l'obiettivo (${turns}/${max_turns}): ${reason}`, cmd_interrupt: 'Annulla il turno corrente e invia un nuovo messaggio', cmd_steer: "Inietta una correzione a metà turno senza interrompere l'agente", cmd_queue_no_msg: 'Uso: /queue ', cmd_queue_not_busy: 'Nessun task attivo — invia normalmente', cmd_queue_confirm: 'Messaggio in coda', cmd_interrupt_no_msg: 'Uso: /interrupt ', cmd_interrupt_confirm: 'Interrotto — invio nuovo messaggio', cmd_steer_no_msg: 'Uso: /steer ', cmd_steer_fallback: 'Steer non disponibile — bozza ripristinata', cmd_steer_delivered: "Steer consegnato — l'agente lo vedrà al prossimo risultato strumento", steer_leftover_queued: 'Steer in coda per il prossimo turno', busy_steer_fallback: 'Steer non disponibile — bozza ripristinata', steer_fail_no_cached_agent: 'No agent cached for this session — try refreshing', steer_fail_agent_lacks_steer: 'This agent version does not support steer', steer_fail_session_not_found: 'Session not found — it may have expired', steer_fail_not_running: 'Agent is not currently running', steer_fail_stream_dead: 'The agent stream has ended', steer_fail_steer_error: 'Steer delivery failed — the agent may have finished', steer_fail_network_error: 'Network error — check your connection', steer_fail_unknown: 'Steer unavailable', steer_recovery_retry: 'Retry', steer_recovery_dismiss: 'Dismiss', busy_interrupt_confirm: 'Interrotto — invio nuovo messaggio', settings_label_default_message_mode: 'Modalità messaggio predefinita', settings_desc_default_message_mode: "Controlla cosa succede quando invii un messaggio mentre l'agente è in esecuzione. Coda attende; Interrompi annulla e ricomincia; Steer inietta una correzione a metà turno senza interrompere. Se Steer non è disponibile, la bozza viene ripristinata così puoi scegliere l'azione successiva.", settings_label_fade_text_effect: 'Effetto dissolvenza testo', settings_desc_fade_text_effect: 'Dissolve gradualmente le nuove parole trasmesse in streaming mentre l’assistente risponde. Simile a OpenWebUI; disattivato per impostazione predefinita per massime prestazioni.', settings_label_max_tokens: 'Token massimi in uscita', settings_desc_max_tokens: 'Limita la lunghezza delle nuove risposte in streaming. Lascia vuoto per usare il valore di fallback del profilo attivo.', settings_placeholder_max_tokens_none: 'Nessun override', settings_placeholder_max_tokens_fallback: 'Nessun override (fallback: {0})', settings_default_message_mode_queue: 'Accoda follow-up', settings_default_message_mode_interrupt: 'Interrompi turno corrente', settings_default_message_mode_steer: 'Steer (correzione a metà turno)', settings_label_busy_placeholder_hint: 'Show busy placeholder hint', settings_desc_busy_placeholder_hint: 'Shows the composer placeholder with the current busy action while the session is running and the draft is empty.', composer_placeholder_busy_queue: 'Enter = queue | /interrupt | /background | /steer', composer_placeholder_busy_interrupt: 'Enter = interrupt | /queue | /background | /steer', composer_placeholder_busy_steer: 'Enter = steer | /queue | /background | /interrupt', slash_skill_badge:'Skill', slash_skill_desc:'Invoca questa skill', cmd_stop:'Ferma la risposta corrente', cmd_title:'Mostra o imposta il titolo della sessione', cmd_retry:"Reinvia l'ultimo messaggio", cmd_undo:"Rimuovi l'ultimo scambio", cmd_btw:'Fai una domanda laterale (effimera)', cmd_btw_usage:'/btw — fai una domanda laterale usando il contesto della sessione', cmd_background:'Esegui un prompt in background', cmd_background_usage:'/background — esegui in parallelo senza bloccare', cmd_branch:'Dirama questa conversazione in una nuova sessione', cmd_branch_usage:'/branch [nome] — dirama la conversazione (opzionalmente con un nome)', branch_forked:'Diramata in nuova sessione', branch_failed:'Diramazione fallita: ', fork_from_here:'Dirama da qui', forked_from:'Diramata da', subagent_children:'Sessioni subagente', btw_asking:'Domanda laterale in corso...', btw_label:'Domanda laterale — non nella cronologia', btw_done:'Domanda laterale risposta', btw_no_answer:'Nessuna risposta ricevuta.', btw_failed:'Domanda laterale fallita: ', bg_running:'In esecuzione in background...', bg_complete:'Task in background completato', bg_label:'Risultato background:', bg_no_answer:'(nessuna risposta)', bg_failed:'Task in background fallito: ', undo_exchange:'Annulla ultimo scambio', cmd_status:'Mostra info sessione', cmd_voice:'Attiva/disattiva input microfono', stream_stopped:'Risposta fermata.', no_active_task:'Nessun task attivo da fermare.', cancel_unavailable:'Annullamento non disponibile.', retry_failed:'Riprova fallito: ', undo_failed:'Annulla fallito: ', undid_n_messages:'Rimossi', undid_messages_suffix:'messaggio/i.', status_heading:'Stato Sessione', status_session_id:'ID Sessione', status_title:'Titolo', status_model:'Modello', status_provider:'Provider', status_workspace:'Workspace', status_personality:'Personalità', status_messages:'Messaggi', status_agent_running:'Agente in esecuzione', status_profile: 'Profilo', status_hermes_home: 'Home Hermes', status_started: 'Avviato', status_updated: 'Aggiornato', status_tokens: 'Token', status_ephemeral: 'Snapshot effimero — non salvato nella cronologia trascrizioni.', status_no_tokens: 'Nessun token usato', status_unknown: 'Sconosciuto', status_yes:'Sì', status_no:'No', status_load_failed:'Caricamento stato fallito: ', title_current:'Titolo attuale', title_change_hint:'Usa `/title ` per rinominare.', title_set:'Titolo impostato a', cmd_webui_only_session:'Questo comando non è disponibile per sessioni importate da CLI.', cmd_voice_use_mic:'Clicca il pulsante microfono nel compositore.', usage_heading:'Uso Token', usage_default_model:'predefinito', usage_unknown:'sconosciuto', usage_input_tokens:'Token input', usage_output_tokens:'Token output', usage_total:'Token totali', usage_estimated_cost:'Costo stimato', usage_settings_tip:'Nota: le stime dei costi sono approssimative.', usage_load_failed:'Caricamento uso fallito: ', usage_personality_none:'nessuna', // Session toolsets (#493) session_toolsets:'Strumenti Sessione', session_toolsets_desc:'Usa i valori predefiniti del profilo attivo o scegli un elenco di strumenti personalizzato per questa sessione', session_toolsets_global:'Valori predefiniti del profilo attivo', session_toolsets_profile_defaults:'Valori predefiniti del profilo attivo', session_toolsets_custom:'Sostituzione personalizzata', session_toolsets_use_profile_defaults:'Usa valori predefiniti del profilo attivo', session_toolsets_configured_servers:'Server MCP configurati', session_toolsets_loading_servers:'Caricamento server configurati...', session_toolsets_no_configured_servers:'Nessun server MCP configurato', session_toolsets_placeholder:'strumento1, strumento2, …', session_toolsets_apply:'Applica', session_toolsets_clear:'Usa predefiniti', session_toolsets_applied:'Strumenti aggiornati', session_toolsets_cleared:'Uso i valori predefiniti del profilo attivo', session_toolsets_failed:'Aggiornamento strumenti fallito: ', untitled:'Senza titolo', no_personalities: 'Nessuna personalità trovata (aggiungile in ~/.hermes/personalities/)', available_personalities: 'Personalità disponibili:', personality_switch_hint: '\\n\\nUsa `/personality ` per cambiare, o `/personality none` per rimuovere.', personalities_load_failed: 'Caricamento personalità fallito', personality_cleared: 'Personalità rimossa', personality_set: 'Personalità: ', failed_colon: 'Fallito: ', // ui.js no_workspace: 'Nessun workspace', terminal_open_title: 'Apri terminale workspace', terminal_no_workspace_title: 'Seleziona un workspace per aprire il terminale', terminal_title: 'Terminale', terminal_clear: 'Pulisci', terminal_copy_output: 'Copia output', terminal_restart: 'Riavvia', terminal_collapse: 'Comprimi', terminal_expand: 'Espandi', terminal_close: 'Chiudi', terminal_input_placeholder: 'Esegui un comando...', terminal_start_failed: 'Avvio terminale fallito: ', terminal_input_failed: 'Input terminale fallito: ', terminal_copy_failed: 'Copia fallita: ', terminal_error: 'Errore terminale', terminal_remote_backend_unsupported: 'Il terminale incorporato è supportato solo per backend terminali locali.', workspace_empty_no_path: 'Nessun workspace selezionato. Imposta un workspace in Impostazioni \u2192 Workspace per esplorare i file.', workspace_empty_dir: 'Questo workspace è vuoto.', workspace_show_hidden_files: 'Mostra file nascosti', workspace_show_hidden_files_desc: "Includi .DS_Store, .git, node_modules e altri file nascosti/di sistema nell'albero dei file.", workspace_hidden_files_visible: 'nascosti visibili', workspace_hidden_files_visible_title: 'I file nascosti sono visibili — clicca per opzioni', workspace_options: 'Opzioni workspace', dialog_confirm_title: 'Conferma azione', dialog_prompt_title: 'Inserisci un valore', dialog_confirm_btn: 'Conferma', // workspace.js unsaved_confirm: "Hai modifiche non salvate nell'anteprima. Scartare e navigare?", discard: 'Scarta', save: 'Salva', edit: 'Modifica', clear: 'Pulisci', create: 'Crea', remove: 'Rimuovi', save_title: 'Salva modifiche', edit_title: 'Modifica questo file', saved: 'Salvato', save_failed: 'Salvataggio fallito: ', image_load_failed: "Impossibile caricare l'immagine", file_open_failed: 'Impossibile aprire il file', downloading: (name) => `Scaricamento ${name}\u2026`, double_click_rename: 'Doppio clic per rinominare', symlink_link_to: 'Symlink → {target}', external_link_open_confirm: 'This symlink points outside the workspace. Open it in a read-only external view for this browser session?', external_link_read_only: 'This external view is read-only. Create, rename, move, delete, upload, reveal, and editor actions stay disabled here.', external_link_grant_expired: 'This external view expired. Reopen the escape-target symlink to authorize it again.', session_rename_failed_no_row: 'Could not start rename — row not found.', renamed_to: 'Rinominato in ', rename_failed: 'Rinomina fallita: ', moved_to: 'Spostato in ', move_failed: 'Spostamento fallito: ', delete_title: 'Elimina', delete_confirm: (name) => `Eliminare ${name}?`, delete_dir_confirm: (name) => `Eliminare la cartella "${name}" e tutto il suo contenuto?`, rename_title: 'Rinomina', rename_prompt: 'Nuovo nome:', deleted: 'Eliminato ', delete_failed: 'Eliminazione fallita: ', reveal_in_finder: 'Mostra nel File Manager', reveal_failed: 'Mostra fallito: ', copy_file_path: 'Copia percorso file', open_in_vscode: 'Apri in VS Code', open_in_vscode_failed: 'Apertura in VS Code fallita: ', download_folder: 'Download Folder', // TODO: translate path_copied: 'Percorso file copiato negli appunti', path_copy_failed: 'Copia percorso fallita: ', session_rename: 'Rinomina conversazione', session_rename_desc: 'Modifica il titolo di questa conversazione', session_title_regenerate: 'Rigenera titolo', session_title_regenerate_desc: 'Chiedi a Hermes di generare un nuovo titolo dalla conversazione', session_title_regenerating: 'Rigenerazione del titolo…', session_title_regenerated: (title) => `Titolo rigenerato: ${title}`, session_title_regenerate_failed: 'Rigenerazione del titolo non riuscita: ', session_copy_link: 'Copia link conversazione', session_copy_link_desc: 'Copia un link diretto a questa conversazione', session_link_copied: 'Link conversazione copiato negli appunti', session_link_copy_failed: 'Impossibile copiare il link della conversazione: ', new_file_prompt: 'Nuovo nome file (es. note.md):', new_file: 'Nuovo file', new_folder: 'Nuova cartella', workspace_root: 'root del workspace', new_file_prompt_title: 'Nuovo nome file in {0}:', new_folder_prompt_title: 'Nuovo nome cartella in {0}:', project_name_prompt: 'Nome progetto:', created: 'Creato ', create_failed: 'Creazione fallita: ', new_folder_prompt: 'Nuovo nome cartella:', folder_created: 'Cartella creata ', folder_create_failed: 'Creazione cartella fallita: ', workspace_auto_create_folder: 'Crea cartella se non esiste', folder_add_as_space_btn: 'Aggiungi come Spazio', folder_add_as_space_msg: 'Aggiungere questa cartella come nuovo spazio nella lista workspace?', folder_add_as_space_title: 'Aggiungere come Spazio?', remove_title: 'Rimuovi', empty_dir: '(vuota)', upload_failed: 'Upload fallito: ', upload_too_large: (maxMb, fileMb) => `File troppo grande (${fileMb} MB). La dimensione massima è ${maxMb} MB.`, uploading: 'Caricamento…', uploaded: 'Caricato', all_uploads_failed: (n) => `Tutti gli ${n} upload sono falliti`, archive_extracted: (n, c) => `Estratti ${n} file da ${c} archivio/i`, session_pin: 'Fissa conversazione', session_unpin: 'Sblocca conversazione', session_pin_desc: 'Mantieni questa conversazione in cima', session_unpin_desc: 'Rimuovi dalle fissate', session_pin_failed: 'Fissa fallito: ', session_move_project: 'Sposta nel progetto', session_move_project_desc_has: 'Cambia il progetto per questa conversazione', session_move_project_desc_none: 'Assegna un progetto a questa conversazione', session_archive: 'Archivia conversazione', session_hide_external: 'Nascondi dalla lista', session_restore: 'Ripristina conversazione', session_archive_desc: 'Nascondi questa conversazione fino a mostrare archiviate', session_archive_worktree_desc: 'Nascondi questa conversazione; mantieni il suo worktree su disco', session_hide_external_desc: 'Nascondi questa sessione importata dalla WebUI senza eliminare lo storico originale.', session_restore_desc: 'Riporta questa conversazione nella lista principale', session_archived: 'Sessione archiviata', session_archived_worktree: 'Sessione archiviata. Il worktree rimane su disco.', session_hidden: 'Sessione nascosta dalla lista', session_restored: 'Sessione ripristinata', session_archive_failed: 'Archiviazione fallita: ', session_duplicate: 'Duplica conversazione', session_duplicate_desc: 'Crea una copia con lo stesso workspace e modello', session_export_html: 'Export as HTML', session_export_html_desc: 'Download this conversation as a self-contained HTML file', session_duplicated: 'Sessione duplicata', session_duplicate_failed: 'Duplicazione fallita: ', session_stop_response: 'Ferma risposta', session_stop_response_desc: 'Annulla la risposta in corso per questa conversazione', session_delete: 'Elimina conversazione', session_delete_desc: 'Rimuovi permanentemente questa conversazione', session_delete_confirm: 'Eliminare questa conversazione?', session_delete_worktree_desc: 'Elimina solo la conversazione di WebUI; mantieni il worktree su disco', session_delete_worktree_confirm: (path) => `Eliminare questa conversazione? Il worktree in ${path} rimarrà su disco.`, session_deleted: 'Conversazione eliminata', session_deleted_worktree: 'Conversazione eliminata. Il worktree rimane su disco.', session_worktree_remove: 'Rimuovi worktree', session_worktree_remove_desc: (path) => `Elimina il git worktree in ${path} dal disco`, session_worktree_remove_confirm: (path) => `Rimuovere il git worktree dal disco?\n\nPercorso: ${path}\n\nVerrà eliminata l'intera directory del worktree. I dati della sessione restano in WebUI.`, session_worktree_remove_not_exists: (path) => `Il worktree in ${path} non esiste più sul disco.`, session_worktree_remove_confirm_label: 'Rimuovi', session_worktree_removed: 'Worktree rimosso.', session_worktree_remove_failed: 'Rimozione worktree fallita: ', session_worktree_remove_status_failed: 'Lettura stato worktree fallita: ', session_worktree_remove_locked_by_stream: 'Impossibile rimuovere — una sessione di streaming attiva sta usando questo worktree.', session_worktree_remove_locked_by_terminal: 'Impossibile rimuovere — una sessione terminale attiva sta usando questo worktree.', session_worktree_remove_unsafe_blocked: 'Risolvi le modifiche locali o i commit non inviati prima di rimuovere questo worktree.', session_worktree_remove_dirty_warning: 'ATTENZIONE: Questo worktree ha modifiche non committate che andranno perse.', session_worktree_remove_untracked_warning: (count) => `${count} file non tracciati verranno eliminati definitivamente.`, session_worktree_remove_ahead_warning: (ahead) => `${ahead} commit non inviati andranno persi.`, session_select_mode: 'Seleziona', session_select_mode_desc: 'Seleziona conversazioni per gestione in blocco', session_select_all: 'Seleziona tutto', session_deselect_all: 'Deseleziona tutto', session_selected_count: '{0} selezionate', session_batch_archive: 'Archivia', session_batch_delete: 'Elimina', session_batch_move: 'Sposta nel progetto', session_batch_delete_confirm: 'Eliminare {0} conversazioni?', session_batch_archive_confirm: 'Archiviare {0} conversazioni?', session_batch_delete_worktree_confirm: 'Eliminare {0} conversazioni? {1} conversazioni con worktree lasceranno le loro directory worktree su disco.', session_batch_archive_worktree_confirm: 'Archiviare {0} conversazioni? {1} conversazioni con worktree manterranno le loro directory worktree su disco.', session_no_selection: 'Nessuna conversazione selezionata', // settings panel settings_heading_title: 'Pannello di Controllo', settings_heading_subtitle: 'Preferenze, strumenti di conversazione e controlli di sistema.', settings_section_conversation_title: 'Conversazione', settings_section_appearance_title: 'Aspetto', settings_section_appearance_meta: 'Tema, colori accento e stile visivo.', settings_section_preferences_title: 'Preferenze', settings_section_preferences_meta: 'Predefiniti e comportamento UI per Hermes Web UI.', settings_section_system_title: 'Sistema', settings_section_system_meta: 'Versione istanza e controlli di accesso.', settings_check_now: 'Verifica ora', settings_checking: 'Verifica in corso\u2026', settings_up_to_date: 'Aggiornato \u2713', settings_updates_available: '{count} aggiornamento/i disponibile/i', settings_updates_disabled: 'Verifica aggiornamenti disabilitata', settings_update_check_failed: 'Verifica aggiornamenti fallita', settings_update_no_git: 'Impossibile verificare aggiornamenti (non \u00e8 un checkout git)', settings_label_workspace_panel_open: 'Mantieni il pannello workspace aperto per impostazione predefinita', settings_desc_workspace_panel_open: 'Se abilitato, il pannello workspace/esplora file si apre automaticamente a ogni nuova sessione. Puoi comunque chiuderlo manualmente in qualsiasi momento.', settings_label_workspace_todos_tab: 'Mostra tab Todos nel pannello workspace', settings_desc_workspace_todos_tab: 'Se abilitato, nel pannello workspace appare una tab Todos. Il pannello Todos della barra laterale rimane disponibile.', settings_label_session_jump_buttons: 'Mostra pulsanti salto sessione', settings_desc_session_jump_buttons: 'Mostra pulsanti fluttuanti Inizio e Fine durante la lettura di sessioni lunghe.', settings_label_terminal_auto_expand: 'Espandi automaticamente il terminale sull\'output', settings_desc_terminal_auto_expand: 'Espandi automaticamente il pannello terminale compresso quando un comando in esecuzione emette nuovo output.', settings_label_session_endless_scroll: 'Carica messaggi precedenti scorrendo in alto', settings_desc_session_endless_scroll: 'Se abilitato, i messaggi precedenti si caricano automaticamente scorrendo in alto. Se disabilitato, usa il pulsante messaggi precedenti.', settings_label_auto_scroll_follow: 'Segui automaticamente i nuovi contenuti', settings_desc_auto_scroll_follow: 'Se abilitato, la vista scorre verso il basso man mano che arrivano nuovi token. Se disabilitato, controlli tu la posizione di scorrimento.', settings_label_render_user_markdown: 'Render markdown in user messages', settings_label_show_titlebar_profile: 'Show profile switcher in titlebar', // TODO: translate settings_desc_show_titlebar_profile: 'When enabled, a profile switcher button appears in the top-left app titlebar so you can change profiles from any tab. Off by default; the composer footer always has a profile switcher regardless of this setting.', // TODO: translate settings_desc_render_user_markdown: 'When enabled, bold, italic, links, and other markdown in your own messages are rendered. Off by default; fenced code blocks and math always render regardless of this setting.', settings_label_large_text_paste_as_attachment: 'Attach large pasted text as file', settings_desc_large_text_paste_as_attachment: 'When enabled, long pasted text becomes a .md attachment instead of filling the composer.', settings_label_project_quick_create: 'Show per-project new-conversation buttons', settings_desc_project_quick_create: 'When enabled, each project chip in the sidebar gets a + button to start a conversation in that project.', settings_label_structured_code: 'JSON/YAML code blocks', settings_option_structured_code_auto: 'Auto: Tree for long blocks', settings_option_structured_code_on: 'Tree by default', settings_option_structured_code_off: 'Raw by default', settings_label_structured_code_auto_lines: 'Auto threshold lines', settings_desc_structured_code: 'When Auto is selected, JSON/YAML blocks with at least this many lines open in Tree view. Tree always opens the structured viewer; Raw keeps the syntax-highlighted text. You can still switch Tree/Raw on each block.', settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_chat_activity_display_mode: 'Activity display', settings_desc_chat_activity_display_mode: 'Compact Worklog groups supporting activity into a quiet summary. Transparent Stream keeps each thinking/tool event as its own chronological expandable row.', first_token_time: 'Time to first token', processed_elapsed: _i18nProcessedElapsedEn, worklog_thinking: 'Thinking', tool_target_skill_suffix: 'skill', tool_action_label: _i18nToolActionLabelEn, tool_worklog_summary: _i18nToolWorklogSummaryEn, tool_summary_join: _i18nToolSummaryJoinEn, done: 'Done', settings_option_compact_worklog: 'Compact Worklog', settings_option_transparent_stream: 'Transparent Stream', settings_label_tab_visibility: 'Schede della barra laterale', settings_desc_tab_visibility: 'Scegli quali schede mostrare nella barra laterale e nel rail. Chat e Impostazioni sono sempre visibili.', settings_label_composer_controls: 'Chat footer controls', settings_desc_composer_controls: 'Toggle which controls are shown in the chat footer. Drag chips to reorder each footer group.', settings_label_composer_situational_controls: 'Situational footer controls', settings_desc_composer_situational_controls: 'These controls do not always appear, depending on viewport, mode, or runtime state. You can still toggle them off if needed.', composer_control_attach: 'Attach', composer_control_saved_prompts: 'Saved prompts', composer_control_mic: 'Mic', composer_control_profile: 'Profile', composer_control_workspace: 'Workspace', composer_control_model: 'Model', composer_control_reasoning: 'Reasoning', composer_control_context: 'Context', composer_control_voice_mode: 'Voice mode', composer_control_yolo: 'YOLO', composer_control_bg_badge: 'Background badge', composer_control_mobile_config: 'Mobile config', composer_control_quota_chip: 'Quota chip', composer_control_toolsets: 'Toolsets', composer_control_status: 'Status', open_in_browser: 'Apri nel browser', settings_dropdown_conversation: 'Conversazione', settings_dropdown_appearance: 'Aspetto', settings_dropdown_preferences: 'Preferenze', settings_dropdown_providers: 'Provider', settings_dropdown_system: 'Sistema', settings_tab_conversation: 'Conversazione', settings_tab_appearance: 'Aspetto', settings_tab_preferences: 'Preferenze', settings_tab_plugins: 'Plugin', settings_tab_extensions: 'Extensions', // TODO: translate settings_extensions_gallery_tab: 'Gallery', settings_extensions_installed_tab: 'Installed', settings_extensions_diagnostics_tab: 'Diagnostics', settings_extensions_gallery_loading: 'Loading gallery…', settings_extensions_gallery_empty: 'No extensions found in the registry.', settings_extensions_gallery_error: 'Failed to load gallery.', ext_gallery_install: 'Install', ext_gallery_installing: 'Installing…', ext_gallery_installed: 'Installed', ext_gallery_uninstall: 'Uninstall', ext_gallery_uninstalling: 'Uninstalling…', ext_gallery_restart_required: 'Restart required', ext_gallery_permissions_show: 'Permissions', ext_gallery_permissions_hide: 'Hide permissions', ext_gallery_permissions_empty: 'Nessuna autorizzazione extra dichiarata.', ext_gallery_version: 'Version', ext_gallery_author: 'Author', ext_gallery_capabilities: 'Capabilities', ext_gallery_next_step: 'Prossimo passo', ext_gallery_after_install: "Dopo l'installazione", ext_gallery_local_component_required: "Questa estensione ha un componente locale. Avvia l'app locale o il sidecar richiesto dopo l'installazione.", ext_gallery_local_app_label: 'App locale', ext_gallery_required_suffix: '{0} richiesto', ext_gallery_sidecar_required: 'Sidecar richiesto', ext_gallery_native_host_required: 'Host nativo richiesto', ext_gallery_open_setup_guide: 'Apri guida di configurazione', ext_gallery_install_restart_required: 'Estensione installata. Riavvio richiesto per applicare le modifiche.', ext_gallery_install_followup: 'Estensione installata. Consulta la scheda per i prossimi passi.', ext_gallery_install_ok: 'Extension installed successfully.', ext_gallery_uninstall_ok: 'Extension uninstalled.', settings_plugins_title: 'Plugins', // TODO: translate plugins_enable_toggle: 'Abilita', settings_plugins_meta: 'View installed Hermes plugins and the lifecycle hooks they register. This panel is read-only.', // TODO: translate settings_plugins_empty: 'No Hermes plugins are currently visible. Install or enable plugins from the Hermes CLI/config to see them here.', // TODO: translate plugins_unnamed: 'Unnamed plugin', // TODO: translate plugins_no_description: 'No description provided.', // TODO: translate plugins_no_hooks: 'No registered lifecycle hooks', // TODO: translate plugins_registered_hooks: 'Registered hooks', // TODO: translate plugins_enabled: 'Enabled', // TODO: translate plugins_disabled: 'Disabled', // TODO: translate plugins_active_provider: 'Active (provider)', // TODO: translate plugins_provider_no_hooks: 'Provider plugin — no agent-visibility hooks', // TODO: translate plugins_load_failed: 'Failed to load plugins: ', // TODO: translate settings_tab_system: 'Sistema', settings_tab_help: 'Help', settings_help_meta: 'Resources and support for Hermes WebUI.', settings_help_docs_label: 'Documentation', settings_help_docs_desc: 'Guides, configuration reference, and the full Hermes WebUI README.', settings_help_docs_link: 'Open Documentation', settings_help_issue_label: 'Having an issue?', settings_help_issue_desc: 'Search existing reports or open a new one on GitHub.', settings_help_issue_link: 'Open GitHub Issues', settings_title: 'Impostazioni', settings_search_placeholder: 'Ricerca impostazioni…', settings_search_no_results: 'Nessuna impostazione trovata.', settings_save_btn: 'Salva Impostazioni', settings_label_model: 'Modello Predefinito', settings_desc_model: 'Usato per le nuove conversazioni. Le conversazioni esistenti mantengono il modello selezionato.', settings_main_advanced_button_aria: 'Advanced options for main model', settings_main_advanced_title: 'Main model options', settings_main_advanced_subtitle: 'Advanced config for the default chat model.', settings_main_advanced_saved: 'Main model options saved', settings_main_advanced_save_failed: 'Failed to save main model options', settings_main_advanced_service_tier: 'Service tier', settings_main_advanced_service_tier_desc: 'Optional request setting for OpenAI-family providers.', settings_main_advanced_service_tier_default: 'Default / off', settings_main_advanced_service_tier_priority: 'Priority (fast)', settings_label_auxiliary_models: 'Modelli Ausiliari', settings_desc_auxiliary_models: 'Routing per attività secondarie come visione, compressione, generazione titoli, ecc. "Auto" utilizza il modello chat principale.', settings_btn_reset_aux_models: 'Ripristina tutto ad auto', settings_btn_apply_aux_models: 'Applica modifiche', settings_aux_provider_auto: 'usa modello principale', settings_aux_model_auto: 'auto (usa predefinito del provider)', settings_aux_model_custom: 'Modello personalizzato…', settings_aux_model_custom_prompt: 'Inserisci ID modello:', settings_aux_loading: 'Caricamento modelli ausiliari…', settings_aux_load_failed: 'Impossibile caricare le impostazioni dei modelli ausiliari. Assicurati che l’API dell’agent sia disponibile.', settings_aux_reset_confirm_title: 'Ripristinare modelli ausiliari?', settings_aux_reset_confirm_msg: 'Questo imposterà tutte le attività ausiliarie ad auto (usa modello principale).', settings_aux_reset_done: 'Modelli ausiliari ripristinati ad auto', settings_aux_save_failed: 'Salvataggio del modello ausiliario non riuscito', settings_aux_saved: 'Modelli ausiliari aggiornati', settings_aux_no_changes: 'Nessuna modifica da applicare', settings_aux_task_vision: 'Vision', settings_aux_task_vision_desc: 'image/screenshot analysis', settings_aux_task_compression: 'Compression', settings_aux_task_compression_desc: 'context summarization', settings_aux_task_web_extract: 'Web extract', settings_aux_task_web_extract_desc: 'web page summarization', settings_aux_task_session_search: 'Session search', settings_aux_task_session_search_desc: 'past-conversation recall', settings_aux_task_approval: 'Approval', settings_aux_task_approval_desc: 'smart command approval', settings_aux_task_mcp: 'MCP', settings_aux_task_mcp_desc: 'MCP tool reasoning', settings_aux_task_title_generation: 'Title generation', settings_aux_task_title_generation_desc: 'session titles', settings_aux_task_skills_hub: 'Skills hub', settings_aux_task_skills_hub_desc: 'skills search/install', settings_aux_task_curator: 'Curator', settings_aux_task_curator_desc: 'skill-usage review pass', settings_aux_task_kanban_decomposer: 'Kanban decomposer', settings_aux_task_kanban_decomposer_desc: 'task decomposition', settings_aux_task_profile_describer: 'Profile describer', settings_aux_task_profile_describer_desc: 'profile summaries', settings_aux_task_triage_specifier: 'Triage specifier', settings_aux_task_triage_specifier_desc: 'issue/task triage specs', settings_aux_advanced_button_title: 'Advanced options', settings_aux_advanced_button_aria: 'Advanced options for {task}', settings_aux_advanced_title: '{task} options', settings_aux_advanced_subtitle: 'Advanced config for auxiliary.', settings_aux_advanced_save: 'Save options', settings_aux_advanced_base_url: 'Base URL', settings_aux_advanced_base_url_desc: 'Optional provider endpoint override.', settings_aux_advanced_timeout: 'Timeout seconds', settings_aux_advanced_timeout_desc: 'Request timeout for this auxiliary task. Blank uses Hermes default.', settings_aux_advanced_download_timeout: 'Download timeout seconds', settings_aux_advanced_download_timeout_desc: 'Only relevant for tasks that download media/content, e.g. vision. Blank uses default.', settings_aux_advanced_max_concurrency: 'Max concurrency', settings_aux_advanced_max_concurrency_desc: 'Optional per-task concurrency limit. Blank uses default.', settings_aux_advanced_extra_body: 'Extra body JSON', settings_aux_advanced_extra_body_desc: 'Optional JSON object merged into the model request body.', settings_aux_advanced_api_key: 'API key override', settings_aux_advanced_api_key_set_hint: 'API key is set. Leave blank to keep it, or use clear to remove it.', settings_aux_advanced_api_key_empty_hint: 'Leave blank to use provider/default credentials.', settings_aux_advanced_api_key_clear: 'Clear existing API key override', settings_aux_advanced_extra_body_invalid_json: 'Extra body must be valid JSON', settings_aux_advanced_extra_body_object_required: 'Extra body must be a JSON object', settings_aux_advanced_saved: 'Auxiliary options saved', settings_aux_advanced_save_failed: 'Failed to save auxiliary options', settings_label_send_key: 'Tasto Invio', settings_label_theme: 'Tema', settings_label_skin: 'Skin', settings_label_font_size: 'Dimensione font', font_size_small: 'Piccolo', font_size_default: 'Predefinito', font_size_large: 'Grande', font_size_xlarge: 'Molto grande', settings_autosave_saving: 'Salvataggio…', settings_autosave_saved: 'Salvato', settings_autosave_failed: 'Salvataggio fallito', settings_autosave_retry: 'Riprova', settings_label_language: 'Lingua', settings_label_quota_chip: 'Mostra il chip della quota del provider nel compositore', settings_desc_quota_chip: "Mostra un indicatore di quota residua (es. saldo crediti OpenRouter) nel piè di pagina del compositore. Predefinito disattivato. Visibile solo su schermi larghi (≥1400px) quando attivato, per mantenere il compositore non affollato su laptop e desktop standard.", settings_label_conversation_outline: 'Mostra struttura conversazione', settings_desc_conversation_outline: 'Mostra un elenco di salto solo desktop per le domande utente nella conversazione corrente. Disattivato per impostazione predefinita.', settings_label_hide_suggestions: 'Hide new-chat suggestions', settings_desc_hide_suggestions: 'Hide the three default suggestion buttons on the empty new-chat screen to avoid accidental taps.', settings_label_virtualize_transcript: 'Virtualize long transcripts', settings_desc_virtualize_transcript: "Render only the visible portion of very long chat transcripts (over 80 messages) for smoother scrolling. Turn this off if you see any rendering or scroll issues, or want the browser's Find (Ctrl+F) to match the whole conversation \u2014 the full transcript will render at once.", settings_label_token_usage: 'Mostra uso token', settings_label_token_speed: 'Mostra velocità token (TPS)', settings_desc_token_speed: 'Mostra i token al secondo nelle intestazioni dei messaggi dell\'assistente durante lo streaming e al completamento della risposta. Disattivato per impostazione predefinita.', settings_label_sidebar_density: 'Densità sidebar', cmd_reasoning: 'Mostra/nascondi ragionamento, imposta livello sforzo o controlla stato attuale', settings_label_external_sessions: 'Mostra sessioni non-WebUI', settings_label_claude_code_sessions: 'Show Claude Code sessions', settings_label_cron_sessions: 'Show cron sessions', settings_label_webhook_sessions: 'Show webhook sessions', settings_label_previous_messaging_sessions: 'Mostra sessioni di messaggistica precedenti', settings_label_sync_insights: 'Sincronizza con insights', settings_label_check_updates: 'Verifica aggiornamenti', settings_label_ignore_agent_updates: 'Ignore Agent updates', settings_label_whats_new_summary: "Summarize What's New with AI", settings_label_bot_name: 'Nome assistente predefinito', settings_label_password: 'Password di Accesso', settings_label_pinned_limit: 'Limite conversazioni fissate', settings_desc_pinned_limit: 'Numero massimo di conversazioni attive che possono essere fissate nella barra laterale. Predefinito 3.', settings_label_dashboard_mode: 'Dashboard ufficiale Hermes', settings_desc_dashboard_mode: 'Mostra un link nella nav-rail quando il dashboard ufficiale hermes è raggiungibile. Gli URL del reverse proxy pubblico sono memorizzati solo come link nel browser e non vengono mai verificati dal server.', settings_dashboard_mode_auto: 'Rilevamento automatico', settings_dashboard_mode_always: 'Mostra sempre', settings_dashboard_mode_never: 'Non mostrare mai', settings_dashboard_save: 'Salva impostazioni link dashboard', settings_label_gateway_status: 'Stato del Gateway', settings_desc_gateway_status: 'Stato del gateway Hermes (Telegram, Discord, Slack, ecc.)', gateway_not_configured: 'Gateway non configurato', gateway_metadata_stale: 'Metadati del gateway obsoleti', gateway_endpoint_unreachable: 'Endpoint del gateway non raggiungibile', gateway_not_running: 'Gateway non in esecuzione', gateway_running_label: 'In esecuzione', gateway_last_active: 'Ultima attività: ', gateway_session_count: (n) => `${n} ${n === 1 ? 'sessione' : 'sessioni'}`, gateway_load_failed: 'Impossibile caricare lo stato del gateway', settings_saved: 'Impostazioni salvate', settings_save_failed: 'Salvataggio fallito: ', settings_load_failed: 'Caricamento impostazioni fallito: ', settings_saved_pw: 'Impostazioni salvate — protezione password abilitata e questo browser rimane autenticato', settings_saved_pw_updated: 'Impostazioni salvate — password aggiornata', // login page (used server-side via /api/i18n/login endpoint) login_title: 'Accedi', login_subtitle: 'Inserisci la password per continuare', login_placeholder: 'Password', login_btn: 'Accedi', login_invalid_pw: 'Password non valida', login_conn_failed: 'Connessione fallita', dialog_confirm_title: 'Conferma azione', dialog_prompt_title: 'Inserisci un valore', dialog_confirm_btn: 'Conferma', discard: 'Scarta', clear: 'Pulisci', create: 'Crea', remove: 'Rimuovi', project_name_prompt: 'Nome progetto:', // Sidebar & Tabs tab_chat: 'Chat', tab_tasks: 'Task', tab_skills: 'Skill', tab_memory: 'Memoria', tab_workspaces: 'Spazi', tab_profiles: 'Profili', tab_kanban: 'Kanban', kanban_board: 'Bacheca', kanban_visible_tasks: '{0} task visibili', kanban_search_tasks: 'Cerca task', kanban_all_assignees: 'Tutti gli assegnatari', kanban_all_tenants: 'Tutti i tenant', kanban_include_archived: 'Includi archiviati', kanban_no_matching_tasks: 'Nessun task corrispondente', kanban_no_data: 'Nessun dato Kanban', kanban_work_queue_hint: 'Questa è la coda di lavoro di Hermes Agent. Crea o classifica un task, assegnalo, spostalo in Pronto, poi lascia che il dispatcher lo reclami.', kanban_tasks_hidden_by_filters: 'Tasks hidden by filters', kanban_clear_filters: 'Clear filters', kanban_unavailable: 'Kanban non disponibile', kanban_read_only: 'Vista sola lettura', kanban_empty: 'Vuoto', kanban_task: 'Task', kanban_no_description: 'Nessuna descrizione', kanban_refresh: 'Aggiorna', kanban_status_triage: 'Triage', kanban_status_todo: 'Da fare', kanban_status_ready: 'Pronto', kanban_status_running: 'In esecuzione', kanban_status_blocked: 'Bloccato', kanban_status_done: 'Completato', kanban_comments_count: 'Commenti ({0})', kanban_events_count: 'Eventi ({0})', kanban_links: 'Link', kanban_parents: 'Genitori', kanban_children: 'Figli', kanban_runs_count: 'Esecuzioni ({0})', kanban_no_comments: 'Nessun commento', kanban_no_events: 'Nessun evento', kanban_no_runs: 'Nessuna esecuzione', kanban_title: 'Titolo', kanban_description: 'Descrizione', kanban_description_placeholder: 'Opzionale — cosa deve succedere, criteri di accettazione, link', kanban_status: 'Stato', kanban_assignee: 'Assegnatario', kanban_assignee_placeholder: 'Opzionale — lascia vuoto per qualsiasi worker', kanban_tenant: 'Tenant', kanban_tenant_placeholder: 'Opzionale — slug progetto o team', kanban_priority: 'Priorità', kanban_priority_hint: 'I numeri più alti vengono eseguiti prima. Predefinito 0.', kanban_title_required: 'Il titolo è obbligatorio.', kanban_new_task: 'Nuovo task', kanban_view_lanes: 'Corsie per profilo', kanban_view_consolidated: 'Vista consolidata', kanban_view_lanes_saved: 'Vista Kanban: corsie per profilo', kanban_view_consolidated_saved: 'Vista Kanban: consolidata', kanban_view_update_failed: 'Impossibile aggiornare la vista Kanban: ', kanban_edit_task: 'Modifica task', kanban_status_original_hint: 'Stato effettivo: {0}. Questa finestra supporta solo modifiche Triage/Da fare/Pronto.', kanban_run_dispatcher: 'Avvia dispatcher', kanban_run_dispatcher_confirm: 'Questo reclamerà i task Pronti su questa bacheca e avvierà sottoprocessi worker (uno per task, fino a 8 per clic). Continuare?', kanban_assignee_profiles_label: 'Profili Hermes', kanban_assignee_other_label: 'Altro (canali CLI / profili rimossi)', kanban_assignee_unassigned: '— Non assegnato (non verrà eseguito automaticamente) —', kanban_ready_needs_assignee: 'Hai scelto Non assegnato + Pronto. Il dispatcher salterà questo task. Invia di nuovo per confermare, o scegli un profilo.', kanban_dispatch_preview_prefix: 'Anteprima:', kanban_dispatch_run_prefix: 'Smistato:', kanban_dispatch_spawned: 'avviato', kanban_dispatch_promoted: 'promosso', kanban_dispatch_reclaimed: 'reclamato', kanban_dispatch_skipped_unassigned: 'saltato (nessun assegnatario)', kanban_dispatch_skipped_nonspawnable: 'saltato (profilo sconosciuto)', kanban_dispatch_auto_blocked: 'auto-bloccato', kanban_dispatch_timed_out: 'scaduto', kanban_dispatch_crashed: 'crash', kanban_add_comment: 'Aggiungi commento', kanban_workspace_kind: 'Workspace kind', kanban_workspace_path: 'Workspace path', kanban_workspace_path_placeholder: 'Path to workspace', kanban_workspace_scratch: 'Scratch', kanban_workspace_worktree: 'Worktree', kanban_workspace_dir: 'Directory', kanban_workspace_path_required: 'Workspace path is required for non-scratch workspaces.', kanban_skills: 'Skills', kanban_skills_placeholder: 'Comma-separated skill names, e.g. python,git', kanban_max_runtime_seconds: 'Max runtime (seconds)', kanban_max_runtime_hint: 'Leave empty for unlimited.', kanban_max_runtime_invalid: 'Max runtime must be a whole number of seconds greater than 0.', kanban_parents_modal: 'Parent dependencies', kanban_parents_placeholder: 'Parent task ID', kanban_add_dependency: 'Add dependency', kanban_remove_dependency: 'Remove dependency', kanban_dependency_placeholder: 'Task ID to link', kanban_dependency_self: 'A task cannot depend on itself', kanban_only_mine: 'Solo miei', kanban_bulk_action: 'Azione in blocco', kanban_nudge_dispatcher: 'Anteprima dispatcher', kanban_stats: 'Statistiche', kanban_worker_log: 'Log worker', kanban_block: 'Blocca', kanban_unblock: 'Sblocca', kanban_back_to_board: 'Torna alla bacheca', kanban_lanes_by_profile: 'Corsie per profilo', kanban_new_board: 'Nuova bacheca…', kanban_rename_board: 'Rinomina bacheca attuale…', kanban_archive_board: 'Archivia bacheca attuale…', kanban_archive_board_confirm: 'Archiviare la bacheca "{name}"? I task rimangono su disco e la bacheca può essere ripristinata da kanban/boards/_archived/.', kanban_board_archived: 'Bacheca archiviata', kanban_board_name: 'Nome', kanban_board_slug: 'Slug (minuscole, trattini)', kanban_board_description: 'Descrizione (opzionale)', kanban_board_icon: 'Icona (emoji, opzionale)', kanban_board_color: 'Colore (opzionale)', kanban_board_name_required: 'Il nome è obbligatorio', kanban_board_slug_required: 'Lo slug è obbligatorio', kanban_card_complete: 'completato', kanban_card_archive: 'archivia', kanban_unassigned: 'non assegnato', kanban_status_archived: 'Archiviato', tab_todos: 'Todos', tab_insights: 'Insights', tab_dashboard: 'Dashboard Hermes', dashboard_loopback_warning: 'La dashboard è solo loopback sul server. Naviga dal server stesso o riavvialo con --host 0.0.0.0 (non sicuro).', tab_logs: 'Log', tab_settings: 'Impostazioni', close_menu: 'Close menu', // TODO: translate new_conversation: 'Nuova conversazione', filter_conversations: 'Filtra conversazioni...', markdown_table_filter: 'Filtra tabella', markdown_table_sort_column: 'Ordina colonna', session_time_unknown: 'Sconosciuto', session_time_minutes_ago: (n) => `${n}m`, session_time_hours_ago: (n) => `${n}h`, session_time_days_ago: (n) => `${n}g`, session_time_last_week: '1sett', session_time_bucket_today: 'Oggi', session_time_bucket_yesterday: 'Ieri', session_time_bucket_this_week: 'Questa settimana', session_time_bucket_last_week: 'Settimana scorsa', session_time_bucket_older: 'Precedenti', scheduled_jobs: 'Job pianificati', new_job: 'Nuovo job', loading: 'Caricamento...', search_skills: 'Cerca skill...', new_skill: 'Nuova skill', personal_memory: 'Memoria personale', current_task_list: 'Lista task corrente', // Logs logs_title: 'Log', logs_file: 'File', logs_tail: 'Coda', logs_auto_refresh: 'Aggiornamento automatico (5s)', logs_wrap: 'A capo automatico', logs_copy_all: 'Copia tutto', logs_empty: 'Nessuna riga di log.', logs_loading: 'Caricamento log…', logs_load_failed: 'Caricamento log fallito', logs_status_idle: 'Scegli un file di log per vedere le righe recenti.', logs_no_mtime: 'non ancora scritto', logs_truncated_hint: 'Visualizzazione della coda di un file di log grande; i byte precedenti sono stati saltati per contenere la memoria.', logs_copied: 'Log copiati', // Insights insights_title: 'Analitiche di Utilizzo', insights_sessions: 'Sessioni', insights_messages: 'Messaggi', insights_tokens: 'Token', insights_cost: 'Costo Stimato', insights_no_cost: 'N/D', insights_models: 'Modelli', insights_activity_by_day: 'Attività per Giorno', insights_activity_by_hour: 'Attività per Ora', insights_peak_hour: 'Picco: {hour}', insights_token_breakdown: 'Ripartizione Token', insights_input_tokens: 'Input', insights_output_tokens: 'Output', insights_total: 'Totale', insights_daily_tokens: 'Token Giornalieri', insights_model_name: 'Modello', insights_model_sessions: 'Sessioni', insights_model_tokens: 'Token', insights_model_cost: 'Costo', insights_model_cache: 'Cache', insights_cache_hit: 'Tasso di hit della cache prompt', insights_model_share: 'Quota', insights_model_health_title: 'Model health comparison', insights_model_health_provider: 'Provider', insights_model_health_replacement: 'Replacement guide', insights_model_health_cost_per_m: 'Cost / 1M', insights_no_usage_data: 'Nessun dato di utilizzo', insights_footer: 'Dati mostrati dagli ultimi {days} giorni', insights_skill_usage_title: 'Utilizzo Skill', insights_skill_usage_sub: 'Frequenza di invocazione strumenti', insights_skill_usage_total: 'Invocazioni totali', insights_skill_usage_skills_used: 'Skill usate', insights_skill_usage_no_data: 'Nessun dato di utilizzo skill ancora', insights_skill_usage_no_data_hint: 'Le skill appariranno qui dopo essere state usate nelle conversazioni.', insights_skill_usage_footer: 'Conteggi da ~/.hermes/skills/', insights_skill_usage_col_skill: 'Abilità', insights_skill_usage_col_uses: 'Usi', insights_skill_usage_col_views: 'Visualizzazioni', insights_skill_usage_col_share: 'Utilizzo %', insights_skill_usage_col_patches: 'Patch', workspace_desc: 'Aggiungi e cambia workspace per le tue sessioni.', session_meta_messages: (n) => `${n} msg`, session_meta_children: (n) => `${n} figli${n === 1 ? 'o' : ''}`, session_meta_segments: (n) => `${n} segment${n === 1 ? 'o' : 'i'}`, session_lineage_toggle_hint: '{0} — i turni di contesto precedenti sono compressi qui. Fai clic per mostrarli o nasconderli.', session_lineage_static_hint: '{0} — i turni di contesto precedenti sono compressi qui.', session_child_toggle_hint: '{0} — conversazioni figlie generate da questa sessione. Fai clic per mostrarle o nasconderle.', session_readonly_title_hint: 'Sessione importata in sola lettura — {0}', session_lineage_segment_untitled: 'Segmento senza titolo', session_lineage_segment_open: 'Apri segmento genealogia', new_profile: 'Nuovo profilo', transcript: 'Trascrizione', download_transcript: 'Scarica come Markdown', import: 'Importa', export_session_json: 'JSON', export_session_json_tooltip: 'Esporta sessione completa come JSON', export_session_html: 'HTML', export_session_html_tooltip: 'Esporta come pagina HTML autonoma', import_session_json_tooltip: 'Importa sessione da JSON', clear_conversation_btn_tooltip: 'Cancella tutti i messaggi in questa conversazione', // Settings detail settings_label_rtl: 'Layout chat da destra a sinistra', settings_desc_rtl: "Inverte l'allineamento dei messaggi e dell'input del compositore per lingue come arabo o ebraico. Influisce solo sull'area chat — la barra laterale e gli altri pannelli rimangono da sinistra a destra.", settings_label_sound: 'Suono notifica', settings_desc_sound: 'Riproduci un suono quando l\'assistente termina una risposta.', // TTS (#499) tts_listen: 'Ascolta', tts_not_supported: 'Sintesi vocale non supportata in questo browser.', settings_label_tts: 'Sintesi vocale per le risposte', settings_desc_tts: 'Mostra un pulsante altoparlante su ogni messaggio dell\'assistente per leggerlo ad alta voce usando la sintesi vocale del browser.', settings_label_tts_auto_read: 'Leggi automaticamente le risposte ad alta voce', settings_desc_tts_auto_read: 'Leggi automaticamente ogni nuova risposta dell\'assistente quando termina. In pausa quando inizi a scrivere.', // Composer voice-mode pref (#1488) settings_label_voice_mode: 'Pulsante modalità vocale a mani libere', settings_desc_voice_mode: 'Mostra il pulsante modalità vocale (forma d\'onda audio) accanto al microfono di dettatura. Ti permette di parlare naturalmente — Hermes invia automaticamente dopo una pausa e legge le risposte ad alta voce. Richiede un browser che supporti sia il riconoscimento vocale che la sintesi vocale.', settings_label_raw_audio: 'Invia l\'audio originale invece di trascriverlo', settings_desc_raw_audio: 'Registra e invia il file audio originale all\'agente invece di convertirlo prima in testo. L\'agente può trascriverlo o elaborare l\'audio grezzo (emozioni, rumore di fondo, STT personalizzato). Come il comportamento dei messaggi vocali di Telegram.', voice_send_raw: 'Invia audio originale', voice_raw_attached: 'Audio allegato. Premi Invia o aggiungi testo.', settings_label_tts_voice: 'Voce', settings_desc_tts_voice: 'Voce preferita. Popolata dalle voci disponibili nel browser.', settings_label_tts_rate: 'Velocità voce', settings_label_tts_pitch: 'Tono voce', settings_label_tts_engine: 'Motore TTS', settings_desc_tts_engine: 'Scegli il motore vocale. Edge TTS utilizza le voci neurali Microsoft tramite il server.', settings_label_notifications: 'Notifiche browser', settings_desc_notifications: 'Mostra una notifica di sistema quando una risposta termina mentre l\'app è in background.', notifications_enable_btn: 'Enable notifications', notifications_test_btn: 'Send test', notifications_permission_status: (status) => `Permission: ${status}`, notifications_enabled_toast: 'Notifications enabled.', notifications_denied: 'Notifications are blocked in this browser. Enable them in browser settings.', notifications_unsupported: 'Notifications are not supported in this browser.', settings_desc_token_usage: 'Mostra il conteggio token input/output sotto ogni risposta dell\'assistente. Attivabile anche con /usage.', settings_label_api_redact: 'Oscura dati sensibili nelle risposte API', settings_desc_api_redact: 'Gli utenti self-hosted possono disabilitare per trasparenza (sconsigliato per istanze condivise).', settings_sidebar_density_compact: 'Compatta', settings_sidebar_density_detailed: 'Dettagliata', settings_desc_sidebar_density: 'Controlla quanti metadati mostra la lista sessioni nella sidebar sinistra.', settings_label_auto_title_refresh: 'Aggiornamento adattivo titolo', settings_auto_title_refresh_off: 'Off', settings_auto_title_refresh_5: 'Ogni 5 scambi', settings_auto_title_refresh_10: 'Ogni 10 scambi', settings_auto_title_refresh_20: 'Ogni 20 scambi', settings_desc_auto_title_refresh: 'Rigenera automaticamente il titolo della sessione in base all\'ultimo scambio, mantenendolo pertinente mentre la conversazione evolve. Richiede un modello LLM per la generazione titoli.', settings_desc_external_sessions: 'Mostra conversazioni da CLI, Telegram, Discord, Slack e altri canali nella lista sessioni. Clicca per importare e continuare.', settings_desc_claude_code_sessions: 'Show Claude Code imported sessions in the sidebar, or hide them while leaving other external sessions visible.', settings_desc_cron_sessions: 'Surface cron job output as conversations in the sidebar. Only active when non-WebUI sessions are enabled. Defaults off; high-frequency jobs can flood the sidebar.', settings_desc_webhook_sessions: 'Surface webhook runs as conversations in the sidebar. Only active when non-WebUI sessions are enabled. Defaults off; high-volume routes can flood the sidebar.', settings_desc_previous_messaging_sessions: 'Mostra sessioni Discord, Telegram, Slack e Weixin più vecchie sostituite da reset o compressione.', settings_desc_sync_insights: 'Rispecchia l\'uso token WebUI su state.db così hermes /insights include i dati delle sessioni browser. Disattivato per impostazione predefinita.', settings_desc_check_updates: 'Mostra un banner quando sono disponibili versioni più recenti della WebUI o dell\'Agente. Esegue un git fetch in background periodicamente.', settings_desc_ignore_agent_updates: 'Keep WebUI update checks on, but hide Agent update notices and skip Agent update fetches.', settings_desc_whats_new_summary: "Changes the What's New action from opening the raw diff first to generating a short, human-readable summary. The regular diff comparison stays available after the summary.", settings_desc_bot_name: 'Usato solo per il profilo predefinito. Gli altri profili usano i propri nomi.', settings_desc_password: 'Inserisci una nuova password per impostarla o cambiarla. Lascia vuoto per mantenere l\'impostazione attuale.', password_placeholder: 'Inserisci nuova password…', password_env_var_locked: 'La variabile d\'ambiente HERMES_WEBUI_PASSWORD è attualmente impostata e ha la precedenza. Rimuovila e riavvia il server per gestire la password da qui.', password_env_var_locked_placeholder: 'Bloccato: variabile d\'ambiente HERMES_WEBUI_PASSWORD impostata', disable_auth: 'Disabilita Auth', sign_out: 'Esci', settings_label_shutdown: 'Arresta il server Hermes WebUI', settings_desc_shutdown_before_cmd: 'Arresta in modo controllato il server WebUI locale. Utile se hai avviato tramite ', settings_desc_shutdown_between_cmds: ' e vuoi fermarlo senza passare al terminale. Per rendere nuovamente raggiungibile la WebUI dovrai riavviare il server (', settings_desc_shutdown_after_cmd: ' o l\'app nativa).', settings_btn_shutdown: 'Arresta server', settings_shutdown_confirm_title: 'Arresta Hermes WebUI', settings_shutdown_confirm_message: 'Vuoi arrestare il server Hermes WebUI?', settings_shutdown_confirm_btn: 'Arresta', settings_shutdown_stopped_message: 'Server arrestato. Puoi chiudere questa scheda.', // Providers panel providers_tab_title: 'Provider', providers_section_title: 'Provider', providers_section_meta: 'Gestisci le chiavi API per i provider AI. Le modifiche hanno effetto immediato.', providers_status_configured: 'Chiave API configurata', providers_status_not_configured: 'Nessuna chiave API', providers_status_oauth: 'OAuth', providers_status_api_key: 'Chiave API', providers_status_model: 'Modello', providers_status_not_configured_label: 'Non configurato', providers_oauth_hint: 'Autenticato via OAuth. Nessuna chiave API necessaria.', providers_oauth_config_yaml_hint: 'Token configurato via config.yaml. Per aggiornare, modifica la sezione providers in config.yaml o esegui hermes auth.', providers_oauth_not_configured_hint: 'Non autenticato. Esegui hermes auth nel terminale per configurare questo provider.', providers_save: 'Salva', providers_refresh_models: 'Refresh models', providers_refreshing: 'Refreshing…', providers_models_refreshed: 'Models refreshed', providers_remove: 'Rimuovi', providers_saving: 'Salvataggio…', providers_removing: 'Rimozione…', providers_enter_key: 'Inserisci una chiave API', providers_empty: 'Nessun provider configurabile trovato.', providers_key_updated: 'Chiave API salvata', providers_key_removed: 'Chiave API rimossa', providers_key_placeholder_new: 'sk-...', providers_key_placeholder_replace: 'Inserisci nuova chiave da sostituire…', provider_quota_title: 'Quota del provider attivo', provider_quota_active_provider: 'Provider attivo', provider_quota_last_checked_after_refresh: 'Ultimo controllo dopo l’aggiornamento', provider_quota_last_checked: 'Ultimo controllo {0}', provider_quota_refresh_usage: 'Aggiorna utilizzo', provider_quota_refreshing: 'Aggiornamento...', provider_quota_refresh_title: 'Aggiorna ora i limiti di utilizzo del provider', provider_quota_refresh_succeeded: 'Utilizzo del provider aggiornato', provider_quota_refresh_failed: 'Aggiornamento dell’utilizzo del provider non riuscito', provider_quota_session_limit: 'Limite di 5 ore', provider_quota_weekly_limit: 'Limite settimanale', provider_quota_window_fallback: 'Finestra', provider_quota_metric_remaining: 'Rimanente', provider_quota_metric_used: 'Usato', provider_quota_metric_limit: 'Limite', provider_quota_status_available: 'disponibile', provider_quota_status_exhausted: 'esaurito', provider_quota_status_unavailable: 'non disponibile', provider_quota_status_failed: 'non riuscito', provider_quota_status_checked: 'controllato', provider_quota_status_no_key: 'nessuna chiave', provider_quota_status_invalid_key: 'chiave non valida', provider_quota_status_unsupported: 'non supportato', provider_quota_used_meta: '{0} usato', provider_quota_resets_meta: 'si reimposta {0}', provider_quota_credential_pool: 'Pool di credenziali', provider_quota_credential_label: 'Credenziale {0}', provider_quota_pool_plans: 'Piani: {0}', provider_quota_pool_no_windows: 'Nessuna finestra di limite account segnalata.', provider_quota_account_limits_loaded: 'Limiti account caricati.', provider_quota_unavailable: 'Stato quota non disponibile', provider_quota_retry_after: 'Riprova dopo {0}', provider_quota_pool_summary_available: '{0}/{1} disponibili', provider_quota_pool_summary_exhausted: '{0} esauriti', provider_quota_pool_summary_failed: '{0} non riusciti', provider_quota_pool_summary_checked: '{0} controllati', provider_cost_budget_label: 'Monthly budget', provider_cost_budget_placeholder: 'e.g. 50.00', provider_cost_budget_set: 'Set', provider_cost_budget_clear: 'Clear', provider_cost_budget_pct: '{0}% of ${1} budget (monthly pace)', provider_cost_budget_save_failed: 'Failed to save budget', cancel: 'Annulla', create_job: 'Crea job', save_skill: 'Salva skill', editing: 'Modifica in corso', // Empty state empty_title: 'Cosa posso fare per te?', empty_subtitle: 'Chiedi qualsiasi cosa, esegui comandi, esplora file o gestisci i tuoi task pianificati.', suggest_files: 'Quali file ci sono in questo workspace?', suggest_schedule: 'Cosa ho in programma oggi?', suggest_plan: 'Aiutami a pianificare un piccolo progetto.', // onboarding onboarding_badge: 'PRIMO AVVIO', onboarding_title: 'Benvenuto in Hermes Web UI', onboarding_lead: 'Una configurazione guidata rapida verificherà Hermes, salverà una configurazione provider reale, sceglierà un workspace e un modello e opzionalmente proteggerà l\'app con una password.', onboarding_back: 'Indietro', onboarding_continue: 'Continua', onboarding_skip: 'Salta configurazione', onboarding_skipped: 'Configurazione saltata — uso configurazione esistente.', onboarding_open: 'Apri Hermes', onboarding_step_system_title: 'Verifica sistema', onboarding_step_system_desc: 'Verifica Hermes Agent e visibilità configurazione.', onboarding_step_setup_title: 'Configurazione provider', onboarding_step_setup_desc: 'Salva la configurazione minima provider Hermes.', onboarding_step_workspace_title: 'Workspace + modello', onboarding_step_workspace_desc: 'Scegli le impostazioni predefinite per nuove sessioni e chat.', onboarding_step_password_title: 'Password opzionale', onboarding_step_password_desc: 'Proteggi la Web UI prima di condividerla.', onboarding_step_finish_title: 'Fine', onboarding_step_finish_desc: 'Rivedi e accedi all\'app.', onboarding_notice_system_ready: 'Hermes Agent sembra raggiungibile dalla Web UI.', onboarding_notice_system_unavailable: 'Hermes Agent non è ancora completamente disponibile. Bootstrap può installarlo, ma la configurazione provider potrebbe richiedere un terminale.', onboarding_check_agent: 'Hermes Agent', onboarding_check_agent_ready: 'Rilevato e importabile', onboarding_check_agent_missing: 'Mancante o parzialmente importabile', onboarding_check_password: 'Password', onboarding_check_password_enabled: 'Già abilitata', onboarding_check_password_disabled: 'Non ancora abilitata', onboarding_check_provider: 'Configurazione provider', onboarding_check_provider_ready: 'Pronto per chattare', onboarding_check_provider_partial: 'Salvata ma incompleta', onboarding_check_provider_pending: 'Necessita verifica', onboarding_config_file: 'File config:', onboarding_env_file: 'File .env:', onboarding_unknown: 'Sconosciuto', onboarding_current_provider: 'Configurazione attuale:', onboarding_missing_imports: 'Import mancanti:', onboarding_notice_setup_required: 'Scegli un percorso provider semplice qui. I flussi OAuth avanzati rimangono nella CLI di Hermes per ora.', onboarding_notice_setup_already_ready: 'Una configurazione provider Hermes funzionante è già stata rilevata. Puoi mantenerla o sostituirla qui.', onboarding_oauth_provider_ready_title: 'Provider già autenticato', onboarding_oauth_provider_ready_body: 'Questa istanza è configurata per usare un provider OAuth ({provider}) impostato tramite la CLI di Hermes. Nessuna chiave API necessaria — clicca Continua per finire.', onboarding_oauth_provider_not_ready_title: 'Provider OAuth non ancora autenticato', onboarding_oauth_provider_not_ready_body: 'Questa istanza è configurata per usare {provider}, che usa OAuth invece di una chiave API. Esegui hermes auth o hermes model in un terminale per autenticarti, poi ricarica la Web UI.', onboarding_oauth_switch_hint: 'Oppure scegli un provider diverso qui sotto per passare a una configurazione con chiave API:', oauth_login_codex: 'Accedi con Codex (ChatGPT)', oauth_codex_step1: 'Passo 1: Visita questo URL e inserisci il codice', oauth_codex_step2: 'Passo 2: Inserisci questo codice nella pagina', oauth_codex_polling: 'In attesa di autorizzazione...', oauth_codex_success: 'Accesso Codex OAuth riuscito!', oauth_codex_error: 'Accesso OAuth fallito', oauth_codex_expired: 'Codice scaduto, riprova', onboarding_notice_workspace: 'Questi valori usano le stesse API di impostazioni dell\'app normale.', onboarding_workspace_label: 'Workspace', onboarding_workspace_or_path: 'Oppure inserisci un percorso workspace', onboarding_workspace_placeholder: '/home/tu/workspace', onboarding_provider_label: 'Modalità configurazione', onboarding_quick_setup_badge: 'configurazione rapida', provider_category_easy_start: 'Avvio facile', provider_category_self_hosted: 'Open / self-hosted', provider_category_specialized: 'Specializzato', onboarding_api_key_label: 'Chiave API', onboarding_api_key_placeholder: 'Lascia vuoto per mantenere una chiave salvata esistente', onboarding_api_key_label_optional: 'Chiave API (opzionale)', onboarding_api_key_placeholder_optional: 'Lascia vuoto per server senza chiave', onboarding_api_key_help_keyless: 'La maggior parte delle installazioni LM Studio / Ollama / vLLM funzionano senza chiave — lascia vuoto se il tuo server non richiede autenticazione. Usa il pulsante Test connessione per verificare.', onboarding_api_key_help_prefix: 'Salvato come segreto nel tuo file .env di Hermes usando', onboarding_base_url_label: 'URL Base', onboarding_base_url_placeholder: 'https://tuo-endpoint.example/v1', onboarding_base_url_help: 'Usa questo per router compatibili OpenAI, server self-hosted, LiteLLM, Ollama, LM Studio, vLLM o endpoint simili.', onboarding_model_label: 'Modello predefinito', onboarding_workspace_help: 'Scegli il modello che Hermes userà per le nuove chat dopo la configurazione.', onboarding_custom_model_placeholder: 'nome-tuo-modello', onboarding_custom_model_help: 'Per endpoint personalizzati, inserisci l\'ID esatto del modello che il tuo server si aspetta.', onboarding_notice_password_enabled: 'Una password è già configurata. Inseriscine una nuova solo se vuoi sostituirla.', onboarding_notice_password_recommended: 'Opzionale ma consigliato se esporrai l\'interfaccia oltre localhost.', onboarding_password_label: 'Password (opzionale)', onboarding_password_placeholder: 'Lascia vuoto per saltare', onboarding_password_help: 'Le password sono salvate tramite le API impostazioni esistenti e hashate lato server.', onboarding_notice_finish: 'Puoi riaprire le Impostazioni più tardi per modificare tutto questo.', onboarding_not_set: 'Non impostato', onboarding_password_will_enable: 'Sarà abilitata', onboarding_password_will_replace: 'Sarà sostituita', onboarding_password_keep_existing: 'Mantieni password attuale', onboarding_password_remains_disabled: 'Rimarrà disabilitata', onboarding_password_skipped: 'Saltata per ora', onboarding_finish_help: 'Completare salva onboarding_completed nelle impostazioni e ti porta nell\'app normale.', onboarding_error_choose_workspace: 'Scegli un workspace prima di continuare.', onboarding_error_choose_model: 'Scegli un modello prima di continuare.', onboarding_error_provider_required: 'Scegli una modalità di configurazione prima di continuare.', onboarding_error_base_url_required: 'L\'URL Base è obbligatorio per endpoint personalizzati.', onboarding_probe_test_button: 'Test connessione', onboarding_probe_probing: 'Test connessione in corso…', onboarding_probe_ok: 'Connesso. {n} modello/i disponibile/i.', onboarding_probe_error_generic: 'Impossibile raggiungere l\'URL base configurato.', onboarding_probe_error_invalid_url: 'L\'URL base deve iniziare con http:// o https://.', onboarding_probe_error_dns: 'Impossibile risolvere l\'host. Controlla l\'URL o usa l\'indirizzo IP dell\'host.', onboarding_probe_error_connect_refused: 'Connessione rifiutata — il server potrebbe non essere in esecuzione su quell\'indirizzo. Da dentro Docker, prova l\'IP host invece di localhost.', onboarding_probe_error_timeout: 'L\'endpoint non ha risposto in tempo. Verifica che il server sia in esecuzione e che l\'URL sia corretto.', onboarding_probe_error_http_4xx: 'L\'endpoint ha restituito un errore client. Controlla l\'autenticazione e il percorso URL (tipicamente termina in /v1).', onboarding_probe_error_http_5xx: 'L\'endpoint ha restituito un errore server. Controlla i log del server LM Studio / Ollama.', onboarding_probe_error_parse: 'L\'endpoint non ha restituito una lista modelli nel formato atteso. Verifica che l\'URL punti alla root API compatibile OpenAI.', onboarding_probe_error_unreachable: 'Impossibile raggiungere l\'URL base configurato.', onboarding_error_probe_failed: 'Impossibile validare l\'URL base configurato.', onboarding_error_workspace_required: 'Il workspace è obbligatorio.', onboarding_error_model_required: 'Il modello è obbligatorio.', onboarding_complete: 'Configurazione completata', // panel/runtime i18n error_prefix: 'Errore: ', default: 'default', search: 'Search', not_available: 'N/D', never: 'mai', add: 'Aggiungi', add_failed: 'Aggiunta fallita: ', remove_failed: 'Rimozione fallita: ', switch_failed: 'Cambio fallito: ', name_required: 'Il nome è obbligatorio', content_required: 'Il contenuto è obbligatorio', view: 'Visualizza', dismiss: 'Ignora', disable: 'Disabilita', cron_no_jobs: 'Nessun job pianificato trovato.', cron_status_off: 'spento', cron_status_paused: 'in pausa', cron_status_error: 'errore', cron_status_active: 'attivo', cron_status_running: 'in esecuzione\u2026', cron_status_needs_attention: 'richiede attenzione', cron_attention_desc: 'Questo job ricorrente non ha una prossima esecuzione. Lo scheduler potrebbe non essere riuscito a calcolare la prossima esecuzione.', cron_attention_croniter_hint: 'Il runtime Gateway potrebbe non avere il pacchetto croniter. Riavvia il Gateway con supporto cron, poi riprendi questo job.', cron_attention_resume: 'Riprendi e ricalcola', cron_jobs_project: 'Job Pianificati', cron_attention_run_once: 'Esegui una volta ora', cron_attention_copy_diagnostics: 'Copia diagnostica', cron_diagnostics_copied: 'Diagnostica copiata', cron_next: 'Prossimo', cron_last: 'Ultimo', cron_run_now: 'Esegui ora', cron_pause: 'Pausa', cron_resume: 'Riprendi', cron_job_name_placeholder: 'Nome job', cron_schedule_placeholder: 'Pianificazione', cron_prompt_placeholder: 'Prompt', cron_last_output: 'Ultimo output', cron_expand_prompt: 'Espandi prompt', cron_collapse_prompt: 'Comprimi prompt', cron_expand_output: 'Espandi output', cron_collapse_output: 'Comprimi output', cron_mode_agent: 'Agente', cron_mode_script: 'Script', cron_mode_label: 'Modalità', cron_script_job_banner: 'Esegue uno script a intervalli — stdout viene consegnato alla destinazione. Nessun agente, prompt o skill.', cron_script_card_title: 'Script', cron_script_output: 'Output script', cron_script_path_label: 'Percorso script', cron_script_path_hint: 'Risolto sotto ~/.hermes/scripts/ salvo percorso assoluto. Modifica lo script sul server per cambiare il comportamento.', cron_script_badge_title: 'Job script (senza agente)', cron_workdir_label: 'Directory di lavoro', cron_view_full_output: 'View full output', cron_all_runs: 'Tutte le esecuzioni', cron_hide_runs: 'Nascondi esecuzioni', cron_no_runs_yet: '(nessuna esecuzione)', cron_schedule_required_example: 'La pianificazione è obbligatoria (es. "0 9 * * *" o "every 1h")', cron_schedule_required: 'La pianificazione è obbligatoria', cron_prompt_required: 'Il prompt è obbligatorio', cron_job_created: 'Job creato', cron_duplicate: 'Duplica', cron_duplicated: 'Job duplicato (in pausa)', cron_job_triggered: 'Job avviato', cron_job_paused: 'Job in pausa', cron_job_resumed: 'Job ripreso', cron_job_updated: 'Job aggiornato', cron_model_label: 'Override del modello', cron_model_hint: 'Sostituisce il modello predefinito per questo processo.', cron_model_no_agent_hint: 'No-agent jobs run the configured script directly; model is unused.', cron_model_use_default: 'Predefinito (usa il profilo/sistema predefinito)', cron_delete_confirm_title: 'Elimina job pianificato', cron_delete_confirm_message: 'Questa azione non può essere annullata.', cron_job_deleted: 'Job eliminato', cron_completion_status: (name, status) => `Cron "${name}" ${status}`, status_failed: 'fallito', status_completed: 'completato', todos_no_active: 'Nessuna lista task attiva in questa sessione.', clear_conversation_title: 'Cancella conversazione', clear_conversation_message: 'Cancellare tutti i messaggi? Questa azione non può essere annullata.', clear_failed: 'Cancellazione fallita: ', skills_no_match: 'Nessuna skill corrispondente.', skill_enabled: 'Abilitato', skill_disabled: 'Disabilitato', skill_toggle_failed: 'Errore nell\'attivare la skill: ', linked_files: 'File Collegati', skill_load_failed: 'Impossibile caricare la skill: ', skill_file_load_failed: 'Impossibile caricare il file: ', skill_name_required: 'Il nome della skill è obbligatorio', skill_updated: 'Skill aggiornata', skill_created: 'Skill creata', skill_deleted: 'Skill eliminata', skill_delete_confirm: 'Eliminare la skill "{0}"?', skills_empty_title: 'Seleziona una skill', skills_empty_sub: 'Scegli una skill dalla sidebar per vederne i contenuti, o creane una nuova.', skills_edit: 'Modifica', skills_delete: 'Elimina', skills_back_to: 'Torna a {0}', tasks_empty_title: 'Seleziona un job pianificato', tasks_empty_sub: 'Scegli un job dalla sidebar per vederne dettagli ed esecuzioni, o creane uno nuovo.', workspaces_empty_title: 'Seleziona uno spazio', workspaces_empty_sub: 'Scegli uno spazio dalla sidebar per vederne file e impostazioni, o aggiungine uno nuovo.', profiles_empty_title: 'Seleziona un profilo', profiles_empty_sub: 'Scegli un profilo agente dalla sidebar per vedere e modificare le sue impostazioni, o creane uno nuovo.', memory_notes_label: 'memoria (note)', memory_saved: 'Memoria salvata', my_notes: 'Le Mie Note', user_profile: 'Profilo Utente', external_notes_sources: 'Note di terze parti', external_notes_empty: 'Nessuna fonte MCP di note o conoscenza è ancora visibile. Configura Joplin, Obsidian, Notion, llm-wiki o un altro server di note per mostrarlo qui.', external_notes_auto_recall_hint: 'Il richiamo automatico della sessione non cambia; questo pannello mostra solo fonti configurate e strumenti di lettura/ricerca disponibili.', external_notes_no_tools: 'Nessuno strumento di lettura/ricerca è attualmente visibile per questa fonte.', external_notes_tool_count: (count) => `${count} strument${Number(count)===1?'o':'i'} per note disponibile${Number(count)===1?'':'i'}`, external_notes_configured_hint: 'I nomi degli strumenti sono attesi da questa fonte configurata; gli schemi live appariranno quando il runtime WebUI li esporrà.', external_notes_recent_ai: 'Usate di recente dall’AI', external_notes_auto: 'auto', external_notes_recent_ai_reason: 'Richiamo automatico', external_notes_search_placeholder: 'Cerca note…', external_notes_search_empty: 'Cerca in una fonte di note configurata per visualizzare anteprime qui.', source_active: 'active', source_configured: 'configured', no_notes_yet: 'Ancora nessuna nota.', no_profile_yet: 'Ancora nessun profilo.', agent_soul: 'Anima dell\'Agente', no_soul_yet: 'Nessuna anima definita.', workspace_choose_path: 'Scegli percorso workspace', workspace_choose_path_meta: 'Aggiungi un percorso validato e cambia questa conversazione', workspace_manage: 'Gestisci workspace', workspace_manage_meta: 'Apri il pannello Spazi', workspace_use_title: 'Usa nella sessione corrente', workspace_use: 'Usa', workspace_add_path_placeholder: 'Aggiungi percorso workspace (es. /home/utente/mio-progetto)', workspace_paths_validated_hint: 'I percorsi sono validati come directory esistenti prima del salvataggio.', workspace_drag_hint: 'Trascina per riordinare', workspace_reorder_failed: 'Riordino fallito', workspace_added: 'Workspace aggiunto', workspace_renamed: 'Workspace rinominato', workspace_remove_confirm_title: 'Rimuovi workspace', workspace_remove_confirm_message: (path) => `Rimuovere "${path}"?`, workspace_removed: 'Workspace rimosso', workspace_switch_prompt_title: 'Cambia workspace', workspace_switch_prompt_message: 'Inserisci un percorso workspace assoluto da aggiungere e a cui passare questa conversazione.', workspace_switch_prompt_confirm: 'Cambia', workspace_switch_prompt_placeholder: '/Users/tu/progetto', workspace_not_added: 'Workspace non aggiunto', workspace_already_saved: 'Workspace già salvato — sceglilo dalla lista', workspace_busy_switch: 'Impossibile cambiare workspace mentre l\'agente è in esecuzione', discard_file_edits_title: 'Scartare le modifiche ai file?', discard_file_edits_message: 'Cambiare workspace scarterà le modifiche non salvate nell\'anteprima.', workspace_switched_to: (name) => `Passato a ${name}`, profiles_no_profiles: 'Nessun profilo trovato.', profile_api_keys_configured: 'Chiavi API configurate', profile_gateway_running: 'Gateway in esecuzione', profile_gateway_stopped: 'Gateway fermo', profile_active: 'ATTIVO', profile_no_configuration: 'Nessuna configurazione', profile_skill_count: (count) => `${count} skill`, profile_use: 'Usa', profile_switch_title: 'Passa a questo profilo', profile_delete_title: 'Elimina questo profilo', profile_default_label: '(predefinito)', profile_name_placeholder: 'Nome profilo (minuscole, a-z 0-9 trattini)', profile_clone_label: 'Clona config dal profilo attivo', profile_model_label: 'Modello / provider', profile_model_hint: 'Scegli tra provider e modelli configurati per questo nuovo profilo.', profile_model_use_default: 'Usa il default del profilo attivo', profile_base_url_placeholder: 'Base URL (opzionale, es. http://localhost:11434)', profile_api_key_placeholder: 'Chiave API (opzionale)', manage_profiles: 'Gestisci profili', profiles_load_failed: 'Caricamento profili fallito', profile_switched_new_conversation: (name) => `Passato al profilo: ${name} — nuova conversazione avviata`, profile_switched: (name) => `Passato al profilo: ${name}`, profile_name_rule: 'Solo lettere minuscole, numeri, trattini, underscore', profile_base_url_rule: 'L\'URL Base deve iniziare con http:// o https://', profile_created: (name) => `Profilo creato: ${name}`, profile_delete_confirm_title: (name) => `Eliminare il profilo "${name}"?`, profile_delete_confirm_message: 'Tutte le sessioni, configurazioni, skill e memoria per questo profilo saranno eliminate permanentemente. Questa azione non può essere annullata.', profile_deleted: (name) => `Profilo eliminato: ${name}`, active_conversation_none: 'Nessuna conversazione attiva selezionata.', active_conversation_meta: (title, count) => `${title} · ${count} messaggi${count === 1 ? 'o' : ''}`, settings_unsaved_changes: 'Hai modifiche non salvate.', sign_out_failed: 'Disconnessione fallita: ', disable_auth_confirm_title: 'Disabilita protezione password', disable_auth_confirm_message: 'Chiunque potrà accedere a questa istanza.', auth_disabled: 'Auth disabilitata — protezione password rimossa', disable_auth_failed: 'Disabilitazione auth fallita: ', current_password_label: 'Password attuale', current_password_placeholder: 'Inserisci password attuale…', current_password_required: 'La password attuale è necessaria per modificare o disabilitare l\'autenticazione.', current_password_incorrect: 'Password attuale non corretta.', disable_auth_typed_confirm: 'Digita DISABLE AUTH per confermare', auth_status_password: 'Autenticazione password', auth_status_passkey_only: 'Solo passkey', auth_status_unauthenticated: 'Non autenticato', auth_warning_badge: 'Auth disabilitata', auth_disabled_warning_message: 'Questa istanza è accessibile senza autenticazione.', auth_acknowledged_label: 'Ho esaminato questo rischio; mostra un avviso di navigazione meno urgente.', auth_ack_save_failed: 'Aggiornamento del riconoscimento non riuscito: ', bg_error_single: (title) => `"${title}" ha incontrato un errore`, bg_error_multi: (count) => `${count} sessioni hanno incontrato un errore`, // skill form skill_name: 'Nome', skill_category: 'Categoria', skill_category_placeholder: 'Opzionale, es. devops', skill_content: 'Contenuto SKILL.md', skill_content_placeholder: 'Frontmatter YAML + corpo markdown', skill_rename_not_supported: 'Rinominare una skill non è supportato. Crea una nuova skill ed elimina la vecchia per rinominare.', skill_metadata: 'Metadati', // cron form cron_name_label: 'Nome', cron_name_placeholder: 'Opzionale', cron_schedule_label: 'Pianificazione', cron_schedule_preset_label: 'Preimpostazione', cron_schedule_preset_hourly: 'Ogni ora', cron_schedule_preset_daily: 'Ogni giorno', cron_schedule_preset_weekdays: 'Giorni feriali', cron_schedule_preset_weekly: 'Ogni settimana', cron_schedule_preset_monthly: 'Ogni mese', cron_schedule_preset_custom: 'Personalizzato', cron_schedule_hint: 'Usa \'every 1h\' o un\'espressione cron per job ricorrenti. Durate semplici come \'30m\' vengono eseguite una volta sola.', cron_schedule_once_warning: 'Forme di durata come \'30m\' vengono eseguite una volta e rimosse dopo l\'esecuzione. Usa \'every 30m\' per mantenere un job ricorrente.', cron_prompt_label: 'Prompt', cron_deliver_label: 'Recapita output a', cron_deliver_local: 'Locale (solo salva output)', cron_deliver_custom: 'Destinazione personalizzata', cron_profile_label: 'Profilo', cron_profile_server_default: 'predefinito server', cron_profile_server_default_hint: 'Usa il profilo predefinito del server WebUI a runtime. I job esistenti senza profilo mantengono questo comportamento legacy.', cron_toast_notifications_label: 'Notifiche di completamento', cron_toast_notifications_hint: 'Mostra un avviso al termine di questo cron. Il badge Task e il segnalibro nuovo-run continuano ad aggiornarsi anche con questa opzione disattivata.', cron_toast_notifications_enabled: 'Abilitato', cron_toast_notifications_disabled: 'Disabilitato', cron_skills_label: 'Skill', cron_skills_placeholder: 'Aggiungi skill (opzionale)…', cron_skills_edit_hint: 'La lista skill non è modificabile dopo la creazione.', // workspace form workspace_name_label: 'Nome', workspace_name_placeholder: 'Nome descrittivo opzionale', workspace_path_label: 'Percorso', workspace_path_required: 'Il percorso è obbligatorio', workspace_path_readonly: 'Il percorso non può essere cambiato. Solo rinomina.', workspace_new_title: 'Nuovo spazio', // profile form profile_name_label: 'Nome', profile_base_url_label: 'URL Base', profile_api_key_label: 'Chiave API', cmd_yolo: 'Attiva/disattiva modalità YOLO (salta approvazioni)', yolo_no_session: 'Nessuna sessione attiva', yolo_enabled: '⚡ Modalità YOLO ON — approvazioni saltate questa sessione', yolo_disabled: 'Modalità YOLO OFF', yolo_pill_label: 'YOLO', yolo_pill_title_active: 'Modalità YOLO attiva — clicca per disabilitare', approval_skip_all: '⚡ Salta tutto questa sessione', approval_skip_all_title: 'Salta tutte le richieste di approvazione per questa sessione', // composer action tooltips composer_send: 'Invia messaggio', composer_queue: 'Accoda messaggio', composer_interrupt: 'Interrompi e invia', composer_steer: 'Correggi risposta in corso', composer_stop: 'Ferma generazione', composer_disabled_clarify: 'Rispondi alla richiesta di chiarimento', composer_disabled_compression: 'In attesa del completamento della compressione', composer_compression_will_queue: 'Type a message — it will queue and send after compression', composer_disabled_empty: 'Scrivi un messaggio da inviare', composer_mobile_workspace: 'Workspace', composer_mobile_model: 'Modello', composer_mobile_quota: 'Quota', composer_mobile_reasoning: 'Ragionamento', composer_mobile_context: 'Contesto', media_audio_label: 'Audio', media_svg_label: 'Diagramma', media_video_label: 'Video', media_download: 'Scarica', csv_loading: 'Caricamento CSV', csv_too_large: 'File CSV troppo grande per il rendering inline', csv_no_data: 'Il file CSV ha dati insufficienti per il rendering come tabella', csv_error: 'Caricamento file CSV fallito', csv_header_note: 'Prima riga mostrata come intestazione tabella', excalidraw_loading: 'Caricamento diagramma', excalidraw_too_large: 'File Excalidraw troppo grande per il rendering inline', excalidraw_invalid: 'Formato file Excalidraw non valido', excalidraw_error: 'Caricamento file Excalidraw fallito', excalidraw_label: 'Diagramma', excalidraw_download: 'Scarica', excalidraw_empty: 'Diagramma vuoto', excalidraw_render_error: 'Rendering diagramma fallito', excalidraw_simplified: 'Anteprima SVG semplificata — non identica al canvas Excalidraw', // ── Checkpoints / Rollback ── checkpoint_title: 'Checkpoint', checkpoint_empty: 'Nessun checkpoint trovato per questo workspace.', checkpoint_loading: 'Caricamento checkpoint…', checkpoint_error: 'Caricamento checkpoint fallito', checkpoint_date: 'Data', checkpoint_message: 'Messaggio', checkpoint_files: 'File', checkpoint_view_diff: 'Vedi diff', checkpoint_restore: 'Ripristina', checkpoint_restore_confirm_title: 'Ripristinare checkpoint?', checkpoint_restore_confirm_message: (ckpt) => `Ripristinare il workspace al checkpoint "${ckpt}"? Questo sovrascriverà i file con le versioni salvate. I file aggiunti dopo questo checkpoint non saranno eliminati.`, checkpoint_restored: 'Checkpoint ripristinato', checkpoint_diff_title: 'Modifiche nel checkpoint', checkpoint_diff_no_changes: 'Nessuna differenza trovata tra questo checkpoint e il workspace attuale.', checkpoint_diff_files_changed: (n) => `${n} file modificat${n === 1 ? 'o' : 'i'}`, outline_title: 'Struttura', outline_empty: 'Nessuna domanda ancora.', outline_loading: 'Caricamento…', wiki_browse: 'Browse wiki', wiki_search_placeholder: 'Search pages...', wiki_no_pages: 'No wiki pages found', wiki_not_configured: 'Wiki not configured', }, ja: { offline_title: '接続が切断されました', offline_browser_detail: 'ブラウザはこのデバイスがオフラインだと報告しています。', offline_network_detail: '現在、このブラウザからHermesに到達できません。', offline_autorefresh: 'Hermesに再接続できたら、このページを自動的に更新します。', offline_check_now: '今すぐ確認', offline_checking: '確認中…', offline_stream_waiting: '接続が切断されました。更新を待っています…', _lang: 'ja', _label: '日本語', _speech: 'ja-JP', // boot.js cancelling: 'キャンセル中…', cancel_failed: 'キャンセル失敗: ', mic_denied: 'マイクへのアクセスが拒否されました。ブラウザの権限を確認してください。', mic_insecure_origin: 'Voice input needs a secure connection. Open Hermes over HTTPS or from localhost to use the microphone.', // TODO: translate mic_no_speech: '音声が検出されませんでした。もう一度お試しください。', mic_network: '音声認識を利用できません。', mic_error: '音声入力エラー: ', // Turn-based voice mode (#1333) // Composer voice buttons (#1488) voice_dictate: 'ディクテーション', voice_dictate_active: 'ディクテーション停止', voice_recording_active: '録音を停止', voice_mode_toggle: '音声モード', voice_mode_toggle_active: '音声モードを終了', voice_listening: '聞き取り中…', voice_speaking: '発話中…', voice_thinking: '考え中…', voice_error: 'このブラウザでは音声入力に対応していません', voice_mode_active: '音声モード ON', voice_mode_off: '音声モード OFF', session_imported: 'セッションをインポートしました', import_failed: 'インポート失敗: ', import_invalid_json: '無効な JSON', image_pasted: '画像を貼り付けました: ', text_pasted: '貼り付けたテキストを添付しました: ', // messages.js edit_message: 'メッセージを編集', regenerate: '応答を再生成', copy: 'コピー', copied: 'コピーしました!', copy_failed: 'コピー失敗', selected_text_reply: '選択範囲で返信', selected_text_reply_title: '選択したチャットテキストを引用コンテキストとして追加', selected_text_reply_appended: '選択したテキストを入力欄に追加しました', saved_prompts_empty: '保存済みプロンプトはありません。', saved_prompts_save_current: '現在の入力をプロンプトとして保存', saved_prompts_saved: 'プロンプトを保存しました', saved_prompts_delete: 'プロンプトを削除', saved_prompts_empty_input: '保存するプロンプトを先に入力してください', context_block_name_default: 'コンテキスト', context_block_flush_aria: '送信時にコンテキストブロックが含まれます', context_block_rename_hint: 'クリックまたは Enter で名前を変更', context_block_rename_aria: 'コンテキストブロック名を変更', context_block_remove: 'コンテキストブロックを削除', diff_loading: '差分を読み込み中', diff_error: 'パッチファイルを読み込めませんでした', diff_too_large: 'パッチファイルが大きすぎてインライン表示できません', tree_view: 'ツリー', raw_view: '生データ', parse_failed_note: '解析失敗', you: 'あなた', mcp_servers_title: 'MCPサーバー', mcp_servers_desc: 'config.yaml で設定された MCP サーバーを管理します。', mcp_no_servers: 'MCPサーバーは設定されていません。', mcp_add_server: '+ サーバーを追加', mcp_field_name: 'サーバー名', mcp_transport_label: 'トランスポート種別', mcp_field_command: 'コマンド', mcp_field_args: '引数 (カンマ区切り)', mcp_field_url: 'URL', mcp_field_timeout: 'タイムアウト (秒)', mcp_save: '保存', mcp_cancel: 'キャンセル', mcp_name_required: 'サーバー名は必須です。', mcp_url_required: 'HTTP トランスポートには URL が必要です。', mcp_command_required: 'stdio トランスポートにはコマンドが必要です。', mcp_saved: 'MCPサーバーを保存しました。', mcp_save_failed: 'MCPサーバーの保存に失敗しました。', mcp_delete_confirm_title: 'MCPサーバーを削除', mcp_delete_confirm_message: 'MCPサーバー "{0}" を削除しますか? この操作は取り消せません。', mcp_deleted: 'MCPサーバーを削除しました。', mcp_delete_failed: 'MCPサーバーの削除に失敗しました。', mcp_load_failed: 'MCPサーバーの読み込みに失敗しました。', mcp_restart_hint: 'ここでのサーバー変更は現状読み取り専用です。反映するには config.yaml を編集して Hermes を再起動してください。', mcp_toggle_followup: '有効/無効の切り替えは、MCP のリロード仕様が明確になるまで意図的に保留しています。', mcp_status_active: 'アクティブ', mcp_status_configured: '設定済み', mcp_status_disabled: '無効', mcp_status_invalid_config: '不正な設定', mcp_status_unknown: '不明', mcp_tool_count: '{0} 個のツール', mcp_enabled_yes: '有効', mcp_enabled_no: '無効', mcp_enable_server: 'このMCPサーバーを有効化', mcp_disable_server: 'このMCPサーバーを無効化', mcp_enabled_toast: (name) => `MCPサーバー「${name}」を有効化しました。`, mcp_disabled_toast: (name) => `MCPサーバー「${name}」を無効化しました。`, mcp_toggle_failed: 'MCPサーバーの更新に失敗しました。', mcp_tools_title: 'MCP ツール', mcp_tools_desc: 'アクティブな MCP サーバー全体から既知のツールを検索します。', mcp_tools_search_placeholder: '名前、サーバー、説明でツールを検索…', mcp_tools_no_tools: 'アクティブなランタイムに利用可能な MCP ツールがありません。', mcp_tools_no_matches: '一致する MCP ツールはありません。', mcp_tools_load_failed: 'MCP ツールの読み込みに失敗しました。', mcp_tools_schema_empty: 'スキーマパラメータはありません。', mcp_tools_runtime_note: 'ツール一覧は既知の MCP ランタイム情報のみを使用します。WebUI はサーバーの起動や探索を行いません。', mcp_tools_summary_no_matches: (query,total) => `「${query}」に一致するMCPツールはありません(全${total}個)。`, mcp_tools_summary_none: '表示するMCPツールはありません。', mcp_tools_summary_matching: (query) => ` 「${query}」に一致`, mcp_tools_summary_total_note: (total) => ` (全${total}個のMCPツール)`, mcp_tools_summary_showing: (start,end,filtered,searchNote,totalNote,page,pages) => `${filtered}個のMCPツール${searchNote}${totalNote}のうち${start}〜${end}件を表示。${page}/${pages}ページ。`, mcp_tools_page_size_prefix: '表示件数:', mcp_tools_page_size_suffix: '件/ページ', mcp_tools_per_page_aria: '1ページあたりのMCPツール数', mcp_tools_inactive_configured_servers: (servers) => `このWebUIランタイムで設定済みだが非アクティブ: ${servers}。`, mcp_tools_pagination_label: 'MCPツールのページ送り', mcp_tools_previous_page: '‹ 前へ', mcp_tools_previous_page_aria: '前のMCPツールページ', mcp_tools_next_page: '次へ ›', mcp_tools_next_page_aria: '次のMCPツールページ', // PDF preview (#480) pdf_loading: 'PDF {0} を読み込み中…', pdf_too_large: 'PDF が大きすぎてインラインプレビューできません', pdf_no_pages: 'PDF にページがありません', pdf_error: 'PDF プレビューの描画に失敗しました', pdf_download: 'PDF をダウンロード', pdf_truncated: 'Showing the first {0} of {1} pages — download for the full document', // HTML sandbox preview (#482) html_loading: 'HTML プレビューを読み込み中…', html_too_large: 'HTML が大きすぎてインラインプレビューできません', html_error: 'HTML プレビューの描画に失敗しました', html_open_full: 'フルページを開く', html_sandbox_label: 'HTML プレビュー (サンドボックス)', thinking: '考え中', expand_all: 'すべて展開', collapse_all: 'すべて折りたたむ', edit_failed: '編集失敗: ', regen_failed: '再生成失敗: ', reconnect_active: '応答を生成中です。準備ができたら再読み込みしますか?', reconnect_finished: '前回離脱時に応答が進行中でした。メッセージが更新されている可能性があります。', // approval card approval_heading: '承認が必要', approval_desc_prefix: '危険なコマンドを検出しました', approval_btn_once: '今回だけ許可', approval_btn_once_title: 'このコマンド1回だけ許可 (Enter)', approval_btn_session: 'セッション中許可', approval_btn_session_title: 'この会話セッション中は許可', approval_btn_always: '常に許可', approval_btn_always_title: 'このコマンドパターンを常に許可', approval_btn_deny: '拒否', approval_btn_deny_title: '拒否 — このコマンドを実行しない', approval_responding: '応答中…', approval_gateway_unsupported: '承認を実行するには新しいゲートウェイが必要です。有効にするには接続されている Hermes ゲートウェイをアップグレードしてください。', approval_gateway_unsupported_label: '承認はサポートされていません', clarify_heading: '確認が必要', clarify_hint: '選択肢を選ぶか、下に独自の回答を入力してください。', clarify_other: 'その他', clarify_send: '送信', clarify_input_placeholder: '回答を入力…', clarify_responding: '応答中…', session_attention_approval: (n) => n === 1 ? '承認' : `${n} 件の承認`, session_attention_clarify: (n) => n === 1 ? '質問' : `${n} 件の質問`, session_attention_generic: (n) => n === 1 ? '注意' : `${n} 件`, session_attention_approval_title: '権限判断を待っています', session_attention_clarify_title: '回答を待っています', session_attention_generic_title: 'ユーザー操作を待っています', untitled: '無題', n_messages: (n) => `${n} 件のメッセージ`, load_older_messages: '↑ 上にスクロール、またはクリックして過去のメッセージを読み込む', session_jump_start: '開始', session_jump_start_label: 'セッションの先頭へ移動', session_jump_end: '末尾', session_jump_end_label: 'セッションの末尾へ移動', session_new_message: '新着メッセージ', session_new_message_label: '新着メッセージがあります。末尾へ移動', jump_to_question: '回答へ', jump_to_question_label: 'この回答の先頭へ移動', queued_label: '応答後に送信', queued_count: (n) => `${n} 件キュー中`, queued_cancel: 'キューに入れたメッセージをキャンセル', model_unavailable: ' (利用不可)', model_unavailable_title: 'このモデルは現在のプロバイダ一覧に含まれていません', provider_mismatch_warning: (m,p)=>`"${m}" は設定されたプロバイダ (${p}) で動作しない可能性があります。このまま送信するか、ターミナルで \`hermes model\` を実行して切り替えてください。`, provider_mismatch_label: 'プロバイダ不一致', gateway_auth_label: 'ゲートウェイ認証に失敗しました', gateway_start: 'Start', gateway_stop: 'Stop', gateway_restart: 'Restart', gateway_start_success: 'Gateway start completed.', gateway_stop_success: 'Gateway stop completed.', gateway_restart_success: 'Gateway restart completed.', gateway_start_failed: 'Gateway start failed', gateway_stop_failed: 'Gateway stop failed', gateway_restart_failed: 'Gateway restart failed', gateway_running: 'Running', gateway_session: 'session', gateway_sessions: 'sessions', gateway_status_load_failed: 'Failed to load gateway status', model_not_found_label: 'モデルが見つかりません', model_custom_label: 'カスタムモデルID', model_custom_placeholder: '例: openai/gpt-5.4', model_show_all_models: '{0} 件のモデルをすべて表示', model_search_placeholder: 'モデルを検索…', model_search_no_results: 'モデルが見つかりません', model_group_configured: '設定済み', ws_search_placeholder: 'ワークスペースを検索…', ws_no_results: 'ワークスペースが見つかりません', workspace_new_worktree_conversation: 'worktree で新しい会話', workspace_new_worktree_conversation_meta: 'このワークスペース用に隔離された git worktree を作成します。', workspace_worktree_created: 'worktree 会話を作成しました', workspace_worktree_failed: 'worktree の作成に失敗しました: ', session_worktree_badge: 'Worktree(作業ツリー)', model_scope_advisory: '次回のメッセージからこの会話に適用されます。', model_scope_toast: '次回のメッセージからこの会話に適用されます。', // commands.js cmd_clear: '会話メッセージをクリア', cmd_help: '使用可能なスラッシュコマンドを表示', cmd_compress: '会話コンテキストを手動で圧縮 (使い方: /compress [トピック])', ctx_compress_hint: 'コンテキストを圧縮して空きを確保 →', ctx_compress_action: '⚠ 今すぐ圧縮してコンテキストを確保', cmd_compact_alias: '/compress の旧エイリアス', cmd_model: 'モデルを切り替え (例: /model gpt-4o)', cmd_workspace: '名前でワークスペースを切り替え', cmd_terminal: 'ワークスペースのターミナルを開く', cmd_new: '新しいチャットセッションを開始', cmd_usage: 'トークン使用量表示の ON/OFF を切り替え', cmd_theme: '外観を切り替え (theme: system/dark/light, skin: default/ares/mono/graphite/slate/poseidon/sisyphus/charizard/sienna/catppuccin/nous/geist-contrast/zeus/verdigris)', cmd_personality: 'エージェントのパーソナリティを切り替え', cmd_skills: '利用可能な Hermes スキルを一覧表示', cmd_use: '次のメッセージにスキルを強制適用', available_commands: '利用可能なコマンド:', type_slash: '/ を入力するとコマンド一覧', conversation_cleared: '会話をクリアしました', command_label: 'コマンド', context_compaction_label: 'コンテキスト圧縮', retrieval_context_label: 'インデックス済みコンテキスト', retrieval_context_preview: '以前のメッセージは保存され、コンテキストツールで取得できます', preserved_task_list_label: '保持されたタスクリスト', reference_only_label: '参照専用', model_usage: '使い方: /model <名前>', no_model_match: '一致するモデルなし: "', model_did_you_mean: (m) => `(もしかして "${m}"?)`, switched_to: '切り替えました: ', workspace_usage: '使い方: /workspace <名前>', no_workspace_match: '一致するワークスペースなし: "', switched_workspace: 'ワークスペースを切り替えました: ', workspace_switch_failed: 'ワークスペース切替失敗: ', new_session: '新しいセッションを作成しました', new_session_creating: '新しい会話を作成中…', compressing: 'コンテキスト圧縮を要求中...', compress_running_label: '圧縮中', compress_complete_label: '圧縮完了', auto_compress_label: '自動圧縮', compress_failed_label: '圧縮失敗', focus_label: 'フォーカス', token_usage_on: 'トークン使用量: ON', token_usage_off: 'トークン使用量: OFF', usage_cache_hit_detail: 'キャッシュ: {0}% ヒット(読み取り {1} / 書き込み {2})', usage_cached_percent: '{0}% キャッシュ済み', theme_usage: '使い方: /theme ', theme_set: 'テーマ: ', no_active_session: 'アクティブなセッションがありません', cmd_queue: '次のターン用にメッセージをキュー', cmd_goal: '永続ゴールを設定または確認', goal_evaluating_progress: 'ゴールの進捗を評価中…', goal_working_toward: 'ゴールに向けて実行中…', goal_continuing_toast: 'ゴールに向けて継続中…', goal_status_none: 'アクティブなゴールはありません。/goal <テキスト> で設定してください。', goal_status_active: (turns, max_turns, goal) => `⊙ ゴール(実行中、${turns}/${max_turns}ターン): ${goal}`, goal_status_paused: (turns, max_turns, reason, goal) => `⏸ ゴール(一時停止、${turns}/${max_turns}${reason ? `、${reason}` : ''}): ${goal}`, goal_status_done: (turns, max_turns, goal) => `✓ ゴール完了(${turns}/${max_turns}): ${goal}`, goal_set: (turns, goal) => `⊙ ゴール設定(${turns}ターン予算): ${goal}`, goal_paused: (goal) => `⏸ ゴール一時停止: ${goal}`, goal_resumed: (goal) => `▶ ゴール再開: ${goal}`, goal_cleared: 'ゴールをクリアしました。', goal_no_goal: 'アクティブなゴールはありません。', goal_achieved: (reason) => `✓ ゴール達成: ${reason}`, goal_paused_budget_exhausted: (turns, max_turns) => `⏸ ゴール一時停止 — ${turns}/${max_turns}ターンを使用しました。継続するには /goal resume、停止するには /goal clear を使ってください。`, goal_continuing: (turns, max_turns, reason) => `↻ ゴールに向けて継続中(${turns}/${max_turns}): ${reason}`, cmd_interrupt: '現在のターンをキャンセルして新規メッセージを送信', cmd_steer: 'エージェントを中断せずにターン中に修正を注入', cmd_queue_no_msg: '使い方: /queue <メッセージ>', cmd_queue_not_busy: 'アクティブなタスクなし — 通常通り送信してください', cmd_queue_confirm: 'メッセージをキューに入れました', cmd_interrupt_no_msg: '使い方: /interrupt <メッセージ>', cmd_interrupt_confirm: '中断 — 新しいメッセージを送信中', cmd_steer_no_msg: '使い方: /steer <メッセージ>', cmd_steer_fallback: 'ステア利用不可 — 下書きを復元しました', cmd_steer_delivered: 'ステア送信完了 — 次のツール結果でエージェントが認識します', steer_leftover_queued: 'ステアを次のターンへキュー', busy_steer_fallback: 'ステア利用不可 — 下書きを復元しました', steer_fail_no_cached_agent: 'No agent cached for this session — try refreshing', steer_fail_agent_lacks_steer: 'This agent version does not support steer', steer_fail_session_not_found: 'Session not found — it may have expired', steer_fail_not_running: 'Agent is not currently running', steer_fail_stream_dead: 'The agent stream has ended', steer_fail_steer_error: 'Steer delivery failed — the agent may have finished', steer_fail_network_error: 'Network error — check your connection', steer_fail_unknown: 'Steer unavailable', steer_recovery_retry: 'Retry', steer_recovery_dismiss: 'Dismiss', busy_interrupt_confirm: '中断 — 新しいメッセージを送信中', settings_label_default_message_mode: '既定のメッセージモード', settings_desc_default_message_mode: 'エージェント実行中にメッセージを送信した時の動作を制御します。Queue は待機、Interrupt はキャンセルして再開、Steer は中断せずにターン中に修正を注入します。Steer が利用できない場合は、下書きが復元されるため、次の操作を選べます。', settings_label_fade_text_effect: 'テキストのフェード効果', settings_desc_fade_text_effect: 'アシスタントの応答中に新しくストリーミングされた単語をフェードインします。OpenWebUI に似た表示です。最大パフォーマンスのため既定ではオフです。', settings_label_max_tokens: '最大出力トークン数', settings_desc_max_tokens: '新しいストリーミング応答の出力量を制限します。空欄のままにすると、現在のプロファイルのフォールバック値を使います。', settings_placeholder_max_tokens_none: '上書きなし', settings_placeholder_max_tokens_fallback: '上書きなし(フォールバック: {0})', settings_default_message_mode_queue: 'フォローアップをキュー', settings_default_message_mode_interrupt: '現在のターンを中断', settings_default_message_mode_steer: 'ステア (ターン中の修正)', settings_label_busy_placeholder_hint: 'Show busy placeholder hint', settings_desc_busy_placeholder_hint: 'Shows the composer placeholder with the current busy action while the session is running and the draft is empty.', composer_placeholder_busy_queue: 'Enter = queue | /interrupt | /background | /steer', composer_placeholder_busy_interrupt: 'Enter = interrupt | /queue | /background | /steer', composer_placeholder_busy_steer: 'Enter = steer | /queue | /background | /interrupt', slash_skill_badge:'スキル', slash_skill_desc:'このスキルを呼び出す', cmd_stop:'現在の応答を停止', cmd_title:'セッションタイトルを取得・設定', cmd_retry:'最後のメッセージを再送信', cmd_undo:'最後のやり取りを削除', cmd_btw:'サイド質問 (一時的)', cmd_btw_usage:'/btw <質問> — セッション文脈でサイド質問', cmd_background:'プロンプトをバックグラウンド実行', cmd_background_usage:'/background <プロンプト> — ブロックせずに並列実行', cmd_branch:'この会話を新しいセッションへ分岐', cmd_branch_usage:'/branch [名前] — 会話を分岐 (任意で名前指定)', branch_forked:'新しいセッションへ分岐しました', branch_failed:'分岐失敗: ', fork_from_here:'ここから分岐', forked_from:'分岐元', subagent_children:'サブエージェントセッション', btw_asking:'サイド質問を問い合わせ中...', btw_label:'サイド質問 — 履歴に残らない', btw_done:'サイド質問に回答しました', btw_no_answer:'回答が得られませんでした。', btw_failed:'サイド質問失敗: ', bg_running:'バックグラウンド実行中...', bg_complete:'バックグラウンドタスク完了', bg_label:'バックグラウンド結果:', bg_no_answer:'(回答なし)', bg_failed:'バックグラウンドタスク失敗: ', undo_exchange:'最後のやり取りを取り消す', cmd_status:'セッション情報を表示', cmd_voice:'マイク入力を切り替え', stream_stopped:'応答を停止しました。', no_active_task:'停止できるアクティブタスクがありません。', cancel_unavailable:'キャンセルできません。', retry_failed:'再試行失敗: ', undo_failed:'取り消し失敗: ', undid_n_messages:'削除', undid_messages_suffix:'件のメッセージ。', status_heading:'セッションステータス', status_session_id:'セッションID', status_title:'タイトル', status_model:'モデル', status_provider:'プロバイダー', status_workspace:'ワークスペース', status_personality:'パーソナリティ', status_messages:'メッセージ', status_agent_running:'エージェント実行中', status_profile: 'プロファイル', status_hermes_home: 'Hermes ホーム', status_started: '開始', status_tokens: 'トークン', status_updated: '更新', status_ephemeral: '一時的なスナップショット — 履歴には保存されません。', status_no_tokens: 'トークン未使用', status_unknown: '不明', status_yes:'はい', status_no:'いいえ', status_load_failed:'ステータス読み込み失敗: ', title_current:'現在のタイトル', title_change_hint:'`/title <新しい名前>` で改名できます。', title_set:'タイトルを設定: ', cmd_webui_only_session:'CLI からインポートしたセッションでは使えません。', cmd_voice_use_mic:'コンポーザーのマイクボタンをクリックしてください。', usage_heading:'トークン使用量', usage_default_model:'デフォルト', usage_unknown:'不明', usage_input_tokens:'入力トークン', usage_output_tokens:'出力トークン', usage_total:'合計トークン', usage_estimated_cost:'推定コスト', usage_settings_tip:'注: コスト推定はおおよその値です。', usage_load_failed:'使用量読み込み失敗: ', usage_personality_none:'なし', // Session toolsets (#493) session_toolsets:'セッションツールセット', session_toolsets_desc:'アクティブなプロファイルのデフォルトを使うか、このセッション用のカスタムツールセットを選択します', session_toolsets_global:'アクティブプロファイルのデフォルト', session_toolsets_profile_defaults:'アクティブプロファイルのデフォルト', session_toolsets_custom:'カスタム上書き', session_toolsets_use_profile_defaults:'アクティブプロファイルのデフォルトを使用', session_toolsets_configured_servers:'設定済みMCPサーバー', session_toolsets_loading_servers:'設定済みサーバーを読み込み中...', session_toolsets_no_configured_servers:'設定済みMCPサーバーはありません', session_toolsets_placeholder: 'ツール1, ツール2, …', session_toolsets_apply:'適用', session_toolsets_clear:'デフォルトを使用', session_toolsets_applied:'ツールセットを更新しました', session_toolsets_cleared:'アクティブプロファイルのデフォルトを使用しています', session_toolsets_failed:'ツールセット更新失敗: ', untitled:'無題', no_personalities: 'パーソナリティが見つかりません (~/.hermes/personalities/ に追加してください)', available_personalities: '利用可能なパーソナリティ:', personality_switch_hint: '\n\n`/personality <名前>` で切り替え、`/personality none` でクリアします。', personalities_load_failed: 'パーソナリティの読み込みに失敗しました', personality_cleared: 'パーソナリティをクリアしました', personality_set: 'パーソナリティ: ', failed_colon: '失敗: ', // ui.js no_workspace: 'ワークスペースなし', terminal_open_title: 'ワークスペースのターミナルを開く', terminal_no_workspace_title: 'ターミナルを開くにはワークスペースを選択してください', terminal_title: 'ターミナル', terminal_clear: 'クリア', terminal_copy_output: '出力をコピー', terminal_restart: '再起動', terminal_collapse: '折りたたむ', terminal_expand: '展開', terminal_close: '閉じる', terminal_input_placeholder: 'コマンドを実行...', terminal_start_failed: 'ターミナル起動失敗: ', terminal_input_failed: 'ターミナル入力失敗: ', terminal_copy_failed: 'コピー失敗: ', terminal_error: 'ターミナルエラー', terminal_remote_backend_unsupported: '埋め込みターミナルはローカルのターミナルバックエンドでのみ利用できます。', workspace_empty_no_path: 'ワークスペースが選択されていません。設定 → ワークスペースで選択してください。', workspace_empty_dir: 'このワークスペースは空です。', workspace_show_hidden_files: '隠しファイルを表示', workspace_show_hidden_files_desc: '.DS_Store、.git、node_modules などの隠しファイル・システムファイルをファイルツリーに表示します。', workspace_hidden_files_visible: '隠しファイル表示中', workspace_hidden_files_visible_title: '隠しファイルが表示されています — クリックでオプション', workspace_options: 'ワークスペースオプション', dialog_confirm_title: '操作の確認', dialog_prompt_title: '値を入力', dialog_confirm_btn: '確認', // workspace.js unsaved_confirm: 'プレビューに未保存の変更があります。破棄して移動しますか?', discard: '破棄', save: '保存', edit: '編集', clear: 'クリア', create: '作成', remove: '削除', save_title: '変更を保存', edit_title: 'このファイルを編集', saved: '保存しました', save_failed: '保存失敗: ', image_load_failed: '画像を読み込めませんでした', file_open_failed: 'ファイルを開けませんでした', downloading: (name) => `${name} をダウンロード中…`, double_click_rename: 'ダブルクリックで名前変更', symlink_link_to: 'Symlink → {target}', external_link_open_confirm: 'This symlink points outside the workspace. Open it in a read-only external view for this browser session?', external_link_read_only: 'This external view is read-only. Create, rename, move, delete, upload, reveal, and editor actions stay disabled here.', external_link_grant_expired: 'This external view expired. Reopen the escape-target symlink to authorize it again.', session_rename_failed_no_row: '名前変更を開始できませんでした — 行が見つかりません。', renamed_to: '名前を変更: ', rename_failed: '名前変更失敗: ', moved_to: '移動先: ', move_failed: '移動失敗: ', delete_title: '削除', delete_confirm: (name) => `${name} を削除しますか?`, delete_dir_confirm: (name) => `フォルダ "${name}" とその内容をすべて削除しますか?`, rename_title: '名前変更', rename_prompt: '新しい名前:', deleted: '削除しました: ', delete_failed: '削除失敗: ', reveal_in_finder: 'ファイルマネージャーで表示', reveal_failed: '表示に失敗しました: ', copy_file_path: 'ファイルパスをコピー', open_in_vscode: 'VS Codeで開く', open_in_vscode_failed: 'VS Codeで開けませんでした: ', download_folder: 'フォルダをダウンロード', path_copied: 'ファイルパスをクリップボードにコピーしました', path_copy_failed: 'パスのコピーに失敗しました: ', session_rename: '会話の名前を変更', session_rename_desc: 'この会話のタイトルを編集', session_title_regenerate: 'タイトルを再生成', session_title_regenerate_desc: '会話から新しいタイトルを生成するよう Hermes に依頼します', session_title_regenerating: 'タイトルを再生成中…', session_title_regenerated: (title) => `タイトルを再生成しました: ${title}`, session_title_regenerate_failed: 'タイトルの再生成に失敗しました: ', session_copy_link: '会話リンクをコピー', session_copy_link_desc: 'この会話への直接リンクをコピー', session_link_copied: '会話リンクをクリップボードにコピーしました', session_link_copy_failed: '会話リンクをコピーできませんでした: ', new_file_prompt: '新しいファイル名 (例: notes.md):', new_file: '新規ファイル', new_folder: '新規フォルダ', workspace_root: 'ワークスペースのルート', new_file_prompt_title: '{0} の新しいファイル名:', new_folder_prompt_title: '{0} の新しいフォルダ名:', project_name_prompt: 'プロジェクト名:', created: '作成しました: ', create_failed: '作成失敗: ', new_folder_prompt: '新しいフォルダ名:', folder_created: 'フォルダを作成しました: ', folder_create_failed: 'フォルダ作成失敗: ', workspace_auto_create_folder: 'フォルダが存在しなければ作成', folder_add_as_space_btn: 'スペースとして追加', folder_add_as_space_msg: 'このフォルダをワークスペース一覧に新しいスペースとして追加しますか?', folder_add_as_space_title: 'スペースとして追加?', remove_title: '削除', empty_dir: '(空)', upload_failed: 'アップロード失敗: ', upload_too_large: (maxMb, fileMb) => `ファイルが大きすぎます (${fileMb} MB)。最大アップロードサイズは ${maxMb} MB です。`, uploading: 'アップロード中…', uploaded: 'アップロード完了', all_uploads_failed: (n) => `${n} 件のアップロードがすべて失敗しました`, archive_extracted: (n, c) => `${c} 個のアーカイブから ${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_hide_external: 'リストから非表示', session_restore: '会話を復元', session_archive_desc: 'アーカイブを表示するまでこの会話を非表示にする', session_archive_worktree_desc: 'この会話を非表示にし、worktree はディスク上に残します', session_hide_external_desc: '元の履歴を削除せずに、この取り込んだセッションを WebUI のリストから非表示にします。', session_restore_desc: 'この会話をメイン一覧に戻す', session_archived: 'セッションをアーカイブしました', session_archived_worktree: 'セッションをアーカイブしました。Worktree はディスク上に残ります。', session_hidden: 'セッションをリストから非表示にしました', session_restored: 'セッションを復元しました', session_archive_failed: 'アーカイブ失敗: ', session_duplicate: '会話を複製', session_duplicate_desc: '同じワークスペースとモデルでコピーを作成', session_export_html: 'Export as HTML', session_export_html_desc: 'Download this conversation as a self-contained HTML file', session_duplicated: 'セッションを複製しました', session_duplicate_failed: '複製失敗: ', session_stop_response: '応答を停止', session_stop_response_desc: 'この会話の実行中の応答をキャンセルします', session_delete: '会話を削除', session_delete_desc: 'この会話を完全に削除', session_delete_confirm: 'この会話を削除しますか?', session_delete_worktree_desc: 'WebUI の会話だけを削除し、worktree はディスク上に残します', session_delete_worktree_confirm: (path) => `この会話を削除しますか? ${path} の worktree はディスク上に残ります。`, session_deleted: '会話を削除しました', session_deleted_worktree: '会話を削除しました。Worktree はディスク上に残ります。', session_worktree_remove: 'ワークツリーを削除', session_worktree_remove_desc: (path) => `${path} のgitワークツリーをディスクから削除します`, session_worktree_remove_confirm: (path) => `gitワークツリーをディスクから削除しますか?\n\nパス: ${path}\n\nワークツリーディレクトリ全体が削除されます。セッションデータはWebUIに残ります。`, session_worktree_remove_not_exists: (path) => `${path} のワークツリーはディスク上に存在しません。`, session_worktree_remove_confirm_label: '削除', session_worktree_removed: 'ワークツリーを削除しました。', session_worktree_remove_failed: 'ワークツリーの削除に失敗: ', session_worktree_remove_status_failed: 'ワークツリー状態の読み取りに失敗: ', session_worktree_remove_locked_by_stream: '削除できません — アクティブなストリーミングセッションがこのワークツリーを使用中です。', session_worktree_remove_locked_by_terminal: '削除できません — アクティブな端末セッションがこのワークツリーを使用中です。', session_worktree_remove_unsafe_blocked: 'このワークツリーを削除する前に、ローカル変更または未プッシュのコミットを解消してください。', session_worktree_remove_dirty_warning: '警告: このワークツリーにはコミットされていない変更があり、失われます。', session_worktree_remove_untracked_warning: (count) => `${count}件の追跡されていないファイルが完全に削除されます。`, session_worktree_remove_ahead_warning: (ahead) => `${ahead}件の未プッシュコミットが失われます。`, session_select_mode: '選択', session_select_mode_desc: '会話を選択して一括管理', session_select_all: 'すべて選択', session_deselect_all: '選択解除', session_selected_count: '{0} 件選択', session_batch_archive: 'アーカイブ', session_batch_delete: '削除', session_batch_move: 'プロジェクトへ移動', session_batch_delete_confirm: '{0} 件の会話を削除しますか?', session_batch_archive_confirm: '{0} 件の会話をアーカイブしますか?', session_batch_delete_worktree_confirm: '{0} 件の会話を削除しますか? {1} 件の worktree 付き会話は、worktree ディレクトリをディスク上に残します。', session_batch_archive_worktree_confirm: '{0} 件の会話をアーカイブしますか? {1} 件の worktree 付き会話は、worktree ディレクトリをディスク上に保持します。', session_no_selection: '会話が選択されていません', // 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 のデフォルトと UI 動作。', settings_section_system_title: 'システム', settings_section_system_meta: 'インスタンスのバージョンとアクセス制御。', settings_check_now: '今すぐ確認', settings_checking: '確認中…', settings_up_to_date: '最新です ✓', settings_updates_available: '{count} 件のアップデートあり', settings_update_check_failed: 'アップデート確認失敗', settings_update_no_git: 'アップデートを確認できません(gitチェックアウトではありません)', settings_updates_disabled: 'アップデート確認は無効です', settings_label_workspace_panel_open: 'ワークスペースパネルをデフォルトで開いておく', settings_desc_workspace_panel_open: '有効にすると、新しいセッションごとにワークスペース/ファイルブラウザパネルが自動で開きます。手動でいつでも閉じられます。', settings_label_workspace_todos_tab: 'ワークスペースパネルにTodosタブを表示', settings_desc_workspace_todos_tab: '有効にすると、ワークスペースパネルにTodosタブが表示されます。サイドバーのTodosパネルは引き続き利用できます。', settings_label_session_jump_buttons: 'セッションジャンプボタンを表示', settings_desc_session_jump_buttons: '長いセッション履歴を読むときに、浮動表示の「開始」と「末尾」ボタンを表示します。', settings_label_terminal_auto_expand: '出力時にターミナルを自動展開', settings_desc_terminal_auto_expand: '実行中のコマンドが新しい出力を生成したときに、折りたたまれたターミナルパネルを自動的に展開します。', settings_label_session_endless_scroll: '上スクロールで古いメッセージを読み込む', settings_desc_session_endless_scroll: '有効にすると、上にスクロールしたとき古いメッセージを自動で読み込みます。無効の場合は古いメッセージボタンを使います。', settings_label_auto_scroll_follow: '新しい内容を自動で追従', settings_desc_auto_scroll_follow: '有効にすると、ストリーミング中に画面が自動で一番下までスクロールします。無効にすると、スクロール位置を自分で操作できます。', settings_label_render_user_markdown: 'Render markdown in user messages', settings_label_show_titlebar_profile: 'Show profile switcher in titlebar', // TODO: translate settings_desc_show_titlebar_profile: 'When enabled, a profile switcher button appears in the top-left app titlebar so you can change profiles from any tab. Off by default; the composer footer always has a profile switcher regardless of this setting.', // TODO: translate settings_desc_render_user_markdown: 'When enabled, bold, italic, links, and other markdown in your own messages are rendered. Off by default; fenced code blocks and math always render regardless of this setting.', settings_label_large_text_paste_as_attachment: 'Attach large pasted text as file', settings_desc_large_text_paste_as_attachment: 'When enabled, long pasted text becomes a .md attachment instead of filling the composer.', settings_label_project_quick_create: 'Show per-project new-conversation buttons', settings_desc_project_quick_create: 'When enabled, each project chip in the sidebar gets a + button to start a conversation in that project.', settings_label_structured_code: 'JSON/YAML code blocks', settings_option_structured_code_auto: 'Auto: Tree for long blocks', settings_option_structured_code_on: 'Tree by default', settings_option_structured_code_off: 'Raw by default', settings_label_structured_code_auto_lines: 'Auto threshold lines', settings_desc_structured_code: 'When Auto is selected, JSON/YAML blocks with at least this many lines open in Tree view. Tree always opens the structured viewer; Raw keeps the syntax-highlighted text. You can still switch Tree/Raw on each block.', settings_label_worklog_details_expanded_default: 'Worklog の詳細を自動的に開く', settings_desc_worklog_details_expanded_default: '有効にすると、新しい Worklog の詳細が展開された状態で始まり、ツール、Thinking、進捗カードをクリックなしで確認できます。無効の場合、Worklog の詳細はデフォルトで折りたたまれます。ターンごとの手動折りたたみ/展開は優先されます。', settings_label_chat_activity_display_mode: 'アクティビティ表示', settings_desc_chat_activity_display_mode: '「コンパクトワークログ」はバックグラウンドアクティビティを簡潔なサマリーにまとめます。「トランスペアレントストリーム」は思考プロセスやツールの呼び出しイベントを、時系列順に展開可能な個別の行として表示し続けます。', first_token_time: '最初のトークン出力までの時間', processed_elapsed: _i18nProcessedElapsedEn, worklog_thinking: 'Thinking', tool_target_skill_suffix: 'skill', tool_action_label: _i18nToolActionLabelEn, tool_worklog_summary: _i18nToolWorklogSummaryEn, tool_summary_join: _i18nToolSummaryJoinEn, done: '完了', settings_option_compact_worklog: 'コンパクトワークログ', settings_option_transparent_stream: 'トランスペアレントストリーム', settings_label_tab_visibility: 'サイドバータブ', settings_desc_tab_visibility: 'サイドバーとレールに表示するタブを選択します。チャットと設定は常に表示されます。', settings_label_composer_controls: 'Chat footer controls', settings_desc_composer_controls: 'Toggle which controls are shown in the chat footer. Drag chips to reorder each footer group.', settings_label_composer_situational_controls: 'Situational footer controls', settings_desc_composer_situational_controls: 'These controls do not always appear, depending on viewport, mode, or runtime state. You can still toggle them off if needed.', composer_control_attach: 'Attach', composer_control_saved_prompts: 'Saved prompts', composer_control_mic: 'Mic', composer_control_profile: 'Profile', composer_control_workspace: 'Workspace', composer_control_model: 'Model', composer_control_reasoning: 'Reasoning', composer_control_context: 'Context', composer_control_voice_mode: 'Voice mode', composer_control_yolo: 'YOLO', composer_control_bg_badge: 'Background badge', composer_control_mobile_config: 'Mobile config', composer_control_quota_chip: 'Quota chip', composer_control_toolsets: 'Toolsets', composer_control_status: 'Status', open_in_browser: 'ブラウザで開く', 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_plugins: 'プラグイン', settings_tab_extensions: '拡張機能', settings_extensions_gallery_tab: 'Gallery', settings_extensions_installed_tab: 'Installed', settings_extensions_diagnostics_tab: 'Diagnostics', settings_extensions_gallery_loading: 'Loading gallery…', settings_extensions_gallery_empty: 'No extensions found in the registry.', settings_extensions_gallery_error: 'Failed to load gallery.', ext_gallery_install: 'Install', ext_gallery_installing: 'Installing…', ext_gallery_installed: 'Installed', ext_gallery_uninstall: 'Uninstall', ext_gallery_uninstalling: 'Uninstalling…', ext_gallery_restart_required: 'Restart required', ext_gallery_permissions_show: 'Permissions', ext_gallery_permissions_hide: 'Hide permissions', ext_gallery_permissions_empty: '追加の権限は宣言されていません。', ext_gallery_version: 'Version', ext_gallery_author: 'Author', ext_gallery_capabilities: 'Capabilities', ext_gallery_next_step: '次の手順', ext_gallery_after_install: 'インストール後', ext_gallery_local_component_required: 'この拡張機能にはローカルコンポーネントが必要です。インストール後に必要なローカルアプリまたはサイドカーを起動してください。', ext_gallery_local_app_label: 'ローカルアプリ', ext_gallery_required_suffix: '{0} が必要', ext_gallery_sidecar_required: 'サイドカーが必要', ext_gallery_native_host_required: 'ネイティブホストが必要', ext_gallery_open_setup_guide: 'セットアップガイドを開く', ext_gallery_install_restart_required: '拡張機能をインストールしました。適用するには再起動が必要です。', ext_gallery_install_followup: '拡張機能をインストールしました。次の手順はカードで確認してください。', ext_gallery_install_ok: 'Extension installed successfully.', ext_gallery_uninstall_ok: 'Extension uninstalled.', settings_plugins_title: 'プラグイン', plugins_enable_toggle: '有効化', settings_plugins_meta: 'インストール済みのHermesプラグインと登録されているライフサイクルフックを確認できます。このパネルは読み取り専用です。', settings_plugins_empty: '現在表示できるHermesプラグインがありません。Hermes CLI/configからプラグインをインストールまたは有効化すると、ここに表示されます。', plugins_unnamed: '名前なしプラグイン', plugins_no_description: '説明がありません。', plugins_no_hooks: '登録済みのライフサイクルフックはありません', plugins_registered_hooks: '登録済みフック', plugins_enabled: '有効', plugins_disabled: '無効', plugins_active_provider: 'アクティブ(プロバイダー)', plugins_provider_no_hooks: 'プロバイダープラグイン — エージェント可視フックなし', plugins_load_failed: 'プラグインの読み込みに失敗しました: ', settings_tab_system: 'システム', settings_tab_help: 'ヘルプ', settings_help_meta: 'Hermes WebUI のリソースとサポート。', settings_help_docs_label: 'ドキュメント', settings_help_docs_desc: 'ガイド、設定リファレンス、および Hermes WebUI README の全文。', settings_help_docs_link: 'ドキュメントを開く', settings_help_issue_label: '問題が発生しましたか?', settings_help_issue_desc: 'GitHub で既存のレポートを検索するか、新しく報告を作成します。', settings_help_issue_link: 'GitHub Issues を開く', settings_title: '設定', settings_search_placeholder: '設定を検索…', settings_search_no_results: '設定が見つかりません。', settings_save_btn: '設定を保存', settings_label_model: 'デフォルトモデル', settings_desc_model: '新しい会話で使用されます。既存の会話は選択済みモデルを保持します。', settings_main_advanced_button_aria: 'メインモデルの詳細オプション', settings_main_advanced_title: 'メインモデルのオプション', settings_main_advanced_subtitle: 'デフォルトのチャットモデルに関する詳細設定です。', settings_main_advanced_saved: 'メインモデルのオプションを保存しました', settings_main_advanced_save_failed: 'メインモデルのオプションの保存に失敗しました', settings_main_advanced_service_tier: 'Service tier', settings_main_advanced_service_tier_desc: 'Optional request setting for OpenAI-family providers.', settings_main_advanced_service_tier_default: 'Default / off', settings_main_advanced_service_tier_priority: 'Priority (fast)', settings_label_auxiliary_models: '補助モデル', settings_desc_auxiliary_models: 'ビジョン、圧縮、タイトル生成などの補助タスクのルーティング。「自動」はメインチャットモデルを使用します。', settings_btn_reset_aux_models: 'すべて自動にリセット', settings_btn_apply_aux_models: '変更を適用', settings_aux_provider_auto: 'メインモデルを使用', settings_aux_model_auto: '自動(プロバイダーのデフォルトを使用)', settings_aux_model_custom: 'カスタムモデル…', settings_aux_model_custom_prompt: 'モデルIDを入力:', settings_aux_loading: '補助モデルを読み込み中…', settings_aux_load_failed: '補助モデル設定を読み込めませんでした。エージェントAPIが利用可能であることを確認してください。', settings_aux_reset_confirm_title: '補助モデルをリセットしますか?', settings_aux_reset_confirm_msg: 'すべての補助タスクを自動(メインモデルを使用)に設定します。', settings_aux_reset_done: '補助モデルを自動にリセットしました', settings_aux_save_failed: '補助モデルの保存に失敗しました', settings_aux_saved: '補助モデルを更新しました', settings_aux_no_changes: '適用する変更はありません', settings_aux_task_vision: 'Vision(画像認識)', settings_aux_task_vision_desc: '画像・スクリーンショットの解析', settings_aux_task_compression: 'コンテキスト圧縮', settings_aux_task_compression_desc: 'コンテキストの要約・圧縮', settings_aux_task_web_extract: 'ウェブページ抽出', settings_aux_task_web_extract_desc: 'ウェブページの要約', settings_aux_task_session_search: 'セッション検索', settings_aux_task_session_search_desc: '過去の会話の呼び出し', settings_aux_task_approval: '承認', settings_aux_task_approval_desc: 'コマンド実行のスマート承認', settings_aux_task_mcp: 'MCP', settings_aux_task_mcp_desc: 'MCPツールの推論', settings_aux_task_title_generation: 'タイトル生成', settings_aux_task_title_generation_desc: 'セッションタイトルの自動生成', settings_aux_task_skills_hub: 'スキルハブ', settings_aux_task_skills_hub_desc: 'スキルの検索とインストール', settings_aux_task_curator: 'キュレーター', settings_aux_task_curator_desc: 'スキル使用状況のレビュー', settings_aux_task_kanban_decomposer: 'カンバンタスク分解', settings_aux_task_kanban_decomposer_desc: 'タスクの分解', settings_aux_task_profile_describer: 'プロファイル概要生成', settings_aux_task_profile_describer_desc: 'プロファイルの要約', settings_aux_task_triage_specifier: 'トリアージ仕様決定', settings_aux_task_triage_specifier_desc: 'イシューやタスクのトリアージ仕様を決定', settings_aux_advanced_button_title: '詳細オプション', settings_aux_advanced_button_aria: '{task} の詳細オプション', settings_aux_advanced_title: '{task} のオプション', settings_aux_advanced_subtitle: '補助タスクの詳細設定。', settings_aux_advanced_save: 'オプションを保存', settings_aux_advanced_base_url: 'ベースURL', settings_aux_advanced_base_url_desc: 'プロバイダーのエンドポイントをオーバーライドするオプションです。', settings_aux_advanced_timeout: 'タイムアウト秒数', settings_aux_advanced_timeout_desc: 'この補助タスクのリクエストタイムアウト時間。空欄の場合は Hermes のデフォルト値が適用されます。', settings_aux_advanced_download_timeout: 'ダウンロードタイムアウト秒数', settings_aux_advanced_download_timeout_desc: '画像認識などメディアやコンテンツをダウンロードするタスクでのみ有効です。空欄の場合はデフォルト値が適用されます。', settings_aux_advanced_max_concurrency: '最大同時実行数', settings_aux_advanced_max_concurrency_desc: 'タスクごとの同時実行数の制限(オプション)。空欄の場合はデフォルト値が適用されます。', settings_aux_advanced_extra_body: '追加のBody JSON', settings_aux_advanced_extra_body_desc: 'モデルへのリクエストボディにマージするオプションの JSON オブジェクト。', settings_aux_advanced_api_key: 'APIキーのオーバーライド', settings_aux_advanced_api_key_set_hint: 'APIキーが設定されています。維持するには空欄のままにし、削除するにはクリアを使用してください。', settings_aux_advanced_api_key_empty_hint: 'プロバイダーのデフォルトの認証情報を使用する場合は空欄のままにします。', settings_aux_advanced_api_key_clear: '設定済みのAPIキーのオーバーライドをクリアする', settings_aux_advanced_extra_body_invalid_json: '追加のBody JSONは有効なJSON形式である必要があります', settings_aux_advanced_extra_body_object_required: '追加のBody JSONはJSONオブジェクトである必要があります', settings_aux_advanced_saved: '補助タスクのオプションを保存しました', settings_aux_advanced_save_failed: '補助タスクのオプションの保存に失敗しました', settings_label_send_key: '送信キー', settings_label_theme: 'テーマ', settings_label_skin: 'スキン', settings_label_font_size: 'フォントサイズ', font_size_small: '小', font_size_default: 'デフォルト', font_size_large: '大', font_size_xlarge: '特大', settings_autosave_saving: '保存中…', settings_autosave_saved: '保存しました', settings_autosave_failed: '保存失敗', settings_autosave_retry: '再試行', settings_label_language: '言語', settings_label_quota_chip: 'コンポーザーにプロバイダーのクォータチップを表示', settings_desc_quota_chip: 'コンポーザーのフッターに残りクォータインジケーター(例: OpenRouter のクレジット残高)を表示します。デフォルトはオフ。有効にした場合、ラップトップや標準デスクトップの幅でコンポーザーが混雑しないよう、ワイドディスプレイ(≥1400px)でのみ表示されます。', settings_label_conversation_outline: '会話アウトラインを表示', settings_desc_conversation_outline: '現在の会話内のユーザー質問へ移動するデスクトップ専用リストを表示します。デフォルトはオフです。', settings_label_hide_suggestions: '新規チャットの候補を非表示', settings_desc_hide_suggestions: '空の新規チャット画面に表示されるデフォルトの候補ボタン3つを非表示にして、誤タップを防ぎます。', settings_label_virtualize_transcript: 'Virtualize long transcripts', settings_desc_virtualize_transcript: "Render only the visible portion of very long chat transcripts (over 80 messages) for smoother scrolling. Turn this off if you see any rendering or scroll issues, or want the browser's Find (Ctrl+F) to match the whole conversation \u2014 the full transcript will render at once.", settings_label_token_usage: 'トークン使用量を表示', settings_label_token_speed: 'トークン速度 (TPS) を表示', settings_desc_token_speed: 'ストリーミング中および応答完了後にアシスタントメッセージヘッダーにトークン/秒を表示します。デフォルトではオフ。', settings_label_sidebar_density: 'サイドバー密度', cmd_reasoning: '思考表示の切り替え (表示/非表示)、努力レベル設定、現在状態の確認', settings_label_external_sessions: '非WebUIセッションを表示', settings_label_claude_code_sessions: 'Show Claude Code sessions', settings_label_cron_sessions: 'Cronセッションを表示', settings_label_webhook_sessions: 'Webhookセッションを表示', settings_label_previous_messaging_sessions: '以前のメッセージングセッションを表示', settings_label_sync_insights: 'インサイトに同期', settings_label_check_updates: 'アップデートを確認', settings_label_ignore_agent_updates: 'Agentのアップデートを無視', settings_label_whats_new_summary: "What's New をAIで要約", settings_label_bot_name: 'デフォルトのアシスタント名', settings_label_password: 'アクセスパスワード', settings_label_pinned_limit: 'ピン留め会話の上限', settings_desc_pinned_limit: 'サイドバーにピン留めできるアクティブな会話の最大数。デフォルトは3。', settings_label_dashboard_mode: '公式Hermesダッシュボード', settings_desc_dashboard_mode: '公式hermesダッシュボードが到達可能な場合にナビゲーションレールにリンクを表示します。公開リバースプロキシURLはブラウザのみのリンクとして保存され、サーバーによるプローブは行われません。', settings_dashboard_mode_auto: '自動検出', settings_dashboard_mode_always: '常に表示', settings_dashboard_mode_never: '表示しない', settings_dashboard_save: 'ダッシュボードリンク設定を保存', settings_label_gateway_status: 'ゲートウェイステータス', settings_desc_gateway_status: 'Hermesゲートウェイのステータス(Telegram、Discord、Slackなど)', gateway_not_configured: 'ゲートウェイが未設定です', gateway_metadata_stale: 'ゲートウェイのメタデータが古いです', gateway_endpoint_unreachable: 'ゲートウェイのエンドポイントに到達できません', gateway_not_running: 'ゲートウェイが停止中', gateway_running_label: '実行中', gateway_last_active: '最終アクティブ: ', gateway_session_count: (n) => `${n} セッション`, gateway_load_failed: 'ゲートウェイのステータスを読み込めませんでした', settings_saved: '設定を保存しました', settings_save_failed: '保存失敗: ', settings_load_failed: '設定の読み込みに失敗: ', settings_saved_pw: '設定を保存 — パスワード保護を有効化、このブラウザはサインイン状態を維持します', settings_saved_pw_updated: '設定を保存 — パスワードを更新しました', // login page (used server-side via /api/i18n/login endpoint) login_title: 'サインイン', login_subtitle: 'パスワードを入力して続行', login_placeholder: 'パスワード', login_btn: 'サインイン', login_invalid_pw: 'パスワードが無効です', login_conn_failed: '接続失敗', dialog_confirm_title: '操作の確認', dialog_prompt_title: '値を入力', dialog_confirm_btn: '確認', discard: '破棄', clear: 'クリア', create: '作成', remove: '削除', project_name_prompt: 'プロジェクト名:', // Sidebar & Tabs tab_chat: 'チャット', tab_tasks: 'タスク', tab_skills: 'スキル', tab_memory: 'メモリ', tab_workspaces: 'スペース', tab_profiles: 'プロファイル', tab_kanban: 'カンバン', kanban_board: 'ボード', kanban_visible_tasks: '表示中のタスク: {0}', kanban_search_tasks: 'タスクを検索', kanban_all_assignees: '担当者: すべて', kanban_all_tenants: 'テナント: すべて', kanban_include_archived: 'アーカイブを含める', kanban_no_matching_tasks: '一致するタスクがありません', kanban_no_data: 'カンバンデータがありません', kanban_work_queue_hint: 'これは Hermes Agent のワークキューです。タスクを作成またはトリアージし、担当者を割り当て、Ready に移動すると、ディスパッチャーがそれをクレームします。', kanban_tasks_hidden_by_filters: 'Tasks hidden by filters', kanban_clear_filters: 'Clear filters', kanban_unavailable: 'カンバンを利用できません', kanban_read_only: '読み取り専用', kanban_empty: '空', kanban_task: 'タスク', kanban_no_description: '説明なし', kanban_refresh: '更新', kanban_status_triage: 'トリアージ', kanban_status_todo: 'ToDo', kanban_status_ready: '準備完了', kanban_status_running: '実行中', kanban_status_blocked: 'ブロック中', kanban_status_done: '完了', kanban_status_original_hint: '実際のステータス: {0}。このダイアログはトリアージ/ToDo/準備完了の編集のみ対応しています。', kanban_comments_count: 'コメント ({0})', kanban_events_count: 'イベント ({0})', kanban_links: 'リンク', kanban_parents: '親', kanban_children: '子', kanban_runs_count: '実行 ({0})', kanban_no_comments: 'コメントなし', kanban_no_events: 'イベントなし', kanban_no_runs: '実行なし', kanban_title: 'タイトル', kanban_description: '説明', kanban_description_placeholder: '任意 — 何をすべきか、受け入れ基準、リンク', kanban_status: 'ステータス', kanban_assignee: '担当者', kanban_assignee_placeholder: '任意 — 空欄で任意のワーカーに', kanban_tenant: 'テナント', kanban_tenant_placeholder: '任意 — プロジェクトまたはチームのスラッグ', kanban_priority: '優先度', kanban_priority_hint: '値が大きいほど優先されます。既定値は 0。', kanban_title_required: 'タイトルは必須です。', kanban_edit_task: 'タスクを編集', kanban_run_dispatcher: 'ディスパッチャーを実行', kanban_run_dispatcher_confirm: 'このボードの「Ready」タスクを取得し、ワーカーサブプロセスを起動します(クリック1回につき最大8件)。続行しますか?', kanban_assignee_profiles_label: 'Hermes プロファイル', kanban_assignee_other_label: 'その他 (CLI レーン / 削除されたプロファイル)', kanban_assignee_unassigned: '— 未割当 (自動実行されません) —', kanban_ready_needs_assignee: '担当者「未割当」+「Ready」を選択しました。ディスパッチャーはこのタスクをスキップします。続行するにはもう一度送信するか、プロファイルを選んでください。', kanban_dispatch_preview_prefix: 'プレビュー:', kanban_dispatch_run_prefix: '実行:', kanban_dispatch_spawned: '起動', kanban_dispatch_promoted: '昇格', kanban_dispatch_reclaimed: '再取得', kanban_dispatch_skipped_unassigned: 'スキップ (担当者なし)', kanban_dispatch_skipped_nonspawnable: 'スキップ (不明なプロファイル)', kanban_dispatch_auto_blocked: '自動ブロック', kanban_dispatch_timed_out: 'タイムアウト', kanban_dispatch_crashed: 'クラッシュ', kanban_new_task: '新規タスク', kanban_view_lanes: 'プロファイル別レーン', kanban_view_consolidated: '統合ビュー', kanban_view_lanes_saved: 'Kanban 表示: プロファイル別レーン', kanban_view_consolidated_saved: 'Kanban 表示: 統合ビュー', kanban_view_update_failed: 'Kanban 表示の更新に失敗しました: ', kanban_add_comment: 'コメント追加', kanban_workspace_kind: 'Workspace kind', kanban_workspace_path: 'Workspace path', kanban_workspace_path_placeholder: 'Path to workspace', kanban_workspace_scratch: 'Scratch', kanban_workspace_worktree: 'Worktree', kanban_workspace_dir: 'Directory', kanban_workspace_path_required: 'Workspace path is required for non-scratch workspaces.', kanban_skills: 'Skills', kanban_skills_placeholder: 'Comma-separated skill names, e.g. python,git', kanban_max_runtime_seconds: 'Max runtime (seconds)', kanban_max_runtime_hint: 'Leave empty for unlimited.', kanban_max_runtime_invalid: 'Max runtime must be a whole number of seconds greater than 0.', kanban_parents_modal: 'Parent dependencies', kanban_parents_placeholder: 'Parent task ID', kanban_add_dependency: 'Add dependency', kanban_remove_dependency: 'Remove dependency', kanban_dependency_placeholder: 'Task ID to link', kanban_dependency_self: 'A task cannot depend on itself', kanban_only_mine: '自分のみ', kanban_bulk_action: '一括操作', kanban_nudge_dispatcher: 'ディスパッチャープレビュー', kanban_stats: '統計', kanban_worker_log: 'ワーカーログ', kanban_block: 'ブロック', kanban_unblock: 'ブロック解除', kanban_back_to_board: 'ボードに戻る', kanban_lanes_by_profile: 'プロファイル別レーン', kanban_new_board: '新規ボード…', kanban_rename_board: '現在のボード名を変更…', kanban_archive_board: '現在のボードをアーカイブ…', kanban_archive_board_confirm: 'ボード "{name}" をアーカイブしますか? タスクはディスク上に残り、kanban/boards/_archived/ から復元できます。', kanban_board_archived: 'ボードをアーカイブしました', kanban_board_name: '名前', kanban_board_slug: 'スラッグ (小文字・ハイフン)', kanban_board_description: '説明 (任意)', kanban_board_icon: 'アイコン (絵文字、任意)', kanban_board_color: '色 (任意)', kanban_board_name_required: '名前は必須です', kanban_board_slug_required: 'スラッグは必須です', kanban_card_complete: '完了', kanban_card_archive: 'アーカイブ', kanban_unassigned: '未割り当て', kanban_status_archived: 'アーカイブ済み', tab_todos: 'ToDo', tab_insights: 'インサイト', tab_dashboard: 'Hermes ダッシュボード', dashboard_loopback_warning: 'ダッシュボードはサーバー上のループバック専用です。サーバー上で閲覧するか、--host 0.0.0.0(安全ではありません)で再起動してください。', tab_logs: 'ログ', tab_settings: '設定', close_menu: 'Close menu', // TODO: translate new_conversation: '新しい会話', filter_conversations: '会話を絞り込み...', markdown_table_filter: 'テーブルをフィルター', markdown_table_sort_column: '列を並べ替え', session_time_unknown: '不明', session_time_minutes_ago: (n) => `${n}分前`, session_time_hours_ago: (n) => `${n}時間前`, session_time_days_ago: (n) => `${n}日前`, session_time_last_week: '1週間前', session_time_bucket_today: '今日', session_time_bucket_yesterday: '昨日', session_time_bucket_this_week: '今週', session_time_bucket_last_week: '先週', session_time_bucket_older: 'それ以前', scheduled_jobs: 'スケジュールジョブ', new_job: '新規ジョブ', loading: '読み込み中...', search_skills: 'スキルを検索...', new_skill: '新規スキル', personal_memory: '個人メモリ', current_task_list: '現在のタスクリスト', // Logs logs_title: 'ログ', logs_file: 'ファイル', logs_tail: '末尾', logs_auto_refresh: '自動更新 (5秒)', logs_wrap: '行を折り返す', logs_copy_all: 'すべてコピー', logs_empty: 'ログはまだありません。', logs_loading: 'ログを読み込み中…', logs_load_failed: 'ログの読み込みに失敗しました', logs_status_idle: 'ログファイルを選択すると最近の行を表示します。', logs_no_mtime: '未書き込み', logs_truncated_hint: '大きなログファイルの末尾を表示しています。メモリ使用量を抑えるため、古いデータは省略されました。', logs_copied: 'ログをコピーしました', logs_severity: '重大度', logs_severity_all: 'すべて', logs_severity_errors: 'エラー', logs_severity_warnings: '警告+', logs_filter_active: '表示中(フィルター有効)', // Insights insights_title: '使用状況分析', insights_sessions: 'セッション', insights_messages: 'メッセージ', insights_tokens: 'トークン', insights_cost: '推定コスト', insights_no_cost: 'N/A', insights_models: 'モデル', insights_activity_by_day: '日別アクティビティ', insights_activity_by_hour: '時間別アクティビティ', insights_peak_hour: 'ピーク: {hour}', insights_token_breakdown: 'トークン内訳', insights_input_tokens: '入力', insights_output_tokens: '出力', insights_total: '合計', insights_daily_tokens: '日別トークン', insights_model_name: 'モデル', insights_model_sessions: 'セッション', insights_model_tokens: 'トークン', insights_model_cost: 'コスト', insights_model_cache: 'キャッシュ', insights_cache_hit: 'プロンプトキャッシュのヒット率', insights_model_share: 'シェア', insights_model_health_title: 'モデルヘルスの比較', insights_model_health_provider: 'プロバイダー', insights_model_health_replacement: '移行ガイド', insights_model_health_cost_per_m: 'コスト / 100万トークン', insights_no_usage_data: '使用データはまだありません', insights_footer: '直近 {days} 日間のデータを表示', insights_skill_usage_title: 'スキル使用状況', insights_skill_usage_sub: 'ツール呼び出し頻度', insights_skill_usage_total: '総呼び出し数', insights_skill_usage_skills_used: '使用スキル数', insights_skill_usage_no_data: 'スキル使用データがまだありません', insights_skill_usage_no_data_hint: '会話でスキルを使用すると、ここに表示されます。', insights_skill_usage_footer: 'データ元: ~/.hermes/skills/', insights_skill_usage_col_skill: 'スキル', insights_skill_usage_col_uses: '使用回数', insights_skill_usage_col_views: '閲覧数', insights_skill_usage_col_share: '使用率', insights_skill_usage_col_patches: 'パッチ', workspace_desc: 'セッション用のワークスペースを追加・切り替えします。', session_meta_messages: (n) => `${n} 件`, session_meta_children: (n) => `${n} 子`, session_meta_segments: (n) => `${n} セグメント`, session_lineage_toggle_hint: '{0} — 以前のコンテキストターンはここに折りたたまれています。クリックして表示/非表示を切り替えます。', session_lineage_static_hint: '{0} — 以前のコンテキストターンはここに折りたたまれています。', session_child_toggle_hint: '{0} — このセッションから作成された子会話です。クリックして表示/非表示を切り替えます。', session_readonly_title_hint: '読み取り専用のインポート済みセッション — {0}', session_lineage_segment_untitled: '無題のセグメント', session_lineage_segment_open: '系譜セグメントを開く', new_profile: '新規プロファイル', transcript: 'トランスクリプト', download_transcript: 'Markdown としてダウンロード', import: 'インポート', export_session_json: 'JSON', export_session_json_tooltip: 'セッション全体をJSONとしてエクスポート', export_session_html: 'HTML', export_session_html_tooltip: '自己完結型のHTMLページとしてエクスポート', import_session_json_tooltip: 'JSONからセッションをインポート', clear_conversation_btn_tooltip: 'この会話のすべてのメッセージをクリア', // Settings detail settings_label_rtl: 'チャットの右から左へのレイアウト', settings_desc_rtl: 'アラビア語やヘブライ語のような言語向けに、チャットメッセージとコンポーザー入力の配置を反転します。チャット領域のみに影響し、サイドバーや他のパネルは左から右のままです。', settings_label_sound: '通知音', settings_desc_sound: 'アシスタントが応答を完了したときに音を鳴らします。', // TTS (#499) tts_listen: '読み上げ', tts_not_supported: 'このブラウザは音声合成に対応していません。', settings_label_tts: '応答の読み上げ (TTS)', settings_desc_tts: 'アシスタントの各メッセージにスピーカーボタンを表示し、ブラウザの音声合成で読み上げます。', settings_label_tts_auto_read: '応答を自動で読み上げ', settings_desc_tts_auto_read: '新しいアシスタント応答が完了するたびに自動で読み上げます。入力中は一時停止します。', // Composer voice-mode pref (#1488) settings_label_voice_mode: 'ハンズフリー音声モードのボタン', settings_desc_voice_mode: '音声波形ボタンをディクテーションマイクの隣に表示します。発話の合間に自動送信し、返答を読み上げます。音声認識と TTS の両方をサポートするブラウザが必要です。', settings_label_raw_audio: '文字起こしせずに生の音声を送信', settings_desc_raw_audio: '音声をテキストに変換せず、元の音声ファイルをそのままエージェントに送信します。エージェントは文字起こしをするか、生の音声を処理(感情分析、背景ノイズ、カスタムSTT)できます。Telegramの音声メッセージと同様の動作です。', voice_send_raw: '生の音声を送信', voice_raw_attached: '音声を添付しました。送信するかテキストを追加してください。', settings_label_tts_voice: '声', settings_desc_tts_voice: '優先する声。ブラウザで利用可能な声から選択されます。', settings_label_tts_rate: '読み上げ速度', settings_label_tts_pitch: '読み上げピッチ', settings_label_tts_engine: 'TTSエンジン', settings_desc_tts_engine: '音声エンジンを選択してください。Edge TTSはサーバー経由でMicrosoftのニューラル音声を使用します。', settings_label_notifications: 'ブラウザ通知', settings_desc_notifications: 'アプリがバックグラウンドの間に応答が完了したらシステム通知を表示します。', notifications_enable_btn: '通知を有効化', notifications_test_btn: 'テスト送信', notifications_permission_status: (status) => `権限: ${status}`, notifications_enabled_toast: '通知を有効にしました。', notifications_denied: 'このブラウザでは通知がブロックされています。ブラウザの設定で通知を有効にしてください。', notifications_unsupported: 'このブラウザは通知に対応していません。', settings_desc_token_usage: 'アシスタント応答の下に入力/出力トークン数を表示します。/usage でも切替可能。', settings_label_api_redact: 'API 応答内の機密データをマスク', settings_desc_api_redact: 'セルフホスト利用者は透明性のため無効化できます (共有インスタンスでは非推奨)。', settings_sidebar_density_compact: 'コンパクト', settings_sidebar_density_detailed: '詳細', settings_desc_sidebar_density: '左サイドバーのセッション一覧に表示するメタデータ量を制御します。', settings_label_auto_title_refresh: 'タイトル自動更新', settings_auto_title_refresh_off: 'オフ', settings_auto_title_refresh_5: '5 回ごと', settings_auto_title_refresh_10: '10 回ごと', settings_auto_title_refresh_20: '20 回ごと', settings_desc_auto_title_refresh: '最新のやり取りに基づいてセッションタイトルを自動再生成し、会話の進行に合わせて適切に保ちます。LLM タイトル生成モデルの設定が必要です。', settings_desc_external_sessions: 'CLI、Telegram、Discord、Slack その他のチャネルからの会話をセッション一覧に表示します。クリックでインポートして続行できます。', settings_desc_claude_code_sessions: 'Show Claude Code imported sessions in the sidebar, or hide them while leaving other external sessions visible.', settings_desc_cron_sessions: 'Cronジョブの出力をサイドバーの会話として表示します。WebUI以外のセッションが有効な場合のみ機能します。デフォルトはオフ。高頻度のジョブはサイドバーを溢れさせる可能性があります。', settings_desc_webhook_sessions: 'Webhook実行をサイドバーの会話として表示します。WebUI以外のセッションが有効な場合のみ機能します。デフォルトはオフ。高頻度のルートはサイドバーを溢れさせる可能性があります。', settings_desc_previous_messaging_sessions: 'reset または compression によって置き換えられた以前の Discord、Telegram、Slack、Weixin セッションを表示します。', settings_desc_sync_insights: 'WebUI のトークン使用量を state.db にミラーし、hermes /insights にブラウザセッションのデータを含めます。デフォルトはオフ。', settings_desc_check_updates: 'WebUI または Agent の新しいバージョンが利用可能な時にバナーを表示します。バックグラウンドで定期的に git fetch を実行します。', settings_desc_ignore_agent_updates: 'WebUIのアップデート確認は継続しますが、Agentのアップデート通知を非表示にし、Agentのアップデート取得をスキップします。', settings_desc_whats_new_summary: "What's Newの動作を、未加工の差分を最初に開く代わりに短い人間が読みやすい要約を生成するよう変更します。通常の差分比較は要約の後も引き続き利用できます。", settings_desc_bot_name: 'デフォルトプロファイルでのみ使用されます。他のプロファイルはそれぞれのプロファイル名を使用します。', settings_desc_password: '新しいパスワードを入力すると設定または変更します。空欄なら現在の設定を維持。', password_placeholder: '新しいパスワードを入力…', password_env_var_locked: '現在 HERMES_WEBUI_PASSWORD 環境変数が設定されており優先されます。ここで管理するには変数を解除してサーバーを再起動してください。', password_env_var_locked_placeholder: 'ロック中: HERMES_WEBUI_PASSWORD 環境変数が設定されています', disable_auth: '認証を無効化', sign_out: 'サインアウト', settings_label_shutdown: 'Hermes WebUI サーバーを停止', settings_desc_shutdown_before_cmd: 'ローカルの WebUI サーバーを正常に停止します。', settings_desc_shutdown_between_cmds: ' で起動していて、ターミナルに切り替えずに停止したいときに便利です。再度 WebUI にアクセスするにはサーバー(', settings_desc_shutdown_after_cmd: ' またはネイティブアプリ)を再起動する必要があります。', settings_btn_shutdown: 'サーバーを停止', settings_shutdown_confirm_title: 'Hermes WebUI を停止', settings_shutdown_confirm_message: 'Hermes WebUI サーバーを停止しますか?', settings_shutdown_confirm_btn: '停止', settings_shutdown_stopped_message: 'サーバーは停止しました。このタブを閉じて構いません。', // Providers panel providers_tab_title: 'プロバイダ', providers_section_title: 'プロバイダ', providers_section_meta: 'AI プロバイダの APIキー を管理します。変更は即時反映されます。', providers_status_configured: 'APIキー設定済み', providers_status_not_configured: 'APIキーなし', providers_status_oauth: 'OAuth(認証済み)', providers_status_api_key: 'APIキー', providers_status_model: 'モデル', providers_status_not_configured_label: '未設定', providers_oauth_hint: 'OAuth 認証済み。APIキーは不要です。', providers_oauth_config_yaml_hint: 'config.yaml でトークンが設定されています。更新するには config.yaml の providers セクションを編集するか hermes auth を実行してください。', providers_oauth_not_configured_hint: '未認証です。ターミナルで hermes auth を実行してこのプロバイダを設定してください。', providers_save: '保存', providers_refresh_models: 'モデルを更新', providers_refreshing: '更新中…', providers_models_refreshed: 'モデルを更新しました', providers_remove: '削除', providers_saving: '保存中…', providers_removing: '削除中…', providers_enter_key: 'APIキーを入力してください', providers_empty: '設定可能なプロバイダが見つかりません。', providers_key_updated: 'APIキーを保存しました', providers_key_removed: 'APIキーを削除しました', providers_key_placeholder_new: 'sk-...', providers_key_placeholder_replace: '置き換える新しいキーを入力…', provider_quota_title: 'アクティブなプロバイダーのクォータ', provider_quota_active_provider: 'アクティブなプロバイダー', provider_quota_last_checked_after_refresh: '更新後に最終確認', provider_quota_last_checked: '最終確認 {0}', provider_quota_refresh_usage: '使用量を更新', provider_quota_refreshing: '更新中...', provider_quota_refresh_title: 'プロバイダーの使用制限を今すぐ更新', provider_quota_refresh_succeeded: 'プロバイダーの使用量を更新しました', provider_quota_refresh_failed: 'プロバイダーの使用量の更新に失敗しました', provider_quota_session_limit: '5時間制限', provider_quota_weekly_limit: '週間制限', provider_quota_window_fallback: 'ウィンドウ', provider_quota_metric_remaining: '残り', provider_quota_metric_used: '使用済み', provider_quota_metric_limit: '制限', provider_quota_status_available: '利用可能', provider_quota_status_exhausted: '使い切り済み', provider_quota_status_unavailable: '利用不可', provider_quota_status_failed: '失敗', provider_quota_status_checked: '確認済み', provider_quota_status_no_key: 'キーなし', provider_quota_status_invalid_key: '無効なキー', provider_quota_status_unsupported: '未対応', provider_quota_used_meta: '{0} 使用済み', provider_quota_resets_meta: '{0} にリセット', provider_quota_credential_pool: '認証情報プール', provider_quota_credential_label: '認証情報 {0}', provider_quota_pool_plans: 'プラン: {0}', provider_quota_pool_no_windows: 'アカウント制限ウィンドウは報告されていません。', provider_quota_account_limits_loaded: 'アカウント制限を読み込みました。', provider_quota_unavailable: 'クォータ状態は利用できません', provider_quota_retry_after: '{0} 以降に再試行', provider_quota_pool_summary_available: '{0}/{1} 利用可能', provider_quota_pool_summary_exhausted: '{0} 使い切り済み', provider_quota_pool_summary_failed: '{0} 失敗', provider_quota_pool_summary_checked: '{0} 確認済み', provider_cost_budget_label: 'Monthly budget', provider_cost_budget_placeholder: 'e.g. 50.00', provider_cost_budget_set: 'Set', provider_cost_budget_clear: 'Clear', provider_cost_budget_pct: '{0}% of ${1} budget (monthly pace)', provider_cost_budget_save_failed: 'Failed to save budget', cancel: 'キャンセル', create_job: 'ジョブを作成', save_skill: 'スキルを保存', editing: '編集中', // Empty state empty_title: '何をお手伝いしましょう?', empty_subtitle: '何でも質問する、コマンド実行、ファイル探索、スケジュールタスク管理ができます。', suggest_files: 'このワークスペースにあるファイルは?', suggest_schedule: '今日のスケジュールは?', suggest_plan: '小さなプロジェクトの計画を手伝って。', // onboarding onboarding_badge: '初回起動', onboarding_title: 'Hermes Web UI へようこそ', onboarding_lead: 'クイックガイドで Hermes を確認し、プロバイダ設定を保存し、ワークスペースとモデルを選択し、必要ならパスワードでアプリを保護します。', onboarding_back: '戻る', onboarding_continue: '続ける', onboarding_skip: 'セットアップをスキップ', onboarding_skipped: 'セットアップをスキップ — 既存設定を使用します。', onboarding_open: 'Hermes を開く', onboarding_step_system_title: 'システム確認', onboarding_step_system_desc: 'Hermes Agent と設定の可視性を確認します。', onboarding_step_setup_title: 'プロバイダ設定', onboarding_step_setup_desc: '最低限の Hermes プロバイダ設定を保存します。', onboarding_step_workspace_title: 'ワークスペース + モデル', onboarding_step_workspace_desc: '新規セッションとチャットのデフォルトを選択します。', onboarding_step_password_title: 'パスワード (任意)', onboarding_step_password_desc: '共有前に Web UI を保護します。', onboarding_step_finish_title: '完了', onboarding_step_finish_desc: '確認してアプリに入ります。', onboarding_notice_system_ready: 'Web UI から Hermes Agent へ到達できそうです。', onboarding_notice_system_unavailable: 'Hermes Agent はまだ完全には利用できません。Bootstrap でインストールできますが、プロバイダ設定にはターミナルが必要な場合があります。', onboarding_check_agent: 'Hermes Agent', onboarding_check_agent_ready: '検出済み・インポート可能', onboarding_check_agent_missing: '不在または部分的にしかインポートできません', onboarding_check_password: 'パスワード', onboarding_check_password_enabled: '既に有効', onboarding_check_password_disabled: '未有効', onboarding_check_provider: 'プロバイダ設定', onboarding_check_provider_ready: 'チャット可能', onboarding_check_provider_partial: '保存済みだが不完全', onboarding_check_provider_pending: '検証が必要', onboarding_config_file: '設定ファイル:', onboarding_env_file: '.env ファイル:', onboarding_unknown: '不明', onboarding_current_provider: '現在の設定:', onboarding_missing_imports: '不足しているインポート:', onboarding_notice_setup_required: 'シンプルなプロバイダ経路をここで選んでください。高度な OAuth フローは現状 Hermes CLI 側で扱います。', onboarding_notice_setup_already_ready: '動作する Hermes プロバイダ設定が既に検出されています。維持するか、ここで置き換えできます。', onboarding_oauth_provider_ready_title: 'プロバイダは認証済み', onboarding_oauth_provider_ready_body: 'このインスタンスは Hermes CLI で設定された OAuth プロバイダ ({provider}) を使用します。APIキーは不要 — 続けるをクリックしてセットアップを完了してください。', onboarding_oauth_provider_not_ready_title: 'OAuth プロバイダは未認証', onboarding_oauth_provider_not_ready_body: 'このインスタンスは {provider} を使用しますが、これは APIキー ではなく OAuth を使用します。ターミナルで hermes auth または hermes model を実行して認証し、Web UI を再読み込みしてください。', onboarding_oauth_switch_hint: 'または下から別のプロバイダを選び、APIキー設定に切り替え:', oauth_login_codex: 'Codex (ChatGPT) でログイン', oauth_codex_step1: 'ステップ 1: この URL にアクセスしてコードを入力', oauth_codex_step2: 'ステップ 2: ページにこのコードを入力', oauth_codex_polling: '認可待ち...', oauth_codex_success: 'Codex OAuth ログインに成功しました!', oauth_codex_error: 'OAuth ログインに失敗しました', oauth_codex_expired: 'コードの有効期限が切れました。もう一度お試しください', onboarding_notice_workspace: 'これらの値は通常アプリと同じ設定 API を使用します。', onboarding_workspace_label: 'ワークスペース', onboarding_workspace_or_path: 'またはワークスペースのパスを入力', onboarding_workspace_placeholder: '/home/ユーザー名/workspace', onboarding_provider_label: 'セットアップモード', onboarding_quick_setup_badge: 'クイックセットアップ', provider_category_easy_start: '簡単スタート', provider_category_self_hosted: 'オープン / セルフホスト', provider_category_specialized: '専門用途', onboarding_api_key_label: 'APIキー', onboarding_api_key_placeholder: '空欄で既存の保存済みキーを維持', onboarding_api_key_label_optional: 'APIキー (任意)', onboarding_api_key_placeholder_optional: 'キー不要のサーバーの場合は空欄にしてください', onboarding_api_key_help_keyless: 'LM Studio / Ollama / vLLM の多くはキーなしで動作します。認証が不要なサーバーの場合は空欄にしてください。『接続テスト』で確認できます。', onboarding_api_key_help_prefix: 'Hermes の .env ファイルにシークレットとして保存されます — 使用変数:', onboarding_base_url_label: 'ベース URL', onboarding_base_url_placeholder: 'https://your-endpoint.example/v1', onboarding_base_url_help: 'OpenAI 互換ルーター、セルフホストサーバー、LiteLLM、Ollama、LM Studio、vLLM、または同様のエンドポイントで使用してください。', onboarding_model_label: 'デフォルトモデル', onboarding_workspace_help: 'セットアップ完了後の新規チャットで Hermes が使用するモデルを選択してください。', onboarding_custom_model_placeholder: 'モデル名を入力', onboarding_custom_model_help: 'カスタムエンドポイントの場合、サーバーが期待する正確なモデル ID を入力してください。', onboarding_notice_password_enabled: 'パスワードは既に設定済みです。置き換える場合のみ新しいものを入力してください。', onboarding_notice_password_recommended: '任意ですが、localhost 以外で UI を公開する場合は推奨します。', onboarding_password_label: 'パスワード (任意)', onboarding_password_placeholder: '空欄でスキップ', onboarding_password_help: 'パスワードは既存の設定 API 経由で保存され、サーバー側でハッシュ化されます。', onboarding_notice_finish: '後で設定からいつでも変更できます。', onboarding_not_set: '未設定', onboarding_password_will_enable: '有効化されます', onboarding_password_will_replace: '置き換えられます', onboarding_password_keep_existing: '現在のパスワードを維持', onboarding_password_remains_disabled: '無効のまま', onboarding_password_skipped: '今回はスキップ', onboarding_finish_help: '完了すると onboarding_completed が設定に保存され、通常アプリへ入ります。', onboarding_error_choose_workspace: '続行する前にワークスペースを選択してください。', onboarding_error_choose_model: '続行する前にモデルを選択してください。', onboarding_error_provider_required: '続行する前にセットアップモードを選択してください。', onboarding_error_base_url_required: 'カスタムエンドポイントにはベース URL が必要です。', onboarding_probe_test_button: '接続テスト', onboarding_probe_probing: '接続をテスト中…', onboarding_probe_ok: '接続成功。{n} 個のモデルが利用可能です。', onboarding_probe_error_generic: '設定されたベース URL に到達できません。', onboarding_probe_error_invalid_url: 'ベース URL は http:// または https:// で始まる必要があります。', onboarding_probe_error_dns: 'ホストを名前解決できませんでした。URL を確認するか、ホストの IP アドレスを使用してください。', onboarding_probe_error_connect_refused: '接続が拒否されました。サーバーが起動していない可能性があります。Docker 内からは localhost ではなくホスト IP を試してください。', onboarding_probe_error_timeout: '時間内に応答がありません。サーバーが起動しているか、URL が正しいか確認してください。', onboarding_probe_error_http_4xx: 'クライアントエラーが返されました。認証設定と URL パス (通常は /v1) を確認してください。', onboarding_probe_error_http_5xx: 'サーバーエラーが返されました。LM Studio / Ollama のログを確認してください。', onboarding_probe_error_parse: 'モデル一覧が期待する形式で返されませんでした。URL が OpenAI 互換 API のルートを指しているか確認してください。', onboarding_probe_error_unreachable: '設定されたベース URL に到達できません。', onboarding_error_probe_failed: 'ベース URL を検証できませんでした。', onboarding_error_workspace_required: 'ワークスペースは必須です。', onboarding_error_model_required: 'モデルは必須です。', onboarding_complete: 'オンボーディング完了', // panel/runtime i18n error_prefix: 'エラー: ', default: 'デフォルト', search: '検索', not_available: 'N/A', never: 'なし', add: '追加', add_failed: '追加失敗: ', remove_failed: '削除失敗: ', switch_failed: '切替失敗: ', name_required: '名前は必須です', content_required: '内容は必須です', view: '表示', dismiss: '閉じる', disable: '無効化', cron_no_jobs: 'スケジュールジョブが見つかりません。', cron_status_off: 'オフ', cron_status_paused: '一時停止', cron_status_error: 'エラー', cron_status_active: '有効', cron_status_running: '実行中…', cron_status_needs_attention: '要対応', cron_attention_desc: 'この繰り返しジョブには次回実行時刻がありません。スケジューラが次回実行時刻を計算できなかった可能性があります。', cron_attention_croniter_hint: 'Gateway ランタイムに croniter パッケージが不足している可能性があります。cron サポート付きで Gateway を再起動し、ジョブを再開してください。', cron_attention_resume: '再開して再計算', cron_jobs_project: 'Cronジョブ', cron_attention_run_once: '今すぐ1回実行', cron_attention_copy_diagnostics: '診断情報をコピー', cron_diagnostics_copied: 'Cron 診断情報をコピーしました', cron_next: '次回', cron_last: '前回', cron_run_now: '今すぐ実行', cron_pause: '一時停止', cron_resume: '再開', cron_job_name_placeholder: 'ジョブ名', cron_schedule_placeholder: 'スケジュール', cron_prompt_placeholder: 'プロンプト', cron_last_output: '前回の出力', cron_expand_prompt: 'プロンプトを展開', cron_collapse_prompt: 'プロンプトを折りたたむ', cron_expand_output: '出力を展開', cron_collapse_output: '出力を折りたたむ', cron_mode_agent: 'エージェント', cron_mode_script: 'スクリプト', cron_mode_label: 'モード', cron_script_job_banner: 'スケジュールでスクリプトを実行し、stdout を配信先へ送ります。エージェント・プロンプト・スキルは使いません。', cron_script_card_title: 'スクリプト', cron_script_output: 'スクリプト出力', cron_script_path_label: 'スクリプトパス', cron_script_path_hint: '絶対パスでない限り ~/.hermes/scripts/ から解決されます。動作を変えるにはサーバー上のスクリプトを編集してください。', cron_script_badge_title: 'スクリプトジョブ(エージェントなし)', cron_workdir_label: '作業ディレクトリ', cron_view_full_output: '全出力を表示', cron_all_runs: 'すべての実行', cron_hide_runs: '実行履歴を隠す', cron_no_runs_yet: '(まだ実行されていません)', cron_schedule_required_example: 'スケジュールは必須です (例: "0 9 * * *" または "every 1h")', cron_schedule_required: 'スケジュールは必須です', cron_prompt_required: 'プロンプトは必須です', cron_job_created: 'ジョブを作成しました', cron_duplicate: '複製', cron_duplicated: 'ジョブを複製しました (一時停止)', cron_job_triggered: 'ジョブを起動しました', cron_job_paused: 'ジョブを一時停止しました', cron_job_resumed: 'ジョブを再開しました', cron_job_updated: 'ジョブを更新しました', cron_model_label: 'モデルの上書き', cron_model_hint: 'このジョブのデフォルトモデルを上書きします。', cron_model_no_agent_hint: 'No-agent jobs run the configured script directly; model is unused.', cron_model_use_default: 'デフォルト(プロファイル/システムの既定を使用)', cron_delete_confirm_title: 'Cronジョブを削除', cron_delete_confirm_message: 'この操作は取り消せません。', cron_job_deleted: 'ジョブを削除しました', cron_completion_status: (name, status) => `Cron「${name}」${status}`, status_failed: '失敗', status_completed: '完了', todos_no_active: 'このセッションにアクティブなタスクリストがありません。', clear_conversation_title: '会話をクリア', clear_conversation_message: 'すべてのメッセージをクリアしますか? この操作は取り消せません。', clear_failed: 'クリア失敗: ', skills_no_match: '一致するスキルがありません。', skill_enabled: '有効', skill_disabled: '無効', skill_toggle_failed: 'スキルの切り替えに失敗しました: ', linked_files: 'リンクされたファイル', skill_load_failed: 'スキルを読み込めませんでした: ', skill_file_load_failed: 'ファイルを読み込めませんでした: ', skill_name_required: 'スキル名は必須です', skill_updated: 'スキルを更新しました', skill_created: 'スキルを作成しました', skill_deleted: 'スキルを削除しました', skill_delete_confirm: 'スキル "{0}" を削除しますか?', skills_empty_title: 'スキルを選択', skills_empty_sub: 'サイドバーからスキルを選んで内容を表示するか、新しいスキルを作成してください。', skills_edit: '編集', skills_delete: '削除', skills_back_to: '{0} に戻る', tasks_empty_title: 'スケジュールジョブを選択', tasks_empty_sub: 'サイドバーからジョブを選んで詳細と実行履歴を表示するか、新規作成してください。', workspaces_empty_title: 'スペースを選択', workspaces_empty_sub: 'サイドバーからスペースを選んでファイルと設定を表示するか、新しく追加してください。', profiles_empty_title: 'プロファイルを選択', profiles_empty_sub: 'サイドバーからエージェントプロファイルを選んで設定を表示・編集するか、新規作成してください。', memory_notes_label: 'メモリ (ノート)', memory_saved: 'メモリを保存しました', my_notes: 'マイノート', user_profile: 'ユーザープロファイル', external_notes_sources: 'サードパーティのノート', external_notes_empty: 'ノートまたはナレッジ用の MCP ソースはまだ表示されていません。Joplin、Obsidian、Notion、llm-wiki、または別のノートサーバーを設定するとここに表示されます。', external_notes_auto_recall_hint: '自動セッションリコールは変更されません。このドロワーには、設定済みソースと利用可能な読み取り/検索ツールだけが表示されます。', external_notes_no_tools: 'このソースで利用できる読み取り/検索ツールは現在表示されていません。', external_notes_tool_count: (count) => `${count} 個のノートツールが利用可能`, external_notes_configured_hint: 'この設定済みソースからツール名が想定されています。WebUI ランタイムが公開するとライブスキーマが表示されます。', external_notes_recent_ai: 'AI が最近使用', external_notes_auto: '自動', external_notes_recent_ai_reason: '自動リコール', external_notes_search_placeholder: 'ノートを検索…', external_notes_search_empty: '設定済みのノートソースを検索すると、ここにプレビューが表示されます。', source_active: 'アクティブ', source_configured: '設定済み', no_notes_yet: 'まだノートはありません。', no_profile_yet: 'まだプロファイルはありません。', agent_soul: 'エージェントソウル', no_soul_yet: 'ソウルがまだ定義されていません。', workspace_choose_path: 'ワークスペースのパスを選択', workspace_choose_path_meta: '検証済みパスを追加してこの会話を切り替え', workspace_manage: 'ワークスペースを管理', workspace_manage_meta: 'スペースパネルを開く', workspace_use_title: '現在のセッションで使用', workspace_use: '使用', workspace_add_path_placeholder: 'ワークスペースパスを追加 (例: /home/user/my-project)', workspace_paths_validated_hint: '保存前に既存ディレクトリとして検証されます。', workspace_drag_hint: 'ドラッグして並び替え', workspace_reorder_failed: '並び替え失敗', workspace_added: 'ワークスペースを追加しました', workspace_renamed: 'ワークスペース名を変更しました', workspace_remove_confirm_title: 'ワークスペースを削除', workspace_remove_confirm_message: (path) => `"${path}" を削除しますか?`, workspace_removed: 'ワークスペースを削除しました', workspace_switch_prompt_title: 'ワークスペースを切り替え', workspace_switch_prompt_message: '追加してこの会話を切り替える絶対パスを入力してください。', workspace_switch_prompt_confirm: '切り替え', workspace_switch_prompt_placeholder: '/Users/ユーザー名/project', workspace_not_added: 'ワークスペースは追加されませんでした', workspace_already_saved: 'ワークスペースは既に保存済み — 一覧から選択してください', workspace_busy_switch: 'エージェント実行中はワークスペースを切り替えできません', discard_file_edits_title: 'ファイル編集を破棄しますか?', discard_file_edits_message: 'ワークスペース切替でプレビュー内の未保存編集が破棄されます。', workspace_switched_to: (name) => `${name} に切り替えました`, profiles_no_profiles: 'プロファイルが見つかりません。', profile_api_keys_configured: 'APIキー設定済み', profile_gateway_running: 'Gateway 実行中', profile_gateway_stopped: 'Gateway 停止中', profile_active: 'アクティブ', profile_no_configuration: '設定なし', profile_skill_count: (count) => `${count} 件のスキル`, profile_use: '使用', profile_switch_title: 'このプロファイルに切り替え', profile_delete_title: 'このプロファイルを削除', profile_default_label: '(デフォルト)', profile_name_placeholder: 'プロファイル名 (小文字 a-z 0-9 ハイフン)', profile_clone_label: 'アクティブプロファイルから設定をコピー', profile_model_label: 'モデル / プロバイダー', profile_model_hint: 'この新しいプロファイルで使う設定済みプロバイダーとモデルを選択します。', profile_model_use_default: 'アクティブプロファイルのデフォルトを使用', profile_base_url_placeholder: 'ベース URL (任意、例: http://localhost:11434)', profile_api_key_placeholder: 'APIキー (任意)', manage_profiles: 'プロファイルを管理', profiles_load_failed: 'プロファイルの読み込みに失敗しました', profile_switched_new_conversation: (name) => `プロファイルを切替: ${name} — 新しい会話を開始しました`, profile_switched: (name) => `プロファイルを切替: ${name}`, profile_name_rule: '小文字、数字、ハイフン、アンダースコアのみ', profile_base_url_rule: 'ベース URL は http:// または https:// で始める必要があります', profile_created: (name) => `プロファイルを作成: ${name}`, profile_delete_confirm_title: (name) => `プロファイル "${name}" を削除しますか?`, profile_delete_confirm_message: 'このプロファイルのすべてのセッション、設定、スキル、メモリが完全に削除されます。この操作は取り消せません。', profile_deleted: (name) => `プロファイルを削除: ${name}`, active_conversation_none: 'アクティブな会話が選択されていません。', active_conversation_meta: (title, count) => `${title} · ${count} 件のメッセージ`, settings_unsaved_changes: '未保存の変更があります。', sign_out_failed: 'サインアウト失敗: ', disable_auth_confirm_title: 'パスワード保護を無効化', disable_auth_confirm_message: '誰でもこのインスタンスにアクセスできるようになります。', auth_disabled: '認証無効化 — パスワード保護を解除しました', disable_auth_failed: '認証の無効化に失敗: ', current_password_label: '現在のパスワード', current_password_placeholder: '現在のパスワードを入力…', current_password_required: '認証の変更または無効化には現在のパスワードが必要です。', current_password_incorrect: '現在のパスワードが正しくありません。', disable_auth_typed_confirm: '確認のため DISABLE AUTH と入力', auth_status_password: 'パスワード認証', auth_status_passkey_only: 'パスキーのみ', auth_status_unauthenticated: '未認証', auth_warning_badge: '認証無効', auth_disabled_warning_message: 'このインスタンスは認証なしでアクセスできます。', auth_acknowledged_label: 'このリスクを確認しました。ナビゲーション警告を控えめに表示します。', auth_ack_save_failed: '確認状態の更新に失敗しました: ', bg_error_single: (title) => `"${title}" でエラーが発生しました`, bg_error_multi: (count) => `${count} 件のセッションでエラーが発生しました`, // skill form skill_name: '名前', skill_category: 'カテゴリ', skill_category_placeholder: '任意、例: devops', skill_content: 'SKILL.md の内容', skill_content_placeholder: 'YAML フロントマター + Markdown 本文', skill_rename_not_supported: 'スキルの名前変更には対応していません。新しいスキルを作成し、古いものを削除してください。', skill_metadata: 'メタデータ', // cron form cron_name_label: '名前', cron_name_placeholder: '任意', cron_schedule_label: 'スケジュール', cron_schedule_preset_label: 'プリセット', cron_schedule_preset_hourly: '毎時', cron_schedule_preset_daily: '毎日', cron_schedule_preset_weekdays: '平日', cron_schedule_preset_weekly: '毎週', cron_schedule_preset_monthly: '毎月', cron_schedule_preset_custom: 'カスタム', cron_schedule_hint: "繰り返し実行には 'every 1h' または Cron 式を使います。'30m' のような期間だけの指定は 1 回だけ実行されます。", cron_schedule_once_warning: "'30m' のような期間指定は 1 回だけ実行され、実行後に削除されます。繰り返すには 'every 30m' を使ってください。", cron_prompt_label: 'プロンプト', cron_deliver_label: '出力先', cron_deliver_local: 'ローカル (出力を保存のみ)', cron_deliver_custom: 'カスタム配信先', cron_profile_label: 'プロフィール', cron_profile_server_default: 'サーバーデフォルト', cron_profile_server_default_hint: '実行時に WebUI サーバーのデフォルトプロフィールを使用します。プロフィールのない既存ジョブはこの従来の動作を維持します。', cron_toast_notifications_label: '完了トースト', cron_toast_notifications_hint: 'この Cron が完了したときにトーストを表示します。オフでもタスクバッジと新規実行マーカーは更新されます。', cron_toast_notifications_enabled: '有効', cron_toast_notifications_disabled: '無効', cron_skills_label: 'スキル', cron_skills_placeholder: 'スキルを追加 (任意)…', cron_skills_edit_hint: 'スキル一覧は作成後に編集できません。', // workspace form workspace_name_label: '名前', workspace_name_placeholder: '任意の表示名', workspace_path_label: 'パス', workspace_path_required: 'パスは必須です', workspace_path_readonly: 'パスは変更できません。名前変更のみ可能です。', workspace_new_title: '新規スペース', // profile form profile_name_label: '名前', profile_base_url_label: 'ベース URL', profile_api_key_label: 'APIキー', cmd_yolo: 'YOLO モード切替 (承認スキップ)', yolo_no_session: 'アクティブなセッションがありません', yolo_enabled: '⚡ YOLO モード ON — このセッションは承認をスキップ', yolo_disabled: 'YOLO モード OFF', yolo_pill_label: 'YOLO', yolo_pill_title_active: 'YOLO モード有効 — クリックで無効化', approval_skip_all: '⚡ このセッションはすべてスキップ', approval_skip_all_title: 'このセッションのすべての承認プロンプトをスキップ', // composer action tooltips composer_send: 'メッセージを送信', composer_queue: 'メッセージをキュー', composer_interrupt: '中断して送信', composer_steer: '現在の応答をステア', composer_stop: '生成を停止', composer_disabled_clarify: '確認要求に応答してください', composer_disabled_compression: '圧縮の完了待ち', composer_compression_will_queue: 'メッセージを入力してください — 圧縮完了後にキューに追加され、送信されます', composer_disabled_empty: '送信するメッセージを入力してください', composer_mobile_workspace: 'ワークスペース', composer_mobile_model: 'モデル', composer_mobile_quota: 'クォータ', composer_mobile_reasoning: '思考', composer_mobile_context: 'コンテキスト', media_audio_label: '音声', media_svg_label: '図', media_video_label: '動画', media_download: 'ダウンロード', csv_loading: 'CSV を読み込み中', csv_too_large: 'CSV ファイルが大きすぎてインライン表示できません', csv_no_data: 'CSV ファイルのデータが不足しているためテーブル表示できません', csv_error: 'CSV ファイルの読み込みに失敗しました', csv_header_note: '先頭行をテーブルヘッダーとして表示', excalidraw_loading: '図を読み込み中', excalidraw_too_large: 'Excalidraw ファイルが大きすぎてインライン表示できません', excalidraw_invalid: '無効な Excalidraw ファイル形式', excalidraw_error: 'Excalidraw ファイルの読み込みに失敗しました', excalidraw_label: '図', excalidraw_download: 'ダウンロード', excalidraw_empty: '空の図', excalidraw_render_error: '図の描画に失敗しました', excalidraw_simplified: '簡略化された SVG プレビュー — Excalidraw キャンバスとピクセル単位では一致しません', // ── Checkpoints / Rollback ── checkpoint_title: 'チェックポイント', checkpoint_empty: 'このワークスペースのチェックポイントが見つかりません。', checkpoint_loading: 'チェックポイントを読み込み中…', checkpoint_error: 'チェックポイントの読み込みに失敗しました', checkpoint_date: '日時', checkpoint_message: 'メッセージ', checkpoint_files: 'ファイル', checkpoint_view_diff: '差分を表示', checkpoint_restore: '復元', checkpoint_restore_confirm_title: 'チェックポイントを復元しますか?', checkpoint_restore_confirm_message: (ckpt) => `ワークスペースをチェックポイント "${ckpt}" に復元しますか? ファイルが保存版で上書きされます。このチェックポイント後に追加されたファイルは削除されません。`, checkpoint_restored: 'チェックポイントを復元しました', checkpoint_diff_title: 'チェックポイントの変更内容', checkpoint_diff_no_changes: 'このチェックポイントと現在のワークスペースの間に差分はありません。', checkpoint_diff_files_changed: (n) => `${n} 件のファイルが変更されました`, outline_title: 'アウトライン', outline_empty: 'まだ質問はありません。', outline_loading: '読み込み中…', wiki_browse: 'Browse wiki', wiki_search_placeholder: 'Search pages...', wiki_no_pages: 'No wiki pages found', wiki_not_configured: 'Wiki not configured', }, ru: { offline_title: 'Соединение потеряно', offline_browser_detail: 'Браузер сообщает, что это устройство офлайн.', offline_network_detail: 'Hermes сейчас недоступен из этого браузера.', offline_autorefresh: 'Я автоматически обновлю страницу, когда Hermes снова станет доступен.', offline_check_now: 'Проверить сейчас', offline_checking: 'Проверка…', offline_stream_waiting: 'Соединение потеряно. Ожидаю обновления…', _lang: 'ru', _label: 'Русский', _speech: 'ru-RU', cancelling: 'Отменяю…', cancel_failed: 'Не удалось отменить: ', mic_denied: 'Доступ к микрофону запрещён. Проверьте разрешения браузера.', mic_insecure_origin: 'Voice input needs a secure connection. Open Hermes over HTTPS or from localhost to use the microphone.', // TODO: translate mic_no_speech: 'Речь не распознана. Попробуйте ещё раз.', mic_network: 'Распознавание речи недоступно.', mic_error: 'Ошибка ввода речи: ', // Composer voice buttons (#1488) voice_dictate: 'Диктовка', voice_dictate_active: 'Остановить диктовку', voice_recording_active: 'Остановить запись', voice_mode_toggle: 'Голосовой режим', voice_mode_toggle_active: 'Выйти из голосового режима', voice_listening: 'Слушаю…', voice_speaking: 'Говорю…', voice_thinking: 'Думаю…', voice_error: 'Голосовой ввод не поддерживается в этом браузере', voice_mode_active: 'Голосовой режим включён', voice_mode_off: 'Голосовой режим выключен', session_imported: 'Сеанс импортирован', import_failed: 'Не удалось импортировать: ', import_invalid_json: 'Неверный JSON', image_pasted: 'Изображение вставлено: ', text_pasted: 'Вставленный текст прикреплён как ', edit_message: 'Редактировать сообщение', regenerate: 'Сгенерировать ответ заново', copy: 'Копировать', copied: 'Скопировано!', copy_failed: '\u041e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f', selected_text_reply: 'Ответить с выделенным', selected_text_reply_title: 'Добавить выделенный текст чата как цитируемый контекст', selected_text_reply_appended: 'Выделенный текст добавлен в поле ввода', saved_prompts_empty: 'Сохранённых подсказок пока нет.', saved_prompts_save_current: 'Сохранить текущий ввод как подсказку', saved_prompts_saved: 'Подсказка сохранена', saved_prompts_delete: 'Удалить подсказку', saved_prompts_empty_input: 'Сначала введите подсказку для сохранения', context_block_name_default: 'Контекст', context_block_flush_aria: 'Блоки контекста будут включены при отправке', context_block_rename_hint: 'Нажмите или Enter, чтобы переименовать', context_block_rename_aria: 'Переименовать блок контекста', context_block_remove: 'Удалить блок контекста', diff_loading: 'Загрузка diff', diff_error: 'Не удалось загрузить файл патча', diff_too_large: 'Файл патча слишком большой для отображения', tree_view: '樹狀', raw_view: '原始', parse_failed_note: 'parse failed', you: 'Вы', mcp_servers_title: 'MCP 伺服器', mcp_servers_desc: '管理 config.yaml 中設定的 MCP 伺服器。', mcp_no_servers: '未設定 MCP 伺服器。', mcp_add_server: '+ 新增伺服器', mcp_field_name: '伺服器名稱', mcp_transport_label: '傳輸類型', mcp_field_command: '命令', mcp_field_args: '參數(逗號分隔)', mcp_field_url: 'URL', mcp_field_timeout: '逾時(秒)', mcp_save: '儲存', mcp_cancel: '取消', mcp_name_required: '需要伺服器名稱。', mcp_url_required: 'HTTP 傳輸需要 URL。', mcp_command_required: 'stdio 傳輸需要命令。', mcp_saved: 'MCP 伺服器已儲存。', mcp_save_failed: '儲存 MCP 伺服器失敗。', mcp_delete_confirm_title: '刪除 MCP 伺服器', mcp_delete_confirm_message: '刪除 MCP 伺服器「{0}」?此操作無法撤銷。', mcp_deleted: 'MCP 伺服器已刪除。', mcp_delete_failed: '刪除 MCP 伺服器失敗。', mcp_load_failed: '載入 MCP 伺服器失敗。', mcp_restart_hint: 'Server changes are read-only here for now. Edit config.yaml and restart Hermes for changes to take effect.', mcp_toggle_followup: 'Enable/disable controls are intentionally deferred until MCP reload semantics are explicit.', mcp_status_active: 'Active', mcp_status_configured: 'Configured', mcp_status_disabled: 'Disabled', mcp_status_invalid_config: 'Invalid config', mcp_status_unknown: 'Unknown', mcp_tool_count: '{0} tools', mcp_enabled_yes: 'Enabled', mcp_enabled_no: 'Disabled', mcp_enable_server: 'Enable this MCP server', mcp_disable_server: 'Disable this MCP server', mcp_enabled_toast: (name) => `MCP server "${name}" enabled.`, mcp_disabled_toast: (name) => `MCP server "${name}" disabled.`, mcp_toggle_failed: 'Failed to update MCP server.', mcp_tools_title: 'MCP Tools', mcp_tools_desc: 'Search known tools across active MCP servers.', mcp_tools_search_placeholder: 'Search tools by name, server, or description…', mcp_tools_no_tools: 'No MCP tools are available from the active runtime inventory.', mcp_tools_no_matches: 'No MCP tools match your search.', mcp_tools_load_failed: 'Failed to load MCP tools.', mcp_tools_schema_empty: 'No schema parameters.', mcp_tools_runtime_note: 'Tool inventory only uses already-known active MCP runtime data; the WebUI does not start or probe servers.', mcp_tools_summary_no_matches: (query,total) => `No MCP tools matching “${query}” (${total} total MCP tools).`, mcp_tools_summary_none: 'No MCP tools to show.', mcp_tools_summary_matching: (query) => ` matching “${query}”`, mcp_tools_summary_total_note: (total) => ` (${total} total MCP tools)`, mcp_tools_summary_showing: (start,end,filtered,searchNote,totalNote,page,pages) => `Showing ${start}-${end} of ${filtered} MCP tools${searchNote}${totalNote}. Page ${page} of ${pages}.`, mcp_tools_page_size_prefix: 'Show', mcp_tools_page_size_suffix: 'per page', mcp_tools_per_page_aria: 'MCP tools per page', mcp_tools_inactive_configured_servers: (servers) => `Configured but inactive in this WebUI runtime: ${servers}.`, mcp_tools_pagination_label: 'MCP tools pagination', mcp_tools_previous_page: '‹ Prev', mcp_tools_previous_page_aria: 'Previous MCP tools page', mcp_tools_next_page: 'Next ›', mcp_tools_next_page_aria: 'Next MCP tools page', thinking: 'Думаю', expand_all: 'Развернуть всё', collapse_all: 'Свернуть всё', edit_failed: 'Не удалось отредактировать: ', regen_failed: 'Не удалось сгенерировать заново: ', reconnect_active: 'Ответ всё ещё генерируется. Обновить, когда будет готово?', reconnect_finished: 'Когда вы уходили, ответ ещё генерировался. Сообщения могли обновиться.', approval_heading: 'Требуется подтверждение', approval_desc_prefix: 'Обнаружена опасная команда', approval_btn_once: 'Разрешить один раз', approval_btn_once_title: 'Разрешить только эту команду (Enter)', approval_btn_session: 'Разрешить на этот сеанс', approval_btn_session_title: 'Разрешить для этого сеанса разговора', approval_btn_always: 'Всегда разрешать', approval_btn_always_title: 'Всегда разрешать команды по этому шаблону', approval_btn_deny: 'Запретить', approval_btn_deny_title: 'Запретить — не выполнять эту команду', approval_responding: 'Отвечаю…', approval_gateway_unsupported: 'Approvals require a newer gateway. Upgrade the connected Hermes gateway to enable this.', approval_gateway_unsupported_label: 'Одобрение не поддерживается', untitled: 'Без названия', n_messages: (n) => `${n} сообщений`, load_older_messages: '↑ Прокрутите вверх или нажмите, чтобы загрузить ранние сообщения', session_jump_start: 'Начало', session_jump_start_label: 'Перейти к началу сессии', session_jump_end: 'Конец', session_jump_end_label: 'Перейти к концу сессии', session_new_message: 'Новое сообщение', session_new_message_label: 'Новое сообщение доступно, перейти к концу', jump_to_question: 'к ответу', jump_to_question_label: 'Перейти к началу этого ответа', queued_label: 'Отправить после ответа', queued_count: (n) => n === 1 ? '1 в очереди' : `${n} в очереди`, queued_cancel: 'Отменить сообщение', model_unavailable: ' (недоступна)', model_unavailable_title: 'Эта модель больше не входит в ваш текущий список провайдеров', provider_mismatch_warning: (m, p) => `"${m}" может не работать с вашим настроенным провайдером (${p}). Всё равно отправить или запустите \`hermes model\` в терминале, чтобы переключиться.`, provider_mismatch_label: 'Несовпадение провайдера', gateway_auth_label: 'Сбой аутентификации Gateway', gateway_start: 'Start', gateway_stop: 'Stop', gateway_restart: 'Restart', gateway_start_success: 'Gateway start completed.', gateway_stop_success: 'Gateway stop completed.', gateway_restart_success: 'Gateway restart completed.', gateway_start_failed: 'Gateway start failed', gateway_stop_failed: 'Gateway stop failed', gateway_restart_failed: 'Gateway restart failed', gateway_running: 'Running', gateway_session: 'session', gateway_sessions: 'sessions', gateway_status_load_failed: 'Failed to load gateway status', model_not_found_label: 'Модель не найдена', model_custom_label: 'Пользовательский ID модели', model_custom_placeholder: 'например, openai/gpt-5.4', model_show_all_models: 'Показать все {0} моделей', cmd_help: 'Показать доступные команды', cmd_clear: 'Очистить сообщения беседы', cmd_compact: 'Сжать контекст беседы', cmd_model: 'Переключить модель (например, /model gpt-4o)', cmd_workspace: 'Переключить рабочее пространство по названию', cmd_terminal: 'Открыть терминал рабочей области', cmd_new: 'Начать новую сессию чата', cmd_usage: 'Показать или скрыть использование токенов', cmd_theme: 'Переключить внешний вид (тема: system/dark/light, скин: default/ares/mono/graphite/slate/poseidon/sisyphus/charizard/sienna/catppuccin/nous/geist-contrast/zeus/verdigris)', cmd_personality: 'Переключить личность агента', cmd_skills: 'Показать доступные навыки Hermes', cmd_use: 'Принудительно применить навык к следующему сообщению', available_commands: 'Доступные команды:', type_slash: 'Введите /, чтобы увидеть команды', conversation_cleared: 'Беседа очищена', model_usage: 'Использование: /model ', no_model_match: 'Нет модели, соответствующей "', model_did_you_mean: (m) => ` — возможно, вы имели в виду "${m}"?`, switched_to: 'Переключено на ', workspace_usage: 'Использование: /workspace ', no_workspace_match: 'Нет рабочего пространства, соответствующего "', switched_workspace: 'Переключено на рабочее пространство: ', workspace_switch_failed: 'Не удалось переключить рабочее пространство: ', new_session: 'Новая сессия создана', new_session_creating: 'Создаём новую беседу…', compressing: 'Запрашиваю сжатие контекста...', token_usage_on: 'Отображение токенов включено', usage_personality_none: 'none', // TODO: translate token_usage_off: 'Отображение токенов выключено', usage_cache_hit_detail: 'Кэш: {0}% попаданий ({1} чтение / {2} запись)', usage_cached_percent: '{0}% из кэша', theme_usage: 'Использование: /theme ', theme_set: 'Тема: ', no_active_session: 'Нет активной сессии', cmd_queue: 'Поставить сообщение в очередь на следующий оборот', cmd_goal: 'Задать или проверить постоянную цель', goal_evaluating_progress: 'Evaluating goal progress…', goal_working_toward: 'Working toward goal…', goal_continuing_toast: 'Continuing toward goal…', goal_status_none: 'No active goal. Set one with /goal .', goal_status_active: (turns, max_turns, goal) => `⊙ Goal (active, ${turns}/${max_turns} turns): ${goal}`, goal_status_paused: (turns, max_turns, reason, goal) => `⏸ Goal (paused, ${turns}/${max_turns}${reason ? `, ${reason}` : ''}): ${goal}`, goal_status_done: (turns, max_turns, goal) => `✓ Goal done (${turns}/${max_turns}): ${goal}`, goal_set: (turns, goal) => `⊙ Goal set (${turns}-turn budget): ${goal}`, goal_paused: (goal) => `⏸ Goal paused: ${goal}`, goal_resumed: (goal) => `▶ Goal resumed: ${goal}`, goal_cleared: 'Goal cleared.', goal_no_goal: 'No active goal.', goal_achieved: (reason) => `✓ Goal achieved: ${reason}`, goal_paused_budget_exhausted: (turns, max_turns) => `⏸ Goal paused — ${turns}/${max_turns} turns used. Use /goal resume to keep going, or /goal clear to stop.`, goal_continuing: (turns, max_turns, reason) => `↻ Continuing toward goal (${turns}/${max_turns}): ${reason}`, cmd_interrupt: 'Прервать текущий оборот и отправить новое сообщение', cmd_steer: 'Направить агента исправлением (переходит к прерыванию)', cmd_queue_no_msg: 'Использование: /queue <сообщение>', cmd_queue_not_busy: 'Нет активной задачи — просто отправьте', cmd_queue_confirm: 'Сообщение в очереди', cmd_interrupt_no_msg: 'Использование: /interrupt <сообщение>', cmd_interrupt_confirm: 'Прервано — отправка нового сообщения', cmd_steer_no_msg: 'Использование: /steer <сообщение>', cmd_steer_fallback: 'Steer недоступен — черновик восстановлен', cmd_steer_delivered: 'Steer доставлен — агент увидит его в следующем ответе инструмента', steer_leftover_queued: 'Steer поставлен в очередь на следующий ход', busy_steer_fallback: 'Steer недоступен — черновик восстановлен', steer_fail_no_cached_agent: 'No agent cached for this session — try refreshing', steer_fail_agent_lacks_steer: 'This agent version does not support steer', steer_fail_session_not_found: 'Session not found — it may have expired', steer_fail_not_running: 'Agent is not currently running', steer_fail_stream_dead: 'The agent stream has ended', steer_fail_steer_error: 'Steer delivery failed — the agent may have finished', steer_fail_network_error: 'Network error — check your connection', steer_fail_unknown: 'Steer unavailable', steer_recovery_retry: 'Retry', steer_recovery_dismiss: 'Dismiss', busy_interrupt_confirm: 'Прервано — отправка нового сообщения', settings_label_default_message_mode: 'Режим сообщений по умолчанию', settings_desc_default_message_mode: 'Определяет поведение при отправке сообщения во время работы агента. Очередь ждёт; Прерывание отменяет и начинает заново; Steer внедряет коррекцию без прерывания. Если Steer недоступен, черновик восстанавливается, чтобы вы могли выбрать следующее действие.', settings_label_fade_text_effect: 'Эффект плавного появления текста', settings_desc_fade_text_effect: 'Плавно показывает новые слова во время ответа ассистента. Похоже на OpenWebUI; по умолчанию выключено для максимальной производительности.', settings_label_max_tokens: 'Максимум выходных токенов', settings_desc_max_tokens: 'Ограничивает длину новых потоковых ответов. Оставьте пустым, чтобы использовать резервное значение текущего профиля.', settings_placeholder_max_tokens_none: 'Переопределения нет', settings_placeholder_max_tokens_fallback: 'Переопределения нет (резерв: {0})', settings_default_message_mode_queue: 'Поставить в очередь', settings_default_message_mode_interrupt: 'Прервать текущий оборот', settings_default_message_mode_steer: 'Steer (коррекция в середине хода)', settings_label_busy_placeholder_hint: 'Show busy placeholder hint', settings_desc_busy_placeholder_hint: 'Shows the composer placeholder with the current busy action while the session is running and the draft is empty.', composer_placeholder_busy_queue: 'Enter = queue | /interrupt | /background | /steer', composer_placeholder_busy_interrupt: 'Enter = interrupt | /queue | /background | /steer', composer_placeholder_busy_steer: 'Enter = steer | /queue | /background | /interrupt', no_personalities: 'Личности не найдены (добавьте их в ~/.hermes/personalities/)', clarify_heading: 'Требуется уточнение', clarify_hint: 'Выберите вариант или введите свой ответ ниже.', clarify_input_placeholder: 'Введите ответ…', clarify_other: 'Другое', clarify_responding: 'Отвечаю…', session_attention_approval: (n) => n === 1 ? 'Одобрение' : `${n} одобр.`, session_attention_clarify: (n) => n === 1 ? 'Вопрос' : `${n} вопрос.`, session_attention_generic: (n) => n === 1 ? 'Внимание' : `${n} элем.`, session_attention_approval_title: 'Ожидается решение по разрешению', session_attention_clarify_title: 'Ожидается ваш ответ', session_attention_generic_title: 'Ожидается действие пользователя', clarify_send: 'Отправить', cmd_compact_alias: 'Устаревший псевдоним для /compress', cmd_compress: 'Сжать контекст беседы (использование: /compress [тема])', ctx_compress_hint: 'Сжать контекст для освобождения места →', ctx_compress_action: '⚠ Сжать сейчас для освобождения контекста', command_label: 'Команда', compress_complete_label: 'Сжатие завершено', auto_compress_label: 'Автосжатие', compress_failed_label: 'Ошибка сжатия', compress_running_label: 'Сжатие…', context_compaction_label: 'Сжатие контекста', retrieval_context_label: 'Индексированный контекст', retrieval_context_preview: 'Предыдущие сообщения сохранены и доступны через инструменты контекста', preserved_task_list_label: 'Сохранённый список задач', focus_label: 'Фокус', model_search_no_results: 'Модели не найдены', model_group_configured: 'Настроенные', ws_search_placeholder: 'Поиск рабочих пространств…', ws_no_results: 'Рабочие пространства не найдены', workspace_new_worktree_conversation: 'Новый разговор в worktree', workspace_new_worktree_conversation_meta: 'Создать изолированный git worktree для этого рабочего пространства.', workspace_worktree_created: 'Разговор в worktree создан', workspace_worktree_failed: 'Не удалось создать worktree: ', session_worktree_badge: 'Worktree', model_search_placeholder: 'Поиск моделей…', model_scope_advisory: 'Применяется к этой беседе со следующего сообщения.', session_toolsets: 'Session Toolsets', // TODO: translate session_toolsets_desc: 'Use active profile defaults or choose a custom toolset list for this session', // TODO: translate session_toolsets_global: 'Active profile defaults', // TODO: translate session_toolsets_profile_defaults: 'Active profile defaults', // TODO: translate session_toolsets_custom: 'Custom override', // TODO: translate session_toolsets_use_profile_defaults: 'Use active profile defaults', // TODO: translate session_toolsets_configured_servers: 'Configured MCP servers', // TODO: translate session_toolsets_loading_servers: 'Loading configured servers...', // TODO: translate session_toolsets_no_configured_servers: 'No configured MCP servers', // TODO: translate session_toolsets_placeholder: 'tool1, tool2, \u2026', // TODO: translate session_toolsets_apply: 'Apply', // TODO: translate session_toolsets_clear: 'Use defaults', // TODO: translate session_toolsets_applied: 'Toolsets updated', // TODO: translate session_toolsets_cleared: 'Using active profile defaults', // TODO: translate session_toolsets_failed: 'Failed to update toolsets: ', // TODO: translate model_scope_toast: 'Применяется к этой беседе со следующего сообщения.', reference_only_label: 'Только справка', settings_label_skin: 'Скин', settings_label_font_size: 'Размер шрифта', font_size_small: 'Маленький', font_size_default: 'Стандарт', font_size_large: 'Большой', font_size_xlarge: 'Очень большой', settings_autosave_saving: 'Сохранение…', settings_autosave_saved: 'Сохранено', settings_autosave_failed: 'Не удалось сохранить', settings_autosave_retry: 'Повторить', workspace_empty_dir: 'Это рабочее пространство пусто.', workspace_show_hidden_files: 'Показывать скрытые файлы', workspace_show_hidden_files_desc: 'Include .DS_Store, .git, node_modules, and other hidden / system files in the file tree.', workspace_hidden_files_visible: 'hidden visible', workspace_hidden_files_visible_title: 'Hidden files are visible — click for options', workspace_options: 'Workspace options', workspace_empty_no_path: 'Рабочее пространство не выбрано. Настройте его в Настройки → Рабочее пространство.', available_personalities: 'Доступные личности:', personality_switch_hint: '\n\nИспользуйте `/personality ` для переключения или `/personality none` для сброса.', personalities_load_failed: 'Не удалось загрузить личности', personality_cleared: 'Личность очищена', personality_set: 'Личность: ', failed_colon: 'Не удалось: ', no_workspace: 'Нет рабочего пространства', terminal_open_title: 'Открыть терминал рабочей области', terminal_no_workspace_title: 'Выберите рабочую область, чтобы открыть терминал', terminal_title: 'Терминал', terminal_clear: 'Очистить', terminal_copy_output: 'Копировать вывод', terminal_restart: 'Перезапустить', terminal_collapse: 'Свернуть', terminal_expand: 'Развернуть', terminal_close: 'Закрыть', terminal_input_placeholder: 'Введите команду...', terminal_start_failed: 'Не удалось запустить терминал: ', terminal_input_failed: 'Ошибка ввода терминала: ', terminal_copy_failed: 'Не удалось скопировать: ', terminal_error: 'Ошибка терминала', terminal_remote_backend_unsupported: 'Встроенный терминал поддерживается только для локальных терминальных бэкендов.', dialog_confirm_title: 'Подтвердить действие', dialog_prompt_title: 'Введите значение', dialog_confirm_btn: 'Подтвердить', unsaved_confirm: 'У вас есть несохранённые изменения в предпросмотре. Отменить и перейти дальше?', discard: 'Отменить', save: 'Сохранить', edit: 'Редактировать', clear: 'Очистить', create: 'Создать', remove: 'Удалить', save_title: 'Сохранить изменения', edit_title: 'Редактировать этот файл', saved: 'Сохранено', save_failed: 'Не удалось сохранить: ', image_load_failed: 'Не удалось загрузить изображение', file_open_failed: 'Не удалось открыть файл', downloading: (name) => `Скачиваю ${name}…`, double_click_rename: 'Дважды щёлкните, чтобы переименовать', symlink_link_to: 'Symlink → {target}', external_link_open_confirm: 'This symlink points outside the workspace. Open it in a read-only external view for this browser session?', external_link_read_only: 'This external view is read-only. Create, rename, move, delete, upload, reveal, and editor actions stay disabled here.', external_link_grant_expired: 'This external view expired. Reopen the escape-target symlink to authorize it again.', session_rename_failed_no_row: 'Could not start rename — row not found.', renamed_to: 'Переименовано в ', rename_failed: 'Не удалось переименовать: ', moved_to: 'Перемещено в ', move_failed: 'Не удалось переместить: ', delete_title: 'Удалить', delete_confirm: (name) => `Удалить ${name}?`, delete_dir_confirm: (name) => `Удалить папку "${name}" и всё её содержимое?`, rename_title: 'Переименовать', rename_prompt: 'Новое имя:', deleted: 'Удалено ', delete_failed: 'Не удалось удалить: ', reveal_in_finder: 'Показать в файловом менеджере', reveal_failed: 'Не удалось открыть: ', copy_file_path: 'Копировать путь к файлу', open_in_vscode: 'Открыть в VS Code', open_in_vscode_failed: 'Не удалось открыть в VS Code: ', download_folder: 'Download Folder', // TODO: translate path_copied: 'Путь к файлу скопирован в буфер обмена', path_copy_failed: 'Не удалось скопировать путь: ', session_rename: 'Переименовать беседу', session_rename_desc: 'Изменить название этой беседы', session_title_regenerate: 'Сгенерировать название заново', session_title_regenerate_desc: 'Попросить Hermes сгенерировать новое название на основе беседы', session_title_regenerating: 'Повторная генерация названия…', session_title_regenerated: (title) => `Название сгенерировано заново: ${title}`, session_title_regenerate_failed: 'Не удалось сгенерировать название заново: ', session_copy_link: 'Скопировать ссылку на беседу', session_copy_link_desc: 'Скопировать прямую ссылку на эту беседу', session_link_copied: 'Ссылка на беседу скопирована в буфер обмена', session_link_copy_failed: 'Не удалось скопировать ссылку на беседу: ', new_file_prompt: 'Имя нового файла (например, notes.md):', new_file: 'Новый файл', new_folder: 'Новая папка', workspace_root: 'корень рабочей области', new_file_prompt_title: 'Имя нового файла в {0}:', new_folder_prompt_title: 'Имя новой папки в {0}:', project_name_prompt: 'Имя проекта:', created: 'Создано ', create_failed: 'Не удалось создать: ', new_folder_prompt: 'Имя новой папки:', folder_created: 'Папка создана ', folder_create_failed: 'Не удалось создать папку: ', workspace_auto_create_folder: 'Создать папку, если она не существует', folder_add_as_space_btn: 'Добавить', folder_add_as_space_msg: 'Добавить эту папку как новое пространство?', folder_add_as_space_title: 'Добавить как пространство?', remove_title: 'Удаление', empty_dir: '(пусто)', upload_failed: 'Не удалось загрузить: ', upload_too_large: (maxMb, fileMb) => `Файл слишком большой (${fileMb} МБ). Максимальный размер загрузки: ${maxMb} МБ.`, uploading: 'Загрузка…', uploaded: 'Загружено', all_uploads_failed: (n) => `Не удалось загрузить все ${n} файлов`, archive_extracted: (n, c) => `Извлечено ${n} файл(ов) из ${c} архив(ов)`, settings_title: 'Настройки', settings_search_placeholder: 'Поиск параметров…', settings_search_no_results: 'Параметры не найдены.', settings_save_btn: 'Сохранить настройки', settings_label_model: 'Модель по умолчанию', settings_desc_model: 'Используется для новых бесед. Существующие беседы сохраняют выбранную модель.', settings_main_advanced_button_aria: 'Advanced options for main model', settings_main_advanced_title: 'Main model options', settings_main_advanced_subtitle: 'Advanced config for the default chat model.', settings_main_advanced_saved: 'Main model options saved', settings_main_advanced_save_failed: 'Failed to save main model options', settings_main_advanced_service_tier: 'Service tier', settings_main_advanced_service_tier_desc: 'Optional request setting for OpenAI-family providers.', settings_main_advanced_service_tier_default: 'Default / off', settings_main_advanced_service_tier_priority: 'Priority (fast)', settings_label_auxiliary_models: 'Вспомогательные модели', settings_desc_auxiliary_models: 'Маршрутизация побочных задач: зрение, сжатие, генерация заголовков и т.д. «Авто» использует основную модель чата.', settings_btn_reset_aux_models: 'Сбросить всё на авто', settings_btn_apply_aux_models: 'Применить изменения', settings_aux_provider_auto: 'использовать основную модель', settings_aux_model_auto: 'авто (по умолчанию провайдера)', settings_aux_model_custom: 'Пользовательская модель…', settings_aux_model_custom_prompt: 'Введите ID модели:', settings_aux_loading: 'Загрузка вспомогательных моделей…', settings_aux_load_failed: 'Не удалось загрузить настройки вспомогательных моделей. Убедитесь, что API агента доступен.', settings_aux_reset_confirm_title: 'Сбросить вспомогательные модели?', settings_aux_reset_confirm_msg: 'Все вспомогательные задачи будут установлены на «авто» (использовать основную модель).', settings_aux_reset_done: 'Вспомогательные модели сброшены на авто', settings_aux_save_failed: 'Не удалось сохранить вспомогательную модель', settings_aux_saved: 'Вспомогательные модели обновлены', settings_aux_no_changes: 'Нет изменений для применения', settings_aux_task_vision: 'Vision', settings_aux_task_vision_desc: 'image/screenshot analysis', settings_aux_task_compression: 'Compression', settings_aux_task_compression_desc: 'context summarization', settings_aux_task_web_extract: 'Web extract', settings_aux_task_web_extract_desc: 'web page summarization', settings_aux_task_session_search: 'Session search', settings_aux_task_session_search_desc: 'past-conversation recall', settings_aux_task_approval: 'Approval', settings_aux_task_approval_desc: 'smart command approval', settings_aux_task_mcp: 'MCP', settings_aux_task_mcp_desc: 'MCP tool reasoning', settings_aux_task_title_generation: 'Title generation', settings_aux_task_title_generation_desc: 'session titles', settings_aux_task_skills_hub: 'Skills hub', settings_aux_task_skills_hub_desc: 'skills search/install', settings_aux_task_curator: 'Curator', settings_aux_task_curator_desc: 'skill-usage review pass', settings_aux_task_kanban_decomposer: 'Kanban decomposer', settings_aux_task_kanban_decomposer_desc: 'task decomposition', settings_aux_task_profile_describer: 'Profile describer', settings_aux_task_profile_describer_desc: 'profile summaries', settings_aux_task_triage_specifier: 'Triage specifier', settings_aux_task_triage_specifier_desc: 'issue/task triage specs', settings_aux_advanced_button_title: 'Advanced options', settings_aux_advanced_button_aria: 'Advanced options for {task}', settings_aux_advanced_title: '{task} options', settings_aux_advanced_subtitle: 'Advanced config for auxiliary.', settings_aux_advanced_save: 'Save options', settings_aux_advanced_base_url: 'Base URL', settings_aux_advanced_base_url_desc: 'Optional provider endpoint override.', settings_aux_advanced_timeout: 'Timeout seconds', settings_aux_advanced_timeout_desc: 'Request timeout for this auxiliary task. Blank uses Hermes default.', settings_aux_advanced_download_timeout: 'Download timeout seconds', settings_aux_advanced_download_timeout_desc: 'Only relevant for tasks that download media/content, e.g. vision. Blank uses default.', settings_aux_advanced_max_concurrency: 'Max concurrency', settings_aux_advanced_max_concurrency_desc: 'Optional per-task concurrency limit. Blank uses default.', settings_aux_advanced_extra_body: 'Extra body JSON', settings_aux_advanced_extra_body_desc: 'Optional JSON object merged into the model request body.', settings_aux_advanced_api_key: 'API key override', settings_aux_advanced_api_key_set_hint: 'API key is set. Leave blank to keep it, or use clear to remove it.', settings_aux_advanced_api_key_empty_hint: 'Leave blank to use provider/default credentials.', settings_aux_advanced_api_key_clear: 'Clear existing API key override', settings_aux_advanced_extra_body_invalid_json: 'Extra body must be valid JSON', settings_aux_advanced_extra_body_object_required: 'Extra body must be a JSON object', settings_aux_advanced_saved: 'Auxiliary options saved', settings_aux_advanced_save_failed: 'Failed to save auxiliary options', settings_label_send_key: 'Клавиша отправки', settings_label_theme: 'Тема', settings_label_language: 'Язык', settings_label_quota_chip: 'Показывать чип квоты провайдера в композиторе', settings_desc_quota_chip: 'Отображает фоновый индикатор остатка квоты (например, баланс кредитов OpenRouter) в подвале композитора. По умолчанию отключено. Виден только на широких экранах (≥1400px) при включении, чтобы не загромождать композитор на ноутбуках и стандартных мониторах.', settings_label_conversation_outline: 'Показывать структуру беседы', settings_desc_conversation_outline: 'Показывает на рабочем столе список переходов к вопросам пользователя в текущей беседе. По умолчанию отключено.', settings_label_hide_suggestions: 'Hide new-chat suggestions', settings_desc_hide_suggestions: 'Hide the three default suggestion buttons on the empty new-chat screen to avoid accidental taps.', settings_label_virtualize_transcript: 'Virtualize long transcripts', settings_desc_virtualize_transcript: "Render only the visible portion of very long chat transcripts (over 80 messages) for smoother scrolling. Turn this off if you see any rendering or scroll issues, or want the browser's Find (Ctrl+F) to match the whole conversation \u2014 the full transcript will render at once.", settings_label_token_usage: 'Показывать использование токенов', settings_label_token_speed: 'Показывать скорость токенов (TPS)', settings_desc_token_speed: 'Отображает количество токенов в секунду в заголовках сообщений ассистента во время потоковой передачи и после завершения ответа. Выключено по умолчанию.', settings_label_sidebar_density: 'Плотность боковой панели', cmd_reasoning: 'Toggle thinking visibility (show/hide), set effort level, or check current status', settings_label_external_sessions: 'Показывать внешние сеансы', settings_label_claude_code_sessions: 'Show Claude Code sessions', settings_label_cron_sessions: 'Show cron sessions', settings_label_webhook_sessions: 'Show webhook sessions', settings_label_previous_messaging_sessions: 'Показывать предыдущие сеансы обмена сообщениями', settings_label_sync_insights: 'Синхронизировать с Insights', settings_label_check_updates: 'Проверять обновления', settings_label_ignore_agent_updates: 'Ignore Agent updates', settings_label_whats_new_summary: "Summarize What's New with AI", settings_label_bot_name: 'Имя помощника по умолчанию', settings_label_password: 'Пароль доступа', settings_label_pinned_limit: 'Лимит закреплённых бесед', settings_desc_pinned_limit: 'Максимальное количество активных бесед, которые можно закрепить в боковой панели. По умолчанию 3.', settings_label_dashboard_mode: 'Официальная панель Hermes', settings_desc_dashboard_mode: 'Показывать ссылку в навигационной панели, когда официальная панель hermes доступна. URL публичного обратного прокси хранятся только как ссылки в браузере и никогда не проверяются сервером.', settings_dashboard_mode_auto: 'Автоопределение', settings_dashboard_mode_always: 'Всегда показывать', settings_dashboard_mode_never: 'Никогда не показывать', settings_dashboard_save: 'Сохранить настройки ссылки панели', settings_label_gateway_status: 'Статус шлюза', settings_desc_gateway_status: 'Статус шлюза Hermes (Telegram, Discord, Slack и т.д.)', gateway_not_configured: 'Шлюз не настроен', gateway_metadata_stale: 'Метаданные шлюза устарели', gateway_endpoint_unreachable: 'Конечная точка шлюза недоступна', gateway_not_running: 'Шлюз не запущен', gateway_running_label: 'Работает', gateway_last_active: 'Последняя активность: ', gateway_session_count: (n) => `${n} ${n === 1 ? 'сессия' : n < 5 ? 'сессии' : 'сессий'}`, gateway_load_failed: 'Не удалось загрузить статус шлюза', settings_saved: 'Настройки сохранены', settings_save_failed: 'Не удалось сохранить: ', settings_load_failed: 'Не удалось загрузить настройки: ', settings_saved_pw: 'Настройки сохранены (пароль задан — теперь требуется вход)', settings_saved_pw_updated: 'Настройки сохранены (пароль обновлён)', login_title: 'Вход', login_subtitle: 'Введите пароль, чтобы продолжить', login_placeholder: 'Пароль', login_btn: 'Войти', login_invalid_pw: 'Неверный пароль', login_conn_failed: 'Не удалось подключиться', tab_chat: 'Чат', tab_tasks: 'Задачи', tab_skills: 'Навыки', tab_memory: 'Память', tab_workspaces: 'Рабочие пространства', tab_profiles: 'Профили', tab_kanban: 'Kanban', kanban_board: 'Board', kanban_visible_tasks: '{0} visible tasks', kanban_search_tasks: 'Search tasks', kanban_all_assignees: 'All assignees', kanban_all_tenants: 'All tenants', kanban_include_archived: 'Include archived', kanban_no_matching_tasks: 'No matching tasks', kanban_no_data: 'No Kanban data', kanban_work_queue_hint: 'This is the Hermes Agent work queue. Create or triage a task, assign it, move it to Ready, then let the dispatcher claim it.', kanban_tasks_hidden_by_filters: 'Tasks hidden by filters', kanban_clear_filters: 'Clear filters', kanban_unavailable: 'Kanban unavailable', kanban_read_only: 'Read-only view', kanban_empty: 'Empty', kanban_task: 'Task', kanban_no_description: 'No description', kanban_refresh: 'Refresh', kanban_status_triage: 'Triage', kanban_status_todo: 'Todo', kanban_status_ready: 'Ready', kanban_status_running: 'Running', kanban_status_blocked: 'Blocked', kanban_status_done: 'Done', kanban_status_original_hint: 'Actual status: {0}. This dialog only supports Triage/Todo/Ready edits.', kanban_comments_count: 'Comments ({0})', kanban_events_count: 'Events ({0})', kanban_links: 'Links', kanban_parents: 'Parents', kanban_children: 'Children', kanban_runs_count: 'Runs ({0})', kanban_no_comments: 'No comments', kanban_no_events: 'No events', kanban_no_runs: 'No runs', kanban_title: 'Заголовок', kanban_description: 'Описание', kanban_description_placeholder: 'Необязательно — что нужно сделать, критерии приёмки, ссылки', kanban_status: 'Статус', kanban_assignee: 'Исполнитель', kanban_assignee_placeholder: 'Необязательно — оставьте пустым для любого исполнителя', kanban_tenant: 'Арендатор', kanban_tenant_placeholder: 'Необязательно — слаг проекта или команды', kanban_priority: 'Приоритет', kanban_priority_hint: 'Большие числа выполняются первыми. По умолчанию 0.', kanban_title_required: 'Заголовок обязателен.', kanban_edit_task: 'Редактировать задачу', kanban_run_dispatcher: 'Запустить диспетчер', kanban_run_dispatcher_confirm: 'Это захватит задачи в состоянии Ready на этой доске и запустит подпроцессы-исполнители (по одному на задачу, до 8 за нажатие). Продолжить?', kanban_assignee_profiles_label: 'Профили Hermes', kanban_assignee_other_label: 'Другие (CLI каналы / удалённые профили)', kanban_assignee_unassigned: '— Не назначено (не запустится автоматически) —', kanban_ready_needs_assignee: 'Вы выбрали «Не назначено» + «Ready». Диспетчер пропустит эту задачу. Отправьте ещё раз для подтверждения или выберите профиль.', kanban_dispatch_preview_prefix: 'Предпросмотр:', kanban_dispatch_run_prefix: 'Отправлено:', kanban_dispatch_spawned: 'запущено', kanban_dispatch_promoted: 'повышено', kanban_dispatch_reclaimed: 'возвращено', kanban_dispatch_skipped_unassigned: 'пропущено (без исполнителя)', kanban_dispatch_skipped_nonspawnable: 'пропущено (неизвестный профиль)', kanban_dispatch_auto_blocked: 'автоблок', kanban_dispatch_timed_out: 'таймаут', kanban_dispatch_crashed: 'падение', kanban_new_task: 'New task', kanban_view_lanes: 'Lanes by profile', kanban_view_consolidated: 'Consolidated view', kanban_view_lanes_saved: 'Kanban view: lanes by profile', kanban_view_consolidated_saved: 'Kanban view: consolidated', kanban_view_update_failed: 'Failed to update Kanban view: ', kanban_add_comment: 'Add comment', kanban_workspace_kind: 'Workspace kind', kanban_workspace_path: 'Workspace path', kanban_workspace_path_placeholder: 'Path to workspace', kanban_workspace_scratch: 'Scratch', kanban_workspace_worktree: 'Worktree', kanban_workspace_dir: 'Directory', kanban_workspace_path_required: 'Workspace path is required for non-scratch workspaces.', kanban_skills: 'Skills', kanban_skills_placeholder: 'Comma-separated skill names, e.g. python,git', kanban_max_runtime_seconds: 'Max runtime (seconds)', kanban_max_runtime_hint: 'Leave empty for unlimited.', kanban_max_runtime_invalid: 'Max runtime must be a whole number of seconds greater than 0.', kanban_parents_modal: 'Parent dependencies', kanban_parents_placeholder: 'Parent task ID', kanban_add_dependency: 'Add dependency', kanban_remove_dependency: 'Remove dependency', kanban_dependency_placeholder: 'Task ID to link', kanban_dependency_self: 'A task cannot depend on itself', kanban_only_mine: 'Only mine', kanban_bulk_action: 'Bulk action', kanban_nudge_dispatcher: 'Preview dispatcher', kanban_stats: 'Stats', kanban_worker_log: 'Worker log', kanban_block: 'Block', kanban_unblock: 'Unblock', kanban_back_to_board: 'Back to board', kanban_lanes_by_profile: 'Lanes by profile', kanban_new_board: 'New board…', kanban_rename_board: 'Rename current board…', kanban_archive_board: 'Archive current board…', kanban_archive_board_confirm: 'Archive board "{name}"? Tasks remain on disk and the board can be restored from kanban/boards/_archived/.', kanban_board_archived: 'Board archived', kanban_board_name: 'Name', kanban_board_slug: 'Slug (lowercase, hyphens)', kanban_board_description: 'Description (optional)', kanban_board_icon: 'Icon (emoji, optional)', kanban_board_color: 'Color (optional)', kanban_board_name_required: 'Name is required', kanban_board_slug_required: 'Slug is required', kanban_card_complete: 'complete', kanban_card_archive: 'archive', kanban_unassigned: 'unassigned', kanban_status_archived: 'Archived', tab_todos: 'Список дел', tab_insights: 'Аналитика', tab_dashboard: 'Панель Hermes', dashboard_loopback_warning: 'Панель доступна только через loopback на сервере. Откройте её с самого сервера или перезапустите с --host 0.0.0.0 (небезопасно).', tab_logs: 'Logs', tab_settings: 'Настройки', close_menu: 'Close menu', // TODO: translate logs_title: 'Logs', // TODO: translate logs_file: 'File', // TODO: translate logs_tail: 'Tail', // TODO: translate logs_auto_refresh: 'Auto-refresh (5s)', // TODO: translate logs_wrap: 'Wrap lines', // TODO: translate logs_copy_all: 'Copy all', // TODO: translate logs_empty: 'No log lines yet.', // TODO: translate logs_loading: 'Loading logs…', // TODO: translate logs_load_failed: 'Logs failed to load', // TODO: translate logs_status_idle: 'Choose a log file to view recent lines.', // TODO: translate logs_no_mtime: 'not written yet', // TODO: translate logs_truncated_hint: 'Showing the tail of a large log file; older bytes were skipped to keep memory bounded.', // TODO: translate logs_copied: 'Logs copied', // TODO: translate logs_severity: 'Уровень', logs_severity_all: 'Все', logs_severity_errors: 'Ошибки', logs_severity_warnings: 'Предупреждения+', logs_filter_active: 'показано (фильтр активен)', new_conversation: 'Новая беседа', filter_conversations: 'Фильтр бесед...', markdown_table_filter: 'Фильтр таблицы', markdown_table_sort_column: 'Сортировать столбец', session_time_unknown: 'Неизвестно', session_time_minutes_ago: (n) => `${n}м`, session_time_hours_ago: (n) => `${n}ч`, session_time_days_ago: (n) => `${n}д`, session_time_last_week: '1н', session_time_bucket_today: 'Сегодня', session_time_bucket_yesterday: 'Вчера', session_time_bucket_this_week: 'На этой неделе', session_time_bucket_last_week: 'На прошлой неделе', session_time_bucket_older: 'Ранее', scheduled_jobs: 'Запланированные задания', new_job: 'Новое задание', loading: 'Загрузка...', search_skills: 'Поиск навыков...', new_skill: 'Новый навык', personal_memory: 'Личная память', current_task_list: 'Текущий список задач', workspace_desc: 'Добавляйте рабочие пространства и переключайтесь между ними в своих сеансах.', session_meta_messages: (n) => `${n} сообщ.`, session_meta_children: (n) => `${n} ${n === 1 ? 'дочерн.' : 'дочерн.'}`, session_meta_segments: (n) => `${n} сегм.`, session_lineage_toggle_hint: '{0} — предыдущие ходы контекста свернуты здесь. Нажмите, чтобы показать или скрыть их.', session_lineage_static_hint: '{0} — предыдущие ходы контекста свернуты здесь.', session_child_toggle_hint: '{0} — дочерние разговоры, созданные из этого сеанса. Нажмите, чтобы показать или скрыть их.', session_readonly_title_hint: 'Импортированный сеанс только для чтения — {0}', session_lineage_segment_untitled: 'Сегмент без названия', session_lineage_segment_open: 'Открыть сегмент цепочки', new_profile: 'Новый профиль', transcript: 'Транскрипт', download_transcript: 'Скачать как Markdown', import: 'Импорт', export_session_json: 'JSON', export_session_json_tooltip: 'Экспортировать сессию как JSON', export_session_html: 'HTML', export_session_html_tooltip: 'Экспортировать как автономную HTML-страницу', import_session_json_tooltip: 'Импортировать сессию из JSON', clear_conversation_btn_tooltip: 'Очистить все сообщения в этой беседе', settings_label_rtl: 'Раскладка чата справа налево', settings_desc_rtl: 'Переворачивает выравнивание сообщений чата и поля ввода для языков вроде арабского или иврита. Влияет только на область чата — боковая панель и другие панели остаются слева направо.', settings_label_sound: 'Звук уведомления', settings_desc_sound: 'Проигрывать звук, когда помощник завершает ответ.', settings_label_notifications: 'Уведомления браузера', settings_desc_notifications: 'Показывать системное уведомление, когда ответ готов, а вкладка находится в фоне.', notifications_enable_btn: 'Enable notifications', notifications_test_btn: 'Send test', notifications_permission_status: (status) => `Permission: ${status}`, notifications_enabled_toast: 'Notifications enabled.', notifications_denied: 'Notifications are blocked in this browser. Enable them in browser settings.', notifications_unsupported: 'Notifications are not supported in this browser.', settings_desc_token_usage: 'Показывает количество входных и выходных токенов под каждым ответом помощника. Также переключается через /usage.', settings_sidebar_density_compact: 'Компактно', settings_sidebar_density_detailed: 'Подробно', settings_desc_sidebar_density: 'Управляет тем, сколько метаданных показывается в списке сеансов на левой панели.', settings_label_auto_title_refresh: 'Адаптивное обновление заголовка', settings_auto_title_refresh_off: 'Выкл', settings_auto_title_refresh_5: 'Каждые 5 обменов', settings_auto_title_refresh_10: 'Каждые 10 обменов', settings_auto_title_refresh_20: 'Каждые 20 обменов', settings_desc_auto_title_refresh: 'Автоматически переформулирует заголовок сессии на основе последнего обмена, чтобы он оставался актуальным по мере развития беседы. Требует настроенную модель генерации заголовков.', settings_desc_external_sessions: 'Показать беседы из CLI, Telegram, Discord, Slack и других каналов в списке сеансов. Нажмите для импорта и продолжения.', settings_desc_claude_code_sessions: 'Show Claude Code imported sessions in the sidebar, or hide them while leaving other external sessions visible.', settings_desc_cron_sessions: 'Surface cron job output as conversations in the sidebar. Only active when non-WebUI sessions are enabled. Defaults off; high-frequency jobs can flood the sidebar.', settings_desc_webhook_sessions: 'Surface webhook runs as conversations in the sidebar. Only active when non-WebUI sessions are enabled. Defaults off; high-volume routes can flood the sidebar.', settings_desc_previous_messaging_sessions: 'Показывать предыдущие сеансы Discord, Telegram, Slack и Weixin, замененные сбросом или сжатием.', settings_desc_sync_insights: 'Синхронизирует использование токенов WebUI в state.db, чтобы Hermes /insights включал данные браузерных сеансов. Выключено по умолчанию.', settings_desc_check_updates: 'Показывает баннер, когда доступны более новые версии WebUI или Agent. Периодически выполняет git fetch в фоне.', settings_desc_ignore_agent_updates: 'Keep WebUI update checks on, but hide Agent update notices and skip Agent update fetches.', settings_desc_whats_new_summary: "Changes the What's New action from opening the raw diff first to generating a short, human-readable summary. The regular diff comparison stays available after the summary.", settings_desc_bot_name: 'Используется только для профиля по умолчанию. Другие профили используют свои имена.', settings_desc_password: 'Введите новый пароль, чтобы задать или изменить его. Оставьте пустым, чтобы сохранить текущую настройку.', password_placeholder: 'Введите новый пароль…', password_env_var_locked: 'Переменная окружения HERMES_WEBUI_PASSWORD сейчас задана и имеет приоритет. Сбросьте её и перезапустите сервер, чтобы управлять паролем отсюда.', password_env_var_locked_placeholder: 'Заблокировано: задана переменная HERMES_WEBUI_PASSWORD', disable_auth: 'Отключить авторизацию', sign_out: 'Выйти', settings_label_shutdown: 'Остановить сервер Hermes WebUI', settings_desc_shutdown_before_cmd: 'Корректно останавливает локальный сервер WebUI. Полезно, если вы запустили его через ', settings_desc_shutdown_between_cmds: ' и хотите остановить, не переключаясь в терминал. Чтобы WebUI снова стал доступен, потребуется перезапустить сервер (', settings_desc_shutdown_after_cmd: ' или родное приложение).', settings_btn_shutdown: 'Остановить сервер', settings_shutdown_confirm_title: 'Остановить Hermes WebUI', settings_shutdown_confirm_message: 'Остановить сервер Hermes WebUI?', settings_shutdown_confirm_btn: 'Остановить', settings_shutdown_stopped_message: 'Сервер остановлен. Можно закрыть эту вкладку.', // 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_model: 'Model', providers_status_not_configured_label: 'Not configured', providers_oauth_hint: 'Authenticated via OAuth. No API key needed.', providers_oauth_config_yaml_hint: 'Token configured via config.yaml. To update, edit the providers section in your config.yaml or run hermes auth.', providers_oauth_not_configured_hint: 'Not authenticated. Run hermes auth in the terminal to configure this provider.', providers_save: 'Save', providers_refresh_models: 'Refresh models', providers_refreshing: 'Refreshing…', providers_models_refreshed: 'Models refreshed', 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…', provider_quota_title: 'Квота активного провайдера', provider_quota_active_provider: 'Активный провайдер', provider_quota_last_checked_after_refresh: 'Последняя проверка после обновления', provider_quota_last_checked: 'Последняя проверка: {0}', provider_quota_refresh_usage: 'Обновить использование', provider_quota_refreshing: 'Обновление...', provider_quota_refresh_title: 'Обновить лимиты использования провайдера сейчас', provider_quota_refresh_succeeded: 'Использование провайдера обновлено', provider_quota_refresh_failed: 'Не удалось обновить использование провайдера', provider_quota_session_limit: 'Лимит на 5 часов', provider_quota_weekly_limit: 'Недельный лимит', provider_quota_window_fallback: 'Окно', provider_quota_metric_remaining: 'Осталось', provider_quota_metric_used: 'Использовано', provider_quota_metric_limit: 'Лимит', provider_quota_status_available: 'доступно', provider_quota_status_exhausted: 'исчерпано', provider_quota_status_unavailable: 'недоступно', provider_quota_status_failed: 'ошибка', provider_quota_status_checked: 'проверено', provider_quota_status_no_key: 'нет ключа', provider_quota_status_invalid_key: 'недействительный ключ', provider_quota_status_unsupported: 'не поддерживается', provider_quota_used_meta: 'использовано {0}', provider_quota_resets_meta: 'сброс {0}', provider_quota_credential_pool: 'Пул учетных данных', provider_quota_credential_label: 'Учетные данные {0}', provider_quota_pool_plans: 'Планы: {0}', provider_quota_pool_no_windows: 'Окна лимитов аккаунта не переданы.', provider_quota_account_limits_loaded: 'Лимиты аккаунта загружены.', provider_quota_unavailable: 'Статус квоты недоступен', provider_quota_retry_after: 'Повторить после {0}', provider_quota_pool_summary_available: 'доступно {0}/{1}', provider_quota_pool_summary_exhausted: '{0} исчерпано', provider_quota_pool_summary_failed: '{0} с ошибкой', provider_quota_pool_summary_checked: '{0} проверено', provider_cost_budget_label: 'Monthly budget', provider_cost_budget_placeholder: 'e.g. 50.00', provider_cost_budget_set: 'Set', provider_cost_budget_clear: 'Clear', provider_cost_budget_pct: '{0}% of ${1} budget (monthly pace)', provider_cost_budget_save_failed: 'Failed to save budget', cancel: 'Отмена', create_job: 'Создать задание', save_skill: 'Сохранить навык', editing: 'Редактирование', empty_title: 'Чем я могу помочь?', empty_subtitle: 'Спрашивайте что угодно, запускайте команды, изучайте файлы или управляйте запланированными задачами.', suggest_files: 'Какие файлы есть в этом рабочем пространстве?', suggest_schedule: 'Что у меня сегодня в расписании?', suggest_plan: 'Помоги спланировать небольшой проект.', onboarding_badge: 'ПЕРВЫЙ ЗАПУСК', onboarding_title: 'Добро пожаловать в Hermes Web UI', onboarding_lead: 'Краткая пошаговая настройка проверит Hermes, сохранит рабочую конфигурацию провайдера, выберет рабочее пространство и модель и при желании защитит приложение паролем.', onboarding_back: 'Назад', onboarding_continue: 'Продолжить', onboarding_skip: 'Пропустить настройку', onboarding_skipped: 'Настройка пропущена — используется существующая конфигурация.', onboarding_open: 'Открыть Hermes', onboarding_step_system_title: 'Проверка системы', onboarding_step_system_desc: 'Проверить Hermes Agent и видимость конфигурации.', onboarding_step_setup_title: 'Настройка провайдера', onboarding_step_setup_desc: 'Сохранить минимальную рабочую конфигурацию провайдера Hermes.', onboarding_step_workspace_title: 'Рабочее пространство и модель', onboarding_step_workspace_desc: 'Выбрать значения по умолчанию для новых сеансов и чатов.', onboarding_step_password_title: 'Необязательный пароль', onboarding_step_password_desc: 'Защитить Web UI перед тем, как делиться им.', onboarding_step_finish_title: 'Готово', onboarding_step_finish_desc: 'Проверьте настройки и войдите в приложение.', onboarding_notice_system_ready: 'Hermes Agent, похоже, доступен из Web UI.', onboarding_notice_system_unavailable: 'Hermes Agent ещё не полностью доступен. Bootstrap может установить его, но для настройки провайдера всё ещё может понадобиться терминал.', onboarding_check_agent: 'Hermes Agent', onboarding_check_agent_ready: 'Обнаружен и доступен для импорта', onboarding_check_agent_missing: 'Отсутствует или доступен только частично', onboarding_check_password: 'Пароль', onboarding_check_password_enabled: 'Уже включён', onboarding_check_password_disabled: 'Пока не включён', onboarding_check_provider: 'Конфигурация провайдера', onboarding_check_provider_ready: 'Готова к чату', onboarding_check_provider_partial: 'Сохранена, но не завершена', onboarding_check_provider_pending: 'Требует проверки', onboarding_config_file: 'Файл конфигурации:', onboarding_env_file: 'Файл .env:', onboarding_unknown: 'Неизвестно', onboarding_current_provider: 'Текущая конфигурация:', onboarding_missing_imports: 'Отсутствующие импорты:', onboarding_notice_setup_required: 'Выберите здесь простой путь настройки провайдера. Продвинутые OAuth-сценарии пока остаются в Hermes CLI.', onboarding_notice_setup_already_ready: 'Уже обнаружена рабочая конфигурация провайдера Hermes. Вы можете оставить её или заменить здесь.', onboarding_oauth_provider_ready_title: 'Провайдер уже авторизован', onboarding_oauth_provider_ready_body: 'Этот экземпляр настроен на использование OAuth-провайдера ({provider}), настроенного через Hermes CLI. API-ключ здесь не нужен — нажмите «Продолжить», чтобы завершить настройку.', onboarding_oauth_provider_not_ready_title: 'OAuth-провайдер ещё не авторизован', onboarding_oauth_provider_not_ready_body: 'Этот экземпляр настроен на использование {provider}, который работает через OAuth, а не через API-ключ. Запустите hermes auth или hermes model в терминале, чтобы пройти авторизацию, затем обновите Web UI.', onboarding_oauth_switch_hint: 'Или выберите ниже другой провайдер, чтобы перейти на настройку с ключом API:', onboarding_notice_workspace: 'Эти значения используют те же API настроек, что и обычное приложение.', onboarding_workspace_label: 'Рабочее пространство', onboarding_workspace_or_path: 'Или укажите путь к рабочему пространству', onboarding_workspace_placeholder: '/home/you/workspace', onboarding_provider_label: 'Режим настройки', onboarding_quick_setup_badge: 'Быстрая настройка', provider_category_easy_start: 'Быстрый старт', provider_category_self_hosted: 'Локальные / Open source', provider_category_specialized: 'Специализированные', onboarding_api_key_label: 'Ключ API', onboarding_api_key_placeholder: 'Оставьте пустым, чтобы сохранить уже сохранённый ключ', onboarding_api_key_label_optional: 'API key (optional)', // TODO: translate onboarding_api_key_placeholder_optional: 'Leave blank for keyless servers', // TODO: translate onboarding_api_key_help_keyless: 'Most LM Studio / Ollama / vLLM installs run keyless — leave this blank if your server doesn\'t require authentication. Use the Test connection button to verify.', // TODO: translate oauth_login_codex: 'Login with Codex (ChatGPT)', // TODO: translate oauth_codex_step1: 'Step 1: Visit this URL and enter the code', // TODO: translate oauth_codex_step2: 'Step 2: Enter this code on the page', // TODO: translate oauth_codex_polling: 'Waiting for authorization...', // TODO: translate oauth_codex_success: 'Codex OAuth login successful!', // TODO: translate oauth_codex_error: 'OAuth login failed', // TODO: translate oauth_codex_expired: 'Code expired, please try again', // TODO: translate onboarding_api_key_help_prefix: 'Сохраняется как секрет в вашем файле `.env` Hermes с помощью', onboarding_base_url_label: 'Базовый URL', onboarding_base_url_placeholder: 'https://your-endpoint.example/v1', onboarding_base_url_help: 'Используйте это для OpenAI-compatible маршрутизаторов, self-hosted серверов, LiteLLM, Ollama, LM Studio, vLLM и похожих endpoint-ов.', onboarding_model_label: 'Модель по умолчанию', onboarding_workspace_help: 'Выберите модель, которую Hermes должен использовать для новых чатов после завершения настройки.', onboarding_custom_model_placeholder: 'имя_вашей_модели', onboarding_custom_model_help: 'Для собственных endpoint-ов укажите точный ID модели, который ожидает ваш сервер.', onboarding_notice_password_enabled: 'Пароль уже настроен. Вводите новый только если хотите заменить текущий.', onboarding_notice_password_recommended: 'Необязательно, но рекомендуется, если вы собираетесь открывать UI не только на localhost.', onboarding_password_label: 'Пароль (необязательно)', onboarding_password_placeholder: 'Оставьте пустым, чтобы пропустить', onboarding_password_help: 'Пароли сохраняются через существующий API настроек и хэшируются на сервере.', onboarding_notice_finish: 'Позже вы сможете снова открыть настройки и изменить любое из этих значений.', onboarding_not_set: 'Не задано', onboarding_password_will_enable: 'Будет включён', onboarding_password_will_replace: 'Будет заменён текущий пароль', onboarding_password_keep_existing: 'Оставить текущий пароль', onboarding_password_remains_disabled: 'Останется отключённым', onboarding_password_skipped: 'Пропустить пока', onboarding_finish_help: 'После завершения в настройках сохранится onboarding_completed, и вы попадёте в обычное приложение.', onboarding_error_choose_workspace: 'Выберите рабочее пространство перед продолжением.', onboarding_error_choose_model: 'Выберите модель перед продолжением.', onboarding_error_provider_required: 'Выберите режим настройки перед продолжением.', onboarding_error_base_url_required: 'Для собственных endpoint-ов требуется базовый URL.', onboarding_probe_test_button: 'Test connection', // TODO: translate onboarding_probe_probing: 'Testing connection…', // TODO: translate onboarding_probe_ok: 'Connected. {n} model(s) available.', // TODO: translate onboarding_probe_error_generic: 'Could not reach the configured base URL.', // TODO: translate onboarding_probe_error_invalid_url: 'Base URL must start with http:// or https://.', // TODO: translate onboarding_probe_error_dns: 'Could not resolve the host. Check the URL or use the host\'s IP address.', // TODO: translate onboarding_probe_error_connect_refused: 'Connection refused — the server may not be running on that address. From inside Docker, try the host IP instead of localhost.', // TODO: translate onboarding_probe_error_timeout: 'The endpoint did not respond in time. Check that the server is running and the URL is correct.', // TODO: translate onboarding_probe_error_http_4xx: 'The endpoint returned a client error. Check authentication and the URL path (typically ends in /v1).', // TODO: translate onboarding_probe_error_http_5xx: 'The endpoint returned a server error. Check the LM Studio / Ollama server logs.', // TODO: translate onboarding_probe_error_parse: 'The endpoint did not return a model list in the expected shape. Verify the URL points to the OpenAI-compatible API root.', // TODO: translate onboarding_probe_error_unreachable: 'Could not reach the configured base URL.', // TODO: translate onboarding_error_probe_failed: 'Could not validate the configured base URL.', // TODO: translate onboarding_error_workspace_required: 'Рабочее пространство обязательно.', onboarding_error_model_required: 'Модель обязательна.', onboarding_complete: 'Первичная настройка завершена', error_prefix: 'Ошибка: ', default: 'default', search: 'Search', not_available: 'н/д', never: 'никогда', add: 'Добавить', add_failed: 'Не удалось добавить: ', remove_failed: 'Не удалось удалить: ', switch_failed: 'Не удалось переключить: ', name_required: 'Требуется имя', content_required: 'Требуется содержимое', view: 'Просмотр', dismiss: 'Скрыть', disable: 'Отключить', cron_no_jobs: 'Запланированные задания не найдены.', cron_status_off: 'неактивно', cron_status_paused: 'на паузе', cron_status_error: 'ошибка', cron_status_active: 'активно', cron_status_running: 'выполняется\u2026', cron_status_needs_attention: 'требует внимания', cron_attention_desc: 'У этого повторяющегося задания нет времени следующего запуска. Планировщик мог не суметь вычислить следующий запуск.', cron_attention_croniter_hint: 'В окружении Gateway может отсутствовать пакет croniter. Перезапустите Gateway с поддержкой cron, затем возобновите это задание.', cron_attention_resume: 'Возобновить и пересчитать', cron_jobs_project: 'Задания Cron', cron_attention_run_once: 'Запустить один раз сейчас', cron_attention_copy_diagnostics: 'Скопировать диагностику', cron_diagnostics_copied: 'Диагностика cron скопирована', cron_next: 'Следующий', cron_last: 'Последний', cron_run_now: 'Запустить сейчас', cron_pause: 'Пауза', cron_resume: 'Возобновить', cron_job_name_placeholder: 'Имя задания', cron_schedule_placeholder: 'Расписание', cron_prompt_placeholder: 'Промпт', cron_last_output: 'Последний вывод', cron_expand_prompt: 'Развернуть промпт', cron_collapse_prompt: 'Свернуть промпт', cron_expand_output: 'Развернуть вывод', cron_collapse_output: 'Свернуть вывод', cron_mode_agent: 'Агент', cron_mode_script: 'Скрипт', cron_mode_label: 'Режим', cron_script_job_banner: 'По расписанию запускается скрипт — stdout доставляется в канал. Агент, промпт и skills не используются.', cron_script_card_title: 'Скрипт', cron_script_output: 'Вывод скрипта', cron_script_path_label: 'Путь к скрипту', cron_script_path_hint: 'Ищется в ~/.hermes/scripts/, если не указан абсолютный путь. Логику меняй в файле скрипта на сервере.', cron_script_badge_title: 'Скриптовая задача (без агента)', cron_workdir_label: 'Рабочая директория', cron_view_full_output: 'View full output', cron_all_runs: 'Все запуски', cron_hide_runs: 'Скрыть запуски', cron_no_runs_yet: '(пока запусков нет)', cron_schedule_required_example: 'Требуется расписание (например, "0 9 * * *" или "every 1h")', cron_schedule_required: 'Требуется расписание', cron_prompt_required: 'Требуется промпт', cron_job_created: 'Задание создано', cron_duplicate: 'Дублировать', cron_duplicated: 'Задание дублировано (приостановлено)', cron_job_triggered: 'Задание запущено', cron_job_paused: 'Задание поставлено на паузу', cron_job_resumed: 'Задание возобновлено', cron_job_updated: 'Задание обновлено', cron_model_label: 'Переопределение модели', cron_model_hint: 'Переопределяет модель по умолчанию для этого задания.', cron_model_no_agent_hint: 'No-agent jobs run the configured script directly; model is unused.', cron_model_use_default: 'По умолчанию (профиль/системная модель)', cron_delete_confirm_title: 'Удалить cron-задание', cron_delete_confirm_message: 'Это действие нельзя отменить.', cron_job_deleted: 'Задание удалено', cron_completion_status: (name, status) => `Cron-задание «${name}» — ${status}`, status_failed: 'неудачно', status_completed: 'завершено', todos_no_active: 'В этой сессии нет активного списка задач.', clear_conversation_title: 'Очистить беседу', clear_conversation_message: 'Очистить все сообщения? Это действие нельзя отменить.', clear_failed: 'Не удалось очистить: ', skills_no_match: 'Подходящих навыков не найдено.', skill_enabled: 'Включено', skill_disabled: 'Отключено', skill_toggle_failed: 'Не удалось переключить навык: ', linked_files: 'Связанные файлы', skill_load_failed: 'Не удалось загрузить навык: ', skill_file_load_failed: 'Не удалось загрузить файл: ', skill_name_required: 'Требуется имя навыка', skill_updated: 'Навык обновлён', skill_created: 'Навык создан', memory_notes_label: 'память (заметки)', memory_saved: 'Память сохранена', my_notes: 'Мои заметки', user_profile: 'Пользовательский профиль', external_notes_sources: 'Сторонние заметки', external_notes_empty: 'Источники заметок или знаний MCP пока не видны. Настройте Joplin, Obsidian, Notion, llm-wiki или другой сервер заметок, чтобы он появился здесь.', external_notes_auto_recall_hint: 'Автоматический вызов контекста сеанса не меняется; эта панель показывает только настроенные источники и доступные инструменты чтения/поиска.', external_notes_no_tools: 'Для этого источника сейчас не видно инструментов чтения/поиска.', external_notes_tool_count: (count) => `Доступно инструментов заметок: ${count}`, external_notes_configured_hint: 'От этого настроенного источника ожидаются имена инструментов; живые схемы появятся, когда WebUI runtime их предоставит.', external_notes_recent_ai: 'Недавно использовано AI', external_notes_auto: 'auto', external_notes_recent_ai_reason: 'Автоматический вызов', external_notes_search_placeholder: 'Искать заметки…', external_notes_search_empty: 'Выполните поиск по настроенному источнику заметок, чтобы увидеть предпросмотр здесь.', source_active: 'active', source_configured: 'configured', no_notes_yet: 'Пока нет заметок.', no_profile_yet: 'Пока нет профиля.', agent_soul: 'Душа агента', no_soul_yet: 'Душа пока не задана.', workspace_choose_path: 'Выберите путь к рабочему пространству', workspace_choose_path_meta: 'Добавьте проверенный путь и переключите эту беседу', workspace_manage: 'Управление рабочими пространствами', workspace_manage_meta: 'Открыть панель Spaces', workspace_use_title: 'Использовать в текущем сеансе', workspace_use: 'Использовать', workspace_add_path_placeholder: 'Добавьте путь к рабочему пространству (например, /Users/you/project)', workspace_paths_validated_hint: 'Перед сохранением пути проверяются на существование.', workspace_drag_hint: 'Перетащите для изменения порядка', workspace_reorder_failed: 'Не удалось изменить порядок', workspace_added: 'Рабочее пространство добавлено', workspace_renamed: 'Рабочее пространство переименовано', workspace_remove_confirm_title: 'Удалить рабочее пространство', workspace_remove_confirm_message: (path) => `Удалить «${path}»?`, workspace_removed: 'Рабочее пространство удалено', workspace_switch_prompt_title: 'Переключить рабочее пространство', workspace_switch_prompt_message: 'Введите абсолютный путь к рабочему пространству, чтобы добавить его и переключить эту беседу.', workspace_switch_prompt_confirm: 'Переключить', workspace_switch_prompt_placeholder: '/Users/you/project', workspace_not_added: 'Рабочее пространство не добавлено', workspace_already_saved: 'Рабочее пространство уже сохранено — выберите его из списка', workspace_busy_switch: 'Нельзя переключать рабочее пространство, пока агент работает', discard_file_edits_title: 'Отменить изменения файлов?', discard_file_edits_message: 'При переключении рабочих пространств несохранённые изменения в предпросмотре будут потеряны.', workspace_switched_to: (name) => `Переключено на ${name}`, profiles_no_profiles: 'Профили не найдены.', profile_api_keys_configured: 'API-ключи настроены', profile_gateway_running: 'Gateway запущен', profile_gateway_stopped: 'Gateway остановлен', profile_active: 'АКТИВЕН', profile_no_configuration: 'Нет конфигурации', profile_skill_count: (count) => { const mod10 = count % 10; const mod100 = count % 100; const word = mod10 === 1 && mod100 !== 11 ? 'навык' : (mod10 >= 2 && mod10 <= 4 && (mod100 < 10 || mod100 >= 20) ? 'навыка' : 'навыков'); return `${count} ${word}`; }, profile_use: 'Использовать', profile_switch_title: 'Переключиться на этот профиль', profile_delete_title: 'Удалить этот профиль', profile_default_label: '(по умолчанию)', profile_name_placeholder: 'Название профиля (строчные буквы, a-z, 0-9, дефисы)', profile_clone_label: 'Скопировать конфигурацию из активного профиля', profile_model_label: 'Модель / провайдер', profile_model_hint: 'Выберите настроенного провайдера и модель для этого нового профиля.', profile_model_use_default: 'Использовать значение активного профиля', profile_base_url_placeholder: 'Базовый URL (необязательно, например http://localhost:11434)', profile_api_key_placeholder: 'API-ключ (необязательно)', manage_profiles: 'Управление профилями', profiles_load_failed: 'Не удалось загрузить профили', profile_switched_new_conversation: (name) => `Переключено на профиль: ${name} — начата новая беседа`, profile_switched: (name) => `Переключено на профиль: ${name}`, profile_name_rule: 'Только строчные буквы, цифры, дефисы и подчёркивания', profile_base_url_rule: 'Базовый URL должен начинаться с http:// или https://', profile_created: (name) => `Профиль создан: ${name}`, profile_delete_confirm_title: (name) => `Удалить профиль «${name}»?`, profile_delete_confirm_message: 'Все сеансы, конфигурация, навыки и память этого профиля будут удалены безвозвратно. Это действие невозможно отменить.', profile_deleted: (name) => `Профиль удалён: ${name}`, active_conversation_none: 'Активная беседа не выбрана.', active_conversation_meta: (title, count) => { const mod10 = count % 10; const mod100 = count % 100; const word = mod10 === 1 && mod100 !== 11 ? 'сообщение' : (mod10 >= 2 && mod10 <= 4 && (mod100 < 10 || mod100 >= 20) ? 'сообщения' : 'сообщений'); return `${title} · ${count} ${word}`; }, settings_unsaved_changes: 'У вас есть несохранённые изменения.', sign_out_failed: 'Не удалось выйти: ', disable_auth_confirm_title: 'Отключить защиту паролем', disable_auth_confirm_message: 'Любой сможет получить доступ к этому экземпляру.', auth_disabled: 'Авторизация отключена — защита паролем снята', disable_auth_failed: 'Не удалось отключить авторизацию: ', current_password_label: 'Текущий пароль', current_password_placeholder: 'Введите текущий пароль…', current_password_required: 'Для изменения или отключения авторизации требуется текущий пароль.', current_password_incorrect: 'Текущий пароль неверный.', disable_auth_typed_confirm: 'Введите DISABLE AUTH для подтверждения', auth_status_password: 'Парольная авторизация', auth_status_passkey_only: 'Только ключи доступа', auth_status_unauthenticated: 'Без авторизации', auth_warning_badge: 'Авторизация отключена', auth_disabled_warning_message: 'Этот экземпляр доступен без авторизации.', auth_acknowledged_label: 'Я ознакомился(ась) с этим риском; показывать менее срочное предупреждение в навигации.', auth_ack_save_failed: 'Не удалось обновить подтверждение: ', bg_error_single: (title) => `В "${title}" возникла ошибка`, bg_error_multi: (count) => `${count} сеансов столкнулись с ошибкой`, skill_deleted: 'Навык удалён', skill_delete_confirm: 'Удалить навык "{0}"?', skills_empty_title: 'Выберите навык', skills_empty_sub: 'Выберите навык на боковой панели, чтобы просмотреть его содержимое, или создайте новый.', skills_edit: 'Редактировать', skills_delete: 'Удалить', skills_back_to: 'Назад к {0}', tasks_empty_title: 'Выберите запланированное задание', tasks_empty_sub: 'Выберите задание на боковой панели, чтобы просмотреть его детали и запуски, или создайте новое.', workspaces_empty_title: 'Выберите пространство', workspaces_empty_sub: 'Выберите пространство на боковой панели, чтобы просмотреть его файлы и настройки, или добавьте новое.', profiles_empty_title: 'Выберите профиль', profiles_empty_sub: 'Выберите профиль агента на боковой панели, чтобы просмотреть и изменить его настройки, или создайте новый.', // skill form skill_name: 'Имя', skill_category: 'Категория', skill_category_placeholder: 'Необязательно, например devops', skill_content: 'Содержимое SKILL.md', skill_content_placeholder: 'YAML-заголовок + тело markdown', skill_rename_not_supported: 'Переименование навыка не поддерживается. Создайте новый навык и удалите старый.', skill_metadata: 'Метаданные', // cron form cron_name_label: 'Имя', cron_name_placeholder: 'Необязательно', cron_schedule_label: 'Расписание', cron_schedule_preset_label: 'Предустановка', cron_schedule_preset_hourly: 'Ежечасно', cron_schedule_preset_daily: 'Ежедневно', cron_schedule_preset_weekdays: 'По будням', cron_schedule_preset_weekly: 'Еженедельно', cron_schedule_preset_monthly: 'Ежемесячно', cron_schedule_preset_custom: 'Пользовательский', cron_schedule_hint: "Для повторяющихся заданий используйте 'every 1h' или cron-выражение. Простые интервалы вроде '30m' выполняются один раз.", cron_schedule_once_warning: "Интервалы вроде '30m' выполняются один раз и удаляются после запуска. Используйте 'every 30m' для повторяющегося задания.", cron_prompt_label: 'Запрос', cron_deliver_label: 'Доставлять вывод', cron_deliver_local: 'Локально (только сохранение)', cron_deliver_custom: 'Пользовательская доставка', cron_profile_label: 'Профиль', cron_profile_server_default: 'по умолчанию сервера', cron_profile_server_default_hint: 'Использует профиль WebUI-сервера по умолчанию во время запуска. Существующие задания без профиля сохраняют это поведение.', cron_toast_notifications_label: 'Уведомления о завершении', cron_toast_notifications_hint: 'Показывать toast, когда это cron-задание завершается. Значок задач и маркер нового запуска всё равно обновляются.', cron_toast_notifications_enabled: 'Включено', cron_toast_notifications_disabled: 'Отключено', cron_skills_label: 'Навыки', cron_skills_placeholder: 'Добавить навыки (необязательно)…', cron_skills_edit_hint: 'Список навыков нельзя изменить после создания.', // workspace form workspace_name_label: 'Имя', workspace_name_placeholder: 'Необязательное понятное имя', workspace_path_label: 'Путь', workspace_path_required: 'Путь обязателен', workspace_path_readonly: 'Путь нельзя изменить. Только переименование.', workspace_new_title: 'Новое пространство', // profile form 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_hide_external: 'Скрыть из списка', session_archive_desc: 'Hide this conversation until archived is shown', session_archive_worktree_desc: 'Hide this conversation; keep its worktree on disk', session_hide_external_desc: 'Скрыть эту импортированную сессию из WebUI без удаления исходной истории.', session_archive_failed: 'Archive failed: ', session_archived: 'Session archived', session_archived_worktree: 'Session archived. Worktree remains on disk.', session_hidden: 'Сессия скрыта из списка', session_delete: 'Delete conversation', session_delete_desc: 'Permanently remove this conversation', session_delete_confirm: 'Delete this conversation?', session_delete_worktree_desc: 'Delete only the WebUI conversation; keep the worktree on disk', session_delete_worktree_confirm: (path) => `Delete this conversation? The worktree at ${path} will remain on disk.`, session_deleted: 'Conversation deleted', session_deleted_worktree: 'Conversation deleted. Worktree remains on disk.', session_worktree_remove: 'Remove worktree', session_worktree_remove_desc: (path) => `Delete the git worktree at ${path} from disk`, session_worktree_remove_confirm: (path) => `Remove git worktree from disk?\n\nPath: ${path}\n\nThis will delete the entire worktree directory. Session data remains in WebUI.`, session_worktree_remove_not_exists: (path) => `The worktree at ${path} no longer exists on disk.`, session_worktree_remove_confirm_label: 'Remove', session_worktree_removed: 'Worktree removed.', session_worktree_remove_failed: 'Failed to remove worktree: ', session_worktree_remove_status_failed: 'Failed to read worktree status: ', session_worktree_remove_locked_by_stream: 'Cannot remove — an active streaming session is using this worktree.', session_worktree_remove_locked_by_terminal: 'Cannot remove — an active terminal session is using this worktree.', session_worktree_remove_unsafe_blocked: 'Resolve local changes or unpushed commits before removing this worktree.', session_worktree_remove_dirty_warning: 'WARNING: This worktree has uncommitted changes which will be lost.', session_worktree_remove_untracked_warning: (count) => `${count} untracked file(s) will be permanently deleted.`, session_worktree_remove_ahead_warning: (ahead) => `${ahead} unpushed commit(s) will be lost.`, session_duplicate: 'Duplicate conversation', session_duplicate_desc: 'Create a copy with the same workspace and model', session_export_html: 'Export as HTML', session_export_html_desc: 'Download this conversation as a self-contained HTML file', session_duplicate_failed: 'Duplicate failed: ', session_stop_response: 'Stop response', session_stop_response_desc: 'Cancel the running response for this conversation', 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', session_select_mode: 'Выбрать', session_select_mode_desc: 'Выберите беседы для массового управления', session_select_all: 'Выбрать все', session_deselect_all: 'Снять выделение', session_selected_count: '{0} выбрано', session_batch_archive: 'В архив', session_batch_delete: 'Удалить', session_batch_move: 'Переместить в проект', session_batch_delete_confirm: 'Удалить {0} бесед(ы)?', session_batch_archive_confirm: 'Архивировать {0} бесед(ы)?', session_batch_delete_worktree_confirm: 'Удалить {0} бесед(ы)? У {1} бесед с worktree каталоги worktree останутся на диске.', session_batch_archive_worktree_confirm: 'Архивировать {0} бесед(ы)? У {1} бесед с worktree каталоги worktree останутся на диске.', session_no_selection: 'Ничего не выбрано', 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_check_now: 'Проверить', settings_checking: 'Проверка\u2026', settings_up_to_date: 'Актуально \u2713', settings_updates_available: 'Доступно обновлений: {count}', settings_updates_disabled: 'Проверка обновлений отключена', settings_update_check_failed: 'Ошибка проверки обновлений', settings_update_no_git: 'Невозможно проверить обновления (не git-клон)', settings_label_workspace_panel_open: 'Открывать панель рабочей области по умолчанию', settings_desc_workspace_panel_open: 'При включении панель файлов будет открываться автоматически в каждой новой сессии.', settings_label_workspace_todos_tab: 'Показывать вкладку Todos в панели рабочей области', settings_desc_workspace_todos_tab: 'При включении в панели рабочей области появляется вкладка Todos. Боковая панель Todos остаётся доступной.', settings_label_session_jump_buttons: 'Показывать кнопки перехода по сессии', settings_desc_session_jump_buttons: 'Показывать плавающие кнопки «Начало» и «Конец» при чтении длинных историй сессий.', settings_label_terminal_auto_expand: 'Автораскрытие терминала при выводе', settings_desc_terminal_auto_expand: 'Автоматически разворачивать свёрнутую панель терминала, когда запущенная команда выдаёт новый вывод.', settings_label_session_endless_scroll: 'Загружать старые сообщения при прокрутке вверх', settings_desc_session_endless_scroll: 'Если включено, старые сообщения загружаются автоматически при прокрутке вверх. Если выключено, используйте кнопку загрузки старых сообщений.', settings_label_auto_scroll_follow: 'Автопрокрутка к новому содержимому', settings_desc_auto_scroll_follow: 'Если включено, область прокручивается вниз по мере поступления новых токенов. Если выключено, вы сами управляете прокруткой.', settings_label_render_user_markdown: 'Render markdown in user messages', settings_label_show_titlebar_profile: 'Show profile switcher in titlebar', // TODO: translate settings_desc_show_titlebar_profile: 'When enabled, a profile switcher button appears in the top-left app titlebar so you can change profiles from any tab. Off by default; the composer footer always has a profile switcher regardless of this setting.', // TODO: translate settings_desc_render_user_markdown: 'When enabled, bold, italic, links, and other markdown in your own messages are rendered. Off by default; fenced code blocks and math always render regardless of this setting.', settings_label_large_text_paste_as_attachment: 'Attach large pasted text as file', settings_desc_large_text_paste_as_attachment: 'When enabled, long pasted text becomes a .md attachment instead of filling the composer.', settings_label_project_quick_create: 'Show per-project new-conversation buttons', settings_desc_project_quick_create: 'When enabled, each project chip in the sidebar gets a + button to start a conversation in that project.', settings_label_structured_code: 'JSON/YAML code blocks', settings_option_structured_code_auto: 'Auto: Tree for long blocks', settings_option_structured_code_on: 'Tree by default', settings_option_structured_code_off: 'Raw by default', settings_label_structured_code_auto_lines: 'Auto threshold lines', settings_desc_structured_code: 'When Auto is selected, JSON/YAML blocks with at least this many lines open in Tree view. Tree always opens the structured viewer; Raw keeps the syntax-highlighted text. You can still switch Tree/Raw on each block.', settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_chat_activity_display_mode: 'Activity display', settings_desc_chat_activity_display_mode: 'Compact Worklog groups supporting activity into a quiet summary. Transparent Stream keeps each thinking/tool event as its own chronological expandable row.', first_token_time: 'Time to first token', processed_elapsed: _i18nProcessedElapsedEn, worklog_thinking: 'Thinking', tool_target_skill_suffix: 'skill', tool_action_label: _i18nToolActionLabelEn, tool_worklog_summary: _i18nToolWorklogSummaryEn, tool_summary_join: _i18nToolSummaryJoinEn, done: 'Done', settings_option_compact_worklog: 'Compact Worklog', settings_option_transparent_stream: 'Transparent Stream', settings_label_tab_visibility: 'Вкладки боковой панели', settings_desc_tab_visibility: 'Выберите, какие вкладки отображаются на боковой панели и в рейле. Чат и настройки всегда видны.', settings_label_composer_controls: 'Chat footer controls', settings_desc_composer_controls: 'Toggle which controls are shown in the chat footer. Drag chips to reorder each footer group.', settings_label_composer_situational_controls: 'Situational footer controls', settings_desc_composer_situational_controls: 'These controls do not always appear, depending on viewport, mode, or runtime state. You can still toggle them off if needed.', composer_control_attach: 'Attach', composer_control_saved_prompts: 'Saved prompts', composer_control_mic: 'Mic', composer_control_profile: 'Profile', composer_control_workspace: 'Workspace', composer_control_model: 'Model', composer_control_reasoning: 'Reasoning', composer_control_context: 'Context', composer_control_voice_mode: 'Voice mode', composer_control_yolo: 'YOLO', composer_control_bg_badge: 'Background badge', composer_control_mobile_config: 'Mobile config', composer_control_quota_chip: 'Quota chip', composer_control_toolsets: 'Toolsets', composer_control_status: 'Status', open_in_browser: 'Открыть в браузере', settings_section_system_title: 'System', settings_tab_appearance: 'Appearance', settings_tab_conversation: 'Conversation', settings_tab_preferences: 'Preferences', settings_tab_plugins: 'Плагины', settings_tab_extensions: 'Extensions', // TODO: translate settings_extensions_gallery_tab: 'Gallery', settings_extensions_installed_tab: 'Installed', settings_extensions_diagnostics_tab: 'Diagnostics', settings_extensions_gallery_loading: 'Loading gallery…', settings_extensions_gallery_empty: 'No extensions found in the registry.', settings_extensions_gallery_error: 'Failed to load gallery.', ext_gallery_install: 'Install', ext_gallery_installing: 'Installing…', ext_gallery_installed: 'Installed', ext_gallery_uninstall: 'Uninstall', ext_gallery_uninstalling: 'Uninstalling…', ext_gallery_restart_required: 'Restart required', ext_gallery_permissions_show: 'Permissions', ext_gallery_permissions_hide: 'Hide permissions', ext_gallery_permissions_empty: 'Дополнительные разрешения не указаны.', ext_gallery_version: 'Version', ext_gallery_author: 'Author', ext_gallery_capabilities: 'Capabilities', ext_gallery_next_step: 'Следующий шаг', ext_gallery_after_install: 'После установки', ext_gallery_local_component_required: 'У этого расширения есть локальный компонент. После установки запустите требуемое локальное приложение или sidecar.', ext_gallery_local_app_label: 'Локальное приложение', ext_gallery_required_suffix: 'Требуется {0}', ext_gallery_sidecar_required: 'Требуется sidecar', ext_gallery_native_host_required: 'Требуется нативный хост', ext_gallery_open_setup_guide: 'Открыть руководство по настройке', ext_gallery_install_restart_required: 'Расширение установлено. Для применения требуется перезапуск.', ext_gallery_install_followup: 'Расширение установлено. Следующие шаги смотрите на карточке.', ext_gallery_install_ok: 'Extension installed successfully.', ext_gallery_uninstall_ok: 'Extension uninstalled.', settings_plugins_title: 'Plugins', // TODO: translate plugins_enable_toggle: 'Включить', settings_plugins_meta: 'View installed Hermes plugins and the lifecycle hooks they register. This panel is read-only.', // TODO: translate settings_plugins_empty: 'No Hermes plugins are currently visible. Install or enable plugins from the Hermes CLI/config to see them here.', // TODO: translate plugins_unnamed: 'Unnamed plugin', // TODO: translate plugins_no_description: 'No description provided.', // TODO: translate plugins_no_hooks: 'No registered lifecycle hooks', // TODO: translate plugins_registered_hooks: 'Registered hooks', // TODO: translate plugins_enabled: 'Enabled', // TODO: translate plugins_disabled: 'Disabled', // TODO: translate plugins_active_provider: 'Active (provider)', // TODO: translate plugins_provider_no_hooks: 'Provider plugin — no agent-visibility hooks', // TODO: translate plugins_load_failed: 'Failed to load plugins: ', // TODO: translate settings_tab_system: 'System', settings_tab_help: 'Help', settings_help_meta: 'Resources and support for Hermes WebUI.', settings_help_docs_label: 'Documentation', settings_help_docs_desc: 'Guides, configuration reference, and the full Hermes WebUI README.', settings_help_docs_link: 'Open Documentation', settings_help_issue_label: 'Having an issue?', settings_help_issue_desc: 'Search existing reports or open a new one on GitHub.', settings_help_issue_link: 'Open GitHub Issues', status_updated: 'Updated', status_ephemeral: 'Ephemeral snapshot — not saved to transcript history.', status_no_tokens: 'No token data', status_profile: 'Profile', status_hermes_home: 'Hermes home', status_started: 'Started', status_tokens: 'Tokens', status_unknown: 'Unknown', cmd_branch:'Fork this conversation into a new session', cmd_branch_usage:'/branch [name] — fork conversation (optionally with a name)', branch_forked:'Forked into new session', branch_failed:'Fork failed: ', fork_from_here:'Fork from here', forked_from:'Forked from', cmd_yolo: 'Переключить YOLO режим (без подтверждений)', yolo_no_session: 'Нет активного сеанса', yolo_enabled: '⚡ YOLO режим ВКЛ — подтверждения пропущены', yolo_disabled: 'YOLO режим ВЫКЛ', yolo_pill_label: 'YOLO', yolo_pill_title_active: 'YOLO режим активен — нажмите для отключения', approval_skip_all: '⚡ Пропустить все в этом сеансе', approval_skip_all_title: 'Пропустить все запросы подтверждения в этом сеансе', // composer action tooltips composer_send: 'Отправить сообщение', composer_queue: 'Поставить в очередь', composer_interrupt: 'Прервать и отправить', composer_steer: 'Направить ответ', composer_stop: 'Остановить генерацию', composer_disabled_clarify: 'Ответьте на запрос о разъяснении', composer_disabled_compression: 'Ожидание завершения сжатия', composer_compression_will_queue: 'Type a message — it will queue and send after compression', composer_disabled_empty: 'Введите сообщение для отправки', composer_mobile_workspace: 'Рабочее пространство', composer_mobile_model: 'Модель', composer_mobile_quota: 'Квота', composer_mobile_reasoning: 'Рассуждение', composer_mobile_context: 'Контекст', media_audio_label: 'Аудио', media_svg_label: 'Диаграмма', media_video_label: 'Видео', media_download: 'Скачать', csv_loading: 'Загрузка CSV', csv_too_large: 'CSV-файл слишком большой для встроенного отображения', csv_no_data: 'Недостаточно данных в CSV-файле', csv_error: 'Не удалось загрузить CSV-файл', csv_header_note: 'Первая строка отображается как заголовок таблицы', excalidraw_loading: 'Загрузка диаграммы', excalidraw_too_large: 'Файл Excalidraw слишком большой для отображения', excalidraw_invalid: 'Неверный формат файла Excalidraw', excalidraw_error: 'Не удалось загрузить файл Excalidraw', excalidraw_label: 'Диаграмма', excalidraw_download: 'Скачать', excalidraw_empty: 'Пустая диаграмма', excalidraw_render_error: 'Не удалось отобразить диаграмму', excalidraw_simplified: 'Упрощённый предпросмотр SVG — не полностью идентичен оригиналу Excalidraw', pdf_loading: 'Загрузка PDF {0}…', pdf_too_large: 'PDF слишком большой для встроенного просмотра', pdf_no_pages: 'Не удалось отобразить предварительный просмотр PDF', pdf_error: 'Не удалось загрузить PDF', pdf_download: 'Скачать PDF', pdf_truncated: 'Showing the first {0} of {1} pages — download for the full document', html_loading: 'Загрузка предпросмотра HTML…', html_too_large: 'HTML слишком большой для встроенного просмотра', html_error: 'Не удалось загрузить предпросмотр HTML', html_open_full: 'Открыть на всю страницу', html_sandbox_label: 'Предпросмотр HTML', // TTS (#499) tts_listen: 'Прослушать', tts_not_supported: 'Синтез речи не поддерживается', settings_label_tts: 'Синтез речи для ответов', settings_desc_tts: 'Показать кнопку динамика на сообщениях ассистента', settings_label_tts_auto_read: 'Авто-чтение ответов', settings_desc_tts_auto_read: 'Автоматически озвучивать ответы ассистента', // Composer voice-mode pref (#1488) settings_label_voice_mode: 'Кнопка режима свободных рук', settings_desc_voice_mode: 'Показывать кнопку голосового режима (аудиоволны) рядом с микрофоном диктовки. Hermes автоматически отправляет реплики после паузы и зачитывает ответы вслух. Требуется браузер с поддержкой распознавания речи и TTS.', settings_label_raw_audio: 'Отправлять сырую аудиозапись вместо расшифровки', settings_desc_raw_audio: 'Записывать и отправлять агенту исходный аудиофайл вместо преобразования в текст. Агент может расшифровать его или обработать сырое аудио (эмоции, фоновый шум, пользовательский STT). Как голосовые сообщения в Telegram.', voice_send_raw: 'Отправить сырое аудио', voice_raw_attached: 'Аудио прикреплено. Нажмите Отправить или добавьте текст.', settings_label_tts_voice: 'Голос', settings_desc_tts_voice: 'Выберите голос для синтеза речи', settings_label_tts_rate: 'Скорость речи', settings_label_tts_pitch: 'Тон речи', settings_label_tts_engine: 'Движок TTS', settings_desc_tts_engine: 'Выберите движок синтеза речи. Edge TTS использует нейронные голоса Microsoft через сервер.', checkpoint_date: 'Date', // TODO: translate checkpoint_diff_files_changed: (n) => `${n} file${n === 1 ? '' : 's'} changed`, // TODO: translate checkpoint_diff_no_changes: 'No differences found between this checkpoint and the current workspace.', // TODO: translate checkpoint_diff_title: 'Changes in checkpoint', // TODO: translate checkpoint_empty: 'No checkpoints found for this workspace.', // TODO: translate checkpoint_error: 'Failed to load checkpoints', // TODO: translate checkpoint_files: 'Files', // TODO: translate checkpoint_loading: 'Loading checkpoints…', // TODO: translate checkpoint_message: 'Message', // TODO: translate checkpoint_restore: 'Restore', // TODO: translate checkpoint_restore_confirm_message: (ckpt) => `Restore workspace to checkpoint "${ckpt}"? This will overwrite files with the saved versions. Files added after this checkpoint will not be deleted.`, // TODO: translate checkpoint_restore_confirm_title: 'Restore checkpoint?', // TODO: translate checkpoint_restored: 'Checkpoint restored', // TODO: translate checkpoint_title: 'Checkpoints', // TODO: translate checkpoint_view_diff: 'View diff', // TODO: translate insights_activity_by_day: 'Activity by Day', // TODO: translate insights_activity_by_hour: 'Activity by Hour', // TODO: translate insights_cost: 'Estimated Cost', // TODO: translate insights_daily_tokens: 'Daily Tokens', insights_model_name: 'Model', insights_model_sessions: 'Sessions', insights_model_tokens: 'Tokens', insights_model_cost: 'Cost', insights_model_cache: 'Кэш', insights_cache_hit: 'Доля попаданий в кэш промптов', insights_model_share: 'Share', insights_model_health_title: 'Model health comparison', insights_model_health_provider: 'Provider', insights_model_health_replacement: 'Replacement guide', insights_model_health_cost_per_m: 'Cost / 1M', insights_no_usage_data: 'No usage data yet', insights_footer: 'Showing data from the last {days} days', // TODO: translate insights_skill_usage_title: 'Skill Usage', // TODO: translate insights_skill_usage_sub: 'Tool invocation frequency', // TODO: translate insights_skill_usage_total: 'Total invocations', // TODO: translate insights_skill_usage_skills_used: 'Skills used', // TODO: translate insights_skill_usage_no_data: 'No skill usage data yet', // TODO: translate insights_skill_usage_no_data_hint: 'Skills will appear here once used in conversations.', // TODO: translate insights_skill_usage_footer: 'Counts from ~/.hermes/skills/', // TODO: translate insights_skill_usage_col_skill: 'Skill', // TODO: translate insights_skill_usage_col_uses: 'Uses', // TODO: translate insights_skill_usage_col_views: 'Views', // TODO: translate insights_skill_usage_col_share: 'Usage %', // TODO: translate insights_skill_usage_col_patches: 'Patches', // TODO: translate insights_input_tokens: 'Input', // TODO: translate insights_messages: 'Messages', // TODO: translate insights_models: 'Models', // TODO: translate insights_no_cost: 'N/A', // TODO: translate insights_output_tokens: 'Output', // TODO: translate insights_peak_hour: 'Peak: {hour}', // TODO: translate insights_sessions: 'Sessions', // TODO: translate insights_title: 'Usage Analytics', // TODO: translate insights_token_breakdown: 'Token Breakdown', // TODO: translate insights_tokens: 'Tokens', // TODO: translate insights_total: 'Total', // TODO: translate settings_desc_api_redact: 'Self-hosted users can disable for transparency (not recommended for shared instances).', // TODO: translate settings_label_api_redact: 'Redact sensitive data in API responses', // TODO: translate subagent_children: 'Subagent sessions', // TODO: translate outline_title: 'Outline', // TODO: translate outline_empty: 'No questions yet.', // TODO: translate outline_loading: 'Loading…', // TODO: translate wiki_browse: 'Browse wiki', wiki_search_placeholder: 'Search pages...', wiki_no_pages: 'No wiki pages found', wiki_not_configured: 'Wiki not configured', }, es: { offline_title: 'Conexión perdida', offline_browser_detail: 'Tu navegador indica que este dispositivo está sin conexión.', offline_network_detail: 'Hermes no está disponible desde este navegador ahora mismo.', offline_autorefresh: 'Actualizaré esta página automáticamente cuando Hermes vuelva a estar disponible.', offline_check_now: 'Comprobar ahora', offline_checking: 'Comprobando…', offline_stream_waiting: 'Conexión perdida. Esperando para actualizar…', _lang: 'es', _label: 'Español', _speech: 'es-ES', // boot.js cancelling: 'Cancelando…', cancel_failed: 'Error al cancelar: ', mic_denied: 'Acceso al micrófono denegado. Revisa los permisos del navegador.', mic_insecure_origin: 'Voice input needs a secure connection. Open Hermes over HTTPS or from localhost to use the microphone.', // TODO: translate mic_no_speech: 'No se detectó voz. Inténtalo de nuevo.', mic_network: 'El reconocimiento de voz no está disponible.', mic_error: 'Error de entrada por voz: ', session_imported: 'Sesión importada', import_failed: 'Error al importar: ', import_invalid_json: 'JSON inválido', image_pasted: 'Imagen pegada: ', text_pasted: 'Texto pegado adjuntado como ', // messages.js edit_message: 'Editar mensaje', regenerate: 'Regenerar respuesta', copy: 'Copiar', copied: '¡Copiado!', copy_failed: 'Error al copiar', selected_text_reply: 'Responder con selección', selected_text_reply_title: 'Añadir el texto del chat seleccionado como contexto citado', selected_text_reply_appended: 'Texto seleccionado añadido al compositor', saved_prompts_empty: 'No hay indicaciones guardadas todavía.', saved_prompts_save_current: 'Guardar entrada actual como indicación', saved_prompts_saved: 'Indicación guardada', saved_prompts_delete: 'Eliminar indicación', saved_prompts_empty_input: 'Escribe una indicación para guardar primero', context_block_name_default: 'Contexto', context_block_flush_aria: 'Los bloques de contexto se incluirán al enviar', context_block_rename_hint: 'Haz clic o pulsa Enter para renombrar', context_block_rename_aria: 'Renombrar bloque de contexto', context_block_remove: 'Eliminar bloque de contexto', diff_loading: 'Cargando diff', diff_error: 'No se pudo cargar el archivo de parche', diff_too_large: 'Archivo de parche demasiado grande para mostrar', tree_view: '树形', raw_view: '原始', parse_failed_note: 'parse failed', you: 'Tú', mcp_servers_title: 'MCP 服务器', mcp_servers_desc: '管理 config.yaml 中配置的 MCP 服务器。', mcp_no_servers: '未配置 MCP 服务器。', mcp_add_server: '+ 添加服务器', mcp_field_name: '服务器名称', mcp_transport_label: '传输类型', mcp_field_command: '命令', mcp_field_args: '参数(逗号分隔)', mcp_field_url: 'URL', mcp_field_timeout: '超时(秒)', mcp_save: '保存', mcp_cancel: '取消', mcp_name_required: '需要服务器名称。', mcp_url_required: 'HTTP 传输需要 URL。', mcp_command_required: 'stdio 传输需要命令。', mcp_saved: 'MCP 服务器已保存。', mcp_save_failed: '保存 MCP 服务器失败。', mcp_delete_confirm_title: '删除 MCP 服务器', mcp_delete_confirm_message: '删除 MCP 服务器「{0}」?此操作无法撤销。', mcp_deleted: 'MCP 服务器已删除。', mcp_delete_failed: '删除 MCP 服务器失败。', mcp_load_failed: '加载 MCP 服务器失败。', mcp_restart_hint: 'Server changes are read-only here for now. Edit config.yaml and restart Hermes for changes to take effect.', mcp_toggle_followup: 'Enable/disable controls are intentionally deferred until MCP reload semantics are explicit.', mcp_status_active: 'Active', mcp_status_configured: 'Configured', mcp_status_disabled: 'Disabled', mcp_status_invalid_config: 'Invalid config', mcp_status_unknown: 'Unknown', mcp_tool_count: '{0} tools', mcp_enabled_yes: 'Enabled', mcp_enabled_no: 'Disabled', mcp_enable_server: 'Enable this MCP server', mcp_disable_server: 'Disable this MCP server', mcp_enabled_toast: (name) => `MCP server "${name}" enabled.`, mcp_disabled_toast: (name) => `MCP server "${name}" disabled.`, mcp_toggle_failed: 'Failed to update MCP server.', mcp_tools_title: 'MCP Tools', mcp_tools_desc: 'Search known tools across active MCP servers.', mcp_tools_search_placeholder: 'Search tools by name, server, or description…', mcp_tools_no_tools: 'No MCP tools are available from the active runtime inventory.', mcp_tools_no_matches: 'No MCP tools match your search.', mcp_tools_load_failed: 'Failed to load MCP tools.', mcp_tools_schema_empty: 'No schema parameters.', mcp_tools_runtime_note: 'Tool inventory only uses already-known active MCP runtime data; the WebUI does not start or probe servers.', mcp_tools_summary_no_matches: (query,total) => `No MCP tools matching “${query}” (${total} total MCP tools).`, mcp_tools_summary_none: 'No MCP tools to show.', mcp_tools_summary_matching: (query) => ` matching “${query}”`, mcp_tools_summary_total_note: (total) => ` (${total} total MCP tools)`, mcp_tools_summary_showing: (start,end,filtered,searchNote,totalNote,page,pages) => `Showing ${start}-${end} of ${filtered} MCP tools${searchNote}${totalNote}. Page ${page} of ${pages}.`, mcp_tools_page_size_prefix: 'Show', mcp_tools_page_size_suffix: 'per page', mcp_tools_per_page_aria: 'MCP tools per page', mcp_tools_inactive_configured_servers: (servers) => `Configured but inactive in this WebUI runtime: ${servers}.`, mcp_tools_pagination_label: 'MCP tools pagination', mcp_tools_previous_page: '‹ Prev', mcp_tools_previous_page_aria: 'Previous MCP tools page', mcp_tools_next_page: 'Next ›', mcp_tools_next_page_aria: 'Next MCP tools page', thinking: 'Pensando', expand_all: 'Expandir todo', collapse_all: 'Contraer todo', edit_failed: 'Error al editar: ', regen_failed: 'Error al regenerar: ', reconnect_active: 'Todavía se está generando una respuesta. ¿Recargar cuando termine?', reconnect_finished: 'Había una respuesta en curso cuando te fuiste. Puede que los mensajes se hayan actualizado.', // approval card approval_heading: 'Se requiere aprobación', approval_desc_prefix: 'Se detectó un comando peligroso', approval_btn_once: 'Permitir una vez', approval_btn_once_title: 'Permitir solo este comando (Enter)', approval_btn_session: 'Permitir en la sesión', approval_btn_session_title: 'Permitir durante esta sesión de conversación', approval_btn_always: 'Permitir siempre', approval_btn_always_title: 'Permitir siempre este patrón de comando', approval_btn_deny: 'Denegar', approval_btn_deny_title: 'Denegar — no ejecutar este comando', approval_responding: 'Respondiendo…', approval_gateway_unsupported: 'Approvals require a newer gateway. Upgrade the connected Hermes gateway to enable this.', approval_gateway_unsupported_label: 'Las aprobaciones no son compatibles', clarify_heading: 'Se necesita aclaración', clarify_hint: 'Elige una opción o escribe tu propia respuesta abajo.', clarify_other: 'Otra', clarify_send: 'Enviar', clarify_input_placeholder: 'Escribe tu respuesta…', clarify_responding: 'Respondiendo…', session_attention_approval: (n) => n === 1 ? 'Aprobación' : `${n} aprobaciones`, session_attention_clarify: (n) => n === 1 ? 'Pregunta' : `${n} preguntas`, session_attention_generic: (n) => n === 1 ? 'Atención' : `${n} elementos`, session_attention_approval_title: 'Esperando una decisión de permiso', session_attention_clarify_title: 'Esperando tu respuesta', session_attention_generic_title: 'Esperando una acción del usuario', untitled: 'Sin título', n_messages: (n) => `${n} mensajes`, load_older_messages: '↑ Desplázate hacia arriba o haz clic para cargar mensajes anteriores', session_jump_start: 'Inicio', session_jump_start_label: 'Saltar al inicio de la sesión', session_jump_end: 'Fin', session_jump_end_label: 'Saltar al final de la sesión', session_new_message: 'Mensaje nuevo', session_new_message_label: 'Mensaje nuevo disponible, saltar al final', jump_to_question: 'a la respuesta', jump_to_question_label: 'Saltar al inicio de esta respuesta', queued_label: 'Enviar después de la respuesta', queued_count: (n) => n === 1 ? '1 en cola' : `${n} en cola`, queued_cancel: 'Cancelar mensaje en cola', model_unavailable: ' (no disponible)', model_unavailable_title: 'Este modelo ya no está en tu lista actual de proveedores', provider_mismatch_warning: (m,p)=>`"${m}" puede no funcionar con tu proveedor configurado (${p}). Envía de todas formas, o ejecuta \`hermes model\` en la terminal para cambiar.`, provider_mismatch_label: 'Proveedor incompatible', gateway_auth_label: 'Error de autenticación de Gateway', gateway_start: 'Start', gateway_stop: 'Stop', gateway_restart: 'Restart', gateway_start_success: 'Gateway start completed.', gateway_stop_success: 'Gateway stop completed.', gateway_restart_success: 'Gateway restart completed.', gateway_start_failed: 'Gateway start failed', gateway_stop_failed: 'Gateway stop failed', gateway_restart_failed: 'Gateway restart failed', gateway_running: 'Running', gateway_session: 'session', gateway_sessions: 'sessions', gateway_status_load_failed: 'Failed to load gateway status', model_not_found_label: 'Modelo no encontrado', model_custom_label: 'ID de modelo personalizado', model_custom_placeholder: 'p. ej. openai/gpt-5.4', model_show_all_models: 'Mostrar todos los {0} modelos', model_search_placeholder: 'Buscar modelos…', model_search_no_results: 'No se encontraron modelos', model_group_configured: 'Configurados', ws_search_placeholder: 'Buscar espacios de trabajo…', ws_no_results: 'No se encontraron espacios de trabajo', workspace_new_worktree_conversation: 'Nueva conversación en worktree', workspace_new_worktree_conversation_meta: 'Crear un git worktree aislado para este espacio de trabajo.', workspace_worktree_created: 'Conversación en worktree creada', workspace_worktree_failed: 'Error al crear worktree: ', session_worktree_badge: 'Worktree', session_toolsets: 'Session Toolsets', // TODO: translate session_toolsets_desc: 'Use active profile defaults or choose a custom toolset list for this session', // TODO: translate session_toolsets_global: 'Active profile defaults', // TODO: translate session_toolsets_profile_defaults: 'Active profile defaults', // TODO: translate session_toolsets_custom: 'Custom override', // TODO: translate session_toolsets_use_profile_defaults: 'Use active profile defaults', // TODO: translate session_toolsets_configured_servers: 'Configured MCP servers', // TODO: translate session_toolsets_loading_servers: 'Loading configured servers...', // TODO: translate session_toolsets_no_configured_servers: 'No configured MCP servers', // TODO: translate session_toolsets_placeholder: 'tool1, tool2, \u2026', // TODO: translate session_toolsets_apply: 'Apply', // TODO: translate session_toolsets_clear: 'Use defaults', // TODO: translate session_toolsets_applied: 'Toolsets updated', // TODO: translate session_toolsets_cleared: 'Using active profile defaults', // TODO: translate session_toolsets_failed: 'Failed to update toolsets: ', // TODO: translate model_scope_advisory: 'Se aplica a esta conversación desde tu próximo mensaje.', model_scope_toast: 'Se aplica a esta conversación desde tu próximo mensaje.', // commands.js cmd_help: 'Listar los comandos disponibles', cmd_clear: 'Borrar los mensajes de la conversación', cmd_compress: 'Comprimir manualmente el contexto de la conversación (uso: /compress [tema])', ctx_compress_hint: 'Comprimir contexto para liberar espacio →', ctx_compress_action: '⚠ Comprimir ahora para liberar contexto', cmd_compact_alias: 'Alias antiguo de /compress', cmd_compact: 'Comprimir contexto de la conversación', cmd_model: 'Cambiar de modelo (p. ej. /model gpt-4o)', cmd_workspace: 'Cambiar de espacio de trabajo por nombre', cmd_terminal: 'Abrir terminal del espacio de trabajo', cmd_new: 'Iniciar una nueva sesión de chat', cmd_usage: 'Activar o desactivar el uso de tokens', cmd_theme: 'Cambiar apariencia (tema: system/dark/light, skin: default/ares/mono/graphite/slate/poseidon/sisyphus/charizard/sienna/catppuccin/nous/geist-contrast/zeus/verdigris)', cmd_personality: 'Cambiar la personalidad del agente', cmd_skills: 'Listar las skills de Hermes disponibles', cmd_use: 'Forzar una skill para el próximo mensaje', available_commands: 'Comandos disponibles:', type_slash: 'Escribe / para ver los comandos', conversation_cleared: 'Conversación borrada', command_label: 'Comando', context_compaction_label: 'Compacción de contexto', retrieval_context_label: 'Contexto indexado', retrieval_context_preview: 'Los mensajes anteriores se almacenan y se pueden recuperar con herramientas de contexto', preserved_task_list_label: 'Lista de tareas conservada', reference_only_label: 'Solo referencia', model_usage: 'Uso: /model ', no_model_match: 'No hay ningún modelo que coincida con "', model_did_you_mean: (m) => ` — ¿quisiste decir "${m}"?`, switched_to: 'Se cambió a ', workspace_usage: 'Uso: /workspace ', no_workspace_match: 'No hay ningún espacio de trabajo que coincida con "', switched_workspace: 'Se cambió al espacio de trabajo: ', workspace_switch_failed: 'Error al cambiar de espacio de trabajo: ', new_session: 'Nueva sesión creada', new_session_creating: 'Creando nueva conversación…', compressing: 'Solicitando compresión del contexto...', compress_running_label: 'Comprimiendo', compress_complete_label: 'Compresión completa', auto_compress_label: 'Compresión automática', compress_failed_label: 'La compresión falló', focus_label: 'Tema', token_usage_on: 'Uso de tokens activado', usage_personality_none: 'none', // TODO: translate token_usage_off: 'Uso de tokens desactivado', usage_cache_hit_detail: 'Caché: {0}% de acierto ({1} lectura / {2} escritura)', usage_cached_percent: '{0}% en caché', theme_usage: 'Uso: /theme ', theme_set: 'Tema: ', no_active_session: 'No hay ninguna sesión activa', cmd_queue: 'Poner mensaje en cola para el siguiente turno', cmd_goal: 'Definir o consultar un objetivo persistente', goal_evaluating_progress: 'Evaluating goal progress…', goal_working_toward: 'Working toward goal…', goal_continuing_toast: 'Continuing toward goal…', goal_status_none: 'No active goal. Set one with /goal .', goal_status_active: (turns, max_turns, goal) => `⊙ Goal (active, ${turns}/${max_turns} turns): ${goal}`, goal_status_paused: (turns, max_turns, reason, goal) => `⏸ Goal (paused, ${turns}/${max_turns}${reason ? `, ${reason}` : ''}): ${goal}`, goal_status_done: (turns, max_turns, goal) => `✓ Goal done (${turns}/${max_turns}): ${goal}`, goal_set: (turns, goal) => `⊙ Goal set (${turns}-turn budget): ${goal}`, goal_paused: (goal) => `⏸ Goal paused: ${goal}`, goal_resumed: (goal) => `▶ Goal resumed: ${goal}`, goal_cleared: 'Goal cleared.', goal_no_goal: 'No active goal.', goal_achieved: (reason) => `✓ Goal achieved: ${reason}`, goal_paused_budget_exhausted: (turns, max_turns) => `⏸ Goal paused — ${turns}/${max_turns} turns used. Use /goal resume to keep going, or /goal clear to stop.`, goal_continuing: (turns, max_turns, reason) => `↻ Continuing toward goal (${turns}/${max_turns}): ${reason}`, cmd_interrupt: 'Cancelar turno actual y enviar nuevo mensaje', cmd_steer: 'Inyectar una corrección a mitad del turno sin interrumpir al agente', cmd_queue_no_msg: 'Uso: /queue ', cmd_queue_not_busy: 'Sin tarea activa \u2014 env\u00eda normalmente', cmd_queue_confirm: 'Mensaje en cola', cmd_interrupt_no_msg: 'Uso: /interrupt ', cmd_interrupt_confirm: 'Interrumpido \u2014 enviando nuevo mensaje', cmd_steer_no_msg: 'Uso: /steer ', cmd_steer_fallback: 'Steer no disponible — borrador restaurado', cmd_steer_delivered: 'Steer entregado \u2014 el agente lo ver\u00e1 en su pr\u00f3ximo resultado de herramienta', steer_leftover_queued: 'Steer en cola para el pr\u00f3ximo turno', busy_steer_fallback: 'Steer no disponible — borrador restaurado', steer_fail_no_cached_agent: 'No agent cached for this session — try refreshing', steer_fail_agent_lacks_steer: 'This agent version does not support steer', steer_fail_session_not_found: 'Session not found — it may have expired', steer_fail_not_running: 'Agent is not currently running', steer_fail_stream_dead: 'The agent stream has ended', steer_fail_steer_error: 'Steer delivery failed — the agent may have finished', steer_fail_network_error: 'Network error — check your connection', steer_fail_unknown: 'Steer unavailable', steer_recovery_retry: 'Retry', steer_recovery_dismiss: 'Dismiss', busy_interrupt_confirm: 'Interrumpido \u2014 enviando nuevo mensaje', settings_label_default_message_mode: 'Modo de mensaje predeterminado', settings_desc_default_message_mode: 'Controla qué sucede al enviar mensajes mientras el agente está activo. Cola espera; Interrumpir cancela y empieza de nuevo; Steer inyecta una corrección sin interrumpir. Si Steer no está disponible, el borrador se restaura para que puedas elegir la siguiente acción.', settings_label_fade_text_effect: 'Efecto de desvanecimiento de texto', settings_desc_fade_text_effect: 'Hace aparecer gradualmente las palabras nuevas mientras el asistente responde. Similar a OpenWebUI; desactivado por defecto para máximo rendimiento.', settings_label_max_tokens: 'Máximo de tokens de salida', settings_desc_max_tokens: 'Limita la longitud de las nuevas respuestas en streaming. Déjalo en blanco para usar el valor de respaldo del perfil activo.', settings_placeholder_max_tokens_none: 'Sin reemplazo', settings_placeholder_max_tokens_fallback: 'Sin reemplazo (respaldo: {0})', settings_default_message_mode_queue: 'Poner en cola', settings_default_message_mode_interrupt: 'Interrumpir turno actual', settings_default_message_mode_steer: 'Steer (corrección a mitad de turno)', settings_label_busy_placeholder_hint: 'Show busy placeholder hint', settings_desc_busy_placeholder_hint: 'Shows the composer placeholder with the current busy action while the session is running and the draft is empty.', composer_placeholder_busy_queue: 'Enter = queue | /interrupt | /background | /steer', composer_placeholder_busy_interrupt: 'Enter = interrupt | /queue | /background | /steer', composer_placeholder_busy_steer: 'Enter = steer | /queue | /background | /interrupt', no_personalities: 'No se encontraron personalidades (añádelas a ~/.hermes/personalities/)', available_personalities: 'Personalidades disponibles:', personality_switch_hint: '\n\nUsa `/personality ` para cambiar, o `/personality none` para limpiar.', personalities_load_failed: 'No se pudieron cargar las personalidades', personality_cleared: 'Personalidad borrada', personality_set: 'Personalidad: ', failed_colon: 'Error: ', // ui.js no_workspace: 'Sin espacio de trabajo', terminal_open_title: 'Abrir terminal del espacio de trabajo', terminal_no_workspace_title: 'Selecciona un espacio de trabajo para abrir el terminal', terminal_title: 'Terminal', terminal_clear: 'Limpiar', terminal_copy_output: 'Copiar salida', terminal_restart: 'Reiniciar', terminal_collapse: 'Contraer', terminal_expand: 'Expandir', terminal_close: 'Cerrar', terminal_input_placeholder: 'Ejecuta un comando...', terminal_start_failed: 'Error al iniciar el terminal: ', terminal_input_failed: 'Error de entrada del terminal: ', terminal_copy_failed: 'Error al copiar: ', terminal_error: 'Error del terminal', terminal_remote_backend_unsupported: 'El terminal integrado solo es compatible con backends de terminal locales.', workspace_empty_no_path: 'No hay espacio de trabajo seleccionado. Configure un espacio de trabajo en Ajustes \u2192 Workspace para explorar archivos.', workspace_empty_dir: 'Este espacio de trabajo está vacío.', workspace_show_hidden_files: 'Mostrar archivos ocultos', workspace_show_hidden_files_desc: 'Include .DS_Store, .git, node_modules, and other hidden / system files in the file tree.', workspace_hidden_files_visible: 'hidden visible', workspace_hidden_files_visible_title: 'Hidden files are visible — click for options', workspace_options: 'Workspace options', // workspace.js unsaved_confirm: 'Tienes cambios sin guardar en la vista previa. ¿Descartar y navegar?', save: 'Guardar', edit: 'Editar', save_title: 'Guardar cambios', edit_title: 'Editar este archivo', saved: 'Guardado', save_failed: 'Error al guardar: ', image_load_failed: 'No se pudo cargar la imagen', file_open_failed: 'No se pudo abrir el archivo', downloading: (name) => `Descargando ${name}…`, double_click_rename: 'Haz doble clic para renombrar', symlink_link_to: 'Symlink → {target}', external_link_open_confirm: 'This symlink points outside the workspace. Open it in a read-only external view for this browser session?', external_link_read_only: 'This external view is read-only. Create, rename, move, delete, upload, reveal, and editor actions stay disabled here.', external_link_grant_expired: 'This external view expired. Reopen the escape-target symlink to authorize it again.', session_rename_failed_no_row: 'Could not start rename — row not found.', renamed_to: 'Renombrado a ', rename_failed: 'Error al renombrar: ', moved_to: 'Movido a ', move_failed: 'Error al mover: ', delete_title: 'Eliminar', delete_confirm: (name) => `¿Eliminar ${name}?`, delete_dir_confirm: (name) => `¿Eliminar carpeta "${name}" y todo su contenido?`, rename_title: 'Renombrar', rename_prompt: 'Nuevo nombre:', deleted: 'Eliminado ', delete_failed: 'Error al eliminar: ', reveal_in_finder: 'Mostrar en el gestor de archivos', reveal_failed: 'Error al mostrar: ', copy_file_path: 'Copiar ruta del archivo', open_in_vscode: 'Abrir en VS Code', open_in_vscode_failed: 'Error al abrir en VS Code: ', download_folder: 'Download Folder', // TODO: translate path_copied: 'Ruta del archivo copiada al portapapeles', path_copy_failed: 'Error al copiar la ruta: ', session_rename: 'Renombrar conversación', session_rename_desc: 'Editar el título de esta conversación', session_title_regenerate: 'Regenerar título', session_title_regenerate_desc: 'Pide a Hermes que genere un título nuevo a partir de la conversación', session_title_regenerating: 'Regenerando título…', session_title_regenerated: (title) => `Título regenerado: ${title}`, session_title_regenerate_failed: 'Error al regenerar el título: ', session_copy_link: 'Copiar enlace de conversación', session_copy_link_desc: 'Copia un enlace directo a esta conversación', session_link_copied: 'Enlace de conversación copiado al portapapeles', session_link_copy_failed: 'No se pudo copiar el enlace de conversación: ', new_file_prompt: 'Nombre del archivo nuevo (p. ej. notes.md):', new_file: 'Nuevo archivo', new_folder: 'Nueva carpeta', workspace_root: 'raíz del espacio de trabajo', new_file_prompt_title: 'Nombre del archivo nuevo en {0}:', new_folder_prompt_title: 'Nombre de la carpeta nueva en {0}:', created: 'Creado ', create_failed: 'Error al crear: ', new_folder_prompt: 'Nombre de la carpeta nueva:', folder_created: 'Carpeta creada ', folder_create_failed: 'Error al crear la carpeta: ', workspace_auto_create_folder: 'Crear carpeta si no existe', folder_add_as_space_btn: 'Añadir como espacio', folder_add_as_space_msg: '¿Añadir esta carpeta como un nuevo espacio?', folder_add_as_space_title: '¿Añadir como espacio?', remove_title: 'Quitar', empty_dir: '(vacío)', upload_failed: 'Error al subir: ', upload_too_large: (maxMb, fileMb) => `El archivo es demasiado grande (${fileMb} MB). El tamaño máximo de subida es ${maxMb} MB.`, uploading: 'Subiendo…', uploaded: 'Subido', all_uploads_failed: (n) => `Fallaron las ${n} subida(s)`, archive_extracted: (n, c) => `${n} archivo(s) extraído(s) de ${c} archivo(s) comprimido(s)`, // settings panel settings_title: 'Configuración', settings_search_placeholder: 'Buscar configuración…', settings_search_no_results: 'No se encontraron configuraciones.', settings_save_btn: 'Guardar configuración', settings_label_model: 'Modelo predeterminado', settings_desc_model: 'Se usa para conversaciones nuevas. Las conversaciones existentes conservan su modelo seleccionado.', settings_main_advanced_button_aria: 'Advanced options for main model', settings_main_advanced_title: 'Main model options', settings_main_advanced_subtitle: 'Advanced config for the default chat model.', settings_main_advanced_saved: 'Main model options saved', settings_main_advanced_save_failed: 'Failed to save main model options', settings_main_advanced_service_tier: 'Service tier', settings_main_advanced_service_tier_desc: 'Optional request setting for OpenAI-family providers.', settings_main_advanced_service_tier_default: 'Default / off', settings_main_advanced_service_tier_priority: 'Priority (fast)', settings_label_auxiliary_models: 'Modelos auxiliares', settings_desc_auxiliary_models: 'Enrutamiento para tareas secundarias como visión, compresión, generación de títulos, etc. «Auto» usa el modelo de chat principal.', settings_btn_reset_aux_models: 'Restablecer todo a auto', settings_btn_apply_aux_models: 'Aplicar cambios', settings_aux_provider_auto: 'usar modelo principal', settings_aux_model_auto: 'auto (usar predeterminado del proveedor)', settings_aux_model_custom: 'Modelo personalizado…', settings_aux_model_custom_prompt: 'Ingrese ID del modelo:', settings_aux_loading: 'Cargando modelos auxiliares…', settings_aux_load_failed: 'No se pudieron cargar las configuraciones de modelos auxiliares. Asegúrese de que la API del agente esté disponible.', settings_aux_reset_confirm_title: '¿Restablecer modelos auxiliares?', settings_aux_reset_confirm_msg: 'Esto establecerá todas las tareas auxiliares en auto (usar modelo principal).', settings_aux_reset_done: 'Modelos auxiliares restablecidos a auto', settings_aux_save_failed: 'Error al guardar el modelo auxiliar', settings_aux_saved: 'Modelos auxiliares actualizados', settings_aux_no_changes: 'Sin cambios para aplicar', settings_aux_task_vision: 'Vision', settings_aux_task_vision_desc: 'image/screenshot analysis', settings_aux_task_compression: 'Compression', settings_aux_task_compression_desc: 'context summarization', settings_aux_task_web_extract: 'Web extract', settings_aux_task_web_extract_desc: 'web page summarization', settings_aux_task_session_search: 'Session search', settings_aux_task_session_search_desc: 'past-conversation recall', settings_aux_task_approval: 'Approval', settings_aux_task_approval_desc: 'smart command approval', settings_aux_task_mcp: 'MCP', settings_aux_task_mcp_desc: 'MCP tool reasoning', settings_aux_task_title_generation: 'Title generation', settings_aux_task_title_generation_desc: 'session titles', settings_aux_task_skills_hub: 'Skills hub', settings_aux_task_skills_hub_desc: 'skills search/install', settings_aux_task_curator: 'Curator', settings_aux_task_curator_desc: 'skill-usage review pass', settings_aux_task_kanban_decomposer: 'Kanban decomposer', settings_aux_task_kanban_decomposer_desc: 'task decomposition', settings_aux_task_profile_describer: 'Profile describer', settings_aux_task_profile_describer_desc: 'profile summaries', settings_aux_task_triage_specifier: 'Triage specifier', settings_aux_task_triage_specifier_desc: 'issue/task triage specs', settings_aux_advanced_button_title: 'Advanced options', settings_aux_advanced_button_aria: 'Advanced options for {task}', settings_aux_advanced_title: '{task} options', settings_aux_advanced_subtitle: 'Advanced config for auxiliary.', settings_aux_advanced_save: 'Save options', settings_aux_advanced_base_url: 'Base URL', settings_aux_advanced_base_url_desc: 'Optional provider endpoint override.', settings_aux_advanced_timeout: 'Timeout seconds', settings_aux_advanced_timeout_desc: 'Request timeout for this auxiliary task. Blank uses Hermes default.', settings_aux_advanced_download_timeout: 'Download timeout seconds', settings_aux_advanced_download_timeout_desc: 'Only relevant for tasks that download media/content, e.g. vision. Blank uses default.', settings_aux_advanced_max_concurrency: 'Max concurrency', settings_aux_advanced_max_concurrency_desc: 'Optional per-task concurrency limit. Blank uses default.', settings_aux_advanced_extra_body: 'Extra body JSON', settings_aux_advanced_extra_body_desc: 'Optional JSON object merged into the model request body.', settings_aux_advanced_api_key: 'API key override', settings_aux_advanced_api_key_set_hint: 'API key is set. Leave blank to keep it, or use clear to remove it.', settings_aux_advanced_api_key_empty_hint: 'Leave blank to use provider/default credentials.', settings_aux_advanced_api_key_clear: 'Clear existing API key override', settings_aux_advanced_extra_body_invalid_json: 'Extra body must be valid JSON', settings_aux_advanced_extra_body_object_required: 'Extra body must be a JSON object', settings_aux_advanced_saved: 'Auxiliary options saved', settings_aux_advanced_save_failed: 'Failed to save auxiliary options', settings_label_send_key: 'Tecla de envío', settings_label_theme: 'Tema', settings_label_skin: 'Piel', settings_label_font_size: 'Tamaño de fuente', font_size_small: 'Pequeño', font_size_default: 'Por defecto', font_size_large: 'Grande', font_size_xlarge: 'Extra grande', settings_autosave_saving: 'Guardando…', settings_autosave_saved: 'Guardado', settings_autosave_failed: 'Error al guardar', settings_autosave_retry: 'Reintentar', settings_label_language: 'Idioma', settings_label_quota_chip: 'Mostrar el chip de cuota del proveedor en el compositor', settings_desc_quota_chip: 'Muestra un indicador ambiental de cuota restante (por ejemplo, saldo de crédito de OpenRouter) en el pie del compositor. Predeterminado: desactivado. Solo visible en pantallas anchas (≥1400px) cuando se activa, para mantener el compositor despejado en portátiles y monitores estándar.', settings_label_conversation_outline: 'Mostrar esquema de conversación', settings_desc_conversation_outline: 'Muestra una lista de salto solo en escritorio para las preguntas del usuario en la conversación actual. Desactivado de forma predeterminada.', settings_label_hide_suggestions: 'Hide new-chat suggestions', settings_desc_hide_suggestions: 'Hide the three default suggestion buttons on the empty new-chat screen to avoid accidental taps.', settings_label_virtualize_transcript: 'Virtualize long transcripts', settings_desc_virtualize_transcript: "Render only the visible portion of very long chat transcripts (over 80 messages) for smoother scrolling. Turn this off if you see any rendering or scroll issues, or want the browser's Find (Ctrl+F) to match the whole conversation \u2014 the full transcript will render at once.", settings_label_token_usage: 'Mostrar uso de tokens', settings_label_token_speed: 'Mostrar velocidad de tokens (TPS)', settings_desc_token_speed: 'Muestra tokens por segundo en los encabezados de mensajes del asistente durante la transmisión y después de completar una respuesta. Desactivado por defecto.', settings_label_sidebar_density: 'Densidad de la barra lateral', cmd_reasoning: 'Toggle thinking visibility (show/hide), set effort level, or check current status', settings_label_external_sessions: 'Mostrar sesiones externas', settings_label_claude_code_sessions: 'Show Claude Code sessions', settings_label_cron_sessions: 'Show cron sessions', settings_label_webhook_sessions: 'Show webhook sessions', settings_label_previous_messaging_sessions: 'Mostrar sesiones de mensajería anteriores', settings_label_sync_insights: 'Sincronizar con insights', settings_label_check_updates: 'Buscar actualizaciones', settings_label_ignore_agent_updates: 'Ignore Agent updates', settings_label_whats_new_summary: "Summarize What's New with AI", settings_label_bot_name: 'Nombre predeterminado del asistente', settings_label_password: 'Contraseña de acceso', settings_label_pinned_limit: 'Límite de conversaciones fijadas', settings_desc_pinned_limit: 'Número máximo de conversaciones activas que se pueden fijar en la barra lateral. Por defecto es 3.', settings_label_dashboard_mode: 'Panel oficial de Hermes', settings_desc_dashboard_mode: 'Mostrar un enlace en la barra de navegación cuando el panel oficial de hermes esté accesible. Las URL de proxy inverso público se almacenan solo como enlaces en el navegador y nunca son sondeadas por el servidor.', settings_dashboard_mode_auto: 'Detección automática', settings_dashboard_mode_always: 'Mostrar siempre', settings_dashboard_mode_never: 'No mostrar nunca', settings_dashboard_save: 'Guardar configuración del enlace del panel', settings_label_gateway_status: 'Estado del Gateway', settings_desc_gateway_status: 'Estado del gateway de Hermes (Telegram, Discord, Slack, etc.)', gateway_not_configured: 'Gateway no configurado', gateway_metadata_stale: 'Metadatos del gateway obsoletos', gateway_endpoint_unreachable: 'Punto final del gateway no accesible', gateway_not_running: 'Gateway no está funcionando', gateway_running_label: 'Funcionando', gateway_last_active: 'Última actividad: ', gateway_session_count: (n) => `${n} ${n === 1 ? 'sesión' : 'sesiones'}`, gateway_load_failed: 'Error al cargar el estado del gateway', settings_saved: 'Configuración guardada', settings_save_failed: 'Error al guardar: ', settings_load_failed: 'Error al cargar la configuración: ', settings_saved_pw: 'Configuración guardada — la contraseña queda activada y este navegador sigue autenticado', settings_saved_pw_updated: 'Configuración guardada — contraseña actualizada', // login page (used server-side via /api/i18n/login endpoint) login_title: 'Iniciar sesión', login_subtitle: 'Introduce tu contraseña para continuar', login_placeholder: 'Contraseña', login_btn: 'Entrar', login_invalid_pw: 'Contraseña inválida', login_conn_failed: 'Error de conexión', dialog_confirm_title: 'Confirmar acción', dialog_prompt_title: 'Introduce un valor', dialog_confirm_btn: 'Confirmar', discard: 'Descartar', clear: 'Borrar', create: 'Crear', remove: 'Quitar', project_name_prompt: 'Nombre del proyecto:', // Sidebar & Tabs tab_chat: 'Chat', tab_tasks: 'Tareas', tab_skills: 'Habilidades', tab_memory: 'Memoria', tab_workspaces: 'Espacios', tab_profiles: 'Perfiles', tab_kanban: 'Kanban', kanban_board: 'Board', kanban_visible_tasks: '{0} visible tasks', kanban_search_tasks: 'Search tasks', kanban_all_assignees: 'All assignees', kanban_all_tenants: 'All tenants', kanban_include_archived: 'Include archived', kanban_no_matching_tasks: 'No matching tasks', kanban_no_data: 'No Kanban data', kanban_work_queue_hint: 'This is the Hermes Agent work queue. Create or triage a task, assign it, move it to Ready, then let the dispatcher claim it.', kanban_tasks_hidden_by_filters: 'Tasks hidden by filters', kanban_clear_filters: 'Clear filters', kanban_unavailable: 'Kanban unavailable', kanban_read_only: 'Read-only view', kanban_empty: 'Empty', kanban_task: 'Task', kanban_no_description: 'No description', kanban_refresh: 'Refresh', kanban_status_triage: 'Triage', kanban_status_todo: 'Todo', kanban_status_ready: 'Ready', kanban_status_running: 'Running', kanban_status_blocked: 'Blocked', kanban_status_done: 'Done', kanban_status_original_hint: 'Actual status: {0}. This dialog only supports Triage/Todo/Ready edits.', kanban_comments_count: 'Comments ({0})', kanban_events_count: 'Events ({0})', kanban_links: 'Links', kanban_parents: 'Parents', kanban_children: 'Children', kanban_runs_count: 'Runs ({0})', kanban_no_comments: 'No comments', kanban_no_events: 'No events', kanban_no_runs: 'No runs', kanban_title: 'Título', kanban_description: 'Descripción', kanban_description_placeholder: 'Opcional — qué hay que hacer, criterios de aceptación, enlaces', kanban_status: 'Estado', kanban_assignee: 'Responsable', kanban_assignee_placeholder: 'Opcional — déjalo en blanco para cualquier trabajador', kanban_tenant: 'Tenant', kanban_tenant_placeholder: 'Opcional — slug del proyecto o equipo', kanban_priority: 'Prioridad', kanban_priority_hint: 'Los números más altos se ejecutan primero. Predeterminado: 0.', kanban_title_required: 'El título es obligatorio.', kanban_edit_task: 'Editar tarea', kanban_run_dispatcher: 'Ejecutar despachador', kanban_run_dispatcher_confirm: 'Esto reclamará tareas Ready en este tablero y generará subprocesos worker (uno por tarea, hasta 8 por clic). ¿Continuar?', kanban_assignee_profiles_label: 'Perfiles Hermes', kanban_assignee_other_label: 'Otros (carriles CLI / perfiles eliminados)', kanban_assignee_unassigned: '— Sin asignar (no se ejecutará automáticamente) —', kanban_ready_needs_assignee: 'Elegiste «Sin asignar» + «Ready». El despachador omitirá esta tarea. Envía de nuevo para confirmar o selecciona un perfil.', kanban_dispatch_preview_prefix: 'Vista previa:', kanban_dispatch_run_prefix: 'Despachado:', kanban_dispatch_spawned: 'generadas', kanban_dispatch_promoted: 'promovidas', kanban_dispatch_reclaimed: 'recuperadas', kanban_dispatch_skipped_unassigned: 'omitidas (sin asignar)', kanban_dispatch_skipped_nonspawnable: 'omitidas (perfil desconocido)', kanban_dispatch_auto_blocked: 'auto-bloqueadas', kanban_dispatch_timed_out: 'expiradas', kanban_dispatch_crashed: 'fallaron', kanban_new_task: 'New task', kanban_view_lanes: 'Lanes by profile', kanban_view_consolidated: 'Consolidated view', kanban_view_lanes_saved: 'Kanban view: lanes by profile', kanban_view_consolidated_saved: 'Kanban view: consolidated', kanban_view_update_failed: 'Failed to update Kanban view: ', kanban_add_comment: 'Add comment', kanban_workspace_kind: 'Workspace kind', kanban_workspace_path: 'Workspace path', kanban_workspace_path_placeholder: 'Path to workspace', kanban_workspace_scratch: 'Scratch', kanban_workspace_worktree: 'Worktree', kanban_workspace_dir: 'Directory', kanban_workspace_path_required: 'Workspace path is required for non-scratch workspaces.', kanban_skills: 'Skills', kanban_skills_placeholder: 'Comma-separated skill names, e.g. python,git', kanban_max_runtime_seconds: 'Max runtime (seconds)', kanban_max_runtime_hint: 'Leave empty for unlimited.', kanban_max_runtime_invalid: 'Max runtime must be a whole number of seconds greater than 0.', kanban_parents_modal: 'Parent dependencies', kanban_parents_placeholder: 'Parent task ID', kanban_add_dependency: 'Add dependency', kanban_remove_dependency: 'Remove dependency', kanban_dependency_placeholder: 'Task ID to link', kanban_dependency_self: 'A task cannot depend on itself', kanban_only_mine: 'Only mine', kanban_bulk_action: 'Bulk action', kanban_nudge_dispatcher: 'Preview dispatcher', kanban_stats: 'Stats', kanban_worker_log: 'Worker log', kanban_block: 'Block', kanban_unblock: 'Unblock', kanban_back_to_board: 'Back to board', kanban_lanes_by_profile: 'Lanes by profile', kanban_new_board: 'New board…', kanban_rename_board: 'Rename current board…', kanban_archive_board: 'Archive current board…', kanban_archive_board_confirm: 'Archive board "{name}"? Tasks remain on disk and the board can be restored from kanban/boards/_archived/.', kanban_board_archived: 'Board archived', kanban_board_name: 'Name', kanban_board_slug: 'Slug (lowercase, hyphens)', kanban_board_description: 'Description (optional)', kanban_board_icon: 'Icon (emoji, optional)', kanban_board_color: 'Color (optional)', kanban_board_name_required: 'Name is required', kanban_board_slug_required: 'Slug is required', kanban_card_complete: 'complete', kanban_card_archive: 'archive', kanban_unassigned: 'unassigned', kanban_status_archived: 'Archived', tab_todos: 'Todos', tab_insights: 'Analíticas', tab_dashboard: 'Panel de Hermes', dashboard_loopback_warning: 'El panel solo usa loopback en el servidor. Navega desde el propio servidor o reinícialo con --host 0.0.0.0 (inseguro).', tab_logs: 'Logs', tab_settings: 'Ajustes', close_menu: 'Close menu', // TODO: translate logs_title: 'Logs', // TODO: translate logs_file: 'File', // TODO: translate logs_tail: 'Tail', // TODO: translate logs_auto_refresh: 'Auto-refresh (5s)', // TODO: translate logs_wrap: 'Wrap lines', // TODO: translate logs_copy_all: 'Copy all', // TODO: translate logs_empty: 'No log lines yet.', // TODO: translate logs_loading: 'Loading logs…', // TODO: translate logs_load_failed: 'Logs failed to load', // TODO: translate logs_status_idle: 'Choose a log file to view recent lines.', // TODO: translate logs_no_mtime: 'not written yet', // TODO: translate logs_truncated_hint: 'Showing the tail of a large log file; older bytes were skipped to keep memory bounded.', // TODO: translate logs_copied: 'Logs copied', // TODO: translate logs_severity: 'Severidad', logs_severity_all: 'Todo', logs_severity_errors: 'Errores', logs_severity_warnings: 'Advertencias+', logs_filter_active: 'mostrados (filtro activo)', new_conversation: 'Nueva conversación', filter_conversations: 'Filtrar conversaciones...', markdown_table_filter: 'Filtrar tabla', markdown_table_sort_column: 'Ordenar columna', session_time_unknown: 'Desconocido', session_time_minutes_ago: (n) => `${n}m`, session_time_hours_ago: (n) => `${n}h`, session_time_days_ago: (n) => `${n}d`, session_time_last_week: '1sem', session_time_bucket_today: 'Hoy', session_time_bucket_yesterday: 'Ayer', session_time_bucket_this_week: 'Esta semana', session_time_bucket_last_week: 'La semana pasada', session_time_bucket_older: 'Más antiguo', scheduled_jobs: 'Tareas programadas', new_job: 'Nueva tarea', loading: 'Cargando...', search_skills: 'Buscar skills...', new_skill: 'Nueva skill', personal_memory: 'Memoria personal', current_task_list: 'Lista de tareas actual', workspace_desc: 'Añade y cambia espacios de trabajo para tus sesiones.', session_meta_messages: (n) => `${n} mens.`, session_meta_children: (n) => `${n} ${n === 1 ? 'hijo' : 'hijos'}`, session_meta_segments: (n) => `${n} ${n === 1 ? 'segmento' : 'segmentos'}`, session_lineage_toggle_hint: '{0} — los turnos de contexto anteriores están contraídos aquí. Haz clic para mostrarlos u ocultarlos.', session_lineage_static_hint: '{0} — los turnos de contexto anteriores están contraídos aquí.', session_child_toggle_hint: '{0} — conversaciones hijas creadas desde esta sesión. Haz clic para mostrarlas u ocultarlas.', session_readonly_title_hint: 'Sesión importada de solo lectura — {0}', session_lineage_segment_untitled: 'Segmento sin título', session_lineage_segment_open: 'Abrir segmento de linaje', new_profile: 'Nuevo perfil', transcript: 'Transcripción', download_transcript: 'Descargar como Markdown', import: 'Importar', export_session_json: 'JSON', export_session_json_tooltip: 'Exportar sesión completa como JSON', export_session_html: 'HTML', export_session_html_tooltip: 'Exportar como página HTML independiente', import_session_json_tooltip: 'Importar sesión desde JSON', clear_conversation_btn_tooltip: 'Borrar todos los mensajes de esta conversación', // Settings detail settings_label_rtl: 'Diseño de chat de derecha a izquierda', settings_desc_rtl: 'Invierte la alineación de los mensajes y la entrada del compositor para idiomas como árabe o hebreo. Afecta solo al área del chat — la barra lateral y otros paneles siguen de izquierda a derecha.', settings_label_sound: 'Sonido de notificación', settings_desc_sound: 'Reproduce un sonido cuando el asistente termina una respuesta.', settings_label_notifications: 'Notificaciones del navegador', settings_desc_notifications: 'Muestra una notificación del sistema cuando una respuesta termina mientras la pestaña está en segundo plano.', notifications_enable_btn: 'Enable notifications', notifications_test_btn: 'Send test', notifications_permission_status: (status) => `Permission: ${status}`, notifications_enabled_toast: 'Notifications enabled.', notifications_denied: 'Notifications are blocked in this browser. Enable them in browser settings.', notifications_unsupported: 'Notifications are not supported in this browser.', settings_desc_token_usage: 'Muestra el conteo de tokens de entrada/salida debajo de cada respuesta del asistente. También se puede alternar con /usage.', settings_sidebar_density_compact: 'Compacta', settings_sidebar_density_detailed: 'Detallada', settings_desc_sidebar_density: 'Controla cuántos metadatos muestra la lista de sesiones en la barra lateral izquierda.', settings_label_auto_title_refresh: 'Actualización adaptativa del título', settings_auto_title_refresh_off: 'Desactivado', settings_auto_title_refresh_5: 'Cada 5 intercambios', settings_auto_title_refresh_10: 'Cada 10 intercambios', settings_auto_title_refresh_20: 'Cada 20 intercambios', settings_desc_auto_title_refresh: 'Regenera automáticamente el título de la sesión basándose en el último intercambio, manteniéndolo relevante a medida que evoluciona la conversación. Requiere un modelo LLM de generación de títulos configurado.', settings_desc_external_sessions: 'Mostrar conversaciones de CLI, Telegram, Discord, Slack y otros canales en la lista de sesiones. Haz clic para importar y continuar.', settings_desc_claude_code_sessions: 'Show Claude Code imported sessions in the sidebar, or hide them while leaving other external sessions visible.', settings_desc_cron_sessions: 'Surface cron job output as conversations in the sidebar. Only active when non-WebUI sessions are enabled. Defaults off; high-frequency jobs can flood the sidebar.', settings_desc_webhook_sessions: 'Surface webhook runs as conversations in the sidebar. Only active when non-WebUI sessions are enabled. Defaults off; high-volume routes can flood the sidebar.', settings_desc_previous_messaging_sessions: 'Mostrar sesiones antiguas de Discord, Telegram, Slack y Weixin reemplazadas por reset o compresión.', settings_desc_sync_insights: 'Refleja el uso de tokens de la WebUI en state.db para que hermes /insights incluya datos de sesiones del navegador. Desactivado por defecto.', settings_desc_check_updates: 'Muestra un banner cuando haya versiones más nuevas de la WebUI o del Agent. Ejecuta periódicamente un git fetch en segundo plano.', settings_desc_ignore_agent_updates: 'Keep WebUI update checks on, but hide Agent update notices and skip Agent update fetches.', settings_desc_whats_new_summary: "Changes the What's New action from opening the raw diff first to generating a short, human-readable summary. The regular diff comparison stays available after the summary.", settings_desc_bot_name: 'Solo se usa para el perfil predeterminado. Los otros perfiles usan sus propios nombres.', settings_desc_password: 'Introduce una nueva contraseña para establecerla o cambiarla. Déjalo en blanco para mantener la configuración actual.', password_placeholder: 'Introduce una contraseña nueva…', password_env_var_locked: 'La variable de entorno HERMES_WEBUI_PASSWORD está definida y tiene prioridad. Quítala y reinicia el servidor para gestionar la contraseña desde aquí.', password_env_var_locked_placeholder: 'Bloqueado: la variable HERMES_WEBUI_PASSWORD está definida', disable_auth: 'Desactivar autenticación', sign_out: 'Cerrar sesión', settings_label_shutdown: 'Detener el servidor Hermes WebUI', settings_desc_shutdown_before_cmd: 'Detiene de forma controlada el servidor WebUI local. Útil si lo iniciaste con ', settings_desc_shutdown_between_cmds: ' y quieres detenerlo sin cambiar al terminal. Para volver a acceder a la WebUI deberás reiniciar el servidor (', settings_desc_shutdown_after_cmd: ' o la aplicación nativa).', settings_btn_shutdown: 'Detener servidor', settings_shutdown_confirm_title: 'Detener Hermes WebUI', settings_shutdown_confirm_message: '¿Detener el servidor Hermes WebUI?', settings_shutdown_confirm_btn: 'Detener', settings_shutdown_stopped_message: 'Servidor detenido. Puedes cerrar esta pestaña.', // 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_model: 'Model', providers_status_not_configured_label: 'Not configured', providers_oauth_hint: 'Authenticated via OAuth. No API key needed.', providers_oauth_config_yaml_hint: 'Token configured via config.yaml. To update, edit the providers section in your config.yaml or run hermes auth.', providers_oauth_not_configured_hint: 'Not authenticated. Run hermes auth in the terminal to configure this provider.', providers_save: 'Save', providers_refresh_models: 'Refresh models', providers_refreshing: 'Refreshing…', providers_models_refreshed: 'Models refreshed', 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…', provider_quota_title: 'Cuota del proveedor activo', provider_quota_active_provider: 'Proveedor activo', provider_quota_last_checked_after_refresh: 'Última comprobación tras actualizar', provider_quota_last_checked: 'Última comprobación {0}', provider_quota_refresh_usage: 'Actualizar uso', provider_quota_refreshing: 'Actualizando...', provider_quota_refresh_title: 'Actualizar ahora los límites de uso del proveedor', provider_quota_refresh_succeeded: 'Uso del proveedor actualizado', provider_quota_refresh_failed: 'Error al actualizar el uso del proveedor', provider_quota_session_limit: 'Límite de 5 horas', provider_quota_weekly_limit: 'Límite semanal', provider_quota_window_fallback: 'Ventana', provider_quota_metric_remaining: 'Restante', provider_quota_metric_used: 'Usado', provider_quota_metric_limit: 'Límite', provider_quota_status_available: 'disponible', provider_quota_status_exhausted: 'agotado', provider_quota_status_unavailable: 'no disponible', provider_quota_status_failed: 'fallido', provider_quota_status_checked: 'comprobado', provider_quota_status_no_key: 'sin clave', provider_quota_status_invalid_key: 'clave no válida', provider_quota_status_unsupported: 'no compatible', provider_quota_used_meta: '{0} usado', provider_quota_resets_meta: 'se restablece {0}', provider_quota_credential_pool: 'Grupo de credenciales', provider_quota_credential_label: 'Credencial {0}', provider_quota_pool_plans: 'Planes: {0}', provider_quota_pool_no_windows: 'No se informaron ventanas de límite de cuenta.', provider_quota_account_limits_loaded: 'Límites de cuenta cargados.', provider_quota_unavailable: 'Estado de cuota no disponible', provider_quota_retry_after: 'Reintentar después de {0}', provider_quota_pool_summary_available: '{0}/{1} disponibles', provider_quota_pool_summary_exhausted: '{0} agotadas', provider_quota_pool_summary_failed: '{0} fallidas', provider_quota_pool_summary_checked: '{0} comprobadas', provider_cost_budget_label: 'Monthly budget', provider_cost_budget_placeholder: 'e.g. 50.00', provider_cost_budget_set: 'Set', provider_cost_budget_clear: 'Clear', provider_cost_budget_pct: '{0}% of ${1} budget (monthly pace)', provider_cost_budget_save_failed: 'Failed to save budget', cancel: 'Cancelar', create_job: 'Crear tarea', save_skill: 'Guardar skill', editing: 'Editando', // Empty state empty_title: '¿En qué puedo ayudarte?', empty_subtitle: 'Pregunta lo que quieras, ejecuta comandos, explora archivos o gestiona tus tareas programadas.', suggest_files: '¿Qué archivos hay en este espacio de trabajo?', suggest_schedule: '¿Qué tengo hoy en mi agenda?', suggest_plan: 'Ayúdame a planificar un proyecto pequeño.', // onboarding onboarding_badge: 'PRIMER USO', onboarding_title: 'Bienvenido a Hermes Web UI', onboarding_lead: 'Una guía rápida verificará Hermes, guardará una configuración real del proveedor, elegirá un espacio de trabajo y un modelo, y opcionalmente protegerá la app con una contraseña.', onboarding_back: 'Atrás', onboarding_continue: 'Continuar', onboarding_skip: 'Omitir configuración', onboarding_skipped: 'Configuración omitida — se usa la configuración existente.', onboarding_open: 'Abrir Hermes', onboarding_step_system_title: 'Comprobación del sistema', onboarding_step_system_desc: 'Verifica Hermes Agent y la visibilidad de la configuración.', onboarding_step_setup_title: 'Configuración del proveedor', onboarding_step_setup_desc: 'Guarda la configuración mínima real de Hermes.', onboarding_step_workspace_title: 'Espacio de trabajo + modelo', onboarding_step_workspace_desc: 'Elige los valores predeterminados para nuevas sesiones y chats.', onboarding_step_password_title: 'Contraseña opcional', onboarding_step_password_desc: 'Protege la Web UI antes de compartirla.', onboarding_step_finish_title: 'Finalizar', onboarding_step_finish_desc: 'Revisa todo y entra en la app.', onboarding_notice_system_ready: 'Parece que Hermes Agent está accesible desde la Web UI.', onboarding_notice_system_unavailable: 'Hermes Agent todavía no está totalmente disponible. Bootstrap puede instalarlo, pero la configuración del proveedor quizá aún requiera una terminal.', onboarding_check_agent: 'Hermes Agent', onboarding_check_agent_ready: 'Detectado e importable', onboarding_check_agent_missing: 'Falta o solo es parcialmente importable', onboarding_check_password: 'Contraseña', onboarding_check_password_enabled: 'Ya está activada', onboarding_check_password_disabled: 'Todavía no está activada', onboarding_check_provider: 'Configuración del proveedor', onboarding_check_provider_ready: 'Listo para chatear', onboarding_check_provider_partial: 'Guardado pero incompleto', onboarding_check_provider_pending: 'Necesita verificación', onboarding_config_file: 'Archivo de configuración:', onboarding_env_file: 'Archivo .env:', onboarding_unknown: 'Desconocido', onboarding_current_provider: 'Configuración actual:', onboarding_missing_imports: 'Importaciones faltantes:', onboarding_notice_setup_required: 'Elige aquí una ruta simple de proveedor. Los flujos OAuth avanzados siguen siendo del CLI de Hermes por ahora.', onboarding_notice_setup_already_ready: 'Ya se detectó una configuración funcional del proveedor de Hermes. Puedes conservarla o reemplazarla aquí.', onboarding_oauth_provider_ready_title: 'Proveedor ya autenticado', onboarding_oauth_provider_ready_body: 'Esta instancia está configurada para usar un proveedor OAuth ({provider}) configurado mediante la CLI de Hermes. No se necesita clave API aquí — haz clic en Continuar para finalizar la configuración.', onboarding_oauth_provider_not_ready_title: 'Proveedor OAuth no autenticado aún', onboarding_oauth_provider_not_ready_body: 'Esta instancia está configurada para usar {provider}, que utiliza OAuth en lugar de una clave API. Ejecuta hermes auth o hermes model en una terminal para autenticarte y recarga la interfaz web.', onboarding_oauth_switch_hint: 'O elige un proveedor diferente a continuación para cambiar a la configuración con clave API:', onboarding_notice_workspace: 'Estos valores reutilizan las mismas APIs de configuración que la app normal.', onboarding_workspace_label: 'Espacio de trabajo', onboarding_workspace_or_path: 'O introduce la ruta de un espacio de trabajo', onboarding_workspace_placeholder: '/home/you/workspace', onboarding_provider_label: 'Modo de configuración', onboarding_quick_setup_badge: 'configuración rápida', provider_category_easy_start: 'Inicio rápido', provider_category_self_hosted: 'Local / Open source', provider_category_specialized: 'Especializados', onboarding_api_key_label: 'API key', onboarding_api_key_placeholder: 'Déjala en blanco para conservar una key ya guardada', onboarding_api_key_label_optional: 'API key (optional)', // TODO: translate onboarding_api_key_placeholder_optional: 'Leave blank for keyless servers', // TODO: translate onboarding_api_key_help_keyless: 'Most LM Studio / Ollama / vLLM installs run keyless — leave this blank if your server doesn\'t require authentication. Use the Test connection button to verify.', // TODO: translate oauth_login_codex: 'Login with Codex (ChatGPT)', // TODO: translate oauth_codex_step1: 'Step 1: Visit this URL and enter the code', // TODO: translate oauth_codex_step2: 'Step 2: Enter this code on the page', // TODO: translate oauth_codex_polling: 'Waiting for authorization...', // TODO: translate oauth_codex_success: 'Codex OAuth login successful!', // TODO: translate oauth_codex_error: 'OAuth login failed', // TODO: translate oauth_codex_expired: 'Code expired, please try again', // TODO: translate onboarding_api_key_help_prefix: 'Se guarda como secreto en tu archivo .env de Hermes usando', onboarding_base_url_label: 'Base URL', onboarding_base_url_placeholder: 'https://tu-endpoint.example/v1', onboarding_base_url_help: 'Úsalo para routers OpenAI-compatible, servidores autoalojados, LiteLLM, Ollama, LM Studio, vLLM o endpoints parecidos.', onboarding_model_label: 'Modelo predeterminado', onboarding_workspace_help: 'Elige el modelo que Hermes debe usar para nuevos chats cuando termine la configuración.', onboarding_custom_model_placeholder: 'tu-modelo', onboarding_custom_model_help: 'Para endpoints personalizados, introduce el identificador exacto del modelo que espera tu servidor.', onboarding_notice_password_enabled: 'Ya hay una contraseña configurada. Introduce una nueva solo si quieres reemplazarla.', onboarding_notice_password_recommended: 'Es opcional, pero recomendable si vas a exponer la UI más allá de localhost.', onboarding_password_label: 'Contraseña (opcional)', onboarding_password_placeholder: 'Déjala en blanco para omitirla', onboarding_password_help: 'Las contraseñas se guardan mediante la API de configuración existente y se hashean en el servidor.', onboarding_notice_finish: 'Puedes volver a abrir Configuración más tarde para cambiar cualquiera de estos valores.', onboarding_not_set: 'Sin definir', onboarding_password_will_enable: 'Se activará', onboarding_password_will_replace: 'Se reemplazará', onboarding_password_keep_existing: 'Mantener la contraseña actual', onboarding_password_remains_disabled: 'Seguirá desactivada', onboarding_password_skipped: 'Se omitirá por ahora', onboarding_finish_help: 'Al finalizar se guarda onboarding_completed en la configuración y entras en la app normal.', onboarding_error_choose_workspace: 'Elige un espacio de trabajo antes de continuar.', onboarding_error_choose_model: 'Elige un modelo antes de continuar.', onboarding_error_provider_required: 'Elige un modo de configuración antes de continuar.', onboarding_error_base_url_required: 'La base URL es obligatoria para endpoints personalizados.', onboarding_probe_test_button: 'Test connection', // TODO: translate onboarding_probe_probing: 'Testing connection…', // TODO: translate onboarding_probe_ok: 'Connected. {n} model(s) available.', // TODO: translate onboarding_probe_error_generic: 'Could not reach the configured base URL.', // TODO: translate onboarding_probe_error_invalid_url: 'Base URL must start with http:// or https://.', // TODO: translate onboarding_probe_error_dns: 'Could not resolve the host. Check the URL or use the host\'s IP address.', // TODO: translate onboarding_probe_error_connect_refused: 'Connection refused — the server may not be running on that address. From inside Docker, try the host IP instead of localhost.', // TODO: translate onboarding_probe_error_timeout: 'The endpoint did not respond in time. Check that the server is running and the URL is correct.', // TODO: translate onboarding_probe_error_http_4xx: 'The endpoint returned a client error. Check authentication and the URL path (typically ends in /v1).', // TODO: translate onboarding_probe_error_http_5xx: 'The endpoint returned a server error. Check the LM Studio / Ollama server logs.', // TODO: translate onboarding_probe_error_parse: 'The endpoint did not return a model list in the expected shape. Verify the URL points to the OpenAI-compatible API root.', // TODO: translate onboarding_probe_error_unreachable: 'Could not reach the configured base URL.', // TODO: translate onboarding_error_probe_failed: 'Could not validate the configured base URL.', // TODO: translate onboarding_error_workspace_required: 'El espacio de trabajo es obligatorio.', onboarding_error_model_required: 'El modelo es obligatorio.', onboarding_complete: 'Onboarding completado', // panel/runtime i18n error_prefix: 'Error: ', default: 'default', search: 'Search', not_available: 'N/A', never: 'never', add: 'Add', add_failed: 'Add failed: ', remove_failed: 'Remove failed: ', switch_failed: 'Switch failed: ', name_required: 'Name is required', content_required: 'Content is required', view: 'View', dismiss: 'Dismiss', disable: 'Disable', cron_no_jobs: 'No scheduled jobs found.', cron_status_off: 'off', cron_status_paused: 'paused', cron_status_error: 'error', cron_status_active: 'active', cron_status_running: 'ejecutándose\u2026', cron_status_needs_attention: 'needs attention', cron_attention_desc: 'This recurring job has no next run time. The scheduler may have failed to compute its next run.', cron_attention_croniter_hint: 'The Gateway runtime may be missing the croniter package. Restart the Gateway with cron support, then resume this job.', cron_attention_resume: 'Resume and recalculate', cron_jobs_project: 'Tareas Programadas', cron_attention_run_once: 'Run once now', cron_attention_copy_diagnostics: 'Copy diagnostics', cron_diagnostics_copied: 'Cron diagnostics copied', cron_next: 'Next', cron_last: 'Last', cron_run_now: 'Run now', cron_pause: 'Pause', cron_resume: 'Resume', cron_job_name_placeholder: 'Job name', cron_schedule_placeholder: 'Schedule', cron_prompt_placeholder: 'Prompt', cron_last_output: 'Last output', cron_expand_prompt: 'Expand prompt', cron_collapse_prompt: 'Collapse prompt', cron_expand_output: 'Expand output', cron_collapse_output: 'Collapse output', cron_mode_agent: 'Agent', cron_mode_script: 'Script', cron_mode_label: 'Mode', cron_script_job_banner: 'Runs a script on schedule — stdout is delivered to the target. No agent, prompt, or skills.', cron_script_card_title: 'Script', cron_script_output: 'Script output', cron_script_path_label: 'Script path', cron_script_path_hint: 'Resolved under ~/.hermes/scripts/ unless an absolute path. Edit the script file on the server to change behavior.', cron_script_badge_title: 'Script job (no agent)', cron_workdir_label: 'Working directory', cron_view_full_output: 'View full output', cron_all_runs: 'All runs', cron_hide_runs: 'Hide runs', cron_no_runs_yet: '(no runs yet)', cron_schedule_required_example: 'Schedule is required (e.g. "0 9 * * *" or "every 1h")', cron_schedule_required: 'Schedule is required', cron_prompt_required: 'Prompt is required', cron_job_created: 'Job created', cron_duplicate: 'Duplicar', cron_duplicated: 'Trabajo duplicado (en pausa)', cron_job_triggered: 'Job triggered', cron_job_paused: 'Job paused', cron_job_resumed: 'Job resumed', cron_job_updated: 'Job updated', cron_model_label: 'Model Override', cron_model_hint: 'Override the default model for this job.', cron_model_no_agent_hint: 'No-agent jobs run the configured script directly; model is unused.', cron_model_use_default: 'Default (use profile/system default)', cron_delete_confirm_title: 'Delete cron job', cron_delete_confirm_message: 'This cannot be undone.', cron_job_deleted: 'Job deleted', cron_completion_status: (name, status) => `Cron "${name}" ${status}`, status_failed: 'failed', status_completed: 'completed', todos_no_active: 'No active task list in this session.', clear_conversation_title: 'Clear conversation', clear_conversation_message: 'Clear all messages? This cannot be undone.', clear_failed: 'Clear failed: ', skills_no_match: 'No skills match.', skill_enabled: 'Habilitado', skill_disabled: 'Deshabilitado', skill_toggle_failed: 'Error al cambiar skill: ', linked_files: 'Linked Files', skill_load_failed: 'Could not load skill: ', skill_file_load_failed: 'Could not load file: ', skill_name_required: 'Skill name is required', skill_updated: 'Skill updated', skill_created: 'Skill created', skill_deleted: 'Skill deleted', skill_delete_confirm: 'Delete skill "{0}"?', skills_empty_title: 'Select a skill', skills_empty_sub: 'Pick a skill from the sidebar to view its contents, or create a new one.', skills_edit: 'Edit', skills_delete: 'Delete', skills_back_to: 'Back to {0}', tasks_empty_title: 'Select a scheduled job', tasks_empty_sub: 'Pick a job from the sidebar to view its details and runs, or create a new one.', workspaces_empty_title: 'Select a space', workspaces_empty_sub: 'Pick a space from the sidebar to view its files and settings, or add a new one.', profiles_empty_title: 'Select a profile', profiles_empty_sub: 'Pick an agent profile from the sidebar to view and edit its settings, or create a new one.', memory_notes_label: 'memory (notes)', memory_saved: 'Memory saved', my_notes: 'My Notes', user_profile: 'User Profile', external_notes_sources: 'Notas de terceros', external_notes_empty: 'Aún no hay fuentes MCP de notas o conocimiento visibles. Configura Joplin, Obsidian, Notion, llm-wiki u otro servidor de notas para mostrarlo aquí.', external_notes_auto_recall_hint: 'El recuerdo automático de la sesión no cambia; este panel solo muestra fuentes configuradas y herramientas de lectura/búsqueda disponibles.', external_notes_no_tools: 'No hay herramientas de lectura/búsqueda visibles actualmente para esta fuente.', external_notes_tool_count: (count) => `${count} herramienta${Number(count)===1?'':'s'} de notas disponible${Number(count)===1?'':'s'}`, external_notes_configured_hint: 'Se esperan nombres de herramientas de esta fuente configurada; los esquemas en vivo aparecerán cuando el runtime de WebUI los exponga.', external_notes_recent_ai: 'Usado recientemente por la IA', external_notes_auto: 'auto', external_notes_recent_ai_reason: 'Recuerdo automático', external_notes_search_placeholder: 'Buscar notas…', external_notes_search_empty: 'Busca en una fuente de notas configurada para previsualizar notas aquí.', source_active: 'active', source_configured: 'configured', no_notes_yet: 'No notes yet.', no_profile_yet: 'No profile yet.', agent_soul: 'Agent Soul', no_soul_yet: 'No soul defined yet.', workspace_choose_path: 'Choose workspace path', workspace_choose_path_meta: 'Add a validated path and switch this conversation', workspace_manage: 'Manage workspaces', workspace_manage_meta: 'Open the Spaces panel', workspace_use_title: 'Use in current session', workspace_use: 'Use', workspace_add_path_placeholder: 'Add workspace path (e.g. /home/user/my-project)', workspace_paths_validated_hint: 'Paths are validated as existing directories before saving.', workspace_drag_hint: 'Arrastra para reordenar', workspace_reorder_failed: 'Error al reordenar', workspace_added: 'Workspace added', workspace_renamed: 'Espacio renombrado', workspace_remove_confirm_title: 'Remove workspace', workspace_remove_confirm_message: (path) => `Remove "${path}"?`, workspace_removed: 'Workspace removed', workspace_switch_prompt_title: 'Switch workspace', workspace_switch_prompt_message: 'Enter an absolute workspace path to add and switch this conversation to.', workspace_switch_prompt_confirm: 'Switch', workspace_switch_prompt_placeholder: '/Users/you/project', workspace_not_added: 'Workspace was not added', workspace_already_saved: 'Workspace already saved — choose it from the list', workspace_busy_switch: 'Cannot switch workspace while agent is running', discard_file_edits_title: 'Discard file edits?', discard_file_edits_message: 'Switching workspaces will discard unsaved file edits in the preview.', workspace_switched_to: (name) => `Switched to ${name}`, profiles_no_profiles: 'No profiles found.', profile_api_keys_configured: 'API keys configured', profile_gateway_running: 'Gateway running', profile_gateway_stopped: 'Gateway stopped', profile_active: 'ACTIVE', profile_no_configuration: 'No configuration', profile_skill_count: (count) => `${count} habilidad${count === 1 ? '' : 'es'}`, profile_use: 'Use', profile_switch_title: 'Switch to this profile', profile_delete_title: 'Eliminar este perfil', profile_default_label: '(predeterminado)', profile_name_placeholder: 'Nombre del perfil (minúsculas, a-z, 0-9, guiones)', profile_clone_label: 'Clonar configuración del perfil activo', profile_model_label: 'Modelo / proveedor', profile_model_hint: 'Elige entre proveedores y modelos configurados para este nuevo perfil.', profile_model_use_default: 'Usar el valor predeterminado del perfil activo', profile_base_url_placeholder: 'URL base (opcional, p. ej. http://localhost:11434)', profile_api_key_placeholder: 'Clave API (opcional)', manage_profiles: 'Manage profiles', profiles_load_failed: 'Failed to load profiles', profile_switched_new_conversation: (name) => `Switched to profile: ${name} — new conversation started`, profile_switched: (name) => `Switched to profile: ${name}`, profile_name_rule: 'Lowercase letters, numbers, hyphens, underscores only', profile_base_url_rule: 'Base URL must start with http:// or https://', profile_created: (name) => `Profile created: ${name}`, profile_delete_confirm_title: (name) => `Delete profile "${name}"?`, profile_delete_confirm_message: 'Todas las sesiones, configuración, habilidades y memoria de este perfil se eliminarán de forma permanente. Esta acción no se puede deshacer.', profile_deleted: (name) => `Profile deleted: ${name}`, active_conversation_none: 'No active conversation selected.', active_conversation_meta: (title, count) => `${title} · ${count} message${count === 1 ? '' : 's'}`, settings_unsaved_changes: 'You have unsaved changes.', sign_out_failed: 'Error al cerrar sesión: ', disable_auth_confirm_title: 'Desactivar protección por contraseña', disable_auth_confirm_message: 'Anyone will be able to access this instance.', auth_disabled: 'Autenticación desactivada — protección por contraseña eliminada', disable_auth_failed: 'Failed to disable auth: ', current_password_label: 'Contraseña actual', current_password_placeholder: 'Ingrese contraseña actual…', current_password_required: 'Se requiere la contraseña actual para cambiar o desactivar la autenticación.', current_password_incorrect: 'La contraseña actual es incorrecta.', disable_auth_typed_confirm: 'Escriba DISABLE AUTH para confirmar', auth_status_password: 'Autenticación por contraseña', auth_status_passkey_only: 'Solo clave de acceso', auth_status_unauthenticated: 'Sin autenticación', auth_warning_badge: 'Auth desactivada', auth_disabled_warning_message: 'Esta instancia es accesible sin autenticación.', auth_acknowledged_label: 'He revisado este riesgo; muestra un aviso de navegación menos urgente.', auth_ack_save_failed: 'Error al actualizar el reconocimiento: ', bg_error_single: (title) => `"${title}" has encountered an error`, bg_error_multi: (count) => `${count} sessions have encountered an error`, // skill form skill_name: 'Nombre', skill_category: 'Categoría', skill_category_placeholder: 'Opcional, p. ej. devops', skill_content: 'Contenido de SKILL.md', skill_content_placeholder: 'Frontmatter YAML + cuerpo markdown', skill_rename_not_supported: 'No se admite renombrar una habilidad. Crea una nueva y elimina la anterior.', skill_metadata: 'Metadatos', // cron form cron_name_label: 'Nombre', cron_name_placeholder: 'Opcional', cron_schedule_label: 'Programación', cron_schedule_preset_label: 'Preajuste', cron_schedule_preset_hourly: 'Cada hora', cron_schedule_preset_daily: 'Diario', cron_schedule_preset_weekdays: 'Días laborables', cron_schedule_preset_weekly: 'Semanal', cron_schedule_preset_monthly: 'Mensual', cron_schedule_preset_custom: 'Personalizado', cron_schedule_hint: "Usa 'every 1h' o una expresión cron para trabajos recurrentes. Duraciones como '30m' se ejecutan una sola vez.", cron_schedule_once_warning: "Las duraciones como '30m' se ejecutan una vez y se eliminan después de correr. Usa 'every 30m' para mantener un trabajo recurrente.", cron_prompt_label: 'Prompt', cron_deliver_label: 'Entregar salida a', cron_deliver_local: 'Local (solo guardar salida)', cron_deliver_custom: 'Destino personalizado', cron_profile_label: 'Perfil', cron_profile_server_default: 'predeterminado del servidor', cron_profile_server_default_hint: 'Usa el perfil predeterminado del servidor WebUI durante la ejecución. Los trabajos existentes sin perfil conservan este comportamiento heredado.', cron_toast_notifications_label: 'Avisos de finalización', cron_toast_notifications_hint: 'Muestra un toast cuando este cron termina. La insignia de Tareas y el marcador de nueva ejecución se actualizan aunque esté desactivado.', cron_toast_notifications_enabled: 'Activado', cron_toast_notifications_disabled: 'Desactivado', cron_skills_label: 'Habilidades', cron_skills_placeholder: 'Añadir habilidades (opcional)…', cron_skills_edit_hint: 'La lista de habilidades no es editable después de crear.', // workspace form workspace_name_label: 'Nombre', workspace_name_placeholder: 'Nombre opcional', workspace_path_label: 'Ruta', workspace_path_required: 'La ruta es obligatoria', workspace_path_readonly: 'La ruta no se puede cambiar. Solo renombrar.', workspace_new_title: 'Nuevo espacio', // profile form 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_hide_external: 'Ocultar de la lista', session_archive_desc: 'Hide this conversation until archived is shown', session_archive_worktree_desc: 'Ocultar esta conversación; conservar su worktree en disco', session_hide_external_desc: 'Ocultar esta sesión importada de WebUI sin eliminar el historial original.', session_archive_failed: 'Archive failed: ', session_archived: 'Session archived', session_archived_worktree: 'Sesión archivada. El worktree permanece en disco.', session_hidden: 'Sesión ocultada de la lista', session_delete: 'Delete conversation', session_delete_desc: 'Permanently remove this conversation', session_delete_confirm: '¿Eliminar esta conversación?', session_delete_worktree_desc: 'Eliminar solo la conversación de WebUI; conservar el worktree en disco', session_delete_worktree_confirm: (path) => `¿Eliminar esta conversación? El worktree en ${path} permanecerá en disco.`, session_deleted: 'Conversación eliminada', session_deleted_worktree: 'Conversación eliminada. El worktree permanece en disco.', session_worktree_remove: 'Eliminar worktree', session_worktree_remove_desc: (path) => `Eliminar el git worktree en ${path} del disco`, session_worktree_remove_confirm: (path) => `¿Eliminar el git worktree del disco?\n\nRuta: ${path}\n\nSe eliminará todo el directorio del worktree. Los datos de la sesión permanecen en WebUI.`, session_worktree_remove_not_exists: (path) => `El worktree en ${path} ya no existe en el disco.`, session_worktree_remove_confirm_label: 'Eliminar', session_worktree_removed: 'Worktree eliminado.', session_worktree_remove_failed: 'Error al eliminar worktree: ', session_worktree_remove_status_failed: 'Error al leer el estado del worktree: ', session_worktree_remove_locked_by_stream: 'No se puede eliminar — una sesión de streaming activa está usando este worktree.', session_worktree_remove_locked_by_terminal: 'No se puede eliminar — una sesión de terminal activa está usando este worktree.', session_worktree_remove_unsafe_blocked: 'Resuelve los cambios locales o los commits no enviados antes de eliminar este worktree.', session_worktree_remove_dirty_warning: 'ADVERTENCIA: Este worktree tiene cambios no confirmados que se perderán.', session_worktree_remove_untracked_warning: (count) => `${count} archivo(s) no rastreados se eliminarán permanentemente.`, session_worktree_remove_ahead_warning: (ahead) => `${ahead} commit(s) no enviados se perderán.`, session_duplicate: 'Duplicate conversation', session_duplicate_desc: 'Create a copy with the same workspace and model', session_export_html: 'Export as HTML', session_export_html_desc: 'Download this conversation as a self-contained HTML file', session_duplicate_failed: 'Duplicate failed: ', session_stop_response: 'Stop response', session_stop_response_desc: 'Cancel the running response for this conversation', 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', session_select_mode: 'Seleccionar', session_select_mode_desc: 'Selecciona conversaciones para gestión masiva', session_select_all: 'Seleccionar todo', session_deselect_all: 'Deseleccionar todo', session_selected_count: '{0} seleccionadas', session_batch_archive: 'Archivar', session_batch_delete: 'Eliminar', session_batch_move: 'Mover al proyecto', session_batch_delete_confirm: '¿Eliminar {0} conversaciones?', session_batch_archive_confirm: '¿Archivar {0} conversaciones?', session_batch_delete_worktree_confirm: '¿Eliminar {0} conversaciones? {1} conversaciones con worktree dejarán sus directorios de worktree en disco.', session_batch_archive_worktree_confirm: '¿Archivar {0} conversaciones? {1} conversaciones con worktree conservarán sus directorios de worktree en disco.', session_no_selection: 'Ninguna conversación seleccionada', 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_check_now: 'Comprobar ahora', settings_checking: 'Comprobando\u2026', settings_up_to_date: 'Actualizado \u2713', settings_updates_available: '{count} actualización(es) disponible(s)', settings_updates_disabled: 'Comprobación de actualizaciones desactivada', settings_update_check_failed: 'Error al comprobar actualizaciones', settings_update_no_git: 'No se pueden comprobar actualizaciones (no es un checkout git)', settings_label_workspace_panel_open: 'Mantener panel de espacio abierto', settings_desc_workspace_panel_open: 'Al activar, el panel de archivos se abre automáticamente en cada nueva sesión. Aún puedes cerrarlo manualmente.', settings_label_workspace_todos_tab: 'Mostrar pestaña Todos en el panel de espacio de trabajo', settings_desc_workspace_todos_tab: 'Cuando está habilitado, aparece una pestaña Todos en el panel de espacio de trabajo. El panel Todos de la barra lateral sigue disponible.', settings_label_session_jump_buttons: 'Mostrar botones de salto de sesión', settings_desc_session_jump_buttons: 'Muestra botones flotantes de Inicio y Fin al leer historiales de sesión largos.', settings_label_terminal_auto_expand: 'Expandir terminal automáticamente al recibir salida', settings_desc_terminal_auto_expand: 'Expandir automáticamente el panel de terminal contraído cuando un comando en ejecución emite nueva salida.', settings_label_session_endless_scroll: 'Cargar mensajes antiguos al desplazarse hacia arriba', settings_desc_session_endless_scroll: 'Si está activado, los mensajes antiguos se cargan automáticamente al desplazarte hacia arriba. Si está desactivado, usa el botón de mensajes antiguos.', settings_label_auto_scroll_follow: 'Seguir automáticamente el contenido nuevo', settings_desc_auto_scroll_follow: 'Si está activado, la vista se desplaza hacia abajo a medida que llegan nuevos tokens. Si está desactivado, controlas tú la posición de desplazamiento.', settings_label_render_user_markdown: 'Render markdown in user messages', settings_label_show_titlebar_profile: 'Show profile switcher in titlebar', // TODO: translate settings_desc_show_titlebar_profile: 'When enabled, a profile switcher button appears in the top-left app titlebar so you can change profiles from any tab. Off by default; the composer footer always has a profile switcher regardless of this setting.', // TODO: translate settings_desc_render_user_markdown: 'When enabled, bold, italic, links, and other markdown in your own messages are rendered. Off by default; fenced code blocks and math always render regardless of this setting.', settings_label_large_text_paste_as_attachment: 'Attach large pasted text as file', settings_desc_large_text_paste_as_attachment: 'When enabled, long pasted text becomes a .md attachment instead of filling the composer.', settings_label_project_quick_create: 'Show per-project new-conversation buttons', settings_desc_project_quick_create: 'When enabled, each project chip in the sidebar gets a + button to start a conversation in that project.', settings_label_structured_code: 'JSON/YAML code blocks', settings_option_structured_code_auto: 'Auto: Tree for long blocks', settings_option_structured_code_on: 'Tree by default', settings_option_structured_code_off: 'Raw by default', settings_label_structured_code_auto_lines: 'Auto threshold lines', settings_desc_structured_code: 'When Auto is selected, JSON/YAML blocks with at least this many lines open in Tree view. Tree always opens the structured viewer; Raw keeps the syntax-highlighted text. You can still switch Tree/Raw on each block.', settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_chat_activity_display_mode: 'Activity display', settings_desc_chat_activity_display_mode: 'Compact Worklog groups supporting activity into a quiet summary. Transparent Stream keeps each thinking/tool event as its own chronological expandable row.', first_token_time: 'Time to first token', processed_elapsed: _i18nProcessedElapsedEn, worklog_thinking: 'Thinking', tool_target_skill_suffix: 'skill', tool_action_label: _i18nToolActionLabelEn, tool_worklog_summary: _i18nToolWorklogSummaryEn, tool_summary_join: _i18nToolSummaryJoinEn, done: 'Done', settings_option_compact_worklog: 'Compact Worklog', settings_option_transparent_stream: 'Transparent Stream', settings_label_tab_visibility: 'Pestañas de la barra lateral', settings_desc_tab_visibility: 'Elige qué pestañas aparecen en la barra lateral y el rail. Chat y Configuración siempre están visibles.', settings_label_composer_controls: 'Chat footer controls', settings_desc_composer_controls: 'Toggle which controls are shown in the chat footer. Drag chips to reorder each footer group.', settings_label_composer_situational_controls: 'Situational footer controls', settings_desc_composer_situational_controls: 'These controls do not always appear, depending on viewport, mode, or runtime state. You can still toggle them off if needed.', composer_control_attach: 'Attach', composer_control_saved_prompts: 'Saved prompts', composer_control_mic: 'Mic', composer_control_profile: 'Profile', composer_control_workspace: 'Workspace', composer_control_model: 'Model', composer_control_reasoning: 'Reasoning', composer_control_context: 'Context', composer_control_voice_mode: 'Voice mode', composer_control_yolo: 'YOLO', composer_control_bg_badge: 'Background badge', composer_control_mobile_config: 'Mobile config', composer_control_quota_chip: 'Quota chip', composer_control_toolsets: 'Toolsets', composer_control_status: 'Status', open_in_browser: 'Abrir en el navegador', settings_section_system_title: 'System', settings_tab_appearance: 'Appearance', settings_tab_conversation: 'Conversation', settings_tab_preferences: 'Preferences', settings_tab_plugins: 'Plugins', settings_tab_extensions: 'Extensions', settings_extensions_gallery_tab: 'Gallery', settings_extensions_installed_tab: 'Installed', settings_extensions_diagnostics_tab: 'Diagnostics', settings_extensions_gallery_loading: 'Loading gallery…', settings_extensions_gallery_empty: 'No extensions found in the registry.', settings_extensions_gallery_error: 'Failed to load gallery.', ext_gallery_install: 'Install', ext_gallery_installing: 'Installing…', ext_gallery_installed: 'Installed', ext_gallery_uninstall: 'Uninstall', ext_gallery_uninstalling: 'Uninstalling…', ext_gallery_restart_required: 'Restart required', ext_gallery_permissions_show: 'Permissions', ext_gallery_permissions_hide: 'Hide permissions', ext_gallery_permissions_empty: 'No se declararon permisos adicionales.', ext_gallery_version: 'Version', ext_gallery_author: 'Author', ext_gallery_capabilities: 'Capabilities', ext_gallery_next_step: 'Siguiente paso', ext_gallery_after_install: 'Después de instalar', ext_gallery_local_component_required: 'Esta extensión tiene un componente local. Después de instalarla, inicia la app local o el sidecar requerido.', ext_gallery_local_app_label: 'App local', ext_gallery_required_suffix: 'Se requiere {0}', ext_gallery_sidecar_required: 'Se requiere sidecar', ext_gallery_native_host_required: 'Se requiere host nativo', ext_gallery_open_setup_guide: 'Abrir guía de configuración', ext_gallery_install_restart_required: 'Extensión instalada. Reinicio requerido para aplicar.', ext_gallery_install_followup: 'Extensión instalada. Consulta la tarjeta para ver los próximos pasos.', ext_gallery_install_ok: 'Extension installed successfully.', ext_gallery_uninstall_ok: 'Extension uninstalled.', settings_plugins_title: 'Plugins', // TODO: translate plugins_enable_toggle: 'Activar', settings_plugins_meta: 'View installed Hermes plugins and the lifecycle hooks they register. This panel is read-only.', // TODO: translate settings_plugins_empty: 'No Hermes plugins are currently visible. Install or enable plugins from the Hermes CLI/config to see them here.', // TODO: translate plugins_unnamed: 'Unnamed plugin', // TODO: translate plugins_no_description: 'No description provided.', // TODO: translate plugins_no_hooks: 'No registered lifecycle hooks', // TODO: translate plugins_registered_hooks: 'Registered hooks', // TODO: translate plugins_enabled: 'Enabled', // TODO: translate plugins_disabled: 'Disabled', // TODO: translate plugins_active_provider: 'Active (provider)', // TODO: translate plugins_provider_no_hooks: 'Provider plugin — no agent-visibility hooks', // TODO: translate plugins_load_failed: 'Failed to load plugins: ', // TODO: translate settings_tab_system: 'System', settings_tab_help: 'Help', settings_help_meta: 'Resources and support for Hermes WebUI.', settings_help_docs_label: 'Documentation', settings_help_docs_desc: 'Guides, configuration reference, and the full Hermes WebUI README.', settings_help_docs_link: 'Open Documentation', settings_help_issue_label: 'Having an issue?', settings_help_issue_desc: 'Search existing reports or open a new one on GitHub.', settings_help_issue_link: 'Open GitHub Issues', status_updated: 'Updated', status_ephemeral: 'Ephemeral snapshot — not saved to transcript history.', status_no_tokens: 'No token data', status_profile: 'Profile', status_hermes_home: 'Hermes home', status_started: 'Started', status_tokens: 'Tokens', status_unknown: 'Unknown', cmd_yolo: 'Alternar modo YOLO (saltar aprobaciones)', cmd_branch:'Fork this conversation into a new session', cmd_branch_usage:'/branch [name] — fork conversation (optionally with a name)', branch_forked:'Forked into new session', branch_failed:'Fork failed: ', fork_from_here:'Fork from here', forked_from:'Forked from', yolo_no_session: 'No hay sesión activa', yolo_enabled: '⚡ Modo YOLO activado — aprobaciones omitidas', yolo_disabled: 'Modo YOLO desactivado', yolo_pill_label: 'YOLO', yolo_pill_title_active: 'Modo YOLO activo — haz clic para desactivar', approval_skip_all: '⚡ Saltar todo en esta sesión', approval_skip_all_title: 'Saltar todas las solicitudes de aprobación en esta sesión', // composer action tooltips composer_send: 'Enviar mensaje', composer_queue: 'Poner en cola', composer_interrupt: 'Interrumpir y enviar', composer_steer: 'Dirigir respuesta actual', composer_stop: 'Detener generación', composer_disabled_clarify: 'Responde a la solicitud de aclaración', composer_disabled_compression: 'Esperando a que finalice la compresión', composer_compression_will_queue: 'Type a message — it will queue and send after compression', composer_disabled_empty: 'Escribe un mensaje para enviar', composer_mobile_workspace: 'Espacio de trabajo', composer_mobile_model: 'Modelo', composer_mobile_quota: 'Cuota', composer_mobile_reasoning: 'Razonamiento', composer_mobile_context: 'Contexto', media_audio_label: 'Audio', media_svg_label: 'Diagrama', media_video_label: 'Vídeo', media_download: 'Descargar', csv_loading: 'Cargando CSV', csv_too_large: 'Archivo CSV demasiado grande para mostrar en línea', csv_no_data: 'El archivo CSV no tiene suficientes datos para mostrar como tabla', csv_error: 'Error al cargar el archivo CSV', csv_header_note: 'La primera fila se muestra como encabezado de tabla', excalidraw_loading: 'Cargando diagrama', excalidraw_too_large: 'Archivo Excalidraw demasiado grande para mostrar en línea', excalidraw_invalid: 'Formato de archivo Excalidraw no válido', excalidraw_error: 'Error al cargar archivo Excalidraw', excalidraw_label: 'Diagrama', excalidraw_download: 'Descargar', excalidraw_empty: 'Diagrama vacío', excalidraw_render_error: 'Error al renderizar el diagrama', excalidraw_simplified: 'Vista previa SVG simplificada — no es idéntica al lienzo de Excalidraw', pdf_loading: 'Cargando PDF {0}…', pdf_too_large: 'PDF demasiado grande para vista previa', pdf_no_pages: 'No se pudo renderizar la vista previa del PDF', pdf_error: 'Error al cargar el PDF', pdf_download: 'Descargar PDF', pdf_truncated: 'Showing the first {0} of {1} pages — download for the full document', html_loading: 'Cargando vista previa de HTML…', html_too_large: 'HTML demasiado grande para vista previa', html_error: 'Error al cargar la vista previa de HTML', html_open_full: 'Abrir página completa', html_sandbox_label: 'Vista previa de HTML', // TTS (#499) tts_listen: 'Escuchar', tts_not_supported: 'Síntesis de voz no disponible', settings_label_tts: 'Texto a voz para respuestas', settings_desc_tts: 'Mostrar botón de altavoz en mensajes del asistente', settings_label_tts_auto_read: 'Leer respuestas automáticamente', settings_desc_tts_auto_read: 'Leer en voz alta las respuestas del asistente automáticamente', // Composer voice-mode pref (#1488) settings_label_voice_mode: 'Hands-free voice mode button', // TODO: translate settings_desc_voice_mode: 'Show the voice-mode button (audio waveform) next to the dictation mic. Lets you speak naturally — Hermes auto-sends after a pause and reads replies aloud. Requires a browser that supports both speech recognition and TTS.', settings_label_raw_audio: 'Send raw audio instead of transcribing', settings_desc_raw_audio: 'Record and send the original audio file to the agent instead of converting it to text first. The agent can then transcribe it or process the raw audio (emotion, background noise, custom STT). Like Telegram\'s voice message behavior.', voice_send_raw: 'Send raw audio', voice_raw_attached: 'Audio attached. Press Send or type more.', // TODO: translate settings_label_tts_voice: 'Voz', settings_desc_tts_voice: 'Seleccionar voz para síntesis de voz', settings_label_tts_rate: 'Velocidad de voz', settings_label_tts_pitch: 'Tono de voz', settings_label_tts_engine: 'Motor TTS', settings_desc_tts_engine: 'Elija el motor de voz. Edge TTS utiliza voces neuronales de Microsoft a través del servidor.', checkpoint_date: 'Date', // TODO: translate checkpoint_diff_files_changed: (n) => `${n} file${n === 1 ? '' : 's'} changed`, // TODO: translate checkpoint_diff_no_changes: 'No differences found between this checkpoint and the current workspace.', // TODO: translate checkpoint_diff_title: 'Changes in checkpoint', // TODO: translate checkpoint_empty: 'No checkpoints found for this workspace.', // TODO: translate checkpoint_error: 'Failed to load checkpoints', // TODO: translate checkpoint_files: 'Files', // TODO: translate checkpoint_loading: 'Loading checkpoints…', // TODO: translate checkpoint_message: 'Message', // TODO: translate checkpoint_restore: 'Restore', // TODO: translate checkpoint_restore_confirm_message: (ckpt) => `Restore workspace to checkpoint "${ckpt}"? This will overwrite files with the saved versions. Files added after this checkpoint will not be deleted.`, // TODO: translate checkpoint_restore_confirm_title: 'Restore checkpoint?', // TODO: translate checkpoint_restored: 'Checkpoint restored', // TODO: translate checkpoint_title: 'Checkpoints', // TODO: translate checkpoint_view_diff: 'View diff', // TODO: translate insights_activity_by_day: 'Activity by Day', // TODO: translate insights_activity_by_hour: 'Activity by Hour', // TODO: translate insights_cost: 'Estimated Cost', // TODO: translate insights_daily_tokens: 'Daily Tokens', insights_model_name: 'Model', insights_model_sessions: 'Sessions', insights_model_tokens: 'Tokens', insights_model_cost: 'Cost', insights_model_cache: 'Caché', insights_cache_hit: 'Tasa de aciertos de caché de prompts', insights_model_share: 'Share', insights_model_health_title: 'Model health comparison', insights_model_health_provider: 'Provider', insights_model_health_replacement: 'Replacement guide', insights_model_health_cost_per_m: 'Cost / 1M', insights_no_usage_data: 'No usage data yet', insights_footer: 'Showing data from the last {days} days', // TODO: translate insights_skill_usage_title: 'Skill Usage', // TODO: translate insights_skill_usage_sub: 'Tool invocation frequency', // TODO: translate insights_skill_usage_total: 'Total invocations', // TODO: translate insights_skill_usage_skills_used: 'Skills used', // TODO: translate insights_skill_usage_no_data: 'No skill usage data yet', // TODO: translate insights_skill_usage_no_data_hint: 'Skills will appear here once used in conversations.', // TODO: translate insights_skill_usage_footer: 'Counts from ~/.hermes/skills/', // TODO: translate insights_skill_usage_col_skill: 'Skill', // TODO: translate insights_skill_usage_col_uses: 'Uses', // TODO: translate insights_skill_usage_col_views: 'Views', // TODO: translate insights_skill_usage_col_share: 'Usage %', // TODO: translate insights_skill_usage_col_patches: 'Patches', // TODO: translate insights_input_tokens: 'Input', // TODO: translate insights_messages: 'Messages', // TODO: translate insights_models: 'Models', // TODO: translate insights_no_cost: 'N/A', // TODO: translate insights_output_tokens: 'Output', // TODO: translate insights_peak_hour: 'Peak: {hour}', // TODO: translate insights_sessions: 'Sessions', // TODO: translate insights_title: 'Usage Analytics', // TODO: translate insights_token_breakdown: 'Token Breakdown', // TODO: translate insights_tokens: 'Tokens', // TODO: translate insights_total: 'Total', // TODO: translate settings_desc_api_redact: 'Self-hosted users can disable for transparency (not recommended for shared instances).', // TODO: translate settings_label_api_redact: 'Redact sensitive data in API responses', // TODO: translate voice_error: 'Voice not supported in this browser', // TODO: translate voice_listening: 'Listening…', // TODO: translate voice_mode_active: 'Voice mode on', // TODO: translate voice_mode_off: 'Voice mode off', // TODO: translate voice_speaking: 'Speaking…', // TODO: translate voice_thinking: 'Thinking…', // TODO: translate // Composer voice buttons (#1488) voice_dictate: 'Dictate', // TODO: translate voice_dictate_active: 'Stop dictation', voice_recording_active: 'Detener grabación', // TODO: translate voice_mode_toggle: 'Voice mode', // TODO: translate voice_mode_toggle_active: 'Exit voice mode', // TODO: translate subagent_children: 'Subagent sessions', // TODO: translate outline_title: 'Esquema', outline_empty: 'Aún no hay preguntas.', outline_loading: 'Cargando…', wiki_browse: 'Browse wiki', wiki_search_placeholder: 'Search pages...', wiki_no_pages: 'No wiki pages found', wiki_not_configured: 'Wiki not configured', }, de: { offline_title: 'Verbindung verloren', offline_browser_detail: 'Dein Browser meldet, dass dieses Gerät offline ist.', offline_network_detail: 'Hermes ist von diesem Browser aus gerade nicht erreichbar.', offline_autorefresh: 'Ich aktualisiere diese Seite automatisch, sobald Hermes wieder erreichbar ist.', offline_check_now: 'Jetzt prüfen', offline_checking: 'Prüfe…', offline_stream_waiting: 'Verbindung verloren. Warte auf Aktualisierung…', _lang: 'de', _label: 'Deutsch', _speech: 'de-DE', // boot.js cancelling: 'Wird abgebrochen\u2026', cancel_failed: 'Abbrechen fehlgeschlagen: ', mic_denied: 'Mikrofonzugriff verweigert. Überprüfen Sie die Browserberechtigungen.', mic_insecure_origin: 'Voice input needs a secure connection. Open Hermes over HTTPS or from localhost to use the microphone.', // TODO: translate mic_no_speech: 'Keine Sprache erkannt. Versuchen Sie es erneut.', mic_network: 'Spracherkennung nicht verfügbar.', mic_error: 'Spracheingabefehler: ', session_imported: 'Sitzung importiert', import_failed: 'Import fehlgeschlagen: ', import_invalid_json: 'Ungültiges JSON', image_pasted: 'Bild eingefügt: ', text_pasted: 'Eingefügter Text angehängt als ', // messages.js edit_message: 'Nachricht bearbeiten', regenerate: 'Antwort regenerieren', copy: 'Kopieren', copied: 'Kopiert!', copy_failed: 'Kopieren fehlgeschlagen', selected_text_reply: 'Mit Auswahl antworten', selected_text_reply_title: 'Ausgewählten Chattext als Zitatkontext anhängen', selected_text_reply_appended: 'Auswahl zum Composer hinzugefügt', saved_prompts_empty: 'Noch keine gespeicherten Eingabeaufforderungen.', saved_prompts_save_current: 'Aktuelle Eingabe als Eingabeaufforderung speichern', saved_prompts_saved: 'Eingabeaufforderung gespeichert', saved_prompts_delete: 'Eingabeaufforderung löschen', saved_prompts_empty_input: 'Gib zuerst eine Eingabeaufforderung ein', context_block_name_default: 'Kontext', context_block_flush_aria: 'Kontextblöcke werden beim Senden eingefügt', context_block_rename_hint: 'Klicken oder Enter drücken zum Umbenennen', context_block_rename_aria: 'Kontextblock umbenennen', context_block_remove: 'Kontextblock entfernen', diff_loading: 'Lade Diff', diff_error: 'Patch-Datei konnte nicht geladen werden', diff_too_large: 'Patch-Datei zu groß für Inline-Anzeige', tree_view: 'Baum', raw_view: 'Rohdaten', parse_failed_note: 'parse failed', you: 'Du', mcp_servers_title: 'MCP-Server', mcp_servers_desc: 'MCP-Server in config.yaml verwalten.', mcp_no_servers: 'Keine MCP-Server konfiguriert.', mcp_add_server: '+ Server hinzufügen', mcp_field_name: 'Servername', mcp_transport_label: 'Transporttyp', mcp_field_command: 'Befehl', mcp_field_args: 'Argumente (kommagetrennt)', mcp_field_url: 'URL', mcp_field_timeout: 'Timeout (Sekunden)', mcp_save: 'Speichern', mcp_cancel: 'Abbrechen', mcp_name_required: 'Servername ist erforderlich.', mcp_url_required: 'URL für HTTP-Transport erforderlich.', mcp_command_required: 'Befehl für stdio-Transport erforderlich.', mcp_saved: 'MCP-Server gespeichert.', mcp_save_failed: 'Fehler beim Speichern.', mcp_delete_confirm_title: 'MCP-Server löschen', mcp_delete_confirm_message: 'MCP-Server «{0}» löschen? Dies kann nicht rückgängig gemacht werden.', mcp_deleted: 'MCP-Server gelöscht.', mcp_delete_failed: 'Fehler beim Löschen.', mcp_load_failed: 'Fehler beim Laden.', mcp_restart_hint: 'Server changes are read-only here for now. Edit config.yaml and restart Hermes for changes to take effect.', mcp_toggle_followup: 'Enable/disable controls are intentionally deferred until MCP reload semantics are explicit.', mcp_status_active: 'Active', mcp_status_configured: 'Configured', mcp_status_disabled: 'Disabled', mcp_status_invalid_config: 'Invalid config', mcp_status_unknown: 'Unknown', mcp_tool_count: '{0} tools', mcp_enabled_yes: 'Enabled', mcp_enabled_no: 'Disabled', mcp_enable_server: 'Enable this MCP server', mcp_disable_server: 'Disable this MCP server', mcp_enabled_toast: (name) => `MCP server "${name}" enabled.`, mcp_disabled_toast: (name) => `MCP server "${name}" disabled.`, mcp_toggle_failed: 'Failed to update MCP server.', mcp_tools_title: 'MCP Tools', mcp_tools_desc: 'Search known tools across active MCP servers.', mcp_tools_search_placeholder: 'Search tools by name, server, or description…', mcp_tools_no_tools: 'No MCP tools are available from the active runtime inventory.', mcp_tools_no_matches: 'No MCP tools match your search.', mcp_tools_load_failed: 'Failed to load MCP tools.', mcp_tools_schema_empty: 'No schema parameters.', mcp_tools_runtime_note: 'Tool inventory only uses already-known active MCP runtime data; the WebUI does not start or probe servers.', mcp_tools_summary_no_matches: (query,total) => `No MCP tools matching “${query}” (${total} total MCP tools).`, mcp_tools_summary_none: 'No MCP tools to show.', mcp_tools_summary_matching: (query) => ` matching “${query}”`, mcp_tools_summary_total_note: (total) => ` (${total} total MCP tools)`, mcp_tools_summary_showing: (start,end,filtered,searchNote,totalNote,page,pages) => `Showing ${start}-${end} of ${filtered} MCP tools${searchNote}${totalNote}. Page ${page} of ${pages}.`, mcp_tools_page_size_prefix: 'Show', mcp_tools_page_size_suffix: 'per page', mcp_tools_per_page_aria: 'MCP tools per page', mcp_tools_inactive_configured_servers: (servers) => `Configured but inactive in this WebUI runtime: ${servers}.`, mcp_tools_pagination_label: 'MCP tools pagination', mcp_tools_previous_page: '‹ Prev', mcp_tools_previous_page_aria: 'Previous MCP tools page', mcp_tools_next_page: 'Next ›', mcp_tools_next_page_aria: 'Next MCP tools page', thinking: 'Nachdenken', expand_all: 'Alle ausklappen', collapse_all: 'Alle einklappen', edit_failed: 'Bearbeiten fehlgeschlagen: ', regen_failed: 'Regeneration fehlgeschlagen: ', reconnect_active: 'Eine Antwort wird noch generiert. Neu laden, wenn bereit?', reconnect_finished: 'Eine Antwort war in Arbeit, als Sie zuletzt gegangen sind. Nachrichten könnten aktualisiert worden sein.', // approval card approval_heading: 'Genehmigung erforderlich', approval_desc_prefix: 'Gefährlicher Befehl erkannt', approval_btn_once: 'Einmal zulassen', approval_btn_once_title: 'Diesen einen Befehl zulassen (Enter)', approval_btn_session: 'Sitzung zulassen', approval_btn_session_title: 'Für diese Konversationssitzung zulassen', approval_btn_always: 'Immer zulassen', approval_btn_always_title: 'Dieses Befehlsmuster immer zulassen', approval_btn_deny: 'Ablehnen', approval_btn_deny_title: 'Ablehnen \u2014 diesen Befehl nicht ausführen', approval_responding: 'Antwortet\u2026', approval_gateway_unsupported: 'Approvals require a newer gateway. Upgrade the connected Hermes gateway to enable this.', approval_gateway_unsupported_label: 'Genehmigungen nicht unterstützt', clarify_heading: 'Klärung erforderlich', clarify_hint: 'Wähle eine Option oder schreibe deine eigene Antwort unten.', clarify_other: 'Andere', clarify_send: 'Senden', clarify_input_placeholder: 'Gib deine Antwort ein…', clarify_responding: 'Antwortet\u2026', session_attention_approval: (n) => n === 1 ? 'Freigabe' : `${n} Freigaben`, session_attention_clarify: (n) => n === 1 ? 'Frage' : `${n} Fragen`, session_attention_generic: (n) => n === 1 ? 'Achtung' : `${n} Hinweise`, session_attention_approval_title: 'Wartet auf deine Freigabeentscheidung', session_attention_clarify_title: 'Wartet auf deine Antwort', session_attention_generic_title: 'Wartet auf eine Benutzeraktion', untitled: 'Unbenannt', n_messages: (n) => `${n} Nachrichten`, load_older_messages: '↑ Nach oben scrollen oder klicken, um ältere Nachrichten zu laden', session_jump_start: 'Anfang', session_jump_start_label: 'Zum Anfang der Sitzung springen', session_jump_end: 'Ende', session_jump_end_label: 'Zum Ende der Sitzung springen', session_new_message: 'Neue Nachricht', session_new_message_label: 'Neue Nachricht verfügbar, zum Ende springen', jump_to_question: 'zur Antwort', jump_to_question_label: 'Zum Anfang dieser Antwort springen', queued_label: 'Wird nach Antwort gesendet', queued_count: (n) => n === 1 ? '1 in Warteschlange' : `${n} in Warteschlange`, queued_cancel: 'Nachricht abbrechen', model_unavailable: ' (nicht verfügbar)', model_unavailable_title: 'Dieses Modell ist nicht mehr in Ihrer aktuellen Provider-Liste', provider_mismatch_warning: (m,p)=>`"${m}" funktioniert möglicherweise nicht mit Ihrem konfigurierten Provider (${p}). Trotzdem senden, oder \`hermes model\` im Terminal ausführen.`, provider_mismatch_label: 'Provider-Konflikt', gateway_auth_label: 'Gateway-Authentifizierung fehlgeschlagen', gateway_start: 'Start', gateway_stop: 'Stop', gateway_restart: 'Restart', gateway_start_success: 'Gateway start completed.', gateway_stop_success: 'Gateway stop completed.', gateway_restart_success: 'Gateway restart completed.', gateway_start_failed: 'Gateway start failed', gateway_stop_failed: 'Gateway stop failed', gateway_restart_failed: 'Gateway restart failed', gateway_running: 'Running', gateway_session: 'session', gateway_sessions: 'sessions', gateway_status_load_failed: 'Failed to load gateway status', model_not_found_label: 'Modell nicht gefunden', // commands.js cmd_help: 'Verfügbare Befehle auflisten', archive_extracted: (n, c) => `${n} Datei(en) aus ${c} Archiv(en) entpackt`, cmd_clear: 'Konversationsverlauf löschen', cmd_compress: 'Kontext manuell komprimieren (Nutzung: /compress [Thema])', ctx_compress_hint: 'Kontext komprimieren um Platz zu schaffen →', ctx_compress_action: '⚠ Jetzt komprimieren um Kontext freizugeben', cmd_compact_alias: 'Alte Alias für /compress', cmd_model: 'Modell wechseln (z.B. /model gpt-4o)', cmd_workspace: 'Workspace nach Namen wechseln', cmd_terminal: 'Workspace-Terminal öffnen', cmd_new: 'Neue Chat-Sitzung starten', cmd_usage: 'Token-Verbrauchsanzeige umschalten', cmd_theme: 'Darstellung wechseln (Theme: system/dark/light, Skin: default/ares/mono/graphite/slate/poseidon/sisyphus/charizard/sienna/catppuccin/nous/geist-contrast/zeus/verdigris)', cmd_personality: 'Agenten-Persönlichkeit wechseln', cmd_skills: 'Verfügbare Hermes-Skills auflisten', cmd_use: 'Einen Skill für die nächste Nachricht erzwingen', available_commands: 'Verfügbare Befehle:', type_slash: 'Tippe / für Befehle', conversation_cleared: 'Konversation gelöscht', command_label: 'Befehl', context_compaction_label: 'Kontextkomprimierung', retrieval_context_label: 'Indizierter Kontext', retrieval_context_preview: 'Frühere Nachrichten sind gespeichert und über Kontextwerkzeuge abrufbar', preserved_task_list_label: 'Beibehaltene Aufgabenliste', reference_only_label: 'Nur Referenz', model_usage: 'Nutzung: /model ', no_model_match: 'Kein Modell gefunden für "', model_did_you_mean: (m) => ` — meintest du "${m}"?`, switched_to: 'Gewechselt zu ', workspace_usage: 'Nutzung: /workspace ', no_workspace_match: 'Kein Workspace gefunden für "', switched_workspace: 'Gewechselt zu Workspace: ', workspace_switch_failed: 'Workspace-Wechsel fehlgeschlagen: ', new_session: 'Neue Sitzung erstellt', new_session_creating: 'Neue Unterhaltung wird erstellt…', compressing: 'Kontext-Komprimierung wird angefordert...', compress_running_label: 'Komprimierung', compress_complete_label: 'Komprimierung abgeschlossen', auto_compress_label: 'Automatische Komprimierung', compress_failed_label: 'Komprimierung fehlgeschlagen', focus_label: 'Thema', token_usage_on: 'Token-Verbrauch an', usage_personality_none: 'none', // TODO: translate token_usage_off: 'Token-Verbrauch aus', usage_cache_hit_detail: 'Cache: {0}% Treffer ({1} gelesen / {2} geschrieben)', usage_cached_percent: '{0}% im Cache', theme_usage: 'Nutzung: /theme ', theme_set: 'Theme: ', no_active_session: 'Keine aktive Sitzung', model_scope_advisory: 'Gilt für diesen Chat ab Ihrer nächsten Nachricht.', model_scope_toast: 'Gilt für diesen Chat ab Ihrer nächsten Nachricht.', cmd_queue: 'Nachricht f\u00fcr den n\u00e4chsten Durchgang einreihen', cmd_goal: 'Ein dauerhaftes Ziel setzen oder prüfen', goal_evaluating_progress: 'Evaluating goal progress…', goal_working_toward: 'Working toward goal…', goal_continuing_toast: 'Continuing toward goal…', goal_status_none: 'No active goal. Set one with /goal .', goal_status_active: (turns, max_turns, goal) => `⊙ Goal (active, ${turns}/${max_turns} turns): ${goal}`, goal_status_paused: (turns, max_turns, reason, goal) => `⏸ Goal (paused, ${turns}/${max_turns}${reason ? `, ${reason}` : ''}): ${goal}`, goal_status_done: (turns, max_turns, goal) => `✓ Goal done (${turns}/${max_turns}): ${goal}`, goal_set: (turns, goal) => `⊙ Goal set (${turns}-turn budget): ${goal}`, goal_paused: (goal) => `⏸ Goal paused: ${goal}`, goal_resumed: (goal) => `▶ Goal resumed: ${goal}`, goal_cleared: 'Goal cleared.', goal_no_goal: 'No active goal.', goal_achieved: (reason) => `✓ Goal achieved: ${reason}`, goal_paused_budget_exhausted: (turns, max_turns) => `⏸ Goal paused — ${turns}/${max_turns} turns used. Use /goal resume to keep going, or /goal clear to stop.`, goal_continuing: (turns, max_turns, reason) => `↻ Continuing toward goal (${turns}/${max_turns}): ${reason}`, cmd_interrupt: 'Aktuellen Durchgang abbrechen und neue Nachricht senden', cmd_steer: 'Korrektursignal einf\u00fcgen ohne Unterbrechung', cmd_queue_no_msg: 'Verwendung: /queue ', cmd_queue_not_busy: 'Keine aktive Aufgabe \u2014 normal senden', cmd_queue_confirm: 'Nachricht eingereiht', cmd_interrupt_no_msg: 'Verwendung: /interrupt ', cmd_interrupt_confirm: 'Unterbrochen \u2014 neue Nachricht wird gesendet', cmd_steer_no_msg: 'Verwendung: /steer ', cmd_steer_fallback: 'Steer nicht verf\u00fcgbar \u2014 Entwurf wiederhergestellt', cmd_steer_delivered: 'Steer geliefert \u2014 der Agent sieht es bei seinem n\u00e4chsten Tool-Ergebnis', steer_leftover_queued: 'Steer f\u00fcr n\u00e4chsten Durchgang eingereiht', busy_steer_fallback: 'Steer nicht verf\u00fcgbar \u2014 Entwurf wiederhergestellt', steer_fail_no_cached_agent: 'No agent cached for this session — try refreshing', steer_fail_agent_lacks_steer: 'This agent version does not support steer', steer_fail_session_not_found: 'Session not found — it may have expired', steer_fail_not_running: 'Agent is not currently running', steer_fail_stream_dead: 'The agent stream has ended', steer_fail_steer_error: 'Steer delivery failed — the agent may have finished', steer_fail_network_error: 'Network error — check your connection', steer_fail_unknown: 'Steer unavailable', steer_recovery_retry: 'Retry', steer_recovery_dismiss: 'Dismiss', busy_interrupt_confirm: 'Unterbrochen \u2014 neue Nachricht wird gesendet', settings_label_default_message_mode: 'Standard-Nachrichtenmodus', settings_desc_default_message_mode: 'Steuert, was passiert, wenn Sie w\u00e4hrend der Agentenaktivit\u00e4t eine Nachricht senden. Warteschlange wartet; Unterbrechen bricht ab und startet neu; Steer f\u00fcgt eine Korrektur ein ohne zu unterbrechen. Wenn Steer nicht verf\u00fcgbar ist, wird der Entwurf wiederhergestellt, damit Sie die n\u00e4chste Aktion w\u00e4hlen k\u00f6nnen.', settings_label_fade_text_effect: 'Text-Fade-Effekt', settings_desc_fade_text_effect: 'Blendet neu gestreamte Wörter während der Antwort des Assistenten sanft ein. Ähnlich wie OpenWebUI; für maximale Leistung standardmäßig deaktiviert.', settings_label_max_tokens: 'Maximale Ausgabetokens', settings_desc_max_tokens: 'Begrenzt die Länge neuer Streaming-Antworten. Leer lassen, um den Fallback-Wert des aktiven Profils zu verwenden.', settings_placeholder_max_tokens_none: 'Keine Überschreibung', settings_placeholder_max_tokens_fallback: 'Keine Überschreibung (Fallback: {0})', settings_default_message_mode_queue: 'In Warteschlange einreihen', settings_default_message_mode_interrupt: 'Aktuellen Durchgang unterbrechen', settings_default_message_mode_steer: 'Steer (Korrektur ohne Unterbrechung)', settings_label_busy_placeholder_hint: 'Show busy placeholder hint', settings_desc_busy_placeholder_hint: 'Shows the composer placeholder with the current busy action while the session is running and the draft is empty.', composer_placeholder_busy_queue: 'Enter = queue | /interrupt | /background | /steer', composer_placeholder_busy_interrupt: 'Enter = interrupt | /queue | /background | /steer', composer_placeholder_busy_steer: 'Enter = steer | /queue | /background | /interrupt', no_personalities: 'Keine Persönlichkeiten gefunden (füge sie in ~/.hermes/personalities/ hinzu)', available_personalities: 'Verfügbare Persönlichkeiten:', personality_switch_hint: '\n\nNutze `/personality ` zum Wechseln, oder `/personality none` zum Löschen.', personalities_load_failed: 'Fehler beim Laden der Persönlichkeiten', personality_cleared: 'Persönlichkeit gelöscht', personality_set: 'Persönlichkeit: ', failed_colon: 'Fehlgeschlagen: ', // ui.js no_workspace: 'Kein Workspace', terminal_open_title: 'Workspace-Terminal öffnen', terminal_no_workspace_title: 'Wähle einen Workspace, um das Terminal zu öffnen', terminal_title: 'Terminal', terminal_clear: 'Leeren', terminal_copy_output: 'Ausgabe kopieren', terminal_restart: 'Neu starten', terminal_collapse: 'Einklappen', terminal_expand: 'Ausklappen', terminal_close: 'Schließen', terminal_input_placeholder: 'Befehl ausführen...', terminal_start_failed: 'Terminal konnte nicht gestartet werden: ', terminal_input_failed: 'Terminal-Eingabe fehlgeschlagen: ', terminal_copy_failed: 'Kopieren fehlgeschlagen: ', terminal_error: 'Terminalfehler', terminal_remote_backend_unsupported: 'Das eingebettete Terminal wird nur für lokale Terminal-Backends unterstützt.', workspace_empty_no_path: 'Kein Workspace ausgewählt. Wähle einen Workspace unter Einstellungen \u2192 Workspace, um Dateien zu durchsuchen.', workspace_empty_dir: 'Dieser Workspace ist leer.', workspace_show_hidden_files: 'Versteckte Dateien anzeigen', workspace_show_hidden_files_desc: '.DS_Store, .git, node_modules und weitere versteckte / Systemdateien im Dateibaum anzeigen.', workspace_hidden_files_visible: 'versteckt sichtbar', workspace_hidden_files_visible_title: 'Versteckte Dateien sind sichtbar — Klicken für Optionen', workspace_options: 'Arbeitsbereich-Optionen', dialog_confirm_title: 'Aktion bestätigen', dialog_prompt_title: 'Wert eingeben', dialog_confirm_btn: 'Bestätigen', // workspace.js unsaved_confirm: 'Sie haben ungespeicherte Änderungen in der Vorschau. Verwerfen und fortfahren?', discard: 'Verwerfen', save: 'Speichern', edit: 'Bearbeiten', clear: 'Leeren', create: 'Erstellen', remove: 'Entfernen', save_title: 'Änderungen speichern', edit_title: 'Diese Datei bearbeiten', saved: 'Gespeichert', save_failed: 'Speichern fehlgeschlagen: ', image_load_failed: 'Bild konnte nicht geladen werden', file_open_failed: 'Datei konnte nicht geöffnet werden', downloading: (name) => `Lade ${name} herunter\u2026`, double_click_rename: 'Doppelklick zum Umbenennen', symlink_link_to: 'Symlink → {target}', external_link_open_confirm: 'This symlink points outside the workspace. Open it in a read-only external view for this browser session?', external_link_read_only: 'This external view is read-only. Create, rename, move, delete, upload, reveal, and editor actions stay disabled here.', external_link_grant_expired: 'This external view expired. Reopen the escape-target symlink to authorize it again.', session_rename_failed_no_row: 'Could not start rename — row not found.', renamed_to: 'Umbenannt in ', rename_failed: 'Umbenennen fehlgeschlagen: ', moved_to: 'Verschoben nach ', move_failed: 'Verschieben fehlgeschlagen: ', delete_title: 'Löschen', delete_confirm: (name) => `${name} löschen?`, delete_dir_confirm: (name) => `Ordner "${name}" und gesamten Inhalt löschen?`, rename_title: 'Umbenennen', rename_prompt: 'Neuer Name:', deleted: 'Gelöscht ', delete_failed: 'Löschen fehlgeschlagen: ', reveal_in_finder: 'Im Dateimanager anzeigen', reveal_failed: 'Anzeige fehlgeschlagen: ', copy_file_path: 'Dateipfad kopieren', open_in_vscode: 'In VS Code öffnen', open_in_vscode_failed: 'In VS Code öffnen fehlgeschlagen: ', download_folder: 'Download Folder', // TODO: translate path_copied: 'Dateipfad in die Zwischenablage kopiert', path_copy_failed: 'Pfad konnte nicht kopiert werden: ', session_rename: 'Unterhaltung umbenennen', session_rename_desc: 'Titel dieser Unterhaltung bearbeiten', session_title_regenerate: 'Titel neu generieren', session_title_regenerate_desc: 'Hermes bitten, einen neuen Titel aus der Unterhaltung zu generieren', session_title_regenerating: 'Titel wird neu generiert…', session_title_regenerated: (title) => `Titel neu generiert: ${title}`, session_title_regenerate_failed: 'Titel neu generieren fehlgeschlagen: ', session_copy_link: 'Unterhaltungslink kopieren', session_copy_link_desc: 'Direkten Link zu dieser Unterhaltung kopieren', session_link_copied: 'Unterhaltungslink in die Zwischenablage kopiert', session_link_copy_failed: 'Unterhaltungslink konnte nicht kopiert werden: ', new_file_prompt: 'Neuer Dateiname (z.B. notes.md):', new_file: 'Neue Datei', new_folder: 'Neuer Ordner', workspace_root: 'Arbeitsbereich-Root', new_file_prompt_title: 'Neuer Dateiname in {0}:', new_folder_prompt_title: 'Neuer Ordnername in {0}:', project_name_prompt: 'Projektname:', created: 'Erstellt ', create_failed: 'Erstellen fehlgeschlagen: ', new_folder_prompt: 'Neuer Ordnername:', folder_created: 'Ordner erstellt ', folder_create_failed: 'Ordner erstellen fehlgeschlagen: ', workspace_auto_create_folder: 'Ordner erstellen, falls nicht vorhanden', folder_add_as_space_btn: 'Als Bereich hinzufügen', folder_add_as_space_msg: 'Diesen Ordner als neuen Bereich zur Liste hinzufügen?', folder_add_as_space_title: 'Als Bereich hinzufügen?', remove_title: 'Entfernen', empty_dir: '(leer)', upload_failed: 'Upload fehlgeschlagen: ', upload_too_large: (maxMb, fileMb) => `Datei ist zu groß (${fileMb} MB). Die maximale Uploadgröße beträgt ${maxMb} MB.`, uploading: 'Wird hochgeladen…', uploaded: 'Hochgeladen', all_uploads_failed: (n) => `Alle ${n} Upload(s) fehlgeschlagen`, // settings panel settings_title: 'Einstellungen', settings_search_placeholder: 'Einstellungen durchsuchen…', settings_search_no_results: 'Keine Einstellungen gefunden.', settings_save_btn: 'Einstellungen speichern', settings_label_model: 'Standard-Modell', settings_desc_model: 'Wird für neue Chats verwendet. Bestehende Chats behalten ihr ausgewähltes Modell.', settings_main_advanced_button_aria: 'Advanced options for main model', settings_main_advanced_title: 'Main model options', settings_main_advanced_subtitle: 'Advanced config for the default chat model.', settings_main_advanced_saved: 'Main model options saved', settings_main_advanced_save_failed: 'Failed to save main model options', settings_main_advanced_service_tier: 'Service tier', settings_main_advanced_service_tier_desc: 'Optional request setting for OpenAI-family providers.', settings_main_advanced_service_tier_default: 'Default / off', settings_main_advanced_service_tier_priority: 'Priority (fast)', settings_label_auxiliary_models: 'Hilfsmodelle', settings_desc_auxiliary_models: 'Routing für Nebenaufgaben wie Vision, Komprimierung, Titelgenerierung usw. „Auto" verwendet das Haupt-Chat-Modell.', settings_btn_reset_aux_models: 'Alle auf auto zurücksetzen', settings_btn_apply_aux_models: 'Änderungen anwenden', settings_aux_provider_auto: 'Hauptmodell verwenden', settings_aux_model_auto: 'auto (Provider-Standard verwenden)', settings_aux_model_custom: 'Benutzerdefiniertes Modell…', settings_aux_model_custom_prompt: 'Modell-ID eingeben:', settings_aux_loading: 'Hilfsmodelle werden geladen…', settings_aux_load_failed: 'Hilfsmodelle-Einstellungen konnten nicht geladen werden. Stellen Sie sicher, dass die Agent-API verfügbar ist.', settings_aux_reset_confirm_title: 'Hilfsmodelle zurücksetzen?', settings_aux_reset_confirm_msg: 'Dies setzt alle Hilfsaufgaben auf auto (Hauptmodell verwenden).', settings_aux_reset_done: 'Hilfsmodelle auf auto zurückgesetzt', settings_aux_save_failed: 'Hilfsmodell konnte nicht gespeichert werden', settings_aux_saved: 'Hilfsmodelle aktualisiert', settings_aux_no_changes: 'Keine Änderungen anzuwenden', settings_aux_task_vision: 'Vision', settings_aux_task_vision_desc: 'Bild-/Screenshot-Analyse', settings_aux_task_compression: 'Komprimierung', settings_aux_task_compression_desc: 'Kontext-Zusammenfassung', settings_aux_task_web_extract: 'Web-Extraktion', settings_aux_task_web_extract_desc: 'Webseiten-Zusammenfassung', settings_aux_task_session_search: 'Sitzungssuche', settings_aux_task_session_search_desc: 'Erinnerung an frühere Gespräche', settings_aux_task_approval: 'Freigabe', settings_aux_task_approval_desc: 'intelligente Befehlsfreigabe', settings_aux_task_mcp: 'MCP', settings_aux_task_mcp_desc: 'MCP-Tool-Reasoning', settings_aux_task_title_generation: 'Titelgenerierung', settings_aux_task_title_generation_desc: 'Sitzungstitel', settings_aux_task_skills_hub: 'Skills Hub', settings_aux_task_skills_hub_desc: 'Skill-Suche/-Installation', settings_aux_task_curator: 'Kurator', settings_aux_task_curator_desc: 'Skill-Nutzungsprüfung', settings_aux_task_kanban_decomposer: 'Kanban-Zerleger', settings_aux_task_kanban_decomposer_desc: 'Aufgabenzerlegung', settings_aux_task_profile_describer: 'Profilbeschreiber', settings_aux_task_profile_describer_desc: 'Profil-Zusammenfassungen', settings_aux_task_triage_specifier: 'Triage-Spezifizierer', settings_aux_task_triage_specifier_desc: 'Issue-/Aufgaben-Triage-Spezifikationen', settings_aux_advanced_button_title: 'Erweiterte Optionen', settings_aux_advanced_button_aria: 'Erweiterte Optionen für {task}', settings_aux_advanced_title: '{task}-Optionen', settings_aux_advanced_subtitle: 'Erweiterte Konfiguration für diese Hilfsaufgabe.', settings_aux_advanced_save: 'Optionen speichern', settings_aux_advanced_base_url: 'Basis-URL', settings_aux_advanced_base_url_desc: 'Optionaler Provider-Endpunkt-Override.', settings_aux_advanced_timeout: 'Timeout in Sekunden', settings_aux_advanced_timeout_desc: 'Request-Timeout für diese Hilfsaufgabe. Leer nutzt den Hermes-Standard.', settings_aux_advanced_download_timeout: 'Download-Timeout in Sekunden', settings_aux_advanced_download_timeout_desc: 'Nur relevant für Aufgaben, die Medien/Inhalte herunterladen, z. B. Vision. Leer nutzt den Standard.', settings_aux_advanced_max_concurrency: 'Maximale Parallelität', settings_aux_advanced_max_concurrency_desc: 'Optionale Parallelitätsgrenze pro Aufgabe. Leer nutzt den Standard.', settings_aux_advanced_extra_body: 'Extra-Body JSON', settings_aux_advanced_extra_body_desc: 'Optionales JSON-Objekt, das in den Model-Request-Body gemischt wird.', settings_aux_advanced_api_key: 'API-Key-Override', settings_aux_advanced_api_key_set_hint: 'API-Key ist gesetzt. Leer lassen, um ihn zu behalten, oder Löschen aktivieren.', settings_aux_advanced_api_key_empty_hint: 'Leer lassen, um Provider-/Standard-Zugangsdaten zu verwenden.', settings_aux_advanced_api_key_clear: 'Vorhandenen API-Key-Override löschen', settings_aux_advanced_extra_body_invalid_json: 'Extra-Body muss gültiges JSON sein', settings_aux_advanced_extra_body_object_required: 'Extra-Body muss ein JSON-Objekt sein', settings_aux_advanced_saved: 'Hilfsoptionen gespeichert', settings_aux_advanced_save_failed: 'Hilfsoptionen konnten nicht gespeichert werden', settings_label_send_key: 'Sende-Taste', settings_label_theme: 'Theme', settings_label_skin: 'Skin', settings_label_font_size: 'Font size', font_size_small: 'Small', font_size_default: 'Default', font_size_large: 'Large', font_size_xlarge: 'Extra Large', settings_autosave_saving: 'Wird gespeichert…', settings_autosave_saved: 'Gespeichert', settings_autosave_failed: 'Speichern fehlgeschlagen', settings_autosave_retry: 'Wiederholen', settings_label_language: 'Sprache', settings_label_quota_chip: 'Anbieter-Kontingent-Chip im Editor anzeigen', settings_desc_quota_chip: 'Zeigt einen Hintergrund-Indikator des verbleibenden Kontingents (z. B. OpenRouter-Guthaben) in der Editor-Fußzeile an. Standardmäßig deaktiviert. Bei Aktivierung nur auf breiten Bildschirmen (≥1400px) sichtbar, damit der Editor auf Laptops und Standard-Desktops übersichtlich bleibt.', settings_label_conversation_outline: 'Konversationsgliederung anzeigen', settings_desc_conversation_outline: 'Zeigt eine Desktop-Sprungliste für Benutzerfragen in der aktuellen Konversation. Standardmäßig deaktiviert.', settings_label_hide_suggestions: 'Hide new-chat suggestions', settings_desc_hide_suggestions: 'Hide the three default suggestion buttons on the empty new-chat screen to avoid accidental taps.', settings_label_virtualize_transcript: 'Virtualize long transcripts', settings_desc_virtualize_transcript: "Render only the visible portion of very long chat transcripts (over 80 messages) for smoother scrolling. Turn this off if you see any rendering or scroll issues, or want the browser's Find (Ctrl+F) to match the whole conversation \u2014 the full transcript will render at once.", settings_label_token_usage: 'Token-Verbrauch anzeigen', settings_label_token_speed: 'Token-Geschwindigkeit (TPS) anzeigen', settings_desc_token_speed: 'Zeigt Token pro Sekunde in den Assistenten-Nachrichtenkopfzeilen während des Streamings und nach Abschluss einer Antwort an. Standardmäßig aus.', settings_label_sidebar_density: 'Seitenleistendichte', cmd_reasoning: 'Toggle thinking visibility (show/hide), set effort level, or check current status', settings_label_external_sessions: 'Externe Sitzungen anzeigen', settings_label_claude_code_sessions: 'Show Claude Code sessions', settings_label_cron_sessions: 'Show cron sessions', settings_label_webhook_sessions: 'Show webhook sessions', settings_label_previous_messaging_sessions: 'Vorherige Messaging-Sitzungen anzeigen', settings_label_sync_insights: 'Mit Insights synchronisieren', settings_label_check_updates: 'Nach Updates suchen', settings_label_ignore_agent_updates: 'Ignore Agent updates', settings_label_whats_new_summary: "Summarize What's New with AI", settings_label_bot_name: 'Standard-Assistentenname', settings_label_password: 'Zugangspasswort', settings_label_pinned_limit: 'Limit für angeheftete Unterhaltungen', settings_desc_pinned_limit: 'Maximale Anzahl aktiver Unterhaltungen, die in der Seitenleiste angeheftet werden können. Standard ist 3.', settings_label_dashboard_mode: 'Offizielles Hermes-Dashboard', settings_desc_dashboard_mode: 'Zeigt einen Link in der Navigationsleiste an, wenn das offizielle Hermes-Dashboard erreichbar ist. Öffentliche Reverse-Proxy-URLs werden nur als Browser-Links gespeichert und nie vom Server geprüft.', settings_dashboard_mode_auto: 'Automatisch erkennen', settings_dashboard_mode_always: 'Immer anzeigen', settings_dashboard_mode_never: 'Nie anzeigen', settings_dashboard_save: 'Dashboard-Link-Einstellungen speichern', settings_label_gateway_status: 'Gateway-Status', settings_desc_gateway_status: 'Status des Hermes-Gateways (Telegram, Discord, Slack, usw.)', gateway_not_configured: 'Gateway nicht konfiguriert', gateway_metadata_stale: 'Gateway-Metadaten veraltet', gateway_endpoint_unreachable: 'Gateway-Endpunkt nicht erreichbar', gateway_not_running: 'Gateway läuft nicht', gateway_running_label: 'Läuft', gateway_last_active: 'Zuletzt aktiv: ', gateway_session_count: (n) => `${n} ${n === 1 ? 'Sitzung' : 'Sitzungen'}`, gateway_load_failed: 'Gateway-Status konnte nicht geladen werden', settings_saved: 'Einstellungen gespeichert', settings_save_failed: 'Speichern fehlgeschlagen: ', settings_load_failed: 'Laden der Einstellungen fehlgeschlagen: ', settings_saved_pw: 'Einstellungen gespeichert — Passwortschutz aktiviert und dieser Browser bleibt angemeldet', settings_saved_pw_updated: 'Einstellungen gespeichert — Passwort aktualisiert', // login page login_title: 'Anmelden', login_subtitle: 'Geben Sie Ihr Passwort ein, um fortzufahren', login_placeholder: 'Passwort', login_btn: 'Anmelden', login_invalid_pw: 'Ungültiges Passwort', login_conn_failed: 'Verbindung fehlgeschlagen', dialog_confirm_title: 'Aktion bestätigen', dialog_prompt_title: 'Wert eingeben', dialog_confirm_btn: 'Bestätigen', discard: 'Verwerfen', clear: 'Leeren', create: 'Erstellen', remove: 'Entfernen', project_name_prompt: 'Projektname:', // Sidebar & Tabs tab_chat: 'Chat', tab_tasks: 'Aufgaben', tab_skills: 'Skills', tab_memory: 'Gedächtnis', tab_workspaces: 'Spaces', tab_profiles: 'Profile', tab_kanban: 'Kanban', kanban_board: 'Board', kanban_visible_tasks: '{0} visible tasks', kanban_search_tasks: 'Search tasks', kanban_all_assignees: 'All assignees', kanban_all_tenants: 'All tenants', kanban_include_archived: 'Include archived', kanban_no_matching_tasks: 'No matching tasks', kanban_no_data: 'No Kanban data', kanban_work_queue_hint: 'This is the Hermes Agent work queue. Create or triage a task, assign it, move it to Ready, then let the dispatcher claim it.', kanban_tasks_hidden_by_filters: 'Tasks hidden by filters', kanban_clear_filters: 'Clear filters', kanban_unavailable: 'Kanban unavailable', kanban_read_only: 'Read-only view', kanban_empty: 'Empty', kanban_task: 'Task', kanban_no_description: 'No description', kanban_refresh: 'Refresh', kanban_status_triage: 'Triage', kanban_status_todo: 'Todo', kanban_status_ready: 'Ready', kanban_status_running: 'Running', kanban_status_blocked: 'Blocked', kanban_status_done: 'Done', kanban_status_original_hint: 'Actual status: {0}. This dialog only supports Triage/Todo/Ready edits.', kanban_comments_count: 'Comments ({0})', kanban_events_count: 'Events ({0})', kanban_links: 'Links', kanban_parents: 'Parents', kanban_children: 'Children', kanban_runs_count: 'Runs ({0})', kanban_no_comments: 'No comments', kanban_no_events: 'No events', kanban_no_runs: 'No runs', kanban_title: 'Titel', kanban_description: 'Beschreibung', kanban_description_placeholder: 'Optional — was zu tun ist, Akzeptanzkriterien, Links', kanban_status: 'Status', kanban_assignee: 'Zugewiesen an', kanban_assignee_placeholder: 'Optional — leer lassen für beliebigen Worker', kanban_tenant: 'Mandant', kanban_tenant_placeholder: 'Optional — Projekt- oder Team-Slug', kanban_priority: 'Priorität', kanban_priority_hint: 'Höhere Zahlen laufen zuerst. Standard: 0.', kanban_title_required: 'Titel ist erforderlich.', kanban_edit_task: 'Aufgabe bearbeiten', kanban_run_dispatcher: 'Dispatcher ausführen', kanban_run_dispatcher_confirm: 'Dies beansprucht Ready-Aufgaben auf diesem Board und startet Worker-Subprozesse (einen pro Aufgabe, bis zu 8 pro Klick). Fortfahren?', kanban_assignee_profiles_label: 'Hermes-Profile', kanban_assignee_other_label: 'Andere (CLI-Bahnen / entfernte Profile)', kanban_assignee_unassigned: '— Nicht zugewiesen (läuft nicht automatisch) —', kanban_ready_needs_assignee: 'Du hast „Nicht zugewiesen“ + „Ready“ gewählt. Der Dispatcher überspringt diese Aufgabe. Erneut senden zum Bestätigen oder ein Profil wählen.', kanban_dispatch_preview_prefix: 'Vorschau:', kanban_dispatch_run_prefix: 'Gestartet:', kanban_dispatch_spawned: 'gestartet', kanban_dispatch_promoted: 'befördert', kanban_dispatch_reclaimed: 'zurückgenommen', kanban_dispatch_skipped_unassigned: 'übersprungen (kein Bearbeiter)', kanban_dispatch_skipped_nonspawnable: 'übersprungen (unbekanntes Profil)', kanban_dispatch_auto_blocked: 'auto-blockiert', kanban_dispatch_timed_out: 'Zeitüberschreitung', kanban_dispatch_crashed: 'abgestürzt', kanban_new_task: 'New task', kanban_view_lanes: 'Lanes by profile', kanban_view_consolidated: 'Consolidated view', kanban_view_lanes_saved: 'Kanban view: lanes by profile', kanban_view_consolidated_saved: 'Kanban view: consolidated', kanban_view_update_failed: 'Failed to update Kanban view: ', kanban_add_comment: 'Add comment', kanban_workspace_kind: 'Workspace kind', kanban_workspace_path: 'Workspace path', kanban_workspace_path_placeholder: 'Path to workspace', kanban_workspace_scratch: 'Scratch', kanban_workspace_worktree: 'Worktree', kanban_workspace_dir: 'Directory', kanban_workspace_path_required: 'Workspace path is required for non-scratch workspaces.', kanban_skills: 'Skills', kanban_skills_placeholder: 'Comma-separated skill names, e.g. python,git', kanban_max_runtime_seconds: 'Max runtime (seconds)', kanban_max_runtime_hint: 'Leave empty for unlimited.', kanban_max_runtime_invalid: 'Max runtime must be a whole number of seconds greater than 0.', kanban_parents_modal: 'Parent dependencies', kanban_parents_placeholder: 'Parent task ID', kanban_add_dependency: 'Add dependency', kanban_remove_dependency: 'Remove dependency', kanban_dependency_placeholder: 'Task ID to link', kanban_dependency_self: 'A task cannot depend on itself', kanban_only_mine: 'Only mine', kanban_bulk_action: 'Bulk action', kanban_nudge_dispatcher: 'Preview dispatcher', kanban_stats: 'Stats', kanban_worker_log: 'Worker log', kanban_block: 'Block', kanban_unblock: 'Unblock', kanban_back_to_board: 'Back to board', kanban_lanes_by_profile: 'Lanes by profile', kanban_new_board: 'New board…', kanban_rename_board: 'Rename current board…', kanban_archive_board: 'Archive current board…', kanban_archive_board_confirm: 'Archive board "{name}"? Tasks remain on disk and the board can be restored from kanban/boards/_archived/.', kanban_board_archived: 'Board archived', kanban_board_name: 'Name', kanban_board_slug: 'Slug (lowercase, hyphens)', kanban_board_description: 'Description (optional)', kanban_board_icon: 'Icon (emoji, optional)', kanban_board_color: 'Color (optional)', kanban_board_name_required: 'Name is required', kanban_board_slug_required: 'Slug is required', kanban_card_complete: 'complete', kanban_card_archive: 'archive', kanban_unassigned: 'unassigned', kanban_status_archived: 'Archived', tab_todos: 'Todos', tab_insights: 'Statistiken', tab_dashboard: 'Hermes-Dashboard', dashboard_loopback_warning: 'Das Dashboard ist auf dem Server nur per Loopback erreichbar. Öffne es direkt auf dem Server oder starte es mit --host 0.0.0.0 neu (unsicher).', tab_logs: 'Logs', tab_settings: 'Einstellungen', close_menu: 'Close menu', // TODO: translate logs_title: 'Logs', // TODO: translate logs_file: 'File', // TODO: translate logs_tail: 'Tail', // TODO: translate logs_auto_refresh: 'Auto-refresh (5s)', // TODO: translate logs_wrap: 'Wrap lines', // TODO: translate logs_copy_all: 'Copy all', // TODO: translate logs_empty: 'No log lines yet.', // TODO: translate logs_loading: 'Loading logs…', // TODO: translate logs_load_failed: 'Logs failed to load', // TODO: translate logs_status_idle: 'Choose a log file to view recent lines.', // TODO: translate logs_no_mtime: 'not written yet', // TODO: translate logs_truncated_hint: 'Showing the tail of a large log file; older bytes were skipped to keep memory bounded.', // TODO: translate logs_copied: 'Logs copied', // TODO: translate logs_severity: 'Schweregrad', logs_severity_all: 'Alle', logs_severity_errors: 'Fehler', logs_severity_warnings: 'Warnungen+', logs_filter_active: 'angezeigt (Filter aktiv)', new_conversation: 'Neuer Chat', filter_conversations: 'Chats filtern...', markdown_table_filter: 'Tabelle filtern', markdown_table_sort_column: 'Spalte sortieren', scheduled_jobs: 'Geplante Aufgaben', new_job: 'Neuer Job', loading: 'Lädt...', search_skills: 'Skills suchen...', new_skill: 'Neuer Skill', personal_memory: 'Persönliches Gedächtnis', current_task_list: 'Aktuelle Aufgabenliste', workspace_desc: 'Workspaces hinzufügen und wechseln.', session_meta_messages: (n) => `${n} Nachr.`, session_meta_children: (n) => `${n} ${n === 1 ? 'Subagent' : 'Subagents'}`, session_meta_segments: (n) => `${n} Segment${n === 1 ? '' : 'e'}`, session_lineage_toggle_hint: '{0} — frühere Kontext-Turns sind hier eingeklappt. Klicken, um sie ein- oder auszublenden.', session_lineage_static_hint: '{0} — frühere Kontext-Turns sind hier eingeklappt.', session_child_toggle_hint: '{0} — aus dieser Sitzung erzeugte Kind-Unterhaltungen. Klicken, um sie ein- oder auszublenden.', session_readonly_title_hint: 'Schreibgeschützte importierte Sitzung — {0}', session_lineage_segment_untitled: 'Unbenanntes Segment', session_lineage_segment_open: 'Liniensegment öffnen', new_profile: 'Neues Profil', transcript: 'Protokoll', download_transcript: 'Als Markdown herunterladen', import: 'Importieren', export_session_json: 'JSON', export_session_json_tooltip: 'Gesamte Sitzung als JSON exportieren', export_session_html: 'HTML', export_session_html_tooltip: 'Als eigenständige HTML-Seite exportieren', import_session_json_tooltip: 'Sitzung aus JSON importieren', clear_conversation_btn_tooltip: 'Alle Nachrichten in dieser Konversation löschen', // Settings detail settings_label_rtl: 'Chat-Layout von rechts nach links', settings_desc_rtl: 'Kehrt die Ausrichtung von Chat-Nachrichten und Eingabefeld für Sprachen wie Arabisch oder Hebräisch um. Betrifft nur den Chat-Bereich — Seitenleiste und andere Panels bleiben von links nach rechts.', settings_label_sound: 'Benachrichtigungston', settings_desc_sound: 'Spielt einen Ton ab, wenn der Assistent eine Antwort beendet.', settings_label_notifications: 'Browser-Benachrichtigungen', settings_desc_notifications: 'Zeigt eine Systembenachrichtigung an, wenn eine Antwort fertiggestellt wird, während der Tab im Hintergrund ist.', notifications_enable_btn: 'Enable notifications', notifications_test_btn: 'Send test', notifications_permission_status: (status) => `Permission: ${status}`, notifications_enabled_toast: 'Notifications enabled.', notifications_denied: 'Notifications are blocked in this browser. Enable them in browser settings.', notifications_unsupported: 'Notifications are not supported in this browser.', settings_desc_token_usage: 'Zeigt die Anzahl der Input/Output-Token unter jeder Antwort des Assistenten an. Auch umschaltbar mit /usage.', settings_sidebar_density_compact: 'Kompakt', settings_sidebar_density_detailed: 'Detailliert', settings_desc_sidebar_density: 'Steuert, wie viele Metadaten die Sitzungsliste in der linken Seitenleiste anzeigt.', settings_label_auto_title_refresh: 'Adaptive Titelaktualisierung', settings_auto_title_refresh_off: 'Aus', settings_auto_title_refresh_5: 'Alle 5 Antworten', settings_auto_title_refresh_10: 'Alle 10 Antworten', settings_auto_title_refresh_20: 'Alle 20 Antworten', settings_desc_auto_title_refresh: 'Generiert den Sitzungstitel automatisch anhand des letzten Austauschs neu und hält ihn so aktuell, während sich das Gespräch entwickelt. Erfordert ein konfiguriertes LLM-Titelgenerierungsmodell.', settings_desc_external_sessions: 'Zeigt Gespräche von CLI, Telegram, Discord, Slack und anderen Kanälen in der Sitzungsliste an. Klicken zum Importieren und Fortsetzen.', settings_desc_claude_code_sessions: 'Show Claude Code imported sessions in the sidebar, or hide them while leaving other external sessions visible.', settings_desc_cron_sessions: 'Surface cron job output as conversations in the sidebar. Only active when non-WebUI sessions are enabled. Defaults off; high-frequency jobs can flood the sidebar.', settings_desc_webhook_sessions: 'Surface webhook runs as conversations in the sidebar. Only active when non-WebUI sessions are enabled. Defaults off; high-volume routes can flood the sidebar.', settings_desc_previous_messaging_sessions: 'Zeigt ältere Discord-, Telegram-, Slack- und Weixin-Sitzungen, die durch Reset oder Compression ersetzt wurden.', settings_desc_sync_insights: 'Spiegelt den WebUI-Token-Verbrauch in die state.db, sodass hermes /insights Browser-Sitzungsdaten enthält. Standardmäßig aus.', settings_desc_check_updates: 'Zeigt ein Banner an, wenn neuere Versionen der WebUI oder des Agenten verfügbar sind. Führt regelmäßig einen Git-Fetch im Hintergrund aus.', settings_desc_ignore_agent_updates: 'Keep WebUI update checks on, but hide Agent update notices and skip Agent update fetches.', settings_desc_whats_new_summary: "Changes the What's New action from opening the raw diff first to generating a short, human-readable summary. The regular diff comparison stays available after the summary.", settings_desc_bot_name: 'Wird nur für das Standardprofil verwendet. Andere Profile verwenden ihre eigenen Namen.', settings_desc_password: 'Geben Sie ein neues Passwort ein, um es zu setzen oder zu ändern. Leer lassen, um die aktuelle Einstellung beizubehalten.', password_placeholder: 'Neues Passwort eingeben…', password_env_var_locked: 'Die Umgebungsvariable HERMES_WEBUI_PASSWORD ist gesetzt und hat Vorrang. Entferne sie und starte den Server neu, um das Passwort hier zu verwalten.', password_env_var_locked_placeholder: 'Gesperrt: HERMES_WEBUI_PASSWORD-Umgebungsvariable ist gesetzt', disable_auth: 'Authentifizierung deaktivieren', sign_out: 'Abmelden', settings_label_shutdown: 'Hermes WebUI-Server stoppen', settings_desc_shutdown_before_cmd: 'Beendet den lokalen WebUI-Server kontrolliert. Praktisch, wenn du ihn über ', settings_desc_shutdown_between_cmds: ' gestartet hast und ihn stoppen möchtest, ohne in ein Terminal zu wechseln. Um die WebUI wieder erreichbar zu machen, musst du den Server neu starten (', settings_desc_shutdown_after_cmd: ' oder die native App).', settings_btn_shutdown: 'Server stoppen', settings_shutdown_confirm_title: 'Hermes WebUI stoppen', settings_shutdown_confirm_message: 'Hermes WebUI-Server stoppen?', settings_shutdown_confirm_btn: 'Stoppen', settings_shutdown_stopped_message: 'Server gestoppt. Du kannst diesen Tab schließen.', // 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_model: 'Model', providers_status_not_configured_label: 'Not configured', providers_oauth_hint: 'Authenticated via OAuth. No API key needed.', providers_oauth_config_yaml_hint: 'Token configured via config.yaml. To update, edit the providers section in your config.yaml or run hermes auth.', providers_oauth_not_configured_hint: 'Not authenticated. Run hermes auth in the terminal to configure this provider.', providers_save: 'Save', providers_refresh_models: 'Refresh models', providers_refreshing: 'Refreshing…', providers_models_refreshed: 'Models refreshed', 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…', provider_quota_title: 'Kontingent des aktiven Anbieters', provider_quota_active_provider: 'Aktiver Anbieter', provider_quota_last_checked_after_refresh: 'Zuletzt nach Aktualisierung geprüft', provider_quota_last_checked: 'Zuletzt geprüft {0}', provider_quota_refresh_usage: 'Nutzung aktualisieren', provider_quota_refreshing: 'Wird aktualisiert...', provider_quota_refresh_title: 'Nutzungslimits des Anbieters jetzt aktualisieren', provider_quota_refresh_succeeded: 'Anbieternutzung aktualisiert', provider_quota_refresh_failed: 'Aktualisierung der Anbieternutzung fehlgeschlagen', provider_quota_session_limit: '5-Stunden-Limit', provider_quota_weekly_limit: 'Wöchentliches Limit', provider_quota_window_fallback: 'Fenster', provider_quota_metric_remaining: 'Verbleibend', provider_quota_metric_used: 'Verwendet', provider_quota_metric_limit: 'Limit', provider_quota_status_available: 'verfügbar', provider_quota_status_exhausted: 'ausgeschöpft', provider_quota_status_unavailable: 'nicht verfügbar', provider_quota_status_failed: 'fehlgeschlagen', provider_quota_status_checked: 'geprüft', provider_quota_status_no_key: 'kein Schlüssel', provider_quota_status_invalid_key: 'ungültiger Schlüssel', provider_quota_status_unsupported: 'nicht unterstützt', provider_quota_used_meta: '{0} verwendet', provider_quota_resets_meta: 'Zurücksetzung {0}', provider_quota_credential_pool: 'Anmeldedatenpool', provider_quota_credential_label: 'Anmeldedaten {0}', provider_quota_pool_plans: 'Pläne: {0}', provider_quota_pool_no_windows: 'Keine Kontolimit-Fenster gemeldet.', provider_quota_account_limits_loaded: 'Kontolimits geladen.', provider_quota_unavailable: 'Kontingentstatus nicht verfügbar', provider_quota_retry_after: 'Nach {0} erneut versuchen', provider_quota_pool_summary_available: '{0}/{1} verfügbar', provider_quota_pool_summary_exhausted: '{0} ausgeschöpft', provider_quota_pool_summary_failed: '{0} fehlgeschlagen', provider_quota_pool_summary_checked: '{0} geprüft', provider_cost_budget_label: 'Monthly budget', provider_cost_budget_placeholder: 'e.g. 50.00', provider_cost_budget_set: 'Set', provider_cost_budget_clear: 'Clear', provider_cost_budget_pct: '{0}% of ${1} budget (monthly pace)', provider_cost_budget_save_failed: 'Failed to save budget', cancel: 'Abbrechen', create_job: 'Job erstellen', save_skill: 'Skill speichern', editing: 'Bearbeitung', // Empty state empty_title: 'Wie kann ich helfen?', empty_subtitle: 'Frage mich alles, führe Befehle aus, erkunde Dateien oder verwalte deine Aufgaben.', suggest_files: 'Welche Dateien sind in diesem Workspace?', suggest_schedule: 'Was steht heute auf meinem Plan?', suggest_plan: 'Hilf mir, ein kleines Projekt zu planen.', onboarding_password_will_enable: 'Wird aktiviert', onboarding_password_will_replace: 'Wird ersetzt', onboarding_password_keep_existing: 'Aktuelles Passwort beibehalten', onboarding_password_remains_disabled: 'Bleibt deaktiviert', profile_delete_confirm_message: 'Alle Sitzungen, Konfigurationen, Fähigkeiten und Erinnerungen dieses Profils werden dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.', // skill form skill_name: 'Name', skill_category: 'Kategorie', skill_category_placeholder: 'Optional, z. B. devops', skill_content: 'SKILL.md-Inhalt', skill_content_placeholder: 'YAML-Frontmatter + Markdown-Text', skill_rename_not_supported: 'Umbenennen einer Fähigkeit wird nicht unterstützt. Erstelle eine neue und lösche die alte.', skill_metadata: 'Metadaten', // cron form cron_name_label: 'Name', cron_duplicate: 'Duplizieren', cron_duplicated: 'Aufgabe dupliziert (pausiert)', cron_name_placeholder: 'Optional', cron_schedule_label: 'Zeitplan', cron_schedule_preset_label: 'Voreinstellung', cron_schedule_preset_hourly: 'Stündlich', cron_schedule_preset_daily: 'Täglich', cron_schedule_preset_weekdays: 'Wochentage', cron_schedule_preset_weekly: 'Wöchentlich', cron_schedule_preset_monthly: 'Monatlich', cron_schedule_preset_custom: 'Benutzerdefiniert', cron_schedule_hint: "Für wiederkehrende Aufgaben 'every 1h' oder einen Cron-Ausdruck verwenden. Reine Dauern wie '30m' laufen einmal.", cron_schedule_once_warning: "Dauerangaben wie '30m' laufen einmal und werden nach der Ausführung entfernt. Verwende 'every 30m' für eine wiederkehrende Aufgabe.", cron_prompt_label: 'Prompt', cron_deliver_label: 'Ausgabe senden an', cron_deliver_local: 'Lokal (nur speichern)', cron_deliver_custom: 'Benutzerdefiniertes Ziel', cron_profile_label: 'Profil', cron_profile_server_default: 'Serverstandard', cron_profile_server_default_hint: 'Verwendet zur Laufzeit das Standardprofil des WebUI-Servers. Bestehende Jobs ohne Profil behalten dieses Legacy-Verhalten.', cron_toast_notifications_label: 'Abschluss-Toasts', cron_toast_notifications_hint: 'Zeigt einen Toast, wenn dieser Cron fertig ist. Aufgaben-Badge und Marker für neue Läufe werden trotzdem aktualisiert.', cron_toast_notifications_enabled: 'Aktiviert', cron_toast_notifications_disabled: 'Deaktiviert', cron_skills_label: 'Fähigkeiten', cron_skills_placeholder: 'Fähigkeiten hinzufügen (optional)…', cron_skills_edit_hint: 'Die Fähigkeitenliste kann nach der Erstellung nicht bearbeitet werden.', cron_status_running: 'läuft\u2026', // workspace form workspace_name_label: 'Name', workspace_name_placeholder: 'Optionaler Anzeigename', workspace_path_label: 'Pfad', workspace_path_required: 'Pfad ist erforderlich', workspace_path_readonly: 'Pfad kann nicht geändert werden. Nur umbenennen.', workspace_new_title: 'Neuer Bereich', // profile form 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_hide_external: 'Aus Liste ausblenden', session_archive_desc: 'Hide this conversation until archived is shown', session_archive_worktree_desc: 'Diese Konversation ausblenden; den Worktree auf der Festplatte behalten', session_hide_external_desc: 'Diese importierte Sitzung aus der WebUI-Liste ausblenden, ohne den ursprünglichen Verlauf zu löschen.', session_archive_failed: 'Archive failed: ', session_archived: 'Session archived', session_archived_worktree: 'Sitzung archiviert. Der Worktree bleibt auf der Festplatte.', session_hidden: 'Sitzung aus Liste ausgeblendet', session_delete: 'Delete conversation', session_delete_desc: 'Permanently remove this conversation', session_delete_confirm: 'Diese Konversation löschen?', session_delete_worktree_desc: 'Nur die WebUI-Konversation löschen; den Worktree auf der Festplatte behalten', session_delete_worktree_confirm: (path) => `Diese Konversation löschen? Der Worktree unter ${path} bleibt auf der Festplatte.`, session_deleted: 'Konversation gelöscht', session_deleted_worktree: 'Konversation gelöscht. Der Worktree bleibt auf der Festplatte.', session_worktree_remove: 'Worktree entfernen', session_worktree_remove_desc: (path) => `Git-Worktree unter ${path} von der Festplatte löschen`, session_worktree_remove_confirm: (path) => `Git-Worktree von der Festplatte entfernen?\n\nPfad: ${path}\n\nDas gesamte Worktree-Verzeichnis wird gelöscht. Sitzungsdaten bleiben in WebUI.`, session_worktree_remove_not_exists: (path) => `Der Worktree unter ${path} existiert nicht mehr auf der Festplatte.`, session_worktree_remove_confirm_label: 'Entfernen', session_worktree_removed: 'Worktree entfernt.', session_worktree_remove_failed: 'Fehler beim Entfernen des Worktree: ', session_worktree_remove_status_failed: 'Fehler beim Lesen des Worktree-Status: ', session_worktree_remove_locked_by_stream: 'Entfernen nicht möglich — eine aktive Streaming-Sitzung verwendet diesen Worktree.', session_worktree_remove_locked_by_terminal: 'Entfernen nicht möglich — eine aktive Terminal-Sitzung verwendet diesen Worktree.', session_worktree_remove_unsafe_blocked: 'Löse lokale Änderungen oder nicht gepushte Commits, bevor du diesen Worktree entfernst.', session_worktree_remove_dirty_warning: 'WARNUNG: Dieser Worktree hat nicht festgeschriebene Änderungen, die verloren gehen.', session_worktree_remove_untracked_warning: (count) => `${count} nicht verfolgte Datei(en) werden dauerhaft gelöscht.`, session_worktree_remove_ahead_warning: (ahead) => `${ahead} nicht gepushte Commit(s) gehen verloren.`, session_duplicate: 'Duplicate conversation', session_duplicate_desc: 'Create a copy with the same workspace and model', session_export_html: 'Export as HTML', session_export_html_desc: 'Download this conversation as a self-contained HTML file', session_duplicate_failed: 'Duplicate failed: ', session_stop_response: 'Stop response', session_stop_response_desc: 'Cancel the running response for this conversation', 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', session_select_mode: 'Auswählen', session_select_mode_desc: 'Konversationen für Massenverwaltung auswählen', session_select_all: 'Alle auswählen', session_deselect_all: 'Auswahl aufheben', session_selected_count: '{0} ausgewählt', session_batch_archive: 'Archivieren', session_batch_delete: 'Löschen', session_batch_move: 'Zum Projekt verschieben', session_batch_delete_confirm: '{0} Konversationen löschen?', session_batch_archive_confirm: '{0} Konversationen archivieren?', session_batch_delete_worktree_confirm: '{0} Konversationen löschen? {1} worktree-gestützte Konversation(en) behalten ihre Worktree-Verzeichnisse auf der Festplatte.', session_batch_archive_worktree_confirm: '{0} Konversationen archivieren? {1} worktree-gestützte Konversation(en) behalten ihre Worktree-Verzeichnisse auf der Festplatte.', session_no_selection: 'Keine Konversationen ausgewählt', 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_check_now: 'Jetzt prüfen', settings_checking: 'Prüfung\u2026', settings_up_to_date: 'Aktuell \u2713', settings_updates_available: '{count} Update(s) verfügbar', settings_updates_disabled: 'Update-Prüfung deaktiviert', settings_update_check_failed: 'Update-Prüfung fehlgeschlagen', settings_update_no_git: 'Updates können nicht geprüft werden (kein Git-Checkout)', settings_label_workspace_panel_open: 'Arbeitsbereich-Panel standardmäßig öffnen', settings_desc_workspace_panel_open: 'Wenn aktiviert, wird der Datei-Browser bei jeder neuen Sitzung automatisch geöffnet. Er kann jederzeit manuell geschlossen werden.', settings_label_workspace_todos_tab: 'Todos-Tab im Arbeitsbereich-Panel anzeigen', settings_desc_workspace_todos_tab: 'Wenn aktiviert, erscheint ein Todos-Tab im Arbeitsbereich-Panel. Das Todos-Panel in der Seitenleiste bleibt weiterhin verfügbar.', settings_label_session_jump_buttons: 'Sitzungs-Sprungtasten anzeigen', settings_desc_session_jump_buttons: 'Zeigt beim Lesen langer Sitzungsverläufe schwebende Anfang- und Ende-Tasten an.', settings_label_terminal_auto_expand: 'Terminal bei Ausgabe automatisch aufklappen', settings_desc_terminal_auto_expand: 'Das eingeklappte Terminal-Panel automatisch aufklappen, wenn ein laufender Befehl neue Ausgaben erzeugt.', settings_label_session_endless_scroll: 'Ältere Nachrichten beim Hochscrollen laden', settings_desc_session_endless_scroll: 'Wenn aktiviert, werden ältere Nachrichten beim Hochscrollen automatisch geladen. Wenn deaktiviert, nutzt du den Button für ältere Nachrichten.', settings_label_auto_scroll_follow: 'Neuen Inhalten automatisch folgen', settings_desc_auto_scroll_follow: 'Wenn aktiviert, scrollt die Ansicht nach unten, während neue Tokens eintreffen. Wenn deaktiviert, steuerst du die Scrollposition selbst.', settings_label_render_user_markdown: 'Render markdown in user messages', settings_label_show_titlebar_profile: 'Show profile switcher in titlebar', // TODO: translate settings_desc_show_titlebar_profile: 'When enabled, a profile switcher button appears in the top-left app titlebar so you can change profiles from any tab. Off by default; the composer footer always has a profile switcher regardless of this setting.', // TODO: translate settings_desc_render_user_markdown: 'When enabled, bold, italic, links, and other markdown in your own messages are rendered. Off by default; fenced code blocks and math always render regardless of this setting.', settings_label_large_text_paste_as_attachment: 'Attach large pasted text as file', settings_desc_large_text_paste_as_attachment: 'When enabled, long pasted text becomes a .md attachment instead of filling the composer.', settings_label_project_quick_create: 'Show per-project new-conversation buttons', settings_desc_project_quick_create: 'When enabled, each project chip in the sidebar gets a + button to start a conversation in that project.', settings_label_structured_code: 'JSON/YAML code blocks', settings_option_structured_code_auto: 'Auto: Tree for long blocks', settings_option_structured_code_on: 'Tree by default', settings_option_structured_code_off: 'Raw by default', settings_label_structured_code_auto_lines: 'Auto threshold lines', settings_desc_structured_code: 'When Auto is selected, JSON/YAML blocks with at least this many lines open in Tree view. Tree always opens the structured viewer; Raw keeps the syntax-highlighted text. You can still switch Tree/Raw on each block.', settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_chat_activity_display_mode: 'Activity display', settings_desc_chat_activity_display_mode: 'Compact Worklog groups supporting activity into a quiet summary. Transparent Stream keeps each thinking/tool event as its own chronological expandable row.', first_token_time: 'Time to first token', processed_elapsed: _i18nProcessedElapsedEn, worklog_thinking: 'Thinking', tool_target_skill_suffix: 'skill', tool_action_label: _i18nToolActionLabelEn, tool_worklog_summary: _i18nToolWorklogSummaryEn, tool_summary_join: _i18nToolSummaryJoinEn, done: 'Done', settings_option_compact_worklog: 'Compact Worklog', settings_option_transparent_stream: 'Transparent Stream', settings_label_tab_visibility: 'Seitenleiste-Tabs', settings_desc_tab_visibility: 'Wähle, welche Tabs in der Seitenleiste und im Rail angezeigt werden. Ziehe die Chips, um die Reihenfolge zu ändern. Chat und Einstellungen sind immer sichtbar.', settings_label_composer_controls: 'Chat footer controls', settings_desc_composer_controls: 'Toggle which controls are shown in the chat footer. Drag chips to reorder each footer group.', settings_label_composer_situational_controls: 'Situational footer controls', settings_desc_composer_situational_controls: 'These controls do not always appear, depending on viewport, mode, or runtime state. You can still toggle them off if needed.', composer_control_attach: 'Attach', composer_control_saved_prompts: 'Saved prompts', composer_control_mic: 'Mic', composer_control_profile: 'Profile', composer_control_workspace: 'Workspace', composer_control_model: 'Model', composer_control_reasoning: 'Reasoning', composer_control_context: 'Context', composer_control_voice_mode: 'Voice mode', composer_control_yolo: 'YOLO', composer_control_bg_badge: 'Background badge', composer_control_mobile_config: 'Mobile config', composer_control_quota_chip: 'Quota chip', composer_control_toolsets: 'Toolsets', composer_control_status: 'Status', workspace_drag_hint: 'Ziehen zum Neuordnen', workspace_reorder_failed: 'Neuordnen fehlgeschlagen', open_in_browser: 'Im Browser öffnen', settings_section_system_title: 'System', settings_tab_appearance: 'Appearance', settings_tab_conversation: 'Conversation', settings_tab_preferences: 'Preferences', settings_tab_plugins: 'Plugins', settings_tab_extensions: 'Extensions', settings_extensions_gallery_tab: 'Gallery', settings_extensions_installed_tab: 'Installed', settings_extensions_diagnostics_tab: 'Diagnostics', settings_extensions_gallery_loading: 'Loading gallery…', settings_extensions_gallery_empty: 'No extensions found in the registry.', settings_extensions_gallery_error: 'Failed to load gallery.', ext_gallery_install: 'Install', ext_gallery_installing: 'Installing…', ext_gallery_installed: 'Installed', ext_gallery_uninstall: 'Uninstall', ext_gallery_uninstalling: 'Uninstalling…', ext_gallery_restart_required: 'Restart required', ext_gallery_permissions_show: 'Permissions', ext_gallery_permissions_hide: 'Hide permissions', ext_gallery_permissions_empty: 'Keine zusätzlichen Berechtigungen deklariert.', ext_gallery_version: 'Version', ext_gallery_author: 'Author', ext_gallery_capabilities: 'Capabilities', ext_gallery_next_step: 'Nächster Schritt', ext_gallery_after_install: 'Nach der Installation', ext_gallery_local_component_required: 'Diese Erweiterung hat eine lokale Komponente. Starte nach der Installation die erforderliche lokale App oder den Sidecar.', ext_gallery_local_app_label: 'Lokale App', ext_gallery_required_suffix: '{0} erforderlich', ext_gallery_sidecar_required: 'Sidecar erforderlich', ext_gallery_native_host_required: 'Nativer Host erforderlich', ext_gallery_open_setup_guide: 'Einrichtungsanleitung öffnen', ext_gallery_install_restart_required: 'Erweiterung installiert. Neustart zum Anwenden erforderlich.', ext_gallery_install_followup: 'Erweiterung installiert. Die nächsten Schritte stehen auf der Karte.', ext_gallery_install_ok: 'Extension installed successfully.', ext_gallery_uninstall_ok: 'Extension uninstalled.', settings_plugins_title: 'Plugins', // TODO: translate plugins_enable_toggle: 'Aktivieren', settings_plugins_meta: 'View installed Hermes plugins and the lifecycle hooks they register. This panel is read-only.', // TODO: translate settings_plugins_empty: 'No Hermes plugins are currently visible. Install or enable plugins from the Hermes CLI/config to see them here.', // TODO: translate plugins_unnamed: 'Unnamed plugin', // TODO: translate plugins_no_description: 'No description provided.', // TODO: translate plugins_no_hooks: 'No registered lifecycle hooks', // TODO: translate plugins_registered_hooks: 'Registered hooks', // TODO: translate plugins_enabled: 'Enabled', // TODO: translate plugins_disabled: 'Disabled', // TODO: translate plugins_active_provider: 'Active (provider)', // TODO: translate plugins_provider_no_hooks: 'Provider plugin — no agent-visibility hooks', // TODO: translate plugins_load_failed: 'Failed to load plugins: ', // TODO: translate settings_tab_system: 'System', settings_tab_help: 'Help', settings_help_meta: 'Resources and support for Hermes WebUI.', settings_help_docs_label: 'Documentation', settings_help_docs_desc: 'Guides, configuration reference, and the full Hermes WebUI README.', settings_help_docs_link: 'Open Documentation', settings_help_issue_label: 'Having an issue?', settings_help_issue_desc: 'Search existing reports or open a new one on GitHub.', settings_help_issue_link: 'Open GitHub Issues', status_updated: 'Updated', status_ephemeral: 'Ephemeral snapshot — not saved to transcript history.', status_no_tokens: 'No token data', status_profile: 'Profile', status_hermes_home: 'Hermes home', status_started: 'Started', status_tokens: 'Tokens', status_unknown: 'Unknown', cmd_yolo: 'YOLO-Modus umschalten', yolo_no_session: 'Keine aktive Sitzung', cmd_branch:'Fork this conversation into a new session', cmd_branch_usage:'/branch [name] — fork conversation (optionally with a name)', branch_forked:'Forked into new session', branch_failed:'Fork failed: ', fork_from_here:'Fork from here', forked_from:'Forked from', yolo_enabled: '⚡ YOLO-Modus AN — Genehmigungen übersprungen', yolo_disabled: 'YOLO-Modus AUS', yolo_pill_label: 'YOLO', yolo_pill_title_active: 'YOLO-Modus aktiv — Klicken zum Deaktivieren', approval_skip_all: '⚡ Alle in dieser Sitzung überspringen', approval_skip_all_title: 'Alle Genehmigungsanfragen in dieser Sitzung überspringen', // composer action tooltips composer_send: 'Nachricht senden', composer_queue: 'Nachricht einreihen', composer_interrupt: 'Unterbrechen und senden', composer_steer: 'Antwort steuern', composer_stop: 'Generierung stoppen', composer_disabled_clarify: 'Auf die Klärungsanfrage antworten', composer_disabled_compression: 'Warte auf Abschluss der Komprimierung', composer_compression_will_queue: 'Type a message — it will queue and send after compression', composer_disabled_empty: 'Nachricht eingeben zum Senden', composer_mobile_workspace: 'Arbeitsbereich', composer_mobile_model: 'Modell', composer_mobile_quota: 'Kontingent', composer_mobile_reasoning: 'Reasoning', composer_mobile_context: 'Kontext', model_custom_label: 'Benutzerdefinierte Modell-ID', model_custom_placeholder: 'z.B. openai/gpt-5.4', model_show_all_models: 'Alle {0} Modelle anzeigen', model_search_placeholder: 'Modelle suchen…', model_search_no_results: 'Keine Modelle gefunden', model_group_configured: 'Konfiguriert', ws_search_placeholder: 'Arbeitsbereiche suchen…', ws_no_results: 'Keine Arbeitsbereiche gefunden', workspace_new_worktree_conversation: 'Neue Unterhaltung in Worktree', workspace_new_worktree_conversation_meta: 'Erstellt einen isolierten git worktree für diesen Arbeitsbereich.', workspace_worktree_created: 'Worktree-Unterhaltung erstellt', workspace_worktree_failed: 'Worktree-Erstellung fehlgeschlagen: ', session_worktree_badge: 'Worktree', session_toolsets: 'Session Toolsets', // TODO: translate session_toolsets_desc: 'Use active profile defaults or choose a custom toolset list for this session', // TODO: translate session_toolsets_global: 'Active profile defaults', // TODO: translate session_toolsets_profile_defaults: 'Active profile defaults', // TODO: translate session_toolsets_custom: 'Custom override', // TODO: translate session_toolsets_use_profile_defaults: 'Use active profile defaults', // TODO: translate session_toolsets_configured_servers: 'Configured MCP servers', // TODO: translate session_toolsets_loading_servers: 'Loading configured servers...', // TODO: translate session_toolsets_no_configured_servers: 'No configured MCP servers', // TODO: translate session_toolsets_placeholder: 'tool1, tool2, \u2026', // TODO: translate session_toolsets_apply: 'Apply', // TODO: translate session_toolsets_clear: 'Use defaults', // TODO: translate session_toolsets_applied: 'Toolsets updated', // TODO: translate session_toolsets_cleared: 'Using active profile defaults', // TODO: translate session_toolsets_failed: 'Failed to update toolsets: ', // TODO: translate session_time_unknown: 'Unbekannt', session_time_minutes_ago: (n) => `Vor ${n} Minuten`, session_time_hours_ago: (n) => `Vor ${n} Stunden`, session_time_days_ago: (n) => `Vor ${n} Tagen`, session_time_last_week: 'Letzte Woche', session_time_bucket_today: 'Heute', session_time_bucket_yesterday: 'Gestern', session_time_bucket_this_week: 'Diese Woche', session_time_bucket_last_week: 'Letzte Woche', session_time_bucket_older: 'Älter', onboarding_badge: 'Ersteinrichtung', onboarding_title: 'Willkommen bei Hermes', onboarding_lead: 'Lassen Sie uns Ihren Agenten einrichten.', onboarding_back: 'Zurück', onboarding_continue: 'Weiter', onboarding_skip: 'Überspringen', onboarding_skipped: 'Einrichtung übersprungen', onboarding_open: 'Einrichtung öffnen', onboarding_step_system_title: 'Agent-Status', onboarding_step_system_desc: 'Hermes Agent muss installiert und erreichbar sein.', onboarding_step_setup_title: 'Einrichtung', onboarding_step_setup_desc: 'Konfigurieren Sie einen Anbieter und ein Modell.', onboarding_step_workspace_title: 'Arbeitsbereich', onboarding_step_workspace_desc: 'Wählen Sie einen Arbeitsbereich für Ihre Dateien.', onboarding_step_password_title: 'Passwort (optional)', onboarding_step_password_desc: 'Sichern Sie den Zugriff mit einem Passwort.', onboarding_step_finish_title: 'Fertig!', onboarding_step_finish_desc: 'Ihr Agent ist bereit.', onboarding_notice_system_ready: 'Agent ist bereit und erreichbar.', onboarding_notice_system_unavailable: 'Agent nicht erreichbar. Bitte starten Sie Hermes Agent.', onboarding_check_agent: 'Agent-Verbindung', onboarding_check_agent_ready: 'Agent erreichbar', onboarding_check_agent_missing: 'Agent nicht erreichbar', onboarding_check_password: 'Passwortschutz', onboarding_check_password_enabled: 'Passwort aktiviert', onboarding_check_password_disabled: 'Kein Passwort', onboarding_check_provider: 'Modellanbieter', onboarding_check_provider_ready: 'Anbieter konfiguriert', onboarding_check_provider_partial: 'Teilweise konfiguriert', onboarding_check_provider_pending: 'Nicht konfiguriert', onboarding_config_file: 'Konfigurationsdatei', onboarding_env_file: 'Umgebungsdatei', onboarding_unknown: 'Unbekannt', onboarding_current_provider: 'Aktueller Anbieter', onboarding_missing_imports: 'Fehlende Abhängigkeiten', onboarding_notice_setup_required: 'Einrichtung erforderlich', onboarding_notice_setup_already_ready: 'Bereits eingerichtet', onboarding_oauth_provider_ready_title: 'Anbieter bereit', onboarding_oauth_provider_ready_body: '{provider} ist konfiguriert. Kein API-Schlüssel erforderlich.', onboarding_oauth_provider_not_ready_title: 'Anbieter nicht eingerichtet', onboarding_oauth_provider_not_ready_body: '{provider} erfordert einen API-Schlüssel.', onboarding_oauth_switch_hint: 'Zu OAuth wechseln', onboarding_notice_workspace: 'Arbeitsbereich empfohlen', onboarding_workspace_label: 'Arbeitsbereich', onboarding_workspace_or_path: 'Name oder Pfad', onboarding_workspace_placeholder: 'z.B. ~/projects/my-app', onboarding_provider_label: 'Anbieter', onboarding_quick_setup_badge: 'Schnelleinrichtung', provider_category_easy_start: 'Einfach starten', provider_category_self_hosted: 'Selbst gehostet', provider_category_specialized: 'Spezialisiert', onboarding_api_key_label: 'API-Schlüssel', onboarding_api_key_placeholder: 'sk-…', onboarding_api_key_label_optional: 'API key (optional)', // TODO: translate onboarding_api_key_placeholder_optional: 'Leave blank for keyless servers', // TODO: translate onboarding_api_key_help_keyless: 'Most LM Studio / Ollama / vLLM installs run keyless — leave this blank if your server doesn\'t require authentication. Use the Test connection button to verify.', // TODO: translate oauth_login_codex: 'Login with Codex (ChatGPT)', // TODO: translate oauth_codex_step1: 'Step 1: Visit this URL and enter the code', // TODO: translate oauth_codex_step2: 'Step 2: Enter this code on the page', // TODO: translate oauth_codex_polling: 'Waiting for authorization...', // TODO: translate oauth_codex_success: 'Codex OAuth login successful!', // TODO: translate oauth_codex_error: 'OAuth login failed', // TODO: translate oauth_codex_expired: 'Code expired, please try again', // TODO: translate onboarding_api_key_help_prefix: 'Gefunden unter', onboarding_base_url_label: 'Base URL', onboarding_base_url_placeholder: 'https://api.openai.com/v1', onboarding_base_url_help: 'Verwenden Sie dies für OpenAI-kompatible Router, selbst gehostete Server, LiteLLM, Ollama, LM Studio, vLLM oder ähnliche Endpunkte.', onboarding_model_label: 'Modell', onboarding_workspace_help: 'Der Arbeitsbereich ist das Stammverzeichnis für Dateien und Terminal-Befehle.', onboarding_custom_model_placeholder: 'Exakte Modell-ID eingeben', onboarding_custom_model_help: 'Geben Sie die genaue Modell-ID ein, die Ihr Server erwartet.', onboarding_notice_password_enabled: 'Passwortschutz aktiviert.', onboarding_notice_password_recommended: 'Empfohlen für den öffentlichen Zugriff.', onboarding_password_label: 'Passwort', onboarding_password_placeholder: 'Passwort festlegen', onboarding_password_help: 'Passwörter werden über die Einstellungs-API gespeichert und serverseitig gehasht.', onboarding_notice_finish: 'Ihr Agent ist bereit!', onboarding_not_set: 'Nicht festgelegt', onboarding_password_skipped: 'Übersprungen', onboarding_finish_help: 'Sie können dies später in den Einstellungen ändern.', onboarding_error_choose_workspace: 'Bitte wählen Sie einen Arbeitsbereich.', onboarding_error_choose_model: 'Bitte wählen Sie ein Modell.', onboarding_error_provider_required: 'Anbieter erforderlich.', onboarding_error_base_url_required: 'Base URL erforderlich.', onboarding_probe_test_button: 'Test connection', // TODO: translate onboarding_probe_probing: 'Testing connection…', // TODO: translate onboarding_probe_ok: 'Connected. {n} model(s) available.', // TODO: translate onboarding_probe_error_generic: 'Could not reach the configured base URL.', // TODO: translate onboarding_probe_error_invalid_url: 'Base URL must start with http:// or https://.', // TODO: translate onboarding_probe_error_dns: 'Could not resolve the host. Check the URL or use the host\'s IP address.', // TODO: translate onboarding_probe_error_connect_refused: 'Connection refused — the server may not be running on that address. From inside Docker, try the host IP instead of localhost.', // TODO: translate onboarding_probe_error_timeout: 'The endpoint did not respond in time. Check that the server is running and the URL is correct.', // TODO: translate onboarding_probe_error_http_4xx: 'The endpoint returned a client error. Check authentication and the URL path (typically ends in /v1).', // TODO: translate onboarding_probe_error_http_5xx: 'The endpoint returned a server error. Check the LM Studio / Ollama server logs.', // TODO: translate onboarding_probe_error_parse: 'The endpoint did not return a model list in the expected shape. Verify the URL points to the OpenAI-compatible API root.', // TODO: translate onboarding_probe_error_unreachable: 'Could not reach the configured base URL.', // TODO: translate onboarding_error_probe_failed: 'Could not validate the configured base URL.', // TODO: translate onboarding_error_workspace_required: 'Arbeitsbereich erforderlich.', onboarding_error_model_required: 'Modell erforderlich.', onboarding_complete: 'Einrichtung abgeschlossen!', error_prefix: 'Fehler: ', default: 'default', search: 'Search', not_available: 'Nicht verfügbar', never: 'Nie', add: 'Hinzufügen', add_failed: 'Hinzufügen fehlgeschlagen', remove_failed: 'Entfernen fehlgeschlagen', switch_failed: 'Wechsel fehlgeschlagen', name_required: 'Name erforderlich.', content_required: 'Inhalt erforderlich.', view: 'Anzeigen', dismiss: 'Verwerfen', disable: 'Deaktivieren', cron_no_jobs: 'Keine geplanten Aufgaben.', cron_status_off: 'Inaktiv', cron_status_paused: 'Pausiert', cron_status_error: 'Fehler', cron_status_active: 'Aktiv', cron_status_needs_attention: 'Erfordert Aufmerksamkeit', cron_attention_desc: 'Dieser Job hat Probleme.', cron_attention_croniter_hint: 'Der Croniter-Ausdruck ist möglicherweise ungültig.', cron_attention_resume: 'Fortsetzen', cron_jobs_project: 'Cron-Jobs', cron_attention_run_once: 'Einmal ausführen', cron_attention_copy_diagnostics: 'Diagnose kopieren', cron_diagnostics_copied: 'Diagnoseinformationen kopiert.', cron_next: 'Nächstes: ', cron_last: 'Letztes: ', cron_run_now: 'Jetzt ausführen', cron_pause: 'Pausieren', cron_resume: 'Fortsetzen', cron_job_name_placeholder: 'Aufgabenname', cron_schedule_placeholder: '0 9 * * *', cron_prompt_placeholder: 'Aufgabenbeschreibung', cron_last_output: 'Letzte Ausgabe', cron_expand_prompt: 'Prompt erweitern', cron_collapse_prompt: 'Prompt einklappen', cron_expand_output: 'Ausgabe erweitern', cron_collapse_output: 'Ausgabe einklappen', cron_mode_agent: 'Agent', cron_mode_script: 'Skript', cron_mode_label: 'Modus', cron_script_job_banner: 'Führt ein Skript nach Plan aus — stdout wird zugestellt. Kein Agent, Prompt oder Skills.', cron_script_card_title: 'Skript', cron_script_output: 'Skriptausgabe', cron_script_path_label: 'Skriptpfad', cron_script_path_hint: 'Wird unter ~/.hermes/scripts/ aufgelöst, sofern kein absoluter Pfad. Verhalten über die Skriptdatei auf dem Server ändern.', cron_script_badge_title: 'Skript-Job (ohne Agent)', cron_workdir_label: 'Arbeitsverzeichnis', cron_view_full_output: 'View full output', cron_all_runs: 'Alle Ausführungen', cron_hide_runs: 'Ausführungen ausblenden', cron_no_runs_yet: 'Noch keine Ausführungen.', cron_schedule_required_example: 'z.B. 0 9 * * *, every 2h, 30m', cron_schedule_required: 'Zeitplan erforderlich.', cron_prompt_required: 'Beschreibung erforderlich.', cron_job_created: 'Aufgabe erstellt.', cron_job_triggered: 'Aufgabe gestartet.', cron_job_paused: 'Aufgabe pausiert.', cron_job_resumed: 'Aufgabe fortgesetzt.', cron_job_updated: 'Aufgabe aktualisiert.', cron_model_label: 'Modell-Überschreibung', cron_model_hint: 'Überschreibt das Standardmodell für diesen Auftrag.', cron_model_no_agent_hint: 'No-agent jobs run the configured script directly; model is unused.', cron_model_use_default: 'Standard (Profil-/Systemstandard verwenden)', cron_delete_confirm_title: 'Aufgabe löschen', cron_delete_confirm_message: 'Sind Sie sicher?', cron_job_deleted: 'Aufgabe gelöscht.', cron_completion_status: 'Abschlussstatus', status_failed: 'Fehlgeschlagen', status_completed: 'Abgeschlossen', todos_no_active: 'Keine aktiven Aufgaben.', clear_conversation_title: 'Konversation löschen', clear_conversation_message: 'Alle Nachrichten werden gelöscht.', clear_failed: 'Löschen fehlgeschlagen.', skills_no_match: 'Keine passende Fähigkeit.', skill_enabled: 'Aktiviert', skill_disabled: 'Deaktiviert', skill_toggle_failed: 'Fehler beim Umschalten der Fähigkeit: ', linked_files: 'Verknüpfte Dateien', skill_load_failed: 'Fähigkeit konnte nicht geladen werden.', skill_file_load_failed: 'Datei konnte nicht geladen werden.', skill_name_required: 'Name erforderlich.', skill_updated: 'Fähigkeit aktualisiert.', skill_created: 'Fähigkeit erstellt.', skill_deleted: 'Fähigkeit gelöscht.', skill_delete_confirm: 'Fähigkeit wirklich löschen?', skills_empty_title: 'Keine Fähigkeiten', skills_empty_sub: 'Installieren Sie Fähigkeiten.', skills_edit: 'Bearbeiten', skills_delete: 'Löschen', skills_back_to: 'Zurück', tasks_empty_title: 'Keine Aufgaben', tasks_empty_sub: 'Verwalten Sie geplante Aufgaben.', workspaces_empty_title: 'Keine Arbeitsbereiche', workspaces_empty_sub: 'Richten Sie Arbeitsbereiche ein.', profiles_empty_title: 'Keine Profile', profiles_empty_sub: 'Erstellen Sie Profile.', memory_notes_label: 'Notizen', memory_saved: 'Notiz gespeichert.', my_notes: 'Meine Notizen', user_profile: 'Benutzerprofil', external_notes_sources: 'Notizen von Drittanbietern', external_notes_empty: 'Noch sind keine MCP-Quellen für Notizen oder Wissen sichtbar. Konfiguriere Joplin, Obsidian, Notion, llm-wiki oder einen anderen Notizen-Server, um ihn hier anzuzeigen.', external_notes_auto_recall_hint: 'Der automatische Sitzungsabruf bleibt unverändert; diese Leiste zeigt nur konfigurierte Quellen und verfügbare Lese-/Suchwerkzeuge.', external_notes_no_tools: 'Für diese Quelle sind derzeit keine Lese-/Suchwerkzeuge sichtbar.', external_notes_tool_count: (count) => `${count} Notizwerkzeug${Number(count)===1?'':'e'} verfügbar`, external_notes_configured_hint: 'Werkzeugnamen werden von dieser konfigurierten Quelle erwartet; Live-Schemas erscheinen, wenn die WebUI-Laufzeit sie bereitstellt.', external_notes_recent_ai: 'Zuletzt von der KI verwendet', external_notes_auto: 'auto', external_notes_recent_ai_reason: 'Automatischer Abruf', external_notes_search_placeholder: 'Notizen suchen…', external_notes_search_empty: 'Durchsuche eine konfigurierte Notizenquelle, um hier eine Vorschau zu sehen.', source_active: 'active', source_configured: 'configured', no_notes_yet: 'Noch keine Notizen.', no_profile_yet: 'Noch kein Profil.', agent_soul: 'Agenten-Seele', no_soul_yet: 'Noch keine Seele definiert.', workspace_choose_path: 'Arbeitsbereich wählen', workspace_choose_path_meta: 'Wählen Sie ein Verzeichnis.', workspace_manage: 'Arbeitsbereiche verwalten', workspace_manage_meta: 'Hinzufügen, Umbenennen, Entfernen.', workspace_use_title: 'Arbeitsbereich verwenden', workspace_use: 'Arbeitsbereich', workspace_add_path_placeholder: '~/projects/my-app', workspace_paths_validated_hint: 'Pfad ist gültig.', workspace_added: 'Arbeitsbereich hinzugefügt.', workspace_renamed: 'Arbeitsbereich umbenannt.', workspace_remove_confirm_title: 'Arbeitsbereich entfernen', workspace_remove_confirm_message: 'Arbeitsbereich entfernen?', workspace_removed: 'Arbeitsbereich entfernt.', workspace_switch_prompt_title: 'Zum Arbeitsbereich wechseln', workspace_switch_prompt_message: 'Wechsel zum Arbeitsbereich?', workspace_switch_prompt_confirm: 'Wechseln', workspace_switch_prompt_placeholder: 'Arbeitsbereichsname', workspace_not_added: 'Arbeitsbereich nicht hinzugefügt.', workspace_already_saved: 'Arbeitsbereich bereits vorhanden.', workspace_busy_switch: 'Arbeitsbereich kann nicht gewechselt werden.', discard_file_edits_title: 'Änderungen verwerfen', discard_file_edits_message: 'Ungespeicherte Änderungen verwerfen?', workspace_switched_to: 'Arbeitsbereich gewechselt zu: ', profiles_no_profiles: 'Keine Profile vorhanden.', profile_api_keys_configured: 'API-Schlüssel konfiguriert', profile_gateway_running: 'Gateway läuft', profile_gateway_stopped: 'Gateway gestoppt', profile_active: 'Aktiv', profile_no_configuration: 'Keine Konfiguration', profile_skill_count: (count) => `${count} Fähigkeit${count === 1 ? '' : 'en'}`, profile_use: 'Verwenden', profile_switch_title: 'Profil wechseln', profile_delete_title: 'Profil löschen', profile_default_label: 'Standard', profile_name_placeholder: 'Profilname', profile_clone_label: 'Klonen', profile_model_label: 'Modell / Anbieter', profile_model_hint: 'Wähle konfigurierte Anbieter und Modelle für dieses neue Profil.', profile_model_use_default: 'Standard des aktiven Profils verwenden', profile_base_url_placeholder: 'https://api.openai.com/v1', profile_api_key_placeholder: 'sk-…', manage_profiles: 'Profile verwalten', profiles_load_failed: 'Profile konnten nicht geladen werden.', profile_switched_new_conversation: 'Profil gewechselt. Neue Konversation.', profile_switched: 'Profil gewechselt.', profile_name_rule: 'Nur alphanumerische Zeichen.', profile_base_url_rule: 'Muss mit http:// oder https:// beginnen.', profile_created: 'Profil erstellt.', profile_delete_confirm_title: 'Profil löschen', profile_deleted: 'Profil gelöscht.', active_conversation_none: 'Keine aktive Konversation', active_conversation_meta: 'Aktive Konversation', settings_unsaved_changes: 'Ungespeicherte Änderungen', sign_out_failed: 'Abmeldung fehlgeschlagen.', disable_auth_confirm_title: 'Passwortschutz deaktivieren', disable_auth_confirm_message: 'Zugriff ohne Authentifizierung?', auth_disabled: 'Passwortschutz deaktiviert.', disable_auth_failed: 'Deaktivieren fehlgeschlagen.', current_password_label: 'Aktuelles Passwort', current_password_placeholder: 'Aktuelles Passwort eingeben…', current_password_required: 'Das aktuelle Passwort ist erforderlich, um die Authentifizierung zu ändern oder zu deaktivieren.', current_password_incorrect: 'Das aktuelle Passwort ist falsch.', disable_auth_typed_confirm: 'Geben Sie DISABLE AUTH ein, um zu bestätigen', auth_status_password: 'Passwort-Authentifizierung', auth_status_passkey_only: 'Nur Passkey', auth_status_unauthenticated: 'Nicht authentifiziert', auth_warning_badge: 'Auth deaktiviert', auth_disabled_warning_message: 'Diese Instanz ist ohne Authentifizierung zugänglich.', auth_acknowledged_label: 'Ich habe dieses Risiko geprüft; Navigationswarnung weniger dringend anzeigen.', auth_ack_save_failed: 'Bestätigung konnte nicht aktualisiert werden: ', bg_error_single: 'Hinterfrage {count} fehlgeschlagen.', bg_error_multi: '{count} Hinterfragen fehlgeschlagen.', media_audio_label: 'Audio', media_svg_label: 'Diagramm', media_video_label: 'Video', media_download: 'Herunterladen', csv_loading: 'CSV wird geladen', csv_too_large: 'CSV-Datei zu groß für Inline-Anzeige', csv_no_data: 'CSV-Datei enthält nicht genügend Daten', csv_error: 'CSV-Datei konnte nicht geladen werden', csv_header_note: 'Erste Zeile wird als Tabellenüberschrift angezeigt', excalidraw_loading: 'Diagramm wird geladen', excalidraw_too_large: 'Excalidraw-Datei zu groß für Inline-Anzeige', excalidraw_invalid: 'Ungültiges Excalidraw-Dateiformat', excalidraw_error: 'Excalidraw-Datei konnte nicht geladen werden', excalidraw_label: 'Diagramm', excalidraw_download: 'Herunterladen', excalidraw_empty: 'Leeres Diagramm', excalidraw_render_error: 'Diagramm konnte nicht gerendert werden', excalidraw_simplified: 'Vereinfachte SVG-Vorschau — nicht pixelgenau zum Excalidraw-Canvas', pdf_loading: 'PDF wird geladen {0}…', pdf_too_large: 'PDF zu groß für Inline-Vorschau', pdf_no_pages: 'PDF-Vorschau konnte nicht gerendert werden', pdf_error: 'PDF konnte nicht geladen werden', pdf_download: 'PDF herunterladen', pdf_truncated: 'Showing the first {0} of {1} pages — download for the full document', html_loading: 'HTML-Vorschau wird geladen…', html_too_large: 'HTML zu groß für Inline-Vorschau', html_error: 'HTML-Vorschau konnte nicht geladen werden', html_open_full: 'Vollständige Seite öffnen', html_sandbox_label: 'HTML-Vorschau', // TTS (#499) tts_listen: 'Anhören', tts_not_supported: 'Sprachsynthese nicht verfügbar', settings_label_tts: 'Text-zu-Sprache für Antworten', settings_desc_tts: 'Lautsprecher-Symbol auf Assistenten-Nachrichten anzeigen', settings_label_tts_auto_read: 'Antworten automatisch vorlesen', settings_desc_tts_auto_read: 'Assistenten-Antworten automatisch vorlesen', // Composer voice-mode pref (#1488) settings_label_voice_mode: 'Hands-free voice mode button', // TODO: translate settings_desc_voice_mode: 'Show the voice-mode button (audio waveform) next to the dictation mic. Lets you speak naturally — Hermes auto-sends after a pause and reads replies aloud. Requires a browser that supports both speech recognition and TTS.', settings_label_raw_audio: 'Send raw audio instead of transcribing', settings_desc_raw_audio: 'Record and send the original audio file to the agent instead of converting it to text first. The agent can then transcribe it or process the raw audio (emotion, background noise, custom STT). Like Telegram\'s voice message behavior.', voice_send_raw: 'Send raw audio', voice_raw_attached: 'Audio attached. Press Send or type more.', // TODO: translate settings_label_tts_voice: 'Stimme', settings_desc_tts_voice: 'Stimme für Sprachsynthese auswählen', settings_label_tts_rate: 'Sprechgeschwindigkeit', settings_label_tts_pitch: 'Tonhöhe', settings_label_tts_engine: 'TTS-Engine', settings_desc_tts_engine: 'Sprach-Engine auswählen. Edge TTS verwendet Microsoft Neural Voices über den Server.', checkpoint_date: 'Date', // TODO: translate checkpoint_diff_files_changed: (n) => `${n} file${n === 1 ? '' : 's'} changed`, // TODO: translate checkpoint_diff_no_changes: 'No differences found between this checkpoint and the current workspace.', // TODO: translate checkpoint_diff_title: 'Changes in checkpoint', // TODO: translate checkpoint_empty: 'No checkpoints found for this workspace.', // TODO: translate checkpoint_error: 'Failed to load checkpoints', // TODO: translate checkpoint_files: 'Files', // TODO: translate checkpoint_loading: 'Loading checkpoints…', // TODO: translate checkpoint_message: 'Message', // TODO: translate checkpoint_restore: 'Restore', // TODO: translate checkpoint_restore_confirm_message: (ckpt) => `Restore workspace to checkpoint "${ckpt}"? This will overwrite files with the saved versions. Files added after this checkpoint will not be deleted.`, // TODO: translate checkpoint_restore_confirm_title: 'Restore checkpoint?', // TODO: translate checkpoint_restored: 'Checkpoint restored', // TODO: translate checkpoint_title: 'Checkpoints', // TODO: translate checkpoint_view_diff: 'View diff', // TODO: translate insights_activity_by_day: 'Activity by Day', // TODO: translate insights_activity_by_hour: 'Activity by Hour', // TODO: translate insights_cost: 'Estimated Cost', // TODO: translate insights_daily_tokens: 'Daily Tokens', insights_model_name: 'Model', insights_model_sessions: 'Sessions', insights_model_tokens: 'Tokens', insights_model_cost: 'Cost', insights_model_cache: 'Cache', insights_cache_hit: 'Trefferquote des Prompt-Caches', insights_model_share: 'Share', insights_model_health_title: 'Model health comparison', insights_model_health_provider: 'Provider', insights_model_health_replacement: 'Replacement guide', insights_model_health_cost_per_m: 'Cost / 1M', insights_no_usage_data: 'No usage data yet', insights_footer: 'Showing data from the last {days} days', // TODO: translate insights_skill_usage_title: 'Skill Usage', // TODO: translate insights_skill_usage_sub: 'Tool invocation frequency', // TODO: translate insights_skill_usage_total: 'Total invocations', // TODO: translate insights_skill_usage_skills_used: 'Skills used', // TODO: translate insights_skill_usage_no_data: 'No skill usage data yet', // TODO: translate insights_skill_usage_no_data_hint: 'Skills will appear here once used in conversations.', // TODO: translate insights_skill_usage_footer: 'Counts from ~/.hermes/skills/', // TODO: translate insights_skill_usage_col_skill: 'Skill', // TODO: translate insights_skill_usage_col_uses: 'Uses', // TODO: translate insights_skill_usage_col_views: 'Views', // TODO: translate insights_skill_usage_col_share: 'Usage %', // TODO: translate insights_skill_usage_col_patches: 'Patches', // TODO: translate insights_input_tokens: 'Input', // TODO: translate insights_messages: 'Messages', // TODO: translate insights_models: 'Models', // TODO: translate insights_no_cost: 'N/A', // TODO: translate insights_output_tokens: 'Output', // TODO: translate insights_peak_hour: 'Peak: {hour}', // TODO: translate insights_sessions: 'Sessions', // TODO: translate insights_title: 'Usage Analytics', // TODO: translate insights_token_breakdown: 'Token Breakdown', // TODO: translate insights_tokens: 'Tokens', // TODO: translate insights_total: 'Total', // TODO: translate settings_desc_api_redact: 'Self-hosted users can disable for transparency (not recommended for shared instances).', // TODO: translate settings_label_api_redact: 'Redact sensitive data in API responses', // TODO: translate voice_error: 'Voice not supported in this browser', // TODO: translate voice_listening: 'Listening…', // TODO: translate voice_mode_active: 'Voice mode on', // TODO: translate voice_mode_off: 'Voice mode off', // TODO: translate voice_speaking: 'Speaking…', // TODO: translate voice_thinking: 'Thinking…', // TODO: translate // Composer voice buttons (#1488) voice_dictate: 'Dictate', // TODO: translate voice_dictate_active: 'Stop dictation', voice_recording_active: 'Aufnahme stoppen', // TODO: translate voice_mode_toggle: 'Voice mode', // TODO: translate voice_mode_toggle_active: 'Exit voice mode', // TODO: translate subagent_children: 'Subagent sessions', // TODO: translate outline_title: 'Gliederung', outline_empty: 'Noch keine Fragen.', outline_loading: 'Laden…', wiki_browse: 'Browse wiki', wiki_search_placeholder: 'Search pages...', wiki_no_pages: 'No wiki pages found', wiki_not_configured: 'Wiki not configured', }, zh: { offline_title: '连接已断开', offline_browser_detail: '浏览器报告此设备当前离线。', offline_network_detail: '此浏览器当前无法连接到 Hermes。', offline_autorefresh: '当 Hermes 可访问时,我会自动刷新此页面。', offline_check_now: '立即检查', offline_checking: '正在检查…', offline_stream_waiting: '连接已断开。正在等待刷新…', _lang: 'zh', _label: '\u7b80\u4f53\u4e2d\u6587', _speech: 'zh-CN', // boot.js cancelling: '正在取消...', cancel_failed: '取消失败:', mic_denied: '麦克风访问被拒绝,请检查浏览器权限。', mic_insecure_origin: '语音输入需要安全连接。请通过 HTTPS 协议或从本地主机打开Hermes,以便使用麦克风。', mic_no_speech: '没有检测到语音,请再试一次。', mic_network: '语音识别当前不可用。', mic_error: '语音输入出错:', session_imported: '会话已导入', import_failed: '导入失败:', import_invalid_json: 'JSON 无效', image_pasted: '已粘贴图片:', text_pasted: '已将粘贴文本附加为:', // messages.js edit_message: '编辑消息', regenerate: '重新生成回复', copy: '复制', copied: '已复制', copy_failed: '复制失败', selected_text_reply: '用所选内容回复', selected_text_reply_title: '将所选聊天文本作为引用上下文追加', selected_text_reply_appended: '已将所选文本添加到输入框', saved_prompts_empty: '暂无保存的提示。', saved_prompts_save_current: '将当前输入保存为提示', saved_prompts_saved: '提示已保存', saved_prompts_delete: '删除提示', saved_prompts_empty_input: '请先输入要保存的提示', context_block_name_default: '上下文', context_block_flush_aria: '发送时将包含上下文块', context_block_rename_hint: '点击或按 Enter 重命名', context_block_rename_aria: '重命名上下文块', context_block_remove: '移除上下文块', diff_loading: '加载 diff', diff_error: '无法加载 patch 文件', diff_too_large: 'Patch 文件过大,无法内联显示', tree_view: '树形', raw_view: '原始', parse_failed_note: '解析失败', you: '你', mcp_servers_title: 'MCP 服务器', mcp_servers_desc: '管理 config.yaml 中配置的 MCP 服务器。', mcp_no_servers: '未配置 MCP 服务器。', mcp_add_server: '+ 添加服务器', mcp_field_name: '服务器名称', mcp_transport_label: '传输类型', mcp_field_command: '命令', mcp_field_args: '参数(逗号分隔)', mcp_field_url: 'URL', mcp_field_timeout: '超时(秒)', mcp_save: '保存', mcp_cancel: '取消', mcp_name_required: '服务器名称为必填项。', mcp_url_required: 'HTTP 传输需要 URL。', mcp_command_required: 'stdio 传输需要命令。', mcp_saved: 'MCP 服务器已保存。', mcp_save_failed: 'MCP 服务器保存失败。', mcp_delete_confirm_title: '删除 MCP 服务器', mcp_delete_confirm_message: '确定删除 MCP 服务器「{0}」吗?此操作不可撤销。', mcp_deleted: 'MCP 服务器已删除。', mcp_delete_failed: 'MCP 服务器删除失败。', mcp_load_failed: 'MCP 服务器加载失败。', mcp_restart_hint: '服务器更改目前为只读。请编辑 config.yaml 并重启 Hermes。', mcp_toggle_followup: '在 MCP 的重新加载规范明确之前,我们有意暂缓启用/禁用的切换。', mcp_status_active: '运行中', mcp_status_configured: '已配置', mcp_status_disabled: '已禁用', mcp_status_invalid_config: '配置无效', mcp_status_unknown: '未知', mcp_tool_count: '{0} 个工具', mcp_enabled_yes: '已启用', mcp_enabled_no: '已禁用', mcp_enable_server: '启用此 MCP 服务器', mcp_disable_server: '禁用此 MCP 服务器', mcp_enabled_toast: (name) => `MCP 服务器「${name}」已启用。`, mcp_disabled_toast: (name) => `MCP 服务器「${name}」已禁用。`, mcp_toggle_failed: '更新 MCP 服务器失败。', mcp_tools_title: 'MCP 工具', mcp_tools_desc: '搜索活跃 MCP 服务器中的已知工具。', mcp_tools_search_placeholder: '按名称、服务器或描述搜索工具…', mcp_tools_no_tools: '当前运行时清单中没有可用的 MCP 工具。', mcp_tools_no_matches: '没有匹配的 MCP 工具。', mcp_tools_load_failed: '加载 MCP 工具失败。', mcp_tools_schema_empty: '无参数。', mcp_tools_runtime_note: '工具清单仅使用已知的活跃 MCP 运行时数据;WebUI 不会启动或探测服务器。', mcp_tools_summary_no_matches: (query,total) => `没有匹配「${query}」的 MCP 工具(共 ${total} 个)。`, mcp_tools_summary_none: '没有 MCP 工具可显示。', mcp_tools_summary_matching: (query) => ` 匹配「${query}」`, mcp_tools_summary_total_note: (total) => `(共 ${total} 个)`, mcp_tools_summary_showing: (start,end,filtered,searchNote,totalNote,page,pages) => `显示第 ${start}-${end} 个,共 ${filtered} 个 MCP 工具${searchNote}${totalNote}。第 ${page}/${pages} 页。`, mcp_tools_page_size_prefix: '每页显示', mcp_tools_page_size_suffix: '个', mcp_tools_per_page_aria: '每页 MCP 工具数', mcp_tools_inactive_configured_servers: (servers) => `已配置但在此 WebUI 运行环境中未激活:${servers}。`, mcp_tools_pagination_label: 'MCP 工具分页', mcp_tools_previous_page: '‹ 上一页', mcp_tools_previous_page_aria: '上一页 MCP 工具', mcp_tools_next_page: '下一页 ›', mcp_tools_next_page_aria: '下一页 MCP 工具', thinking: '思考过程', expand_all: '全部展开', collapse_all: '全部折叠', edit_failed: '编辑失败:', regen_failed: '重新生成失败:', reconnect_active: '回复仍在生成中,准备好后要重新加载吗?', reconnect_finished: '你离开时有回复正在生成,消息内容可能已经更新。', // approval card approval_heading: '需要审批', approval_desc_prefix: '检测到危险命令', approval_btn_once: '允许一次', approval_btn_once_title: '允许执行此命令一次(Enter)', approval_btn_session: '本次允许', approval_btn_session_title: '本次会话期间允许', approval_btn_always: '始终允许', approval_btn_always_title: '始终允许此命令模式', approval_btn_deny: '拒绝', approval_btn_deny_title: '拒绝 — 不执行此命令', approval_responding: '处理中…', approval_gateway_unsupported: '批准操作需要更新版本的网关。请升级已连接的Hermes网关以实现此功能。', approval_gateway_unsupported_label: '不支持批准', clarify_heading: '需要澄清', clarify_hint: '请选择一个选项,或在下方输入你自己的回答。', clarify_other: '其他', clarify_send: '发送', clarify_input_placeholder: '请输入你的回答…', clarify_responding: '处理中…', session_attention_approval: (n) => n === 1 ? '审批' : `${n} 个审批`, session_attention_clarify: (n) => n === 1 ? '问题' : `${n} 个问题`, session_attention_generic: (n) => n === 1 ? '注意' : `${n} 项`, session_attention_approval_title: '等待权限决定', session_attention_clarify_title: '等待你的回答', session_attention_generic_title: '等待用户操作', untitled: '未命名', n_messages: (n) => `${n} 条消息`, load_older_messages: '↑ 向上滚动或点击加载更早的消息', session_jump_start: '开头', session_jump_start_label: '跳转到会话开头', session_jump_end: '结尾', session_jump_end_label: '跳转到会话结尾', session_new_message: '新消息', session_new_message_label: '有新消息,跳转到结尾', jump_to_question: '回到回答', jump_to_question_label: '跳转到这条回答的开头', queued_label: '响应后发送', queued_count: (n) => n === 1 ? '1 条排队' : `${n} 条排队`, queued_cancel: '取消排队消息', model_unavailable: '(不可用)', model_unavailable_title: '这个模型已经不在当前 provider 列表中', provider_mismatch_warning: (m,p)=>`\"${m}\" 可能无法在当前配置的提供商 (${p}) 下工作。直接发送,或在终端运行 \`hermes model\` 切换。`, provider_mismatch_label: '提供商不匹配', gateway_auth_label: 'Gateway 身份验证失败', gateway_start: '启动', gateway_stop: '停止', gateway_restart: '重启', gateway_start_success: '网关启动完成。', gateway_stop_success: '网关停止完成。', gateway_restart_success: '网关重启完成。', gateway_start_failed: '网关启动失败', gateway_stop_failed: '网关停止失败', gateway_restart_failed: '网关重启失败', gateway_running: '运行中', gateway_session: '会话', gateway_sessions: '会话', gateway_status_load_failed: '加载网关状态失败', model_not_found_label: '未找到模型', model_custom_label: '自定义模型 ID', model_custom_placeholder: '例如 openai/gpt-5.4', model_show_all_models: '显示全部 {0} 个模型', model_search_placeholder: '搜索模型…', model_search_no_results: '未找到模型', model_group_configured: '已配置', ws_search_placeholder: '搜索工作区…', ws_no_results: '未找到工作区', workspace_new_worktree_conversation: '在 worktree 中新建对话', workspace_new_worktree_conversation_meta: '为此工作区创建隔离的 git worktree。', workspace_worktree_created: '已创建 worktree 对话', workspace_worktree_failed: 'Worktree 创建失败:', session_worktree_badge: 'Worktree', session_toolsets: 'Session 工具集', session_toolsets_desc: '使用当前配置档默认工具,或为此会话选择自定义工具集', session_toolsets_global: '当前配置档默认', session_toolsets_profile_defaults: '当前配置档默认', session_toolsets_custom: '自定义覆盖', session_toolsets_use_profile_defaults: '使用当前配置档默认', session_toolsets_configured_servers: '已配置 MCP 服务器', session_toolsets_loading_servers: '正在加载已配置服务器...', session_toolsets_no_configured_servers: '没有已配置的 MCP 服务器', session_toolsets_placeholder: 'tool1, tool2, …', // 保持英文——这是占位符示例 session_toolsets_apply: '应用', session_toolsets_clear: '使用默认', session_toolsets_applied: '工具集已更新', session_toolsets_cleared: '正在使用当前配置档默认', session_toolsets_failed: '更新工具集失败:', model_scope_advisory: '从下一条消息起应用于当前对话。', model_scope_toast: '从下一条消息起应用于当前对话。', // commands.js cmd_help: '查看可用命令', cmd_clear: '清空当前对话消息', cmd_compress: '手动压缩对话上下文(用法:/compress [主题])', ctx_compress_hint: '压缩上下文以释放空间 →', ctx_compress_action: '⚠ 立即压缩以释放上下文', cmd_compact_alias: '旧别名:/compress', cmd_model: '切换模型(例如 /model gpt-4o)', cmd_workspace: '按名称切换工作区', cmd_terminal: '打开工作区 Terminal', cmd_new: '新建聊天会话', cmd_usage: '切换 token 用量显示', cmd_theme: '切换外观(主题:system/dark/light,皮肤:default/ares/mono/graphite/slate/poseidon/sisyphus/charizard/sienna/catppuccin/nous/geist-contrast/zeus/verdigris)', cmd_personality: '切换 Agent 人设', cmd_skills: '列出可用的 Hermes 技能', cmd_use: '为下一条消息强制使用技能', available_commands: '可用命令:', type_slash: '输入 / 可查看命令', conversation_cleared: '对话已清空', command_label: '命令', context_compaction_label: '上下文压缩', retrieval_context_label: '已索引上下文', retrieval_context_preview: '较早消息已存储,可通过上下文工具检索', preserved_task_list_label: '保留的任务列表', reference_only_label: '仅供参考', model_usage: '用法:/model ', no_model_match: '没有匹配“', model_did_you_mean: (m) => `,您是否想选择“${m}”?`, switched_to: '已切换到 ', workspace_usage: '用法:/workspace ', no_workspace_match: '没有匹配“', switched_workspace: '已切换工作区:', workspace_switch_failed: '工作区切换失败:', new_session: '已新建会话', new_session_creating: '正在创建新会话…', compressing: '正在请求压缩上下文...', compress_running_label: '压缩中', compress_complete_label: '压缩完成', auto_compress_label: '自动压缩', compress_failed_label: '压缩失败', focus_label: '主题', token_usage_on: 'Token 用量显示已开启', usage_personality_none: '无', token_usage_off: 'Token 用量显示已关闭', usage_cache_hit_detail: '缓存:{0}% 命中(读取 {1} / 写入 {2})', usage_cached_percent: '{0}% 已缓存', theme_usage: '用法:/theme ', theme_set: '主题:', no_active_session: '当前没有活动会话', cmd_queue: '将消息加入下一轮的队列', cmd_goal: '设置或查看持久目标', goal_evaluating_progress: '正在评估目标进展情况…', goal_working_toward: '正朝着目标努力推进…', goal_continuing_toast: '继续朝着目标前进…', goal_status_none: '无当前活动目标。请使用 /goal <文本> 设置一个目标。', goal_status_active: (turns, max_turns, goal) => `⊙ 目标 (进行中, ${turns}/${max_turns} 回合): ${goal}`, goal_status_paused: (turns, max_turns, reason, goal) => `⏸ 目标 (已暂停, ${turns}/${max_turns}${reason ? `, ${reason}` : ''}): ${goal}`, goal_status_done: (turns, max_turns, goal) => `✓ 目标完成 (${turns}/${max_turns}): ${goal}`, goal_set: (turns, goal) => `⊙ 目标设置 (${turns}-回合预算): ${goal}`, goal_paused: (goal) => `⏸ 目标暂停: ${goal}`, goal_resumed: (goal) => `▶ 目标恢复: ${goal}`, goal_cleared: '目标已清除。', goal_no_goal: '无激活目标。', goal_achieved: (reason) => `✓ 目标已达成: ${reason}`, goal_paused_budget_exhausted: (turns, max_turns) => `⏸ 目标已暂停 — ${turns}/${max_turns} 回合已使用。使用 /goal resume 以继续, 或者 /goal clear 以停止。`, goal_continuing: (turns, max_turns, reason) => `↻ 继续完成目标 (${turns}/${max_turns}): ${reason}`, cmd_interrupt: '取消当前回合并发送新消息', cmd_steer: '用纠正信息引导代理(回退为中断)', cmd_queue_no_msg: '用法:/queue <消息>', cmd_queue_not_busy: '没有活动任务 — 直接发送即可', cmd_queue_confirm: '消息已加入队列', cmd_interrupt_no_msg: '用法:/interrupt <消息>', cmd_interrupt_confirm: '已中断 — 正在发送新消息', cmd_steer_no_msg: '用法:/steer <消息>', cmd_steer_fallback: 'Steer 不可用 — 草稿已恢复', cmd_steer_delivered: 'Steer 已交付 — 代理将在下一个工具结果中看到', steer_leftover_queued: 'Steer 已加入下轮队列', busy_steer_fallback: 'Steer 不可用 — 草稿已恢复', steer_fail_no_cached_agent: '此会话无缓存代理 — 请尝试刷新', steer_fail_agent_lacks_steer: '此代理版本不支持引导功能', steer_fail_session_not_found: '会话未找到 — 可能已过期', steer_fail_not_running: '代理当前未运行', steer_fail_stream_dead: '代理流已结束', steer_fail_steer_error: '引导交付失败 — 代理可能已结束运行', steer_fail_network_error: '网络错误 — 请检查您的网络连接', steer_fail_unknown: '引导功能不可用', steer_recovery_retry: '重试', steer_recovery_dismiss: '忽略', busy_interrupt_confirm: '已中断 — 正在发送新消息', settings_label_default_message_mode: '默认消息模式', settings_desc_default_message_mode: '控制当代理正在运行时你发送消息会发生什么。队列会等待;中断会取消并重新开始;引导会在不中断的情况下注入中间修正。如果引导不可用,将恢复草稿,方便你选择下一步操作。', settings_label_fade_text_effect: '淡入文字效果', settings_desc_fade_text_effect: '在助手回复时淡入新流式单词。类似于 OpenWebUI;默认关闭以获得最佳性能。', settings_label_max_tokens: '最大输出令牌数', settings_desc_max_tokens: '限制新的流式响应可生成的输出量。留空时使用当前配置文件中的回退值。', settings_placeholder_max_tokens_none: '无覆盖', settings_placeholder_max_tokens_fallback: '无覆盖(回退值:{0})', settings_default_message_mode_queue: '队列后续消息', settings_default_message_mode_interrupt: '中断当前轮次', settings_default_message_mode_steer: '引导(中间修正)', settings_label_busy_placeholder_hint: '显示忙碌占位提示', settings_desc_busy_placeholder_hint: '在会话运行且草稿为空时,显示带有当前忙碌操作的编辑器占位符。', composer_placeholder_busy_queue: 'Enter = 队列 | /interrupt | /background | /steer', composer_placeholder_busy_interrupt: 'Enter = 中断 | /queue | /background | /steer', composer_placeholder_busy_steer: 'Enter = 引导 | /queue | /background | /interrupt', settings_plugins_title: '插件', plugins_enable_toggle: '启用', settings_plugins_meta: '查看已安装的 Hermes 插件及其注册的生命周期挂钩。此面板为只读。', settings_plugins_empty: '当前没有可见的 Hermes 插件。通过 Hermes CLI/配置文件安装或启用插件后即可在此查看。', plugins_unnamed: '未命名插件', plugins_no_description: '未提供描述信息。', plugins_no_hooks: '未注册生命周期挂钩', plugins_registered_hooks: '已注册的挂钩', plugins_enabled: '已启用', plugins_disabled: '已禁用', plugins_active_provider: '激活(提供方)', plugins_provider_no_hooks: '提供方插件 — 无代理可见挂钩', plugins_load_failed: '加载插件失败:', workspace_empty_no_path: '未选择工作区。请在 设置 → 工作区 中设置工作区以浏览文件。', workspace_empty_dir: '此工作区为空。', workspace_show_hidden_files: '显示隐藏文件', workspace_show_hidden_files_desc: '将 .DS_Store、.git、node_modules 以及其他隐藏文件/系统文件包含在文件树中。', workspace_hidden_files_visible: '隐藏 显示', workspace_hidden_files_visible_title: '隐藏文件已显示 — 点击查看选项', workspace_options: '工作区选项', no_personalities: '没有找到人设(可添加到 ~/.hermes/personalities/)', available_personalities: '可用人设:', personality_switch_hint: '\n\n使用 `/personality ` 切换,或用 `/personality none` 清空。', personalities_load_failed: '加载人设失败', personality_cleared: '人设已清空', personality_set: '当前人设:', failed_colon: '失败:', // ui.js no_workspace: '未选择工作区', terminal_open_title: '打开工作区 Terminal', terminal_no_workspace_title: '请先选择工作区再打开 Terminal', terminal_title: '终端', terminal_clear: '清屏', terminal_copy_output: '复制输出', terminal_restart: '重启', terminal_collapse: '折叠', terminal_expand: '展开', terminal_close: '关闭', terminal_input_placeholder: '输入命令...', terminal_start_failed: '终端启动失败:', terminal_input_failed: '终端输入失败:', terminal_copy_failed: '复制失败:', terminal_error: '终端错误', terminal_remote_backend_unsupported: '嵌入式终端仅支持本地终端后端。', dialog_confirm_title: '确认操作', dialog_prompt_title: '输入内容', dialog_confirm_btn: '确认', // workspace.js unsaved_confirm: '预览区有未保存修改,要放弃更改并继续跳转吗?', discard: '放弃', save: '保存', edit: '编辑', clear: '清空', create: '创建', remove: '移除', save_title: '保存修改', edit_title: '编辑此文件', saved: '已保存', save_failed: '保存失败:', image_load_failed: '图片加载失败', file_open_failed: '无法打开文件', downloading: (name) => `正在下载 ${name}...`, double_click_rename: '双击重命名', symlink_link_to: '符号链接 → {target}', external_link_open_confirm: '此符号链接指向工作区外部。是否在本次浏览器会话的只读外部视图中打开它?', external_link_read_only: '此外部视图为只读。此处创建、重命名、移动、删除、上传、显示及编辑操作均处于禁用状态。', external_link_grant_expired: '此外部视图已过期。重新打开转义目标符号链接以再次授权。', session_rename_failed_no_row: '无法开始重命名操作 — 未找到相应行。', renamed_to: '已重命名为 ', rename_failed: '重命名失败:', moved_to: '已移动到 ', move_failed: '移动失败:', delete_title: '删除', delete_confirm: (name) => `要删除 ${name} 吗?`, delete_dir_confirm: (name) => `删除文件夹 "${name}" 及其所有内容?`, rename_title: '重命名', rename_prompt: '新名称:', deleted: '已删除 ', delete_failed: '删除失败:', reveal_in_finder: '在文件管理器中显示', reveal_failed: '显示失败:', copy_file_path: '\u590d\u5236\u6587\u4ef6\u8def\u5f84', open_in_vscode: '在VS Code中打开', open_in_vscode_failed: '在VS Code中打开失败:', download_folder: '下载文件夹', path_copied: '\u6587\u4ef6\u8def\u5f84\u5df2\u590d\u5236\u5230\u526a\u8d34\u677f', path_copy_failed: '\u590d\u5236\u8def\u5f84\u5931\u8d25\uff1a', session_rename: '\u91cd\u547d\u540d\u5bf9\u8bdd', session_rename_desc: '\u7f16\u8f91\u6b64\u5bf9\u8bdd\u7684\u6807\u9898', session_title_regenerate: '\u91cd\u65b0\u751f\u6210\u6807\u9898', session_title_regenerate_desc: '\u8ba9 Hermes \u6839\u636e\u5bf9\u8bdd\u751f\u6210\u65b0\u7684\u6807\u9898', session_title_regenerating: '\u6b63\u5728\u91cd\u65b0\u751f\u6210\u6807\u9898\u2026', session_title_regenerated: (title) => `\u6807\u9898\u5df2\u91cd\u65b0\u751f\u6210\uff1a${title}`, session_title_regenerate_failed: '\u91cd\u65b0\u751f\u6210\u6807\u9898\u5931\u8d25\uff1a', session_copy_link: '复制对话链接', session_copy_link_desc: '复制此对话的直接链接', session_link_copied: '对话链接已复制到剪贴板', session_link_copy_failed: '无法复制对话链接:', new_file_prompt: '新文件名(例如 notes.md):', new_file: '新建文件', new_folder: '新建文件夹', workspace_root: '工作区根目录', new_file_prompt_title: '在 {0} 中新建文件名:', new_folder_prompt_title: '在 {0} 中新建文件夹名称:', project_name_prompt: '项目名称:', created: '已创建 ', create_failed: '创建失败:', new_folder_prompt: '新文件夹名称:', folder_created: '已创建文件夹 ', folder_create_failed: '创建文件夹失败:', workspace_auto_create_folder: '如果文件夹不存在则创建', folder_add_as_space_btn: '添加为工作区', folder_add_as_space_msg: '是否将此文件夹添加为新的工作区?', folder_add_as_space_title: '添加为工作区?', remove_title: '移除', empty_dir: '(空)', upload_failed: '上传失败:', upload_too_large: (maxMb, fileMb) => `\u6587\u4ef6\u8fc7\u5927\uff08${fileMb} MB\uff09\u3002\u6700\u5927\u4e0a\u4f20\u5927\u5c0f\u4e3a ${maxMb} MB\u3002`, uploading: '上传中…', uploaded: '已上传', all_uploads_failed: (n) => `${n} 个文件全部上传失败`, // settings panel settings_title: '设置', settings_search_placeholder: '搜索设置…', settings_search_no_results: '未找到设置。', settings_save_btn: '保存设置', settings_label_model: '默认模型', settings_desc_model: '用于新对话。现有对话保持各自选定的模型。', settings_main_advanced_button_aria: '主模型的高级选项', settings_main_advanced_title: '主模型选项', settings_main_advanced_subtitle: '默认聊天模型的高级配置。', settings_main_advanced_saved: '主模型选项已保存', settings_main_advanced_save_failed: '主模型选项保存失败', settings_main_advanced_service_tier: '服务层级', settings_main_advanced_service_tier_desc: '针对OpenAI系列供应商的可选请求设置。', settings_main_advanced_service_tier_default: '默认/关闭', settings_main_advanced_service_tier_priority: '优先(快速)', settings_label_auxiliary_models: '辅助模型', settings_desc_auxiliary_models: '视觉分析、上下文压缩、标题生成等辅助任务的路由。"自动"表示使用主聊天模型。', settings_btn_reset_aux_models: '全部重置为自动', settings_btn_apply_aux_models: '应用更改', settings_aux_provider_auto: '使用主模型', settings_aux_model_auto: '自动(使用提供商默认)', settings_aux_model_custom: '自定义模型…', settings_aux_model_custom_prompt: '输入模型 ID:', settings_aux_loading: '正在加载辅助模型…', settings_aux_load_failed: '无法加载辅助模型设置,请确保 Agent API 可用。', settings_aux_reset_confirm_title: '重置辅助模型?', settings_aux_reset_confirm_msg: '这将把所有辅助任务设置为自动(使用主模型)。', settings_aux_reset_done: '辅助模型已重置为自动', settings_aux_save_failed: '辅助模型保存失败', settings_aux_saved: '辅助模型已更新', settings_aux_no_changes: '没有需要应用的更改', settings_aux_task_vision: '视觉功能', settings_aux_task_vision_desc: '图像/屏幕截图分析', settings_aux_task_compression: '压缩', settings_aux_task_compression_desc: '上下文摘要', settings_aux_task_web_extract: '网页提取', settings_aux_task_web_extract_desc: '网页内容摘要', settings_aux_task_session_search: '会话搜索', settings_aux_task_session_search_desc: '历史对话召回', settings_aux_task_approval: '批准', settings_aux_task_approval_desc: '智能指令批准', settings_aux_task_mcp: 'MCP', settings_aux_task_mcp_desc: 'MCP 工具推理', settings_aux_task_title_generation: '标题生成', settings_aux_task_title_generation_desc: '会话标题', settings_aux_task_skills_hub: '技能中心', settings_aux_task_skills_hub_desc: '技能搜索/安装', settings_aux_task_curator: '策展人', settings_aux_task_curator_desc: '技能-用途审查通过', settings_aux_task_kanban_decomposer: '看板分解器', settings_aux_task_kanban_decomposer_desc: '任务分解', settings_aux_task_profile_describer: '个人资料描述器', settings_aux_task_profile_describer_desc: '个人资料摘要', settings_aux_task_triage_specifier: '分类指定器', settings_aux_task_triage_specifier_desc: '问题 / 任务分类规范', settings_aux_advanced_button_title: '高级选项', settings_aux_advanced_button_aria: '{task}的高级选项', settings_aux_advanced_title: '{task} 选项', settings_aux_advanced_subtitle: '辅助程序的高级配置。', settings_aux_advanced_save: '保存选项', settings_aux_advanced_base_url: 'Base URL', settings_aux_advanced_base_url_desc: '可选的供应商端点覆盖设置。', settings_aux_advanced_timeout: '超时秒数', settings_aux_advanced_timeout_desc: '此辅助任务的请求超时时间。留空则使用Hermes默认设置。', settings_aux_advanced_download_timeout: '下载超时秒数', settings_aux_advanced_download_timeout_desc: '仅适用于下载媒体/内容的任务,如视觉相关任务。留空则使用默认设置。', settings_aux_advanced_max_concurrency: '最大并发数', settings_aux_advanced_max_concurrency_desc: '可选的每个任务并发限制。留空则使用默认值。', settings_aux_advanced_extra_body: '额外的主体 JSON', settings_aux_advanced_extra_body_desc: '可选的JSON对象,会合并到模型请求主体中。', settings_aux_advanced_api_key: 'API密钥覆盖', settings_aux_advanced_api_key_set_hint: 'API密钥已设置。留空则保留,或者使用 clear 以移除。', settings_aux_advanced_api_key_empty_hint: '留空以使用供应商/默认凭证。', settings_aux_advanced_api_key_clear: '清除现有的API密钥覆盖', settings_aux_advanced_extra_body_invalid_json: '额外主体必须是有效的JSON格式', settings_aux_advanced_extra_body_object_required: '额外主体必须是一个JSON对象', settings_aux_advanced_saved: '辅助选项已保存', settings_aux_advanced_save_failed: '保存辅助选项失败', settings_label_send_key: '发送快捷键', settings_label_theme: '主题', settings_label_skin: '皮肤', settings_label_font_size: '字体大小', font_size_small: '小', font_size_default: '默认', font_size_large: '大', font_size_xlarge: '超大', settings_autosave_saving: '保存中…', settings_autosave_saved: '已保存', settings_autosave_failed: '保存失败', settings_autosave_retry: '重试', settings_label_language: '语言', settings_label_quota_chip: '在编辑器中显示供应商配额标签', settings_desc_quota_chip: '在编辑器底部显示剩余配额指示器(如 OpenRouter 信用余额)。默认关闭。启用时仅在宽屏(≥1400px)显示,以保持笔记本和标准桌面屏幕上编辑器的整洁。', settings_label_conversation_outline: '显示会话大纲', settings_desc_conversation_outline: '显示仅限桌面的跳转列表,用于跳转到当前会话中的用户问题。默认关闭。', settings_label_hide_suggestions: '隐藏新聊天建议', settings_desc_hide_suggestions: '隐藏新聊天空白界面上的三个默认建议按钮,以避免误触。', settings_label_virtualize_transcript: '对长篇聊天记录进行虚拟处理', settings_desc_virtualize_transcript: "对于非常长的聊天记录(超过80条消息),仅渲染可见部分,以实现更流畅的滚动。如果遇到任何渲染或滚动问题,或者希望浏览器的查找(Ctrl + F)匹配整个对话,请关闭此功能 \u2014 这样完整的聊天记录将一次性渲染出来。", settings_label_token_usage: '显示 token 用量', settings_label_token_speed: '显示 token 速度 (TPS)', settings_desc_token_speed: '在流式传输期间和响应完成后,在助手消息标题中显示每秒 token 数。默认关闭。', settings_label_sidebar_density: '侧边栏密度', cmd_reasoning: '切换思维可见性(显示/隐藏)、设置工作强度或查看当前状态', settings_label_external_sessions: '显示外部会话', settings_label_claude_code_sessions: 'Show Claude Code sessions', settings_label_cron_sessions: '显示定时任务会话', settings_label_webhook_sessions: '显示Webhook会话', settings_label_previous_messaging_sessions: '显示以前的消息会话', settings_label_sync_insights: '同步到 insights', settings_label_check_updates: '检查更新', settings_label_ignore_agent_updates: '忽略智能体更新', settings_label_whats_new_summary: "用AI总结新功能", settings_label_bot_name: '默认助手名称', settings_label_password: '访问密码', settings_label_pinned_limit: '置顶对话数量限制', settings_desc_pinned_limit: '侧边栏中可置顶的活跃会话的最大数量。默认为 3。', settings_label_dashboard_mode: '官方 Hermes 仪表盘', settings_desc_dashboard_mode: '当官方 hermes 仪表盘可访问时,在导航栏显示链接。公开反向代理 URL 仅作为浏览器链接存储,不会由服务器探测。', settings_dashboard_mode_auto: '自动检测', settings_dashboard_mode_always: '始终显示', settings_dashboard_mode_never: '从不显示', settings_dashboard_save: '保存仪表盘链接设置', settings_label_gateway_status: '网关状态', settings_desc_gateway_status: 'Hermes 网关状态(Telegram、Discord、Slack 等)', gateway_not_configured: '网关未配置', gateway_metadata_stale: '网关元数据已过时', gateway_endpoint_unreachable: '网关端点无法访问', gateway_not_running: '网关未运行', gateway_running_label: '运行中', gateway_last_active: '最后活跃时间:', gateway_session_count: (n) => `${n} 个会话`, gateway_load_failed: '无法加载网关状态', settings_saved: '设置已保存', settings_save_failed: '保存失败:', settings_load_failed: '设置加载失败:', settings_saved_pw: '设置已保存,已启用密码保护,当前浏览器会保持登录', settings_saved_pw_updated: '设置已保存,密码已更新', // login page login_title: '登录', login_subtitle: '输入密码继续使用', login_placeholder: '密码', login_btn: '登录', login_invalid_pw: '密码错误', login_conn_failed: '连接失败', // sidebar & navigation tab_chat: '聊天', tab_memory: '记忆', tab_skills: '技能', tab_tasks: '任务', tab_kanban: '看板', kanban_board: '看板', kanban_visible_tasks: '{0} 个可见任务', kanban_search_tasks: '搜索任务', kanban_all_assignees: '所有负责人', kanban_all_tenants: '所有租户', kanban_include_archived: '包含已归档', kanban_no_matching_tasks: '没有匹配的任务', kanban_no_data: '无看板数据', kanban_work_queue_hint: '这是 Hermes Agent 的工作队列。创建或分类任务,分配任务,将其移至”就绪”状态,然后让调度员认领任务。', kanban_tasks_hidden_by_filters: '被筛选器隐藏的任务', kanban_clear_filters: '清除筛选条件', kanban_unavailable: '看板不可用', kanban_read_only: '只读视图', kanban_empty: '空', kanban_task: '任务', kanban_no_description: '无描述', kanban_refresh: '刷新', kanban_status_triage: '待分类', kanban_status_todo: '待办', kanban_status_ready: '就绪', kanban_status_running: '进行中', kanban_status_blocked: '阻塞', kanban_status_done: '完成', kanban_status_original_hint: '实际状态:{0}。此对话框仅支持编辑 Triage/Todo/Ready。', kanban_comments_count: '评论 ({0})', kanban_events_count: '事件 ({0})', kanban_links: '链接', kanban_parents: '父任务', kanban_children: '子任务', kanban_runs_count: '运行 ({0})', kanban_no_comments: '无评论', kanban_no_events: '无事件', kanban_no_runs: '无运行记录', kanban_title: '标题', kanban_description: '描述', kanban_description_placeholder: '可选 — 需要做什么、验收标准、链接', kanban_status: '状态', kanban_assignee: '负责人', kanban_assignee_placeholder: '可选 — 留空表示任意工作器', kanban_tenant: '租户', kanban_tenant_placeholder: '可选 — 项目或团队标识', kanban_priority: '优先级', kanban_priority_hint: '数值越高越先执行,默认为 0。', kanban_title_required: '标题为必填项。', kanban_edit_task: '编辑任务', kanban_run_dispatcher: '运行调度器', kanban_run_dispatcher_confirm: '将认领此看板的 Ready 任务并生成工作子进程(每次点击最多 8 个)。是否继续?', kanban_assignee_profiles_label: 'Hermes 配置', kanban_assignee_other_label: '其他 (CLI 通道 / 已删除的配置)', kanban_assignee_unassigned: '— 未分配 (不会自动运行) —', kanban_ready_needs_assignee: '您选择了「未分配」+「Ready」。调度器将跳过此任务。再次提交以确认,或选择一个配置。', kanban_dispatch_preview_prefix: '预览:', kanban_dispatch_run_prefix: '已调度:', kanban_dispatch_spawned: '已启动', kanban_dispatch_promoted: '已提升', kanban_dispatch_reclaimed: '已收回', kanban_dispatch_skipped_unassigned: '跳过 (未分配)', kanban_dispatch_skipped_nonspawnable: '跳过 (未知配置)', kanban_dispatch_auto_blocked: '自动阻止', kanban_dispatch_timed_out: '超时', kanban_dispatch_crashed: '崩溃', kanban_new_task: '新建任务', kanban_view_lanes: '按配置文件分列', kanban_view_consolidated: '合并视图', kanban_view_lanes_saved: '看板视图:按配置文件分列', kanban_view_consolidated_saved: '看板视图:已合并', kanban_view_update_failed: '无法更新看板视图:', kanban_add_comment: '添加评论', kanban_workspace_kind: '工作区类型', kanban_workspace_path: '工作区路径', kanban_workspace_path_placeholder: '工作区路径', kanban_workspace_scratch: '暂存区', kanban_workspace_worktree: '工作树', kanban_workspace_dir: '目录', kanban_workspace_path_required: '非暂存工作区需要设置工作区路径。', kanban_skills: '技能', kanban_skills_placeholder: '以逗号分隔的技能名称,例如python,git', kanban_max_runtime_seconds: '最长运行时间(秒)', kanban_max_runtime_hint: '留空则表示无限制。', kanban_max_runtime_invalid: '最长运行时间必须是大于0的整数秒数。', kanban_parents_modal: '父依赖项', kanban_parents_placeholder: '父任务 ID', kanban_add_dependency: '添加依赖项', kanban_remove_dependency: '移除依赖项', kanban_dependency_placeholder: '要链接的任务ID', kanban_dependency_self: '任务不能依赖自身', kanban_only_mine: '仅我的', kanban_bulk_action: '批量操作', kanban_nudge_dispatcher: '提醒调度器', kanban_stats: '统计', kanban_worker_log: '工作日志', kanban_block: '阻塞', kanban_unblock: '解除阻塞', kanban_back_to_board: '返回看板', kanban_lanes_by_profile: '按配置文件分列', kanban_new_board: '新建看板…', kanban_rename_board: '重命名当前看板…', kanban_archive_board: '归档当前看板…', kanban_archive_board_confirm: '归档看板 "{name}"?任务仍保存在磁盘上,并且可以从 kanban/boards/_archived/ 恢复该看板。', kanban_board_archived: '看板已归档', kanban_board_name: '名称', kanban_board_slug: '标识(小写,连字符)', kanban_board_description: '描述(可选)', kanban_board_icon: '图标(emoji,可选)', kanban_board_color: '颜色(可选)', kanban_board_name_required: '名称为必填', kanban_board_slug_required: '标识为必填', kanban_card_complete: '完成', kanban_card_archive: '归档', kanban_unassigned: '未分配', kanban_status_archived: '已归档', tab_todos: '待办', tab_insights: '统计', tab_dashboard: 'Hermes 仪表盘', dashboard_loopback_warning: '仪表盘在服务器上仅限 loopback 访问。请从服务器本机浏览,或使用 --host 0.0.0.0 重启(不安全)。', tab_workspaces: '工作区', tab_profiles: '配置', tab_logs: '日志', tab_settings: '设置', close_menu: '关闭菜单', logs_title: '日志', logs_file: '文件', logs_tail: '末尾', logs_auto_refresh: '自动刷新(5秒)', logs_wrap: '自动换行', logs_copy_all: '全部复制', logs_empty: '暂无日志。', logs_loading: '加载日志中…', logs_load_failed: '日志加载失败', logs_status_idle: '选择日志文件以查看最新内容。', logs_no_mtime: '尚未写入', logs_truncated_hint: '此处显示的是日志文件的末尾内容。为节省内存,已省略较早的数据。', logs_copied: '日志已复制', logs_severity: '严重性', logs_severity_all: '全部', logs_severity_errors: '错误', logs_severity_warnings: '警告+', logs_filter_active: '已显示(筛选器已启用)', new_conversation: '新建对话', filter_conversations: '筛选对话…', markdown_table_filter: '筛选表格', markdown_table_sort_column: '列排序', session_time_unknown: '未知', session_time_minutes_ago: (n) => `${n}分钟前`, session_time_hours_ago: (n) => `${n}小时前`, session_time_days_ago: (n) => `${n}天前`, session_time_last_week: '上周', session_time_bucket_today: '今天', session_time_bucket_yesterday: '昨天', session_time_bucket_this_week: '本周', session_time_bucket_last_week: '上周', session_time_bucket_older: '更早', scheduled_jobs: '定时任务', new_job: '新任务', search_skills: '搜索技能…', new_skill: '新技能', save_skill: '保存技能', personal_memory: '个人记忆', current_task_list: '当前任务列表', workspace_desc: '为你的会话添加并切换工作区。', session_meta_messages: (n) => `${n} 条消息`, session_meta_children: (n) => `${n} 子会话`, session_meta_segments: (n) => `${n} 段`, session_lineage_toggle_hint: '{0} — 较早的上下文轮次已折叠在这里。点击显示或隐藏。', session_lineage_static_hint: '{0} — 较早的上下文轮次已折叠在这里。', session_child_toggle_hint: '{0} — 从此会话派生的子对话。点击显示或隐藏。', session_readonly_title_hint: '只读导入会话 — {0}', session_lineage_segment_untitled: '未命名段', session_lineage_segment_open: '打开脉络段', new_profile: '新配置', transcript: '记录', download_transcript: '下载为 Markdown', import: '导入', export_session_json: 'JSON', export_session_json_tooltip: '将会话完整导出为 JSON', export_session_html: 'HTML', export_session_html_tooltip: '导出为独立的 HTML 网页(双击即可在浏览器打开)', import_session_json_tooltip: '从 JSON 导入会话', clear_conversation_btn_tooltip: '清空此会话中的所有消息', editing: '编辑中', empty_title: '有什么可以帮您?', empty_subtitle: '随时提问、运行命令、浏览文件或管理定时任务。', cancel: '取消', loading: '加载中…', create_job: '创建任务', suggest_plan: '帮我规划一个小项目。', suggest_schedule: '今天有什么安排?', suggest_files: '这个工作区有哪些文件?', sign_out: '退出登录', settings_label_shutdown: '停止 Hermes WebUI 服务器', settings_desc_shutdown_before_cmd: '优雅地停止本地 WebUI 服务器。如果你通过 ', settings_desc_shutdown_between_cmds: ' 启动,并希望不切换到终端就停止它,这会很有用。要再次访问 WebUI,需要重新启动服务器(', settings_desc_shutdown_after_cmd: ' 或原生应用)。', settings_btn_shutdown: '停止服务器', settings_shutdown_confirm_title: '停止 Hermes WebUI', settings_shutdown_confirm_message: '停止 Hermes WebUI 服务器?', settings_shutdown_confirm_btn: '停止', settings_shutdown_stopped_message: '服务器已停止。你可以关闭此标签页。', // Providers panel (English fallback — native translations welcome in follow-up PRs) providers_tab_title: '提供商', providers_section_title: '提供商', providers_section_meta: '管理 AI 提供商的 API 密钥。更改立即生效。', providers_status_configured: 'API 密钥已配置', providers_status_not_configured: '无 API 密钥', providers_status_oauth: 'OAuth', providers_status_api_key: 'API 密钥', providers_status_model: '模型', providers_status_not_configured_label: '未配置', providers_oauth_hint: '通过 OAuth 认证。无需 API 密钥。', providers_oauth_config_yaml_hint: '通过 config.yaml 配置的令牌。如需更新,请编辑 config.yaml 中的 providers 部分或运行 hermes auth。', providers_oauth_not_configured_hint: '未认证。在终端中运行 hermes auth 以配置此提供商。', providers_save: '保存', providers_refresh_models: '刷新模型', providers_refreshing: '正在刷新…', providers_models_refreshed: '模型已刷新', providers_remove: '移除', providers_saving: '保存中…', providers_removing: '移除中…', providers_enter_key: '请输入 API 密钥', providers_empty: '未找到可配置的提供商。', providers_key_updated: 'API 密钥已保存', providers_key_removed: 'API 密钥已移除', providers_key_placeholder_new: 'sk-...', providers_key_placeholder_replace: '输入新密钥以替换…', provider_quota_title: '当前提供商配额', provider_quota_active_provider: '当前提供商', provider_quota_last_checked_after_refresh: '刷新后检查', provider_quota_last_checked: '上次检查 {0}', provider_quota_refresh_usage: '刷新用量', provider_quota_refreshing: '正在刷新...', provider_quota_refresh_title: '立即刷新提供商用量限制', provider_quota_refresh_succeeded: '提供商用量已刷新', provider_quota_refresh_failed: '提供商用量刷新失败', provider_quota_session_limit: '5 小时限制', provider_quota_weekly_limit: '每周限制', provider_quota_window_fallback: '窗口', provider_quota_metric_remaining: '剩余', provider_quota_metric_used: '已用', provider_quota_metric_limit: '限额', provider_quota_status_available: '可用', provider_quota_status_exhausted: '已耗尽', provider_quota_status_unavailable: '不可用', provider_quota_status_failed: '失败', provider_quota_status_checked: '已检查', provider_quota_status_no_key: '无密钥', provider_quota_status_invalid_key: '无效密钥', provider_quota_status_unsupported: '不支持', provider_quota_used_meta: '已用 {0}', provider_quota_resets_meta: '重置于 {0}', provider_quota_credential_pool: '凭据池', provider_quota_credential_label: '凭据 {0}', provider_quota_pool_plans: '方案:{0}', provider_quota_pool_no_windows: '未报告账户限制窗口。', provider_quota_account_limits_loaded: '账户限制已加载。', provider_quota_unavailable: '配额状态不可用', provider_quota_retry_after: '重试时间 {0}', provider_quota_pool_summary_available: '{0}/{1} 可用', provider_quota_pool_summary_exhausted: '{0} 个已耗尽', provider_quota_pool_summary_failed: '{0} 个失败', provider_quota_pool_summary_checked: '已检查 {0} 个', provider_cost_budget_label: '月度预算', provider_cost_budget_placeholder: '例如:50.00', provider_cost_budget_set: '设置', provider_cost_budget_clear: '清除', provider_cost_budget_pct: '每月预算 ${1} 的 {0}%(按每月进度)', provider_cost_budget_save_failed: '预算保存失败。', password_placeholder: '输入新密码…', password_env_var_locked: '当前已设置 HERMES_WEBUI_PASSWORD 环境变量并具有优先级。请取消该变量并重启服务器,才能在此管理密码。', password_env_var_locked_placeholder: '已锁定:已设置 HERMES_WEBUI_PASSWORD 环境变量', disable_auth: '停用认证', settings_label_rtl: '从右到左聊天布局', settings_desc_rtl: '为阿拉伯语或希伯来语等语言翻转聊天消息和编辑器输入的对齐方式。仅影响聊天区域 — 侧边栏和其他面板保持从左到右。', settings_label_sound: '通知声音', settings_label_notifications: '浏览器通知', settings_desc_sound: '助手完成回复时播放提示音。', settings_desc_notifications: '当标签页在后台时,回复完成后显示系统通知。', notifications_enable_btn: '启用通知', notifications_test_btn: '发送测试', notifications_permission_status: (status) => `权限: ${status}`, notifications_enabled_toast: '通知已启用。', notifications_denied: '此浏览器中通知功能被阻止。请在浏览器设置中启用。', notifications_unsupported: '此浏览器不支持通知功能。', settings_desc_token_usage: '在助手每次回复下方显示输入/输出 token 数量。也可以用 /usage 切换。', settings_sidebar_density_compact: '紧凑', settings_sidebar_density_detailed: '详细', settings_desc_sidebar_density: '控制左侧会话列表展示多少元信息。', settings_label_auto_title_refresh: '自适应标题更新', settings_auto_title_refresh_off: '关闭', settings_auto_title_refresh_5: '每 5 轮对话', settings_auto_title_refresh_10: '每 10 轮对话', settings_auto_title_refresh_20: '每 20 轮对话', settings_desc_auto_title_refresh: '基于最新对话自动重新生成会话标题,使其随对话发展保持相关。需要配置 LLM 标题生成模型。', settings_desc_external_sessions: '在会话列表中显示来自 CLI、Telegram、Discord、Slack 等渠道的对话。点击可导入并继续对话。', settings_desc_claude_code_sessions: 'Show Claude Code imported sessions in the sidebar, or hide them while leaving other external sessions visible.', settings_desc_cron_sessions: '将定时任务输出以对话形式显示在侧边栏。仅在启用非 WebUI 会话时此功能才会生效。默认关闭;高频任务可能会使侧边栏信息泛滥。', settings_desc_webhook_sessions: '将Webhook运行情况以对话形式显示在侧边栏。仅在启用非 WebUI 会话时此功能才会生效。默认关闭;大量的路由信息可能会使侧边栏信息泛滥。', settings_desc_previous_messaging_sessions: '显示被 reset 或 compression 替换的较旧的 Discord、Telegram、Slack 和 Weixin 会话。', settings_desc_sync_insights: '将 WebUI token 使用情况同步到 state.db,使 hermes /insights 包含浏览器会话数据。默认关闭。', settings_desc_check_updates: '当有更新的 WebUI 或助手版本时显示横幅。会在后台定期执行 git fetch。', settings_desc_ignore_agent_updates: '保持开启Web用户界面更新检查,但隐藏智能体更新通知并跳过智能体更新获取。', settings_desc_whats_new_summary: "将“新功能”动作从首先打开原始差异改为生成简短且易读的摘要。在生成摘要后,仍可进行常规的差异比较。", settings_desc_bot_name: '仅用于默认个人资料。其他个人资料会使用各自的名称。', settings_desc_password: '输入新密码以设置或更改。留空保持当前设置。', // onboarding onboarding_badge: '首次运行', onboarding_title: '欢迎使用 Hermes Web UI', archive_extracted: (n, c) => `从 ${c} 个压缩包中解压了 ${n} 个文件`, onboarding_lead: '快速引导将验证 Hermes、保存真实的提供商配置、选择工作区和模型,并可选设置密码保护应用。', onboarding_back: '返回', onboarding_continue: '继续', onboarding_skip: '跳过设置', onboarding_skipped: '设置已跳过 — 使用现有配置。', onboarding_open: '打开 Hermes', onboarding_step_system_title: '系统检查', onboarding_step_system_desc: '验证 Hermes Agent 与配置可见性。', onboarding_step_setup_title: '提供商设置', onboarding_step_setup_desc: '保存最小可用的 Hermes 提供商配置。', onboarding_step_workspace_title: '工作区 + 模型', onboarding_step_workspace_desc: '为新会话和聊天选择默认值。', onboarding_step_password_title: '可选密码', onboarding_step_password_desc: '在分享前为 Web UI 添加保护。', onboarding_step_finish_title: '完成', onboarding_step_finish_desc: '确认信息并进入应用。', onboarding_notice_system_ready: 'Hermes Agent 看起来可从 Web UI 访问。', onboarding_notice_system_unavailable: 'Hermes Agent 尚未完全可用。Bootstrap 可以安装它,但提供商设置可能仍需要终端。', onboarding_check_agent: 'Hermes Agent', onboarding_check_agent_ready: '已检测且可导入', onboarding_check_agent_missing: '缺失或仅部分可导入', onboarding_check_password: '密码', onboarding_check_password_enabled: '已启用', onboarding_check_password_disabled: '尚未启用', onboarding_check_provider: '提供商配置', onboarding_check_provider_ready: '可开始聊天', onboarding_check_provider_partial: '已保存但不完整', onboarding_check_provider_pending: '需要验证', onboarding_config_file: '配置文件:', onboarding_env_file: '.env 文件:', onboarding_unknown: '未知', onboarding_current_provider: '当前配置:', onboarding_missing_imports: '缺失导入:', onboarding_notice_setup_required: '请先在此选择一个简单的提供商路径。高级 OAuth 流程暂时仍建议在 Hermes CLI 中完成。', onboarding_notice_setup_already_ready: '已检测到可用的 Hermes 提供商配置。你可以保留它,或在这里替换。', onboarding_oauth_provider_ready_title: '提供商已完成认证', onboarding_oauth_provider_ready_body: '此实例已配置为使用通过 Hermes CLI 设置的 OAuth 提供商({provider})。这里不需要 API key,点击继续即可完成设置。', onboarding_oauth_provider_not_ready_title: 'OAuth 提供商尚未认证', onboarding_oauth_provider_not_ready_body: '此实例已配置为使用 {provider},该提供商使用 OAuth 而非 API key。请在终端运行 hermes auth 或 hermes model 完成认证,然后重新加载 Web UI。', onboarding_oauth_switch_hint: '或者在下方选择其他提供商,切换到 API key 配置:', onboarding_notice_workspace: '这些值复用与正式应用相同的设置 API。', onboarding_workspace_label: '工作区', onboarding_workspace_or_path: '或输入工作区路径', onboarding_workspace_placeholder: '/home/you/workspace', onboarding_provider_label: '设置模式', onboarding_quick_setup_badge: '快速设置', provider_category_easy_start: '快速开始', provider_category_self_hosted: '本地 / 开源', provider_category_specialized: '专业服务', onboarding_api_key_label: 'API key', onboarding_api_key_placeholder: '留空可保留已保存的 key', onboarding_api_key_label_optional: 'API 密钥(可选)', onboarding_api_key_placeholder_optional: '留空用于无需密钥的服务器', onboarding_api_key_help_keyless: '大多数 LM Studio / Ollama / vLLM 安装无需密钥即可运行。', oauth_login_codex: '使用 Codex (ChatGPT) 登录', oauth_codex_step1: '步骤 1:访问此 URL 并输入代码', oauth_codex_step2: '步骤 2:在页面上输入此代码', oauth_codex_polling: '等待授权…', oauth_codex_success: 'Codex OAuth 登录成功!', oauth_codex_error: 'OAuth 登录失败', oauth_codex_expired: '代码已过期,请重试', onboarding_api_key_help_prefix: '会作为密钥保存到 Hermes .env 文件中,变量名为', onboarding_base_url_label: 'Base URL', onboarding_base_url_placeholder: 'https://your-endpoint.example/v1', onboarding_base_url_help: '用于 OpenAI 兼容路由、自托管服务、LiteLLM、Ollama、LM Studio、vLLM 或类似端点。', onboarding_model_label: '默认模型', onboarding_workspace_help: '选择设置完成后 Hermes 在新聊天中使用的模型。', onboarding_custom_model_placeholder: 'your-model-name', onboarding_custom_model_help: '对于自定义端点,请填写服务端要求的精确模型 ID。', onboarding_notice_password_enabled: '已配置密码。仅在你想替换时输入新密码。', onboarding_notice_password_recommended: '可选,但如果你会把 UI 暴露到 localhost 之外,建议设置。', onboarding_password_label: '密码(可选)', onboarding_password_placeholder: '留空则跳过', onboarding_password_help: '密码通过现有设置 API 保存,并在服务端进行哈希处理。', onboarding_notice_finish: '你之后仍可在设置中修改这些选项。', onboarding_not_set: '未设置', onboarding_password_will_enable: '将启用', onboarding_password_will_replace: '将被替换', onboarding_password_keep_existing: '保留当前密码', onboarding_password_remains_disabled: '将保持禁用', onboarding_password_skipped: '暂时跳过', onboarding_finish_help: '完成后会在设置中写入 onboarding_completed,并进入常规应用界面。', onboarding_error_choose_workspace: '继续前请先选择工作区。', onboarding_error_choose_model: '继续前请先选择模型。', onboarding_error_provider_required: '继续前请先选择设置模式。', onboarding_error_base_url_required: '自定义端点必须填写 Base URL。', onboarding_probe_test_button: '测试连接', onboarding_probe_probing: '正在测试连接…', onboarding_probe_ok: '已连接。{n} 个模型可用。', onboarding_probe_error_generic: '无法访问配置的基础 URL。', onboarding_probe_error_invalid_url: '基础 URL 必须以 http:// 或 https:// 开头。', onboarding_probe_error_dns: '无法解析主机名。请检查 URL,或在 Docker 中使用主机 IP 而非 localhost。', onboarding_probe_error_connect_refused: '连接被拒绝 — 该地址上可能没有运行服务器。在 Docker 容器内,请使用主机 IP 而非 localhost。', onboarding_probe_error_timeout: '端点未及时响应。请确认服务器正在运行且 URL 正确。', onboarding_probe_error_http_4xx: '端点返回客户端错误。请检查认证信息和 URL 路径(通常以 /v1 结尾)。', onboarding_probe_error_http_5xx: '端点返回服务器错误。请检查 LM Studio / Ollama 服务器日志。', onboarding_probe_error_parse: '端点未返回预期的模型列表格式。请确认 URL 指向 OpenAI 兼容的 API 根路径。', onboarding_probe_error_unreachable: '无法访问配置的基础 URL。', onboarding_error_probe_failed: '无法验证配置的基础 URL。', onboarding_error_workspace_required: '必须填写工作区。', onboarding_error_model_required: '必须填写模型。', onboarding_complete: '引导完成', // panel/runtime i18n error_prefix: '错误:', default: '默认', search: '搜索', not_available: '无', never: '从未', add: '添加', add_failed: '添加失败:', remove_failed: '移除失败:', switch_failed: '切换失败:', name_required: '名称不能为空', content_required: '内容不能为空', view: '查看', dismiss: '忽略', disable: '停用', cron_no_jobs: '未找到定时任务。', cron_status_off: '关闭', cron_status_paused: '暂停', cron_status_error: '错误', cron_status_active: '已启用', cron_status_running: '执行中\u2026', cron_status_needs_attention: '需要处理', cron_attention_desc: '这个重复定时任务没有下次运行时间。调度器可能没能计算出下一次运行。', cron_attention_croniter_hint: 'Gateway 运行环境可能缺少 croniter 包。请用支持 cron 的环境重启 Gateway,然后恢复这个任务。', cron_attention_resume: '恢复并重新计算', cron_jobs_project: '定时任务', cron_attention_run_once: '立即运行一次', cron_attention_copy_diagnostics: '复制诊断信息', cron_diagnostics_copied: '定时任务诊断信息已复制', cron_next: '下次', cron_last: '上次', cron_run_now: '立即运行', cron_pause: '暂停', cron_resume: '恢复', cron_job_name_placeholder: '任务名称', cron_schedule_placeholder: '调度表达式', cron_prompt_placeholder: '提示词', cron_last_output: '最近输出', cron_expand_prompt: '展开提示词', cron_collapse_prompt: '收起提示词', cron_expand_output: '展开输出', cron_collapse_output: '收起输出', cron_mode_agent: '代理', cron_mode_script: '脚本', cron_mode_label: '模式', cron_script_job_banner: '按计划运行脚本,stdout 会投递到目标。不使用代理、提示词或技能。', cron_script_card_title: '脚本', cron_script_output: '脚本输出', cron_script_path_label: '脚本路径', cron_script_path_hint: '除非是绝对路径,否则在 ~/.hermes/scripts/ 下解析。请在服务器上编辑脚本文件以更改行为。', cron_script_badge_title: '脚本任务(无代理)', cron_workdir_label: '工作目录', cron_view_full_output: '查看完整输出', cron_all_runs: '全部运行记录', cron_hide_runs: '隐藏记录', cron_no_runs_yet: '(暂无运行记录)', cron_schedule_required_example: '必须填写调度(例如 "0 9 * * *" 或 "every 1h")', cron_schedule_required: '必须填写调度', cron_prompt_required: '必须填写提示词', cron_job_created: '任务已创建', cron_job_triggered: '任务已触发', cron_job_paused: '任务已暂停', cron_job_resumed: '任务已恢复', cron_job_updated: '任务已更新', cron_model_label: '模型覆盖', cron_model_hint: '覆盖此任务的默认模型。', cron_model_no_agent_hint: '无智能体任务直接运行已配置的脚本,模型未使用。', cron_model_use_default: '默认(使用配置/系统默认)', cron_delete_confirm_title: '删除定时任务', cron_delete_confirm_message: '此操作无法撤销。', cron_job_deleted: '任务已删除', cron_completion_status: (name, status) => `定时任务“${name}”${status}`, status_failed: '失败', status_completed: '完成', todos_no_active: '此会话暂无活动任务列表。', clear_conversation_title: '清空对话', clear_conversation_message: '要清空所有消息吗?此操作无法撤销。', clear_failed: '清空失败:', skills_no_match: '没有匹配的技能。', skill_enabled: '已启用', skill_disabled: '已禁用', skill_toggle_failed: '切换技能失败:', linked_files: '关联文件', skill_load_failed: '加载技能失败:', skill_file_load_failed: '加载文件失败:', skill_name_required: '技能名称不能为空', skill_updated: '技能已更新', skill_created: '技能已创建', memory_notes_label: '记忆(备注)', memory_saved: '记忆已保存', my_notes: '我的备注', user_profile: '用户画像', external_notes_sources: '第三方笔记', external_notes_empty: '还没有可见的笔记或知识 MCP 来源。配置 Joplin、Obsidian、Notion、llm-wiki 或其他笔记服务器后会显示在这里。', external_notes_auto_recall_hint: '自动会话召回保持不变;这个抽屉只显示已配置的来源和可用的读取/搜索工具。', external_notes_no_tools: '此来源当前没有可见的读取/搜索工具。', external_notes_tool_count: (count) => `${count} 个笔记工具可用`, external_notes_configured_hint: '此已配置来源应提供工具名称;当 WebUI 运行时暴露实时 schema 后会显示在这里。', external_notes_recent_ai: 'AI 最近使用', external_notes_auto: 'auto', external_notes_recent_ai_reason: '自动召回', external_notes_search_placeholder: '搜索笔记…', external_notes_search_empty: '搜索已配置的笔记来源后,可在这里预览笔记。', source_active: '激活', source_configured: '已配置', no_notes_yet: '暂无备注。', no_profile_yet: '暂无用户画像。', agent_soul: '智能体灵魂', no_soul_yet: '暂无灵魂定义。', workspace_choose_path: '选择工作区路径', workspace_choose_path_meta: '添加已校验路径并切换当前会话', workspace_manage: '管理工作区', workspace_manage_meta: '打开 Spaces 面板', workspace_use_title: '用于当前会话', workspace_use: '使用', workspace_add_path_placeholder: '添加工作区路径(例如 /home/user/my-project)', workspace_paths_validated_hint: '保存前会校验路径是否为已存在目录。', workspace_drag_hint: '拖动以重新排序', workspace_reorder_failed: '重新排序失败', workspace_added: '工作区已添加', workspace_renamed: '工作区已重命名', workspace_remove_confirm_title: '移除工作区', workspace_remove_confirm_message: (path) => `要移除"${path}"吗?`, workspace_removed: '工作区已移除', workspace_switch_prompt_title: '切换工作区', workspace_switch_prompt_message: '输入绝对路径以添加并切换当前会话的工作区。', workspace_switch_prompt_confirm: '切换', workspace_switch_prompt_placeholder: '/Users/you/project', workspace_not_added: '工作区未添加成功', workspace_already_saved: '工作区已存在,请在列表中选择', workspace_busy_switch: 'Agent 运行中,无法切换工作区', discard_file_edits_title: '放弃文件编辑?', discard_file_edits_message: '切换工作区将丢弃预览区未保存的文件修改。', workspace_switched_to: (name) => `已切换到 ${name}`, profiles_no_profiles: '未找到配置档。', profile_api_keys_configured: '已配置 API 密钥', profile_gateway_running: '网关运行中', profile_gateway_stopped: '网关已停止', profile_active: '当前', profile_no_configuration: '无配置', profile_skill_count: (count) => `${count} 个技能`, profile_use: '使用', profile_switch_title: '切换到此配置档', profile_delete_title: '删除此配置档', profile_default_label: '(默认)', profile_name_placeholder: '配置档名称(小写字母、a-z、0-9、连字符)', profile_clone_label: '复制当前配置档的配置', profile_model_label: '模型 / 提供商', profile_model_hint: '为这个新配置档选择已配置的提供商和模型。', profile_model_use_default: '使用当前配置档默认值', profile_base_url_placeholder: 'Base URL(可选,例如 http://localhost:11434)', profile_api_key_placeholder: 'API 密钥(可选)', manage_profiles: '管理配置档', profiles_load_failed: '加载配置档失败', profile_switched_new_conversation: (name) => `已切换到配置档:${name},并新建对话`, profile_switched: (name) => `已切换到配置档:${name}`, profile_name_rule: '仅允许小写字母、数字、连字符和下划线', profile_base_url_rule: 'Base URL 必须以 http:// 或 https:// 开头', profile_created: (name) => `配置档已创建:${name}`, profile_delete_confirm_title: (name) => `删除配置档“${name}”?`, profile_delete_confirm_message: '该配置档的所有会话、配置、技能和记忆将被永久删除。此操作无法撤销。', profile_deleted: (name) => `配置档已删除:${name}`, active_conversation_none: '当前未选择活动会话。', active_conversation_meta: (title, count) => `${title} · ${count} 条消息`, settings_unsaved_changes: '你有未保存的更改。', sign_out_failed: '退出登录失败:', disable_auth_confirm_title: '停用密码保护', disable_auth_confirm_message: '任何人都可以访问此实例。', auth_disabled: '认证已停用,密码保护已移除', disable_auth_failed: '停用认证失败:', current_password_label: '当前密码', current_password_placeholder: '输入当前密码…', current_password_required: '更改或禁用认证需要当前密码。', current_password_incorrect: '当前密码不正确。', disable_auth_typed_confirm: '输入 DISABLE AUTH 以确认', auth_status_password: '密码认证', auth_status_passkey_only: '仅通行密钥', auth_status_unauthenticated: '未认证', auth_warning_badge: '认证已禁用', auth_disabled_warning_message: '此实例无需认证即可访问。', auth_acknowledged_label: '我已查看此风险;显示较低优先级的导航警告。', auth_ack_save_failed: '更新确认状态失败:', bg_error_single: (title) => `“${title}”出现错误`, bg_error_multi: (count) => `${count} 个会话出现错误`, skill_deleted: '技能已删除', skill_delete_confirm: '删除技能 "{0}"?', skills_empty_title: '选择一个技能', skills_empty_sub: '从侧边栏中选择一个技能以查看其内容,或创建一个新技能。', skills_edit: '编辑', skills_delete: '删除', skills_back_to: '返回 {0}', tasks_empty_title: '选择一个计划任务', tasks_empty_sub: '从侧边栏中选择一个任务以查看其详情和运行记录,或创建一个新任务。', workspaces_empty_title: '选择一个空间', workspaces_empty_sub: '从侧边栏中选择一个空间以查看其文件和设置,或添加一个新空间。', profiles_empty_title: '选择一个配置文件', profiles_empty_sub: '从侧边栏中选择一个代理配置文件以查看和编辑其设置,或创建一个新配置文件。', // skill form skill_name: '名称', skill_category: '分类', skill_category_placeholder: '可选,例如 devops', skill_content: 'SKILL.md 内容', skill_content_placeholder: 'YAML frontmatter + markdown 正文', skill_rename_not_supported: '不支持重命名技能。请创建新技能并删除旧技能。', skill_metadata: '元数据', // cron form cron_name_label: '名称', cron_name_placeholder: '可选', cron_schedule_label: '计划', cron_schedule_preset_label: '预设', cron_schedule_preset_hourly: '每小时', cron_schedule_preset_daily: '每天', cron_schedule_preset_weekdays: '工作日', cron_schedule_preset_weekly: '每周', cron_schedule_preset_monthly: '每月', cron_schedule_preset_custom: '自定义', cron_schedule_hint: "循环任务请用 'every 1h' 或 Cron 表达式。像 '30m' 这样的裸时长只会运行一次。", cron_schedule_once_warning: "像 '30m' 这样的时长写法只会运行一次,并在运行后移除。要保留循环任务,请使用 'every 30m'。", cron_prompt_label: '提示词', cron_deliver_label: '输出位置', cron_deliver_local: '本地(仅保存输出)', cron_deliver_custom: '自定义推送目标', cron_profile_label: '配置档', cron_profile_server_default: '服务器默认', cron_profile_server_default_hint: '运行时使用 WebUI 服务器默认配置档。没有配置档的现有作业会保留此旧行为。', cron_toast_notifications_label: '完成提示', cron_toast_notifications_hint: '此 Cron 完成时显示 toast。关闭后,任务徽标和新运行标记仍会更新。', cron_toast_notifications_enabled: '已启用', cron_toast_notifications_disabled: '已禁用', cron_skills_label: '技能', cron_skills_placeholder: '添加技能(可选)…', cron_skills_edit_hint: '创建后无法再编辑技能列表。', cron_duplicate: '复制', cron_duplicated: '任务已复制(已暂停)', // workspace form workspace_name_label: '名称', workspace_name_placeholder: '可选的友好名称', workspace_path_label: '路径', workspace_path_required: '路径是必填项', workspace_path_readonly: '路径不可更改。只能重命名。', workspace_new_title: '新空间', // profile form profile_name_label: '名称', profile_base_url_label: '基础 URL', profile_api_key_label: 'API 密钥', // Session management and settings keys (en fallback — pending translation) session_archive: '归档会话', session_hide_external: '从列表中隐藏', session_archive_desc: '隐藏此会话,直到显示归档', session_archive_worktree_desc: '隐藏此会话;保留磁盘上的 worktree', session_hide_external_desc: '从 WebUI 列表中隐藏此导入的会话,不删除原始历史记录。', session_archive_failed: '归档失败:', session_archived: '会话已归档', session_archived_worktree: '会话已归档。Worktree 仍保留在磁盘上。', session_hidden: '已从列表中隐藏会话', session_delete: '删除会话', session_delete_desc: '永久删除此会话', session_delete_confirm: '删除此会话?', session_delete_worktree_desc: '仅删除 WebUI 会话;保留磁盘上的 worktree', session_delete_worktree_confirm: (path) => `删除此会话?位于 ${path} 的 worktree 将保留在磁盘上。`, session_deleted: '会话已删除', session_deleted_worktree: '会话已删除。Worktree 仍保留在磁盘上。', session_worktree_remove: '删除 worktree', session_worktree_remove_desc: (path) => `删除位于 ${path} 的 git worktree`, session_worktree_remove_confirm: (path) => `确定从磁盘删除 git worktree?\n\n路径:${path}\n\n整个 worktree 目录将被删除,WebUI 中的会话数据保留。`, session_worktree_remove_not_exists: (path) => `位于 ${path} 的 worktree 在磁盘上已不存在。`, session_worktree_remove_confirm_label: '删除', session_worktree_removed: 'Worktree 已删除。', session_worktree_remove_failed: '删除 worktree 失败:', session_worktree_remove_status_failed: '读取 worktree 状态失败:', session_worktree_remove_locked_by_stream: '无法删除 — 存在活跃的流式会话正在使用此 worktree。', session_worktree_remove_locked_by_terminal: '无法删除 — 存在活跃的终端会话正在使用此 worktree。', session_worktree_remove_unsafe_blocked: '请先处理本地更改或未推送提交,再删除此 worktree。', session_worktree_remove_dirty_warning: '⚠️ 此 worktree 有未提交的更改,将被永久删除。', session_worktree_remove_untracked_warning: (count) => `${count} 个未追踪文件将被永久删除。`, session_worktree_remove_ahead_warning: (ahead) => `${ahead} 个未推送的提交将丢失。`, session_duplicate: '复制会话', session_duplicate_desc: '用相同工作区和模型创建副本', session_export_html: 'Export as HTML', session_export_html_desc: 'Download this conversation as a self-contained HTML file', session_duplicate_failed: '复制失败:', session_stop_response: '停止回复', session_stop_response_desc: '取消此会话正在进行的回复', session_duplicated: '会话已复制', session_move_project: '移至项目', session_move_project_desc_has: '更改此会话的项目', session_move_project_desc_none: '为此会话分配项目', session_pin: '置顶会话', session_pin_desc: '将此会话保持在顶部', session_pin_failed: '置顶失败:', session_restore: '恢复会话', session_restore_desc: '将会话恢复到主列表', session_restored: '会话已恢复', session_unpin: '取消置顶', session_unpin_desc: '从置顶中移除', session_select_mode: '选择', session_select_mode_desc: '选择会话以批量管理', session_select_all: '全选', session_deselect_all: '取消全选', session_selected_count: '已选 {0} 个', session_batch_archive: '归档', session_batch_delete: '删除', session_batch_move: '移动到项目', session_batch_delete_confirm: '删除 {0} 个会话?', session_batch_archive_confirm: '归档 {0} 个会话?', session_batch_delete_worktree_confirm: '删除 {0} 个会话?其中 {1} 个 worktree 会话会把 worktree 目录保留在磁盘上。', session_batch_archive_worktree_confirm: '归档 {0} 个会话?其中 {1} 个 worktree 会话会把 worktree 目录保留在磁盘上。', session_no_selection: '未选择任何会话', settings_dropdown_appearance: '外观', settings_dropdown_conversation: '对话', settings_dropdown_preferences: '偏好', settings_dropdown_providers: '提供商', settings_dropdown_system: '系统', settings_heading_subtitle: '偏好设置、对话工具和系统控制。', settings_heading_title: '控制中心', settings_section_appearance_meta: '主题、强调色和视觉风格。', settings_section_appearance_title: '外观', settings_section_conversation_title: '对话', settings_section_preferences_meta: 'Hermes WebUI 的默认和 UI 行为。', settings_section_preferences_title: '偏好', settings_section_system_meta: '实例版本和访问控制。', settings_check_now: '立即检查', settings_checking: '检查中\u2026', settings_up_to_date: '已是最新 \u2713', settings_updates_available: '有 {count} 个更新可用', settings_updates_disabled: '更新检查已禁用', settings_update_check_failed: '更新检查失败', settings_update_no_git: '无法检查更新(非 git 签出)', settings_label_workspace_panel_open: '默认保持工作区面板打开', settings_desc_workspace_panel_open: '启用后,工作区/文件浏览器面板会在每次新会话时自动打开。您仍可随时手动关闭。', settings_label_workspace_todos_tab: '在工作区面板中显示待办事项标签', settings_desc_workspace_todos_tab: '启用后,工作区面板会显示待办事项标签。侧边栏的待办事项面板仍然可用。', settings_label_session_jump_buttons: '显示会话跳转按钮', settings_desc_session_jump_buttons: '阅读较长会话历史时显示悬浮的开头和结尾按钮。', settings_label_terminal_auto_expand: '输出时自动展开终端', settings_desc_terminal_auto_expand: '当运行中的命令产生新输出时,自动展开已折叠的终端面板。', settings_label_session_endless_scroll: '向上滚动时加载更早的消息', settings_desc_session_endless_scroll: '启用后,向上滚动时会自动加载更早的消息。禁用时请使用加载更早消息按钮。', settings_label_auto_scroll_follow: '自动跟随新内容', settings_desc_auto_scroll_follow: '启用后,流式输出时页面会自动滚动到底部。禁用后,你可以自由控制滚动位置,阅读答案不会被拽到底部。', settings_label_render_user_markdown: '在用户消息中渲染Markdown格式文本', settings_label_large_text_paste_as_attachment: '将粘贴的大段文本作为文件附加。', settings_desc_large_text_paste_as_attachment: '启用此功能后,粘贴的长文本将作为.md附件,而非直接填充到编辑器中。', settings_label_show_titlebar_profile: '在标题栏中显示配置文件切换器', settings_desc_show_titlebar_profile: '启用后,应用程序左上角的标题栏会出现一个配置文件切换器按钮,这样您就可以在任意标签页中切换配置文件。默认情况下此功能关闭;无论此设置如何,撰写框底部始终有一个配置文件切换器。', settings_desc_render_user_markdown: '启用后,您自己消息中的加粗、斜体、链接及其他Markdown格式会被渲染。默认关闭;无论此设置如何,代码块和数学公式始终会被渲染。', settings_label_project_quick_create: '显示每个项目的新建对话按钮', settings_desc_project_quick_create: '启用后,侧边栏中的每个项目卡片都会出现一个 + 按钮,用于在该项目中开始新对话。', settings_label_structured_code: 'JSON/YAML代码块', settings_option_structured_code_auto: '自动:长代码块以树形展示', settings_option_structured_code_on: '默认以树形', settings_option_structured_code_off: '默认以原始格式', settings_label_structured_code_auto_lines: '自动阈值行数', settings_desc_structured_code: '选择“自动”时,至少有此设定行数的JSON/YAML代码块将以树形视图打开。树形视图始终打开结构化查看器;原始视图则保留带语法高亮的文本。您仍可针对每个代码块在树形/原始视图间切换。', settings_label_worklog_details_expanded_default: '自动打开工作日志详情', settings_desc_worklog_details_expanded_default: '当启用此功能时,新的工作日志详情会自动展开,因此无需额外点击即可查看工具、思路和进度卡片。当禁用此功能时,工作日志详情默认保持折叠状态;不过每次仍可手动选择折叠或展开。', settings_label_chat_activity_display_mode: '活动显示', settings_desc_chat_activity_display_mode: '紧凑的工作日志将支持活动归纳为简洁摘要。透明流模式则将每个思考/工具使用事件按时间顺序单独列为可展开的行。', first_token_time: '首个令牌生成时间', processed_elapsed: _i18nProcessedElapsedZh, worklog_thinking: '正在思考', tool_target_skill_suffix: '技能', tool_action_label: _i18nToolActionLabelZh, tool_worklog_summary: _i18nToolWorklogSummaryZh, tool_summary_join: _i18nToolSummaryJoinCjk, done: '完成', settings_option_compact_worklog: '紧凑工作日志', settings_option_transparent_stream: '透明流模式', settings_label_tab_visibility: '侧边栏标签', settings_desc_tab_visibility: '选择在侧边栏和导航栏中显示哪些标签。聊天和设置始终可见。', settings_label_composer_controls: '聊天底部控件', settings_desc_composer_controls: '切换显示在聊天底部的控件。拖动芯片可在各自的页脚分组内重新排序。', settings_label_composer_situational_controls: '情境化底部控件', settings_desc_composer_situational_controls: '这些控件并非始终显示,具体取决于视口、模式或运行时状态。如有需要,你仍可将其关闭。', composer_control_attach: '附加', composer_control_saved_prompts: '已保存的提示词', composer_control_mic: 'Mic', composer_control_profile: '配置', composer_control_workspace: '工作区', composer_control_model: '模型', composer_control_reasoning: '推理', composer_control_context: '上下文', composer_control_voice_mode: '语音模式', composer_control_yolo: 'YOLO', composer_control_bg_badge: '背景徽章', composer_control_mobile_config: '移动设备配置', composer_control_quota_chip: '配额标识', composer_control_toolsets: '工具集', composer_control_status: '状态', open_in_browser: '在浏览器中打开', settings_section_system_title: '系统', settings_tab_appearance: '外观', settings_tab_conversation: '对话', settings_tab_preferences: '偏好', settings_tab_plugins: '插件', settings_tab_extensions: '扩展', settings_extensions_gallery_tab: '图库', settings_extensions_installed_tab: '已安装', settings_extensions_diagnostics_tab: '诊断', settings_extensions_gallery_loading: '加载图库中…', settings_extensions_gallery_empty: '注册表中未找到扩展项。', settings_extensions_gallery_error: '加载图库失败。', ext_gallery_install: '安装', ext_gallery_installing: '安装中…', ext_gallery_installed: '已安装', ext_gallery_uninstall: '卸载', ext_gallery_uninstalling: '卸载中…', ext_gallery_restart_required: '需要重启', ext_gallery_permissions_show: '权限', ext_gallery_permissions_hide: '隐藏权限', ext_gallery_permissions_empty: '未声明额外权限。', ext_gallery_version: '版本', ext_gallery_author: '作者', ext_gallery_capabilities: '能力', ext_gallery_next_step: '下一步', ext_gallery_after_install: '安装后', ext_gallery_local_component_required: '此扩展包含本地组件。安装后请启动所需的本地应用或 sidecar。', ext_gallery_local_app_label: '本地应用', ext_gallery_required_suffix: '需要 {0}', ext_gallery_sidecar_required: '需要 sidecar', ext_gallery_native_host_required: '需要原生主机', ext_gallery_open_setup_guide: '打开设置指南', ext_gallery_install_restart_required: '扩展已安装。需要重启后生效。', ext_gallery_install_followup: '扩展已安装。请查看卡片中的后续步骤。', ext_gallery_install_ok: '扩展安装成功。', ext_gallery_uninstall_ok: '扩展已卸载。', settings_tab_system: '系统', settings_tab_help: '帮助', settings_help_meta: 'Hermes WebUI的资源与支持 ', settings_help_docs_label: '文档', settings_help_docs_desc: '指南、配置参考以及完整的Hermes WebUI自述文件。', settings_help_docs_link: '打开文档', settings_help_issue_label: '遇到问题了?', settings_help_issue_desc: '在 GitHub 上搜索现有报告或提交新报告。', settings_help_issue_link: '提交 GitHub 问题', status_updated: '已更新', status_ephemeral: '临时快照 — 不会保存到对话记录。', status_no_tokens: '无令牌数据', status_profile: '配置文件', status_hermes_home: 'Hermes 主目录', status_started: '开始时间', status_tokens: '令牌', status_unknown: '未知', cmd_yolo: 'YOLO 模式切换', yolo_no_session: '无活动会话', yolo_enabled: '⚡ YOLO 模式已开启 — 将跳过所有审批', cmd_branch: '将此对话分叉到新会话', cmd_branch_usage:'/branch [名称] — 分叉会话(可选择添加名称)', branch_forked: '已创建新分叉', branch_failed: '分叉失败:', fork_from_here: '从此处分叉', forked_from: '分叉自', yolo_disabled: 'YOLO 模式已关闭', yolo_pill_label: 'YOLO', yolo_pill_title_active: 'YOLO 模式激活 — 点击关闭', approval_skip_all: '⚡ 本次会话全部跳过', approval_skip_all_title: '跳过本次会话的所有审批提示', // composer action tooltips composer_send: '发送消息', composer_queue: '消息加入队列', composer_interrupt: '中断并发送', composer_steer: '引导当前响应', composer_stop: '停止生成', composer_disabled_clarify: '请回复上方的澄清请求', composer_disabled_compression: '等待压缩完成', composer_compression_will_queue: '输入一条消息 — 它会排队并在压缩后发送。', composer_disabled_empty: '请输入消息后发送', composer_mobile_workspace: '工作区', composer_mobile_model: '模型', composer_mobile_quota: '配额', composer_mobile_reasoning: '推理', composer_mobile_context: '上下文', pdf_loading: '正在加载 PDF {0}…', pdf_too_large: 'PDF 文件过大,无法内联预览', pdf_no_pages: '无法渲染 PDF 预览', pdf_error: 'PDF 加载失败', pdf_download: '下载 PDF', pdf_truncated: '显示前 {0} 页,共 {1} 页 — 下载查看完整文档', html_loading: '正在加载 HTML 预览…', html_too_large: 'HTML 文件过大,无法内联预览', html_error: 'HTML 预览加载失败', html_open_full: '打开完整页面', html_sandbox_label: 'HTML 预览', media_audio_label: '音频', media_svg_label: '图表', media_video_label: '视频', media_download: '下载', csv_loading: '加载 CSV', csv_too_large: 'CSV 文件过大,无法内联渲染', csv_no_data: 'CSV 文件数据不足,无法渲染为表格', csv_error: '加载 CSV 文件失败', csv_header_note: '第一行显示为表格标题', excalidraw_loading: '加载图表', excalidraw_too_large: 'Excalidraw 文件过大,无法内联渲染', excalidraw_invalid: '无效的 Excalidraw 文件格式', excalidraw_error: '加载 Excalidraw 文件失败', excalidraw_label: '图表', excalidraw_download: '下载', excalidraw_empty: '空图表', excalidraw_render_error: '渲染图表失败', excalidraw_simplified: '简化 SVG 预览 — 与 Excalidraw 画布不完全相同', // TTS (#499) tts_listen: '收听', tts_not_supported: '语音合成不可用', settings_label_tts: '回复语音合成', settings_desc_tts: '在助手消息上显示扬声器按钮', settings_label_tts_auto_read: '自动朗读回复', settings_desc_tts_auto_read: '自动朗读助手回复', // Composer voice-mode pref (#1488) settings_label_voice_mode: '免提语音模式按钮', settings_desc_voice_mode: '在听写麦克风旁显示语音模式按钮(音频波形)。让您自然说话 — Hermes 会在停顿后自动发送并朗读回复。需要支持语音识别和 TTS 的浏览器。', settings_label_raw_audio: '发送原始音频而非转写为文字', settings_desc_raw_audio: '录制并将原始音频文件发送给代理,而不是先转换为文本。代理可以转写它或处理原始音频(情绪、背景噪音、自定义语音识别)。类似Telegram的语音消息行为。', voice_send_raw: '发送原始音频', voice_raw_attached: '音频已附加。按发送或输入更多内容。', settings_label_tts_voice: '语音', settings_desc_tts_voice: '选择语音合成声音', settings_label_tts_rate: '语速', settings_label_tts_pitch: '音调', settings_label_tts_engine: 'TTS 引擎', settings_desc_tts_engine: '选择语音引擎。Edge TTS 通过服务器使用微软神经语音。', checkpoint_date: '日期', checkpoint_diff_files_changed: (n) => `${n} 个文件已更改`, checkpoint_diff_no_changes: '此检查点与当前工作区之间无差异。', checkpoint_diff_title: '检查点变更', checkpoint_empty: '此工作区未找到检查点。', checkpoint_error: '加载检查点失败', checkpoint_files: '文件', checkpoint_loading: '加载检查点中…', checkpoint_message: '消息', checkpoint_restore: '恢复', checkpoint_restore_confirm_message: (ckpt) => `将工作区恢复到检查点 "${ckpt}"?此操作将用已保存版本覆盖文件。此检查点之后添加的文件不会被删除。`, checkpoint_restore_confirm_title: '恢复检查点?', checkpoint_restored: '检查点已恢复', checkpoint_title: '检查点', checkpoint_view_diff: '查看差异', insights_activity_by_day: '按日活动', insights_activity_by_hour: '按时活动', insights_cost: '预估费用', insights_daily_tokens: '每日令牌', insights_model_name: '模型', insights_model_sessions: '会话', insights_model_tokens: '令牌', insights_model_cost: '费用', insights_model_cache: '缓存', insights_cache_hit: '提示缓存命中率', insights_model_share: '占比', insights_model_health_title: '模型健康状况比较', insights_model_health_provider: '供应商', insights_model_health_replacement: '替换指南', insights_model_health_cost_per_m: '花费 / 1M', insights_no_usage_data: '暂无使用数据', insights_footer: '显示最近 {days} 天的数据', insights_skill_usage_title: '技能使用统计', insights_skill_usage_sub: '工具调用频次', insights_skill_usage_total: '总调用次数', insights_skill_usage_skills_used: '已使用技能', insights_skill_usage_no_data: '暂无技能使用数据', insights_skill_usage_no_data_hint: '在对话中使用技能后,数据将在此显示。', insights_skill_usage_footer: '数据来源于 ~/.hermes/skills/', insights_skill_usage_col_skill: '技能', insights_skill_usage_col_uses: '使用次数', insights_skill_usage_col_views: '查看次数', insights_skill_usage_col_share: '使用占比', insights_skill_usage_col_patches: '补丁', insights_input_tokens: '输入', insights_messages: '消息', insights_models: '模型', insights_no_cost: 'N/A', insights_output_tokens: '输出', insights_peak_hour: '高峰:{hour}时', insights_sessions: '会话', insights_title: '使用分析', insights_token_breakdown: '令牌分解', insights_tokens: '令牌', insights_total: '总计', settings_desc_api_redact: '自托管用户可禁用以实现透明(不推荐用于共享实例)。', settings_label_api_redact: '在 API 响应中隐藏敏感数据', voice_error: '此浏览器不支持语音功能', voice_listening: '正在聆听…', voice_mode_active: '语音模式已开启', voice_mode_off: '语音模式已关闭', voice_speaking: '正在说话…', voice_thinking: '思考中…', // Composer voice buttons (#1488) voice_dictate: '听写', voice_dictate_active: '停止听写', voice_recording_active: '停止录音', voice_mode_toggle: '语音模式', voice_mode_toggle_active: '退出语音模式', subagent_children: '子代理会话', outline_title: '大纲', outline_empty: '暂无问题。', outline_loading: '加载中…', wiki_browse: '浏览维基', wiki_search_placeholder: '搜索页面...', wiki_no_pages: '未找到维基页面', wiki_not_configured: '维基未配置', }, // Traditional Chinese (zh-Hant) 'zh-Hant': { offline_title: '連線中斷', offline_browser_detail: '瀏覽器回報此裝置目前離線。', offline_network_detail: 'Hermes 目前無法從這個瀏覽器連上。', offline_autorefresh: 'Hermes 重新連線後,系統會自動重新整理此頁面。', offline_check_now: '立即檢查', offline_checking: '正在檢查…', offline_stream_waiting: '連線中斷。等待重新整理…', _lang: 'zh-Hant', _label: '繁體中文', _speech: 'zh-TW', // boot.js cancelling: '正在取消……', cancel_failed: '取消失敗:', mic_denied: '麥克風存取遭拒。請檢查瀏覽器權限。', mic_insecure_origin: '語音輸入需要安全連線。請透過 HTTPS 或 localhost 開啟 Hermes 才能使用麥克風。', mic_no_speech: '未偵測到語音。請再試一次。', mic_network: '語音辨識無法使用。', mic_error: '語音輸入錯誤:', // Composer voice buttons (#1488 — distinct labels for dictation vs voice mode) voice_dictate: '聽寫', voice_dictate_active: '停止聽寫', voice_recording_active: '停止錄音', voice_mode_toggle: '語音模式', voice_mode_toggle_active: '離開語音模式', // Turn-based voice mode (#1333) voice_listening: '正在聆聽…', voice_speaking: '正在說話…', voice_thinking: '正在思考…', voice_error: '此瀏覽器不支援語音功能', voice_mode_active: '語音模式已開啟', voice_mode_off: '語音模式已關閉', session_imported: '已匯入對話', import_failed: '匯入失敗:', import_invalid_json: '無效的 JSON', image_pasted: '已貼上圖片:', text_pasted: '已將貼上文字附加為:', // messages.js edit_message: '編輯訊息', regenerate: '重新產生回覆', copy: '複製', copied: '已複製!', copy_failed: '複製失敗', selected_text_reply: '用所選內容回覆', selected_text_reply_title: '將所選聊天文字附加為引用脈絡', selected_text_reply_appended: '已將所選文字加入輸入框', saved_prompts_empty: '尚無已儲存的提示。', saved_prompts_save_current: '將目前輸入儲存為提示', saved_prompts_saved: '提示已儲存', saved_prompts_delete: '刪除提示', saved_prompts_empty_input: '請先輸入要儲存的提示', context_block_name_default: '上下文', context_block_flush_aria: '傳送時將包含上下文區塊', context_block_rename_hint: '點擊或按 Enter 重新命名', context_block_rename_aria: '重新命名上下文區塊', context_block_remove: '移除上下文區塊', diff_loading: '載入 diff', diff_error: '無法載入 patch 檔案', diff_too_large: 'Patch 檔案太大,無法直接顯示', tree_view: '樹狀', raw_view: '原始', parse_failed_note: '解析失敗', you: '你', mcp_servers_title: 'MCP 伺服器', mcp_servers_desc: '檢視 config.yaml 中設定的 MCP 伺服器。', mcp_no_servers: '未設定 MCP 伺服器。', mcp_add_server: '+ 新增伺服器', mcp_field_name: '伺服器名稱', mcp_transport_label: '傳輸類型', mcp_field_command: '命令', mcp_field_args: '參數(以逗號分隔)', mcp_field_url: 'URL', mcp_field_timeout: '逾時(秒)', mcp_save: '儲存', mcp_cancel: '取消', mcp_name_required: '伺服器名稱為必填。', mcp_url_required: 'HTTP 傳輸需要 URL。', mcp_command_required: 'stdio 傳輸需要命令。', mcp_saved: 'MCP 伺服器已儲存。', mcp_save_failed: '儲存 MCP 伺服器失敗。', mcp_delete_confirm_title: '刪除 MCP 伺服器', mcp_delete_confirm_message: '刪除 MCP 伺服器「{0}」?此操作無法復原。', mcp_deleted: 'MCP 伺服器已刪除。', mcp_delete_failed: '刪除 MCP 伺服器失敗。', mcp_load_failed: '載入 MCP 伺服器失敗。', mcp_restart_hint: '伺服器變更目前在此為唯讀。請編輯 config.yaml 並重新啟動 Hermes,讓變更生效。', mcp_toggle_followup: '啟用/停用控制項會等到 MCP 重新載入語意明確後再加入。', mcp_status_active: '作用中', mcp_status_configured: '已設定', mcp_status_disabled: '已停用', mcp_status_invalid_config: '設定無效', mcp_status_unknown: '未知', mcp_tool_count: '{0} 個工具', mcp_enabled_yes: '已啟用', mcp_enabled_no: '已停用', mcp_enable_server: '啟用此 MCP 伺服器', mcp_disable_server: '停用此 MCP 伺服器', mcp_enabled_toast: (name) => `MCP 伺服器「${name}」已啟用。`, mcp_disabled_toast: (name) => `MCP 伺服器「${name}」已停用。`, mcp_toggle_failed: '更新 MCP 伺服器失敗。', mcp_tools_title: 'MCP 工具', mcp_tools_desc: '搜尋作用中 MCP 伺服器中的已知工具。', mcp_tools_search_placeholder: '依名稱、伺服器或描述搜尋工具…', mcp_tools_no_tools: '作用中 runtime inventory 沒有可用的 MCP 工具。', mcp_tools_no_matches: '沒有符合搜尋條件的 MCP 工具。', mcp_tools_load_failed: '載入 MCP 工具失敗。', mcp_tools_schema_empty: '沒有 schema 參數。', mcp_tools_runtime_note: '工具清單只使用已知且作用中的 MCP runtime 資料;WebUI 不會啟動或探測伺服器。', mcp_tools_summary_no_matches: (query,total) => `沒有符合「${query}」的 MCP 工具(共 ${total} 個 MCP 工具)。`, mcp_tools_summary_none: '沒有可顯示的 MCP 工具。', mcp_tools_summary_matching: (query) => `,符合「${query}」`, mcp_tools_summary_total_note: (total) => `(共 ${total} 個 MCP 工具)`, mcp_tools_summary_showing: (start,end,filtered,searchNote,totalNote,page,pages) => `顯示第 ${start}-${end} 個,共 ${filtered} 個 MCP 工具${searchNote}${totalNote}。第 ${page} / ${pages} 頁。`, mcp_tools_page_size_prefix: '每頁顯示', mcp_tools_page_size_suffix: '筆', mcp_tools_per_page_aria: '每頁 MCP 工具數量', mcp_tools_inactive_configured_servers: (servers) => `已設定但未在此 WebUI runtime 中作用:${servers}。`, mcp_tools_pagination_label: 'MCP 工具分頁', mcp_tools_previous_page: '‹ 上一頁', mcp_tools_previous_page_aria: '上一頁 MCP 工具', mcp_tools_next_page: '下一頁 ›', mcp_tools_next_page_aria: '下一頁 MCP 工具', // PDF preview (#480) pdf_loading: '正在載入 PDF {0}…', pdf_too_large: 'PDF 太大,無法直接預覽', pdf_no_pages: 'PDF 沒有頁面', pdf_error: 'PDF 預覽轉譯失敗', pdf_download: '下載 PDF', pdf_truncated: 'Showing the first {0} of {1} pages — download for the full document', // HTML sandbox preview (#482) html_loading: '正在載入 HTML 預覽…', html_too_large: 'HTML 太大,無法直接預覽', html_error: 'HTML 預覽轉譯失敗', html_open_full: '開啟完整頁面', html_sandbox_label: 'HTML 預覽(沙盒)', thinking: '思考中', expand_all: '全部展開', collapse_all: '全部收合', edit_failed: '編輯失敗:', regen_failed: '重新產生失敗:', reconnect_active: '回覆仍在產生中。完成後要重新載入嗎?', reconnect_finished: '離開時仍有回覆正在處理。訊息可能已經更新。', // approval card approval_heading: '需要核准', approval_desc_prefix: '偵測到危險命令', approval_btn_once: '允許一次', approval_btn_once_title: '允許這一道命令(Enter)', approval_btn_session: '允許本次對話', approval_btn_session_title: '允許本次對話工作階段', approval_btn_always: '一律允許', approval_btn_always_title: '一律允許這個命令模式', approval_btn_deny: '拒絕', approval_btn_deny_title: '拒絕,不要執行這道命令', approval_responding: '正在回應……', approval_gateway_unsupported: 'Approvals require a newer gateway. Upgrade the connected Hermes gateway to enable this.', approval_gateway_unsupported_label: '不支援核准', clarify_heading: '需要釐清', clarify_hint: '請選擇一個選項,或在下方輸入回答。', clarify_other: '其他', clarify_send: '送出', clarify_input_placeholder: '輸入回答…', clarify_responding: '處理中…', session_attention_approval: (n) => n === 1 ? '核准' : `${n} 項核准`, session_attention_clarify: (n) => n === 1 ? '問題' : `${n} 個問題`, session_attention_generic: (n) => n === 1 ? '待處理' : `${n} 個事項`, session_attention_approval_title: '等待權限決定', session_attention_clarify_title: '等待回覆', session_attention_generic_title: '等待使用者操作', n_messages: (n) => `${n} 則訊息`, load_older_messages: '↑ 向上捲動或點選以載入較早的訊息', session_jump_start: '開頭', session_jump_start_label: '跳至對話開頭', session_jump_end: '結尾', session_jump_end_label: '跳至對話結尾', session_new_message: '新訊息', session_new_message_label: '有新訊息,跳至結尾', jump_to_question: '回到回答', jump_to_question_label: '跳至這則回答的開頭', queued_label: '回應後傳送', queued_count: (n) => n === 1 ? '1 已排隊' : `${n} 已排隊`, queued_cancel: '取消排隊訊息', model_unavailable: '(無法使用)', model_unavailable_title: '這個模型已不在目前的供應商清單中', provider_mismatch_warning: (m,p)=>`「${m}」可能無法搭配已設定的供應商(${p})使用。仍要送出,或在終端機執行 \`hermes model\` 來切換。`, provider_mismatch_label: '供應商不相符', gateway_auth_label: 'Gateway 驗證失敗', gateway_start: 'Start', gateway_stop: 'Stop', gateway_restart: 'Restart', gateway_start_success: 'Gateway start completed.', gateway_stop_success: 'Gateway stop completed.', gateway_restart_success: 'Gateway restart completed.', gateway_start_failed: 'Gateway start failed', gateway_stop_failed: 'Gateway stop failed', gateway_restart_failed: 'Gateway restart failed', gateway_running: 'Running', gateway_session: 'session', gateway_sessions: 'sessions', gateway_status_load_failed: 'Failed to load gateway status', model_not_found_label: '未找到模型', model_custom_label: '自訂模型 ID', model_custom_placeholder: '例如 openai/gpt-5.4', model_show_all_models: '顯示全部 {0} 個模型', model_search_placeholder: '搜尋模型…', model_search_no_results: '找不到模型', model_group_configured: '已設定', ws_search_placeholder: '搜尋工作區…', ws_no_results: '找不到工作區', workspace_new_worktree_conversation: '在 worktree 中新增對話', workspace_new_worktree_conversation_meta: '為此工作區建立隔離的 git worktree。', workspace_worktree_created: '已建立 worktree 對話', workspace_worktree_failed: '建立 worktree 失敗:', session_worktree_badge: 'Worktree', model_scope_advisory: '從下一則訊息起適用於此對話。', model_scope_toast: '從下一則訊息起適用於此對話。', // commands.js cmd_clear: '清除對話訊息', cmd_help: '列出可用命令', cmd_compress: '手動壓縮對話脈絡(用法:/compress [主題])', ctx_compress_hint: '壓縮脈絡以釋放空間 →', ctx_compress_action: '⚠ 立即壓縮以釋放脈絡', cmd_compact_alias: '舊別名:/compress', cmd_model: '切換模型(例如 /model gpt-4o)', cmd_workspace: '依名稱切換工作區', cmd_terminal: '開啟工作區 Terminal', cmd_new: '開始新的聊天對話', cmd_usage: '開啟或關閉 token 用量顯示', cmd_theme: '切換外觀(主題:system/dark/light,skin:default/ares/mono/graphite/slate/poseidon/sisyphus/charizard/sienna/catppuccin/nous/geist-contrast/zeus/verdigris)', cmd_personality: '切換 Agent 角色', cmd_skills: '列出可用的 Hermes 技能', cmd_use: '為下一則訊息強制使用技能', available_commands: '可用命令:', type_slash: '輸入 / 檢視命令', conversation_cleared: '已清除對話', command_label: '命令', context_compaction_label: '脈絡壓縮', retrieval_context_label: '已索引的脈絡', retrieval_context_preview: '較早的訊息已儲存,可透過脈絡工具擷取', preserved_task_list_label: '保留的任務清單', reference_only_label: '僅供參考', model_usage: '用法:/model ', no_model_match: '沒有符合的模型:', model_did_you_mean: (m) => `,您是否想選擇「${m}」?`, switched_to: '已切換到 ', workspace_usage: '用法:/workspace ', no_workspace_match: '沒有符合的工作區:', switched_workspace: '已切換至工作區:', workspace_switch_failed: '工作區切換失敗:', new_session: '已建立新對話', new_session_creating: '正在建立新對話…', compressing: '正在要求壓縮脈絡……', compress_running_label: '壓縮中', compress_complete_label: '壓縮完成', auto_compress_label: '自動壓縮', compress_failed_label: '壓縮失敗', focus_label: '主題', token_usage_on: 'Token 用量顯示已開啟', token_usage_off: 'Token 用量顯示已關閉', usage_cache_hit_detail: '快取:{0}% 命中(讀取 {1} / 寫入 {2})', usage_cached_percent: '{0}% 已快取', theme_usage: '用法:/theme ', theme_set: '主題:', no_active_session: '沒有使用中的對話', cmd_queue: '將訊息加入下一輪的佇列', cmd_goal: '設定或檢視持久目標', goal_evaluating_progress: '正在評估目標進度…', goal_working_toward: '正在朝目標執行…', goal_continuing_toast: '正在繼續目標…', goal_status_none: '沒有使用中的目標。請使用 /goal 設定。', goal_status_active: (turns, max_turns, goal) => `⊙ 目標(進行中,${turns}/${max_turns} 回合):${goal}`, goal_status_paused: (turns, max_turns, reason, goal) => `⏸ 目標(已暫停,${turns}/${max_turns}${reason ? `,${reason}` : ''}):${goal}`, goal_status_done: (turns, max_turns, goal) => `✓ 目標完成(${turns}/${max_turns}):${goal}`, goal_set: (turns, goal) => `⊙ 已設定目標(${turns} 回合預算):${goal}`, goal_paused: (goal) => `⏸ 目標已暫停:${goal}`, goal_resumed: (goal) => `▶ 目標已恢復:${goal}`, goal_cleared: '目標已清除。', goal_no_goal: '沒有使用中的目標。', goal_achieved: (reason) => `✓ 目標已達成:${reason}`, goal_paused_budget_exhausted: (turns, max_turns) => `⏸ 目標已暫停,已使用 ${turns}/${max_turns} 回合。使用 /goal resume 繼續,或使用 /goal clear 停止。`, goal_continuing: (turns, max_turns, reason) => `↻ 繼續目標(${turns}/${max_turns}):${reason}`, cmd_interrupt: '取消目前回合並傳送新訊息', cmd_steer: '在回合進行中注入修正,不中斷 Agent', cmd_queue_no_msg: '用法:/queue <訊息>', cmd_queue_not_busy: '沒有活動任務 — 直接傳送即可', cmd_queue_confirm: '訊息已加入佇列', cmd_interrupt_no_msg: '用法:/interrupt <訊息>', cmd_interrupt_confirm: '已中斷,正在傳送新訊息', cmd_steer_no_msg: '用法:/steer <訊息>', cmd_steer_fallback: 'Steer 不可用 — 已恢復草稿', cmd_steer_delivered: 'Steer 已送達,Agent 會在下一個工具結果中看到', steer_leftover_queued: 'Steer 已加入下一輪佇列', busy_steer_fallback: 'Steer 不可用 — 已恢復草稿', steer_fail_no_cached_agent: 'No agent cached for this session — try refreshing', steer_fail_agent_lacks_steer: 'This agent version does not support steer', steer_fail_session_not_found: 'Session not found — it may have expired', steer_fail_not_running: 'Agent is not currently running', steer_fail_stream_dead: 'The agent stream has ended', steer_fail_steer_error: 'Steer delivery failed — the agent may have finished', steer_fail_network_error: 'Network error — check your connection', steer_fail_unknown: 'Steer unavailable', steer_recovery_retry: 'Retry', steer_recovery_dismiss: 'Dismiss', busy_interrupt_confirm: '已中斷,正在傳送新訊息', settings_label_default_message_mode: '預設訊息模式', settings_desc_default_message_mode: '控制 Agent 執行時送出訊息的行為。佇列會等待;中斷會取消並重新開始;Steer 會中途注入修正且不中斷。如果 Steer 不可用,會恢復草稿,方便你選擇下一步操作。', settings_label_fade_text_effect: '文字淡入效果', settings_desc_fade_text_effect: '在助理回覆時讓新串流輸出的詞語淡入顯示。類似 OpenWebUI;為獲得最佳效能預設關閉。', settings_label_max_tokens: '最大輸出權杖數', settings_desc_max_tokens: '限制新的串流回覆可產生的輸出量。留空時使用目前設定檔中的回退值。', settings_placeholder_max_tokens_none: '無覆寫', settings_placeholder_max_tokens_fallback: '無覆寫(回退值:{0})', settings_default_message_mode_queue: '加入佇列', settings_default_message_mode_interrupt: '中斷目前回合', settings_default_message_mode_steer: 'Steer(中途修正)', settings_label_busy_placeholder_hint: 'Show busy placeholder hint', settings_desc_busy_placeholder_hint: 'Shows the composer placeholder with the current busy action while the session is running and the draft is empty.', composer_placeholder_busy_queue: 'Enter = queue | /interrupt | /background | /steer', composer_placeholder_busy_interrupt: 'Enter = interrupt | /queue | /background | /steer', composer_placeholder_busy_steer: 'Enter = steer | /queue | /background | /interrupt', slash_skill_badge: '技能', slash_skill_desc: '叫用此技能', cmd_stop: '停止目前回應', cmd_title: '取得或設定對話標題', cmd_retry: '重新送出上一則訊息', cmd_undo: '移除上一組問答', cmd_btw: '提出旁支問題(暫時)', cmd_btw_usage: '/btw — 使用對話脈絡提出旁支問題', cmd_background: '在背景執行提示詞', cmd_background_usage: '/background — 平行執行,不阻塞目前工作', cmd_branch: '將此對話分支成新的對話', cmd_branch_usage: '/branch [name] — 分支對話(可選擇命名)', branch_forked: '已分支成新的對話', branch_failed: '分支失敗:', fork_from_here: '從這裡分支', forked_from: '分支來源', subagent_children: '子 Agent 對話', btw_asking: '正在詢問旁支問題…', btw_label: '旁支問題,不會寫入記錄', btw_done: '旁支問題已回答', btw_no_answer: '未收到回答。', btw_failed: '旁支問題失敗:', bg_running: '正在背景執行…', bg_complete: '背景任務已完成', bg_label: '背景結果:', bg_no_answer: '(沒有回答)', bg_failed: '背景任務失敗:', undo_exchange: '復原上一組問答', cmd_status: '顯示對話資訊', cmd_voice: '切換麥克風輸入', stream_stopped: '回應已停止。', no_active_task: '沒有可停止的使用中任務。', cancel_unavailable: '無法取消。', retry_failed: '重試失敗:', undo_failed: '復原失敗:', undid_n_messages: '已移除', undid_messages_suffix: '則訊息。', status_heading: '對話狀態', status_session_id: '對話 ID', status_title: '標題', status_model: '模型', status_provider: '供應商', status_workspace: '工作區', status_personality: '角色', status_messages: '訊息', status_agent_running: 'Agent 執行中', status_profile: '個人資料', status_hermes_home: 'Hermes 主目錄', status_started: '開始時間', status_updated: '已更新', status_tokens: 'Token', status_ephemeral: '暫時快照,未儲存到對話記錄。', status_no_tokens: '未使用 Token', status_unknown: '未知', status_yes: '是', status_no: '否', status_load_failed: '載入狀態失敗:', title_current: '目前標題', title_change_hint: '使用 `/title ` 重新命名。', title_set: '標題已設定為', cmd_webui_only_session: '此命令無法用於從 CLI 匯入的對話。', cmd_voice_use_mic: '請點選輸入框中的麥克風按鈕。', usage_heading: 'Token 用量', usage_default_model: '預設', usage_unknown: '未知', usage_input_tokens: '輸入 Token', usage_output_tokens: '輸出 Token', usage_total: 'Token 總計', usage_estimated_cost: '估計成本', usage_settings_tip: '注意:成本估計僅供參考。', usage_load_failed: '載入用量失敗:', usage_personality_none: '無', // Session toolsets (#493) session_toolsets: '對話工具集', session_toolsets_desc: '使用目前設定檔預設工具,或為此對話選擇自訂工具集', session_toolsets_global: '目前設定檔預設', session_toolsets_profile_defaults: '目前設定檔預設', session_toolsets_custom: '自訂覆寫', session_toolsets_use_profile_defaults: '使用目前設定檔預設', session_toolsets_configured_servers: '已設定 MCP 伺服器', session_toolsets_loading_servers: '正在載入已設定伺服器...', session_toolsets_no_configured_servers: '沒有已設定的 MCP 伺服器', session_toolsets_placeholder: 'tool1, tool2, …', session_toolsets_apply: '套用', session_toolsets_clear: '使用預設', session_toolsets_applied: '工具集已更新', session_toolsets_cleared: '正在使用目前設定檔預設', session_toolsets_failed: '更新工具集失敗:', untitled: '未命名', no_personalities: '找不到角色(可新增至 ~/.hermes/personalities/)', available_personalities: '可用角色:', personality_switch_hint: '\n\n使用 `/personality ` 切換,或使用 `/personality none` 清除。', personalities_load_failed: '載入角色失敗', personality_cleared: '已清除角色', personality_set: '角色:', failed_colon: '失敗:', // ui.js no_workspace: '沒有工作區', terminal_open_title: '開啟工作區 Terminal', terminal_no_workspace_title: '請先選擇工作區再開啟 Terminal', terminal_title: 'Terminal', terminal_clear: '清空', terminal_copy_output: '複製輸出', terminal_restart: '重新啟動', terminal_collapse: '收合', terminal_expand: '展開', terminal_close: '關閉', terminal_input_placeholder: '輸入命令……', terminal_start_failed: 'Terminal 啟動失敗:', terminal_input_failed: 'Terminal 輸入失敗:', terminal_copy_failed: '複製失敗:', terminal_error: 'Terminal 錯誤', terminal_remote_backend_unsupported: '嵌入式 Terminal 僅支援本機終端後端。', workspace_empty_no_path: '未選擇工作區。請在 設定 → 工作區 中設定工作區以瀏覽檔案。', workspace_empty_dir: '此工作區為空。', workspace_show_hidden_files: '顯示隱藏檔案', workspace_show_hidden_files_desc: '在檔案樹中包含 .DS_Store、.git、node_modules 與其他隱藏/系統檔案。', workspace_hidden_files_visible: '顯示隱藏檔', workspace_hidden_files_visible_title: '隱藏檔已顯示,點選可檢視選項', workspace_options: '工作區選項', // workspace.js unsaved_confirm: '預覽中有未儲存的變更。要捨棄並前往其他位置嗎?', save: '儲存', edit: '編輯', save_title: '儲存變更', edit_title: '編輯這個檔案', saved: '已儲存', save_failed: '儲存失敗:', image_load_failed: '無法載入圖片', file_open_failed: '無法開啟檔案', downloading: (name) => `正在下載 ${name}…`, double_click_rename: '按兩下即可重新命名', symlink_link_to: 'Symlink → {target}', external_link_open_confirm: 'This symlink points outside the workspace. Open it in a read-only external view for this browser session?', external_link_read_only: 'This external view is read-only. Create, rename, move, delete, upload, reveal, and editor actions stay disabled here.', external_link_grant_expired: 'This external view expired. Reopen the escape-target symlink to authorize it again.', session_rename_failed_no_row: '無法開始重新命名,找不到資料列。', renamed_to: '已重新命名為 ', rename_failed: '重新命名失敗:', moved_to: '已移動到 ', move_failed: '移動失敗:', delete_title: '刪除', delete_confirm: (name) => `要刪除 ${name} 嗎?`, delete_dir_confirm: (name) => `刪除資料夾「${name}」及其所有內容?`, rename_title: '重新命名', rename_prompt: '新名稱:', deleted: '已刪除 ', delete_failed: '刪除失敗:', reveal_in_finder: '在檔案管理員中顯示', reveal_failed: '顯示失敗:', copy_file_path: '複製檔案路徑', open_in_vscode: '在 VS Code 中開啟', open_in_vscode_failed: '在 VS Code 中開啟失敗:', download_folder: '下載資料夾', path_copied: '檔案路徑已複製到剪貼簿', path_copy_failed: '複製路徑失敗:', session_rename: '重新命名對話', session_rename_desc: '編輯此對話的標題', session_title_regenerate: '重新產生標題', session_title_regenerate_desc: '請 Hermes 依對話產生新的標題', session_title_regenerating: '正在重新產生標題…', session_title_regenerated: (title) => `標題已重新產生:${title}`, session_title_regenerate_failed: '重新產生標題失敗:', session_copy_link: '複製對話連結', session_copy_link_desc: '複製此對話的直接連結', session_link_copied: '對話連結已複製到剪貼簿', session_link_copy_failed: '無法複製對話連結:', new_file_prompt: '新檔案名稱(例如 notes.md):', new_file: '新建檔案', new_folder: '新建資料夾', workspace_root: '工作區根目錄', new_file_prompt_title: '在 {0} 中新建檔案名稱:', new_folder_prompt_title: '在 {0} 中新建資料夾名稱:', created: '已建立 ', create_failed: '建立失敗:', new_folder_prompt: '新資料夾名稱:', folder_created: '已建立資料夾 ', folder_create_failed: '建立資料夾失敗:', workspace_auto_create_folder: '資料夾不存在時自動建立', folder_add_as_space_btn: '新增為空間', folder_add_as_space_msg: '要將此資料夾新增為工作區清單中的新空間嗎?', folder_add_as_space_title: '要新增為空間嗎?', remove_title: '移除', empty_dir: '(空)', upload_failed: '上傳失敗:', upload_too_large: (maxMb, fileMb) => `檔案過大(${fileMb} MB)。最大上傳大小為 ${maxMb} MB。`, uploading: '上傳中…', uploaded: '已上傳', all_uploads_failed: (n) => `全部 ${n} 個上傳都失敗`, archive_extracted: (n, c) => `從 ${c} 個壓縮包中解壓縮了 ${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_hide_external: '從清單中隱藏', session_restore: '還原對話', session_archive_desc: '隱藏此對話,直到開啟顯示封存', session_archive_worktree_desc: '隱藏此對話;保留磁碟上的 worktree', session_hide_external_desc: '從 WebUI 清單中隱藏此匯入的對話,不刪除原始歷史記錄。', session_restore_desc: '將此對話移回主清單', session_archived: '對話已封存', session_archived_worktree: '對話已封存。Worktree 仍保留在磁碟上。', session_hidden: '已從清單中隱藏對話', session_restored: '對話已還原', session_archive_failed: '封存失敗:', session_duplicate: '複製對話', session_duplicate_desc: '建立一個相同工作區與模型的副本', session_export_html: 'Export as HTML', session_export_html_desc: 'Download this conversation as a self-contained HTML file', session_duplicated: '對話已複製', session_duplicate_failed: '複製失敗:', session_stop_response: '停止回應', session_stop_response_desc: '取消此對話中正在執行的回應', session_delete: '刪除對話', session_delete_desc: '永久移除這個對話', session_delete_confirm: '刪除此對話?', session_delete_worktree_desc: '只刪除 WebUI 對話;保留磁碟上的 worktree', session_delete_worktree_confirm: (path) => `刪除此對話?位於 ${path} 的 worktree 將保留在磁碟上。`, session_deleted: '對話已刪除', session_deleted_worktree: '對話已刪除。Worktree 仍保留在磁碟上。', session_worktree_remove: '刪除 worktree', session_worktree_remove_desc: (path) => `刪除位於 ${path} 的 git worktree`, session_worktree_remove_confirm: (path) => `確定從磁碟刪除 git worktree?\n\n路徑:${path}\n\n整個 worktree 目錄將被刪除,WebUI 中的工作階段資料保留。`, session_worktree_remove_not_exists: (path) => `位於 ${path} 的 worktree 在磁碟上已不存在。`, session_worktree_remove_confirm_label: '刪除', session_worktree_removed: 'Worktree 已刪除。', session_worktree_remove_failed: '刪除 worktree 失敗:', session_worktree_remove_status_failed: '讀取 worktree 狀態失敗:', session_worktree_remove_locked_by_stream: '無法刪除 — 存在活躍的串流工作階段正在使用此 worktree。', session_worktree_remove_locked_by_terminal: '無法刪除 — 存在活躍的終端機工作階段正在使用此 worktree。', session_worktree_remove_unsafe_blocked: '請先處理本機變更或未推送提交,再刪除此 worktree。', session_worktree_remove_dirty_warning: '⚠️ 此 worktree 有未提交的變更,將被永久刪除。', session_worktree_remove_untracked_warning: (count) => `${count} 個未追蹤檔案將被永久刪除。`, session_worktree_remove_ahead_warning: (ahead) => `${ahead} 個未推送的提交會遺失。`, session_select_mode: '選取', session_select_mode_desc: '選取對話以批次管理', session_select_all: '全選', session_deselect_all: '取消全選', session_selected_count: '已選 {0} 個', session_batch_archive: '封存', session_batch_delete: '刪除', session_batch_move: '移至專案', session_batch_delete_confirm: '要刪除 {0} 個對話嗎?', session_batch_archive_confirm: '要封存 {0} 個對話嗎?', session_batch_delete_worktree_confirm: '要刪除 {0} 個對話嗎?其中 {1} 個 worktree 對話會把 worktree 目錄保留在磁碟上。', session_batch_archive_worktree_confirm: '要封存 {0} 個對話嗎?其中 {1} 個 worktree 對話會把 worktree 目錄保留在磁碟上。', session_no_selection: '未選取任何對話', // 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_check_now: '立即檢查', settings_checking: '檢查中…', settings_up_to_date: '已是最新 ✓', settings_updates_available: '有 {count} 個更新可用', settings_updates_disabled: '更新檢查已停用', settings_update_check_failed: '更新檢查失敗', settings_update_no_git: '無法檢查更新(非 git 簽出)', settings_label_workspace_panel_open: '預設保持工作區面板開啟', settings_desc_workspace_panel_open: '啟用後,工作區/檔案瀏覽器面板會在每次新對話時自動開啟。仍可隨時手動關閉。', settings_label_workspace_todos_tab: '在工作區面板顯示待辦事項標籤', settings_desc_workspace_todos_tab: '啟用後,工作區面板會顯示待辦事項標籤。側邊欄的待辦事項面板仍然可用。', settings_label_session_jump_buttons: '顯示對話跳轉按鈕', settings_desc_session_jump_buttons: '閱讀較長對話記錄時,顯示浮動的開頭與結尾按鈕。', settings_label_terminal_auto_expand: '輸出時自動展開終端', settings_desc_terminal_auto_expand: '當運行中的命令產生新輸出時,自動展開已折疊的終端面板。', settings_label_session_endless_scroll: '向上捲動時載入較早訊息', settings_desc_session_endless_scroll: '啟用後,向上捲動時會自動載入較早訊息。停用時請使用載入較早訊息按鈕。', settings_label_auto_scroll_follow: '自動跟隨新內容', settings_desc_auto_scroll_follow: '啟用後,串流輸出時畫面會自動捲動到底部。停用後,你可以自由控制捲動位置。', settings_label_render_user_markdown: 'Render markdown in user messages', settings_label_show_titlebar_profile: '在標題列顯示設定檔切換器', settings_desc_show_titlebar_profile: '啟用後,左上角的應用程式標題列會出現設定檔切換按鈕,讓你在任何分頁都能切換設定檔。預設關閉;無論此設定為何,輸入列底部一律保留設定檔切換器。', settings_desc_render_user_markdown: 'When enabled, bold, italic, links, and other markdown in your own messages are rendered. Off by default; fenced code blocks and math always render regardless of this setting.', settings_label_large_text_paste_as_attachment: 'Attach large pasted text as file', settings_desc_large_text_paste_as_attachment: 'When enabled, long pasted text becomes a .md attachment instead of filling the composer.', settings_label_project_quick_create: 'Show per-project new-conversation buttons', settings_desc_project_quick_create: 'When enabled, each project chip in the sidebar gets a + button to start a conversation in that project.', settings_label_structured_code: 'JSON/YAML code blocks', settings_option_structured_code_auto: 'Auto: Tree for long blocks', settings_option_structured_code_on: 'Tree by default', settings_option_structured_code_off: 'Raw by default', settings_label_structured_code_auto_lines: 'Auto threshold lines', settings_desc_structured_code: 'When Auto is selected, JSON/YAML blocks with at least this many lines open in Tree view. Tree always opens the structured viewer; Raw keeps the syntax-highlighted text. You can still switch Tree/Raw on each block.', settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_chat_activity_display_mode: 'Activity display', settings_desc_chat_activity_display_mode: 'Compact Worklog groups supporting activity into a quiet summary. Transparent Stream keeps each thinking/tool event as its own chronological expandable row.', first_token_time: 'Time to first token', processed_elapsed: _i18nProcessedElapsedZhHant, worklog_thinking: '正在思考', tool_target_skill_suffix: '技能', tool_action_label: _i18nToolActionLabelZhHant, tool_worklog_summary: _i18nToolWorklogSummaryZhHant, tool_summary_join: _i18nToolSummaryJoinCjk, done: 'Done', settings_option_compact_worklog: 'Compact Worklog', settings_option_transparent_stream: 'Transparent Stream', settings_label_tab_visibility: '側邊欄標籤', settings_desc_tab_visibility: '選擇在側邊欄和導覽列中顯示哪些標籤。聊天和設定始終可見。', settings_label_composer_controls: 'Chat footer controls', settings_desc_composer_controls: 'Toggle which controls are shown in the chat footer. Drag chips to reorder each footer group.', settings_label_composer_situational_controls: 'Situational footer controls', settings_desc_composer_situational_controls: 'These controls do not always appear, depending on viewport, mode, or runtime state. You can still toggle them off if needed.', composer_control_attach: 'Attach', composer_control_saved_prompts: 'Saved prompts', composer_control_mic: 'Mic', composer_control_profile: 'Profile', composer_control_workspace: 'Workspace', composer_control_model: 'Model', composer_control_reasoning: 'Reasoning', composer_control_context: 'Context', composer_control_voice_mode: 'Voice mode', composer_control_yolo: 'YOLO', composer_control_bg_badge: 'Background badge', composer_control_mobile_config: 'Mobile config', composer_control_quota_chip: 'Quota chip', composer_control_toolsets: 'Toolsets', composer_control_status: 'Status', open_in_browser: '在瀏覽器中開啟', 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_plugins: '外掛', settings_tab_extensions: '擴充功能', settings_extensions_gallery_tab: 'Gallery', settings_extensions_installed_tab: 'Installed', settings_extensions_diagnostics_tab: 'Diagnostics', settings_extensions_gallery_loading: 'Loading gallery…', settings_extensions_gallery_empty: 'No extensions found in the registry.', settings_extensions_gallery_error: 'Failed to load gallery.', ext_gallery_install: 'Install', ext_gallery_installing: 'Installing…', ext_gallery_installed: 'Installed', ext_gallery_uninstall: 'Uninstall', ext_gallery_uninstalling: 'Uninstalling…', ext_gallery_restart_required: 'Restart required', ext_gallery_permissions_show: 'Permissions', ext_gallery_permissions_hide: 'Hide permissions', ext_gallery_permissions_empty: '未宣告額外權限。', ext_gallery_version: 'Version', ext_gallery_author: 'Author', ext_gallery_capabilities: 'Capabilities', ext_gallery_next_step: '下一步', ext_gallery_after_install: '安裝後', ext_gallery_local_component_required: '此擴充功能包含本機元件。安裝後請啟動所需的本機應用程式或 sidecar。', ext_gallery_local_app_label: '本機應用程式', ext_gallery_required_suffix: '需要 {0}', ext_gallery_sidecar_required: '需要 sidecar', ext_gallery_native_host_required: '需要原生主機', ext_gallery_open_setup_guide: '開啟設定指南', ext_gallery_install_restart_required: '擴充功能已安裝。需要重新啟動後套用。', ext_gallery_install_followup: '擴充功能已安裝。請查看卡片中的後續步驟。', ext_gallery_install_ok: 'Extension installed successfully.', ext_gallery_uninstall_ok: 'Extension uninstalled.', settings_plugins_title: '外掛', plugins_enable_toggle: '啟用', settings_plugins_meta: '檢視已安裝的 Hermes 外掛及其註冊的生命週期掛鉤。此面板為唯讀。', settings_plugins_empty: '目前沒有可見的 Hermes 外掛。透過 Hermes CLI/設定檔安裝或啟用外掛後即可在此檢視。', plugins_unnamed: '未命名外掛', plugins_no_description: '未提供描述。', plugins_no_hooks: '未註冊生命週期掛鉤', plugins_registered_hooks: '已註冊的掛鉤', plugins_enabled: '已啟用', plugins_disabled: '已停用', plugins_active_provider: '啟用中(提供者)', plugins_provider_no_hooks: '供應商外掛,沒有 Agent 可見的掛鉤', plugins_load_failed: '載入外掛失敗:', settings_tab_system: '系統', settings_tab_help: 'Help', settings_help_meta: 'Resources and support for Hermes WebUI.', settings_help_docs_label: 'Documentation', settings_help_docs_desc: 'Guides, configuration reference, and the full Hermes WebUI README.', settings_help_docs_link: 'Open Documentation', settings_help_issue_label: 'Having an issue?', settings_help_issue_desc: 'Search existing reports or open a new one on GitHub.', settings_help_issue_link: 'Open GitHub Issues', settings_title: '設定', settings_search_placeholder: '搜尋設定…', settings_search_no_results: '找不到設定。', settings_save_btn: '儲存設定', settings_label_model: '預設模型', settings_desc_model: '用於新對話。現有對話會保留各自選定的模型。', settings_main_advanced_button_aria: 'Advanced options for main model', settings_main_advanced_title: 'Main model options', settings_main_advanced_subtitle: 'Advanced config for the default chat model.', settings_main_advanced_saved: 'Main model options saved', settings_main_advanced_save_failed: 'Failed to save main model options', settings_main_advanced_service_tier: 'Service tier', settings_main_advanced_service_tier_desc: 'Optional request setting for OpenAI-family providers.', settings_main_advanced_service_tier_default: 'Default / off', settings_main_advanced_service_tier_priority: 'Priority (fast)', settings_label_auxiliary_models: '輔助模型', settings_desc_auxiliary_models: '視覺分析、脈絡壓縮、標題產生等輔助任務的路由。「自動」表示使用主要聊天模型。', settings_btn_reset_aux_models: '全部重置為自動', settings_btn_apply_aux_models: '應用變更', settings_aux_provider_auto: '使用主模型', settings_aux_model_auto: '自動(使用供應商預設值)', settings_aux_model_custom: '自訂模型…', settings_aux_model_custom_prompt: '輸入模型 ID:', settings_aux_loading: '正在載入輔助模型…', settings_aux_load_failed: '無法載入輔助模型設定,請確保 Agent API 可用。', settings_aux_reset_confirm_title: '重置輔助模型?', settings_aux_reset_confirm_msg: '這將把所有輔助任務設定為自動(使用主模型)。', settings_aux_reset_done: '輔助模型已重置為自動', settings_aux_save_failed: '輔助模型儲存失敗', settings_aux_saved: '輔助模型已更新', settings_aux_no_changes: '沒有需要應用的變更', settings_aux_task_vision: 'Vision', settings_aux_task_vision_desc: 'image/screenshot analysis', settings_aux_task_compression: 'Compression', settings_aux_task_compression_desc: 'context summarization', settings_aux_task_web_extract: 'Web extract', settings_aux_task_web_extract_desc: 'web page summarization', settings_aux_task_session_search: 'Session search', settings_aux_task_session_search_desc: 'past-conversation recall', settings_aux_task_approval: 'Approval', settings_aux_task_approval_desc: 'smart command approval', settings_aux_task_mcp: 'MCP', settings_aux_task_mcp_desc: 'MCP tool reasoning', settings_aux_task_title_generation: 'Title generation', settings_aux_task_title_generation_desc: 'session titles', settings_aux_task_skills_hub: 'Skills hub', settings_aux_task_skills_hub_desc: 'skills search/install', settings_aux_task_curator: 'Curator', settings_aux_task_curator_desc: 'skill-usage review pass', settings_aux_task_kanban_decomposer: 'Kanban decomposer', settings_aux_task_kanban_decomposer_desc: 'task decomposition', settings_aux_task_profile_describer: 'Profile describer', settings_aux_task_profile_describer_desc: 'profile summaries', settings_aux_task_triage_specifier: 'Triage specifier', settings_aux_task_triage_specifier_desc: 'issue/task triage specs', settings_aux_advanced_button_title: 'Advanced options', settings_aux_advanced_button_aria: 'Advanced options for {task}', settings_aux_advanced_title: '{task} options', settings_aux_advanced_subtitle: 'Advanced config for auxiliary.', settings_aux_advanced_save: 'Save options', settings_aux_advanced_base_url: 'Base URL', settings_aux_advanced_base_url_desc: 'Optional provider endpoint override.', settings_aux_advanced_timeout: 'Timeout seconds', settings_aux_advanced_timeout_desc: 'Request timeout for this auxiliary task. Blank uses Hermes default.', settings_aux_advanced_download_timeout: 'Download timeout seconds', settings_aux_advanced_download_timeout_desc: 'Only relevant for tasks that download media/content, e.g. vision. Blank uses default.', settings_aux_advanced_max_concurrency: 'Max concurrency', settings_aux_advanced_max_concurrency_desc: 'Optional per-task concurrency limit. Blank uses default.', settings_aux_advanced_extra_body: 'Extra body JSON', settings_aux_advanced_extra_body_desc: 'Optional JSON object merged into the model request body.', settings_aux_advanced_api_key: 'API key override', settings_aux_advanced_api_key_set_hint: 'API key is set. Leave blank to keep it, or use clear to remove it.', settings_aux_advanced_api_key_empty_hint: 'Leave blank to use provider/default credentials.', settings_aux_advanced_api_key_clear: 'Clear existing API key override', settings_aux_advanced_extra_body_invalid_json: 'Extra body must be valid JSON', settings_aux_advanced_extra_body_object_required: 'Extra body must be a JSON object', settings_aux_advanced_saved: 'Auxiliary options saved', settings_aux_advanced_save_failed: 'Failed to save auxiliary options', settings_label_send_key: '送出按鍵', settings_label_theme: '主題', settings_label_skin: '佈景', settings_label_font_size: '字型大小', font_size_small: '小', font_size_default: '預設', font_size_large: '大', font_size_xlarge: '超大', settings_autosave_saving: '儲存中…', settings_autosave_saved: '已儲存', settings_autosave_failed: '儲存失敗', settings_autosave_retry: '重試', settings_label_language: '語言', settings_label_quota_chip: '在編輯器中顯示供應商配額標籤', settings_desc_quota_chip: '在編輯器底部顯示剩餘配額指示器(如 OpenRouter 點數餘額)。預設關閉。啟用時僅在寬螢幕(≥1400px)顯示,以保持筆記型電腦和標準桌面螢幕上編輯器的整潔。', settings_label_conversation_outline: '顯示對話大綱', settings_desc_conversation_outline: '顯示僅限桌面的跳轉清單,用於跳轉到目前對話中的使用者問題。預設關閉。', settings_label_hide_suggestions: '隱藏新聊天建議', settings_desc_hide_suggestions: '隱藏空白新聊天畫面上的三個預設建議按鈕,避免誤觸。', settings_label_virtualize_transcript: 'Virtualize long transcripts', settings_desc_virtualize_transcript: "Render only the visible portion of very long chat transcripts (over 80 messages) for smoother scrolling. Turn this off if you see any rendering or scroll issues, or want the browser's Find (Ctrl+F) to match the whole conversation \u2014 the full transcript will render at once.", settings_label_token_usage: '顯示 token 用量', settings_label_token_speed: '顯示 token 速度 (TPS)', settings_desc_token_speed: '在串流期間和回應完成後,在助理訊息標題中顯示每秒 token 數。預設關閉。', settings_label_sidebar_density: '側邊欄密度', cmd_reasoning: '切換思考內容可見性(顯示/隱藏)、設定推理強度,或檢查目前狀態', settings_label_external_sessions: '顯示外部對話', settings_label_claude_code_sessions: 'Show Claude Code sessions', settings_label_cron_sessions: 'Show cron sessions', settings_label_webhook_sessions: 'Show webhook sessions', settings_label_previous_messaging_sessions: '顯示以前的訊息對話', settings_label_sync_insights: '同步至 insights', settings_label_check_updates: '檢查更新', settings_label_ignore_agent_updates: '忽略 Agent 更新', settings_label_whats_new_summary: '使用 AI 摘要新版內容', settings_label_bot_name: '助理名稱', settings_label_password: '存取密碼', settings_label_pinned_limit: '置頂對話數量限制', settings_desc_pinned_limit: '側邊欄中可置頂的活躍對話的最大數量。預設為 3。', settings_label_dashboard_mode: '官方 Hermes 儀表板', settings_desc_dashboard_mode: '當官方 hermes 儀表板可存取時,在導航欄顯示連結。公開反向代理 URL 僅作為瀏覽器連結儲存,不會由伺服器探測。', settings_dashboard_mode_auto: '自動偵測', settings_dashboard_mode_always: '總是顯示', settings_dashboard_mode_never: '從不顯示', settings_dashboard_save: '儲存儀表板連結設定', settings_label_gateway_status: '閘道狀態', settings_desc_gateway_status: 'Hermes 閘道狀態(Telegram、Discord、Slack 等)', gateway_not_configured: '閘道未配置', gateway_metadata_stale: '閘道元資料已過時', gateway_endpoint_unreachable: '閘道端點無法存取', gateway_not_running: '閘道未執行', gateway_running_label: '執行中', gateway_last_active: '最後活躍時間:', gateway_session_count: (n) => `${n} 個對話`, gateway_load_failed: '無法載入閘道狀態', settings_saved: '設定已儲存', settings_save_failed: '儲存失敗:', settings_load_failed: '載入設定失敗:', settings_saved_pw: '設定已儲存,密碼保護已啟用,此瀏覽器會維持登入狀態', settings_saved_pw_updated: '設定已儲存,密碼已更新', // login page (used server-side via /api/i18n/login endpoint) login_title: '登入', login_subtitle: '輸入密碼繼續使用', login_placeholder: '密碼', login_btn: '登入', login_invalid_pw: '密碼錯誤', login_conn_failed: '連線失敗', dialog_confirm_title: '確認操作', dialog_prompt_title: '輸入值', dialog_confirm_btn: '確認', discard: '捨棄', clear: '清除', create: '建立', remove: '移除', project_name_prompt: '專案名稱:', // Sidebar & Tabs tab_chat: '聊天', tab_tasks: '任務', tab_skills: '技能', tab_memory: '記憶', tab_workspaces: '工作區', tab_profiles: '設定檔', tab_kanban: '看板', kanban_board: '看板', kanban_visible_tasks: '{0} 個可見任務', kanban_search_tasks: '搜尋任務', kanban_all_assignees: '所有指派對象', kanban_all_tenants: '所有租戶', kanban_include_archived: '包含已封存', kanban_no_matching_tasks: '沒有符合的任務', kanban_no_data: '沒有看板資料', kanban_work_queue_hint: '這是 Hermes Agent 的工作佇列。建立或分類任務、指派對象、移至 Ready,然後讓調度器認領。', kanban_tasks_hidden_by_filters: 'Tasks hidden by filters', kanban_clear_filters: 'Clear filters', kanban_unavailable: '看板無法使用', kanban_read_only: '唯讀檢視', kanban_empty: '空', kanban_task: '任務', kanban_no_description: '無描述', kanban_refresh: '重新整理', kanban_status_triage: '分類', kanban_status_todo: '待辦', kanban_status_ready: '準備就緒', kanban_status_running: '執行中', kanban_status_blocked: '已封鎖', kanban_status_done: '完成', kanban_comments_count: '留言 ({0})', kanban_events_count: '事件 ({0})', kanban_links: '連結', kanban_parents: '父任務', kanban_children: '子任務', kanban_runs_count: '執行 ({0})', kanban_no_comments: '沒有留言', kanban_no_events: '沒有事件', kanban_no_runs: '沒有執行紀錄', kanban_title: '標題', kanban_description: '描述', kanban_description_placeholder: '選填 — 需要完成的事項、驗收標準、連結', kanban_status: '狀態', kanban_assignee: '指派對象', kanban_assignee_placeholder: '選填 — 個人資料或名稱', kanban_tenant: '租戶', kanban_tenant_placeholder: '選填,專案或團隊 slug', kanban_priority: '優先順序', kanban_priority_hint: '數字越大越先執行。預設為 0。', kanban_title_required: '標題為必填。', kanban_new_task: '新任務', kanban_view_lanes: '按設定檔分泳道', kanban_view_consolidated: '整合檢視', kanban_view_lanes_saved: 'Kanban 檢視:按設定檔分泳道', kanban_view_consolidated_saved: 'Kanban 檢視:已整合', kanban_view_update_failed: '無法更新 Kanban 檢視:', kanban_edit_task: '編輯任務', kanban_status_original_hint: '實際狀態:{0}。此對話框僅支援編輯 Triage/Todo/Ready。', kanban_run_dispatcher: '執行調度器', kanban_run_dispatcher_confirm: '將認領此看板的 Ready 任務並產生工作子程序(每次點選最多 8 個)。是否繼續?', kanban_assignee_profiles_label: 'Hermes 設定檔', kanban_assignee_other_label: '其他(CLI 通道 / 已刪除的設定檔)', kanban_assignee_unassigned: '— 未指派(不會自動執行)—', kanban_ready_needs_assignee: '已選擇「未指派」+「Ready」。調度器將跳過此任務。再次送出以確認,或選擇一個設定檔。', kanban_dispatch_preview_prefix: '預覽:', kanban_dispatch_run_prefix: '已調度:', kanban_dispatch_spawned: '已啟動', kanban_dispatch_promoted: '已提升', kanban_dispatch_reclaimed: '已收回', kanban_dispatch_skipped_unassigned: '跳過(未指派)', kanban_dispatch_skipped_nonspawnable: '跳過(未知設定檔)', kanban_dispatch_auto_blocked: '自動封鎖', kanban_dispatch_timed_out: '逾時', kanban_dispatch_crashed: '當機', kanban_add_comment: '新增留言', kanban_workspace_kind: 'Workspace kind', kanban_workspace_path: 'Workspace path', kanban_workspace_path_placeholder: 'Path to workspace', kanban_workspace_scratch: 'Scratch', kanban_workspace_worktree: 'Worktree', kanban_workspace_dir: 'Directory', kanban_workspace_path_required: 'Workspace path is required for non-scratch workspaces.', kanban_skills: 'Skills', kanban_skills_placeholder: 'Comma-separated skill names, e.g. python,git', kanban_max_runtime_seconds: 'Max runtime (seconds)', kanban_max_runtime_hint: 'Leave empty for unlimited.', kanban_max_runtime_invalid: 'Max runtime must be a whole number of seconds greater than 0.', kanban_parents_modal: 'Parent dependencies', kanban_parents_placeholder: 'Parent task ID', kanban_add_dependency: 'Add dependency', kanban_remove_dependency: 'Remove dependency', kanban_dependency_placeholder: 'Task ID to link', kanban_dependency_self: 'A task cannot depend on itself', kanban_only_mine: '只看我的', kanban_bulk_action: '批次動作', kanban_nudge_dispatcher: '預覽調度器', kanban_stats: '統計', kanban_worker_log: 'Worker 記錄', kanban_block: '封鎖', kanban_unblock: '解除封鎖', kanban_back_to_board: '回到看板', kanban_lanes_by_profile: '依設定檔分欄', kanban_new_board: '新增看板…', kanban_rename_board: '重新命名目前看板…', kanban_archive_board: '封存目前看板…', kanban_archive_board_confirm: '封存看板「{name}」?任務仍會保留在磁碟上,且可從 kanban/boards/_archived/ 還原看板。', kanban_board_archived: '看板已封存', kanban_board_name: '名稱', kanban_board_slug: 'Slug(小寫、連字號)', kanban_board_description: '描述(選填)', kanban_board_icon: '圖示(emoji,選填)', kanban_board_color: '顏色(選填)', kanban_board_name_required: '名稱為必填', kanban_board_slug_required: 'Slug 為必填', kanban_card_complete: '完成', kanban_card_archive: '封存', kanban_unassigned: '未指派', kanban_status_archived: '已封存', tab_todos: '待辦', tab_insights: '統計', tab_dashboard: 'Hermes 儀表板', dashboard_loopback_warning: '儀表板在伺服器上僅限 loopback 存取。請從伺服器本機瀏覽,或使用 --host 0.0.0.0 重新啟動(不安全)。', tab_logs: '記錄', tab_settings: '設定', close_menu: '關閉選單', new_conversation: '新增對話', filter_conversations: '篩選對話……', markdown_table_filter: '篩選表格', markdown_table_sort_column: '欄排序', session_time_unknown: '未知', session_time_minutes_ago: (m) => `${m}分`, session_time_hours_ago: (h) => `${h}小時`, session_time_days_ago: (d) => `${d}天`, session_time_last_week: '1週', session_time_bucket_today: '今天', session_time_bucket_yesterday: '昨天', session_time_bucket_this_week: '本週', session_time_bucket_last_week: '上週', session_time_bucket_older: '更早', scheduled_jobs: '排程工作', new_job: '新任務', loading: '載入中……', search_skills: '搜尋技能……', new_skill: '新技能', personal_memory: '個人記憶', current_task_list: '目前任務清單', // Logs logs_title: '記錄', logs_file: '記錄檔', logs_tail: '追蹤記錄', logs_auto_refresh: '自動重新整理', logs_wrap: '自動換行', logs_copy_all: '複製全部', logs_empty: '沒有記錄可顯示。', logs_loading: '正在載入記錄…', logs_load_failed: '載入記錄失敗:', logs_status_idle: '請選擇記錄檔以檢視最近幾行。', logs_no_mtime: '修改時間未知', logs_truncated_hint: '正在顯示大型記錄檔的尾端;較早的位元組已略過,以限制記憶體用量。', logs_copied: '已複製記錄', logs_severity: '嚴重性', logs_severity_all: '全部', logs_severity_errors: '錯誤', logs_severity_warnings: '警告+', logs_filter_active: '已顯示(篩選器已啟用)', // Insights insights_title: '用量分析', insights_sessions: '對話', insights_messages: '訊息', insights_tokens: 'Token', insights_cost: '估計成本', insights_no_cost: 'N/A', insights_models: '模型', insights_activity_by_day: '每日活動', insights_activity_by_hour: '每小時活動', insights_peak_hour: '高峰:{hour}', insights_token_breakdown: 'Token 明細', insights_input_tokens: '輸入', insights_output_tokens: '輸出', insights_total: '總計', insights_daily_tokens: '每日 Token', insights_model_name: '模型', insights_model_sessions: '對話', insights_model_tokens: 'Token', insights_model_cost: '成本', insights_model_cache: '快取', insights_cache_hit: '提示快取命中率', insights_model_share: '占比', insights_model_health_title: 'Model health comparison', insights_model_health_provider: 'Provider', insights_model_health_replacement: 'Replacement guide', insights_model_health_cost_per_m: 'Cost / 1M', insights_no_usage_data: '尚無用量資料', insights_footer: '顯示最近 {days} 天的資料', insights_skill_usage_title: '技能使用情況', insights_skill_usage_sub: '工具呼叫頻率', insights_skill_usage_total: '呼叫總數', insights_skill_usage_skills_used: '已使用技能', insights_skill_usage_no_data: '尚無技能使用資料', insights_skill_usage_no_data_hint: '在對話中使用技能後,資料會顯示在這裡。', insights_skill_usage_footer: '資料來源:~/.hermes/skills/', insights_skill_usage_col_skill: '技能', insights_skill_usage_col_uses: '使用次數', insights_skill_usage_col_views: '檢視次數', insights_skill_usage_col_share: '使用占比', insights_skill_usage_col_patches: 'Patch', workspace_desc: '新增工作區,並為對話切換工作區。', session_meta_messages: (n) => `${n} 則訊息`, session_meta_children: (n) => `${n} 則子`, // Softened label: avoids exposing the technical internal term // 'segment' in the default visible badge. User-facing copy remains // translatable for locales that prefer a different wording. (#2155) session_meta_segments: (n) => `${n} 段`, session_lineage_toggle_hint: '{0} — 較早的脈絡回合已摺疊在這裡。點選可顯示或隱藏。', session_lineage_static_hint: '{0} — 較早的脈絡回合已摺疊在這裡。', session_child_toggle_hint: '{0} — 從此對話衍生的子對話。點選可顯示或隱藏。', session_readonly_title_hint: '唯讀匯入工作階段 — {0}', session_lineage_segment_untitled: '未命名段', session_lineage_segment_open: '開啟脈絡段', new_profile: '新增設定檔', transcript: '對話記錄', download_transcript: '下載為 Markdown', import: '匯入', export_session_json: 'JSON', export_session_json_tooltip: '將對話完整匯出為 JSON', export_session_html: 'HTML', export_session_html_tooltip: '匯出為獨立的 HTML 網頁(雙擊即可在瀏覽器開啟)', import_session_json_tooltip: '從 JSON 匯入對話', clear_conversation_btn_tooltip: '清空此對話中的所有訊息', // Settings detail settings_label_rtl: '從右到左聊天版面', settings_desc_rtl: '為阿拉伯語或希伯來語等語言翻轉聊天訊息和編輯器輸入的對齊方式。僅影響聊天區域 — 側邊欄和其他面板保持從左到右。', settings_label_sound: '通知聲音', settings_desc_sound: '助理完成回覆時播放音效。', // TTS (#499) tts_listen: '收聽', tts_not_supported: '語音合成無法使用', settings_label_tts: '回覆語音合成', settings_desc_tts: '在每則助理訊息上顯示喇叭按鈕,使用瀏覽器語音合成功能朗讀內容。', settings_label_tts_auto_read: '自動朗讀回覆', settings_desc_tts_auto_read: '每則新的助理回覆完成時自動朗讀。開始輸入時會暫停。', // Composer voice-mode pref (#1488) settings_label_voice_mode: '免持語音模式按鈕', settings_desc_voice_mode: '在聽寫麥克風旁顯示語音模式按鈕(音訊波形)。可自然說話,Hermes 會在停頓後自動送出並朗讀回覆。需要同時支援語音辨識與 TTS 的瀏覽器。', settings_label_raw_audio: '傳送原始音訊,而不是先轉寫', settings_desc_raw_audio: '錄製並將原始音訊檔傳送給 Agent,而不是先轉成文字。Agent 接著可以轉寫音訊,或處理原始音訊(情緒、背景噪音、自訂 STT)。行為類似 Telegram 語音訊息。', voice_send_raw: '傳送原始音訊', voice_raw_attached: '已附加音訊。請按 [送出] 或繼續輸入。', settings_label_tts_voice: '語音', settings_desc_tts_voice: '偏好的語音。系統會從瀏覽器可用的語音中填入。', settings_label_tts_rate: '語速', settings_label_tts_pitch: '音調', settings_label_tts_engine: 'TTS 引擎', settings_desc_tts_engine: '選擇語音引擎。Edge TTS 會透過伺服器使用 Microsoft 神經語音。', settings_label_notifications: '瀏覽器通知', settings_desc_notifications: '分頁在背景中時,回覆完成後顯示系統通知。', notifications_enable_btn: 'Enable notifications', notifications_test_btn: 'Send test', notifications_permission_status: (status) => `Permission: ${status}`, notifications_enabled_toast: 'Notifications enabled.', notifications_denied: 'Notifications are blocked in this browser. Enable them in browser settings.', notifications_unsupported: 'Notifications are not supported in this browser.', settings_desc_token_usage: '在每則助理回覆下方顯示輸入/輸出 token 數量。也可以使用 /usage 切換。', settings_label_api_redact: '在 API 回應中遮蔽敏感資料', settings_desc_api_redact: '自行託管使用者可以為了透明度停用此功能(不建議在共用執行個體中停用)。', settings_sidebar_density_compact: '精簡', settings_sidebar_density_detailed: '詳細', settings_desc_sidebar_density: '控制左側對話清單要顯示多少額外資訊。', settings_label_auto_title_refresh: '自動調整標題更新', settings_auto_title_refresh_off: '關閉', settings_auto_title_refresh_5: '每 5 輪對話', settings_auto_title_refresh_10: '每 10 輪對話', settings_auto_title_refresh_20: '每 20 輪對話', settings_desc_auto_title_refresh: '根據最新對話自動重新產生對話標題,讓標題隨對話發展保持相關。需要設定 LLM 標題產生模型。', settings_desc_external_sessions: '在對話清單中顯示來自 CLI、Telegram、Discord、Slack 等管道的對話。點選即可匯入並繼續對話。', settings_desc_claude_code_sessions: 'Show Claude Code imported sessions in the sidebar, or hide them while leaving other external sessions visible.', settings_desc_cron_sessions: 'Surface cron job output as conversations in the sidebar. Only active when non-WebUI sessions are enabled. Defaults off; high-frequency jobs can flood the sidebar.', settings_desc_webhook_sessions: 'Surface webhook runs as conversations in the sidebar. Only active when non-WebUI sessions are enabled. Defaults off; high-volume routes can flood the sidebar.', settings_desc_previous_messaging_sessions: '顯示被 reset 或 compression 替換的較舊的 Discord、Telegram、Slack 和 Weixin 對話。', settings_desc_sync_insights: '將 WebUI token 用量鏡射到 state.db,讓 hermes /insights 納入瀏覽器工作階段資料。預設為關閉。', settings_desc_check_updates: '有較新版 WebUI 或 Agent 時顯示橫幅。系統會定期在背景執行 git fetch。', settings_desc_ignore_agent_updates: '保留 WebUI 更新檢查,但隱藏 Agent 更新通知,並略過 Agent 更新 fetch。', settings_desc_whats_new_summary: '將 [新版內容] 動作改為先產生簡短、易讀的摘要,而不是先開啟原始 diff。摘要完成後仍可使用一般 diff 比較。', settings_desc_bot_name: '助理在整個 UI 中顯示的名稱。預設為 Hermes。', settings_desc_password: '輸入新密碼即可設定或變更密碼。留空會保留目前設定。', password_placeholder: '輸入新密碼……', password_env_var_locked: '目前已設定 HERMES_WEBUI_PASSWORD 環境變數且優先生效。請取消設定並重新啟動伺服器,才能在此管理密碼。', password_env_var_locked_placeholder: '已鎖定:已設定 HERMES_WEBUI_PASSWORD 環境變數', disable_auth: '停用驗證', sign_out: '登出', settings_label_shutdown: '停止 Hermes WebUI 伺服器', settings_desc_shutdown_before_cmd: '正常停止本機 WebUI 伺服器。適合透過 ', settings_desc_shutdown_between_cmds: ' 啟動,且想要不切換到終端機就停止伺服器的情境。要再次進入 WebUI,需要重新啟動伺服器(', settings_desc_shutdown_after_cmd: ' 或原生應用程式)。', settings_btn_shutdown: '停止伺服器', settings_shutdown_confirm_title: '停止 Hermes WebUI', settings_shutdown_confirm_message: '停止 Hermes WebUI 伺服器?', settings_shutdown_confirm_btn: '停止', settings_shutdown_stopped_message: '伺服器已停止。可以關閉這個分頁。', // Providers panel providers_tab_title: '供應商', providers_section_title: '供應商', providers_section_meta: '管理 AI 提供者的 API 金鑰。變更會立即生效。', providers_status_configured: 'API 金鑰已設定', providers_status_not_configured: '無 API 金鑰', providers_status_oauth: 'OAuth', providers_status_api_key: 'API 金鑰', providers_status_model: '模型', providers_status_not_configured_label: '未設定', providers_oauth_hint: '已透過 OAuth 驗證。無需 API 金鑰。', providers_oauth_config_yaml_hint: '已透過 config.yaml 設定權證。要更新,請編輯 config.yaml 中的 providers 區段,或執行 hermes auth。', providers_oauth_not_configured_hint: '尚未驗證。請在終端機執行 hermes auth 以設定此提供者。', providers_save: '儲存', providers_refresh_models: '重新整理模型', providers_refreshing: '正在重新整理…', providers_models_refreshed: '模型已重新整理', providers_remove: '移除', providers_saving: '儲存中…', providers_removing: '移除中…', providers_enter_key: '請輸入 API 金鑰', providers_empty: '找不到可設定的提供者。', providers_key_updated: 'API 金鑰已儲存', providers_key_removed: 'API 金鑰已移除', providers_key_placeholder_new: 'sk-...', providers_key_placeholder_replace: '輸入新金鑰以取代…', provider_quota_title: '目前提供者配額', provider_quota_active_provider: '目前提供者', provider_quota_last_checked_after_refresh: '重新整理後檢查', provider_quota_last_checked: '上次檢查 {0}', provider_quota_refresh_usage: '重新整理用量', provider_quota_refreshing: '正在重新整理……', provider_quota_refresh_title: '立即重新整理提供者用量限制', provider_quota_refresh_succeeded: '提供者用量已重新整理', provider_quota_refresh_failed: '提供者用量重新整理失敗', provider_quota_session_limit: '5 小時限制', provider_quota_weekly_limit: '每週限制', provider_quota_window_fallback: '視窗', provider_quota_metric_remaining: '剩餘', provider_quota_metric_used: '已用', provider_quota_metric_limit: '限制', provider_quota_status_available: '可用', provider_quota_status_exhausted: '已耗盡', provider_quota_status_unavailable: '不可用', provider_quota_status_failed: '失敗', provider_quota_status_checked: '已檢查', provider_quota_status_no_key: '無金鑰', provider_quota_status_invalid_key: '金鑰無效', provider_quota_status_unsupported: '不支援', provider_quota_used_meta: '已用 {0}', provider_quota_resets_meta: '重設於 {0}', provider_quota_credential_pool: '憑證池', provider_quota_credential_label: '憑證 {0}', provider_quota_pool_plans: '方案:{0}', provider_quota_pool_no_windows: '未回報帳戶限制視窗。', provider_quota_account_limits_loaded: '帳戶限制已載入。', provider_quota_unavailable: '配額狀態不可用', provider_quota_retry_after: '重試時間 {0}', provider_quota_pool_summary_available: '{0}/{1} 可用', provider_quota_pool_summary_exhausted: '{0} 個已耗盡', provider_quota_pool_summary_failed: '{0} 個失敗', provider_quota_pool_summary_checked: '已檢查 {0} 個', provider_cost_budget_label: 'Monthly budget', provider_cost_budget_placeholder: 'e.g. 50.00', provider_cost_budget_set: 'Set', provider_cost_budget_clear: 'Clear', provider_cost_budget_pct: '{0}% of ${1} budget (monthly pace)', provider_cost_budget_save_failed: 'Failed to save budget', cancel: '取消', create_job: '建立工作', save_skill: '儲存技能', editing: '編輯中', // Empty state empty_title: '需要什麼協助?', empty_subtitle: '可以提問、執行命令、瀏覽檔案,或管理排程工作。', suggest_files: '這個工作區有哪些檔案?', suggest_schedule: '今天有哪些行程?', suggest_plan: '協助我規劃一個小專案。', // onboarding onboarding_badge: '首次使用', onboarding_title: '歡迎使用 Hermes Web UI', onboarding_lead: '快速設定精靈會驗證 Hermes、儲存實際的供應商設定、選擇工作區與模型,並可選擇用密碼保護應用程式。', onboarding_back: '上一頁', onboarding_continue: '繼續', onboarding_skip: '跳過設定', onboarding_skipped: '已略過設定,使用現有設定。', onboarding_open: '開啟 Hermes', onboarding_step_system_title: '系統檢查', onboarding_step_system_desc: '驗證 Hermes Agent 與設定可見性。', onboarding_step_setup_title: '供應商設定', onboarding_step_setup_desc: '儲存最低限度的 Hermes 供應商設定。', onboarding_step_workspace_title: '工作區與模型', onboarding_step_workspace_desc: '選擇新工作階段與聊天的預設值。', onboarding_step_password_title: '選用密碼', onboarding_step_password_desc: '分享 Web UI 前先保護它。', onboarding_step_finish_title: '完成', onboarding_step_finish_desc: '檢查設定並進入應用程式。', onboarding_notice_system_ready: 'Hermes Agent 看起來可由 Web UI 存取。', onboarding_notice_system_unavailable: 'Hermes Agent 尚未完全可用。Bootstrap 可以安裝它,但供應商設定可能仍需要使用終端機。', onboarding_check_agent: 'Hermes Agent', onboarding_check_agent_ready: '已偵測到且可匯入', onboarding_check_agent_missing: '缺少或僅能部分匯入', onboarding_check_password: '密碼', onboarding_check_password_enabled: '已啟用', onboarding_check_password_disabled: '尚未啟用', onboarding_check_provider: '供應商設定', onboarding_check_provider_ready: '已可聊天', onboarding_check_provider_partial: '已儲存但不完整', onboarding_check_provider_pending: '需要驗證', onboarding_config_file: '設定檔:', onboarding_env_file: '.env 檔案:', onboarding_unknown: '未知', onboarding_current_provider: '目前設定:', onboarding_missing_imports: '缺少的匯入內容:', onboarding_notice_setup_required: '請在這裡選擇簡易供應商路徑。進階 OAuth 流程目前仍需使用 Hermes CLI 處理。', onboarding_notice_setup_already_ready: '已偵測到可用的 Hermes 供應商設定。可以保留或在這裡替換。', onboarding_oauth_provider_ready_title: '供應商已完成驗證', onboarding_oauth_provider_ready_body: '這個執行個體已設定為使用 Hermes CLI 設定的 OAuth 供應商({provider})。這裡不需要 API 金鑰,請點選 [繼續] 完成設定。', onboarding_oauth_provider_not_ready_title: 'OAuth 供應商尚未完成驗證', onboarding_oauth_provider_not_ready_body: '這個執行個體已設定為使用 {provider},此供應商使用 OAuth 而不是 API 金鑰。請在終端機執行 hermes auth 或 hermes model 完成驗證,然後重新載入 Web UI。', onboarding_oauth_switch_hint: '或在下方選擇其他供應商,切換為 API 金鑰設定:', oauth_login_codex: '使用 Codex(ChatGPT)登入', oauth_codex_step1: '步驟 1:前往此 URL 並輸入驗證碼', oauth_codex_step2: '步驟 2:在頁面上輸入此驗證碼', oauth_codex_polling: '正在等待授權…', oauth_codex_success: 'Codex OAuth 登入成功!', oauth_codex_error: 'OAuth 登入失敗', oauth_codex_expired: '驗證碼已過期,請再試一次', onboarding_notice_workspace: '這些值會重複使用一般應用程式相同的設定 API。', onboarding_workspace_label: '工作區', onboarding_workspace_or_path: '或輸入工作區路徑', onboarding_workspace_placeholder: '/home/you/workspace', onboarding_provider_label: '設定模式', onboarding_quick_setup_badge: '快速設定', provider_category_easy_start: '快速開始', provider_category_self_hosted: '開源/自行託管', provider_category_specialized: '專業服務', onboarding_api_key_label: 'API 金鑰', onboarding_api_key_placeholder: '留空可保留現有已儲存金鑰', onboarding_api_key_label_optional: 'API 金鑰(選用)', onboarding_api_key_placeholder_optional: '無需金鑰的伺服器可留空', onboarding_api_key_help_keyless: '多數 LM Studio / Ollama / vLLM 安裝不需要金鑰;如果伺服器不需要驗證,請留空。請使用 [測試連線] 按鈕確認。', onboarding_api_key_help_prefix: '系統會使用以下名稱,將它以祕密值形式儲存在 Hermes .env 檔案中', onboarding_base_url_label: 'Base URL', onboarding_base_url_placeholder: 'https://your-endpoint.example/v1', onboarding_base_url_help: '可用於 OpenAI 相容路由器、自行託管伺服器、LiteLLM、Ollama、LM Studio、vLLM 或類似端點。', onboarding_model_label: '預設模型', onboarding_workspace_help: '選擇設定完成後 Hermes 應在新聊天中使用的模型。', onboarding_custom_model_placeholder: 'your-model-name', onboarding_custom_model_help: '自訂端點請輸入伺服器預期的確切模型 ID。', onboarding_notice_password_enabled: '已設定密碼。只有要替換時才需要輸入新密碼。', onboarding_notice_password_recommended: '建議設定密碼,尤其是要將 UI 暴露到 localhost 以外時。', onboarding_password_label: '密碼(選用)', onboarding_password_placeholder: '留空可略過', onboarding_password_help: '密碼會透過既有設定 API 儲存,並在伺服器端雜湊。', onboarding_notice_finish: '之後可以重新開啟 [設定] 變更這些值。', onboarding_not_set: '未設定', onboarding_password_will_enable: '將會啟用', onboarding_password_will_replace: '將取代', onboarding_password_keep_existing: '保留目前密碼', onboarding_password_remains_disabled: '將保持停用', onboarding_password_skipped: '暫時略過', onboarding_finish_help: '完成後會在設定中儲存 onboarding_completed,並進入一般應用程式。', onboarding_error_choose_workspace: '請先選擇工作區再繼續。', onboarding_error_choose_model: '請先選擇模型再繼續。', onboarding_error_provider_required: '請先選擇設定模式再繼續。', onboarding_error_base_url_required: '自訂端點必須提供 Base URL。', onboarding_probe_test_button: '測試連線', onboarding_probe_probing: '正在測試連線…', onboarding_probe_ok: '已連線。共有 {n} 個模型可用。', onboarding_probe_error_generic: '無法連上設定的 Base URL。', onboarding_probe_error_invalid_url: 'Base URL 必須以 http:// 或 https:// 開頭。', onboarding_probe_error_dns: '無法解析主機。請檢查 URL,或改用主機的 IP 位址。', onboarding_probe_error_connect_refused: '連線遭拒;伺服器可能沒有在該位址執行。若在 Docker 內使用,請嘗試以主機 IP 取代 localhost。', onboarding_probe_error_timeout: '端點未及時回應。請確認伺服器正在執行,且 URL 正確。', onboarding_probe_error_http_4xx: '端點回傳請求端錯誤。請檢查驗證資訊與 URL 路徑(通常以 /v1 結尾)。', onboarding_probe_error_http_5xx: '端點回傳伺服器錯誤。請檢查 LM Studio / Ollama 伺服器記錄。', onboarding_probe_error_parse: '端點未回傳預期格式的模型清單。請確認 URL 指向 OpenAI 相容 API 根路徑。', onboarding_probe_error_unreachable: '無法連上設定的 Base URL。', onboarding_error_probe_failed: '無法驗證設定的 Base URL。', onboarding_error_workspace_required: '工作區為必填。', onboarding_error_model_required: '模型為必填。', onboarding_complete: '初始設定已完成', // panel/runtime i18n error_prefix: '錯誤:', default: '預設', search: '搜尋', not_available: '無', never: '從不', add: '新增', add_failed: '新增失敗:', remove_failed: '移除失敗:', switch_failed: '切換失敗:', name_required: '需要名稱', content_required: '需要內容', view: '檢視', dismiss: '關閉', disable: '停用', cron_no_jobs: '找不到排程任務。', cron_status_off: '未啟用', cron_status_paused: '已暫停', cron_status_error: '錯誤', cron_status_active: '已啟用', cron_status_running: '執行中…', cron_status_needs_attention: '需要處理', cron_attention_desc: '這個重複排程任務沒有下次執行時間。排程器可能無法計算下一次執行。', cron_attention_croniter_hint: 'Gateway 執行環境可能缺少 croniter 套件。請用支援 cron 的環境重啟 Gateway,然後恢復這個任務。', cron_attention_resume: '恢復並重新計算', cron_jobs_project: '定時任務', cron_attention_run_once: '立即執行一次', cron_attention_copy_diagnostics: '複製診斷資訊', cron_diagnostics_copied: '排程任務診斷資訊已複製', cron_next: '下次', cron_last: '上次', cron_run_now: '立即執行', cron_pause: '暫停', cron_resume: '恢復', cron_job_name_placeholder: '任務名稱', cron_schedule_placeholder: '排程', cron_prompt_placeholder: '提示詞', cron_last_output: '最後輸出', cron_expand_prompt: '展開提示詞', cron_collapse_prompt: '收起提示詞', cron_expand_output: '展開輸出', cron_collapse_output: '收起輸出', cron_mode_agent: '代理', cron_mode_script: '腳本', cron_mode_label: '模式', cron_script_job_banner: '依排程執行腳本,stdout 會送到交付目標。不使用代理、提示詞或技能。', cron_script_card_title: '腳本', cron_script_output: '腳本輸出', cron_script_path_label: '腳本路徑', cron_script_path_hint: '除非為絕對路徑,否則會在 ~/.hermes/scripts/ 下解析。請在伺服器上編輯腳本檔以變更行為。', cron_script_badge_title: '腳本任務(無代理)', cron_workdir_label: '工作目錄', cron_view_full_output: '檢視完整輸出', cron_all_runs: '所有執行', cron_hide_runs: '隱藏執行記錄', cron_no_runs_yet: '(尚無執行記錄)', cron_schedule_required_example: '需要排程(例如「0 9 * * *」或「every 1h」)', cron_schedule_required: '需要排程', cron_prompt_required: '需要提示詞', cron_job_created: '排程任務已建立', cron_duplicate: '複製', cron_duplicated: '任務已複製(已暫停)', cron_job_triggered: '排程任務已觸發', cron_job_paused: '排程任務已暫停', cron_job_resumed: '排程任務已恢復', cron_job_updated: '排程任務已更新', cron_model_label: '模型覆寫', cron_model_hint: '覆寫此工作的預設模型。', cron_model_no_agent_hint: 'No-agent jobs run the configured script directly; model is unused.', cron_model_use_default: '預設(使用設定檔/系統預設)', cron_delete_confirm_title: '刪除排程任務', cron_delete_confirm_message: '此操作無法復原。', cron_job_deleted: '排程任務已刪除', cron_completion_status: (name, status) => `排程「${name}」${status}`, status_failed: '失敗', status_completed: '已完成', todos_no_active: '此對話中沒有使用中的任務清單。', clear_conversation_title: '清除對話', clear_conversation_message: '清除所有訊息?此操作無法復原。', clear_failed: '清除失敗:', skills_no_match: '找不到符合的技能。', skill_enabled: '技能已啟用', skill_disabled: '技能已停用', skill_toggle_failed: '切換技能狀態失敗:', linked_files: '關聯檔案', skill_load_failed: '載入技能失敗:', skill_file_load_failed: '載入檔案失敗:', skill_name_required: '需要技能名稱', skill_updated: '技能已更新', skill_created: '技能已建立', skill_deleted: '技能已刪除', skill_delete_confirm: '要刪除技能「{0}」嗎?', skills_empty_title: '選擇技能', skills_empty_sub: '從側邊欄選擇技能以檢視內容,或建立新技能。', skills_edit: '編輯', skills_delete: '刪除', skills_back_to: '回到 {0}', tasks_empty_title: '選擇排程任務', tasks_empty_sub: '從側邊欄選擇任務以檢視詳細資料與執行記錄,或建立新任務。', workspaces_empty_title: '選擇工作區', workspaces_empty_sub: '從側邊欄選擇工作區以檢視其檔案與設定,或新增工作區。', profiles_empty_title: '選擇設定檔', profiles_empty_sub: '從側邊欄選擇 Agent 設定檔以檢視並編輯設定,或建立新設定檔。', memory_notes_label: '記憶(備註)', memory_saved: '記憶已儲存', my_notes: '我的備註', user_profile: '使用者設定檔', external_notes_sources: '第三方筆記', external_notes_empty: '尚未看到任何筆記或知識 MCP 來源。設定 Joplin、Obsidian、Notion、llm-wiki 或其他筆記伺服器後,會顯示在這裡。', external_notes_auto_recall_hint: '自動對話召回維持不變;這個抽屜只顯示已設定的來源,以及可用的讀取/搜尋工具。', external_notes_no_tools: '此來源目前沒有可見的讀取/搜尋工具。', external_notes_tool_count: (count) => `${count} 個筆記工具可用`, external_notes_configured_hint: '此已設定來源應提供工具名稱;當 WebUI 執行階段提供即時 schema 時會顯示在這裡。', external_notes_recent_ai: 'AI 最近使用', external_notes_auto: '自動', external_notes_recent_ai_reason: '自動召回', external_notes_search_placeholder: '搜尋筆記…', external_notes_search_empty: '搜尋已設定的筆記來源後,可在這裡預覽筆記。', source_active: '使用中', source_configured: '已設定', no_notes_yet: '尚無備註。', no_profile_yet: '尚無設定檔。', agent_soul: 'Agent 靈魂', no_soul_yet: '尚無靈魂定義。', workspace_choose_path: '選擇工作區路徑', workspace_choose_path_meta: '新增驗證過的路徑並切換此對話', workspace_manage: '管理工作區', workspace_manage_meta: '開啟 Spaces 面板', workspace_use_title: '在目前對話中使用', workspace_use: '使用', workspace_add_path_placeholder: '新增工作區路徑(例如 /home/user/my-project)', workspace_paths_validated_hint: '路徑會先驗證是否存在再儲存。', workspace_drag_hint: '拖曳以重新排列', workspace_reorder_failed: '重新排列失敗', workspace_added: '工作區已新增', workspace_renamed: '工作區已重新命名', workspace_remove_confirm_title: '移除工作區', workspace_remove_confirm_message: (name) => `移除工作區「${name}」?`, workspace_removed: '工作區已移除', workspace_switch_prompt_title: '切換工作區', workspace_switch_prompt_message: '輸入工作區的絕對路徑以新增並切換此對話。', workspace_switch_prompt_confirm: '切換', workspace_switch_prompt_placeholder: '/Users/you/project', workspace_not_added: '工作區未新增', workspace_already_saved: '工作區已儲存 — 從清單中選取', workspace_busy_switch: 'Agent 執行中無法切換工作區', discard_file_edits_title: '放棄檔案編輯?', discard_file_edits_message: '切換工作區將放棄未儲存的預覽變更。', workspace_switched_to: (name) => `已切換到 ${name}`, profiles_no_profiles: '找不到設定檔。', profile_api_keys_configured: 'API 金鑰已設定', profile_gateway_running: 'Gateway 執行中', profile_gateway_stopped: 'Gateway 已停止', profile_active: '啟用中', profile_no_configuration: '沒有設定', profile_skill_count: (n) => `${n} 個技能`, profile_use: '使用', profile_switch_title: '切換到此設定檔', profile_delete_title: '刪除此設定檔', profile_default_label: '(預設)', profile_name_placeholder: '設定檔名稱(小寫字母、數字、連字號)', profile_clone_label: '從啟用中的設定檔複製設定', profile_model_label: '模型 / 供應商', profile_model_hint: '為這個新設定檔選擇已設定的供應商和模型。', profile_model_use_default: '使用啟用中設定檔的預設值', profile_base_url_placeholder: '基本 URL(選填,例如 http://localhost:11434)', profile_api_key_placeholder: 'API 金鑰(選填)', manage_profiles: '管理設定檔', profiles_load_failed: '載入設定檔失敗', profile_switched_new_conversation: (name) => `已切換至設定檔:${name},並開始新對話`, profile_switched: (name) => `已切換至設定檔:${name}`, profile_name_rule: '僅限小寫字母、數字、連字號和底線', profile_base_url_rule: '基本 URL 必須以 http:// 或 https:// 開頭', profile_created: (name) => `設定檔 ${name} 已建立`, profile_delete_confirm_title: (name) => `刪除設定檔「${name}」?`, profile_delete_confirm_message: '此設定檔的所有對話、設定、技能和記憶將被永久刪除。此操作無法復原。', profile_deleted: (name) => `設定檔 ${name} 已刪除`, active_conversation_none: '未選取使用中的對話。', active_conversation_meta: (title, count) => `${title} · ${count} 則訊息`, settings_unsaved_changes: '有未儲存的變更。', sign_out_failed: '登出失敗:', disable_auth_confirm_title: '停用密碼保護', disable_auth_confirm_message: '任何人都可以存取此執行個體。', auth_disabled: '驗證已停用 — 密碼保護已關閉', disable_auth_failed: '停用驗證失敗:', current_password_label: '目前密碼', current_password_placeholder: '輸入目前密碼…', current_password_required: '變更或停用驗證需要目前密碼。', current_password_incorrect: '目前密碼不正確。', disable_auth_typed_confirm: '輸入 DISABLE AUTH 以確認', auth_status_password: '密碼驗證', auth_status_passkey_only: '僅限通行金鑰', auth_status_unauthenticated: '未驗證', auth_warning_badge: '驗證已停用', auth_disabled_warning_message: '此執行個體無需驗證即可存取。', auth_acknowledged_label: '我已檢視此風險;顯示較低急迫性的導覽警告。', auth_ack_save_failed: '更新確認狀態失敗:', bg_error_single: (title) => `「${title}」發生錯誤`, bg_error_multi: (count) => `${count} 個對話發生錯誤`, // skill form skill_name: '名稱', skill_category: '類別', skill_category_placeholder: '選填,例如 devops', skill_content: 'SKILL.md 內容', skill_content_placeholder: 'YAML frontmatter + Markdown 內文', skill_rename_not_supported: '不支援重新命名技能。若要重新命名,請建立新技能並刪除舊技能。', skill_metadata: '中繼資料', // cron form cron_name_label: '任務名稱', cron_name_placeholder: '選填', cron_schedule_label: '排程', cron_schedule_preset_label: '預設', cron_schedule_preset_hourly: '每小時', cron_schedule_preset_daily: '每天', cron_schedule_preset_weekdays: '工作日', cron_schedule_preset_weekly: '每週', cron_schedule_preset_monthly: '每月', cron_schedule_preset_custom: '自訂', cron_schedule_hint: '週期性任務請用「every 1h」或 Cron 表示式。像「30m」這樣的裸時長只會執行一次。', cron_schedule_once_warning: '像「30m」這樣的時長寫法只會執行一次,並在執行後移除。要保留週期性任務,請使用「every 30m」。', cron_prompt_label: '提示', cron_deliver_label: '傳送至', cron_deliver_local: '本機(僅儲存輸出)', cron_deliver_custom: '自訂推送目標', cron_profile_label: '設定檔', cron_profile_server_default: '伺服器預設', cron_profile_server_default_hint: '執行時使用 WebUI 伺服器預設設定檔。沒有設定檔的既有工作會保留此舊行為。', cron_toast_notifications_label: '完成 toast 通知', cron_toast_notifications_hint: '此排程工作完成時顯示 toast 通知。即使關閉此選項,Tasks 徽章與新執行標記仍會更新。', cron_toast_notifications_enabled: '已啟用', cron_toast_notifications_disabled: '已停用', cron_skills_label: '技能', cron_skills_placeholder: '新增技能(選填)…', cron_skills_edit_hint: '技能清單建立後無法編輯。', // workspace form workspace_name_label: '名稱', workspace_name_placeholder: '選填的顯示名稱', workspace_path_label: '路徑', workspace_path_required: '工作區路徑為必填', workspace_path_readonly: '路徑無法變更,只能重新命名。', workspace_new_title: '新增工作區', // profile form profile_name_label: '名稱', profile_base_url_label: 'Base URL', profile_api_key_label: 'API 金鑰', cmd_yolo: '切換 YOLO 模式(略過核准)', yolo_no_session: '無活動工作階段', yolo_enabled: '⚡ YOLO 模式已開啟,將略過所有核准', yolo_disabled: 'YOLO 模式已關閉', yolo_pill_label: 'YOLO', yolo_pill_title_active: 'YOLO 模式已啟用,點選即可關閉', approval_skip_all: '⚡ 本次工作階段全部跳過', approval_skip_all_title: '略過本次工作階段的所有核准提示', // composer action tooltips composer_send: '傳送訊息', composer_queue: '訊息加入佇列', composer_interrupt: '中斷並傳送', composer_steer: '引導目前回應', composer_stop: '停止產生', composer_disabled_clarify: '請回覆上方的澄清要求', composer_disabled_compression: '等待壓縮完成', composer_compression_will_queue: 'Type a message — it will queue and send after compression', composer_disabled_empty: '請輸入訊息後傳送', composer_mobile_workspace: '工作區', composer_mobile_model: '模型', composer_mobile_quota: '配額', composer_mobile_reasoning: '推理', composer_mobile_context: '脈絡', media_audio_label: '音訊', media_svg_label: '圖表', media_video_label: '影片', media_download: '下載', csv_loading: '載入 CSV', csv_too_large: 'CSV 檔案過大,無法內嵌渲染', csv_no_data: 'CSV 檔案資料不足,無法渲染為表格', csv_error: '載入 CSV 檔案失敗', csv_header_note: '第一列顯示為表格標題', excalidraw_loading: '載入圖表', excalidraw_too_large: 'Excalidraw 檔案過大,無法內嵌渲染', excalidraw_invalid: '無效的 Excalidraw 檔案格式', excalidraw_error: '載入 Excalidraw 檔案失敗', excalidraw_label: '圖表', excalidraw_download: '下載', excalidraw_empty: '空圖表', excalidraw_render_error: '渲染圖表失敗', excalidraw_simplified: '簡化 SVG 預覽 — 與 Excalidraw 畫布不完全相同', // ── Checkpoints / Rollback ── checkpoint_title: '檢查點', checkpoint_empty: '此工作區沒有檢查點。', checkpoint_loading: '正在載入檢查點…', checkpoint_error: '載入檢查點失敗', checkpoint_date: '日期', checkpoint_message: '訊息', checkpoint_files: '檔案', checkpoint_view_diff: '檢視差異', checkpoint_restore: '還原', checkpoint_restore_confirm_title: '要還原檢查點嗎?', checkpoint_restore_confirm_message: (ckpt) => `要將工作區還原到檢查點「${ckpt}」嗎?這會用已儲存版本覆寫檔案。此檢查點之後新增的檔案不會被刪除。`, checkpoint_restored: '已還原檢查點', checkpoint_diff_title: '檢查點中的變更', checkpoint_diff_no_changes: '這個檢查點與目前工作區沒有差異。', checkpoint_diff_files_changed: (n) => `已變更 ${n} 個檔案`, outline_title: '大綱', outline_empty: '尚無問題。', outline_loading: '載入中…', wiki_browse: 'Browse wiki', wiki_search_placeholder: 'Search pages...', wiki_no_pages: 'No wiki pages found', wiki_not_configured: 'Wiki not configured', }, pt: { offline_title: 'Conexão perdida', offline_browser_detail: 'O navegador informa que este dispositivo está offline.', offline_network_detail: 'O Hermes está inacessível neste navegador agora.', offline_autorefresh: 'Vou atualizar esta página automaticamente quando o Hermes voltar a responder.', offline_check_now: 'Verificar agora', offline_checking: 'Verificando…', offline_stream_waiting: 'Conexão perdida. Aguardando para atualizar…', _lang: 'pt', _label: 'Português', _speech: 'pt-BR', // boot.js cancelling: 'Cancelando…', cancel_failed: 'Falha ao cancelar: ', mic_denied: 'Acesso ao microfone negado. Verifique as permissões do navegador.', mic_insecure_origin: 'Voice input needs a secure connection. Open Hermes over HTTPS or from localhost to use the microphone.', // TODO: translate mic_no_speech: 'Nenhuma fala detectada. Tente novamente.', mic_network: 'Reconhecimento de fala indisponível.', mic_error: 'Erro no input de voz: ', session_imported: 'Sessão importada', import_failed: 'Falha na importação: ', import_invalid_json: 'JSON inválido', image_pasted: 'Imagem colada: ', text_pasted: 'Texto colado anexado como ', // messages.js edit_message: 'Editar mensagem', regenerate: 'Regenerar resposta', copy: 'Copiar', copied: 'Copiado!', copy_failed: 'Falha ao copiar', selected_text_reply: 'Responder com seleção', selected_text_reply_title: 'Anexar o texto selecionado do chat como contexto citado', selected_text_reply_appended: 'Texto selecionado adicionado ao compositor', saved_prompts_empty: 'Nenhum prompt salvo ainda.', saved_prompts_save_current: 'Salvar entrada atual como prompt', saved_prompts_saved: 'Prompt salvo', saved_prompts_delete: 'Excluir prompt', saved_prompts_empty_input: 'Digite um prompt para salvar primeiro', context_block_name_default: 'Contexto', context_block_flush_aria: 'Os blocos de contexto serão incluídos ao enviar', context_block_rename_hint: 'Clique ou pressione Enter para renomear', context_block_rename_aria: 'Renomear bloco de contexto', context_block_remove: 'Remover bloco de contexto', you: 'Você', thinking: 'Pensando', expand_all: 'Expandir tudo', collapse_all: 'Recolher tudo', edit_failed: 'Falha ao editar: ', regen_failed: 'Falha ao regenerar: ', reconnect_active: 'Uma resposta ainda está sendo gerada. Recarregar quando estiver pronto?', reconnect_finished: 'Uma resposta estava em andamento quando você saiu. As mensagens podem ter atualizado.', // approval card approval_heading: 'Aprovação necessária', approval_desc_prefix: 'Comando perigoso detectado', approval_btn_once: 'Permitir uma vez', approval_btn_once_title: 'Permitir este comando (Enter)', approval_btn_session: 'Permitir sessão', approval_btn_session_title: 'Permitir para esta sessão de conversa', approval_btn_always: 'Sempre permitir', approval_btn_always_title: 'Sempre permitir este padrão de comando', approval_btn_deny: 'Negar', approval_btn_deny_title: 'Negar — não executar este comando', approval_responding: 'Respondendo…', approval_gateway_unsupported: 'Approvals require a newer gateway. Upgrade the connected Hermes gateway to enable this.', approval_gateway_unsupported_label: 'Aprovações não suportadas', clarify_heading: 'Esclarecimento necessário', clarify_hint: 'Escolha uma opção ou digite sua resposta abaixo.', clarify_other: 'Outro', clarify_send: 'Enviar', clarify_input_placeholder: 'Digite sua resposta…', clarify_responding: 'Respondendo…', session_attention_approval: (n) => n === 1 ? 'Aprovação' : `${n} aprovações`, session_attention_clarify: (n) => n === 1 ? 'Pergunta' : `${n} perguntas`, session_attention_generic: (n) => n === 1 ? 'Atenção' : `${n} itens`, session_attention_approval_title: 'Aguardando decisão de permissão', session_attention_clarify_title: 'Aguardando sua resposta', session_attention_generic_title: 'Aguardando ação do usuário', untitled: 'Sem título', n_messages: (n) => `${n} mensagens`, load_older_messages: '↑ Role para cima ou clique para carregar mensagens mais antigas', session_jump_start: 'Início', session_jump_start_label: 'Ir para o início da sessão', session_jump_end: 'Fim', session_jump_end_label: 'Ir para o fim da sessão', session_new_message: 'Nova mensagem', session_new_message_label: 'Nova mensagem disponível, ir para o fim', jump_to_question: 'para a resposta', jump_to_question_label: 'Ir para o início desta resposta', queued_label: 'Envia após a resposta', queued_count: (n) => n === 1 ? '1 na fila' : `${n} na fila`, queued_cancel: 'Cancelar mensagem na fila', model_unavailable: ' (indisponível)', model_unavailable_title: 'Este modelo não está mais na sua lista de provedores', provider_mismatch_warning: (m,p)=>`"${m}" pode não funcionar com seu provedor configurado (${p}). Enviar assim mesmo, ou execute \`hermes model\` no terminal para trocar.`, provider_mismatch_label: 'Provedor incompatível', gateway_auth_label: 'Falha na autenticação do Gateway', gateway_start: 'Start', gateway_stop: 'Stop', gateway_restart: 'Restart', gateway_start_success: 'Gateway start completed.', gateway_stop_success: 'Gateway stop completed.', gateway_restart_success: 'Gateway restart completed.', gateway_start_failed: 'Gateway start failed', gateway_stop_failed: 'Gateway stop failed', gateway_restart_failed: 'Gateway restart failed', gateway_not_configured: 'Gateway not configured', gateway_not_running: 'Gateway not running', gateway_running: 'Running', gateway_metadata_stale: 'Gateway metadata stale', gateway_endpoint_unreachable: 'Gateway endpoint not reachable', gateway_last_active: 'Last active', gateway_session: 'session', gateway_sessions: 'sessions', gateway_status_load_failed: 'Failed to load gateway status', model_not_found_label: 'Modelo não encontrado', composer_mobile_workspace: 'Workspace', composer_mobile_model: 'Modelo', composer_mobile_quota: 'Cota', composer_mobile_reasoning: 'Raciocínio', composer_mobile_context: 'Contexto', model_custom_label: 'ID de modelo customizado', model_custom_placeholder: 'ex: openai/gpt-5.4', model_show_all_models: 'Mostrar todos os {0} modelos', model_search_placeholder: 'Buscar modelos…', session_toolsets: 'Session Toolsets', // TODO: translate session_toolsets_desc: 'Use active profile defaults or choose a custom toolset list for this session', // TODO: translate session_toolsets_global: 'Active profile defaults', // TODO: translate session_toolsets_profile_defaults: 'Active profile defaults', // TODO: translate session_toolsets_custom: 'Custom override', // TODO: translate session_toolsets_use_profile_defaults: 'Use active profile defaults', // TODO: translate session_toolsets_configured_servers: 'Configured MCP servers', // TODO: translate session_toolsets_loading_servers: 'Loading configured servers...', // TODO: translate session_toolsets_no_configured_servers: 'No configured MCP servers', // TODO: translate session_toolsets_placeholder: 'tool1, tool2, \u2026', // TODO: translate session_toolsets_apply: 'Apply', // TODO: translate session_toolsets_clear: 'Use defaults', // TODO: translate session_toolsets_applied: 'Toolsets updated', // TODO: translate session_toolsets_cleared: 'Using active profile defaults', // TODO: translate session_toolsets_failed: 'Failed to update toolsets: ', // TODO: translate model_search_no_results: 'Nenhum modelo encontrado', model_group_configured: 'Configurados', ws_search_placeholder: 'Buscar espaços de trabalho…', ws_no_results: 'Nenhum espaço de trabalho encontrado', workspace_new_worktree_conversation: 'Nova conversa em worktree', workspace_new_worktree_conversation_meta: 'Cria um git worktree isolado para este espaço de trabalho.', workspace_worktree_created: 'Conversa em worktree criada', workspace_worktree_failed: 'Falha ao criar worktree: ', session_worktree_badge: 'Worktree', // commands.js cmd_clear: 'Limpar mensagens da conversa', cmd_help: 'Show available slash commands', cmd_compress: 'Comprimir manualmente o contexto (uso: /compress [tópico])', cmd_compact_alias: 'Alias legado para /compress', cmd_model: 'Trocar modelo (ex: /model gpt-4o)', cmd_workspace: 'Trocar workspace por nome', cmd_new: 'Iniciar nova sessão de chat', cmd_usage: 'Alternar exibição de uso de tokens', cmd_theme: 'Trocar aparência (tema: system/dark/light, skin: default/ares/mono/graphite/slate/poseidon/sisyphus/charizard/sienna/catppuccin/nous/geist-contrast/zeus/verdigris)', cmd_personality: 'Trocar personalidade do agente', cmd_skills: 'Listar skills disponíveis do Hermes', cmd_use: 'Forçar uma skill para a próxima mensagem', available_commands: 'Comandos disponíveis:', type_slash: 'Digite / para ver comandos', conversation_cleared: 'Conversa limpa', command_label: 'Comando', context_compaction_label: 'Compactação de contexto', preserved_task_list_label: 'Lista de tarefas preservada', reference_only_label: 'Apenas referência', model_usage: 'Uso: /model ', no_model_match: 'Nenhum modelo correspondendo "', model_did_you_mean: (m) => ` — você quis dizer "${m}"?`, switched_to: 'Trocado para ', workspace_usage: 'Uso: /workspace ', no_workspace_match: 'Nenhum workspace correspondendo "', switched_workspace: 'Trocado para workspace: ', workspace_switch_failed: 'Falha ao trocar workspace: ', new_session: 'Nova sessão criada', new_session_creating: 'Criando nova conversa…', compressing: 'Solicitando compressão de contexto...', compress_running_label: 'Comprimindo', compress_complete_label: 'Compressão completa', auto_compress_label: 'Compressão automática', compress_failed_label: 'Falha na compressão', focus_label: 'Foco', token_usage_on: 'Uso de tokens ligado', token_usage_off: 'Uso de tokens desligado', usage_cache_hit_detail: 'Cache: {0}% de acerto ({1} leitura / {2} escrita)', usage_cached_percent: '{0}% em cache', theme_usage: 'Uso: /theme ', theme_set: 'Tema: ', no_active_session: 'Nenhuma sessão ativa', cmd_queue: 'Enfileirar mensagem para o próximo turno', cmd_goal: 'Definir ou consultar uma meta persistente', goal_evaluating_progress: 'Evaluating goal progress…', goal_working_toward: 'Working toward goal…', goal_continuing_toast: 'Continuing toward goal…', goal_status_none: 'No active goal. Set one with /goal .', goal_status_active: (turns, max_turns, goal) => `⊙ Goal (active, ${turns}/${max_turns} turns): ${goal}`, goal_status_paused: (turns, max_turns, reason, goal) => `⏸ Goal (paused, ${turns}/${max_turns}${reason ? `, ${reason}` : ''}): ${goal}`, goal_status_done: (turns, max_turns, goal) => `✓ Goal done (${turns}/${max_turns}): ${goal}`, goal_set: (turns, goal) => `⊙ Goal set (${turns}-turn budget): ${goal}`, goal_paused: (goal) => `⏸ Goal paused: ${goal}`, goal_resumed: (goal) => `▶ Goal resumed: ${goal}`, goal_cleared: 'Goal cleared.', goal_no_goal: 'No active goal.', goal_achieved: (reason) => `✓ Goal achieved: ${reason}`, goal_paused_budget_exhausted: (turns, max_turns) => `⏸ Goal paused — ${turns}/${max_turns} turns used. Use /goal resume to keep going, or /goal clear to stop.`, goal_continuing: (turns, max_turns, reason) => `↻ Continuing toward goal (${turns}/${max_turns}): ${reason}`, cmd_interrupt: 'Cancelar turno atual e enviar nova mensagem', cmd_steer: 'Injetar correção no meio do turno sem interromper', cmd_queue_no_msg: 'Uso: /queue ', cmd_queue_not_busy: 'Nenhuma tarefa ativa — apenas envie normalmente', cmd_queue_confirm: 'Mensagem enfileirada', cmd_interrupt_no_msg: 'Uso: /interrupt ', cmd_interrupt_confirm: 'Interrompido — enviando nova mensagem', cmd_steer_no_msg: 'Uso: /steer ', cmd_steer_fallback: 'Steer indisponível — rascunho restaurado', cmd_steer_delivered: 'Steer entregue — agente verá no próximo resultado', steer_leftover_queued: 'Steer enfileirado para próximo turno', busy_steer_fallback: 'Steer indisponível — rascunho restaurado', steer_fail_no_cached_agent: 'No agent cached for this session — try refreshing', steer_fail_agent_lacks_steer: 'This agent version does not support steer', steer_fail_session_not_found: 'Session not found — it may have expired', steer_fail_not_running: 'Agent is not currently running', steer_fail_stream_dead: 'The agent stream has ended', steer_fail_steer_error: 'Steer delivery failed — the agent may have finished', steer_fail_network_error: 'Network error — check your connection', steer_fail_unknown: 'Steer unavailable', steer_recovery_retry: 'Retry', steer_recovery_dismiss: 'Dismiss', busy_interrupt_confirm: 'Interrompido — enviando nova mensagem', settings_label_default_message_mode: 'Modo de mensagem padrão', settings_desc_default_message_mode: 'Controla o que acontece ao enviar mensagem com agente rodando. Fila espera; Interromper cancela e recomeça; Steer injeta correção no meio do turno sem interromper. Se Steer não estiver disponível, o rascunho é restaurado para você escolher a próxima ação.', settings_label_fade_text_effect: 'Efeito de fade no texto', settings_desc_fade_text_effect: 'Faz novas palavras aparecerem gradualmente enquanto o assistente responde. Similar ao OpenWebUI; desativado por padrão para melhor desempenho.', settings_label_max_tokens: 'Máximo de tokens de saída', settings_desc_max_tokens: 'Limita o tamanho das novas respostas em streaming. Deixe em branco para usar o valor de fallback do perfil ativo.', settings_placeholder_max_tokens_none: 'Sem substituição', settings_placeholder_max_tokens_fallback: 'Sem substituição (fallback: {0})', settings_default_message_mode_queue: 'Enfileirar follow-up', settings_default_message_mode_interrupt: 'Interromper turno atual', settings_default_message_mode_steer: 'Steer (correção no meio do turno)', settings_label_busy_placeholder_hint: 'Show busy placeholder hint', settings_desc_busy_placeholder_hint: 'Shows the composer placeholder with the current busy action while the session is running and the draft is empty.', composer_placeholder_busy_queue: 'Enter = queue | /interrupt | /background | /steer', composer_placeholder_busy_interrupt: 'Enter = interrupt | /queue | /background | /steer', composer_placeholder_busy_steer: 'Enter = steer | /queue | /background | /interrupt', slash_skill_badge: 'Skill', slash_skill_desc: 'Invocar esta skill', cmd_stop: 'Parar resposta atual', cmd_title: 'Obter ou definir título da sessão', cmd_retry: 'Reenviar última mensagem', cmd_undo: 'Remover última troca', cmd_btw: 'Fazer pergunta lateral (efêmera)', cmd_btw_usage: '/btw — fazer pergunta lateral', cmd_background: 'Rodar prompt em background', cmd_background_usage: '/background — rodar em paralelo', btw_asking: 'Fazendo pergunta lateral...', btw_label: 'Pergunta lateral — não no histórico', btw_done: 'Pergunta lateral respondida', btw_no_answer: 'Nenhuma resposta recebida.', btw_failed: 'Pergunta lateral falhou: ', cmd_branch:'Fork this conversation into a new session', cmd_branch_usage:'/branch [name] — fork conversation (optionally with a name)', branch_forked:'Forked into new session', branch_failed:'Fork failed: ', fork_from_here:'Fork from here', forked_from:'Forked from', bg_running: 'Rodando em background...', bg_complete: 'Tarefa de background completa', bg_label: 'Resultado de background:', bg_no_answer: '(sem resposta)', bg_failed: 'Tarefa de background falhou: ', undo_exchange: 'Desfazer última troca', cmd_status: 'Mostrar info da sessão', cmd_voice: 'Alternar input de microfone', stream_stopped: 'Resposta parada.', no_active_task: 'Nenhuma tarefa ativa para parar.', cancel_unavailable: 'Cancelar indisponível.', retry_failed: 'Retry falhou: ', undo_failed: 'Undo falhou: ', undid_n_messages: 'Removido', undid_messages_suffix: 'mensagem(s).', status_heading: 'Status da Sessão', status_session_id: 'ID da Sessão', status_title: 'Título', status_model: 'Modelo', status_provider: 'Provedor', status_workspace: 'Workspace', status_personality: 'Personalidade', status_messages: 'Mensagens', status_agent_running: 'Agente rodando', status_profile: 'Perfil', status_hermes_home: 'Diretório Hermes', status_started: 'Iniciado', status_tokens: 'Tokens', status_updated: 'Atualizado', status_ephemeral: 'Instantâneo efêmero — não salvo no histórico.', status_no_tokens: 'Nenhum token usado', status_unknown: 'Desconhecido', status_yes: 'Sim', status_no: 'Não', status_load_failed: 'Falha ao carregar status: ', title_current: 'Título atual', title_change_hint: 'Use `/title ` para renomear.', title_set: 'Título definido como', cmd_webui_only_session: 'Comando indisponível para sessões CLI.', cmd_voice_use_mic: 'Clique no botão de mic no composer.', usage_heading: 'Uso de Tokens', usage_default_model: 'padrão', usage_unknown: 'desconhecido', usage_input_tokens: 'Tokens de input', usage_output_tokens: 'Tokens de output', usage_total: 'Total de tokens', usage_estimated_cost: 'Custo estimado', usage_settings_tip: 'Nota: estimativas são aproximadas.', usage_load_failed: 'Falha ao carregar uso: ', usage_personality_none: 'nenhuma', no_personalities: 'Nenhuma personalidade encontrada (adicione em ~/.hermes/personalities/)', available_personalities: 'Personalidades disponíveis:', personality_switch_hint: '\n\nUse `/personality ` para trocar, ou `/personality none` para limpar.', personalities_load_failed: 'Falha ao carregar personalidades', personality_cleared: 'Personalidade limpa', personality_set: 'Personalidade: ', failed_colon: 'Falhou: ', // ui.js no_workspace: 'Nenhum workspace', workspace_empty_no_path: 'Nenhum workspace selecionado. Configure em Configurações → Workspace.', workspace_empty_dir: 'Este workspace está vazio.', workspace_show_hidden_files: 'Mostrar arquivos ocultos', workspace_show_hidden_files_desc: 'Include .DS_Store, .git, node_modules, and other hidden / system files in the file tree.', workspace_hidden_files_visible: 'hidden visible', workspace_hidden_files_visible_title: 'Hidden files are visible — click for options', workspace_options: 'Workspace options', dialog_confirm_title: 'Confirmar ação', dialog_prompt_title: 'Digite um valor', dialog_confirm_btn: 'Confirmar', // workspace.js unsaved_confirm: 'Você tem mudanças não salvas. Descartar e navegar?', discard: 'Descartar', save: 'Salvar', edit: 'Editar', clear: 'Limpar', create: 'Criar', remove: 'Remover', save_title: 'Salvar mudanças', edit_title: 'Editar este arquivo', saved: 'Salvo', save_failed: 'Falha ao salvar: ', image_load_failed: 'Não foi possível carregar imagem', file_open_failed: 'Não foi possível abrir arquivo', downloading: (name) => `Baixando ${name}…`, double_click_rename: 'Duplo clique para renomear', symlink_link_to: 'Symlink → {target}', external_link_open_confirm: 'This symlink points outside the workspace. Open it in a read-only external view for this browser session?', external_link_read_only: 'This external view is read-only. Create, rename, move, delete, upload, reveal, and editor actions stay disabled here.', external_link_grant_expired: 'This external view expired. Reopen the escape-target symlink to authorize it again.', session_rename_failed_no_row: 'Could not start rename — row not found.', renamed_to: 'Renomeado para ', rename_failed: 'Falha ao renomear: ', moved_to: 'Movido para ', move_failed: 'Falha ao mover: ', delete_title: 'Excluir', delete_confirm: (name) => `Excluir ${name}?`, deleted: 'Excluído ', delete_failed: 'Falha ao excluir: ', reveal_in_finder: 'Mostrar no gerenciador de arquivos', reveal_failed: 'Falha ao mostrar: ', copy_file_path: 'Copiar caminho do arquivo', open_in_vscode: 'Abrir no VS Code', open_in_vscode_failed: 'Falha ao abrir no VS Code: ', download_folder: 'Download Folder', // TODO: translate path_copied: 'Caminho do arquivo copiado para a área de transferência', path_copy_failed: 'Falha ao copiar caminho: ', session_rename: 'Renomear conversa', session_rename_desc: 'Editar o título desta conversa', session_title_regenerate: 'Regenerar título', session_title_regenerate_desc: 'Peça ao Hermes para gerar um novo título a partir da conversa', session_title_regenerating: 'Regenerando título…', session_title_regenerated: (title) => `Título regenerado: ${title}`, session_title_regenerate_failed: 'Falha ao regenerar o título: ', session_copy_link: 'Copiar link da conversa', session_copy_link_desc: 'Copia um link direto para esta conversa', session_link_copied: 'Link da conversa copiado para a área de transferência', session_link_copy_failed: 'Falha ao copiar link da conversa: ', new_file_prompt: 'Nome do novo arquivo (ex: notes.md):', new_file: 'Novo arquivo', new_folder: 'Nova pasta', workspace_root: 'raiz do espaço de trabalho', new_file_prompt_title: 'Nome do novo arquivo em {0}:', new_folder_prompt_title: 'Nome da nova pasta em {0}:', project_name_prompt: 'Nome do projeto:', created: 'Criado ', create_failed: 'Falha ao criar: ', new_folder_prompt: 'Nome da nova pasta:', folder_created: 'Pasta criada ', folder_create_failed: 'Falha ao criar pasta: ', workspace_auto_create_folder: 'Criar pasta se não existir', folder_add_as_space_btn: 'Adicionar como Space', folder_add_as_space_msg: 'Adicionar esta pasta como novo space?', folder_add_as_space_title: 'Adicionar como Space?', remove_title: 'Remover', empty_dir: '(vazio)', upload_failed: 'Falha ao upload: ', upload_too_large: (maxMb, fileMb) => `O arquivo é grande demais (${fileMb} MB). O tamanho máximo de upload é ${maxMb} MB.`, uploading: 'Enviando…', uploaded: 'Enviado', all_uploads_failed: (n) => `Todos ${n} upload(s) falharam`, session_pin: 'Fixar conversa', session_unpin: 'Desfixar conversa', session_pin_desc: 'Manter esta conversa no topo', session_unpin_desc: 'Remover dos fixados', session_pin_failed: 'Falha ao fixar: ', session_move_project: 'Mover para projeto', session_move_project_desc_has: 'Mudar projeto desta conversa', session_move_project_desc_none: 'Atribuir projeto a esta conversa', session_archive: 'Arquivar conversa', session_hide_external: 'Ocultar da lista', session_restore: 'Restaurar conversa', session_archive_desc: 'Esconder conversa até mostrar arquivados', session_archive_worktree_desc: 'Esconder esta conversa; manter o worktree no disco', session_hide_external_desc: 'Ocultar esta sessão importada do WebUI sem excluir o histórico original.', session_restore_desc: 'Trazer conversa de volta à lista principal', session_archived: 'Sessão arquivada', session_archived_worktree: 'Sessão arquivada. O worktree permanece no disco.', session_hidden: 'Sessão ocultada da lista', session_restored: 'Sessão restaurada', session_archive_failed: 'Falha ao arquivar: ', session_duplicate: 'Duplicar conversa', session_duplicate_desc: 'Criar cópia com mesmo workspace e modelo', session_export_html: 'Export as HTML', session_export_html_desc: 'Download this conversation as a self-contained HTML file', session_duplicated: 'Sessão duplicada', session_duplicate_failed: 'Falha ao duplicar: ', session_stop_response: 'Stop response', session_stop_response_desc: 'Cancel the running response for this conversation', session_delete: 'Excluir conversa', session_delete_desc: 'Remover permanentemente esta conversa', session_delete_confirm: 'Excluir esta conversa?', session_delete_worktree_desc: 'Excluir apenas a conversa no WebUI; manter o worktree no disco', session_delete_worktree_confirm: (path) => `Excluir esta conversa? O worktree em ${path} permanecerá no disco.`, session_deleted: 'Conversa excluída', session_deleted_worktree: 'Conversa excluída. O worktree permanece no disco.', session_worktree_remove: 'Remover worktree', session_worktree_remove_desc: (path) => `Excluir o git worktree em ${path} do disco`, session_worktree_remove_confirm: (path) => `Remover git worktree do disco?\n\nCaminho: ${path}\n\nTodo o diretório do worktree será excluído. Dados da sessão permanecem no WebUI.`, session_worktree_remove_not_exists: (path) => `O worktree em ${path} não existe mais no disco.`, session_worktree_remove_confirm_label: 'Remover', session_worktree_removed: 'Worktree removido.', session_worktree_remove_failed: 'Falha ao remover worktree: ', session_worktree_remove_status_failed: 'Falha ao ler o status do worktree: ', session_worktree_remove_locked_by_stream: 'Não é possível remover — uma sessão de streaming ativa está usando este worktree.', session_worktree_remove_locked_by_terminal: 'Não é possível remover — uma sessão de terminal ativa está usando este worktree.', session_worktree_remove_unsafe_blocked: 'Resolva alterações locais ou commits não enviados antes de remover este worktree.', session_worktree_remove_dirty_warning: 'AVISO: Este worktree tem alterações não confirmadas que serão perdidas.', session_worktree_remove_untracked_warning: (count) => `${count} arquivo(s) não rastreados serão excluídos permanentemente.`, session_worktree_remove_ahead_warning: (ahead) => `${ahead} commit(s) não enviados serão perdidos.`, session_batch_delete_worktree_confirm: 'Excluir {0} conversas? {1} conversa(s) com worktree manterão seus diretórios de worktree no disco.', session_batch_archive_worktree_confirm: 'Arquivar {0} conversas? {1} conversa(s) com worktree manterão seus diretórios de worktree no disco.', session_batch_delete_confirm: 'Excluir {0} conversas?', session_batch_archive_confirm: 'Arquivar {0} conversas?', session_select_mode: 'Selecionar', session_select_mode_desc: 'Selecionar conversas para gerenciamento em lote', session_select_all: 'Selecionar todas', session_selected_count: '{0} selecionadas', session_no_selection: 'Nenhuma conversa selecionada', // settings panel settings_heading_title: 'Control Center', settings_heading_subtitle: 'Preferências, ferramentas de conversa e controles do sistema.', settings_section_conversation_title: 'Conversa', settings_section_appearance_title: 'Aparência', settings_section_appearance_meta: 'Tema, cores de destaque e estilo visual.', settings_section_preferences_title: 'Preferências', settings_section_preferences_meta: 'Padrões e comportamento UI do Hermes Web UI.', settings_section_system_title: 'Sistema', settings_section_system_meta: 'Versão da instância e controles de acesso.', settings_check_now: 'Verificar agora', settings_checking: 'Verificando…', settings_up_to_date: 'Atualizado ✓', settings_updates_available: '{count} atualização(ões) disponível(is)', settings_updates_disabled: 'Verificação de updates desativada', settings_update_check_failed: 'Falha ao verificar updates', settings_update_no_git: 'Não é possível verificar updates (não é um checkout git)', settings_label_workspace_panel_open: 'Manter painel workspace aberto por padrão', settings_desc_workspace_panel_open: 'Quando ativo, o painel workspace abre automaticamente com cada nova sessão.', settings_label_workspace_todos_tab: 'Mostrar aba Todos no painel workspace', settings_desc_workspace_todos_tab: 'Quando ativado, uma aba Todos aparece no painel workspace. O painel Todos da barra lateral continua disponível.', settings_label_session_jump_buttons: 'Mostrar botões de salto da sessão', settings_desc_session_jump_buttons: 'Mostra botões flutuantes Início e Fim ao ler históricos longos de sessão.', settings_label_terminal_auto_expand: 'Expandir terminal automaticamente na saída', settings_desc_terminal_auto_expand: 'Expandir automaticamente o painel de terminal recolhido quando um comando em execução emite nova saída.', settings_label_session_endless_scroll: 'Carregar mensagens antigas ao rolar para cima', settings_desc_session_endless_scroll: 'Quando ativado, mensagens antigas carregam automaticamente ao rolar para cima. Quando desativado, use o botão de mensagens antigas.', settings_label_auto_scroll_follow: 'Acompanhar automaticamente o novo conteúdo', settings_desc_auto_scroll_follow: 'Quando ativado, a visualização rola para baixo conforme novos tokens chegam. Quando desativado, você controla a posição de rolagem.', settings_label_render_user_markdown: 'Render markdown in user messages', settings_label_show_titlebar_profile: 'Show profile switcher in titlebar', // TODO: translate settings_desc_show_titlebar_profile: 'When enabled, a profile switcher button appears in the top-left app titlebar so you can change profiles from any tab. Off by default; the composer footer always has a profile switcher regardless of this setting.', // TODO: translate settings_desc_render_user_markdown: 'When enabled, bold, italic, links, and other markdown in your own messages are rendered. Off by default; fenced code blocks and math always render regardless of this setting.', settings_label_large_text_paste_as_attachment: 'Attach large pasted text as file', settings_desc_large_text_paste_as_attachment: 'When enabled, long pasted text becomes a .md attachment instead of filling the composer.', settings_label_project_quick_create: 'Show per-project new-conversation buttons', settings_desc_project_quick_create: 'When enabled, each project chip in the sidebar gets a + button to start a conversation in that project.', settings_label_structured_code: 'JSON/YAML code blocks', settings_option_structured_code_auto: 'Auto: Tree for long blocks', settings_option_structured_code_on: 'Tree by default', settings_option_structured_code_off: 'Raw by default', settings_label_structured_code_auto_lines: 'Auto threshold lines', settings_desc_structured_code: 'When Auto is selected, JSON/YAML blocks with at least this many lines open in Tree view. Tree always opens the structured viewer; Raw keeps the syntax-highlighted text. You can still switch Tree/Raw on each block.', settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_chat_activity_display_mode: 'Activity display', settings_desc_chat_activity_display_mode: 'Compact Worklog groups supporting activity into a quiet summary. Transparent Stream keeps each thinking/tool event as its own chronological expandable row.', first_token_time: 'Time to first token', processed_elapsed: _i18nProcessedElapsedEn, worklog_thinking: 'Thinking', tool_target_skill_suffix: 'skill', tool_action_label: _i18nToolActionLabelEn, tool_worklog_summary: _i18nToolWorklogSummaryEn, tool_summary_join: _i18nToolSummaryJoinEn, done: 'Done', settings_option_compact_worklog: 'Compact Worklog', settings_option_transparent_stream: 'Transparent Stream', settings_label_tab_visibility: 'Abas da barra lateral', settings_desc_tab_visibility: 'Escolha quais abas aparecem na barra lateral e no rail. Chat e Configurações estão sempre visíveis.', settings_label_composer_controls: 'Chat footer controls', settings_desc_composer_controls: 'Toggle which controls are shown in the chat footer. Drag chips to reorder each footer group.', settings_label_composer_situational_controls: 'Situational footer controls', settings_desc_composer_situational_controls: 'These controls do not always appear, depending on viewport, mode, or runtime state. You can still toggle them off if needed.', composer_control_attach: 'Attach', composer_control_saved_prompts: 'Saved prompts', composer_control_mic: 'Mic', composer_control_profile: 'Profile', composer_control_workspace: 'Workspace', composer_control_model: 'Model', composer_control_reasoning: 'Reasoning', composer_control_context: 'Context', composer_control_voice_mode: 'Voice mode', composer_control_yolo: 'YOLO', composer_control_bg_badge: 'Background badge', composer_control_mobile_config: 'Mobile config', composer_control_quota_chip: 'Quota chip', composer_control_toolsets: 'Toolsets', composer_control_status: 'Status', open_in_browser: 'Abrir no navegador', settings_dropdown_conversation: 'Conversa', settings_dropdown_appearance: 'Aparência', settings_dropdown_preferences: 'Preferências', settings_dropdown_providers: 'Provedores', settings_dropdown_system: 'Sistema', settings_tab_conversation: 'Conversa', settings_tab_appearance: 'Aparência', settings_tab_preferences: 'Preferências', settings_tab_plugins: 'Plugins', settings_tab_extensions: 'Extensions', settings_extensions_gallery_tab: 'Gallery', settings_extensions_installed_tab: 'Installed', settings_extensions_diagnostics_tab: 'Diagnostics', settings_extensions_gallery_loading: 'Loading gallery…', settings_extensions_gallery_empty: 'No extensions found in the registry.', settings_extensions_gallery_error: 'Failed to load gallery.', ext_gallery_install: 'Install', ext_gallery_installing: 'Installing…', ext_gallery_installed: 'Installed', ext_gallery_uninstall: 'Uninstall', ext_gallery_uninstalling: 'Uninstalling…', ext_gallery_restart_required: 'Restart required', ext_gallery_permissions_show: 'Permissions', ext_gallery_permissions_hide: 'Hide permissions', ext_gallery_permissions_empty: 'Nenhuma permissão extra declarada.', ext_gallery_version: 'Version', ext_gallery_author: 'Author', ext_gallery_capabilities: 'Capabilities', ext_gallery_next_step: 'Próximo passo', ext_gallery_after_install: 'Após instalar', ext_gallery_local_component_required: 'Esta extensão tem um componente local. Depois de instalar, inicie o app local ou sidecar necessário.', ext_gallery_local_app_label: 'App local', ext_gallery_required_suffix: '{0} necessário', ext_gallery_sidecar_required: 'Sidecar necessário', ext_gallery_native_host_required: 'Host nativo necessário', ext_gallery_open_setup_guide: 'Abrir guia de configuração', ext_gallery_install_restart_required: 'Extensão instalada. Reinício necessário para aplicar.', ext_gallery_install_followup: 'Extensão instalada. Veja o cartão para os próximos passos.', ext_gallery_install_ok: 'Extension installed successfully.', ext_gallery_uninstall_ok: 'Extension uninstalled.', settings_plugins_title: 'Plugins', // TODO: translate plugins_enable_toggle: 'Ativar', settings_plugins_meta: 'View installed Hermes plugins and the lifecycle hooks they register. This panel is read-only.', // TODO: translate settings_plugins_empty: 'No Hermes plugins are currently visible. Install or enable plugins from the Hermes CLI/config to see them here.', // TODO: translate plugins_unnamed: 'Unnamed plugin', // TODO: translate plugins_no_description: 'No description provided.', // TODO: translate plugins_no_hooks: 'No registered lifecycle hooks', // TODO: translate plugins_registered_hooks: 'Registered hooks', // TODO: translate plugins_enabled: 'Enabled', // TODO: translate plugins_disabled: 'Disabled', // TODO: translate plugins_active_provider: 'Active (provider)', // TODO: translate plugins_provider_no_hooks: 'Provider plugin — no agent-visibility hooks', // TODO: translate plugins_load_failed: 'Failed to load plugins: ', // TODO: translate settings_tab_system: 'Sistema', settings_tab_help: 'Help', settings_help_meta: 'Resources and support for Hermes WebUI.', settings_help_docs_label: 'Documentation', settings_help_docs_desc: 'Guides, configuration reference, and the full Hermes WebUI README.', settings_help_docs_link: 'Open Documentation', settings_help_issue_label: 'Having an issue?', settings_help_issue_desc: 'Search existing reports or open a new one on GitHub.', settings_help_issue_link: 'Open GitHub Issues', settings_title: 'Configurações', settings_search_placeholder: 'Pesquisar configurações…', settings_search_no_results: 'Nenhuma configuração encontrada.', settings_save_btn: 'Salvar Configurações', settings_label_model: 'Modelo Padrão', settings_desc_model: 'Usado para novas conversas. Conversas existentes mantêm o modelo selecionado.', settings_main_advanced_button_aria: 'Advanced options for main model', settings_main_advanced_title: 'Main model options', settings_main_advanced_subtitle: 'Advanced config for the default chat model.', settings_main_advanced_saved: 'Main model options saved', settings_main_advanced_save_failed: 'Failed to save main model options', settings_main_advanced_service_tier: 'Service tier', settings_main_advanced_service_tier_desc: 'Optional request setting for OpenAI-family providers.', settings_main_advanced_service_tier_default: 'Default / off', settings_main_advanced_service_tier_priority: 'Priority (fast)', settings_label_auxiliary_models: 'Modelos auxiliares', settings_desc_auxiliary_models: 'Roteamento para tarefas secundárias como visão, compressão, geração de títulos, etc. "Auto" usa o modelo de chat principal.', settings_btn_reset_aux_models: 'Restaurar tudo para auto', settings_btn_apply_aux_models: 'Aplicar alterações', settings_aux_provider_auto: 'usar modelo principal', settings_aux_model_auto: 'auto (usar padrão do provedor)', settings_aux_model_custom: 'Modelo personalizado…', settings_aux_model_custom_prompt: 'Insira o ID do modelo:', settings_aux_loading: 'Carregando modelos auxiliares…', settings_aux_load_failed: 'Não foi possível carregar as configurações de modelos auxiliares. Certifique-se de que a API do agente esteja disponível.', settings_aux_reset_confirm_title: 'Restaurar modelos auxiliares?', settings_aux_reset_confirm_msg: 'Isso definirá todas as tarefas auxiliares para auto (usar modelo principal).', settings_aux_reset_done: 'Modelos auxiliares restaurados para auto', settings_aux_save_failed: 'Falha ao salvar o modelo auxiliar', settings_aux_saved: 'Modelos auxiliares atualizados', settings_aux_no_changes: 'Nenhuma alteração para aplicar', settings_aux_task_vision: 'Vision', settings_aux_task_vision_desc: 'image/screenshot analysis', settings_aux_task_compression: 'Compression', settings_aux_task_compression_desc: 'context summarization', settings_aux_task_web_extract: 'Web extract', settings_aux_task_web_extract_desc: 'web page summarization', settings_aux_task_session_search: 'Session search', settings_aux_task_session_search_desc: 'past-conversation recall', settings_aux_task_approval: 'Approval', settings_aux_task_approval_desc: 'smart command approval', settings_aux_task_mcp: 'MCP', settings_aux_task_mcp_desc: 'MCP tool reasoning', settings_aux_task_title_generation: 'Title generation', settings_aux_task_title_generation_desc: 'session titles', settings_aux_task_skills_hub: 'Skills hub', settings_aux_task_skills_hub_desc: 'skills search/install', settings_aux_task_curator: 'Curator', settings_aux_task_curator_desc: 'skill-usage review pass', settings_aux_task_kanban_decomposer: 'Kanban decomposer', settings_aux_task_kanban_decomposer_desc: 'task decomposition', settings_aux_task_profile_describer: 'Profile describer', settings_aux_task_profile_describer_desc: 'profile summaries', settings_aux_task_triage_specifier: 'Triage specifier', settings_aux_task_triage_specifier_desc: 'issue/task triage specs', settings_aux_advanced_button_title: 'Advanced options', settings_aux_advanced_button_aria: 'Advanced options for {task}', settings_aux_advanced_title: '{task} options', settings_aux_advanced_subtitle: 'Advanced config for auxiliary.', settings_aux_advanced_save: 'Save options', settings_aux_advanced_base_url: 'Base URL', settings_aux_advanced_base_url_desc: 'Optional provider endpoint override.', settings_aux_advanced_timeout: 'Timeout seconds', settings_aux_advanced_timeout_desc: 'Request timeout for this auxiliary task. Blank uses Hermes default.', settings_aux_advanced_download_timeout: 'Download timeout seconds', settings_aux_advanced_download_timeout_desc: 'Only relevant for tasks that download media/content, e.g. vision. Blank uses default.', settings_aux_advanced_max_concurrency: 'Max concurrency', settings_aux_advanced_max_concurrency_desc: 'Optional per-task concurrency limit. Blank uses default.', settings_aux_advanced_extra_body: 'Extra body JSON', settings_aux_advanced_extra_body_desc: 'Optional JSON object merged into the model request body.', settings_aux_advanced_api_key: 'API key override', settings_aux_advanced_api_key_set_hint: 'API key is set. Leave blank to keep it, or use clear to remove it.', settings_aux_advanced_api_key_empty_hint: 'Leave blank to use provider/default credentials.', settings_aux_advanced_api_key_clear: 'Clear existing API key override', settings_aux_advanced_extra_body_invalid_json: 'Extra body must be valid JSON', settings_aux_advanced_extra_body_object_required: 'Extra body must be a JSON object', settings_aux_advanced_saved: 'Auxiliary options saved', settings_aux_advanced_save_failed: 'Failed to save auxiliary options', settings_label_send_key: 'Tecla de Envio', settings_label_theme: 'Tema', settings_label_skin: 'Skin', settings_label_font_size: 'Tamanho da fonte', font_size_small: 'Pequeno', font_size_default: 'Padrão', font_size_large: 'Grande', font_size_xlarge: 'Extra grande', settings_autosave_saving: 'Salvando…', settings_autosave_saved: 'Salvo', settings_autosave_failed: 'Falha ao salvar', settings_autosave_retry: 'Tentar novamente', settings_label_language: 'Idioma', settings_label_quota_chip: 'Mostrar o chip de cota do provedor no compositor', settings_desc_quota_chip: 'Exibe um indicador ambiente de cota restante (por exemplo, saldo de crédito do OpenRouter) no rodapé do compositor. Desativado por padrão. Visível apenas em telas largas (≥1400px) quando ativado, para manter o compositor livre em laptops e monitores padrão.', settings_label_conversation_outline: 'Mostrar estrutura da conversa', settings_desc_conversation_outline: 'Mostra uma lista de atalhos somente no desktop para as perguntas do usuário na conversa atual. Desativado por padrão.', settings_label_hide_suggestions: 'Hide new-chat suggestions', settings_desc_hide_suggestions: 'Hide the three default suggestion buttons on the empty new-chat screen to avoid accidental taps.', settings_label_virtualize_transcript: 'Virtualize long transcripts', settings_desc_virtualize_transcript: "Render only the visible portion of very long chat transcripts (over 80 messages) for smoother scrolling. Turn this off if you see any rendering or scroll issues, or want the browser's Find (Ctrl+F) to match the whole conversation \u2014 the full transcript will render at once.", settings_label_token_usage: 'Mostrar uso de tokens', settings_label_token_speed: 'Mostrar velocidade de tokens (TPS)', settings_desc_token_speed: 'Exibe tokens por segundo nos cabeçalhos das mensagens do assistente durante o streaming e após a conclusão de uma resposta. Desativado por padrão.', settings_label_sidebar_density: 'Densidade da sidebar', cmd_reasoning: 'Alternar visibilidade do pensamento (mostrar/ocultar)', settings_label_external_sessions: 'Mostrar sessões externas', settings_label_claude_code_sessions: 'Show Claude Code sessions', settings_label_cron_sessions: 'Show cron sessions', settings_label_webhook_sessions: 'Show webhook sessions', settings_label_previous_messaging_sessions: 'Mostrar sessões de mensagens anteriores', settings_label_sync_insights: 'Sincronizar para insights', settings_label_check_updates: 'Verificar atualizações', settings_label_ignore_agent_updates: 'Ignore Agent updates', settings_label_whats_new_summary: "Summarize What's New with AI", settings_label_bot_name: 'Nome padrão do assistente', settings_label_password: 'Senha de Acesso', settings_label_pinned_limit: 'Limite de conversas fixadas', settings_desc_pinned_limit: 'Número máximo de conversas ativas que podem ser fixadas na barra lateral. O padrão é 3.', settings_label_dashboard_mode: 'Painel oficial Hermes', settings_desc_dashboard_mode: 'Mostra um link na barra de navegação quando o painel oficial hermes estiver acessível. URLs de proxy reverso público são armazenadas apenas como links no navegador e nunca são sondadas pelo servidor.', settings_dashboard_mode_auto: 'Detecção automática', settings_dashboard_mode_always: 'Mostrar sempre', settings_dashboard_mode_never: 'Nunca mostrar', settings_dashboard_save: 'Salvar configurações do link do painel', settings_label_gateway_status: 'Status do Gateway', settings_desc_gateway_status: 'Status do gateway Hermes (Telegram, Discord, Slack, etc.)', gateway_not_configured: 'Gateway não configurado', gateway_metadata_stale: 'Metadados do gateway desatualizados', gateway_endpoint_unreachable: 'Endpoint do gateway inacessível', gateway_not_running: 'Gateway não está rodando', gateway_running_label: 'Rodando', gateway_last_active: 'Última atividade: ', gateway_session_count: (n) => `${n} ${n === 1 ? 'sessão' : 'sessões'}`, gateway_load_failed: 'Falha ao carregar status do gateway', settings_saved: 'Configurações salvas', settings_save_failed: 'Falha ao salvar: ', settings_load_failed: 'Falha ao carregar configurações: ', settings_saved_pw: 'Configurações salvas — senha ativada e navegador permanece logado', settings_saved_pw_updated: 'Configurações salvas — senha atualizada', // login page login_title: 'Entrar', login_subtitle: 'Digite sua senha para continuar', login_placeholder: 'Senha', login_btn: 'Entrar', login_invalid_pw: 'Senha inválida', login_conn_failed: 'Falha na conexão', // Sidebar & Tabs tab_chat: 'Chat', tab_tasks: 'Tarefas', tab_skills: 'Skills', tab_memory: 'Memória', tab_workspaces: 'Spaces', tab_profiles: 'Perfis', tab_kanban: 'Kanban', kanban_board: 'Board', kanban_visible_tasks: '{0} visible tasks', kanban_search_tasks: 'Search tasks', kanban_all_assignees: 'All assignees', kanban_all_tenants: 'All tenants', kanban_include_archived: 'Include archived', kanban_no_matching_tasks: 'No matching tasks', kanban_no_data: 'No Kanban data', kanban_work_queue_hint: 'This is the Hermes Agent work queue. Create or triage a task, assign it, move it to Ready, then let the dispatcher claim it.', kanban_tasks_hidden_by_filters: 'Tasks hidden by filters', kanban_clear_filters: 'Clear filters', kanban_unavailable: 'Kanban unavailable', kanban_read_only: 'Read-only view', kanban_empty: 'Empty', kanban_task: 'Task', kanban_no_description: 'No description', kanban_refresh: 'Refresh', kanban_status_triage: 'Triage', kanban_status_todo: 'Todo', kanban_status_ready: 'Ready', kanban_status_running: 'Running', kanban_status_blocked: 'Blocked', kanban_status_done: 'Done', kanban_status_original_hint: 'Actual status: {0}. This dialog only supports Triage/Todo/Ready edits.', kanban_comments_count: 'Comments ({0})', kanban_events_count: 'Events ({0})', kanban_links: 'Links', kanban_parents: 'Parents', kanban_children: 'Children', kanban_runs_count: 'Runs ({0})', kanban_no_comments: 'No comments', kanban_no_events: 'No events', kanban_no_runs: 'No runs', kanban_title: 'Título', kanban_description: 'Descrição', kanban_description_placeholder: 'Opcional — o que precisa ser feito, critérios de aceitação, links', kanban_status: 'Status', kanban_assignee: 'Responsável', kanban_assignee_placeholder: 'Opcional — deixe em branco para qualquer worker', kanban_tenant: 'Tenant', kanban_tenant_placeholder: 'Opcional — slug do projeto ou equipe', kanban_priority: 'Prioridade', kanban_priority_hint: 'Números maiores executam primeiro. Padrão: 0.', kanban_title_required: 'O título é obrigatório.', kanban_edit_task: 'Editar tarefa', kanban_run_dispatcher: 'Executar despachador', kanban_run_dispatcher_confirm: 'Isso reivindicará tarefas Ready neste quadro e gerará subprocessos worker (um por tarefa, até 8 por clique). Continuar?', kanban_assignee_profiles_label: 'Perfis Hermes', kanban_assignee_other_label: 'Outros (faixas CLI / perfis removidos)', kanban_assignee_unassigned: '— Não atribuído (não rodará automaticamente) —', kanban_ready_needs_assignee: 'Você selecionou «Não atribuído» + «Ready». O despachador pulará esta tarefa. Envie novamente para confirmar ou escolha um perfil.', kanban_dispatch_preview_prefix: 'Prévia:', kanban_dispatch_run_prefix: 'Despachado:', kanban_dispatch_spawned: 'iniciadas', kanban_dispatch_promoted: 'promovidas', kanban_dispatch_reclaimed: 'reclamadas', kanban_dispatch_skipped_unassigned: 'puladas (sem responsável)', kanban_dispatch_skipped_nonspawnable: 'puladas (perfil desconhecido)', kanban_dispatch_auto_blocked: 'auto-bloqueadas', kanban_dispatch_timed_out: 'tempo esgotado', kanban_dispatch_crashed: 'falharam', kanban_new_task: 'New task', kanban_view_lanes: 'Lanes by profile', kanban_view_consolidated: 'Consolidated view', kanban_view_lanes_saved: 'Kanban view: lanes by profile', kanban_view_consolidated_saved: 'Kanban view: consolidated', kanban_view_update_failed: 'Failed to update Kanban view: ', kanban_add_comment: 'Add comment', kanban_workspace_kind: 'Workspace kind', kanban_workspace_path: 'Workspace path', kanban_workspace_path_placeholder: 'Path to workspace', kanban_workspace_scratch: 'Scratch', kanban_workspace_worktree: 'Worktree', kanban_workspace_dir: 'Directory', kanban_workspace_path_required: 'Workspace path is required for non-scratch workspaces.', kanban_skills: 'Skills', kanban_skills_placeholder: 'Comma-separated skill names, e.g. python,git', kanban_max_runtime_seconds: 'Max runtime (seconds)', kanban_max_runtime_hint: 'Leave empty for unlimited.', kanban_max_runtime_invalid: 'Max runtime must be a whole number of seconds greater than 0.', kanban_parents_modal: 'Parent dependencies', kanban_parents_placeholder: 'Parent task ID', kanban_add_dependency: 'Add dependency', kanban_remove_dependency: 'Remove dependency', kanban_dependency_placeholder: 'Task ID to link', kanban_dependency_self: 'A task cannot depend on itself', kanban_only_mine: 'Only mine', kanban_bulk_action: 'Bulk action', kanban_nudge_dispatcher: 'Preview dispatcher', kanban_stats: 'Stats', kanban_worker_log: 'Worker log', kanban_block: 'Block', kanban_unblock: 'Unblock', kanban_back_to_board: 'Back to board', kanban_lanes_by_profile: 'Lanes by profile', kanban_new_board: 'New board…', kanban_rename_board: 'Rename current board…', kanban_archive_board: 'Archive current board…', kanban_archive_board_confirm: 'Archive board "{name}"? Tasks remain on disk and the board can be restored from kanban/boards/_archived/.', kanban_board_archived: 'Board archived', kanban_board_name: 'Name', kanban_board_slug: 'Slug (lowercase, hyphens)', kanban_board_description: 'Description (optional)', kanban_board_icon: 'Icon (emoji, optional)', kanban_board_color: 'Color (optional)', kanban_board_name_required: 'Name is required', kanban_board_slug_required: 'Slug is required', kanban_card_complete: 'complete', kanban_card_archive: 'archive', kanban_unassigned: 'unassigned', kanban_status_archived: 'Archived', tab_todos: 'Todos', tab_insights: 'Estatísticas', tab_dashboard: 'Painel Hermes', dashboard_loopback_warning: 'O painel é somente loopback no servidor. Navegue pelo próprio servidor ou reinicie com --host 0.0.0.0 (inseguro).', tab_logs: 'Logs', tab_settings: 'Configurações', close_menu: 'Close menu', // TODO: translate logs_title: 'Logs', // TODO: translate logs_file: 'File', // TODO: translate logs_tail: 'Tail', // TODO: translate logs_auto_refresh: 'Auto-refresh (5s)', // TODO: translate logs_wrap: 'Wrap lines', // TODO: translate logs_copy_all: 'Copy all', // TODO: translate logs_empty: 'No log lines yet.', // TODO: translate logs_loading: 'Loading logs…', // TODO: translate logs_load_failed: 'Logs failed to load', // TODO: translate logs_status_idle: 'Choose a log file to view recent lines.', // TODO: translate logs_no_mtime: 'not written yet', // TODO: translate logs_truncated_hint: 'Showing the tail of a large log file; older bytes were skipped to keep memory bounded.', // TODO: translate logs_copied: 'Logs copied', // TODO: translate logs_severity: 'Severidade', logs_severity_all: 'Todos', logs_severity_errors: 'Erros', logs_severity_warnings: 'Avisos+', logs_filter_active: 'exibidos (filtro ativo)', new_conversation: 'Nova conversa', filter_conversations: 'Filtrar conversas...', markdown_table_filter: 'Filtrar tabela', markdown_table_sort_column: 'Ordenar coluna', session_time_unknown: 'Desconhecido', session_time_minutes_ago: (n) => `${n}m`, session_time_hours_ago: (n) => `${n}h`, session_time_days_ago: (n) => `${n}d`, session_time_last_week: '1s', session_time_bucket_today: 'Hoje', session_time_bucket_yesterday: 'Ontem', session_time_bucket_this_week: 'Esta semana', session_time_bucket_last_week: 'Semana passada', session_time_bucket_older: 'Antigo', scheduled_jobs: 'Tarefas agendadas', new_job: 'Nova tarefa', loading: 'Carregando...', search_skills: 'Buscar skills...', new_skill: 'Nova skill', personal_memory: 'Memória pessoal', current_task_list: 'Lista de tarefas atual', workspace_desc: 'Adicionar e trocar workspaces para suas sessões.', session_meta_messages: (n) => `${n} msg${n === 1 ? '' : 's'}`, session_meta_children: (n) => `${n} child${n === 1 ? '' : 'ren'}`, session_meta_segments: (n) => `${n} segment${n === 1 ? '' : 's'}`, session_lineage_toggle_hint: '{0} — turnos de contexto anteriores estão recolhidos aqui. Clique para mostrar ou ocultar.', session_lineage_static_hint: '{0} — turnos de contexto anteriores estão recolhidos aqui.', session_child_toggle_hint: '{0} — conversas filhas criadas a partir desta sessão. Clique para mostrar ou ocultar.', session_readonly_title_hint: 'Sessão importada somente leitura — {0}', session_lineage_segment_untitled: 'Segmento sem título', session_lineage_segment_open: 'Abrir segmento de linhagem', new_profile: 'Novo perfil', transcript: 'Transcrição', download_transcript: 'Baixar como Markdown', import: 'Importar', export_session_json: 'JSON', export_session_json_tooltip: 'Exportar sessão completa como JSON', export_session_html: 'HTML', export_session_html_tooltip: 'Exportar como página HTML independente', import_session_json_tooltip: 'Importar sessão de JSON', clear_conversation_btn_tooltip: 'Limpar todas as mensagens nesta conversa', // Settings detail settings_label_rtl: 'Layout de chat da direita para a esquerda', settings_desc_rtl: 'Inverte o alinhamento das mensagens do chat e da entrada do compositor para idiomas como árabe ou hebraico. Afeta apenas a área do chat — a barra lateral e outros painéis permanecem da esquerda para a direita.', settings_label_sound: 'Som de notificação', settings_desc_sound: 'Tocar som quando assistente finalizar resposta.', settings_label_notifications: 'Notificações do navegador', settings_desc_notifications: 'Mostrar notificação quando resposta completar com app em background.', notifications_enable_btn: 'Enable notifications', notifications_test_btn: 'Send test', notifications_permission_status: (status) => `Permission: ${status}`, notifications_enabled_toast: 'Notifications enabled.', notifications_denied: 'Notifications are blocked in this browser. Enable them in browser settings.', notifications_unsupported: 'Notifications are not supported in this browser.', settings_desc_token_usage: 'Exibe contagem de tokens abaixo de cada resposta. Também com /usage.', settings_sidebar_density_compact: 'Compacto', settings_sidebar_density_detailed: 'Detalhado', settings_desc_sidebar_density: 'Controla quanto metadado a lista de sessões mostra na sidebar.', settings_label_auto_title_refresh: 'Atualização adaptativa de título', settings_auto_title_refresh_off: 'Desligado', settings_auto_title_refresh_5: 'A cada 5 trocas', settings_auto_title_refresh_10: 'A cada 10 trocas', settings_auto_title_refresh_20: 'A cada 20 trocas', settings_desc_auto_title_refresh: 'Re-gera título da sessão baseado na última troca.', settings_desc_external_sessions: 'Mostrar conversas de CLI, Telegram, Discord, Slack e outros canais na lista de sessões. Clique para importar e continuar.', settings_desc_claude_code_sessions: 'Show Claude Code imported sessions in the sidebar, or hide them while leaving other external sessions visible.', settings_desc_cron_sessions: 'Surface cron job output as conversations in the sidebar. Only active when non-WebUI sessions are enabled. Defaults off; high-frequency jobs can flood the sidebar.', settings_desc_webhook_sessions: 'Surface webhook runs as conversations in the sidebar. Only active when non-WebUI sessions are enabled. Defaults off; high-volume routes can flood the sidebar.', settings_desc_previous_messaging_sessions: 'Mostrar sessões antigas de Discord, Telegram, Slack e Weixin substituídas por reset ou compressão.', settings_desc_sync_insights: 'Espelha uso de tokens para state.db.', settings_desc_check_updates: 'Mostrar banner quando versões mais novas estiverem disponíveis.', settings_desc_ignore_agent_updates: 'Keep WebUI update checks on, but hide Agent update notices and skip Agent update fetches.', settings_desc_whats_new_summary: "Changes the What's New action from opening the raw diff first to generating a short, human-readable summary. The regular diff comparison stays available after the summary.", settings_desc_bot_name: 'Usado apenas para o perfil padrão. Outros perfis usam seus próprios nomes.', settings_desc_password: 'Digite nova senha para definir ou trocar. Deixe em branco para manter.', password_placeholder: 'Digite nova senha…', password_env_var_locked: 'A variável de ambiente HERMES_WEBUI_PASSWORD está definida e tem prioridade. Remova-a e reinicie o servidor para gerenciar a senha aqui.', password_env_var_locked_placeholder: 'Bloqueado: variável HERMES_WEBUI_PASSWORD está definida', disable_auth: 'Desativar Auth', sign_out: 'Sair', settings_label_shutdown: 'Parar o servidor Hermes WebUI', settings_desc_shutdown_before_cmd: 'Encerra de forma controlada o servidor WebUI local. Útil se você iniciou via ', settings_desc_shutdown_between_cmds: ' e quer parar sem precisar trocar para o terminal. Para acessar o WebUI novamente, será necessário reiniciar o servidor (', settings_desc_shutdown_after_cmd: ' ou o app nativo).', settings_btn_shutdown: 'Parar servidor', settings_shutdown_confirm_title: 'Parar Hermes WebUI', settings_shutdown_confirm_message: 'Parar o servidor Hermes WebUI?', settings_shutdown_confirm_btn: 'Parar', settings_shutdown_stopped_message: 'Servidor parado. Você pode fechar esta aba.', // Providers panel providers_tab_title: 'Provedores', providers_section_title: 'Provedores', providers_section_meta: 'Gerenciar API keys. Mudanças fazem efeito imediatamente.', providers_status_configured: 'API key configurada', providers_status_not_configured: 'Sem API key', providers_status_oauth: 'OAuth', providers_status_api_key: 'API key', providers_status_model: 'Modelo', providers_status_not_configured_label: 'Não configurado', providers_oauth_hint: 'Autenticado via OAuth. Sem API key necessária.', providers_oauth_config_yaml_hint: 'Token configurado via config.yaml. Para atualizar, edite config.yaml ou rode hermes auth.', providers_oauth_not_configured_hint: 'Não autenticado. Rode hermes auth no terminal.', providers_save: 'Salvar', providers_refresh_models: 'Refresh models', providers_refreshing: 'Refreshing…', providers_models_refreshed: 'Models refreshed', providers_remove: 'Remover', providers_saving: 'Salvando…', providers_removing: 'Removendo…', providers_enter_key: 'Por favor digite uma API key', providers_empty: 'Nenhum provedor configurável encontrado.', providers_key_updated: 'API key salva', providers_key_removed: 'API key removida', providers_key_placeholder_new: 'sk-...', providers_key_placeholder_replace: 'Digite nova key para substituir…', provider_quota_title: 'Cota do provedor ativo', provider_quota_active_provider: 'Provedor ativo', provider_quota_last_checked_after_refresh: 'Última verificação após atualizar', provider_quota_last_checked: 'Última verificação {0}', provider_quota_refresh_usage: 'Atualizar uso', provider_quota_refreshing: 'Atualizando...', provider_quota_refresh_title: 'Atualizar agora os limites de uso do provedor', provider_quota_refresh_succeeded: 'Uso do provedor atualizado', provider_quota_refresh_failed: 'Falha ao atualizar uso do provedor', provider_quota_session_limit: 'Limite de 5 horas', provider_quota_weekly_limit: 'Limite semanal', provider_quota_window_fallback: 'Janela', provider_quota_metric_remaining: 'Restante', provider_quota_metric_used: 'Usado', provider_quota_metric_limit: 'Limite', provider_quota_status_available: 'disponível', provider_quota_status_exhausted: 'esgotado', provider_quota_status_unavailable: 'indisponível', provider_quota_status_failed: 'falhou', provider_quota_status_checked: 'verificado', provider_quota_status_no_key: 'sem chave', provider_quota_status_invalid_key: 'chave inválida', provider_quota_status_unsupported: 'não compatível', provider_quota_used_meta: '{0} usado', provider_quota_resets_meta: 'reinicia {0}', provider_quota_credential_pool: 'Pool de credenciais', provider_quota_credential_label: 'Credencial {0}', provider_quota_pool_plans: 'Planos: {0}', provider_quota_pool_no_windows: 'Nenhuma janela de limite da conta informada.', provider_quota_account_limits_loaded: 'Limites da conta carregados.', provider_quota_unavailable: 'Status da cota indisponível', provider_quota_retry_after: 'Tente novamente após {0}', provider_quota_pool_summary_available: '{0}/{1} disponíveis', provider_quota_pool_summary_exhausted: '{0} esgotadas', provider_quota_pool_summary_failed: '{0} com falha', provider_quota_pool_summary_checked: '{0} verificadas', provider_cost_budget_label: 'Monthly budget', provider_cost_budget_placeholder: 'e.g. 50.00', provider_cost_budget_set: 'Set', provider_cost_budget_clear: 'Clear', provider_cost_budget_pct: '{0}% of ${1} budget (monthly pace)', provider_cost_budget_save_failed: 'Failed to save budget', cancel: 'Cancelar', create_job: 'Criar tarefa', save_skill: 'Salvar skill', editing: 'Editando', // Empty state empty_title: 'Como posso ajudar?', empty_subtitle: 'Pergunte qualquer coisa, rode comandos, explore arquivos ou gerencie tarefas.', suggest_files: 'Quais arquivos estão neste workspace?', suggest_schedule: 'O que tenho na agenda hoje?', suggest_plan: 'Me ajude a planejar um pequeno projeto.', // onboarding onboarding_badge: 'PRIMEIRO ACESSO', onboarding_title: 'Bem-vindo ao Hermes Web UI', onboarding_lead: 'Uma configuração rápida vai verificar Hermes, salvar provedor, escolher workspace e modelo, e opcionalmente proteger com senha.', onboarding_back: 'Voltar', onboarding_continue: 'Continuar', onboarding_skip: 'Pular configuração', onboarding_skipped: 'Configuração pulada — usando config existente.', onboarding_open: 'Abrir Hermes', onboarding_step_system_title: 'Verificação do sistema', onboarding_step_system_desc: 'Verificar Hermes Agent e visibilidade da config.', onboarding_step_setup_title: 'Configuração do provedor', onboarding_step_setup_desc: 'Salvar config mínima do provedor Hermes.', onboarding_step_workspace_title: 'Workspace + modelo', onboarding_step_workspace_desc: 'Escolher padrões para novas sessões e chat.', onboarding_step_password_title: 'Senha opcional', onboarding_step_password_desc: 'Proteger Web UI antes de compartilhar.', onboarding_step_finish_title: 'Finalizar', onboarding_step_finish_desc: 'Revisar e entrar no app.', onboarding_notice_system_ready: 'Hermes Agent parece acessível pela Web UI.', onboarding_notice_system_unavailable: 'Hermes Agent não está totalmente disponível. Bootstrap pode instalar, mas setup do provedor pode requerer terminal.', onboarding_check_agent: 'Hermes Agent', onboarding_check_agent_ready: 'Detectado e importável', onboarding_check_agent_missing: 'Ausente ou parcialmente importável', onboarding_check_password: 'Senha', onboarding_check_password_enabled: 'Já ativada', onboarding_check_password_disabled: 'Não ativada ainda', onboarding_check_provider: 'Config do provedor', onboarding_check_provider_ready: 'Pronto para conversar', onboarding_check_provider_partial: 'Salvo mas incompleto', onboarding_check_provider_pending: 'Precisa verificação', onboarding_config_file: 'Arquivo de config:', onboarding_env_file: 'Arquivo .env:', onboarding_unknown: 'Desconhecido', onboarding_current_provider: 'Config atual:', onboarding_missing_imports: 'Imports ausentes:', onboarding_notice_setup_required: 'Escolha caminho simples de provedor aqui. OAuth avançado ainda pertence ao Hermes CLI.', onboarding_notice_setup_already_ready: 'Setup de provedor Hermes já detectado. Pode manter ou substituir.', onboarding_oauth_provider_ready_title: 'Provedor já autenticado', onboarding_oauth_provider_ready_body: 'Esta instância usa provedor OAuth ({provider}) configurado via CLI. Sem API key necessária.', onboarding_oauth_provider_not_ready_title: 'Provedor OAuth não autenticado', onboarding_oauth_provider_not_ready_body: 'Esta instância usa {provider} com OAuth. Rode `hermes auth` no terminal.', onboarding_oauth_switch_hint: 'Ou escolha provedor diferente abaixo para trocar para API-key:', onboarding_notice_workspace: 'Estes valores reusam as mesmas APIs de settings do app normal.', onboarding_workspace_label: 'Workspace', onboarding_workspace_or_path: 'Ou digite path do workspace', onboarding_workspace_placeholder: '/home/voce/workspace', onboarding_provider_label: 'Modo de setup', onboarding_quick_setup_badge: 'setup rápido', provider_category_easy_start: 'Início fácil', provider_category_self_hosted: 'Open / self-hosted', provider_category_specialized: 'Especializado', onboarding_api_key_label: 'API key', oauth_login_codex: 'Login with Codex (ChatGPT)', // TODO: translate oauth_codex_step1: 'Step 1: Visit this URL and enter the code', // TODO: translate oauth_codex_step2: 'Step 2: Enter this code on the page', // TODO: translate oauth_codex_polling: 'Waiting for authorization...', // TODO: translate oauth_codex_success: 'Codex OAuth login successful!', // TODO: translate oauth_codex_error: 'OAuth login failed', // TODO: translate oauth_codex_expired: 'Code expired, please try again', // TODO: translate onboarding_api_key_placeholder: 'Deixe em branco para manter key existente', onboarding_api_key_label_optional: 'API key (optional)', // TODO: translate onboarding_api_key_placeholder_optional: 'Leave blank for keyless servers', // TODO: translate onboarding_api_key_help_keyless: 'Most LM Studio / Ollama / vLLM installs run keyless — leave this blank if your server doesn\'t require authentication. Use the Test connection button to verify.', // TODO: translate onboarding_api_key_help_prefix: 'Salvo como segredo no .env do Hermes usando', onboarding_base_url_label: 'Base URL', onboarding_base_url_placeholder: 'https://seu-endpoint.exemplo/v1', onboarding_base_url_help: 'Use para endpoints OpenAI-compatible, self-hosted, LiteLLM, Ollama, LM Studio, vLLM.', onboarding_model_label: 'Modelo padrão', onboarding_workspace_help: 'Escolha modelo que Hermes deve usar para novos chats.', onboarding_custom_model_placeholder: 'nome-do-seu-modelo', onboarding_custom_model_help: 'Para endpoints customizados, digite ID exato que seu servidor espera.', onboarding_notice_password_enabled: 'Senha já configurada. Digite nova apenas se quiser substituir.', onboarding_notice_password_recommended: 'Opcional mas recomendado se expor UI além de localhost.', onboarding_password_label: 'Senha (opcional)', onboarding_password_placeholder: 'Deixe em branco para pular', onboarding_password_help: 'Senhas são salvas via settings API e hasheadas no servidor.', onboarding_notice_finish: 'Pode reabrir Configurações depois para mudar qualquer coisa.', onboarding_not_set: 'Não definido', onboarding_password_will_enable: 'Será ativada', onboarding_password_will_replace: 'Será substituída', onboarding_password_keep_existing: 'Manter senha atual', onboarding_password_remains_disabled: 'Permanecerá desativada', onboarding_password_skipped: 'Pulado por enquanto', onboarding_finish_help: 'Finalizar guarda onboarding_completed em settings e leva ao app normal.', onboarding_error_choose_workspace: 'Escolha workspace antes de continuar.', onboarding_error_choose_model: 'Escolha modelo antes de continuar.', onboarding_error_provider_required: 'Escolha modo de setup antes de continuar.', onboarding_error_base_url_required: 'Base URL é necessária para endpoints customizados.', onboarding_probe_test_button: 'Test connection', // TODO: translate onboarding_probe_probing: 'Testing connection…', // TODO: translate onboarding_probe_ok: 'Connected. {n} model(s) available.', // TODO: translate onboarding_probe_error_generic: 'Could not reach the configured base URL.', // TODO: translate onboarding_probe_error_invalid_url: 'Base URL must start with http:// or https://.', // TODO: translate onboarding_probe_error_dns: 'Could not resolve the host. Check the URL or use the host\'s IP address.', // TODO: translate onboarding_probe_error_connect_refused: 'Connection refused — the server may not be running on that address. From inside Docker, try the host IP instead of localhost.', // TODO: translate onboarding_probe_error_timeout: 'The endpoint did not respond in time. Check that the server is running and the URL is correct.', // TODO: translate onboarding_probe_error_http_4xx: 'The endpoint returned a client error. Check authentication and the URL path (typically ends in /v1).', // TODO: translate onboarding_probe_error_http_5xx: 'The endpoint returned a server error. Check the LM Studio / Ollama server logs.', // TODO: translate onboarding_probe_error_parse: 'The endpoint did not return a model list in the expected shape. Verify the URL points to the OpenAI-compatible API root.', // TODO: translate onboarding_probe_error_unreachable: 'Could not reach the configured base URL.', // TODO: translate onboarding_error_probe_failed: 'Could not validate the configured base URL.', // TODO: translate onboarding_error_workspace_required: 'Workspace é necessário.', onboarding_error_model_required: 'Modelo é necessário.', onboarding_complete: 'Configuração completa', // panel/runtime i18n error_prefix: 'Erro: ', default: 'default', search: 'Search', not_available: 'N/D', never: 'nunca', add: 'Adicionar', add_failed: 'Falha ao adicionar: ', remove_failed: 'Falha ao remover: ', switch_failed: 'Falha ao trocar: ', name_required: 'Nome é necessário', content_required: 'Conteúdo é necessário', view: 'Ver', dismiss: 'Dispensar', disable: 'Desativar', cron_no_jobs: 'Nenhuma tarefa agendada encontrada.', cron_status_off: 'desligado', cron_status_paused: 'pausado', cron_status_error: 'erro', cron_status_active: 'ativo', cron_status_running: 'rodando…', cron_status_needs_attention: 'precisa atenção', cron_attention_desc: 'Esta tarefa não tem próxima execução. Scheduler pode não ter calculado.', cron_attention_croniter_hint: 'Gateway pode não ter pacote croniter. Reinicie com cron support.', cron_attention_resume: 'Retomar e recalcular', cron_jobs_project: 'Tarefas Agendadas', cron_attention_run_once: 'Rodar uma vez agora', cron_attention_copy_diagnostics: 'Copiar diagnóstico', cron_diagnostics_copied: 'Diagnóstico copiado', cron_next: 'Próxima', cron_last: 'Última', cron_run_now: 'Rodar agora', cron_pause: 'Pausar', cron_resume: 'Retomar', cron_job_name_placeholder: 'Nome da tarefa', cron_schedule_placeholder: 'Agendamento', cron_prompt_placeholder: 'Prompt', cron_last_output: 'Último output', cron_expand_prompt: 'Expandir prompt', cron_collapse_prompt: 'Contraer prompt', cron_expand_output: 'Expandir saída', cron_collapse_output: 'Contraer saída', cron_mode_agent: 'Agente', cron_mode_script: 'Script', cron_mode_label: 'Modo', cron_script_job_banner: 'Executa um script no agendamento — stdout é entregue ao destino. Sem agente, prompt ou skills.', cron_script_card_title: 'Script', cron_script_output: 'Saída do script', cron_script_path_label: 'Caminho do script', cron_script_path_hint: 'Resolvido em ~/.hermes/scripts/ salvo caminho absoluto. Edite o script no servidor para alterar o comportamento.', cron_script_badge_title: 'Tarefa script (sem agente)', cron_workdir_label: 'Diretório de trabalho', cron_view_full_output: 'View full output', cron_all_runs: 'Todas execuções', cron_hide_runs: 'Esconder execuções', cron_no_runs_yet: '(sem execuções ainda)', cron_schedule_required_example: 'Agendamento necessário (ex: "0 9 * * *" ou "every 1h")', cron_schedule_required: 'Agendamento é necessário', cron_prompt_required: 'Prompt é necessário', cron_job_created: 'Tarefa criada', cron_job_triggered: 'Tarefa acionada', cron_job_paused: 'Tarefa pausada', cron_job_resumed: 'Tarefa retomada', cron_job_updated: 'Tarefa atualizada', cron_model_label: 'Substituir modelo', cron_model_hint: 'Substitui o modelo padrão para esta tarefa.', cron_model_no_agent_hint: 'No-agent jobs run the configured script directly; model is unused.', cron_model_use_default: 'Padrão (usar perfil/sistema padrão)', cron_delete_confirm_title: 'Excluir tarefa cron', cron_delete_confirm_message: 'Isso não pode ser desfeito.', cron_job_deleted: 'Tarefa excluída', cron_completion_status: (name, status) => `Cron "${name}" ${status}`, status_failed: 'falhou', status_completed: 'completou', todos_no_active: 'Nenhuma lista de tarefas ativa nesta sessão.', clear_conversation_title: 'Limpar conversa', clear_conversation_message: 'Limpar todas mensagens? Isso não pode ser desfeito.', clear_failed: 'Falha ao limpar: ', skills_no_match: 'Nenhuma skill corresponde.', skill_enabled: 'Habilitado', skill_disabled: 'Desabilitado', skill_toggle_failed: 'Falha ao alternar skill: ', linked_files: 'Arquivos vinculados', skill_load_failed: 'Não foi possível carregar skill: ', skill_file_load_failed: 'Não foi possível carregar arquivo: ', skills_empty_title: 'Selecione uma skill', skills_empty_sub: 'Escolha skill da sidebar para ver conteúdo, ou crie nova.', skills_edit: 'Editar', skills_delete: 'Excluir', skills_back_to: 'Voltar para {0}', tasks_empty_title: 'Selecione tarefa agendada', tasks_empty_sub: 'Escolha tarefa da sidebar para ver detalhes e execuções.', workspaces_empty_title: 'Selecione um space', workspaces_empty_sub: 'Escolha space da sidebar para ver arquivos e settings.', profiles_empty_title: 'Selecione um perfil', profiles_empty_sub: 'Escolha perfil da sidebar para ver e editar settings.', memory_notes_label: 'memória (notas)', memory_saved: 'Memória salva', my_notes: 'Minhas Notas', user_profile: 'Perfil do Usuário', external_notes_sources: 'Notas de terceiros', external_notes_empty: 'Nenhuma fonte MCP de notas ou conhecimento está visível ainda. Configure Joplin, Obsidian, Notion, llm-wiki ou outro servidor de notas para listá-lo aqui.', external_notes_auto_recall_hint: 'A recuperação automática da sessão não muda; esta gaveta mostra apenas fontes configuradas e ferramentas de leitura/pesquisa disponíveis.', external_notes_no_tools: 'Nenhuma ferramenta de leitura/pesquisa está visível para esta fonte no momento.', external_notes_tool_count: (count) => `${count} ferramenta${Number(count)===1?'':'s'} de notas ${Number(count)===1?'disponível':'disponíveis'}`, external_notes_configured_hint: 'Nomes de ferramentas são esperados desta fonte configurada; esquemas ao vivo aparecerão quando o runtime do WebUI os expuser.', external_notes_recent_ai: 'Usado recentemente pela IA', external_notes_auto: 'auto', external_notes_recent_ai_reason: 'Recuperação automática', external_notes_search_placeholder: 'Pesquisar notas…', external_notes_search_empty: 'Pesquise em uma fonte de notas configurada para pré-visualizar notas aqui.', source_active: 'active', source_configured: 'configured', no_notes_yet: 'Nenhuma nota ainda.', no_profile_yet: 'Nenhum perfil definido.', agent_soul: 'Alma do Agente', no_soul_yet: 'Nenhuma alma definida.', // skill form skill_name: 'Nome', skill_category: 'Categoria', skill_category_placeholder: 'Opcional, ex: devops', skill_content: 'Conteúdo SKILL.md', skill_content_placeholder: 'YAML frontmatter + markdown body', skill_rename_not_supported: 'Renomear skill não suportado. Crie nova e exclua antiga.', skill_metadata: 'Metadados', // cron form cron_name_label: 'Nome', cron_name_placeholder: 'Opcional', cron_schedule_label: 'Agendamento', cron_schedule_preset_label: 'Predefinição', cron_schedule_preset_hourly: 'A cada hora', cron_schedule_preset_daily: 'Diário', cron_schedule_preset_weekdays: 'Dias úteis', cron_schedule_preset_weekly: 'Semanal', cron_schedule_preset_monthly: 'Mensal', cron_schedule_preset_custom: 'Personalizado', cron_schedule_hint: "Use 'every 1h' ou uma expressão Cron para tarefas recorrentes. Durações como '30m' rodam uma vez.", cron_schedule_once_warning: "Durações como '30m' rodam uma vez e são removidas após executar. Use 'every 30m' para manter uma tarefa recorrente.", cron_prompt_label: 'Prompt', cron_deliver_label: 'Entregar output para', cron_deliver_local: 'Local (salvar output apenas)', cron_deliver_custom: 'Destino personalizado', cron_profile_label: 'Perfil', cron_profile_server_default: 'padrão do servidor', cron_profile_server_default_hint: 'Usa o perfil padrão do servidor WebUI no momento da execução. Tarefas existentes sem perfil mantêm esse comportamento legado.', cron_toast_notifications_label: 'Toasts de conclusão', cron_toast_notifications_hint: 'Mostra um toast quando este cron termina. O emblema de Tarefas e o marcador de nova execução ainda são atualizados quando desligado.', cron_toast_notifications_enabled: 'Ativado', cron_toast_notifications_disabled: 'Desativado', cron_deliver_origin: 'Origem (mesmo chat)', cron_deliver_telegram: 'Telegram', cron_deliver_discord: 'Discord', cron_skills_label: 'Skills', cron_skills_placeholder: 'Adicionar skills (opcional)…', cron_skills_edit_hint: 'Lista de skills não editável após criação.', // workspace form workspace_name_label: 'Nome', workspace_name_placeholder: 'Nome amigável opcional', workspace_path_label: 'Path', workspace_path_required: 'Path é necessário', workspace_path_readonly: 'Path não pode mudar. Apenas renomear.', workspace_new_title: 'Novo space', workspace_rename_title: 'Renomear space', // profile form profile_name_label: 'Nome', profile_name_required: 'Nome é necessário', profile_name_placeholder: 'ex: Trabalho, Pessoal', profile_provider_label: 'Provedor', profile_model_label: 'Modelo', profile_model_hint: 'Escolha provedores e modelos configurados para este novo perfil.', profile_model_use_default: 'Usar o padrão do perfil ativo', profile_model_required: 'Modelo é necessário', profile_base_url_label: 'Base URL', profile_base_url_placeholder: 'Opcional, ex: http://localhost:11434', profile_api_key_label: 'API key', profile_api_key_placeholder: 'Opcional', manage_profiles: 'Gerenciar perfis', profiles_load_failed: 'Falha ao carregar perfis', profile_switched_new_conversation: (name) => `Trocado para perfil: ${name} — nova conversa iniciada`, profile_switched: (name) => `Trocado para perfil: ${name}`, profile_delete_confirm: (name) => `Excluir perfil "${name}"?`, profile_deleted: 'Perfil excluído', profile_delete_failed: 'Falha ao excluir perfil: ', profile_create_failed: 'Falha ao criar perfil: ', profile_update_failed: 'Falha ao atualizar perfil: ', profile_already_exists: 'Perfil já existe', // workspace switch dialog workspace_switch_prompt_title: 'Trocar workspace', workspace_switch_prompt_message: 'Digite path absoluto do workspace para adicionar e trocar.', workspace_switch_prompt_confirm: 'Trocar', workspace_switch_prompt_placeholder: '/Users/voce/projeto', workspace_not_added: 'Workspace não adicionado', workspace_already_saved: 'Workspace já salvo — escolha da lista', workspace_busy_switch: 'Não pode trocar workspace com agente rodando', discard_file_edits_title: 'Descartar edições de arquivo?', discard_file_edits_message: 'Trocar workspace descarta edições não salvas no preview.', workspace_switched_to: (name) => `Trocado para ${name}`, workspace_use: 'Usar', workspace_use_title: 'Usar nesta conversa', workspace_add_title: 'Adicionar workspace', // Approval card approval_skip: 'Pular', approval_skip_title: 'Pular este prompt de aprovação', approval_skip_all: 'Pular todos', approval_skip_all_title: 'Pular todos prompts de aprovação nesta sessão', // TTS (#499) tts_listen: 'Ouvir', tts_not_supported: 'Síntese de voz não disponível', settings_label_tts: 'Texto para voz nas respostas', settings_desc_tts: 'Mostrar botão de alto-falante nas mensagens do assistente', settings_label_tts_auto_read: 'Ler respostas automaticamente', settings_desc_tts_auto_read: 'Ler automaticamente as respostas do assistente', // Composer voice-mode pref (#1488) settings_label_voice_mode: 'Hands-free voice mode button', // TODO: translate settings_desc_voice_mode: 'Show the voice-mode button (audio waveform) next to the dictation mic. Lets you speak naturally — Hermes auto-sends after a pause and reads replies aloud. Requires a browser that supports both speech recognition and TTS.', settings_label_raw_audio: 'Send raw audio instead of transcribing', settings_desc_raw_audio: 'Record and send the original audio file to the agent instead of converting it to text first. The agent can then transcribe it or process the raw audio (emotion, background noise, custom STT). Like Telegram\'s voice message behavior.', voice_send_raw: 'Send raw audio', voice_raw_attached: 'Audio attached. Press Send or type more.', // TODO: translate settings_label_tts_voice: 'Voz', settings_desc_tts_voice: 'Selecionar voz para síntese de voz', settings_label_tts_rate: 'Velocidade da fala', settings_label_tts_pitch: 'Tom da fala', settings_label_tts_engine: 'Motor TTS', settings_desc_tts_engine: 'Escolha o mecanismo de fala. Edge TTS usa vozes neurais da Microsoft através do servidor.', checkpoint_date: 'Date', // TODO: translate checkpoint_diff_files_changed: (n) => `${n} file${n === 1 ? '' : 's'} changed`, // TODO: translate checkpoint_diff_no_changes: 'No differences found between this checkpoint and the current workspace.', // TODO: translate checkpoint_diff_title: 'Changes in checkpoint', // TODO: translate checkpoint_empty: 'No checkpoints found for this workspace.', // TODO: translate checkpoint_error: 'Failed to load checkpoints', // TODO: translate checkpoint_files: 'Files', // TODO: translate checkpoint_loading: 'Loading checkpoints…', // TODO: translate checkpoint_message: 'Message', // TODO: translate checkpoint_restore: 'Restore', // TODO: translate checkpoint_restore_confirm_message: (ckpt) => `Restore workspace to checkpoint "${ckpt}"? This will overwrite files with the saved versions. Files added after this checkpoint will not be deleted.`, // TODO: translate checkpoint_restore_confirm_title: 'Restore checkpoint?', // TODO: translate checkpoint_restored: 'Checkpoint restored', // TODO: translate checkpoint_title: 'Checkpoints', // TODO: translate checkpoint_view_diff: 'View diff', // TODO: translate insights_activity_by_day: 'Activity by Day', // TODO: translate insights_activity_by_hour: 'Activity by Hour', // TODO: translate insights_cost: 'Estimated Cost', // TODO: translate insights_footer: 'Showing data from the last {days} days', // TODO: translate insights_skill_usage_title: 'Skill Usage', // TODO: translate insights_skill_usage_sub: 'Tool invocation frequency', // TODO: translate insights_skill_usage_total: 'Total invocations', // TODO: translate insights_skill_usage_skills_used: 'Skills used', // TODO: translate insights_skill_usage_no_data: 'No skill usage data yet', // TODO: translate insights_skill_usage_no_data_hint: 'Skills will appear here once used in conversations.', // TODO: translate insights_skill_usage_footer: 'Counts from ~/.hermes/skills/', // TODO: translate insights_skill_usage_col_skill: 'Skill', // TODO: translate insights_skill_usage_col_uses: 'Uses', // TODO: translate insights_skill_usage_col_views: 'Views', // TODO: translate insights_skill_usage_col_share: 'Usage %', // TODO: translate insights_skill_usage_col_patches: 'Patches', // TODO: translate insights_input_tokens: 'Input', // TODO: translate insights_messages: 'Messages', // TODO: translate insights_models: 'Models', // TODO: translate insights_no_cost: 'N/A', // TODO: translate insights_output_tokens: 'Output', // TODO: translate insights_peak_hour: 'Peak: {hour}', // TODO: translate insights_sessions: 'Sessions', // TODO: translate insights_title: 'Usage Analytics', // TODO: translate insights_token_breakdown: 'Token Breakdown', // TODO: translate insights_tokens: 'Tokens', // TODO: translate insights_total: 'Total', // TODO: translate insights_model_health_title: 'Model health comparison', // TODO: translate insights_model_health_provider: 'Provider', // TODO: translate insights_model_health_replacement: 'Replacement guide', // TODO: translate insights_model_health_cost_per_m: 'Cost / 1M', // TODO: translate settings_desc_api_redact: 'Self-hosted users can disable for transparency (not recommended for shared instances).', // TODO: translate settings_label_api_redact: 'Redact sensitive data in API responses', // TODO: translate voice_error: 'Voice not supported in this browser', // TODO: translate voice_listening: 'Listening…', // TODO: translate voice_mode_active: 'Voice mode on', // TODO: translate voice_mode_off: 'Voice mode off', // TODO: translate voice_speaking: 'Speaking…', // TODO: translate voice_thinking: 'Thinking…', // TODO: translate // Composer voice buttons (#1488) voice_dictate: 'Dictate', // TODO: translate voice_dictate_active: 'Stop dictation', voice_recording_active: 'Parar gravação', // TODO: translate voice_mode_toggle: 'Voice mode', // TODO: translate voice_mode_toggle_active: 'Exit voice mode', // TODO: translate subagent_children: 'Subagent sessions', // TODO: translate // login-flow keys (issue #1442) sign_out_failed: 'Falha ao sair: ', disable_auth_confirm_title: 'Desativar proteção por senha', disable_auth_confirm_message: 'Qualquer pessoa poderá acessar esta instância.', auth_disabled: 'Autenticação desativada — proteção por senha removida', disable_auth_failed: 'Falha ao desativar autenticação: ', current_password_label: 'Senha atual', current_password_placeholder: 'Digite a senha atual…', current_password_required: 'A senha atual é necessária para alterar ou desativar a autenticação.', current_password_incorrect: 'A senha atual está incorreta.', disable_auth_typed_confirm: 'Digite DISABLE AUTH para confirmar', auth_status_password: 'Autenticação por senha', auth_status_passkey_only: 'Somente passkey', auth_status_unauthenticated: 'Sem autenticação', auth_warning_badge: 'Auth desativada', auth_disabled_warning_message: 'Esta instância está acessível sem autenticação.', auth_acknowledged_label: 'Revisei este risco; mostre um aviso de navegação menos urgente.', auth_ack_save_failed: 'Falha ao atualizar o reconhecimento: ', outline_title: 'Esboço', outline_empty: 'Ainda não há perguntas.', outline_loading: 'Carregando…', wiki_browse: 'Browse wiki', wiki_search_placeholder: 'Search pages...', wiki_no_pages: 'No wiki pages found', wiki_not_configured: 'Wiki not configured', }, ko: { offline_title: '연결이 끊겼습니다', offline_browser_detail: '브라우저가 이 장치가 오프라인이라고 보고합니다.', offline_network_detail: '현재 이 브라우저에서 Hermes에 연결할 수 없습니다.', offline_autorefresh: 'Hermes에 다시 연결되면 이 페이지를 자동으로 새로고침합니다.', offline_check_now: '지금 확인', offline_checking: '확인 중…', offline_stream_waiting: '연결이 끊겼습니다. 새로고침을 기다리는 중…', _lang: 'ko', _label: '한국어', _speech: 'ko-KR', // boot.js cancelling: '취소 중\u2026', cancel_failed: '취소 실패: ', mic_denied: '마이크 접근이 거부되었습니다. 브라우저 권한을 확인하세요.', mic_insecure_origin: 'Voice input needs a secure connection. Open Hermes over HTTPS or from localhost to use the microphone.', // TODO: translate mic_no_speech: '음성이 감지되지 않았습니다. 다시 시도하세요.', mic_network: '음성 인식을 사용할 수 없습니다.', mic_error: '음성 입력 오류: ', session_imported: '세션을 가져왔습니다', import_failed: '가져오기 실패: ', import_invalid_json: '잘못된 JSON입니다', image_pasted: '붙여넣은 이미지: ', text_pasted: '붙여넣은 텍스트를 첨부했습니다: ', // messages.js edit_message: '메시지 편집', regenerate: '응답 다시 생성', copy: '복사', copied: '복사됨!', copy_failed: '복사 실패', selected_text_reply: '선택 항목으로 답장', selected_text_reply_title: '선택한 채팅 텍스트를 인용 컨텍스트로 추가', selected_text_reply_appended: '선택한 텍스트가 입력창에 추가되었습니다', saved_prompts_empty: '저장된 프롬프트가 없습니다.', saved_prompts_save_current: '현재 입력을 프롬프트로 저장', saved_prompts_saved: '프롬프트가 저장되었습니다', saved_prompts_delete: '프롬프트 삭제', saved_prompts_empty_input: '먼저 저장할 프롬프트를 입력하세요', context_block_name_default: '컨텍스트', context_block_flush_aria: '전송 시 컨텍스트 블록이 포함됩니다', context_block_rename_hint: '클릭하거나 Enter를 눌러 이름 변경', context_block_rename_aria: '컨텍스트 블록 이름 변경', context_block_remove: '컨텍스트 블록 제거', diff_loading: 'diff 불러오는 중', diff_error: '패치 파일을 로드할 수 없습니다', diff_too_large: '패치 파일이 너무 커서 인라인으로 표시할 수 없습니다', tree_view: 'Tree', raw_view: 'Raw', parse_failed_note: 'parse failed', you: '나', mcp_servers_title: 'MCP Servers', mcp_servers_desc: 'Manage Model Context Protocol servers configured in config.yaml.', mcp_no_servers: 'No MCP servers configured.', mcp_add_server: '+ Add Server', mcp_field_name: 'Server Name', mcp_transport_label: 'Transport Type', mcp_field_command: 'Command', mcp_field_args: 'Arguments (comma-separated)', mcp_field_url: 'URL', mcp_field_timeout: 'Timeout (seconds)', mcp_save: 'Save', mcp_cancel: 'Cancel', mcp_name_required: 'Server name is required.', mcp_url_required: 'URL is required for HTTP transport.', mcp_command_required: 'Command is required for stdio transport.', mcp_saved: 'MCP server saved.', mcp_save_failed: 'Failed to save MCP server.', mcp_delete_confirm_title: 'Delete MCP Server', mcp_delete_confirm_message: 'Delete MCP server "{0}"? This cannot be undone.', mcp_deleted: 'MCP server deleted.', mcp_delete_failed: 'Failed to delete MCP server.', mcp_load_failed: 'Failed to load MCP servers.', mcp_restart_hint: 'Server changes are read-only here for now. Edit config.yaml and restart Hermes for changes to take effect.', mcp_toggle_followup: 'Enable/disable controls are intentionally deferred until MCP reload semantics are explicit.', mcp_status_active: 'Active', mcp_status_configured: 'Configured', mcp_status_disabled: 'Disabled', mcp_status_invalid_config: 'Invalid config', mcp_status_unknown: 'Unknown', mcp_tool_count: '{0} tools', mcp_enabled_yes: 'Enabled', mcp_enabled_no: 'Disabled', mcp_enable_server: 'Enable this MCP server', mcp_disable_server: 'Disable this MCP server', mcp_enabled_toast: (name) => `MCP server "${name}" enabled.`, mcp_disabled_toast: (name) => `MCP server "${name}" disabled.`, mcp_toggle_failed: 'Failed to update MCP server.', mcp_tools_title: 'MCP Tools', mcp_tools_desc: 'Search known tools across active MCP servers.', mcp_tools_search_placeholder: 'Search tools by name, server, or description…', mcp_tools_no_tools: 'No MCP tools are available from the active runtime inventory.', mcp_tools_no_matches: 'No MCP tools match your search.', mcp_tools_load_failed: 'Failed to load MCP tools.', mcp_tools_schema_empty: 'No schema parameters.', mcp_tools_runtime_note: 'Tool inventory only uses already-known active MCP runtime data; the WebUI does not start or probe servers.', mcp_tools_summary_no_matches: (query,total) => `No MCP tools matching “${query}” (${total} total MCP tools).`, mcp_tools_summary_none: 'No MCP tools to show.', mcp_tools_summary_matching: (query) => ` matching “${query}”`, mcp_tools_summary_total_note: (total) => ` (${total} total MCP tools)`, mcp_tools_summary_showing: (start,end,filtered,searchNote,totalNote,page,pages) => `Showing ${start}-${end} of ${filtered} MCP tools${searchNote}${totalNote}. Page ${page} of ${pages}.`, mcp_tools_page_size_prefix: 'Show', mcp_tools_page_size_suffix: 'per page', mcp_tools_per_page_aria: 'MCP tools per page', mcp_tools_inactive_configured_servers: (servers) => `Configured but inactive in this WebUI runtime: ${servers}.`, mcp_tools_pagination_label: 'MCP tools pagination', mcp_tools_previous_page: '‹ Prev', mcp_tools_previous_page_aria: 'Previous MCP tools page', mcp_tools_next_page: 'Next ›', mcp_tools_next_page_aria: 'Next MCP tools page', thinking: '생각 중', expand_all: '모두 펼치기', collapse_all: '모두 접기', edit_failed: 'Edit failed: ', regen_failed: 'Regenerate failed: ', reconnect_active: 'A response is still being generated. Reload when ready?', reconnect_finished: 'A response was in progress when you last left. Messages may have updated.', // approval card approval_heading: '승인 필요', approval_desc_prefix: '위험한 명령이 감지되었습니다', approval_btn_once: '한 번 허용', approval_btn_once_title: '이 명령만 허용(Enter)', approval_btn_session: '세션 허용', approval_btn_session_title: '이 대화 세션 동안 허용', approval_btn_always: '항상 허용', approval_btn_always_title: '이 명령 패턴을 항상 허용', approval_btn_deny: '거부', approval_btn_deny_title: '거부 — 이 명령을 실행하지 않음', approval_responding: '응답 중\u2026', approval_gateway_unsupported: 'Approvals require a newer gateway. Upgrade the connected Hermes gateway to enable this.', approval_gateway_unsupported_label: '승인이 지원되지 않음', clarify_heading: '확인 필요', clarify_hint: '선택지를 고르거나 아래에 직접 입력하세요.', clarify_other: '기타', clarify_send: '보내기', clarify_input_placeholder: '응답을 입력하세요…', clarify_responding: '응답 중\u2026', session_attention_approval: (n) => n === 1 ? '승인' : `${n}개 승인`, session_attention_clarify: (n) => n === 1 ? '질문' : `${n}개 질문`, session_attention_generic: (n) => n === 1 ? '주의' : `${n}개 항목`, session_attention_approval_title: '권한 결정을 기다리는 중', session_attention_clarify_title: '답변을 기다리는 중', session_attention_generic_title: '사용자 작업을 기다리는 중', untitled: '제목 없음', n_messages: (n) => `${n}개 메시지`, load_older_messages: '↑ 위로 스크롤하거나 클릭하여 이전 메시지 불러오기', session_jump_start: '시작', session_jump_start_label: '세션 시작으로 이동', session_jump_end: '끝', session_jump_end_label: '세션 끝으로 이동', session_new_message: '새 메시지', session_new_message_label: '새 메시지가 있습니다, 끝으로 이동', jump_to_question: '응답으로', jump_to_question_label: '이 응답의 시작으로 이동', queued_label: 'Sends after response', queued_count: (n) => n === 1 ? '1 queued' : `${n} queued`, queued_cancel: 'Cancel queued message', model_unavailable: ' (unavailable)', model_unavailable_title: 'This model is no longer in your current provider list', provider_mismatch_warning: (m,p)=>`"${m}" may not work with your configured provider (${p}). Send anyway, or run \`hermes model\` in your terminal to switch.`, provider_mismatch_label: 'Provider mismatch', gateway_auth_label: 'Gateway 인증 실패', gateway_start: 'Start', gateway_stop: 'Stop', gateway_restart: 'Restart', gateway_start_success: 'Gateway start completed.', gateway_stop_success: 'Gateway stop completed.', gateway_restart_success: 'Gateway restart completed.', gateway_start_failed: 'Gateway start failed', gateway_stop_failed: 'Gateway stop failed', gateway_restart_failed: 'Gateway restart failed', gateway_running: 'Running', gateway_session: 'session', gateway_sessions: 'sessions', gateway_status_load_failed: 'Failed to load gateway status', model_not_found_label: 'Model not found', model_custom_label: 'Custom model ID', model_custom_placeholder: 'e.g. openai/gpt-5.4', model_show_all_models: '{0}개 모델 모두 보기', model_search_placeholder: 'Search models…', session_toolsets: 'Session Toolsets', // TODO: translate session_toolsets_desc: 'Use active profile defaults or choose a custom toolset list for this session', // TODO: translate session_toolsets_global: 'Active profile defaults', // TODO: translate session_toolsets_profile_defaults: 'Active profile defaults', // TODO: translate session_toolsets_custom: 'Custom override', // TODO: translate session_toolsets_use_profile_defaults: 'Use active profile defaults', // TODO: translate session_toolsets_configured_servers: 'Configured MCP servers', // TODO: translate session_toolsets_loading_servers: 'Loading configured servers...', // TODO: translate session_toolsets_no_configured_servers: 'No configured MCP servers', // TODO: translate session_toolsets_placeholder: 'tool1, tool2, \u2026', // TODO: translate session_toolsets_apply: 'Apply', // TODO: translate session_toolsets_clear: 'Use defaults', // TODO: translate session_toolsets_applied: 'Toolsets updated', // TODO: translate session_toolsets_cleared: 'Using active profile defaults', // TODO: translate session_toolsets_failed: 'Failed to update toolsets: ', // TODO: translate model_search_no_results: 'No models found', model_group_configured: '구성됨', ws_search_placeholder: '워크스페이스 검색…', ws_no_results: '워크스페이스를 찾을 수 없습니다', workspace_new_worktree_conversation: 'worktree에서 새 대화', workspace_new_worktree_conversation_meta: '이 워크스페이스용 격리된 git worktree를 만듭니다.', workspace_worktree_created: 'worktree 대화가 생성되었습니다', workspace_worktree_failed: 'worktree 생성 실패: ', session_worktree_badge: 'Worktree', model_scope_advisory: '다음 메시지부터 이 대화에 적용됩니다.', model_scope_toast: '다음 메시지부터 이 대화에 적용됩니다.', // commands.js cmd_clear: '대화 메시지 지우기', cmd_help: 'Show available slash commands', cmd_compress: 'Manually compress conversation context (usage: /compress [focus topic])', ctx_compress_hint: '\ucee8\ud14d\uc2a4\ud2b8 \uc555\ucd95\ud558\uba70 \uacf5\uac04 \ud655\ubcf4 →', ctx_compress_action: '\u26a0 \uc9c0\uae08 \uc555\ucd95\ud558\uba70 \ucee8\ud14d\uc2a4\ud2b8 \ud655\ubcf4', cmd_compact_alias: 'Legacy alias for /compress', cmd_model: '모델 전환(예: /model gpt-4o)', cmd_workspace: '이름으로 워크스페이스 전환', cmd_terminal: '워크스페이스 터미널 열기', cmd_new: '새 채팅 세션 시작', cmd_usage: '토큰 사용량 표시 켜기/끄기', cmd_theme: 'Switch appearance (theme: system/dark/light, skin: default/ares/mono/graphite/slate/poseidon/sisyphus/charizard/sienna/catppuccin/nous/geist-contrast/zeus/verdigris)', cmd_personality: 'Switch agent personality', cmd_skills: 'List available Hermes skills', cmd_use: 'Force a skill for the next message', available_commands: '사용 가능한 명령:', type_slash: '/ 를 입력해 명령 보기', conversation_cleared: '대화를 지웠습니다', command_label: '명령', context_compaction_label: 'Context compaction', retrieval_context_label: 'Indexed context', retrieval_context_preview: 'Earlier messages are stored and retrievable with context tools', preserved_task_list_label: '보존된 작업 목록', reference_only_label: 'Reference only', model_usage: 'Usage: /model ', no_model_match: 'No model matching "', model_did_you_mean: (m) => ` — did you mean "${m}"?`, switched_to: 'Switched to ', workspace_usage: 'Usage: /workspace ', no_workspace_match: 'No workspace matching "', switched_workspace: 'Switched to workspace: ', workspace_switch_failed: 'Workspace switch failed: ', new_session: '새 세션을 만들었습니다', new_session_creating: '새 대화를 만드는 중…', compressing: 'Requesting context compression...', compress_running_label: 'Compressing', compress_complete_label: 'Compression complete', auto_compress_label: '자동 압축', compress_failed_label: 'Compression failed', focus_label: 'Focus', token_usage_on: 'Token usage on', token_usage_off: 'Token usage off', usage_cache_hit_detail: '캐시: {0}% 적중({1} 읽기 / {2} 쓰기)', usage_cached_percent: '{0}% 캐시됨', theme_usage: 'Usage: /theme ', theme_set: 'Theme: ', no_active_session: '활성 세션 없음', cmd_queue: 'Queue a message for the next turn', cmd_goal: '지속 목표를 설정하거나 확인', goal_evaluating_progress: 'Evaluating goal progress…', goal_working_toward: 'Working toward goal…', goal_continuing_toast: 'Continuing toward goal…', goal_status_none: 'No active goal. Set one with /goal .', goal_status_active: (turns, max_turns, goal) => `⊙ Goal (active, ${turns}/${max_turns} turns): ${goal}`, goal_status_paused: (turns, max_turns, reason, goal) => `⏸ Goal (paused, ${turns}/${max_turns}${reason ? `, ${reason}` : ''}): ${goal}`, goal_status_done: (turns, max_turns, goal) => `✓ Goal done (${turns}/${max_turns}): ${goal}`, goal_set: (turns, goal) => `⊙ Goal set (${turns}-turn budget): ${goal}`, goal_paused: (goal) => `⏸ Goal paused: ${goal}`, goal_resumed: (goal) => `▶ Goal resumed: ${goal}`, goal_cleared: 'Goal cleared.', goal_no_goal: 'No active goal.', goal_achieved: (reason) => `✓ Goal achieved: ${reason}`, goal_paused_budget_exhausted: (turns, max_turns) => `⏸ Goal paused — ${turns}/${max_turns} turns used. Use /goal resume to keep going, or /goal clear to stop.`, goal_continuing: (turns, max_turns, reason) => `↻ Continuing toward goal (${turns}/${max_turns}): ${reason}`, cmd_interrupt: 'Cancel current turn and send a new message', cmd_steer: 'Inject a mid-turn correction without interrupting the agent', cmd_queue_no_msg: 'Usage: /queue ', cmd_queue_not_busy: 'No active task — just send normally', cmd_queue_confirm: 'Message queued', cmd_interrupt_no_msg: 'Usage: /interrupt ', cmd_interrupt_confirm: 'Interrupted — sending new message', cmd_steer_no_msg: 'Usage: /steer ', cmd_steer_fallback: 'Steer unavailable — draft restored', cmd_steer_delivered: 'Steer delivered — agent will see it on its next tool result', steer_leftover_queued: 'Steer queued for next turn', busy_steer_fallback: 'Steer unavailable — draft restored', steer_fail_no_cached_agent: 'No agent cached for this session — try refreshing', steer_fail_agent_lacks_steer: 'This agent version does not support steer', steer_fail_session_not_found: 'Session not found — it may have expired', steer_fail_not_running: 'Agent is not currently running', steer_fail_stream_dead: 'The agent stream has ended', steer_fail_steer_error: 'Steer delivery failed — the agent may have finished', steer_fail_network_error: 'Network error — check your connection', steer_fail_unknown: 'Steer unavailable', steer_recovery_retry: 'Retry', steer_recovery_dismiss: 'Dismiss', busy_interrupt_confirm: 'Interrupted — sending new message', settings_label_default_message_mode: '기본 메시지 모드', settings_desc_default_message_mode: '에이전트가 실행 중일 때 메시지를 보내면 어떻게 처리할지 제어합니다. 대기는 다음 차례까지 기다리고, 중단은 현재 작업을 취소하고 새로 시작하며, 조정은 현재 작업을 중단하지 않고 중간 수정 사항을 전달합니다. 조정을 사용할 수 없으면 초안이 복원되어 다음 동작을 선택할 수 있습니다.', settings_label_fade_text_effect: '텍스트 페이드 효과', settings_desc_fade_text_effect: '어시스턴트가 응답하는 동안 새로 스트리밍되는 단어를 부드럽게 표시합니다. OpenWebUI와 비슷하며, 최대 성능을 위해 기본값은 꺼짐입니다.', settings_label_max_tokens: '최대 출력 토큰', settings_desc_max_tokens: '새 스트리밍 응답의 출력 길이를 제한합니다. 비워 두면 현재 프로필의 대체 값을 사용합니다.', settings_placeholder_max_tokens_none: '재정의 없음', settings_placeholder_max_tokens_fallback: '재정의 없음(대체값: {0})', settings_default_message_mode_queue: '후속 메시지 대기', settings_default_message_mode_interrupt: '현재 작업 중단', settings_default_message_mode_steer: '조정(중간 수정)', settings_label_busy_placeholder_hint: 'Show busy placeholder hint', settings_desc_busy_placeholder_hint: 'Shows the composer placeholder with the current busy action while the session is running and the draft is empty.', composer_placeholder_busy_queue: 'Enter = queue | /interrupt | /background | /steer', composer_placeholder_busy_interrupt: 'Enter = interrupt | /queue | /background | /steer', composer_placeholder_busy_steer: 'Enter = steer | /queue | /background | /interrupt', slash_skill_badge: '스킬', slash_skill_desc: '이 스킬 실행', cmd_stop: '현재 응답 중지', cmd_title: '세션 제목 보기 또는 설정', cmd_retry: '마지막 메시지 다시 보내기', cmd_undo: '마지막 교환 제거', cmd_btw: '곁질문하기(임시)', cmd_btw_usage: '/btw <질문> — 세션 맥락을 사용해 곁질문하기', cmd_background: '백그라운드에서 프롬프트 실행', cmd_background_usage: '/background <프롬프트> — 차단하지 않고 병렬 실행', btw_asking: '곁질문 중...', btw_label: '곁질문 — 기록에 저장되지 않음', btw_done: '곁질문 답변 완료', btw_no_answer: '답변을 받지 못했습니다.', btw_failed: '곁질문 실패: ', bg_running: '백그라운드에서 실행 중...', bg_complete: '백그라운드 작업 완료', bg_label: '백그라운드 결과:', bg_no_answer: '(답변 없음)', bg_failed: '백그라운드 작업 실패: ', undo_exchange: '마지막 교환 실행 취소', cmd_status: '세션 정보 표시', cmd_voice: '마이크 입력 전환', stream_stopped: '응답이 중지되었습니다.', no_active_task: '중지할 활성 작업이 없습니다.', cancel_unavailable: '취소를 사용할 수 없습니다.', retry_failed: '재시도 실패: ', undo_failed: '실행 취소 실패: ', undid_n_messages: '제거됨', undid_messages_suffix: '개 메시지.', status_heading: '세션 상태', status_session_id: '세션 ID', status_title: '제목', status_model: '모델', status_provider: '제공자', status_workspace: '워크스페이스', status_personality: '페르소나', status_messages: '메시지', status_agent_running: '에이전트 실행 중', status_profile: '프로필', status_hermes_home: 'Hermes 홈', status_started: '시작 시간', status_tokens: '토큰', status_updated: '업데이트됨', status_ephemeral: '임시 스냅샷 — 대화 기록에 저장되지 않습니다.', status_no_tokens: '사용된 토큰 없음', status_unknown: '알 수 없음', status_yes: '예', status_no: '아니요', status_load_failed: '상태를 불러오지 못했습니다: ', title_current: '현재 제목', title_change_hint: '`/title <새 이름>`으로 이름을 변경하세요.', title_set: '제목 설정됨:', cmd_webui_only_session: '이 명령은 CLI에서 가져온 세션에서 사용할 수 없습니다.', cmd_voice_use_mic: '작성창의 마이크 버튼을 클릭하세요.', usage_heading: '토큰 사용량', usage_default_model: '기본값', usage_unknown: '알 수 없음', usage_input_tokens: '입력 토큰', usage_output_tokens: '출력 토큰', usage_total: '총 토큰', usage_estimated_cost: '예상 비용', usage_settings_tip: '참고: 비용 추정치는 대략적인 값입니다.', usage_load_failed: '사용량을 불러오지 못했습니다: ', usage_personality_none: '없음', no_personalities: 'No personalities found (add them to ~/.hermes/personalities/)', available_personalities: 'Available personalities:', personality_switch_hint: '\n\nUse `/personality ` to switch, or `/personality none` to clear.', personalities_load_failed: 'Failed to load personalities', personality_cleared: 'Personality cleared', personality_set: 'Personality: ', failed_colon: 'Failed: ', // ui.js no_workspace: 'No workspace', terminal_open_title: '워크스페이스 터미널 열기', terminal_no_workspace_title: '터미널을 열 워크스페이스를 선택하세요', terminal_title: '터미널', terminal_clear: '지우기', terminal_copy_output: '출력 복사', terminal_restart: '다시 시작', terminal_collapse: '접기', terminal_expand: '펼치기', terminal_close: '닫기', terminal_input_placeholder: '명령 입력...', terminal_start_failed: '터미널 시작 실패: ', terminal_input_failed: '터미널 입력 실패: ', terminal_copy_failed: '복사 실패: ', terminal_error: '터미널 오류', terminal_remote_backend_unsupported: '임베디드 터미널은 로컬 터미널 백엔드에서만 지원됩니다.', workspace_empty_no_path: 'No workspace selected. Set a workspace in Settings \u2192 Workspace to browse files.', workspace_empty_dir: 'This workspace is empty.', workspace_show_hidden_files: '숨김 파일 표시', workspace_show_hidden_files_desc: 'Include .DS_Store, .git, node_modules, and other hidden / system files in the file tree.', workspace_hidden_files_visible: 'hidden visible', workspace_hidden_files_visible_title: 'Hidden files are visible — click for options', workspace_options: 'Workspace options', dialog_confirm_title: 'Confirm action', dialog_prompt_title: 'Enter a value', dialog_confirm_btn: 'Confirm', // workspace.js unsaved_confirm: 'You have unsaved changes in the preview. Discard and navigate?', discard: '버리기', save: '저장', edit: '편집', clear: '지우기', create: '만들기', remove: '제거', save_title: 'Save changes', edit_title: 'Edit this file', saved: '저장됨', save_failed: '저장 실패: ', image_load_failed: 'Could not load image', file_open_failed: 'Could not open file', downloading: (name) => `Downloading ${name}\u2026`, double_click_rename: 'Double-click to rename', symlink_link_to: 'Symlink → {target}', external_link_open_confirm: 'This symlink points outside the workspace. Open it in a read-only external view for this browser session?', external_link_read_only: 'This external view is read-only. Create, rename, move, delete, upload, reveal, and editor actions stay disabled here.', external_link_grant_expired: 'This external view expired. Reopen the escape-target symlink to authorize it again.', session_rename_failed_no_row: 'Could not start rename — row not found.', renamed_to: 'Renamed to ', rename_failed: 'Rename failed: ', moved_to: '이동됨: ', move_failed: '이동 실패: ', delete_title: '삭제', delete_confirm: (name) => `${name}을(를) 삭제할까요?`, delete_dir_confirm: (name) => `"${name}" 폴더와 모든 내용을 삭제할까요?`, rename_title: '이름 바꾸기', rename_prompt: '새 이름:', deleted: '삭제됨: ', delete_failed: '삭제 실패: ', reveal_in_finder: '파일 관리자에서 열기', reveal_failed: '표시 실패: ', copy_file_path: '파일 경로 복사', open_in_vscode: 'VS Code에서 열기', open_in_vscode_failed: 'VS Code에서 열기 실패: ', download_folder: 'Download Folder', // TODO: translate path_copied: '파일 경로가 클립보드에 복사되었습니다', path_copy_failed: '경로 복사 실패: ', session_rename: '대화 이름 변경', session_rename_desc: '이 대화의 제목 편집', session_title_regenerate: '제목 다시 생성', session_title_regenerate_desc: 'Hermes에게 대화에서 새 제목을 생성하도록 요청합니다', session_title_regenerating: '제목 다시 생성 중…', session_title_regenerated: (title) => `제목이 다시 생성됨: ${title}`, session_title_regenerate_failed: '제목 다시 생성 실패: ', session_copy_link: '대화 링크 복사', session_copy_link_desc: '이 대화로 바로 가는 링크 복사', session_link_copied: '대화 링크가 클립보드에 복사되었습니다', session_link_copy_failed: '대화 링크를 복사하지 못했습니다: ', new_file_prompt: 'New file name (e.g. notes.md):', new_file: '새 파일', new_folder: '새 폴더', workspace_root: '워크스페이스 루트', new_file_prompt_title: '{0}의 새 파일 이름:', new_folder_prompt_title: '{0}의 새 폴더 이름:', project_name_prompt: 'Project name:', created: '생성됨: ', create_failed: '생성 실패: ', new_folder_prompt: 'New folder name:', folder_created: 'Created folder ', folder_create_failed: 'Create folder failed: ', workspace_auto_create_folder: '폴더가 없으면 생성', folder_add_as_space_btn: '스페이스로 추가', folder_add_as_space_msg: '이 폴더를 워크스페이스 목록의 새 스페이스로 추가할까요?', archive_extracted: (n, c) => `${c}개 압축 파일에서 ${n}개 파일 압축 해제됨`, folder_add_as_space_title: '스페이스로 추가할까요?', remove_title: 'Remove', empty_dir: '(비어 있음)', upload_failed: 'Upload failed: ', upload_too_large: (maxMb, fileMb) => `File is too large (${fileMb} MB). Maximum upload size is ${maxMb} MB.`, uploading: 'Uploading…', uploaded: 'Uploaded', 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_hide_external: '목록에서 숨기기', session_restore: 'Restore conversation', session_archive_desc: 'Hide this conversation until archived is shown', session_archive_worktree_desc: '이 대화를 숨기고 worktree는 디스크에 유지합니다', session_hide_external_desc: '원본 기록은 삭제하지 않고 WebUI 목록에서만 숨깁니다.', session_restore_desc: 'Bring this conversation back into the main list', session_archived: 'Session archived', session_archived_worktree: '세션이 보관되었습니다. Worktree는 디스크에 남아 있습니다.', session_hidden: '목록에서 숨겼습니다', 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_export_html: 'Export as HTML', session_export_html_desc: 'Download this conversation as a self-contained HTML file', session_duplicated: 'Session duplicated', session_duplicate_failed: 'Duplicate failed: ', session_stop_response: 'Stop response', session_stop_response_desc: 'Cancel the running response for this conversation', session_delete: 'Delete conversation', session_delete_desc: 'Permanently remove this conversation', session_delete_confirm: '이 대화를 삭제하시겠습니까?', session_delete_worktree_desc: 'WebUI 대화만 삭제하고 worktree는 디스크에 유지합니다', session_delete_worktree_confirm: (path) => `이 대화를 삭제하시겠습니까? ${path}의 worktree는 디스크에 남아 있습니다.`, session_deleted: '대화가 삭제되었습니다', session_deleted_worktree: '대화가 삭제되었습니다. Worktree는 디스크에 남아 있습니다.', session_worktree_remove: '워크트리 삭제', session_worktree_remove_desc: (path) => `${path}의 git worktree를 디스크에서 삭제합니다`, session_worktree_remove_confirm: (path) => `git worktree를 디스크에서 삭제하시겠습니까?\n\n경로: ${path}\n\n전체 worktree 디렉토리가 삭제됩니다. 세션 데이터는 WebUI에 보존됩니다.`, session_worktree_remove_not_exists: (path) => `${path}의 worktree가 디스크에 더 이상 존재하지 않습니다.`, session_worktree_remove_confirm_label: '삭제', session_worktree_removed: '워크트리가 삭제되었습니다.', session_worktree_remove_failed: '워크트리 삭제 실패: ', session_worktree_remove_status_failed: '워크트리 상태 읽기 실패: ', session_worktree_remove_locked_by_stream: '삭제할 수 없습니다 — 활성 스트리밍 세션이 이 worktree를 사용 중입니다.', session_worktree_remove_locked_by_terminal: '삭제할 수 없습니다 — 활성 터미널 세션이 이 worktree를 사용 중입니다.', session_worktree_remove_unsafe_blocked: '이 worktree를 삭제하기 전에 로컬 변경 사항이나 푸시되지 않은 커밋을 정리하세요.', session_worktree_remove_dirty_warning: '경고: 이 worktree에는 커밋되지 않은 변경 사항이 있으며 손실됩니다.', session_worktree_remove_untracked_warning: (count) => `${count}개의 추적되지 않은 파일이 영구적으로 삭제됩니다.`, session_worktree_remove_ahead_warning: (ahead) => `${ahead}개의 푸시되지 않은 커밋이 손실됩니다.`, session_select_mode: '선택', session_select_mode_desc: '일괄 관리할 대화를 선택하세요', session_select_all: '전체 선택', session_deselect_all: '전체 해제', session_selected_count: '{0}개 선택됨', session_batch_archive: '보관', session_batch_delete: '삭제', session_batch_move: '프로젝트로 이동', session_batch_delete_confirm: '{0}개의 대화를 삭제하시겠습니까?', session_batch_archive_confirm: '{0}개의 대화를 보관하시겠습니까?', session_batch_delete_worktree_confirm: '{0}개의 대화를 삭제하시겠습니까? worktree가 있는 대화 {1}개는 worktree 디렉터리를 디스크에 남깁니다.', session_batch_archive_worktree_confirm: '{0}개의 대화를 보관하시겠습니까? worktree가 있는 대화 {1}개는 worktree 디렉터리를 디스크에 유지합니다.', session_no_selection: '선택된 대화가 없습니다', // 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의 기본값과 UI 동작.', settings_section_system_title: '시스템', settings_section_system_meta: '인스턴스 버전과 접근 제어.', settings_check_now: '지금 확인', settings_checking: '확인 중\u2026', settings_up_to_date: '최신 상태 \u2713', settings_updates_available: '{count} update(s) available', settings_updates_disabled: 'Update checks disabled', settings_update_check_failed: 'Update check failed', settings_update_no_git: '업데이트를 확인할 수 없습니다 (git 체크아웃이 아닙니다)', settings_label_workspace_panel_open: '기본으로 워크스페이스 패널 열기', settings_desc_workspace_panel_open: '활성화하면 새 세션마다 워크스페이스/파일 브라우저 패널이 자동으로 열립니다. 언제든지 수동으로 닫을 수 있습니다.', settings_label_workspace_todos_tab: '워크스페이스 패널에 Todos 탭 표시', settings_desc_workspace_todos_tab: '활성화하면 워크스페이스 패널에 Todos 탭이 나타납니다. 사이드바 Todos 패널은 계속 사용할 수 있습니다.', settings_label_session_jump_buttons: '세션 이동 버튼 표시', settings_desc_session_jump_buttons: '긴 세션 기록을 읽을 때 떠 있는 시작 및 끝 버튼을 표시합니다.', settings_label_terminal_auto_expand: '출력 시 터미널 자동 펼치기', settings_desc_terminal_auto_expand: '실행 중인 명령이 새 출력을 생성할 때 접힌 터미널 패널을 자동으로 펼칩니다.', settings_label_session_endless_scroll: '위로 스크롤할 때 이전 메시지 불러오기', settings_desc_session_endless_scroll: '활성화하면 위로 스크롤할 때 이전 메시지를 자동으로 불러옵니다. 비활성화하면 이전 메시지 버튼을 사용합니다.', settings_label_auto_scroll_follow: '새 내용 자동 따라가기', settings_desc_auto_scroll_follow: '활성화하면 토큰이 스트리밍되는 동안 화면이 자동으로 맨 아래로 스크롤됩니다. 비활성화하면 스크롤 위치를 직접 제어합니다.', settings_label_render_user_markdown: 'Render markdown in user messages', settings_label_show_titlebar_profile: 'Show profile switcher in titlebar', // TODO: translate settings_desc_show_titlebar_profile: 'When enabled, a profile switcher button appears in the top-left app titlebar so you can change profiles from any tab. Off by default; the composer footer always has a profile switcher regardless of this setting.', // TODO: translate settings_desc_render_user_markdown: 'When enabled, bold, italic, links, and other markdown in your own messages are rendered. Off by default; fenced code blocks and math always render regardless of this setting.', settings_label_large_text_paste_as_attachment: 'Attach large pasted text as file', settings_desc_large_text_paste_as_attachment: 'When enabled, long pasted text becomes a .md attachment instead of filling the composer.', settings_label_project_quick_create: 'Show per-project new-conversation buttons', settings_desc_project_quick_create: 'When enabled, each project chip in the sidebar gets a + button to start a conversation in that project.', settings_label_structured_code: 'JSON/YAML code blocks', settings_option_structured_code_auto: 'Auto: Tree for long blocks', settings_option_structured_code_on: 'Tree by default', settings_option_structured_code_off: 'Raw by default', settings_label_structured_code_auto_lines: 'Auto threshold lines', settings_desc_structured_code: 'When Auto is selected, JSON/YAML blocks with at least this many lines open in Tree view. Tree always opens the structured viewer; Raw keeps the syntax-highlighted text. You can still switch Tree/Raw on each block.', settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_chat_activity_display_mode: 'Activity display', settings_desc_chat_activity_display_mode: 'Compact Worklog groups supporting activity into a quiet summary. Transparent Stream keeps each thinking/tool event as its own chronological expandable row.', first_token_time: 'Time to first token', processed_elapsed: _i18nProcessedElapsedEn, worklog_thinking: 'Thinking', tool_target_skill_suffix: 'skill', tool_action_label: _i18nToolActionLabelEn, tool_worklog_summary: _i18nToolWorklogSummaryEn, tool_summary_join: _i18nToolSummaryJoinEn, done: 'Done', settings_option_compact_worklog: 'Compact Worklog', settings_option_transparent_stream: 'Transparent Stream', settings_label_tab_visibility: '사이드바 탭', settings_desc_tab_visibility: '사이드바와 레일에 표시할 탭을 선택하세요. 채팅과 설정은 항상 표시됩니다.', settings_label_composer_controls: 'Chat footer controls', settings_desc_composer_controls: 'Toggle which controls are shown in the chat footer. Drag chips to reorder each footer group.', settings_label_composer_situational_controls: 'Situational footer controls', settings_desc_composer_situational_controls: 'These controls do not always appear, depending on viewport, mode, or runtime state. You can still toggle them off if needed.', composer_control_attach: 'Attach', composer_control_saved_prompts: 'Saved prompts', composer_control_mic: 'Mic', composer_control_profile: 'Profile', composer_control_workspace: 'Workspace', composer_control_model: 'Model', composer_control_reasoning: 'Reasoning', composer_control_context: 'Context', composer_control_voice_mode: 'Voice mode', composer_control_yolo: 'YOLO', composer_control_bg_badge: 'Background badge', composer_control_mobile_config: 'Mobile config', composer_control_quota_chip: 'Quota chip', composer_control_toolsets: 'Toolsets', composer_control_status: 'Status', open_in_browser: '브라우저에서 열기', settings_dropdown_conversation: '대화', settings_dropdown_appearance: '외형', settings_dropdown_preferences: '환경설정', settings_dropdown_providers: 'Providers', settings_dropdown_system: '시스템', settings_tab_conversation: '대화', settings_tab_appearance: '외형', settings_tab_preferences: '환경설정', settings_tab_plugins: '플러그인', settings_tab_extensions: 'Extensions', // TODO: translate settings_extensions_gallery_tab: 'Gallery', settings_extensions_installed_tab: 'Installed', settings_extensions_diagnostics_tab: 'Diagnostics', settings_extensions_gallery_loading: 'Loading gallery…', settings_extensions_gallery_empty: 'No extensions found in the registry.', settings_extensions_gallery_error: 'Failed to load gallery.', ext_gallery_install: 'Install', ext_gallery_installing: 'Installing…', ext_gallery_installed: 'Installed', ext_gallery_uninstall: 'Uninstall', ext_gallery_uninstalling: 'Uninstalling…', ext_gallery_restart_required: 'Restart required', ext_gallery_permissions_show: 'Permissions', ext_gallery_permissions_hide: 'Hide permissions', ext_gallery_permissions_empty: '추가 권한이 선언되지 않았습니다.', ext_gallery_version: 'Version', ext_gallery_author: 'Author', ext_gallery_capabilities: 'Capabilities', ext_gallery_next_step: '다음 단계', ext_gallery_after_install: '설치 후', ext_gallery_local_component_required: '이 확장에는 로컬 구성 요소가 있습니다. 설치 후 필요한 로컬 앱이나 사이드카를 시작하세요.', ext_gallery_local_app_label: '로컬 앱', ext_gallery_required_suffix: '{0} 필요', ext_gallery_sidecar_required: '사이드카 필요', ext_gallery_native_host_required: '네이티브 호스트 필요', ext_gallery_open_setup_guide: '설정 가이드 열기', ext_gallery_install_restart_required: '확장이 설치되었습니다. 적용하려면 다시 시작해야 합니다.', ext_gallery_install_followup: '확장이 설치되었습니다. 카드에서 다음 단계를 확인하세요.', ext_gallery_install_ok: 'Extension installed successfully.', ext_gallery_uninstall_ok: 'Extension uninstalled.', settings_plugins_title: 'Plugins', // TODO: translate plugins_enable_toggle: '활성화', settings_plugins_meta: 'View installed Hermes plugins and the lifecycle hooks they register. This panel is read-only.', // TODO: translate settings_plugins_empty: 'No Hermes plugins are currently visible. Install or enable plugins from the Hermes CLI/config to see them here.', // TODO: translate plugins_unnamed: 'Unnamed plugin', // TODO: translate plugins_no_description: 'No description provided.', // TODO: translate plugins_no_hooks: 'No registered lifecycle hooks', // TODO: translate plugins_registered_hooks: 'Registered hooks', // TODO: translate plugins_enabled: 'Enabled', // TODO: translate plugins_disabled: 'Disabled', // TODO: translate plugins_active_provider: 'Active (provider)', // TODO: translate plugins_provider_no_hooks: 'Provider plugin — no agent-visibility hooks', // TODO: translate plugins_load_failed: 'Failed to load plugins: ', // TODO: translate settings_tab_system: '시스템', settings_tab_help: 'Help', settings_help_meta: 'Resources and support for Hermes WebUI.', settings_help_docs_label: 'Documentation', settings_help_docs_desc: 'Guides, configuration reference, and the full Hermes WebUI README.', settings_help_docs_link: 'Open Documentation', settings_help_issue_label: 'Having an issue?', settings_help_issue_desc: 'Search existing reports or open a new one on GitHub.', settings_help_issue_link: 'Open GitHub Issues', settings_title: '설정', settings_search_placeholder: '설정 검색…', settings_search_no_results: '설정을 찾을 수 없습니다.', settings_save_btn: '설정 저장', settings_label_model: '기본 모델', settings_desc_model: '새 대화에 사용됩니다. 기존 대화는 선택된 모델을 유지합니다.', settings_main_advanced_button_aria: 'Advanced options for main model', settings_main_advanced_title: 'Main model options', settings_main_advanced_subtitle: 'Advanced config for the default chat model.', settings_main_advanced_saved: 'Main model options saved', settings_main_advanced_save_failed: 'Failed to save main model options', settings_main_advanced_service_tier: 'Service tier', settings_main_advanced_service_tier_desc: 'Optional request setting for OpenAI-family providers.', settings_main_advanced_service_tier_default: 'Default / off', settings_main_advanced_service_tier_priority: 'Priority (fast)', settings_label_auxiliary_models: '보조 모델', settings_desc_auxiliary_models: '비전, 압축, 제목 생성 등 보조 작업 라우팅. "자동"은 기본 채팅 모델을 사용합니다.', settings_btn_reset_aux_models: '모두 자동으로 재설정', settings_btn_apply_aux_models: '변경 사항 적용', settings_aux_provider_auto: '기본 모델 사용', settings_aux_model_auto: '자동 (제공자 기본값 사용)', settings_aux_model_custom: '사용자 정의 모델…', settings_aux_model_custom_prompt: '모델 ID 입력:', settings_aux_loading: '보조 모델 로딩 중…', settings_aux_load_failed: '보조 모델 설정을 로드할 수 없습니다. 에이전트 API가 사용 가능한지 확인하세요.', settings_aux_reset_confirm_title: '보조 모델을 재설정하시겠습니까?', settings_aux_reset_confirm_msg: '모든 보조 작업이 자동(기본 모델 사용)으로 설정됩니다.', settings_aux_reset_done: '보조 모델이 자동으로 재설정됨', settings_aux_save_failed: '보조 모델 저장 실패', settings_aux_saved: '보조 모델 업데이트됨', settings_aux_no_changes: '적용할 변경 사항 없음', settings_aux_task_vision: 'Vision', settings_aux_task_vision_desc: 'image/screenshot analysis', settings_aux_task_compression: 'Compression', settings_aux_task_compression_desc: 'context summarization', settings_aux_task_web_extract: 'Web extract', settings_aux_task_web_extract_desc: 'web page summarization', settings_aux_task_session_search: 'Session search', settings_aux_task_session_search_desc: 'past-conversation recall', settings_aux_task_approval: 'Approval', settings_aux_task_approval_desc: 'smart command approval', settings_aux_task_mcp: 'MCP', settings_aux_task_mcp_desc: 'MCP tool reasoning', settings_aux_task_title_generation: 'Title generation', settings_aux_task_title_generation_desc: 'session titles', settings_aux_task_skills_hub: 'Skills hub', settings_aux_task_skills_hub_desc: 'skills search/install', settings_aux_task_curator: 'Curator', settings_aux_task_curator_desc: 'skill-usage review pass', settings_aux_task_kanban_decomposer: 'Kanban decomposer', settings_aux_task_kanban_decomposer_desc: 'task decomposition', settings_aux_task_profile_describer: 'Profile describer', settings_aux_task_profile_describer_desc: 'profile summaries', settings_aux_task_triage_specifier: 'Triage specifier', settings_aux_task_triage_specifier_desc: 'issue/task triage specs', settings_aux_advanced_button_title: 'Advanced options', settings_aux_advanced_button_aria: 'Advanced options for {task}', settings_aux_advanced_title: '{task} options', settings_aux_advanced_subtitle: 'Advanced config for auxiliary.', settings_aux_advanced_save: 'Save options', settings_aux_advanced_base_url: 'Base URL', settings_aux_advanced_base_url_desc: 'Optional provider endpoint override.', settings_aux_advanced_timeout: 'Timeout seconds', settings_aux_advanced_timeout_desc: 'Request timeout for this auxiliary task. Blank uses Hermes default.', settings_aux_advanced_download_timeout: 'Download timeout seconds', settings_aux_advanced_download_timeout_desc: 'Only relevant for tasks that download media/content, e.g. vision. Blank uses default.', settings_aux_advanced_max_concurrency: 'Max concurrency', settings_aux_advanced_max_concurrency_desc: 'Optional per-task concurrency limit. Blank uses default.', settings_aux_advanced_extra_body: 'Extra body JSON', settings_aux_advanced_extra_body_desc: 'Optional JSON object merged into the model request body.', settings_aux_advanced_api_key: 'API key override', settings_aux_advanced_api_key_set_hint: 'API key is set. Leave blank to keep it, or use clear to remove it.', settings_aux_advanced_api_key_empty_hint: 'Leave blank to use provider/default credentials.', settings_aux_advanced_api_key_clear: 'Clear existing API key override', settings_aux_advanced_extra_body_invalid_json: 'Extra body must be valid JSON', settings_aux_advanced_extra_body_object_required: 'Extra body must be a JSON object', settings_aux_advanced_saved: 'Auxiliary options saved', settings_aux_advanced_save_failed: 'Failed to save auxiliary options', settings_label_send_key: '전송 키', settings_label_theme: '테마', settings_label_skin: '스킨', settings_label_font_size: '글꼴 크기', font_size_small: '작게', font_size_default: '기본', font_size_large: '크게', font_size_xlarge: '매우 크게', settings_autosave_saving: '저장 중…', settings_autosave_saved: '저장됨', settings_autosave_failed: '저장 실패', settings_autosave_retry: '다시 시도', settings_label_language: '언어', settings_label_quota_chip: '작성기에 공급자 할당량 칩 표시', settings_desc_quota_chip: '작성기 푸터에 남은 할당량 표시기(예: OpenRouter 크레딧 잔액)를 표시합니다. 기본값은 끔. 활성화 시 노트북과 표준 데스크톱에서 작성기가 복잡해지지 않도록 와이드 디스플레이(≥1400px)에서만 표시됩니다.', settings_label_conversation_outline: '대화 개요 표시', settings_desc_conversation_outline: '현재 대화의 사용자 질문으로 이동하는 데스크톱 전용 목록을 표시합니다. 기본값은 꺼짐입니다.', settings_label_hide_suggestions: 'Hide new-chat suggestions', settings_desc_hide_suggestions: 'Hide the three default suggestion buttons on the empty new-chat screen to avoid accidental taps.', settings_label_virtualize_transcript: 'Virtualize long transcripts', settings_desc_virtualize_transcript: "Render only the visible portion of very long chat transcripts (over 80 messages) for smoother scrolling. Turn this off if you see any rendering or scroll issues, or want the browser's Find (Ctrl+F) to match the whole conversation \u2014 the full transcript will render at once.", settings_label_token_usage: '토큰 사용량 표시', settings_label_token_speed: '토큰 속도(TPS) 표시', settings_desc_token_speed: '스트리밍 중과 응답 완료 후 어시스턴트 메시지 헤더에 초당 토큰 수를 표시합니다. 기본적으로 꺼져 있습니다.', settings_label_sidebar_density: '사이드바 밀도', cmd_reasoning: 'Toggle thinking visibility (show/hide), set effort level, or check current status', settings_label_external_sessions: '외부 세션 표시', settings_label_claude_code_sessions: 'Show Claude Code sessions', settings_label_cron_sessions: 'Show cron sessions', settings_label_webhook_sessions: 'Show webhook sessions', settings_label_previous_messaging_sessions: '이전 메시징 세션 표시', settings_label_sync_insights: 'Insights에 동기화', settings_label_check_updates: '업데이트 확인', settings_label_ignore_agent_updates: 'Ignore Agent updates', settings_label_whats_new_summary: "Summarize What's New with AI", settings_label_bot_name: '기본 Assistant 이름', settings_label_password: '접근 비밀번호', settings_label_pinned_limit: '고정 대화 제한', settings_desc_pinned_limit: '사이드바에 고정할 수 있는 활성 대화의 최대 수입니다. 기본값은 3입니다.', settings_label_dashboard_mode: '공식 Hermes 대시보드', settings_desc_dashboard_mode: '공식 hermes 대시보드에 연결 가능할 때 내비게이션 레일에 링크를 표시합니다. 공개 리버스 프록시 URL은 브라우저 전용 링크로만 저장되며 서버에서 프로브하지 않습니다.', settings_dashboard_mode_auto: '자동 감지', settings_dashboard_mode_always: '항상 표시', settings_dashboard_mode_never: '표시 안 함', settings_dashboard_save: '대시보드 링크 설정 저장', settings_label_gateway_status: '게이트웨이 상태', settings_desc_gateway_status: 'Hermes 게이트웨이 상태 (Telegram, Discord, Slack 등)', gateway_not_configured: '게이트웨이가 설정되지 않았습니다', gateway_metadata_stale: '게이트웨이 메타데이터가 오래되었습니다', gateway_endpoint_unreachable: '게이트웨이 엔드포인트에 연결할 수 없습니다', gateway_not_running: '게이트웨이가 실행 중이 아닙니다', gateway_running_label: '실행 중', gateway_last_active: '마지막 활동: ', gateway_session_count: (n) => `${n}개 세션`, gateway_load_failed: '게이트웨이 상태를 불러오지 못했습니다', settings_saved: '설정 저장됨', settings_save_failed: '설정 저장 실패: ', settings_load_failed: '설정 로드 실패: ', settings_saved_pw: '설정이 저장되었습니다 — 비밀번호 보호가 활성화되었으며 이 브라우저는 로그인 상태로 유지됩니다', settings_saved_pw_updated: '설정이 저장되었습니다 — 비밀번호가 업데이트되었습니다', // login page (used server-side via /api/i18n/login endpoint) login_title: '로그인', login_subtitle: '계속하려면 비밀번호를 입력하세요.', login_placeholder: '비밀번호', login_btn: '로그인', login_invalid_pw: '비밀번호가 올바르지 않습니다', login_conn_failed: '연결 실패', // Sidebar & Tabs tab_chat: '채팅', tab_tasks: '작업', tab_skills: '스킬', tab_memory: '메모리', tab_workspaces: '공간', tab_profiles: 'Agent 프로필', tab_kanban: 'Kanban', kanban_board: 'Board', kanban_visible_tasks: '{0} visible tasks', kanban_search_tasks: 'Search tasks', kanban_all_assignees: 'All assignees', kanban_all_tenants: 'All tenants', kanban_include_archived: 'Include archived', kanban_no_matching_tasks: 'No matching tasks', kanban_no_data: 'No Kanban data', kanban_work_queue_hint: 'This is the Hermes Agent work queue. Create or triage a task, assign it, move it to Ready, then let the dispatcher claim it.', kanban_tasks_hidden_by_filters: 'Tasks hidden by filters', kanban_clear_filters: 'Clear filters', kanban_unavailable: 'Kanban unavailable', kanban_read_only: 'Read-only view', kanban_empty: 'Empty', kanban_task: 'Task', kanban_no_description: 'No description', kanban_refresh: 'Refresh', kanban_status_triage: 'Triage', kanban_status_todo: 'Todo', kanban_status_ready: 'Ready', kanban_status_running: 'Running', kanban_status_blocked: 'Blocked', kanban_status_done: 'Done', kanban_status_original_hint: 'Actual status: {0}. This dialog only supports Triage/Todo/Ready edits.', kanban_comments_count: 'Comments ({0})', kanban_events_count: 'Events ({0})', kanban_links: 'Links', kanban_parents: 'Parents', kanban_children: 'Children', kanban_runs_count: 'Runs ({0})', kanban_no_comments: 'No comments', kanban_no_events: 'No events', kanban_no_runs: 'No runs', kanban_title: '제목', kanban_description: '설명', kanban_description_placeholder: '선택 — 해야 할 일, 수락 기준, 링크', kanban_status: '상태', kanban_assignee: '담당자', kanban_assignee_placeholder: '선택 — 비워두면 누구나 가능', kanban_tenant: '테넌트', kanban_tenant_placeholder: '선택 — 프로젝트 또는 팀 슬러그', kanban_priority: '우선순위', kanban_priority_hint: '높은 숫자가 먼저 실행됩니다. 기본값: 0.', kanban_title_required: '제목은 필수입니다.', kanban_edit_task: '작업 편집', kanban_run_dispatcher: '디스패처 실행', kanban_run_dispatcher_confirm: '이 보드의 Ready 작업을 클레임하고 워커 서브프로세스를 생성합니다(클릭당 최대 8개). 계속할까요?', kanban_assignee_profiles_label: 'Hermes 프로필', kanban_assignee_other_label: '기타 (CLI 레인 / 삭제된 프로필)', kanban_assignee_unassigned: '— 미할당 (자동 실행되지 않음) —', kanban_ready_needs_assignee: '«미할당» + «Ready»를 선택했습니다. 디스패처는 이 작업을 건너뜁니다. 확인하려면 다시 제출하거나 프로필을 선택하세요.', kanban_dispatch_preview_prefix: '미리보기:', kanban_dispatch_run_prefix: '디스패치됨:', kanban_dispatch_spawned: '생성됨', kanban_dispatch_promoted: '승격됨', kanban_dispatch_reclaimed: '재요청됨', kanban_dispatch_skipped_unassigned: '건너뜀 (담당자 없음)', kanban_dispatch_skipped_nonspawnable: '건너뜀 (알 수 없는 프로필)', kanban_dispatch_auto_blocked: '자동 차단', kanban_dispatch_timed_out: '시간 초과', kanban_dispatch_crashed: '충돌', kanban_new_task: 'New task', kanban_view_lanes: 'Lanes by profile', kanban_view_consolidated: 'Consolidated view', kanban_view_lanes_saved: 'Kanban view: lanes by profile', kanban_view_consolidated_saved: 'Kanban view: consolidated', kanban_view_update_failed: 'Failed to update Kanban view: ', kanban_add_comment: 'Add comment', kanban_workspace_kind: 'Workspace kind', kanban_workspace_path: 'Workspace path', kanban_workspace_path_placeholder: 'Path to workspace', kanban_workspace_scratch: 'Scratch', kanban_workspace_worktree: 'Worktree', kanban_workspace_dir: 'Directory', kanban_workspace_path_required: 'Workspace path is required for non-scratch workspaces.', kanban_skills: 'Skills', kanban_skills_placeholder: 'Comma-separated skill names, e.g. python,git', kanban_max_runtime_seconds: 'Max runtime (seconds)', kanban_max_runtime_hint: 'Leave empty for unlimited.', kanban_max_runtime_invalid: 'Max runtime must be a whole number of seconds greater than 0.', kanban_parents_modal: 'Parent dependencies', kanban_parents_placeholder: 'Parent task ID', kanban_add_dependency: 'Add dependency', kanban_remove_dependency: 'Remove dependency', kanban_dependency_placeholder: 'Task ID to link', kanban_dependency_self: 'A task cannot depend on itself', kanban_only_mine: 'Only mine', kanban_bulk_action: 'Bulk action', kanban_nudge_dispatcher: 'Preview dispatcher', kanban_stats: 'Stats', kanban_worker_log: 'Worker log', kanban_block: 'Block', kanban_unblock: 'Unblock', kanban_back_to_board: 'Back to board', kanban_lanes_by_profile: 'Lanes by profile', kanban_new_board: 'New board…', kanban_rename_board: 'Rename current board…', kanban_archive_board: 'Archive current board…', kanban_archive_board_confirm: 'Archive board "{name}"? Tasks remain on disk and the board can be restored from kanban/boards/_archived/.', kanban_board_archived: 'Board archived', kanban_board_name: 'Name', kanban_board_slug: 'Slug (lowercase, hyphens)', kanban_board_description: 'Description (optional)', kanban_board_icon: 'Icon (emoji, optional)', kanban_board_color: 'Color (optional)', kanban_board_name_required: 'Name is required', kanban_board_slug_required: 'Slug is required', kanban_card_complete: 'complete', kanban_card_archive: 'archive', kanban_unassigned: 'unassigned', kanban_status_archived: 'Archived', tab_todos: 'Todos', tab_insights: '통계', tab_dashboard: 'Hermes 대시보드', dashboard_loopback_warning: '대시보드는 서버에서 loopback 전용입니다. 서버 자체에서 접속하거나 --host 0.0.0.0(안전하지 않음)으로 다시 시작하세요.', tab_logs: 'Logs', tab_settings: '설정', close_menu: 'Close menu', // TODO: translate logs_title: 'Logs', // TODO: translate logs_file: 'File', // TODO: translate logs_tail: 'Tail', // TODO: translate logs_auto_refresh: 'Auto-refresh (5s)', // TODO: translate logs_wrap: 'Wrap lines', // TODO: translate logs_copy_all: 'Copy all', // TODO: translate logs_empty: 'No log lines yet.', // TODO: translate logs_loading: 'Loading logs…', // TODO: translate logs_load_failed: 'Logs failed to load', // TODO: translate logs_status_idle: 'Choose a log file to view recent lines.', // TODO: translate logs_no_mtime: 'not written yet', // TODO: translate logs_truncated_hint: 'Showing the tail of a large log file; older bytes were skipped to keep memory bounded.', // TODO: translate logs_copied: 'Logs copied', // TODO: translate logs_severity: '심각도', logs_severity_all: '전체', logs_severity_errors: '오류', logs_severity_warnings: '경고+', logs_filter_active: '표시됨(필터 활성)', new_conversation: '새 대화', filter_conversations: '대화 필터…', markdown_table_filter: '표 필터', markdown_table_sort_column: '열 정렬', session_time_unknown: 'Unknown', session_time_minutes_ago: (n) => `${n}m`, session_time_hours_ago: (n) => `${n}h`, session_time_days_ago: (n) => `${n}d`, session_time_last_week: '1w', session_time_bucket_today: 'Today', session_time_bucket_yesterday: 'Yesterday', session_time_bucket_this_week: 'This week', session_time_bucket_last_week: 'Last week', session_time_bucket_older: 'Older', scheduled_jobs: '예약 작업', new_job: '새 작업', loading: '로딩 중...', search_skills: 'Search skills...', new_skill: 'New skill', personal_memory: '개인 메모리', current_task_list: '현재 작업 목록', workspace_desc: '세션용 워크스페이스를 추가하고 전환합니다.', session_meta_messages: (n) => `${n} msg${n === 1 ? '' : 's'}`, session_meta_children: (n) => `${n} child${n === 1 ? '' : 'ren'}`, session_meta_segments: (n) => `${n} segment${n === 1 ? '' : 's'}`, session_lineage_toggle_hint: '{0} — 이전 컨텍스트 턴이 여기에 접혀 있습니다. 클릭하여 표시하거나 숨기세요.', session_lineage_static_hint: '{0} — 이전 컨텍스트 턴이 여기에 접혀 있습니다.', session_child_toggle_hint: '{0} — 이 세션에서 생성된 하위 대화입니다. 클릭하여 표시하거나 숨기세요.', session_readonly_title_hint: '읽기 전용으로 가져온 세션 — {0}', session_lineage_segment_untitled: '제목 없는 세그먼트', session_lineage_segment_open: '계보 세그먼트 열기', new_profile: 'New profile', transcript: '대화 기록', download_transcript: 'Download as Markdown', import: '가져오기', export_session_json: 'JSON', export_session_json_tooltip: '전체 세션을 JSON으로 내보내기', export_session_html: 'HTML', export_session_html_tooltip: '독립형 HTML 페이지로 내보내기', import_session_json_tooltip: 'JSON에서 세션 가져오기', clear_conversation_btn_tooltip: '이 대화의 모든 메시지 지우기', // Settings detail settings_label_rtl: '오른쪽에서 왼쪽 채팅 레이아웃', settings_desc_rtl: '아랍어나 히브리어 같은 언어를 위해 채팅 메시지와 작성 입력의 정렬을 뒤집습니다. 채팅 영역에만 영향을 주며, 사이드바와 다른 패널은 왼쪽에서 오른쪽으로 유지됩니다.', settings_label_sound: '알림음', settings_desc_sound: 'Assistant 응답이 끝나면 소리를 재생합니다.', settings_label_notifications: '브라우저 알림', settings_desc_notifications: '앱이 백그라운드에 있을 때 응답이 완료되면 시스템 알림을 표시합니다.', notifications_enable_btn: 'Enable notifications', notifications_test_btn: 'Send test', notifications_permission_status: (status) => `Permission: ${status}`, notifications_enabled_toast: 'Notifications enabled.', notifications_denied: 'Notifications are blocked in this browser. Enable them in browser settings.', notifications_unsupported: 'Notifications are not supported in this browser.', settings_desc_token_usage: '각 Assistant 응답 아래에 입력/출력 토큰 수를 표시합니다. /usage로도 전환할 수 있습니다.', settings_sidebar_density_compact: '간결', settings_sidebar_density_detailed: '자세히', settings_desc_sidebar_density: '왼쪽 사이드바의 세션 목록에 표시할 메타데이터 양을 제어합니다.', settings_label_auto_title_refresh: '적응형 제목 새로고침', settings_auto_title_refresh_off: '꺼짐', settings_auto_title_refresh_5: 'Every 5 exchanges', settings_auto_title_refresh_10: 'Every 10 exchanges', settings_auto_title_refresh_20: 'Every 20 exchanges', settings_desc_auto_title_refresh: '최신 대화를 바탕으로 세션 제목을 자동으로 다시 생성해 대화가 진행되어도 제목을 관련 있게 유지합니다. LLM 제목 생성 모델 설정이 필요합니다.', settings_desc_external_sessions: 'CLI, Telegram, Discord, Slack 및 기타 채널의 대화를 세션 목록에 표시합니다. 클릭하여 가져오고 계속하세요.', settings_desc_claude_code_sessions: 'Show Claude Code imported sessions in the sidebar, or hide them while leaving other external sessions visible.', settings_desc_cron_sessions: 'Surface cron job output as conversations in the sidebar. Only active when non-WebUI sessions are enabled. Defaults off; high-frequency jobs can flood the sidebar.', settings_desc_webhook_sessions: 'Surface webhook runs as conversations in the sidebar. Only active when non-WebUI sessions are enabled. Defaults off; high-volume routes can flood the sidebar.', settings_desc_previous_messaging_sessions: 'reset 또는 compression으로 교체된 이전 Discord, Telegram, Slack, Weixin 세션을 표시합니다.', settings_desc_sync_insights: 'WebUI 토큰 사용량을 state.db에 반영하여 hermes /insights에 브라우저 세션 데이터가 포함되도록 합니다. 기본값은 꺼짐입니다.', settings_desc_check_updates: 'WebUI 또는 Agent의 새 버전이 있으면 배너를 표시합니다. 백그라운드에서 주기적으로 git fetch를 실행합니다.', settings_desc_ignore_agent_updates: 'Keep WebUI update checks on, but hide Agent update notices and skip Agent update fetches.', settings_desc_whats_new_summary: "Changes the What's New action from opening the raw diff first to generating a short, human-readable summary. The regular diff comparison stays available after the summary.", settings_desc_bot_name: '기본 프로필에만 사용됩니다. 다른 프로필은 각 프로필 이름을 사용합니다.', settings_desc_password: '새 비밀번호를 설정하거나 변경하려면 입력하세요. 현재 설정을 유지하려면 비워 두세요.', password_placeholder: '새 비밀번호 입력…', password_env_var_locked: '현재 HERMES_WEBUI_PASSWORD 환경 변수가 설정되어 있어 우선 적용됩니다. 변수를 해제하고 서버를 재시작해야 여기에서 비밀번호를 관리할 수 있습니다.', password_env_var_locked_placeholder: '잠금: HERMES_WEBUI_PASSWORD 환경 변수가 설정되어 있습니다', disable_auth: '인증 비활성화', sign_out: '로그아웃', settings_label_shutdown: 'Hermes WebUI 서버 중지', settings_desc_shutdown_before_cmd: '로컬 WebUI 서버를 정상적으로 중지합니다. ', settings_desc_shutdown_between_cmds: ' 로 시작했고 터미널로 전환하지 않고 중지하고 싶을 때 유용합니다. 다시 WebUI에 접근하려면 서버(', settings_desc_shutdown_after_cmd: ' 또는 네이티브 앱)를 재시작해야 합니다.', settings_btn_shutdown: '서버 중지', settings_shutdown_confirm_title: 'Hermes WebUI 중지', settings_shutdown_confirm_message: 'Hermes WebUI 서버를 중지할까요?', settings_shutdown_confirm_btn: '중지', settings_shutdown_stopped_message: '서버가 중지되었습니다. 이 탭을 닫아도 됩니다.', // Providers panel 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_model: 'Model', providers_status_not_configured_label: 'Not configured', providers_oauth_hint: 'Authenticated via OAuth. No API key needed.', providers_oauth_config_yaml_hint: 'Token configured via config.yaml. To update, edit the providers section in your config.yaml or run hermes auth.', providers_oauth_not_configured_hint: 'Not authenticated. Run hermes auth in the terminal to configure this provider.', providers_save: 'Save', providers_refresh_models: 'Refresh models', providers_refreshing: 'Refreshing…', providers_models_refreshed: 'Models refreshed', 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…', provider_quota_title: '활성 제공자 할당량', provider_quota_active_provider: '활성 제공자', provider_quota_last_checked_after_refresh: '새로고침 후 마지막 확인', provider_quota_last_checked: '마지막 확인 {0}', provider_quota_refresh_usage: '사용량 새로고침', provider_quota_refreshing: '새로고침 중...', provider_quota_refresh_title: '제공자 사용 제한을 지금 새로고침', provider_quota_refresh_succeeded: '제공자 사용량을 새로고침했습니다', provider_quota_refresh_failed: '제공자 사용량 새로고침 실패', provider_quota_session_limit: '5시간 제한', provider_quota_weekly_limit: '주간 제한', provider_quota_window_fallback: '기간', provider_quota_metric_remaining: '남음', provider_quota_metric_used: '사용됨', provider_quota_metric_limit: '제한', provider_quota_status_available: '사용 가능', provider_quota_status_exhausted: '소진됨', provider_quota_status_unavailable: '사용 불가', provider_quota_status_failed: '실패', provider_quota_status_checked: '확인됨', provider_quota_status_no_key: '키 없음', provider_quota_status_invalid_key: '잘못된 키', provider_quota_status_unsupported: '지원되지 않음', provider_quota_used_meta: '{0} 사용됨', provider_quota_resets_meta: '{0}에 재설정', provider_quota_credential_pool: '자격 증명 풀', provider_quota_credential_label: '자격 증명 {0}', provider_quota_pool_plans: '플랜: {0}', provider_quota_pool_no_windows: '보고된 계정 제한 기간이 없습니다.', provider_quota_account_limits_loaded: '계정 제한을 불러왔습니다.', provider_quota_unavailable: '할당량 상태를 사용할 수 없습니다', provider_quota_retry_after: '{0} 후 다시 시도', provider_quota_pool_summary_available: '{0}/{1} 사용 가능', provider_quota_pool_summary_exhausted: '{0}개 소진됨', provider_quota_pool_summary_failed: '{0}개 실패', provider_quota_pool_summary_checked: '{0}개 확인됨', provider_cost_budget_label: 'Monthly budget', provider_cost_budget_placeholder: 'e.g. 50.00', provider_cost_budget_set: 'Set', provider_cost_budget_clear: 'Clear', provider_cost_budget_pct: '{0}% of ${1} budget (monthly pace)', provider_cost_budget_save_failed: 'Failed to save budget', cancel: '취소', create_job: 'Create job', save_skill: 'Save skill', editing: 'Editing', // Empty state empty_title: '무엇을 도와드릴까요?', empty_subtitle: '질문하고, 명령을 실행하고, 파일을 탐색하거나 예약 작업을 관리하세요.', suggest_files: '이 워크스페이스에는 어떤 파일이 있나요?', suggest_schedule: '오늘 일정에는 무엇이 있나요?', suggest_plan: '작은 프로젝트 계획을 도와주세요.', // onboarding onboarding_badge: '첫 실행', onboarding_title: 'Hermes Web UI에 오신 것을 환영합니다', onboarding_lead: '간단한 안내 설정으로 Hermes 설치를 확인하고, 워크스페이스와 모델을 선택하며, 필요하면 비밀번호로 앱을 보호합니다.', onboarding_back: '뒤로', onboarding_continue: '계속', onboarding_skip: '설정 건너뛰기', onboarding_skipped: 'Setup skipped — using existing config.', onboarding_open: 'Open Hermes', onboarding_step_system_title: 'System check', onboarding_step_system_desc: 'Verify Hermes Agent and config visibility.', onboarding_step_setup_title: 'Provider setup', onboarding_step_setup_desc: 'Save the minimum Hermes provider config.', onboarding_step_workspace_title: 'Workspace + model', onboarding_step_workspace_desc: 'Pick defaults for new sessions and chat.', onboarding_step_password_title: 'Optional password', onboarding_step_password_desc: 'Protect the Web UI before sharing it.', onboarding_step_finish_title: 'Finish', onboarding_step_finish_desc: 'Review and enter the app.', onboarding_notice_system_ready: 'Hermes Agent looks reachable from the Web UI.', onboarding_notice_system_unavailable: 'Hermes Agent is not fully available yet. Bootstrap can install it, but provider setup may still require a terminal.', onboarding_check_agent: 'Hermes Agent', onboarding_check_agent_ready: 'Detected and importable', onboarding_check_agent_missing: 'Missing or partially importable', onboarding_check_password: 'Password', onboarding_check_password_enabled: 'Already enabled', onboarding_check_password_disabled: 'Not enabled yet', onboarding_check_provider: 'Provider config', onboarding_check_provider_ready: 'Ready to chat', onboarding_check_provider_partial: 'Saved but incomplete', onboarding_check_provider_pending: 'Needs verification', onboarding_config_file: 'Config file:', onboarding_env_file: '.env file:', onboarding_unknown: 'Unknown', onboarding_current_provider: 'Current setup:', onboarding_missing_imports: 'Missing imports:', onboarding_notice_setup_required: 'Choose a simple provider path here. Advanced OAuth flows still belong in the Hermes CLI for now.', onboarding_notice_setup_already_ready: 'A working Hermes provider setup is already detected. You can keep it or replace it here.', onboarding_oauth_provider_ready_title: 'Provider already authenticated', onboarding_oauth_provider_ready_body: 'This instance is configured to use an OAuth provider ({provider}) that was set up via the Hermes CLI. No API key is needed here — click Continue to finish setup.', onboarding_oauth_provider_not_ready_title: 'OAuth provider not yet authenticated', onboarding_oauth_provider_not_ready_body: 'This instance is configured to use {provider}, which uses OAuth rather than an API key. Run hermes auth or hermes model in a terminal to authenticate, then reload the Web UI.', onboarding_oauth_switch_hint: 'Or choose a different provider below to switch to an API-key setup:', onboarding_notice_workspace: 'These values reuse the same settings APIs as the normal app.', onboarding_workspace_label: 'Workspace', onboarding_workspace_or_path: 'Or enter a workspace path', onboarding_workspace_placeholder: '/home/you/workspace', onboarding_provider_label: 'Setup mode', onboarding_quick_setup_badge: 'quick setup', provider_category_easy_start: 'Easy start', provider_category_self_hosted: 'Open / self-hosted', provider_category_specialized: 'Specialized', onboarding_api_key_label: 'API key', oauth_login_codex: 'Login with Codex (ChatGPT)', // TODO: translate oauth_codex_step1: 'Step 1: Visit this URL and enter the code', // TODO: translate oauth_codex_step2: 'Step 2: Enter this code on the page', // TODO: translate oauth_codex_polling: 'Waiting for authorization...', // TODO: translate oauth_codex_success: 'Codex OAuth login successful!', // TODO: translate oauth_codex_error: 'OAuth login failed', // TODO: translate oauth_codex_expired: 'Code expired, please try again', // TODO: translate onboarding_api_key_placeholder: 'Leave blank to keep an existing saved key', onboarding_api_key_label_optional: 'API key (optional)', // TODO: translate onboarding_api_key_placeholder_optional: 'Leave blank for keyless servers', // TODO: translate onboarding_api_key_help_keyless: 'Most LM Studio / Ollama / vLLM installs run keyless — leave this blank if your server doesn\'t require authentication. Use the Test connection button to verify.', // TODO: translate onboarding_api_key_help_prefix: 'Saved as a secret in your Hermes .env file using', onboarding_base_url_label: 'Base URL', onboarding_base_url_placeholder: 'https://your-endpoint.example/v1', onboarding_base_url_help: 'Use this for OpenAI-compatible routers, self-hosted servers, LiteLLM, Ollama, LM Studio, vLLM, or similar endpoints.', onboarding_model_label: 'Default model', onboarding_workspace_help: 'Pick the model Hermes should use for new chats after setup completes.', onboarding_custom_model_placeholder: 'your-model-name', onboarding_custom_model_help: 'For custom endpoints, enter the exact model ID your server expects.', onboarding_notice_password_enabled: 'A password is already configured. Enter a new one only if you want to replace it.', onboarding_notice_password_recommended: 'Optional but recommended if you will expose the UI beyond localhost.', onboarding_password_label: 'Password (optional)', onboarding_password_placeholder: 'Leave blank to skip', onboarding_password_help: 'Passwords are stored through the existing settings API and hashed server-side.', onboarding_notice_finish: 'You can reopen Settings later to change any of this.', onboarding_not_set: 'Not set', onboarding_password_will_enable: 'Will be enabled', onboarding_password_will_replace: 'Will be replaced', onboarding_password_keep_existing: 'Keep current password', onboarding_password_remains_disabled: 'Will remain disabled', onboarding_password_skipped: 'Skipped for now', onboarding_finish_help: 'Finishing stores onboarding_completed in settings and drops you into the normal app.', onboarding_error_choose_workspace: 'Choose a workspace before continuing.', onboarding_error_choose_model: 'Choose a model before continuing.', onboarding_error_provider_required: 'Choose a setup mode before continuing.', onboarding_error_base_url_required: 'Base URL is required for custom endpoints.', onboarding_probe_test_button: 'Test connection', // TODO: translate onboarding_probe_probing: 'Testing connection…', // TODO: translate onboarding_probe_ok: 'Connected. {n} model(s) available.', // TODO: translate onboarding_probe_error_generic: 'Could not reach the configured base URL.', // TODO: translate onboarding_probe_error_invalid_url: 'Base URL must start with http:// or https://.', // TODO: translate onboarding_probe_error_dns: 'Could not resolve the host. Check the URL or use the host\'s IP address.', // TODO: translate onboarding_probe_error_connect_refused: 'Connection refused — the server may not be running on that address. From inside Docker, try the host IP instead of localhost.', // TODO: translate onboarding_probe_error_timeout: 'The endpoint did not respond in time. Check that the server is running and the URL is correct.', // TODO: translate onboarding_probe_error_http_4xx: 'The endpoint returned a client error. Check authentication and the URL path (typically ends in /v1).', // TODO: translate onboarding_probe_error_http_5xx: 'The endpoint returned a server error. Check the LM Studio / Ollama server logs.', // TODO: translate onboarding_probe_error_parse: 'The endpoint did not return a model list in the expected shape. Verify the URL points to the OpenAI-compatible API root.', // TODO: translate onboarding_probe_error_unreachable: 'Could not reach the configured base URL.', // TODO: translate onboarding_error_probe_failed: 'Could not validate the configured base URL.', // TODO: translate onboarding_error_workspace_required: 'Workspace is required.', onboarding_error_model_required: 'Model is required.', onboarding_complete: '설정 완료', // panel/runtime i18n error_prefix: 'Error: ', default: 'default', search: 'Search', not_available: 'N/A', never: 'never', add: 'Add', add_failed: 'Add failed: ', remove_failed: 'Remove failed: ', switch_failed: 'Switch failed: ', name_required: 'Name is required', content_required: 'Content is required', view: 'View', dismiss: 'Dismiss', disable: 'Disable', cron_no_jobs: 'No scheduled jobs found.', cron_status_off: 'off', cron_status_paused: 'paused', cron_status_error: 'error', cron_status_active: 'active', cron_status_running: '\uc2e4\ud589 \uc911\u2026', cron_status_needs_attention: '주의 필요', cron_attention_desc: '이 반복 작업에 다음 실행 시간이 없습니다. 스케줄러가 다음 실행을 계산하지 못했을 수 있습니다.', cron_attention_croniter_hint: 'Gateway 런타임에 croniter 패키지가 없을 수 있습니다. cron 지원이 포함된 환경으로 Gateway를 재시작한 후 이 작업을 재개하세요.', cron_attention_resume: '재개 및 재계산', cron_jobs_project: '예약 작업', cron_attention_run_once: '지금 한 번 실행', cron_attention_copy_diagnostics: '진단 정보 복사', cron_diagnostics_copied: '크론 진단 정보가 복사되었습니다', cron_next: 'Next', cron_last: 'Last', cron_run_now: 'Run now', cron_pause: 'Pause', cron_resume: 'Resume', cron_job_name_placeholder: 'Job name', cron_schedule_placeholder: 'Schedule', cron_prompt_placeholder: 'Prompt', cron_last_output: 'Last output', cron_expand_prompt: 'Expand prompt', cron_collapse_prompt: 'Collapse prompt', cron_expand_output: 'Expand output', cron_collapse_output: 'Collapse output', cron_mode_agent: 'Agent', cron_mode_script: 'Script', cron_mode_label: 'Mode', cron_script_job_banner: 'Runs a script on schedule — stdout is delivered to the target. No agent, prompt, or skills.', cron_script_card_title: 'Script', cron_script_output: 'Script output', cron_script_path_label: 'Script path', cron_script_path_hint: 'Resolved under ~/.hermes/scripts/ unless an absolute path. Edit the script file on the server to change behavior.', cron_script_badge_title: 'Script job (no agent)', cron_workdir_label: 'Working directory', cron_view_full_output: 'View full output', cron_all_runs: 'All runs', cron_hide_runs: 'Hide runs', cron_no_runs_yet: '(no runs yet)', cron_schedule_required_example: 'Schedule is required (e.g. "0 9 * * *" or "every 1h")', cron_schedule_required: 'Schedule is required', cron_prompt_required: 'Prompt is required', cron_job_created: 'Job created', cron_duplicate: 'Duplicate', cron_duplicated: 'Job duplicated (paused)', cron_job_triggered: 'Job triggered', cron_job_paused: 'Job paused', cron_job_resumed: 'Job resumed', cron_job_updated: 'Job updated', cron_model_label: 'Model Override', cron_model_hint: 'Override the default model for this job.', cron_model_no_agent_hint: 'No-agent jobs run the configured script directly; model is unused.', cron_model_use_default: 'Default (use profile/system default)', cron_delete_confirm_title: 'Delete cron job', cron_delete_confirm_message: 'This cannot be undone.', cron_job_deleted: 'Job deleted', cron_completion_status: (name, status) => `Cron "${name}" ${status}`, status_failed: 'failed', status_completed: 'completed', todos_no_active: 'No active task list in this session.', clear_conversation_title: 'Clear conversation', clear_conversation_message: 'Clear all messages? This cannot be undone.', clear_failed: 'Clear failed: ', skills_no_match: 'No skills match.', skill_enabled: '활성화됨', skill_disabled: '비활성화됨', skill_toggle_failed: '스킬 전환 실패: ', linked_files: 'Linked Files', skill_load_failed: 'Could not load skill: ', skill_file_load_failed: 'Could not load file: ', skill_name_required: 'Skill name is required', skill_updated: 'Skill updated', skill_created: 'Skill created', skill_deleted: 'Skill deleted', skill_delete_confirm: 'Delete skill "{0}"?', skills_empty_title: 'Select a skill', skills_empty_sub: 'Pick a skill from the sidebar to view its contents, or create a new one.', skills_edit: 'Edit', skills_delete: 'Delete', skills_back_to: 'Back to {0}', tasks_empty_title: 'Select a scheduled job', tasks_empty_sub: 'Pick a job from the sidebar to view its details and runs, or create a new one.', workspaces_empty_title: 'Select a space', workspaces_empty_sub: 'Pick a space from the sidebar to view its files and settings, or add a new one.', profiles_empty_title: 'Select a profile', profiles_empty_sub: 'Pick an agent profile from the sidebar to view and edit its settings, or create a new one.', memory_notes_label: 'memory (notes)', memory_saved: 'Memory saved', my_notes: 'My Notes', user_profile: 'User Profile', external_notes_sources: '타사 노트', external_notes_empty: '아직 표시되는 노트 또는 지식 MCP 소스가 없습니다. Joplin, Obsidian, Notion, llm-wiki 또는 다른 노트 서버를 설정하면 여기에 표시됩니다.', external_notes_auto_recall_hint: '자동 세션 리콜은 변경되지 않습니다. 이 드로어는 설정된 소스와 사용 가능한 읽기/검색 도구만 보여줍니다.', external_notes_no_tools: '이 소스에 대해 현재 표시되는 읽기/검색 도구가 없습니다.', external_notes_tool_count: (count) => `${count}개의 노트 도구 사용 가능`, external_notes_configured_hint: '이 설정된 소스에서 도구 이름이 제공될 것으로 예상됩니다. WebUI 런타임이 노출하면 실시간 스키마가 표시됩니다.', external_notes_recent_ai: 'AI가 최근 사용', external_notes_auto: 'auto', external_notes_recent_ai_reason: '자동 리콜', external_notes_search_placeholder: '노트 검색…', external_notes_search_empty: '설정된 노트 소스를 검색하면 여기에 노트 미리보기가 표시됩니다.', source_active: 'active', source_configured: 'configured', no_notes_yet: 'No notes yet.', no_profile_yet: 'No profile yet.', agent_soul: 'Agent Soul', no_soul_yet: 'No soul defined yet.', workspace_choose_path: 'Choose workspace path', workspace_choose_path_meta: 'Add a validated path and switch this conversation', workspace_manage: 'Manage workspaces', workspace_manage_meta: 'Open the Spaces panel', workspace_use_title: 'Use in current session', workspace_use: 'Use', workspace_add_path_placeholder: 'Add workspace path (e.g. /home/user/my-project)', workspace_paths_validated_hint: 'Paths are validated as existing directories before saving.', workspace_drag_hint: '드래그하여 순서 변경', workspace_reorder_failed: '순서 변경 실패', workspace_added: 'Workspace added', workspace_renamed: 'Workspace renamed', workspace_remove_confirm_title: 'Remove workspace', workspace_remove_confirm_message: (path) => `Remove "${path}"?`, workspace_removed: 'Workspace removed', workspace_switch_prompt_title: 'Switch workspace', workspace_switch_prompt_message: 'Enter an absolute workspace path to add and switch this conversation to.', workspace_switch_prompt_confirm: 'Switch', workspace_switch_prompt_placeholder: '/Users/you/project', workspace_not_added: 'Workspace was not added', workspace_already_saved: 'Workspace already saved — choose it from the list', workspace_busy_switch: 'Cannot switch workspace while agent is running', discard_file_edits_title: 'Discard file edits?', discard_file_edits_message: 'Switching workspaces will discard unsaved file edits in the preview.', workspace_switched_to: (name) => `Switched to ${name}`, profiles_no_profiles: 'No profiles found.', profile_api_keys_configured: 'API keys configured', profile_gateway_running: 'Gateway running', profile_gateway_stopped: 'Gateway stopped', profile_active: 'ACTIVE', profile_no_configuration: 'No configuration', profile_skill_count: (count) => `${count} skill${count === 1 ? '' : 's'}`, profile_use: 'Use', profile_switch_title: 'Switch to this profile', profile_delete_title: 'Delete this profile', profile_default_label: '(default)', profile_name_placeholder: 'Profile name (lowercase, a-z 0-9 hyphens)', profile_clone_label: 'Clone config from active profile', profile_model_label: 'Model / provider', profile_model_hint: 'Choose from configured providers and models for this new profile.', profile_model_use_default: 'Use active profile default', profile_base_url_placeholder: 'Base URL (optional, e.g. http://localhost:11434)', profile_api_key_placeholder: 'API key (optional)', manage_profiles: 'Manage profiles', profiles_load_failed: 'Failed to load profiles', profile_switched_new_conversation: (name) => `Switched to profile: ${name} — new conversation started`, profile_switched: (name) => `Switched to profile: ${name}`, profile_name_rule: 'Lowercase letters, numbers, hyphens, underscores only', profile_base_url_rule: 'Base URL must start with http:// or https://', profile_created: (name) => `Profile created: ${name}`, profile_delete_confirm_title: (name) => `Delete profile "${name}"?`, profile_delete_confirm_message: 'All sessions, config, skills, and memory for this profile will be permanently deleted. This cannot be undone.', profile_deleted: (name) => `Profile deleted: ${name}`, active_conversation_none: 'No active conversation selected.', active_conversation_meta: (title, count) => `${title} · ${count} message${count === 1 ? '' : 's'}`, settings_unsaved_changes: 'You have unsaved changes.', sign_out_failed: '로그아웃 실패: ', disable_auth_confirm_title: '비밀번호 보호 비활성화', disable_auth_confirm_message: 'Anyone will be able to access this instance.', auth_disabled: '인증 비활성화 — 비밀번호 보호가 제거되었습니다', disable_auth_failed: 'Failed to disable auth: ', current_password_label: '현재 비밀번호', current_password_placeholder: '현재 비밀번호 입력…', current_password_required: '인증을 변경하거나 비활성화하려면 현재 비밀번호가 필요합니다.', current_password_incorrect: '현재 비밀번호가 올바르지 않습니다.', disable_auth_typed_confirm: '확인하려면 DISABLE AUTH를 입력하세요', auth_status_password: '비밀번호 인증', auth_status_passkey_only: '패스키 전용', auth_status_unauthenticated: '미인증', auth_warning_badge: '인증 비활성화됨', auth_disabled_warning_message: '이 인스턴스는 인증 없이 접근할 수 있습니다.', auth_acknowledged_label: '이 위험을 확인했습니다. 덜 긴급한 탐색 경고를 표시합니다.', auth_ack_save_failed: '승인 상태를 업데이트하지 못했습니다: ', bg_error_single: (title) => `"${title}" has encountered an error`, bg_error_multi: (count) => `${count} sessions have encountered an error`, // skill form skill_name: 'Name', skill_category: 'Category', skill_category_placeholder: 'Optional, e.g. devops', skill_content: 'SKILL.md content', skill_content_placeholder: 'YAML frontmatter + markdown body', skill_rename_not_supported: 'Renaming a skill is not supported. Create a new skill and delete the old one to rename.', skill_metadata: 'Metadata', // cron form cron_name_label: 'Name', cron_name_placeholder: 'Optional', cron_schedule_label: 'Schedule', cron_schedule_preset_label: 'Preset', cron_schedule_preset_hourly: 'Hourly', cron_schedule_preset_daily: 'Daily', cron_schedule_preset_weekdays: 'Weekdays', cron_schedule_preset_weekly: 'Weekly', cron_schedule_preset_monthly: 'Monthly', cron_schedule_preset_custom: 'Custom', cron_schedule_hint: "Use 'every 1h' or a cron expression for recurring jobs. Bare durations like '30m' run once.", cron_schedule_once_warning: "Duration forms like '30m' run once and are removed after running. Use 'every 30m' to keep a recurring job.", cron_prompt_label: 'Prompt', cron_deliver_label: 'Deliver output to', cron_deliver_local: 'Local (save output only)', cron_deliver_custom: '사용자 지정 전달 대상', cron_profile_label: 'Profile', cron_profile_server_default: 'server default', cron_profile_server_default_hint: 'Uses the WebUI server default profile at run time. Existing jobs without a profile keep this legacy behavior.', cron_toast_notifications_label: '완료 토스트', cron_toast_notifications_hint: '이 Cron이 완료되면 토스트를 표시합니다. 꺼져 있어도 Tasks 배지와 새 실행 표시는 계속 업데이트됩니다.', cron_toast_notifications_enabled: '사용', cron_toast_notifications_disabled: '사용 안 함', cron_skills_label: 'Skills', cron_skills_placeholder: 'Add skills (optional)…', cron_skills_edit_hint: 'Skill list is not editable after creation.', // workspace form workspace_name_label: 'Name', workspace_name_placeholder: 'Optional friendly name', workspace_path_label: 'Path', workspace_path_required: 'Path is required', workspace_path_readonly: 'Path cannot be changed. Rename only.', workspace_new_title: 'New space', // profile form profile_name_label: 'Name', profile_base_url_label: 'Base URL', profile_api_key_label: 'API key', cmd_yolo: 'YOLO 모드 전환', cmd_branch: 'Fork this conversation into a new session', cmd_branch_usage: '/branch [name] — fork conversation (optionally with a name)', branch_forked: 'Forked into new session', branch_failed: 'Fork failed: ', fork_from_here: 'Fork from here', forked_from: 'Forked from', yolo_no_session: '활성 세션 없음', yolo_enabled: '⚡ YOLO 모드 켜짐 — 이 세션에서 승인 건너뜀', yolo_disabled: 'YOLO 모드 꺼짐', yolo_pill_label: 'YOLO', yolo_pill_title_active: 'YOLO 모드 활성 — 클릭하여 비활성화', approval_skip_all: '⚡ 이 세션에서 모두 건너뛰기', approval_skip_all_title: '이 세션의 모든 승인 요청 건너뛰기', // composer action tooltips composer_send: '메시지 보내기', composer_queue: '메시지 대기열에 추가', composer_interrupt: '중단하고 전송', composer_steer: '현재 응답 유도', composer_stop: '생성 중지', composer_disabled_clarify: '위의 명확화 요청에 응답하세요', composer_disabled_compression: '압축 완료 대기 중', composer_compression_will_queue: 'Type a message — it will queue and send after compression', composer_disabled_empty: '메시지를 입력하세요', composer_mobile_workspace: '워크스페이스', composer_mobile_model: '모델', composer_mobile_quota: '할당량', composer_mobile_reasoning: '추론', composer_mobile_context: '컨텍스트', pdf_loading: 'PDF {0} 로드 중…', pdf_too_large: 'PDF가 인라인 미리보기에 너무 큼', pdf_no_pages: 'PDF 미리보기를 렌더링할 수 없음', pdf_error: 'PDF 로드 실패', pdf_download: 'PDF 다운로드', pdf_truncated: 'Showing the first {0} of {1} pages — download for the full document', html_loading: 'HTML 미리보기 로드 중…', html_too_large: 'HTML이 인라인 미리보기에 너무 큼', html_error: 'HTML 미리보기 로드 실패', html_open_full: '전체 페이지 열기', html_sandbox_label: 'HTML 미리보기', media_audio_label: '오디오', media_svg_label: '다이어그램', media_video_label: '비디오', media_download: '다운로드', csv_loading: 'CSV 로딩 중', csv_too_large: 'CSV 파일이 너무 커서 인라인 렌더링할 수 없습니다', csv_no_data: 'CSV 파일에 표시할 데이터가 부족합니다', csv_error: 'CSV 파일을 로드하지 못했습니다', csv_header_note: '첫 번째 행이 테이블 헤더로 표시됩니다', excalidraw_loading: '다이어그램 로딩 중', excalidraw_too_large: 'Excalidraw 파일이 너무 커서 인라인 렌더링할 수 없습니다', excalidraw_invalid: '잘못된 Excalidraw 파일 형식', excalidraw_error: 'Excalidraw 파일을 로드하지 못했습니다', excalidraw_label: '다이어그램', excalidraw_download: '다운로드', excalidraw_empty: '빈 다이어그램', excalidraw_render_error: '다이어그램 렌더링 실패', excalidraw_simplified: '단순화된 SVG 미리보기 — Excalidraw 캔버스와 픽셀 동일하지 않음', // TTS (#499) tts_listen: '듣기', tts_not_supported: '음성 합성을 사용할 수 없습니다', settings_label_tts: '답변 음성 합성', settings_desc_tts: '도움말 메시지에 스피커 버튼 표시', settings_label_tts_auto_read: '답변 자동 읽기', settings_desc_tts_auto_read: '도움말 답변을 자동으로 읽어줌', // Composer voice-mode pref (#1488) settings_label_voice_mode: 'Hands-free voice mode button', // TODO: translate settings_desc_voice_mode: 'Show the voice-mode button (audio waveform) next to the dictation mic. Lets you speak naturally — Hermes auto-sends after a pause and reads replies aloud. Requires a browser that supports both speech recognition and TTS.', settings_label_raw_audio: 'Send raw audio instead of transcribing', settings_desc_raw_audio: 'Record and send the original audio file to the agent instead of converting it to text first. The agent can then transcribe it or process the raw audio (emotion, background noise, custom STT). Like Telegram\'s voice message behavior.', voice_send_raw: 'Send raw audio', voice_raw_attached: 'Audio attached. Press Send or type more.', // TODO: translate settings_label_tts_voice: '음성', settings_desc_tts_voice: '음성 합성 음성 선택', settings_label_tts_rate: '말 속도', settings_label_tts_pitch: '말 톤', settings_label_tts_engine: 'TTS 엔진', settings_desc_tts_engine: '음성 엔진을 선택하세요. Edge TTS는 서버를 통해 Microsoft 신경 음성을 사용합니다.', checkpoint_date: 'Date', // TODO: translate checkpoint_diff_files_changed: (n) => `${n} file${n === 1 ? '' : 's'} changed`, // TODO: translate checkpoint_diff_no_changes: 'No differences found between this checkpoint and the current workspace.', // TODO: translate checkpoint_diff_title: 'Changes in checkpoint', // TODO: translate checkpoint_empty: 'No checkpoints found for this workspace.', // TODO: translate checkpoint_error: 'Failed to load checkpoints', // TODO: translate checkpoint_files: 'Files', // TODO: translate checkpoint_loading: 'Loading checkpoints…', // TODO: translate checkpoint_message: 'Message', // TODO: translate checkpoint_restore: 'Restore', // TODO: translate checkpoint_restore_confirm_message: (ckpt) => `Restore workspace to checkpoint "${ckpt}"? This will overwrite files with the saved versions. Files added after this checkpoint will not be deleted.`, // TODO: translate checkpoint_restore_confirm_title: 'Restore checkpoint?', // TODO: translate checkpoint_restored: 'Checkpoint restored', // TODO: translate checkpoint_title: 'Checkpoints', // TODO: translate checkpoint_view_diff: 'View diff', // TODO: translate insights_activity_by_day: 'Activity by Day', // TODO: translate insights_activity_by_hour: 'Activity by Hour', // TODO: translate insights_cost: 'Estimated Cost', // TODO: translate insights_daily_tokens: '일별 토큰', insights_model_name: '모델', insights_model_sessions: '세션', insights_model_tokens: '토큰', insights_model_cost: '비용', insights_model_cache: '캐시', insights_cache_hit: '프롬프트 캐시 적중률', insights_model_share: '비율', insights_model_health_title: 'Model health comparison', insights_model_health_provider: 'Provider', insights_model_health_replacement: 'Replacement guide', insights_model_health_cost_per_m: 'Cost / 1M', insights_no_usage_data: '아직 사용 데이터가 없습니다', insights_footer: 'Showing data from the last {days} days', // TODO: translate insights_skill_usage_title: 'Skill Usage', // TODO: translate insights_skill_usage_sub: 'Tool invocation frequency', // TODO: translate insights_skill_usage_total: 'Total invocations', // TODO: translate insights_skill_usage_skills_used: 'Skills used', // TODO: translate insights_skill_usage_no_data: 'No skill usage data yet', // TODO: translate insights_skill_usage_no_data_hint: 'Skills will appear here once used in conversations.', // TODO: translate insights_skill_usage_footer: 'Counts from ~/.hermes/skills/', // TODO: translate insights_skill_usage_col_skill: 'Skill', // TODO: translate insights_skill_usage_col_uses: 'Uses', // TODO: translate insights_skill_usage_col_views: 'Views', // TODO: translate insights_skill_usage_col_share: 'Usage %', // TODO: translate insights_skill_usage_col_patches: 'Patches', // TODO: translate insights_input_tokens: 'Input', // TODO: translate insights_messages: 'Messages', // TODO: translate insights_models: 'Models', // TODO: translate insights_no_cost: 'N/A', // TODO: translate insights_output_tokens: 'Output', // TODO: translate insights_peak_hour: 'Peak: {hour}', // TODO: translate insights_sessions: 'Sessions', // TODO: translate insights_title: 'Usage Analytics', // TODO: translate insights_token_breakdown: 'Token Breakdown', // TODO: translate insights_tokens: 'Tokens', // TODO: translate insights_total: 'Total', // TODO: translate settings_desc_api_redact: 'Self-hosted users can disable for transparency (not recommended for shared instances).', // TODO: translate settings_label_api_redact: 'Redact sensitive data in API responses', // TODO: translate voice_error: 'Voice not supported in this browser', // TODO: translate voice_listening: 'Listening…', // TODO: translate voice_mode_active: 'Voice mode on', // TODO: translate voice_mode_off: 'Voice mode off', // TODO: translate voice_speaking: 'Speaking…', // TODO: translate voice_thinking: 'Thinking…', // TODO: translate // Composer voice buttons (#1488) voice_dictate: 'Dictate', // TODO: translate voice_dictate_active: 'Stop dictation', voice_recording_active: '녹음 중지', // TODO: translate voice_mode_toggle: 'Voice mode', // TODO: translate voice_mode_toggle_active: 'Exit voice mode', // TODO: translate subagent_children: 'Subagent sessions', // TODO: translate outline_title: '개요', outline_empty: '아직 질문이 없습니다.', outline_loading: '로딩 중…', wiki_browse: 'Browse wiki', wiki_search_placeholder: 'Search pages...', wiki_no_pages: 'No wiki pages found', wiki_not_configured: 'Wiki not configured', }, fr: { offline_title: 'Connexion perdue', offline_browser_detail: 'Votre navigateur signale que cet appareil est hors ligne.', offline_network_detail: 'Hermes est actuellement inaccessible depuis ce navigateur.', offline_autorefresh: 'Je rafraîchirai automatiquement cette page lorsqu\'Hermes sera à nouveau joignable.', offline_check_now: 'Vérifier maintenant', offline_checking: 'Vérification\u2026', offline_stream_waiting: 'Connexion perdue. En attente de rafraîchissement\u2026', _lang: 'fr', _label: 'Français', _speech: 'fr-FR', cancelling: 'Annulation\u2026', cancel_failed: 'Échec de l\'annulation : ', mic_denied: 'Accès au microphone refusé. Vérifiez les autorisations du navigateur.', mic_insecure_origin: 'La saisie vocale nécessite une connexion sécurisée. Ouvrez Hermes en HTTPS ou depuis localhost pour utiliser le microphone.', mic_no_speech: 'Aucune parole détectée. Réessayez.', mic_network: 'Reconnaissance vocale indisponible.', mic_error: 'Erreur de saisie vocale : ', voice_dictate: 'Dicter', voice_dictate_active: 'Arrêter la dictée', voice_recording_active: 'Arrêter l\'enregistrement', voice_mode_toggle: 'Mode vocal', voice_mode_toggle_active: 'Quitter le mode vocal', voice_listening: 'Écoute\u2026', voice_speaking: 'Parle\u2026', voice_thinking: 'Réflexion\u2026', voice_error: 'La voix n\'est pas prise en charge dans ce navigateur', voice_mode_active: 'Mode vocal activé', voice_mode_off: 'Mode vocal désactivé', session_imported: 'Session importée', import_failed: 'Échec de l\'importation :', import_invalid_json: 'JSON invalide', image_pasted: 'Image collée : ', text_pasted: 'Texte collé joint en tant que ', edit_message: 'Modifier le message', regenerate: 'Régénérer la réponse', copy: 'Copier', copied: 'Copié !', copy_failed: 'Échec de la copie', selected_text_reply: 'Répondre avec la sélection', selected_text_reply_title: 'Ajouter le texte sélectionné du chat comme contexte cité', selected_text_reply_appended: 'Texte sélectionné ajouté au compositeur', saved_prompts_empty: 'Aucune invite sauvegardée pour l\'instant.', saved_prompts_save_current: 'Sauvegarder la saisie actuelle comme invite', saved_prompts_saved: 'Invite sauvegardée', saved_prompts_delete: 'Supprimer l\'invite', saved_prompts_empty_input: 'Saisissez d\'abord une invite à sauvegarder', context_block_name_default: 'Contexte', context_block_flush_aria: 'Les blocs de contexte seront inclus lors de l\'envoi', context_block_rename_hint: 'Cliquez ou appuyez sur Entrée pour renommer', context_block_rename_aria: 'Renommer le bloc de contexte', context_block_remove: 'Supprimer le bloc de contexte', diff_loading: 'Chargement des différences', diff_error: 'Impossible de charger le fichier de correctif', diff_too_large: 'Fichier de correctif trop volumineux pour un affichage en ligne', tree_view: 'Arborescence', raw_view: 'Brut', parse_failed_note: 'l\'analyse a échoué', you: 'Vous', mcp_servers_title: 'Serveurs MCP', mcp_servers_desc: 'Afficher les serveurs MCP configurés dans config.yaml.', mcp_no_servers: 'Aucun serveur MCP configuré.', mcp_add_server: '+ Ajouter un serveur', mcp_field_name: 'Nom du serveur', mcp_transport_label: 'Type de transport', mcp_field_command: 'Commande', mcp_field_args: 'Arguments (séparés par des virgules)', mcp_field_url: 'URL', mcp_field_timeout: 'Délai d\'expiration (secondes)', mcp_save: 'Sauvegarder', mcp_cancel: 'Annuler', mcp_name_required: 'Le nom du serveur est requis.', mcp_url_required: 'L\'URL est requise pour le transport HTTP.', mcp_command_required: 'La commande est requise pour le transport stdio.', mcp_saved: 'Serveur MCP enregistré.', mcp_save_failed: 'Échec de l\'enregistrement du serveur MCP.', mcp_delete_confirm_title: 'Supprimer le serveur MCP', mcp_delete_confirm_message: 'Supprimer le serveur MCP "{0}" ? Cette action ne peut pas être annulée.', mcp_deleted: 'Serveur MCP supprimé.', mcp_delete_failed: 'Échec de la suppression du serveur MCP.', mcp_load_failed: 'Échec du chargement des serveurs MCP.', mcp_restart_hint: 'Les modifications du serveur sont en lecture seule ici pour le moment. Modifiez config.yaml et redémarrez Hermes pour que les changements soient pris en compte.', mcp_toggle_followup: 'Les contrôles d\'activation/désactivation sont intentionnellement reportés jusqu\'à ce que la sémantique de rechargement MCP soit explicite.', mcp_status_active: 'Actif', mcp_status_configured: 'Configuré', mcp_status_disabled: 'Désactivé', mcp_status_invalid_config: 'Configuration invalide', mcp_status_unknown: 'Inconnu', mcp_tool_count: '{0} outils', mcp_enabled_yes: 'Activé', mcp_enabled_no: 'Désactivé', mcp_enable_server: 'Activer ce serveur MCP', mcp_disable_server: 'Désactiver ce serveur MCP', mcp_enabled_toast: (name) => `Serveur MCP "${name}" activé.`, mcp_disabled_toast: (name) => `Serveur MCP "${name}" désactivé.`, mcp_toggle_failed: 'Échec de la mise à jour du serveur MCP.', mcp_tools_title: 'Outils MCP', mcp_tools_desc: 'Rechercher des outils connus sur les serveurs MCP actifs.', mcp_tools_search_placeholder: 'Rechercher des outils par nom, serveur ou description\u2026', mcp_tools_no_tools: 'Aucun outil MCP n\'est disponible dans l\'inventaire d\'exécution actif.', mcp_tools_no_matches: 'Aucun outil MCP ne correspond à votre recherche.', mcp_tools_load_failed: 'Échec du chargement des outils MCP.', mcp_tools_schema_empty: 'Aucun paramètre de schéma.', mcp_tools_runtime_note: 'L\'inventaire des outils utilise uniquement les données d\'exécution MCP actives déjà connues ; l\'interface Web ne démarre pas et ne sonde pas les serveurs.', mcp_tools_summary_no_matches: (query,total) => `Aucun outil MCP ne correspond à « ${query} » (${total} outils MCP au total).`, mcp_tools_summary_none: 'Aucun outil MCP à afficher.', mcp_tools_summary_matching: (query) => ` correspondant à « ${query} »`, mcp_tools_summary_total_note: (total) => ` (${total} outils MCP au total)`, mcp_tools_summary_showing: (start,end,filtered,searchNote,totalNote,page,pages) => `Affichage de ${start}-${end} sur ${filtered} outils MCP${searchNote}${totalNote}. Page ${page} sur ${pages}.`, mcp_tools_page_size_prefix: 'Afficher', mcp_tools_page_size_suffix: 'par page', mcp_tools_per_page_aria: 'Outils MCP par page', mcp_tools_inactive_configured_servers: (servers) => `Configurés mais inactifs dans cette interface Web : ${servers}.`, mcp_tools_pagination_label: 'Pagination des outils MCP', mcp_tools_previous_page: '‹ Précédent', mcp_tools_previous_page_aria: 'Page précédente des outils MCP', mcp_tools_next_page: 'Suivant ›', mcp_tools_next_page_aria: 'Page suivante des outils MCP', pdf_loading: 'Chargement du PDF {0}\u2026', pdf_too_large: 'PDF trop volumineux pour un aperçu en ligne', pdf_no_pages: 'Le PDF n\'a pas de pages', pdf_error: 'Échec du rendu de l\'aperçu PDF', pdf_download: 'Télécharger le PDF', pdf_truncated: 'Affichage des {0} premières pages sur {1} — téléchargez le document complet', html_loading: 'Chargement de l\'aperçu HTML\u2026', html_too_large: 'HTML trop volumineux pour un aperçu en ligne', html_error: 'Échec du rendu de l\'aperçu HTML', html_open_full: 'Ouvrir la page entière', html_sandbox_label: 'Aperçu HTML (bac à sable)', thinking: 'Réflexion', expand_all: 'Tout développer', collapse_all: 'Tout réduire', edit_failed: 'Échec de la modification : ', regen_failed: 'Échec de la régénération : ', reconnect_active: 'Une réponse est toujours en cours de génération. Recharger quand vous êtes prêt ?', reconnect_finished: 'Une réponse était en cours lors de votre dernier départ. Les messages ont peut-être été mis à jour.', approval_heading: 'Approbation requise', approval_desc_prefix: 'Commande dangereuse détectée', approval_btn_once: 'Autoriser une fois', approval_btn_once_title: 'Autoriser cette commande (Entrée)', approval_btn_session: 'Autoriser pour la session', approval_btn_session_title: 'Autoriser pour cette session de conversation', approval_btn_always: 'Toujours autoriser', approval_btn_always_title: 'Toujours autoriser ce modèle de commande', approval_btn_deny: 'Refuser', approval_btn_deny_title: 'Refuser — ne pas exécuter cette commande', approval_responding: 'Réponse en cours\u2026', approval_gateway_unsupported: 'Les approbations nécessitent une passerelle plus récente. Mettez à niveau la passerelle Hermes connectée pour activer cette fonctionnalité.', approval_gateway_unsupported_label: 'Approbations non prises en charge', clarify_heading: 'Clarification nécessaire', clarify_hint: 'Choisissez une option ou saisissez votre propre réponse ci-dessous.', clarify_other: 'Autre', clarify_send: 'Envoyer', clarify_input_placeholder: 'Saisissez votre réponse\u2026', clarify_responding: 'Réponse en cours\u2026', session_attention_approval: (n) => n === 1 ? 'Approbation' : `${n} approbations`, session_attention_clarify: (n) => n === 1 ? 'Question' : `${n} questions`, session_attention_generic: (n) => n === 1 ? 'Attention' : `${n} éléments`, session_attention_approval_title: 'En attente d\'une décision d\'autorisation', session_attention_clarify_title: 'En attente de votre réponse', session_attention_generic_title: 'En attente d\'une action utilisateur', untitled: 'Sans titre', n_messages: (n) => `${n} messages`, load_older_messages: '↑ Faites défiler vers le haut ou cliquez pour charger les anciens messages', session_jump_start: 'Début', session_jump_start_label: 'Aller au début de la session', session_jump_end: 'Fin', session_jump_end_label: 'Aller à la fin de la session', session_new_message: 'Nouveau message', session_new_message_label: 'Nouveau message disponible, aller à la fin', jump_to_question: 'vers la réponse', jump_to_question_label: 'Aller au début de cette réponse', queued_label: 'Envoi après la réponse', queued_count: (n) => n === 1 ? '1 en file d\'attente' : `${n} en file d'attente`, queued_cancel: 'Annuler le message en file d\'attente', model_unavailable: ' (indisponible)', model_unavailable_title: 'Ce modèle ne figure plus dans votre liste de fournisseurs actuelle', provider_mismatch_warning: (m,p)=>`« ${m} » pourrait ne pas fonctionner avec votre fournisseur configuré (${p}). Envoyez quand même, ou exécutez \`hermes model\` dans votre terminal pour changer.`, provider_mismatch_label: 'Incompatibilité de fournisseur', gateway_auth_label: 'Échec de l\'authentification de la passerelle', gateway_start: 'Démarrer', gateway_stop: 'Arrêter', gateway_restart: 'Redémarrer', gateway_start_success: 'Démarrage de la passerelle terminé.', gateway_stop_success: 'Arrêt de la passerelle terminé.', gateway_restart_success: 'Redémarrage de la passerelle terminé.', gateway_start_failed: 'Échec du démarrage de la passerelle', gateway_stop_failed: 'Échec de l\'arrêt de la passerelle', gateway_restart_failed: 'Échec du redémarrage de la passerelle', gateway_running: 'En cours d\'exécution', gateway_session: 'session', gateway_sessions: 'sessions', gateway_status_load_failed: 'Échec du chargement de l\'état de la passerelle', model_not_found_label: 'Modèle introuvable', model_custom_label: 'ID de modèle personnalisé', model_custom_placeholder: 'ex. openai/gpt-5.4', model_show_all_models: 'Afficher tous les {0} modèles', model_search_placeholder: 'Rechercher des modèles\u2026', model_search_no_results: 'Aucun modèle trouvé', model_group_configured: 'Configuré', ws_search_placeholder: 'Rechercher des espaces de travail\u2026', ws_no_results: 'Aucun espace de travail trouvé', workspace_new_worktree_conversation: 'Nouvelle conversation dans un worktree', workspace_new_worktree_conversation_meta: 'Créer un worktree git isolé pour cet espace de travail.', workspace_worktree_created: 'Conversation Worktree créée', workspace_worktree_failed: 'Échec de la création du worktree : ', session_worktree_badge: 'Worktree', model_scope_advisory: 'S\'applique à cette conversation à partir de votre prochain message.', model_scope_toast: 'S\'applique à cette conversation à partir de votre prochain message.', cmd_clear: 'Effacer les messages de la conversation', cmd_help: 'Afficher les commandes slash disponibles', cmd_compress: 'Compresser manuellement le contexte de la conversation (utilisation : /compress [sujet principal])', ctx_compress_hint: 'Compresser le contexte pour libérer de l\'espace →', ctx_compress_action: '⚠ Compresser maintenant pour libérer le contexte', cmd_compact_alias: 'Alias hérité pour /compress', cmd_model: 'Changer de modèle (ex. /model gpt-4o)', cmd_workspace: 'Changer d\'espace de travail par nom', cmd_terminal: 'Ouvrir le terminal de l\'espace de travail', cmd_new: 'Démarrer une nouvelle session de chat', cmd_usage: 'Activer/désactiver l\'affichage de l\'utilisation des jetons', cmd_theme: 'Changer d\'apparence (thème : system/dark/light, skin : default/ares/mono/graphite/slate/poseidon/sisyphus/charizard/sienna/catppuccin/nous/geist-contrast/zeus/verdigris)', cmd_personality: 'Changer la personnalité de l\'agent', cmd_skills: 'Lister les compétences Hermes disponibles', cmd_use: 'Forcer l\'utilisation d\'une compétence pour le prochain message', available_commands: 'Commandes disponibles :', type_slash: 'Tapez / pour voir les commandes', conversation_cleared: 'Conversation effacée', command_label: 'Commande', context_compaction_label: 'Compaction du contexte', retrieval_context_label: 'Contexte indexé', retrieval_context_preview: 'Les messages plus anciens sont stockés et récupérables via les outils de contexte', preserved_task_list_label: 'Liste de tâches préservée', reference_only_label: 'Référence uniquement', model_usage: 'Utilisation : /model ', no_model_match: 'Aucun modèle correspondant à "', model_did_you_mean: (m) => ` — vouliez-vous dire "${m}" ?`, switched_to: 'Passé à ', workspace_usage: 'Utilisation : /workspace ', no_workspace_match: 'Aucun espace de travail correspondant à "', switched_workspace: 'Passé à l\'espace de travail : ', workspace_switch_failed: 'Échec du changement d\'espace de travail : ', new_session: 'Nouvelle session créée', new_session_creating: 'Création d\'une nouvelle conversation\u2026', compressing: 'Demande de compression du contexte\u2026', compress_running_label: 'Compression en cours', compress_complete_label: 'Compression terminée', auto_compress_label: 'Compression automatique', compress_failed_label: 'Échec de la compression', focus_label: 'Focalisation', token_usage_on: 'Utilisation des jetons activée', token_usage_off: 'Utilisation des jetons désactivée', usage_cache_hit_detail: 'Cache : {0}% de réussite ({1} lectures / {2} écritures)', usage_cached_percent: '{0}% en cache', theme_usage: 'Utilisation : /theme ', theme_set: 'Thème : ', no_active_session: 'Aucune session active', cmd_queue: 'Mettre un message en file d\'attente pour le prochain tour', cmd_goal: 'Définir ou inspecter un objectif persistant', goal_evaluating_progress: 'Évaluation de la progression vers l\'objectif\u2026', goal_working_toward: 'Travail vers l\'objectif\u2026', goal_continuing_toast: 'Poursuite vers l\'objectif\u2026', goal_status_none: 'Aucun objectif actif. Définissez-en un avec /goal .', goal_status_active: (turns, max_turns, goal) => `⊙ Objectif (actif, ${turns}/${max_turns} tours) : ${goal}`, goal_status_paused: (turns, max_turns, reason, goal) => `⏸ Objectif (en pause, ${turns}/${max_turns}${reason ? `, ${reason}` : ''}) : ${goal}`, goal_status_done: (turns, max_turns, goal) => `✓ Objectif atteint (${turns}/${max_turns}) : ${goal}`, goal_set: (turns, goal) => `⊙ Objectif défini (budget de ${turns} tours) : ${goal}`, goal_paused: (goal) => `⏸ Objectif mis en pause : ${goal}`, goal_resumed: (goal) => `▶ Objectif repris : ${goal}`, goal_cleared: 'Objectif effacé.', goal_no_goal: 'Aucun objectif actif.', goal_achieved: (reason) => `✓ Objectif atteint : ${reason}`, goal_paused_budget_exhausted: (turns, max_turns) => `⏸ Objectif en pause — ${turns}/${max_turns} tours utilisés. Utilisez /goal resume pour continuer, ou /goal clear pour arrêter.`, goal_continuing: (turns, max_turns, reason) => `↻ Poursuite vers l\'objectif (${turns}/${max_turns}) : ${reason}`, cmd_interrupt: 'Annuler le tour en cours et envoyer un nouveau message', cmd_steer: 'Injecter une correction en milieu de tour sans interrompre l\'agent', cmd_queue_no_msg: 'Utilisation : /queue ', cmd_queue_not_busy: 'Aucune tâche active — envoyez normalement', cmd_queue_confirm: 'Message mis en file d\'attente', cmd_interrupt_no_msg: 'Utilisation : /interrupt ', cmd_interrupt_confirm: 'Interrompu — envoi d\'un nouveau message', cmd_steer_no_msg: 'Utilisation : /steer ', cmd_steer_fallback: 'Steer indisponible — brouillon restauré', cmd_steer_delivered: 'Steer délivré — l\'agent le verra lors de son prochain résultat d\'outil', steer_leftover_queued: 'Steer en file d\'attente pour le prochain tour', busy_steer_fallback: 'Steer indisponible — brouillon restauré', steer_fail_no_cached_agent: 'No agent cached for this session — try refreshing', steer_fail_agent_lacks_steer: 'This agent version does not support steer', steer_fail_session_not_found: 'Session not found — it may have expired', steer_fail_not_running: 'Agent is not currently running', steer_fail_stream_dead: 'The agent stream has ended', steer_fail_steer_error: 'Steer delivery failed — the agent may have finished', steer_fail_network_error: 'Network error — check your connection', steer_fail_unknown: 'Steer unavailable', steer_recovery_retry: 'Retry', steer_recovery_dismiss: 'Dismiss', busy_interrupt_confirm: 'Interrompu — envoi d\'un nouveau message', settings_label_default_message_mode: 'Mode de message par défaut', settings_desc_default_message_mode: 'Contrôle ce qui se passe lorsque vous envoyez un message pendant que l\'agent est en cours d\'exécution. File d\'attente attend ; Interruption annule et recommence ; Steer injecte une correction en milieu de tour sans interrompre. Si Steer est indisponible, le brouillon est restauré pour que vous puissiez choisir la prochaine action.', settings_label_fade_text_effect: 'Effet de fondu du texte', settings_desc_fade_text_effect: 'Affiche progressivement les nouveaux mots diffusés pendant que l’assistant répond. Similaire à OpenWebUI ; désactivé par défaut pour des performances maximales.', settings_label_max_tokens: 'Nombre maximal de jetons en sortie', settings_desc_max_tokens: 'Limite la longueur des nouvelles réponses en streaming. Laissez vide pour utiliser la valeur de repli du profil actif.', settings_placeholder_max_tokens_none: 'Aucune surcharge', settings_placeholder_max_tokens_fallback: 'Aucune surcharge (repli : {0})', settings_default_message_mode_queue: 'Suivi de file d\'attente', settings_default_message_mode_interrupt: 'Interrompre le tour en cours', settings_default_message_mode_steer: 'Steer (correction en milieu de tour)', settings_label_busy_placeholder_hint: 'Show busy placeholder hint', settings_desc_busy_placeholder_hint: 'Shows the composer placeholder with the current busy action while the session is running and the draft is empty.', composer_placeholder_busy_queue: 'Enter = queue | /interrupt | /background | /steer', composer_placeholder_busy_interrupt: 'Enter = interrupt | /queue | /background | /steer', composer_placeholder_busy_steer: 'Enter = steer | /queue | /background | /interrupt', slash_skill_badge: 'Compétence', slash_skill_desc: 'Invoquer cette compétence', cmd_stop: 'Arrêter la réponse en cours', cmd_title: 'Obtenir ou définir le titre de la session', cmd_retry: 'Renvoyer le dernier message', cmd_undo: 'Supprimer le dernier échange', cmd_btw: 'Poser une question annexe (éphémère)', cmd_btw_usage: '/btw — poser une question annexe en utilisant le contexte de la session', cmd_background: 'Exécuter une requête en arrière-plan', cmd_background_usage: '/background — exécuter en parallèle sans bloquer', cmd_branch: 'Forker cette conversation dans une nouvelle session', cmd_branch_usage: '/branch [nom] — forker la conversation (avec un nom optionnel)', branch_forked: 'Forké dans une nouvelle session', branch_failed: 'Échec du fork : ', fork_from_here: 'Forker à partir d\'ici', forked_from: 'Forké depuis', subagent_children: 'Sessions de sous-agents', btw_asking: 'Question annexe en cours\u2026', btw_label: 'Question annexe — hors historique', btw_done: 'Question annexe répondue', btw_no_answer: 'Aucune réponse reçue.', btw_failed: 'Échec de la question annexe : ', bg_running: 'Exécution en arrière-plan\u2026', bg_complete: 'Tâche en arrière-plan terminée', bg_label: 'Résultat en arrière-plan :', bg_no_answer: '(aucune réponse)', bg_failed: 'Échec de la tâche en arrière-plan : ', undo_exchange: 'Annuler le dernier échange', cmd_status: 'Afficher les informations de la session', cmd_voice: 'Activer/désactiver la saisie microphone', stream_stopped: 'Réponse arrêtée.', no_active_task: 'Aucune tâche active à arrêter.', cancel_unavailable: 'Annulation indisponible.', retry_failed: 'Échec de la nouvelle tentative : ', undo_failed: 'Échec de l\'annulation : ', undid_n_messages: 'Supprimé', undid_messages_suffix: ' message(s).', status_heading: 'État de la session', status_session_id: 'ID de session', status_title: 'Titre', status_model: 'Modèle', status_provider: 'Fournisseur', status_workspace: 'Espace de travail', status_personality: 'Personnalité', status_messages: 'Messages', status_agent_running: 'Agent en cours d\'exécution', status_profile: 'Profil', status_hermes_home: 'Dossier Hermes', status_started: 'Démarré', status_updated: 'Mis à jour', status_tokens: 'Jetons', status_ephemeral: 'Instantané éphémère — non enregistré dans l\'historique des transcriptions.', status_no_tokens: 'Aucun jeton utilisé', status_unknown: 'Inconnu', status_yes: 'Oui', status_no: 'Non', status_load_failed: 'Échec du chargement de l\'état : ', title_current: 'Titre actuel', title_change_hint: 'Utilisez `/title ` pour renommer.', title_set: 'Titre défini sur ', cmd_webui_only_session: 'Cette commande n\'est pas disponible pour les sessions importées via CLI.', cmd_voice_use_mic: 'Cliquez sur le bouton microphone dans le compositeur.', usage_heading: 'Utilisation des jetons', usage_default_model: 'par défaut', usage_unknown: 'inconnu', usage_input_tokens: 'Jetons d\'entrée', usage_output_tokens: 'Jetons de sortie', usage_total: 'Jetons totaux', usage_estimated_cost: 'Coût estimé', usage_settings_tip: 'Remarque : les estimations de coût sont approximatives.', usage_load_failed: 'Échec du chargement de l\'utilisation : ', usage_personality_none: 'aucune', session_toolsets: 'Jeux d\'outils de session', session_toolsets_desc: 'Utiliser les valeurs par défaut du profil actif ou choisir une liste d\'outils personnalisée pour cette session', session_toolsets_global: 'Valeurs par défaut du profil actif', session_toolsets_profile_defaults: 'Valeurs par défaut du profil actif', session_toolsets_custom: 'Remplacement personnalisé', session_toolsets_use_profile_defaults: 'Utiliser les valeurs par défaut du profil actif', session_toolsets_configured_servers: 'Serveurs MCP configurés', session_toolsets_loading_servers: 'Chargement des serveurs configurés\u2026', session_toolsets_no_configured_servers: 'Aucun serveur MCP configuré', session_toolsets_placeholder: 'outil1, outil2, \u2026', session_toolsets_apply: 'Appliquer', session_toolsets_clear: 'Utiliser les valeurs par défaut', session_toolsets_applied: 'Jeux d\'outils mis à jour', session_toolsets_cleared: 'Utilisation des valeurs par défaut du profil actif', session_toolsets_failed: 'Échec de la mise à jour des jeux d\'outils : ', untitled: 'Sans titre', no_personalities: 'Aucune personnalité trouvée (ajoutez-les dans ~/.hermes/personalities/)', available_personalities: 'Personnalités disponibles :', personality_switch_hint: '\n\nUtilisez `/personality ` pour changer, ou `/personality none` pour effacer.', personalities_load_failed: 'Échec du chargement des personnalités', personality_cleared: 'Personnalité effacée', personality_set: 'Personnalité : ', failed_colon: 'Échec : ', no_workspace: 'Aucun espace de travail', terminal_open_title: 'Ouvrir le terminal de l\'espace de travail', terminal_no_workspace_title: 'Sélectionnez un espace de travail pour ouvrir le terminal', terminal_title: 'Terminal', terminal_clear: 'Effacer', terminal_copy_output: 'Copier la sortie', terminal_restart: 'Redémarrer', terminal_collapse: 'Réduire', terminal_expand: 'Développer', terminal_close: 'Fermer', terminal_input_placeholder: 'Exécuter une commande\u2026', terminal_start_failed: 'Échec du démarrage du terminal : ', terminal_input_failed: 'Échec de l\'entrée du terminal : ', terminal_copy_failed: 'Échec de la copie : ', terminal_error: 'Erreur de terminal', terminal_remote_backend_unsupported: 'Le terminal intégré n\'est pris en charge qu\'avec les backends de terminaux locaux.', workspace_empty_no_path: 'Aucun espace de travail sélectionné. Définissez un espace de travail dans Paramètres → Espace de travail pour parcourir les fichiers.', workspace_empty_dir: 'Cet espace de travail est vide.', workspace_show_hidden_files: 'Afficher les fichiers cachés', workspace_show_hidden_files_desc: 'Inclure .DS_Store, .git, node_modules et autres fichiers cachés/système dans l\'arborescence.', workspace_hidden_files_visible: 'cachés visibles', workspace_hidden_files_visible_title: 'Les fichiers cachés sont visibles — cliquez pour les options', workspace_options: 'Options de l\'espace de travail', dialog_confirm_title: 'Confirmer l\'action', dialog_prompt_title: 'Entrer une valeur', dialog_confirm_btn: 'Confirmer', unsaved_confirm: 'Vous avez des modifications non enregistrées dans l\'aperçu. Les ignorer et naviguer ?', discard: 'Ignorer', save: 'Enregistrer', edit: 'Modifier', clear: 'Effacer', create: 'Créer', remove: 'Supprimer', save_title: 'Enregistrer les modifications', edit_title: 'Modifier ce fichier', saved: 'Enregistré', save_failed: 'Échec de l\'enregistrement : ', image_load_failed: 'Impossible de charger l\'image', file_open_failed: 'Impossible d\'ouvrir le fichier', downloading: (name) => `Téléchargement de ${name}\u2026`, double_click_rename: 'Double-cliquer pour renommer', symlink_link_to: 'Lien symbolique → {target}', external_link_open_confirm: 'Ce lien symbolique pointe en dehors de l\'espace de travail. L\'ouvrir dans une vue externe en lecture seule pour cette session de navigateur ?', external_link_read_only: 'Cette vue externe est en lecture seule. Les actions de création, renommage, déplacement, suppression, téléversement, révélation et l\'éditeur restent désactivés ici.', external_link_grant_expired: 'Cette vue externe a expiré. Rouvrez le lien symbolique cible d\'évasion pour l\'autoriser à nouveau.', session_rename_failed_no_row: 'Impossible de démarrer le renommage — ligne introuvable.', renamed_to: 'Renommé en ', rename_failed: 'Échec du renommage : ', moved_to: 'Déplacé vers ', move_failed: 'Échec du déplacement : ', delete_title: 'Supprimer', delete_confirm: (name) => `Supprimer ${name} ?`, delete_dir_confirm: (name) => `Supprimer le dossier "${name}" et tout son contenu ?`, rename_title: 'Renommer', rename_prompt: 'Nouveau nom :', deleted: 'Supprimé ', delete_failed: 'Échec de la suppression : ', reveal_in_finder: 'Révéler dans le gestionnaire de fichiers', reveal_failed: 'Échec de la révélation : ', copy_file_path: 'Copier le chemin du fichier', open_in_vscode: 'Ouvrir dans VS Code', open_in_vscode_failed: 'Échec de l\'ouverture dans VS Code : ', download_folder: 'Télécharger le dossier', path_copied: 'Chemin du fichier copié dans le presse-papiers', path_copy_failed: 'Échec de la copie du chemin : ', session_rename: 'Renommer la conversation', session_rename_desc: 'Modifier le titre de cette conversation', session_title_regenerate: 'Régénérer le titre', session_title_regenerate_desc: 'Demander à Hermes de générer un nouveau titre à partir de la conversation', session_title_regenerating: 'Régénération du titre\u2026', session_title_regenerated: (title) => `Titre régénéré : ${title}`, session_title_regenerate_failed: 'Échec de la régénération du titre : ', session_copy_link: 'Copier le lien de la conversation', session_copy_link_desc: 'Copier un lien direct vers cette conversation', session_link_copied: 'Lien de la conversation copié dans le presse-papiers', session_link_copy_failed: 'Échec de la copie du lien de la conversation : ', new_file_prompt: 'Nom du nouveau fichier (ex. notes.md) :', new_file: 'Nouveau fichier', new_folder: 'Nouveau dossier', workspace_root: 'racine de l\'espace de travail', new_file_prompt_title: 'Nom du nouveau fichier dans {0} :', new_folder_prompt_title: 'Nom du nouveau dossier dans {0} :', project_name_prompt: 'Nom du projet :', created: 'Créé ', create_failed: 'Échec de la création : ', new_folder_prompt: 'Nom du nouveau dossier :', folder_created: 'Dossier créé ', folder_create_failed: 'Échec de la création du dossier : ', workspace_auto_create_folder: 'Créer le dossier s\'il n\'existe pas', folder_add_as_space_btn: 'Ajouter comme espace', folder_add_as_space_msg: 'Ajouter ce dossier comme nouvel espace dans votre liste ?', folder_add_as_space_title: 'Ajouter comme espace ?', remove_title: 'Supprimer', empty_dir: '(vide)', upload_failed: 'Échec du téléversement : ', upload_too_large: (maxMb, fileMb) => `Le fichier est trop volumineux (${fileMb} Mo). La taille maximale de téléversement est de ${maxMb} Mo.`, uploading: 'Téléversement\u2026', uploaded: 'Téléversé', all_uploads_failed: (n) => `Les ${n} téléversement(s) ont échoué`, archive_extracted: (n, c) => `${n} fichier(s) extrait(s) de ${c} archive(s)`, session_pin: 'Épingler la conversation', session_unpin: 'Désépingler la conversation', session_pin_desc: 'Garder cette conversation en haut', session_unpin_desc: 'Retirer des épinglés', session_pin_failed: 'Échec de l\'épingle : ', session_move_project: 'Déplacer vers un projet', session_move_project_desc_has: 'Changer le projet de cette conversation', session_move_project_desc_none: 'Attribuer un projet à cette conversation', session_archive: 'Archiver la conversation', session_hide_external: 'Masquer de la liste', session_restore: 'Restaurer la conversation', session_archive_desc: 'Masquer cette conversation jusqu\'à ce que les archives soient affichées', session_archive_worktree_desc: 'Masquer cette conversation ; conserver son worktree sur le disque', session_hide_external_desc: 'Masquer cette session importée de l\'interface Web sans supprimer l\'historique source.', session_restore_desc: 'Remettre cette conversation dans la liste principale', session_archived: 'Session archivée', session_archived_worktree: 'Session archivée. Le worktree reste sur le disque.', session_hidden: 'Session masquée de la liste', session_restored: 'Session restaurée', session_archive_failed: 'Échec de l\'archivage : ', session_duplicate: 'Dupliquer la conversation', session_duplicate_desc: 'Créer une copie avec le même espace de travail et le même modèle', session_export_html: 'Export as HTML', session_export_html_desc: 'Download this conversation as a self-contained HTML file', session_duplicated: 'Session dupliquée', session_duplicate_failed: 'Échec de la duplication : ', session_stop_response: 'Arrêter la réponse', session_stop_response_desc: 'Annuler la réponse en cours pour cette conversation', session_delete: 'Supprimer la conversation', session_delete_desc: 'Supprimer définitivement cette conversation', session_delete_confirm: 'Supprimer cette conversation ?', session_delete_worktree_desc: 'Supprimer uniquement la conversation de l\'interface Web ; conserver le worktree sur le disque', session_delete_worktree_confirm: (path) => `Supprimer cette conversation ? Le worktree dans ${path} restera sur le disque.`, session_deleted: 'Conversation supprimée', session_deleted_worktree: 'Conversation supprimée. Le worktree reste sur le disque.', session_worktree_remove: 'Supprimer le worktree', session_worktree_remove_desc: (path) => `Supprimer le worktree git de ${path} du disque`, session_worktree_remove_confirm: (path) => `Supprimer le worktree git du disque ?\n\nChemin : ${path}\n\nCela supprimera tout le répertoire du worktree. Les données de session restent dans l\'interface Web.`, session_worktree_remove_not_exists: (path) => `Le worktree dans ${path} n\'existe plus sur le disque.`, session_worktree_remove_confirm_label: 'Supprimer', session_worktree_removed: 'Worktree supprimé.', session_worktree_remove_failed: 'Échec de la suppression du worktree : ', session_worktree_remove_status_failed: 'Échec de la lecture de l\'état du worktree : ', session_worktree_remove_locked_by_stream: 'Impossible de supprimer — une session de streaming active utilise ce worktree.', session_worktree_remove_locked_by_terminal: 'Impossible de supprimer — une session de terminal active utilise ce worktree.', session_worktree_remove_unsafe_blocked: 'Résolvez les modifications locales ou les commits non poussés avant de supprimer ce worktree.', session_worktree_remove_dirty_warning: 'ATTENTION : Ce worktree contient des modifications non validées qui seront perdues.', session_worktree_remove_untracked_warning: (count) => `${count} fichier(s) non suivi(s) seront définitivement supprimés.`, session_worktree_remove_ahead_warning: (ahead) => `${ahead} commit(s) non poussé(s) seront perdus.`, session_select_mode: 'Sélectionner', session_select_mode_desc: 'Sélectionner des conversations à gérer par lot', session_select_all: 'Tout sélectionner', session_deselect_all: 'Tout désélectionner', session_selected_count: '{0} sélectionné(s)', session_batch_archive: 'Archiver', session_batch_delete: 'Supprimer', session_batch_move: 'Déplacer vers un projet', session_batch_delete_confirm: 'Supprimer {0} conversation(s) ?', session_batch_archive_confirm: 'Archiver {0} conversation(s) ?', session_batch_delete_worktree_confirm: 'Supprimer {0} conversation(s) ? {1} conversation(s) adossées à un worktree laisseront leurs répertoires worktree sur le disque.', session_batch_archive_worktree_confirm: 'Archiver {0} conversation(s) ? {1} conversation(s) adossées à un worktree conserveront leurs répertoires worktree sur le disque.', session_no_selection: 'Aucune conversation sélectionnée', settings_heading_title: 'Centre de contrôle', settings_heading_subtitle: 'Préférences, outils de conversation et contrôles système.', settings_section_conversation_title: 'Conversation', settings_section_appearance_title: 'Apparence', settings_section_appearance_meta: 'Thème, couleurs d\'accentuation et style visuel.', settings_section_preferences_title: 'Préférences', settings_section_preferences_meta: 'Valeurs par défaut et comportement de l\'interface pour Hermes Web UI.', settings_section_system_title: 'Système', settings_section_system_meta: 'Version de l\'instance et contrôles d\'accès.', settings_check_now: 'Vérifier maintenant', settings_checking: 'Vérification\u2026', settings_up_to_date: 'À jour ✓', settings_updates_available: '{count} mise(s) à jour disponible(s)', settings_updates_disabled: 'Vérifications des mises à jour désactivées', settings_update_check_failed: 'Échec de la vérification des mises à jour', settings_update_no_git: 'Impossible de vérifier les mises à jour (pas un dépôt git)', settings_label_workspace_panel_open: 'Garder le panneau de l\'espace de travail ouvert par défaut', settings_desc_workspace_panel_open: 'Lorsqu\'il est activé, le panneau de l\'espace de travail / navigateur de fichiers s\'ouvre automatiquement à chaque nouvelle session. Vous pouvez toujours le fermer manuellement à tout moment.', settings_label_workspace_todos_tab: 'Afficher l\'onglet Todos dans le panneau de l\'espace de travail', settings_desc_workspace_todos_tab: 'Lorsqu\'il est activé, un onglet Todos apparaît dans le panneau de l\'espace de travail. Le panneau Todos de la barre latérale reste disponible.', settings_label_session_jump_buttons: 'Afficher les boutons de saut de session', settings_desc_session_jump_buttons: 'Afficher les boutons flottants Début et Fin lors de la lecture de longs historiques de session.', settings_label_terminal_auto_expand: 'Développer automatiquement le terminal en cas de sortie', settings_desc_terminal_auto_expand: 'Développer automatiquement le panneau de terminal réduit lorsqu\'une commande en cours d\'exécution émet une nouvelle sortie.', settings_label_session_endless_scroll: 'Charger les anciens messages en faisant défiler vers le haut', settings_desc_session_endless_scroll: 'Lorsqu\'il est activé, les anciens messages se chargent automatiquement lorsque vous faites défiler vers le haut. Lorsqu\'il est désactivé, utilisez le bouton des messages plus anciens.', settings_label_auto_scroll_follow: 'Suivre automatiquement le nouveau contenu', settings_desc_auto_scroll_follow: 'Lorsqu\'il est activé, la vue défile vers le bas à mesure que de nouveaux jetons arrivent. Lorsqu\'il est désactivé, vous contrôlez la position de défilement manuellement.', settings_label_render_user_markdown: 'Rendre le markdown dans les messages de l\'utilisateur', settings_label_show_titlebar_profile: 'Afficher le sélecteur de profil dans la barre de titre', settings_desc_show_titlebar_profile: 'Lorsqu\'il est activé, un bouton de sélection de profil apparaît dans la barre de titre en haut à gauche de l\'application, vous permettant de changer de profil depuis n\'importe quel onglet. Désactivé par défaut ; le pied de page du compositeur dispose toujours d\'un sélecteur de profil, indépendamment de ce paramètre.', settings_desc_render_user_markdown: 'Lorsqu\'il est activé, le gras, l\'italique, les liens et autres éléments markdown dans vos propres messages sont rendus. Désactivé par défaut ; les blocs de code et les formules mathématiques sont toujours rendus, indépendamment de ce paramètre.', settings_label_large_text_paste_as_attachment: 'Attach large pasted text as file', settings_desc_large_text_paste_as_attachment: 'When enabled, long pasted text becomes a .md attachment instead of filling the composer.', settings_label_project_quick_create: 'Show per-project new-conversation buttons', settings_desc_project_quick_create: 'When enabled, each project chip in the sidebar gets a + button to start a conversation in that project.', settings_label_structured_code: 'Blocs de code JSON/YAML', settings_option_structured_code_auto: 'Auto : Arborescence pour les blocs longs', settings_option_structured_code_on: 'Arborescence par défaut', settings_option_structured_code_off: 'Brut par défaut', settings_label_structured_code_auto_lines: 'Seuil automatique (lignes)', settings_desc_structured_code: 'Lorsque Auto est sélectionné, les blocs JSON/YAML avec au moins ce nombre de lignes s\'ouvrent en vue Arborescence. Arborescence ouvre toujours le visualiseur structuré ; Brut conserve le texte coloré syntaxiquement. Vous pouvez toujours basculer entre Arborescence/Brut sur chaque bloc.', settings_label_worklog_details_expanded_default: 'Ouvrir automatiquement les détails du journal de travail', settings_desc_worklog_details_expanded_default: 'Lorsqu\'il est activé, les nouveaux détails du journal de travail commencent développés, de sorte que les cartes d\'outils, de réflexion et de progression soient visibles sans clic supplémentaire. Lorsqu\'il est désactivé, les détails du journal de travail restent repliés par défaut ; les choix manuels de réduction/développement par tour prévalent.', settings_label_chat_activity_display_mode: 'Affichage des activités', settings_desc_chat_activity_display_mode: 'Journal de travail compact regroupe les activités de support dans un résumé discret. Flux transparent conserve chaque événement de réflexion/outil comme une ligne extensible chronologique.', first_token_time: 'Délai jusqu\'au premier jeton', processed_elapsed: _i18nProcessedElapsedEn, worklog_thinking: 'Réflexion', tool_target_skill_suffix: 'compétence', tool_action_label: _i18nToolActionLabelEn, tool_worklog_summary: _i18nToolWorklogSummaryEn, tool_summary_join: _i18nToolSummaryJoinEn, done: 'Terminé', settings_option_compact_worklog: 'Journal de travail compact', settings_option_transparent_stream: 'Flux transparent', settings_label_tab_visibility: 'Onglets de la barre latérale', settings_desc_tab_visibility: 'Choisir quels onglets apparaissent dans la barre latérale et le rail. Chat et Paramètres sont toujours visibles. Faites glisser les puces pour les réorganiser.', settings_label_composer_controls: 'Contrôles du pied de page du chat', settings_desc_composer_controls: 'Activer/désactiver les contrôles affichés dans le pied de page du chat. Faites glisser les puces pour réorganiser chaque groupe du pied de page.', settings_label_composer_situational_controls: 'Contrôles contextuels du pied de page', settings_desc_composer_situational_controls: 'Ces contrôles n\'apparaissent pas toujours, selon la zone d\'affichage, le mode ou l\'état d\'exécution. Vous pouvez toujours les désactiver si nécessaire.', composer_control_attach: 'Joindre', composer_control_saved_prompts: 'Invites sauvegardées', composer_control_mic: 'Micro', composer_control_profile: 'Profil', composer_control_workspace: 'Espace de travail', composer_control_model: 'Modèle', composer_control_reasoning: 'Raisonnement', composer_control_context: 'Contexte', composer_control_voice_mode: 'Mode vocal', composer_control_yolo: 'YOLO', composer_control_bg_badge: 'Badge d\'arrière-plan', composer_control_mobile_config: 'Configuration mobile', composer_control_quota_chip: 'Jeton de quota', composer_control_toolsets: 'Jeux d\'outils', composer_control_status: 'État', open_in_browser: 'Ouvrir dans le navigateur', settings_dropdown_conversation: 'Conversation', settings_dropdown_appearance: 'Apparence', settings_dropdown_preferences: 'Préférences', settings_dropdown_providers: 'Fournisseurs', settings_dropdown_system: 'Système', settings_tab_conversation: 'Conversation', settings_tab_appearance: 'Apparence', settings_tab_preferences: 'Préférences', settings_tab_plugins: 'Plugins', settings_tab_extensions: 'Extensions', settings_extensions_gallery_tab: 'Gallery', settings_extensions_installed_tab: 'Installed', settings_extensions_diagnostics_tab: 'Diagnostics', settings_extensions_gallery_loading: 'Loading gallery…', settings_extensions_gallery_empty: 'No extensions found in the registry.', settings_extensions_gallery_error: 'Failed to load gallery.', ext_gallery_install: 'Install', ext_gallery_installing: 'Installing…', ext_gallery_installed: 'Installed', ext_gallery_uninstall: 'Uninstall', ext_gallery_uninstalling: 'Uninstalling…', ext_gallery_restart_required: 'Restart required', ext_gallery_permissions_show: 'Permissions', ext_gallery_permissions_hide: 'Hide permissions', ext_gallery_permissions_empty: 'Aucune permission supplémentaire déclarée.', ext_gallery_version: 'Version', ext_gallery_author: 'Author', ext_gallery_capabilities: 'Capabilities', ext_gallery_next_step: 'Étape suivante', ext_gallery_after_install: 'Après l’installation', ext_gallery_local_component_required: 'Cette extension comporte un composant local. Après l’installation, démarrez l’application locale ou le sidecar requis.', ext_gallery_local_app_label: 'Application locale', ext_gallery_required_suffix: '{0} requis', ext_gallery_sidecar_required: 'Sidecar requis', ext_gallery_native_host_required: 'Hôte natif requis', ext_gallery_open_setup_guide: 'Ouvrir le guide de configuration', ext_gallery_install_restart_required: 'Extension installée. Redémarrage requis pour appliquer.', ext_gallery_install_followup: 'Extension installée. Consultez la carte pour les prochaines étapes.', ext_gallery_install_ok: 'Extension installed successfully.', ext_gallery_uninstall_ok: 'Extension uninstalled.', settings_plugins_title: 'Plugins', plugins_enable_toggle: 'Activer', settings_plugins_meta: 'Afficher les plugins Hermes installés et les hooks de cycle de vie qu\'ils enregistrent. Ce panneau est en lecture seule.', settings_plugins_empty: 'Aucun plugin Hermes n\'est actuellement visible. Installez ou activez les plugins depuis le CLI/config Hermes pour les voir ici.', plugins_unnamed: 'Plugin sans nom', plugins_no_description: 'Aucune description fournie.', plugins_no_hooks: 'Aucun hook de cycle de vie enregistré', plugins_registered_hooks: 'Hooks enregistrés', plugins_enabled: 'Activé', plugins_disabled: 'Désactivé', plugins_active_provider: 'Actif (fournisseur)', plugins_provider_no_hooks: 'Plugin fournisseur — aucun hook de visibilité agent', plugins_load_failed: 'Échec du chargement des plugins : ', settings_tab_system: 'Système', settings_tab_help: 'Aide', settings_help_meta: 'Ressources et support pour Hermes WebUI.', settings_help_docs_label: 'Documentation', settings_help_docs_desc: 'Guides, référence de configuration et le README complet d\'Hermes WebUI.', settings_help_docs_link: 'Ouvrir la documentation', settings_help_issue_label: 'Vous rencontrez un problème ?', settings_help_issue_desc: 'Recherchez des rapports existants ou ouvrez-en un nouveau sur GitHub.', settings_help_issue_link: 'Ouvrir les issues GitHub', settings_title: 'Paramètres', settings_search_placeholder: 'Rechercher des paramètres\u2026', settings_search_no_results: 'Aucun paramètre trouvé.', settings_save_btn: 'Enregistrer les paramètres', settings_label_model: 'Modèle par défaut', settings_desc_model: 'Utilisé pour les nouvelles conversations. Les conversations existantes conservent leur modèle sélectionné.', settings_main_advanced_button_aria: 'Options avancées pour le modèle principal', settings_main_advanced_title: 'Options du modèle principal', settings_main_advanced_subtitle: 'Configuration avancée pour le modèle de chat par défaut.', settings_main_advanced_saved: 'Options du modèle principal enregistrées', settings_main_advanced_save_failed: 'Échec de l\'enregistrement des options du modèle principal', settings_main_advanced_service_tier: 'Service tier', settings_main_advanced_service_tier_desc: 'Optional request setting for OpenAI-family providers.', settings_main_advanced_service_tier_default: 'Default / off', settings_main_advanced_service_tier_priority: 'Priority (fast)', settings_label_auxiliary_models: 'Modèles auxiliaires', settings_desc_auxiliary_models: 'Routage des tâches secondaires : vision, compression, génération de titres, etc. « Auto » utilise votre modèle de chat principal.', settings_btn_reset_aux_models: 'Tout réinitialiser à auto', settings_btn_apply_aux_models: 'Appliquer les modifications', settings_aux_provider_auto: 'utiliser le modèle principal', settings_aux_model_auto: 'auto (utiliser la valeur par défaut du fournisseur)', settings_aux_model_custom: 'Modèle personnalisé\u2026', settings_aux_model_custom_prompt: 'Entrer l\'ID du modèle :', settings_aux_loading: 'Chargement des modèles auxiliaires\u2026', settings_aux_load_failed: 'Impossible de charger les paramètres des modèles auxiliaires. Assurez-vous que l\'API de l\'agent est disponible.', settings_aux_reset_confirm_title: 'Réinitialiser les modèles auxiliaires ?', settings_aux_reset_confirm_msg: 'Cela définira toutes les tâches auxiliaires sur auto (utiliser le modèle principal).', settings_aux_reset_done: 'Modèles auxiliaires réinitialisés à auto', settings_aux_save_failed: 'Échec de l\'enregistrement du modèle auxiliaire', settings_aux_saved: 'Modèles auxiliaires mis à jour', settings_aux_no_changes: 'Aucune modification à appliquer', settings_aux_task_vision: 'Vision', settings_aux_task_vision_desc: 'analyse d\'image/capture d\'écran', settings_aux_task_compression: 'Compression', settings_aux_task_compression_desc: 'résumé du contexte', settings_aux_task_web_extract: 'Extraction web', settings_aux_task_web_extract_desc: 'résumé de page web', settings_aux_task_session_search: 'Recherche de session', settings_aux_task_session_search_desc: 'rappel de conversations passées', settings_aux_task_approval: 'Approbation', settings_aux_task_approval_desc: 'approbation intelligente des commandes', settings_aux_task_mcp: 'MCP', settings_aux_task_mcp_desc: 'raisonnement sur les outils MCP', settings_aux_task_title_generation: 'Génération de titres', settings_aux_task_title_generation_desc: 'titres de session', settings_aux_task_skills_hub: 'Centre de compétences', settings_aux_task_skills_hub_desc: 'recherche/installation de compétences', settings_aux_task_curator: 'Conservateur', settings_aux_task_curator_desc: 'passage de révision d\'utilisation des compétences', settings_aux_task_kanban_decomposer: 'Décomposeur Kanban', settings_aux_task_kanban_decomposer_desc: 'décomposition des tâches', settings_aux_task_profile_describer: 'Descripteur de profil', settings_aux_task_profile_describer_desc: 'résumés de profil', settings_aux_task_triage_specifier: 'Spécificateur de triage', settings_aux_task_triage_specifier_desc: 'spécifications de triage de problèmes/tâches', settings_aux_advanced_button_title: 'Options avancées', settings_aux_advanced_button_aria: 'Options avancées pour {task}', settings_aux_advanced_title: 'Options de {task}', settings_aux_advanced_subtitle: 'Configuration avancée pour l\'auxiliaire.', settings_aux_advanced_save: 'Enregistrer les options', settings_aux_advanced_base_url: 'URL de base', settings_aux_advanced_base_url_desc: 'Remplacement facultatif du point de terminaison du fournisseur.', settings_aux_advanced_timeout: 'Délai d\'expiration (secondes)', settings_aux_advanced_timeout_desc: 'Délai d\'expiration de la requête pour cette tâche auxiliaire. Vide utilise la valeur par défaut d\'Hermes.', settings_aux_advanced_download_timeout: 'Délai de téléchargement (secondes)', settings_aux_advanced_download_timeout_desc: 'Pertinent uniquement pour les tâches qui téléchargent des médias/contenus, ex. vision. Vide utilise la valeur par défaut.', settings_aux_advanced_max_concurrency: 'Concurrence maximale', settings_aux_advanced_max_concurrency_desc: 'Limite de concurrence facultative par tâche. Vide utilise la valeur par défaut.', settings_aux_advanced_extra_body: 'Corps JSON supplémentaire', settings_aux_advanced_extra_body_desc: 'Objet JSON facultatif fusionné dans le corps de la requête du modèle.', settings_aux_advanced_api_key: 'Remplacement de la clé API', settings_aux_advanced_api_key_set_hint: 'La clé API est définie. Laissez vide pour la conserver, ou utilisez effacer pour la supprimer.', settings_aux_advanced_api_key_empty_hint: 'Laissez vide pour utiliser les identifiants du fournisseur/défaut.', settings_aux_advanced_api_key_clear: 'Effacer le remplacement de la clé API existante', settings_aux_advanced_extra_body_invalid_json: 'Le corps supplémentaire doit être un JSON valide', settings_aux_advanced_extra_body_object_required: 'Le corps supplémentaire doit être un objet JSON', settings_aux_advanced_saved: 'Options auxiliaires enregistrées', settings_aux_advanced_save_failed: 'Échec de l\'enregistrement des options auxiliaires', settings_label_send_key: 'Touche d\'envoi', settings_label_theme: 'Thème', settings_label_skin: 'Style', settings_label_font_size: 'Taille de police', font_size_small: 'Petite', font_size_default: 'Par défaut', font_size_large: 'Grande', font_size_xlarge: 'Très grande', settings_autosave_saving: 'Enregistrement\u2026', settings_autosave_saved: 'Enregistré', settings_autosave_failed: 'Échec de l\'enregistrement', settings_autosave_retry: 'Réessayer', settings_label_language: 'Langue', settings_label_quota_chip: 'Afficher le jeton de quota du fournisseur dans le compositeur', settings_desc_quota_chip: 'Affiche un indicateur de quota restant (ex. solde de crédit OpenRouter) dans le pied de page du compositeur. Désactivé par défaut. Visible uniquement sur les grands écrans (≥1400px) lorsqu\'il est activé, pour garder le compositeur épuré sur les ordinateurs portables et les écrans de bureau standards.', settings_label_conversation_outline: 'Afficher le plan de la conversation', settings_desc_conversation_outline: 'Afficher une liste de saut réservée au bureau pour les questions utilisateur dans la conversation actuelle. Désactivé par défaut.', settings_label_hide_suggestions: 'Masquer les suggestions de nouvelle conversation', settings_desc_hide_suggestions: 'Masquer les trois boutons de suggestion par défaut sur l\'écran de nouvelle conversation vide pour éviter les clics accidentels.', settings_label_virtualize_transcript: 'Virtualiser les longs historiques (expérimental)', settings_desc_virtualize_transcript: 'Expérimental. Affiche uniquement la partie visible des historiques de conversation très longs (plus de 80 messages) pour accélérer le défilement. Désactivé par défaut car cela peut causer des scintillements lors du défilement sur de longues sessions avec de gros blocs d\'appels d\'outils. Activez-le pour essayer ; désactivez-le pour afficher l\'intégralité de l\'historique à la fois (et pour que la recherche du navigateur (Ctrl+F) corresponde à toute la conversation).', settings_label_token_usage: 'Afficher l\'utilisation des jetons', settings_label_token_speed: 'Afficher la vitesse des jetons (TPS)', settings_desc_token_speed: 'Affiche les jetons par seconde dans les en-têtes des messages de l\'assistant pendant le streaming et après la fin d\'une réponse. Désactivé par défaut.', settings_label_sidebar_density: 'Densité de la barre latérale', cmd_reasoning: 'Basculer la visibilité du raisonnement (afficher/masquer), définir le niveau d\'effort, ou vérifier l\'état actuel', settings_label_external_sessions: 'Afficher les sessions non-WebUI', settings_label_claude_code_sessions: 'Show Claude Code sessions', settings_label_cron_sessions: 'Afficher les sessions cron', settings_label_webhook_sessions: 'Afficher les sessions webhook', settings_label_previous_messaging_sessions: 'Afficher les sessions de messagerie précédentes', settings_label_sync_insights: 'Synchroniser avec les analyses', settings_label_check_updates: 'Vérifier les mises à jour', settings_label_ignore_agent_updates: 'Ignorer les mises à jour de l\'agent', settings_label_whats_new_summary: "Résumer les nouveautés avec l'IA", settings_label_bot_name: 'Nom de l\'assistant par défaut', settings_label_password: 'Mot de passe d\'accès', settings_label_pinned_limit: 'Limite des conversations épinglées', settings_desc_pinned_limit: 'Nombre maximum de conversations actives pouvant être épinglées dans la barre latérale. Par défaut 3.', settings_label_dashboard_mode: 'Tableau de bord officiel Hermes', settings_desc_dashboard_mode: 'Afficher un lien dans la barre de navigation lorsque le tableau de bord officiel Hermes est accessible. Les URL de proxy inverse public sont stockées comme des liens navigateur uniquement et ne sont jamais sondées par le serveur.', settings_dashboard_mode_auto: 'Détection automatique', settings_dashboard_mode_always: 'Toujours afficher', settings_dashboard_mode_never: 'Ne jamais afficher', settings_dashboard_save: 'Enregistrer les paramètres du lien du tableau de bord', settings_label_gateway_status: 'État de la passerelle', settings_desc_gateway_status: 'État de la passerelle Hermes (Telegram, Discord, Slack, etc.)', gateway_not_configured: 'Passerelle non configurée', gateway_metadata_stale: 'Métadonnées de la passerelle obsolètes', gateway_endpoint_unreachable: 'Point de terminaison de la passerelle inaccessible', gateway_not_running: 'Passerelle non en cours d\'exécution', gateway_running_label: 'En cours', gateway_last_active: 'Dernière activité : ', gateway_session_count: (n) => `${n} ${n === 1 ? 'session' : 'sessions'}`, gateway_load_failed: 'Échec du chargement de l\'état de la passerelle', settings_saved: 'Paramètres enregistrés', settings_save_failed: 'Échec de l\'enregistrement : ', settings_load_failed: 'Échec du chargement des paramètres : ', settings_saved_pw: 'Paramètres enregistrés — protection par mot de passe activée et ce navigateur reste connecté', settings_saved_pw_updated: 'Paramètres enregistrés — mot de passe mis à jour', login_title: 'Connexion', login_subtitle: 'Entrez votre mot de passe pour continuer', login_placeholder: 'Mot de passe', login_btn: 'Se connecter', login_invalid_pw: 'Mot de passe invalide', login_conn_failed: 'Échec de la connexion', dialog_confirm_title: 'Confirmer l\'action', dialog_prompt_title: 'Entrer une valeur', dialog_confirm_btn: 'Confirmer', discard: 'Ignorer', clear: 'Effacer', create: 'Créer', remove: 'Supprimer', project_name_prompt: 'Nom du projet :', tab_chat: 'Chat', tab_tasks: 'Tâches', tab_skills: 'Compétences', tab_memory: 'Mémoire', tab_workspaces: 'Espaces', tab_profiles: 'Profils', tab_kanban: 'Kanban', kanban_board: 'Tableau', kanban_visible_tasks: '{0} tâches visibles', kanban_search_tasks: 'Rechercher des tâches', kanban_all_assignees: 'Tous les assignés', kanban_all_tenants: 'Tous les locataires', kanban_include_archived: 'Inclure les archivés', kanban_no_matching_tasks: 'Aucune tâche correspondante', kanban_no_data: 'Aucune donnée Kanban', kanban_work_queue_hint: 'Il s\'agit de la file d\'attente de travail de l\'agent Hermes. Créez ou triez une tâche, assignez-la, déplacez-la vers Prêt, puis laissez le répartiteur la réclamer.', kanban_tasks_hidden_by_filters: 'Tasks hidden by filters', kanban_clear_filters: 'Clear filters', kanban_unavailable: 'Kanban indisponible', kanban_read_only: 'Vue en lecture seule', kanban_empty: 'Vide', kanban_task: 'Tâche', kanban_no_description: 'Aucune description', kanban_refresh: 'Rafraîchir', kanban_status_triage: 'Triage', kanban_status_todo: 'À faire', kanban_status_ready: 'Prêt', kanban_status_running: 'En cours', kanban_status_blocked: 'Bloqué', kanban_status_done: 'Terminé', kanban_comments_count: 'Commentaires ({0})', kanban_events_count: 'Événements ({0})', kanban_links: 'Liens', kanban_parents: 'Parents', kanban_children: 'Enfants', kanban_runs_count: 'Exécutions ({0})', kanban_no_comments: 'Aucun commentaire', kanban_no_events: 'Aucun événement', kanban_no_runs: 'Aucune exécution', kanban_title: 'Titre', kanban_description: 'Description', kanban_description_placeholder: 'Facultatif — ce qui doit se passer, critères d\'acceptation, liens', kanban_status: 'Statut', kanban_assignee: 'Assigné à', kanban_assignee_placeholder: 'Facultatif — laissez vide pour n\'importe quel travailleur', kanban_tenant: 'Locataire', kanban_tenant_placeholder: 'Facultatif — slug du projet ou de l\'équipe', kanban_priority: 'Priorité', kanban_priority_hint: 'Les nombres plus élevés sont exécutés en premier. Par défaut 0.', kanban_title_required: 'Le titre est requis.', kanban_new_task: 'Nouvelle tâche', kanban_view_lanes: 'Colonnes par profil', kanban_view_consolidated: 'Vue consolidée', kanban_view_lanes_saved: 'Vue Kanban : colonnes par profil', kanban_view_consolidated_saved: 'Vue Kanban : consolidée', kanban_view_update_failed: 'Échec de la mise à jour de la vue Kanban : ', kanban_edit_task: 'Modifier la tâche', kanban_status_original_hint: 'Statut actuel : {0}. Cette boîte de dialogue ne prend en charge que les modifications Triage/À faire/Prêt.', kanban_run_dispatcher: 'Exécuter le répartiteur', kanban_run_dispatcher_confirm: 'Cela réclamera les tâches Prêtes sur ce tableau et générera des sous-processus de travailleurs (un par tâche, jusqu\'à 8 par clic). Continuer ?', kanban_assignee_profiles_label: 'Profils Hermes', kanban_assignee_other_label: 'Autre (voies CLI / profils supprimés)', kanban_assignee_unassigned: '— Non assigné (ne s\'exécutera pas automatiquement) —', kanban_ready_needs_assignee: 'Vous avez sélectionné Non assigné + Prêt. Le répartiteur ignorera cette tâche. Soumettez à nouveau pour confirmer, ou choisissez un profil.', kanban_dispatch_preview_prefix: 'Aperçu :', kanban_dispatch_run_prefix: 'Réparti :', kanban_dispatch_spawned: 'lancé', kanban_dispatch_promoted: 'promu', kanban_dispatch_reclaimed: 'récupéré', kanban_dispatch_skipped_unassigned: 'ignoré (pas d\'assigné)', kanban_dispatch_skipped_nonspawnable: 'ignoré (profil inconnu)', kanban_dispatch_auto_blocked: 'auto-bloqué', kanban_dispatch_timed_out: 'expiré', kanban_dispatch_crashed: 'planté', kanban_add_comment: 'Ajouter un commentaire', kanban_workspace_kind: 'Type d\'espace de travail', kanban_workspace_path: 'Chemin de l\'espace de travail', kanban_workspace_path_placeholder: 'Chemin vers l\'espace de travail', kanban_workspace_scratch: 'Brouillon', kanban_workspace_worktree: 'Worktree', kanban_workspace_dir: 'Répertoire', kanban_workspace_path_required: 'Le chemin de l\'espace de travail est requis pour les espaces de travail non-brouillon.', kanban_skills: 'Skills', kanban_skills_placeholder: 'Comma-separated skill names, e.g. python,git', kanban_max_runtime_seconds: 'Max runtime (seconds)', kanban_max_runtime_hint: 'Leave empty for unlimited.', kanban_max_runtime_invalid: 'Max runtime must be a whole number of seconds greater than 0.', kanban_parents_modal: 'Parent dependencies', kanban_parents_placeholder: 'Parent task ID', kanban_add_dependency: 'Ajouter une dépendance', kanban_remove_dependency: 'Supprimer la dépendance', kanban_dependency_placeholder: 'ID de la tâche à lier', kanban_dependency_self: 'Une tâche ne peut pas dépendre d\'elle-même', kanban_only_mine: 'Uniquement les miennes', kanban_bulk_action: 'Action groupée', kanban_nudge_dispatcher: 'Aperçu du répartiteur', kanban_stats: 'Statistiques', kanban_worker_log: 'Journal du travailleur', kanban_block: 'Bloquer', kanban_unblock: 'Débloquer', kanban_back_to_board: 'Retour au tableau', kanban_lanes_by_profile: 'Colonnes par profil', kanban_new_board: 'Nouveau tableau\u2026', kanban_rename_board: 'Renommer le tableau actuel\u2026', kanban_archive_board: 'Archiver le tableau actuel\u2026', kanban_archive_board_confirm: 'Archiver le tableau "{name}" ? Les tâches restent sur le disque et le tableau peut être restauré depuis kanban/boards/_archived/.', kanban_board_archived: 'Tableau archivé', kanban_board_name: 'Nom', kanban_board_slug: 'Slug (minuscules, tirets)', kanban_board_description: 'Description (facultatif)', kanban_board_icon: 'Icône (emoji, facultatif)', kanban_board_color: 'Couleur (facultatif)', kanban_board_name_required: 'Le nom est requis', kanban_board_slug_required: 'Le slug est requis', kanban_card_complete: 'terminer', kanban_card_archive: 'archiver', kanban_unassigned: 'non assigné', kanban_status_archived: 'Archivé', tab_todos: 'Todos', tab_insights: 'Analyses', tab_dashboard: 'Tableau de bord Hermes', dashboard_loopback_warning: 'Le tableau de bord est en boucle locale uniquement sur le serveur. Naviguez depuis le serveur lui-même ou redémarrez-le avec --host 0.0.0.0 (non sécurisé).', tab_logs: 'Journaux', tab_settings: 'Paramètres', close_menu: 'Fermer le menu', new_conversation: 'Nouvelle conversation', filter_conversations: 'Filtrer les conversations\u2026', markdown_table_filter: 'Filtrer le tableau', markdown_table_sort_column: 'Trier la colonne', session_time_unknown: 'Inconnu', session_time_minutes_ago: (n) => `${n}m`, session_time_hours_ago: (n) => `${n}h`, session_time_days_ago: (n) => `${n}j`, session_time_last_week: '1s', session_time_bucket_today: 'Aujourd\'hui', session_time_bucket_yesterday: 'Hier', session_time_bucket_this_week: 'Cette semaine', session_time_bucket_last_week: 'La semaine dernière', session_time_bucket_older: 'Plus ancien', scheduled_jobs: 'Tâches planifiées', new_job: 'Nouvelle tâche', loading: 'Chargement\u2026', search_skills: 'Rechercher des compétences\u2026', new_skill: 'Nouvelle compétence', personal_memory: 'Mémoire personnelle', current_task_list: 'Liste de tâches actuelle', logs_title: 'Journaux', logs_file: 'Fichier', logs_tail: 'Queue', logs_auto_refresh: 'Rafraîchissement automatique (5s)', logs_wrap: 'Retourner les lignes', logs_copy_all: 'Tout copier', logs_empty: 'Aucune ligne de journal pour l\'instant.', logs_loading: 'Chargement des journaux\u2026', logs_load_failed: 'Échec du chargement des journaux', logs_status_idle: 'Choisissez un fichier journal pour voir les lignes récentes.', logs_no_mtime: 'pas encore écrit', logs_truncated_hint: 'Affichage de la queue d\'un gros fichier journal ; les octets plus anciens ont été ignorés pour limiter la mémoire.', logs_copied: 'Journaux copiés', logs_severity: 'Sévérité', logs_severity_all: 'Tout', logs_severity_errors: 'Erreurs', logs_severity_warnings: 'Avertissements+', logs_filter_active: 'affiché (filtre actif)', insights_title: 'Analyses d\'utilisation', insights_sessions: 'Sessions', insights_messages: 'Messages', insights_tokens: 'Jetons', insights_cost: 'Coût estimé', insights_no_cost: 'N/A', insights_models: 'Modèles', insights_activity_by_day: 'Activité par jour', insights_activity_by_hour: 'Activité par heure', insights_peak_hour: 'Pic : {hour}', insights_token_breakdown: 'Répartition des jetons', insights_input_tokens: 'Entrée', insights_output_tokens: 'Sortie', insights_total: 'Total', insights_daily_tokens: 'Jetons quotidiens', insights_model_name: 'Modèle', insights_model_sessions: 'Sessions', insights_model_tokens: 'Jetons', insights_model_cost: 'Coût', insights_model_cache: 'Cache', insights_cache_hit: 'Taux de succès du cache de prompts', insights_model_share: 'Part', insights_model_health_title: 'Comparaison de la santé des modèles', insights_model_health_provider: 'Fournisseur', insights_model_health_replacement: 'Guide de remplacement', insights_model_health_cost_per_m: 'Coût / 1M', insights_no_usage_data: 'Aucune donnée d\'utilisation pour l\'instant', insights_footer: 'Affichage des données des {days} derniers jours', insights_skill_usage_title: 'Utilisation des compétences', insights_skill_usage_sub: 'Fréquence d\'invocation des outils', insights_skill_usage_total: 'Invocations totales', insights_skill_usage_skills_used: 'Compétences utilisées', insights_skill_usage_no_data: 'Aucune donnée d\'utilisation des compétences pour l\'instant', insights_skill_usage_no_data_hint: 'Les compétences apparaîtront ici une fois utilisées dans les conversations.', insights_skill_usage_footer: 'Comptages depuis ~/.hermes/skills/', insights_skill_usage_col_skill: 'Compétence', insights_skill_usage_col_uses: 'Utilisations', insights_skill_usage_col_views: 'Vues', insights_skill_usage_col_share: 'Part d\'utilisation', insights_skill_usage_col_patches: 'Correctifs', wiki_browse: 'Parcourir le wiki', wiki_search_placeholder: 'Rechercher des pages\u2026', wiki_no_pages: 'Aucune page wiki trouvée', wiki_not_configured: 'Wiki non configuré', workspace_desc: 'Ajouter et changer d\'espace de travail pour vos sessions.', session_meta_messages: (n) => `${n} msg${n === 1 ? '' : 's'}`, session_meta_children: (n) => `${n} enfant${n === 1 ? '' : 's'}`, session_meta_segments: (n) => `${n} tour${n === 1 ? '' : 's'} antérieur${n === 1 ? '' : 's'}`, session_lineage_toggle_hint: '{0} — les tours de contexte précédents sont repliés ici. Cliquez pour les afficher ou les masquer.', session_lineage_static_hint: '{0} — les tours de contexte précédents sont repliés ici.', session_child_toggle_hint: '{0} — conversations enfants créées à partir de cette session. Cliquez pour les afficher ou les masquer.', session_readonly_title_hint: 'Session importée en lecture seule — {0}', session_lineage_segment_untitled: 'Segment sans titre', session_lineage_segment_open: 'Ouvrir le segment de la lignée', new_profile: 'Nouveau profil', transcript: 'Transcription', download_transcript: 'Télécharger en Markdown', import: 'Importer', export_session_json: 'JSON', export_session_json_tooltip: 'Exporter la session complète en JSON', export_session_html: 'HTML', export_session_html_tooltip: 'Exporter en page HTML autonome', import_session_json_tooltip: 'Importer une session depuis JSON', clear_conversation_btn_tooltip: 'Effacer tous les messages de cette conversation', settings_label_rtl: 'Disposition du chat de droite à gauche', settings_desc_rtl: 'Inverse l\'alignement des messages du chat et de la saisie du compositeur pour les langues comme l\'arabe ou l\'hébreu. N\'affecte que la zone de chat — la barre latérale et les autres panneaux restent de gauche à droite.', settings_label_sound: 'Son de notification', settings_desc_sound: 'Jouer un son lorsque l\'assistant termine une réponse.', tts_listen: 'Écouter', tts_not_supported: 'La synthèse vocale n\'est pas prise en charge dans ce navigateur.', settings_label_tts: 'Synthèse vocale pour les réponses', settings_desc_tts: 'Afficher un bouton haut-parleur sur chaque message de l\'assistant pour le lire à voix haute en utilisant la synthèse vocale de votre navigateur.', settings_label_tts_auto_read: 'Lire automatiquement les réponses à voix haute', settings_desc_tts_auto_read: 'Parler automatiquement chaque nouvelle réponse de l\'assistant lorsqu\'elle se termine. S\'arrête lorsque vous commencez à taper.', settings_label_voice_mode: 'Bouton de mode vocal mains libres', settings_desc_voice_mode: 'Afficher le bouton du mode vocal (forme d\'onde audio) à côté du micro de dictée. Vous permet de parler naturellement — Hermes envoie automatiquement après une pause et lit les réponses à voix haute. Nécessite un navigateur prenant en charge à la fois la reconnaissance vocale et la synthèse vocale.', settings_label_raw_audio: 'Envoyer l\'audio brut au lieu de le transcrire', settings_desc_raw_audio: 'Enregistrer et envoyer le fichier audio original à l\'agent au lieu de le convertir d\'abord en texte. L\'agent peut ensuite le transcrire ou traiter l\'audio brut (émotion, bruit de fond, STT personnalisé). Comme le comportement des messages vocaux de Telegram.', voice_send_raw: 'Envoyer l\'audio brut', voice_raw_attached: 'Audio joint. Appuyez sur Envoyer ou saisissez plus de texte.', settings_label_tts_voice: 'Voix', settings_desc_tts_voice: 'Voix préférée. Remplie à partir des voix disponibles dans votre navigateur.', settings_label_tts_rate: 'Débit de la parole', settings_label_tts_pitch: 'Hauteur de la parole', settings_label_tts_engine: 'Moteur de synthèse vocale', settings_desc_tts_engine: 'Choisissez le moteur de synthèse vocale. Edge TTS utilise les voix neuronales Microsoft via le serveur.', settings_label_notifications: 'Notifications du navigateur', settings_desc_notifications: 'Afficher une notification système lorsqu\'une réponse se termine pendant que l\'application est en arrière-plan.', notifications_enable_btn: 'Activer les notifications', notifications_test_btn: 'Envoyer un test', notifications_permission_status: (status) => `Autorisation : ${status}`, notifications_enabled_toast: 'Notifications activées.', notifications_denied: 'Les notifications sont bloquées dans ce navigateur. Activez-les dans les paramètres du navigateur.', notifications_unsupported: 'Les notifications ne sont pas prises en charge dans ce navigateur.', settings_desc_token_usage: 'Affiche le nombre de jetons d\'entrée/sortie sous chaque réponse de l\'assistant. Également basculé avec /usage.', settings_label_api_redact: 'Masquer les données sensibles dans les réponses API', settings_desc_api_redact: 'Les utilisateurs auto-hébergés peuvent désactiver pour la transparence (non recommandé pour les instances partagées).', settings_sidebar_density_compact: 'Compact', settings_sidebar_density_detailed: 'Détaillé', settings_desc_sidebar_density: 'Contrôle la quantité de métadonnées que la liste des sessions affiche dans la barre latérale gauche.', settings_label_auto_title_refresh: 'Rafraîchissement adaptatif du titre', settings_auto_title_refresh_off: 'Désactivé', settings_auto_title_refresh_5: 'Tous les 5 échanges', settings_auto_title_refresh_10: 'Tous les 10 échanges', settings_auto_title_refresh_20: 'Tous les 20 échanges', settings_desc_auto_title_refresh: 'Régénère automatiquement le titre de la session en fonction du dernier échange, le gardant pertinent à mesure que la conversation évolue. Nécessite qu\'un modèle de génération de titres LLM soit configuré.', settings_desc_external_sessions: 'Afficher les conversations de la CLI, Telegram, Discord, Slack et d\'autres canaux dans la liste des sessions. Cliquez pour importer et continuer.', settings_desc_claude_code_sessions: 'Show Claude Code imported sessions in the sidebar, or hide them while leaving other external sessions visible.', settings_desc_cron_sessions: 'Afficher les sorties des tâches cron comme des conversations dans la barre latérale. Uniquement actif lorsque les sessions non-WebUI sont activées. Désactivé par défaut ; les tâches à haute fréquence peuvent inonder la barre latérale.', settings_desc_webhook_sessions: 'Afficher les exécutions webhook comme des conversations dans la barre latérale. Uniquement actif lorsque les sessions non-WebUI sont activées. Désactivé par défaut ; les routes à volume élevé peuvent inonder la barre latérale.', settings_desc_previous_messaging_sessions: 'Afficher les anciennes sessions Discord, Telegram, Slack et Weixin qui ont été remplacées par une réinitialisation ou une compression.', settings_desc_sync_insights: 'Replique l\'utilisation des jetons de l\'interface Web vers state.db afin que hermes /insights inclue les données des sessions du navigateur. Désactivé par défaut.', settings_desc_check_updates: 'Afficher une bannière lorsque de nouvelles versions de l\'interface Web ou de l\'agent sont disponibles. Exécute périodiquement un git fetch en arrière-plan.', settings_desc_ignore_agent_updates: 'Garder les vérifications de mise à jour de l\'interface Web activées, mais masquer les avis de mise à jour de l\'agent et ignorer les récupérations de mise à jour de l\'agent.', settings_desc_whats_new_summary: "Change l'action Nouveautés de l'ouverture du diff brut d'abord vers la génération d'un résumé court et lisible. La comparaison de diff classique reste disponible après le résumé.", settings_desc_bot_name: 'Utilisé uniquement pour le profil par défaut. Les autres profils utilisent leurs propres noms.', settings_desc_password: 'Entrez un nouveau mot de passe pour le définir ou le modifier. Laissez vide pour conserver le paramètre actuel.', password_placeholder: 'Entrer un nouveau mot de passe\u2026', password_env_var_locked: 'La variable d\'environnement HERMES_WEBUI_PASSWORD est actuellement définie et a priorité. Désactivez-la et redémarrez le serveur pour gérer le mot de passe depuis ici.', password_env_var_locked_placeholder: 'Verrouillé : la variable d\'environnement HERMES_WEBUI_PASSWORD est définie', disable_auth: 'Désactiver l\'authentification', sign_out: 'Se déconnecter', settings_label_shutdown: 'Arrêter le serveur Hermes WebUI', settings_desc_shutdown_before_cmd: 'Arrête proprement le serveur WebUI local. Utile si vous l\'avez lancé via ', settings_desc_shutdown_between_cmds: ' et que vous voulez l\'arrêter sans passer par un terminal. Vous devrez relancer le serveur (', settings_desc_shutdown_after_cmd: ' ou l\'application native) avant que l\'interface Web soit à nouveau accessible.', settings_btn_shutdown: 'Arrêter le serveur', settings_shutdown_confirm_title: 'Arrêter Hermes WebUI', settings_shutdown_confirm_message: 'Arrêter le serveur Hermes WebUI ?', settings_shutdown_confirm_btn: 'Arrêter', settings_shutdown_stopped_message: 'Serveur arrêté. Vous pouvez fermer cet onglet.', providers_tab_title: 'Fournisseurs', providers_section_title: 'Fournisseurs', providers_section_meta: 'Gérer les clés API pour les fournisseurs d\'IA. Les modifications prennent effet immédiatement.', providers_status_configured: 'Clé API configurée', providers_status_not_configured: 'Aucune clé API', providers_status_oauth: 'OAuth', providers_status_api_key: 'Clé API', providers_status_model: 'Modèle', providers_status_not_configured_label: 'Non configuré', providers_oauth_hint: 'Authentifié via OAuth. Aucune clé API nécessaire.', providers_oauth_config_yaml_hint: 'Jeton configuré via config.yaml. Pour mettre à jour, modifiez la section des fournisseurs dans votre config.yaml ou exécutez hermes auth.', providers_oauth_not_configured_hint: 'Non authentifié. Exécutez hermes auth dans le terminal pour configurer ce fournisseur.', providers_save: 'Enregistrer', providers_refresh_models: 'Rafraîchir les modèles', providers_refreshing: 'Rafraîchissement\u2026', providers_models_refreshed: 'Modèles rafraîchis', providers_remove: 'Supprimer', providers_saving: 'Enregistrement\u2026', providers_removing: 'Suppression\u2026', providers_enter_key: 'Veuillez entrer une clé API', providers_empty: 'Aucun fournisseur configurable trouvé.', providers_key_updated: 'Clé API enregistrée', providers_key_removed: 'Clé API supprimée', providers_key_placeholder_new: 'sk-\u2026', providers_key_placeholder_replace: 'Entrer une nouvelle clé pour remplacer\u2026', provider_quota_title: 'Quota du fournisseur actif', provider_quota_active_provider: 'Fournisseur actif', provider_quota_last_checked_after_refresh: 'Dernière vérification après rafraîchissement', provider_quota_last_checked: 'Dernière vérification {0}', provider_quota_refresh_usage: 'Rafraîchir l\'utilisation', provider_quota_refreshing: 'Rafraîchissement\u2026', provider_quota_refresh_title: 'Rafraîchir maintenant les limites d\'utilisation du fournisseur', provider_quota_refresh_succeeded: 'Utilisation du fournisseur rafraîchie', provider_quota_refresh_failed: 'Échec du rafraîchissement de l\'utilisation du fournisseur', provider_quota_session_limit: 'Limite de 5 heures', provider_quota_weekly_limit: 'Limite hebdomadaire', provider_quota_window_fallback: 'Fenêtre', provider_quota_metric_remaining: 'Restant', provider_quota_metric_used: 'Utilisé', provider_quota_metric_limit: 'Limite', provider_quota_status_available: 'disponible', provider_quota_status_exhausted: 'épuisé', provider_quota_status_unavailable: 'indisponible', provider_quota_status_failed: 'échec', provider_quota_status_checked: 'vérifié', provider_quota_status_no_key: 'pas de clé', provider_quota_status_invalid_key: 'clé invalide', provider_quota_status_unsupported: 'non pris en charge', provider_quota_used_meta: '{0} utilisé', provider_quota_resets_meta: 'réinitialisation {0}', provider_quota_credential_pool: 'Pool d\'identifiants', provider_quota_credential_label: 'Identifiant {0}', provider_quota_pool_plans: 'Plans : {0}', provider_quota_pool_no_windows: 'Aucune fenêtre de limite de compte signalée.', provider_quota_account_limits_loaded: 'Limites de compte chargées.', provider_quota_unavailable: 'État du quota indisponible', provider_quota_retry_after: 'Réessayer après {0}', provider_quota_pool_summary_available: '{0}/{1} disponibles', provider_quota_pool_summary_exhausted: '{0} épuisés', provider_quota_pool_summary_failed: '{0} en échec', provider_quota_pool_summary_checked: '{0} vérifiés', provider_cost_budget_label: 'Monthly budget', provider_cost_budget_placeholder: 'e.g. 50.00', provider_cost_budget_set: 'Set', provider_cost_budget_clear: 'Clear', provider_cost_budget_pct: '{0}% of ${1} budget (monthly pace)', provider_cost_budget_save_failed: 'Failed to save budget', cancel: 'Annuler', create_job: 'Créer une tâche', save_skill: 'Enregistrer la compétence', editing: 'Édition', empty_title: 'En quoi puis-je vous aider ?', empty_subtitle: 'Posez une question, exécutez des commandes, explorez des fichiers ou gérez vos tâches planifiées.', suggest_files: 'Quels fichiers se trouvent dans cet espace de travail ?', suggest_schedule: 'Quel est mon programme aujourd\'hui ?', suggest_plan: 'Aidez-moi à planifier un petit projet.', onboarding_badge: 'PREMIÈRE EXÉCUTION', onboarding_title: 'Bienvenue dans l\'interface Web Hermes', onboarding_lead: 'Une configuration guidée rapide vérifiera Hermes, enregistrera une configuration de fournisseur réelle, choisira un espace de travail et un modèle, et protégera éventuellement l\'application avec un mot de passe.', onboarding_back: 'Retour', onboarding_continue: 'Continuer', onboarding_skip: 'Ignorer la configuration', onboarding_skipped: 'Configuration ignorée — utilisation de la configuration existante.', onboarding_open: 'Ouvrir Hermes', onboarding_step_system_title: 'Vérification du système', onboarding_step_system_desc: 'Vérifier l\'agent Hermes et la visibilité de la configuration.', onboarding_step_setup_title: 'Configuration du fournisseur', onboarding_step_setup_desc: 'Enregistrer la configuration minimale du fournisseur Hermes.', onboarding_step_workspace_title: 'Espace de travail + modèle', onboarding_step_workspace_desc: 'Choisir les valeurs par défaut pour les nouvelles sessions et le chat.', onboarding_step_password_title: 'Mot de passe facultatif', onboarding_step_password_desc: 'Protéger l\'interface Web avant de la partager.', onboarding_step_finish_title: 'Terminer', onboarding_step_finish_desc: 'Vérifier et entrer dans l\'application.', onboarding_notice_system_ready: 'L\'agent Hermes semble accessible depuis l\'interface Web.', onboarding_notice_system_unavailable: 'L\'agent Hermes n\'est pas encore entièrement disponible. Le bootstrap peut l\'installer, mais la configuration du fournisseur peut encore nécessiter un terminal.', onboarding_check_agent: 'Agent Hermes', onboarding_check_agent_ready: 'Détecté et importable', onboarding_check_agent_missing: 'Manquant ou partiellement importable', onboarding_check_password: 'Mot de passe', onboarding_check_password_enabled: 'Déjà activé', onboarding_check_password_disabled: 'Pas encore activé', onboarding_check_provider: 'Configuration du fournisseur', onboarding_check_provider_ready: 'Prêt à discuter', onboarding_check_provider_partial: 'Enregistré mais incomplet', onboarding_check_provider_pending: 'Nécessite une vérification', onboarding_config_file: 'Fichier de configuration :', onboarding_env_file: 'Fichier .env :', onboarding_unknown: 'Inconnu', onboarding_current_provider: 'Configuration actuelle :', onboarding_missing_imports: 'Importations manquantes :', onboarding_notice_setup_required: 'Choisissez un chemin de fournisseur simple ici. Les flux OAuth avancés appartiennent encore à la CLI Hermes pour l\'instant.', onboarding_notice_setup_already_ready: 'Une configuration de fournisseur Hermes fonctionnelle est déjà détectée. Vous pouvez la conserver ou la remplacer ici.', onboarding_oauth_provider_ready_title: 'Fournisseur déjà authentifié', onboarding_oauth_provider_ready_body: 'Cette instance est configurée pour utiliser un fournisseur OAuth ({provider}) qui a été configuré via la CLI Hermes. Aucune clé API n\'est nécessaire ici — cliquez sur Continuer pour terminer la configuration.', onboarding_oauth_provider_not_ready_title: 'Fournisseur OAuth pas encore authentifié', onboarding_oauth_provider_not_ready_body: 'Cette instance est configurée pour utiliser {provider}, qui utilise OAuth plutôt qu\'une clé API. Exécutez hermes auth ou hermes model dans un terminal pour vous authentifier, puis rechargez l\'interface Web.', onboarding_oauth_switch_hint: 'Ou choisissez un autre fournisseur ci-dessous pour passer à une configuration par clé API :', oauth_login_codex: 'Se connecter avec Codex (ChatGPT)', oauth_codex_step1: 'Étape 1 : Visitez cette URL et entrez le code', oauth_codex_step2: 'Étape 2 : Entrez ce code sur la page', oauth_codex_polling: 'En attente d\'autorisation\u2026', oauth_codex_success: 'Connexion OAuth Codex réussie !', oauth_codex_error: 'Échec de la connexion OAuth', oauth_codex_expired: 'Code expiré, veuillez réessayer', onboarding_notice_workspace: 'Ces valeurs réutilisent les mêmes API de paramètres que l\'application normale.', onboarding_workspace_label: 'Espace de travail', onboarding_workspace_or_path: 'Ou entrez un chemin d\'espace de travail', onboarding_workspace_placeholder: '/home/vous/espace-de-travail', onboarding_provider_label: 'Mode de configuration', onboarding_quick_setup_badge: 'configuration rapide', provider_category_easy_start: 'Démarrage facile', provider_category_self_hosted: 'Open / auto-hébergé', provider_category_specialized: 'Spécialisé', onboarding_api_key_label: 'Clé API', onboarding_api_key_placeholder: 'Laissez vide pour conserver une clé enregistrée existante', onboarding_api_key_label_optional: 'Clé API (facultative)', onboarding_api_key_placeholder_optional: 'Laissez vide pour les serveurs sans clé', onboarding_api_key_help_keyless: 'La plupart des installations LM Studio / Ollama / vLLM fonctionnent sans clé — laissez ce champ vide si votre serveur ne nécessite pas d\'authentification. Utilisez le bouton Tester la connexion pour vérifier.', onboarding_api_key_help_prefix: 'Enregistré comme secret dans votre fichier .env Hermes en utilisant', onboarding_base_url_label: 'URL de base', onboarding_base_url_placeholder: 'https://votre-point-terminaison.example/v1', onboarding_base_url_help: 'Utilisez ceci pour les routeurs compatibles OpenAI, les serveurs auto-hébergés, LiteLLM, Ollama, LM Studio, vLLM ou des points de terminaison similaires.', onboarding_model_label: 'Modèle par défaut', onboarding_workspace_help: 'Choisissez le modèle qu\'Hermes doit utiliser pour les nouveaux chats une fois la configuration terminée.', onboarding_custom_model_placeholder: 'votre-nom-de-modèle', onboarding_custom_model_help: 'Pour les points de terminaison personnalisés, entrez l\'ID de modèle exact attendu par votre serveur.', onboarding_notice_password_enabled: 'Un mot de passe est déjà configuré. Entrez-en un nouveau uniquement si vous souhaitez le remplacer.', onboarding_notice_password_recommended: 'Facultatif mais recommandé si vous exposez l\'interface au-delà de localhost.', onboarding_password_label: 'Mot de passe (facultatif)', onboarding_password_placeholder: 'Laissez vide pour ignorer', onboarding_password_help: 'Les mots de passe sont stockés via l\'API des paramètres existants et hachés côté serveur.', onboarding_notice_finish: 'Vous pouvez rouvrir les Paramètres plus tard pour modifier tout cela.', onboarding_not_set: 'Non défini', onboarding_password_will_enable: 'Sera activé', onboarding_password_will_replace: 'Sera remplacé', onboarding_password_keep_existing: 'Conserver le mot de passe actuel', onboarding_password_remains_disabled: 'Restera désactivé', onboarding_password_skipped: 'Ignoré pour l\'instant', onboarding_finish_help: 'Terminer stocke onboarding_completed dans les paramètres et vous amène dans l\'application normale.', onboarding_error_choose_workspace: 'Choisissez un espace de travail avant de continuer.', onboarding_error_choose_model: 'Choisissez un modèle avant de continuer.', onboarding_error_provider_required: 'Choisissez un mode de configuration avant de continuer.', onboarding_error_base_url_required: 'L\'URL de base est requise pour les points de terminaison personnalisés.', onboarding_probe_test_button: 'Tester la connexion', onboarding_probe_probing: 'Test de la connexion\u2026', onboarding_probe_ok: 'Connecté. {n} modèle(s) disponible(s).', onboarding_probe_error_generic: 'Impossible d\'atteindre l\'URL de base configurée.', onboarding_probe_error_invalid_url: 'L\'URL de base doit commencer par http:// ou https://.', onboarding_probe_error_dns: 'Impossible de résoudre l\'hôte. Vérifiez l\'URL ou utilisez l\'adresse IP de l\'hôte.', onboarding_probe_error_connect_refused: 'Connexion refusée — le serveur peut ne pas être en cours d\'exécution sur cette adresse. Depuis Docker, essayez l\'IP de l\'hôte au lieu de localhost.', onboarding_probe_error_timeout: 'Le point de terminaison n\'a pas répondu à temps. Vérifiez que le serveur est en cours d\'exécution et que l\'URL est correcte.', onboarding_probe_error_http_4xx: 'Le point de terminaison a renvoyé une erreur client. Vérifiez l\'authentification et le chemin de l\'URL (se termine généralement par /v1).', onboarding_probe_error_http_5xx: 'Le point de terminaison a renvoyé une erreur serveur. Vérifiez les journaux du serveur LM Studio / Ollama.', onboarding_probe_error_parse: 'Le point de terminaison n\'a pas renvoyé de liste de modèles dans le format attendu. Vérifiez que l\'URL pointe vers la racine de l\'API compatible OpenAI.', onboarding_probe_error_unreachable: 'Impossible d\'atteindre l\'URL de base configurée.', onboarding_error_probe_failed: 'Impossible de valider l\'URL de base configurée.', onboarding_error_workspace_required: 'L\'espace de travail est requis.', onboarding_error_model_required: 'Le modèle est requis.', onboarding_complete: 'Configuration terminée', error_prefix: 'Erreur : ', default: 'par défaut', search: 'Rechercher', not_available: 'N/A', never: 'jamais', add: 'Ajouter', add_failed: 'Échec de l\'ajout : ', remove_failed: 'Échec de la suppression : ', switch_failed: 'Échec du changement : ', name_required: 'Le nom est requis', content_required: 'Le contenu est requis', view: 'Voir', dismiss: 'Ignorer', disable: 'Désactiver', cron_no_jobs: 'Aucune tâche planifiée trouvée.', cron_status_off: 'désactivé', cron_status_paused: 'en pause', cron_status_error: 'erreur', cron_status_active: 'actif', cron_status_running: 'en cours\u2026', cron_status_needs_attention: 'nécessite une attention', cron_attention_desc: 'Cette tâche récurrente n\'a pas de prochaine exécution. Le planificateur n\'a peut-être pas réussi à calculer sa prochaine exécution.', cron_attention_croniter_hint: 'Le package croniter est peut-être manquant dans l\'environnement d\'exécution de la passerelle. Redémarrez la passerelle avec le support cron, puis reprenez cette tâche.', cron_attention_resume: 'Reprendre et recalculer', cron_jobs_project: 'Tâches Cron', cron_attention_run_once: 'Exécuter une fois maintenant', cron_attention_copy_diagnostics: 'Copier les diagnostics', cron_diagnostics_copied: 'Diagnostics Cron copiés', cron_next: 'Prochaine', cron_last: 'Dernière', cron_run_now: 'Exécuter maintenant', cron_pause: 'Pause', cron_resume: 'Reprendre', cron_job_name_placeholder: 'Nom de la tâche', cron_schedule_placeholder: 'Planification', cron_prompt_placeholder: 'Invite', cron_last_output: 'Dernière sortie', cron_expand_prompt: 'Développer l\'invite', cron_collapse_prompt: 'Réduire l\'invite', cron_expand_output: 'Développer la sortie', cron_collapse_output: 'Réduire la sortie', cron_mode_agent: 'Agent', cron_mode_script: 'Script', cron_mode_label: 'Mode', cron_script_job_banner: 'Exécute un script selon un planning — la sortie standard est délivrée à la cible. Pas d\'agent, d\'invite ou de compétences.', cron_script_card_title: 'Script', cron_script_output: 'Sortie du script', cron_script_path_label: 'Chemin du script', cron_script_path_hint: 'Résolu sous ~/.hermes/scripts/ sauf chemin absolu. Modifiez le fichier script sur le serveur pour changer le comportement.', cron_script_badge_title: 'Tâche script (sans agent)', cron_workdir_label: 'Répertoire de travail', cron_view_full_output: 'Voir la sortie complète', cron_all_runs: 'Toutes les exécutions', cron_hide_runs: 'Masquer les exécutions', cron_no_runs_yet: '(pas encore d\'exécutions)', cron_schedule_required_example: 'La planification est requise (ex. "0 9 * * *" ou "every 1h")', cron_schedule_required: 'La planification est requise', cron_prompt_required: 'L\'invite est requise', cron_job_created: 'Tâche créée', cron_duplicate: 'Dupliquer', cron_duplicated: 'Tâche dupliquée (en pause)', cron_job_triggered: 'Tâche déclenchée', cron_job_paused: 'Tâche mise en pause', cron_job_resumed: 'Tâche reprise', cron_job_updated: 'Tâche mise à jour', cron_model_label: 'Remplacement du modèle', cron_model_hint: 'Remplace le modèle par défaut pour cette tâche.', cron_model_no_agent_hint: 'Les tâches sans agent exécutent le script configuré directement ; le modèle n\'est pas utilisé.', cron_model_use_default: 'Par défaut (utiliser le profil/système par défaut)', cron_delete_confirm_title: 'Supprimer la tâche cron', cron_delete_confirm_message: 'Cette action ne peut pas être annulée.', cron_job_deleted: 'Tâche supprimée', cron_completion_status: (name, status) => `Cron "${name}" ${status}`, status_failed: 'échoué', status_completed: 'terminé', todos_no_active: 'Aucune liste de tâches active dans cette session.', clear_conversation_title: 'Effacer la conversation', clear_conversation_message: 'Effacer tous les messages ? Cette action ne peut pas être annulée.', clear_failed: 'Échec de l\'effacement : ', skills_no_match: 'Aucune compétence correspondante.', skill_enabled: 'Activée', skill_disabled: 'Désactivée', skill_toggle_failed: 'Échec du basculement de la compétence : ', linked_files: 'Fichiers liés', skill_load_failed: 'Impossible de charger la compétence : ', skill_file_load_failed: 'Impossible de charger le fichier : ', skill_name_required: 'Le nom de la compétence est requis', skill_updated: 'Compétence mise à jour', skill_created: 'Compétence créée', skill_deleted: 'Compétence supprimée', skill_delete_confirm: 'Supprimer la compétence "{0}" ?', skills_empty_title: 'Sélectionnez une compétence', skills_empty_sub: 'Choisissez une compétence dans la barre latérale pour voir son contenu, ou créez-en une nouvelle.', skills_edit: 'Modifier', skills_delete: 'Supprimer', skills_back_to: 'Retour à {0}', tasks_empty_title: 'Sélectionnez une tâche planifiée', tasks_empty_sub: 'Choisissez une tâche dans la barre latérale pour voir ses détails et ses exécutions, ou créez-en une nouvelle.', workspaces_empty_title: 'Sélectionnez un espace', workspaces_empty_sub: 'Choisissez un espace dans la barre latérale pour voir ses fichiers et paramètres, ou ajoutez-en un nouveau.', profiles_empty_title: 'Sélectionnez un profil', profiles_empty_sub: 'Choisissez un profil d\'agent dans la barre latérale pour voir et modifier ses paramètres, ou créez-en un nouveau.', memory_notes_label: 'mémoire (notes)', memory_saved: 'Mémoire enregistrée', my_notes: 'Mes notes', user_profile: 'Profil utilisateur', external_notes_sources: 'Notes tierces', external_notes_empty: 'Aucune source de notes ou de connaissances MCP n\'est encore visible. Configurez Joplin, Obsidian, Notion, llm-wiki ou un autre serveur de notes pour l\'afficher ici.', external_notes_auto_recall_hint: 'Le rappel automatique de session est inchangé ; ce tiroir affiche uniquement les sources configurées et les outils de lecture/recherche disponibles.', external_notes_no_tools: 'Aucun outil de lecture/recherche n\'est actuellement visible pour cette source.', external_notes_tool_count: (count) => `${count} outil${Number(count)===1?'':'s'} de notes disponible${Number(count)===1?'':'s'}`, external_notes_configured_hint: 'Les noms d\'outils sont attendus de cette source configurée ; les schémas en direct apparaîtront lorsque l\'environnement d\'exécution de l\'interface Web les exposera.', external_notes_recent_ai: 'Récemment utilisé par l\'IA', external_notes_auto: 'auto', external_notes_recent_ai_reason: 'Rappel automatique', external_notes_search_placeholder: 'Rechercher des notes\u2026', external_notes_search_empty: 'Recherchez dans une source de notes configurée pour prévisualiser les notes ici.', source_active: 'actif', source_configured: 'configuré', no_notes_yet: 'Pas encore de notes.', no_profile_yet: 'Pas encore de profil.', agent_soul: 'Âme de l\'agent', no_soul_yet: 'Pas encore d\'âme définie.', workspace_choose_path: 'Choisir le chemin de l\'espace de travail', workspace_choose_path_meta: 'Ajouter un chemin validé et basculer cette conversation', workspace_manage: 'Gérer les espaces de travail', workspace_manage_meta: 'Ouvrir le panneau Espaces', workspace_use_title: 'Utiliser dans la session en cours', workspace_use: 'Utiliser', workspace_add_path_placeholder: 'Ajouter un chemin d\'espace de travail (ex. /home/utilisateur/mon-projet)', workspace_paths_validated_hint: 'Les chemins sont validés en tant que répertoires existants avant d\'être enregistrés.', workspace_drag_hint: 'Faites glisser pour réorganiser', workspace_reorder_failed: 'Échec de la réorganisation', workspace_added: 'Espace de travail ajouté', workspace_renamed: 'Espace de travail renommé', workspace_remove_confirm_title: 'Supprimer l\'espace de travail', workspace_remove_confirm_message: (path) => `Supprimer "${path}" ?`, workspace_removed: 'Espace de travail supprimé', workspace_switch_prompt_title: 'Changer d\'espace de travail', workspace_switch_prompt_message: 'Entrez un chemin d\'espace de travail absolu pour ajouter et basculer cette conversation vers celui-ci.', workspace_switch_prompt_confirm: 'Changer', workspace_switch_prompt_placeholder: '/Utilisateurs/vous/projet', workspace_not_added: 'L\'espace de travail n\'a pas été ajouté', workspace_already_saved: 'Espace de travail déjà enregistré — choisissez-le dans la liste', workspace_busy_switch: 'Impossible de changer d\'espace de travail pendant que l\'agent est en cours d\'exécution', discard_file_edits_title: 'Ignorer les modifications du fichier ?', discard_file_edits_message: 'Changer d\'espace de travail ignorera les modifications de fichiers non enregistrées dans l\'aperçu.', workspace_switched_to: (name) => `Passé à ${name}`, profiles_no_profiles: 'Aucun profil trouvé.', profile_api_keys_configured: 'Clés API configurées', profile_gateway_running: 'Passerelle en cours d\'exécution', profile_gateway_stopped: 'Passerelle arrêtée', profile_active: 'ACTIF', profile_no_configuration: 'Aucune configuration', profile_skill_count: (count) => `${count} compétence${count === 1 ? '' : 's'}`, profile_use: 'Utiliser', profile_switch_title: 'Basculer vers ce profil', profile_delete_title: 'Supprimer ce profil', profile_default_label: '(par défaut)', profile_name_placeholder: 'Nom du profil (minuscules, a-z 0-9 tirets)', profile_clone_label: 'Cloner la configuration du profil actif', profile_model_label: 'Modèle / fournisseur', profile_model_hint: 'Choisissez parmi les fournisseurs et modèles configurés pour ce nouveau profil.', profile_model_use_default: 'Utiliser la valeur par défaut du profil actif', profile_base_url_placeholder: 'URL de base (facultatif, ex. http://localhost:11434)', profile_api_key_placeholder: 'Clé API (facultatif)', manage_profiles: 'Gérer les profils', profiles_load_failed: 'Échec du chargement des profils', profile_switched_new_conversation: (name) => `Passé au profil : ${name} — nouvelle conversation démarrée`, profile_switched: (name) => `Passé au profil : ${name}`, profile_name_rule: 'Uniquement lettres minuscules, chiffres, tirets et underscores', profile_base_url_rule: 'L\'URL de base doit commencer par http:// ou https://', profile_created: (name) => `Profil créé : ${name}`, profile_delete_confirm_title: (name) => `Supprimer le profil "${name}" ?`, profile_delete_confirm_message: 'Toutes les sessions, configurations, compétences et mémoire de ce profil seront définitivement supprimées. Cette action ne peut pas être annulée.', profile_deleted: (name) => `Profil supprimé : ${name}`, active_conversation_none: 'Aucune conversation active sélectionnée.', active_conversation_meta: (title, count) => `${title} · ${count} message${count === 1 ? '' : 's'}`, settings_unsaved_changes: 'Vous avez des modifications non enregistrées.', sign_out_failed: 'Échec de la déconnexion : ', disable_auth_confirm_title: 'Désactiver la protection par mot de passe', disable_auth_confirm_message: 'Tout le monde pourra accéder à cette instance.', auth_disabled: 'Authentification désactivée — protection par mot de passe supprimée', disable_auth_failed: 'Échec de la désactivation de l\'authentification : ', current_password_label: 'Mot de passe actuel', current_password_placeholder: 'Entrer le mot de passe actuel\u2026', current_password_required: 'Le mot de passe actuel est requis pour modifier ou désactiver l\'authentification.', current_password_incorrect: 'Le mot de passe actuel est incorrect.', disable_auth_typed_confirm: 'Tapez DISABLE AUTH pour confirmer', auth_status_password: 'Authentification par mot de passe', auth_status_passkey_only: 'Uniquement passkey', auth_status_unauthenticated: 'Non authentifié', auth_warning_badge: 'Auth désactivée', auth_disabled_warning_message: 'Cette instance est accessible sans authentification.', auth_acknowledged_label: 'J\'ai pris connaissance de ce risque ; afficher un avertissement de navigation moins urgent.', auth_ack_save_failed: 'Échec de la mise à jour de l\'accusé de réception : ', bg_error_single: (title) => `"${title}" a rencontré une erreur`, bg_error_multi: (count) => `${count} sessions ont rencontré une erreur`, skill_name: 'Nom', skill_category: 'Catégorie', skill_category_placeholder: 'Facultatif, ex. devops', skill_content: 'Contenu SKILL.md', skill_content_placeholder: 'Frontmatter YAML + corps Markdown', skill_rename_not_supported: 'Le renommage d\'une compétence n\'est pas pris en charge. Créez une nouvelle compétence et supprimez l\'ancienne pour la renommer.', skill_metadata: 'Métadonnées', cron_name_label: 'Nom', cron_name_placeholder: 'Facultatif', cron_schedule_label: 'Planification', cron_schedule_preset_label: 'Préréglage', cron_schedule_preset_hourly: 'Toutes les heures', cron_schedule_preset_daily: 'Quotidien', cron_schedule_preset_weekdays: 'Jours ouvrés', cron_schedule_preset_weekly: 'Hebdomadaire', cron_schedule_preset_monthly: 'Mensuel', cron_schedule_preset_custom: 'Personnalisé', cron_schedule_hint: "Utilisez 'every 1h' ou une expression cron pour les tâches récurrentes. Les durées simples comme '30m' s'exécutent une fois.", cron_schedule_once_warning: "Les formes de durée comme '30m' s'exécutent une fois et sont supprimées après l'exécution. Utilisez 'every 30m' pour conserver une tâche récurrente.", cron_prompt_label: 'Invite', cron_deliver_label: 'Délivrer la sortie à', cron_deliver_local: 'Local (enregistrer la sortie uniquement)', cron_deliver_custom: 'Cible de livraison personnalisée', cron_profile_label: 'Profil', cron_profile_server_default: 'serveur par défaut', cron_profile_server_default_hint: 'Utilise le profil par défaut du serveur WebUI au moment de l\'exécution. Les tâches existantes sans profil conservent ce comportement hérité.', cron_toast_notifications_label: 'Notifications de fin', cron_toast_notifications_hint: 'Afficher une notification toast lorsque ce cron se termine. Le badge Tâches et le marqueur de nouvelle exécution se mettent toujours à jour lorsque cette option est désactivée.', cron_toast_notifications_enabled: 'Activé', cron_toast_notifications_disabled: 'Désactivé', cron_skills_label: 'Compétences', cron_skills_placeholder: 'Ajouter des compétences (facultatif)\u2026', cron_skills_edit_hint: 'La liste des compétences n\'est pas modifiable après la création.', workspace_name_label: 'Nom', workspace_name_placeholder: 'Nom convivial facultatif', workspace_path_label: 'Chemin', workspace_path_required: 'Le chemin est requis', workspace_path_readonly: 'Le chemin ne peut pas être modifié. Renommage uniquement.', workspace_new_title: 'Nouvel espace', profile_name_label: 'Nom', profile_base_url_label: 'URL de base', profile_api_key_label: 'Clé API', cmd_yolo: 'Basculer le mode YOLO (ignorer les approbations)', yolo_no_session: 'Aucune session active', yolo_enabled: '⚡ Mode YOLO ACTIVÉ — approbations ignorées cette session', yolo_disabled: 'Mode YOLO désactivé', yolo_pill_label: 'YOLO', yolo_pill_title_active: 'Mode YOLO actif — cliquez pour désactiver', approval_skip_all: '⚡ Ignorer tout cette session', approval_skip_all_title: 'Ignorer toutes les demandes d\'approbation pour cette session', composer_send: 'Envoyer le message', composer_queue: 'Mettre en file d\'attente', composer_interrupt: 'Interrompre et envoyer', composer_steer: 'Piloter la réponse en cours', composer_stop: 'Arrêter la génération', composer_disabled_clarify: 'Répondre à la demande de clarification', composer_disabled_compression: 'En attente de la fin de la compression', composer_compression_will_queue: 'Saisissez un message — il sera mis en file d\'attente et envoyé après la compression', composer_disabled_empty: 'Saisissez un message à envoyer', composer_mobile_workspace: 'Espace de travail', composer_mobile_model: 'Modèle', composer_mobile_quota: 'Quota', composer_mobile_reasoning: 'Raisonnement', composer_mobile_context: 'Contexte', media_audio_label: 'Audio', media_svg_label: 'Diagramme', media_video_label: 'Vidéo', media_download: 'Télécharger', csv_loading: 'Chargement du CSV', csv_too_large: 'Fichier CSV trop volumineux pour un rendu en ligne', csv_no_data: 'Le fichier CSV ne contient pas assez de données pour être affiché sous forme de tableau', csv_error: 'Échec du chargement du fichier CSV', csv_header_note: 'La première ligne est affichée comme en-tête du tableau', excalidraw_loading: 'Chargement du diagramme', excalidraw_too_large: 'Fichier Excalidraw trop volumineux pour un rendu en ligne', excalidraw_invalid: 'Format de fichier Excalidraw invalide', excalidraw_error: 'Échec du chargement du fichier Excalidraw', excalidraw_label: 'Diagramme', excalidraw_download: 'Télécharger', excalidraw_empty: 'Diagramme vide', excalidraw_render_error: 'Échec du rendu du diagramme', excalidraw_simplified: 'Aperçu SVG simplifié — pas identique au pixel près au canevas Excalidraw', checkpoint_title: 'Points de contrôle', checkpoint_empty: 'Aucun point de contrôle trouvé pour cet espace de travail.', checkpoint_loading: 'Chargement des points de contrôle\u2026', checkpoint_error: 'Échec du chargement des points de contrôle', checkpoint_date: 'Date', checkpoint_message: 'Message', checkpoint_files: 'Fichiers', checkpoint_view_diff: 'Voir les différences', checkpoint_restore: 'Restaurer', checkpoint_restore_confirm_title: 'Restaurer le point de contrôle ?', checkpoint_restore_confirm_message: (ckpt) => `Restaurer l'espace de travail au point de contrôle "${ckpt}" ? Cela écrasera les fichiers avec les versions sauvegardées. Les fichiers ajoutés après ce point de contrôle ne seront pas supprimés.`, checkpoint_restored: 'Point de contrôle restauré', checkpoint_diff_title: 'Modifications dans le point de contrôle', checkpoint_diff_no_changes: 'Aucune différence trouvée entre ce point de contrôle et l\'espace de travail actuel.', checkpoint_diff_files_changed: (n) => `${n} fichier${n === 1 ? '' : 's'} modifié${n === 1 ? '' : 's'}`, outline_title: 'Plan', outline_empty: 'Pas encore de questions.', outline_loading: 'Chargement\u2026', }, tr: { offline_title: 'Bağlantı kesildi', offline_browser_detail: 'Tarayıcınız bu cihazın çevrimdışı olduğunu bildiriyor.', offline_network_detail: 'Hermes\'e şu anda bu tarayıcıdan ulaşılamıyor.', offline_autorefresh: 'Hermes\'e tekrar ulaşılabilir olduğunda bu sayfayı otomatik olarak yenileyeceğim.', offline_check_now: 'Şimdi kontrol et', offline_checking: 'Kontrol ediliyor\u2026', offline_stream_waiting: 'Bağlantı kesildi. Yenilenmesi bekleniyor\u2026', _lang: 'tr', _label: 'Türkçe', _speech: 'tr-TR', // boot.js cancelling: 'İptal ediliyor\u2026', cancel_failed: 'İptal başarısız oldu:', mic_denied: 'Mikrofon erişimi reddedildi. Tarayıcı izinlerini kontrol edin.', mic_insecure_origin: 'Voice input needs a secure connection. Open Hermes over HTTPS or from localhost to use the microphone.', // TODO: translate mic_no_speech: 'Konuşma algılanmadı. Tekrar deneyin.', mic_network: 'Konuşma tanıma kullanılamıyor.', mic_error: 'Ses girişi hatası:', voice_dictate: 'Dikte', voice_dictate_active: 'Dikteyi durdur', voice_recording_active: 'Kaydı durdur', voice_mode_toggle: 'Ses modu', voice_mode_toggle_active: 'Ses modundan çık', voice_listening: 'Dinleniyor\u2026', voice_speaking: 'Konuşuyor\u2026', voice_thinking: 'Düşünüyor\u2026', voice_error: 'Ses bu tarayıcıda desteklenmiyor', voice_mode_active: 'Ses modu açık', voice_mode_off: 'Ses modu kapalı', session_imported: 'Oturum içe aktarıldı', import_failed: 'İçe aktarma başarısız oldu:', import_invalid_json: 'Geçersiz JSON', image_pasted: 'Yapıştırılan resim:', text_pasted: 'Yapıştırılan metin şu adla eklendi: ', // messages.js edit_message: 'Mesajı düzenle', regenerate: 'Yanıtı yeniden oluştur', copy: 'Kopyala', copied: 'Kopyalandı!', copy_failed: 'Kopyalama başarısız oldu', selected_text_reply: 'Seçimle yanıtla', selected_text_reply_title: 'Seçilen sohbet metnini alıntılanan bağlam olarak ekle', selected_text_reply_appended: 'Seçilen metin besteciye eklendi', saved_prompts_empty: 'Henüz kaydedilmiş istem yok.', saved_prompts_save_current: 'Mevcut girişi istem olarak kaydet', saved_prompts_saved: 'İstem kaydedildi', saved_prompts_delete: 'İstemi sil', saved_prompts_empty_input: 'Önce kaydedilecek bir istem girin', context_block_name_default: 'Bağlam', context_block_flush_aria: 'Bağlam blokları gönderildiğinde dahil edilecek', context_block_rename_hint: 'Yeniden adlandırmak için tıklayın veya Enter’a basın', context_block_rename_aria: 'Bağlam bloğunu yeniden adlandır', context_block_remove: 'Bağlam bloğunu kaldır', diff_loading: 'Fark yükleniyor', diff_error: 'Yama dosyası yüklenemedi', diff_too_large: 'Yama dosyası satır içi görüntülenemeyecek kadar büyük', tree_view: 'Ağaç', raw_view: 'Çiğ', parse_failed_note: 'ayrıştırma başarısız oldu', you: 'Sen', mcp_servers_title: 'MCP Sunucuları', mcp_servers_desc: 'config.yaml dosyasında yapılandırılmış MCP sunucularını görüntüleyin.', mcp_no_servers: 'Hiçbir MCP sunucusu yapılandırılmadı.', mcp_add_server: '+ Sunucu Ekle', mcp_field_name: 'Sunucu Adı', mcp_transport_label: 'Taşıma Türü', mcp_field_command: 'Emretmek', mcp_field_args: 'Bağımsız Değişkenler (virgülle ayrılmış)', mcp_field_url: 'URL\'si', mcp_field_timeout: 'Zaman aşımı (saniye)', mcp_save: 'Kaydetmek', mcp_cancel: 'İptal etmek', mcp_name_required: 'Sunucu adı gerekli.', mcp_url_required: 'HTTP aktarımı için URL gereklidir.', mcp_command_required: 'Stdio aktarımı için komut gereklidir.', mcp_saved: 'MCP sunucusu kaydedildi.', mcp_save_failed: 'MCP sunucusu kaydedilemedi.', mcp_delete_confirm_title: 'MCP Sunucusunu Sil', mcp_delete_confirm_message: '"{0}" MCP sunucusu silinsin mi? Bu eylem geri alınamaz.', mcp_deleted: 'MCP sunucusu silindi.', mcp_delete_failed: 'MCP sunucusu silinemedi.', mcp_load_failed: 'MCP sunucuları yüklenemedi.', mcp_restart_hint: 'Sunucu değişiklikleri şimdilik burada salt okunurdur. Değişikliklerin etkili olması için config.yaml dosyasını düzenleyin ve Hermes\'i yeniden başlatın.', mcp_enable_server: 'Bu MCP sunucusunu etkinleştir', mcp_disable_server: 'Bu MCP sunucusunu devre dışı bırak', mcp_enabled_toast: (name) => `"${name}" MCP sunucusu etkinleştirildi.`, mcp_disabled_toast: (name) => `"${name}" MCP sunucusu devre dışı bırakıldı.`, mcp_toggle_failed: 'MCP sunucusu güncellenemedi.', open_in_vscode: 'VS Code\'da aç', open_in_vscode_failed: 'VS Code\'da açılamadı: ', settings_label_ignore_agent_updates: 'Agent güncellemelerini yoksay', settings_desc_ignore_agent_updates: 'WebUI güncelleme denetimlerini açık tutun, ancak Agent güncelleme bildirimlerini gizleyin ve Agent güncelleme getirme işlemlerini atlayın.', mcp_toggle_followup: 'Etkinleştirme/devre dışı bırakma kontrolleri, MCP yeniden yükleme semantiği açıkça ortaya çıkana kadar kasıtlı olarak ertelenir.', mcp_status_active: 'Aktif', mcp_status_configured: 'Yapılandırılmış', mcp_status_disabled: 'Engelli', mcp_status_invalid_config: 'Geçersiz yapılandırma', mcp_status_unknown: 'Bilinmiyor', mcp_tool_count: '{0} araç', mcp_enabled_yes: 'Etkinleştirilmiş', mcp_enabled_no: 'Engelli', mcp_tools_title: 'MCP Araçları', mcp_tools_desc: 'Aktif MCP sunucularında bilinen araçları arayın.', mcp_tools_search_placeholder: 'Araçlarda ada, sunucuya veya açıklamaya göre arama yapın\u2026', mcp_tools_no_tools: 'Etkin çalışma zamanı envanterinde hiçbir MCP aracı mevcut değil.', mcp_tools_no_matches: 'Aramanızla eşleşen MCP aracı yok.', mcp_tools_load_failed: 'MCP araçları yüklenemedi.', mcp_tools_schema_empty: 'Şema parametresi yok.', mcp_tools_runtime_note: 'Araç envanteri yalnızca önceden bilinen etkin MCP çalışma zamanı verilerini kullanır; WebUI sunucuları başlatmaz veya sorgulamaz.', mcp_tools_summary_no_matches: (query,total) => `“${query}” ile eşleşen MCP aracı yok (toplam ${total} MCP araç).`, mcp_tools_summary_none: 'Gösterilecek MCP aracı yok.', mcp_tools_summary_matching: (query) => `"${query}" ile eşleşen`, mcp_tools_summary_total_note: (total) => `(${total} toplam MCP araç)`, mcp_tools_summary_showing: (start,end,filtered,searchNote,totalNote,page,pages) => `${start}-${end} / ${filtered} MCPtools${searchNote}${totalNote} gösteriliyor. Sayfa ${page} / ${pages}.`, mcp_tools_page_size_prefix: 'Göstermek', mcp_tools_page_size_suffix: 'sayfa başına', mcp_tools_per_page_aria: 'Sayfa başına MCP araçları', mcp_tools_inactive_configured_servers: (servers) => `Yapılandırılmış ancak bu WebUI çalışma zamanında etkin değil: ${servers}.`, mcp_tools_pagination_label: 'MCP araçları sayfalandırması', mcp_tools_previous_page: '‹ Önceki', mcp_tools_previous_page_aria: 'Önceki MCP araçları sayfası', mcp_tools_next_page: 'Sonraki >', mcp_tools_next_page_aria: 'Sonraki MCP araçları sayfası', thinking: 'Düşünme', expand_all: 'Tümünü genişlet', collapse_all: 'Tümünü daralt', edit_failed: 'Düzenleme başarısız oldu:', regen_failed: 'Yeniden oluşturma başarısız oldu:', reconnect_active: 'Halen bir yanıt oluşturuluyor. Hazır olduğunuzda yeniden yüklensin mi?', reconnect_finished: 'En son ayrıldığınızda bir yanıt sürüyordu. Mesajlar güncellenmiş olabilir.', // approval card approval_heading: 'Onay gerekli', approval_desc_prefix: 'Tehlikeli komut algılandı', approval_btn_once: 'Bir kez izin ver', approval_btn_once_title: 'Bu tek komuta izin ver (Enter)', approval_btn_session: 'Oturuma izin ver', approval_btn_session_title: 'Bu konuşma oturumuna izin ver', approval_btn_always: 'Her zaman izin ver', approval_btn_always_title: 'Bu komut düzenine her zaman izin ver', approval_btn_deny: 'Reddetmek', approval_btn_deny_title: 'Reddet — bu komutu çalıştırma', approval_responding: 'Yanıt veriliyor\u2026', approval_gateway_unsupported: 'Approvals require a newer gateway. Upgrade the connected Hermes gateway to enable this.', approval_gateway_unsupported_label: 'Onaylar desteklenmiyor', clarify_heading: 'Açıklama gerekli', clarify_hint: 'Bir seçim yapın veya kendi cevabınızı aşağıya yazın.', clarify_other: 'Diğer', clarify_send: 'Göndermek', clarify_input_placeholder: 'Yanıtınızı yazın\u2026', clarify_responding: 'Yanıt veriliyor\u2026', session_attention_approval: (n) => n === 1 ? 'Onay' : `${n} onay`, session_attention_clarify: (n) => n === 1 ? 'Soru' : `${n} soru`, session_attention_generic: (n) => n === 1 ? 'Dikkat' : `${n} öğe`, session_attention_approval_title: 'İzin kararı bekleniyor', session_attention_clarify_title: 'Yanıtınız bekleniyor', session_attention_generic_title: 'Kullanıcı eylemi bekleniyor', untitled: 'İsimsiz', n_messages: (n) => `${n}개 메시지`, load_older_messages: '↑ Eski mesajları yüklemek için yukarı kaydırın veya tıklayın', session_jump_start: 'Başlangıç', session_jump_start_label: 'Oturumun başlangıcına atla', session_jump_end: 'Son', session_jump_end_label: 'Oturumun sonuna atla', session_new_message: 'Yeni mesaj', session_new_message_label: 'Yeni mesaj mevcut, sona atla', jump_to_question: 'yanıta', jump_to_question_label: 'Bu yanıtın başına git', queued_label: 'Yanıttan sonra gönderilir', queued_count: (n) => n === 1 ? '1 queued' : `${n} queued`, queued_cancel: 'Sıraya alınmış mesajı iptal et', model_unavailable: '(mevcut değil)', model_unavailable_title: 'Bu model artık mevcut sağlayıcı listenizde değil', provider_mismatch_warning: (m,p) => `"${m}" yapılandırılmış sağlayıcınızla (${p}) çalışmayabilir. Yine de gönderin veya geçiş yapmak için terminalinizde \`hermes model\` komutunu çalıştırın.`, provider_mismatch_label: 'Sağlayıcı uyumsuzluğu', gateway_auth_label: 'Gateway kimlik doğrulaması başarısız', gateway_start: 'Start', gateway_stop: 'Stop', gateway_restart: 'Restart', gateway_start_success: 'Gateway start completed.', gateway_stop_success: 'Gateway stop completed.', gateway_restart_success: 'Gateway restart completed.', gateway_start_failed: 'Gateway start failed', gateway_stop_failed: 'Gateway stop failed', gateway_restart_failed: 'Gateway restart failed', gateway_running: 'Running', gateway_session: 'session', gateway_sessions: 'sessions', gateway_status_load_failed: 'Failed to load gateway status', model_not_found_label: 'Model bulunamadı', model_custom_label: 'Özel model kimliği', model_custom_placeholder: 'örneğin openai/gpt-5.4', model_show_all_models: '{0} modelin tümünü göster', model_search_placeholder: 'Modelleri ara\u2026', session_toolsets: 'Oturum araç setleri', session_toolsets_desc: 'Etkin profil varsayılanlarını kullanın veya bu oturum için özel araç seti listesi seçin', session_toolsets_global: 'Etkin profil varsayılanları', session_toolsets_profile_defaults: 'Etkin profil varsayılanları', session_toolsets_custom: 'Özel geçersiz kılma', session_toolsets_use_profile_defaults: 'Etkin profil varsayılanlarını kullan', session_toolsets_configured_servers: 'Yapılandırılmış MCP sunucuları', session_toolsets_loading_servers: 'Yapılandırılmış sunucular yükleniyor...', session_toolsets_no_configured_servers: 'Yapılandırılmış MCP sunucusu yok', session_toolsets_placeholder: 'araç1, araç2, \u2026', session_toolsets_apply: 'Uygula', session_toolsets_clear: 'Varsayılanları kullan', session_toolsets_applied: 'Araç setleri güncellendi', session_toolsets_cleared: 'Etkin profil varsayılanları kullanılıyor', session_toolsets_failed: 'Araç setleri güncellenemedi: ', model_search_no_results: 'Hiçbir model bulunamadı', model_group_configured: 'Yapılandırılmış', ws_search_placeholder: 'Çalışma alanlarını arayın\u2026', ws_no_results: 'Çalışma alanı bulunamadı', workspace_new_worktree_conversation: 'Worktree\'de yeni konuşma', workspace_new_worktree_conversation_meta: 'Bu çalışma alanı için yalıtılmış bir git çalışma ağacı oluşturun.', workspace_worktree_created: 'Worktree görüşmesi oluşturuldu', workspace_worktree_failed: 'Çalışma ağacı oluşturma işlemi başarısız oldu:', session_worktree_badge: 'Çalışma Ağacı', model_scope_advisory: 'Bir sonraki mesajınızdan itibaren bu görüşmeye uygulanır.', model_scope_toast: 'Bir sonraki mesajınızdan itibaren bu görüşmeye uygulanır.', // commands.js cmd_clear: 'Konuşma mesajlarını temizle', cmd_help: 'Show available slash commands', cmd_compress: 'Konuşma içeriğini manuel olarak sıkıştırın (kullanım: /compress [konuya odaklan])', ctx_compress_hint: 'Yer açmak için bağlamı sıkıştırın →', ctx_compress_action: '⚠ Şimdi serbest bağlama sıkıştırın', cmd_compact_alias: '/compress için eski takma ad', cmd_model: 'Modeli değiştir (ör. /model gpt-4o)', cmd_workspace: 'Çalışma alanını ada göre değiştir', cmd_terminal: 'Çalışma alanı terminalini açın', cmd_new: 'Yeni bir sohbet oturumu başlatın', cmd_usage: 'Token kullanımı ekranını aç/kapat', cmd_theme: 'Görünümü değiştir (tema: system/dark/light, skin: default/ares/mono/graphite/slate/poseidon/sisyphus/charizard/sienna/catppuccin/nous/geist-contrast/zeus/verdigris)', cmd_personality: 'Temsilci kişiliğini değiştir', cmd_skills: 'Mevcut Hermes becerilerini listele', cmd_use: 'Sonraki mesaj için bir beceriyi zorla', available_commands: 'Mevcut komutlar:', type_slash: 'Komutları görmek için / yazın', conversation_cleared: 'Görüşme temizlendi', command_label: 'Komut', context_compaction_label: 'Bağlam sıkıştırma', retrieval_context_label: 'Dizine alınmış bağlam', retrieval_context_preview: 'Daha önceki mesajlar depolanır ve bağlam araçlarıyla alınabilir', preserved_task_list_label: 'Korunmuş görev listesi', reference_only_label: 'Yalnızca referans', model_usage: 'Kullanım: /model ', no_model_match: 'Eşleşen model yok: "', model_did_you_mean: (m) => ` — şunu mu demek istediniz: "${m}"?`, switched_to: 'Şuraya geçildi:', workspace_usage: 'Kullanım: /workspace ', no_workspace_match: 'Eşleşen çalışma alanı yok: "', switched_workspace: 'Çalışma alanına geçildi:', workspace_switch_failed: 'Çalışma alanı anahtarı başarısız oldu:', new_session: 'Yeni oturum oluşturuldu', new_session_creating: 'Yeni görüşme oluşturuluyor\u2026', compressing: 'Bağlam sıkıştırması isteniyor...', compress_running_label: 'Sıkıştırma', compress_complete_label: 'Sıkıştırma tamamlandı', auto_compress_label: 'Otomatik sıkıştırma', compress_failed_label: 'Sıkıştırma başarısız oldu', focus_label: 'Odak', token_usage_on: 'Jeton kullanımı açık', token_usage_off: 'Jeton kullanımı kapalı', usage_cache_hit_detail: 'Önbellek: {0}% isabet ({1} okuma / {2} yazma)', usage_cached_percent: '{0}% önbelleğe alındı', theme_usage: 'Kullanım: /theme ', theme_set: 'Tema:', no_active_session: 'Aktif oturum yok', cmd_queue: 'Bir sonraki dönüş için bir mesajı sıraya koy', cmd_goal: 'Kalıcı bir hedef belirleyin veya inceleyin', goal_evaluating_progress: 'Hedef ilerlemesi değerlendiriliyor\u2026', goal_working_toward: 'Hedefe doğru çalışmak\u2026', goal_continuing_toast: 'Hedefe doğru devam\u2026', goal_status_none: 'Aktif hedef yok. /goal ile bir tane ayarlayın.', goal_status_active: (turns, max_turns, goal) => `⊙ Hedef (aktif, ${turns}/${max_turns} tur): ${goal}`, goal_status_paused: (turns, max_turns, reason, goal) => `⏸ Hedef (duraklatıldı, ${turns}/${max_turns}${reason ? `, ${reason}` : ''}): ${goal}`, goal_status_done: (turns, max_turns, goal) => `✓ Hedef tamamlandı (${turns}/${max_turns}): ${goal}`, goal_set: (turns, goal) => `⊙ Hedef belirlendi (${turns}-dönüş bütçesi): ${goal}`, goal_paused: (goal) => `⏸ Hedef duraklatıldı: ${goal}`, goal_resumed: (goal) => `▶ Hedef devam ettirildi: ${goal}`, goal_cleared: 'Hedef temizlendi.', goal_no_goal: 'Aktif hedef yok.', goal_achieved: (reason) => `✓ Hedefe ulaşıldı: ${reason}`, goal_paused_budget_exhausted: (turns, max_turns) => `⏸ Hedef duraklatıldı — ${turns}/${max_turns} tur kullanıldı. Devam etmek için /goal devamını, durdurmak için /goal clear komutunu kullanın.`, goal_continuing: (turns, max_turns, reason) => `↻ Hedefe doğru devam ediyoruz (${turns}/${max_turns}): ${reason}`, cmd_interrupt: 'Mevcut dönüşü iptal et ve yeni bir mesaj gönder', cmd_steer: 'Temsilciyi kesintiye uğratmadan dönüş ortası düzeltmesi enjekte edin', cmd_queue_no_msg: 'Kullanım: /queue ', cmd_queue_not_busy: 'Etkin görev yok; yalnızca normal şekilde gönderin', cmd_queue_confirm: 'İleti sıraya alındı', cmd_interrupt_no_msg: 'Kullanım: /interrupt ', cmd_interrupt_confirm: 'Kesintiye uğradı — yeni mesaj gönderilir', cmd_steer_no_msg: 'Kullanım: /steer ', cmd_steer_fallback: 'Yönlendirme kullanılamıyor — taslak geri yüklendi', cmd_steer_delivered: 'Yönlendirme teslim edildi — temsilci bunu bir sonraki takım sonucunda görecek', steer_leftover_queued: 'Direksiyon bir sonraki dönüş için kuyruğa alındı', busy_steer_fallback: 'Yönlendirme kullanılamıyor — taslak geri yüklendi', steer_fail_no_cached_agent: 'No agent cached for this session — try refreshing', steer_fail_agent_lacks_steer: 'This agent version does not support steer', steer_fail_session_not_found: 'Session not found — it may have expired', steer_fail_not_running: 'Agent is not currently running', steer_fail_stream_dead: 'The agent stream has ended', steer_fail_steer_error: 'Steer delivery failed — the agent may have finished', steer_fail_network_error: 'Network error — check your connection', steer_fail_unknown: 'Steer unavailable', steer_recovery_retry: 'Retry', steer_recovery_dismiss: 'Dismiss', busy_interrupt_confirm: 'Kesintiye uğradı — yeni mesaj gönderilir', settings_label_default_message_mode: 'Varsayılan mesaj modu', settings_desc_default_message_mode: 'Aracı çalışırken bir mesaj gönderdiğinizde ne olacağını kontrol eder. Sıra bekler; Interrupt iptal eder ve yeniden başlar; Steer, dönüşün ortasında kesintiye uğramadan bir düzeltme enjekte eder. Steer kullanılamıyorsa taslak geri yüklenir, böylece sonraki adımı seçebilirsiniz.', settings_label_fade_text_effect: 'Metin efektini soldur', settings_desc_fade_text_effect: 'Asistan yanıt verirken yeni aktarılan sözcüklerin geçişini sağlayın. OpenWebUI\'ye benzer; Maksimum performans için varsayılan olarak kapalıdır.', settings_label_max_tokens: 'Maksimum çıktı belirteci', settings_desc_max_tokens: 'Yeni akış yanıtlarının uzunluğunu sınırlar. Etkin profilin yedek değerini kullanmak için boş bırakın.', settings_placeholder_max_tokens_none: 'Geçersiz kılma yok', settings_placeholder_max_tokens_fallback: 'Geçersiz kılma yok (yedek: {0})', settings_default_message_mode_queue: 'Sıra takibi', settings_default_message_mode_interrupt: 'Mevcut dönüşü kes', settings_default_message_mode_steer: 'Yönlendirme (dönüş ortası düzeltme)', settings_label_busy_placeholder_hint: 'Show busy placeholder hint', settings_desc_busy_placeholder_hint: 'Shows the composer placeholder with the current busy action while the session is running and the draft is empty.', composer_placeholder_busy_queue: 'Enter = queue | /interrupt | /background | /steer', composer_placeholder_busy_interrupt: 'Enter = interrupt | /queue | /background | /steer', composer_placeholder_busy_steer: 'Enter = steer | /queue | /background | /interrupt', slash_skill_badge: 'Yetenek', slash_skill_desc: 'Bu beceriyi çağır', cmd_stop: 'Mevcut yanıtı durdur', cmd_title: 'Oturum başlığını alın veya ayarlayın', cmd_retry: 'Son mesajı tekrar gönder', cmd_undo: 'Son değişimi kaldır', cmd_btw: 'Bir yan soru sorun (geçici)', cmd_btw_usage: '/btw — oturum bağlamını kullanarak bir yan soru sorun', cmd_background: 'Arka planda bir istem çalıştır', cmd_background_usage: '/background — engellemeden paralel olarak çalıştır', btw_asking: 'Yan soruyu sormak...', btw_label: 'Yan soru – tarihte değil', btw_done: 'Yan soru cevaplandı', btw_no_answer: 'Cevap alınmadı.', btw_failed: 'Yan soru başarısız oldu:', bg_running: 'Arka planda çalışıyor...', bg_complete: 'Arka plan görevi tamamlandı', bg_label: 'Arka plan sonucu:', bg_no_answer: '(cevap yok)', bg_failed: 'Arka plan görevi başarısız oldu:', undo_exchange: 'Son değişimi geri al', cmd_status: 'Oturum bilgilerini göster', cmd_voice: 'Mikrofon girişini değiştir', stream_stopped: 'Yanıt durduruldu.', no_active_task: 'Durdurulacak etkin görev yok.', cancel_unavailable: 'İptal kullanılamıyor.', retry_failed: 'Yeniden deneme başarısız oldu:', undo_failed: 'Geri alma başarısız oldu:', undid_n_messages: 'Kaldırıldı', undid_messages_suffix: 'mesaj(lar).', status_heading: 'Oturum Durumu', status_session_id: 'Oturum Kimliği', status_title: 'Başlık', status_model: 'Modeli', status_provider: 'sağlayıcı', status_workspace: 'Çalışma alanı', status_personality: 'Kişilik', status_messages: 'Mesajlar', status_agent_running: 'Aracı çalışıyor', status_profile: 'Profil', status_hermes_home: 'Hermes\'in evi', status_started: 'Başlatıldı', status_tokens: 'Jetonlar', status_updated: 'Güncellendi', status_ephemeral: 'Geçici anlık görüntü — transkript geçmişine kaydedilmez.', status_no_tokens: 'Hiç jeton kullanılmadı', status_unknown: 'Bilinmiyor', status_yes: 'Evet', status_no: 'HAYIR', status_load_failed: 'Durum yüklenemedi:', title_current: 'Mevcut başlık', title_change_hint: 'Yeniden adlandırmak için `/title ` kullanın.', title_set: 'Başlık şu şekilde ayarlandı:', cmd_webui_only_session: 'Bu komut CLI\'den içe aktarılan oturumlar için kullanılamaz.', cmd_voice_use_mic: 'Bestecideki mikrofon düğmesine tıklayın.', usage_heading: 'Jeton Kullanımı', usage_default_model: 'varsayılan', usage_unknown: 'bilinmiyor', usage_input_tokens: 'Giriş jetonları', usage_output_tokens: 'Çıkış jetonları', usage_total: 'Toplam jeton', usage_estimated_cost: 'Tahmini maliyet', usage_settings_tip: 'Not: Maliyet tahminleri yaklaşık değerlerdir.', usage_load_failed: 'Kullanım yüklenemedi:', usage_personality_none: 'hiçbiri', no_personalities: 'Hiç kişilik bulunamadı (onları ~/.hermes/personalities/ dosyasına ekleyin)', available_personalities: 'Mevcut kişilikler:', personality_switch_hint: 'Geçiş yapmak için `/kişilik ` kullanın veya temizlemek için `/kişilik yok` kullanın.', personalities_load_failed: 'Kişilikler yüklenemedi', personality_cleared: 'Kişilik temizlendi', personality_set: 'Kişilik:', failed_colon: 'Arızalı:', // ui.js no_workspace: 'Çalışma alanı yok', terminal_open_title: 'Çalışma alanı terminalini aç', terminal_no_workspace_title: 'Terminali açmak için bir çalışma alanı seçin', terminal_title: 'terminal', terminal_clear: 'Temizle', terminal_copy_output: 'Çıktıyı kopyala', terminal_restart: 'Tekrar başlat', terminal_collapse: 'Yıkılmak', terminal_expand: 'Genişletmek', terminal_close: 'Kapalı', terminal_input_placeholder: 'Bir komut çalıştır...', terminal_start_failed: 'Terminal başlatma başarısız oldu:', terminal_input_failed: 'Terminal girişi başarısız oldu:', terminal_copy_failed: 'Kopyalama başarısız oldu:', terminal_error: 'Terminal hatası', terminal_remote_backend_unsupported: 'Gömülü terminal yalnızca yerel terminal arka uçlarında desteklenir.', workspace_empty_no_path: 'Çalışma alanı seçilmedi. Dosyalara göz atmak için Ayarlar \u2192 Çalışma Alanı\'nda bir çalışma alanı ayarlayın.', workspace_empty_dir: 'Bu çalışma alanı boş.', workspace_show_hidden_files: 'Gizli dosyaları göster', workspace_show_hidden_files_desc: 'Dosya ağacına .DS_Store, .git, node_modules ve diğer gizli / sistem dosyalarını ekleyin.', workspace_hidden_files_visible: 'gizli görünür', workspace_hidden_files_visible_title: 'Gizli dosyalar görünür — seçenekler için tıklayın', workspace_options: 'Çalışma alanı seçenekleri', dialog_confirm_title: 'İşlemi onayla', dialog_prompt_title: 'Bir değer girin', dialog_confirm_btn: 'Onaylamak', // workspace.js unsaved_confirm: 'Önizlemede kaydedilmemiş değişiklikleriniz var. Atılıp gezinilsin mi?', discard: 'At', save: 'Kaydetmek', edit: 'Düzenlemek', clear: 'Temizle', create: 'Oluştur', remove: 'Kaldır', save_title: 'Değişiklikleri kaydet', edit_title: 'Bu dosyayı düzenle', saved: 'Kaydedildi', save_failed: 'Kaydetme başarısız oldu:', image_load_failed: 'Resim yüklenemedi', file_open_failed: 'Dosya açılamadı', downloading: (name) => `${name} indiriliyor\u2026`, double_click_rename: 'Yeniden adlandırmak için çift tıklayın', symlink_link_to: 'Symlink → {target}', external_link_open_confirm: 'This symlink points outside the workspace. Open it in a read-only external view for this browser session?', external_link_read_only: 'This external view is read-only. Create, rename, move, delete, upload, reveal, and editor actions stay disabled here.', external_link_grant_expired: 'This external view expired. Reopen the escape-target symlink to authorize it again.', session_rename_failed_no_row: 'Could not start rename — row not found.', renamed_to: 'Yeniden adlandırıldı', rename_failed: 'Yeniden adlandırma başarısız oldu:', moved_to: 'Taşındı: ', move_failed: 'Taşıma başarısız: ', delete_title: 'Sil', delete_confirm: (name) => `${name} silinsin mi?`, delete_dir_confirm: (name) => `"${name}" klasörü ve tüm içeriği silinsin mi?`, rename_title: 'Yeniden isimlendirmek', rename_prompt: 'Yeni isim:', deleted: 'Silindi', delete_failed: 'Silinemedi:', reveal_in_finder: 'Dosya Yöneticisinde Göster', reveal_failed: 'Açıklanamadı:', copy_file_path: 'Dosya yolunu kopyala', download_folder: 'İndirme klasörü', path_copied: 'Dosya yolu panoya kopyalandı', path_copy_failed: 'Yol kopyalanamadı:', session_rename: 'Konuşmayı yeniden adlandır', session_rename_desc: 'Bu görüşmenin başlığını düzenleyin', session_title_regenerate: 'Başlığı yeniden oluştur', session_title_regenerate_desc: 'Hermes\'ten görüşmeden yeni bir başlık oluşturmasını iste', session_title_regenerating: 'Başlık yeniden oluşturuluyor…', session_title_regenerated: (title) => `Başlık yeniden oluşturuldu: ${title}`, session_title_regenerate_failed: 'Başlık yeniden oluşturma başarısız: ', session_copy_link: 'Konuşma bağlantısını kopyala', session_copy_link_desc: 'Bu konuşmaya doğrudan bağlantı kopyala', session_link_copied: 'Konuşma bağlantısı panoya kopyalandı', session_link_copy_failed: 'Konuşma bağlantısı kopyalanamadı: ', new_file_prompt: 'Yeni dosya adı (örn. Notes.md):', new_file: 'Yeni Dosya', new_folder: 'Yeni Klasör', workspace_root: 'çalışma alanı kökü', new_file_prompt_title: '{0} içindeki yeni dosya adı:', new_folder_prompt_title: '{0} içindeki yeni klasör adı:', project_name_prompt: 'Proje adı:', created: 'Oluşturuldu', create_failed: 'Oluşturma başarısız oldu:', new_folder_prompt: 'Yeni klasör adı:', folder_created: 'Oluşturulan klasör', folder_create_failed: 'Klasör oluşturulamadı:', workspace_auto_create_folder: 'Mevcut değilse klasör oluşturun', folder_add_as_space_btn: 'Alan Olarak Ekle', folder_add_as_space_msg: 'Bu klasör çalışma alanı listenize yeni bir alan olarak eklensin mi?', archive_extracted: (n, c) => `${c} arşivden ${n} dosya çıkarıldı`, folder_add_as_space_title: 'Alan olarak eklensin mi?', remove_title: 'Kaldırmak', empty_dir: '(boş)', upload_failed: 'Yükleme başarısız oldu:', upload_too_large: (maxMb, fileMb) => `Dosya çok büyük (${fileMb} MB). Maksimum yükleme boyutu ${maxMb} MB'tır.`, uploading: 'Yükleniyor…', uploaded: 'Yüklendi', all_uploads_failed: (n) => `${n} yüklemenin tümü başarısız oldu`, session_pin: 'Görüşmeyi sabitle', session_unpin: 'Görüşmenin sabitlemesini kaldır', session_pin_desc: 'Bu sohbeti en üstte tut', session_unpin_desc: 'Sabitlenenlerden kaldır', session_pin_failed: 'Pin başarısız oldu:', session_move_project: 'Projeye taşı', session_move_project_desc_has: 'Bu görüşmenin projesini değiştirin', session_move_project_desc_none: 'Bu görüşmeye bir proje atayın', session_archive: 'Konuşmayı arşivle', session_hide_external: 'Listeden gizle', session_restore: 'Konuşmayı geri yükle', session_archive_desc: 'Arşivlendi gösterilene kadar bu konuşmayı gizle', session_archive_worktree_desc: 'Bu konuşmayı gizle; çalışma ağacını diskte tut', session_hide_external_desc: 'Kaynak geçmişini silmeden içe aktarılan bu oturumu WebUI\'dan gizleyin.', session_restore_desc: 'Bu görüşmeyi ana listeye geri getir', session_archived: 'Oturum arşivlendi', session_archived_worktree: 'Oturum arşivlendi. Worktree diskte kalır.', session_hidden: 'Oturum listede gizlendi', session_restored: 'Oturum geri yüklendi', session_archive_failed: 'Arşivleme başarısız oldu:', session_duplicate: 'Yinelenen görüşme', session_duplicate_desc: 'Aynı çalışma alanı ve modelle bir kopya oluşturun', session_export_html: 'Export as HTML', session_export_html_desc: 'Download this conversation as a self-contained HTML file', session_duplicated: 'Oturum kopyalandı', session_duplicate_failed: 'Kopyalama başarısız oldu:', session_stop_response: 'Yanıtı durdur', session_stop_response_desc: 'Bu görüşme için çalışan yanıtı iptal edin', session_delete: 'Konuşmayı sil', session_delete_desc: 'Bu görüşmeyi kalıcı olarak kaldır', session_delete_confirm: 'Bu görüşme silinsin mi?', session_delete_worktree_desc: 'Yalnızca WebUI görüşmesini silin; çalışma ağacını diskte tut', session_delete_worktree_confirm: (path) => `Bu görüşme silinsin mi? ${path} worktree diske kalır.`, session_deleted: 'Görüşme silindi', session_deleted_worktree: 'Görüşme silindi. Worktree diskte kalır.', session_worktree_remove: 'Çalışma ağacını kaldır', session_worktree_remove_desc: (path) => `${path} git worktree'sini diskten siler`, session_worktree_remove_confirm: (path) => `Git worktree diskten silinsin mi?\n\nYol: ${path}\n\nTüm worktree dizini silinir. Oturum verileri WebUI'de kalır.`, session_worktree_remove_not_exists: (path) => `${path} worktree'si artık diskte yok.`, session_worktree_remove_confirm_label: 'Kaldırmak', session_worktree_removed: 'Worktree kaldırıldı.', session_worktree_remove_failed: 'Çalışma ağacı kaldırılamadı:', session_worktree_remove_status_failed: 'Çalışma ağacı durumu okunamadı:', session_worktree_remove_locked_by_stream: 'Kaldırılamıyor — etkin bir akış oturumu bu çalışma ağacını kullanıyor.', session_worktree_remove_locked_by_terminal: 'Kaldırılamıyor — etkin bir terminal oturumu bu çalışma ağacını kullanıyor.', session_worktree_remove_unsafe_blocked: 'Bu çalışma ağacını kaldırmadan önce yerel değişiklikleri veya gönderilmemiş taahhütleri çözümleyin.', session_worktree_remove_dirty_warning: 'UYARI: Bu çalışma ağacında kaybolacak kaydedilmemiş değişiklikler var.', session_worktree_remove_untracked_warning: (count) => `${count} izlenmeyen dosya kalıcı olarak silinecek.`, session_worktree_remove_ahead_warning: (ahead) => `${ahead} gönderilmemiş commit kaybolacak.`, session_select_mode: 'Seçme', session_select_mode_desc: 'Toplu olarak yönetilecek konuşmaları seçin', session_select_all: 'Tümünü seç', session_deselect_all: 'Tümünün seçimini kaldır', session_selected_count: '{0} seçildi', session_batch_archive: 'Arşiv', session_batch_delete: 'Silmek', session_batch_move: 'Projeye taşı', session_batch_delete_confirm: '{0} görüşme silinsin mi?', session_batch_archive_confirm: '{0} ileti dizisi arşivlensin mi?', session_batch_delete_worktree_confirm: '{0} görüşme silinsin mi? {1} çalışma ağacı destekli konuşma, çalışma ağacı dizinlerini diskte bırakacak.', session_batch_archive_worktree_confirm: '{0} ileti dizisi arşivlensin mi? {1} çalışma ağacı destekli görüşme, çalışma ağacı dizinlerini diskte tutacak.', session_no_selection: 'Hiçbir görüşme seçilmedi', // settings panel settings_heading_title: 'Kontrol Merkezi', settings_heading_subtitle: 'Tercihler, konuşma araçları ve sistem kontrolleri.', settings_section_conversation_title: 'Konuşma', settings_section_appearance_title: 'Dış görünüş', settings_section_appearance_meta: 'Tema, vurgu renkleri ve görsel stil.', settings_section_preferences_title: 'Tercihler', settings_section_preferences_meta: 'Hermes Web Kullanıcı Arayüzü için varsayılanlar ve Kullanıcı Arayüzü davranışı.', settings_section_system_title: 'Sistem', settings_section_system_meta: 'Örnek sürümü ve erişim kontrolleri.', settings_check_now: 'Şimdi kontrol et', settings_checking: 'Kontrol ediliyor\u2026', settings_up_to_date: 'Güncel \u2713', settings_updates_available: '{count} güncelleme mevcut', settings_updates_disabled: 'Güncelleme kontrolleri devre dışı bırakıldı', settings_update_check_failed: 'Güncelleme kontrolü başarısız oldu', settings_update_no_git: 'Güncellemeler kontrol edilemiyor (git checkout değil)', settings_label_workspace_panel_open: 'Çalışma alanı panelini varsayılan olarak açık tut', settings_desc_workspace_panel_open: 'Etkinleştirildiğinde, çalışma alanı / dosya tarayıcı paneli her yeni oturumda otomatik olarak açılır. Yine de istediğiniz zaman manuel olarak kapatabilirsiniz.', settings_label_workspace_todos_tab: 'Çalışma alanı panelinde Todos sekmesini göster', settings_desc_workspace_todos_tab: 'Etkinleştirildiğinde, çalışma alanı panelinde bir Todos sekmesi görünür. Kenar çubuğu Todos paneli kullanılabilir olmaya devam eder.', settings_label_session_jump_buttons: 'Oturum atlama düğmelerini göster', settings_desc_session_jump_buttons: 'Uzun oturum geçmişlerini okurken kayan Başlat ve Bitir düğmelerini gösterin.', settings_label_terminal_auto_expand: 'Çıktı geldiğinde terminali otomatik genişlet', settings_desc_terminal_auto_expand: 'Çalışan bir komut yeni çıktı ürettiğinde daraltılmış terminal panelini otomatik olarak genişletir.', settings_label_session_endless_scroll: 'Yukarı kaydırırken eski mesajları yükle', settings_desc_session_endless_scroll: 'Etkinleştirildiğinde, yukarı doğru kaydırdığınızda eski mesajlar otomatik olarak yüklenir. Devre dışı bırakıldığında eski mesajlar düğmesini kullanın.', settings_label_auto_scroll_follow: 'Yeni içeriği otomatik takip et', settings_desc_auto_scroll_follow: 'Etkinleştirildiğinde, yeni belirteçler akarken görünüm en alta kaydırılır. Devre dışı bırakıldığında kaydırma konumunu kendiniz kontrol edersiniz.', settings_label_render_user_markdown: 'Render markdown in user messages', settings_label_show_titlebar_profile: 'Show profile switcher in titlebar', // TODO: translate settings_desc_show_titlebar_profile: 'When enabled, a profile switcher button appears in the top-left app titlebar so you can change profiles from any tab. Off by default; the composer footer always has a profile switcher regardless of this setting.', // TODO: translate settings_desc_render_user_markdown: 'When enabled, bold, italic, links, and other markdown in your own messages are rendered. Off by default; fenced code blocks and math always render regardless of this setting.', settings_label_large_text_paste_as_attachment: 'Attach large pasted text as file', settings_desc_large_text_paste_as_attachment: 'When enabled, long pasted text becomes a .md attachment instead of filling the composer.', settings_label_project_quick_create: 'Show per-project new-conversation buttons', settings_desc_project_quick_create: 'When enabled, each project chip in the sidebar gets a + button to start a conversation in that project.', settings_label_structured_code: 'JSON/YAML code blocks', settings_option_structured_code_auto: 'Auto: Tree for long blocks', settings_option_structured_code_on: 'Tree by default', settings_option_structured_code_off: 'Raw by default', settings_label_structured_code_auto_lines: 'Auto threshold lines', settings_desc_structured_code: 'When Auto is selected, JSON/YAML blocks with at least this many lines open in Tree view. Tree always opens the structured viewer; Raw keeps the syntax-highlighted text. You can still switch Tree/Raw on each block.', settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_chat_activity_display_mode: 'Activity display', settings_desc_chat_activity_display_mode: 'Compact Worklog groups supporting activity into a quiet summary. Transparent Stream keeps each thinking/tool event as its own chronological expandable row.', first_token_time: 'Time to first token', processed_elapsed: _i18nProcessedElapsedEn, worklog_thinking: 'Thinking', tool_target_skill_suffix: 'skill', tool_action_label: _i18nToolActionLabelEn, tool_worklog_summary: _i18nToolWorklogSummaryEn, tool_summary_join: _i18nToolSummaryJoinEn, done: 'Done', settings_option_compact_worklog: 'Compact Worklog', settings_option_transparent_stream: 'Transparent Stream', settings_label_tab_visibility: 'Kenar çubuğu sekmeleri', settings_desc_tab_visibility: 'Kenar çubuğunda ve rayda hangi sekmelerin görüneceğini seçin. Sohbet ve Ayarlar her zaman görünür durumdadır.', settings_label_composer_controls: 'Chat footer controls', settings_desc_composer_controls: 'Toggle which controls are shown in the chat footer. Drag chips to reorder each footer group.', settings_label_composer_situational_controls: 'Situational footer controls', settings_desc_composer_situational_controls: 'These controls do not always appear, depending on viewport, mode, or runtime state. You can still toggle them off if needed.', composer_control_attach: 'Attach', composer_control_saved_prompts: 'Saved prompts', composer_control_mic: 'Mic', composer_control_profile: 'Profile', composer_control_workspace: 'Workspace', composer_control_model: 'Model', composer_control_reasoning: 'Reasoning', composer_control_context: 'Context', composer_control_voice_mode: 'Voice mode', composer_control_yolo: 'YOLO', composer_control_bg_badge: 'Background badge', composer_control_mobile_config: 'Mobile config', composer_control_quota_chip: 'Quota chip', composer_control_toolsets: 'Toolsets', composer_control_status: 'Status', open_in_browser: 'Tarayıcıda aç', settings_dropdown_conversation: 'Konuşma', settings_dropdown_appearance: 'Dış görünüş', settings_dropdown_preferences: 'Tercihler', settings_dropdown_providers: 'Sağlayıcılar', settings_dropdown_system: 'Sistem', settings_tab_conversation: 'Konuşma', settings_tab_appearance: 'Dış görünüş', settings_tab_preferences: 'Tercihler', settings_tab_plugins: 'Eklentiler', settings_tab_extensions: 'Extensions', // TODO: translate settings_extensions_gallery_tab: 'Gallery', settings_extensions_installed_tab: 'Installed', settings_extensions_diagnostics_tab: 'Diagnostics', settings_extensions_gallery_loading: 'Loading gallery…', settings_extensions_gallery_empty: 'No extensions found in the registry.', settings_extensions_gallery_error: 'Failed to load gallery.', ext_gallery_install: 'Install', ext_gallery_installing: 'Installing…', ext_gallery_installed: 'Installed', ext_gallery_uninstall: 'Uninstall', ext_gallery_uninstalling: 'Uninstalling…', ext_gallery_restart_required: 'Restart required', ext_gallery_permissions_show: 'Permissions', ext_gallery_permissions_hide: 'Hide permissions', ext_gallery_permissions_empty: 'Ek izin bildirilmedi.', ext_gallery_version: 'Version', ext_gallery_author: 'Author', ext_gallery_capabilities: 'Capabilities', ext_gallery_next_step: 'Sonraki adım', ext_gallery_after_install: 'Kurulumdan sonra', ext_gallery_local_component_required: "Bu uzantının yerel bir bileşeni var. Kurulumdan sonra gerekli yerel uygulamayı veya sidecar'ı başlatın.", ext_gallery_local_app_label: 'Yerel uygulama', ext_gallery_required_suffix: '{0} gerekli', ext_gallery_sidecar_required: 'Sidecar gerekli', ext_gallery_native_host_required: 'Native host gerekli', ext_gallery_open_setup_guide: 'Kurulum kılavuzunu aç', ext_gallery_install_restart_required: 'Uzantı kuruldu. Uygulamak için yeniden başlatma gerekli.', ext_gallery_install_followup: 'Uzantı kuruldu. Sonraki adımlar için kartı kontrol edin.', ext_gallery_install_ok: 'Extension installed successfully.', ext_gallery_uninstall_ok: 'Extension uninstalled.', settings_plugins_title: 'Eklentiler', plugins_enable_toggle: 'Etkinleştir', settings_plugins_meta: 'Yüklü Hermes eklentilerini ve yaşam döngüsü kancalarını görüntüleyin. Bu panel salt okunurdur.', settings_plugins_empty: 'Görünür Hermes eklentisi yok. Burada görmek için Hermes CLI/config üzerinden yükleyin veya etkinleştirin.', plugins_unnamed: 'Adsız eklenti', plugins_no_description: 'Açıklama yok.', plugins_no_hooks: 'Kayıtlı yaşam döngüsü kancası yok', plugins_registered_hooks: 'Kayıtlı kancalar', plugins_enabled: 'Etkin', plugins_disabled: 'Devre dışı', plugins_active_provider: 'Etkin (sağlayıcı)', plugins_provider_no_hooks: 'Sağlayıcı eklentisi — agent görünürlük kancası yok', plugins_load_failed: 'Eklentiler yüklenemedi: ', settings_tab_system: 'Sistem', settings_tab_help: 'Help', settings_help_meta: 'Resources and support for Hermes WebUI.', settings_help_docs_label: 'Documentation', settings_help_docs_desc: 'Guides, configuration reference, and the full Hermes WebUI README.', settings_help_docs_link: 'Open Documentation', settings_help_issue_label: 'Having an issue?', settings_help_issue_desc: 'Search existing reports or open a new one on GitHub.', settings_help_issue_link: 'Open GitHub Issues', settings_title: 'Ayarlar', settings_search_placeholder: 'Ayarları ara…', settings_search_no_results: 'Ayar bulunamadı.', settings_save_btn: 'Ayarları Kaydet', settings_label_model: 'Varsayılan Model', settings_label_auxiliary_models: 'Yardımcı Modeller', settings_desc_auxiliary_models: 'Görü, sıkıştırma, başlık oluşturma vb. yan görevler için yönlendirme. "Otomatik" ana sohbet modelinizi kullanır.', settings_aux_loading: 'Yardımcı modeller yükleniyor…', settings_aux_load_failed: 'Yardımcı model ayarları yüklenemedi. Agent API\'sinin kullanılabilir olduğundan emin olun.', settings_aux_model_auto: 'otomatik (sağlayıcı varsayılanını kullan)', settings_aux_provider_auto: 'ana modeli kullan', settings_aux_model_custom: 'Özel model…', settings_aux_model_custom_prompt: 'Model kimliğini girin:', settings_aux_no_changes: 'Uygulanacak değişiklik yok', settings_aux_task_vision: 'Vision', settings_aux_task_vision_desc: 'image/screenshot analysis', settings_aux_task_compression: 'Compression', settings_aux_task_compression_desc: 'context summarization', settings_aux_task_web_extract: 'Web extract', settings_aux_task_web_extract_desc: 'web page summarization', settings_aux_task_session_search: 'Session search', settings_aux_task_session_search_desc: 'past-conversation recall', settings_aux_task_approval: 'Approval', settings_aux_task_approval_desc: 'smart command approval', settings_aux_task_mcp: 'MCP', settings_aux_task_mcp_desc: 'MCP tool reasoning', settings_aux_task_title_generation: 'Title generation', settings_aux_task_title_generation_desc: 'session titles', settings_aux_task_skills_hub: 'Skills hub', settings_aux_task_skills_hub_desc: 'skills search/install', settings_aux_task_curator: 'Curator', settings_aux_task_curator_desc: 'skill-usage review pass', settings_aux_task_kanban_decomposer: 'Kanban decomposer', settings_aux_task_kanban_decomposer_desc: 'task decomposition', settings_aux_task_profile_describer: 'Profile describer', settings_aux_task_profile_describer_desc: 'profile summaries', settings_aux_task_triage_specifier: 'Triage specifier', settings_aux_task_triage_specifier_desc: 'issue/task triage specs', settings_aux_advanced_button_title: 'Advanced options', settings_aux_advanced_button_aria: 'Advanced options for {task}', settings_aux_advanced_title: '{task} options', settings_aux_advanced_subtitle: 'Advanced config for auxiliary.', settings_aux_advanced_save: 'Save options', settings_aux_advanced_base_url: 'Base URL', settings_aux_advanced_base_url_desc: 'Optional provider endpoint override.', settings_aux_advanced_timeout: 'Timeout seconds', settings_aux_advanced_timeout_desc: 'Request timeout for this auxiliary task. Blank uses Hermes default.', settings_aux_advanced_download_timeout: 'Download timeout seconds', settings_aux_advanced_download_timeout_desc: 'Only relevant for tasks that download media/content, e.g. vision. Blank uses default.', settings_aux_advanced_max_concurrency: 'Max concurrency', settings_aux_advanced_max_concurrency_desc: 'Optional per-task concurrency limit. Blank uses default.', settings_aux_advanced_extra_body: 'Extra body JSON', settings_aux_advanced_extra_body_desc: 'Optional JSON object merged into the model request body.', settings_aux_advanced_api_key: 'API key override', settings_aux_advanced_api_key_set_hint: 'API key is set. Leave blank to keep it, or use clear to remove it.', settings_aux_advanced_api_key_empty_hint: 'Leave blank to use provider/default credentials.', settings_aux_advanced_api_key_clear: 'Clear existing API key override', settings_aux_advanced_extra_body_invalid_json: 'Extra body must be valid JSON', settings_aux_advanced_extra_body_object_required: 'Extra body must be a JSON object', settings_aux_advanced_saved: 'Auxiliary options saved', settings_aux_advanced_save_failed: 'Failed to save auxiliary options', settings_aux_saved: 'Yardımcı modeller güncellendi', settings_aux_save_failed: 'Yardımcı model kaydedilemedi', settings_aux_reset_confirm_title: 'Yardımcı modeller sıfırlansın mı?', settings_aux_reset_confirm_msg: 'Bu, tüm yardımcı görevleri otomatik (ana modeli kullan) olarak ayarlayacaktır.', settings_aux_reset_done: 'Yardımcı modeller otomatiğe sıfırlandı', settings_btn_apply_aux_models: 'Değişiklikleri uygula', settings_btn_reset_aux_models: 'Tümünü otomatiğe sıfırla', settings_desc_model: 'Yeni konuşmalar için kullanılır. Mevcut konuşmalar seçilen modellerini korur.', settings_main_advanced_button_aria: 'Advanced options for main model', settings_main_advanced_title: 'Main model options', settings_main_advanced_subtitle: 'Advanced config for the default chat model.', settings_main_advanced_saved: 'Main model options saved', settings_main_advanced_save_failed: 'Failed to save main model options', settings_main_advanced_service_tier: 'Service tier', settings_main_advanced_service_tier_desc: 'Optional request setting for OpenAI-family providers.', settings_main_advanced_service_tier_default: 'Default / off', settings_main_advanced_service_tier_priority: 'Priority (fast)', settings_label_send_key: 'Anahtar Gönder', settings_label_theme: 'Tema', settings_label_skin: 'Deri', settings_label_font_size: 'Yazı tipi boyutu', font_size_small: 'Küçük', font_size_default: 'Varsayılan', font_size_large: 'Büyük', font_size_xlarge: 'Ekstra Büyük', settings_autosave_saving: 'Kaydediliyor\u2026', settings_autosave_saved: 'Kaydedildi', settings_autosave_failed: 'Kaydetme başarısız oldu', settings_autosave_retry: 'Yeniden dene', settings_label_language: 'Dil', settings_label_quota_chip: 'Bestecide sağlayıcı kota çipini göster', settings_desc_quota_chip: 'Besteci altbilgisinde bir ortam kalan kota göstergesini (örn. OpenRouter kredi bakiyesi) görüntüler. Varsayılan kapalı. Besteciyi dizüstü bilgisayar ve standart masaüstü genişliklerinde düzenli tutmak için yalnızca etkinleştirildiğinde geniş ekranlarda (≥1400 piksel) görünür.', settings_label_conversation_outline: 'Konuşma ana hattını göster', settings_desc_conversation_outline: 'Geçerli konuşmadaki kullanıcı soruları için yalnızca masaüstünde görünen bir atlama listesi gösterir. Varsayılan kapalıdır.', settings_label_hide_suggestions: 'Yeni sohbet önerilerini gizle', settings_desc_hide_suggestions: 'Yanlışlıkla dokunmayı önlemek için boş yeni sohbet ekranındaki üç varsayılan öneri düğmesini gizleyin.', settings_label_virtualize_transcript: 'Virtualize long transcripts', settings_desc_virtualize_transcript: "Render only the visible portion of very long chat transcripts (over 80 messages) for smoother scrolling. Turn this off if you see any rendering or scroll issues, or want the browser's Find (Ctrl+F) to match the whole conversation \u2014 the full transcript will render at once.", settings_label_token_usage: 'Jeton kullanımını göster', settings_label_token_speed: 'Jeton hızını (TPS) göster', settings_desc_token_speed: 'Akış sırasında ve yanıt tamamlandıktan sonra asistan mesajı başlıklarında saniyedeki jeton sayısını gösterir. Varsayılan olarak kapalıdır.', settings_label_sidebar_density: 'Kenar çubuğu yoğunluğu', cmd_reasoning: 'Düşünme görünürlüğünü değiştirin (göster/gizle), çaba düzeyini ayarlayın veya mevcut durumu kontrol edin', settings_label_external_sessions: 'WebUI olmayan oturumları göster', settings_label_claude_code_sessions: 'Show Claude Code sessions', settings_label_cron_sessions: 'Show cron sessions', settings_label_webhook_sessions: 'Show webhook sessions', settings_label_previous_messaging_sessions: 'Önceki mesajlaşma oturumlarını göster', settings_label_sync_insights: 'Analizlerle senkronize edin', settings_label_check_updates: 'Güncellemeleri kontrol edin', settings_label_whats_new_summary: "Summarize What's New with AI", settings_label_bot_name: 'Varsayılan asistanın adı', settings_label_password: 'Erişim Şifresi', settings_label_pinned_limit: 'Sabitlenmiş sohbet sınırı', settings_desc_pinned_limit: 'Kenar çubuğunda sabitlenebilecek etkin sohbetlerin maksimum sayısı. Varsayılan 3.', settings_label_dashboard_mode: 'Resmi Hermes Kontrol Paneli', settings_desc_dashboard_mode: 'Resmi hermes kontrol paneli erişilebilir olduğunda gezinme çubuğunda bir bağlantı gösterir. Genel ters proxy URL\'leri yalnızca tarayıcı bağlantısı olarak saklanır ve sunucu tarafından asla araştırılmaz.', settings_dashboard_mode_auto: 'Otomatik algıla', settings_dashboard_mode_always: 'Her zaman göster', settings_dashboard_mode_never: 'Asla gösterme', settings_dashboard_save: 'Kontrol paneli bağlantı ayarlarını kaydet', settings_label_gateway_status: 'Ağ Geçidi Durumu', settings_desc_gateway_status: 'Hermes ağ geçidi durumu (Telegram, Discord, Slack, vb.)', gateway_not_configured: 'Ağ geçidi yapılandırılmamış', gateway_metadata_stale: 'Ağ geçidi meta verileri güncel değil', gateway_endpoint_unreachable: 'Ağ geçidi uç noktası erişilemiyor', gateway_not_running: 'Ağ geçidi çalışmıyor', gateway_running_label: 'Çalışıyor', gateway_last_active: 'Son etkinlik: ', gateway_session_count: (n) => `${n} oturum`, gateway_load_failed: 'Ağ geçidi durumu yüklenemedi', settings_saved: 'Ayarlar kaydedildi', settings_save_failed: 'Kaydetme başarısız oldu:', settings_load_failed: 'Ayarlar yüklenemedi:', settings_saved_pw: 'Ayarlar kaydedildi - şifre koruması etkin ve bu tarayıcıda oturum açık kalıyor', settings_saved_pw_updated: 'Ayarlar kaydedildi — şifre güncellendi', // login page (used server-side via /api/i18n/login endpoint) login_title: 'Oturum aç', login_subtitle: 'Devam etmek için şifrenizi girin', login_placeholder: 'Şifre', login_btn: 'Oturum aç', login_invalid_pw: 'Geçersiz şifre', login_conn_failed: 'Bağlantı başarısız oldu', // Sidebar & Tabs tab_chat: 'Sohbet', tab_tasks: 'Görevler', tab_skills: 'Yetenekler', tab_memory: 'Hafıza', tab_workspaces: 'Alanlar', tab_profiles: 'Agent profilleri', tab_kanban: 'Kanban', kanban_board: 'Pano', kanban_visible_tasks: '{0} görünür görev', kanban_search_tasks: 'Görevleri ara', kanban_all_assignees: 'Tüm atananlar', kanban_all_tenants: 'Tüm kiracılar', kanban_include_archived: 'Arşivlenenleri dahil et', kanban_no_matching_tasks: 'Eşleşen görev yok', kanban_no_data: 'Kanban verisi yok', kanban_work_queue_hint: 'Bu Hermes Ajanının iş kuyruğudur. Bir görev oluşturun veya önceliklendirin, atayın, Hazır\'a taşıyın ve sevk görevlisinin görevi talep etmesine izin verin.', kanban_tasks_hidden_by_filters: 'Tasks hidden by filters', kanban_clear_filters: 'Clear filters', kanban_unavailable: 'Kanban kullanılamıyor', kanban_read_only: 'Salt okunur görünüm', kanban_empty: 'Boş', kanban_task: 'Görev', kanban_no_description: 'Açıklama yok', kanban_refresh: 'Yenile', kanban_status_triage: 'Triyaj', kanban_status_todo: 'Yapılacaklar', kanban_status_ready: 'Hazır', kanban_status_running: 'Koşma', kanban_status_blocked: 'Engellendi', kanban_status_done: 'Tamamlamak', kanban_status_original_hint: 'Gerçek durum: {0}. Bu iletişim kutusu yalnızca Triyaj/Yapılacak/Hazır düzenlemelerini destekler.', kanban_comments_count: 'Yorumlar ({0})', kanban_events_count: 'Etkinlikler ({0})', kanban_links: 'Bağlantılar', kanban_parents: 'Ebeveynler', kanban_children: 'Çocuklar', kanban_runs_count: 'Çalıştırmalar ({0})', kanban_no_comments: 'Yorum yok', kanban_no_events: 'Etkinlik yok', kanban_no_runs: 'Koşu yok', kanban_title: 'Başlık', kanban_description: 'Tanım', kanban_description_placeholder: 'İsteğe bağlı - ne olması gerekiyor, kabul kriterleri, bağlantılar', kanban_status: 'Durum', kanban_assignee: 'Vekil', kanban_assignee_placeholder: 'İsteğe bağlı — herhangi bir çalışan için boş bırakın', kanban_tenant: 'Kiracı', kanban_tenant_placeholder: 'İsteğe bağlı – proje veya ekip bilgisi', kanban_priority: 'Öncelik', kanban_priority_hint: 'Önce yüksek sayılar çalıştırılır. Varsayılan 0.', kanban_title_required: 'Başlık gerekli.', kanban_edit_task: 'Görevi düzenle', kanban_run_dispatcher: 'Dağıtıcıyı çalıştır', kanban_run_dispatcher_confirm: 'Bu, bu panodaki Hazır görevleri talep edecek ve çalışan alt süreçlerini oluşturacaktır (görev başına bir, tıklama başına en fazla 8). Devam etmek?', kanban_assignee_profiles_label: 'Hermes profilleri', kanban_assignee_other_label: 'Diğer (CLI hatları / kaldırılan profiller)', kanban_assignee_unassigned: '— Atanmadı (otomatik olarak çalıştırılmayacak) —', kanban_ready_needs_assignee: 'Atanmamış + Hazır\'ı seçtiniz. Gönderici bu görevi atlayacaktır. Onaylamak için tekrar gönderin veya bir profil seçin.', kanban_dispatch_preview_prefix: 'Önizleme:', kanban_dispatch_run_prefix: 'Sevk edilen:', kanban_dispatch_spawned: 'yumurtladı', kanban_dispatch_promoted: 'terfi ettirildi', kanban_dispatch_reclaimed: 'geri kazanılmış', kanban_dispatch_skipped_unassigned: 'atlandı (atanan yok)', kanban_dispatch_skipped_nonspawnable: 'atlandı (bilinmeyen profil)', kanban_dispatch_auto_blocked: 'otomatik olarak engellendi', kanban_dispatch_timed_out: 'zaman aşımına uğradı', kanban_dispatch_crashed: 'çöktü', kanban_new_task: 'Yeni görev', kanban_view_lanes: 'Lanes by profile', kanban_view_consolidated: 'Consolidated view', kanban_view_lanes_saved: 'Kanban view: lanes by profile', kanban_view_consolidated_saved: 'Kanban view: consolidated', kanban_view_update_failed: 'Failed to update Kanban view: ', kanban_add_comment: 'Yorum ekle', kanban_workspace_kind: 'Workspace kind', kanban_workspace_path: 'Workspace path', kanban_workspace_path_placeholder: 'Path to workspace', kanban_workspace_scratch: 'Scratch', kanban_workspace_worktree: 'Worktree', kanban_workspace_dir: 'Directory', kanban_workspace_path_required: 'Workspace path is required for non-scratch workspaces.', kanban_skills: 'Skills', kanban_skills_placeholder: 'Comma-separated skill names, e.g. python,git', kanban_max_runtime_seconds: 'Max runtime (seconds)', kanban_max_runtime_hint: 'Leave empty for unlimited.', kanban_max_runtime_invalid: 'Max runtime must be a whole number of seconds greater than 0.', kanban_parents_modal: 'Parent dependencies', kanban_parents_placeholder: 'Parent task ID', kanban_add_dependency: 'Add dependency', kanban_remove_dependency: 'Remove dependency', kanban_dependency_placeholder: 'Task ID to link', kanban_dependency_self: 'A task cannot depend on itself', kanban_only_mine: 'Sadece benim', kanban_bulk_action: 'Toplu işlem', kanban_nudge_dispatcher: 'Göndericiyi önizleyin', kanban_stats: 'İstatistikler', kanban_worker_log: 'İşçi günlüğü', kanban_block: 'Engellemek', kanban_unblock: 'Engellemeyi kaldır', kanban_back_to_board: 'Panoya geri dön', kanban_lanes_by_profile: 'Profile göre şeritler', kanban_new_board: 'Yeni yönetim kurulu\u2026', kanban_rename_board: 'Mevcut panoyu yeniden adlandır\u2026', kanban_archive_board: 'Mevcut panoyu arşivle\u2026', kanban_archive_board_confirm: 'Arşiv panosu "{name}"? Görevler diskte kalır ve pano kanban/boards/_archived/ adresinden geri yüklenebilir.', kanban_board_archived: 'Pano arşivlendi', kanban_board_name: 'İsim', kanban_board_slug: 'Bilgi notu (küçük harf, kısa çizgi)', kanban_board_description: 'Açıklama (isteğe bağlı)', kanban_board_icon: 'Simge (emoji, isteğe bağlı)', kanban_board_color: 'Renk (isteğe bağlı)', kanban_board_name_required: 'Ad gerekli', kanban_board_slug_required: 'Slug gerekli', kanban_card_complete: 'tamamlamak', kanban_card_archive: 'arşiv', kanban_unassigned: 'atanmamış', kanban_status_archived: 'Arşivlendi', tab_todos: 'Yapılacaklar', tab_insights: 'Analizler', tab_dashboard: 'Hermes Kontrol Paneli', dashboard_loopback_warning: 'Kontrol Paneli sunucuda yalnızca geri döngüye sahiptir. Ya sunucunun kendisinden göz atın ya da --host 0.0.0.0 (güvenli değil) ile yeniden başlatın.', tab_logs: 'Günlükler', tab_settings: 'Ayarlar', close_menu: 'Close menu', // TODO: translate logs_title: 'Günlükler', logs_file: 'Dosya', logs_tail: 'Son satırlar', logs_auto_refresh: 'Otomatik yenile (5 sn)', logs_wrap: 'Satırları kaydır', logs_copy_all: 'Tümünü kopyala', logs_empty: 'Henüz günlük satırı yok.', logs_loading: 'Günlükler yükleniyor\u2026', logs_load_failed: 'Günlükler yüklenemedi', logs_status_idle: 'Son satırları görmek için bir günlük dosyası seçin.', logs_no_mtime: 'henüz yazılmadı', logs_truncated_hint: 'Büyük günlük dosyasının sonu gösteriliyor; bellek sınırı için eski veriler atlandı.', logs_copied: 'Günlükler kopyalandı', logs_severity: 'Şiddet', logs_severity_all: 'Tüm', logs_severity_errors: 'Hatalar', logs_severity_warnings: 'Uyarılar+', logs_filter_active: 'gösteriliyor (filtre etkin)', new_conversation: 'Yeni görüşme', filter_conversations: 'Konuşmaları filtrele...', markdown_table_filter: 'Tabloyu filtrele', markdown_table_sort_column: 'Sütunu sırala', session_time_unknown: 'Bilinmiyor', session_time_minutes_ago: (n) => `${n} dk önce`, session_time_hours_ago: (n) => `${n} sa önce`, session_time_days_ago: (n) => `${n} gün önce`, session_time_last_week: 'geçen hafta', session_time_bucket_today: 'Bugün', session_time_bucket_yesterday: 'Dün', session_time_bucket_this_week: 'Bu hafta', session_time_bucket_last_week: 'Geçen hafta', session_time_bucket_older: 'daha yaşlı', scheduled_jobs: 'Planlanmış işler', new_job: 'Yeni iş', loading: 'Yükleniyor...', search_skills: 'Arama becerileri...', new_skill: 'Yeni beceri', personal_memory: 'Kişisel hafıza', current_task_list: 'Mevcut görev listesi', workspace_desc: 'Oturumlarınız için çalışma alanları ekleyin ve değiştirin.', session_meta_messages: (n) => `${n} mesaj${n === 1 ? '' : 'S'}`, session_meta_children: (n) => `${n} çocuk${n === 1 ? '' : 'ren'}`, session_meta_segments: (n) => `${n} segment${n === 1 ? '' : 'S'}`, session_lineage_toggle_hint: '{0} — önceki bağlam turları burada daraltıldı. Göstermek veya gizlemek için tıklayın.', session_lineage_static_hint: '{0} — önceki bağlam turları burada daraltıldı.', session_child_toggle_hint: '{0} — bu oturumdan oluşturulan alt konuşmalar. Göstermek veya gizlemek için tıklayın.', session_readonly_title_hint: 'Salt okunur içe aktarılmış oturum — {0}', session_lineage_segment_untitled: 'Başlıksız segment', session_lineage_segment_open: 'Soy segmentini aç', new_profile: 'Yeni profil', transcript: 'Deşifre metni', download_transcript: 'Markdown olarak indir', import: 'İçe aktarmak', export_session_json: 'JSON', export_session_json_tooltip: 'Tüm oturumu JSON olarak dışa aktar', export_session_html: 'HTML', export_session_html_tooltip: 'Bağımsız bir HTML sayfası olarak dışa aktar', import_session_json_tooltip: 'JSON\'dan oturumu içe aktar', clear_conversation_btn_tooltip: 'Bu görüşmedeki tüm mesajları temizle', // Settings detail settings_label_rtl: 'Sağdan sola sohbet düzeni', settings_desc_rtl: 'Arapça veya İbranice gibi diller için sohbet mesajlarının ve besteci girişinin hizalamasını değiştirir. Yalnızca sohbet alanını etkiler; kenar çubuğu ve diğer paneller soldan sağa kalır.', settings_label_sound: 'Bildirim sesi', settings_desc_sound: 'Asistan bir yanıtı bitirdiğinde bir ses çalın.', settings_label_notifications: 'Tarayıcı bildirimleri', settings_desc_notifications: 'Uygulama arka plandayken bir yanıt tamamlandığında bir sistem bildirimi gösterin.', notifications_enable_btn: 'Enable notifications', notifications_test_btn: 'Send test', notifications_permission_status: (status) => `Permission: ${status}`, notifications_enabled_toast: 'Notifications enabled.', notifications_denied: 'Notifications are blocked in this browser. Enable them in browser settings.', notifications_unsupported: 'Notifications are not supported in this browser.', settings_desc_token_usage: 'Her Asistan yanıtının altında giriş/çıkış jeton sayılarını gösterir. /usage ile de değiştirilebilir.', settings_sidebar_density_compact: 'Kompakt', settings_sidebar_density_detailed: 'Ayrıntılı', settings_desc_sidebar_density: 'Oturum listesinin sol kenar çubuğunda ne kadar meta veri göstereceğini kontrol eder.', settings_label_auto_title_refresh: 'Uyarlanabilir başlık yenileme', settings_auto_title_refresh_off: 'Kapalı', settings_auto_title_refresh_5: 'Her 5 değişimde bir', settings_auto_title_refresh_10: 'Her 10 değişimde bir', settings_auto_title_refresh_20: 'Her 20 değişimde bir', settings_desc_auto_title_refresh: 'Oturum başlıklarını en son konuşmaya göre otomatik olarak yeniden oluşturarak konuşma ilerledikçe başlıkların alakalı kalmasını sağlar. LLM başlık oluşturma modeli yapılandırması gerektirir.', settings_desc_external_sessions: 'Oturum listesinde CLI, Telegram, Discord, Slack ve diğer kanallardan gelen konuşmaları gösterin. İçe aktarmak ve devam etmek için tıklayın.', settings_desc_claude_code_sessions: 'Show Claude Code imported sessions in the sidebar, or hide them while leaving other external sessions visible.', settings_desc_cron_sessions: 'Surface cron job output as conversations in the sidebar. Only active when non-WebUI sessions are enabled. Defaults off; high-frequency jobs can flood the sidebar.', settings_desc_webhook_sessions: 'Surface webhook runs as conversations in the sidebar. Only active when non-WebUI sessions are enabled. Defaults off; high-volume routes can flood the sidebar.', settings_desc_previous_messaging_sessions: 'Sıfırlama veya sıkıştırmayla değiştirilen eski Discord, Telegram, Slack ve Weixin oturumlarını gösterin.', settings_desc_sync_insights: 'WebUI belirteci kullanımını state.db\'ye yansıtır, böylece hermes /insights tarayıcı oturum verilerini içerir. Varsayılan olarak kapalıdır.', settings_desc_check_updates: 'WebUI veya Agent\'ın daha yeni sürümleri mevcut olduğunda bir banner gösterin. Periyodik olarak bir arka plan git getirme işlemi çalıştırır.', settings_desc_whats_new_summary: "Changes the What's New action from opening the raw diff first to generating a short, human-readable summary. The regular diff comparison stays available after the summary.", settings_desc_bot_name: 'Yalnızca varsayılan profil için kullanılır. Diğer profiller kendi profil adlarını kullanır.', settings_desc_password: 'Ayarlamak veya değiştirmek için yeni bir şifre girin. Geçerli ayarı korumak için boş bırakın.', password_placeholder: 'Yeni şifreyi girin\u2026', password_env_var_locked: 'HERMES_WEBUI_PASSWORD ortam değişkeni şu anda ayarlıdır ve önceliklidir. Şifreyi buradan yönetmek için ayarı kaldırın ve sunucuyu yeniden başlatın.', password_env_var_locked_placeholder: 'Kilitli: HERMES_WEBUI_PASSWORD ortam değişkeni ayarlandı', disable_auth: 'Kimlik Doğrulamasını Devre Dışı Bırak', sign_out: 'Oturumu Kapat', settings_label_shutdown: 'Hermes WebUI sunucusunu durdur', settings_desc_shutdown_before_cmd: 'Yerel WebUI sunucusunu düzgün şekilde durdurur. ', settings_desc_shutdown_between_cmds: ' ile başlattıysanız ve terminale geçmeden durdurmak istiyorsanız faydalıdır. WebUI\'a yeniden erişmek için sunucuyu yeniden başlatmanız (', settings_desc_shutdown_after_cmd: ' veya yerel uygulama) gerekir.', settings_btn_shutdown: 'Sunucuyu durdur', settings_shutdown_confirm_title: 'Hermes WebUI\'yi durdur', settings_shutdown_confirm_message: 'Hermes WebUI sunucusu durdurulsun mu?', settings_shutdown_confirm_btn: 'Durdur', settings_shutdown_stopped_message: 'Sunucu durduruldu. Bu sekmeyi kapatabilirsiniz.', // Providers panel providers_tab_title: 'Sağlayıcılar', providers_section_title: 'Sağlayıcılar', providers_section_meta: 'Yapay zeka sağlayıcıları için API anahtarlarını yönetin. Değişiklikler hemen yürürlüğe girer.', providers_status_configured: 'API anahtarı yapılandırıldı', providers_status_not_configured: 'API anahtarı yok', providers_status_oauth: 'OAuth', providers_status_api_key: 'API anahtarı', providers_status_model: 'Model', providers_status_not_configured_label: 'Yapılandırılmadı', providers_oauth_hint: 'OAuth aracılığıyla kimlik doğrulaması yapıldı. API anahtarına gerek yok.', providers_oauth_config_yaml_hint: 'Belirteç config.yaml aracılığıyla yapılandırıldı. Güncellemek için config.yaml dosyanızdaki sağlayıcılar bölümünü düzenleyin veya hermes auth\'u çalıştırın.', providers_oauth_not_configured_hint: 'Kimliği doğrulanmadı. Bu sağlayıcıyı yapılandırmak için terminalde Hermes Auth komutunu çalıştırın.', providers_save: 'Kaydetmek', providers_refresh_models: 'Refresh models', providers_refreshing: 'Refreshing…', providers_models_refreshed: 'Models refreshed', providers_remove: 'Kaldırmak', providers_saving: 'Kaydediliyor\u2026', providers_removing: 'Kaldırılıyor\u2026', providers_enter_key: 'Lütfen bir API anahtarı girin', providers_empty: 'Yapılandırılabilir sağlayıcı bulunamadı.', providers_key_updated: 'API anahtarı kaydedildi', providers_key_removed: 'API anahtarı kaldırıldı', providers_key_placeholder_new: 'sk-...', providers_key_placeholder_replace: 'Değiştirilecek yeni anahtarı girin\u2026', provider_quota_title: 'Etkin sağlayıcı kotası', provider_quota_active_provider: 'Aktif sağlayıcı', provider_quota_last_checked_after_refresh: 'Yenilemeden sonra son kontrol edildi', provider_quota_last_checked: 'Son kontrol edilen {0}', provider_quota_refresh_usage: 'Kullanımı yenile', provider_quota_refreshing: 'Yenileniyor...', provider_quota_refresh_title: 'Sağlayıcı kullanım sınırlarını şimdi yenileyin', provider_quota_refresh_succeeded: 'Sağlayıcı kullanımı yenilendi', provider_quota_refresh_failed: 'Sağlayıcı kullanımı yenileme başarısız oldu', provider_quota_session_limit: '5 saat sınırı', provider_quota_weekly_limit: 'Haftalık limit', provider_quota_window_fallback: 'Pencere', provider_quota_metric_remaining: 'Geriye kalan', provider_quota_metric_used: 'Kullanılmış', provider_quota_metric_limit: 'Sınır', provider_quota_status_available: 'mevcut', provider_quota_status_exhausted: 'yorgun', provider_quota_status_unavailable: 'müsait değil', provider_quota_status_failed: 'arızalı', provider_quota_status_checked: 'kontrol edildi', provider_quota_status_no_key: 'anahtar yok', provider_quota_status_invalid_key: 'geçersiz anahtar', provider_quota_status_unsupported: 'desteklenmeyen', provider_quota_used_meta: '{0} kullanıldı', provider_quota_resets_meta: '{0} sıfırlanır', provider_quota_credential_pool: 'Kimlik bilgisi havuzu', provider_quota_credential_label: 'Kimlik bilgisi {0}', provider_quota_pool_plans: 'Planlar: {0}', provider_quota_pool_no_windows: 'Hesap sınırı aralığı bildirilmedi.', provider_quota_account_limits_loaded: 'Hesap limitleri yüklendi.', provider_quota_unavailable: 'Kota durumu mevcut değil', provider_quota_retry_after: '{0} sonrasında yeniden deneyin', provider_quota_pool_summary_available: '{0}/{1} mevcut', provider_quota_pool_summary_exhausted: '{0} bitkin', provider_quota_pool_summary_failed: '{0} başarısız oldu', provider_quota_pool_summary_checked: '{0} işaretlendi', provider_cost_budget_label: 'Monthly budget', provider_cost_budget_placeholder: 'e.g. 50.00', provider_cost_budget_set: 'Set', provider_cost_budget_clear: 'Clear', provider_cost_budget_pct: '{0}% of ${1} budget (monthly pace)', provider_cost_budget_save_failed: 'Failed to save budget', cancel: 'İptal etmek', create_job: 'İş oluştur', save_skill: 'Beceriyi kaydet', editing: 'Düzenleme', // Empty state empty_title: 'Hangi konuda yardımcı olabilirim?', empty_subtitle: 'İstediğiniz şeyi sorun, komutları çalıştırın, dosyaları keşfedin veya planlanmış görevlerinizi yönetin.', suggest_files: 'Bu çalışma alanında hangi dosyalar var?', suggest_schedule: 'Nerelerdesiniz?', suggest_plan: 'Küçük bir proje planlamama yardım et.', // onboarding onboarding_badge: 'İLK ÇALIŞMA', onboarding_title: 'Hermes Web Kullanıcı Arayüzüne Hoş Geldiniz', onboarding_lead: 'Hızlı yönlendirmeli kurulum, Hermes\'i doğrulayacak, gerçek bir sağlayıcı yapılandırmasını kaydedecek, bir çalışma alanı ve modeli seçecek ve isteğe bağlı olarak uygulamayı bir parola ile koruyacaktır.', onboarding_back: 'Geri', onboarding_continue: 'Devam etmek', onboarding_skip: 'Kurulumu atla', onboarding_skipped: 'Kurulum atlandı — mevcut yapılandırma kullanılıyor.', onboarding_open: 'Hermes\'i aç', onboarding_step_system_title: 'Sistem kontrolü', onboarding_step_system_desc: 'Hermes Agent\'ı ve yapılandırma görünürlüğünü doğrulayın.', onboarding_step_setup_title: 'Sağlayıcı kurulumu', onboarding_step_setup_desc: 'Minimum Hermes sağlayıcı yapılandırmasını kaydedin.', onboarding_step_workspace_title: 'Çalışma alanı + modeli', onboarding_step_workspace_desc: 'Yeni oturumlar ve sohbet için varsayılanları seçin.', onboarding_step_password_title: 'İsteğe bağlı şifre', onboarding_step_password_desc: 'Web kullanıcı arayüzünü paylaşmadan önce koruyun.', onboarding_step_finish_title: 'Sona ermek', onboarding_step_finish_desc: 'Uygulamayı inceleyin ve girin.', onboarding_notice_system_ready: 'Hermes Agent\'a Web kullanıcı arayüzünden ulaşılabilir görünüyor.', onboarding_notice_system_unavailable: 'Hermes Agent henüz tam olarak mevcut değil. Bootstrap bunu kurabilir ancak sağlayıcı kurulumu yine de bir terminal gerektirebilir.', onboarding_check_agent: 'Hermes Temsilcisi', onboarding_check_agent_ready: 'Tespit edildi ve içe aktarılabilir', onboarding_check_agent_missing: 'Eksik veya kısmen içe aktarılabilir', onboarding_check_password: 'Şifre', onboarding_check_password_enabled: 'Zaten etkin', onboarding_check_password_disabled: 'Henüz etkinleştirilmedi', onboarding_check_provider: 'Sağlayıcı yapılandırması', onboarding_check_provider_ready: 'Sohbete hazır', onboarding_check_provider_partial: 'Kaydedildi ancak eksik', onboarding_check_provider_pending: 'Doğrulama gerekiyor', onboarding_config_file: 'Yapılandırma dosyası:', onboarding_env_file: '.env dosyası:', onboarding_unknown: 'Bilinmiyor', onboarding_current_provider: 'Mevcut kurulum:', onboarding_missing_imports: 'Eksik içe aktarmalar:', onboarding_notice_setup_required: 'Burada basit bir sağlayıcı yolu seçin. Gelişmiş OAuth akışları şimdilik Hermes CLI\'ye ait olmaya devam ediyor.', onboarding_notice_setup_already_ready: 'Çalışan bir Hermes sağlayıcı kurulumu zaten algılandı. Burada saklayabilir veya değiştirebilirsiniz.', onboarding_oauth_provider_ready_title: 'Sağlayıcının kimliği zaten doğrulandı', onboarding_oauth_provider_ready_body: 'Bu örnek, Hermes CLI aracılığıyla ayarlanmış bir OAuth sağlayıcısını ({provider}) kullanacak şekilde yapılandırılmıştır. Burada API anahtarına gerek yoktur; kurulumu tamamlamak için Devam\'a tıklayın.', onboarding_oauth_provider_not_ready_title: 'OAuth sağlayıcısının kimliği henüz doğrulanmadı', onboarding_oauth_provider_not_ready_body: 'Bu örnek, API anahtarı yerine OAuth kullanan {provider} sağlayıcısını kullanır. Kimlik doğrulamak için terminalde hermes auth veya hermes model çalıştırın, ardından WebUI\'yi yeniden yükleyin.', onboarding_oauth_switch_hint: 'Veya API anahtarı kurulumuna geçmek için aşağıdan farklı bir sağlayıcı seçin:', onboarding_notice_workspace: 'Bu değerler normal uygulamayla aynı ayar API\'lerini yeniden kullanır.', onboarding_workspace_label: 'Çalışma alanı', onboarding_workspace_or_path: 'Veya bir çalışma alanı yolu girin', onboarding_workspace_placeholder: '/ev/siz/çalışma alanı', onboarding_provider_label: 'Kurulum modu', onboarding_quick_setup_badge: 'hızlı kurulum', provider_category_easy_start: 'Kolay başlangıç', provider_category_self_hosted: 'Açık / kendi kendine barındırılan', provider_category_specialized: 'Uzmanlaşmış', onboarding_api_key_label: 'API anahtarı', oauth_login_codex: 'Codex (ChatGPT) ile giriş yap', oauth_codex_step1: 'Adım 1: Bu URL\'yi ziyaret edin ve kodu girin', oauth_codex_step2: 'Adım 2: Bu kodu sayfaya girin', oauth_codex_polling: 'Yetkilendirme bekleniyor...', oauth_codex_success: 'Codex OAuth girişi başarılı!', oauth_codex_error: 'OAuth girişi başarısız', oauth_codex_expired: 'Kodun süresi doldu, lütfen tekrar deneyin', onboarding_api_key_placeholder: 'Mevcut kayıtlı anahtarı korumak için boş bırakın', onboarding_api_key_label_optional: 'API anahtarı (isteğe bağlı)', onboarding_api_key_placeholder_optional: 'Anahtarsız sunucular için boş bırakın', onboarding_api_key_help_keyless: 'Çoğu LM Studio / Ollama / vLLM kurulumu anahtarsız çalışır — sunucunuz kimlik doğrulama gerektirmiyorsa boş bırakın. Bağlantıyı test et düğmesini kullanın.', onboarding_api_key_help_prefix: 'Hermes .env dosyanızda gizli olarak kaydedildi', onboarding_base_url_label: 'Temel URL', onboarding_base_url_placeholder: 'https://uç noktanız.example/v1', onboarding_base_url_help: 'Bunu OpenAI uyumlu yönlendiriciler, şirket içinde barındırılan sunucular, LiteLLM, Ollama, LM Studio, vLLM veya benzer uç noktalar için kullanın.', onboarding_model_label: 'Varsayılan model', onboarding_workspace_help: 'Kurulum tamamlandıktan sonra Hermes\'in yeni sohbetler için kullanması gereken modeli seçin.', onboarding_custom_model_placeholder: 'modelinizin adı', onboarding_custom_model_help: 'Özel uç noktalar için sunucunuzun beklediği tam model kimliğini girin.', onboarding_notice_password_enabled: 'Bir parola zaten yapılandırılmıştır. Yalnızca değiştirmek istiyorsanız yeni bir tane girin.', onboarding_notice_password_recommended: 'İsteğe bağlıdır ancak kullanıcı arayüzünü localhost\'un ötesinde gösterecekseniz önerilir.', onboarding_password_label: 'Şifre (isteğe bağlı)', onboarding_password_placeholder: 'Atlamak için boş bırakın', onboarding_password_help: 'Parolalar, mevcut ayarlar API\'si aracılığıyla ve karma sunucu tarafında saklanır.', onboarding_notice_finish: 'Bunlardan herhangi birini değiştirmek için Ayarları daha sonra yeniden açabilirsiniz.', onboarding_not_set: 'Ayarlanmadı', onboarding_password_will_enable: 'Etkinleştirilecek', onboarding_password_will_replace: 'Değiştirilecek', onboarding_password_keep_existing: 'Mevcut şifreyi koru', onboarding_password_remains_disabled: 'Engelli kalacak', onboarding_password_skipped: 'Şimdilik atlandı', onboarding_finish_help: 'Bitirme, ayarlarda onboarding_completed kodunu saklar ve sizi normal uygulamaya bırakır.', onboarding_error_choose_workspace: 'Devam etmeden önce bir çalışma alanı seçin.', onboarding_error_choose_model: 'Devam etmeden önce bir model seçin.', onboarding_error_provider_required: 'Devam etmeden önce bir kurulum modu seçin.', onboarding_error_base_url_required: 'Özel uç noktalar için temel URL gereklidir.', onboarding_probe_test_button: 'Bağlantıyı test et', onboarding_probe_probing: 'Bağlantı test ediliyor\u2026', onboarding_probe_ok: 'Bağlandı. {n} model mevcut.', onboarding_probe_error_generic: 'Yapılandırılmış temel URL\'ye ulaşılamadı.', onboarding_probe_error_invalid_url: 'Temel URL http:// veya https:// ile başlamalı.', onboarding_probe_error_dns: 'Ana bilgisayar çözülemedi. URL\'yi kontrol edin veya IP adresini kullanın.', onboarding_probe_error_connect_refused: 'Bağlantı reddedildi — sunucu bu adreste çalışmıyor olabilir. Docker içinden localhost yerine ana bilgisayar IP\'sini deneyin.', onboarding_probe_error_timeout: 'Uç nokta zamanında yanıt vermedi. Sunucunun çalıştığını ve URL\'nin doğru olduğunu kontrol edin.', onboarding_probe_error_http_4xx: 'Uç nokta istemci hatası döndürdü. Kimlik doğrulama ve URL yolunu kontrol edin (genelde /v1 ile biter).', onboarding_probe_error_http_5xx: 'Uç nokta sunucu hatası döndürdü. LM Studio / Ollama günlüklerini kontrol edin.', onboarding_probe_error_parse: 'Uç nokta beklenen biçimde model listesi döndürmedi. URL\'nin OpenAI uyumlu API köküne işaret ettiğini doğrulayın.', onboarding_probe_error_unreachable: 'Yapılandırılmış temel URL\'ye ulaşılamadı.', onboarding_error_probe_failed: 'Yapılandırılmış temel URL doğrulanamadı.', onboarding_error_workspace_required: 'Çalışma alanı gerekli.', onboarding_error_model_required: 'Model gerekli.', onboarding_complete: 'İlk katılım tamamlandı', // panel/runtime i18n error_prefix: 'Hata:', default: 'default', search: 'Search', not_available: 'Yok', never: 'Asla', add: 'Eklemek', add_failed: 'Ekleme başarısız oldu:', remove_failed: 'Kaldırma başarısız oldu:', switch_failed: 'Geçiş başarısız oldu:', name_required: 'Ad gerekli', content_required: 'İçerik gerekli', view: 'Görüş', dismiss: 'Azletmek', disable: 'Devre dışı bırakmak', cron_no_jobs: 'Planlanmış iş bulunamadı.', cron_status_off: 'kapalı', cron_status_paused: 'duraklatıldı', cron_status_error: 'hata', cron_status_active: 'aktif', cron_status_running: 'koşuyor\u2026', cron_status_needs_attention: 'dikkat edilmesi gerekiyor', cron_attention_desc: 'Bu yinelenen işin bir sonraki çalışma süresi yoktur. Zamanlayıcı bir sonraki çalıştırmayı hesaplamada başarısız olmuş olabilir.', cron_attention_croniter_hint: 'Ağ Geçidi çalışma zamanında croniter paketi eksik olabilir. Ağ Geçidini cron desteğiyle yeniden başlatın, ardından bu işe devam edin.', cron_attention_resume: 'Devam ettir ve yeniden hesapla', cron_jobs_project: 'Cron İşleri', cron_attention_run_once: 'Şimdi bir kez koş', cron_attention_copy_diagnostics: 'Tanılamayı kopyala', cron_diagnostics_copied: 'Cron teşhisi kopyalandı', cron_next: 'Sonraki', cron_last: 'Son', cron_run_now: 'Şimdi koş', cron_pause: 'Duraklat', cron_resume: 'Sürdürmek', cron_job_name_placeholder: 'İşin adı', cron_schedule_placeholder: 'Takvim', cron_prompt_placeholder: 'Çabuk', cron_last_output: 'Son çıktı', cron_expand_prompt: 'İstemi genişlet', cron_collapse_prompt: 'İstemi daralt', cron_expand_output: 'Çıktıyı genişlet', cron_collapse_output: 'Çıktıyı daralt', cron_mode_agent: 'Ajan', cron_mode_script: 'Betik', cron_mode_label: 'Mod', cron_script_job_banner: 'Zamanlanmış betiği çalıştırır — stdout hedefe iletilir. Ajan, istem veya beceri yok.', cron_script_card_title: 'Betik', cron_script_output: 'Betik çıktısı', cron_script_path_label: 'Betik yolu', cron_script_path_hint: 'Mutlak yol değilse ~/.hermes/scripts/ altında çözülür. Davranışı değiştirmek için sunucudaki betiği düzenleyin.', cron_script_badge_title: 'Betik işi (ajan yok)', cron_workdir_label: 'Çalışma dizini', cron_view_full_output: 'View full output', cron_all_runs: 'Tüm koşular', cron_hide_runs: 'Çalıştırmaları gizle', cron_no_runs_yet: '(henüz koşu yok)', cron_schedule_required_example: 'Program gereklidir (ör. "0 9 * * *" veya "her 1 saatte bir")', cron_schedule_required: 'Program gerekli', cron_prompt_required: 'İstem gerekli', cron_job_created: 'İş oluşturuldu', cron_duplicate: 'Kopyalamak', cron_duplicated: 'İş kopyalandı (duraklatıldı)', cron_job_triggered: 'İş tetiklendi', cron_job_paused: 'İş duraklatıldı', cron_job_resumed: 'İş devam ettirildi', cron_job_updated: 'İş güncellendi', cron_model_label: 'Model Geçersiz Kılma', cron_model_hint: 'Bu iş için varsayılan modeli geçersiz kılar.', cron_model_no_agent_hint: 'No-agent jobs run the configured script directly; model is unused.', cron_model_use_default: 'Varsayılan (profil/sistem varsayılanını kullan)', cron_delete_confirm_title: 'Cron işini sil', cron_delete_confirm_message: 'Bu geri alınamaz.', cron_job_deleted: 'İş silindi', cron_completion_status: (name, status) => `Cron "${name}" ${status}`, status_failed: 'arızalı', status_completed: 'tamamlanmış', todos_no_active: 'Bu oturumda etkin görev listesi yok.', clear_conversation_title: 'Görüşmeyi temizle', clear_conversation_message: 'Tüm mesajlar silinsin mi? Bu geri alınamaz.', clear_failed: 'Temizleme başarısız oldu:', skills_no_match: 'Beceri eşleşmesi yok.', skill_enabled: 'Etkinleştirilmiş', skill_disabled: 'Engelli', skill_toggle_failed: 'Beceri değiştirilemedi:', linked_files: 'Bağlantılı Dosyalar', skill_load_failed: 'Beceri yüklenemedi:', skill_file_load_failed: 'Dosya yüklenemedi:', skill_name_required: 'Beceri adı gerekli', skill_updated: 'Beceri güncellendi', skill_created: 'Beceri oluşturuldu', skill_deleted: 'Beceri silindi', skill_delete_confirm: '"{0}" becerisi silinsin mi?', skills_empty_title: 'Bir beceri seçin', skills_empty_sub: 'İçeriğini görüntülemek için kenar çubuğundan bir beceri seçin veya yeni bir beceri oluşturun.', skills_edit: 'Düzenlemek', skills_delete: 'Silmek', skills_back_to: '{0}\'a geri dön', tasks_empty_title: 'Planlanmış bir iş seçin', tasks_empty_sub: 'Ayrıntılarını ve çalışmalarını görüntülemek için kenar çubuğundan bir iş seçin veya yeni bir iş oluşturun.', workspaces_empty_title: 'Bir alan seçin', workspaces_empty_sub: 'Dosyalarını ve ayarlarını görüntülemek veya yeni bir tane eklemek için kenar çubuğundan bir alan seçin.', profiles_empty_title: 'Bir profil seçin', profiles_empty_sub: 'Ayarlarını görüntülemek ve düzenlemek için kenar çubuğundan bir temsilci profili seçin veya yeni bir tane oluşturun.', memory_notes_label: 'hafıza (notlar)', memory_saved: 'Bellek kaydedildi', my_notes: 'Notlarım', user_profile: 'Kullanıcı Profili', external_notes_sources: 'Üçüncü taraf notlar', external_notes_empty: 'Henüz görünür not veya bilgi MCP kaynağı yok. Burada listelemek için Joplin, Obsidian, Notion, llm-wiki veya başka bir not sunucusu yapılandırın.', external_notes_auto_recall_hint: 'Otomatik oturum hatırlama değişmedi; bu çekmece yalnızca yapılandırılmış kaynakları ve kullanılabilir okuma/arama araçlarını gösterir.', external_notes_no_tools: 'Bu kaynak için şu anda görünür okuma/arama aracı yok.', external_notes_tool_count: (count) => `${count} not aracı kullanılabilir`, external_notes_configured_hint: 'Bu yapılandırılmış kaynaktan araç adları beklenir; WebUI runtime bunları sunduğunda canlı şemalar görünecek.', external_notes_recent_ai: 'AI tarafından yakın zamanda kullanıldı', external_notes_auto: 'auto', external_notes_recent_ai_reason: 'Otomatik hatırlama', external_notes_search_placeholder: 'Notlarda ara…', external_notes_search_empty: 'Notları burada önizlemek için yapılandırılmış bir not kaynağında arama yapın.', source_active: 'active', source_configured: 'configured', no_notes_yet: 'Henüz not yok.', no_profile_yet: 'Henüz profil yok.', agent_soul: 'Ajan Ruhu', no_soul_yet: 'Henüz tanımlanmış bir ruh yok.', workspace_choose_path: 'Çalışma alanı yolunu seçin', workspace_choose_path_meta: 'Doğrulanmış bir yol ekleyin ve bu görüşmeyi değiştirin', workspace_manage: 'Çalışma alanlarını yönet', workspace_manage_meta: 'Spaces panelini açın', workspace_use_title: 'Geçerli oturumda kullan', workspace_use: 'Kullanmak', workspace_add_path_placeholder: 'Çalışma alanı yolu ekleyin (ör. /home/user/my-project)', workspace_paths_validated_hint: 'Yollar, kaydedilmeden önce mevcut dizinler olarak doğrulanır.', workspace_drag_hint: 'Yeniden sıralamak için sürükleyin', workspace_reorder_failed: 'Yeniden sıralama başarısız oldu', workspace_added: 'Çalışma alanı eklendi', workspace_renamed: 'Çalışma alanı yeniden adlandırıldı', workspace_remove_confirm_title: 'Çalışma alanını kaldır', workspace_remove_confirm_message: (path) => `"${path}" kaldırılsın mı?`, workspace_removed: 'Çalışma alanı kaldırıldı', workspace_switch_prompt_title: 'Çalışma alanını değiştir', workspace_switch_prompt_message: 'Bu görüşmeyi eklemek ve bu görüşmeye geçiş yapmak için mutlak bir çalışma alanı yolu girin.', workspace_switch_prompt_confirm: 'Anahtar', workspace_switch_prompt_placeholder: '/Kullanıcılar/siz/proje', workspace_not_added: 'Çalışma alanı eklenmedi', workspace_already_saved: 'Çalışma alanı zaten kayıtlı; onu listeden seçin', workspace_busy_switch: 'Aracı çalışırken çalışma alanı değiştirilemiyor', discard_file_edits_title: 'Dosya düzenlemeleri silinsin mi?', discard_file_edits_message: 'Çalışma alanlarının değiştirilmesi, önizlemedeki kaydedilmemiş dosya düzenlemelerinin silinmesine neden olur.', workspace_switched_to: (name) => `${name}'a geçildi`, profiles_no_profiles: 'Hiçbir profil bulunamadı.', profile_api_keys_configured: 'API anahtarları yapılandırıldı', profile_gateway_running: 'Ağ geçidi çalışıyor', profile_gateway_stopped: 'Ağ geçidi durduruldu', profile_active: 'AKTİF', profile_no_configuration: 'Yapılandırma yok', profile_skill_count: (count) => `${count} beceri${count === 1 ? '' : 'S'}`, profile_use: 'Kullanmak', profile_switch_title: 'Bu profile geç', profile_delete_title: 'Bu profili sil', profile_default_label: '(varsayılan)', profile_name_placeholder: 'Profil adı (küçük harf, a-z 0-9 kısa çizgiler)', profile_clone_label: 'Etkin profilden yapılandırmayı kopyala', profile_model_label: 'Model / sağlayıcı', profile_model_hint: 'Bu yeni profil için yapılandırılmış sağlayıcılar ve modeller arasından seçim yapın.', profile_model_use_default: 'Etkin profil varsayılanını kullan', profile_base_url_placeholder: 'Temel URL (isteğe bağlı, örneğin http://localhost:11434)', profile_api_key_placeholder: 'API anahtarı (isteğe bağlı)', manage_profiles: 'Profilleri yönet', profiles_load_failed: 'Profiller yüklenemedi', profile_switched_new_conversation: (name) => `Profile geçildi: ${name} — yeni görüşme başladı`, profile_switched: (name) => `Profile geçildi: ${name}`, profile_name_rule: 'Yalnızca küçük harfler, sayılar, kısa çizgiler ve alt çizgiler', profile_base_url_rule: 'Temel URL http:// veya https:// ile başlamalıdır', profile_created: (name) => `Profil oluşturuldu: ${name}`, profile_delete_confirm_title: (name) => `"${name}" profili silinsin mi?`, profile_delete_confirm_message: 'Bu profilin tüm oturumları, yapılandırmaları, becerileri ve belleği kalıcı olarak silinecek. Bu geri alınamaz.', profile_deleted: (name) => `Profil silindi: ${name}`, active_conversation_none: 'Aktif görüşme seçilmedi.', active_conversation_meta: (title, count) => `${title} · ${count} mesaj${count === 1 ? '' : 'S'}`, settings_unsaved_changes: 'Kaydedilmemiş değişiklikleriniz var.', sign_out_failed: 'Oturumu kapatma başarısız oldu:', disable_auth_confirm_title: 'Şifre korumasını devre dışı bırak', disable_auth_confirm_message: 'Bu örneğe herkes erişebilecek.', auth_disabled: 'Kimlik doğrulama devre dışı bırakıldı — şifre koruması kaldırıldı', disable_auth_failed: 'Kimlik doğrulama devre dışı bırakılamadı:', current_password_label: 'Mevcut şifre', current_password_placeholder: 'Mevcut şifreyi girin…', current_password_required: 'Kimlik doğrulamasını değiştirmek veya devre dışı bırakmak için mevcut şifre gereklidir.', current_password_incorrect: 'Mevcut şifre yanlış.', disable_auth_typed_confirm: 'Onaylamak için DISABLE AUTH yazın', auth_status_password: 'Şifre kimlik doğrulaması', auth_status_passkey_only: 'Yalnızca passkey', auth_status_unauthenticated: 'Kimlik doğrulaması yok', auth_warning_badge: 'Kimlik doğrulaması devre dışı', auth_disabled_warning_message: 'Bu örneğe kimlik doğrulaması olmadan erişilebilir.', auth_acknowledged_label: 'Bu riski gözden geçirdim; daha az acil bir gezinme uyarısı göster.', auth_ack_save_failed: 'Onay durumu güncellenemedi: ', bg_error_single: (title) => `"${title}" bir hatayla karşılaştı`, bg_error_multi: (count) => `${count} oturum bir hatayla karşılaştı`, // skill form skill_name: 'İsim', skill_category: 'Kategori', skill_category_placeholder: 'İsteğe bağlı, ör. devops', skill_content: 'SKILL.md içeriği', skill_content_placeholder: 'YAML ön maddesi + işaretleme gövdesi', skill_rename_not_supported: 'Bir becerinin yeniden adlandırılması desteklenmiyor. Yeni bir beceri oluşturun ve yeniden adlandırmak için eskisini silin.', skill_metadata: 'Meta veriler', // cron form cron_name_label: 'İsim', cron_name_placeholder: 'İsteğe bağlı', cron_schedule_label: 'Takvim', cron_schedule_preset_label: 'Ön ayar', cron_schedule_preset_hourly: 'Saatlik', cron_schedule_preset_daily: 'Günlük', cron_schedule_preset_weekdays: 'Hafta içi', cron_schedule_preset_weekly: 'Haftalık', cron_schedule_preset_monthly: 'Aylık', cron_schedule_preset_custom: 'Özel', cron_schedule_hint: "Use 'every 1h' or a cron expression for recurring jobs. Bare durations like '30m' run once.", cron_schedule_once_warning: "Duration forms like '30m' run once and are removed after running. Use 'every 30m' to keep a recurring job.", cron_prompt_label: 'Çabuk', cron_deliver_label: 'Çıktıyı şuraya ilet:', cron_deliver_local: 'Yerel (yalnızca çıktıyı kaydet)', cron_deliver_custom: 'Ozel teslimat hedefi', cron_profile_label: 'Profil', cron_profile_server_default: 'sunucu varsayılanı', cron_profile_server_default_hint: 'Çalışma zamanında WebUI sunucusunun varsayılan profilini kullanır. Profili olmayan mevcut işler bu eski davranışı sürdürüyor.', cron_toast_notifications_label: 'Tamamlama kadehleri', cron_toast_notifications_hint: 'Bu cron bittiğinde kadeh kaldır. Görevler rozeti ve yeni çalıştırma işaretçisi bu kapalıyken de güncellenir.', cron_toast_notifications_enabled: 'Etkinleştirilmiş', cron_toast_notifications_disabled: 'Engelli', cron_skills_label: 'Yetenekler', cron_skills_placeholder: 'Beceri ekleyin (isteğe bağlı)\u2026', cron_skills_edit_hint: 'Beceri listesi oluşturulduktan sonra düzenlenemez.', // workspace form workspace_name_label: 'İsim', workspace_name_placeholder: 'İsteğe bağlı kolay ad', workspace_path_label: 'Yol', workspace_path_required: 'Yol gerekli', workspace_path_readonly: 'Yol değiştirilemez. Yalnızca yeniden adlandırın.', workspace_new_title: 'Yeni alan', // profile form profile_name_label: 'İsim', profile_base_url_label: 'Temel URL', profile_api_key_label: 'API anahtarı', cmd_yolo: 'YOLO modunu değiştir (onayları atla)', cmd_branch: 'Bu konuşmayı yeni bir oturuma aktarın', cmd_branch_usage: '/branch [isim] - konuşmayı çatallayın (isteğe bağlı olarak bir adla)', branch_forked: 'Yeni oturuma çatallandı', branch_failed: 'Çatal başarısız oldu:', fork_from_here: 'Buradan çatal', forked_from: 'çatallı', yolo_no_session: 'Aktif oturum yok', yolo_enabled: '⚡ YOLO modu AÇIK — onaylar bu oturumu atladı', yolo_disabled: 'YOLO modu KAPALI', yolo_pill_label: 'YOLO', yolo_pill_title_active: 'YOLO modu etkin — devre dışı bırakmak için tıklayın', approval_skip_all: '⚡ Tüm bu oturumu atla', approval_skip_all_title: 'Bu oturuma ilişkin tüm onay istemlerini atla', // composer action tooltips composer_send: 'Mesaj gönder', composer_queue: 'Sıra mesajı', composer_interrupt: 'Kes ve gönder', composer_steer: 'Akım tepkisini yönlendir', composer_stop: 'Üretimi durdur', composer_disabled_clarify: 'Açıklama isteğine yanıt verin', composer_disabled_compression: 'Sıkıştırmanın bitmesi bekleniyor', composer_compression_will_queue: 'Type a message — it will queue and send after compression', composer_disabled_empty: 'Göndermek için bir mesaj yazın', composer_mobile_workspace: 'Çalışma alanı', composer_mobile_model: 'Modeli', composer_mobile_quota: 'Kota', composer_mobile_reasoning: 'muhakeme', composer_mobile_context: 'Bağlam', pdf_loading: 'PDF {0} yükleniyor\u2026', pdf_too_large: 'PDF satır içi önizleme için çok büyük', pdf_no_pages: 'PDF\'de sayfa yok', pdf_error: 'PDF önizlemesi oluşturulamadı', pdf_download: 'PDF\'yi indir', pdf_truncated: 'Showing the first {0} of {1} pages — download for the full document', html_loading: 'HTML önizlemesi yükleniyor\u2026', html_too_large: 'HTML satır içi önizleme için çok büyük', html_error: 'HTML önizlemesi oluşturulamadı', html_open_full: 'Tam sayfayı aç', html_sandbox_label: 'HTML Önizlemesi (korumalı alan)', media_audio_label: 'Ses', media_svg_label: 'Diyagram', media_video_label: 'Video', media_download: 'İndir', csv_loading: 'CSV yükleniyor', csv_too_large: 'CSV dosyası satır içi oluşturma için çok büyük', csv_no_data: 'CSV dosyasında tablo olarak oluşturmak için yeterli veri yok', csv_error: 'CSV dosyası yüklenemedi', csv_header_note: 'Tablo başlığı olarak gösterilen ilk satır', excalidraw_loading: 'Yükleme diyagramı', excalidraw_too_large: 'Excalidraw dosyası satır içi oluşturma için çok büyük', excalidraw_invalid: 'Geçersiz Excalidraw dosya biçimi', excalidraw_error: 'Excalidraw dosyası yüklenemedi', excalidraw_label: 'Diyagram', excalidraw_download: 'İndirmek', excalidraw_empty: 'Boş diyagram', excalidraw_render_error: 'Diyagram oluşturulamadı', excalidraw_simplified: 'Basitleştirilmiş SVG önizlemesi — Excalidraw tuvaliyle piksel açısından aynı değil', // TTS (#499) tts_listen: 'Dinlemek', tts_not_supported: 'Konuşma sentezi bu tarayıcıda desteklenmiyor.', settings_label_tts: 'Yanıtlar için Metinden Konuşmaya', settings_desc_tts: 'Yardım mesajlarında hoparlör düğmesini göster', settings_label_tts_auto_read: 'Yanıtları sesli olarak otomatik oku', settings_desc_tts_auto_read: 'Tamamlandığında her yeni asistanın yanıtını otomatik olarak söyleyin. Yazmaya başladığınızda duraklar.', // Composer voice-mode pref (#1488) settings_label_voice_mode: 'Eller serbest ses modu düğmesi', settings_desc_voice_mode: 'Dikte mikrofonunun yanında ses modu düğmesini gösterir. Duraklamadan sonra Hermes otomatik gönderir ve yanıtları sesli okur. Konuşma tanıma ve TTS destekleyen tarayıcı gerektirir.', settings_label_raw_audio: 'Transkripte etmek yerine ham ses gönder', settings_desc_raw_audio: 'Sesi önce metne dönüştürmek yerine orijinal ses dosyasını kaydedip aracıya gönderir. Aracı, dosyayı yazıya dökebilir veya ham sesi (duygu, arka plan gürültüsü, özel STT) işleyebilir. Telegram\'ın sesli mesaj davranışı gibidir.', voice_send_raw: 'Ham ses gönder', voice_raw_attached: 'Ses eklendi. Gönder\'e basın veya metin ekleyin.', settings_label_tts_voice: 'Ses', settings_desc_tts_voice: 'Ses sentezi sesini seçin', settings_label_tts_rate: 'Konuşma hızı', settings_label_tts_pitch: 'Konuşma perdesi', settings_label_tts_engine: 'TTS Motoru', settings_desc_tts_engine: 'Ses motorunu seçin. Edge TTS, sunucu üzerinden Microsoft sinirsel seslerini kullanır.', checkpoint_date: 'Tarih', checkpoint_diff_files_changed: (n) => `${n} dosya değişti`, checkpoint_diff_no_changes: 'Bu kontrol noktası ile mevcut çalışma alanı arasında fark bulunamadı.', checkpoint_diff_title: 'Kontrol noktasındaki değişiklikler', checkpoint_empty: 'Bu çalışma alanı için kontrol noktası bulunamadı.', checkpoint_error: 'Kontrol noktaları yüklenemedi', checkpoint_files: 'Dosyalar', checkpoint_loading: 'Kontrol noktaları yükleniyor\u2026', checkpoint_message: 'Mesaj', checkpoint_restore: 'Geri yükle', checkpoint_restore_confirm_message: (ckpt) => `Çalışma alanı "${ckpt}" kontrol noktasına geri yüklensin mi? Kayıtlı sürümlerle dosyaların üzerine yazılır. Sonradan eklenen dosyalar silinmez.`, checkpoint_restore_confirm_title: 'Kontrol noktası geri yüklensin mi?', checkpoint_restored: 'Kontrol noktası geri yüklendi', checkpoint_title: 'Kontrol noktaları', checkpoint_view_diff: 'Farkı görüntüle', insights_activity_by_day: 'Güne göre etkinlik', insights_activity_by_hour: 'Saate göre etkinlik', insights_cost: 'Tahmini maliyet', insights_daily_tokens: 'Günlük Jetonlar', insights_model_name: 'Modeli', insights_model_sessions: 'Oturumlar', insights_model_tokens: 'Jetonlar', insights_model_cost: 'Maliyet', insights_model_cache: 'Önbellek', insights_cache_hit: 'İstem önbelleği isabet oranı', insights_model_share: 'Paylaşmak', insights_model_health_title: 'Model health comparison', insights_model_health_provider: 'Provider', insights_model_health_replacement: 'Replacement guide', insights_model_health_cost_per_m: 'Cost / 1M', insights_no_usage_data: 'Henüz kullanım verisi yok', insights_footer: 'Son {days} günün verileri gösteriliyor', insights_skill_usage_title: 'Skill Usage', // TODO: translate insights_skill_usage_sub: 'Tool invocation frequency', // TODO: translate insights_skill_usage_total: 'Total invocations', // TODO: translate insights_skill_usage_skills_used: 'Skills used', // TODO: translate insights_skill_usage_no_data: 'No skill usage data yet', // TODO: translate insights_skill_usage_no_data_hint: 'Skills will appear here once used in conversations.', // TODO: translate insights_skill_usage_footer: 'Counts from ~/.hermes/skills/', // TODO: translate insights_skill_usage_col_skill: 'Skill', // TODO: translate insights_skill_usage_col_uses: 'Uses', // TODO: translate insights_skill_usage_col_views: 'Views', // TODO: translate insights_skill_usage_col_share: 'Usage %', // TODO: translate insights_skill_usage_col_patches: 'Patches', // TODO: translate insights_input_tokens: 'Giriş', insights_messages: 'Mesajlar', insights_models: 'Modeller', insights_no_cost: 'Yok', insights_output_tokens: 'Çıkış', insights_peak_hour: 'Zirve: {hour}', insights_sessions: 'Oturumlar', insights_title: 'Kullanım analitiği', insights_token_breakdown: 'Jeton dağılımı', insights_tokens: 'Jetonlar', insights_total: 'Toplam', settings_desc_api_redact: 'Kendi sunucunuzda şeffaflık için devre dışı bırakılabilir (paylaşımlı örneklerde önerilmez).', settings_label_api_redact: 'API yanıtlarında hassas verileri gizle', subagent_children: 'Alt agent oturumları', outline_title: 'Ana Hat', outline_empty: 'Henüz soru yok.', outline_loading: 'Yükleniyor…', wiki_browse: 'Browse wiki', wiki_search_placeholder: 'Search pages...', wiki_no_pages: 'No wiki pages found', wiki_not_configured: 'Wiki not configured', }, pl: { offline_title: 'Połączenie utracone', offline_browser_detail: 'Twoja przeglądarka zgłasza, że to urządzenie jest offline.', offline_network_detail: 'Hermes jest obecnie nieosiągalny z tej przeglądarki.', offline_autorefresh: 'Odświeżę tę stronę automatycznie, gdy Hermes będzie ponownie osiągalny.', offline_check_now: 'Sprawdź teraz', offline_checking: 'Sprawdzanie…', offline_stream_waiting: 'Połączenie utracone. Oczekiwanie na odświeżenie…', _lang: 'pl', _label: 'Polski', _speech: 'pl-PL', // boot.js cancelling: 'Anulowanie…', cancel_failed: 'Anulowanie nie powiodło się: ', mic_denied: 'Odmowa dostępu do mikrofonu. Sprawdź uprawnienia przeglądarki.', mic_insecure_origin: 'Wprowadzanie głosowe wymaga bezpiecznego połączenia. Otwórz Hermes przez HTTPS lub z localhost, aby użyć mikrofonu.', mic_no_speech: 'Nie wykryto mowy. Spróbuj ponownie.', mic_network: 'Rozpoznawanie mowy jest niedostępne.', mic_error: 'Błąd wejścia głosowego: ', // Composer voice buttons (#1488 — distinct labels for dictation vs voice mode) voice_dictate: 'Dyktuj', voice_dictate_active: 'Zatrzymaj dyktowanie', voice_recording_active: 'Zatrzymaj nagrywanie', voice_mode_toggle: 'Tryb głosowy', voice_mode_toggle_active: 'Wyjdź z trybu głosowego', // Turn-based voice mode (#1333) voice_listening: 'Słucham…', voice_speaking: 'Mówię…', voice_thinking: 'Myślę…', voice_error: 'Głos nie jest obsługiwany w tej przeglądarce', voice_mode_active: 'Tryb głosowy włączony', voice_mode_off: 'Tryb głosowy wyłączony', session_imported: 'Zaimportowano sesję', import_failed: 'Import nie powiódł się: ', import_invalid_json: 'Nieprawidłowy JSON', image_pasted: 'Wklejono obraz: ', text_pasted: 'Wklejony tekst załączono jako ', // messages.js edit_message: 'Edytuj wiadomość', regenerate: 'Wygeneruj ponownie odpowiedź', copy: 'Kopiuj', copied: 'Skopiowano!', copy_failed: 'Kopiowanie nie powiodło się', selected_text_reply: 'Odpowiedz z zaznaczeniem', selected_text_reply_title: 'Dodaj zaznaczony tekst czatu jako cytowany kontekst', selected_text_reply_appended: 'Dodano zaznaczony tekst do pola wprowadzania', saved_prompts_empty: 'Brak zapisanych promptów.', saved_prompts_save_current: 'Zapisz bieżący tekst jako prompt', saved_prompts_saved: 'Prompt zapisany', saved_prompts_delete: 'Usuń prompt', saved_prompts_empty_input: 'Najpierw wpisz prompt do zapisania', context_block_name_default: 'Kontekst', context_block_flush_aria: 'Bloki kontekstu zostaną dołączone podczas wysyłania', context_block_rename_hint: 'Kliknij lub naciśnij Enter, aby zmienić nazwę', context_block_rename_aria: 'Zmień nazwę bloku kontekstu', context_block_remove: 'Usuń blok kontekstu', diff_loading: 'Ładowanie zmian (diff)', diff_error: 'Nie można załadować pliku poprawki', diff_too_large: 'Plik poprawki jest zbyt duży, aby wyświetlić jego podgląd', tree_view: 'Drzewo', raw_view: 'Źródło', parse_failed_note: 'błąd parsowania', you: 'Ty', mcp_servers_title: 'Serwery MCP', mcp_servers_desc: 'Wyświetl serwery MCP skonfigurowane w config.yaml.', mcp_no_servers: 'Brak skonfigurowanych serwerów MCP.', mcp_add_server: '+ Dodaj serwer', mcp_field_name: 'Nazwa serwera', mcp_transport_label: 'Typ transportu', mcp_field_command: 'Polecenie', mcp_field_args: 'Argumenty (rozdzielone przecinkami)', mcp_field_url: 'URL', mcp_field_timeout: 'Limit czasu (sekundy)', mcp_save: 'Zapisz', mcp_cancel: 'Anuluj', mcp_name_required: 'Nazwa serwera jest wymagana.', mcp_url_required: 'URL jest wymagany dla transportu HTTP.', mcp_command_required: 'Polecenie jest wymagane dla transportu stdio.', mcp_saved: 'Zapisano serwer MCP.', mcp_save_failed: 'Nie udało się zapisać serwera MCP.', mcp_delete_confirm_title: 'Usuń serwer MCP', mcp_delete_confirm_message: 'Usunąć serwer MCP "{0}"? Tej operacji nie można cofnąć.', mcp_deleted: 'Usunięto serwer MCP.', mcp_delete_failed: 'Nie udało się usunąć serwera MCP.', mcp_load_failed: 'Nie udało się załadować serwerów MCP.', mcp_restart_hint: 'Zmiany serwerów są tutaj obecnie tylko do odczytu. Edytuj config.yaml i zrestartuj Hermes, aby zmiany odniosły skutek.', mcp_toggle_followup: 'Kontrolki włączania/wyłączania są celowo odłożone, dopóki semantyka przeładowania MCP nie stanie się jasna.', mcp_status_active: 'Aktywny', mcp_status_configured: 'Skonfigurowany', mcp_status_disabled: 'Wyłączony', mcp_status_invalid_config: 'Nieprawidłowa konfiguracja', mcp_status_unknown: 'Nieznany', mcp_tool_count: '{0} narzędzi', mcp_enabled_yes: 'Włączone', mcp_enabled_no: 'Wyłączone', mcp_enable_server: 'Włącz ten serwer MCP', mcp_disable_server: 'Wyłącz ten serwer MCP', mcp_enabled_toast: (name) => `Serwer MCP "${name}" został włączony.`, mcp_disabled_toast: (name) => `Serwer MCP "${name}" został wyłączony.`, mcp_toggle_failed: 'Nie udało się zaktualizować serwera MCP.', mcp_tools_title: 'Narzędzia MCP', mcp_tools_desc: 'Przeszukaj znane narzędzia we wszystkich aktywnych serwerach MCP.', mcp_tools_search_placeholder: 'Szukaj narzędzi po nazwie, serwerze lub opisie…', mcp_tools_no_tools: 'Brak dostępnych narzędzi MCP w aktywnym inwentarzu środowiska uruchomieniowego.', mcp_tools_no_matches: 'Brak narzędzi MCP pasujących do wyszukiwania.', mcp_tools_load_failed: 'Nie udało się załadować narzędzi MCP.', mcp_tools_schema_empty: 'Brak parametrów schematu.', mcp_tools_runtime_note: 'Inwentarz narzędzi korzysta wyłącznie z już znanych aktywnych danych uruchomieniowych MCP; WebUI nie uruchamia ani nie sonduje serwerów.', mcp_tools_summary_no_matches: (query,total) => `Brak narzędzi MCP pasujących do „${query}” (łącznie ${total}).`, mcp_tools_summary_none: 'Brak narzędzi MCP do wyświetlenia.', mcp_tools_summary_matching: (query) => ` pasujących do „${query}”`, mcp_tools_summary_total_note: (total) => ` (łącznie ${total})`, mcp_tools_summary_showing: (start,end,filtered,searchNote,totalNote,page,pages) => `Wyświetlanie ${start}-${end} z ${filtered} narzędzi MCP${searchNote}${totalNote}. Strona ${page} z ${pages}.`, mcp_tools_page_size_prefix: 'Pokaż', mcp_tools_page_size_suffix: 'na stronę', mcp_tools_per_page_aria: 'Liczba narzędzi MCP na stronę', mcp_tools_inactive_configured_servers: (servers) => `Skonfigurowane, ale nieaktywne w tym środowisku WebUI: ${servers}.`, mcp_tools_pagination_label: 'Stronicowanie narzędzi MCP', mcp_tools_previous_page: '‹ Poprzednia', mcp_tools_previous_page_aria: 'Poprzednia strona narzędzi MCP', mcp_tools_next_page: 'Następna ›', mcp_tools_next_page_aria: 'Następna strona narzędzi MCP', // PDF preview (#480) pdf_loading: 'Ładowanie PDF {0}…', pdf_too_large: 'Plik PDF jest zbyt duży, aby wyświetlić jego podgląd', pdf_no_pages: 'Plik PDF nie ma stron', pdf_error: 'Nie udało się wyrenderować podglądu PDF', pdf_download: 'Pobierz PDF', pdf_truncated: 'Pokazywanie pierwszych {0} z {1} stron — pobierz pełny dokument', // HTML sandbox preview (#482) html_loading: 'Ładowanie podglądu HTML…', html_too_large: 'Plik HTML jest zbyt duży, aby wyświetlić jego podgląd', html_error: 'Nie udało się wyrenderować podglądu HTML', html_open_full: 'Otwórz pełną stronę', html_sandbox_label: 'Podgląd HTML (izolowany)', thinking: 'Myślenie', expand_all: 'Rozwiń wszystko', collapse_all: 'Zwiń wszystko', edit_failed: 'Edycja nie powiodła się: ', regen_failed: 'Ponowne generowanie nie powiodło się: ', reconnect_active: 'Odpowiedź jest nadal generowana. Odświeżyć, gdy będzie gotowa?', reconnect_finished: 'Podczas Twojej ostatniej wizyty odpowiedź była w toku. Wiadomości mogły zostać zaktualizowane.', // approval card approval_heading: 'Wymagana aprobata', approval_desc_prefix: 'Wykryto niebezpieczne polecenie', approval_btn_once: 'Zezwól raz', approval_btn_once_title: 'Zezwól na to jedno polecenie (Enter)', approval_btn_session: 'Zezwól na sesję', approval_btn_session_title: 'Zezwól na tę sesję konwersacji', approval_btn_always: 'Zawsze zezwalaj', approval_btn_always_title: 'Zawsze zezwalaj na ten wzorzec poleceń', approval_btn_deny: 'Odmów', approval_btn_deny_title: 'Odmów — nie uruchamiaj tego polecenia', approval_responding: 'Odpowiadanie…', approval_gateway_unsupported: 'Zatwierdzenia wymagają nowszej bramy. Zaktualizuj połączoną bramę Hermes, aby włączyć tę funkcję.', approval_gateway_unsupported_label: 'Zatwierdzenia nie są obsługiwane', clarify_heading: 'Wymagane wyjaśnienie', clarify_hint: 'Wybierz opcję lub wpisz własną odpowiedź poniżej.', clarify_other: 'Inne', clarify_send: 'Wyślij', clarify_input_placeholder: 'Wpisz swoją odpowiedź…', clarify_responding: 'Odpowiadanie…', session_attention_approval: (n) => n === 1 ? 'Aprobata' : `Aprobaty (${n})`, session_attention_clarify: (n) => n === 1 ? 'Pytanie' : `Pytania (${n})`, session_attention_generic: (n) => n === 1 ? 'Wymaga uwagi' : `Wymaga uwagi (${n})`, session_attention_approval_title: 'Oczekiwanie na decyzję o zezwoleniu', session_attention_clarify_title: 'Oczekiwanie na Twoją odpowiedź', session_attention_generic_title: 'Oczekiwanie na działanie użytkownika', untitled: 'Bez tytułu', n_messages: (n) => n === 1 ? '1 wiadomość' : `${n} wiadomości`, load_older_messages: '↑ Przewiń w górę lub kliknij, aby załadować starsze wiadomości', session_jump_start: 'Początek', session_jump_start_label: 'Przejdź do początku sesji', session_jump_end: 'Koniec', session_jump_end_label: 'Przejdź do końca sesji', session_new_message: 'Nowa wiadomość', session_new_message_label: 'Dostępna nowa wiadomość, przejdź do końca', jump_to_question: 'do odpowiedzi', jump_to_question_label: 'Przejdź do początku tej odpowiedzi', queued_label: 'Zostanie wysłane po odpowiedzi', queued_count: (n) => n === 1 ? '1 w kolejce' : `${n} w kolejce`, queued_cancel: 'Anuluj wiadomości w kolejce', model_unavailable: ' (niedostępny)', model_unavailable_title: 'Ten model nie znajduje się już na liście Twoich aktywnych dostawców', provider_mismatch_warning: (m,p)=>`"${m}" może nie działać z Twoim skonfigurowanym dostawcą (${p}). Wyślij mimo to lub uruchom \`hermes model\` w terminalu, aby przełączyć.`, provider_mismatch_label: 'Niezgodność dostawcy', gateway_auth_label: 'Uwierzytelnianie bramy nie powiodło się', gateway_start: 'Uruchom', gateway_stop: 'Zatrzymaj', gateway_restart: 'Uruchom ponownie', gateway_start_success: 'Uruchamianie bramy zakończone.', gateway_stop_success: 'Zatrzymywanie bramy zakończone.', gateway_restart_success: 'Ponowne uruchamianie bramy zakończone.', gateway_start_failed: 'Uruchamianie bramy nie powiodło się', gateway_stop_failed: 'Zatrzymywanie bramy nie powiodło się', gateway_restart_failed: 'Ponowne uruchamianie bramy nie powiodło się', gateway_running: 'Działa', gateway_session: 'sesja', gateway_sessions: 'sesje', gateway_status_load_failed: 'Nie udało się załadować statusu bramy', model_not_found_label: 'Model nie został znaleziony', model_custom_label: 'Niestandardowy ID modelu', model_custom_placeholder: 'np. openai/gpt-5.4', model_search_placeholder: 'Szukaj modeli…', model_search_no_results: 'Nie znaleziono żadnych modeli', model_group_configured: 'Skonfigurowane', ws_search_placeholder: 'Szukaj obszarów roboczych…', ws_no_results: 'Nie znaleziono żadnych obszarów roboczych', workspace_new_worktree_conversation: 'Nowa konwersacja w worktree', workspace_new_worktree_conversation_meta: 'Utwórz izolowane git worktree dla tego obszaru roboczego.', workspace_worktree_created: 'Utworzono konwersację w worktree', workspace_worktree_failed: 'Tworzenie worktree nie powiodło się: ', session_worktree_badge: 'Worktree', model_scope_advisory: 'Dotyczy tej konwersacji od Twojej następnej wiadomości.', model_scope_toast: 'Dotyczy tej konwersacji od Twojej następnej wiadomości.', // commands.js cmd_clear: 'Wyczyść wiadomości konwersacji', cmd_help: 'Pokaż dostępne polecenia ukośnika', cmd_compress: 'Ręcznie skompresuj kontekst konwersacji (użycie: /compress [temat])', ctx_compress_hint: 'Skompresuj kontekst, aby zwolnić miejsce →', ctx_compress_action: '⚠ Skompresuj teraz, aby zwolnić kontekst', cmd_compact_alias: 'Starszy alias dla /compress', cmd_model: 'Przełącz model (np. /model gpt-4o)', cmd_workspace: 'Przełącz obszar roboczy według nazwy', cmd_terminal: 'Otwórz terminal obszaru roboczego', cmd_new: 'Rozpocznij nową sesję czatu', cmd_usage: 'Włącz/wyłącz wyświetlanie zużycia tokenów', cmd_theme: 'Przełącz wygląd (motyw: system/dark/light, skórka: default/ares/mono/graphite/slate/poseidon/sisyphus/charizard/sienna/catppuccin/nous/geist-contrast/zeus/verdigris)', cmd_personality: 'Przełącz osobowość agenta', cmd_skills: 'Lista dostępnych umiejętności Hermes', cmd_use: 'Wymuś umiejętność dla następnej wiadomości', available_commands: 'Dostępne polecenia:', type_slash: 'Wpisz /, aby zobaczyć polecenia', conversation_cleared: 'Wyczyszczono konwersację', command_label: 'Polecenie', context_compaction_label: 'Kompresja kontekstu', retrieval_context_label: 'Zindeksowany kontekst', retrieval_context_preview: 'Wcześniejsze wiadomości są przechowywane i mogą być pobierane za pomocą narzędzi kontekstowych', preserved_task_list_label: 'Zachowana lista zadań', reference_only_label: 'Tylko jako odniesienie', model_usage: 'Użycie: /model ', no_model_match: 'Brak modelu pasującego do "', model_did_you_mean: (m) => ` — czy chodziło Ci o "${m}"?`, switched_to: 'Przełączono na ', workspace_usage: 'Użycie: /workspace ', no_workspace_match: 'Brak obszaru roboczego pasującego do "', switched_workspace: 'Przełączono na obszar roboczy: ', workspace_switch_failed: 'Przełączanie obszaru roboczego nie powiodło się: ', new_session: 'Utworzono nową sesję', new_session_creating: 'Tworzenie nowej konwersacji…', compressing: 'Żądanie kompresji kontekstu...', compress_running_label: 'Kompresowanie', compress_complete_label: 'Kompresja zakończona', auto_compress_label: 'Automatyczna kompresja', compress_failed_label: 'Kompresja nie powiodła się', focus_label: 'Skupienie', token_usage_on: 'Zużycie tokenów włączone', token_usage_off: 'Zużycie tokenów wyłączone', usage_cache_hit_detail: 'Pamięć podręczna: {0}% trafień ({1} odczyt / {2} zapis)', usage_cached_percent: '{0}% w pamięci podręcznej', theme_usage: 'Użycie: /theme ', theme_set: 'Motyw: ', no_active_session: 'Brak aktywnej sesji', cmd_queue: 'Umieść wiadomość w kolejce na następną turę', cmd_goal: 'Ustaw lub sprawdź trwały cel', goal_evaluating_progress: 'Ocena postępu celu…', goal_working_toward: 'Praca nad realizacją celu…', goal_continuing_toast: 'Kontynuowanie dążenia do celu…', goal_status_none: 'Brak aktywnego celu. Ustaw go za pomocą /goal .', goal_status_active: (turns, max_turns, goal) => `⊙ Cel (aktywny, ${turns}/${max_turns} tur): ${goal}`, goal_status_paused: (turns, max_turns, reason, goal) => `⏸ Cel (wstrzymany, ${turns}/${max_turns}${reason ? `, ${reason}` : ''}): ${goal}`, goal_status_done: (turns, max_turns, goal) => `✓ Cel ukończony (${turns}/${max_turns}): ${goal}`, goal_set: (turns, goal) => `⊙ Cel ustawiony (budżet ${turns} tur): ${goal}`, goal_paused: (goal) => `⏸ Cel wstrzymany: ${goal}`, goal_resumed: (goal) => `▶ Cel wznowiony: ${goal}`, goal_cleared: 'Cel został wyczyszczony.', goal_no_goal: 'Brak aktywnego celu.', goal_achieved: (reason) => `✓ Cel osiągnięty: ${reason}`, goal_paused_budget_exhausted: (turns, max_turns) => `⏸ Cel wstrzymany — wykorzystano ${turns}/${max_turns} tur. Użyj /goal resume, aby kontynuować, lub /goal clear, aby zatrzymać.`, goal_continuing: (turns, max_turns, reason) => `↻ Kontynuowanie dążenia do celu (${turns}/${max_turns}): ${reason}`, cmd_interrupt: 'Anuluj bieżącą turę i wyślij nową wiadomość', cmd_steer: 'Wprowadź korektę w trakcie tury bez przerywania pracy agenta', cmd_queue_no_msg: 'Użycie: /queue ', cmd_queue_not_busy: 'Brak aktywnego zadania — po prostu wyślij normalnie', cmd_queue_confirm: 'Wiadomość dodana do kolejki', cmd_interrupt_no_msg: 'Użycie: /interrupt ', cmd_interrupt_confirm: 'Przerwano — wysyłanie nowej wiadomości', cmd_steer_no_msg: 'Użycie: /steer ', cmd_steer_fallback: 'Korekta niedostępna — przywrócono szkic', cmd_steer_delivered: 'Korekta dostarczona — agent zobaczy ją przy następnym wyniku narzędzia', steer_leftover_queued: 'Korekta dodana do kolejki na następną turę', busy_steer_fallback: 'Korekta niedostępna — przywrócono szkic', steer_fail_no_cached_agent: 'Brak buforowanego agenta dla tej sesji — spróbuj odświeżyć', steer_fail_agent_lacks_steer: 'Ta wersja agenta nie obsługuje sterowania (steer)', steer_fail_session_not_found: 'Nie znaleziono sesji — mogła wygasnąć', steer_fail_not_running: 'Agent nie jest obecnie uruchomiony', steer_fail_stream_dead: 'Strumień agenta zakończył się', steer_fail_steer_error: 'Dostarczenie sterowania nie powiodło się — agent mógł już zakończyć pracę', steer_fail_network_error: 'Błąd sieci — sprawdź połączenie', steer_fail_unknown: 'Sterowanie niedostępne', steer_recovery_retry: 'Spróbuj ponownie', steer_recovery_dismiss: 'Odrzuć', busy_interrupt_confirm: 'Przerwano — wysyłanie nowej wiadomości', settings_label_default_message_mode: 'Domyślny tryb wiadomości', settings_desc_default_message_mode: 'Kontroluje, co dzieje się, gdy wysyłasz wiadomość, podczas gdy agent pracuje. Kolejkowanie czeka; Przerwanie anuluje i zaczyna od nowa; Kierowanie (Steer) wprowadza korektę w środku tury bez przerywania. Jeśli Steer jest niedostępny, szkic zostaje przywrócony, aby można było wybrać następne działanie.', settings_label_fade_text_effect: 'Efekt pojawiania się tekstu', settings_desc_fade_text_effect: 'Płynne pojawianie się nowo przesyłanych słów, podczas gdy asystent odpowiada. Podobnie jak w OpenWebUI; domyślnie wyłączone dla maksymalnej wydajności.', settings_label_max_tokens: 'Maksymalna liczba tokenów wyjściowych', settings_desc_max_tokens: 'Ogranicza długość nowych odpowiedzi strumieniowanych. Pozostaw puste, aby użyć wartości zapasowej z bieżącego profilu.', settings_placeholder_max_tokens_none: 'Brak nadpisania', settings_placeholder_max_tokens_fallback: 'Brak nadpisania (wartość zapasowa: {0})', settings_default_message_mode_queue: 'Kolejkuj tury', settings_default_message_mode_interrupt: 'Przerwij bieżącą turę', settings_default_message_mode_steer: 'Korekta w trakcie tury (steer)', settings_label_busy_placeholder_hint: 'Show busy placeholder hint', settings_desc_busy_placeholder_hint: 'Shows the composer placeholder with the current busy action while the session is running and the draft is empty.', composer_placeholder_busy_queue: 'Enter = queue | /interrupt | /background | /steer', composer_placeholder_busy_interrupt: 'Enter = interrupt | /queue | /background | /steer', composer_placeholder_busy_steer: 'Enter = steer | /queue | /background | /interrupt', slash_skill_badge: 'Umiejętność', slash_skill_desc: 'Wywołaj tę umiejętność', cmd_stop: 'Zatrzymaj bieżącą odpowiedź', cmd_title: 'Pobierz lub ustaw tytuł sesji', cmd_retry: 'Wyślij ponownie ostatnią wiadomość', cmd_undo: 'Usuń ostatnią wymianę', cmd_btw: 'Zadaj pytanie poboczne (na marginesie)', cmd_btw_usage: '/btw — zadaj pytanie poboczne przy użyciu kontekstu konwersacji', cmd_background: 'Uruchom zapytanie w tle', cmd_background_usage: '/background — uruchom w tle bez blokowania', cmd_branch: 'Rozgałęź tę konwersację na nową sesję', cmd_branch_usage: '/branch [nazwa] — rozgałęź konwersację (opcjonalnie z nazwą)', branch_forked: 'Rozgałęziono na nową sesję', branch_failed: 'Rozgałęzienie nie powiodło się: ', fork_from_here: 'Rozgałęź stąd', forked_from: 'Rozgałęzione z', subagent_children: 'Sesje subagentów', model_show_all_models: 'Pokaż wszystkie {0} modele', session_toolsets_profile_defaults: 'Domyślne ustawienia aktywnego profilu', session_toolsets_use_profile_defaults: 'Użyj domyślnych ustawień aktywnego profilu', session_toolsets_configured_servers: 'Skonfigurowane serwery MCP', session_toolsets_loading_servers: 'Ładowanie skonfigurowanych serwerów...', session_toolsets_no_configured_servers: 'Brak skonfigurowanych serwerów MCP', insights_model_health_title: 'Porównanie kondycji modeli', insights_model_health_provider: 'Dostawca', insights_model_health_replacement: 'Przewodnik zastąpienia', insights_model_health_cost_per_m: 'Koszt / 1 mln', btw_asking: 'Zadawanie pytania pobocznego…', btw_label: 'Pytanie poboczne — poza historią', btw_done: 'Odpowiedziano na pytanie poboczne', btw_no_answer: 'Nie otrzymano odpowiedzi.', btw_failed: 'Pytanie poboczne nie powiodło się: ', bg_running: 'Uruchamianie w tle…', bg_complete: 'Zadanie w tle ukończone', bg_label: 'Wynik z tła:', bg_no_answer: '(brak odpowiedzi)', bg_failed: 'Zadanie w tle nie powiodło się: ', undo_exchange: 'Cofnij ostatnią wymianę', cmd_status: 'Pokaż informacje o sesji', cmd_voice: 'Przełącz wejście mikrofonu', stream_stopped: 'Generowanie odpowiedzi zatrzymane.', no_active_task: 'Brak aktywnego zadania do zatrzymania.', cancel_unavailable: 'Anulowanie niedostępne.', retry_failed: 'Ponowna próba nie powiodła się: ', undo_failed: 'Cofanie nie powiodło się: ', undid_n_messages: 'Usunięto', undid_messages_suffix: 'wiadomość/wiadomości.', status_heading: 'Status sesji', status_session_id: 'ID sesji', status_title: 'Tytuł', status_model: 'Model', status_provider: 'Dostawca', status_workspace: 'Obszar roboczy', status_personality: 'Osobowość', status_messages: 'Wiadomości', status_agent_running: 'Agent jest uruchomiony', status_profile: 'Profil', status_hermes_home: 'Katalog domowy Hermes', status_started: 'Uruchomiono', status_updated: 'Zaktualizowano', status_tokens: 'Tokeny', status_ephemeral: 'Snapshot ulotny — niezapisywany w historii transkrypcji.', status_no_tokens: 'Nie użyto żadnych tokenów', status_unknown: 'Nieznany', status_yes: 'Tak', status_no: 'Nie', status_load_failed: 'Nie udało się załadować statusu: ', title_current: 'Bieżący tytuł', title_change_hint: 'Użyj `/title `, aby zmienić nazwę.', title_set: 'Tytuł ustawiony na', cmd_webui_only_session: 'To polecenie nie jest dostępne dla sesji zaimportowanych z CLI.', cmd_voice_use_mic: 'Kliknij przycisk mikrofonu w kompozytorze.', usage_heading: 'Zużycie tokenów', usage_default_model: 'domyślny', usage_unknown: 'nieznane', usage_input_tokens: 'Tokeny wejściowe', usage_output_tokens: 'Tokeny wyjściowe', usage_total: 'Tokeny łącznie', usage_estimated_cost: 'Szacowany koszt', usage_settings_tip: 'Uwaga: szacunki kosztów są przybliżone.', usage_load_failed: 'Nie udało się załadować zużycia: ', usage_personality_none: 'brak', // Session toolsets (#493) session_toolsets: 'Zestawy narzędzi sesji', session_toolsets_desc: 'Ogranicz dostępne narzędzia dla tej sesji (puste = użyj konfiguracji globalnej)', session_toolsets_global: 'Globalne (domyślne)', session_toolsets_custom: 'Niestandardowe', session_toolsets_placeholder: 'narzędzie1, narzędzie2, …', session_toolsets_apply: 'Zastosuj', session_toolsets_clear: 'Wyczyść (użyj globalnych)', session_toolsets_applied: 'Zaktualizowano zestawy narzędzi', session_toolsets_cleared: 'Wyczyszczono zestawy narzędzi — używanie konfiguracji globalnej', session_toolsets_failed: 'Nie udało się zaktualizować zestawów narzędzi: ', no_personalities: 'Nie znaleziono żadnych osobowości (dodaj je do ~/.hermes/personalities/)', available_personalities: 'Dostępne osobowości:', personality_switch_hint: '\n\nUżyj `/personality `, aby przełączyć, lub `/personality none`, aby wyczyścić.', personalities_load_failed: 'Nie udało się załadować osobowości', personality_cleared: 'Wyczyszczono osobowość', personality_set: 'Osobowość: ', failed_colon: 'Nie powiodło się: ', // ui.js no_workspace: 'Brak obszaru roboczego', terminal_open_title: 'Otwórz terminal obszaru roboczego', terminal_no_workspace_title: 'Wybierz obszar roboczy, aby otworzyć terminal', terminal_title: 'Terminal', terminal_clear: 'Wyczyść', terminal_copy_output: 'Kopiuj wyjście', terminal_restart: 'Uruchom ponownie', terminal_collapse: 'Zwiń', terminal_expand: 'Rozwiń', terminal_close: 'Zamknij', terminal_input_placeholder: 'Uruchom polecenie...', terminal_start_failed: 'Uruchomienie terminala nie powiodło się: ', terminal_input_failed: 'Wprowadzanie w terminalu nie powiodło się: ', terminal_copy_failed: 'Kopiowanie nie powiodło się: ', terminal_error: 'Błąd terminala', terminal_remote_backend_unsupported: 'Wbudowany terminal jest obsługiwany wyłącznie dla lokalnych terminali jako backend.', workspace_empty_no_path: 'Nie wybrano obszaru roboczego. Ustaw obszar roboczy w Ustawienia → Obszar roboczy, aby przeglądać pliki.', workspace_empty_dir: 'Ten obszar roboczy jest pusty.', workspace_show_hidden_files: 'Pokaż ukryte pliki', workspace_show_hidden_files_desc: 'Dołącz .DS_Store, .git, node_modules i inne ukryte/systemowe pliki w drzewie plików.', workspace_hidden_files_visible: 'ukryte widoczne', workspace_hidden_files_visible_title: 'Ukryte pliki są widoczne — kliknij, aby przejść do opcji', workspace_options: 'Opcje obszaru roboczego', dialog_confirm_title: 'Potwierdź działanie', dialog_prompt_title: 'Wpisz wartość', dialog_confirm_btn: 'Potwierdź', // workspace.js unsaved_confirm: 'Masz niezapisane zmiany w podglądzie. Odrzucić i nawigować dalej?', discard: 'Odrzuć', save: 'Zapisz', edit: 'Edytuj', clear: 'Wyczyść', create: 'Utwórz', remove: 'Usuń', save_title: 'Zapisz zmiany', edit_title: 'Edytuj ten plik', saved: 'Zapisano', save_failed: 'Zapisywanie nie powiodło się: ', image_load_failed: 'Nie można załadować obrazu', file_open_failed: 'Nie można otworzyć pliku', downloading: (name) => `Pobieranie ${name}…`, double_click_rename: 'Kliknij dwukrotnie, aby zmienić nazwę', symlink_link_to: 'Symlink → {target}', external_link_open_confirm: 'To dowiązanie symboliczne (symlink) wskazuje poza obszar roboczy. Czy chcesz je otworzyć w zewnętrznym widoku tylko do odczytu na czas tej sesji przeglądarki?', external_link_read_only: 'Ten zewnętrzny widok jest tylko do odczytu. Tworzenie, zmiana nazwy, przenoszenie, usuwanie, przesyłanie i akcje edytora pozostają tutaj wyłączone.', external_link_grant_expired: 'Ten zewnętrzny widok wygasł. Otwórz ponownie docelowe dowiązanie symboliczne (symlink), aby autoryzować go ponownie.', session_rename_failed_no_row: 'Nie można rozpocząć zmiany nazwy — nie znaleziono wiersza.', renamed_to: 'Nazwa zmieniona na ', rename_failed: 'Zmiana nazwy nie powiodła się: ', moved_to: 'Przeniesiono do ', move_failed: 'Przeniesienie nie powiodło się: ', delete_title: 'Usuń', delete_confirm: (name) => `Usunąć ${name}?`, delete_dir_confirm: (name) => `Usunąć folder "${name}" wraz z całą jego zawartością?`, rename_title: 'Zmień nazwę', rename_prompt: 'Nowa nazwa:', deleted: 'Usunięto ', delete_failed: 'Usuwanie nie powiodło się: ', reveal_in_finder: 'Pokaż w Menedżerze Plików', reveal_failed: 'Nie udało się pokazać: ', copy_file_path: 'Kopiuj ścieżkę pliku', open_in_vscode: 'Otwórz w VS Code', open_in_vscode_failed: 'Nie udało się otworzyć w VS Code: ', download_folder: 'Pobierz folder', path_copied: 'Ścieżka pliku została skopiowana do schowka', path_copy_failed: 'Nie udało się skopiować ścieżki: ', session_rename: 'Zmień nazwę konwersacji', session_rename_desc: 'Edytuj tytuł tej konwersacji', session_title_regenerate: 'Wygeneruj tytuł ponownie', session_title_regenerate_desc: 'Poproś Hermes o wygenerowanie nowego tytułu z konwersacji', session_title_regenerating: 'Ponowne generowanie tytułu…', session_title_regenerated: (title) => `Tytuł wygenerowany ponownie: ${title}`, session_title_regenerate_failed: 'Ponowne generowanie tytułu nie powiodło się: ', session_copy_link: 'Kopiuj link do konwersacji', session_copy_link_desc: 'Kopiuj bezpośredni link do tej konwersacji', session_link_copied: 'Link do konwersacji skopiowany do schowka', session_link_copy_failed: 'Nie udało się skopiować linku do konwersacji: ', new_file_prompt: 'Nazwa nowego pliku (np. notes.md):', new_file: 'Nowy plik', new_folder: 'Nowy folder', workspace_root: 'katalog główny obszaru roboczego', new_file_prompt_title: 'Nazwa nowego pliku w {0}:', new_folder_prompt_title: 'Nazwa nowego folderu w {0}:', project_name_prompt: 'Nazwa projektu:', created: 'Utworzono ', create_failed: 'Tworzenie nie powiodło się: ', new_folder_prompt: 'Nazwa nowego folderu:', folder_created: 'Utworzono folder ', folder_create_failed: 'Tworzenie folderu nie powiodło się: ', workspace_auto_create_folder: 'Utwórz folder, jeśli nie istnieje', folder_add_as_space_btn: 'Dodaj jako przestrzeń', folder_add_as_space_msg: 'Dodać ten folder jako nową przestrzeń w liście Twoich obszarów roboczych?', folder_add_as_space_title: 'Dodać jako przestrzeń?', remove_title: 'Usuń', empty_dir: '(pusty)', upload_failed: 'Przesyłanie nie powiodło się: ', upload_too_large: (maxMb, fileMb) => `Plik jest za duży (${fileMb} MB). Maksymalny rozmiar przesyłania to ${maxMb} MB.`, uploading: 'Przesyłanie…', uploaded: 'Przesłano', all_uploads_failed: (n) => `Wszystkie ${n} przesłane pliki nie powiodły się`, archive_extracted: (n, c) => `Wyodrębniono ${n} plików z ${c} archiwów`, session_pin: 'Przypnij konwersację', session_unpin: 'Odepnij konwersację', session_pin_desc: 'Zachowaj tę konwersację na samej górze', session_unpin_desc: 'Usuń z przypiętych', session_pin_failed: 'Przypinanie nie powiodło się: ', session_move_project: 'Przenieś do projektu', session_move_project_desc_has: 'Zmień projekt dla tej konwersacji', session_move_project_desc_none: 'Przypisz projekt do tej konwersacji', session_archive: 'Zarchiwizuj konwersację', session_hide_external: 'Ukryj z listy', session_restore: 'Przywróć konwersację', session_archive_desc: 'Ukryj tę konwersację, dopóki nie zostanie użyty filtr "Zarchiwizowane"', session_archive_worktree_desc: 'Ukryj tę konwersację; zachowaj jej worktree na dysku', session_hide_external_desc: 'Ukryj tę zaimportowaną sesję z WebUI bez usuwania oryginalnej historii źródłowej.', session_restore_desc: 'Przywróć tę konwersację z powrotem do głównej listy', session_archived: 'Konwersacja zarchiwizowana', session_archived_worktree: 'Konwersacja zarchiwizowana. Worktree pozostaje na dysku.', session_hidden: 'Konwersacja ukryta z listy', session_restored: 'Konwersacja przywrócona', session_archive_failed: 'Archiwizacja nie powiodła się: ', session_duplicate: 'Duplikuj konwersację', session_duplicate_desc: 'Utwórz kopię konwersacji z tym samym obszarem roboczym i modelem', session_export_html: 'Export as HTML', session_export_html_desc: 'Download this conversation as a self-contained HTML file', session_duplicated: 'Zduplikowano konwersację', session_duplicate_failed: 'Duplikowanie nie powiodło się: ', session_stop_response: 'Zatrzymaj odpowiedź', session_stop_response_desc: 'Anuluj uruchomioną generację odpowiedzi dla tej konwersacji', session_delete: 'Usuń konwersację', session_delete_desc: 'Trwale usuń tę konwersację', session_delete_confirm: 'Usunąć tę konwersację?', session_delete_worktree_desc: 'Usuń tylko konwersację z WebUI; zachowaj worktree na dysku', session_delete_worktree_confirm: (path) => `Usunąć tę konwersację? Worktree pod ścieżką ${path} pozostanie na dysku.`, session_deleted: 'Konwersacja usunięta', session_deleted_worktree: 'Konwersacja usunięta. Worktree pozostaje na dysku.', session_worktree_remove: 'Usuń worktree', session_worktree_remove_desc: (path) => `Usuń git worktree pod ścieżką ${path} z dysku`, session_worktree_remove_confirm: (path) => `Usunąć git worktree z dysku?\n\nŚcieżka: ${path}\n\nTo usunie cały katalog worktree. Dane sesji pozostaną w WebUI.`, session_worktree_remove_not_exists: (path) => `Worktree pod ścieżką ${path} już nie istnieje na dysku.`, session_worktree_remove_confirm_label: 'Usuń', session_worktree_removed: 'Usunięto worktree.', session_worktree_remove_failed: 'Nie udało się usunąć worktree: ', session_worktree_remove_status_failed: 'Nie udało się odczytać statusu worktree: ', session_worktree_remove_locked_by_stream: 'Nie można usunąć — aktywna sesja strumieniowania korzysta z tego worktree.', session_worktree_remove_locked_by_terminal: 'Nie można usunąć — aktywna sesja terminala korzysta z tego worktree.', session_worktree_remove_unsafe_blocked: 'Rozwiąż lokalne zmiany lub niewypchnięte commity przed usunięciem tego worktree.', session_worktree_remove_dirty_warning: 'OSTRZEŻENIE: To worktree zawiera niezatwierdzone zmiany, które zostaną utracone.', session_worktree_remove_untracked_warning: (count) => `${count} nieśledzonych plików zostanie trwale usuniętych.`, session_worktree_remove_ahead_warning: (ahead) => `${ahead} niewypchniętych commitów zostanie utraconych.`, session_select_mode: 'Wybierz', session_select_mode_desc: 'Zaznacz konwersacje, aby zarządzać nimi zbiorczo', session_select_all: 'Zaznacz wszystko', session_deselect_all: 'Odznacz wszystko', session_selected_count: '{0} zaznaczonych', session_batch_archive: 'Zarchiwizuj', session_batch_delete: 'Usuń', session_batch_move: 'Przenieś do projektu', session_batch_delete_confirm: 'Usunąć {0} konwersacji?', session_batch_archive_confirm: 'Zarchiwizować {0} konwersacji?', session_batch_delete_worktree_confirm: 'Usunąć {0} konwersacji? {1} konwersacji opartych o worktree pozostawi swoje katalogi worktree na dysku.', session_batch_archive_worktree_confirm: 'Zarchiwizować {0} konwersacji? {1} konwersacji opartych o worktree zachowa swoje katalogi worktree na dysku.', session_no_selection: 'Brak zaznaczonych konwersacji', // settings panel settings_heading_title: 'Centrum sterowania', settings_heading_subtitle: 'Preferencje, narzędzia konwersacji i sterowanie systemem.', settings_section_conversation_title: 'Konwersacja', settings_section_appearance_title: 'Wygląd', settings_section_appearance_meta: 'Motyw, akcenty kolorystyczne i styl wizualny.', settings_section_preferences_title: 'Preferencje', settings_section_preferences_meta: 'Domyślne ustawienia i zachowanie UI dla Hermes Web UI.', settings_section_system_title: 'System', settings_section_system_meta: 'Wersja instancji i kontrola dostępu.', settings_check_now: 'Sprawdź teraz', settings_checking: 'Sprawdzanie…', settings_up_to_date: 'Aktualny ✓', settings_updates_available: 'Dostępne aktualizacje ({count})', settings_updates_disabled: 'Sprawdzanie aktualizacji wyłączone', settings_update_check_failed: 'Sprawdzanie aktualizacji nie powiodło się', settings_update_no_git: 'Nie można sprawdzić aktualizacji (nie jest to klon git)', settings_label_workspace_panel_open: 'Zachowaj panel obszaru roboczego domyślnie otwarty', settings_desc_workspace_panel_open: 'Gdy ta opcja jest włączona, panel obszaru roboczego / przeglądarki plików otwiera się automatycznie przy każdej nowej sesji. Nadal możesz go zamknąć ręcznie w dowolnym momencie.', settings_label_session_jump_buttons: 'Pokaż przyciski skoku sesji', settings_desc_session_jump_buttons: 'Pokaż pływające przyciski Początek i Koniec podczas czytania długich historii sesji.', settings_label_terminal_auto_expand: 'Automatycznie rozwiń terminal przy wyjściu', settings_desc_terminal_auto_expand: 'Automatycznie rozwija zwinięty panel terminala, gdy uruchomione polecenie generuje nowe wyjście.', settings_label_session_endless_scroll: 'Ładuj starsze wiadomości podczas przewijania w górę', settings_desc_session_endless_scroll: 'Gdy ta opcja jest włączona, starsze wiadomości ładują się automatycznie przy przewijaniu w górę. Gdy jest wyłączona, użyj przycisku wczytywania starszych wiadomości.', settings_label_auto_scroll_follow: 'Automatycznie podążaj za nową treścią', settings_desc_auto_scroll_follow: 'Gdy włączone, widok przewija się na dół w miarę napływania nowych tokenów. Gdy wyłączone, sam kontrolujesz pozycję przewijania.', settings_label_render_user_markdown: 'Renderuj markdown w wiadomościach użytkownika', settings_label_show_titlebar_profile: 'Pokaż przełącznik profili na pasku tytułu', settings_desc_show_titlebar_profile: 'Gdy ta opcja jest włączona, w lewym górnym rogu paska tytułu aplikacji pojawia się przycisk przełącznika profili, umożliwiający zmianę profilu z dowolnej karty. Domyślnie wyłączone; stopka edytora zawsze zawiera przełącznik profili, niezależnie od tego ustawienia.', settings_desc_render_user_markdown: 'Gdy opcja jest włączona, tekst pogrubiony, pochylony, linki i inne elementy markdown w Twoich wiadomościach będą renderowane. Domyślnie wyłączone; bloki kodu i zapisy matematyczne są zawsze renderowane niezależnie od tego ustawienia.', settings_label_structured_code: 'Bloki kodu JSON/YAML', settings_option_structured_code_auto: 'Automatycznie: Widok drzewa dla długich bloków', settings_option_structured_code_on: 'Domyślnie widok drzewa', settings_option_structured_code_off: 'Domyślnie widok źródła', settings_label_structured_code_auto_lines: 'Próg wierszy dla trybu automatycznego', settings_desc_structured_code: 'Gdy wybrano tryb automatyczny, bloki JSON/YAML o długości przynajmniej podanej liczby wierszy zostaną otwarte w widoku drzewa. Widok drzewa zawsze otwiera strukturyzowaną przeglądarkę; widok źródła zachowuje podświetlony składniowo tekst. Nadal możesz przełączać tryby dla każdego bloku osobno.', settings_label_large_text_paste_as_attachment: 'Attach large pasted text as file', settings_desc_large_text_paste_as_attachment: 'When enabled, long pasted text becomes a .md attachment instead of filling the composer.', settings_label_project_quick_create: 'Show per-project new-conversation buttons', settings_desc_project_quick_create: 'When enabled, each project chip in the sidebar gets a + button to start a conversation in that project.', settings_label_worklog_details_expanded_default: 'Otwieraj szczegóły Worklog automatycznie', settings_desc_worklog_details_expanded_default: 'Gdy ta opcja jest włączona, nowe szczegóły Worklog zaczynają rozwinięte, dzięki czemu karty narzędzi, Thinking i postępu są widoczne bez dodatkowego kliknięcia. Gdy jest wyłączona, szczegóły Worklog pozostają domyślnie zwinięte. Ręczne decyzje o zwinięciu/rozwinięciu w danej turze mają pierwszeństwo.', settings_label_chat_activity_display_mode: 'Wyświetlanie aktywności', settings_desc_chat_activity_display_mode: 'Kompaktowy dziennik pracy grupuje aktywność wspierającą w dyskretne podsumowanie. Transparentny strumień zachowuje każde zdarzenie myślenia/narzędzia jako osobny chronologiczny wiersz z możliwością rozwinięcia.', first_token_time: 'Czas do pierwszego tokenu', processed_elapsed: _i18nProcessedElapsedPl, worklog_thinking: 'Myślenie', tool_target_skill_suffix: 'umiejętność', tool_action_label: _i18nToolActionLabelPl, tool_worklog_summary: _i18nToolWorklogSummaryPl, tool_summary_join: _i18nToolSummaryJoinPl, done: 'Gotowe', settings_option_compact_worklog: 'Kompaktowy dziennik pracy', settings_option_transparent_stream: 'Transparentny strumień', settings_label_tab_visibility: 'Karty paska bocznego', settings_desc_tab_visibility: 'Wybierz, które karty pojawiają się na pasku bocznym i szynie. Przeciągnij elementy, aby zmienić ich kolejność. Czat i Ustawienia są zawsze widoczne.', settings_label_composer_controls: 'Kontrolki stopki czatu', settings_desc_composer_controls: 'Przełączaj kontrolki wyświetlane w stopce czatu. Przeciągaj etykiety, aby zmieniać kolejność w każdej grupie stopki.', settings_label_composer_situational_controls: 'Sytuacyjne kontrolki stopki', settings_desc_composer_situational_controls: 'Te kontrolki nie zawsze się pojawiają, w zależności od obszaru roboczego, trybu lub stanu środowiska uruchomieniowego. Nadal możesz je wyłączyć, jeśli to konieczne.', composer_control_attach: 'Załącz', composer_control_saved_prompts: 'Zapisane prompty', composer_control_mic: 'Mikrofon', composer_control_profile: 'Profil', composer_control_workspace: 'Obszar roboczy', composer_control_model: 'Model', composer_control_reasoning: 'Rozumowanie', composer_control_context: 'Kontekst', composer_control_voice_mode: 'Tryb głosowy', composer_control_yolo: 'YOLO', composer_control_bg_badge: 'Odznaka w tle', composer_control_mobile_config: 'Konfiguracja mobilna', composer_control_quota_chip: 'Limit użycia', composer_control_toolsets: 'Zestawy narzędzi', composer_control_status: 'Status', open_in_browser: 'Otwórz w przeglądarce', settings_dropdown_conversation: 'Konwersacja', settings_dropdown_appearance: 'Wygląd', settings_dropdown_preferences: 'Preferencje', settings_dropdown_providers: 'Dostawcy', settings_dropdown_system: 'System', settings_tab_conversation: 'Konwersacja', settings_tab_appearance: 'Wygląd', settings_tab_preferences: 'Preferencje', settings_tab_plugins: 'Wtyczki', settings_tab_extensions: 'Rozszerzenia', settings_extensions_gallery_tab: 'Galeria', settings_extensions_installed_tab: 'Zainstalowane', settings_extensions_diagnostics_tab: 'Diagnostyka', settings_extensions_gallery_loading: 'Ładowanie galerii…', settings_extensions_gallery_empty: 'Nie znaleziono rozszerzeń w rejestrze.', settings_extensions_gallery_error: 'Nie udało się załadować galerii.', ext_gallery_install: 'Zainstaluj', ext_gallery_installing: 'Instalowanie…', ext_gallery_installed: 'Zainstalowane', ext_gallery_uninstall: 'Odinstaluj', ext_gallery_uninstalling: 'Odinstalowywanie…', ext_gallery_restart_required: 'Wymagany restart', ext_gallery_permissions_show: 'Uprawnienia', ext_gallery_permissions_hide: 'Ukryj uprawnienia', ext_gallery_permissions_empty: 'Nie zadeklarowano dodatkowych uprawnień.', ext_gallery_version: 'Wersja', ext_gallery_author: 'Autor', ext_gallery_capabilities: 'Możliwości', ext_gallery_next_step: 'Następny krok', ext_gallery_after_install: 'Po instalacji', ext_gallery_local_component_required: 'To rozszerzenie ma komponent lokalny. Po instalacji uruchom wymaganą aplikację lokalną lub sidecar.', ext_gallery_local_app_label: 'Aplikacja lokalna', ext_gallery_required_suffix: 'Wymagane: {0}', ext_gallery_sidecar_required: 'Wymagany sidecar', ext_gallery_native_host_required: 'Wymagany host natywny', ext_gallery_open_setup_guide: 'Otwórz przewodnik konfiguracji', ext_gallery_install_restart_required: 'Rozszerzenie zainstalowane. Do zastosowania wymagany jest restart.', ext_gallery_install_followup: 'Rozszerzenie zainstalowane. Sprawdź kartę, aby zobaczyć kolejne kroki.', ext_gallery_install_ok: 'Rozszerzenie zainstalowane pomyślnie.', ext_gallery_uninstall_ok: 'Rozszerzenie zostało odinstalowane.', settings_plugins_title: 'Wtyczki', plugins_enable_toggle: 'Włącz', settings_plugins_meta: 'Zobacz zainstalowane wtyczki Hermes oraz rejestrowane przez nie haki cyklu życia. Ten panel jest tylko do odczytu.', settings_plugins_empty: 'Żadne wtyczki Hermes nie są obecnie widoczne. Zainstaluj lub włącz wtyczki z poziomu CLI/konfiguracji Hermes, aby zobaczyć je tutaj.', plugins_unnamed: 'Nienazwana wtyczka', plugins_no_description: 'Brak opisu.', plugins_no_hooks: 'Brak zarejestrowanych haków cyklu życia', plugins_registered_hooks: 'Zarejestrowane haki', plugins_enabled: 'Włączone', plugins_disabled: 'Wyłączone', plugins_active_provider: 'Aktywny (dostawca)', plugins_provider_no_hooks: 'Wtyczka dostawcy — brak haków widocznych dla agenta', plugins_load_failed: 'Nie udało się załadować wtyczek: ', settings_tab_system: 'System', settings_tab_help: 'Pomoc', settings_help_meta: 'Zasoby i wsparcie dla Hermes WebUI.', settings_help_docs_label: 'Dokumentacja', settings_help_docs_desc: 'Przewodniki, dokumentacja konfiguracji i pełny plik README Hermes WebUI.', settings_help_docs_link: 'Otwórz dokumentację', settings_help_issue_label: 'Masz problem?', settings_help_issue_desc: 'Przeszukaj istniejące zgłoszenia lub utwórz nowe w serwisie GitHub.', settings_help_issue_link: 'Otwórz zgłoszenia GitHub', settings_title: 'Ustawienia', settings_search_placeholder: 'Szukaj ustawień…', settings_search_no_results: 'Nie znaleziono ustawień.', settings_save_btn: 'Zapisz ustawienia', settings_label_model: 'Domyślny model', settings_desc_model: 'Używany dla nowych konwersacji. Istniejące konwersacje zachowują swój wybrany model.', settings_label_auxiliary_models: 'Modele pomocnicze', settings_desc_auxiliary_models: 'Pomocnicze trasowanie zadań dla wizji, kompresji, generowania tytułów itp. „Auto” używa Twojego głównego modelu czatu.', settings_btn_reset_aux_models: 'Resetuj wszystko do auto', settings_btn_apply_aux_models: 'Zastosuj zmiany', settings_aux_provider_auto: 'używaj głównego modelu', settings_aux_model_auto: 'auto (użyj domyślnego dla dostawcy)', settings_aux_model_custom: 'Niestandardowy model…', settings_aux_model_custom_prompt: 'Wpisz ID modelu:', settings_aux_loading: 'Ładowanie modeli pomocniczych…', settings_aux_load_failed: 'Nie można załadować ustawień modeli pomocniczych. Upewnij się, że API agenta jest dostępne.', settings_aux_reset_confirm_title: 'Resetować modele pomocnicze?', settings_aux_reset_confirm_msg: 'To ustawi wszystkie zadania pomocnicze na auto (użycie głównego modelu).', settings_aux_reset_done: 'Modele pomocnicze zresetowane do auto', settings_aux_save_failed: 'Nie udało się zapisać modelu pomocniczego', settings_aux_saved: 'Zaktualizowano modele pomocnicze', settings_aux_no_changes: 'Brak zmian do zastosowania', settings_aux_task_vision: 'Analiza obrazu', settings_aux_task_vision_desc: 'analiza obrazów/zrzutów ekranu', settings_aux_task_compression: 'Kompresja', settings_aux_task_compression_desc: 'streszczanie kontekstu', settings_aux_task_web_extract: 'Ekstrakcja treści z sieci', settings_aux_task_web_extract_desc: 'streszczanie stron internetowych', settings_aux_task_session_search: 'Wyszukiwanie sesji', settings_aux_task_session_search_desc: 'przywoływanie minionych konwersacji', settings_aux_task_approval: 'Zatwierdzanie', settings_aux_task_approval_desc: 'inteligentne zatwierdzanie poleceń', settings_aux_task_mcp: 'MCP', settings_aux_task_mcp_desc: 'rozumowanie narzędzi MCP', settings_aux_task_title_generation: 'Generowanie tytułów', settings_aux_task_title_generation_desc: 'tytuły sesji', settings_aux_task_skills_hub: 'Centrum umiejętności', settings_aux_task_skills_hub_desc: 'wyszukiwanie/instalowanie umiejętności', settings_aux_task_curator: 'Kurator', settings_aux_task_curator_desc: 'przegląd użycia umiejętności', settings_aux_task_kanban_decomposer: 'Dekompozytor Kanban', settings_aux_task_kanban_decomposer_desc: 'dekompozycja zadań', settings_aux_task_profile_describer: 'Opisywanie profili', settings_aux_task_profile_describer_desc: 'podsumowania profili', settings_aux_task_triage_specifier: 'Klasyfikator zadań', settings_aux_task_triage_specifier_desc: 'specyfikacje klasyfikacji problemów/zadań', settings_main_advanced_button_aria: 'Zaawansowane opcje dla głównego modelu', settings_main_advanced_title: 'Opcje głównego modelu', settings_main_advanced_subtitle: 'Zaawansowana konfiguracja dla domyślnego modelu czatu.', settings_main_advanced_saved: 'Zapisano opcje głównego modelu', settings_main_advanced_save_failed: 'Nie udało się zapisać opcji głównego modelu', settings_main_advanced_service_tier: 'Poziom usługi (service tier)', settings_main_advanced_service_tier_desc: 'Opcjonalne ustawienie żądania dla dostawców z rodziny OpenAI.', settings_main_advanced_service_tier_default: 'Domyślny / wyłączony', settings_main_advanced_service_tier_priority: 'Priorytetowy (szybki)', settings_aux_advanced_button_title: 'Zaawansowane opcje', settings_aux_advanced_button_aria: 'Zaawansowane opcje dla {task}', settings_aux_advanced_title: '{task} — opcje', settings_aux_advanced_subtitle: 'Zaawansowana konfiguracja dla funkcji pomocniczych.', settings_aux_advanced_save: 'Zapisz opcje', settings_aux_advanced_base_url: 'Bazowy adres URL', settings_aux_advanced_base_url_desc: 'Opcjonalne nadpisanie punktu końcowego dostawcy.', settings_aux_advanced_timeout: 'Limit czasu w sekundach', settings_aux_advanced_timeout_desc: 'Limit czasu żądania dla tego zadania pomocniczego. Puste pole oznacza użycie domyślnej wartości Hermes.', settings_aux_advanced_download_timeout: 'Limit czasu pobierania w sekundach', settings_aux_advanced_download_timeout_desc: 'Ma zastosowanie tylko do zadań pobierających media/zawartość, np. analizy obrazu. Puste pole oznacza użycie wartości domyślnej.', settings_aux_advanced_max_concurrency: 'Maksymalna współbieżność', settings_aux_advanced_max_concurrency_desc: 'Opcjonalny limit współbieżności dla zadania. Puste pole oznacza użycie wartości domyślnej.', settings_aux_advanced_extra_body: 'Dodatkowa treść (JSON) żądania', settings_aux_advanced_extra_body_desc: 'Opcjonalny obiekt JSON scalany z treścią żądania do modelu.', settings_aux_advanced_api_key: 'Nadpisanie klucza API', settings_aux_advanced_api_key_set_hint: 'Klucz API jest ustawiony. Pozostaw puste, aby go zachować, lub wyczyść, aby go usunąć.', settings_aux_advanced_api_key_empty_hint: 'Pozostaw puste, aby użyć poświadczeń dostawcy/domyślnych.', settings_aux_advanced_api_key_clear: 'Wyczyść istniejące nadpisanie klucza API', settings_aux_advanced_extra_body_invalid_json: 'Dodatkowa treść musi być poprawnym kodem JSON', settings_aux_advanced_extra_body_object_required: 'Dodatkowa treść musi być obiektem JSON', settings_aux_advanced_saved: 'Zapisano opcje pomocnicze', settings_aux_advanced_save_failed: 'Nie udało się zapisać opcji pomocniczych', settings_label_send_key: 'Klawisz wysyłania', settings_label_theme: 'Motyw', settings_label_skin: 'Skórka', settings_label_font_size: 'Rozmiar czcionki', font_size_small: 'Mała', font_size_default: 'Domyślna', font_size_large: 'Duża', font_size_xlarge: 'Bardzo duża', settings_autosave_saving: 'Zapisywanie…', settings_autosave_saved: 'Zapisano', settings_autosave_failed: 'Zapisywanie nie powiodło się', settings_autosave_retry: 'Ponów próbę', settings_label_language: 'Język', settings_label_quota_chip: 'Pokaż wskaźnik limitu dostawcy w polu wprowadzania', settings_desc_quota_chip: 'Wyświetla subtelny wskaźnik pozostałego limitu (np. saldo kredytów OpenRouter) w stopce pola wprowadzania. Domyślnie wyłączone. Widoczne tylko na szerokich ekranach (≥1400px), aby utrzymać pole wprowadzania czytelnym na laptopach i standardowych monitorach.', settings_label_conversation_outline: 'Pokaż zarys konwersacji', settings_desc_conversation_outline: 'Pokazuje desktopową listę skrótów do pytań użytkownika w bieżącej konwersacji. Domyślnie wyłączone.', settings_label_hide_suggestions: 'Ukryj sugestie nowej konwersacji', settings_desc_hide_suggestions: 'Ukryj trzy domyślne przyciski sugestii na pustym ekranie nowej konwersacji, aby zapobiec przypadkowym kliknięciom.', settings_label_virtualize_transcript: 'Wirtualizuj długie transkrypcje', settings_desc_virtualize_transcript: "Renderuj tylko widoczną część bardzo długich zapisów czatu (ponad 80 wiadomości) dla płynniejszego przewijania. Wyłącz to, jeśli zauważysz jakiekolwiek problemy z renderowaniem lub przewijaniem, lub chcesz, aby wyszukiwanie w przeglądarce (Ctrl+F) obejmowało całą konwersację \u2014 pełny zapis wyrenderuje się od razu.", settings_label_token_usage: 'Pokaż zużycie tokenów', settings_label_token_speed: 'Pokaż prędkość tokenów (TPS)', settings_desc_token_speed: 'Wyświetla tokeny na sekundę w nagłówkach wiadomości asystenta podczas strumieniowania i po zakończeniu odpowiedzi. Domyślnie wyłączone.', settings_label_sidebar_density: 'Gęstość paska bocznego', cmd_reasoning: 'Przełącz widoczność myślenia (pokaż/ukryj), ustaw poziom wysiłku lub sprawdź bieżący status', settings_label_external_sessions: 'Pokaż sesje inne niż WebUI', settings_label_claude_code_sessions: 'Show Claude Code sessions', settings_label_cron_sessions: 'Pokaż sesje cron', settings_label_webhook_sessions: 'Pokaż sesje webhooków', settings_label_previous_messaging_sessions: 'Pokaż poprzednie sesje komunikatorów', settings_label_sync_insights: 'Synchronizuj z Insights', settings_label_check_updates: 'Sprawdzaj aktualizacje', settings_label_ignore_agent_updates: 'Ignoruj aktualizacje agenta', settings_label_whats_new_summary: 'Podsumuj Co Nowego za pomocą AI', settings_label_bot_name: 'Domyślna nazwa asystenta', settings_label_password: 'Hasło dostępu', settings_label_pinned_limit: 'Limit przypiętych rozmów', settings_desc_pinned_limit: 'Maksymalna liczba aktywnych rozmów, które można przypiąć na pasku bocznym. Domyślnie 3.', settings_label_dashboard_mode: 'Oficjalny panel Hermes', settings_desc_dashboard_mode: 'Pokaż link na pasku nawigacyjnym, gdy oficjalny panel hermes jest osiągalny. Publiczne adresy URL reverse proxy są przechowywane wyłącznie jako linki w przeglądarce i nigdy nie są sondowane przez serwer.', settings_dashboard_mode_auto: 'Wykryj automatycznie', settings_dashboard_mode_always: 'Zawsze pokazuj', settings_dashboard_mode_never: 'Nigdy nie pokazuj', settings_dashboard_save: 'Zapisz ustawienia linku panelu', settings_label_gateway_status: 'Status bramy', settings_desc_gateway_status: 'Status bramy Hermes (Telegram, Discord, Slack itp.)', gateway_not_configured: 'Brama nie jest skonfigurowana', gateway_metadata_stale: 'Metadane bramy są nieaktualne', gateway_endpoint_unreachable: 'Punkt końcowy bramy jest nieosiągalny', gateway_not_running: 'Brama nie działa', gateway_running_label: 'Działa', gateway_last_active: 'Ostatnia aktywność: ', gateway_session_count: (n) => `${n} ${n === 1 ? 'sesja' : (n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20)) ? 'sesje' : 'sesji'}`, gateway_load_failed: 'Nie udało się załadować statusu bramy', settings_saved: 'Zapisano ustawienia', settings_save_failed: 'Zapisywanie nie powiodło się: ', settings_load_failed: 'Nie udało się załadować ustawień: ', settings_saved_pw: 'Zapisano ustawienia — ochrona hasłem włączona, ta przeglądarka pozostanie zalogowana', settings_saved_pw_updated: 'Zapisano ustawienia — hasło zaktualizowane', // login page (used server-side via /api/i18n/login endpoint) login_title: 'Zaloguj się', login_subtitle: 'Wpisz hasło, aby kontynuować', login_placeholder: 'Hasło', login_btn: 'Zaloguj się', login_invalid_pw: 'Nieprawidłowe hasło', login_conn_failed: 'Połączenie nie powiodło się', // Sidebar & Tabs tab_chat: 'Czat', tab_tasks: 'Zadania', tab_skills: 'Umiejętności', tab_memory: 'Pamięć', tab_workspaces: 'Przestrzenie', tab_profiles: 'Profile', tab_kanban: 'Kanban', kanban_board: 'Tablica', kanban_visible_tasks: '{0} widocznych zadań', kanban_search_tasks: 'Szukaj zadań', kanban_all_assignees: 'Wszyscy przypisani', kanban_all_tenants: 'Wszyscy dzierżawcy', kanban_include_archived: 'Uwzględnij zarchiwizowane', kanban_no_matching_tasks: 'Brak pasujących zadań', kanban_no_data: 'Brak danych Kanban', kanban_work_queue_hint: 'To jest kolejka pracy Agenta Hermes. Utwórz zadanie lub dokonaj triażu, przypisz je, przenieś do statusu "Gotowe", a następnie pozwól dyspozytorowi je pobrać.', kanban_tasks_hidden_by_filters: 'Zadania ukryte przez filtry', kanban_clear_filters: 'Wyczyść filtry', kanban_unavailable: 'Kanban niedostępny', kanban_read_only: 'Widok tylko do odczytu', kanban_empty: 'Puste', kanban_task: 'Zadanie', kanban_no_description: 'Brak opisu', kanban_refresh: 'Odśwież', kanban_status_triage: 'Do weryfikacji (Triage)', kanban_status_todo: 'Do zrobienia', kanban_status_ready: 'Gotowe', kanban_status_running: 'Uruchomione', kanban_status_blocked: 'Zablokowane', kanban_status_done: 'Zrobione', kanban_comments_count: 'Komentarze ({0})', kanban_events_count: 'Zdarzenia ({0})', kanban_links: 'Linki', kanban_parents: 'Nadrzędne (rodzice)', kanban_children: 'Podrzędne (dzieci)', kanban_runs_count: 'Uruchomienia ({0})', kanban_no_comments: 'Brak komentarzy', kanban_no_events: 'Brak zdarzeń', kanban_no_runs: 'Brak uruchomień', kanban_title: 'Tytuł', kanban_description: 'Opis', kanban_description_placeholder: 'Opcjonalnie — co musi się wydarzyć, kryteria akceptacji, linki', kanban_status: 'Status', kanban_assignee: 'Przypisana osoba', kanban_assignee_placeholder: 'Opcjonalnie — pozostaw puste dla dowolnego wykonawcy', kanban_tenant: 'Dzierżawca (projekt/zespół)', kanban_tenant_placeholder: 'Opcjonalnie — identyfikator projektu lub zespołu', kanban_priority: 'Priorytet', kanban_priority_hint: 'Wyższe liczby są uruchamiane jako pierwsze. Domyślnie 0.', kanban_title_required: 'Tytuł jest wymagany.', kanban_new_task: 'Nowe zadanie', kanban_view_lanes: 'Tory według profili', kanban_view_consolidated: 'Widok skonsolidowany', kanban_view_lanes_saved: 'Widok Kanban: tory według profili', kanban_view_consolidated_saved: 'Widok Kanban: skonsolidowany', kanban_view_update_failed: 'Nie udało się zaktualizować widoku Kanban: ', kanban_edit_task: 'Edytuj zadanie', kanban_status_original_hint: 'Rzeczywisty status: {0}. To okno dialogowe obsługuje wyłącznie edycję dla "Do weryfikacji" / "Do zrobienia" / "Gotowe".', kanban_run_dispatcher: 'Uruchom dyspozytora', kanban_run_dispatcher_confirm: 'Spowoduje to przypisanie zadań o statusie "Gotowe" na tej tablicy i uruchomienie procesów pomocniczych (jeden na zadanie, do 8 na kliknięcie). Kontynuować?', kanban_assignee_profiles_label: 'Profile Hermes', kanban_assignee_other_label: 'Inne (ścieżki CLI / usunięte profile)', kanban_assignee_unassigned: '— Nieprzypisane (nie uruchomi się automatycznie) —', kanban_ready_needs_assignee: 'Wybrano "Nieprzypisane" + "Gotowe". Dyspozytor pominie to zadanie. Wyślij ponownie, aby potwierdzić, lub wybierz profil.', kanban_dispatch_preview_prefix: 'Podgląd:', kanban_dispatch_run_prefix: 'Wysłano:', kanban_dispatch_spawned: 'uruchomiono', kanban_dispatch_promoted: 'awansowano', kanban_dispatch_reclaimed: 'odzyskane', kanban_dispatch_skipped_unassigned: 'pominięto (brak przypisanego)', kanban_dispatch_skipped_nonspawnable: 'pominięto (nieznany profil)', kanban_dispatch_auto_blocked: 'automatycznie zablokowane', kanban_dispatch_timed_out: 'przekroczono limit czasu', kanban_dispatch_crashed: 'awaria', kanban_add_comment: 'Dodaj komentarz', kanban_workspace_kind: 'Rodzaj obszaru roboczego', kanban_workspace_path: 'Ścieżka obszaru roboczego', kanban_workspace_path_placeholder: 'Ścieżka do obszaru roboczego', kanban_workspace_scratch: 'Scratch (tymczasowy)', kanban_workspace_worktree: 'Worktree', kanban_workspace_dir: 'Katalog', kanban_workspace_path_required: 'Ścieżka do obszaru roboczego jest wymagana dla obszarów innych niż tymczasowe (scratch).', kanban_skills: 'Skills', kanban_skills_placeholder: 'Comma-separated skill names, e.g. python,git', kanban_max_runtime_seconds: 'Max runtime (seconds)', kanban_max_runtime_hint: 'Leave empty for unlimited.', kanban_max_runtime_invalid: 'Max runtime must be a whole number of seconds greater than 0.', kanban_parents_modal: 'Parent dependencies', kanban_parents_placeholder: 'Parent task ID', kanban_add_dependency: 'Dodaj zależność', kanban_remove_dependency: 'Usuń zależność', kanban_dependency_placeholder: 'Identyfikator zadania do powiązania', kanban_dependency_self: 'Zadanie nie może zależeć od samego siebie', kanban_only_mine: 'Tylko moje', kanban_bulk_action: 'Działanie zbiorcze', kanban_nudge_dispatcher: 'Podgląd dyspozytora', kanban_stats: 'Statystyki', kanban_worker_log: 'Log wykonawcy', kanban_block: 'Zablokuj', kanban_unblock: 'Odblokuj', kanban_back_to_board: 'Powrót do tablicy', kanban_lanes_by_profile: 'Tory według profili', kanban_new_board: 'Nowa tablica…', kanban_rename_board: 'Zmień nazwę bieżącej tablicy…', kanban_archive_board: 'Zarchiwizuj bieżącą tablicę…', kanban_archive_board_confirm: 'Zarchiwizować tablicę "{name}"? Zadania pozostaną na dysku, a tablica może zostać przywrócona z kanban/boards/_archived/.', kanban_board_archived: 'Tablica zarchiwizowana', kanban_board_name: 'Nazwa', kanban_board_slug: 'Identyfikator (małe litery, myślniki)', kanban_board_description: 'Opis (opcjonalnie)', kanban_board_icon: 'Ikona (emoji, opcjonalnie)', kanban_board_color: 'Kolor (opcjonalnie)', kanban_board_name_required: 'Nazwa jest wymagana', kanban_board_slug_required: 'Identyfikator (slug) jest wymagany', kanban_card_complete: 'ukończone', kanban_card_archive: 'archiwizuj', kanban_unassigned: 'nieprzypisane', kanban_status_archived: 'Zarchiwizowane', tab_todos: 'Lista zadań', tab_insights: 'Statystyki', tab_dashboard: 'Pulpit nawigacyjny Hermes', dashboard_loopback_warning: 'Pulpit nawigacyjny na serwerze jest dostępny wyłącznie lokalnie (loopback). Przeglądaj bezpośrednio z serwera lub uruchom go ponownie z flagą --host 0.0.0.0 (niebezpieczne).', tab_logs: 'Logi', tab_settings: 'Ustawienia', close_menu: 'Zamknij menu', new_conversation: 'Nowa konwersacja', filter_conversations: 'Filtruj konwersacje...', markdown_table_filter: 'Filtruj tabelę', markdown_table_sort_column: 'Sortuj kolumnę', session_time_unknown: 'Nieznany', session_time_minutes_ago: (n) => `${n} min temu`, session_time_hours_ago: (n) => `${n} godz. temu`, session_time_days_ago: (n) => `${n} dni temu`, session_time_last_week: '1 tydz. temu', session_time_bucket_today: 'Dzisiaj', session_time_bucket_yesterday: 'Wczoraj', session_time_bucket_this_week: 'W tym tygodniu', session_time_bucket_last_week: 'W zeszłym tygodniu', session_time_bucket_older: 'Starsze', scheduled_jobs: 'Zaplanowane zadania', new_job: 'Nowe zadanie', loading: 'Ładowanie...', search_skills: 'Szukaj umiejętności...', new_skill: 'Nowa umiejętność', personal_memory: 'Pamięć osobista', current_task_list: 'Bieżąca lista zadań', // Logs logs_title: 'Logi', logs_file: 'Plik', logs_tail: 'Śledzenie końcówki', logs_auto_refresh: 'Automatyczne odświeżanie (5s)', logs_wrap: 'Zawijaj wiersze', logs_copy_all: 'Kopiuj wszystko', logs_empty: 'Brak wpisów w logach.', logs_loading: 'Ładowanie logów…', logs_load_failed: 'Nie udało się załadować logów', logs_status_idle: 'Wybierz plik logów, aby wyświetlić najnowsze wiersze.', logs_no_mtime: 'jeszcze nie zapisano', logs_truncated_hint: 'Wyświetlanie końcówki dużego pliku logów; starsze bajty zostały pominięte, aby ograniczyć zużycie pamięci.', logs_copied: 'Logi skopiowane', logs_severity: 'Poziom ważności', logs_severity_all: 'Wszystkie', logs_severity_errors: 'Błędy', logs_severity_warnings: 'Ostrzeżenia+', logs_filter_active: 'wyświetlane (filtr aktywny)', // Insights insights_title: 'Analityka zużycia', insights_sessions: 'Sesje', insights_messages: 'Wiadomości', insights_tokens: 'Tokeny', insights_cost: 'Szacowany koszt', insights_no_cost: 'Niedostępne', insights_models: 'Modele', insights_activity_by_day: 'Aktywność według dni', insights_activity_by_hour: 'Aktywność według godzin', insights_peak_hour: 'Szczyt: {hour}', insights_token_breakdown: 'Podział tokenów', insights_input_tokens: 'Wejście', insights_output_tokens: 'Wyjście', insights_total: 'Łącznie', insights_daily_tokens: 'Tokeny dziennie', insights_model_name: 'Model', insights_model_sessions: 'Sesje', insights_model_tokens: 'Tokeny', insights_model_cost: 'Koszt', insights_model_cache: 'Pamięć podręczna', insights_cache_hit: 'Współczynnik trafień pamięci podręcznej promptów', insights_model_share: 'Udział', insights_no_usage_data: 'Brak danych o zużyciu', insights_footer: 'Wyświetlanie danych z ostatnich {days} dni', insights_skill_usage_title: 'Użycie umiejętności', insights_skill_usage_sub: 'Częstotliwość wywołań narzędzi', insights_skill_usage_total: 'Wszystkie wywołania', insights_skill_usage_skills_used: 'Użyte umiejętności', insights_skill_usage_no_data: 'Brak danych o użyciu umiejętności', insights_skill_usage_no_data_hint: 'Umiejętności pojawią się tutaj, gdy zostaną użyte w konwersacjach.', insights_skill_usage_footer: 'Liczba wywołań z katalogu ~/.hermes/skills/', insights_skill_usage_col_skill: 'Umiejętność', insights_skill_usage_col_uses: 'Wywołania', insights_skill_usage_col_views: 'Wyświetlenia', insights_skill_usage_col_share: 'Użycie %', insights_skill_usage_col_patches: 'Poprawki', workspace_desc: 'Dodawaj i przełączaj obszary robocze dla swoich sesji.', session_meta_messages: (n) => n === 1 ? '1 wiadomość' : `${n} wiadomości`, session_meta_children: (n) => n === 1 ? '1 podrzędna' : `${n} podrzędne`, session_meta_segments: (n) => n === 1 ? '1 wcześniejsza tura' : `${n} wcześniejszych tur`, session_lineage_toggle_hint: '{0} — wcześniejsze tury kontekstu są tutaj zwinięte. Kliknij, aby je pokazać lub ukryć.', session_lineage_static_hint: '{0} — wcześniejsze tury kontekstu są tutaj zwinięte.', session_child_toggle_hint: '{0} — konwersacje podrzędne wygenerowane z tej sesji. Kliknij, aby je pokazać lub ukryć.', session_readonly_title_hint: 'Zaimportowana sesja tylko do odczytu — {0}', session_lineage_segment_untitled: 'Nienazwany segment', session_lineage_segment_open: 'Otwórz segment genealogii', new_profile: 'Nowy profil', transcript: 'Transkrypcja', download_transcript: 'Pobierz jako Markdown', import: 'Importuj', export_session_json: 'JSON', export_session_json_tooltip: 'Eksportuj pełną sesję jako JSON', export_session_html: 'HTML', export_session_html_tooltip: 'Eksportuj jako samodzielną stronę HTML', import_session_json_tooltip: 'Importuj sesję z pliku JSON', clear_conversation_btn_tooltip: 'Wyczyść wszystkie wiadomości w tej konwersacji', // Settings detail settings_label_rtl: 'Układ czatu od prawej do lewej', settings_desc_rtl: 'Odwraca wyrównanie wiadomości czatu i pola wprowadzania dla języków takich jak arabski czy hebrajski. Wpływa tylko na obszar czatu — pasek boczny i inne panele pozostają wyrównane od lewej do prawej.', settings_label_sound: 'Dźwięk powiadomienia', settings_desc_sound: 'Odtwórz dźwięk, gdy asystent zakończy generowanie odpowiedzi.', // TTS (#499) tts_listen: 'Słuchaj', tts_not_supported: 'Synteza mowy nie jest obsługiwana w tej przeglądarce.', settings_label_tts: 'Zamiana tekstu na mowę (TTS) dla odpowiedzi', settings_desc_tts: 'Pokaż przycisk głośnika przy każdej wiadomości asystenta, aby przeczytać ją na głos przy użyciu syntezy mowy w przeglądarce.', settings_label_tts_auto_read: 'Czytaj automatycznie odpowiedzi na głos', settings_desc_tts_auto_read: 'Automatycznie odczytuj każdą nową odpowiedź asystenta po jej zakończeniu. Pauzuje podczas pisania.', // Composer voice-mode pref (#1488) settings_label_voice_mode: 'Przycisk trybu głosowego głośnomówiącego', settings_desc_voice_mode: 'Pokaż przycisk trybu głosowego (fala dźwiękowa) obok mikrofonu dyktowania. Pozwala mówić naturalnie — Hermes automatycznie wysyła wiadomość po pauzie i czyta odpowiedzi na głos. Wymaga przeglądarki obsługującej zarówno rozpoznawanie mowy, jak i TTS.', settings_label_raw_audio: 'Wyślij surowy dźwięk zamiast transkrypcji', settings_desc_raw_audio: 'Nagraj i wyślij oryginalny plik audio do agenta, zamiast najpierw konwertować go na tekst. Agent może go wtedy transkrybować lub przetwarzać surowe audio (emocje, szum tła, własny STT). Podobnie jak wiadomości głosowe w Telegramie.', voice_send_raw: 'Wyślij surowe audio', voice_raw_attached: 'Dołączono dźwięk. Naciśnij Wyślij lub wpisz więcej tekstu.', settings_label_tts_voice: 'Głos', settings_desc_tts_voice: 'Preferowany głos. Pobierany z dostępnych głosów w Twojej przeglądarce.', settings_label_tts_rate: 'Tempo mowy', settings_label_tts_pitch: 'Ton mowy', settings_label_tts_engine: 'Silnik TTS', settings_desc_tts_engine: 'Wybierz silnik mowy. Edge TTS korzysta z głosów neuronowych Microsoft za pośrednictwem serwera.', settings_label_notifications: 'Powiadomienia przeglądarki', settings_desc_notifications: 'Pokaż powiadomienie systemowe, gdy odpowiedź zostanie ukończona, podczas gdy aplikacja działa w tle.', notifications_enable_btn: 'Włącz powiadomienia', notifications_test_btn: 'Wyślij test', notifications_permission_status: (status) => `Uprawnienie: ${status}`, notifications_enabled_toast: 'Powiadomienia włączone.', notifications_denied: 'Powiadomienia są zablokowane w tej przeglądarce. Włącz je w ustawieniach przeglądarki.', notifications_unsupported: 'Powiadomienia nie są obsługiwane w tej przeglądarce.', settings_desc_token_usage: 'Wyświetla liczbę tokenów wejściowych/wyjściowych pod każdą odpowiedzią asystenta. Można też przełączyć za pomocą /usage.', settings_label_api_redact: 'Ukrywaj poufne dane w odpowiedziach API', settings_desc_api_redact: 'Użytkownicy korzystający z hostingu własnego mogą wyłączyć to dla przejrzystości (niezalecane dla współdzielonych instancji).', settings_label_workspace_todos_tab: 'Pokaż kartę Todos w panelu obszaru roboczego', settings_desc_workspace_todos_tab: 'Po włączeniu w panelu obszaru roboczego pojawi się karta Todos. Panel Todos na pasku bocznym pozostaje dostępny.', outline_title: 'Zarys', outline_empty: 'Nie ma jeszcze pytań.', outline_loading: 'Ładowanie…', wiki_browse: 'Przeglądaj wiki', wiki_search_placeholder: 'Szukaj stron...', wiki_no_pages: 'Nie znaleziono stron wiki', wiki_not_configured: 'Wiki nie jest skonfigurowane', settings_sidebar_density_compact: 'Kompaktowa', settings_sidebar_density_detailed: 'Szczegółowa', settings_desc_sidebar_density: 'Kontroluje, ile metadanych wyświetla lista sesji na lewym pasku bocznym.', settings_label_auto_title_refresh: 'Adaptacyjne odświeżanie tytułu', settings_auto_title_refresh_off: 'Wyłączone', settings_auto_title_refresh_5: 'Co 5 wymian', settings_auto_title_refresh_10: 'Co 10 wymian', settings_auto_title_refresh_20: 'Co 20 wymian', settings_desc_auto_title_refresh: 'Automatycznie generuje na nowo tytuł konwersacji na podstawie najnowszej wymiany, utrzymując go adekwatnym w miarę rozwoju rozmowy. Wymaga skonfigurowanego modelu LLM do generowania tytułów.', settings_desc_external_sessions: 'Pokaż konwersacje z CLI, Telegrama, Discorda, Slacka i innych kanałów na liście sesji. Kliknij, aby zaimportować i kontynuować.', settings_desc_claude_code_sessions: 'Show Claude Code imported sessions in the sidebar, or hide them while leaving other external sessions visible.', settings_desc_cron_sessions: 'Wyświetlaj wyjście zadań cron jako konwersacje na pasku bocznym. Aktywne tylko wtedy, gdy włączone są sesje spoza WebUI. Domyślnie wyłączone; zadania o wysokiej częstotliwości mogą zalać pasek boczny.', settings_desc_webhook_sessions: 'Wyświetlaj uruchomienia webhooków jako konwersacje na pasku bocznym. Aktywne tylko wtedy, gdy włączone są sesje spoza WebUI. Domyślnie wyłączone; trasy o dużym natężeniu mogą zalać pasek boczny.', settings_desc_previous_messaging_sessions: 'Pokaż starsze sesje z Discorda, Telegrama, Slacka i Weixin, które zostały zastąpione przez reset lub kompresję.', settings_desc_sync_insights: 'Odzwierciedla zużycie tokenów WebUI w state.db, dzięki czemu hermes /insights uwzględnia dane sesji przeglądarki. Domyślnie wyłączone.', settings_desc_check_updates: 'Pokaż baner, gdy dostępne są nowsze wersje WebUI lub Agenta. Okresowo uruchamia pobieranie git fetch w tle.', settings_desc_ignore_agent_updates: 'Zachowaj sprawdzanie aktualizacji WebUI, ale ukrywaj powiadomienia o aktualizacjach Agenta i pomijaj pobieranie aktualizacji Agenta.', settings_desc_whats_new_summary: "Zmienia działanie „Co nowego” z otwierania najpierw surowego diffa na generowanie krótkiego, czytelnego dla człowieka podsumowania przez AI. Zwykłe porównanie diff pozostaje dostępne po podsumowaniu.", settings_desc_bot_name: 'Używane tylko dla profilu domyślnego. Inne profile używają własnych nazw profilu.', settings_desc_password: 'Wpisz nowe hasło, aby je ustawić lub zmienić. Pozostaw puste, aby zachować obecne ustawienie.', password_placeholder: 'Wpisz nowe hasło…', password_env_var_locked: 'Zmienna środowiskowa HERMES_WEBUI_PASSWORD jest obecnie ustawiona i ma pierwszeństwo. Usuń ją i zrestartuj serwer, aby zarządzać hasłem stąd.', password_env_var_locked_placeholder: 'Zablokowane: zmienna HERMES_WEBUI_PASSWORD jest ustawiona', disable_auth: 'Wyłącz uwierzytelnianie', sign_out: 'Wyloguj się', settings_label_shutdown: 'Zatrzymaj serwer Hermes WebUI', settings_desc_shutdown_before_cmd: 'Bezpiecznie zatrzymuje lokalny serwer WebUI. Przydatne, jeśli uruchomiłeś go przez ', settings_desc_shutdown_between_cmds: ' i chcesz zatrzymać bez przełączania się do terminala. Będziesz musiał ponownie uruchomić serwer (', settings_desc_shutdown_after_cmd: ' lub aplikację natywną), zanim WebUI będzie ponownie osiągalny.', settings_btn_shutdown: 'Zatrzymaj serwer', settings_shutdown_confirm_title: 'Zatrzymaj Hermes WebUI', settings_shutdown_confirm_message: 'Zatrzymać serwer Hermes WebUI?', settings_shutdown_confirm_btn: 'Zatrzymaj', settings_shutdown_stopped_message: 'Serwer został zatrzymany. Możesz zamknąć tę kartę.', // Providers panel providers_tab_title: 'Dostawcy', providers_section_title: 'Dostawcy', providers_section_meta: 'Zarządzaj kluczami API dla dostawców AI. Zmiany wchodzą w życie natychmiast.', providers_status_configured: 'Klucz API skonfigurowany', providers_status_not_configured: 'Brak klucza API', providers_status_oauth: 'OAuth', providers_status_api_key: 'Klucz API', providers_status_model: 'Model', providers_status_not_configured_label: 'Nieskonfigurowany', providers_oauth_hint: 'Uwierzytelniono przez OAuth. Klucz API nie jest wymagany.', providers_oauth_config_yaml_hint: 'Token skonfigurowany w config.yaml. Aby zaktualizować, edytuj sekcję providers w config.yaml lub uruchom hermes auth.', providers_oauth_not_configured_hint: 'Brak uwierzytelnienia. Uruchom hermes auth w terminalu, aby skonfigurować tego dostawcę.', providers_save: 'Zapisz', providers_refresh_models: 'Odśwież modele', providers_refreshing: 'Odświeżanie…', providers_models_refreshed: 'Modele odświeżone', providers_remove: 'Usuń', providers_saving: 'Zapisywanie…', providers_removing: 'Usuwanie…', providers_enter_key: 'Wprowadź klucz API', providers_empty: 'Nie znaleziono konfigurowalnych dostawców.', providers_key_updated: 'Klucz API został zapisany', providers_key_removed: 'Klucz API został usunięty', providers_key_placeholder_new: 'sk-...', providers_key_placeholder_replace: 'Wprowadź nowy klucz, aby zastąpić…', provider_quota_title: 'Aktywna kwota dostawcy', provider_quota_active_provider: 'Aktywny dostawca', provider_quota_last_checked_after_refresh: 'Ostatnio sprawdzono po odświeżeniu', provider_quota_last_checked: 'Ostatnio sprawdzono {0}', provider_quota_refresh_usage: 'Odśwież zużycie', provider_quota_refreshing: 'Odświeżanie...', provider_quota_refresh_title: 'Odśwież limity zużycia dostawcy teraz', provider_quota_refresh_succeeded: 'Zużycie dostawcy odświeżone', provider_quota_refresh_failed: 'Odświeżenie zużycia dostawcy nie powiodło się', provider_quota_session_limit: 'Limit 5-godzinny', provider_quota_weekly_limit: 'Limit tygodniowy', provider_quota_window_fallback: 'Okno', provider_quota_metric_remaining: 'Pozostało', provider_quota_metric_used: 'Zużyte', provider_quota_metric_limit: 'Limit', provider_quota_status_available: 'dostępne', provider_quota_status_exhausted: 'wyczerpane', provider_quota_status_unavailable: 'niedostępne', provider_quota_status_failed: 'nie powiodło się', provider_quota_status_checked: 'sprawdzone', provider_quota_status_no_key: 'brak klucza', provider_quota_status_invalid_key: 'nieprawidłowy klucz', provider_quota_status_unsupported: 'nieobsługiwane', provider_quota_used_meta: 'zużyto {0}', provider_quota_resets_meta: 'resetuje się o {0}', provider_quota_credential_pool: 'Pula poświadczeń', provider_quota_credential_label: 'Poświadczenie {0}', provider_quota_pool_plans: 'Plany: {0}', provider_quota_pool_no_windows: 'Nie zgłoszono okien limitów konta.', provider_quota_account_limits_loaded: 'Załadowano limity konta.', provider_quota_unavailable: 'Status kwoty niedostępny', provider_quota_retry_after: 'Spróbuj ponownie po {0}', provider_quota_pool_summary_available: 'dostępne {0}/{1}', provider_quota_pool_summary_exhausted: '{0} wyczerpanych', provider_quota_pool_summary_failed: '{0} nie powiodło się', provider_quota_pool_summary_checked: '{0} sprawdzonych', provider_cost_budget_label: 'Monthly budget', provider_cost_budget_placeholder: 'e.g. 50.00', provider_cost_budget_set: 'Set', provider_cost_budget_clear: 'Clear', provider_cost_budget_pct: '{0}% of ${1} budget (monthly pace)', provider_cost_budget_save_failed: 'Failed to save budget', cancel: 'Anuluj', create_job: 'Utwórz zadanie', save_skill: 'Zapisz umiejętność', editing: 'Edytowanie', // Empty state empty_title: 'W czym mogę pomóc?', empty_subtitle: 'Zadaj dowolne pytanie, uruchamiaj polecenia, przeglądaj pliki lub zarządzaj zaplanowanymi zadaniami.', suggest_files: 'Jakie pliki znajdują się w tym obszarze roboczym?', suggest_schedule: 'Co mam dziś w harmonogramie?', suggest_plan: 'Pomóż mi zaplanować mały projekt.', // onboarding onboarding_badge: 'PIERWSZE URUCHOMIENIE', onboarding_title: 'Witaj w Hermes Web UI', onboarding_lead: 'Szybki, prowadzony krok po kroku proces konfiguracji zweryfikuje Hermes, zapisze rzeczywistą konfigurację dostawcy, wybierze obszar roboczy oraz model i opcjonalnie zabezpieczy aplikację hasłem.', onboarding_back: 'Wstecz', onboarding_continue: 'Dalej', onboarding_skip: 'Pomiń konfigurację', onboarding_skipped: 'Pominięto konfigurację — używanie istniejącej konfiguracji.', onboarding_open: 'Otwórz Hermes', onboarding_step_system_title: 'Sprawdzenie systemu', onboarding_step_system_desc: 'Zweryfikuj dostępność Agenta Hermes i widoczność konfiguracji.', onboarding_step_setup_title: 'Konfiguracja dostawcy', onboarding_step_setup_desc: 'Zapisz minimalną konfigurację dostawcy Hermes.', onboarding_step_workspace_title: 'Obszar roboczy + model', onboarding_step_workspace_desc: 'Wybierz domyślne ustawienia dla nowych sesji i czatu.', onboarding_step_password_title: 'Opcjonalne hasło', onboarding_step_password_desc: 'Opcjonalnie zabezpiecz Web UI przed udostępnieniem.', onboarding_step_finish_title: 'Koniec', onboarding_step_finish_desc: 'Przejrzyj i wejdź do aplikacji.', onboarding_notice_system_ready: 'Agent Hermes wydaje się osiągalny z poziomu Web UI.', onboarding_notice_system_unavailable: 'Agent Hermes nie jest jeszcze w pełni dostępny. Bootstrap może go zainstalować, ale konfiguracja dostawcy może nadal wymagać terminala.', onboarding_check_agent: 'Agent Hermes', onboarding_check_agent_ready: 'Wykryty i możliwy do zaimportowania', onboarding_check_agent_missing: 'Brakujący lub tylko częściowo importowalny', onboarding_check_password: 'Hasło', onboarding_check_password_enabled: 'Już włączone', onboarding_check_password_disabled: 'Jeszcze niewłączone', onboarding_check_provider: 'Konfiguracja dostawcy', onboarding_check_provider_ready: 'Gotowy do czatu', onboarding_check_provider_partial: 'Zapisana, lecz niekompletna', onboarding_check_provider_pending: 'Wymaga weryfikacji', onboarding_config_file: 'Plik konfiguracyjny:', onboarding_env_file: 'Plik .env:', onboarding_unknown: 'Nieznany', onboarding_current_provider: 'Bieżąca konfiguracja:', onboarding_missing_imports: 'Brakujące importy:', onboarding_notice_setup_required: 'Wybierz tutaj prostą ścieżkę dostawcy. Zaawansowane przepływy OAuth na razie pozostają w CLI Hermes.', onboarding_notice_setup_already_ready: 'Działająca konfiguracja dostawcy Hermes została już wykryta. Możesz ją zachować lub zastąpić tutaj.', onboarding_oauth_provider_ready_title: 'Dostawca został już uwierzytelniony', onboarding_oauth_provider_ready_body: 'Ta instancja jest skonfigurowana do korzystania z dostawcy OAuth ({provider}), który został skonfigurowany za pomocą CLI Hermes. Klucz API nie jest tutaj wymagany — kliknij Dalej, aby ukończyć konfigurację.', onboarding_oauth_provider_not_ready_title: 'Dostawca OAuth nie został jeszcze uwierzytelniony', onboarding_oauth_provider_not_ready_body: 'Ta instancja jest skonfigurowana do korzystania z {provider}, który korzysta z OAuth zamiast klucza API. Uruchom hermes auth lub hermes model w terminalu, aby uwierzytelnić, a następnie odśwież Web UI.', onboarding_oauth_switch_hint: 'Lub wybierz innego dostawcę poniżej, aby przełączyć się na konfigurację z kluczem API:', oauth_login_codex: 'Zaloguj się przez Codex (ChatGPT)', oauth_codex_step1: 'Krok 1: Odwiedź ten URL i wpisz kod', oauth_codex_step2: 'Krok 2: Wpisz ten kod na stronie', oauth_codex_polling: 'Oczekiwanie na autoryzację...', oauth_codex_success: 'Logowanie Codex OAuth powiodło się!', oauth_codex_error: 'Logowanie OAuth nie powiodło się', oauth_codex_expired: 'Kod wygasł, spróbuj ponownie', onboarding_notice_workspace: 'Te wartości używają tych samych API ustawień, co zwykła aplikacja.', onboarding_workspace_label: 'Obszar roboczy', onboarding_workspace_or_path: 'Lub wprowadź ścieżkę obszaru roboczego', onboarding_workspace_placeholder: '/home/uzytkownik/workspace', onboarding_provider_label: 'Tryb konfiguracji', onboarding_quick_setup_badge: 'szybka konfiguracja', provider_category_easy_start: 'Łatwy start', provider_category_self_hosted: 'Lokalne / hosting własny', provider_category_specialized: 'Specjalistyczne', onboarding_api_key_label: 'Klucz API', onboarding_api_key_placeholder: 'Pozostaw puste, aby zachować istniejący zapisany klucz', onboarding_api_key_label_optional: 'Klucz API (opcjonalny)', onboarding_api_key_placeholder_optional: 'Pozostaw puste dla serwerów bez klucza', onboarding_api_key_help_keyless: 'Większość instalacji LM Studio / Ollama / vLLM działa bez klucza — pozostaw to pole puste, jeśli Twój serwer nie wymaga uwierzytelniania. Użyj przycisku "Testuj połączenie", aby zweryfikować.', onboarding_api_key_help_prefix: 'Zapisano jako klucz tajny w pliku .env aplikacji Hermes przy użyciu', onboarding_base_url_label: 'Adres bazowy URL', onboarding_base_url_placeholder: 'https://twoj-punkt-koncowy.example/v1', onboarding_base_url_help: 'Użyj tego dla routerów zgodnych z OpenAI, serwerów hostowanych samodzielnie, LiteLLM, Ollama, LM Studio, vLLM lub podobnych punktów końcowych.', onboarding_model_label: 'Domyślny model', onboarding_workspace_help: 'Wybierz model, którego Hermes powinien używać dla nowych czatów po zakończeniu konfiguracji.', onboarding_custom_model_placeholder: 'nazwa-twojego-modelu', onboarding_custom_model_help: 'Dla niestandardowych punktów końcowych wprowadź dokładny identyfikator modelu oczekiwany przez Twój serwer.', onboarding_notice_password_enabled: 'Hasło zostało już skonfigurowane. Wprowadź nowe tylko wtedy, gdy chcesz je zastąpić.', onboarding_notice_password_recommended: 'Opcjonalne, lecz zalecane, jeśli udostępniasz interfejs poza localhost.', onboarding_password_label: 'Hasło (opcjonalne)', onboarding_password_placeholder: 'Pozostaw puste, aby pominąć', onboarding_password_help: 'Hasła są przechowywane za pośrednictwem istniejącego API ustawień i haszowane po stronie serwera.', onboarding_notice_finish: 'Możesz otworzyć Ustawienia ponownie później, aby to zmienić.', onboarding_not_set: 'Nieustawione', onboarding_password_will_enable: 'Zostanie włączone', onboarding_password_will_replace: 'Zostanie zastąpione', onboarding_password_keep_existing: 'Zachowaj obecne hasło', onboarding_password_remains_disabled: 'Pozostanie wyłączone', onboarding_password_skipped: 'Na razie pominięte', onboarding_finish_help: 'Zakończenie zapisuje wartość onboarding_completed w ustawieniach i przenosi Cię do właściwej aplikacji.', onboarding_error_choose_workspace: 'Wybierz obszar roboczy przed kontynuowaniem.', onboarding_error_choose_model: 'Wybierz model przed kontynuowaniem.', onboarding_error_provider_required: 'Wybierz tryb konfiguracji przed kontynuowaniem.', onboarding_error_base_url_required: 'URL bazowy jest wymagany dla niestandardowych punktów końcowych.', onboarding_probe_test_button: 'Testuj połączenie', onboarding_probe_probing: 'Testowanie połączenia…', onboarding_probe_ok: 'Połączono. Dostępnych modeli: {n}.', onboarding_probe_error_generic: 'Nie można nawiązać połączenia ze skonfigurowanym adresem URL bazy.', onboarding_probe_error_invalid_url: 'Adres URL bazy musi zaczynać się od http:// lub https://.', onboarding_probe_error_dns: 'Nie można rozpoznać nazwy hosta. Sprawdź adres URL lub użyj adresu IP hosta.', onboarding_probe_error_connect_refused: 'Połączenie odrzucone — serwer może nie być uruchomiony pod tym adresem. Przy korzystaniu z Docker spróbuj podać IP hosta zamiast localhost.', onboarding_probe_error_timeout: 'Punkt końcowy nie odpowiedział na czas. Sprawdź, czy serwer działa i czy adres URL jest prawidłowy.', onboarding_probe_error_http_4xx: 'Punkt końcowy zwrócił błąd klienta. Sprawdź uwierzytelnienie i ścieżkę URL (zazwyczaj kończy się na /v1).', onboarding_probe_error_http_5xx: 'Punkt końcowy zwrócił błąd serwera. Sprawdź logi serwera LM Studio / Ollama.', onboarding_probe_error_parse: 'Punkt końcowy nie zwrócił listy modeli w oczekiwanym formacie. Zweryfikuj, czy URL wskazuje na główny katalog API zgodnego z OpenAI.', onboarding_probe_error_unreachable: 'Nie można nawiązać połączenia ze skonfigurowanym adresem URL bazy.', onboarding_error_probe_failed: 'Nie udało się zweryfikować skonfigurowanego adresu URL bazy.', onboarding_error_workspace_required: 'Obszar roboczy jest wymagany.', onboarding_error_model_required: 'Model jest wymagany.', onboarding_complete: 'Konfiguracja wstępna zakończona', // panel/runtime i18n error_prefix: 'Błąd: ', default: 'domyślny', search: 'Szukaj', not_available: 'Niedostępne', never: 'nigdy', add: 'Dodaj', add_failed: 'Dodawanie nie powiodło się: ', remove_failed: 'Usuwanie nie powiodło się: ', switch_failed: 'Przełączanie nie powiodło się: ', name_required: 'Nazwa jest wymagana', content_required: 'Zawartość jest wymagana', view: 'Wyświetl', dismiss: 'Odrzuć', disable: 'Wyłącz', cron_no_jobs: 'Nie znaleziono zaplanowanych zadań.', cron_status_off: 'wyłączone', cron_status_paused: 'wstrzymane', cron_status_error: 'błąd', cron_status_active: 'aktywne', cron_status_running: 'uruchomione…', cron_status_needs_attention: 'wymaga uwagi', cron_attention_desc: 'To powtarzające się zadanie nie ma zaplanowanego czasu następnego uruchomienia. Harmonogram mógł nie obliczyć prawidłowo kolejnego wywołania.', cron_attention_croniter_hint: 'Środowisko uruchomieniowe bramy może nie posiadać pakietu croniter. Zrestartuj bramę z obsługą cron, a następnie wznów to zadanie.', cron_attention_resume: 'Wznów i przelicz ponownie', cron_jobs_project: 'Zadania Cron', cron_attention_run_once: 'Uruchom raz teraz', cron_attention_copy_diagnostics: 'Kopiuj diagnostykę', cron_diagnostics_copied: 'Skopiowano diagnostykę zadań cron', cron_next: 'Następny', cron_last: 'Ostatni', cron_run_now: 'Uruchom teraz', cron_pause: 'Wstrzymaj', cron_resume: 'Wznów', cron_job_name_placeholder: 'Nazwa zadania', cron_schedule_placeholder: 'Harmonogram', cron_prompt_placeholder: 'Zapytanie (prompt)', cron_last_output: 'Ostatnie wyjście', cron_expand_prompt: 'Rozwiń zapytanie', cron_collapse_prompt: 'Zwiń zapytanie', cron_expand_output: 'Rozwiń wyjście', cron_collapse_output: 'Zwiń wyjście', cron_mode_agent: 'Agent', cron_mode_script: 'Skrypt', cron_mode_label: 'Tryb', cron_script_job_banner: 'Uruchamia skrypt według harmonogramu — standardowe wyjście jest dostarczane do celu. Bez agenta, promptu ani umiejętności.', cron_script_card_title: 'Skrypt', cron_script_output: 'Wyjście skryptu', cron_script_path_label: 'Ścieżka skryptu', cron_script_path_hint: 'Rozwiązywana względem ~/.hermes/scripts/, chyba że podano ścieżkę bezwzględną. Edytuj plik skryptu na serwerze, aby zmienić działanie.', cron_script_badge_title: 'Zadanie skryptowe (bez agenta)', cron_workdir_label: 'Katalog roboczy', cron_view_full_output: 'Wyświetl pełne wyjście', cron_all_runs: 'Wszystkie uruchomienia', cron_hide_runs: 'Ukryj uruchomienia', cron_no_runs_yet: '(brak uruchomień)', cron_schedule_required_example: 'Harmonogram jest wymagany (np. "0 9 * * *" lub "every 1h")', cron_schedule_required: 'Harmonogram jest wymagany', cron_prompt_required: 'Zapytanie (prompt) jest wymagane', cron_job_created: 'Utworzono zadanie', cron_duplicate: 'Zduplikuj', cron_duplicated: 'Zadanie zduplikowane (wstrzymane)', cron_job_triggered: 'Zadanie wywołane', cron_job_paused: 'Zadanie wstrzymane', cron_job_resumed: 'Zadanie wznowione', cron_job_updated: 'Zadanie zaktualizowane', cron_model_label: 'Zastąpienie modelu', cron_model_hint: 'Zastępuje domyślny model dla tego zadania.', cron_model_no_agent_hint: 'Zadania bez agenta uruchamiają skonfigurowany skrypt bezpośrednio; model nie jest używany.', cron_model_use_default: 'Domyślny (użyj domyślnego profilu/systemu)', cron_delete_confirm_title: 'Usuń zadanie cron', cron_delete_confirm_message: 'Tej operacji nie można cofnąć.', cron_job_deleted: 'Zadanie usunięte', cron_completion_status: (name, status) => `Cron "${name}" — ${status}`, status_failed: 'nie powiodło się', status_completed: 'ukończone', todos_no_active: 'Brak aktywnej listy zadań w tej sesji.', clear_conversation_title: 'Wyczyść konwersację', clear_conversation_message: 'Wyczyścić wszystkie wiadomości? Tej operacji nie można cofnąć.', clear_failed: 'Czyszczenie nie powiodło się: ', skills_no_match: 'Brak pasujących umiejętności.', skill_enabled: 'Włączone', skill_disabled: 'Wyłączone', skill_toggle_failed: 'Nie udało się przełączyć umiejętności: ', linked_files: 'Połączone pliki', skill_load_failed: 'Nie można załadować umiejętności: ', skill_file_load_failed: 'Nie można załadować pliku: ', skill_name_required: 'Nazwa umiejętności jest wymagana', skill_updated: 'Umiejętność zaktualizowana', skill_created: 'Utworzono umiejętność', skill_deleted: 'Umiejętność usunięta', skill_delete_confirm: 'Usunąć umiejętność "{0}"?', skills_empty_title: 'Wybierz umiejętność', skills_empty_sub: 'Wybierz umiejętność z paska bocznego, aby wyświetlić jej zawartość, lub utwórz nową.', skills_edit: 'Edytuj', skills_delete: 'Usuń', skills_back_to: 'Powrót do {0}', tasks_empty_title: 'Wybierz zaplanowane zadanie', tasks_empty_sub: 'Wybierz zadanie z paska bocznego, aby wyświetlić szczegóły i uruchomienia, lub utwórz nowe.', workspaces_empty_title: 'Wybierz przestrzeń', workspaces_empty_sub: 'Wybierz przestrzeń z paska bocznego, aby wyświetlić jej pliki i ustawienia, lub dodaj nową.', profiles_empty_title: 'Wybierz profil', profiles_empty_sub: 'Wybierz profil agenta z paska bocznego, aby przeglądać i edytować jego ustawienia, lub utwórz nowy.', memory_notes_label: 'pamięć (notatki)', memory_saved: 'Zapisano pamięć', my_notes: 'Moje notatki', user_profile: 'Profil użytkownika', external_notes_sources: 'Notatki zewnętrzne (firm trzecich)', external_notes_empty: 'Nie są jeszcze widoczne żadne zewnętrzne źródła notatek ani wiedzy MCP. Skonfiguruj Joplin, Obsidian, Notion, llm-wiki lub inny serwer notatek, aby wyświetlić go na tej liście.', external_notes_auto_recall_hint: 'Automatyczne wywoływanie sesji pozostaje bez zmian; ta szuflada wyświetla tylko skonfigurowane źródła oraz dostępne narzędzia odczytu/wyszukiwania.', external_notes_no_tools: 'Obecnie brak widocznych narzędzi odczytu/wyszukiwania dla tego źródła.', external_notes_tool_count: (count) => count === 1 ? '1 narzędzie do notatek dostępne' : `${count} narzędzi do notatek dostępnych`, external_notes_configured_hint: 'Oczekiwane są nazwy narzędzi z tego skonfigurowanego źródła; schematy live pojawią się, gdy środowisko uruchomieniowe WebUI je udostępni.', external_notes_recent_ai: 'Ostatnio używane przez AI', external_notes_auto: 'auto', external_notes_recent_ai_reason: 'Automatyczne przywoływanie', external_notes_search_placeholder: 'Szukaj notatek…', external_notes_search_empty: 'Przeszukaj skonfigurowane źródło notatek, aby wyświetlić ich podgląd tutaj.', source_active: 'aktywne', source_configured: 'skonfigurowane', no_notes_yet: 'Brak notatek.', no_profile_yet: 'Brak profilu.', agent_soul: 'Dusza agenta', no_soul_yet: 'Dusza nie została jeszcze zdefiniowana.', workspace_choose_path: 'Wybierz ścieżkę obszaru roboczego', workspace_choose_path_meta: 'Dodaj zweryfikowaną ścieżkę i przełącz tę konwersację', workspace_manage: 'Zarządzaj obszarami roboczymi', workspace_manage_meta: 'Otwórz panel Przestrzenie', workspace_use_title: 'Użyj w bieżącej sesji', workspace_use: 'Użyj', workspace_add_path_placeholder: 'Dodaj ścieżkę obszaru roboczego (np. /home/uzytkownik/moj-projekt)', workspace_paths_validated_hint: 'Ścieżki są weryfikowane jako istniejące katalogi przed zapisaniem.', workspace_drag_hint: 'Przeciągnij, aby zmienić kolejność', workspace_reorder_failed: 'Zmiana kolejności nie powiodła się', workspace_added: 'Dodano obszar roboczy', workspace_renamed: 'Zmieniono nazwę obszaru roboczego', workspace_remove_confirm_title: 'Usuń obszar roboczy', workspace_remove_confirm_message: (path) => `Usunąć „${path}”?`, workspace_removed: 'Usunięto obszar roboczy', workspace_switch_prompt_title: 'Przełącz obszar roboczy', workspace_switch_prompt_message: 'Wprowadź absolutną ścieżkę obszaru roboczego, aby dodać i przełączyć tę konwersację.', workspace_switch_prompt_confirm: 'Przełącz', workspace_switch_prompt_placeholder: '/Users/uzytkownik/projekt', workspace_not_added: 'Obszar roboczy nie został dodany', workspace_already_saved: 'Obszar roboczy został już zapisany — wybierz go z listy', workspace_busy_switch: 'Nie można przełączyć obszaru roboczego, gdy agent jest uruchomiony', discard_file_edits_title: 'Odrzucić edycję plików?', discard_file_edits_message: 'Przełączenie obszaru roboczego odrzuci niezapisane edycje plików w podglądzie.', workspace_switched_to: (name) => `Przełączono na ${name}`, profiles_no_profiles: 'Nie znaleziono profili.', profile_api_keys_configured: 'Klucze API skonfigurowane', profile_gateway_running: 'Brama jest uruchomiona', profile_gateway_stopped: 'Brama została zatrzymana', profile_active: 'AKTYWNY', profile_no_configuration: 'Brak konfiguracji', profile_skill_count: (count) => `${count} umiejętność/umiejętności`, profile_use: 'Użyj', profile_switch_title: 'Przełącz na ten profil', profile_delete_title: 'Usuń ten profil', profile_default_label: '(domyślny)', profile_name_placeholder: 'Nazwa profilu (małe litery, a-z 0-9, myślniki)', profile_clone_label: 'Klonuj konfigurację z aktywnego profilu', profile_model_label: 'Model / dostawca', profile_model_hint: 'Wybierz spośród skonfigurowanych dostawców i modeli dla tego nowego profilu.', profile_model_use_default: 'Użyj domyślnego dla aktywnego profilu', profile_base_url_placeholder: 'Adres bazowy URL (opcjonalnie, np. http://localhost:11434)', profile_api_key_placeholder: 'Klucz API (opcjonalnie)', manage_profiles: 'Zarządzaj profilami', profiles_load_failed: 'Nie udało się załadować profili', profile_switched_new_conversation: (name) => `Przełączono na profil: ${name} — rozpoczęto nową konwersację`, profile_switched: (name) => `Przełączono na profil: ${name}`, profile_name_rule: 'Tylko małe litery, cyfry, myślniki i podkreślenia', profile_base_url_rule: 'URL bazowy musi zaczynać się od http:// lub https://', profile_created: (name) => `Profil utworzony: ${name}`, profile_delete_confirm_title: (name) => `Usunąć profil „${name}”?`, profile_delete_confirm_message: 'Wszystkie sesje, konfiguracja, umiejętności i pamięć dla tego profilu zostaną trwale usunięte. Tej operacji nie można cofnąć.', profile_deleted: (name) => `Profil usunięty: ${name}`, active_conversation_none: 'Nie wybrano aktywnej konwersacji.', active_conversation_meta: (title, count) => count === 1 ? `${title} · 1 wiadomość` : `${title} · ${count} wiadomości`, settings_unsaved_changes: 'Masz niezapisane zmiany.', sign_out_failed: 'Wylogowanie nie powiodło się: ', disable_auth_confirm_title: 'Wyłącz ochronę hasłem', disable_auth_confirm_message: 'Każdy będzie mógł uzyskać dostęp do tej instancji.', auth_disabled: 'Uwierzytelnianie wyłączone — usunięto ochronę hasłem', disable_auth_failed: 'Wyłączenie uwierzytelniania nie powiodło się: ', current_password_label: 'Obecne hasło', current_password_placeholder: 'Wpisz obecne hasło…', current_password_required: 'Obecne hasło jest wymagane do zmiany lub wyłączenia uwierzytelniania.', current_password_incorrect: 'Obecne hasło jest nieprawidłowe.', disable_auth_typed_confirm: 'Wpisz DISABLE AUTH, aby potwierdzić', auth_status_password: 'Uwierzytelnianie hasłem', auth_status_passkey_only: 'Tylko passkey', auth_status_unauthenticated: 'Bez uwierzytelniania', auth_warning_badge: 'Uwierzytelnianie wyłączone', auth_disabled_warning_message: 'Ta instancja jest dostępna bez uwierzytelniania.', auth_acknowledged_label: 'Znam to ryzyko; pokaż mniej pilne ostrzeżenie w nawigacji.', auth_ack_save_failed: 'Nie udało się zaktualizować potwierdzenia: ', bg_error_single: (title) => `W „${title}” wystąpił błąd`, bg_error_multi: (count) => `W ${count} sesjach wystąpił błąd`, // skill form skill_name: 'Nazwa', skill_category: 'Kategoria', skill_category_placeholder: 'Opcjonalnie, np. devops', skill_content: 'Zawartość SKILL.md', skill_content_placeholder: 'Frontmatter YAML + zawartość Markdown', skill_rename_not_supported: 'Zmiana nazwy umiejętności nie jest obsługiwana. Utwórz nową umiejętność i usuń starą, aby zmienić nazwę.', skill_metadata: 'Metadane', // cron form cron_name_label: 'Nazwa', cron_name_placeholder: 'Opcjonalnie', cron_schedule_label: 'Harmonogram', cron_schedule_preset_label: 'Ustawienie wstępne', cron_schedule_preset_hourly: 'Co godzinę', cron_schedule_preset_daily: 'Codziennie', cron_schedule_preset_weekdays: 'Dni robocze', cron_schedule_preset_weekly: 'Co tydzień', cron_schedule_preset_monthly: 'Co miesiąc', cron_schedule_preset_custom: 'Niestandardowe', cron_schedule_hint: "Użyj 'every 1h' lub wyrażenia cron dla zadań cyklicznych. Same formy czasu trwania, jak '30m', zostaną uruchomione tylko raz.", cron_schedule_once_warning: 'Formy czasu trwania, takie jak \'30m\', są uruchamiane raz i usuwane po uruchomieniu. Użyj \'every 30m\', aby utrzymać zadanie cykliczne.', cron_prompt_label: 'Monit', cron_deliver_label: 'Dostarcz wyjście do', cron_deliver_local: 'Lokalnie (tylko zapisz wyjście)', cron_deliver_custom: 'Niestandardowy cel dostarczenia', cron_profile_label: 'Profil', cron_profile_server_default: 'domyślny serwera', cron_profile_server_default_hint: 'Używa domyślnego profilu serwera WebUI w czasie uruchomienia. Istniejące zadania bez przypisanego profilu zachowują to dotychczasowe działanie.', cron_toast_notifications_label: 'Powiadomienia o zakończeniu', cron_toast_notifications_hint: 'Pokaż powiadomienie (toast), gdy to zadanie cron się zakończy. Plakietka Zadań oraz znacznik nowego uruchomienia będą nadal aktualizowane, nawet gdy ta opcja jest wyłączona.', cron_toast_notifications_enabled: 'Włączone', cron_toast_notifications_disabled: 'Wyłączone', cron_skills_label: 'Umiejętności', cron_skills_placeholder: 'Dodaj umiejętności (opcjonalnie)…', cron_skills_edit_hint: 'Lista umiejętności nie jest edytowalna po utworzeniu.', // workspace form workspace_name_label: 'Nazwa', workspace_name_placeholder: 'Opcjonalna przyjazna nazwa', workspace_path_label: 'Ścieżka', workspace_path_required: 'Ścieżka jest wymagana', workspace_path_readonly: 'Ścieżka nie może być zmieniona. Możliwa tylko zmiana nazwy.', workspace_new_title: 'Nowa przestrzeń', // profile form profile_name_label: 'Nazwa', profile_base_url_label: 'Adres bazowy URL', profile_api_key_label: 'Klucz API', cmd_yolo: 'Przełącz tryb YOLO (pomiń aprobaty)', yolo_no_session: 'Brak aktywnej sesji', yolo_enabled: '⚡ Tryb YOLO WŁĄCZONY — pomijanie aprobat w tej sesji', yolo_disabled: 'Tryb YOLO WYŁĄCZONY', yolo_pill_label: 'YOLO', yolo_pill_title_active: 'Tryb YOLO aktywny — kliknij, aby wyłączyć', approval_skip_all: '⚡ Pomiń wszystkie w tej sesji', approval_skip_all_title: 'Pomiń wszystkie monity o aprobatę w tej sesji', // composer action tooltips composer_send: 'Wyślij wiadomość', composer_queue: 'Kolejkuj wiadomość', composer_interrupt: 'Przerwij i wyślij', composer_steer: 'Steruj bieżącą odpowiedzią', composer_stop: 'Zatrzymaj generowanie', composer_disabled_clarify: 'Odpowiedz na prośbę o wyjaśnienie', composer_disabled_compression: 'Oczekiwanie na zakończenie kompresji', composer_compression_will_queue: 'Wpisz wiadomość — zostanie zakolejkowana i wysłana po zakończeniu kompresji', composer_disabled_empty: 'Wpisz wiadomość, aby wysłać', composer_mobile_workspace: 'Obszar roboczy', composer_mobile_model: 'Model', composer_mobile_quota: 'Limit', composer_mobile_reasoning: 'Myślenie', composer_mobile_context: 'Kontekst', media_audio_label: 'Dźwięk', media_svg_label: 'Diagram', media_video_label: 'Wideo', media_download: 'Pobierz', csv_loading: 'Ładowanie CSV', csv_too_large: 'Plik CSV jest zbyt duży dla renderowania w linii', csv_no_data: 'Plik CSV nie zawiera wystarczającej liczby danych, aby wyrenderować go jako tabelę', csv_error: 'Nie udało się załadować pliku CSV', csv_header_note: 'Pierwszy wiersz wyświetlany jako nagłówek tabeli', excalidraw_loading: 'Ładowanie diagramu', excalidraw_too_large: 'Plik Excalidraw jest zbyt duży dla renderowania w linii', excalidraw_invalid: 'Nieprawidłowy format pliku Excalidraw', excalidraw_error: 'Nie udało się załadować pliku Excalidraw', excalidraw_label: 'Diagram', excalidraw_download: 'Pobierz', excalidraw_empty: 'Pusty diagram', excalidraw_render_error: 'Nie udało się wyrenderować diagramu', excalidraw_simplified: 'Uproszczony podgląd SVG — nie jest identyczny piksel w piksel z obszarem roboczym Excalidraw', // ── Checkpoints / Rollback ── checkpoint_title: 'Checkpoints (punkty kontrolne)', checkpoint_empty: 'Nie znaleziono punktów kontrolnych dla tego obszaru roboczego.', checkpoint_loading: 'Ładowanie punktów kontrolnych…', checkpoint_error: 'Nie udało się załadować punktów kontrolnych', checkpoint_date: 'Data', checkpoint_message: 'Wiadomość', checkpoint_files: 'Pliki', checkpoint_view_diff: 'Wyświetl diff', checkpoint_restore: 'Przywróć', checkpoint_restore_confirm_title: 'Przywrócić punkt kontrolny?', checkpoint_restore_confirm_message: (ckpt) => `Przywrócić obszar roboczy do punktu kontrolnego "${ckpt}"? To nadpisze pliki wersjami zapisanymi. Pliki dodane po tym punkcie kontrolnym nie zostaną usunięte.`, checkpoint_restored: 'Punkt kontrolny przywrócony', checkpoint_diff_title: 'Zmiany w punkcie kontrolnym', checkpoint_diff_no_changes: 'Nie znaleziono różnic między tym punktem kontrolnym a obecnym obszarem roboczym.', checkpoint_diff_files_changed: (n) => n === 1 ? '1 plik zmieniony' : `${n} zmienionych plików`, }, vi: { offline_title: 'Mất kết nối', offline_browser_detail: 'Trình duyệt báo rằng thiết bị này đang ngoại tuyến.', offline_network_detail: 'Không thể kết nối tới Hermes từ trình duyệt lúc này.', offline_autorefresh: 'Trang sẽ tự động làm mới khi Hermes khả dụng trở lại.', offline_check_now: 'Kiểm tra ngay', offline_checking: 'Đang kiểm tra…', offline_stream_waiting: 'Mất kết nối. Đang chờ làm mới…', _lang: 'vi', _label: 'Tiếng Việt', _speech: 'vi-VN', // boot.js cancelling: 'Đang hủy…', cancel_failed: 'Hủy thất bại: ', mic_denied: 'Quyền truy cập microphone bị từ chối. Kiểm tra quyền trình duyệt.', mic_no_speech: 'Không phát hiện giọng nói. Hãy thử lại.', mic_network: 'Nhận diện giọng nói không khả dụng.', mic_error: 'Lỗi nhập giọng nói: ', // Voice voice_dictate: 'Đọc chính tả', voice_dictate_active: 'Dừng đọc chính tả', voice_recording_active: 'Dừng ghi âm', voice_mode_toggle: 'Chế độ giọng nói', voice_mode_toggle_active: 'Thoát chế độ giọng nói', // Turn-based voice mode (#1333) voice_listening: 'Đang nghe…', voice_speaking: 'Đang nói…', voice_thinking: 'Đang suy nghĩ…', voice_error: 'Trình duyệt không hỗ trợ giọng nói', voice_mode_active: 'Đã bật chế độ giọng nói', voice_mode_off: 'Đã tắt chế độ giọng nói', session_imported: 'Đã nhập phiên trò chuyện', import_failed: 'Nhập thất bại: ', import_invalid_json: 'JSON không hợp lệ', image_pasted: 'Đã dán ảnh: ', // messages.js edit_message: 'Chỉnh sửa tin nhắn', regenerate: 'Tạo lại phản hồi', copy: 'Sao chép', copied: 'Đã sao chép!', copy_failed: 'Sao chép thất bại', selected_text_reply: 'Trả lời với đoạn đã chọn', selected_text_reply_title: 'Thêm đoạn chat đã chọn làm ngữ cảnh trích dẫn', selected_text_reply_appended: 'Đã thêm đoạn đã chọn vào ô nhập', saved_prompts_empty: 'Chưa có prompt đã lưu.', saved_prompts_save_current: 'Lưu nội dung hiện tại thành prompt', saved_prompts_saved: 'Đã lưu prompt', saved_prompts_delete: 'Xóa prompt', saved_prompts_empty_input: 'Hãy nhập prompt trước khi lưu', diff_loading: 'Đang tải diff', diff_error: 'Không thể tải file patch', diff_too_large: 'File patch quá lớn để hiển thị trực tiếp', tree_view: 'Cây thư mục', raw_view: 'Dữ liệu thô', parse_failed_note: 'phân tích thất bại', you: 'Bạn', mcp_servers_title: 'Máy chủ MCP', mcp_servers_desc: 'Xem các máy chủ MCP được cấu hình trong config.yaml.', mcp_no_servers: 'Chưa có máy chủ MCP nào được cấu hình.', mcp_add_server: '+ Thêm máy chủ', mcp_field_name: 'Tên máy chủ', mcp_transport_label: 'Loại kết nối', mcp_field_command: 'Lệnh', mcp_field_args: 'Tham số (phân tách bằng dấu phẩy)', mcp_field_url: 'URL', mcp_field_timeout: 'Thời gian chờ (giây)', mcp_save: 'Lưu', mcp_cancel: 'Hủy', mcp_name_required: 'Tên máy chủ là bắt buộc.', mcp_url_required: 'URL là bắt buộc cho transport HTTP.', mcp_command_required: 'Lệnh là bắt buộc cho transport stdio.', mcp_saved: 'Đã lưu máy chủ MCP.', mcp_save_failed: 'Lưu máy chủ MCP thất bại.', mcp_delete_confirm_title: 'Xóa máy chủ MCP', mcp_delete_confirm_message: 'Xóa máy chủ MCP "{0}"? Hành động này không thể hoàn tác.', mcp_deleted: 'Đã xóa máy chủ MCP.', mcp_delete_failed: 'Xóa máy chủ MCP thất bại.', mcp_load_failed: 'Tải danh sách máy chủ MCP thất bại.', mcp_restart_hint: 'Hiện tại các thay đổi máy chủ chỉ ở chế độ chỉ đọc tại đây. Hãy sửa config.yaml và khởi động lại Hermes để áp dụng thay đổi.', mcp_toggle_followup: 'Các điều khiển bật/tắt tạm thời chưa được hỗ trợ cho đến khi cơ chế reload MCP được xác định rõ.', mcp_status_active: 'Đang hoạt động', mcp_status_configured: 'Đã cấu hình', mcp_status_disabled: 'Đã tắt', mcp_status_invalid_config: 'Cấu hình không hợp lệ', mcp_status_unknown: 'Không xác định', mcp_tool_count: '{0} công cụ', mcp_enabled_yes: 'Đã bật', mcp_enabled_no: 'Đã tắt', mcp_enable_server: 'Bật máy chủ MCP này', mcp_disable_server: 'Tắt máy chủ MCP này', mcp_enabled_toast: (name) => `Đã bật máy chủ MCP "${name}".`, mcp_disabled_toast: (name) => `Đã tắt máy chủ MCP "${name}".`, mcp_toggle_failed: 'Cập nhật máy chủ MCP thất bại.', mcp_tools_title: 'Công cụ MCP', mcp_tools_desc: 'Tìm kiếm các công cụ đã biết trên các máy chủ MCP đang hoạt động.', mcp_tools_search_placeholder: 'Tìm công cụ theo tên, máy chủ hoặc mô tả…', mcp_tools_no_tools: 'Không có công cụ MCP nào khả dụng từ runtime hiện tại.', mcp_tools_no_matches: 'Không có công cụ MCP nào khớp với tìm kiếm.', mcp_tools_load_failed: 'Tải công cụ MCP thất bại.', mcp_tools_schema_empty: 'Không có tham số schema.', mcp_tools_runtime_note: 'Danh sách công cụ chỉ sử dụng dữ liệu runtime MCP đang hoạt động đã biết; WebUI sẽ không tự khởi động hoặc kiểm tra máy chủ.', mcp_tools_summary_no_matches: (query,total) => `Không có công cụ MCP nào khớp với “${query}” (${total} công cụ MCP tổng cộng).`, mcp_tools_summary_none: 'Không có công cụ MCP để hiển thị.', mcp_tools_summary_matching: (query) => ` khớp với “${query}”`, mcp_tools_summary_total_note: (total) => ` (${total} công cụ MCP tổng cộng)`, mcp_tools_summary_showing: (start,end,filtered,searchNote,totalNote,page,pages) => `Hiển thị ${start}-${end} trên ${filtered} công cụ MCP${searchNote}${totalNote}. Trang ${page}/${pages}.`, mcp_tools_page_size_prefix: 'Hiển thị', mcp_tools_page_size_suffix: 'mỗi trang', mcp_tools_per_page_aria: 'Số công cụ MCP mỗi trang', mcp_tools_inactive_configured_servers: (servers) => `Đã cấu hình nhưng không hoạt động trong runtime WebUI này: ${servers}.`, mcp_tools_pagination_label: 'Phân trang công cụ MCP', mcp_tools_previous_page: '‹ Trước', mcp_tools_previous_page_aria: 'Trang công cụ MCP trước', mcp_tools_next_page: 'Tiếp ›', mcp_tools_next_page_aria: 'Trang công cụ MCP tiếp theo', // PDF preview (#480) pdf_loading: 'Đang tải PDF {0}…', pdf_too_large: 'PDF quá lớn để xem trực tiếp', pdf_no_pages: 'PDF không có trang nào', pdf_error: 'Không thể hiển thị xem trước PDF', pdf_download: 'Tải PDF', // HTML sandbox preview (#482) html_loading: 'Đang tải xem trước HTML…', html_too_large: 'HTML quá lớn để xem trực tiếp', html_error: 'Không thể hiển thị xem trước HTML', html_open_full: 'Mở toàn bộ trang', html_sandbox_label: 'Xem trước HTML (chế độ cách ly)', thinking: 'Đang suy nghĩ', expand_all: 'Mở rộng tất cả', collapse_all: 'Thu gọn tất cả', edit_failed: 'Chỉnh sửa thất bại: ', regen_failed: 'Tạo lại thất bại: ', reconnect_active: 'Một phản hồi vẫn đang được tạo. Tải lại khi sẵn sàng?', reconnect_finished: 'Một phản hồi đang diễn ra khi bạn rời đi lần trước. Tin nhắn có thể đã được cập nhật.', // approval card approval_heading: 'Yêu cầu phê duyệt', approval_desc_prefix: 'Phát hiện lệnh nguy hiểm', approval_btn_once: 'Cho phép một lần', approval_btn_once_title: 'Cho phép lệnh này một lần (Enter)', approval_btn_session: 'Cho phép trong cuộc trò chuyện này', approval_btn_session_title: 'Cho phép trong phiên trò chuyện này', approval_btn_always: 'Luôn cho phép', approval_btn_always_title: 'Luôn cho phép mẫu lệnh này', approval_btn_deny: 'Từ chối', approval_btn_deny_title: 'Từ chối — không chạy lệnh này', approval_responding: 'Đang phản hồi\u2026', clarify_heading: 'Cần làm rõ', clarify_hint: 'Chọn một tùy chọn hoặc nhập câu trả lời của bạn bên dưới.', clarify_other: 'Khác', clarify_send: 'Gửi', clarify_input_placeholder: 'Nhập phản hồi của bạn…', clarify_responding: 'Đang phản hồi\u2026', session_attention_approval: (n) => n === 1 ? 'Phê duyệt' : `${n} phê duyệt`, session_attention_clarify: (n) => n === 1 ? 'Câu hỏi' : `${n} câu hỏi`, session_attention_generic: (n) => n === 1 ? 'Chú ý' : `${n} mục`, session_attention_approval_title: 'Đang chờ quyết định cấp quyền', session_attention_clarify_title: 'Đang chờ câu trả lời của bạn', session_attention_generic_title: 'Đang chờ thao tác từ người dùng', untitled: 'Không tiêu đề', n_messages: (n) => `${n} tin nhắn`, load_older_messages: '↑ Cuộn lên hoặc bấm để tải tin nhắn cũ hơn', session_jump_start: 'Đầu', session_jump_start_label: 'Nhảy tới đầu phiên', session_jump_end: 'Cuối', session_jump_end_label: 'Nhảy tới cuối phiên', session_new_message: 'Tin nhắn mới', session_new_message_label: 'Có tin nhắn mới, nhảy xuống cuối', jump_to_question: 'tới phản hồi', jump_to_question_label: 'Nhảy tới đầu phản hồi này', queued_label: 'Gửi sau phản hồi', queued_count: (n) => n === 1 ? '1 đang chờ' : `${n} đang chờ`, queued_cancel: 'Hủy tin nhắn đang chờ', model_unavailable: ' (không khả dụng)', model_unavailable_title: 'Model này không còn trong danh sách provider hiện tại của bạn', provider_mismatch_warning: (m,p)=>`"${m}" có thể không hoạt động với provider đã cấu hình (${p}). Vẫn gửi hoặc chạy \`hermes model\` trong terminal để chuyển đổi.`, provider_mismatch_label: 'Nhà cung cấp không khớp', gateway_auth_label: 'Xác thực gateway thất bại', model_not_found_label: 'Không tìm thấy model', model_custom_label: 'ID model tự nhập', model_custom_placeholder: 'ví dụ: openai/gpt-5.4', model_search_placeholder: 'Tìm model…', model_search_no_results: 'Không tìm thấy model nào', model_group_configured: 'Đã cấu hình', ws_search_placeholder: 'Tìm workspace…', ws_no_results: 'Không tìm thấy workspace nào', workspace_new_worktree_conversation: 'Cuộc trò chuyện mới trong worktree', workspace_new_worktree_conversation_meta: 'Tạo git worktree độc lập cho workspace này.', workspace_worktree_created: 'Đã tạo cuộc trò chuyện worktree', workspace_worktree_failed: 'Tạo worktree thất bại: ', session_worktree_badge: 'Worktree', model_scope_advisory: 'Áp dụng cho cuộc trò chuyện này từ tin nhắn tiếp theo.', model_scope_toast: 'Áp dụng cho cuộc trò chuyện này từ tin nhắn tiếp theo.', // commands.js cmd_clear: 'Xóa tin nhắn cuộc trò chuyện', cmd_help: 'Hiển thị các lệnh slash khả dụng', cmd_compress: 'Nén thủ công ngữ cảnh cuộc trò chuyện (cách dùng: /compress [chủ đề])', ctx_compress_hint: 'Nén ngữ cảnh để giải phóng dung lượng →', ctx_compress_action: '⚠ Nén ngay để giải phóng ngữ cảnh', cmd_compact_alias: 'Bí danh cũ của /compress', cmd_model: 'Chuyển model (ví dụ: /model gpt-4o)', cmd_workspace: 'Chuyển không gian làm việc theo tên', cmd_terminal: 'Mở terminal của không gian làm việc', cmd_new: 'Bắt đầu phiên chat mới', cmd_usage: 'Bật/tắt hiển thị token usage', cmd_theme: 'Đổi giao diện (theme: system/dark/light, skin: default/ares/mono/graphite/slate/poseidon/sisyphus/charizard/sienna/catppuccin/nous/geist-contrast/zeus/verdigris)', cmd_personality: 'Đổi personality của agent', cmd_skills: 'Liệt kê các kỹ năng Hermes khả dụng', cmd_use: 'Ép dùng một skill cho tin nhắn tiếp theo', available_commands: 'Các lệnh khả dụng:', type_slash: 'Gõ / để xem lệnh', conversation_cleared: 'Đã xóa cuộc trò chuyện', command_label: 'Lệnh', context_compaction_label: 'Nén ngữ cảnh', retrieval_context_label: 'Ngữ cảnh đã lập chỉ mục', retrieval_context_preview: 'Các tin nhắn trước được lưu và có thể truy xuất bằng công cụ ngữ cảnh', preserved_task_list_label: 'Danh sách tác vụ được giữ lại', reference_only_label: 'Chỉ tham khảo', model_usage: 'Cách dùng: /model ', no_model_match: 'Không có model nào khớp "', model_did_you_mean: (m) => ` — có phải bạn muốn "${m}"?`, switched_to: 'Đã chuyển sang ', workspace_usage: 'Cách dùng: /workspace ', no_workspace_match: 'Không có workspace nào khớp "', switched_workspace: 'Đã chuyển workspace sang: ', workspace_switch_failed: 'Chuyển workspace thất bại: ', new_session: 'Đã tạo phiên mới', new_session_creating: 'Đang tạo cuộc trò chuyện mới…', compressing: 'Đang yêu cầu nén ngữ cảnh...', compress_running_label: 'Đang nén', compress_complete_label: 'Nén hoàn tất', auto_compress_label: 'Tự động nén', compress_failed_label: 'Nén thất bại', focus_label: 'Tiêu điểm', token_usage_on: 'Đã bật token usage', token_usage_off: 'Đã tắt token usage', usage_cache_hit_detail: 'Cache: trúng {0}% ({1} đọc / {2} ghi)', usage_cached_percent: '{0}% được cache', theme_usage: 'Cách dùng: /theme ', theme_set: 'Giao diện: ', no_active_session: 'Không có phiên hoạt động', cmd_queue: 'Đưa tin nhắn vào hàng chờ cho lượt tiếp theo', cmd_goal: 'Đặt hoặc xem mục tiêu lâu dài', goal_evaluating_progress: 'Đang đánh giá tiến độ mục tiêu…', goal_working_toward: 'Đang thực hiện mục tiêu…', goal_continuing_toast: 'Đang tiếp tục mục tiêu…', goal_status_none: 'Không có mục tiêu nào đang hoạt động. Đặt bằng /goal .', goal_status_active: (turns, max_turns, goal) => `⊙ Mục tiêu (đang hoạt động, ${turns}/${max_turns} lượt): ${goal}`, goal_status_paused: (turns, max_turns, reason, goal) => `⏸ Mục tiêu (tạm dừng, ${turns}/${max_turns}${reason ? `, ${reason}` : ''}): ${goal}`, goal_status_done: (turns, max_turns, goal) => `✓ Hoàn thành mục tiêu (${turns}/${max_turns}): ${goal}`, goal_set: (turns, goal) => `⊙ Đã đặt mục tiêu (${turns} lượt): ${goal}`, goal_paused: (goal) => `⏸ Đã tạm dừng mục tiêu: ${goal}`, goal_resumed: (goal) => `▶ Đã tiếp tục mục tiêu: ${goal}`, goal_cleared: 'Đã xóa mục tiêu.', goal_no_goal: 'Không có mục tiêu hoạt động.', goal_achieved: (reason) => `✓ Đã đạt mục tiêu: ${reason}`, goal_paused_budget_exhausted: (turns, max_turns) => `⏸ Đã tạm dừng mục tiêu — đã dùng ${turns}/${max_turns} lượt. Dùng /goal resume để tiếp tục hoặc /goal clear để dừng.`, goal_continuing: (turns, max_turns, reason) => `↻ Đang tiếp tục mục tiêu (${turns}/${max_turns}): ${reason}`, cmd_interrupt: 'Hủy lượt hiện tại và gửi tin nhắn mới', cmd_steer: 'Chèn điều chỉnh giữa lượt mà không ngắt agent', cmd_queue_no_msg: 'Cách dùng: /queue ', cmd_queue_not_busy: 'Không có tác vụ hoạt động — cứ gửi bình thường', cmd_queue_confirm: 'Đã đưa tin nhắn vào hàng chờ', cmd_interrupt_no_msg: 'Cách dùng: /interrupt ', cmd_interrupt_confirm: 'Đã ngắt — đang gửi tin nhắn mới', cmd_steer_no_msg: 'Cách dùng: /steer ', cmd_steer_fallback: 'Steer không khả dụng — đã đưa vào hàng chờ lượt tiếp theo', cmd_steer_delivered: 'Steer đã được gửi — agent sẽ thấy ở kết quả tool tiếp theo', steer_leftover_queued: 'Steer đã được đưa vào hàng chờ lượt tiếp theo', busy_steer_fallback: 'Steer không khả dụng — đã đưa vào hàng chờ lượt tiếp theo', steer_fail_no_cached_agent: 'No agent cached for this session — try refreshing', steer_fail_agent_lacks_steer: 'This agent version does not support steer', steer_fail_session_not_found: 'Session not found — it may have expired', steer_fail_not_running: 'Agent is not currently running', steer_fail_stream_dead: 'The agent stream has ended', steer_fail_steer_error: 'Steer delivery failed — the agent may have finished', steer_fail_network_error: 'Network error — check your connection', steer_fail_unknown: 'Steer unavailable', steer_recovery_retry: 'Retry', steer_recovery_dismiss: 'Dismiss', busy_interrupt_confirm: 'Đã ngắt — đang gửi tin nhắn mới', settings_label_default_message_mode: 'Chế độ tin nhắn mặc định', settings_desc_default_message_mode: 'Điều khiển hành vi khi bạn gửi tin nhắn trong lúc agent đang chạy. Queue sẽ chờ; Interrupt sẽ hủy và bắt đầu mới; Steer sẽ chèn điều chỉnh giữa lượt mà không ngắt. Nếu Steer không khả dụng, bản nháp sẽ được khôi phục để bạn chọn hành động tiếp theo.', settings_label_fade_text_effect: 'Hiệu ứng mờ chữ', settings_desc_fade_text_effect: 'Làm mờ dần các từ mới stream vào khi assistant đang phản hồi. Tương tự OpenWebUI; mặc định tắt để đạt hiệu năng tối đa.', settings_label_max_tokens: 'Số token đầu ra tối đa', settings_desc_max_tokens: 'Giới hạn độ dài của các phản hồi stream mới. Để trống để dùng giá trị dự phòng của hồ sơ hiện tại.', settings_placeholder_max_tokens_none: 'Không ghi đè', settings_placeholder_max_tokens_fallback: 'Không ghi đè (dự phòng: {0})', settings_default_message_mode_queue: 'Xếp hàng phản hồi tiếp theo', settings_default_message_mode_interrupt: 'Ngắt lượt hiện tại', settings_default_message_mode_steer: 'Steer (điều chỉnh giữa lượt)', settings_label_busy_placeholder_hint: 'Show busy placeholder hint', settings_desc_busy_placeholder_hint: 'Shows the composer placeholder with the current busy action while the session is running and the draft is empty.', composer_placeholder_busy_queue: 'Enter = queue | /interrupt | /background | /steer', composer_placeholder_busy_interrupt: 'Enter = interrupt | /queue | /background | /steer', composer_placeholder_busy_steer: 'Enter = steer | /queue | /background | /interrupt', slash_skill_badge:'Kỹ năng', slash_skill_desc:'Gọi kỹ năng này', cmd_stop:'Dừng phản hồi hiện tại', cmd_title:'Lấy hoặc đặt tiêu đề phiên', cmd_retry:'Gửi lại tin nhắn cuối', cmd_undo:'Xóa lượt trao đổi cuối', cmd_btw:'Đặt câu hỏi phụ (tạm thời)', cmd_btw_usage:'/btw — đặt câu hỏi phụ bằng ngữ cảnh phiên', cmd_background:'Chạy prompt nền', cmd_background_usage:'/background — chạy song song không chặn', cmd_branch:'Fork cuộc trò chuyện này thành phiên mới', cmd_branch_usage:'/branch [name] — fork cuộc trò chuyện (có thể đặt tên)', branch_forked:'Đã fork sang phiên mới', branch_failed:'Fork thất bại: ', fork_from_here:'Fork từ đây', forked_from:'Fork từ', subagent_children:'Phiên subagent', btw_asking:'Đang hỏi câu hỏi phụ...', btw_label:'Câu hỏi phụ — không lưu vào lịch sử', btw_done:'Đã trả lời câu hỏi phụ', btw_no_answer:'Không nhận được câu trả lời.', btw_failed:'Câu hỏi phụ thất bại: ', bg_running:'Đang chạy nền...', bg_complete:'Tác vụ nền hoàn tất', bg_label:'Kết quả nền:', bg_no_answer:'(không có câu trả lời)', bg_failed:'Tác vụ nền thất bại: ', undo_exchange:'Hoàn tác lượt trao đổi cuối', cmd_status:'Hiển thị thông tin phiên', cmd_voice:'Bật/tắt nhập microphone', stream_stopped:'Đã dừng phản hồi.', no_active_task:'Không có tác vụ hoạt động để dừng.', cancel_unavailable:'Không thể hủy.', retry_failed:'Gửi lại thất bại: ', undo_failed:'Hoàn tác thất bại: ', undid_n_messages:'Đã xóa', undid_messages_suffix:'tin nhắn.', status_heading:'Trạng thái phiên', status_session_id:'ID phiên', status_title:'Tiêu đề', status_model:'Model', status_provider:'Provider', status_workspace:'Workspace', status_personality:'Personality', status_messages:'Tin nhắn', status_agent_running:'Agent đang chạy', status_profile: 'Hồ sơ', status_hermes_home: 'Thư mục Hermes', status_started: 'Bắt đầu', status_updated: 'Cập nhật', status_tokens: 'Token', status_ephemeral: 'Ảnh chụp tạm thời — không lưu vào lịch sử transcript.', status_no_tokens: 'Chưa dùng token', status_unknown: 'Không xác định', status_yes:'Có', status_no:'Không', status_load_failed:'Tải trạng thái thất bại: ', title_current:'Tiêu đề hiện tại', title_change_hint:'Dùng `/title ` để đổi tên.', title_set:'Đã đặt tiêu đề thành', cmd_webui_only_session:'Lệnh này không khả dụng cho các phiên được import từ CLI.', cmd_voice_use_mic:'Bấm nút microphone trong composer.', usage_heading:'Sử dụng token', usage_default_model:'mặc định', usage_unknown:'không xác định', usage_input_tokens:'Token đầu vào', usage_output_tokens:'Token đầu ra', usage_total:'Tổng token', usage_estimated_cost:'Chi phí ước tính', usage_settings_tip:'Lưu ý: chi phí chỉ mang tính ước lượng.', usage_load_failed:'Tải thống kê sử dụng thất bại: ', usage_personality_none:'không có', // Session toolsets (#493) session_toolsets:'Bộ công cụ phiên', session_toolsets_desc:'Giới hạn công cụ khả dụng cho phiên này (để trống = dùng cấu hình toàn cục)', session_toolsets_global:'Toàn cục (mặc định)', session_toolsets_custom:'Tùy chỉnh', session_toolsets_placeholder:'tool1, tool2, …', session_toolsets_apply:'Áp dụng', session_toolsets_clear:'Xóa (dùng cấu hình toàn cục)', session_toolsets_applied:'Đã cập nhật bộ công cụ', session_toolsets_cleared:'Đã xóa bộ công cụ — dùng cấu hình toàn cục', session_toolsets_failed:'Cập nhật bộ công cụ thất bại: ', no_personalities: 'Không tìm thấy personality nào (thêm vào ~/.hermes/personalities/)', available_personalities: 'Các personality khả dụng:', personality_switch_hint: '\n\nDùng `/personality ` để chuyển hoặc `/personality none` để xóa.', personalities_load_failed: 'Tải personality thất bại', personality_cleared: 'Đã xóa personality', personality_set: 'Personality: ', failed_colon: 'Thất bại: ', // ui.js no_workspace: 'Không có không gian làm việc', terminal_open_title: 'Mở terminal của không gian làm việc', terminal_no_workspace_title: 'Chọn workspace để mở terminal', terminal_title: 'Terminal', terminal_clear: 'Xóa', terminal_copy_output: 'Sao chép đầu ra', terminal_restart: 'Khởi động lại', terminal_collapse: 'Thu gọn', terminal_expand: 'Mở rộng', terminal_close: 'Đóng', terminal_input_placeholder: 'Chạy lệnh...', terminal_start_failed: 'Khởi động terminal thất bại: ', terminal_input_failed: 'Nhập terminal thất bại: ', terminal_copy_failed: 'Sao chép thất bại: ', terminal_error: 'Lỗi terminal', terminal_remote_backend_unsupported: 'Terminal nhúng chỉ hỗ trợ backend terminal local.', workspace_empty_no_path: 'Chưa chọn workspace. Đặt workspace trong Settings → Workspace để duyệt file.', workspace_empty_dir: 'Không gian làm việc này đang trống.', workspace_show_hidden_files: 'Hiện file ẩn', workspace_show_hidden_files_desc: 'Bao gồm .DS_Store, .git, node_modules và các file hệ thống / ẩn khác trong cây thư mục.', workspace_hidden_files_visible: 'đang hiện file ẩn', workspace_hidden_files_visible_title: 'File ẩn đang hiển thị — bấm để xem tùy chọn', workspace_options: 'Tùy chọn không gian làm việc', // workspace.js unsaved_confirm: 'Bạn có thay đổi chưa lưu trong phần xem trước. Bỏ thay đổi và chuyển trang?', save: 'Lưu', edit: 'Chỉnh sửa', save_title: 'Lưu thay đổi', edit_title: 'Chỉnh sửa file này', saved: 'Đã lưu', save_failed: 'Lưu thất bại: ', image_load_failed: 'Không thể tải ảnh', file_open_failed: 'Không thể mở file', downloading: (name) => `Đang tải ${name}\u2026`, mic_insecure_origin: 'Nhập giọng nói cần kết nối bảo mật. Hãy mở Hermes qua HTTPS hoặc từ localhost để dùng microphone.', double_click_rename: 'Nhấp đúp để đổi tên', session_rename_failed_no_row: 'Không thể bắt đầu đổi tên — không tìm thấy hàng.', renamed_to: 'Đã đổi tên thành ', rename_failed: 'Đổi tên thất bại: ', moved_to: 'Đã chuyển tới ', move_failed: 'Chuyển thất bại: ', delete_title: 'Xóa', delete_confirm: (name) => `Xóa ${name}?`, delete_dir_confirm: (name) => `Xóa thư mục "${name}" và toàn bộ nội dung?`, rename_title: 'Đổi tên', rename_prompt: 'Tên mới:', deleted: 'Đã xóa ', delete_failed: 'Xóa thất bại: ', reveal_in_finder: 'Hiện trong trình quản lý tệp', reveal_failed: 'Hiển thị thất bại: ', copy_file_path: 'Sao chép đường dẫn file', open_in_vscode: 'Mở bằng VS Code', open_in_vscode_failed: 'Mở bằng VS Code thất bại: ', download_folder: 'Tải thư mục', path_copied: 'Đã sao chép đường dẫn file vào clipboard', path_copy_failed: 'Sao chép đường dẫn thất bại: ', session_rename: 'Đổi tên cuộc trò chuyện', session_rename_desc: 'Chỉnh sửa tiêu đề cuộc trò chuyện này', session_title_regenerate: 'Tạo lại tiêu đề', session_title_regenerate_desc: 'Yêu cầu Hermes tạo tiêu đề mới từ cuộc trò chuyện', session_title_regenerating: 'Đang tạo lại tiêu đề…', session_title_regenerated: (title) => `Đã tạo lại tiêu đề: ${title}`, session_title_regenerate_failed: 'Tạo lại tiêu đề thất bại: ', session_copy_link: 'Sao chép liên kết cuộc trò chuyện', session_copy_link_desc: 'Sao chép liên kết trực tiếp tới cuộc trò chuyện này', session_link_copied: 'Đã sao chép liên kết cuộc trò chuyện vào clipboard', session_link_copy_failed: 'Sao chép liên kết cuộc trò chuyện thất bại: ', new_file_prompt: 'Tên file mới (ví dụ: notes.md):', new_file: 'File mới', new_folder: 'Thư mục mới', workspace_root: 'thư mục gốc workspace', new_file_prompt_title: 'Tên tệp mới trong {0}:', new_folder_prompt_title: 'Tên thư mục mới trong {0}:', project_name_prompt: 'Tên project:', created: 'Đã tạo ', create_failed: 'Tạo thất bại: ', new_folder_prompt: 'Tên thư mục mới:', folder_created: 'Đã tạo thư mục ', folder_create_failed: 'Tạo thư mục thất bại: ', workspace_auto_create_folder: 'Tạo thư mục nếu chưa tồn tại', folder_add_as_space_btn: 'Thêm làm Space', folder_add_as_space_msg: 'Thêm thư mục này làm space mới trong danh sách workspace?', folder_add_as_space_title: 'Thêm làm Space?', remove_title: 'Xóa', empty_dir: '(trống)', upload_failed: 'Tải lên thất bại: ', upload_too_large: (maxMb, fileMb) => `File quá lớn (${fileMb} MB). Kích thước tối đa là ${maxMb} MB.`, uploading: 'Đang tải lên…', uploaded: 'Đã tải lên', all_uploads_failed: (n) => `Toàn bộ ${n} lần tải lên đều thất bại`, archive_extracted: (n, c) => `Đã giải nén ${n} file từ ${c} archive`, session_pin: 'Ghim cuộc trò chuyện', session_unpin: 'Bỏ ghim cuộc trò chuyện', session_pin_desc: 'Giữ cuộc trò chuyện này ở đầu danh sách', session_unpin_desc: 'Bỏ khỏi danh sách ghim', session_pin_failed: 'Ghim thất bại: ', session_move_project: 'Chuyển sang dự án', session_move_project_desc_has: 'Đổi project cho cuộc trò chuyện này', session_move_project_desc_none: 'Gán project cho cuộc trò chuyện này', session_archive: 'Lưu trữ cuộc trò chuyện', session_hide_external: 'Ẩn khỏi danh sách', session_restore: 'Khôi phục cuộc trò chuyện', session_archive_desc: 'Ẩn cuộc trò chuyện này cho tới khi hiện archived', session_archive_worktree_desc: 'Ẩn cuộc trò chuyện này; giữ worktree trên đĩa', session_hide_external_desc: 'Ẩn phiên import này khỏi WebUI mà không xóa lịch sử nguồn.', session_restore_desc: 'Đưa cuộc trò chuyện này trở lại danh sách chính', session_archived: 'Đã lưu trữ phiên', session_archived_worktree: 'Đã lưu trữ phiên. Worktree vẫn còn trên đĩa.', session_hidden: 'Đã ẩn phiên khỏi danh sách', session_restored: 'Đã khôi phục phiên', session_archive_failed: 'Lưu trữ thất bại: ', session_duplicate: 'Nhân bản cuộc trò chuyện', session_duplicate_desc: 'Tạo bản sao với cùng workspace và model', session_export_html: 'Export as HTML', session_export_html_desc: 'Download this conversation as a self-contained HTML file', session_duplicated: 'Đã nhân bản phiên', session_duplicate_failed: 'Nhân bản thất bại: ', session_stop_response: 'Dừng phản hồi', session_stop_response_desc: 'Hủy phản hồi đang chạy cho cuộc trò chuyện này', session_delete: 'Xóa cuộc trò chuyện', session_delete_desc: 'Xóa vĩnh viễn cuộc trò chuyện này', session_delete_confirm: 'Xóa cuộc trò chuyện này?', session_delete_worktree_desc: 'Chỉ xóa cuộc trò chuyện WebUI; giữ worktree trên đĩa', session_delete_worktree_confirm: (path) => `Xóa cuộc trò chuyện này? Worktree tại ${path} sẽ vẫn còn trên đĩa.`, session_deleted: 'Đã xóa cuộc trò chuyện', session_deleted_worktree: 'Đã xóa cuộc trò chuyện. Worktree vẫn còn trên đĩa.', settings_label_session_endless_scroll: 'Tải tin nhắn cũ khi cuộn lên', settings_desc_session_endless_scroll: 'Khi bật, các tin nhắn cũ sẽ tự động tải khi bạn cuộn lên trên. Khi tắt, dùng nút tải tin nhắn cũ.', settings_label_auto_scroll_follow: 'Tự động cuộn theo nội dung mới', settings_desc_auto_scroll_follow: 'Khi bật, khung nhìn sẽ tự cuộn xuống cuối khi token mới được stream vào. Khi tắt, bạn sẽ tự điều khiển vị trí cuộn.', settings_label_render_user_markdown: 'Render Markdown trong tin nhắn người dùng', settings_label_show_titlebar_profile: 'Hiển thị bộ chuyển profile trên thanh tiêu đề', settings_desc_show_titlebar_profile: 'Khi bật, nút chuyển profile sẽ xuất hiện ở góc trên bên trái thanh tiêu đề ứng dụng để bạn đổi profile từ bất kỳ tab nào. Mặc định tắt; chân khung soạn thảo luôn có bộ chuyển profile dù cài đặt này thế nào.', settings_desc_render_user_markdown: 'Khi bật, chữ đậm, chữ nghiêng, liên kết và các Markdown khác trong tin nhắn của bạn sẽ được render. Mặc định tắt; khối code fenced và công thức toán luôn được render bất kể cài đặt này.', settings_label_large_text_paste_as_attachment: 'Attach large pasted text as file', settings_desc_large_text_paste_as_attachment: 'When enabled, long pasted text becomes a .md attachment instead of filling the composer.', settings_label_project_quick_create: 'Show per-project new-conversation buttons', settings_desc_project_quick_create: 'When enabled, each project chip in the sidebar gets a + button to start a conversation in that project.', settings_label_structured_code: 'Khối code JSON/YAML', settings_option_structured_code_auto: 'Tự động: dạng cây cho khối dài', settings_option_structured_code_on: 'Mặc định dạng cây', settings_option_structured_code_off: 'Mặc định dạng thô', settings_label_structured_code_auto_lines: 'Ngưỡng số dòng tự động', settings_desc_structured_code: 'Khi chọn Tự động, các khối JSON/YAML có ít nhất số dòng này sẽ mở ở dạng cây. Dạng cây luôn mở trình xem có cấu trúc; Dạng thô giữ văn bản được tô sáng cú pháp. Bạn vẫn có thể chuyển Dạng cây/Dạng thô trên từng khối.', settings_label_worklog_details_expanded_default: 'Tự động mở chi tiết Worklog', settings_desc_worklog_details_expanded_default: 'Khi bật, chi tiết Worklog mới sẽ được mở sẵn để hiển thị tool, suy nghĩ và thẻ tiến trình mà không cần bấm thêm. Khi tắt, Worklog sẽ mặc định thu gọn; các lựa chọn mở/thu gọn thủ công theo từng lượt vẫn được ưu tiên.', settings_label_chat_activity_display_mode: 'Hiển thị hoạt động', settings_desc_chat_activity_display_mode: 'Compact Worklog gom nhóm hoạt động thành bản tóm tắt gọn. Transparent Stream giữ mỗi sự kiện thinking/tool thành một dòng theo thứ tự thời gian có thể mở rộng.', first_token_time: 'Thời gian tới token đầu tiên', processed_elapsed: _i18nProcessedElapsedVi, worklog_thinking: 'Đang suy nghĩ', tool_target_skill_suffix: 'kỹ năng', tool_action_label: _i18nToolActionLabelVi, tool_worklog_summary: _i18nToolWorklogSummaryVi, tool_summary_join: _i18nToolSummaryJoinVi, done: 'Hoàn tất', settings_option_compact_worklog: 'Nhật ký công việc rút gọn', settings_option_transparent_stream: 'Luồng trong suốt', settings_label_tab_visibility: 'Tab sidebar', settings_desc_tab_visibility: 'Chọn tab nào xuất hiện trong sidebar và thanh rail. Kéo các chip để đổi thứ tự. Chat và Settings luôn hiển thị.', settings_label_composer_controls: 'Điều khiển chân khung chat', settings_desc_composer_controls: 'Bật/tắt các điều khiển hiển thị ở chân khung chat. Kéo các chip để đổi thứ tự trong từng nhóm chân khung.', settings_label_composer_situational_controls: 'Điều khiển chân khung theo ngữ cảnh', settings_desc_composer_situational_controls: 'Các điều khiển này không phải lúc nào cũng xuất hiện, tùy theo kích thước màn hình, chế độ hoặc trạng thái chạy. Bạn vẫn có thể tắt chúng nếu cần.', composer_control_attach: 'Đính kèm', composer_control_saved_prompts: 'Prompt đã lưu', composer_control_mic: 'Mic', composer_control_profile: 'Profile', composer_control_workspace: 'Workspace', composer_control_model: 'Model', composer_control_reasoning: 'Lập luận', composer_control_context: 'Ngữ cảnh', composer_control_voice_mode: 'Chế độ giọng nói', composer_control_toolsets: 'Toolset', composer_control_status: 'Trạng thái', composer_control_yolo: 'YOLO', composer_control_quota_chip: 'Chip hạn mức', composer_control_bg_badge: 'Huy hiệu nền', composer_control_mobile_config: 'Cấu hình di động', open_in_browser: 'Mở trong trình duyệt', settings_dropdown_conversation: 'Cuộc trò chuyện', settings_dropdown_appearance: 'Giao diện', settings_dropdown_preferences: 'Tùy chọn', settings_dropdown_providers: 'Provider', settings_dropdown_system: 'Hệ thống', settings_tab_conversation: 'Cuộc trò chuyện', settings_tab_appearance: 'Giao diện', settings_tab_preferences: 'Tùy chọn', settings_tab_plugins: 'Plugin', settings_tab_extensions: 'Tiện ích mở rộng', settings_extensions_gallery_tab: 'Gallery', settings_extensions_installed_tab: 'Installed', settings_extensions_diagnostics_tab: 'Diagnostics', settings_extensions_gallery_loading: 'Loading gallery…', settings_extensions_gallery_empty: 'No extensions found in the registry.', settings_extensions_gallery_error: 'Failed to load gallery.', ext_gallery_install: 'Install', ext_gallery_installing: 'Installing…', ext_gallery_installed: 'Installed', ext_gallery_uninstall: 'Uninstall', ext_gallery_uninstalling: 'Uninstalling…', ext_gallery_restart_required: 'Restart required', ext_gallery_permissions_show: 'Permissions', ext_gallery_permissions_hide: 'Hide permissions', ext_gallery_permissions_empty: 'Không khai báo quyền bổ sung nào.', ext_gallery_version: 'Version', ext_gallery_author: 'Author', ext_gallery_capabilities: 'Capabilities', ext_gallery_next_step: 'Bước tiếp theo', ext_gallery_after_install: 'Sau khi cài đặt', ext_gallery_local_component_required: 'Tiện ích mở rộng này có thành phần cục bộ. Sau khi cài đặt, hãy khởi động ứng dụng cục bộ hoặc sidecar bắt buộc.', ext_gallery_local_app_label: 'Ứng dụng cục bộ', ext_gallery_required_suffix: 'Cần {0}', ext_gallery_sidecar_required: 'Cần sidecar', ext_gallery_native_host_required: 'Cần native host', ext_gallery_open_setup_guide: 'Mở hướng dẫn thiết lập', ext_gallery_install_restart_required: 'Đã cài đặt tiện ích mở rộng. Cần khởi động lại để áp dụng.', ext_gallery_install_followup: 'Đã cài đặt tiện ích mở rộng. Xem thẻ để biết các bước tiếp theo.', ext_gallery_install_ok: 'Extension installed successfully.', ext_gallery_uninstall_ok: 'Extension uninstalled.', settings_plugins_title: 'Plugin', plugins_enable_toggle: 'Bật', settings_plugins_meta: 'Xem các plugin Hermes đã cài đặt và lifecycle hook mà chúng đăng ký. Bảng này chỉ đọc.', settings_plugins_empty: 'Hiện không có plugin Hermes nào hiển thị. Hãy cài đặt hoặc bật plugin từ Hermes CLI/config để thấy chúng ở đây.', plugins_unnamed: 'Plugin chưa đặt tên', plugins_no_description: 'Không có mô tả.', plugins_no_hooks: 'Không có lifecycle hook nào được đăng ký', plugins_registered_hooks: 'Lifecycle hook đã đăng ký', plugins_enabled: 'Đã bật', plugins_disabled: 'Đã tắt', plugins_active_provider: 'Đang hoạt động (provider)', plugins_provider_no_hooks: 'Plugin provider — không có hook hiển thị agent', plugins_load_failed: 'Tải plugin thất bại: ', settings_tab_system: 'Hệ thống', settings_tab_help: 'Trợ giúp', settings_help_meta: 'Tài nguyên và hỗ trợ cho Hermes WebUI.', settings_help_docs_label: 'Tài liệu', settings_help_docs_desc: 'Hướng dẫn, tham chiếu cấu hình và README đầy đủ của Hermes WebUI.', settings_help_docs_link: 'Mở tài liệu', settings_help_issue_label: 'Có vấn đề?', settings_help_issue_desc: 'Tìm báo cáo hiện có hoặc mở issue mới trên GitHub.', settings_help_issue_link: 'Mở trang GitHub Issues', settings_title: 'Cài đặt', settings_save_btn: 'Lưu cài đặt', settings_label_model: 'Model mặc định', settings_desc_model: 'Được dùng cho các cuộc trò chuyện mới. Các cuộc trò chuyện hiện có vẫn giữ model đã chọn.', settings_label_auxiliary_models: 'Model phụ trợ', settings_desc_auxiliary_models: 'Điều hướng tác vụ phụ cho vision, nén, tạo tiêu đề, v.v. "Auto" sẽ dùng model chat chính.', settings_btn_reset_aux_models: 'Đặt lại tất cả về auto', settings_btn_apply_aux_models: 'Áp dụng thay đổi', settings_aux_provider_auto: 'dùng model chính', settings_aux_model_auto: 'auto (dùng mặc định của provider)', settings_aux_model_custom: 'Model tùy chỉnh…', settings_aux_model_custom_prompt: 'Nhập ID model:', settings_aux_loading: 'Đang tải model phụ trợ…', settings_aux_load_failed: 'Không thể tải cài đặt model phụ trợ. Hãy chắc chắn API agent khả dụng.', settings_aux_reset_confirm_title: 'Đặt lại model phụ trợ?', settings_aux_reset_confirm_msg: 'Thao tác này sẽ đặt tất cả tác vụ phụ trợ về auto (dùng model chính).', settings_aux_reset_done: 'Đã đặt lại model phụ trợ về auto', settings_aux_save_failed: 'Lưu model phụ trợ thất bại', settings_aux_saved: 'Đã cập nhật model phụ trợ', settings_aux_no_changes: 'Không có thay đổi để áp dụng', settings_label_send_key: 'Phím gửi', settings_label_theme: 'Theme', settings_label_skin: 'Skin', settings_label_font_size: 'Cỡ chữ', font_size_small: 'Nhỏ', font_size_default: 'Mặc định', font_size_large: 'Lớn', font_size_xlarge: 'Rất lớn', settings_autosave_saving: 'Đang lưu…', settings_autosave_saved: 'Đã lưu', settings_autosave_failed: 'Lưu thất bại', settings_autosave_retry: 'Thử lại', settings_label_language: 'Ngôn ngữ', settings_label_quota_chip: 'Hiện hạn mức nhà cung cấp trong khung soạn thảo', settings_desc_quota_chip: 'Hiển thị chỉ báo quota còn lại (ví dụ: số dư credit OpenRouter) ở footer của composer. Mặc định tắt. Chỉ hiển thị trên màn hình rộng (≥1400px) khi bật để giữ composer gọn gàng trên laptop và desktop thông thường.', settings_label_conversation_outline: 'Hiện mục lục cuộc trò chuyện', settings_desc_conversation_outline: 'Hiển thị danh sách nhảy nhanh cho các câu hỏi của người dùng trong cuộc trò chuyện hiện tại trên desktop. Mặc định tắt.', settings_label_hide_suggestions: 'Ẩn gợi ý chat mới', settings_desc_hide_suggestions: 'Ẩn ba nút gợi ý mặc định trên màn hình chat mới để tránh bấm nhầm.', settings_label_token_usage: 'Hiện mức sử dụng token', settings_label_token_speed: 'Hiện tốc độ token (TPS)', settings_desc_token_speed: 'Hiển thị token mỗi giây trong header tin nhắn assistant khi đang stream và sau khi hoàn tất phản hồi. Mặc định tắt.', settings_label_sidebar_density: 'Mật độ sidebar', cmd_reasoning: 'Bật/tắt hiển thị suy nghĩ (show/hide), đặt mức effort hoặc kiểm tra trạng thái hiện tại', settings_label_external_sessions: 'Hiện phiên không phải WebUI', settings_label_claude_code_sessions: 'Show Claude Code sessions', settings_label_cron_sessions: 'Hiện phiên cron', settings_label_webhook_sessions: 'Hiện phiên webhook', settings_label_previous_messaging_sessions: 'Hiện các phiên nhắn tin trước đó', settings_label_sync_insights: 'Đồng bộ sang insights', settings_label_check_updates: 'Kiểm tra cập nhật', settings_label_ignore_agent_updates: 'Bỏ qua cập nhật Agent', settings_label_whats_new_summary: "Tóm tắt What's New bằng AI", settings_label_bot_name: 'Tên assistant mặc định', settings_label_password: 'Mật khẩu truy cập', settings_label_pinned_limit: 'Giới hạn ghim cuộc trò chuyện', settings_desc_pinned_limit: 'Số lượng tối đa cuộc trò chuyện hoạt động có thể được ghim trong sidebar. Mặc định là 3.', settings_label_dashboard_mode: 'Bảng điều khiển Hermes chính thức', settings_desc_dashboard_mode: 'Hiển thị liên kết nav-rail khi dashboard Hermes chính thức khả dụng. URL reverse-proxy công khai chỉ được lưu trong trình duyệt và không bao giờ bị server probe.', settings_dashboard_mode_auto: 'Tự động phát hiện', settings_dashboard_mode_always: 'Luôn hiển thị', settings_dashboard_mode_never: 'Không bao giờ hiển thị', settings_dashboard_save: 'Lưu cài đặt liên kết dashboard', settings_label_gateway_status: 'Trạng thái gateway', settings_desc_gateway_status: 'Trạng thái gateway Hermes (Telegram, Discord, Slack, v.v.)', gateway_not_configured: 'Gateway chưa được cấu hình', gateway_metadata_stale: 'Metadata gateway đã cũ', gateway_endpoint_unreachable: 'Không thể truy cập endpoint gateway', gateway_not_running: 'Gateway hiện chưa chạy', gateway_running_label: 'Đang chạy', gateway_last_active: 'Hoạt động lần cuối: ', gateway_session_count: (n) => `${n} ${n === 1 ? 'phiên' : 'phiên'}`, gateway_load_failed: 'Tải trạng thái gateway thất bại', settings_saved: 'Đã lưu cài đặt', settings_save_failed: 'Lưu thất bại: ', settings_load_failed: 'Tải cài đặt thất bại: ', settings_saved_pw: 'Đã lưu cài đặt — bảo vệ bằng mật khẩu đã bật và trình duyệt này vẫn đăng nhập', settings_saved_pw_updated: 'Đã lưu cài đặt — mật khẩu đã được cập nhật', // login page (used server-side via /api/i18n/login endpoint) login_title: 'Đăng nhập', login_subtitle: 'Nhập mật khẩu để tiếp tục', login_placeholder: 'Mật khẩu', login_btn: 'Đăng nhập', login_invalid_pw: 'Mật khẩu không hợp lệ', login_conn_failed: 'Kết nối thất bại', dialog_confirm_title: 'Xác nhận thao tác', dialog_prompt_title: 'Nhập giá trị', dialog_confirm_btn: 'Xác nhận', // Sidebar & Tabs tab_chat: 'Chat', tab_tasks: 'Tác vụ', tab_skills: 'Kỹ năng', tab_memory: 'Bộ nhớ', tab_workspaces: 'Spaces', tab_profiles: 'Hồ sơ', tab_kanban: 'Kanban', kanban_board: 'Bảng', kanban_visible_tasks: '{0} tác vụ hiển thị', kanban_search_tasks: 'Tìm kiếm tác vụ', kanban_all_assignees: 'Tất cả assignee', kanban_all_tenants: 'Tất cả tenant', kanban_include_archived: 'Bao gồm mục đã lưu trữ', kanban_no_matching_tasks: 'Không có tác vụ phù hợp', kanban_no_data: 'Không có dữ liệu Kanban', kanban_work_queue_hint: 'Đây là hàng đợi công việc của Hermes Agent. Tạo hoặc phân loại tác vụ, gán người xử lý, chuyển sang Ready rồi để dispatcher nhận.', kanban_tasks_hidden_by_filters: 'Tasks hidden by filters', kanban_clear_filters: 'Clear filters', kanban_unavailable: 'Kanban không khả dụng', kanban_read_only: 'Chế độ chỉ đọc', kanban_empty: 'Trống', kanban_task: 'Tác vụ', kanban_no_description: 'Không có mô tả', kanban_refresh: 'Làm mới', kanban_status_triage: 'Phân loại', kanban_status_todo: 'Todo', kanban_status_ready: 'Sẵn sàng', kanban_status_running: 'Đang chạy', kanban_status_blocked: 'Bị chặn', kanban_status_done: 'Hoàn tất', kanban_comments_count: 'Bình luận ({0})', kanban_events_count: 'Sự kiện ({0})', kanban_links: 'Liên kết', kanban_parents: 'Cha', kanban_children: 'Con', kanban_runs_count: 'Lần chạy ({0})', kanban_no_comments: 'Không có bình luận', kanban_no_events: 'Không có sự kiện', kanban_no_runs: 'Không có lần chạy', kanban_title: 'Tiêu đề', kanban_description: 'Mô tả', kanban_description_placeholder: 'Tùy chọn — điều gì cần thực hiện, tiêu chí chấp nhận, liên kết', kanban_status: 'Trạng thái', kanban_assignee: 'Người phụ trách', kanban_assignee_placeholder: 'Tùy chọn — để trống cho bất kỳ worker nào', kanban_tenant: 'Tenant', kanban_tenant_placeholder: 'Tùy chọn — slug project hoặc team', kanban_priority: 'Độ ưu tiên', kanban_priority_hint: 'Số cao hơn sẽ chạy trước. Mặc định là 0.', kanban_title_required: 'Tiêu đề là bắt buộc.', kanban_new_task: 'Tác vụ mới', kanban_view_lanes: 'Lane theo hồ sơ', kanban_view_consolidated: 'Chế độ xem tổng hợp', kanban_view_lanes_saved: 'Chế độ Kanban: lane theo hồ sơ', kanban_view_consolidated_saved: 'Chế độ Kanban: tổng hợp', kanban_view_update_failed: 'Cập nhật chế độ Kanban thất bại: ', kanban_edit_task: 'Chỉnh sửa tác vụ', kanban_status_original_hint: 'Trạng thái thực tế: {0}. Hộp thoại này chỉ hỗ trợ chỉnh sửa Triage/Todo/Ready.', kanban_run_dispatcher: 'Chạy bộ điều phối', kanban_run_dispatcher_confirm: 'Thao tác này sẽ nhận các tác vụ Ready trên bảng này và tạo subprocess worker (mỗi tác vụ một worker, tối đa 8 mỗi lần bấm). Tiếp tục?', kanban_assignee_profiles_label: 'Hồ sơ Hermes', kanban_assignee_other_label: 'Khác (CLI lanes / profile đã xóa)', kanban_assignee_unassigned: '— Chưa gán (sẽ không tự chạy) —', kanban_ready_needs_assignee: 'Bạn đã chọn Unassigned + Ready. Dispatcher sẽ bỏ qua tác vụ này. Gửi lại để xác nhận hoặc chọn một profile.', kanban_dispatch_preview_prefix: 'Xem trước:', kanban_dispatch_run_prefix: 'Đã dispatch:', kanban_dispatch_spawned: 'đã tạo', kanban_dispatch_promoted: 'đã nâng cấp', kanban_dispatch_reclaimed: 'đã nhận lại', kanban_dispatch_skipped_unassigned: 'đã bỏ qua (chưa gán)', kanban_dispatch_skipped_nonspawnable: 'đã bỏ qua (profile không xác định)', kanban_dispatch_auto_blocked: 'tự động chặn', kanban_dispatch_timed_out: 'hết thời gian', kanban_dispatch_crashed: 'bị crash', kanban_add_comment: 'Thêm bình luận', kanban_workspace_kind: 'Loại workspace', kanban_workspace_path: 'Đường dẫn workspace', kanban_workspace_path_placeholder: 'Đường dẫn tới workspace', kanban_workspace_scratch: 'Tạm thời', kanban_workspace_worktree: 'Worktree', kanban_workspace_dir: 'Thư mục', kanban_workspace_path_required: 'Workspace không phải tạm thời cần có đường dẫn.', kanban_skills: 'Skills', kanban_skills_placeholder: 'Comma-separated skill names, e.g. python,git', kanban_max_runtime_seconds: 'Max runtime (seconds)', kanban_max_runtime_hint: 'Leave empty for unlimited.', kanban_max_runtime_invalid: 'Max runtime must be a whole number of seconds greater than 0.', kanban_parents_modal: 'Parent dependencies', kanban_parents_placeholder: 'Parent task ID', kanban_add_dependency: 'Thêm phụ thuộc', kanban_remove_dependency: 'Xóa phụ thuộc', kanban_dependency_placeholder: 'ID tác vụ cần liên kết', kanban_dependency_self: 'Một tác vụ không thể phụ thuộc vào chính nó', kanban_only_mine: 'Chỉ của tôi', kanban_bulk_action: 'Thao tác hàng loạt', kanban_nudge_dispatcher: 'Xem trước bộ điều phối', kanban_stats: 'Thống kê', kanban_worker_log: 'Log worker', kanban_block: 'Chặn', kanban_unblock: 'Bỏ chặn', kanban_back_to_board: 'Quay lại bảng', kanban_lanes_by_profile: 'Cột theo hồ sơ', kanban_new_board: 'Bảng mới…', kanban_rename_board: 'Đổi tên bảng hiện tại…', kanban_archive_board: 'Lưu trữ bảng hiện tại…', kanban_archive_board_confirm: 'Lưu trữ bảng "{name}"? Các tác vụ vẫn còn trên đĩa và bảng có thể được khôi phục từ kanban/boards/_archived/.', kanban_board_archived: 'Đã lưu trữ bảng', kanban_board_name: 'Tên', kanban_board_slug: 'Slug (chữ thường, dấu gạch nối)', kanban_board_description: 'Mô tả (tùy chọn)', kanban_board_icon: 'Biểu tượng (emoji, tùy chọn)', kanban_board_color: 'Màu sắc (tùy chọn)', kanban_board_name_required: 'Tên là bắt buộc', kanban_board_slug_required: 'Slug là bắt buộc', kanban_card_complete: 'hoàn tất', kanban_card_archive: 'lưu trữ', kanban_unassigned: 'chưa gán', kanban_status_archived: 'Đã lưu trữ', tab_todos: 'Todos', tab_insights: 'Insights', tab_dashboard: 'Bảng điều khiển Hermes', dashboard_loopback_warning: 'Dashboard chỉ cho phép loopback trên server. Hãy truy cập trực tiếp từ server hoặc khởi động lại với --host 0.0.0.0 (không an toàn).', tab_logs: 'Logs', tab_settings: 'Cài đặt', close_menu: 'Đóng menu', new_conversation: 'Cuộc trò chuyện mới', filter_conversations: 'Lọc cuộc trò chuyện...', markdown_table_filter: 'Lọc bảng', markdown_table_sort_column: 'Sắp xếp cột', session_time_unknown: 'Không xác định', session_time_minutes_ago: (n) => `${n}p`, session_time_hours_ago: (n) => `${n}g`, session_time_days_ago: (n) => `${n}n`, session_time_last_week: '1t', session_time_bucket_today: 'Hôm nay', session_time_bucket_yesterday: 'Hôm qua', session_time_bucket_this_week: 'Tuần này', session_time_bucket_last_week: 'Tuần trước', session_time_bucket_older: 'Cũ hơn', scheduled_jobs: 'Tác vụ đã lên lịch', new_job: 'Tác vụ mới', loading: 'Đang tải...', search_skills: 'Tìm kỹ năng...', new_skill: 'Kỹ năng mới', personal_memory: 'Bộ nhớ cá nhân', current_task_list: 'Danh sách tác vụ hiện tại', // Logs logs_title: 'Logs', logs_file: 'File', logs_tail: 'Tail', logs_auto_refresh: 'Tự động làm mới (5s)', logs_wrap: 'Xuống dòng', logs_copy_all: 'Sao chép tất cả', logs_empty: 'Chưa có dòng log nào.', logs_loading: 'Đang tải log…', logs_load_failed: 'Tải log thất bại', logs_status_idle: 'Chọn file log để xem các dòng gần đây.', logs_no_mtime: 'chưa được ghi', logs_truncated_hint: 'Đang hiển thị phần cuối của file log lớn; các byte cũ hơn đã bị bỏ qua để giới hạn bộ nhớ.', logs_copied: 'Đã sao chép log', logs_severity: 'Mức độ', logs_severity_all: 'Tất cả', logs_severity_errors: 'Lỗi', logs_severity_warnings: 'Cảnh báo+', logs_filter_active: 'đang hiển thị (bộ lọc đang hoạt động)', // Insights insights_title: 'Phân tích sử dụng', insights_sessions: 'Phiên', insights_messages: 'Tin nhắn', insights_tokens: 'Token', insights_cost: 'Chi phí ước tính', insights_no_cost: 'Không có', insights_models: 'Model', insights_activity_by_day: 'Hoạt động theo ngày', insights_activity_by_hour: 'Hoạt động theo giờ', insights_peak_hour: 'Cao điểm: {hour}', insights_token_breakdown: 'Phân tích token', insights_input_tokens: 'Đầu vào', insights_output_tokens: 'Đầu ra', insights_total: 'Tổng', insights_daily_tokens: 'Token hàng ngày', insights_model_name: 'Model', insights_model_sessions: 'Phiên', insights_model_tokens: 'Token', insights_model_cost: 'Chi phí', insights_model_cache: 'Cache', insights_cache_hit: 'Tỷ lệ trúng bộ nhớ đệm prompt', insights_model_share: 'Tỷ lệ', insights_no_usage_data: 'Chưa có dữ liệu sử dụng', insights_footer: 'Hiển thị dữ liệu trong {days} ngày gần nhất', insights_skill_usage_title: 'Sử dụng kỹ năng', insights_skill_usage_sub: 'Tần suất gọi công cụ', insights_skill_usage_total: 'Tổng số lần gọi', insights_skill_usage_skills_used: 'Kỹ năng đã dùng', insights_skill_usage_no_data: 'Chưa có dữ liệu sử dụng kỹ năng', insights_skill_usage_no_data_hint: 'Kỹ năng sẽ xuất hiện ở đây sau khi được dùng trong cuộc trò chuyện.', insights_skill_usage_footer: 'Số lượng từ ~/.hermes/skills/', insights_skill_usage_col_skill: 'Kỹ năng', insights_skill_usage_col_uses: 'Lần dùng', insights_skill_usage_col_views: 'Lượt xem', insights_skill_usage_col_share: 'Tỷ lệ sử dụng %', insights_skill_usage_col_patches: 'Patch', workspace_desc: 'Thêm và chuyển đổi workspace cho các phiên.', session_meta_messages: (n) => `${n} tin nhắn`, session_meta_children: (n) => `${n} phiên con`, // Softened label: avoids exposing the technical internal term // 'segment' in the default visible badge. User-facing copy remains // translatable for locales that prefer a different wording. (#2155) session_meta_segments: (n) => `${n} lượt trước`, session_lineage_toggle_hint: '{0} — các lượt ngữ cảnh trước đó đang được thu gọn ở đây. Bấm để hiện hoặc ẩn chúng.', session_lineage_static_hint: '{0} — các lượt ngữ cảnh trước đó đang được thu gọn ở đây.', session_child_toggle_hint: '{0} — các cuộc trò chuyện con được tạo từ phiên này. Bấm để hiện hoặc ẩn chúng.', session_readonly_title_hint: 'Phiên import chỉ đọc — {0}', session_lineage_segment_untitled: 'Segment chưa có tiêu đề', session_lineage_segment_open: 'Mở đoạn lineage', new_profile: 'Profile mới', transcript: 'Transcript', download_transcript: 'Tải dưới dạng Markdown', import: 'Import', export_session_json: 'JSON', export_session_json_tooltip: 'Xuất toàn bộ phiên dưới dạng JSON', export_session_html: 'HTML', export_session_html_tooltip: 'Xuất dưới dạng trang HTML độc lập', import_session_json_tooltip: 'Nhập phiên từ JSON', clear_conversation_btn_tooltip: 'Xóa toàn bộ tin nhắn trong cuộc trò chuyện này', // Settings detail settings_label_rtl: 'Bố cục chat từ phải sang trái', settings_desc_rtl: 'Đảo hướng căn chỉnh tin nhắn chat và ô nhập cho các ngôn ngữ như Arabic hoặc Hebrew. Chỉ ảnh hưởng vùng chat — sidebar và các panel khác vẫn giữ trái sang phải.', settings_label_sound: 'Âm thanh thông báo', settings_desc_sound: 'Phát âm thanh khi assistant hoàn tất phản hồi.', // TTS (#499) tts_listen: 'Nghe', tts_not_supported: 'Trình duyệt này không hỗ trợ tổng hợp giọng nói.', settings_label_tts: 'Chuyển văn bản thành giọng nói cho phản hồi', settings_desc_tts: "Hiển thị nút loa trên mỗi tin nhắn assistant để đọc to bằng chức năng speech synthesis của trình duyệt.", settings_label_tts_auto_read: 'Tự động đọc phản hồi', settings_desc_tts_auto_read: 'Tự động đọc to mỗi phản hồi mới của assistant khi hoàn tất. Sẽ tạm dừng khi bạn bắt đầu nhập.', // Composer voice-mode pref (#1488) settings_label_voice_mode: 'Nút chế độ giọng nói rảnh tay', settings_desc_voice_mode: 'Hiển thị nút voice-mode (dạng sóng âm thanh) cạnh microphone đọc chính tả. Cho phép bạn nói tự nhiên — Hermes tự gửi sau khoảng dừng và đọc phản hồi thành tiếng. Yêu cầu trình duyệt hỗ trợ cả nhận diện giọng nói và TTS.', settings_label_raw_audio: 'Gửi âm thanh gốc thay vì chuyển thành văn bản', settings_desc_raw_audio: 'Ghi và gửi file âm thanh gốc tới agent thay vì chuyển thành text trước. Agent sau đó có thể tự chuyển lời nói thành văn bản hoặc xử lý âm thanh gốc (cảm xúc, tiếng nền, STT tùy chỉnh). Tương tự hành vi voice message của Telegram.', voice_send_raw: 'Gửi âm thanh gốc', voice_raw_attached: 'Đã đính kèm âm thanh. Nhấn Gửi hoặc nhập thêm.', settings_label_tts_voice: 'Giọng nói', settings_desc_tts_voice: "Giọng nói ưu tiên. Lấy từ các giọng có sẵn trong trình duyệt.", settings_label_tts_rate: 'Tốc độ nói', settings_label_tts_pitch: 'Cao độ giọng nói', settings_label_tts_engine: 'Engine TTS', settings_desc_tts_engine: 'Chọn engine giọng nói. Edge TTS dùng giọng neural của Microsoft thông qua server.', settings_label_notifications: 'Thông báo trình duyệt', settings_desc_notifications: 'Hiển thị thông báo hệ thống khi phản hồi hoàn tất trong lúc ứng dụng đang chạy nền.', notifications_enable_btn: 'Bật thông báo', notifications_test_btn: 'Gửi thử', notifications_permission_status: (status) => `Quyền: ${status}`, notifications_enabled_toast: 'Đã bật thông báo.', notifications_denied: 'Thông báo đang bị chặn trong trình duyệt này. Hãy bật trong cài đặt trình duyệt.', notifications_unsupported: 'Trình duyệt này không hỗ trợ thông báo.', settings_desc_token_usage: 'Hiển thị số lượng token đầu vào/đầu ra dưới mỗi phản hồi của assistant. Cũng có thể bật/tắt bằng /usage.', settings_label_api_redact: 'Ẩn dữ liệu nhạy cảm trong phản hồi API', settings_desc_api_redact: 'Người dùng self-hosted có thể tắt để minh bạch hơn (không khuyến nghị cho instance dùng chung).', settings_sidebar_density_compact: 'Gọn', settings_sidebar_density_detailed: 'Chi tiết', settings_desc_sidebar_density: 'Điều khiển lượng metadata hiển thị trong danh sách phiên ở sidebar trái.', settings_label_auto_title_refresh: 'Tự động làm mới tiêu đề', settings_auto_title_refresh_off: 'Tắt', settings_auto_title_refresh_5: 'Mỗi 5 lượt trao đổi', settings_auto_title_refresh_10: 'Mỗi 10 lượt trao đổi', settings_auto_title_refresh_20: 'Mỗi 20 lượt trao đổi', settings_desc_auto_title_refresh: 'Tự động tạo lại tiêu đề phiên dựa trên lượt trao đổi mới nhất, giúp tiêu đề luôn phù hợp khi cuộc trò chuyện phát triển. Yêu cầu có model tạo tiêu đề LLM được cấu hình.', settings_desc_external_sessions: 'Hiển thị các cuộc trò chuyện từ CLI, Telegram, Discord, Slack và các kênh khác trong danh sách phiên. Bấm để import và tiếp tục.', settings_desc_claude_code_sessions: 'Show Claude Code imported sessions in the sidebar, or hide them while leaving other external sessions visible.', settings_desc_cron_sessions: 'Hiển thị output của cron job như các cuộc trò chuyện trong sidebar. Chỉ hoạt động khi bật phiên không phải WebUI. Mặc định tắt; job tần suất cao có thể làm sidebar bị ngập.', settings_desc_webhook_sessions: 'Hiển thị các lần chạy webhook như các cuộc trò chuyện trong sidebar. Chỉ hoạt động khi bật phiên không phải WebUI. Mặc định tắt; route lưu lượng cao có thể làm sidebar bị ngập.', settings_desc_previous_messaging_sessions: 'Hiển thị các phiên Discord, Telegram, Slack và Weixin cũ đã bị thay thế bởi reset hoặc nén.', settings_desc_sync_insights: 'Đồng bộ token usage của WebUI sang state.db để hermes /insights bao gồm dữ liệu phiên trình duyệt. Mặc định tắt.', settings_desc_check_updates: 'Hiển thị banner khi có phiên bản mới của WebUI hoặc Agent. Định kỳ chạy git fetch nền.', settings_desc_ignore_agent_updates: 'Giữ kiểm tra cập nhật WebUI nhưng ẩn thông báo cập nhật Agent và bỏ qua fetch cập nhật Agent.', settings_desc_whats_new_summary: "Thay đổi hành động What's New từ mở diff thô sang tạo tóm tắt ngắn dễ đọc bằng AI. So sánh diff thông thường vẫn khả dụng sau phần tóm tắt.", settings_desc_bot_name: 'Chỉ dùng cho profile mặc định. Các profile khác dùng tên profile riêng.', settings_desc_password: 'Nhập mật khẩu mới để đặt hoặc thay đổi. Để trống để giữ cài đặt hiện tại.', password_placeholder: 'Nhập mật khẩu mới…', password_env_var_locked: 'Biến môi trường HERMES_WEBUI_PASSWORD hiện đang được đặt và có ưu tiên cao hơn. Hãy unset biến này và khởi động lại server để quản lý mật khẩu tại đây.', password_env_var_locked_placeholder: 'Đã khóa: biến môi trường HERMES_WEBUI_PASSWORD đang được đặt', disable_auth: 'Tắt xác thực', sign_out: 'Đăng xuất', settings_label_shutdown: 'Dừng máy chủ Hermes WebUI', settings_desc_shutdown_before_cmd: 'Dừng an toàn server WebUI local. Hữu ích nếu bạn khởi chạy bằng ', settings_desc_shutdown_between_cmds: ' và muốn dừng mà không cần chuyển sang terminal. Bạn sẽ cần khởi chạy lại server (', settings_desc_shutdown_after_cmd: ' hoặc ứng dụng native) trước khi WebUI có thể truy cập lại.', settings_btn_shutdown: 'Dừng server', settings_shutdown_confirm_title: 'Dừng Hermes WebUI', settings_shutdown_confirm_message: 'Dừng máy chủ Hermes WebUI?', settings_shutdown_confirm_btn: 'Dừng', settings_shutdown_stopped_message: 'Server đã dừng. Bạn có thể đóng tab này.', // Providers panel providers_tab_title: 'Provider', providers_section_title: 'Nhà cung cấp', providers_section_meta: 'Quản lý API key cho các nhà cung cấp AI. Thay đổi có hiệu lực ngay lập tức.', providers_status_configured: 'Đã cấu hình API key', providers_status_not_configured: 'Chưa có API key', providers_status_oauth: 'OAuth', providers_status_api_key: 'API key', providers_status_model: 'Mô hình', providers_status_not_configured_label: 'Chưa cấu hình', providers_oauth_hint: 'Đã xác thực bằng OAuth. Không cần API key.', providers_oauth_config_yaml_hint: 'Token được cấu hình qua config.yaml. Để cập nhật, chỉnh sửa phần providers trong config.yaml hoặc chạy hermes auth.', providers_oauth_not_configured_hint: 'Chưa xác thực. Chạy hermes auth trong terminal để cấu hình provider này.', providers_save: 'Lưu', providers_refresh_models: 'Làm mới model', providers_refreshing: 'Đang làm mới…', providers_models_refreshed: 'Đã làm mới model', providers_remove: 'Xóa', providers_saving: 'Đang lưu…', providers_removing: 'Đang xóa…', providers_enter_key: 'Vui lòng nhập khóa API', providers_empty: 'Không tìm thấy nhà cung cấp nào có thể cấu hình.', providers_key_updated: 'Đã lưu API key', providers_key_removed: 'Đã xóa API key', providers_key_placeholder_new: 'sk-...', providers_key_placeholder_replace: 'Nhập key mới để thay thế…', provider_quota_title: 'Quota provider đang hoạt động', provider_quota_active_provider: 'Provider đang hoạt động', provider_quota_last_checked_after_refresh: 'Kiểm tra lần cuối sau khi làm mới', provider_quota_last_checked: 'Kiểm tra lần cuối {0}', provider_quota_refresh_usage: 'Làm mới usage', provider_quota_refreshing: 'Đang làm mới...', provider_quota_refresh_title: 'Làm mới giới hạn sử dụng provider ngay bây giờ', provider_quota_refresh_succeeded: 'Đã làm mới usage provider', provider_quota_refresh_failed: 'Làm mới usage provider thất bại', provider_quota_session_limit: 'Giới hạn 5 giờ', provider_quota_weekly_limit: 'Giới hạn hàng tuần', provider_quota_window_fallback: 'Khoảng thời gian', provider_quota_metric_remaining: 'Còn lại', provider_quota_metric_used: 'Đã dùng', provider_quota_metric_limit: 'Giới hạn', provider_quota_status_available: 'khả dụng', provider_quota_status_exhausted: 'đã hết', provider_quota_status_unavailable: 'không khả dụng', provider_quota_status_failed: 'thất bại', provider_quota_status_checked: 'đã kiểm tra', provider_quota_status_no_key: 'không có key', provider_quota_status_invalid_key: 'key không hợp lệ', provider_quota_status_unsupported: 'không hỗ trợ', provider_quota_used_meta: '{0} đã dùng', provider_quota_resets_meta: 'reset lúc {0}', provider_quota_credential_pool: 'Nhóm thông tin xác thực', provider_quota_credential_label: 'Credential {0}', provider_quota_pool_plans: 'Gói: {0}', provider_quota_pool_no_windows: 'Không có cửa sổ giới hạn tài khoản nào được báo cáo.', provider_quota_account_limits_loaded: 'Đã tải giới hạn tài khoản.', provider_quota_unavailable: 'Trạng thái quota không khả dụng', provider_quota_retry_after: 'Thử lại sau {0}', provider_quota_pool_summary_available: '{0}/{1} khả dụng', provider_quota_pool_summary_exhausted: '{0} đã hết', provider_quota_pool_summary_failed: '{0} thất bại', provider_quota_pool_summary_checked: '{0} đã kiểm tra', provider_cost_budget_label: 'Monthly budget', provider_cost_budget_placeholder: 'e.g. 50.00', provider_cost_budget_set: 'Set', provider_cost_budget_clear: 'Clear', provider_cost_budget_pct: '{0}% of ${1} budget (monthly pace)', provider_cost_budget_save_failed: 'Failed to save budget', cancel: 'Hủy', create_job: 'Tạo job', save_skill: 'Lưu kỹ năng', editing: 'Đang chỉnh sửa', // Empty state empty_title: 'Tôi có thể giúp gì cho bạn?', empty_subtitle: 'Hỏi bất cứ điều gì, chạy lệnh, khám phá file hoặc quản lý các tác vụ đã lên lịch.', suggest_files: 'Workspace này có những file gì?', suggest_schedule: "Hôm nay tôi có lịch gì?", suggest_plan: 'Giúp tôi lập kế hoạch cho một dự án nhỏ.', // onboarding onboarding_badge: 'LẦN CHẠY ĐẦU', onboarding_title: 'Chào mừng đến với Hermes Web UI', onboarding_lead: 'Thiết lập nhanh có hướng dẫn sẽ kiểm tra Hermes, lưu cấu hình provider thực, chọn workspace và model, đồng thời có thể bảo vệ ứng dụng bằng mật khẩu.', onboarding_back: 'Quay lại', onboarding_continue: 'Tiếp tục', onboarding_skip: 'Bỏ qua thiết lập', onboarding_skipped: 'Đã bỏ qua thiết lập — dùng cấu hình hiện có.', onboarding_open: 'Mở Hermes', onboarding_step_system_title: 'Kiểm tra hệ thống', onboarding_step_system_desc: 'Xác minh Hermes Agent và khả năng truy cập config.', onboarding_step_setup_title: 'Thiết lập nhà cung cấp', onboarding_step_setup_desc: 'Lưu cấu hình provider tối thiểu cho Hermes.', onboarding_step_workspace_title: 'Không gian làm việc + model', onboarding_step_workspace_desc: 'Chọn mặc định cho phiên mới và chat.', onboarding_step_password_title: 'Mật khẩu tùy chọn', onboarding_step_password_desc: 'Bảo vệ Web UI trước khi chia sẻ.', onboarding_step_finish_title: 'Hoàn tất', onboarding_step_finish_desc: 'Xem lại và vào ứng dụng.', onboarding_notice_system_ready: 'Hermes Agent có vẻ truy cập được từ Web UI.', onboarding_notice_system_unavailable: 'Hermes Agent chưa hoàn toàn khả dụng. Bootstrap có thể cài đặt nhưng thiết lập provider vẫn có thể cần terminal.', onboarding_check_agent: 'Hermes Agent', onboarding_check_agent_ready: 'Đã phát hiện và có thể import', onboarding_check_agent_missing: 'Thiếu hoặc chỉ import được một phần', onboarding_check_password: 'Mật khẩu', onboarding_check_password_enabled: 'Đã bật', onboarding_check_password_disabled: 'Chưa bật', onboarding_check_provider: 'Cấu hình nhà cung cấp', onboarding_check_provider_ready: 'Sẵn sàng chat', onboarding_check_provider_partial: 'Đã lưu nhưng chưa hoàn chỉnh', onboarding_check_provider_pending: 'Cần xác minh', onboarding_config_file: 'File config:', onboarding_env_file: '.env file:', onboarding_unknown: 'Không xác định', onboarding_current_provider: 'Thiết lập hiện tại:', onboarding_missing_imports: 'Thiếu các import sau:', onboarding_notice_setup_required: 'Hãy chọn cách thiết lập provider đơn giản tại đây. Các luồng OAuth nâng cao hiện vẫn nên thực hiện trong Hermes CLI.', onboarding_notice_setup_already_ready: 'Đã phát hiện cấu hình provider Hermes đang hoạt động. Bạn có thể giữ nguyên hoặc thay thế tại đây.', onboarding_oauth_provider_ready_title: 'Provider đã xác thực', onboarding_oauth_provider_ready_body: 'Instance này được cấu hình dùng provider OAuth ({provider}) đã được thiết lập qua Hermes CLI. Không cần API key tại đây — nhấn Tiếp tục để hoàn tất thiết lập.', onboarding_oauth_provider_not_ready_title: 'Provider OAuth chưa được xác thực', onboarding_oauth_provider_not_ready_body: 'Instance này được cấu hình dùng {provider}, sử dụng OAuth thay vì API key. Hãy chạy hermes auth hoặc hermes model trong terminal để xác thực rồi tải lại Web UI.', onboarding_oauth_switch_hint: 'Hoặc chọn provider khác bên dưới để chuyển sang thiết lập bằng API key:', oauth_login_codex: 'Đăng nhập bằng Codex (ChatGPT)', oauth_codex_step1: 'Bước 1: Truy cập URL này và nhập mã', oauth_codex_step2: 'Bước 2: Nhập mã này trên trang', oauth_codex_polling: 'Đang chờ xác thực...', oauth_codex_success: 'Đăng nhập OAuth Codex thành công!', oauth_codex_error: 'Đăng nhập OAuth thất bại', oauth_codex_expired: 'Mã đã hết hạn, vui lòng thử lại', onboarding_notice_workspace: 'Các giá trị này dùng lại cùng API cài đặt như ứng dụng bình thường.', onboarding_workspace_label: 'Workspace', onboarding_workspace_or_path: 'Hoặc nhập đường dẫn workspace', onboarding_workspace_placeholder: '/home/you/workspace', onboarding_provider_label: 'Chế độ thiết lập', onboarding_quick_setup_badge: 'thiết lập nhanh', provider_category_easy_start: 'Khởi đầu dễ dàng', provider_category_self_hosted: 'Mở / self-hosted', provider_category_specialized: 'Chuyên biệt', onboarding_api_key_label: 'API key', onboarding_api_key_placeholder: 'Để trống để giữ key đã lưu hiện có', onboarding_api_key_label_optional: 'API key (tùy chọn)', onboarding_api_key_placeholder_optional: 'Để trống cho server không cần key', onboarding_api_key_help_keyless: 'Hầu hết cài đặt LM Studio / Ollama / vLLM chạy không cần key — hãy để trống nếu server của bạn không yêu cầu xác thực. Dùng nút Test connection để xác minh.', onboarding_api_key_help_prefix: 'Được lưu dưới dạng secret trong file .env của Hermes bằng', onboarding_base_url_label: 'Base URL', onboarding_base_url_placeholder: 'https://your-endpoint.example/v1', onboarding_base_url_help: 'Dùng cho router tương thích OpenAI, server self-hosted, LiteLLM, Ollama, LM Studio, vLLM hoặc endpoint tương tự.', onboarding_model_label: 'Model mặc định', onboarding_workspace_help: 'Chọn model Hermes sẽ dùng cho các chat mới sau khi hoàn tất thiết lập.', onboarding_custom_model_placeholder: 'ten-model-cua-ban', onboarding_custom_model_help: 'Với endpoint tùy chỉnh, nhập đúng model ID mà server yêu cầu.', onboarding_notice_password_enabled: 'Mật khẩu đã được cấu hình. Chỉ nhập mật khẩu mới nếu bạn muốn thay thế.', onboarding_notice_password_recommended: 'Tùy chọn nhưng được khuyến nghị nếu bạn sẽ mở UI ngoài localhost.', onboarding_password_label: 'Mật khẩu (tùy chọn)', onboarding_password_placeholder: 'Để trống để bỏ qua', onboarding_password_help: 'Mật khẩu được lưu qua API settings hiện có và hash ở phía server.', onboarding_notice_finish: 'Bạn có thể mở lại Settings sau để thay đổi bất kỳ mục nào.', onboarding_not_set: 'Chưa đặt', onboarding_password_will_enable: 'Sẽ được bật', onboarding_password_will_replace: 'Sẽ được thay thế', onboarding_password_keep_existing: 'Giữ mật khẩu hiện tại', onboarding_password_remains_disabled: 'Sẽ vẫn tắt', onboarding_password_skipped: 'Tạm bỏ qua', onboarding_finish_help: 'Hoàn tất sẽ lưu onboarding_completed vào settings và đưa bạn vào ứng dụng bình thường.', onboarding_error_choose_workspace: 'Chọn workspace trước khi tiếp tục.', onboarding_error_choose_model: 'Chọn model trước khi tiếp tục.', onboarding_error_provider_required: 'Chọn chế độ thiết lập trước khi tiếp tục.', onboarding_error_base_url_required: 'Base URL là bắt buộc cho endpoint tùy chỉnh.', onboarding_probe_test_button: 'Kiểm tra kết nối', onboarding_probe_probing: 'Đang kiểm tra kết nối…', onboarding_probe_ok: 'Đã kết nối. Có {n} model khả dụng.', onboarding_probe_error_generic: 'Không thể truy cập Base URL đã cấu hình.', onboarding_probe_error_invalid_url: 'Base URL phải bắt đầu bằng http:// hoặc https://.', onboarding_probe_error_dns: 'Không thể phân giải hostname. Kiểm tra URL hoặc dùng địa chỉ IP của host.', onboarding_probe_error_connect_refused: 'Kết nối bị từ chối — server có thể chưa chạy trên địa chỉ đó. Nếu chạy trong Docker, hãy thử IP host thay vì localhost.', onboarding_probe_error_timeout: 'Endpoint không phản hồi kịp thời. Kiểm tra server đang chạy và URL chính xác.', onboarding_probe_error_http_4xx: 'Endpoint trả về lỗi client. Kiểm tra xác thực và đường dẫn URL (thường kết thúc bằng /v1).', onboarding_probe_error_http_5xx: 'Endpoint trả về lỗi server. Kiểm tra log LM Studio / Ollama.', onboarding_probe_error_parse: 'Endpoint không trả về danh sách model đúng định dạng mong đợi. Kiểm tra URL có trỏ đúng tới API root tương thích OpenAI.', onboarding_probe_error_unreachable: 'Không thể truy cập Base URL đã cấu hình.', onboarding_error_probe_failed: 'Không thể xác minh Base URL đã cấu hình.', onboarding_error_workspace_required: 'Workspace là bắt buộc.', onboarding_error_model_required: 'Model là bắt buộc.', onboarding_complete: 'Hoàn tất thiết lập ban đầu', // panel/runtime i18n error_prefix: 'Lỗi: ', default: 'mặc định', search: 'Tìm kiếm', not_available: 'Không có', never: 'không bao giờ', add: 'Thêm', add_failed: 'Thêm thất bại: ', remove_failed: 'Xóa thất bại: ', switch_failed: 'Chuyển đổi thất bại: ', name_required: 'Tên là bắt buộc', content_required: 'Nội dung là bắt buộc', view: 'Xem', dismiss: 'Đóng', disable: 'Tắt', cron_no_jobs: 'Không tìm thấy job đã lên lịch.', cron_status_off: 'tắt', cron_status_paused: 'tạm dừng', cron_status_error: 'lỗi', cron_status_active: 'đang hoạt động', cron_status_running: 'đang chạy\u2026', cron_status_needs_attention: 'cần chú ý', cron_attention_desc: 'Job lặp lại này không có thời gian chạy tiếp theo. Scheduler có thể đã không tính được lần chạy kế tiếp.', cron_attention_croniter_hint: 'Runtime Gateway có thể thiếu package croniter. Hãy khởi động lại Gateway với hỗ trợ cron rồi tiếp tục job này.', cron_attention_resume: 'Tiếp tục và tính toán lại', cron_jobs_project: 'Cron Jobs', cron_attention_run_once: 'Chạy một lần ngay', cron_attention_copy_diagnostics: 'Sao chép chẩn đoán', cron_diagnostics_copied: 'Đã sao chép chẩn đoán cron', cron_next: 'Tiếp theo', cron_last: 'Lần cuối', cron_run_now: 'Chạy ngay', cron_pause: 'Tạm dừng', cron_resume: 'Tiếp tục', cron_job_name_placeholder: 'Tên job', cron_schedule_placeholder: 'Lịch chạy', cron_prompt_placeholder: 'Prompt', cron_last_output: 'Output cuối', cron_expand_prompt: 'Mở rộng prompt', cron_collapse_prompt: 'Thu gọn prompt', cron_expand_output: 'Mở rộng output', cron_collapse_output: 'Thu gọn output', cron_mode_agent: 'Agent', cron_mode_script: 'Script', cron_mode_label: 'Chế độ', cron_script_job_banner: 'Chạy script theo lịch — stdout được gửi tới đích. Không có agent, prompt hoặc skill.', cron_script_card_title: 'Script', cron_script_output: 'Đầu ra script', cron_script_path_label: 'Đường dẫn script', cron_script_path_hint: 'Được resolve dưới ~/.hermes/scripts/ trừ khi là đường dẫn tuyệt đối. Hãy chỉnh sửa file script trên server để thay đổi hành vi.', cron_script_badge_title: 'Job script (không dùng agent)', cron_workdir_label: 'Thư mục làm việc', cron_view_full_output: 'Xem toàn bộ đầu ra', cron_all_runs: 'Tất cả lần chạy', cron_hide_runs: 'Ẩn lần chạy', cron_no_runs_yet: '(chưa có lần chạy nào)', cron_schedule_required_example: 'Lịch chạy là bắt buộc (ví dụ: "0 9 * * *" hoặc "every 1h")', cron_schedule_required: 'Lịch chạy là bắt buộc', cron_prompt_required: 'Prompt là bắt buộc', cron_job_created: 'Đã tạo job', cron_duplicate: 'Nhân bản', cron_duplicated: 'Đã nhân bản job (tạm dừng)', cron_job_triggered: 'Đã kích hoạt job', cron_job_paused: 'Đã tạm dừng job', cron_job_resumed: 'Đã tiếp tục job', cron_job_updated: 'Đã cập nhật job', cron_model_label: 'Ghi đè model', cron_model_hint: 'Ghi đè model mặc định cho job này.', cron_model_no_agent_hint: 'Job no-agent chạy trực tiếp script đã cấu hình; không dùng model.', cron_model_use_default: 'Mặc định (dùng profile/hệ thống mặc định)', cron_delete_confirm_title: 'Xóa cron job', cron_delete_confirm_message: 'Hành động này không thể hoàn tác.', cron_job_deleted: 'Đã xóa job', cron_completion_status: (name, status) => `Cron "${name}" ${status}`, status_failed: 'thất bại', status_completed: 'hoàn tất', todos_no_active: 'Không có danh sách tác vụ hoạt động trong phiên này.', clear_conversation_title: 'Xóa cuộc trò chuyện', clear_conversation_message: 'Xóa toàn bộ tin nhắn? Hành động này không thể hoàn tác.', clear_failed: 'Xóa thất bại: ', skills_no_match: 'Không có kỹ năng phù hợp.', skill_enabled: 'Đã bật', skill_disabled: 'Đã tắt', skill_toggle_failed: 'Bật/tắt kỹ năng thất bại: ', linked_files: 'File liên kết', skill_load_failed: 'Không thể tải kỹ năng: ', skill_file_load_failed: 'Không thể tải file: ', skill_name_required: 'Tên kỹ năng là bắt buộc', skill_updated: 'Đã cập nhật kỹ năng', skill_created: 'Đã tạo kỹ năng', skill_deleted: 'Đã xóa kỹ năng', skill_delete_confirm: 'Xóa kỹ năng "{0}"?', skills_empty_title: 'Chọn một kỹ năng', skills_empty_sub: 'Chọn một kỹ năng từ sidebar để xem nội dung hoặc tạo kỹ năng mới.', skills_edit: 'Chỉnh sửa', skills_delete: 'Xóa', skills_back_to: 'Quay lại {0}', tasks_empty_title: 'Chọn một job đã lên lịch', tasks_empty_sub: 'Chọn một job từ sidebar để xem chi tiết và các lần chạy hoặc tạo job mới.', workspaces_empty_title: 'Chọn một space', workspaces_empty_sub: 'Chọn một space từ sidebar để xem file và cài đặt hoặc thêm space mới.', profiles_empty_title: 'Chọn một hồ sơ', profiles_empty_sub: 'Chọn một profile agent từ sidebar để xem và chỉnh sửa cài đặt hoặc tạo profile mới.', memory_notes_label: 'bộ nhớ (ghi chú)', memory_saved: 'Đã lưu bộ nhớ', my_notes: 'Ghi chú của tôi', user_profile: 'Hồ sơ người dùng', external_notes_sources: 'Nguồn ghi chú bên thứ ba', external_notes_empty: 'Chưa có nguồn MCP ghi chú hoặc tri thức nào hiển thị. Hãy cấu hình Joplin, Obsidian, Notion, llm-wiki hoặc server ghi chú khác để liệt kê tại đây.', external_notes_auto_recall_hint: 'Tự động gọi lại phiên không thay đổi; ngăn này chỉ hiển thị các nguồn đã cấu hình và công cụ đọc/tìm kiếm khả dụng.', external_notes_no_tools: 'Hiện không có công cụ đọc/tìm kiếm nào hiển thị cho nguồn này.', external_notes_tool_count: (count) => `${count} công cụ ghi chú khả dụng`, external_notes_configured_hint: 'Tên công cụ được mong đợi từ nguồn đã cấu hình này; schema trực tiếp sẽ xuất hiện khi runtime WebUI hiển thị chúng.', external_notes_recent_ai: 'AI dùng gần đây', external_notes_auto: 'tự động', external_notes_recent_ai_reason: 'Tự động gọi lại', external_notes_search_placeholder: 'Tìm ghi chú…', external_notes_search_empty: 'Tìm kiếm một nguồn ghi chú đã cấu hình để xem trước ghi chú tại đây.', source_active: 'đang hoạt động', source_configured: 'đã cấu hình', no_notes_yet: 'Chưa có ghi chú.', no_profile_yet: 'Chưa có profile.', agent_soul: 'Linh hồn Agent', no_soul_yet: 'Chưa định nghĩa soul.', workspace_choose_path: 'Chọn đường dẫn workspace', workspace_choose_path_meta: 'Thêm đường dẫn hợp lệ và chuyển cuộc trò chuyện này', workspace_manage: 'Quản lý không gian làm việc', workspace_manage_meta: 'Mở bảng Spaces', workspace_use_title: 'Dùng trong phiên hiện tại', workspace_use: 'Sử dụng', workspace_add_path_placeholder: 'Thêm đường dẫn workspace (ví dụ: /home/user/my-project)', workspace_paths_validated_hint: 'Đường dẫn được xác minh là thư mục tồn tại trước khi lưu.', workspace_drag_hint: 'Kéo để sắp xếp lại', workspace_reorder_failed: 'Sắp xếp lại thất bại', workspace_added: 'Đã thêm workspace', workspace_renamed: 'Đã đổi tên workspace', workspace_remove_confirm_title: 'Xóa workspace', workspace_remove_confirm_message: (path) => `Xóa "${path}"?`, workspace_removed: 'Đã xóa workspace', workspace_switch_prompt_title: 'Chuyển không gian làm việc', workspace_switch_prompt_message: 'Nhập đường dẫn workspace tuyệt đối để thêm và chuyển cuộc trò chuyện này sang đó.', workspace_switch_prompt_confirm: 'Chuyển', workspace_switch_prompt_placeholder: '/Users/you/project', workspace_not_added: 'Workspace chưa được thêm', workspace_already_saved: 'Workspace đã được lưu — hãy chọn từ danh sách', workspace_busy_switch: 'Không thể chuyển workspace khi agent đang chạy', discard_file_edits_title: 'Bỏ thay đổi file?', discard_file_edits_message: 'Chuyển workspace sẽ bỏ các chỉnh sửa file chưa lưu trong phần xem trước.', workspace_switched_to: (name) => `Đã chuyển sang ${name}`, profiles_no_profiles: 'Không tìm thấy profile nào.', profile_api_keys_configured: 'Đã cấu hình API key', profile_gateway_running: 'Gateway đang hoạt động', profile_gateway_stopped: 'Gateway đã dừng', profile_active: 'ĐANG HOẠT ĐỘNG', profile_no_configuration: 'Không có cấu hình', profile_skill_count: (count) => `${count} kỹ năng`, profile_use: 'Sử dụng', profile_switch_title: 'Chuyển sang hồ sơ này', profile_delete_title: 'Xóa profile này', profile_default_label: '(mặc định)', profile_name_placeholder: 'Tên profile (chữ thường, a-z 0-9 dấu gạch ngang)', profile_clone_label: 'Nhân bản cấu hình từ profile đang hoạt động', profile_model_label: 'Model / nhà cung cấp', profile_model_hint: 'Chọn từ các provider và model đã cấu hình cho profile mới này.', profile_model_use_default: 'Dùng mặc định của profile đang hoạt động', profile_base_url_placeholder: 'Base URL (tùy chọn, ví dụ: http://localhost:11434)', profile_api_key_placeholder: 'API key (tùy chọn)', manage_profiles: 'Quản lý profile', profiles_load_failed: 'Tải profile thất bại', profile_switched_new_conversation: (name) => `Đã chuyển sang profile: ${name} — đã bắt đầu cuộc trò chuyện mới`, profile_switched: (name) => `Đã chuyển sang profile: ${name}`, profile_name_rule: 'Chỉ chữ thường, số, dấu gạch ngang và gạch dưới', profile_base_url_rule: 'Base URL phải bắt đầu bằng http:// hoặc https://', profile_created: (name) => `Đã tạo profile: ${name}`, profile_delete_confirm_title: (name) => `Xóa hồ sơ "${name}"?`, profile_delete_confirm_message: 'Toàn bộ phiên, cấu hình, kỹ năng và bộ nhớ của profile này sẽ bị xóa vĩnh viễn. Hành động này không thể hoàn tác.', profile_deleted: (name) => `Đã xóa profile: ${name}`, active_conversation_none: 'Chưa chọn cuộc trò chuyện hoạt động.', active_conversation_meta: (title, count) => `${title} · ${count} tin nhắn`, settings_unsaved_changes: 'Bạn có thay đổi chưa lưu.', sign_out_failed: 'Đăng xuất thất bại: ', disable_auth_confirm_title: 'Tắt bảo vệ mật khẩu', disable_auth_confirm_message: 'Bất kỳ ai cũng có thể truy cập instance này.', auth_disabled: 'Đã tắt xác thực — đã gỡ bảo vệ mật khẩu', disable_auth_failed: 'Tắt xác thực thất bại: ', current_password_label: 'Mật khẩu hiện tại', current_password_placeholder: 'Nhập mật khẩu hiện tại\u2026', current_password_required: 'Cần mật khẩu hiện tại để thay đổi hoặc tắt xác thực.', current_password_incorrect: 'Mật khẩu hiện tại không đúng.', disable_auth_typed_confirm: 'Nhập DISABLE AUTH để xác nhận', auth_status_password: 'Xác thực bằng mật khẩu', auth_status_passkey_only: 'Chỉ dùng passkey', auth_status_unauthenticated: 'Chưa xác thực', auth_warning_badge: 'Xác thực đã tắt', auth_disabled_warning_message: 'Instance này có thể truy cập mà không cần xác thực.', auth_acknowledged_label: 'Tôi đã xem rủi ro này; hiển thị cảnh báo điều hướng ít khẩn cấp hơn.', auth_ack_save_failed: 'Cập nhật xác nhận thất bại: ', bg_error_single: (title) => `"${title}" đã gặp lỗi`, bg_error_multi: (count) => `${count} phiên đã gặp lỗi`, // skill form skill_name: 'Tên', skill_category: 'Danh mục', skill_category_placeholder: 'Tùy chọn, ví dụ: devops', skill_content: 'Nội dung tệp SKILL.md', skill_content_placeholder: 'YAML frontmatter + nội dung Markdown', skill_rename_not_supported: 'Không hỗ trợ đổi tên kỹ năng. Hãy tạo kỹ năng mới và xóa kỹ năng cũ để đổi tên.', skill_metadata: 'Metadata', // cron form cron_name_label: 'Tên', cron_name_placeholder: 'Tùy chọn', cron_schedule_label: 'Lịch chạy', cron_schedule_preset_label: 'Cài đặt sẵn', cron_schedule_preset_hourly: 'Hàng giờ', cron_schedule_preset_daily: 'Hàng ngày', cron_schedule_preset_weekdays: 'Ngày trong tuần', cron_schedule_preset_weekly: 'Hàng tuần', cron_schedule_preset_monthly: 'Hàng tháng', cron_schedule_preset_custom: 'Tùy chỉnh', cron_schedule_hint: "Dùng 'every 1h' hoặc biểu thức cron cho job lặp lại. Các khoảng thời gian đơn như '30m' chỉ chạy một lần.", cron_schedule_once_warning: "Các dạng thời lượng như '30m' chỉ chạy một lần và sẽ bị xóa sau khi chạy. Dùng 'every 30m' để giữ job lặp lại.", cron_prompt_label: 'Prompt', cron_deliver_label: 'Gửi output tới', cron_deliver_local: 'Cục bộ (chỉ lưu đầu ra)', cron_deliver_custom: 'Đích gửi tùy chỉnh', cron_profile_label: 'Profile', cron_profile_server_default: 'mặc định của server', cron_profile_server_default_hint: 'Dùng profile mặc định của server WebUI tại thời điểm chạy. Các job hiện có không có profile sẽ giữ hành vi cũ này.', cron_toast_notifications_label: 'Thông báo toast khi hoàn tất', cron_toast_notifications_hint: 'Hiển thị toast khi cron này hoàn tất. Badge Tasks và dấu lần chạy mới vẫn cập nhật khi tùy chọn này tắt.', cron_toast_notifications_enabled: 'Đã bật', cron_toast_notifications_disabled: 'Đã tắt', cron_skills_label: 'Kỹ năng', cron_skills_placeholder: 'Thêm kỹ năng (tùy chọn)…', cron_skills_edit_hint: 'Danh sách kỹ năng không thể chỉnh sửa sau khi tạo.', // workspace form workspace_name_label: 'Tên', workspace_name_placeholder: 'Tên thân thiện tùy chọn', workspace_path_label: 'Đường dẫn', workspace_path_required: 'Đường dẫn là bắt buộc', workspace_path_readonly: 'Không thể thay đổi đường dẫn. Chỉ có thể đổi tên.', workspace_new_title: 'Space mới', // profile form profile_name_label: 'Tên', profile_base_url_label: 'Base URL', profile_api_key_label: 'API key', approval_gateway_unsupported: 'Phê duyệt cần gateway mới hơn. Hãy nâng cấp Hermes gateway đang kết nối để bật tính năng này.', approval_gateway_unsupported_label: 'Không hỗ trợ phê duyệt', approval_skip_all: '⚡ Bỏ qua tất cả trong phiên này', approval_skip_all_title: 'Bỏ qua mọi yêu cầu phê duyệt cho phiên này', checkpoint_title: 'Checkpoint', checkpoint_empty: 'Không tìm thấy checkpoint nào cho workspace này.', checkpoint_loading: 'Đang tải điểm khôi phục…', checkpoint_error: 'Không thể tải checkpoint', checkpoint_date: 'Ngày', checkpoint_message: 'Tin nhắn', checkpoint_files: 'Tệp', checkpoint_view_diff: 'Xem diff', checkpoint_restore: 'Khôi phục', checkpoint_restore_confirm_title: 'Khôi phục điểm khôi phục?', checkpoint_restore_confirm_message: (ckpt) => `Khôi phục workspace về checkpoint "${ckpt}"? Thao tác này sẽ ghi đè các tệp bằng bản đã lưu. Các tệp được thêm sau checkpoint này sẽ không bị xóa.`, checkpoint_restored: 'Đã khôi phục checkpoint', checkpoint_diff_title: 'Các thay đổi trong checkpoint', checkpoint_diff_no_changes: 'Không tìm thấy khác biệt nào giữa checkpoint này và workspace hiện tại.', checkpoint_diff_files_changed: (n) => `${n} tệp đã thay đổi`, discard: 'Bỏ thay đổi', clear: 'Xóa', create: 'Tạo', remove: 'Xóa bỏ', cmd_yolo: 'Bật/tắt chế độ YOLO (bỏ qua phê duyệt)', composer_send: 'Gửi tin nhắn', composer_queue: 'Xếp hàng tin nhắn', composer_interrupt: 'Ngắt và gửi', composer_steer: 'Điều hướng phản hồi hiện tại', composer_stop: 'Dừng tạo phản hồi', composer_disabled_clarify: 'Hãy trả lời yêu cầu làm rõ', composer_disabled_compression: 'Đang chờ nén hoàn tất', composer_disabled_empty: 'Nhập tin nhắn để gửi', composer_compression_will_queue: 'Nhập tin nhắn — hệ thống sẽ xếp hàng và gửi sau khi nén xong', composer_mobile_workspace: 'Workspace', composer_mobile_model: 'Model', composer_mobile_quota: 'Hạn mức', composer_mobile_reasoning: 'Lập luận', composer_mobile_context: 'Ngữ cảnh', context_block_name_default: 'Ngữ cảnh', context_block_flush_aria: 'Các khối ngữ cảnh sẽ được gửi kèm khi bạn nhấn gửi', context_block_rename_hint: 'Bấm hoặc nhấn Enter để đổi tên', context_block_rename_aria: 'Đổi tên khối ngữ cảnh', context_block_remove: 'Xóa khối ngữ cảnh', csv_loading: 'Đang tải CSV', csv_too_large: 'Tệp CSV quá lớn để hiển thị trực tiếp', csv_no_data: 'Tệp CSV không đủ dữ liệu để hiển thị thành bảng', csv_error: 'Không thể tải tệp CSV', csv_header_note: 'Hàng đầu tiên được hiển thị làm tiêu đề bảng', excalidraw_loading: 'Đang tải sơ đồ', excalidraw_too_large: 'Tệp Excalidraw quá lớn để hiển thị trực tiếp', excalidraw_invalid: 'Định dạng tệp Excalidraw không hợp lệ', excalidraw_error: 'Không thể tải tệp Excalidraw', excalidraw_label: 'Sơ đồ', excalidraw_download: 'Tải xuống', excalidraw_empty: 'Sơ đồ trống', excalidraw_render_error: 'Không thể render sơ đồ', excalidraw_simplified: 'Bản xem trước SVG đã được giản lược — không hoàn toàn giống canvas Excalidraw', gateway_start: 'Bắt đầu', gateway_stop: 'Dừng', gateway_restart: 'Khởi động lại', gateway_start_success: 'Đã khởi động gateway.', gateway_restart_success: 'Đã khởi động lại gateway.', gateway_stop_success: 'Đã dừng gateway.', gateway_start_failed: 'Khởi động gateway thất bại', gateway_stop_failed: 'Dừng gateway thất bại', gateway_restart_failed: 'Khởi động lại gateway thất bại', gateway_running: 'Đang chạy', gateway_session: 'phiên', gateway_sessions: 'phiên', gateway_status_load_failed: 'Không thể tải trạng thái gateway', insights_model_health_title: 'So sánh sức khỏe model', insights_model_health_provider: 'Nhà cung cấp', insights_model_health_replacement: 'Gợi ý thay thế', insights_model_health_cost_per_m: 'Chi phí / 1M', media_audio_label: 'Âm thanh', media_svg_label: 'Sơ đồ', media_video_label: 'Video', media_download: 'Tải xuống', model_show_all_models: 'Hiển thị tất cả {0} model', outline_title: 'Dàn ý', outline_empty: 'Chưa có câu hỏi nào.', outline_loading: 'Đang tải…', pdf_truncated: 'Đang hiển thị {0} trên {1} trang đầu — hãy tải xuống để xem toàn bộ tài liệu', session_select_mode: 'Chọn', session_select_mode_desc: 'Chọn các cuộc trò chuyện để quản lý hàng loạt', session_select_all: 'Chọn tất cả', session_deselect_all: 'Bỏ chọn tất cả', session_selected_count: '{0} mục đã chọn', session_batch_archive: 'Lưu trữ', session_batch_delete: 'Xóa', session_batch_move: 'Chuyển vào dự án', session_no_selection: 'Chưa chọn cuộc trò chuyện nào', session_batch_delete_confirm: 'Xóa {0} cuộc trò chuyện?', session_batch_archive_confirm: 'Lưu trữ {0} cuộc trò chuyện?', session_batch_delete_worktree_confirm: 'Xóa {0} cuộc trò chuyện? {1} cuộc trò chuyện dùng worktree sẽ giữ nguyên thư mục worktree trên đĩa.', session_batch_archive_worktree_confirm: 'Lưu trữ {0} cuộc trò chuyện? {1} cuộc trò chuyện dùng worktree sẽ giữ nguyên thư mục worktree trên đĩa.', session_toolsets_profile_defaults: 'Mặc định của profile đang hoạt động', session_toolsets_use_profile_defaults: 'Dùng mặc định của profile đang hoạt động', session_toolsets_configured_servers: 'Máy chủ MCP đã cấu hình', session_toolsets_loading_servers: 'Đang tải các máy chủ đã cấu hình...', session_toolsets_no_configured_servers: 'Chưa có máy chủ MCP nào được cấu hình', session_worktree_remove: 'Gỡ worktree', session_worktree_remove_desc: (path) => `Xóa git worktree tại ${path} khỏi đĩa`, session_worktree_remove_not_exists: (path) => `Worktree tại ${path} không còn tồn tại trên đĩa.`, session_worktree_remove_confirm: (path) => `Gỡ git worktree khỏi đĩa?\n\nĐường dẫn: ${path}\n\nThao tác này sẽ xóa toàn bộ thư mục worktree. Dữ liệu phiên vẫn được giữ trong WebUI.`, session_worktree_remove_confirm_label: 'Gỡ bỏ', session_worktree_removed: 'Đã gỡ worktree.', session_worktree_remove_failed: 'Gỡ worktree thất bại: ', session_worktree_remove_status_failed: 'Không thể đọc trạng thái worktree: ', session_worktree_remove_locked_by_stream: 'Không thể gỡ — một phiên streaming đang sử dụng worktree này.', session_worktree_remove_locked_by_terminal: 'Không thể gỡ — một terminal đang hoạt động đang sử dụng worktree này.', session_worktree_remove_unsafe_blocked: 'Hãy xử lý các thay đổi cục bộ hoặc commit chưa push trước khi gỡ worktree này.', session_worktree_remove_dirty_warning: 'CẢNH BÁO: Worktree này có thay đổi chưa commit và sẽ bị mất.', session_worktree_remove_untracked_warning: (count) => `${count} tệp chưa theo dõi sẽ bị xóa vĩnh viễn.`, session_worktree_remove_ahead_warning: (ahead) => `${ahead} commit chưa push sẽ bị mất.`, settings_heading_title: 'Trung tâm điều khiển', settings_heading_subtitle: 'Tùy chọn, công cụ hội thoại và điều khiển hệ thống.', settings_section_conversation_title: 'Hội thoại', settings_section_appearance_title: 'Giao diện', settings_section_appearance_meta: 'Theme, màu nhấn và phong cách hiển thị.', settings_section_preferences_title: 'Tùy chọn', settings_section_preferences_meta: 'Thiết lập mặc định và hành vi giao diện của Hermes Web UI.', settings_section_system_title: 'Hệ thống', settings_section_system_meta: 'Phiên bản instance và các điều khiển truy cập.', settings_search_placeholder: 'Tìm trong cài đặt…', settings_search_no_results: 'Không tìm thấy cài đặt nào.', settings_check_now: 'Kiểm tra ngay', settings_checking: 'Đang kiểm tra…', settings_up_to_date: 'Đã cập nhật ✓', settings_updates_available: '{count} bản cập nhật khả dụng', settings_updates_disabled: 'Đã tắt kiểm tra cập nhật', settings_update_check_failed: 'Kiểm tra cập nhật thất bại', settings_update_no_git: 'Không thể kiểm tra cập nhật (không phải bản checkout git)', settings_label_workspace_panel_open: 'Giữ panel workspace mở theo mặc định', settings_desc_workspace_panel_open: 'Khi bật, panel workspace / trình duyệt tệp sẽ tự mở với mỗi phiên mới. Bạn vẫn có thể đóng thủ công bất cứ lúc nào.', settings_label_workspace_todos_tab: 'Hiển thị tab Todos trong bảng workspace', settings_desc_workspace_todos_tab: 'Khi bật, một tab Todos sẽ xuất hiện trong panel workspace. Panel Todos ở sidebar vẫn có sẵn.', settings_label_session_jump_buttons: 'Hiển thị nút nhảy trong phiên', settings_desc_session_jump_buttons: 'Hiển thị các nút Đầu và Cuối nổi khi đọc lịch sử phiên dài.', settings_label_terminal_auto_expand: 'Tự mở rộng terminal khi có output', settings_desc_terminal_auto_expand: 'Tự động mở rộng panel terminal đang thu gọn khi một lệnh đang chạy phát sinh output mới.', settings_label_virtualize_transcript: 'Ảo hóa transcript dài (thử nghiệm)', settings_desc_virtualize_transcript: 'Thử nghiệm. Chỉ render phần đang hiển thị của transcript rất dài (trên 80 tin nhắn) để tăng tốc cuộn. Mặc định tắt vì có thể gây rung cuộn ở các phiên dài có nhiều khối tool-call lớn. Bật để thử; để tắt nếu bạn muốn render toàn bộ transcript một lần (và để Find/Ctrl+F của trình duyệt tìm được toàn bộ cuộc trò chuyện).', settings_main_advanced_button_aria: 'Tùy chọn nâng cao cho model chính', settings_main_advanced_title: 'Tùy chọn model chính', settings_main_advanced_subtitle: 'Cấu hình nâng cao cho model chat mặc định.', settings_main_advanced_saved: 'Đã lưu tùy chọn model chính', settings_main_advanced_save_failed: 'Lưu tùy chọn model chính thất bại', settings_main_advanced_service_tier: 'Service tier', settings_main_advanced_service_tier_desc: 'Optional request setting for OpenAI-family providers.', settings_main_advanced_service_tier_default: 'Default / off', settings_main_advanced_service_tier_priority: 'Priority (fast)', settings_aux_task_vision: 'Vision', settings_aux_task_vision_desc: 'phân tích ảnh / ảnh chụp màn hình', settings_aux_task_compression: 'Compression', settings_aux_task_compression_desc: 'tóm tắt ngữ cảnh', settings_aux_task_web_extract: 'Web extract', settings_aux_task_web_extract_desc: 'trích xuất và tóm tắt trang web', settings_aux_task_session_search: 'Tìm phiên', settings_aux_task_session_search_desc: 'truy hồi hội thoại cũ', settings_aux_task_approval: 'Approval', settings_aux_task_approval_desc: 'phê duyệt lệnh thông minh', settings_aux_task_mcp: 'MCP', settings_aux_task_mcp_desc: 'suy luận công cụ MCP', settings_aux_task_title_generation: 'Sinh tiêu đề', settings_aux_task_title_generation_desc: 'tiêu đề phiên', settings_aux_task_skills_hub: 'Kho kỹ năng', settings_aux_task_skills_hub_desc: 'tìm / cài kỹ năng', settings_aux_task_curator: 'Curator', settings_aux_task_curator_desc: 'rà soát việc dùng kỹ năng', settings_aux_task_kanban_decomposer: 'Bộ phân rã Kanban', settings_aux_task_kanban_decomposer_desc: 'phân rã công việc', settings_aux_task_profile_describer: 'Bộ mô tả profile', settings_aux_task_profile_describer_desc: 'tóm tắt profile', settings_aux_task_triage_specifier: 'Bộ đặc tả phân loại', settings_aux_task_triage_specifier_desc: 'đặc tả phân loại issue / task', settings_aux_advanced_button_title: 'Tùy chọn nâng cao', settings_aux_advanced_button_aria: 'Tùy chọn nâng cao cho {task}', settings_aux_advanced_title: 'Tùy chọn cho {task}', settings_aux_advanced_subtitle: 'Cấu hình nâng cao cho auxiliary.', settings_aux_advanced_save: 'Lưu tùy chọn', settings_aux_advanced_base_url: 'Base URL', settings_aux_advanced_base_url_desc: 'Ghi đè endpoint nhà cung cấp (tùy chọn).', settings_aux_advanced_timeout: 'Thời gian chờ (giây)', settings_aux_advanced_timeout_desc: 'Thời gian chờ request cho auxiliary task này. Để trống để dùng mặc định của Hermes.', settings_aux_advanced_download_timeout: 'Thời gian chờ tải xuống (giây)', settings_aux_advanced_download_timeout_desc: 'Chỉ áp dụng cho các tác vụ tải media / nội dung, ví dụ vision. Để trống để dùng mặc định.', settings_aux_advanced_max_concurrency: 'Số lượng chạy đồng thời tối đa', settings_aux_advanced_max_concurrency_desc: 'Giới hạn đồng thời cho từng tác vụ (tùy chọn). Để trống để dùng mặc định.', settings_aux_advanced_extra_body: 'Phần JSON bổ sung cho body', settings_aux_advanced_extra_body_desc: 'Đối tượng JSON tùy chọn sẽ được gộp vào body request model.', settings_aux_advanced_api_key: 'Ghi đè API key', settings_aux_advanced_api_key_set_hint: 'API key đã được thiết lập. Để trống để giữ nguyên, hoặc dùng nút xóa để bỏ.', settings_aux_advanced_api_key_empty_hint: 'Để trống để dùng credential mặc định của provider.', settings_aux_advanced_api_key_clear: 'Xóa ghi đè API key hiện có', settings_aux_advanced_saved: 'Đã lưu tùy chọn auxiliary', settings_aux_advanced_extra_body_invalid_json: 'Extra body phải là JSON hợp lệ', settings_aux_advanced_extra_body_object_required: 'Extra body phải là một đối tượng JSON', settings_aux_advanced_save_failed: 'Lưu tùy chọn auxiliary thất bại', symlink_link_to: 'Liên kết mềm → {target}', external_link_open_confirm: 'Symlink này trỏ ra ngoài workspace và không thể mở từ đây.', external_link_read_only: 'Chế độ xem bên ngoài này chỉ đọc. Các thao tác tạo, đổi tên, di chuyển, xóa, tải lên, hiển thị và chỉnh sửa vẫn bị tắt tại đây.', external_link_grant_expired: 'Chế độ xem bên ngoài này đã hết hạn. Hãy mở lại symlink trỏ ra ngoài để cấp quyền lại.', text_pasted: 'Đã đính kèm văn bản đã dán dưới dạng ', wiki_browse: 'Duyệt wiki', wiki_search_placeholder: 'Tìm trang…', wiki_no_pages: 'Không tìm thấy trang wiki nào', wiki_not_configured: 'Wiki chưa được cấu hình', yolo_no_session: 'Không có phiên hoạt động', yolo_enabled: '⚡ Chế độ YOLO BẬT — phê duyệt sẽ bị bỏ qua trong phiên này', yolo_disabled: 'Chế độ YOLO TẮT', yolo_pill_label: 'YOLO', yolo_pill_title_active: 'Chế độ YOLO đang bật — bấm để tắt', }, }; const _I18N_TOOL_ACTION_TEXT_EN = { shell: { running: 'Running', done: 'Ran', fail: 'run', fallback: 'a command' }, read: { running: 'Reading', done: 'Read', fail: 'read', fallback: 'a file' }, list: { running: 'Listing', done: 'Listed', fail: 'list', fallback: 'files' }, search: { running: 'Searching', done: 'Searched', fail: 'search', fallback: 'workspace' }, web: { running: 'Checking', done: 'Checked', fail: 'check', fallback: 'web data' }, write: { running: 'Updating', done: 'Updated', fail: 'update', fallback: 'a file' }, skill: { running: 'Loading', done: 'Loaded', fail: 'load', fallback: 'a skill' }, memory: { running: 'Saving', done: 'Saved', fail: 'save', fallback: 'memory' }, delegate: { running: 'Delegating', done: 'Delegated', fail: 'delegate', fallback: 'a task' }, unknown: { running: 'Running', done: 'Ran', fail: 'run', fallback: 'a tool' }, }; const _I18N_TOOL_SUMMARY_TEXT_EN = { shell: { running: ['Running a command', 'Running {n} commands'], done: ['Ran a command', 'Ran {n} commands'] }, read: { running: ['Reading a file', 'Reading {n} files'], done: ['Read a file', 'Read {n} files'] }, list: { running: ['Listing files', 'Listing {n} items'], done: ['Listed files', 'Listed {n} files'] }, search: { running: ['Searching workspace', 'Searching workspace {n} times'], done: ['Searched workspace', 'Searched workspace {n} times'] }, web: { running: ['Checking web', 'Checking web {n} times'], done: ['Checked the web', 'Checked the web {n} times'] }, write: { running: ['Updating a file', 'Updating {n} files'], done: ['Updated a file', 'Updated {n} files'] }, skill: { running: ['Loading a skill', 'Loading {n} skills'], done: ['Loaded a skill', 'Loaded {n} skills'] }, memory: { running: ['Saving memory', 'Saving {n} memory updates'], done: ['Saved memory', 'Saved {n} memory updates'] }, delegate: { running: ['Delegating a task', 'Delegating {n} tasks'], done: ['Delegated a task', 'Delegated {n} tasks'] }, unknown: { running: ['Running a tool', 'Running {n} tools'], done: ['Ran a tool', 'Ran {n} tools'] }, }; const _I18N_TOOL_ACTION_TEXT_ZH = { shell: { running: '正在运行', done: '已运行', fail: '运行', fallback: '命令' }, read: { running: '正在读取', done: '已读取', fail: '读取', fallback: '文件' }, list: { running: '正在列出', done: '已列出', fail: '列出', fallback: '文件' }, search: { running: '正在搜索', done: '已搜索', fail: '搜索', fallback: '代码' }, web: { running: '正在检查', done: '已检查', fail: '检查', fallback: '网页' }, write: { running: '正在更新', done: '已更新', fail: '更新', fallback: '文件' }, skill: { running: '正在读取', done: '已读取', fail: '读取', fallback: '技能' }, memory: { running: '正在保存', done: '已保存', fail: '保存', fallback: '记忆' }, delegate: { running: '正在委派', done: '已委派', fail: '委派', fallback: '任务' }, unknown: { running: '正在运行', done: '已运行', fail: '运行', fallback: '工具' }, }; const _I18N_TOOL_SUMMARY_TEXT_ZH = { shell: { running: ['正在运行命令', '正在运行 {n} 条命令'], done: ['已运行命令', '已运行 {n} 条命令'] }, read: { running: ['正在读取文件', '正在读取 {n} 个文件'], done: ['已读取文件', '已读取 {n} 个文件'] }, list: { running: ['正在列出文件', '正在列出 {n} 个项目'], done: ['已列出文件', '已列出 {n} 个项目'] }, search: { running: ['正在搜索代码', '正在搜索代码 {n} 次'], done: ['已搜索代码', '已搜索代码 {n} 次'] }, web: { running: ['正在检查网页', '正在检查网页 {n} 次'], done: ['已检查网页', '已检查网页 {n} 次'] }, write: { running: ['正在更新文件', '正在更新 {n} 个文件'], done: ['已更新文件', '已更新 {n} 个文件'] }, skill: { running: ['正在读取技能', '正在读取 {n} 个技能'], done: ['已读取技能', '已读取 {n} 个技能'] }, memory: { running: ['正在保存记忆', '正在保存 {n} 条记忆'], done: ['已保存记忆', '已保存 {n} 条记忆'] }, delegate: { running: ['正在委派任务', '正在委派 {n} 个任务'], done: ['已委派任务', '已委派 {n} 个任务'] }, unknown: { running: ['正在运行工具', '正在运行 {n} 个工具'], done: ['已运行工具', '已运行 {n} 个工具'] }, }; const _I18N_TOOL_ACTION_TEXT_ZH_HANT = { shell: { running: '正在執行', done: '已執行', fail: '執行', fallback: '命令' }, read: { running: '正在讀取', done: '已讀取', fail: '讀取', fallback: '檔案' }, list: { running: '正在列出', done: '已列出', fail: '列出', fallback: '檔案' }, search: { running: '正在搜尋', done: '已搜尋', fail: '搜尋', fallback: '程式碼' }, web: { running: '正在檢查', done: '已檢查', fail: '檢查', fallback: '網頁' }, write: { running: '正在更新', done: '已更新', fail: '更新', fallback: '檔案' }, skill: { running: '正在讀取', done: '已讀取', fail: '讀取', fallback: '技能' }, memory: { running: '正在儲存', done: '已儲存', fail: '儲存', fallback: '記憶' }, delegate: { running: '正在委派', done: '已委派', fail: '委派', fallback: '任務' }, unknown: { running: '正在執行', done: '已執行', fail: '執行', fallback: '工具' }, }; const _I18N_TOOL_SUMMARY_TEXT_ZH_HANT = { shell: { running: ['正在執行命令', '正在執行 {n} 條命令'], done: ['已執行命令', '已執行 {n} 條命令'] }, read: { running: ['正在讀取檔案', '正在讀取 {n} 個檔案'], done: ['已讀取檔案', '已讀取 {n} 個檔案'] }, list: { running: ['正在列出檔案', '正在列出 {n} 個項目'], done: ['已列出檔案', '已列出 {n} 個項目'] }, search: { running: ['正在搜尋程式碼', '正在搜尋程式碼 {n} 次'], done: ['已搜尋程式碼', '已搜尋程式碼 {n} 次'] }, web: { running: ['正在檢查網頁', '正在檢查網頁 {n} 次'], done: ['已檢查網頁', '已檢查網頁 {n} 次'] }, write: { running: ['正在更新檔案', '正在更新 {n} 個檔案'], done: ['已更新檔案', '已更新 {n} 個檔案'] }, skill: { running: ['正在讀取技能', '正在讀取 {n} 個技能'], done: ['已讀取技能', '已讀取 {n} 個技能'] }, memory: { running: ['正在儲存記憶', '正在儲存 {n} 條記憶'], done: ['已儲存記憶', '已儲存 {n} 條記憶'] }, delegate: { running: ['正在委派任務', '正在委派 {n} 個任務'], done: ['已委派任務', '已委派 {n} 個任務'] }, unknown: { running: ['正在執行工具', '正在執行 {n} 個工具'], done: ['已執行工具', '已執行 {n} 個工具'] }, }; function _i18nProcessedElapsed(prefix, duration) { return duration ? `${prefix} ${duration}` : prefix; } function _i18nProcessedElapsedEn(duration) { return _i18nProcessedElapsed('Processed', duration); } function _i18nProcessedElapsedZh(duration) { return _i18nProcessedElapsed('已处理', duration); } function _i18nProcessedElapsedZhHant(duration) { return _i18nProcessedElapsed('已處理', duration); } function _i18nToolActionLabelFromMap(map, kind, state, target, display, failed) { const verbs = map[kind] || map.unknown || _I18N_TOOL_ACTION_TEXT_EN.unknown; const object = target || verbs.fallback || display || 'tool'; if (failed) return `Failed to ${verbs.fail || 'run'} ${object}`; return `${verbs[state] || verbs.running} ${object}`; } function _i18nToolActionLabelEn(kind, state, target, display, failed) { return _i18nToolActionLabelFromMap(_I18N_TOOL_ACTION_TEXT_EN, kind, state, target, display, failed); } function _i18nToolActionLabelZh(kind, state, target, display, failed) { if (failed) { const verbs = _I18N_TOOL_ACTION_TEXT_ZH[kind] || _I18N_TOOL_ACTION_TEXT_ZH.unknown; return `未能${verbs.fail || '运行'} ${target || verbs.fallback || display || '工具'}`; } return _i18nToolActionLabelFromMap(_I18N_TOOL_ACTION_TEXT_ZH, kind, state, target, display, failed); } function _i18nToolActionLabelZhHant(kind, state, target, display, failed) { if (failed) { const verbs = _I18N_TOOL_ACTION_TEXT_ZH_HANT[kind] || _I18N_TOOL_ACTION_TEXT_ZH_HANT.unknown; return `未能${verbs.fail || '執行'} ${target || verbs.fallback || display || '工具'}`; } return _i18nToolActionLabelFromMap(_I18N_TOOL_ACTION_TEXT_ZH_HANT, kind, state, target, display, failed); } function _i18nToolWorklogSummaryFromMap(map, kind, state, count) { const n = Math.max(1, Number(count) || 1); const form = (map[kind] || map.unknown || _I18N_TOOL_SUMMARY_TEXT_EN.unknown)[state] || map.unknown.running; return (n === 1 ? form[0] : form[1]).replace('{n}', String(n)); } function _i18nToolWorklogSummaryEn(kind, state, count) { return _i18nToolWorklogSummaryFromMap(_I18N_TOOL_SUMMARY_TEXT_EN, kind, state, count); } function _i18nToolWorklogSummaryZh(kind, state, count) { return _i18nToolWorklogSummaryFromMap(_I18N_TOOL_SUMMARY_TEXT_ZH, kind, state, count); } function _i18nToolWorklogSummaryZhHant(kind, state, count) { return _i18nToolWorklogSummaryFromMap(_I18N_TOOL_SUMMARY_TEXT_ZH_HANT, kind, state, count); } function _i18nToolSummaryJoinEn(parts) { return Array.isArray(parts) ? parts.filter(Boolean).join(', ') : ''; } function _i18nToolSummaryJoinCjk(parts) { const items = Array.isArray(parts) ? parts.filter(Boolean) : []; if (items.length <= 1) return items[0] || ''; if (items.length === 2) return `${items[0]}和${items[1]}`; return `${items.slice(0, -1).join('、')}和${items[items.length - 1]}`; } const _I18N_TOOL_ACTION_TEXT_VI = { shell: { running: 'Đang chạy', done: 'Đã chạy', fail: 'chạy', fallback: 'lệnh' }, read: { running: 'Đang đọc', done: 'Đã đọc', fail: 'đọc', fallback: 'tệp' }, list: { running: 'Đang liệt kê', done: 'Đã liệt kê', fail: 'liệt kê', fallback: 'tệp' }, search: { running: 'Đang tìm kiếm', done: 'Đã tìm kiếm', fail: 'tìm kiếm', fallback: 'workspace' }, web: { running: 'Đang kiểm tra', done: 'Đã kiểm tra', fail: 'kiểm tra', fallback: 'dữ liệu web' }, write: { running: 'Đang cập nhật', done: 'Đã cập nhật', fail: 'cập nhật', fallback: 'tệp' }, skill: { running: 'Đang tải', done: 'Đã tải', fail: 'tải', fallback: 'kỹ năng' }, memory: { running: 'Đang lưu', done: 'Đã lưu', fail: 'lưu', fallback: 'bộ nhớ' }, delegate: { running: 'Đang ủy quyền', done: 'Đã ủy quyền', fail: 'ủy quyền', fallback: 'tác vụ' }, unknown: { running: 'Đang chạy', done: 'Đã chạy', fail: 'chạy', fallback: 'công cụ' }, }; const _I18N_TOOL_SUMMARY_TEXT_VI = { shell: { running: ['Đang chạy lệnh', 'Đang chạy {n} lệnh'], done: ['Đã chạy lệnh', 'Đã chạy {n} lệnh'] }, read: { running: ['Đang đọc tệp', 'Đang đọc {n} tệp'], done: ['Đã đọc tệp', 'Đã đọc {n} tệp'] }, list: { running: ['Đang liệt kê tệp', 'Đang liệt kê {n} mục'], done: ['Đã liệt kê tệp', 'Đã liệt kê {n} tệp'] }, search: { running: ['Đang tìm kiếm workspace', 'Đang tìm kiếm workspace {n} lần'], done: ['Đã tìm kiếm workspace', 'Đã tìm kiếm workspace {n} lần'] }, web: { running: ['Đang kiểm tra web', 'Đang kiểm tra web {n} lần'], done: ['Đã kiểm tra web', 'Đã kiểm tra web {n} lần'] }, write: { running: ['Đang cập nhật tệp', 'Đang cập nhật {n} tệp'], done: ['Đã cập nhật tệp', 'Đã cập nhật {n} tệp'] }, skill: { running: ['Đang tải kỹ năng', 'Đang tải {n} kỹ năng'], done: ['Đã tải kỹ năng', 'Đã tải {n} kỹ năng'] }, memory: { running: ['Đang lưu bộ nhớ', 'Đang lưu {n} cập nhật bộ nhớ'], done: ['Đã lưu bộ nhớ', 'Đã lưu {n} cập nhật bộ nhớ'] }, delegate: { running: ['Đang ủy quyền tác vụ', 'Đang ủy quyền {n} tác vụ'], done: ['Đã ủy quyền tác vụ', 'Đã ủy quyền {n} tác vụ'] }, unknown: { running: ['Đang chạy công cụ', 'Đang chạy {n} công cụ'], done: ['Đã chạy công cụ', 'Đã chạy {n} công cụ'] }, }; function _i18nProcessedElapsedVi(duration) { return _i18nProcessedElapsed('Đã xử lý', duration); } function _i18nToolActionLabelVi(kind, state, target, display, failed) { const verbs = _I18N_TOOL_ACTION_TEXT_VI[kind] || _I18N_TOOL_ACTION_TEXT_VI.unknown; const object = target || verbs.fallback || display || 'công cụ'; if (failed) return `Không thể ${verbs.fail || 'chạy'} ${object}`; return `${verbs[state] || verbs.running} ${object}`; } function _i18nToolWorklogSummaryVi(kind, state, count) { return _i18nToolWorklogSummaryFromMap(_I18N_TOOL_SUMMARY_TEXT_VI, kind, state, count); } const _I18N_TOOL_ACTION_TEXT_PL = { shell: { running: 'Uruchamianie', done: 'Uruchomiono', fail: 'uruchomić', fallback: 'polecenie' }, read: { running: 'Odczytywanie', done: 'Odczytano', fail: 'odczytać', fallback: 'plik' }, list: { running: 'Listowanie', done: 'Wylistowano', fail: 'wylistować', fallback: 'plik' }, search: { running: 'Przeszukiwanie', done: 'Przeszukano', fail: 'przeszukać', fallback: 'obszar roboczy' }, web: { running: 'Sprawdzanie', done: 'Sprawdzono', fail: 'sprawdzić', fallback: 'dane internetowe' }, write: { running: 'Zapisywanie', done: 'Zapisano', fail: 'zapisać', fallback: 'plik' }, skill: { running: 'Wczytywanie', done: 'Wczytano', fail: 'wczytać', fallback: 'umiejętność' }, memory: { running: 'Zapisywanie', done: 'Zapisano', fail: 'zapisać', fallback: 'pamięć' }, delegate: { running: 'Delegowanie', done: 'Delegowano', fail: 'delegować', fallback: 'zadanie' }, unknown: { running: 'Uruchamianie', done: 'Uruchomiono', fail: 'uruchomić', fallback: 'narzędzie' }, }; const _I18N_TOOL_SUMMARY_TEXT_PL = { shell: { running: ['Uruchamianie polecenia', 'Uruchamianie {n} poleceń'], done: ['Uruchomiono polecenie', 'Uruchomiono {n} poleceń'] }, read: { running: ['Odczytywanie pliku', 'Odczytywanie {n} plików'], done: ['Odczytano plik', 'Odczytano {n} plików'] }, list: { running: ['Listowanie pliku', 'Listowanie {n} plików'], done: ['Wylistowano plik', 'Wylistowano {n} plików'] }, search: { running: ['Przeszukiwanie obszaru roboczego', 'Przeszukiwanie {n}-krotne obszaru roboczego'], done: ['Przeszukano obszar roboczy', 'Przeszukano {n}-krotnie obszar roboczy'] }, web: { running: ['Sprawdzanie stron', 'Sprawdzanie {n} stron'], done: ['Sprawdzono strony', 'Sprawdzono {n} stron'] }, write: { running: ['Zapisywanie pliku', 'Zapisywanie {n} plików'], done: ['Zapisano plik', 'Zapisano {n} plików'] }, skill: { running: ['Wczytywanie umiejętności', 'Wczytywanie {n} umiejętności'], done: ['Wczytano umiejętność', 'Wczytano {n} umiejętności'] }, memory: { running: ['Zapisywanie pamięci', 'Zapisywanie {n} wpisów pamięci'], done: ['Zapisano pamięć', 'Zapisano {n} wpisów pamięci'] }, delegate: { running: ['Delegowanie zadania', 'Delegowanie {n} zadań'], done: ['Delegowano zadanie', 'Delegowano {n} zadań'] }, unknown: { running: ['Uruchamianie narzędzia', 'Uruchamianie {n} narzędzi'], done: ['Uruchomiono narzędzie', 'Uruchomiono {n} narzędzi'] }, }; function _i18nProcessedElapsedPl(duration) { return _i18nProcessedElapsed('Przetworzono', duration); } function _i18nToolActionLabelPl(kind, state, target, display, failed) { const verbs = _I18N_TOOL_ACTION_TEXT_PL[kind] || _I18N_TOOL_ACTION_TEXT_PL.unknown; const object = target || verbs.fallback || display || 'narzędzie'; if (failed) return `Nie udało się ${verbs.fail || 'uruchomić'} ${object}`; return `${verbs[state] || verbs.running} ${object}`; } function _i18nToolWorklogSummaryPl(kind, state, count) { return _i18nToolWorklogSummaryFromMap(_I18N_TOOL_SUMMARY_TEXT_PL, kind, state, count); } function _i18nToolSummaryJoinPl(parts) { return Array.isArray(parts) ? parts.filter(Boolean).join(', ') : ''; } function _i18nToolSummaryJoinVi(parts) { return Array.isArray(parts) ? parts.filter(Boolean).join(', ') : ''; } // Active locale — defaults to English; overridden by loadLocale() at boot. let _locale = LOCALES.en; /** * Resolve an incoming locale tag to a known LOCALES key. * Supports exact keys, case-insensitive matches, and a few common aliases * (e.g. zh-CN -> zh, zh-TW -> zh-Hant). Returns null when unresolved. * @param {string} lang * @returns {string|null} */ function resolveLocale(lang) { if (typeof lang !== 'string') return null; const raw = lang.trim(); if (!raw) return null; if (LOCALES[raw]) return raw; const lower = raw.toLowerCase().replace(/_/g, '-'); // Case-insensitive direct match first. const direct = Object.keys(LOCALES).find((k) => k.toLowerCase() === lower); if (direct) return direct; // Common Chinese variants. if (lower === 'zh' || lower.startsWith('zh-cn') || lower.startsWith('zh-sg') || lower.startsWith('zh-hans')) { return LOCALES.zh ? 'zh' : null; } if (lower.startsWith('zh-tw') || lower.startsWith('zh-hk') || lower.startsWith('zh-mo') || lower.startsWith('zh-hant')) { return LOCALES['zh-Hant'] ? 'zh-Hant' : null; } // Fallback to base language subtag (e.g. en-US -> en). const base = lower.split('-')[0]; const baseMatch = Object.keys(LOCALES).find((k) => k.toLowerCase() === base); return baseMatch || null; } /** * Resolve locale with precedence: * 1) primary (typically server setting) * 2) fallback (typically localStorage) * 3) English * @param {string} primary * @param {string} fallback * @returns {string} */ function resolvePreferredLocale(primary, fallback) { return resolveLocale(primary) || resolveLocale(fallback) || 'en'; } /** * Translate a key. Falls back to English if the key is missing in the active locale. * Supports function values (for interpolated strings): call t('key', arg). * @param {string} key * @param {...*} args - forwarded to function-valued translations * @returns {string} */ function t(key, ...args) { const val = _locale[key] ?? LOCALES.en[key]; if (val === undefined) return key; // final fallback: return key itself if (typeof val === 'function') return val(...args); if (args.length) { // Locale strings can use numbered placeholders like {0} and {1}. return String(val).replace(/\{(\d+)\}/g, (match, idx) => ( Object.prototype.hasOwnProperty.call(args, idx) ? String(args[idx]) : match )); } return val; } /** * Switch locale by language code (e.g. 'en', 'zh'). * Persists to localStorage and updates the attribute. * @param {string} lang */ function setLocale(lang) { const resolved = resolveLocale(lang) || 'en'; _locale = LOCALES[resolved]; try { localStorage.setItem('hermes-lang', resolved); } catch (_) {} document.documentElement.lang = _locale._speech || resolved; } /** * Load locale from localStorage (called once at boot, before DOMContentLoaded). * Server-persisted preference is applied later in loadSettingsPanel(). */ function loadLocale() { let stored = null; try { stored = localStorage.getItem('hermes-lang'); } catch (_) {} setLocale(resolvePreferredLocale(null, stored)); } /** * Re-stamp all [data-i18n] elements in the DOM with the current locale. * Safe to call at any time — missing keys fall back to English. * Call after setLocale() to make static HTML text update without a reload. */ function applyLocaleToDOM() { document.querySelectorAll('[data-i18n]').forEach(el => { const key = el.getAttribute('data-i18n'); const val = t(key); if (val && val !== key) el.textContent = val; }); document.querySelectorAll('[data-i18n-title]').forEach(el => { const key = el.getAttribute('data-i18n-title'); const val = t(key); if (!val || val === key) return; if (el.hasAttribute('data-tooltip')) { // Custom CSS tooltip is in use (#1775) — sync it and explicitly clear // the native `title` attribute so the slow ~1.5s browser tooltip never // co-fires alongside the fast custom tooltip. el.setAttribute('data-tooltip', val); if (el.hasAttribute('title')) el.removeAttribute('title'); } else { // Element opted out of custom tooltips — fall back to the native title. el.title = val; } }); document.querySelectorAll('[data-i18n-placeholder]').forEach(el => { const key = el.getAttribute('data-i18n-placeholder'); const val = t(key); if (val && val !== key) el.placeholder = val; }); document.querySelectorAll('[data-i18n-aria-label]').forEach(el => { const key = el.getAttribute('data-i18n-aria-label'); const val = t(key); if (val && val !== key) el.setAttribute('aria-label', val); }); if (typeof syncAppTitlebar === 'function') syncAppTitlebar(); } // Apply saved locale immediately so there's no flash of English on reload. loadLocale();