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

STRINGS: dict[str, str] = {
    # ── Panel (main.qml) ────────────────────────────────────────────────
    "panel_ready": "Gotowe",
    "panel_transcribing": "Transkrybowanie...",
    "panel_correcting": "Poprawianie...",
    "panel_enhancing": "Ulepszanie (AI)…",
    "panel_converting": "Konwertowanie...",
    "panel_error": "Błąd",
    "panel_drop_file": "Upuść plik → Markdown",
    "panel_acc_ai_mode": "Tryb AI",
    "panel_acc_settings": "Ustawienia",
    "panel_acc_undock": "Odepnij",
    "panel_acc_hide": "Ukryj",

    # ── Settings window ─────────────────────────────────────────────────
    "settings_title": "Ustawienia",
    "sec_interface": "INTERFEJS",
    "row_ui_language": "Język",
    "sec_audio": "AUDIO",
    "row_microphone": "Mikrofon",
    "opt_system_default": "Domyślne systemowe",
    "row_voice_test": "Test głosu",
    "btn_test": "Testuj",
    "btn_stop": "Stop",
    "btn_play": "Odtwórz",
    "sec_recognition": "ROZPOZNAWANIE",
    "row_model": "Model",
    "model_swift": "Swift",
    "model_precise": "Precise",
    "model_ultra": "Ultra",
    "hint_model_swift": "Szybki i lekki, właściwy wybór dla laptopów i komputerów bez karty graficznej.",
    "hint_model_precise": "Zrównoważona dokładność, solidny wybór na co dzień, działa dobrze na większości komputerów.",
    "hint_model_ultra": "Najwyższa dokładność, idealny z kartą graficzną (4 GB); bez niej zauważalnie wolniejszy.",
    "compat_gpu_ok": "Będzie działać na Twojej karcie graficznej ({vram} GB).",
    "compat_gpu_low": "Twoja karta graficzna ({vram} GB) ma za mało pamięci dla tego modelu, będzie on działać na procesorze (wolniej).",
    "compat_cpu": "Nie wykryto zgodnej karty graficznej, ten model będzie działać na procesorze.",
    "compat_cpu_forced": "Będzie działać na procesorze (ustawione w ustawieniach).",
    "row_language": "Język",
    "row_lang_auto": "Automatyczne wykrywanie języka",
    "hint_lang_auto": "Wykrywa język przy każdym dyktowaniu. Stały język jest szybszy i dokładniejszy.",
    "row_live_mode": "Transkrypcja na żywo",
    "hint_live_mode": "Tekst pojawia się przy kursorze, gdy mówisz, zamiast dopiero po zatrzymaniu. W tym trybie brak ulepszania AI; tekst jest wpisywany przy kursorze.",
    "hint_output_live": "Transkrypcja na żywo jest włączona: tekst jest wpisywany przy kursorze podczas mówienia, więc te opcje wyjścia nie mają zastosowania.",
    "hint_live_cpu": "Działa najlepiej z kartą graficzną; na procesorze może nie nadążać za Twoją mową.",
    "live_cpu_warning": "Tryb na żywo działa na procesorze i może mieć opóźnienia; zalecana jest karta graficzna.",
    "sec_output": "WYJŚCIE",
    "row_text_output": "Wyjście tekstowe",
    "opt_clipboard": "Schowek",
    "opt_type_at_cursor": "Wpisuj przy kursorze",
    "opt_both": "Oba",
    "row_insert_method": "Metoda wstawiania",
    "opt_paste": "Wklejanie (Ctrl+V)",
    "opt_typing": "Wpisywanie",
    "hint_typing": "Symuluje wpisywanie z klawiatury. Działa też w terminalach.",
    "sec_controls": "STEROWANIE",
    "row_hotkey": "Skrót klawiszowy",
    "row_mode": "Tryb",
    "opt_hold": "Przytrzymanie",
    "opt_toggle": "Przełączanie",
    "sec_performance": "WYDAJNOŚĆ",
    "row_compute": "Obliczenia",
    "opt_auto": "Automatycznie",
    "opt_gpu": "GPU",
    "opt_cpu": "CPU",
    "hint_cpu_slow": "Tryb CPU jest wolniejszy.",
    "sec_system": "SYSTEM",
    "row_autostart": "Autostart",
    "row_startup_sound": "Dźwięk uruchamiania",
    "row_recording_sound": "Dźwięk nagrywania",
    "row_shutdown_sound": "Dźwięk zamykania",
    "row_always_on_top": "Zawsze na wierzchu",
    "row_small_panel": "Mały panel",
    "sec_file_conversion": "KONWERSJA PLIKÓW",
    "row_save_mode": "Tryb zapisu",
    "opt_ask": "Pytaj",
    "opt_beside_file": "Obok pliku",
    "opt_folder": "Folder",
    "row_folder": "Folder",
    "btn_browse": "Przeglądaj",
    "row_timestamps": "Znaczniki czasu",
    "row_open_after": "Otwórz po zakończeniu",
    "row_context_menu": "Menu kontekstowe",
    "hint_context_menu": "Dodaje „Konwertuj na Markdown” do menu kontekstowego Eksploratora.",
    "sec_ai": "ULEPSZANIE AI",
    "row_enable": "Włącz",
    "hint_ai": "Dopracuj dyktowanie z pomocą AI (porządkowanie, e-mail, odpowiedź…). Aktywny tryb wybierz prawym przyciskiem na panelu lub przyciskiem AI na panelu.",
    "row_provider": "Dostawca",
    "row_api_key": "Klucz API",
    "ph_api_key": "Wklej klucz API",
    "ph_api_key_saved": "•••••••• zapisano, wpisz, aby zastąpić",
    "btn_save": "Zapisz",
    "hint_key_stored": "Klucz przechowywany bezpiecznie w Menedżerze poświadczeń systemu Windows.",
    "btn_clear": "Wyczyść",
    "btn_load": "Wczytaj",
    "btn_loading": "Wczytywanie",
    "row_active_mode": "Aktywny tryb",
    "mode_normal": "Normalny (bez 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": "Porządkowanie",
    "mode_email": "E-mail",
    "mode_reply": "Odpowiedź",
    "mode_todo": "Lista zadań",
    "mode_notes": "Notatki",
    "mode_formal": "Oficjalny",
    "lbl_custom_modes": "Własne tryby",
    "sec_license": "LICENCJA",
    "row_status": "Status",
    "lic_activated": "● Aktywowano",
    "lic_not_activated": "○ Nie aktywowano",
    "btn_activate": "Aktywuj",
    "sec_updates": "AKTUALIZACJE",
    "row_version": "Wersja",
    "btn_check_updates": "Sprawdź aktualizacje",
    "btn_checking": "Sprawdzanie",
    "btn_downloading_pct": "{pct}%  pobieranie…",
    "btn_download_install": "Pobierz i zainstaluj v{version}",
    "btn_reset": "Resetuj",
    "reset_title": "Resetowanie ustawień",
    "reset_question": "Przywrócić wszystkie ustawienia do wartości domyślnych?",
    "dlg_model_dl_title": "Wymagane pobieranie",
    "dlg_model_dl_text": "Wybrany model nie jest jeszcze zainstalowany. VoxCast pobierze około {size} danych mowy, a następnie się przełączy. Rozpocząć pobieranie teraz?",

    # ── Mode editor ─────────────────────────────────────────────────────
    "ph_mode_name": "Nazwa trybu",
    "tip_remove_mode": "Usuń tryb",
    "ph_system_prompt": "Prompt systemowy, mówi AI, jak przekształcić transkrypt.",
    "btn_add_mode": "Dodaj tryb",
    "mode_new": "Nowy tryb",

    # ── Mode menu (panel) ───────────────────────────────────────────────
    "menu_ai_mode": "TRYB AI",
    "menu_ai_mode_off": "TRYB AI  ·  WYŁ.",
    "menu_ai_settings": "Ustawienia…",
    "menu_copy_raw": "Kopiuj oryginalny transkrypt",
    "tray_raw_copied": "Oryginalny transkrypt został skopiowany do schowka.",

    # ── Activation overlay ──────────────────────────────────────────────
    "act_title": "Aktywuj VoxCast",
    "act_intro": "Wpisz swój klucz licencyjny, aby aktywować to urządzenie. Aktywacja to jednorazowy krok online, potem VoxCast działa całkowicie offline.",
    "act_enter_key": "Wpisz swój klucz licencyjny.",
    "act_button": "Aktywuj",
    "act_button_busy": "Aktywowanie…",
    "act_update_available": "Dostępna jest wersja {version}.",
    "act_update_now": "Aktualizuj teraz",
    "act_device": "Urządzenie: ",
    "act_quit": "Zakończ",

    # ── First-run overlay ───────────────────────────────────────────────
    "fr_title": "Konfiguracja VoxCast",
    "fr_pick_language": "Wybierz język rozpoznawania mowy.\nDzięki temu unikniesz wolnego automatycznego wykrywania przy każdym użyciu.",
    "fr_continue": "Dalej",
    "fr_preparing": "Przygotowywanie modeli...",
    "fr_hint_label": "Wskazówka:",
    "status_hw_check": "Sprawdzanie sprzętu...",
    "fr_hw_gpu": "Wykryto kartę graficzną ({vram} GB): zostanie skonfigurowany model {model}.",
    "fr_hw_cpu": "Nie wykryto dedykowanej karty graficznej: zostanie skonfigurowany model {model}.",
    "fr_hint_download": "Modele pobierają się raz i pozostają na Twoim urządzeniu, bez chmury.",
    "fr_hint_hotkey": "Naciśnij Ctrl+Shift+Space, aby zacząć dyktować, naciśnij ponownie, aby zatrzymać.",
    "fr_hint_ai": "Kliknij panel prawym przyciskiem, aby wybrać tryb AI (np. E-mail, Odpowiedź).",
    "fr_hint_dragfile": "Przeciągnij plik na panel, aby zamienić go w Markdown.",
    "fr_hint_audio": "Upuść plik audio (mp3, ogg, m4a…), aby go transkrybować.",
    "fr_hint_explorer": "W Eksploratorze kliknij plik prawym przyciskiem → „Konwertuj na Markdown”.",
    "fr_hint_dock": "Zadokuj panel przy krawędzi ekranu, będzie się chować, aż będzie potrzebny.",
    "fr_hint_settings": "Model, język lub skrót klawiszowy zmienisz w każdej chwili w Ustawieniach.",

    # ── Status messages (Python → panel) ────────────────────────────────
    "status_init_services": "Inicjowanie usług...",
    "status_loading_vad": "Wczytywanie wykrywania aktywności głosowej...",
    "status_loading_model": "Wczytywanie modelu rozpoznawania mowy...",
    "status_init_models": "Inicjowanie modeli...",
    "status_loading": "Wczytywanie modelu...",
    "status_switching_model": "Zmiana modelu...",
    "status_downloading_engine": "Pobieranie silnika rozpoznawania mowy...",
    "status_engine_ready": "Silnik rozpoznawania mowy gotowy",
    "status_downloading_correction": "Pobieranie modelu korekty...",
    "status_correction_ready": "Model korekty pobrany",

    # ── Meeting recording ────────────────────────────────────────────────
    "menu_meeting_start": "Nagraj spotkanie",
    "menu_meeting_stop": "Zatrzymaj nagrywanie spotkania",
    "meeting_consent_title": "Nagrywanie spotkań",
    "meeting_consent_body": "VoxCast nagrywa dźwięk systemowy i Twój mikrofon, dzięki czemu możesz transkrybować rozmowy i spotkania.\n\nUpewnij się, że wszyscy uczestnicy zgadzają się na nagrywanie, w wielu krajach (w tym w Niemczech) nagrywanie rozmowy bez zgody jest przestępstwem.",
    "meeting_consent_accept": "Rozumiem, rozpocznij nagrywanie",
    "meeting_consent_cancel": "Anuluj",
    "status_meeting_recording": "Nagrywanie spotkania",
    "status_meeting_transcribing": "Transkrybowanie spotkania… {pct}%",
    "meeting_done_title": "Transkrypcja spotkania gotowa",
    "meeting_done_body": "Transkrypt został zapisany, kliknij tutaj, aby go otworzyć.",
    "meeting_resume_note": "Znaleziono niedokończone nagranie spotkania, trwa jego transkrypcja.",
    "menu_meeting_folder": "Otwórz folder spotkań",
    "meeting_source_title": "Co nagrywać?",
    "meeting_source_system": "Cały system",
    "meeting_source_empty": "Żadna aplikacja nie odtwarza teraz dźwięku",
    "meeting_app_fallback": "Nagrywanie samej aplikacji nie mogło się rozpocząć, zamiast tego nagrywany jest cały system.",
    "md_meeting_source": "Źródło",
    "meeting_partial_note": "Nagranie zakończyło się przedwcześnie, częściowe nagranie zostało mimo to przetworzone.",
    "meeting_system_silent": "Nie przechwycono dźwięku systemowego, sprawdź urządzenie odtwarzania. Niektóre zestawy słuchawkowe odtwarzają dźwięk w sposób, którego Windows nie może nagrać; pomaga zmiana domyślnego urządzenia wyjściowego.",
    "meeting_summary_failed": "Podsumowanie AI nie powiodło się, transkrypt zapisano bez niego.",
    "err_meeting_folder": "Nie udało się utworzyć folderu spotkań. Sprawdź folder w Ustawieniach.",
    "err_meeting_disk": "Za mało wolnego miejsca na dysku, nagrywanie spotkania zatrzymane.",
    "err_meeting_maxlen": "Osiągnięto maksymalną długość spotkania (4 h), nagrywanie zatrzymane.",
    "err_meeting_capture": "Nagrywanie spotkania nie powiodło się, nie udało się przechwycić dźwięku.",
    "err_meeting_transcribe": "Transkrypcja spotkania nie powiodła się. Plik audio został zachowany, możesz spróbować ponownie.",
    "md_meeting_title": "Spotkanie",
    "md_meeting_date": "Data",
    "md_meeting_duration": "Czas trwania",
    "md_meeting_summary": "Podsumowanie",
    "md_meeting_transcript": "Transkrypt",
    "sec_remote": "Serwer zdalny",
    "row_remote_enable": "Użyj serwera zdalnego",
    "hint_remote": "Uruchom transkrypcję na innym komputerze z mocniejszym GPU lub CPU. Dyktowanie, konwersja plików i spotkania są przetwarzane na serwerze.",
    "hint_recognition_remote": "Rozpoznawanie obsługuje serwer zdalny, dlatego lokalny model poniżej jest wyłączony. Model wybierasz na serwerze.",
    "row_remote_url": "Adres serwera",
    "ph_remote_url": "http://192.168.1.10:8590",
    "row_remote_key": "Klucz API",
    "ph_remote_key": "Wklej klucz API serwera",
    "btn_remote_test": "Testuj połączenie",
    "remote_testing": "Testowanie...",
    "btn_remote_discover": "Znajdź serwer",
    "remote_discovering": "Wyszukiwanie...",
    "remote_discover_none": "Nie znaleziono serwera. Upewnij się, że serwer działa, oba urządzenia są w tej samej sieci, a zapora serwera zezwala na VoxCast Server w sieci lokalnej.",
    "remote_enhance_available": "Ulepszanie AI dostępne",
    "remote_update_available": "Dostępna aktualizacja serwera: {version}",
    "row_tls_mode": "Certyfikat",
    "tls_verify": "Wymagaj ważnego certyfikatu",
    "tls_pinned": "Zaufaj temu serwerowi",
    "tls_insecure": "Zezwól na dowolny certyfikat",
    "btn_trust_cert": "Sprawdź certyfikat",
    "tls_trust_title": "Zaufać temu serwerowi?",
    "tls_trust_body": "Serwer przedstawił ten odcisk certyfikatu. Potwierdź, że pasuje do Twojego serwera, zanim mu zaufasz.",
    "tls_trust_confirm": "Zaufaj",
    "tls_trust_failed": "Nie udało się odczytać certyfikatu serwera. Sprawdź adres i czy HTTPS jest włączone.",
    "tls_insecure_warning": "Połączenie nie jest weryfikowane. Używaj tego tylko w sieci, której ufasz.",
    "row_enhance_source": "Ulepszanie AI",
    "enhance_own": "Mój własny klucz API",
    "enhance_server": "Użyj serwera",
    "hint_enhance_server": "Serwer ulepsza własnym kluczem AI, więc nie musisz tu żadnego wpisywać.",
    "lbl_server_modes": "Tryby firmowe (z serwera)",
    "managed_locked": "Zarządzane przez Twoją organizację",
    "remote_http_warn": "To połączenie nie jest szyfrowane. Używaj go tylko w zaufanej sieci lokalnej.",
    "remote_live_hint": "Napisy na żywo działają na tym urządzeniu; wymagają modelu zainstalowanego lokalnie.",
    "remote_connected": "Połączono: {model} na {where}",
    "remote_on_gpu": "GPU ({vram} GB)",
    "remote_on_cpu": "CPU",
    "err_remote_unreachable": "Nie można połączyć się z serwerem zdalnym. Sprawdź adres i sieć.",
    "err_remote_auth": "Serwer zdalny odrzucił klucz API.",
    "err_remote_busy": "Serwer zdalny jest zajęty. Spróbuj ponownie za chwilę.",
    "err_remote_failed": "Serwer zdalny nie mógł przetworzyć tego dźwięku.",
    "sec_meeting": "SPOTKANIA",
    "row_meeting_mic": "Nagrywaj mikrofon",
    "hint_meeting_mic": "Nagrywa także Twój głos, nie tylko pozostałych uczestników.",
    "row_meeting_language": "Język",
    "lang_meeting_auto": "Wykrywaj automatycznie",
    "row_convert_language": "Język nagrania",
    "lang_convert_auto": "Wykrywaj automatycznie",
    "err_convert_engine_loading": "Silnik mowy wciąż się ładuje. Spróbuj ponownie za chwilę.",
    "err_convert_no_speech": "W tym pliku nie rozpoznano mowy. Nie utworzono pliku Markdown.",
    "err_convert_engine_error": "Silnik mowy zgłosił błąd podczas transkrypcji.",
    "tray_convert_failed": "Nie udało się przekonwertować {name}: {error}",
    "hint_meeting_language": "Automatyczne wykrywanie radzi sobie ze spotkaniami w każdym języku, nawet gdy zmienia się on w trakcie rozmowy. Wybierz język tylko wtedy, gdy wykrywanie zawodzi.",
    "row_meeting_keep": "Zachowaj plik audio",
    "hint_meeting_keep": "Zapisuje nagranie jako plik .wav obok transkryptu.",
    "row_meeting_summary": "Podsumowanie AI",
    "hint_meeting_summary": "Dodaje wygenerowane przez AI podsumowanie na początku transkryptu (wymaga skonfigurowanego ulepszania AI).",
    "hint_meeting_summary_nokey": "Ulepszanie AI nie jest skonfigurowane, podsumowania będą pomijane.",
    "row_meeting_folder": "Zapisuj do",
    "meeting_folder_default": "Dokumenty\\VoxCast\\Meetings",
    "btn_open": "Otwórz",

    # ── Errors / tray (Python) ──────────────────────────────────────────
    "err_audio_lib": "Biblioteka audio niedostępna",
    "err_gpu_oom": "Brak pamięci GPU. Uruchom ponownie w trybie CPU.",
    "err_gpu_fallback": "Karta graficzna niedostępna, działanie na procesorze (wolniej).",
    "err_hotkey_init": "System skrótów klawiszowych nie został zainicjowany",
    "err_mic": "Błąd mikrofonu. Sprawdź urządzenie audio.",
    "err_mic_test_busy": "Nagrywanie już trwa. Zatrzymaj je przed testem mikrofonu.",
    "err_model_switch": "Zmiana modelu nie powiodła się. Spróbuj ponownie.",
    "err_model_download": "Pobieranie modelu mowy nie powiodło się. Sprawdź połączenie z internetem.",
    "err_speech_start": "Nie udało się uruchomić rozpoznawania mowy.",
    "err_transcription": "Transkrypcja nie powiodła się. Spróbuj ponownie.",
    "err_model_missing": "Nie znaleziono modelu mowy. Wybierz model w Ustawieniach.",
    "tray_cpu_fallback": "Nie znaleziono zgodnej karty GPU. Działanie na CPU.\nTranskrypcja będzie wolniejsza niż z akceleracją GPU.",
    "tray_cpu_configured": "Działanie na CPU zgodnie z ustawieniami.",
    "tray_cpu_detected": "Nie wykryto zgodnej karty GPU. Działanie na CPU.\nDla szybszej transkrypcji zalecana jest zgodna karta graficzna.",
    "tray_file_not_found": "Nie znaleziono pliku.",
    "tray_no_supported_files": "Brak obsługiwanych plików do konwersji.",
    "tray_still_starting": "VoxCast wciąż się uruchamia, spróbuj ponownie.",
    "tray_no_output_folder": "Nie ustawiono folderu docelowego, wybierz miejsce zapisu.",
    "tray_context_menu_failed": "Nie udało się zaktualizować menu kontekstowego.",
    "tray_need_api_key": "Najpierw wpisz i zapisz klucz API.",
    "tray_models_load_failed": "Nie udało się wczytać modeli.",
    "tray_show_hide": "Pokaż/Ukryj",

    # ── License (Python user messages) ──────────────────────────────────
    "lic_enter_key": "Wpisz swój klucz licencyjny.",
    "lic_saved_failed": "Aktywowano, ale nie udało się zapisać licencji na tym komputerze.",
    "lic_success": "VoxCast aktywowany. Dziękujemy!",
    "lic_check_failed": "Aktywacja nie powiodła się. Sprawdź swój klucz.",
    "lic_no_server": "Nie można połączyć się z serwerem aktywacji. Sprawdź połączenie z internetem.",
    "lic_unexpected": "Aktywacja niespodziewanie się nie powiodła. Spróbuj ponownie.",

    # ── Updates (Python user messages) ──────────────────────────────────
    "upd_checking": "Sprawdzanie aktualizacji…",
    "upd_latest": "Masz najnowszą wersję.",
    "upd_available": "Dostępna jest wersja {version}.",
    "upd_dialog_title": "Dostępna aktualizacja",
    "upd_whats_new": "Co nowego",
    "upd_required": "Wymagana",
    "upd_no_notes": "Ogólne ulepszenia i poprawki.",
    "upd_later": "Później",
    "upd_install_now": "Pobierz i zainstaluj",
    "upd_install_note": "Aktualizacja automatycznie zastąpi Twoją obecną wersję, nic więcej nie musisz robić.",
    "upd_downloading": "Pobieranie wersji {version}…",
    "upd_failed": "Aktualizacja nie powiodła się. Spróbuj ponownie.",
    "upd_starting_installer": "Uruchamianie instalatora…",
    "upd_installer_failed": "Nie udało się uruchomić instalatora.",
    "upd_err_filename": "Nieoczekiwana nazwa pliku instalatora w manifeście aktualizacji.",
    "upd_err_https": "Pobieranie aktualizacji musi używać HTTPS.",
    "upd_err_response": "Serwer aktualizacji zwrócił nieprawidłową odpowiedź.",
    "upd_err_no_url": "Brak adresu URL pobierania.",
    "upd_err_no_checksum": "W manifeście aktualizacji brakuje sumy kontrolnej. Przerwano.",
    "upd_err_redirect": "Serwer aktualizacji zwrócił nieoczekiwane przekierowanie.",
    "upd_err_integrity": "Pobrany plik nie przeszedł kontroli integralności. Przerwano.",
    "upd_err_check": "Nie udało się sprawdzić aktualizacji: {error}",
    "upd_err_download": "Pobieranie nie powiodło się: {error}",
    "upd_err_save": "Nie udało się zapisać aktualizacji: {error}",
    "upd_err_host": "Odmówiono pobrania aktualizacji z niezaufanego hosta '{host}'.",

    # ── LLM (user messages) ─────────────────────────────────────────────
    # ── Late additions (review sweep) ───────────────────────────────────
    "act_first": "Najpierw aktywuj VoxCast.",
    "llm_enhance_failed": "Ulepszanie AI nie powiodło się: {error}",
    "llm_truncated": "Odpowiedź AI została ucięta, zamiast niej użyto oryginalnego transkryptu.",
    "llm_mode_needs_key": "Wybrano tryb AI, dodaj klucz API w Ustawieniach, aby włączyć ulepszanie.",
    "tt_recording": "Nagrywanie...",
    "tray_saved": "Zapisano: {name}",
    "tray_converted": "Skonwertowano {n} plików na Markdown.",
    "hk_press_key": "Naciśnij klawisz...",
    "hk_acc_record": "Naciśnij klawisze skrótu",
    "no_folder": "Nie wybrano folderu",
    "llm_load_models_ph": "Wczytaj modele →",

    "llm_no_key": "Nie podano klucza API.",
    "llm_no_key_configured": "Nie skonfigurowano klucza API.",
    "llm_bad_key": "Nieprawidłowy lub nieautoryzowany klucz API.",
    "llm_rate_limit": "Osiągnięto limit zapytań. Spróbuj ponownie za chwilę.",
    "llm_provider_down": "Dostawca AI jest tymczasowo niedostępny.",
    "llm_request_failed": "Żądanie nie powiodło się ({code}).",
    "llm_network": "Błąd sieci: {error}",
    "llm_no_model": "Nie znaleziono użytecznego modelu AI dla tego klucza API.",
}
