"""VoxCast UI strings: Dutch. Key/placeholder parity with en.py enforced."""

STRINGS: dict[str, str] = {
    # ── Panel (main.qml) ────────────────────────────────────────────────
    "panel_ready": "Gereed",
    "panel_transcribing": "Transcriberen...",
    "panel_correcting": "Corrigeren...",
    "panel_enhancing": "Verfijnen (AI)…",
    "panel_converting": "Converteren...",
    "panel_error": "Fout",
    "panel_drop_file": "Bestand slepen → Markdown",
    "panel_acc_ai_mode": "AI-modus",
    "panel_acc_settings": "Instellingen",
    "panel_acc_undock": "Losmaken",
    "panel_acc_hide": "Verbergen",

    # ── Settings window ─────────────────────────────────────────────────
    "settings_title": "Instellingen",
    "sec_interface": "INTERFACE",
    "row_ui_language": "Taal",
    "sec_audio": "AUDIO",
    "row_microphone": "Microfoon",
    "opt_system_default": "Systeemstandaard",
    "row_voice_test": "Spraaktest",
    "btn_test": "Test",
    "btn_stop": "Stop",
    "btn_play": "Afspelen",
    "sec_recognition": "HERKENNING",
    "row_model": "Model",
    "model_swift": "Swift",
    "model_precise": "Precise",
    "model_ultra": "Ultra",
    "hint_model_swift": "Snel & licht, de juiste keuze voor laptops en pc's zonder videokaart.",
    "hint_model_precise": "Uitgebalanceerde nauwkeurigheid, solide keuze voor dagelijks gebruik, draait goed op de meeste pc's.",
    "hint_model_ultra": "Hoogste nauwkeurigheid, ideaal met een videokaart (4 GB); zonder merkbaar trager.",
    "compat_gpu_ok": "Draait op je videokaart ({vram} GB).",
    "compat_gpu_low": "Je videokaart ({vram} GB) heeft te weinig geheugen voor dit model, het draait op de processor (trager).",
    "compat_cpu": "Geen compatibele videokaart gevonden, dit model draait op de processor.",
    "compat_cpu_forced": "Draait op de processor (ingesteld in de instellingen).",
    "row_language": "Taal",
    "row_lang_auto": "Taal automatisch detecteren",
    "hint_lang_auto": "Detecteert de taal bij elk dictaat. Een vaste taal is sneller en nauwkeuriger.",
    "row_live_mode": "Live transcriptie",
    "hint_live_mode": "Tekst verschijnt bij je cursor terwijl je spreekt, in plaats van pas na het stoppen. Geen AI-verfijning in deze modus; de tekst wordt bij de cursor getypt.",
    "hint_output_live": "Live transcriptie is ingeschakeld: tekst wordt tijdens het spreken bij de cursor getypt, dus deze uitvoeropties zijn niet van toepassing.",
    "hint_live_cpu": "Werkt het best met een videokaart; op de processor kan het achterlopen op je spraak.",
    "live_cpu_warning": "De livemodus draait op de processor en kan vertragen; een videokaart wordt aanbevolen.",
    "sec_output": "UITVOER",
    "row_text_output": "Tekstuitvoer",
    "opt_clipboard": "Klembord",
    "opt_type_at_cursor": "Typen bij cursor",
    "opt_both": "Beide",
    "row_insert_method": "Invoegmethode",
    "opt_paste": "Plakken (Ctrl+V)",
    "opt_typing": "Typen",
    "hint_typing": "Simuleert toetsenbordinvoer. Werkt ook in terminals.",
    "sec_controls": "BEDIENING",
    "row_hotkey": "Sneltoets",
    "row_mode": "Modus",
    "opt_hold": "Vasthouden",
    "opt_toggle": "Schakelen",
    "sec_performance": "PRESTATIES",
    "row_compute": "Verwerking",
    "opt_auto": "Automatisch",
    "opt_gpu": "GPU",
    "opt_cpu": "CPU",
    "hint_cpu_slow": "CPU-modus is trager.",
    "sec_system": "SYSTEEM",
    "row_autostart": "Automatisch starten",
    "row_startup_sound": "Opstartgeluid",
    "row_recording_sound": "Opnamegeluid",
    "row_shutdown_sound": "Afsluitgeluid",
    "row_always_on_top": "Altijd op voorgrond",
    "row_small_panel": "Klein paneel",
    "sec_file_conversion": "BESTANDSCONVERSIE",
    "row_save_mode": "Opslagmodus",
    "opt_ask": "Vragen",
    "opt_beside_file": "Naast het bestand",
    "opt_folder": "Map",
    "row_folder": "Map",
    "btn_browse": "Bladeren",
    "row_timestamps": "Tijdstempels",
    "row_open_after": "Daarna openen",
    "row_context_menu": "Rechtsklikmenu",
    "hint_context_menu": "Voegt 'Converteren naar Markdown' toe aan het rechtsklikmenu van de Verkenner.",
    "sec_ai": "AI-VERFIJNING",
    "row_enable": "Inschakelen",
    "hint_ai": "Verfijn dictaten met AI (opschonen, e-mail, antwoord…). Kies de actieve modus via een rechtsklik op het paneel of via de AI-knop van het paneel.",
    "row_provider": "Aanbieder",
    "row_api_key": "API-sleutel",
    "ph_api_key": "Plak API-sleutel",
    "ph_api_key_saved": "•••••••• opgeslagen, typ om te vervangen",
    "btn_save": "Opslaan",
    "hint_key_stored": "Sleutel veilig opgeslagen in Windows Referentiebeheer.",
    "btn_clear": "Wissen",
    "btn_load": "Laden",
    "btn_loading": "Laadt",
    "row_active_mode": "Actieve modus",
    "mode_normal": "Normaal (geen AI)",
    # Display names of the built-in AI modes (shown while the user hasn't
    # renamed them; the stored name stays the English default).
    "mode_cleanup": "Opschonen",
    "mode_email": "E-mail",
    "mode_reply": "Antwoord",
    "mode_todo": "Takenlijst",
    "mode_notes": "Notities",
    "mode_formal": "Formeel",
    "lbl_custom_modes": "Eigen modi",
    "sec_license": "LICENTIE",
    "row_status": "Status",
    "lic_activated": "● Geactiveerd",
    "lic_not_activated": "○ Niet geactiveerd",
    "btn_activate": "Activeren",
    "sec_updates": "UPDATES",
    "row_version": "Versie",
    "btn_check_updates": "Controleren op updates",
    "btn_checking": "Controleert",
    "btn_downloading_pct": "{pct}%  wordt gedownload…",
    "btn_download_install": "v{version} downloaden & installeren",
    "btn_reset": "Resetten",
    "reset_title": "Instellingen resetten",
    "reset_question": "Alle instellingen terugzetten naar de standaardwaarden?",
    "dlg_model_dl_title": "Download vereist",
    "dlg_model_dl_text": "Het gekozen model is nog niet geïnstalleerd. VoxCast downloadt ongeveer {size} aan spraakdata en schakelt daarna over. Download nu starten?",

    # ── Mode editor ─────────────────────────────────────────────────────
    "ph_mode_name": "Modusnaam",
    "tip_remove_mode": "Modus verwijderen",
    "ph_system_prompt": "Systeemprompt, vertelt de AI hoe die het transcript moet omvormen.",
    "btn_add_mode": "Modus toevoegen",
    "mode_new": "Nieuwe modus",

    # ── Mode menu (panel) ───────────────────────────────────────────────
    "menu_ai_mode": "AI-MODUS",
    "menu_ai_mode_off": "AI-MODUS  ·  UIT",
    "menu_ai_settings": "Instellingen…",
    "menu_copy_raw": "Origineel transcript kopiëren",
    "tray_raw_copied": "Het originele transcript is naar het klembord gekopieerd.",

    # ── Activation overlay ──────────────────────────────────────────────
    "act_title": "VoxCast activeren",
    "act_intro": "Voer je licentiesleutel in om dit apparaat te activeren. Activeren is een eenmalige onlinestap, daarna werkt VoxCast volledig offline.",
    "act_enter_key": "Voer je licentiesleutel in.",
    "act_button": "Activeren",
    "act_button_busy": "Activeren…",
    "act_update_available": "Versie {version} is beschikbaar.",
    "act_update_now": "Nu bijwerken",
    "act_device": "Apparaat: ",
    "act_quit": "Afsluiten",

    # ── First-run overlay ───────────────────────────────────────────────
    "fr_title": "VoxCast instellen",
    "fr_pick_language": "Kies je taal voor de spraakherkenning.\nZo vermijd je trage automatische detectie bij elk gebruik.",
    "fr_continue": "Doorgaan",
    "fr_preparing": "Modellen voorbereiden...",
    "fr_hint_label": "Tip:",
    "status_hw_check": "Hardware controleren...",
    "fr_hw_gpu": "Grafische kaart gedetecteerd ({vram} GB): het model {model} wordt ingesteld.",
    "fr_hw_cpu": "Geen dedicated grafische kaart gedetecteerd: het model {model} wordt ingesteld.",
    "fr_hint_download": "Modellen worden eenmalig gedownload en blijven op je apparaat, geen cloud nodig.",
    "fr_hint_hotkey": "Druk op Ctrl+Shift+Space om te dicteren, druk nogmaals om te stoppen.",
    "fr_hint_ai": "Klik met rechts op het paneel om een AI-modus te kiezen (bijv. E-mail, Antwoord).",
    "fr_hint_dragfile": "Sleep een bestand naar het paneel om er Markdown van te maken.",
    "fr_hint_audio": "Zet een audiobestand neer (mp3, ogg, m4a…) om het te transcriberen.",
    "fr_hint_explorer": "In de Verkenner: rechtsklik op een bestand → “Converteren naar Markdown”.",
    "fr_hint_dock": "Dok het paneel aan een schermrand, het schuift weg tot je het nodig hebt.",
    "fr_hint_settings": "Open Instellingen om model, taal of sneltoets op elk moment te wijzigen.",

    # ── Status messages (Python → panel) ────────────────────────────────
    "status_init_services": "Services initialiseren...",
    "status_loading_vad": "Spraakactiviteitsdetectie laden...",
    "status_loading_model": "Spraakherkenningsmodel laden...",
    "status_init_models": "Modellen initialiseren...",
    "status_loading": "Model laden...",
    "status_switching_model": "Model wisselen...",
    "status_downloading_engine": "Spraakherkenningsengine downloaden...",
    "status_engine_ready": "Spraakherkenningsengine gereed",
    "status_downloading_correction": "Correctiemodel downloaden...",
    "status_correction_ready": "Correctiemodel gedownload",

    # ── Meeting recording ────────────────────────────────────────────────
    "menu_meeting_start": "Meeting opnemen",
    "menu_meeting_stop": "Meeting-opname stoppen",
    "meeting_consent_title": "Meetings opnemen",
    "meeting_consent_body": "VoxCast neemt het systeemgeluid en je microfoon op, zodat je gesprekken en meetings kunt transcriberen.\n\nZorg ervoor dat alle deelnemers instemmen met de opname, in veel landen (waaronder Duitsland) is het opnemen van een gesprek zonder toestemming strafbaar.",
    "meeting_consent_accept": "Begrepen, opname starten",
    "meeting_consent_cancel": "Annuleren",
    "status_meeting_recording": "Meeting wordt opgenomen",
    "status_meeting_transcribing": "Meeting wordt getranscribeerd… {pct}%",
    "meeting_done_title": "Meeting getranscribeerd",
    "meeting_done_body": "Het transcript is opgeslagen, klik hier om het te openen.",
    "meeting_resume_note": "Er is een onafgemaakte meeting-opname gevonden, die wordt nu getranscribeerd.",
    "menu_meeting_folder": "Meetingmap openen",
    "meeting_source_title": "Wat opnemen?",
    "meeting_source_system": "Hele systeem",
    "meeting_source_empty": "Er speelt momenteel geen app audio af",
    "meeting_app_fallback": "Opname van alleen die app kon niet starten, in plaats daarvan wordt het hele systeem opgenomen.",
    "md_meeting_source": "Bron",
    "meeting_partial_note": "De opname eindigde voortijdig, de gedeeltelijke opname is toch verwerkt.",
    "meeting_system_silent": "Er is geen systeemgeluid opgenomen, controleer je afspeelapparaat. Sommige headsets spelen audio af op een manier die Windows niet kan opnemen; een ander standaard uitvoerapparaat kiezen helpt.",
    "meeting_summary_failed": "AI-samenvatting mislukt, het transcript is zonder samenvatting opgeslagen.",
    "err_meeting_folder": "De meetingmap kon niet worden aangemaakt. Controleer de map in de instellingen.",
    "err_meeting_disk": "Onvoldoende vrije schijfruimte, meeting-opname gestopt.",
    "err_meeting_maxlen": "Maximale meetinglengte bereikt (4 uur), opname gestopt.",
    "err_meeting_capture": "Meeting-opname mislukt, er kon geen audio worden opgenomen.",
    "err_meeting_transcribe": "Meeting-transcriptie mislukt. Het audiobestand is bewaard, zodat je het opnieuw kunt proberen.",
    "md_meeting_title": "Meeting",
    "md_meeting_date": "Datum",
    "md_meeting_duration": "Duur",
    "md_meeting_summary": "Samenvatting",
    "md_meeting_transcript": "Transcript",
    "sec_remote": "Externe server",
    "row_remote_enable": "Externe server gebruiken",
    "hint_remote": "Voer transcriptie uit op een andere computer met een krachtigere GPU of CPU. Dictaat, bestandsconversie en vergaderingen worden op de server verwerkt.",
    "hint_recognition_remote": "De externe server verzorgt de herkenning, dus het lokale model hieronder is uitgeschakeld. Kies het model op de server.",
    "row_remote_url": "Serveradres",
    "ph_remote_url": "http://192.168.1.10:8590",
    "row_remote_key": "API-sleutel",
    "ph_remote_key": "Plak de API-sleutel van de server",
    "btn_remote_test": "Verbinding testen",
    "remote_testing": "Testen...",
    "btn_remote_discover": "Server zoeken",
    "remote_discovering": "Zoeken...",
    "remote_discover_none": "Geen server gevonden. Controleer of de server draait, beide apparaten in hetzelfde netwerk zitten en de firewall van de server VoxCast Server op het lokale netwerk toestaat.",
    "remote_enhance_available": "AI-verfijning beschikbaar",
    "remote_update_available": "Serverupdate beschikbaar: {version}",
    "row_tls_mode": "Certificaat",
    "tls_verify": "Een geldig certificaat vereisen",
    "tls_pinned": "Deze server vertrouwen",
    "tls_insecure": "Elk certificaat toestaan",
    "btn_trust_cert": "Certificaat controleren",
    "tls_trust_title": "Deze server vertrouwen?",
    "tls_trust_body": "De server toonde deze certificaatvingerafdruk. Bevestig dat die overeenkomt met je server voordat je hem vertrouwt.",
    "tls_trust_confirm": "Vertrouwen",
    "tls_trust_failed": "Kon het certificaat van de server niet lezen. Controleer het adres en of HTTPS is ingeschakeld.",
    "tls_insecure_warning": "De verbinding is niet geverifieerd. Gebruik dit alleen op een netwerk dat je vertrouwt.",
    "row_enhance_source": "AI-verfijning",
    "enhance_own": "Mijn eigen API-sleutel",
    "enhance_server": "De server gebruiken",
    "hint_enhance_server": "De server verfijnt met zijn eigen AI-sleutel, dus je hoeft er hier geen in te voeren.",
    "lbl_server_modes": "Bedrijfsmodi (van de server)",
    "managed_locked": "Beheerd door je organisatie",
    "remote_http_warn": "Deze verbinding is niet versleuteld. Gebruik hem alleen op een vertrouwd lokaal netwerk.",
    "remote_live_hint": "Live-ondertiteling draait op dit apparaat; hiervoor moet lokaal een model zijn geïnstalleerd.",
    "remote_connected": "Verbonden: {model} op {where}",
    "remote_on_gpu": "GPU ({vram} GB)",
    "remote_on_cpu": "CPU",
    "err_remote_unreachable": "De externe server kon niet worden bereikt. Controleer het adres en je netwerk.",
    "err_remote_auth": "De externe server heeft de API-sleutel geweigerd.",
    "err_remote_busy": "De externe server is bezet. Probeer het zo meteen opnieuw.",
    "err_remote_failed": "De externe server kon deze audio niet verwerken.",
    "sec_meeting": "MEETING",
    "row_meeting_mic": "Microfoon opnemen",
    "hint_meeting_mic": "Neemt ook je eigen stem op, niet alleen die van de andere deelnemers.",
    "row_meeting_language": "Taal",
    "lang_meeting_auto": "Automatisch detecteren",
    "row_convert_language": "Audiotaal",
    "lang_convert_auto": "Automatisch detecteren",
    "err_convert_engine_loading": "De spraakherkenning wordt nog geladen. Probeer de conversie zo meteen opnieuw.",
    "err_convert_no_speech": "In dit bestand is geen spraak herkend. Er is geen Markdown-bestand aangemaakt.",
    "err_convert_engine_error": "De spraakherkenning meldde een fout tijdens het transcriberen.",
    "tray_convert_failed": "Kon {name} niet converteren: {error}",
    "hint_meeting_language": "Automatische detectie werkt voor meetings in elke taal, ook als die halverwege het gesprek wisselt. Kies alleen een taal als de detectie moeite heeft.",
    "row_meeting_keep": "Audiobestand bewaren",
    "hint_meeting_keep": "Slaat de opname op als .wav-bestand naast het transcript.",
    "row_meeting_summary": "AI-samenvatting",
    "hint_meeting_summary": "Voegt een door AI gegenereerde samenvatting toe boven het transcript (AI-verfijning moet zijn ingesteld).",
    "hint_meeting_summary_nokey": "AI-verfijning is niet ingesteld, samenvattingen worden overgeslagen.",
    "row_meeting_folder": "Opslaan in",
    "meeting_folder_default": "Documenten\\VoxCast\\Meetings",
    "btn_open": "Openen",

    # ── Errors / tray (Python) ──────────────────────────────────────────
    "err_audio_lib": "Audiobibliotheek niet beschikbaar",
    "err_gpu_oom": "GPU-geheugen vol. Start opnieuw in CPU-modus.",
    "err_gpu_fallback": "Videokaart niet beschikbaar, VoxCast draait op de processor (trager).",
    "err_hotkey_init": "Sneltoetssysteem niet geïnitialiseerd",
    "err_mic": "Microfoonfout. Controleer je audioapparaat.",
    "err_mic_test_busy": "Er loopt al een opname. Stop die voordat je de microfoon test.",
    "err_model_switch": "Modelwissel mislukt. Probeer het opnieuw.",
    "err_model_download": "Downloaden van het spraakmodel mislukt. Controleer je internetverbinding.",
    "err_speech_start": "Spraakherkenning kon niet worden gestart.",
    "err_transcription": "Transcriptie mislukt. Probeer het opnieuw.",
    "err_model_missing": "Spraakmodel niet gevonden. Kies een model in de instellingen.",
    "tray_cpu_fallback": "Geen compatibele GPU gevonden. VoxCast draait op de CPU.\nTranscriptie is trager dan met GPU-versnelling.",
    "tray_cpu_configured": "Draait op de CPU zoals ingesteld in de instellingen.",
    "tray_cpu_detected": "Geen compatibele GPU gedetecteerd. VoxCast draait op de CPU.\nVoor snellere transcriptie wordt een compatibele GPU aanbevolen.",
    "tray_file_not_found": "Bestand niet gevonden.",
    "tray_no_supported_files": "Geen ondersteunde bestanden om te converteren.",
    "tray_still_starting": "VoxCast start nog op, probeer het zo opnieuw.",
    "tray_no_output_folder": "Geen uitvoermap ingesteld, kies waar je wilt opslaan.",
    "tray_context_menu_failed": "Het rechtsklikmenu kon niet worden bijgewerkt.",
    "tray_need_api_key": "Voer eerst een API-sleutel in en sla die op.",
    "tray_models_load_failed": "Modellen konden niet worden geladen.",
    "tray_show_hide": "Tonen/verbergen",

    # ── License (Python user messages) ──────────────────────────────────
    "lic_enter_key": "Voer je licentiesleutel in.",
    "lic_saved_failed": "Geactiveerd, maar de licentie kon niet op deze pc worden opgeslagen.",
    "lic_success": "VoxCast is geactiveerd. Bedankt!",
    "lic_check_failed": "Activering mislukt. Controleer je sleutel.",
    "lic_no_server": "De activeringsserver is niet bereikbaar. Controleer je internetverbinding.",
    "lic_unexpected": "Activering onverwacht mislukt. Probeer het opnieuw.",

    # ── Updates (Python user messages) ──────────────────────────────────
    "upd_checking": "Zoeken naar updates…",
    "upd_latest": "Je gebruikt de nieuwste versie.",
    "upd_available": "Versie {version} is beschikbaar.",
    "upd_dialog_title": "Update beschikbaar",
    "upd_whats_new": "Wat is er nieuw",
    "upd_required": "Vereist",
    "upd_no_notes": "Algemene verbeteringen en foutoplossingen.",
    "upd_later": "Later",
    "upd_install_now": "Downloaden & installeren",
    "upd_install_note": "De update vervangt je huidige versie automatisch, je hoeft verder niets te doen.",
    "upd_downloading": "Versie {version} wordt gedownload…",
    "upd_failed": "Update mislukt. Probeer het opnieuw.",
    "upd_starting_installer": "Installatieprogramma wordt gestart…",
    "upd_installer_failed": "Het installatieprogramma kon niet worden gestart.",
    "upd_err_filename": "Onverwachte bestandsnaam van het installatieprogramma in het updatemanifest.",
    "upd_err_https": "De update-download moet HTTPS gebruiken.",
    "upd_err_response": "De updateserver gaf een ongeldig antwoord.",
    "upd_err_no_url": "Geen download-URL opgegeven.",
    "upd_err_no_checksum": "Het updatemanifest mist een controlesom. Afgebroken.",
    "upd_err_redirect": "De updateserver gaf een onverwachte omleiding.",
    "upd_err_integrity": "Het gedownloade bestand is niet door de integriteitscontrole gekomen. Afgebroken.",
    "upd_err_check": "Kon niet op updates controleren: {error}",
    "upd_err_download": "Download mislukt: {error}",
    "upd_err_save": "De update kon niet worden opgeslagen: {error}",
    "upd_err_host": "Update-download van onvertrouwde host '{host}' geweigerd.",

    # ── LLM (user messages) ─────────────────────────────────────────────
    # ── Late additions (review sweep) ───────────────────────────────────
    "act_first": "Activeer VoxCast eerst.",
    "llm_enhance_failed": "AI-verfijning mislukt: {error}",
    "llm_truncated": "Het AI-antwoord werd afgekapt, in plaats daarvan is het originele transcript gebruikt.",
    "llm_mode_needs_key": "AI-modus gekozen, voeg een API-sleutel toe in de instellingen om verfijning te activeren.",
    "tt_recording": "Opnemen...",
    "tray_saved": "Opgeslagen: {name}",
    "tray_converted": "{n} bestanden naar Markdown geconverteerd.",
    "hk_press_key": "Druk op een toets...",
    "hk_acc_record": "Druk toetsen voor de sneltoets",
    "no_folder": "Geen map geselecteerd",
    "llm_load_models_ph": "Modellen laden →",

    "llm_no_key": "Geen API-sleutel opgegeven.",
    "llm_no_key_configured": "Geen API-sleutel geconfigureerd.",
    "llm_bad_key": "Ongeldige of niet-geautoriseerde API-sleutel.",
    "llm_rate_limit": "Aanvraaglimiet bereikt. Probeer het zo opnieuw.",
    "llm_provider_down": "De AI-aanbieder is tijdelijk niet beschikbaar.",
    "llm_request_failed": "Aanvraag mislukt ({code}).",
    "llm_network": "Netwerkfout: {error}",
    "llm_no_model": "Geen bruikbaar AI-model gevonden voor deze API-sleutel.",
}
