diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5a37cdb4..b8b8150d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -46,6 +46,7 @@
### Added
+- **Czech (Čeština) is now a fully-supported UI language.** Added a complete Czech (`cs`) locale to Settings → Language with full key parity to English (all ~1,640 UI strings), real Czech translations for every string and function-valued key (including Slavic plural forms for message/queue counts and tool-activity summaries), a Czech login screen, and a dedicated locale-parity + placeholder + diacritics test guard mirroring the other per-language suites. Thanks @ostravajih. (#5546)
- **Fork a scheduled-job (cron) conversation into your own editable chat.** Cron-run sessions are read-only (the scheduler owns them), so you couldn't continue one. You can now branch/fork a cron session into a new WebUI-owned conversation — the original read-only session is never modified, and the fork picks up its history so you can carry on. Only genuine cron sessions qualify (verified by the server-side source, not a guessable id), and every other read-only session stays unbranchable. Thanks @rodboev. (#5555, #5477)
- **Pick the exact time and day for scheduled jobs — no cron syntax needed.** The Tasks "New job" form now builds the schedule as a plain sentence: choose a frequency (Hourly / Daily / Weekdays / Weekly / Monthly / Custom) and it shows just the controls that matter — a time picker, a day-of-week dropdown, or a day-of-month dropdown — e.g. "Weekly on Monday at 09:00." The generated cron expression is previewed inline, and the raw cron field now appears only under "Custom." Thanks @rodboev. (#5554, #5552)
- **Transparent Stream fades newly streamed words in.** In Transparent Stream mode, newly arriving assistant words now fade in at the prose level as they stream — without animating (or re-flickering) the thinking rows, tool rows, or the transparent event rows. It respects your OS "reduce motion" setting (no fade when reduced motion is on) and is part of the Transparent Stream experience regardless of the "Fade text effect" toggle. Thanks @rodboev. (#5506, #5367)
diff --git a/api/routes.py b/api/routes.py
index fd8b0f38..589f2afc 100644
--- a/api/routes.py
+++ b/api/routes.py
@@ -9204,6 +9204,15 @@ _LOGIN_LOCALE = {
"invalid_pw": "M\u1eadt kh\u1ea9u kh\u00f4ng h\u1ee3p l\u1ec7",
"conn_failed": "K\u1ebft n\u1ed1i th\u1ea5t b\u1ea1i",
},
+ "cs": {
+ "lang": "cs-CZ",
+ "title": "P\u0159ihl\u00e1sit se",
+ "subtitle": "Zadejte heslo pro pokra\u010dov\u00e1n\u00ed",
+ "placeholder": "Heslo",
+ "btn": "P\u0159ihl\u00e1sit se",
+ "invalid_pw": "Neplatn\u00e9 heslo",
+ "conn_failed": "P\u0159ipojen\u00ed selhalo",
+ },
}
diff --git a/static/i18n.js b/static/i18n.js
index 88832e47..d04a8e81 100644
--- a/static/i18n.js
+++ b/static/i18n.js
@@ -18102,6 +18102,1651 @@ const LOCALES = {
outline_loading: 'Chargement\u2026',
},
+ cs: {
+ _label: 'Čeština',
+ _lang: 'cs',
+ _speech: 'cs-CZ',
+ copy_relative_path: 'Kopírovat relativní cestu',
+ cron_schedule_hour_label: 'Hodina',
+ cron_schedule_minute_label: 'Minuta',
+ cron_schedule_weekday_label: 'Den v týdnu',
+ cron_schedule_month_day_label: 'Den v měsíci',
+ cron_schedule_time_label: 'Čas',
+ cron_schedule_conj_on: 'v',
+ cron_schedule_conj_on_day: 'v den',
+ cron_schedule_conj_at: 'v',
+ cron_schedule_conj_at_minute: 'v minutě',
+ cron_weekday_sun: 'Neděle',
+ cron_weekday_mon: 'Pondělí',
+ cron_weekday_tue: 'Úterý',
+ cron_weekday_wed: 'Středa',
+ cron_weekday_thu: 'Čtvrtek',
+ cron_weekday_fri: 'Pátek',
+ cron_weekday_sat: 'Sobota',
+ cron_schedule_time_hint: 'Čas je serverový; cron běží na straně serveru.',
+ active_conversation_meta: (title, count) => `${title} · ${count} zpráv${count === 1 ? 'a' : ''}`,
+ active_conversation_none: 'Žádná aktivní konverzace není vybrána.',
+ add: 'Přidat',
+ add_failed: 'Přidání selhalo: ',
+ agent_soul: 'Duch agenta',
+ all_uploads_failed: (n) => `Všech ${n} nahrávání selhalo`,
+ approval_skip_all: '⚡ Přeskočit vše pro tuto relaci',
+ approval_skip_all_title: 'Přeskočit všechny výzvy ke schválení pro tuto relaci',
+ archive_extracted: (n, c) => `Rozbaleno ${n} souborů z ${c} archivů`,
+ auth_ack_save_failed: 'Nepodařilo se aktualizovat potvrzení: ',
+ auth_acknowledged_label: 'Zkontroloval jsem toto riziko; zobrazit méně urgentní varování v navigaci.',
+ auth_disabled: 'Auth zakázáno — ochrana heslem odstraněna',
+ auth_disabled_warning_message: 'Tato instance je přístupná bez autentifikace.',
+ auth_status_passkey_only: 'Pouze passkey',
+ auth_status_password: 'Heslová autentifikace',
+ auth_status_unauthenticated: 'Neautentifikováno',
+ auth_warning_badge: 'Auth zakázáno',
+ bg_error_multi: (count) => `${count} relací narazilo na chybu`,
+ bg_error_single: (title) => `"${title}" narazil na chybu`,
+ cancel: 'Zrušit',
+ checkpoint_date: 'Datum',
+ checkpoint_diff_files_changed: (n) => `${n} souborů změněno`,
+ checkpoint_diff_no_changes: 'Žádné rozdíly mezi tímto kontrolním bodem a aktuálním pracovním prostorem.',
+ checkpoint_diff_title: 'Změny v kontrolním bodě',
+ checkpoint_empty: 'Pro tento pracovní prostor nebyl nalezen žádný kontrolní bod.',
+ checkpoint_error: 'Nepodařilo se načíst kontrolní body',
+ checkpoint_files: 'Soubory',
+ checkpoint_loading: 'Načítám kontrolní body…',
+ checkpoint_message: 'Zpráva',
+ checkpoint_restore: 'Obnovit',
+ checkpoint_restore_confirm_message: (ckpt) => `Obnovit pracovní prostor do kontrolního bodu "${ckpt}"? Toto přepíše soubory uloženými verzemi. Soubory přidané po tomto kontrolním bodě nebudou smazány.`,
+ checkpoint_restore_confirm_title: 'Obnovit kontrolní bod?',
+ checkpoint_restored: 'Kontrolní bod obnoven',
+ checkpoint_title: 'Kontrolní body',
+ checkpoint_view_diff: 'Zobrazit rozdíly',
+ clear_conversation_btn_tooltip: 'Vymazat všechny zprávy v této konverzaci',
+ clear_conversation_message: 'Vymazat všechny zprávy? Toto nelze vrátit zpět.',
+ clear_conversation_title: 'Vymazat konverzaci',
+ clear_failed: 'Vymazání selhalo: ',
+ close_menu: 'Zavřít nabídku',
+ cmd_reasoning: 'Přepnout viditelnost přemýšlení (zobrazit/skrýt), nastavit úroveň úsilí nebo zkontrolovat aktuální stav',
+ cmd_yolo: 'Přepnout YOLO režim (přeskočit schválení)',
+ composer_compression_will_queue: 'Napište zprávu — bude zařazena do fronty a odeslána po kompresi',
+ composer_control_attach: 'Přiložit',
+ composer_control_bg_badge: 'Odznak na pozadí',
+ composer_control_context: 'Kontext',
+ composer_control_mic: 'Mikrofon',
+ composer_control_mobile_config: 'Mobilní konfigurace',
+ composer_control_model: 'Model',
+ composer_control_profile: 'Profil',
+ composer_control_quota_chip: 'Čip kvóty',
+ composer_control_reasoning: 'Uvažování',
+ composer_control_saved_prompts: 'Uložené výzvy',
+ composer_control_status: 'Stav',
+ composer_control_toolsets: 'Sady nástrojů',
+ composer_control_voice_mode: 'Hlasový režim',
+ composer_control_workspace: 'Pracovní prostor',
+ composer_control_yolo: 'YOLO',
+ composer_disabled_clarify: 'Odpovězte na žádost o upřesnění',
+ composer_disabled_compression: 'Čekám na dokončení komprese',
+ composer_disabled_empty: 'Napište zprávu k odeslání',
+ composer_interrupt: 'Přerušit a odeslat',
+ composer_mobile_context: 'Kontext',
+ composer_mobile_model: 'Model',
+ composer_mobile_quota: 'Kvóta',
+ composer_mobile_reasoning: 'Uvažování',
+ composer_mobile_workspace: 'Pracovní prostor',
+ composer_queue: 'Zařadit zprávu do fronty',
+ composer_send: 'Odeslat zprávu',
+ composer_steer: 'Řídit aktuální odpověď',
+ composer_stop: 'Zastavit generování',
+ content_required: 'Obsah je povinný',
+ create_failed: 'Vytvoření selhalo: ',
+ create_job: 'Vytvořit úlohu',
+ created: 'Vytvořeno ',
+ cron_all_runs: 'Všechna spuštění',
+ cron_attention_copy_diagnostics: 'Kopírovat diagnostiku',
+ cron_attention_croniter_hint: 'Runtime gateway možná postrádá balíček croniter. Restartujte gateway s podporou cron a poté pokračujte v této úloze.',
+ cron_attention_desc: 'Tato opakující se úloha nemá čas dalšího spuštění. Plánovač možná nedokázal vypočítat další spuštění.',
+ cron_attention_resume: 'Obnovit a přepočítat',
+ cron_attention_run_once: 'Spustit jednou nyní',
+ cron_collapse_output: 'Sbalit výstup',
+ cron_collapse_prompt: 'Sbalit výzvu',
+ cron_completion_status: (name, status) => `Cron „${name}“ ${status}`,
+ cron_delete_confirm_message: 'Toto nelze vrátit zpět.',
+ cron_delete_confirm_title: 'Smazat cron úlohu',
+ cron_deliver_custom: 'Vlastní cíl doručení',
+ cron_deliver_label: 'Doručit výstup do',
+ cron_deliver_local: 'Lokálně (pouze uložit výstup)',
+ cron_diagnostics_copied: 'Diagnostika cronu zkopírována',
+ cron_duplicate: 'Duplikovat',
+ cron_duplicated: 'Úloha duplikována (pozastavena)',
+ cron_expand_output: 'Rozbalit výstup',
+ cron_expand_prompt: 'Rozbalit výzvu',
+ cron_hide_runs: 'Skrýt spuštění',
+ cron_job_created: 'Úloha vytvořena',
+ cron_job_deleted: 'Úloha smazána',
+ cron_job_name_placeholder: 'Název úlohy',
+ cron_job_paused: 'Úloha pozastavena',
+ cron_job_resumed: 'Úloha obnovena',
+ cron_job_triggered: 'Úloha spuštěna',
+ cron_job_updated: 'Úloha aktualizována',
+ cron_jobs_project: 'Cron úlohy',
+ cron_last: 'Poslední',
+ cron_last_output: 'Poslední výstup',
+ cron_mode_agent: 'Agent',
+ cron_mode_label: 'Režim',
+ cron_mode_script: 'Skript',
+ cron_model_hint: 'Přepsat výchozí model pro tuto úlohu.',
+ cron_model_label: 'Přepsání modelu',
+ cron_model_no_agent_hint: 'Úlohy bez agenta spouštějí nakonfigurovaný skript přímo; model se nepoužívá.',
+ cron_model_use_default: 'Výchozí (použít výchozí nastavení profilu/systému)',
+ cron_name_label: 'Název',
+ cron_name_placeholder: 'Volitelné',
+ cron_next: 'Další',
+ cron_no_jobs: 'Nebyly nalezeny žádné naplánované úlohy.',
+ cron_no_runs_yet: '(zatím žádná spuštění)',
+ cron_pause: 'Pozastavit',
+ cron_profile_label: 'Profil',
+ cron_profile_server_default: 'výchozí serveru',
+ cron_profile_server_default_hint: 'Používá výchozí profil WebUI serveru v době spuštění. Stávající úlohy bez profilu si zachovávají toto starší chování.',
+ cron_prompt_label: 'Výzva',
+ cron_prompt_placeholder: 'Výzva',
+ cron_prompt_required: 'Výzva je povinná',
+ cron_resume: 'Obnovit',
+ cron_run_now: 'Spustit nyní',
+ cron_schedule_hint: "Použijte 'every 1h' nebo cron výraz pro opakující se úlohy. Holé doby trvání jako '30m' se spustí jednou.",
+ cron_schedule_label: 'Rozvrh',
+ cron_schedule_once_warning: "Formy doby trvání jako '30m' se spustí jednou a po spuštění se odeberou. Použijte 'every 30m' pro zachování opakující se úlohy.",
+ cron_schedule_placeholder: 'Rozvrh',
+ cron_schedule_preset_custom: 'Vlastní',
+ cron_schedule_preset_daily: 'Denně',
+ cron_schedule_preset_hourly: 'Každou hodinu',
+ cron_schedule_preset_label: 'Předvolba',
+ cron_schedule_preset_monthly: 'Měsíčně',
+ cron_schedule_preset_weekdays: 'V pracovní dny',
+ cron_schedule_preset_weekly: 'Týdně',
+ cron_schedule_required: 'Rozvrh je povinný',
+ cron_schedule_required_example: 'Rozvrh je povinný (např. "0 9 * * *" nebo "every 1h")',
+ cron_script_badge_title: 'Skript úloha (bez agenta)',
+ cron_script_card_title: 'Skript',
+ cron_script_job_banner: 'Spouští skript podle rozvrhu — stdout je doručen do cíle. Bez agenta, výzvy nebo dovedností.',
+ cron_script_output: 'Výstup skriptu',
+ cron_script_path_hint: 'Řešeno v ~/.hermes/scripts/ pokud není absolutní cesta. Upravte soubor skriptu na serveru pro změnu chování.',
+ cron_script_path_label: 'Cesta skriptu',
+ cron_skills_edit_hint: 'Seznam dovedností nelze po vytvoření upravovat.',
+ cron_skills_label: 'Dovednosti',
+ cron_skills_placeholder: 'Přidat dovednosti (volitelné)…',
+ cron_status_active: 'aktivní',
+ cron_status_error: 'chyba',
+ cron_status_needs_attention: 'vyžaduje pozornost',
+ cron_status_off: 'vypnuto',
+ cron_status_paused: 'pozastaveno',
+ cron_status_running: 'běží…',
+ cron_toast_notifications_disabled: 'Zakázáno',
+ cron_toast_notifications_enabled: 'Povoleno',
+ cron_toast_notifications_hint: 'Zobrazit toast po dokončení tohoto cronu. Odznak Úloh a nový ukazatel běhu se stále aktualizují když je toto vypnuto.',
+ cron_toast_notifications_label: 'Dokončovací notifikace',
+ cron_view_full_output: 'Zobrazit celý výstup',
+ cron_workdir_label: 'Pracovní adresář',
+ csv_error: 'Nepodařilo se načíst CSV soubor',
+ csv_header_note: 'První řádek zobrazen jako záhlaví tabulky',
+ csv_loading: 'Načítám CSV',
+ csv_no_data: 'CSV soubor nemá dostatek dat pro vykreslení jako tabulka',
+ csv_too_large: 'CSV soubor je příliš velký pro vložené vykreslení',
+ current_password_incorrect: 'Současné heslo je nesprávné.',
+ current_password_label: 'Současné heslo',
+ current_password_placeholder: 'Zadejte současné heslo…',
+ current_password_required: 'Současné heslo je povinné pro změnu nebo zakázání autentifikace.',
+ current_task_list: 'Aktuální seznam úkolů',
+ dashboard_loopback_warning: 'Dashboard je na serveru pouze loopback. Buď prohlížejte ze serveru samotného nebo ho restartujte s --host 0.0.0.0 (nebezpečné).',
+ default: 'výchozí',
+ disable: 'Zakázat',
+ disable_auth: 'Zakázat autentifikaci',
+ disable_auth_confirm_message: 'Kdokoliv bude moci přistupovat k této instanci.',
+ disable_auth_confirm_title: 'Zakázat ochranu heslem',
+ disable_auth_failed: 'Nepodařilo se zakázat autentifikaci: ',
+ disable_auth_typed_confirm: 'Zadejte DISABLE AUTH pro potvrzení',
+ discard_file_edits_message: 'Přepnutí pracovních prostorů zahodí neuložené úpravy souborů v náhledu.',
+ discard_file_edits_title: 'Zahodit úpravy souborů?',
+ dismiss: 'Zavřít',
+ done: 'Hotovo',
+ download_transcript: 'Stáhnout jako Markdown',
+ editing: 'Úpravy',
+ empty_dir: '(prázdný)',
+ empty_subtitle: 'Zeptejte se na cokoliv, spouštějte příkazy, prozkoumávejte soubory nebo spravujte naplánované úlohy.',
+ empty_title: 'Jak vám mohu pomoci?',
+ error_prefix: 'Chyba: ',
+ excalidraw_download: 'Stáhnout',
+ excalidraw_empty: 'Prázdný diagram',
+ excalidraw_error: 'Nepodařilo se načíst Excalidraw soubor',
+ excalidraw_invalid: 'Neplatný formát Excalidraw souboru',
+ excalidraw_label: 'Diagram',
+ excalidraw_loading: 'Načítám diagram',
+ excalidraw_render_error: 'Nepodařilo se vykreslit diagram',
+ excalidraw_simplified: 'Zjednodušený SVG náhled — není pixelově identický s plátnem Excalidraw',
+ excalidraw_too_large: 'Excalidraw soubor je příliš velký pro vložené vykreslení',
+ export_session_html: 'HTML',
+ export_session_html_tooltip: 'Exportovat jako samostatnou HTML stránku',
+ export_session_json: 'JSON',
+ export_session_json_tooltip: 'Exportovat celou relaci jako JSON',
+ ext_gallery_after_install: 'Po instalaci',
+ ext_gallery_author: 'Autor',
+ ext_gallery_capabilities: 'Schopnosti',
+ ext_gallery_install: 'Instalovat',
+ ext_gallery_install_followup: 'Rozšíření nainstalováno. Viz karta pro další kroky.',
+ ext_gallery_install_ok: 'Rozšíření úspěšně nainstalováno.',
+ ext_gallery_install_restart_required: 'Rozšíření nainstalováno. Je vyžadován restart pro aplikaci.',
+ ext_gallery_installed: 'Nainstalováno',
+ ext_gallery_installing: 'Instaluji…',
+ ext_gallery_local_app_label: 'Lokální aplikace',
+ ext_gallery_local_component_required: 'Toto rozšíření má lokální komponent. Po instalaci spusťte požadovanou lokální aplikaci nebo sidecar.',
+ ext_gallery_native_host_required: 'Je vyžadován nativní hostitel',
+ ext_gallery_next_step: 'Další krok',
+ ext_gallery_open_setup_guide: 'Otevřít průvodce nastavením',
+ ext_gallery_permissions_empty: 'Nejsou deklarována žádná další oprávnění.',
+ ext_gallery_permissions_hide: 'Skrýt oprávnění',
+ ext_gallery_permissions_show: 'Oprávnění',
+ ext_gallery_required_suffix: 'Je vyžadován {0}',
+ ext_gallery_restart_required: 'Je vyžadován restart',
+ ext_gallery_sidecar_required: 'Je vyžadován sidecar',
+ ext_gallery_uninstall: 'Odinstalovat',
+ ext_gallery_uninstall_ok: 'Rozšíření odinstalováno.',
+ ext_gallery_uninstalling: 'Odinstalovávám…',
+ ext_gallery_version: 'Verze',
+ external_notes_auto: 'auto',
+ external_notes_auto_recall_hint: 'Automatické připomenutí relace je nezměněno; tento zásuvný panel pouze zobrazuje nakonfigurované zdroje a dostupné nástroje pro čtení/hledání.',
+ external_notes_configured_hint: 'Názvy nástrojů se očekávají z tohoto nakonfigurovaného zdroje; živá schémata se zobrazí, když je WebUI runtime zpřístupní.',
+ external_notes_empty: 'Nejsou viditelné žádné zdroje poznámek nebo znalostí MCP. Nakonfigurujte Joplin, Obsidian, Notion, llm-wiki nebo jiný server poznámek pro jeho zobrazení zde.',
+ external_notes_no_tools: 'Pro tento zdroj nejsou aktuálně viditelné žádné nástroje pro čtení/hledání.',
+ external_notes_recent_ai: 'Nedávno použito AI',
+ external_notes_recent_ai_reason: 'Automatické připomenutí',
+ external_notes_search_empty: 'Pro náhled poznámek zde vyhledejte nakonfigurovaný zdroj poznámek.',
+ external_notes_search_placeholder: 'Hledat poznámky…',
+ external_notes_sources: 'Poznámky třetích stran',
+ external_notes_tool_count: (count) => `${count} dostupných nástrojů pro poznámky`,
+ filter_conversations: 'Filtrovat konverzace...',
+ first_token_time: 'Čas do prvního tokenu',
+ folder_add_as_space_btn: 'Přidat jako prostor',
+ folder_add_as_space_msg: 'Přidat tuto složku jako nový prostor do seznamu pracovních prostorů?',
+ folder_add_as_space_title: 'Přidat jako prostor?',
+ folder_create_failed: 'Vytvoření složky selhalo: ',
+ folder_created: 'Vytvořena složka ',
+ font_size_default: 'Výchozí',
+ font_size_large: 'Velká',
+ font_size_small: 'Malá',
+ font_size_xlarge: 'Extra velká',
+ gateway_endpoint_unreachable: 'Koncový bod gateway není dosažitelný',
+ gateway_last_active: 'Naposledy aktivní: ',
+ gateway_load_failed: 'Nepodařilo se načíst stav gateway',
+ gateway_metadata_stale: 'Metadata gateway jsou zastaralá',
+ gateway_not_configured: 'Gateway není nakonfigurován',
+ gateway_not_running: 'Gateway neběží',
+ gateway_running_label: 'Běží',
+ gateway_session_count: (n) => `${n} ${n === 1 ? 'relace' : 'relací'}`,
+ import: 'Importovat',
+ import_session_json_tooltip: 'Importovat relaci z JSON',
+ insights_activity_by_day: 'Aktivita podle dne',
+ insights_activity_by_hour: 'Aktivita podle hodiny',
+ insights_cache_hit: 'Úspěšnost prompt-cache',
+ insights_cost: 'Odhadované náklady',
+ insights_daily_tokens: 'Denní tokeny',
+ insights_footer: 'Zobrazeny údaje za posledních {days} dnů',
+ insights_input_tokens: 'Vstup',
+ insights_messages: 'Zprávy',
+ insights_model_cache: 'Mezipaměť',
+ insights_model_cost: 'Náklady',
+ insights_model_health_cost_per_m: 'Náklady / 1M',
+ insights_model_health_provider: 'Poskytovatel',
+ insights_model_health_replacement: 'Průvodce náhrady',
+ insights_model_health_title: 'Srovnání zdraví modelů',
+ insights_model_name: 'Model',
+ insights_model_sessions: 'Relace',
+ insights_model_share: 'Podíl',
+ insights_model_tokens: 'Tokeny',
+ insights_models: 'Modely',
+ insights_no_cost: 'Nedostupné',
+ insights_no_usage_data: 'Zatím žádná data o využití',
+ insights_output_tokens: 'Výstup',
+ insights_peak_hour: 'Špička: {hour}',
+ insights_sessions: 'Relace',
+ insights_skill_usage_col_patches: 'Záplaty',
+ insights_skill_usage_col_share: 'Podíl použití %',
+ insights_skill_usage_col_skill: 'Dovednost',
+ insights_skill_usage_col_uses: 'Použití',
+ insights_skill_usage_col_views: 'Zobrazení',
+ insights_skill_usage_footer: 'Počty z ~/.hermes/skills/',
+ insights_skill_usage_no_data: 'Zatím žádná data o použití dovedností',
+ insights_skill_usage_no_data_hint: 'Dovednosti se zde zobrazí po použití v konverzacích.',
+ insights_skill_usage_skills_used: 'Použité dovednosti',
+ insights_skill_usage_sub: 'Frekvence volání nástrojů',
+ insights_skill_usage_title: 'Použití dovedností',
+ insights_skill_usage_total: 'Celkem volání',
+ insights_title: 'Analýza využití',
+ insights_token_breakdown: 'Rozložení tokenů',
+ insights_tokens: 'Tokeny',
+ insights_total: 'Celkem',
+ kanban_add_comment: 'Přidat komentář',
+ kanban_add_dependency: 'Přidat závislost',
+ kanban_all_assignees: 'Všichni přiřazení',
+ kanban_all_tenants: 'Všichni tenanti',
+ kanban_archive_board: 'Archivovat aktuální desku…',
+ kanban_archive_board_confirm: 'Archivovat desku "{name}"? Úkoly zůstávají na disku a desku lze obnovit z kanban/boards/_archived/.',
+ kanban_assignee: 'Přiřazený',
+ kanban_assignee_other_label: 'Jiný (CLI jízdní pruhy / odstraněné profily)',
+ kanban_assignee_placeholder: 'Volitelné — nechte prázdné pro jakéhokoliv pracovníka',
+ kanban_assignee_profiles_label: 'Hermes profily',
+ kanban_assignee_unassigned: '— Nepřiřazeno (nebude automaticky spuštěno) —',
+ kanban_back_to_board: 'Zpět na desku',
+ kanban_block: 'Blokovat',
+ kanban_board: 'Deska',
+ kanban_board_archived: 'Deska archivována',
+ kanban_board_color: 'Barva (volitelná)',
+ kanban_board_description: 'Popis (volitelný)',
+ kanban_board_icon: 'Ikona (emoji, volitelná)',
+ kanban_board_name: 'Název',
+ kanban_board_name_required: 'Název je povinný',
+ kanban_board_slug: 'Slug (malá písmena, pomlčky)',
+ kanban_board_slug_required: 'Slug je povinný',
+ kanban_bulk_action: 'Hromadná akce',
+ kanban_card_archive: 'archivovat',
+ kanban_card_complete: 'dokončit',
+ kanban_children: 'Potomci',
+ kanban_clear_filters: 'Vymazat filtry',
+ kanban_comments_count: 'Komentáře ({0})',
+ kanban_dependency_placeholder: 'ID úkolu k propojení',
+ kanban_dependency_self: 'Úkol nemůže záviset sám na sobě',
+ kanban_description: 'Popis',
+ kanban_description_placeholder: 'Volitelné — co je třeba udělat, kritéria přijetí, odkazy',
+ kanban_dispatch_auto_blocked: 'auto-blokovaný',
+ kanban_dispatch_crashed: 'padl',
+ kanban_dispatch_preview_prefix: 'Náhled:',
+ kanban_dispatch_promoted: 'povýšen',
+ kanban_dispatch_reclaimed: 'získán zpět',
+ kanban_dispatch_run_prefix: 'Odesláno:',
+ kanban_dispatch_skipped_nonspawnable: 'přeskočeno (neznámý profil)',
+ kanban_dispatch_skipped_unassigned: 'přeskočeno (bez přiřazení)',
+ kanban_dispatch_spawned: 'vytvořen',
+ kanban_dispatch_timed_out: 'vypršel čas',
+ kanban_edit_task: 'Upravit úkol',
+ kanban_empty: 'Prázdné',
+ kanban_events_count: 'Události ({0})',
+ kanban_include_archived: 'Zahrnout archivované',
+ kanban_lanes_by_profile: 'Jízdní pruhy podle profilu',
+ kanban_links: 'Odkazy',
+ kanban_max_runtime_hint: 'Nechte prázdné pro neomezené.',
+ kanban_max_runtime_invalid: 'Maximální doba běhu musí být celé číslo v sekundách větší než 0.',
+ kanban_max_runtime_seconds: 'Maximální doba běhu (sekundy)',
+ kanban_new_board: 'Nová deska…',
+ kanban_new_task: 'Nový úkol',
+ kanban_no_comments: 'Žádné komentáře',
+ kanban_no_data: 'Žádná data Kanban',
+ kanban_no_description: 'Bez popisu',
+ kanban_no_events: 'Žádné události',
+ kanban_no_matching_tasks: 'Žádné odpovídající úkoly',
+ kanban_no_runs: 'Žádná spuštění',
+ kanban_nudge_dispatcher: 'Náhled dispečera',
+ kanban_only_mine: 'Pouze mé',
+ kanban_parents: 'Rodiče',
+ kanban_parents_modal: 'Závislosti rodičů',
+ kanban_parents_placeholder: 'ID nadřazeného úkolu',
+ kanban_priority: 'Priorita',
+ kanban_priority_hint: 'Vyšší čísla běží první. Výchozí je 0.',
+ kanban_read_only: 'Zobrazení pouze pro čtení',
+ kanban_ready_needs_assignee: 'Zvolili jste Nepřiřazeno + Připraveno. Dispečer tento úkol přeskočí. Odešlete znovu pro potvrzení nebo zvolte profil.',
+ kanban_refresh: 'Obnovit',
+ kanban_remove_dependency: 'Odebrat závislost',
+ kanban_rename_board: 'Přejmenovat aktuální desku…',
+ kanban_run_dispatcher: 'Spustit dispečera',
+ kanban_run_dispatcher_confirm: 'Toto získá úkoly ve stavu Připraveno na této desce a vytvoří pracovní dílčí procesy (jeden na úkol, až 8 na kliknutí). Pokračovat?',
+ kanban_runs_count: 'Spuštění ({0})',
+ kanban_search_tasks: 'Hledat úkoly',
+ kanban_skills: 'Dovednosti',
+ kanban_skills_placeholder: 'Názvy dovedností oddělené čárkami, např. python,git',
+ kanban_stats: 'Statistiky',
+ kanban_status: 'Stav',
+ kanban_status_archived: 'Archivováno',
+ kanban_status_blocked: 'Blokováno',
+ kanban_status_done: 'Hotovo',
+ kanban_status_original_hint: 'Skutečný stav: {0}. Toto dialog pouze podporuje úpravy Triage/Todo/Ready.',
+ kanban_status_ready: 'Připraveno',
+ kanban_status_running: 'Běží',
+ kanban_status_todo: 'K udělání',
+ kanban_status_triage: 'Třídění',
+ kanban_task: 'Úkol',
+ kanban_tasks_hidden_by_filters: 'Úkoly skryté filtry',
+ kanban_tenant: 'Nájemce',
+ kanban_tenant_placeholder: 'Volitelné — slug projektu nebo týmu',
+ kanban_title: 'Název',
+ kanban_title_required: 'Název je povinný.',
+ kanban_unassigned: 'nepřiřazeno',
+ kanban_unavailable: 'Kanban není dostupný',
+ kanban_unblock: 'Odblokovat',
+ kanban_view_consolidated: 'Konsolidované zobrazení',
+ kanban_view_consolidated_saved: 'Zobrazení Kanban: konsolidované',
+ kanban_view_lanes: 'Jízdní pruhy podle profilu',
+ kanban_view_lanes_saved: 'Zobrazení Kanban: jízdní pruhy podle profilu',
+ kanban_view_update_failed: 'Nepodařilo se aktualizovat zobrazení Kanban: ',
+ kanban_visible_tasks: 'Viditelných úkolů: {0}',
+ kanban_work_queue_hint: 'Toto je fronta úkolů Hermes agenta. Vytvořte nebo triážujte úkol, přiřaďte ho, přesuňte do stavu Připraveno a nechte dispečera ho získat.',
+ kanban_worker_log: 'Pracovní log',
+ kanban_workspace_dir: 'Adresář',
+ kanban_workspace_kind: 'Typ pracovního prostoru',
+ kanban_workspace_path: 'Cesta pracovního prostoru',
+ kanban_workspace_path_placeholder: 'Cesta k pracovnímu prostoru',
+ kanban_workspace_path_required: 'Cesta pracovního prostoru je povinná pro ne-scratch pracovní prostory.',
+ kanban_workspace_scratch: 'Scratch',
+ kanban_workspace_worktree: 'Worktree',
+ linked_files: 'Propojené soubory',
+ login_btn: 'Přihlásit se',
+ login_conn_failed: 'Připojení selhalo',
+ login_invalid_pw: 'Neplatné heslo',
+ login_placeholder: 'Heslo',
+ login_subtitle: 'Zadejte heslo pro pokračování',
+ login_title: 'Přihlášení',
+ logs_auto_refresh: 'Automatická obnova (5s)',
+ logs_copied: 'Logy zkopírovány',
+ logs_copy_all: 'Kopírovat vše',
+ logs_empty: 'Zatím žádné logy.',
+ logs_file: 'Soubor',
+ logs_filter_active: 'zobrazeno (filtr aktivní)',
+ logs_load_failed: 'Načtení logů selhalo',
+ logs_loading: 'Načítám logy…',
+ logs_no_mtime: 'ještě nepsáno',
+ logs_severity: 'Závažnost',
+ logs_severity_all: 'Všechny',
+ logs_severity_errors: 'Chyby',
+ logs_severity_warnings: 'Varování+',
+ logs_status_idle: 'Zvolte soubor logu pro zobrazení posledních řádků.',
+ logs_tail: 'Tail',
+ logs_title: 'Logy',
+ logs_truncated_hint: 'Zobrazen konec velkého log souboru; starší bajty byly přeskočeny pro udržení paměti.',
+ logs_wrap: 'Zalamovat řádky',
+ manage_profiles: 'Spravovat profily',
+ markdown_table_filter: 'Filtrovat tabulku',
+ markdown_table_sort_column: 'Řadit sloupec',
+ mcp_disable_server: 'Zakázat tento MCP server',
+ mcp_enable_server: 'Povolit tento MCP server',
+ media_audio_label: 'Zvuk',
+ media_download: 'Stáhnout',
+ media_svg_label: 'Diagram',
+ media_video_label: 'Video',
+ memory_notes_label: 'paměť (poznámky)',
+ memory_saved: 'Paměť uložena',
+ my_notes: 'Moje poznámky',
+ name_required: 'Název je povinný',
+ never: 'nikdy',
+ new_conversation: 'Nová konverzace',
+ new_file: 'Nový soubor',
+ new_file_prompt: 'Nový název souboru (např. notes.md):',
+ new_file_prompt_title: 'Nový název souboru v {0}:',
+ new_folder: 'Nová složka',
+ new_folder_prompt: 'Nový název složky:',
+ new_folder_prompt_title: 'Nový název složky v {0}:',
+ new_job: 'Nová úloha',
+ new_profile: 'Nový profil',
+ new_skill: 'Nová dovednost',
+ no_notes_yet: 'Zatím žádné poznámky.',
+ no_profile_yet: 'Zatím žádný profil.',
+ no_soul_yet: 'Zatím není definována žádná duše.',
+ not_available: 'Nedostupné',
+ notifications_denied: 'Notifikace jsou v tomto prohlížeči blokovány. Povolte je v nastavení prohlížeče.',
+ notifications_enable_btn: 'Povolit notifikace',
+ notifications_enabled_toast: 'Notifikace povoleny.',
+ notifications_permission_status: (status) => `Povolení: ${status}`,
+ notifications_test_btn: 'Odeslat test',
+ notifications_unsupported: 'Notifikace nejsou v tomto prohlížeči podporovány.',
+ oauth_codex_error: 'OAuth přihlášení selhalo',
+ oauth_codex_expired: 'Kód vypršel, prosím zkuste znovu',
+ oauth_codex_polling: 'Čekám na autorizaci…',
+ oauth_codex_step1: 'Krok 1: Navštivte tuto URL a zadejte kód',
+ oauth_codex_step2: 'Krok 2: Zadejte tento kód na stránce',
+ oauth_codex_success: 'Codex OAuth přihlášení úspěšné!',
+ oauth_login_codex: 'Přihlásit se přes Codex (ChatGPT)',
+ onboarding_api_key_help_keyless: 'Většina instalací LM Studio / Ollama / vLLM běží bez klíče — nechte prázdné pokud váš server nevyžaduje autentifikaci. Pro ověření použijte tlačítko Test připojení.',
+ onboarding_api_key_help_prefix: 'Uloženo jako tajemství v souboru .env vašeho Herma pomocí',
+ onboarding_api_key_label: 'API klíč',
+ onboarding_api_key_label_optional: 'API klíč (volitelný)',
+ onboarding_api_key_placeholder: 'Nechte prázdné pro zachování existujícího uloženého klíče',
+ onboarding_api_key_placeholder_optional: 'Nechte prázdné pro servery bez klíče',
+ onboarding_back: 'Zpět',
+ onboarding_badge: 'PRVNÍ SPUŠTĚNÍ',
+ onboarding_base_url_help: 'Použijte toto pro OpenAI-kompatibilní routery, samostatně hostované servery, LiteLLM, Ollama, LM Studio, vLLM nebo podobné koncové body.',
+ onboarding_base_url_label: 'Základní URL',
+ onboarding_base_url_placeholder: 'https://vas-endpoint.example/v1',
+ onboarding_check_agent: 'Hermes Agent',
+ onboarding_check_agent_missing: 'Chybí nebo částečně importovatelný',
+ onboarding_check_agent_ready: 'Detekován a importovatelný',
+ onboarding_check_password: 'Heslo',
+ onboarding_check_password_disabled: 'Ještě nepovoleno',
+ onboarding_check_password_enabled: 'Již povoleno',
+ onboarding_check_provider: 'Konfigurace poskytovatele',
+ onboarding_check_provider_partial: 'Uloženo ale neúplné',
+ onboarding_check_provider_pending: 'Vyžaduje ověření',
+ onboarding_check_provider_ready: 'Připraveno k chatu',
+ onboarding_config_file: 'Konfigurační soubor:',
+ onboarding_continue: 'Pokračovat',
+ onboarding_current_provider: 'Aktuální nastavení:',
+ onboarding_custom_model_help: 'Pro vlastní koncové body zadejte přesné ID modelu, které váš server očekává.',
+ onboarding_custom_model_placeholder: 'název-vašeho-modelu',
+ onboarding_env_file: 'Soubor .env:',
+ onboarding_error_base_url_required: 'Základní URL je povinná pro vlastní koncové body.',
+ onboarding_error_choose_model: 'Před pokračováním zvolte model.',
+ onboarding_error_choose_workspace: 'Před pokračováním zvolte pracovní prostor.',
+ onboarding_error_model_required: 'Model je povinný.',
+ onboarding_error_probe_failed: 'Nepodařilo se ověřit nakonfigurovanou základní URL.',
+ onboarding_error_provider_required: 'Před pokračováním zvolte režim nastavení.',
+ onboarding_error_workspace_required: 'Pracovní prostor je povinný.',
+ onboarding_finish_help: 'Dokončení ukládá onboarding_completed do nastavení a přenese vás do normální aplikace.',
+ onboarding_lead: 'Rychlé vedené nastavení ověří Herma, uloží skutečnou konfiguraci poskytovatele, zvolí pracovní prostor a model a volitelně ochrání aplikaci heslem.',
+ onboarding_missing_imports: 'Chybějící importy:',
+ onboarding_model_label: 'Výchozí model',
+ onboarding_not_set: 'Nenastaveno',
+ onboarding_notice_finish: 'Nastavení můžete znovu otevřít později a změnit cokoliv.',
+ onboarding_notice_password_enabled: 'Heslo je již nakonfigurováno. Zadejte nové pouze pokud ho chcete nahradit.',
+ onboarding_notice_password_recommended: 'Volitelné ale doporučené pokud budete vystavovat UI mimo localhost.',
+ onboarding_notice_setup_already_ready: 'Je detekováno funkční nastavení poskytovatele Herma. Můžete ho zachovat nebo nahradit zde.',
+ onboarding_notice_setup_required: 'Zvolte jednoduchou cestu poskytovatele zde. Pokročilé OAuth toky stále patří do CLI Herma.',
+ onboarding_notice_system_ready: 'Hermes Agent se jeví jako dosažitelný z Web UI.',
+ onboarding_notice_system_unavailable: 'Hermes Agent ještě není plně dostupný. Bootstrap ho může nainstalovat, ale nastavení poskytovatele může stále vyžadovat terminál.',
+ onboarding_notice_workspace: 'Tyto hodnoty znovu používají stejná nastavení API jako normální aplikace.',
+ onboarding_oauth_provider_not_ready_body: 'Tato instance je nakonfigurována používat {provider}, který používá OAuth namísto API klíče. Spusťte hermes auth nebo hermes model v terminálu pro autentifikaci a poté znovu načtěte Web UI.',
+ onboarding_oauth_provider_not_ready_title: 'OAuth poskytovatel ještě není autentifikován',
+ onboarding_oauth_provider_ready_body: 'Tato instance je nakonfigurována používat OAuth poskytovatele ({provider}), který byl nastaven přes Hermes CLI. Žádný API klíč zde není potřeba — klikněte Pokračovat pro dokončení nastavení.',
+ onboarding_oauth_provider_ready_title: 'Poskytovatel již autentifikován',
+ onboarding_oauth_switch_hint: 'Nebo zvolte jiného poskytovatele níže pro přepnutí na nastavení s API klíčem:',
+ onboarding_open: 'Otevřít Herma',
+ onboarding_password_help: 'Hesla jsou ukládána přes existující API nastavení a hashovaná na serveru.',
+ onboarding_password_keep_existing: 'Zachovat aktuální heslo',
+ onboarding_password_label: 'Heslo (volitelné)',
+ onboarding_password_placeholder: 'Nechte prázdné pro přeskočení',
+ onboarding_password_remains_disabled: 'Zůstane zakázáno',
+ onboarding_password_skipped: 'Přeskočeno prozatím',
+ onboarding_password_will_enable: 'Bude povoleno',
+ onboarding_password_will_replace: 'Bude nahrazeno',
+ onboarding_probe_error_connect_refused: 'Připojení odmítnuto — server pravděpodobně neběží na této adrese. Z Dockeru zkuste IP hostitele místo localhostu.',
+ onboarding_probe_error_dns: 'Nelze přeložit hostitele. Zkontrolujte URL nebo použijte IP adresu hostitele.',
+ onboarding_probe_error_generic: 'Nelze dosáhnout nakonfigurované základní URL.',
+ onboarding_probe_error_http_4xx: 'Koncový bod vrátil chybu klienta. Zkontrolujte autentifikaci a cestu URL (obvykle končí na /v1).',
+ onboarding_probe_error_http_5xx: 'Koncový bod vrátil chybu serveru. Zkontrolujte logy serveru LM Studio / Ollama.',
+ onboarding_probe_error_invalid_url: 'Základní URL musí začínat http:// nebo https://.',
+ onboarding_probe_error_parse: 'Koncový bod nevrátil seznam modelů v očekávaném tvaru. Ověřte že URL ukazuje na kořen OpenAI-kompatibilního API.',
+ onboarding_probe_error_timeout: 'Koncový bod včas neodpověděl. Zkontrolujte že server běží a URL je správná.',
+ onboarding_probe_error_unreachable: 'Nelze dosáhnout nakonfigurované základní URL.',
+ onboarding_probe_ok: 'Připojeno. Dostupných {n} modelů.',
+ onboarding_probe_probing: 'Testuji připojení…',
+ onboarding_probe_test_button: 'Test připojení',
+ onboarding_provider_label: 'Režim nastavení',
+ onboarding_quick_setup_badge: 'rychlé nastavení',
+ onboarding_skipped: 'Nastavení přeskočeno — používám existující konfiguraci.',
+ onboarding_step_finish_desc: 'Zkontrolujte a vstupte do aplikace.',
+ onboarding_step_finish_title: 'Dokončit',
+ onboarding_step_password_desc: 'Chraňte Web UI před jeho sdílením.',
+ onboarding_step_password_title: 'Volitelné heslo',
+ onboarding_step_setup_desc: 'Uložte minimální konfiguraci poskytovatele Herma.',
+ onboarding_step_setup_title: 'Nastavení poskytovatele',
+ onboarding_step_system_desc: 'Ověřte dostupnost a viditelnost konfigurace agenta Herma.',
+ onboarding_step_system_title: 'Systémová kontrola',
+ onboarding_step_workspace_desc: 'Zvolte výchozí nastavení pro nové relace a chat.',
+ onboarding_step_workspace_title: 'Pracovní prostor + model',
+ onboarding_title: 'Vítejte v Hermes Web UI',
+ onboarding_unknown: 'Neznámý',
+ onboarding_workspace_help: 'Zvolte model který má Hermes používat pro nové chaty po dokončení nastavení.',
+ onboarding_workspace_label: 'Pracovní prostor',
+ onboarding_workspace_or_path: 'Nebo zadejte cestu pracovního prostoru',
+ onboarding_workspace_placeholder: '/home/you/workspace',
+ open_in_browser: 'Otevřít v prohlížeči',
+ outline_empty: 'Zatím žádné otázky.',
+ outline_loading: 'Načítám…',
+ outline_title: 'Osnova',
+ password_env_var_locked: 'Proměnná prostředí HERMES_WEBUI_PASSWORD je aktuálně nastavena a má přednost. Zrušte ji a restartujte server pro správu hesla odtud.',
+ password_env_var_locked_placeholder: 'Uzamčeno: je nastavena proměnná prostředí HERMES_WEBUI_PASSWORD',
+ password_placeholder: 'Zadejte nové heslo…',
+ personal_memory: 'Osobní paměť',
+ plugins_active_provider: 'Aktivní (poskytovatel)',
+ plugins_disabled: 'Zakázáno',
+ plugins_enable_toggle: 'Povolit',
+ plugins_enabled: 'Povoleno',
+ plugins_load_failed: 'Nepodařilo se načíst pluginy: ',
+ plugins_no_description: 'Nebyl poskytnut žádný popis.',
+ plugins_no_hooks: 'Žádné registrované háčky životního cyklu',
+ plugins_provider_no_hooks: 'Plugin poskytovatele — žádné háčky viditelné pro agenta',
+ plugins_registered_hooks: 'Registrované háčky',
+ plugins_unnamed: 'Nepojmenovaný plugin',
+ profile_active: 'AKTIVNÍ',
+ profile_api_key_label: 'API klíč',
+ profile_api_key_placeholder: 'API klíč (volitelný)',
+ profile_api_keys_configured: 'API klíče nakonfigurovány',
+ profile_base_url_label: 'Základní URL',
+ profile_base_url_placeholder: 'Základní URL (volitelná, např. http://localhost:11434)',
+ profile_base_url_rule: 'Základní URL musí začínat http:// nebo https://',
+ profile_clone_label: 'Klonovat konfiguraci z aktivního profilu',
+ profile_created: (name) => `Profil vytvořen: ${name}`,
+ profile_default_label: '(výchozí)',
+ profile_delete_confirm_message: 'Všechny relace, konfigurace, dovednosti a paměť tohoto profilu budou trvale smazány. Toto nelze vrátit zpět.',
+ profile_delete_confirm_title: (name) => `Smazat profil "${name}"?`,
+ profile_delete_title: 'Smazat tento profil',
+ profile_deleted: (name) => `Profil smazán: ${name}`,
+ profile_gateway_running: 'Gateway běží',
+ profile_gateway_stopped: 'Gateway zastaven',
+ profile_model_hint: 'Zvolte z nakonfigurovaných poskytovatelů a modelů pro tento nový profil.',
+ profile_model_label: 'Model / poskytovatel',
+ profile_model_use_default: 'Použít výchozí nastavení aktivního profilu',
+ profile_name_label: 'Název',
+ profile_name_placeholder: 'Název profilu (malá písmena, a-z 0-9 pomlčky)',
+ profile_name_rule: 'Pouze malá písmena, čísla, pomlčky a podtržítka',
+ profile_no_configuration: 'Bez konfigurace',
+ profile_skill_count: (count) => `${count} dovedností${count === 1 ? '' : 'í'}`,
+ profile_switch_title: 'Přepnout na tento profil',
+ profile_switched: (name) => `Přepnuto na profil: ${name}`,
+ profile_switched_new_conversation: (name) => `Přepnuto na profil: ${name} — zahájena nová konverzace`,
+ profile_use: 'Použít',
+ profiles_empty_sub: 'Zvolte profil agenta z bočního panelu pro zobrazení a úpravu jeho nastavení, nebo vytvořte nový.',
+ profiles_empty_title: 'Zvolte profil',
+ profiles_load_failed: 'Nepodařilo se načíst profily',
+ profiles_no_profiles: 'Nebyly nalezeny žádné profily.',
+ project_name_prompt: 'Název projektu:',
+ provider_category_easy_start: 'Snadný start',
+ provider_category_self_hosted: 'Otevřené / samostatně hostované',
+ provider_category_specialized: 'Specializované',
+ provider_cost_budget_clear: 'Vymazat',
+ provider_cost_budget_label: 'Měsíční rozpočet',
+ provider_cost_budget_pct: '{0}% z rozpočtu ${1} (měsíční tempo)',
+ provider_cost_budget_placeholder: 'např. 50.00',
+ provider_cost_budget_save_failed: 'Nepodařilo se uložit rozpočet',
+ provider_cost_budget_set: 'Nastavit',
+ provider_quota_account_limits_loaded: 'Limity účtu načteny.',
+ provider_quota_active_provider: 'Aktivní poskytovatel',
+ provider_quota_credential_label: 'Pověření {0}',
+ provider_quota_credential_pool: 'Fond pověření',
+ provider_quota_last_checked: 'Naposledy kontrolováno {0}',
+ provider_quota_last_checked_after_refresh: 'Naposledy kontrolováno po obnovení',
+ provider_quota_metric_limit: 'Limit',
+ provider_quota_metric_remaining: 'Zbývající',
+ provider_quota_metric_used: 'Použito',
+ provider_quota_pool_no_windows: 'Nejsou hlášena žádná okna limitů účtu.',
+ provider_quota_pool_plans: 'Plány: {0}',
+ provider_quota_pool_summary_available: '{0}/{1} dostupných',
+ provider_quota_pool_summary_checked: '{0} zkontrolováno',
+ provider_quota_pool_summary_exhausted: '{0} vyčerpáno',
+ provider_quota_pool_summary_failed: '{0} selhalo',
+ provider_quota_refresh_failed: 'Obnovení využití poskytovatele selhalo',
+ provider_quota_refresh_succeeded: 'Využití poskytovatele obnoveno',
+ provider_quota_refresh_title: 'Nyní obnovit limity využití poskytovatele',
+ provider_quota_refresh_usage: 'Obnovit využití',
+ provider_quota_refreshing: 'Obnovování…',
+ provider_quota_resets_meta: 'resetuje {0}',
+ provider_quota_retry_after: 'Zkusit znovu za {0}',
+ provider_quota_session_limit: '5-hodinový limit',
+ provider_quota_status_available: 'dostupné',
+ provider_quota_status_checked: 'zkontrolováno',
+ provider_quota_status_exhausted: 'vyčerpáno',
+ provider_quota_status_failed: 'selhalo',
+ provider_quota_status_invalid_key: 'neplatný klíč',
+ provider_quota_status_no_key: 'bez klíče',
+ provider_quota_status_unavailable: 'nedostupné',
+ provider_quota_status_unsupported: 'nepodporováno',
+ provider_quota_title: 'Kvóta aktivního poskytovatele',
+ provider_quota_unavailable: 'Stav kvóty nedostupný',
+ provider_quota_used_meta: '{0} použito',
+ provider_quota_weekly_limit: 'Týdenní limit',
+ provider_quota_window_fallback: 'Okno',
+ providers_empty: 'Nebyli nalezeni žádní konfigurovatelní poskytovatelé.',
+ providers_enter_key: 'Prosím zadejte API klíč',
+ providers_key_placeholder_new: 'sk-…',
+ providers_key_placeholder_replace: 'Zadejte nový klíč pro nahrazení…',
+ providers_key_removed: 'API klíč odstraněn',
+ providers_key_updated: 'API klíč uložen',
+ providers_models_refreshed: 'Modely obnoveny',
+ providers_oauth_config_yaml_hint: 'Token nakonfigurován přes config.yaml. Pro aktualizaci upravte sekci poskytovatele ve vašem config.yaml nebo spusťte hermes auth.',
+ providers_oauth_hint: 'Autentifikováno přes OAuth. Žádný API klíč není potřeba.',
+ providers_oauth_not_configured_hint: 'Neautentifikováno. Spusťte hermes auth v terminálu pro konfiguraci tohoto poskytovatele.',
+ providers_refresh_models: 'Obnovit modely',
+ providers_refreshing: 'Obnovování…',
+ providers_remove: 'Odebrat',
+ providers_removing: 'Odebírám…',
+ providers_save: 'Uložit',
+ providers_saving: 'Ukládám…',
+ providers_section_meta: 'Spravujte API klíče pro AI poskytovatele. Změny se okamžitě projeví.',
+ providers_section_title: 'Poskytovatelé',
+ providers_status_api_key: 'API klíč',
+ providers_status_configured: 'API klíč nakonfigurován',
+ providers_status_model: 'Model',
+ providers_status_not_configured: 'Bez API klíče',
+ providers_status_not_configured_label: 'Nenakonfigurováno',
+ providers_status_oauth: 'OAuth',
+ providers_tab_title: 'Poskytovatelé',
+ remove_failed: 'Odebrání selhalo: ',
+ remove_title: 'Odebrat',
+ save_skill: 'Uložit dovednost',
+ scheduled_jobs: 'Naplánované úlohy',
+ search: 'Hledat',
+ search_skills: 'Hledat dovednosti...',
+ session_archive: 'Archivovat konverzaci',
+ session_archive_desc: 'Skrýt tuto konverzaci dokud se nezobrazí archivované',
+ session_archive_failed: 'Archivace selhala: ',
+ session_archive_worktree_desc: 'Skrýt tuto konverzaci; zachovat její worktree na disku',
+ session_archived: 'Relace archivována',
+ session_archived_worktree: 'Relace archivována. Worktree zůstává na disku.',
+ session_batch_archive: 'Archivovat',
+ session_batch_archive_confirm: 'Archivovat {0} konverzací?',
+ session_batch_archive_worktree_confirm: 'Archivovat {0} konverzací? {1} konverzace s worktree si ponechají své adresáře worktree na disku.',
+ session_batch_delete: 'Smazat',
+ session_batch_delete_confirm: 'Smazat {0} konverzací?',
+ session_batch_delete_worktree_confirm: 'Smazat {0} konverzací? {1} konverzace s worktree zanechají své adresáře worktree na disku.',
+ session_batch_move: 'Přesunout do projektu',
+ session_child_toggle_hint: '{0} — podřízené konverzace vytvořené z této relace. Klikněte pro zobrazení nebo skrytí.',
+ session_delete: 'Smazat konverzaci',
+ session_delete_confirm: 'Smazat tuto konverzaci?',
+ session_delete_desc: 'Trvale odstranit tuto konverzaci',
+ session_delete_worktree_confirm: (path) => `Smazat tuto konverzaci? Worktree na ${path} zůstane na disku.`,
+ session_delete_worktree_desc: 'Smazat pouze WebUI konverzaci; zachovat worktree na disku',
+ session_deleted: 'Konverzace smazána',
+ session_deleted_worktree: 'Konverzace smazána. Worktree zůstává na disku.',
+ session_deselect_all: 'Odznačit vše',
+ session_duplicate: 'Duplikovat konverzaci',
+ session_duplicate_desc: 'Vytvořit kopii se stejným pracovním prostorem a modelem',
+ session_duplicate_failed: 'Duplikace selhala: ',
+ session_duplicated: 'Relace duplikována',
+ session_export_html: 'Exportovat jako HTML',
+ session_export_html_desc: 'Stáhnout tuto konverzaci jako samostatný HTML soubor',
+ session_hidden: 'Relace skryta ze seznamu',
+ session_hide_external: 'Skrýt ze seznamu',
+ session_hide_external_desc: 'Skrýt tuto importovanou relaci z WebUI bez mazání zdrojové historie.',
+ session_lineage_segment_open: 'Otevřít segment linie',
+ session_lineage_segment_untitled: 'Neoznačený segment',
+ session_lineage_static_hint: '{0} — dřívější kontextové tahy jsou zde sbaleny.',
+ session_lineage_toggle_hint: '{0} — dřívější kontextové tahy jsou zde sbaleny. Klikněte pro zobrazení nebo skrytí.',
+ session_link_copied: 'Odkaz na konverzaci zkopírován do schránky',
+ session_link_copy_failed: 'Kopírování odkazu na konverzaci selhalo: ',
+ session_meta_children: (n) => `${n} potomek${n === 1 ? '' : 'ci'}`,
+ session_meta_messages: (n) => `${n} zpráv${n === 1 ? 'a' : ''}`,
+ session_meta_segments: (n) => `${n} předchozích tah${n === 1 ? '' : 'ů'}`,
+ session_move_project: 'Přesunout do projektu',
+ session_move_project_desc_has: 'Změnit projekt této konverzace',
+ session_move_project_desc_none: 'Přiřadit projekt této konverzaci',
+ session_no_selection: 'Nejsou vybrány žádné konverzace',
+ session_pin: 'Připnout konverzaci',
+ session_pin_desc: 'Ponechat tuto konverzaci nahoře',
+ session_pin_failed: 'Připnutí selhalo: ',
+ session_readonly_title_hint: 'Importovaná relace pouze pro čtení — {0}',
+ session_restore: 'Obnovit konverzaci',
+ session_restore_desc: 'Vrátit tuto konverzaci zpět do hlavního seznamu',
+ session_restored: 'Relace obnovena',
+ session_select_all: 'Vybrat vše',
+ session_select_mode: 'Vybrat',
+ session_select_mode_desc: 'Vybrat konverzace pro hromadnou správu',
+ session_selected_count: '{0} vybráno',
+ session_stop_response: 'Zastavit odpověď',
+ session_stop_response_desc: 'Zrušit běžící odpověď této konverzace',
+ session_time_bucket_last_week: 'Minulý týden',
+ session_time_bucket_older: 'Starší',
+ session_time_bucket_this_week: 'Tento týden',
+ session_time_bucket_today: 'Dnes',
+ session_time_bucket_yesterday: 'Včera',
+ session_time_days_ago: (n) => `${n} d`,
+ session_time_hours_ago: (n) => `${n} h`,
+ session_time_last_week: '1t',
+ session_time_minutes_ago: (n) => `${n} min`,
+ session_time_unknown: 'Neznámý',
+ session_unpin: 'Odpnout konverzaci',
+ session_unpin_desc: 'Odebrat z připnutých',
+ session_worktree_remove: 'Odebrat worktree',
+ session_worktree_remove_ahead_warning: (ahead) => `${ahead} nepushnutých commitů bude ztraceno.`,
+ session_worktree_remove_confirm: (path) => `Odebrat git worktree z disku?\n\nCesta: ${path}\n\nToto smaže celý adresář worktree. Data relace zůstanou ve WebUI.`,
+ session_worktree_remove_confirm_label: 'Odebrat',
+ session_worktree_remove_desc: (path) => `Smazat git worktree na ${path} z disku`,
+ session_worktree_remove_dirty_warning: 'UPOZORNĚNÍ: Tento worktree má necommitované změny které budou ztraceny.',
+ session_worktree_remove_failed: 'Odebrání worktree selhalo: ',
+ session_worktree_remove_locked_by_stream: 'Nelze odebrat — aktivní streamovací relace používá tento worktree.',
+ session_worktree_remove_locked_by_terminal: 'Nelze odebrat — aktivní terminálová relace používá tento worktree.',
+ session_worktree_remove_not_exists: (path) => `Worktree na ${path} již neexistuje na disku.`,
+ session_worktree_remove_status_failed: 'Čtení stavu worktree selhalo: ',
+ session_worktree_remove_unsafe_blocked: 'Vyřešte lokální změny nebo nepushnuté commity před odebráním tohoto worktree.',
+ session_worktree_remove_untracked_warning: (count) => `${count} nesledovaných souborů bude trvale smazáno.`,
+ session_worktree_removed: 'Worktree odebrán.',
+ settings_auto_title_refresh_10: 'Každých 10 výměn',
+ settings_auto_title_refresh_20: 'Každých 20 výměn',
+ settings_auto_title_refresh_5: 'Každých 5 výměn',
+ settings_auto_title_refresh_off: 'Vypnuto',
+ settings_autosave_failed: 'Uložení selhalo',
+ settings_autosave_retry: 'Zkusit znovu',
+ settings_autosave_saved: 'Uloženo',
+ settings_autosave_saving: 'Ukládání…',
+ settings_aux_advanced_api_key: 'Přepsání API klíče',
+ settings_aux_advanced_api_key_clear: 'Vymazat existující přepsání API klíče',
+ settings_aux_advanced_api_key_empty_hint: 'Nechte prázdné pro použití pověření poskytovatele/výchozích.',
+ settings_aux_advanced_api_key_set_hint: 'API klíč je nastaven. Nechte prázdné pro jeho zachování, nebo použijte vymazání pro jeho odstranění.',
+ settings_aux_advanced_base_url: 'Základní URL',
+ settings_aux_advanced_base_url_desc: 'Volitelné přepsání koncového bodu poskytovatele.',
+ settings_aux_advanced_button_aria: 'Pokročilé možnosti pro {task}',
+ settings_aux_advanced_button_title: 'Pokročilé možnosti',
+ settings_aux_advanced_download_timeout: 'Časový limit stahování v sekundách',
+ settings_aux_advanced_download_timeout_desc: 'Relevantní pouze pro úlohy stahující média/obsah, např. vision. Prázdné používá výchozí.',
+ settings_aux_advanced_extra_body: 'Extra tělo JSON',
+ settings_aux_advanced_extra_body_desc: 'Volitelný JSON objekt sloučený do těla požadavku modelu.',
+ settings_aux_advanced_extra_body_invalid_json: 'Extra body musí být platný JSON',
+ settings_aux_advanced_extra_body_object_required: 'Extra body musí být JSON objekt',
+ settings_aux_advanced_max_concurrency: 'Maximální souběžnost',
+ settings_aux_advanced_max_concurrency_desc: 'Volitelný limit souběžnosti na úlohu. Prázdné používá výchozí.',
+ settings_aux_advanced_save: 'Uložit možnosti',
+ settings_aux_advanced_save_failed: 'Nepodařilo se uložit pomocné možnosti',
+ settings_aux_advanced_saved: 'Pomocné možnosti uloženy',
+ settings_aux_advanced_subtitle: 'Pokročilá konfigurace pro pomocný.',
+ settings_aux_advanced_timeout: 'Časový limit v sekundách',
+ settings_aux_advanced_timeout_desc: 'Časový limit požadavku pro tuto pomocnou úlohu. Prázdné používá výchozí Hermes.',
+ settings_aux_advanced_title: 'Možnosti {task}',
+ settings_aux_load_failed: 'Nepodařilo se načíst nastavení pomocného modelu. Ujistěte se že API agenta je dostupné.',
+ settings_aux_loading: 'Načítám pomocné modely…',
+ settings_aux_model_auto: 'auto (použít výchozí nastavení poskytovatele)',
+ settings_aux_model_custom: 'Vlastní model…',
+ settings_aux_model_custom_prompt: 'Zadejte ID modelu:',
+ settings_aux_no_changes: 'Žádné změny k aplikování',
+ settings_aux_provider_auto: 'použít hlavní model',
+ settings_aux_reset_confirm_msg: 'Toto nastaví všechny pomocné úlohy na auto (použít hlavní model).',
+ settings_aux_reset_confirm_title: 'Resetovat pomocné modely?',
+ settings_aux_reset_done: 'Pomocné modely resetovány na auto',
+ settings_aux_save_failed: 'Nepodařilo se uložit pomocný model',
+ settings_aux_saved: 'Pomocné modely aktualizovány',
+ settings_aux_task_approval: 'Schvalování',
+ settings_aux_task_approval_desc: 'chytré schvalování příkazů',
+ settings_aux_task_compression: 'Komprese',
+ settings_aux_task_compression_desc: 'sumarizace kontextu',
+ settings_aux_task_curator: 'Kurátor',
+ settings_aux_task_curator_desc: 'revize použití dovedností',
+ settings_aux_task_kanban_decomposer: 'Kanban dekompozitor',
+ settings_aux_task_kanban_decomposer_desc: 'dekompozice úkolů',
+ settings_aux_task_mcp: 'MCP',
+ settings_aux_task_mcp_desc: 'uvažování o nástrojích MCP',
+ settings_aux_task_profile_describer: 'Profil popisovač',
+ settings_aux_task_profile_describer_desc: 'souhrny profilů',
+ settings_aux_task_session_search: 'Hledání relací',
+ settings_aux_task_session_search_desc: 'připomenutí minulých konverzací',
+ settings_aux_task_skills_hub: 'Centrum dovedností',
+ settings_aux_task_skills_hub_desc: 'hledání/instalace dovedností',
+ settings_aux_task_title_generation: 'Generování názvů',
+ settings_aux_task_title_generation_desc: 'názvy relací',
+ settings_aux_task_triage_specifier: 'Triáž specifikátor',
+ settings_aux_task_triage_specifier_desc: 'specifikace triáže problémů/úkolů',
+ settings_aux_task_vision: 'Vidění',
+ settings_aux_task_vision_desc: 'analýza obrázků/screenshotů',
+ settings_aux_task_web_extract: 'Extrakce webu',
+ settings_aux_task_web_extract_desc: 'sumarizace webových stránek',
+ settings_btn_apply_aux_models: 'Aplikovat změny',
+ settings_btn_reset_aux_models: 'Resetovat vše na auto',
+ settings_btn_shutdown: 'Zastavit server',
+ settings_check_now: 'Zkontrolovat nyní',
+ settings_checking: 'Kontroluji…',
+ settings_dashboard_mode_always: 'Vždy zobrazit',
+ settings_dashboard_mode_auto: 'Automatická detekce',
+ settings_dashboard_mode_never: 'Nikdy nezobrazovat',
+ settings_dashboard_save: 'Uložit nastavení dashboard odkazu',
+ settings_default_message_mode_interrupt: 'Přerušit aktuální tah',
+ settings_default_message_mode_queue: 'Zařadit navazující zprávu',
+ settings_default_message_mode_steer: 'Steer (mezitahová oprava)',
+ settings_desc_api_redact: 'Uživatelé samostatně hostované instance mohou zakázat pro transparentnost (nedoporučeno pro sdílené instance).',
+ settings_desc_auto_scroll_follow: 'Když povoleno, zobrazení se posouvá dolů jak nové tokeny přicházejí. Když zakázáno, pozici posouvání ovládáte manuálně.',
+ settings_desc_auto_title_refresh: 'Automaticky regeneruje název relace na základě poslední výměny, udržuje ho relevantní jak konverzace pokračuje. Vyžaduje aby byl nakonfigurován LLM model pro generování názvů.',
+ settings_desc_auxiliary_models: 'Směrování vedlejších úloh pro vision, kompresi, generování názvů atd. "Auto" používá váš hlavní chatovací model.',
+ settings_desc_bot_name: 'Použito pouze pro výchozí profil. Ostatní profily používají vlastní názvy profilů.',
+ settings_desc_chat_activity_display_mode: 'Kompaktní Worklog seskupuje podpůrnou aktivitu do tichého souhrnu. Transparentní Stream zachovává každou událost přemýšlení/nástroje jako vlastní chronologicky rozbalitelný řádek.',
+ settings_desc_check_updates: 'Zobrazit banner když jsou dostupné novější verze WebUI nebo Agenta. Spouští periodické git fetch na pozadí.',
+ settings_desc_claude_code_sessions: 'Zobrazit importované relace Claude Code v bočním panelu, nebo je skrýt při zachování ostatních externích relací viditelných.',
+ settings_desc_composer_controls: 'Přepínat které ovládací prvky jsou zobrazeny v zápatí chatu. Přetáhněte čipy pro změnu pořadí každé skupiny zápatí.',
+ settings_desc_composer_situational_controls: 'Tyto ovládací prvky se ne vždy zobrazí, v závislosti na viewportu, režimu nebo stavu runtime. Stále je můžete vypnout pokud je to potřeba.',
+ settings_desc_conversation_outline: 'Zobrazit seznam otázek uživatele v aktuální konverzaci (pouze desktop). Standardně vypnuto.',
+ settings_desc_cron_sessions: 'Zobrazit výstup cron úloh jako konverzace v bočním panelu. Aktivní pouze když jsou povoleny externí relace. Standardně vypnuto; úlohy s vysokou frekvencí mohou zaplavit boční panel.',
+ settings_desc_dashboard_mode: 'Zobrazit odkaz navigačního pruhu když je oficiální hermes dashboard dosažitelný. Veřejné reverse-proxy URL jsou ukládány jako odkazy pouze v prohlížeči a nikdy nejsou kontrolovány serverem.',
+ settings_desc_default_message_mode: 'Řídí co se stane když odešlete zprávu zatímco agent běží. Fronta čeká; Přerušení ruší a začíná novou; Steer vkládá opravu mezitah bez přerušení. Pokud Steer není dostupný, návrh je obnoven pro výběr další akce.',
+ settings_desc_external_sessions: 'Zobrazit konverzace z CLI, Telegramu, Discordu, Slacku a dalších kanálů v seznamu relací. Klikněte pro import a pokračování.',
+ settings_desc_gateway_status: 'Stav Hermes gateway (Telegram, Discord, Slack atd.)',
+ settings_desc_hide_suggestions: 'Skrýt tři výchozí tlačítka návrhů na prázdné obrazovce nového chatu pro vyhnutí se náhodným klepnutím.',
+ settings_desc_ignore_agent_updates: 'Zachovat kontroly aktualizací WebUI zapnuté, ale skrýt oznámení aktualizací Agenta a přeskočit fetchování aktualizací Agenta.',
+ settings_desc_large_text_paste_as_attachment: 'Když povoleno, dlouhý vložený text se stane přílohou .md místo vyplnění kompozitoru.',
+ settings_desc_notifications: 'Zobrazit systémovou notifikaci když se odpověď dokončí zatímco je aplikace na pozadí.',
+ settings_desc_password: 'Zadejte nové heslo pro nastavení nebo změnu. Nechte prázdné pro zachování aktuálního nastavení.',
+ settings_desc_pinned_limit: 'Maximální počet aktivních konverzací které mohou být připnuty v bočním panelu. Výchozí je 3.',
+ settings_desc_previous_messaging_sessions: 'Zobrazit starší Discord, Telegram, Slack a Weixin relace které byly nahrazeny resetem nebo kompresí.',
+ settings_desc_project_quick_create: 'Když povoleno, každý čip projektu v bočním panelu získá tlačítko + pro zahájení konverzace v tomto projektu.',
+ settings_desc_quota_chip: 'Zobrazuje indikátor zbývající kvóty (např. zůstatek kreditu OpenRouter) v zápatí kompozitoru. Standardně vypnuto. Viditelné pouze na širokých displejích (>=1400px) když povoleno, pro zachování přehlednosti kompozitoru na šířce notebooku a standardního desktopu.',
+ settings_desc_raw_audio: 'Nahrávat a odesílat původní audio soubor agentovi místo prvního převodu na text. Agent ho pak může přepsat nebo zpracovat (emoce, pozadí, vlastní STT). Podobně jako hlasové zprávy na Telegramu.',
+ settings_desc_render_user_markdown: 'Když povoleno, tučné, kurzíva, odkazy a další markdown ve vašich vlastních zprávách jsou vykresleny. Standardně vypnuto; ohraničené bloky kódu a matematika jsou vždy vykresleny bez ohledu na toto nastavení.',
+ settings_desc_session_endless_scroll: 'Když povoleno, starší zprávy se načítají automaticky při posouvání nahoru. Když zakázáno, použijte tlačítko starších zpráv.',
+ settings_desc_session_jump_buttons: 'Zobrazit plovoucí tlačítka Spustit a Konec při čtení dlouhých historií relací.',
+ settings_desc_show_titlebar_profile: 'Když povoleno, přepínač profilů se objeví v levém horním záhlaví aplikace pro změnu profilů z jakékoliv karty. Standardně vypnuto; zápatí kompozitoru vždy obsahuje přepínač profilů bez ohledu na toto nastavení.',
+ settings_desc_shutdown_after_cmd: ' nebo nativní aplikace) před tím než je WebUI znovu dosažitelný.',
+ settings_desc_shutdown_before_cmd: 'Řízeně zastaví lokální WebUI server. Užitečné pokud jste spustili přes ',
+ settings_desc_shutdown_between_cmds: ' a chcete zastavit bez přepnutí do terminálu. Budete muset znovu spustit server (',
+ settings_desc_sidebar_density: 'Řídí kolik metadat seznam relací zobrazuje v levém bočním panelu.',
+ settings_desc_sound: 'Přehrát zvuk když asistent dokončí odpověď.',
+ settings_desc_structured_code: 'Když je vybráno Auto, JSON/YAML bloky s alespoň tímto počtem řádků se otevřou ve Stromovém zobrazení. Strom vždy otevře strukturovanou prohlížeč; Zdroj zachovává zvýrazněný text. Stále můžete přepínat Strom/Zdroj na každém bloku.',
+ settings_desc_sync_insights: 'Zrcadlí využití tokenů WebUI do state.db takže hermes /insights zahrnuje data relace prohlížeče. Standardně vypnuto.',
+ settings_desc_tab_visibility: 'Zvolte které karty se zobrazí v bočním panelu a liště. Přetáhněte čipy pro změnu pořadí. Chat a Nastavení jsou vždy viditelné.',
+ settings_desc_terminal_auto_expand: 'Automaticky rozbalit sbalený terminálový panel když běžící příkaz emituje nový výstup.',
+ settings_desc_token_speed: 'Zobrazuje tokeny za sekundu v záhlavích zpráv asistenta během streamování a po dokončení odpovědi. Standardně vypnuto.',
+ settings_desc_token_usage: 'Zobrazuje počet vstupních/výstupních tokenů pod každou odpovědí asistenta. Také přepínáno s /usage.',
+ settings_desc_tts: 'Zobrazit tlačítko reproduktoru na každé zprávě asistenta pro přečtení nahlas pomocí syntetizátoru řeči vašeho prohlížeče.',
+ settings_desc_tts_auto_read: 'Automaticky číst každou novou odpověď asistenta když se dokončí. Pozastaví když začnete psát.',
+ settings_desc_tts_engine: 'Zvolte engine řeči. Edge TTS používá Microsoft neurální hlasy přes server.',
+ settings_desc_tts_voice: 'Preferovaný hlas. Naplněno z dostupných hlasů vašeho prohlížeče.',
+ settings_desc_virtualize_transcript: 'Experimentální. Vykresluje pouze viditelnou část velmi dlouhých chat transcriptů (přes 80 zpráv) pro urychlení posouvání. Standardně vypnuto protože to může způsobit blikání při posouvání na dlouhých relacích s velkými bloky volání nástrojů. Zapněte to pro vyzkoušení; nechte vypnuté pro vykreslení celého transcriptu najednou (a tak vyhledávání prohlížeče (Ctrl+F) odpovídá celé konverzaci).',
+ settings_desc_voice_mode: 'Zobrazit tlačítko hlasového režimu (audio vlna) vedle mikrofonu pro diktování. Umožňuje mluvit přirozeně — Hermes automaticky odesílá po pauze a čte odpovědi nahlas. Vyžaduje prohlížeč který podporuje rozpoznávání řeči i TTS.',
+ settings_desc_webhook_sessions: 'Zobrazit webhook běhy jako konverzace v bočním panelu. Aktivní pouze když jsou povoleny externí relace. Standardně vypnuto; vysokoobjemové trasy mohou zaplavit boční panel.',
+ settings_desc_whats_new_summary: 'Mění akci Co je nového z otevření raw diff první na generování krátkého lidsky čitelného souhrnu. Regulární srovnání diff zůstává dostupné po souhrnu.',
+ settings_desc_worklog_details_expanded_default: 'Když povoleno, detaily Worklog se začínají rozbalené tak aby byly viditelné nástroje, přemýšlení a karty pokroku bez dalšího kliknutí. Když vypnuto, detaily zůstávají sbalené standardně; manuální volby sbalení/rozbalení na úroveň tahu stále vyhrávají.',
+ settings_desc_workspace_panel_open: 'Když povoleno, panel pracovního prostoru / prohlížeč souborů se otevírá automaticky s každou novou relací. Stále ho můžete kdykoliv manuálně zavřít.',
+ settings_desc_workspace_todos_tab: 'Když povoleno, záložka Úkoly se objeví v panelu pracovního prostoru. Panel Úkoly v bočním panelu zůstává dostupný.',
+ settings_dropdown_appearance: 'Vzhled',
+ settings_dropdown_conversation: 'Konverzace',
+ settings_dropdown_preferences: 'Předvolby',
+ settings_dropdown_providers: 'Poskytovatelé',
+ settings_dropdown_system: 'Systém',
+ settings_extensions_diagnostics_tab: 'Diagnostika',
+ settings_extensions_gallery_empty: 'V registru nebyla nalezena žádná rozšíření.',
+ settings_extensions_gallery_error: 'Načtení galerie selhalo.',
+ settings_extensions_gallery_loading: 'Načítám galerii…',
+ settings_extensions_gallery_tab: 'Galerie',
+ settings_extensions_installed_tab: 'Instalované',
+ settings_heading_subtitle: 'Předvolby, nástroje konverzace a systémové ovládací prvky.',
+ settings_heading_title: 'Ovládací centrum',
+ settings_help_docs_desc: 'Průvodci, referenční dokumentace konfigurace a kompletní README Hermes WebUI.',
+ settings_help_docs_label: 'Dokumentace',
+ settings_help_docs_link: 'Otevřít dokumentaci',
+ settings_help_issue_desc: 'Hledat existující zprávy nebo otevřít novou na GitHubu.',
+ settings_help_issue_label: 'Máte problém?',
+ settings_help_issue_link: 'Otevřít GitHub Issues',
+ settings_help_meta: 'Zdroje a podpora pro Hermes WebUI.',
+ settings_label_api_redact: 'Redakce citlivých dat v odpovědích API',
+ settings_label_auto_scroll_follow: 'Automatické sledování nového obsahu',
+ settings_label_auto_title_refresh: 'Adaptivní obnovení názvu',
+ settings_label_auxiliary_models: 'Pomocné modely',
+ settings_label_bot_name: 'Výchozí název asistenta',
+ settings_label_chat_activity_display_mode: 'Zobrazení aktivity',
+ settings_label_check_updates: 'Kontrolovat aktualizace',
+ settings_label_claude_code_sessions: 'Zobrazit Claude Code relace',
+ settings_label_composer_controls: 'Ovládací prvky zápatí chatu',
+ settings_label_composer_situational_controls: 'Situační ovládací prvky zápatí',
+ settings_label_conversation_outline: 'Zobrazit osnovu konverzace',
+ settings_label_cron_sessions: 'Zobrazit cron relace',
+ settings_label_dashboard_mode: 'Oficiální Hermes Dashboard',
+ settings_label_default_message_mode: 'Výchozí režim zpráv',
+ settings_label_external_sessions: 'Zobrazit externí relace',
+ settings_label_font_size: 'Velikost písma',
+ settings_label_gateway_status: 'Stav Gateway',
+ settings_label_hide_suggestions: 'Skrýt návrhy nového chatu',
+ settings_label_ignore_agent_updates: 'Ignorovat aktualizace Agenta',
+ settings_label_large_text_paste_as_attachment: 'Přiložit velký vložený text jako soubor',
+ settings_label_notifications: 'Notifikace prohlížeče',
+ settings_label_password: 'Heslo přístupu',
+ settings_label_pinned_limit: 'Limit připnutých konverzací',
+ settings_label_previous_messaging_sessions: 'Zobrazit předchozí messaging relace',
+ settings_label_project_quick_create: 'Zobrazit tlačítka nové konverzace na projekt',
+ settings_label_quota_chip: 'Zobrazit čip kvóty poskytovatele v kompozitoru',
+ settings_label_raw_audio: 'Odesílat surové audio místo přepisu',
+ settings_label_render_user_markdown: 'Vykreslovat markdown ve zprávách uživatele',
+ settings_label_session_endless_scroll: 'Načítat starší zprávy při posouvání nahoru',
+ settings_label_session_jump_buttons: 'Zobrazit tlačítka skoku relace',
+ settings_label_show_titlebar_profile: 'Zobrazit přepínač profilů v záhlaví',
+ settings_label_shutdown: 'Zastavit Hermes WebUI server',
+ settings_label_sidebar_density: 'Hustota bočního panelu',
+ settings_label_skin: 'Vzhled',
+ settings_label_sound: 'Zvuk notifikace',
+ settings_label_structured_code: 'JSON/YAML bloky kódu',
+ settings_label_structured_code_auto_lines: 'Automatický práh řádků',
+ settings_label_sync_insights: 'Synchronizovat do přehledů',
+ settings_label_tab_visibility: 'Záložky bočního panelu',
+ settings_label_terminal_auto_expand: 'Automaticky rozbalit terminál při výstupu',
+ settings_label_token_speed: 'Zobrazit rychlost tokenů (TPS)',
+ settings_label_token_usage: 'Zobrazit využití tokenů',
+ settings_label_tts: 'Text-na-řeč pro odpovědi',
+ settings_label_tts_auto_read: 'Automaticky číst odpovědi nahlas',
+ settings_label_tts_engine: 'TTS engine',
+ settings_label_tts_pitch: 'Výška řeči',
+ settings_label_tts_rate: 'Rychlost řeči',
+ settings_label_tts_voice: 'Hlas',
+ settings_label_virtualize_transcript: 'Virtualizovat dlouhé transcripty (experimentální)',
+ settings_label_voice_mode: 'Tlačítko hands-free hlasového režimu',
+ settings_label_webhook_sessions: 'Zobrazit webhook relace',
+ settings_label_whats_new_summary: 'Shrnout Co je nového s AI',
+ settings_label_worklog_details_expanded_default: 'Automaticky otevírat detaily Worklog',
+ settings_label_workspace_panel_open: 'Ve výchozím stavu otevřít panel pracovního prostoru',
+ settings_label_workspace_todos_tab: 'Zobrazit záložku Úkoly v panelu pracovního prostoru',
+ settings_load_failed: 'Načtení nastavení selhalo: ',
+ settings_main_advanced_button_aria: 'Pokročilé možnosti pro hlavní model',
+ settings_main_advanced_save_failed: 'Nepodařilo se uložit možnosti hlavního modelu',
+ settings_main_advanced_saved: 'Možnosti hlavního modelu uloženy',
+ settings_main_advanced_service_tier: 'Úroveň služby',
+ settings_main_advanced_service_tier_default: 'Výchozí / vypnuto',
+ settings_main_advanced_service_tier_desc: 'Volitelné nastavení požadavku pro poskytovatele rodiny OpenAI.',
+ settings_main_advanced_service_tier_priority: 'Priorita (rychlé)',
+ settings_main_advanced_subtitle: 'Pokročilá konfigurace pro výchozí chatovací model.',
+ settings_main_advanced_title: 'Možnosti hlavního modelu',
+ settings_option_compact_worklog: 'Kompaktní Worklog',
+ settings_option_structured_code_auto: 'Auto: Strom pro dlouhé bloky',
+ settings_option_structured_code_off: 'Zdroj standardně',
+ settings_option_structured_code_on: 'Strom standardně',
+ settings_option_transparent_stream: 'Transparentní Stream',
+ settings_plugins_empty: 'Žádné Hermes pluginy nejsou aktuálně viditelné. Nainstalujte nebo povolte pluginy z Hermes CLI/config pro jejich zobrazení zde.',
+ settings_plugins_meta: 'Zobrazit nainstalované Hermes pluginy a háčky životního cyklu, které registrují. Tento panel je pouze pro čtení.',
+ settings_plugins_title: 'Pluginy',
+ settings_save_btn: 'Uložit nastavení',
+ settings_save_failed: 'Uložení selhalo: ',
+ settings_saved: 'Nastavení uloženo',
+ settings_saved_pw: 'Nastavení uloženo — ochrana heslem povolena a tento prohlížeč zůstává přihlášen',
+ settings_saved_pw_updated: 'Nastavení uloženo — heslo aktualizováno',
+ settings_search_no_results: 'Nenalezena žádná nastavení.',
+ settings_search_placeholder: 'Hledat nastavení…',
+ settings_section_appearance_meta: 'Motiv, barvy a vizuální styl.',
+ settings_section_appearance_title: 'Vzhled',
+ settings_section_conversation_title: 'Konverzace',
+ settings_section_preferences_meta: 'Výchozí nastavení a chování UI pro Hermes Web UI.',
+ settings_section_preferences_title: 'Předvolby',
+ settings_section_system_meta: 'Verze instance a kontroly přístupu.',
+ settings_section_system_title: 'Systém',
+ settings_shutdown_confirm_btn: 'Zastavit',
+ settings_shutdown_confirm_message: 'Zastavit Hermes WebUI server?',
+ settings_shutdown_confirm_title: 'Zastavit Hermes WebUI',
+ settings_shutdown_stopped_message: 'Server zastaven. Tuto záložku můžete zavřít.',
+ settings_sidebar_density_compact: 'Kompaktní',
+ settings_sidebar_density_detailed: 'Detailní',
+ settings_tab_appearance: 'Vzhled',
+ settings_tab_conversation: 'Konverzace',
+ settings_tab_extensions: 'Rozšíření',
+ settings_tab_help: 'Nápověda',
+ settings_tab_plugins: 'Pluginy',
+ settings_tab_preferences: 'Předvolby',
+ settings_tab_system: 'Systém',
+ settings_title: 'Nastavení',
+ settings_unsaved_changes: 'Máte neuložené změny.',
+ settings_up_to_date: 'Aktuální ✓',
+ settings_update_check_failed: 'Kontrola aktualizací selhala',
+ settings_update_no_git: 'Nelze kontrolovat aktualizace (nejde o git checkout)',
+ settings_updates_available: 'Dostupných {count} aktualizací',
+ settings_updates_disabled: 'Kontroly aktualizací zakázány',
+ sign_out: 'Odhlásit se',
+ sign_out_failed: 'Odhlášení selhalo: ',
+ skill_category: 'Kategorie',
+ skill_category_placeholder: 'Volitelná, např. devops',
+ skill_content: 'Obsah SKILL.md',
+ skill_content_placeholder: 'YAML frontmatter + markdown tělo',
+ skill_created: 'Dovednost vytvořena',
+ skill_delete_confirm: 'Smazat dovednost "{0}"?',
+ skill_deleted: 'Dovednost smazána',
+ skill_disabled: 'Zakázáno',
+ skill_enabled: 'Povoleno',
+ skill_file_load_failed: 'Nelze načíst soubor: ',
+ skill_load_failed: 'Nelze načíst dovednost: ',
+ skill_metadata: 'Metadata',
+ skill_name: 'Název',
+ skill_name_required: 'Název dovednosti je povinný',
+ skill_rename_not_supported: 'Přejmenování dovednosti není podporováno. Vytvořte novou dovednost a smažte starou pro přejmenování.',
+ skill_toggle_failed: 'Přepnutí dovednosti selhalo: ',
+ skill_updated: 'Dovednost aktualizována',
+ skills_back_to: 'Zpět na {0}',
+ skills_delete: 'Smazat',
+ skills_edit: 'Upravit',
+ skills_empty_sub: 'Zvolte dovednost z bočního panelu pro zobrazení jejího obsahu, nebo vytvořte novou.',
+ skills_empty_title: 'Zvolte dovednost',
+ skills_no_match: 'Žádné odpovídající dovednosti.',
+ source_active: 'aktivní',
+ source_configured: 'nakonfigurováno',
+ status_completed: 'dokončeno',
+ status_failed: 'selhalo',
+ suggest_files: 'Jaké soubory jsou v tomto pracovním prostoru?',
+ suggest_plan: 'Pomozte mi naplánovat malý projekt.',
+ suggest_schedule: 'Co mám dnes v plánu?',
+ switch_failed: 'Přepnutí selhalo: ',
+ tab_chat: 'Chat',
+ tab_dashboard: 'Hermes Dashboard',
+ tab_insights: 'Přehledy',
+ tab_kanban: 'Kanban',
+ tab_logs: 'Logy',
+ tab_memory: 'Paměť',
+ tab_profiles: 'Profily',
+ tab_settings: 'Nastavení',
+ tab_skills: 'Dovednosti',
+ tab_tasks: 'Úkoly',
+ tab_todos: 'Úkoly',
+ tab_workspaces: 'Prostory',
+ tasks_empty_sub: 'Zvolte úlohu z bočního panelu pro zobrazení jejích detailů a běhů, nebo vytvořte novou.',
+ tasks_empty_title: 'Zvolte naplánovanou úlohu',
+ todos_no_active: 'V této relaci není aktivní seznam úkolů.',
+ tool_target_skill_suffix: 'dovednost',
+ transcript: 'Transkript',
+ tts_listen: 'Poslouchat',
+ tts_not_supported: 'Syntéza řeči není v tomto prohlížeči podporována.',
+ upload_failed: 'Nahrání selhalo: ',
+ upload_too_large: (maxMb, fileMb) => `Soubor je příliš velký (${fileMb} MB). Maximální velikost nahrávání je ${maxMb} MB.`,
+ uploaded: 'Nahráno',
+ uploading: 'Nahrávám…',
+ user_profile: 'Uživatelský profil',
+ view: 'Zobrazit',
+ voice_raw_attached: 'Audio přiloženo. Stiskněte Odeslat nebo napište více.',
+ voice_send_raw: 'Odeslat surové audio',
+ wiki_browse: 'Procházet wiki',
+ wiki_no_pages: 'Nenalezeny žádné wiki stránky',
+ wiki_not_configured: 'Wiki není nakonfigurována',
+ wiki_search_placeholder: 'Hledat stránky...',
+ worklog_thinking: 'Přemýšlím',
+ workspace_add_path_placeholder: 'Přidat cestu pracovního prostoru (např. /home/user/my-project)',
+ workspace_added: 'Pracovní prostor přidán',
+ workspace_already_saved: 'Pracovní prostor již uložen — zvolte ho ze seznamu',
+ workspace_auto_create_folder: 'Vytvořit složku pokud neexistuje',
+ workspace_busy_switch: 'Nelze přepnout pracovní prostor, zatímco agent běží',
+ workspace_choose_path: 'Zvolit cestu pracovního prostoru',
+ workspace_choose_path_meta: 'Přidat ověřenou cestu a přepnout tuto konverzaci',
+ workspace_desc: 'Přidávejte a přepínejte pracovní prostory pro vaše relace.',
+ workspace_drag_hint: 'Přetáhněte pro změnu pořadí',
+ workspace_manage: 'Spravovat pracovní prostory',
+ workspace_manage_meta: 'Otevřít panel Prostory',
+ workspace_name_label: 'Název',
+ workspace_name_placeholder: 'Volitelný přátelský název',
+ workspace_new_title: 'Nový prostor',
+ workspace_not_added: 'Pracovní prostor nebyl přidán',
+ workspace_path_label: 'Cesta',
+ workspace_path_readonly: 'Cesta nemůže být změněna. Pouze přejmenování.',
+ workspace_path_required: 'Cesta je povinná',
+ workspace_paths_validated_hint: 'Cesty jsou ověřovány jako existující adresáře před uložením.',
+ workspace_remove_confirm_message: (path) => `Odebrat "${path}"?`,
+ workspace_remove_confirm_title: 'Odebrat pracovní prostor',
+ workspace_removed: 'Pracovní prostor odebrán',
+ workspace_renamed: 'Pracovní prostor přejmenován',
+ workspace_reorder_failed: 'Změna pořadí selhala',
+ workspace_root: 'kořen pracovního prostoru',
+ workspace_switch_prompt_confirm: 'Přepnout',
+ workspace_switch_prompt_message: 'Zadejte absolutní cestu pracovního prostoru pro přidání a přepnutí této konverzace.',
+ workspace_switch_prompt_placeholder: '/Users/you/project',
+ workspace_switch_prompt_title: 'Přepnout pracovní prostor',
+ workspace_switched_to: (name) => `Přepnuto na ${name}`,
+ workspace_use: 'Použít',
+ workspace_use_title: 'Použít v aktuální relaci',
+ workspaces_empty_sub: 'Zvolte prostor z bočního panelu pro zobrazení jeho souborů a nastavení, nebo přidejte nový.',
+ workspaces_empty_title: 'Zvolte prostor',
+ yolo_disabled: 'YOLO režim VYPNUT',
+ yolo_enabled: '⚡ YOLO režim ZAPNUT — schválení přeskočena pro tuto relaci',
+ yolo_no_session: 'Žádná aktivní relace',
+ yolo_pill_label: 'YOLO',
+ yolo_pill_title_active: 'YOLO režim aktivní — klikněte pro zakázání',
+ approval_btn_always: 'Vždy povolit',
+ approval_btn_always_title: 'Vždy povolit tento vzor příkazu',
+ approval_btn_deny: 'Odmítnout',
+ approval_btn_deny_title: 'Odmítnout — tento příkaz nespouštět',
+ approval_btn_once: 'Povolit jednou',
+ approval_btn_once_title: 'Povolit tento jeden příkaz (Enter)',
+ approval_btn_session: 'Povolit relaci',
+ approval_btn_session_title: 'Povolit tuto relaci konverzace',
+ approval_desc_prefix: 'Byl zjištěn nebezpečný příkaz',
+ approval_gateway_unsupported: 'Schválení vyžadují novější gateway. Upgradujte připojený Hermes gateway.',
+ approval_gateway_unsupported_label: 'Schválení nejsou podporována',
+ approval_heading: 'Požadováno schválení',
+ approval_responding: 'Reakce\u2026',
+ auto_compress_label: 'Automatická komprese',
+ available_commands: 'Dostupné příkazy',
+ available_personalities: 'Dostupné osobnosti:',
+ bg_complete: 'Úkol na pozadí dokončen',
+ bg_failed: 'Úkol na pozadí se nezdařil:',
+ bg_label: 'Výsledek na pozadí:',
+ bg_no_answer: 'Žádná odpověď',
+ bg_running: 'Běží na pozadí...',
+ branch_failed: 'Rozvětvení selhalo: ',
+ branch_forked: 'Rozvětveno do nové relace',
+ btw_asking: 'Kladení vedlejší otázky...',
+ btw_done: 'Vedlejší otázka zodpovězena',
+ btw_failed: 'Vedlejší otázka selhala:',
+ btw_label: 'Vedlejší otázka — není v historii',
+ btw_no_answer: 'Nebyla přijata žádná odpověď.',
+ busy_interrupt_confirm: 'Přerušeno — odeslání nové zprávy',
+ busy_steer_fallback: 'Řízení není k dispozici — návrh byl obnoven',
+ cancel_failed: 'Zrušení selhalo: ',
+ cancel_unavailable: 'Zrušení není k dispozici.',
+ cancelling: 'Rušení\u2026',
+ clarify_heading: 'Zde je zapotřebí vyjasnění.',
+ clarify_hint: 'Vyberte si možnost nebo zadejte svou vlastní odpověď níže.',
+ clarify_input_placeholder: 'Sem napište odpověď',
+ clarify_other: 'Jiné',
+ clarify_responding: 'Reakce\u2026',
+ clarify_send: 'Odeslat',
+ clear: 'Vymazat',
+ cmd_background: 'Spustit výzvu na pozadí',
+ cmd_background_usage: '/background — běh paralelně bez blokování',
+ cmd_branch: 'Rozvětvit tuto konverzaci do nové relace',
+ cmd_branch_usage: '/branch [name] — rozvětvit konverzaci (volitelně s názvem)',
+ cmd_btw: 'Položit vedlejší otázku (pomíjivá)',
+ cmd_btw_usage: '/btw — položit vedlejší otázku pomocí kontextu relace',
+ cmd_clear: 'Vymazat konverzační zprávy',
+ cmd_compact_alias: 'Starší alias pro /compress',
+ cmd_compress: 'Ručně komprimovat kontext konverzace (použití: /compress [focus topic])',
+ cmd_goal: 'Nastavte nebo zkontrolujte trvalý cíl',
+ cmd_help: 'Zobrazit dostupné příkazy',
+ cmd_interrupt: 'Zrušit aktuální tah a odeslat novou zprávu',
+ cmd_interrupt_confirm: 'Přerušeno — odeslání nové zprávy',
+ cmd_interrupt_no_msg: 'Použití: /interrupt ',
+ cmd_model: 'Přepnout model (např. /model gpt-4o)',
+ cmd_new: 'Začít novou chat relaci',
+ cmd_personality: 'Přepnout osobnost agenta',
+ cmd_queue: 'Zařaď zprávu na další tah',
+ cmd_queue_confirm: 'Zpráva ve frontě',
+ cmd_queue_no_msg: 'Použití: /queue ',
+ cmd_queue_not_busy: 'Žádná aktivní úloha — stačí odeslat normálně',
+ cmd_retry: 'Znovu odeslat poslední zprávu',
+ cmd_skills: 'Seznam dostupných dovedností Hermes',
+ cmd_status: 'Zobrazit informace o relaci',
+ cmd_steer: 'Vložit opravu během tahu bez přerušení agenta',
+ cmd_steer_delivered: 'Řízení dodáno — agent to uvidí ve svém dalším výsledku nástroje',
+ cmd_steer_fallback: 'Řízení není k dispozici — návrh byl obnoven',
+ cmd_steer_no_msg: 'Použití: /steer ',
+ cmd_stop: 'Zastavit aktuální odpověď',
+ cmd_terminal: 'Otevřete terminál pracovního prostoru',
+ cmd_theme: "Přepnout vzhled (motiv: system\/dark\/light, skin: default\/ares\/mono\/graphite\/slate\/poseidon\/sisyphus\/charizard\/sienna\/catppuccin\/nous\/geist-contrast/zeus/verdigris)",
+ cmd_title: 'Získat nebo nastavit název relace',
+ cmd_undo: 'Odebrat poslední výměnu',
+ cmd_usage: 'Zapnout/vypnout zobrazení použití tokenu',
+ cmd_use: 'Vynutit dovednost pro další zprávu',
+ cmd_voice: 'Přepnout vstup mikrofonu',
+ cmd_voice_use_mic: 'Klikněte na tlačítko mikrofonu v editoru zprávy.',
+ cmd_webui_only_session: 'Tento příkaz není k dispozici pro relace importované CLI.',
+ cmd_workspace: 'Přepnout pracovní prostor podle názvu',
+ collapse_all: 'Sbalit vše',
+ command_label: 'Příkaz',
+ composer_placeholder_busy_interrupt: 'Enter = přerušení | /queue | /background | /steer',
+ composer_placeholder_busy_queue: 'Enter = fronta | /interrupt | /background | /steer',
+ composer_placeholder_busy_steer: 'Enter = řízení | /queue | /background | /interrupt',
+ compress_complete_label: 'Komprese dokončena',
+ compress_failed_label: 'Komprimace se nezdařila',
+ compress_running_label: 'Komprimace',
+ compressing: 'Vyžaduje se komprese kontextu...',
+ context_block_flush_aria: 'Kontextové bloky budou zahrnuty při odesílání',
+ context_block_name_default: 'Kontext',
+ context_block_remove: 'Odebrat kontextový blok',
+ context_block_rename_aria: 'Přejmenovat kontextový blok',
+ context_block_rename_hint: 'Klikněte nebo stiskněte Enter pro přejmenování',
+ context_compaction_label: 'Komprese kontextu',
+ conversation_cleared: 'Konverzace vymazána',
+ copied: 'Zkopírováno!',
+ copy: 'Kopírovat',
+ copy_failed: 'Kopírování selhalo',
+ copy_file_path: 'Kopírovat cestu souboru',
+ create: 'Vytvořit',
+ ctx_compress_action: '⚠ Komprimovat nyní pro uvolnění kontextu',
+ ctx_compress_hint: 'Komprimujte kontext, abyste uvolnili místo →',
+ delete_confirm: (name) => `Odstranit ${name}?`,
+ delete_dir_confirm: (name) => `Odstranit složku „${name}“ a celý její obsah?`,
+ delete_failed: 'Vymazání se nezdařilo',
+ delete_title: 'Smazat',
+ deleted: 'Odstraněno',
+ dialog_confirm_btn: 'Potvrdit',
+ dialog_confirm_title: 'Potvrdit činnost',
+ dialog_prompt_title: 'Zadejte hodnotu',
+ diff_error: 'Nelze načíst opravný soubor',
+ diff_loading: 'Načítání rozdílu',
+ diff_too_large: 'Záplatový soubor je příliš velký pro zobrazení v řádku',
+ discard: 'Zahodit',
+ double_click_rename: 'Dvakrát klikněte pro přejmenování',
+ download_folder: 'Složka pro stahování',
+ downloading: (name) => `Stahování ${name}\u2026`,
+ edit: 'Upravit',
+ edit_failed: 'Úprava se nezdařila:',
+ edit_message: 'Upravit zprávu',
+ edit_title: 'Upravit tento soubor',
+ expand_all: 'Rozbalit vše',
+ external_link_grant_expired: 'Toto externí zobrazení vypršelo. Znovu otevřete symbolický odkaz únikového cíle a znovu jej autorizujte.',
+ external_link_open_confirm: 'Tento symbolický odkaz ukazuje mimo pracovní prostor. Otevřít v externím zobrazení pouze pro čtení pro tuto relaci prohlížeče?',
+ external_link_read_only: 'Toto externí zobrazení je pouze pro čtení. Vytváření, přejmenování, přesun, odstranění, nahrávání, odhalení a akce editoru zde zůstávají zakázané.',
+ failed_colon: 'Selhalo:',
+ file_open_failed: 'Nelze otevřít soubor',
+ focus_label: 'Zaměření',
+ fork_from_here: 'Rozvětvit odtud',
+ forked_from: 'Rozvětveno z',
+ gateway_auth_label: 'Ověření brány se nezdařilo',
+ gateway_restart: 'Restartovat',
+ gateway_restart_failed: 'Restart gateway selhal',
+ gateway_restart_success: 'Restart gateway dokončen.',
+ gateway_running: 'Běží',
+ gateway_session: 'relace',
+ gateway_sessions: 'relace',
+ gateway_start: 'Spustit',
+ gateway_start_failed: 'Spuštění gateway selhalo',
+ gateway_start_success: 'Spuštění gateway dokončeno.',
+ gateway_status_load_failed: 'Načtení stavu gateway selhalo',
+ gateway_stop: 'Zastavit',
+ gateway_stop_failed: 'Zastavení gateway selhalo',
+ gateway_stop_success: 'Zastavení gateway dokončeno.',
+ goal_achieved: (reason) => `✓ Cíl dosažen: ${reason}`,
+ goal_cleared: 'Cíl vymazán.',
+ goal_continuing: (turns, max_turns, reason) => `↻ Pokračuji k cíli (${turns}/${max_turns}): ${reason}`,
+ goal_continuing_toast: 'Pokračujeme k cíli...',
+ goal_evaluating_progress: 'Vyhodnocování pokroku cíle...',
+ goal_no_goal: 'Žádný aktivní cíl.',
+ goal_paused: (goal) => `⏸ Cíl pozastaven: ${goal}`,
+ goal_paused_budget_exhausted: (turns, max_turns) => `⏸ Cíl pozastaven — využito ${turns}/${max_turns} tahů. Použijte /goal resume pro pokračování nebo /goal clear pro ukončení.`,
+ goal_resumed: (goal) => `▶ Cíl obnoven: ${goal}`,
+ goal_set: (turns, goal) => `⊙ Cíl nastaven (rozpočet ${turns} tahů): ${goal}`,
+ goal_status_active: (turns, max_turns, goal) => `⊙ Cíl (aktivní, ${turns}/${max_turns} tahů): ${goal}`,
+ goal_status_done: (turns, max_turns, goal) => `✓ Cíl splněn (${turns}/${max_turns}): ${goal}`,
+ goal_status_none: 'Žádný aktivní cíl. Nastavte jeden pomocí /goal .',
+ goal_status_paused: (turns, max_turns, reason, goal) => `⏸ Cíl (pozastaveno, ${turns}/${max_turns}${reason ? `, ${reason}` : ''}): ${goal}`,
+ goal_working_toward: 'Práce směrem k cíli...',
+ html_error: 'Vykreslení náhledu HTML se nezdařilo',
+ html_loading: 'Načítání náhledu HTML...',
+ html_open_full: 'Otevřít celou stránku',
+ html_sandbox_label: 'Náhled HTML (v sandboxu)',
+ html_too_large: 'HTML příliš velké pro vložený náhled',
+ image_load_failed: 'Nelze načíst obrázek',
+ image_pasted: 'Vložený obrázek:',
+ import_failed: 'Import selhal',
+ import_invalid_json: 'Neplatná data JSON',
+ jump_to_question: 'na odpověď',
+ jump_to_question_label: 'Skočit na začátek této odpovědi',
+ load_older_messages: '↑ Posunutím nahoru nebo kliknutím načtete starší zprávy',
+ loading: 'Načítání…',
+ mcp_add_server: 'Přidat server',
+ mcp_cancel: 'Zrušit',
+ mcp_command_required: 'Pro přenos stdio je vyžadován příkaz.',
+ mcp_delete_confirm_message: 'Odstranit MCP server „{0}“? Tuto akci nelze vrátit zpět.',
+ mcp_delete_confirm_title: 'Smazat server MCP',
+ mcp_delete_failed: 'Odstranění serveru MCP se nezdařilo.',
+ mcp_deleted: 'MCP server smazán.',
+ mcp_disabled_toast: (name) => `MCP server „${name}“ byl zakázán.`,
+ mcp_enabled_no: 'Zakázáno',
+ mcp_enabled_toast: (name) => `MCP server „${name}“ byl povolen.`,
+ mcp_enabled_yes: 'Povoleno',
+ mcp_field_args: 'Argumenty (oddělené čárkami)',
+ mcp_field_command: 'Příkaz',
+ mcp_field_name: 'Název serveru',
+ mcp_field_timeout: 'Časový limit (sekundy)',
+ mcp_field_url: 'URL',
+ mcp_load_failed: 'Načtení serverů MCP se nezdařilo.',
+ mcp_name_required: 'Je vyžadováno jméno serveru.',
+ mcp_no_servers: 'Nejsou nakonfigurovány žádné servery MCP.',
+ mcp_restart_hint: 'Změny serveru jsou zatím jen pro čtení. Upravte config.yaml a restartujte Hermes, aby se změny projevily.',
+ mcp_save: 'Uložit',
+ mcp_save_failed: 'Uložení serveru MCP se nezdařilo.',
+ mcp_saved: 'MCP server uložen.',
+ mcp_servers_desc: 'Zobrazit servery MCP nakonfigurované v config.yaml.',
+ mcp_servers_title: 'Servery MCP',
+ mcp_status_active: 'Aktivní',
+ mcp_status_configured: 'Nastavené',
+ mcp_status_disabled: 'Zakázáno',
+ mcp_status_invalid_config: 'Neplatná konfigurace',
+ mcp_status_unknown: 'Neznámé',
+ mcp_toggle_failed: 'Aktualizace serveru MCP se nezdařila.',
+ mcp_toggle_followup: 'Povolení/zakázání ovládacích prvků je záměrně odloženo, dokud nebude sémantika opakovaného načtení MCP explicitní.',
+ mcp_tool_count: '{0} nástrojů',
+ mcp_tools_desc: 'Vyhledávejte známé nástroje na aktivních serverech MCP.',
+ mcp_tools_inactive_configured_servers: (servers) => `Nakonfigurováno, ale neaktivní v tomto běhovém prostředí WebUI: ${servers}.`,
+ mcp_tools_load_failed: 'Načtení nástrojů MCP se nezdařilo.',
+ mcp_tools_next_page: 'Následující',
+ mcp_tools_next_page_aria: 'Další stránka nástrojů MCP',
+ mcp_tools_no_matches: 'Vašemu vyhledávání neodpovídají žádné nástroje MCP.',
+ mcp_tools_no_tools: 'Z aktivního běhového inventáře nejsou k dispozici žádné nástroje MCP.',
+ mcp_tools_page_size_prefix: 'Zobrazit',
+ mcp_tools_page_size_suffix: 'na stránku',
+ mcp_tools_pagination_label: 'Stránkování nástrojů MCP',
+ mcp_tools_per_page_aria: 'Nástroje MCP na stránku',
+ mcp_tools_previous_page: 'PŘEDCHOZÍ',
+ mcp_tools_previous_page_aria: 'Předchozí stránka nástrojů MCP',
+ mcp_tools_runtime_note: 'Inventář nástrojů používá pouze již známá aktivní MCP runtime data; WebUI nespouští ani nesonduje servery.',
+ mcp_tools_schema_empty: 'Žádné parametry schématu.',
+ mcp_tools_search_placeholder: 'Hledat nástroje podle názvu, serveru nebo popisu…',
+ mcp_tools_summary_matching: (query) => ` odpovídající „${query}“`,
+ mcp_tools_summary_no_matches: (query,total) => `Žádné MCP nástroje neodpovídají „${query}“ (celkem ${total} MCP nástrojů).`,
+ mcp_tools_summary_none: 'Žádné nástroje MCP k zobrazení.',
+ mcp_tools_summary_showing: (start,end,filtered,searchNote,totalNote,page,pages) => `Zobrazuji ${start}–${end} z ${filtered} MCP nástrojů${searchNote}${totalNote}. Stránka ${page} z ${pages}.`,
+ mcp_tools_summary_total_note: (total) => ` (celkem ${total} MCP nástrojů)`,
+ mcp_tools_title: 'Nástroje MCP',
+ mcp_transport_label: 'Typ transportu',
+ mcp_url_required: 'Pro přenos http je vyžadována adresa URL.',
+ mic_denied: 'Přístup k mikrofonu byl odepřen. Zkontrolujte oprávnění prohlížeče.',
+ mic_error: 'Chyba hlasového vstupu:',
+ mic_insecure_origin: 'Hlasový vstup vyžaduje zabezpečené spojení. Otevřete Hermes přes HTTPS nebo z localhost pro použití mikrofonu.',
+ mic_network: 'Rozpoznávání řeči není k dispozici.',
+ mic_no_speech: 'Žádný rozpoznaný hlas. Zkuste to znovu.',
+ model_custom_label: 'Vlastní model ID',
+ model_custom_placeholder: 'např. openai/gpt-5.4',
+ model_did_you_mean: (m) => ` — měli jste na mysli „${m}“?`,
+ model_group_configured: 'Nastavené',
+ model_not_found_label: 'Model nenalezen',
+ model_scope_advisory: 'Vztahuje se na tuto konverzaci z vaší další zprávy.',
+ model_scope_toast: 'Vztahuje se na tuto konverzaci z vaší další zprávy.',
+ model_search_no_results: 'Nenalezeny žádné modely',
+ model_search_placeholder: 'Hledat modely…',
+ model_show_all_models: 'Zobrazit všech {0} modelů',
+ model_unavailable: '(nedostupné)',
+ model_unavailable_title: 'Tento model již není ve vašem aktuálním seznamu poskytovatelů',
+ model_usage: 'Použití: /model ',
+ move_failed: 'Přesun se nezdařil.',
+ moved_to: 'Přesunuto do ',
+ n_messages: (n) => `${n} ${_i18nCsPlural(n,'zpráva','zprávy','zpráv')}`,
+ new_session: 'Vytvořena nová relace',
+ new_session_creating: 'Vytváření nové konverzace...',
+ no_active_session: 'Žádná aktivní relace',
+ no_active_task: 'Žádná aktivní úloha k zastavení.',
+ no_model_match: 'Nevyhovuje žádný model "',
+ no_personalities: 'Nebyly nalezeny žádné osobnosti (přidejte je do ~/.hermes/personalities/)',
+ no_workspace: 'Žádný pracovní prostor',
+ no_workspace_match: 'Žádná shoda pracovního prostoru "',
+ offline_autorefresh: 'Obnovím tuto stránku automaticky, když bude Hermes dosažitelný znovu.',
+ offline_browser_detail: 'Váš prohlížeč hlásí, že zařízení je offline.',
+ offline_check_now: 'Zkontrolovat teď',
+ offline_checking: 'Kontroluje se…',
+ offline_network_detail: 'Hermes není právě dosažitelný z tohoto prohlížeče.',
+ offline_stream_waiting: 'Spojení ztraceno. Čekám na obnovení…',
+ offline_title: 'Spojení ztraceno',
+ onboarding_complete: 'Onboarding dokončen!',
+ onboarding_skip: 'Přeskočit instalaci',
+ open_in_vscode: 'Otevřít ve VS Code',
+ open_in_vscode_failed: 'Otevření ve VS Code se nezdařilo: ',
+ parse_failed_note: 'interpretace se nezdařila',
+ path_copied: 'Cesta k souboru zkopírována do schránky',
+ path_copy_failed: 'Zkopírování se nezdařilo',
+ pdf_download: 'Stáhnout PDF',
+ pdf_error: 'Zobrazení náhledu PDF se nezdařilo',
+ pdf_loading: 'Načítání PDF {0}…',
+ pdf_no_pages: 'PDF nemá žádné stránky',
+ pdf_too_large: 'PDF příliš velké pro vložený náhled',
+ pdf_truncated: 'Zobrazuji prvních {0} z {1} stránek — stáhněte pro celý dokument',
+ personalities_load_failed: 'Načtení osobností se nezdařilo',
+ personality_cleared: 'Osobnost očištěna',
+ personality_set: 'Osobnost: ',
+ personality_switch_hint: '\n\nPoužijte `/personality ` pro přepnutí nebo `/personality none` pro vymazání.',
+ preserved_task_list_label: 'Zachovaný seznam úkolů',
+ provider_mismatch_label: 'Neshoda poskytovatele',
+ provider_mismatch_warning: (m,p)=>`"${m}" nemusí fungovat s vaším nakonfigurovaným poskytovatelem (${p}). Přesto odeslat, nebo spusťte \`hermes model\` v terminálu pro přepnutí.`,
+ queued_cancel: 'Zrušit zprávu ve frontě',
+ queued_count: (n) => n === 1 ? '1 ve frontě' : `${n} ve frontě`,
+ queued_label: 'Odešle po odpovědi',
+ raw_view: 'Surový',
+ reconnect_active: 'Odpověď se stále generuje. Znovu načíst, až budete připraveni?',
+ reconnect_finished: 'Když jste naposledy odešli, probíhala odezva. Zprávy mohly být aktualizovány.',
+ reference_only_label: 'Pouze jako odkaz',
+ regen_failed: 'Obnovení selhalo:',
+ regenerate: 'Znovu generovat odpověď',
+ remove: 'Odebrat',
+ rename_failed: 'Přejmenování selhalo:',
+ rename_prompt: 'Nové jméno:',
+ rename_title: 'Přejmenovat',
+ renamed_to: 'Přejmenováno na',
+ retrieval_context_label: 'Indexovaný kontext',
+ retrieval_context_preview: 'Dřívější zprávy jsou uloženy a načteny pomocí kontextových nástrojů',
+ retry_failed: 'Opakování se nezdařilo:',
+ reveal_failed: 'Nepodařilo se odhalit:',
+ reveal_in_finder: 'Otevřít ve správci souborů',
+ save: 'Uložit',
+ save_failed: 'Uložení selhalo',
+ save_title: 'Uložit změny',
+ saved: 'Uloženo',
+ saved_prompts_delete: 'Odstranit výzvu',
+ saved_prompts_empty: 'Žádné uložené prompty zatím.',
+ saved_prompts_empty_input: 'Nejprve zadejte výzvu k uložení',
+ saved_prompts_save_current: 'Uložit aktuální vstup jako prompt',
+ saved_prompts_saved: 'Prompt uložen',
+ selected_text_reply: 'Odpovědět výběrem',
+ selected_text_reply_appended: 'Vybraný text přidán do editoru zprávy',
+ selected_text_reply_title: 'Připojit vybraný text chatu jako citovaný kontext',
+ session_attention_approval: (n) => n === 1 ? 'Schválení' : `${n} schválení`,
+ session_attention_approval_title: 'Čekání na rozhodnutí o povolení',
+ session_attention_clarify: (n) => n === 1 ? 'Otázka' : `${n} ${_i18nCsPlural(n,'otázka','otázky','otázek')}`,
+ session_attention_clarify_title: 'Čekání na vaši odpověď',
+ session_attention_generic: (n) => n === 1 ? 'Upozornění' : `${n} ${_i18nCsPlural(n,'položka','položky','položek')}`,
+ session_attention_generic_title: 'Čekání na akci uživatele',
+ session_copy_link: 'Kopírovat odkaz na konverzaci',
+ session_copy_link_desc: 'Zkopírujte přímý odkaz na tuto konverzaci',
+ session_imported: 'Relace importována',
+ session_jump_end: 'Konec',
+ session_jump_end_label: 'Skok na konec relace',
+ session_jump_start: 'Začátek',
+ session_jump_start_label: 'Skok na začátek relace',
+ session_new_message: 'Nová zpráva',
+ session_new_message_label: 'Nová zpráva k dispozici, přeskoč na konec',
+ session_rename: 'Přejmenovat konverzaci',
+ session_rename_desc: 'Upravit název této konverzace',
+ session_rename_failed_no_row: 'Nelze spustit přejmenování — řádek nebyl nalezen.',
+ session_title_regenerate: 'Znovu vygenerovat název',
+ session_title_regenerate_desc: 'Požádejte Hermese, aby z konverzace vygeneroval nový název',
+ session_title_regenerate_failed: 'Obnovení názvu se nezdařilo:',
+ session_title_regenerated: (title) => `Název byl přegenerován: ${title}`,
+ session_title_regenerating: 'Probíhá regenerace názvu...',
+ session_toolsets: 'Sady nástrojů relace',
+ session_toolsets_applied: 'Sady nástrojů byly aktualizovány',
+ session_toolsets_apply: 'Použít',
+ session_toolsets_clear: 'Použít výchozí',
+ session_toolsets_cleared: 'Použití výchozích hodnot aktivního profilu',
+ session_toolsets_configured_servers: 'Nastavené MCP servers',
+ session_toolsets_custom: 'Vlastní přepsání',
+ session_toolsets_desc: 'Použít výchozí hodnoty aktivního profilu nebo zvolit vlastní seznam nástrojů pro tuto relaci',
+ session_toolsets_failed: 'Aktualizace sad nástrojů se nezdařila:',
+ session_toolsets_global: 'Výchozí hodnoty aktivního profilu',
+ session_toolsets_loading_servers: 'Načítání nakonfigurovaných serverů...',
+ session_toolsets_no_configured_servers: 'Žádné nakonfigurované servery MCP',
+ session_toolsets_placeholder: 'tool1, tool2, …',
+ session_toolsets_profile_defaults: 'Výchozí hodnoty aktivního profilu',
+ session_toolsets_use_profile_defaults: 'Použít výchozí hodnoty aktivního profilu',
+ session_worktree_badge: 'Worktree',
+ settings_desc_busy_placeholder_hint: 'Zobrazuje zástupný symbol editoru zprávy s aktuální zaneprázdněnou akcí, když je relace spuštěna a koncept je prázdný.',
+ settings_desc_fade_text_effect: 'Během odpovědi asistenta vyblednou nově streamovaná slova. Podobně jako OpenWebUI; ve výchozím nastavení vypnuto pro maximální výkon.',
+ settings_desc_max_tokens: 'Omezuje výstup asistenta pro nové streamované tahy. Ponechte prázdné pro použití záložní konfigurace aktivního profilu.',
+ settings_desc_model: 'Používá se pro nové konverzace. Stávající konverzace si zachovají svůj vybraný model.',
+ settings_desc_rtl: 'Převrátí zarovnání chatových zpráv a vstupního pole editoru pro jazyky jako arabština nebo hebrejština. Ovlivňuje pouze oblast chatu — postranní panel a další panely zůstávají zleva doprava.',
+ settings_label_busy_placeholder_hint: 'Zobrazit nápovědu zaneprázdněného zástupného symbolu',
+ settings_label_fade_text_effect: 'Efekt vyblednutí textu',
+ settings_label_language: 'Jazyk',
+ settings_label_max_tokens: 'Maximální výstupní tokeny',
+ settings_label_model: 'Výchozí model',
+ settings_label_rtl: 'Rozložení chatu zprava doleva',
+ settings_label_send_key: 'Klávesa pro odeslání',
+ settings_label_theme: 'Motiv',
+ settings_placeholder_max_tokens_fallback: 'Bez přepsání (výchozí: {0})',
+ settings_placeholder_max_tokens_none: 'Žádné přepsání',
+ slash_skill_badge: 'Dovednost',
+ slash_skill_desc: 'Vyvolat tuto dovednost',
+ status_agent_running: 'Agent běží',
+ status_ephemeral: 'Efemérní snímek — neuložen do historie přepisu.',
+ status_heading: 'Stav relace',
+ status_hermes_home: 'Domovská složka Hermes',
+ status_load_failed: 'Stav se nepodařilo načíst:',
+ status_messages: 'Zprávy',
+ status_model: 'Model',
+ status_no: 'Ne',
+ status_no_tokens: 'Nebyly použity žádné tokeny',
+ status_personality: 'osobnost',
+ status_profile: 'Profil',
+ status_provider: 'Poskytovatel',
+ status_session_id: 'ID relace',
+ status_started: 'Spuštěno',
+ status_title: 'Název',
+ status_tokens: 'Tokeny',
+ status_unknown: 'Neznámé',
+ status_updated: 'Aktualizováno',
+ status_workspace: 'Pracovní prostor',
+ status_yes: 'Ano',
+ steer_fail_agent_lacks_steer: 'Tato verze agenta nepodporuje steer',
+ steer_fail_network_error: 'Chyba sítě — zkontrolujte připojení',
+ steer_fail_no_cached_agent: 'Pro tuto relaci není uložen žádný agent — zkuste aktualizaci',
+ steer_fail_not_running: 'Agent právě neběží',
+ steer_fail_session_not_found: 'Relace nebyla nalezena — mohla vypršet',
+ steer_fail_steer_error: 'Doručení řízení se nezdařilo — agent mohl dokončit',
+ steer_fail_stream_dead: 'Stream agent ukončen',
+ steer_fail_unknown: 'Steer nedostupný',
+ steer_leftover_queued: 'Řízení ve frontě na další tah',
+ steer_recovery_dismiss: 'Zamítnout',
+ steer_recovery_retry: 'Zkusit znovu',
+ stream_stopped: 'Odpověď byla zastavena.',
+ subagent_children: 'Relace subagentů',
+ switched_to: 'Přepnuto na ',
+ switched_workspace: 'Přepnuto na pracovní prostor:',
+ symlink_link_to: 'Symbolický odkaz → {target}',
+ terminal_clear: 'Vymazat',
+ terminal_close: 'Zavřít',
+ terminal_collapse: 'Sbalit',
+ terminal_copy_failed: 'Kopírování se nezdařilo',
+ terminal_copy_output: 'Kopírovat výstup',
+ terminal_error: 'Chyba terminálu',
+ terminal_expand: 'Roztáhnout',
+ terminal_input_failed: 'Vstup terminálu se nezdařil:',
+ terminal_input_placeholder: 'Spustit příkaz:',
+ terminal_no_workspace_title: 'Vyberte pracovní prostor pro otevření terminálu',
+ terminal_open_title: 'Otevřít terminál pracovního prostoru',
+ terminal_remote_backend_unsupported: 'Vestavěný terminál je podporován pouze pro místní backendy terminálů.',
+ terminal_restart: 'Restartovat',
+ terminal_start_failed: 'Spuštění terminálu se nezdařilo:',
+ terminal_title: 'Terminál',
+ text_pasted: 'Vložený text připojen jako',
+ theme_set: 'Šablona:',
+ theme_usage: 'Použití: /theme',
+ thinking: 'myšlení',
+ title_change_hint: 'Pro přejmenování použijte `/title `.',
+ title_current: 'Aktuální titul:',
+ title_set: 'Název nastaven na',
+ token_usage_off: 'Využití tokenu vypnuto',
+ token_usage_on: 'Používání tokenu zapnuto',
+ tree_view: 'Strom',
+ type_slash: 'Pro zobrazení příkazů napište /',
+ undid_messages_suffix: 'zpráv(y)',
+ undid_n_messages: 'Odstraněno',
+ undo_exchange: 'Vrátit zpět poslední výměnu',
+ undo_failed: 'Krok zpět selhal',
+ unsaved_confirm: 'Máte neuložené změny v náhledu. Zahodit a přejít?',
+ untitled: 'Bez názvu',
+ usage_cache_hit_detail: 'Cache: {0}% ({1} čtení / {2} zápis)',
+ usage_cached_percent: '{0}% cacheované',
+ usage_default_model: 'výchozí',
+ usage_estimated_cost: 'Odhadované náklady',
+ usage_heading: 'Použití tokenů',
+ usage_input_tokens: 'Vstupní tokeny',
+ usage_load_failed: 'Načtení využití se nezdařilo:',
+ usage_output_tokens: 'Výstupní tokeny',
+ usage_personality_none: 'žádná',
+ usage_settings_tip: 'Poznámka: odhady nákladů jsou přibližné.',
+ usage_total: 'Celkem tokenů',
+ usage_unknown: 'neznámé',
+ voice_dictate: 'Diktovat',
+ voice_dictate_active: 'Zastavit diktování',
+ voice_error: 'Hlas není v tomto prohlížeči podporován',
+ voice_listening: 'Poslech…',
+ voice_mode_active: 'Hlasový režim zapnutý',
+ voice_mode_off: 'Hlasový režim vypnutý',
+ voice_mode_toggle: 'Hlasový režim',
+ voice_mode_toggle_active: 'Ukončit hlasový režim',
+ voice_recording_active: 'Zastavit nahrávání',
+ voice_speaking: 'Mluvení…',
+ voice_thinking: 'myšlení',
+ workspace_empty_dir: 'Tento pracovní prostor je prázdný.',
+ workspace_empty_no_path: 'Není vybrán žádný pracovní prostor. Nastavte pracovní prostor v Nastavení \u2192 Pracovní prostor pro procházení souborů.',
+ workspace_hidden_files_visible: 'skryté viditelné',
+ workspace_hidden_files_visible_title: 'Skryté soubory jsou viditelné — klikněte pro možnosti',
+ workspace_new_worktree_conversation: 'Nová konverzace ve worktree',
+ workspace_new_worktree_conversation_meta: 'Vytvořit izolovaný git worktree pro tento workspace.',
+ workspace_options: 'Možnosti pracovního prostoru',
+ workspace_show_hidden_files: 'Zobrazit skryté soubory',
+ workspace_show_hidden_files_desc: 'Do stromu souborů zahrňte soubory .DS_Store, .git, node_modules a další skryté / systémové soubory.',
+ workspace_switch_failed: 'Přepnutí workspace selhalo: ',
+ workspace_usage: 'Použití: /workspace ',
+ workspace_worktree_created: 'Worktree konverzace vytvořena',
+ workspace_worktree_failed: 'Vytvoření worktree selhalo: ',
+ ws_no_results: 'Nenalezeny žádné pracovní prostory',
+ ws_search_placeholder: 'Hledat pracovní prostory…',
+ you: 'Vy',
+ // tool/worklog references
+ processed_elapsed: _i18nProcessedElapsedCs,
+ tool_action_label: _i18nToolActionLabelCs,
+ tool_worklog_summary: _i18nToolWorklogSummaryCs,
+ tool_summary_join: _i18nToolSummaryJoinCs,
+ },
tr: {
@@ -23360,6 +25005,53 @@ function _i18nToolSummaryJoinVi(parts) {
return Array.isArray(parts) ? parts.filter(Boolean).join(', ') : '';
}
+// Czech (cs) tool/worklog helpers — Slavic plural forms (1 / few 2-4 / many 5+ handled by _i18nToolWorklogSummaryFromMap's singular/plural split; UI uses n===1 vs plural).
+function _i18nCsPlural(n, one, few, many) {
+ const abs = Math.abs(Number(n) || 0);
+ if (abs === 1) return one;
+ if (abs >= 2 && abs <= 4) return few;
+ return many;
+}
+const _I18N_TOOL_ACTION_TEXT_CS = {
+ shell: { running: 'Spouštění', done: 'Spuštěno', fail: 'spustit', fallback: 'příkaz' },
+ read: { running: 'Čtení', done: 'Přečteno', fail: 'přečíst', fallback: 'soubor' },
+ list: { running: 'Výpis', done: 'Vypsáno', fail: 'vypsat', fallback: 'soubory' },
+ search: { running: 'Prohledávání', done: 'Prohledáno', fail: 'prohledat', fallback: 'pracovní prostor' },
+ web: { running: 'Kontrola', done: 'Zkontrolováno', fail: 'zkontrolovat', fallback: 'webová data' },
+ write: { running: 'Aktualizace', done: 'Aktualizováno', fail: 'aktualizovat', fallback: 'soubor' },
+ skill: { running: 'Načítání', done: 'Načteno', fail: 'načíst', fallback: 'dovednost' },
+ memory: { running: 'Ukládání', done: 'Uloženo', fail: 'uložit', fallback: 'paměť' },
+ delegate: { running: 'Delegování', done: 'Delegováno', fail: 'delegovat', fallback: 'úkol' },
+ unknown: { running: 'Spouštění', done: 'Spuštěno', fail: 'spustit', fallback: 'nástroj' },
+};
+const _I18N_TOOL_SUMMARY_TEXT_CS = {
+ shell: { running: ['Spouštění příkazu', 'Spouštění {n} příkazů'], done: ['Spuštěn příkaz', 'Spuštěno {n} příkazů'] },
+ read: { running: ['Čtení souboru', 'Čtení {n} souborů'], done: ['Přečten soubor', 'Přečteno {n} souborů'] },
+ list: { running: ['Výpis souboru', 'Výpis {n} souborů'], done: ['Vypsán soubor', 'Vypsáno {n} souborů'] },
+ search: { running: ['Prohledávání prac. prostoru', 'Prohledávání prac. prostoru {n}×'], done: ['Prohledán prac. prostor', 'Prohledán prac. prostor {n}×'] },
+ web: { running: ['Kontrola webu', 'Kontrola webu {n}×'], done: ['Zkontrolován web', 'Zkontrolován web {n}×'] },
+ write: { running: ['Aktualizace souboru', 'Aktualizace {n} souborů'], done: ['Aktualizován soubor', 'Aktualizováno {n} souborů'] },
+ skill: { running: ['Načítání dovednosti', 'Načítání {n} dovedností'], done: ['Načtena dovednost', 'Načteno {n} dovedností'] },
+ memory: { running: ['Ukládání paměti', 'Ukládání {n} záznamů paměti'], done: ['Uložena paměť', 'Uloženo {n} záznamů paměti'] },
+ delegate: { running: ['Delegování úkolu', 'Delegování {n} úkolů'], done: ['Delegován úkol', 'Delegováno {n} úkolů'] },
+ unknown: { running: ['Spouštění nástroje', 'Spouštění {n} nástrojů'], done: ['Spuštěn nástroj', 'Spuštěno {n} nástrojů'] },
+};
+function _i18nProcessedElapsedCs(duration) {
+ return _i18nProcessedElapsed('Zpracováno', duration);
+}
+function _i18nToolActionLabelCs(kind, state, target, display, failed) {
+ const verbs = _I18N_TOOL_ACTION_TEXT_CS[kind] || _I18N_TOOL_ACTION_TEXT_CS.unknown;
+ const object = target || verbs.fallback || display || 'nástroj';
+ if (failed) return `Nepodařilo se ${verbs.fail || 'spustit'} ${object}`;
+ return `${verbs[state] || verbs.running} ${object}`;
+}
+function _i18nToolWorklogSummaryCs(kind, state, count) {
+ return _i18nToolWorklogSummaryFromMap(_I18N_TOOL_SUMMARY_TEXT_CS, kind, state, count);
+}
+function _i18nToolSummaryJoinCs(parts) {
+ return Array.isArray(parts) ? parts.filter(Boolean).join(', ') : '';
+}
+
// Active locale — defaults to English; overridden by loadLocale() at boot.
diff --git a/tests/test_2735_open_in_vscode.py b/tests/test_2735_open_in_vscode.py
index c510caa3..b5ecc226 100644
--- a/tests/test_2735_open_in_vscode.py
+++ b/tests/test_2735_open_in_vscode.py
@@ -229,7 +229,7 @@ class TestOpenInVsCodeI18n:
"""open_in_vscode key must appear exactly once per locale (14 total)."""
src = I18N.read_text(encoding="utf-8")
count = src.count("open_in_vscode:")
- assert count == 14, (
+ assert count == 15, (
f"Expected 14 open_in_vscode: entries (one per locale), found {count}"
)
@@ -237,7 +237,7 @@ class TestOpenInVsCodeI18n:
"""open_in_vscode_failed key must appear exactly once per locale (14 total)."""
src = I18N.read_text(encoding="utf-8")
count = src.count("open_in_vscode_failed:")
- assert count == 14, (
+ assert count == 15, (
f"Expected 14 open_in_vscode_failed: entries (one per locale), found {count}"
)
diff --git a/tests/test_5144_busy_composer_placeholder_hint.py b/tests/test_5144_busy_composer_placeholder_hint.py
index 6650fe89..9ae1c118 100644
--- a/tests/test_5144_busy_composer_placeholder_hint.py
+++ b/tests/test_5144_busy_composer_placeholder_hint.py
@@ -78,7 +78,7 @@ def test_busy_placeholder_helper_preserves_compression_and_drafts():
def test_locale_blocks_cover_new_keys():
locale_blocks = I18N_JS.count("settings_default_message_mode_steer")
- assert locale_blocks == 14
+ assert locale_blocks == 15
for key in [
"settings_label_busy_placeholder_hint",
"settings_desc_busy_placeholder_hint",
diff --git a/tests/test_auxiliary_models_settings.py b/tests/test_auxiliary_models_settings.py
index 2af243de..0e85a20b 100644
--- a/tests/test_auxiliary_models_settings.py
+++ b/tests/test_auxiliary_models_settings.py
@@ -330,7 +330,7 @@ class TestAuxiliaryModelsI18n:
"""Count of each key should equal the number of locales (12 with Turkish)."""
for key in self.REQUIRED_KEYS:
count = I18N_JS.count(f"{key}:")
- assert count == 14, (
+ assert count == 15, (
f"i18n key '{key}' found {count} times — expected 14 (one per locale)"
)
diff --git a/tests/test_czech_locale.py b/tests/test_czech_locale.py
new file mode 100644
index 00000000..bceeb612
--- /dev/null
+++ b/tests/test_czech_locale.py
@@ -0,0 +1,197 @@
+from collections import Counter
+from pathlib import Path
+import re
+
+
+REPO = Path(__file__).resolve().parent.parent
+
+
+def read(path: Path) -> str:
+ return path.read_text(encoding="utf-8")
+
+
+def extract_locale_block(src: str, locale_key: str) -> str:
+ start_match = re.search(rf"\b{re.escape(locale_key)}\s*:\s*\{{", src)
+ assert start_match, f"{locale_key} locale block not found"
+
+ start = start_match.end() - 1
+ depth = 0
+ in_single = False
+ in_double = False
+ in_backtick = False
+ escape = False
+
+ for i in range(start, len(src)):
+ ch = src[i]
+
+ if escape:
+ escape = False
+ continue
+
+ if in_single:
+ if ch == "\\":
+ escape = True
+ elif ch == "'":
+ in_single = False
+ continue
+
+ if in_double:
+ if ch == "\\":
+ escape = True
+ elif ch == '"':
+ in_double = False
+ continue
+
+ if in_backtick:
+ if ch == "\\":
+ escape = True
+ elif ch == "`":
+ in_backtick = False
+ continue
+
+ if ch == "'":
+ in_single = True
+ continue
+ if ch == '"':
+ in_double = True
+ continue
+ if ch == "`":
+ in_backtick = True
+ continue
+
+ if ch == "{":
+ depth += 1
+ continue
+ if ch == "}":
+ depth -= 1
+ if depth == 0:
+ return src[start + 1 : i]
+
+ raise AssertionError(f"{locale_key} locale block braces are not balanced")
+
+
+def locale_keys(src: str, locale_key: str) -> list[str]:
+ key_pattern = re.compile(r"^\s*([a-zA-Z0-9_]+)\s*:", re.MULTILINE)
+ return key_pattern.findall(extract_locale_block(src, locale_key))
+
+
+def test_czech_locale_block_exists():
+ src = read(REPO / "static" / "i18n.js")
+ cs_block = extract_locale_block(src, "cs")
+ assert cs_block
+ assert "_lang: 'cs'" in cs_block
+ assert "_label: 'Čeština'" in cs_block
+ assert "_speech: 'cs-CZ'" in cs_block
+
+
+def test_czech_locale_includes_representative_translations():
+ src = read(REPO / "static" / "i18n.js")
+ cs_block = extract_locale_block(src, "cs")
+ expected = [
+ "settings_title: 'Nastavení'",
+ "settings_label_language: 'Jazyk'",
+ "login_title: 'Přihlášení'",
+ "approval_heading: 'Požadováno schválení'",
+ "tab_tasks: 'Úkoly'",
+ "tab_profiles: 'Profily'",
+ "empty_title: 'Jak vám mohu pomoci?'",
+ "onboarding_title: 'Vítejte v Hermes Web UI'",
+ ]
+ for entry in expected:
+ assert entry in cs_block, f"missing expected Czech translation: {entry}"
+
+
+def test_czech_locale_matches_english_key_coverage():
+ src = read(REPO / "static" / "i18n.js")
+ en_keys = set(locale_keys(src, "en"))
+ cs_keys = set(locale_keys(src, "cs"))
+ assert sorted(en_keys - cs_keys) == []
+ assert sorted(cs_keys - en_keys) == []
+
+
+def test_czech_locale_has_no_duplicate_keys():
+ src = read(REPO / "static" / "i18n.js")
+ keys = locale_keys(src, "cs")
+
+ duplicates = sorted(k for k, count in Counter(keys).items() if count > 1)
+ assert not duplicates, f"Czech locale has duplicate keys: {duplicates}"
+
+
+def test_czech_locale_keys_use_standard_indentation():
+ src = read(REPO / "static" / "i18n.js")
+ cs_block = extract_locale_block(src, "cs")
+
+ # Enforce strict 4-space indentation for keys.
+ badly_indented = []
+ for line in cs_block.splitlines():
+ m = re.match(r"^(\s*)[a-zA-Z0-9_]+\s*:", line)
+ if m and len(m.group(1)) != 4:
+ badly_indented.append(f"{len(m.group(1))} spaces: {line.strip()}")
+ assert badly_indented == []
+
+
+def test_czech_locale_arrow_function_values_mirror_english():
+ src = read(REPO / "static" / "i18n.js")
+ en_block = extract_locale_block(src, "en")
+ cs_block = extract_locale_block(src, "cs")
+
+ value_re = re.compile(r"^\s+([a-zA-Z0-9_]+):\s*(.+?)(?:,\s*$|\s*$)", re.MULTILINE)
+ arrow_re = re.compile(r"^\s*\(?[a-zA-Z_,\s]*\)?\s*=>")
+ helper_re = re.compile(r"^_i18n[A-Za-z]+$")
+
+ def callable_values(block):
+ out = set()
+ for k, v in value_re.findall(block):
+ v = v.strip()
+ if arrow_re.match(v) or helper_re.match(v):
+ out.add(k)
+ return out
+
+ # Every key whose English value is a function must also be a function in cs
+ # (either an arrow or a named _i18n* helper reference).
+ assert callable_values(en_block) == callable_values(cs_block)
+
+
+def test_czech_locale_preserves_placeholder_patterns():
+ src = read(REPO / "static" / "i18n.js")
+ en_block = extract_locale_block(src, "en")
+ cs_block = extract_locale_block(src, "cs")
+
+ value_re = re.compile(r"^\s+([a-zA-Z0-9_]+):\s*(.+?)(?:,\s*$|\s*$)", re.MULTILINE)
+ placeholder_re = re.compile(r"\{[0-9]+\}|\$\{[a-zA-Z_][a-zA-Z0-9_]*\}")
+
+ def kv(block):
+ out = {}
+ for k, v in value_re.findall(block):
+ out[k] = v
+ return out
+
+ en_kv = kv(en_block)
+ cs_kv = kv(cs_block)
+
+ for key, en_val in en_kv.items():
+ if key not in cs_kv:
+ continue
+ en_vars = sorted(placeholder_re.findall(en_val))
+ cs_vars = sorted(placeholder_re.findall(cs_kv[key]))
+ # Skip arrow functions which might contain conditional logic and thus more template vars.
+ if "=>" not in cs_kv[key]:
+ if en_vars or cs_vars:
+ assert cs_vars == en_vars, f"Key '{key}' placeholder mismatch in cs locale"
+
+
+def test_czech_locale_has_no_double_escaped_unicode_sequences():
+ """JSON-style double escapes (\\\\u2026) render literal backslash-u in the UI."""
+ src = read(REPO / "static" / "i18n.js")
+ cs_block = extract_locale_block(src, "cs")
+ for bad in ("\\\\u2026", "\\\\u2192", "\\\\u2713"):
+ assert bad not in cs_block, f"Czech locale must not contain {bad!r}"
+
+
+def test_czech_locale_uses_real_utf8_diacritics():
+ """Czech uses á č ď é ě í ň ó ř š ť ú ů ý ž — confirm the block carries real
+ UTF-8 diacritics, not ASCII-only text (which would mean nothing was translated)."""
+ src = read(REPO / "static" / "i18n.js")
+ cs_block = extract_locale_block(src, "cs")
+ diacritics = "áčďéěíňóřšťúůýžÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ"
+ assert any(ch in cs_block for ch in diacritics), "Czech locale has no diacritics"
diff --git a/tests/test_issue1488_composer_voice_buttons.py b/tests/test_issue1488_composer_voice_buttons.py
index 5e1dc335..33c5173a 100644
--- a/tests/test_issue1488_composer_voice_buttons.py
+++ b/tests/test_issue1488_composer_voice_buttons.py
@@ -123,7 +123,7 @@ class TestComposerVoiceButtonI18n:
"voice_mode_toggle_active",
)
- LOCALES = ("en", "fr", "it", "ja", "ru", "es", "de", "zh", "zh-Hant", "pt", "ko", "tr", "pl", "vi")
+ LOCALES = ("en", "fr", "it", "ja", "ru", "es", "de", "zh", "zh-Hant", "pt", "ko", "tr", "pl", "vi", "cs")
def test_legacy_voice_toggle_key_removed(self):
"""The old key whose string was 'Voice input' caused the duplicate-
@@ -171,7 +171,7 @@ class TestComposerVoiceButtonI18n:
class TestVoiceModePreferenceGate:
"""boot.js must hide btnVoiceMode by default, surface it via Preferences."""
- LOCALES = ("en", "fr", "it", "ja", "ru", "es", "de", "zh", "zh-Hant", "pt", "ko", "tr", "pl", "vi")
+ LOCALES = ("en", "fr", "it", "ja", "ru", "es", "de", "zh", "zh-Hant", "pt", "ko", "tr", "pl", "vi", "cs")
def test_voice_mode_pref_is_localstorage_backed(self):
"""The pref reads from localStorage key 'hermes-voice-mode-button'."""
diff --git a/tests/test_issue2419_cache_usage_display.py b/tests/test_issue2419_cache_usage_display.py
index 836694ee..d3cda64b 100644
--- a/tests/test_issue2419_cache_usage_display.py
+++ b/tests/test_issue2419_cache_usage_display.py
@@ -63,8 +63,8 @@ def test_context_indicator_surfaces_cache_hit_rate():
def test_cache_usage_labels_are_localized():
src = (ROOT / "static" / "i18n.js").read_text()
- assert src.count("usage_cache_hit_detail:") == 14
- assert src.count("usage_cached_percent:") == 14
+ assert src.count("usage_cache_hit_detail:") == 15
+ assert src.count("usage_cached_percent:") == 15
assert "usage_cache_hit_detail: 'Cache: {0}% hit ({1} read / {2} write)'" in src
assert "usage_cached_percent: '{0}% cached'" in src
diff --git a/tests/test_issue2679_hide_suggestions.py b/tests/test_issue2679_hide_suggestions.py
index 33c8bbc3..3a260398 100644
--- a/tests/test_issue2679_hide_suggestions.py
+++ b/tests/test_issue2679_hide_suggestions.py
@@ -50,8 +50,8 @@ def test_panels_round_trip_and_hot_apply_hide_suggestions():
def test_hide_suggestions_i18n_all_locales_and_changelog():
js = I18N.read_text(encoding="utf-8")
- assert js.count("settings_label_hide_suggestions:") == 14
- assert js.count("settings_desc_hide_suggestions:") == 14
+ assert js.count("settings_label_hide_suggestions:") == 15
+ assert js.count("settings_desc_hide_suggestions:") == 15
changelog = CHANGELOG.read_text(encoding="utf-8")
assert "#2679" in changelog
assert "hide_empty_state_suggestions" in changelog
diff --git a/tests/test_issue3227_help_tab.py b/tests/test_issue3227_help_tab.py
index 99d58aec..37fc86de 100644
--- a/tests/test_issue3227_help_tab.py
+++ b/tests/test_issue3227_help_tab.py
@@ -6,7 +6,7 @@ PANELS_JS = (ROOT / "static" / "panels.js").read_text(encoding="utf-8")
I18N_JS = (ROOT / "static" / "i18n.js").read_text(encoding="utf-8")
STYLE_CSS = (ROOT / "static" / "style.css").read_text(encoding="utf-8")
-LOCALE_COUNT = 14 # en, it, ja, ru, es, de, zh, zh-TW, pt, ko, fr, tr, pl
+LOCALE_COUNT = 15 # en, it, ja, ru, es, de, zh, zh-Hant, pt, ko, fr, tr, pl, vi, cs
def test_help_nav_button_present():
diff --git a/tests/test_issue3242_3214_i18n_tooltips.py b/tests/test_issue3242_3214_i18n_tooltips.py
index cf5d13a4..845863af 100644
--- a/tests/test_issue3242_3214_i18n_tooltips.py
+++ b/tests/test_issue3242_3214_i18n_tooltips.py
@@ -5,7 +5,7 @@ BOOT_JS = (ROOT / "static" / "boot.js").read_text(encoding="utf-8")
I18N_JS = (ROOT / "static" / "i18n.js").read_text(encoding="utf-8")
SESSIONS_JS = (ROOT / "static" / "sessions.js").read_text(encoding="utf-8")
-LOCALE_COUNT = 14
+LOCALE_COUNT = 15
def test_raw_audio_active_recording_uses_dedicated_i18n_key():
diff --git a/tests/test_issue4325_virtualization_toggle.py b/tests/test_issue4325_virtualization_toggle.py
index 1f0fbc62..93a404ae 100644
--- a/tests/test_issue4325_virtualization_toggle.py
+++ b/tests/test_issue4325_virtualization_toggle.py
@@ -76,8 +76,8 @@ def test_panels_round_trip_and_hot_apply_virtualize_toggle():
def test_virtualize_toggle_i18n_all_locales():
js = I18N.read_text(encoding="utf-8")
- assert js.count("settings_label_virtualize_transcript:") == 14
- assert js.count("settings_desc_virtualize_transcript:") == 14
+ assert js.count("settings_label_virtualize_transcript:") == 15
+ assert js.count("settings_desc_virtualize_transcript:") == 15
# ── #4343 force-off-for-everyone migration (load_settings behavior) ──────────
diff --git a/tests/test_issue4356_no_git_update_check.py b/tests/test_issue4356_no_git_update_check.py
index be823d07..41477294 100644
--- a/tests/test_issue4356_no_git_update_check.py
+++ b/tests/test_issue4356_no_git_update_check.py
@@ -86,4 +86,4 @@ def test_i18n_no_git_key_all_locales():
# Count occurrences of the new key (should be exactly 13, one per locale)
count = content.count("settings_update_no_git")
- assert count == 14, f"Expected exactly 14 settings_update_no_git keys, found {count}"
+ assert count == 15, f"Expected exactly 15 settings_update_no_git keys, found {count}"
diff --git a/tests/test_issue4470_kanban_task_editor_fields.py b/tests/test_issue4470_kanban_task_editor_fields.py
index 66ba14fd..1bd4c68e 100644
--- a/tests/test_issue4470_kanban_task_editor_fields.py
+++ b/tests/test_issue4470_kanban_task_editor_fields.py
@@ -130,7 +130,7 @@ def test_i18n_new_keys_in_all_locales():
]
for key in required:
count = I18N_JS.count(f"{key}:")
- assert count == 14, f"Key '{key}' appears {count} times, expected 14 (one per locale)"
+ assert count == 15, f"Key '{key}' appears {count} times, expected 15 (one per locale)"
def test_backend_already_accepts_new_fields():
diff --git a/tests/test_pr1721_rtl_salvage.py b/tests/test_pr1721_rtl_salvage.py
index f7c8cb61..4824425e 100644
--- a/tests/test_pr1721_rtl_salvage.py
+++ b/tests/test_pr1721_rtl_salvage.py
@@ -112,5 +112,5 @@ def test_rtl_in_config_defaults_and_writable_keys():
def test_rtl_localized_in_all_locales():
js = I18N.read_text(encoding="utf-8")
# Count occurrences — should match the 11 locale blocks
- assert js.count("settings_label_rtl:") == 14
- assert js.count("settings_desc_rtl:") == 14
+ assert js.count("settings_label_rtl:") == 15
+ assert js.count("settings_desc_rtl:") == 15
diff --git a/tests/test_quota_chip_settings_toggle.py b/tests/test_quota_chip_settings_toggle.py
index 13387873..332265d9 100644
--- a/tests/test_quota_chip_settings_toggle.py
+++ b/tests/test_quota_chip_settings_toggle.py
@@ -88,5 +88,5 @@ def test_quota_chip_panels_round_trip():
def test_quota_chip_localized_in_all_locales():
js = I18N.read_text(encoding="utf-8")
- assert js.count("settings_label_quota_chip:") == 14, "12 locales expected"
- assert js.count("settings_desc_quota_chip:") == 14, "12 locales expected"
+ assert js.count("settings_label_quota_chip:") == 15, "12 locales expected"
+ assert js.count("settings_desc_quota_chip:") == 15, "12 locales expected"
diff --git a/tests/test_verdigris_skin.py b/tests/test_verdigris_skin.py
index 0c8c6ce4..7d8105fa 100644
--- a/tests/test_verdigris_skin.py
+++ b/tests/test_verdigris_skin.py
@@ -38,4 +38,4 @@ def test_verdigris_has_no_light_variant():
def test_verdigris_i18n_lists_skin_in_all_locales():
# There are 12 locales; each should now include verdigris as the trailing skin.
# 10 locales use ASCII closing paren, 2 Chinese locales use full-width paren.
- assert I18N_JS.count("verdigris)") + I18N_JS.count("verdigris)") == 14
+ assert I18N_JS.count("verdigris)") + I18N_JS.count("verdigris)") == 15
diff --git a/tests/test_zeus_skin.py b/tests/test_zeus_skin.py
index abca40e9..852183c8 100644
--- a/tests/test_zeus_skin.py
+++ b/tests/test_zeus_skin.py
@@ -45,4 +45,4 @@ def test_zeus_modals_are_not_navy():
def test_zeus_i18n_lists_skin_in_all_locales():
# There are 12 locales; each should include zeus in the skin list.
- assert I18N_JS.count("/zeus/") == 14
+ assert I18N_JS.count("/zeus/") == 15