"""Translations for print dialog.

Supports automatic language detection based on system locale.
"""

import locale
from typing import Dict

# Translation dictionaries for each supported language
TRANSLATIONS = {
    'en': {  # English (US/UK)
        'dialog_title': 'Print',
        'printer_group': 'Printer',
        'print_to_pdf': 'Print to PDF File',
        'type_pdf': 'Type: Save as PDF file',
        'type_default': 'Type: Default Printer',
        'type_network': 'Type: Network Printer',
        'type_local': 'Type: Local Printer',
        'type_printer': 'Type: Printer',
        'page_range_group': 'Page Range',
        'all_pages': 'Print all pages',
        'pages_from': 'Pages from',
        'to': 'to',
        'copies_group': 'Copies',
        'num_copies': 'Number of copies:',
        'cancel': 'Cancel',
        'print': 'Print',
        'save_dialog_title': 'Save PDF As',
        'pdf_files': 'PDF Files (*.pdf);;All Files (*)',
        'error_title': 'Print Error',
        'error_msg': 'An error occurred: {error}',
        'progress_title': 'Printing PDF',
        'progress_message': 'Preparing pages for printing...',
        'pdf_saved': 'PDF Saved',
        'pdf_saved_msg': 'PDF saved successfully to:\n{path}',
        'save_error': 'Save Error',
        'save_error_msg': 'Failed to save PDF:\n{error}',
        'printer_error': 'Printer Error',
        'printer_not_available': 'Selected printer is not available.',
        'missing_dependency': 'Missing Dependency',
        'missing_pikepdf': 'pikepdf is required for PDF export.\nInstall it with: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'PDF Output',
        'save_to_label': 'Save to:',
        'specify_output_path': 'Please specify an output file path.',
        # Process printing messages
        'print_in_progress': 'Print in Progress',
        'print_already_running': 'A print operation is already in progress. Please wait for it to complete.',
        'print_complete': 'Print Complete',
        'print_success': 'PDF printed successfully.',
        'print_status': 'Print Status',
        'print_not_completed': 'Print operation did not complete.',
        'print_error_title': 'Print Error',
        'print_error_msg': 'An error occurred while printing:\n\n{error}',
        'print_cancelled': 'Print cancelled',
        'print_timeout': 'Print operation timed out',
        'print_process_failed': 'Print process failed to start',
        'print_sending': 'Sending data to printer...',
        'rendering_page': 'Rendering page {current} of {total}...',
    },
    'de': {  # German
        'dialog_title': 'Drucken',
        'printer_group': 'Drucker',
        'print_to_pdf': 'Als PDF-Datei speichern',
        'type_pdf': 'Typ: Als PDF-Datei speichern',
        'type_default': 'Typ: Standarddrucker',
        'type_network': 'Typ: Netzwerkdrucker',
        'type_local': 'Typ: Lokaler Drucker',
        'type_printer': 'Typ: Drucker',
        'page_range_group': 'Seitenbereich',
        'all_pages': 'Alle Seiten drucken',
        'pages_from': 'Seiten von',
        'to': 'bis',
        'copies_group': 'Kopien',
        'num_copies': 'Anzahl der Kopien:',
        'cancel': 'Abbrechen',
        'print': 'Drucken',
        'save_dialog_title': 'PDF speichern unter',
        'pdf_files': 'PDF-Dateien (*.pdf);;Alle Dateien (*)',
        'error_title': 'Druckfehler',
        'error_msg': 'Ein Fehler ist aufgetreten: {error}',
        'progress_title': 'PDF wird gedruckt',
        'progress_message': 'Seiten werden vorbereitet...',
        'pdf_saved': 'PDF gespeichert',
        'pdf_saved_msg': 'PDF erfolgreich gespeichert unter:\n{path}',
        'save_error': 'Speicherfehler',
        'save_error_msg': 'PDF konnte nicht gespeichert werden:\n{error}',
        'printer_error': 'Druckerfehler',
        'printer_not_available': 'Ausgewählter Drucker ist nicht verfügbar.',
        'missing_dependency': 'Fehlende Abhängigkeit',
        'missing_pikepdf': 'pikepdf wird für den PDF-Export benötigt.\nInstallieren Sie es mit: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'PDF-Ausgabe',
        'save_to_label': 'Speichern unter:',
        'specify_output_path': 'Bitte geben Sie einen Ausgabedateipfad an.',
        # Process printing messages
        'print_in_progress': 'Druck läuft',
        'print_already_running': 'Ein Druckvorgang läuft bereits. Bitte warten Sie, bis er abgeschlossen ist.',
        'print_complete': 'Druck abgeschlossen',
        'print_success': 'PDF erfolgreich gedruckt.',
        'print_status': 'Druckstatus',
        'print_not_completed': 'Druckvorgang wurde nicht abgeschlossen.',
        'print_error_title': 'Druckfehler',
        'print_error_msg': 'Beim Drucken ist ein Fehler aufgetreten:\n\n{error}',
        'print_cancelled': 'Druck abgebrochen',
        'print_timeout': 'Druckvorgang hat die Zeitüberschreitung überschritten',
        'print_process_failed': 'Druckprozess konnte nicht gestartet werden',
        'print_sending': 'Sende Daten an Drucker...',
        'rendering_page': 'Rendere Seite {current} von {total}...',
    },
    'fr': {  # French
        'dialog_title': 'Imprimer',
        'printer_group': 'Imprimante',
        'print_to_pdf': 'Enregistrer en PDF',
        'type_pdf': 'Type: Enregistrer en PDF',
        'type_default': 'Type: Imprimante par défaut',
        'type_network': 'Type: Imprimante réseau',
        'type_local': 'Type: Imprimante locale',
        'type_printer': 'Type: Imprimante',
        'page_range_group': 'Plage de pages',
        'all_pages': 'Imprimer toutes les pages',
        'pages_from': 'Pages de',
        'to': 'à',
        'copies_group': 'Copies',
        'num_copies': 'Nombre de copies:',
        'cancel': 'Annuler',
        'print': 'Imprimer',
        'save_dialog_title': 'Enregistrer le PDF sous',
        'pdf_files': 'Fichiers PDF (*.pdf);;Tous les fichiers (*)',
        'error_title': "Erreur d'impression",
        'error_msg': 'Une erreur est survenue: {error}',
        'progress_title': 'Impression PDF',
        'progress_message': 'Préparation des pages pour l\'impression...',
        'pdf_saved': 'PDF enregistré',
        'pdf_saved_msg': 'PDF enregistré avec succès dans:\n{path}',
        'save_error': 'Erreur d\'enregistrement',
        'save_error_msg': 'Impossible d\'enregistrer le PDF:\n{error}',
        'printer_error': 'Erreur d\'imprimante',
        'printer_not_available': 'L\'imprimante sélectionnée n\'est pas disponible.',
        'missing_dependency': 'Dépendance manquante',
        'missing_pikepdf': 'pikepdf est requis pour l\'export PDF.\nInstallez-le avec: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'Sortie PDF',
        'save_to_label': 'Enregistrer dans:',
        'specify_output_path': 'Veuillez spécifier un chemin de fichier de sortie.',
        # Process printing messages
        'print_in_progress': 'Impression en cours',
        'print_already_running': 'Une opération d\'impression est déjà en cours. Veuillez attendre qu\'elle se termine.',
        'print_complete': 'Impression terminée',
        'print_success': 'PDF imprimé avec succès.',
        'print_status': 'Statut d\'impression',
        'print_not_completed': 'L\'opération d\'impression ne s\'est pas terminée.',
        'print_error_title': 'Erreur d\'impression',
        'print_error_msg': 'Une erreur s\'est produite lors de l\'impression:\n\n{error}',
        'print_cancelled': 'Impression annulée',
        'print_timeout': 'L\'opération d\'impression a expiré',
        'print_process_failed': 'Le processus d\'impression n\'a pas pu démarrer',
        'print_sending': 'Envoi des données à l\'imprimante...',
        'rendering_page': 'Rendu de la page {current} sur {total}...',
    },
    'es': {  # Spanish
        'dialog_title': 'Imprimir',
        'printer_group': 'Impresora',
        'print_to_pdf': 'Guardar como PDF',
        'type_pdf': 'Tipo: Guardar como PDF',
        'type_default': 'Tipo: Impresora predeterminada',
        'type_network': 'Tipo: Impresora de red',
        'type_local': 'Tipo: Impresora local',
        'type_printer': 'Tipo: Impresora',
        'page_range_group': 'Rango de páginas',
        'all_pages': 'Imprimir todas las páginas',
        'pages_from': 'Páginas desde',
        'to': 'hasta',
        'copies_group': 'Copias',
        'num_copies': 'Número de copias:',
        'cancel': 'Cancelar',
        'print': 'Imprimir',
        'save_dialog_title': 'Guardar PDF como',
        'pdf_files': 'Archivos PDF (*.pdf);;Todos los archivos (*)',
        'error_title': 'Error de impresión',
        'error_msg': 'Ocurrió un error: {error}',
        'progress_title': 'Imprimiendo PDF',
        'progress_message': 'Preparando páginas para imprimir...',
        'pdf_saved': 'PDF guardado',
        'pdf_saved_msg': 'PDF guardado correctamente en:\n{path}',
        'save_error': 'Error al guardar',
        'save_error_msg': 'No se pudo guardar el PDF:\n{error}',
        'printer_error': 'Error de impresora',
        'printer_not_available': 'La impresora seleccionada no está disponible.',
        'missing_dependency': 'Dependencia faltante',
        'missing_pikepdf': 'pikepdf es necesario para exportar PDF.\nInstálelo con: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'Salida PDF',
        'save_to_label': 'Guardar en:',
        'specify_output_path': 'Por favor, especifique una ruta de archivo de salida.',
        # Process printing messages
        'print_in_progress': 'Impresión en curso',
        'print_already_running': 'Ya hay una operación de impresión en curso. Por favor, espere a que se complete.',
        'print_complete': 'Impresión completada',
        'print_success': 'PDF impreso correctamente.',
        'print_status': 'Estado de impresión',
        'print_not_completed': 'La operación de impresión no se completó.',
        'print_error_title': 'Error de impresión',
        'print_error_msg': 'Ocurrió un error al imprimir:\n\n{error}',
        'print_cancelled': 'Impresión cancelada',
        'print_timeout': 'La operación de impresión ha agotado el tiempo de espera',
        'print_process_failed': 'El proceso de impresión no pudo iniciarse',
        'print_sending': 'Enviando datos a la impresora...',
        'rendering_page': 'Renderizando página {current} de {total}...',
    },
    'it': {  # Italian
        'dialog_title': 'Stampa',
        'printer_group': 'Stampante',
        'print_to_pdf': 'Salva come PDF',
        'type_pdf': 'Tipo: Salva come PDF',
        'type_default': 'Tipo: Stampante predefinita',
        'type_network': 'Tipo: Stampante di rete',
        'type_local': 'Tipo: Stampante locale',
        'type_printer': 'Tipo: Stampante',
        'page_range_group': 'Intervallo di pagine',
        'all_pages': 'Stampa tutte le pagine',
        'pages_from': 'Pagine da',
        'to': 'a',
        'copies_group': 'Copie',
        'num_copies': 'Numero di copie:',
        'cancel': 'Annulla',
        'print': 'Stampa',
        'save_dialog_title': 'Salva PDF come',
        'pdf_files': 'File PDF (*.pdf);;Tutti i file (*)',
        'error_title': 'Errore di stampa',
        'error_msg': 'Si è verificato un errore: {error}',
        'progress_title': 'Stampa PDF',
        'progress_message': 'Preparazione pagine per la stampa...',
        'pdf_saved': 'PDF salvato',
        'pdf_saved_msg': 'PDF salvato con successo in:\n{path}',
        'save_error': 'Errore di salvataggio',
        'save_error_msg': 'Impossibile salvare il PDF:\n{error}',
        'printer_error': 'Errore stampante',
        'printer_not_available': 'La stampante selezionata non è disponibile.',
        'missing_dependency': 'Dipendenza mancante',
        'missing_pikepdf': 'pikepdf è necessario per l\'esportazione PDF.\nInstallarlo con: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'Output PDF',
        'save_to_label': 'Salva in:',
        'specify_output_path': 'Si prega di specificare un percorso del file di output.',
        # Process printing messages
        'print_in_progress': 'Stampa in corso',
        'print_already_running': 'Un\'operazione di stampa è già in corso. Si prega di attendere il completamento.',
        'print_complete': 'Stampa completata',
        'print_success': 'PDF stampato con successo.',
        'print_status': 'Stato stampa',
        'print_not_completed': 'L\'operazione di stampa non è stata completata.',
        'print_error_title': 'Errore di stampa',
        'print_error_msg': 'Si è verificato un errore durante la stampa:\n\n{error}',
        'print_cancelled': 'Stampa annullata',
        'print_timeout': 'L\'operazione di stampa è scaduta',
        'print_process_failed': 'Il processo di stampa non è riuscito ad avviarsi',
        'print_sending': 'Invio dati alla stampante...',
        'rendering_page': 'Rendering pagina {current} di {total}...',
    },
    'pt': {  # Portuguese
        'dialog_title': 'Imprimir',
        'printer_group': 'Impressora',
        'print_to_pdf': 'Salvar como PDF',
        'type_pdf': 'Tipo: Salvar como PDF',
        'type_default': 'Tipo: Impressora padrão',
        'type_network': 'Tipo: Impressora de rede',
        'type_local': 'Tipo: Impressora local',
        'type_printer': 'Tipo: Impressora',
        'page_range_group': 'Intervalo de páginas',
        'all_pages': 'Imprimir todas as páginas',
        'pages_from': 'Páginas de',
        'to': 'até',
        'copies_group': 'Cópias',
        'num_copies': 'Número de cópias:',
        'cancel': 'Cancelar',
        'print': 'Imprimir',
        'save_dialog_title': 'Salvar PDF como',
        'pdf_files': 'Arquivos PDF (*.pdf);;Todos os arquivos (*)',
        'error_title': 'Erro de impressão',
        'error_msg': 'Ocorreu um erro: {error}',
        'progress_title': 'Imprimindo PDF',
        'progress_message': 'Preparando páginas para impressão...',
        'pdf_saved': 'PDF salvo',
        'pdf_saved_msg': 'PDF salvo com sucesso em:\n{path}',
        'save_error': 'Erro ao salvar',
        'save_error_msg': 'Falha ao salvar PDF:\n{error}',
        'printer_error': 'Erro de impressora',
        'printer_not_available': 'A impressora selecionada não está disponível.',
        'missing_dependency': 'Dependência ausente',
        'missing_pikepdf': 'pikepdf é necessário para exportação de PDF.\nInstale com: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'Saída PDF',
        'save_to_label': 'Salvar em:',
        'specify_output_path': 'Por favor, especifique um caminho de arquivo de saída.',
        # Process printing messages
        'print_in_progress': 'Impressão em andamento',
        'print_already_running': 'Uma operação de impressão já está em andamento. Por favor, aguarde até que seja concluída.',
        'print_complete': 'Impressão concluída',
        'print_success': 'PDF impresso com sucesso.',
        'print_status': 'Status de impressão',
        'print_not_completed': 'A operação de impressão não foi concluída.',
        'print_error_title': 'Erro de impressão',
        'print_error_msg': 'Ocorreu um erro ao imprimir:\n\n{error}',
        'print_cancelled': 'Impressão cancelada',
        'print_timeout': 'A operação de impressão expirou',
        'print_process_failed': 'O processo de impressão falhou ao iniciar',
        'print_sending': 'Enviando dados para a impressora...',
        'rendering_page': 'Renderizando página {current} de {total}...',
    },
    'nl': {  # Dutch
        'dialog_title': 'Afdrukken',
        'printer_group': 'Printer',
        'print_to_pdf': 'Opslaan als PDF',
        'type_pdf': 'Type: Opslaan als PDF',
        'type_default': 'Type: Standaardprinter',
        'type_network': 'Type: Netwerkprinter',
        'type_local': 'Type: Lokale printer',
        'type_printer': 'Type: Printer',
        'page_range_group': 'Paginabereik',
        'all_pages': 'Alle pagina\'s afdrukken',
        'pages_from': 'Pagina\'s van',
        'to': 'tot',
        'copies_group': 'Exemplaren',
        'num_copies': 'Aantal exemplaren:',
        'cancel': 'Annuleren',
        'print': 'Afdrukken',
        'save_dialog_title': 'PDF opslaan als',
        'pdf_files': 'PDF-bestanden (*.pdf);;Alle bestanden (*)',
        'error_title': 'Afdrukfout',
        'error_msg': 'Er is een fout opgetreden: {error}',
        'progress_title': 'PDF afdrukken',
        'progress_message': 'Pagina\'s voorbereiden voor afdrukken...',
        'pdf_saved': 'PDF opgeslagen',
        'pdf_saved_msg': 'PDF succesvol opgeslagen in:\n{path}',
        'save_error': 'Opslaan mislukt',
        'save_error_msg': 'Kan PDF niet opslaan:\n{error}',
        'printer_error': 'Printerfout',
        'printer_not_available': 'Geselecteerde printer is niet beschikbaar.',
        'missing_dependency': 'Ontbrekende afhankelijkheid',
        'missing_pikepdf': 'pikepdf is vereist voor PDF-export.\nInstalleer met: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'PDF-uitvoer',
        'save_to_label': 'Opslaan naar:',
        'specify_output_path': 'Geef een uitvoerbestandspad op.',
        # Process printing messages
        'print_in_progress': 'Afdrukken bezig',
        'print_already_running': 'Er wordt al een afdrukbewerking uitgevoerd. Wacht tot deze is voltooid.',
        'print_complete': 'Afdrukken voltooid',
        'print_success': 'PDF succesvol afgedrukt.',
        'print_status': 'Afdrukstatus',
        'print_not_completed': 'De afdrukbewerking is niet voltooid.',
        'print_error_title': 'Afdrukfout',
        'print_error_msg': 'Er is een fout opgetreden tijdens het afdrukken:\n\n{error}',
        'print_cancelled': 'Afdrukken geannuleerd',
        'print_timeout': 'De afdrukbewerking is verlopen',
        'print_process_failed': 'Het afdrukproces kon niet worden gestart',
        'print_sending': 'Gegevens verzenden naar printer...',
        'rendering_page': 'Pagina {current} van {total} renderen...',
    },
    'pl': {  # Polish
        'dialog_title': 'Drukuj',
        'printer_group': 'Drukarka',
        'print_to_pdf': 'Zapisz jako PDF',
        'type_pdf': 'Typ: Zapisz jako PDF',
        'type_default': 'Typ: Drukarka domyślna',
        'type_network': 'Typ: Drukarka sieciowa',
        'type_local': 'Typ: Drukarka lokalna',
        'type_printer': 'Typ: Drukarka',
        'page_range_group': 'Zakres stron',
        'all_pages': 'Drukuj wszystkie strony',
        'pages_from': 'Strony od',
        'to': 'do',
        'copies_group': 'Kopie',
        'num_copies': 'Liczba kopii:',
        'cancel': 'Anuluj',
        'print': 'Drukuj',
        'save_dialog_title': 'Zapisz PDF jako',
        'pdf_files': 'Pliki PDF (*.pdf);;Wszystkie pliki (*)',
        'error_title': 'Błąd drukowania',
        'error_msg': 'Wystąpił błąd: {error}',
        'progress_title': 'Drukowanie PDF',
        'progress_message': 'Przygotowywanie stron do druku...',
        'pdf_saved': 'PDF zapisany',
        'pdf_saved_msg': 'PDF pomyślnie zapisany do:\n{path}',
        'save_error': 'Błąd zapisu',
        'save_error_msg': 'Nie udało się zapisać PDF:\n{error}',
        'printer_error': 'Błąd drukarki',
        'printer_not_available': 'Wybrana drukarka jest niedostępna.',
        'missing_dependency': 'Brakująca zależność',
        'missing_pikepdf': 'pikepdf jest wymagany do eksportu PDF.\nZainstaluj za pomocą: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'Wyjście PDF',
        'save_to_label': 'Zapisz do:',
        'specify_output_path': 'Proszę określić ścieżkę pliku wyjściowego.',
        # Process printing messages
        'print_in_progress': 'Drukowanie w toku',
        'print_already_running': 'Operacja drukowania jest już w toku. Proszę poczekać na jej zakończenie.',
        'print_complete': 'Drukowanie zakończone',
        'print_success': 'PDF pomyślnie wydrukowany.',
        'print_status': 'Status drukowania',
        'print_not_completed': 'Operacja drukowania nie została ukończona.',
        'print_error_title': 'Błąd drukowania',
        'print_error_msg': 'Wystąpił błąd podczas drukowania:\n\n{error}',
        'print_cancelled': 'Drukowanie anulowane',
        'print_timeout': 'Limit czasu operacji drukowania został przekroczony',
        'print_process_failed': 'Proces drukowania nie mógł się rozpocząć',
        'print_sending': 'Wysyłanie danych do drukarki...',
        'rendering_page': 'Renderowanie strony {current} z {total}...',
    },
    'cs': {  # Czech
        'dialog_title': 'Tisk',
        'printer_group': 'Tiskárna',
        'print_to_pdf': 'Uložit jako PDF',
        'type_pdf': 'Typ: Uložit jako PDF',
        'type_default': 'Typ: Výchozí tiskárna',
        'type_network': 'Typ: Síťová tiskárna',
        'type_local': 'Typ: Místní tiskárna',
        'type_printer': 'Typ: Tiskárna',
        'page_range_group': 'Rozsah stran',
        'all_pages': 'Tisknout všechny stránky',
        'pages_from': 'Stránky od',
        'to': 'do',
        'copies_group': 'Kopie',
        'num_copies': 'Počet kopií:',
        'cancel': 'Zrušit',
        'print': 'Tisknout',
        'save_dialog_title': 'Uložit PDF jako',
        'pdf_files': 'Soubory PDF (*.pdf);;Všechny soubory (*)',
        'error_title': 'Chyba tisku',
        'error_msg': 'Došlo k chybě: {error}',
        'progress_title': 'Tisk PDF',
        'progress_message': 'Příprava stránek k tisku...',
        'pdf_saved': 'PDF uloženo',
        'pdf_saved_msg': 'PDF úspěšně uloženo do:\n{path}',
        'save_error': 'Chyba při ukládání',
        'save_error_msg': 'Nelze uložit PDF:\n{error}',
        'printer_error': 'Chyba tiskárny',
        'printer_not_available': 'Vybraná tiskárna není k dispozici.',
        'missing_dependency': 'Chybějící závislost',
        'missing_pikepdf': 'pikepdf je vyžadován pro export PDF.\nNainstalujte pomocí: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'Výstup PDF',
        'save_to_label': 'Uložit do:',
        'specify_output_path': 'Prosím zadejte cestu k výstupnímu souboru.',
        'rendering_page': 'Renderování stránky {current} z {total}...',
    },
    'sv': {  # Swedish
        'dialog_title': 'Skriv ut',
        'printer_group': 'Skrivare',
        'print_to_pdf': 'Spara som PDF',
        'type_pdf': 'Typ: Spara som PDF',
        'type_default': 'Typ: Standardskrivare',
        'type_network': 'Typ: Nätverksskrivare',
        'type_local': 'Typ: Lokal skrivare',
        'type_printer': 'Typ: Skrivare',
        'page_range_group': 'Sidintervall',
        'all_pages': 'Skriv ut alla sidor',
        'pages_from': 'Sidor från',
        'to': 'till',
        'copies_group': 'Kopior',
        'num_copies': 'Antal kopior:',
        'cancel': 'Avbryt',
        'print': 'Skriv ut',
        'save_dialog_title': 'Spara PDF som',
        'pdf_files': 'PDF-filer (*.pdf);;Alla filer (*)',
        'error_title': 'Utskriftsfel',
        'error_msg': 'Ett fel uppstod: {error}',
        'progress_title': 'Skriver ut PDF',
        'progress_message': 'Förbereder sidor för utskrift...',
        'pdf_saved': 'PDF sparad',
        'pdf_saved_msg': 'PDF sparad till:\n{path}',
        'save_error': 'Sparfel',
        'save_error_msg': 'Kunde inte spara PDF:\n{error}',
        'printer_error': 'Skrivarfel',
        'printer_not_available': 'Vald skrivare är inte tillgänglig.',
        'missing_dependency': 'Saknad beroende',
        'missing_pikepdf': 'pikepdf krävs för PDF-export.\nInstallera med: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'PDF-utdata',
        'save_to_label': 'Spara till:',
        'specify_output_path': 'Vänligen ange en utdatafilsökväg.',
        'rendering_page': 'Renderar sida {current} av {total}...',
    },
    'da': {  # Danish
        'dialog_title': 'Udskriv',
        'printer_group': 'Printer',
        'print_to_pdf': 'Gem som PDF',
        'type_pdf': 'Type: Gem som PDF',
        'type_default': 'Type: Standardprinter',
        'type_network': 'Type: Netværksprinter',
        'type_local': 'Type: Lokal printer',
        'type_printer': 'Type: Printer',
        'page_range_group': 'Sideområde',
        'all_pages': 'Udskriv alle sider',
        'pages_from': 'Sider fra',
        'to': 'til',
        'copies_group': 'Kopier',
        'num_copies': 'Antal kopier:',
        'cancel': 'Annuller',
        'print': 'Udskriv',
        'save_dialog_title': 'Gem PDF som',
        'pdf_files': 'PDF-filer (*.pdf);;Alle filer (*)',
        'error_title': 'Udskrivningsfejl',
        'error_msg': 'Der opstod en fejl: {error}',
        'progress_title': 'Udskriver PDF',
        'progress_message': 'Forbereder sider til udskrivning...',
        'pdf_saved': 'PDF gemt',
        'pdf_saved_msg': 'PDF gemt til:\n{path}',
        'save_error': 'Gemfejl',
        'save_error_msg': 'Kunne ikke gemme PDF:\n{error}',
        'printer_error': 'Printerfejl',
        'printer_not_available': 'Valgte printer er ikke tilgængelig.',
        'missing_dependency': 'Manglende afhængighed',
        'missing_pikepdf': 'pikepdf er påkrævet til PDF-eksport.\nInstaller med: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'PDF-output',
        'save_to_label': 'Gem til:',
        'specify_output_path': 'Angiv venligst en outputfilsti.',
        'rendering_page': 'Renderer side {current} af {total}...',
    },
    'no': {  # Norwegian
        'dialog_title': 'Skriv ut',
        'printer_group': 'Skriver',
        'print_to_pdf': 'Lagre som PDF',
        'type_pdf': 'Type: Lagre som PDF',
        'type_default': 'Type: Standardskriver',
        'type_network': 'Type: Nettverksskriver',
        'type_local': 'Type: Lokal skriver',
        'type_printer': 'Type: Skriver',
        'page_range_group': 'Sideområde',
        'all_pages': 'Skriv ut alle sider',
        'pages_from': 'Sider fra',
        'to': 'til',
        'copies_group': 'Kopier',
        'num_copies': 'Antall kopier:',
        'cancel': 'Avbryt',
        'print': 'Skriv ut',
        'save_dialog_title': 'Lagre PDF som',
        'pdf_files': 'PDF-filer (*.pdf);;Alle filer (*)',
        'error_title': 'Utskriftsfeil',
        'error_msg': 'Det oppstod en feil: {error}',
        'progress_title': 'Skriver ut PDF',
        'progress_message': 'Forbereder sider for utskrift...',
        'pdf_saved': 'PDF lagret',
        'pdf_saved_msg': 'PDF lagret til:\n{path}',
        'save_error': 'Lagringsfeil',
        'save_error_msg': 'Kunne ikke lagre PDF:\n{error}',
        'printer_error': 'Skriverfeil',
        'printer_not_available': 'Valgt skriver er ikke tilgjengelig.',
        'missing_dependency': 'Manglende avhengighet',
        'missing_pikepdf': 'pikepdf er nødvendig for PDF-eksport.\nInstaller med: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'PDF-utdata',
        'save_to_label': 'Lagre til:',
        'specify_output_path': 'Vennligst oppgi en utdatafilbane.',
        'rendering_page': 'Gjengir side {current} av {total}...',
    },
    'fi': {  # Finnish
        'dialog_title': 'Tulosta',
        'printer_group': 'Tulostin',
        'print_to_pdf': 'Tallenna PDF-tiedostoksi',
        'type_pdf': 'Tyyppi: Tallenna PDF-tiedostoksi',
        'type_default': 'Tyyppi: Oletustulostin',
        'type_network': 'Tyyppi: Verkkotulostin',
        'type_local': 'Tyyppi: Paikallinen tulostin',
        'type_printer': 'Tyyppi: Tulostin',
        'page_range_group': 'Sivualue',
        'all_pages': 'Tulosta kaikki sivut',
        'pages_from': 'Sivut',
        'to': '-',
        'copies_group': 'Kopiot',
        'num_copies': 'Kopioiden määrä:',
        'cancel': 'Peruuta',
        'print': 'Tulosta',
        'save_dialog_title': 'Tallenna PDF nimellä',
        'pdf_files': 'PDF-tiedostot (*.pdf);;Kaikki tiedostot (*)',
        'error_title': 'Tulostusvirhe',
        'error_msg': 'Tapahtui virhe: {error}',
        'progress_title': 'Tulostetaan PDF',
        'progress_message': 'Valmistellaan sivuja tulostusta varten...',
        'pdf_saved': 'PDF tallennettu',
        'pdf_saved_msg': 'PDF tallennettu kohteeseen:\n{path}',
        'save_error': 'Tallennusvirhe',
        'save_error_msg': 'PDF:n tallennus epäonnistui:\n{error}',
        'printer_error': 'Tulostinvirhe',
        'printer_not_available': 'Valittu tulostin ei ole käytettävissä.',
        'missing_dependency': 'Puuttuva riippuvuus',
        'missing_pikepdf': 'pikepdf vaaditaan PDF-vientiin.\nAsenna: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'PDF-tuloste',
        'save_to_label': 'Tallenna kohteeseen:',
        'specify_output_path': 'Anna tulostustiedoston polku.',
        'rendering_page': 'Renderöidään sivu {current}/{total}...',
    },
    'el': {  # Greek
        'dialog_title': 'Εκτύπωση',
        'printer_group': 'Εκτυπωτής',
        'print_to_pdf': 'Αποθήκευση ως PDF',
        'type_pdf': 'Τύπος: Αποθήκευση ως PDF',
        'type_default': 'Τύπος: Προεπιλεγμένος εκτυπωτής',
        'type_network': 'Τύπος: Εκτυπωτής δικτύου',
        'type_local': 'Τύπος: Τοπικός εκτυπωτής',
        'type_printer': 'Τύπος: Εκτυπωτής',
        'page_range_group': 'Εύρος σελίδων',
        'all_pages': 'Εκτύπωση όλων των σελίδων',
        'pages_from': 'Σελίδες από',
        'to': 'έως',
        'copies_group': 'Αντίγραφα',
        'num_copies': 'Αριθμός αντιγράφων:',
        'cancel': 'Ακύρωση',
        'print': 'Εκτύπωση',
        'save_dialog_title': 'Αποθήκευση PDF ως',
        'pdf_files': 'Αρχεία PDF (*.pdf);;Όλα τα αρχεία (*)',
        'error_title': 'Σφάλμα εκτύπωσης',
        'error_msg': 'Προέκυψε σφάλμα: {error}',
        'progress_title': 'Εκτύπωση PDF',
        'progress_message': 'Προετοιμασία σελίδων για εκτύπωση...',
        'pdf_saved': 'PDF αποθηκεύτηκε',
        'pdf_saved_msg': 'Το PDF αποθηκεύτηκε επιτυχώς στο:\n{path}',
        'save_error': 'Σφάλμα αποθήκευσης',
        'save_error_msg': 'Αποτυχία αποθήκευσης PDF:\n{error}',
        'printer_error': 'Σφάλμα εκτυπωτή',
        'printer_not_available': 'Ο επιλεγμένος εκτυπωτής δεν είναι διαθέσιμος.',
        'missing_dependency': 'Λείπει εξάρτηση',
        'missing_pikepdf': 'Απαιτείται το pikepdf για εξαγωγή PDF.\nΕγκαταστήστε με: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'Έξοδος PDF',
        'save_to_label': 'Αποθήκευση σε:',
        'specify_output_path': 'Παρακαλώ καθορίστε μια διαδρομή αρχείου εξόδου.',
        'rendering_page': 'Απόδοση σελίδας {current} από {total}...',
    },
    'uk': {  # Ukrainian
        'dialog_title': 'Друк',
        'printer_group': 'Принтер',
        'print_to_pdf': 'Зберегти як PDF',
        'type_pdf': 'Тип: Зберегти як PDF',
        'type_default': 'Тип: Принтер за замовчуванням',
        'type_network': 'Тип: Мережевий принтер',
        'type_local': 'Тип: Локальний принтер',
        'type_printer': 'Тип: Принтер',
        'page_range_group': 'Діапазон сторінок',
        'all_pages': 'Друкувати всі сторінки',
        'pages_from': 'Сторінки з',
        'to': 'до',
        'copies_group': 'Копії',
        'num_copies': 'Кількість копій:',
        'cancel': 'Скасувати',
        'print': 'Друкувати',
        'save_dialog_title': 'Зберегти PDF як',
        'pdf_files': 'Файли PDF (*.pdf);;Усі файли (*)',
        'error_title': 'Помилка друку',
        'error_msg': 'Сталася помилка: {error}',
        'progress_title': 'Друк PDF',
        'progress_message': 'Підготовка сторінок до друку...',
        'pdf_saved': 'PDF збережено',
        'pdf_saved_msg': 'PDF успішно збережено в:\n{path}',
        'save_error': 'Помилка збереження',
        'save_error_msg': 'Не вдалося зберегти PDF:\n{error}',
        'printer_error': 'Помилка принтера',
        'printer_not_available': 'Вибраний принтер недоступний.',
        'missing_dependency': 'Відсутня залежність',
        'missing_pikepdf': 'pikepdf потрібен для експорту PDF.\nВстановіть за допомогою: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'Вивід PDF',
        'save_to_label': 'Зберегти в:',
        'specify_output_path': 'Будь ласка, вкажіть шлях до вихідного файлу.',
        'rendering_page': 'Рендеринг сторінки {current} з {total}...',
    },
    'hi': {  # Hindi (Indian)
        'dialog_title': 'प्रिंट करें',
        'printer_group': 'प्रिंटर',
        'print_to_pdf': 'PDF के रूप में सहेजें',
        'type_pdf': 'प्रकार: PDF के रूप में सहेजें',
        'type_default': 'प्रकार: डिफ़ॉल्ट प्रिंटर',
        'type_network': 'प्रकार: नेटवर्क प्रिंटर',
        'type_local': 'प्रकार: स्थानीय प्रिंटर',
        'type_printer': 'प्रकार: प्रिंटर',
        'page_range_group': 'पृष्ठ श्रेणी',
        'all_pages': 'सभी पृष्ठ प्रिंट करें',
        'pages_from': 'पृष्ठ से',
        'to': 'तक',
        'copies_group': 'प्रतियाँ',
        'num_copies': 'प्रतियों की संख्या:',
        'cancel': 'रद्द करें',
        'print': 'प्रिंट करें',
        'save_dialog_title': 'PDF को इस रूप में सहेजें',
        'pdf_files': 'PDF फाइलें (*.pdf);;सभी फाइलें (*)',
        'error_title': 'प्रिंट त्रुटि',
        'error_msg': 'एक त्रुटि हुई: {error}',
        'progress_title': 'PDF प्रिंट हो रहा है',
        'progress_message': 'प्रिंटिंग के लिए पृष्ठ तैयार किए जा रहे हैं...',
        'pdf_saved': 'PDF सहेजा गया',
        'pdf_saved_msg': 'PDF सफलतापूर्वक यहां सहेजा गया:\n{path}',
        'save_error': 'सहेजने में त्रुटि',
        'save_error_msg': 'PDF सहेजने में विफल:\n{error}',
        'printer_error': 'प्रिंटर त्रुटि',
        'printer_not_available': 'चयनित प्रिंटर उपलब्ध नहीं है।',
        'missing_dependency': 'लापता निर्भरता',
        'missing_pikepdf': 'PDF निर्यात के लिए pikepdf आवश्यक है।\nइसे स्थापित करें: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'PDF आउटपुट',
        'save_to_label': 'इसमें सहेजें:',
        'specify_output_path': 'कृपया एक आउटपुट फ़ाइल पथ निर्दिष्ट करें।',
        'rendering_page': 'पृष्ठ {current} का {total} रेंडर हो रहा है...',
    },
    'ro': {  # Romanian
        'dialog_title': 'Imprimare',
        'printer_group': 'Imprimantă',
        'print_to_pdf': 'Salvare ca PDF',
        'type_pdf': 'Tip: Salvare ca PDF',
        'type_default': 'Tip: Imprimantă implicită',
        'type_network': 'Tip: Imprimantă de rețea',
        'type_local': 'Tip: Imprimantă locală',
        'type_printer': 'Tip: Imprimantă',
        'page_range_group': 'Interval pagini',
        'all_pages': 'Imprimă toate paginile',
        'pages_from': 'Pagini de la',
        'to': 'până la',
        'copies_group': 'Copii',
        'num_copies': 'Număr de copii:',
        'cancel': 'Anulare',
        'print': 'Imprimare',
        'save_dialog_title': 'Salvare PDF ca',
        'pdf_files': 'Fișiere PDF (*.pdf);;Toate fișierele (*)',
        'error_title': 'Eroare la imprimare',
        'error_msg': 'A apărut o eroare: {error}',
        'progress_title': 'Se imprimă PDF',
        'progress_message': 'Se pregătesc paginile pentru imprimare...',
        'pdf_saved': 'PDF salvat',
        'pdf_saved_msg': 'PDF salvat cu succes în:\n{path}',
        'save_error': 'Eroare la salvare',
        'save_error_msg': 'Nu s-a putut salva PDF:\n{error}',
        'printer_error': 'Eroare imprimantă',
        'printer_not_available': 'Imprimanta selectată nu este disponibilă.',
        'missing_dependency': 'Dependență lipsă',
        'missing_pikepdf': 'pikepdf este necesar pentru exportul PDF.\nInstalați cu: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'Ieșire PDF',
        'save_to_label': 'Salvare în:',
        'specify_output_path': 'Vă rugăm să specificați o cale a fișierului de ieșire.',
        'rendering_page': 'Randare pagină {current} din {total}...',
    },
    'hu': {  # Hungarian
        'dialog_title': 'Nyomtatás',
        'printer_group': 'Nyomtató',
        'print_to_pdf': 'Mentés PDF-ként',
        'type_pdf': 'Típus: Mentés PDF-ként',
        'type_default': 'Típus: Alapértelmezett nyomtató',
        'type_network': 'Típus: Hálózati nyomtató',
        'type_local': 'Típus: Helyi nyomtató',
        'type_printer': 'Típus: Nyomtató',
        'page_range_group': 'Oldaltartomány',
        'all_pages': 'Minden oldal nyomtatása',
        'pages_from': 'Oldalak ettől',
        'to': 'eddig',
        'copies_group': 'Példányok',
        'num_copies': 'Példányok száma:',
        'cancel': 'Mégse',
        'print': 'Nyomtatás',
        'save_dialog_title': 'PDF mentése másként',
        'pdf_files': 'PDF fájlok (*.pdf);;Minden fájl (*)',
        'error_title': 'Nyomtatási hiba',
        'error_msg': 'Hiba történt: {error}',
        'progress_title': 'PDF nyomtatása',
        'progress_message': 'Oldalak előkészítése nyomtatáshoz...',
        'pdf_saved': 'PDF mentve',
        'pdf_saved_msg': 'PDF sikeresen mentve ide:\n{path}',
        'save_error': 'Mentési hiba',
        'save_error_msg': 'Nem sikerült menteni a PDF-et:\n{error}',
        'printer_error': 'Nyomtatóhiba',
        'printer_not_available': 'A kiválasztott nyomtató nem érhető el.',
        'missing_dependency': 'Hiányzó függőség',
        'missing_pikepdf': 'A pikepdf szükséges a PDF exporthoz.\nTelepítse: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'PDF kimenet',
        'save_to_label': 'Mentés ide:',
        'specify_output_path': 'Kérjük, adjon meg egy kimeneti fájl elérési utat.',
        'rendering_page': 'Renderelés: {current}. oldal / {total}...',
    },
    'bg': {  # Bulgarian
        'dialog_title': 'Печат',
        'printer_group': 'Принтер',
        'print_to_pdf': 'Запазване като PDF',
        'type_pdf': 'Тип: Запазване като PDF',
        'type_default': 'Тип: Принтер по подразбиране',
        'type_network': 'Тип: Мрежов принтер',
        'type_local': 'Тип: Локален принтер',
        'type_printer': 'Тип: Принтер',
        'page_range_group': 'Диапазон от страници',
        'all_pages': 'Печат на всички страници',
        'pages_from': 'Страници от',
        'to': 'до',
        'copies_group': 'Копия',
        'num_copies': 'Брой копия:',
        'cancel': 'Отказ',
        'print': 'Печат',
        'save_dialog_title': 'Запазване на PDF като',
        'pdf_files': 'PDF файлове (*.pdf);;Всички файлове (*)',
        'error_title': 'Грешка при печат',
        'error_msg': 'Възникна грешка: {error}',
        'progress_title': 'Печат на PDF',
        'progress_message': 'Подготовка на страници за печат...',
        'pdf_saved': 'PDF запазен',
        'pdf_saved_msg': 'PDF успешно запазен в:\n{path}',
        'save_error': 'Грешка при запазване',
        'save_error_msg': 'Неуспешно запазване на PDF:\n{error}',
        'printer_error': 'Грешка на принтера',
        'printer_not_available': 'Избраният принтер не е наличен.',
        'missing_dependency': 'Липсваща зависимост',
        'missing_pikepdf': 'pikepdf е необходим за експорт на PDF.\nИнсталирайте с: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'PDF изход',
        'save_to_label': 'Запазване в:',
        'specify_output_path': 'Моля, посочете път на изходен файл.',
        'rendering_page': 'Рендериране на страница {current} от {total}...',
    },
    'hr': {  # Croatian
        'dialog_title': 'Ispis',
        'printer_group': 'Pisač',
        'print_to_pdf': 'Spremi kao PDF',
        'type_pdf': 'Vrsta: Spremi kao PDF',
        'type_default': 'Vrsta: Zadani pisač',
        'type_network': 'Vrsta: Mrežni pisač',
        'type_local': 'Vrsta: Lokalni pisač',
        'type_printer': 'Vrsta: Pisač',
        'page_range_group': 'Raspon stranica',
        'all_pages': 'Ispiši sve stranice',
        'pages_from': 'Stranice od',
        'to': 'do',
        'copies_group': 'Kopije',
        'num_copies': 'Broj kopija:',
        'cancel': 'Odustani',
        'print': 'Ispiši',
        'save_dialog_title': 'Spremi PDF kao',
        'pdf_files': 'PDF datoteke (*.pdf);;Sve datoteke (*)',
        'error_title': 'Greška pri ispisu',
        'error_msg': 'Došlo je do greške: {error}',
        'progress_title': 'Ispis PDF-a',
        'progress_message': 'Priprema stranica za ispis...',
        'pdf_saved': 'PDF spremljen',
        'pdf_saved_msg': 'PDF uspješno spremljen u:\n{path}',
        'save_error': 'Greška pri spremanju',
        'save_error_msg': 'Neuspješno spremanje PDF-a:\n{error}',
        'printer_error': 'Greška pisača',
        'printer_not_available': 'Odabrani pisač nije dostupan.',
        'missing_dependency': 'Nedostaje ovisnost',
        'missing_pikepdf': 'pikepdf je potreban za izvoz PDF-a.\nInstalirajte s: pip install \'pdfjs-viewer-pyside6[qt-print]\'',
        'pdf_output_group': 'PDF izlaz',
        'save_to_label': 'Spremi u:',
        'specify_output_path': 'Molimo navedite putanju izlazne datoteke.',
        'rendering_page': 'Renderiranje stranice {current} od {total}...',
    },
}


def get_system_language() -> str:
    """Detect system language from locale.

    Returns:
        Language code (e.g., 'de', 'fr', 'en')
    """
    try:
        # Get system locale
        system_locale = locale.getdefaultlocale()[0]

        if system_locale:
            # Extract language code (first two characters)
            lang_code = system_locale[:2].lower()

            # Check if we have translations for this language
            if lang_code in TRANSLATIONS:
                return lang_code
    except Exception:
        pass

    # Default to English
    return 'en'

class SafeDict(dict):
    def __missing__(self, key):
        return "Translation missing"
    
def get_translation(lang: str = None) -> Dict[str, str]:
    """Get translation dictionary for specified language.

    Args:
        lang: Language code (e.g., 'de', 'fr'). If None, uses system language.

    Returns:
        Translation dictionary
    """
    if lang is None:
        lang = get_system_language()

    # Pick the correct translation dict (fallback to English)
    base = TRANSLATIONS.get(lang, TRANSLATIONS['en'])

    # Wrap it in SafeDict
    return SafeDict(base)