""" Translations for the Excel Filter GUI Supports English and German languages using JSON files for better maintainability """ import json import os from pathlib import Path class Translations: """ Translation manager for the Excel Filter GUI Loads translations from JSON files for better maintainability and collaboration """ def __init__(self, language="de"): """ Initialize translations with default language Args: language: Default language code ('en' or 'de') """ self.current_language = language self.translations = {} # Load translations from JSON files self.load_translations() def load_translations(self): """ Load translation files from the locales directory """ import sys # Determine the base path for resources if getattr(sys, 'frozen', False): # If the application is run as a bundle, the PyInstaller bootloader # extends the sys module by a flag frozen=True and sets the app # path into variable _MEIPASS'. base_path = Path(sys._MEIPASS) else: base_path = Path(__file__).parent locales_dir = base_path / "locales" # Create locales directory if it doesn't exist and we are not frozen # (cannot create files in _MEIPASS usually, or it's temporary) if not getattr(sys, 'frozen', False): locales_dir.mkdir(exist_ok=True) # Load each language file for lang_code in ["en", "de"]: lang_file = locales_dir / f"{lang_code}.json" if lang_file.exists(): try: with open(lang_file, 'r', encoding='utf-8') as f: self.translations[lang_code] = json.load(f) except Exception as e: print(f"Error loading {lang_file}: {e}") self.translations[lang_code] = {} else: # Create default language file if it doesn't exist self.create_default_translations(lang_code, lang_file) def create_default_translations(self, lang_code, lang_file): """ Create default translation files """ if lang_code == "en": translations = self.get_english_translations() else: translations = self.get_german_translations() self.translations[lang_code] = translations # Save to file try: with open(lang_file, 'w', encoding='utf-8') as f: json.dump(translations, f, indent=2, ensure_ascii=False) except Exception as e: print(f"Error creating {lang_file}: {e}") def get_english_translations(self): """ Get default English translations """ return { "app_title": "Excel Filter Tool", "tab_config": "Configuration", "tab_execution": "Execution", "tab_regex_builder": "Regex Builder", "tab_help": "Help", "config_section": "Configuration", "load_button": "Load", "save_button": "Save", "input_file": "Input file:", "output_file": "Output file:", "browse_button": "Browse...", "worksheet": "Worksheet:", "process_button": "🚀 PROCESS", "status_ready": "Ready", "success": "Success", "error": "Error", "language": "Language:", "english": "English", "german": "German", "help_content": "\nExcel Filter Tool\n\nFUNCTION\n--------------------------\nThe Excel Filter Tool is a data analysis and filtering tool for Excel files.\nIt enables automatic extraction, filtering, and transformation of data based on configurable search criteria.\n\nMain features:\n• Intelligent text search using regex patterns\n• Numeric filtering (greater/less than, between values)\n• Column-based filtering\n\nWORKFLOW\n----------------------------------------\nThe workflow is divided into four main phases, each with its own tabs:\n\n1. CONFIGURATION\n- Select the input Excel file\n- Specify the output file\n- Select the worksheet to filter\n- Configure filter criteria (regex and/or numeric)\n- Select columns to be included\n- Save/load configurations for recurring tasks\n\n2. PATTERN CREATION (Regex-Builder Tab)\n- Use the visual regex builder for easy pattern creation\n- Select from predefined components (text, numbers, special characters)\n- Define quantities (once, multiple times, optional)\n- Add optional anchors and groups\n- Test patterns with sample texts\n- Manage stored patterns\n\n3. EXECUTION\n- Review the command to execute before processing\n- Start the analysis\n- Track progress in real time\n- Automatic opening of the result file\n\nADVANCED CONFIGURATION OPTIONS\n----------------------------------\n\nRegex Filtering (Standard Mode)\n- Search for text patterns with full regex support\n- Support for complex search patterns\n- Word boundaries, case sensitivity, special characters\n\nNumeric Filtering\n- Filter by numeric values (greater/less than)\n- Range filtering (between values)\n- Cross-column numeric search\n\nColumn-Based Filtering\n- Selection of specific columns to search\n- Automatic column detection from Excel files\n- Individual column selection for targeted search\n\nCONFIGURATION MANAGEMENT\n--------------------------\n• Save/load configurations for recurring tasks\n• Personal pattern library with custom regex patterns\n• Automatic saving of recently used file paths\n• Restoration of previous work sessions\n", # Config Tab "tooltip_config_section": "You can save and load configurations instead of entering everything every time.", "enable_regex": "Enable Regex Filter", "tooltip_enable_regex": "If enabled, regex patterns are used for filtering", "regex_options": " Regex Options ", "regex_pattern": "Regex Pattern:", "preset_patterns": "Preset Patterns:", "apply_regex_column": "Apply Regex to Column:", "all_columns": "All Columns", "manage_patterns": "Manage Patterns...", "enable_numeric": "Enable Numeric Filter", "numeric_filters": "Numeric Filters", "column": "Column:", "comparison": "Comparison:", "value": "Value:", "regex_builder_info": "Custom patterns for filtering can be created in the Regex Builder.", "enable_column_selection": "Enable Column Selection", "column_selection": "Column Selection", "select_all": "Select All", "deselect_all": "Deselect All", "proceed_to_execution": "Proceed to Execution", "msg_no_regex_copy": "No regex pattern used - only selected columns will be copied", "msg_warn_no_selection": "Warning: No regex pattern and no columns selected - all data will be copied", "msg_copy_all": "Copying all columns", "msg_copy_selected": "Copying selected columns: {}", "msg_written_success": "Successfully written: {}", "msg_ask_open": "Do you want to open the output file?", "msg_process_success": "Processing completed successfully", "msg_process_failed": "Processing failed", "numeric_invalid": "❌ Invalid numeric value", "numeric_incomplete": "Configuration incomplete", "filter_desc": "Filter: {} {} {}", # Execution Tab "ready_to_execute": "Ready to execute...", "status_ready": "Ready", "command_to_execute": "Command to Execute", "execute_button": "EXECUTE", "activity_log": "Activity Log", "clear_log": "Clear", "save_log": "Save", "log_cleared": "Log cleared", "ready_for_execution": "Excel Filter ready for execution", "configure_and_execute": "Configure settings and click 'EXECUTE'", "error_main_gui_not_connected": "Error: Main GUI not connected", "input_file_label": "Input File:", "output_file_label": "Output File:", "search_pattern_label": "Search Pattern:", "worksheet_label": "Worksheet:", "columns_label": "Columns:", "numeric_filter_label": "Numeric Filter: {column} {operator} {value}", "not_selected": "(not selected)", "not_specified": "(not specified)", "more_columns": "(+{} more)", "error_updating_command_display": "Error updating command display: {error}", "execution_running": "Running...", "waiting": "WAITING...", "execution_started": "▶️ Execution started", "execution_completed": "✅ Execution completed successfully", "execution_failed": "❌ Execution failed with errors", "log_saved": "💾 Log saved: {file}", # Regex Builder Tab "tab_builder": "🧱 Block Builder", "tab_tester": "🧪 Tester", "tab_examples": "📚 Examples", "step_1": "📝 Step 1: Search Character", "step_2": "🔢 Step 2: How often?", "step_3": "⚙️ Step 3: Options", "btn_letters": "🔤 Letters", "desc_letters": "a-z, A-Z", "btn_digits": "🔢 Digits", "desc_digits": "0-9", "btn_alphanum": "🔤🔢 Alphanum.", "desc_alphanum": "Letters+Digits", "btn_any": "❓ Any", "desc_any": "Any Character", "btn_custom": "📝 Custom Text", "desc_custom": "Your Text", "btn_special": "⚙️ Special", "desc_special": "Punctuation", "btn_once": "🎯 1-time", "desc_once": "Exactly once", "btn_one_plus": "➕ 1+ times", "desc_one_plus": "At least 1-time", "btn_zero_one": "❓ 0-1 times", "desc_zero_one": "Optional", "btn_zero_plus": "♾️ 0+ times", "desc_zero_plus": "Any number of times", "btn_n_times": "📏 N-times", "desc_n_times": "Exactly N-times", "btn_m_n_times": "📊 M-N times", "desc_m_n_times": "M to N-times", "btn_start": "^ Start", "desc_start": "Line start", "btn_end": "$ End", "desc_end": "Line end", "btn_word": "\\b Word", "desc_word": "Word boundary", "btn_group": "( ) Group", "desc_group": "Grouping", "btn_or": "| OR", "desc_or": "Alternative", "btn_alt": "(?: ) Alt.", "desc_alt": "Non-capturing group", "preview": "👀 Preview", "selection": "Selection:", "btn_add": "➕ Add", "btn_reset": "🔄 Reset", "regex_result": "🎯 Regex Pattern", "btn_manage": "📝 Manage Patterns", "btn_save_preset": "💾 Save as Pattern", "btn_copy": "📋 Copy", "btn_reset_pattern": "🔄 Reset Pattern", "btn_undo": "↶ Undo", "btn_redo": "↷ Redo", "btn_apply": "💾 Apply to Main", "btn_test": "🧪 Test", "test_input": "Enter Test Text:", "test_text_frame": "📝 Test Text", "test_pattern_frame": "🔍 Regex Pattern", "btn_load_example": "📋 Load Example", "result_label": "Result:", "matches_label": "Found Matches:", "common_examples": "📚 Common Regex Examples", "msg_pattern_applied": "Regex pattern applied to main window!", "msg_main_not_avail": "Main window reference not available. Copy pattern manually.", "msg_no_pattern_apply": "No regex pattern available to apply", "msg_copied": "Regex pattern copied to clipboard!", "msg_no_pattern_copy": "No regex pattern available to copy", "msg_no_undo": "No more undo actions available", "msg_no_redo": "No more redo actions available", "msg_enter_pattern": "❌ Please enter a regex pattern", "msg_enter_text": "❌ Please enter a test text", "msg_pattern_found": "✅ Pattern found! {} matches ({} unique)", "msg_no_matches": "❌ No matches found", "msg_invalid_regex": "❌ Invalid regex pattern: {}", "msg_example_loaded": "Example loaded - click 'Test'", "builder_desc_letters": "Letters (a-z, A-Z)", "builder_desc_digits": "Digits (0-9)", "builder_desc_alphanum": "Letters and Digits", "builder_desc_any": "Any character", "builder_desc_custom": "The text: '{}'", "builder_desc_custom_generic": "Your custom text", "builder_desc_special": "Special characters (space, dot, comma, etc.)", "builder_desc_once": "appears exactly once", "builder_desc_one_plus": "appears once or more", "builder_desc_zero_one": "is optional (0 or 1 time)", "builder_desc_zero_plus": "appears any number of times (0 or more)", "builder_desc_n_times": "appears exactly {} times", "builder_desc_m_n_times": "appears {} to {} times", "builder_desc_start": "at line start", "builder_desc_end": "at line end", "builder_desc_word": "as whole word", "builder_desc_or": "with alternatives", "default_test_text": "Sample text with error and warning 123 numbers and email: test@example.com", "default_result": "Test result appears here...", "no_matches": "No matches", "auto_desc": "Description automatically generated...", "select_char_first": "Select a character type first...", "enter_name": "Enter name", "save_pattern": "Save Pattern", "name_for_pattern": "Name for new pattern:", "msg_save_success": "Pattern '{}' saved successfully", "overwrite_confirm": "Pattern '{}' already exists. Overwrite?", # Additional keys needed for gui_new.py "errors_and_warnings": "Errors and Warnings", "errors_only": "Errors only", "warnings_only": "Warnings only", "critical_errors": "Critical Errors", "numbers_100_199": "Numbers 100-199", "email_addresses": "E-mail addresses", "phone_numbers": "Phone numbers (DE)", "date_yyyy_mm_dd": "Date (YYYY-MM-DD)", "desc_errors_and_warnings": "Finds 'error', 'warning' or 'critical'", "desc_errors_only": "Finds 'error'", "desc_warnings_only": "Finds 'warning'", "desc_critical_errors": "Finds 'critical'", "desc_numbers_100_199": "Finds numbers from 100 to 199", "desc_email_addresses": "Finds standard e-mail addresses", "desc_phone_numbers": "Finds phone numbers (German format)", "desc_date_yyyy_mm_dd": "Finds dates in ISO format", } def get_german_translations(self): """ Get default German translations """ return { "app_title": "Excel Filter Tool", "tab_config": "Konfiguration", "tab_execution": "Ausführung", "tab_regex_builder": "Regex-Builder", "tab_help": "Hilfe", "config_section": "Konfiguration", "load_button": "Laden", "save_button": "Speichern", "input_file": "Eingabedatei:", "output_file": "Ausgabedatei:", "browse_button": "Durchsuchen...", "worksheet": "Arbeitsblatt:", "process_button": "🚀 VERARBEITEN", "status_ready": "Bereit", "success": "Erfolg", "error": "Fehler", "language": "Sprache:", "english": "Englisch", "german": "Deutsch", "help_content": "\nExcel Filter Tool\n\nFUNKTION\n--------------------------\nDas Excel Filter Tool ist ein Werkzeug zur Datenanalyse und -filterung von Excel-Dateien.\nEs ermöglicht das automatische Extrahieren, Filtern und Transformieren von Daten basierend auf einstellbaren Suchkriterien.\n\nHauptfunktionen:\n• Intelligente Textsuche anhand von Regex-Mustern\n• Numerische Filterung (größer/kleiner als, zwischen Werten)\n• Spaltenbasierte Filterung\n\nARBEITSABLAUF\n----------------------------------------\nDer Arbeitsablauf ist in vier Hauptphasen unterteilt, die jeweils eigene Tabs haben:\n\n1. KONFIGURATION\n- Wähle die Eingabe-Excel-Datei aus\n- Bestimme die Ausgabedatei\n- Wähle das zu filternde Arbeitsblatt\n- Konfiguriere die Filterkriterien (Regex und/oder numerisch)\n- Wählen die Spalten aus, welche übernommen werden sollen\n- Speicher/Lade die Konfigurationen für wiederkehrende Aufgaben\n\n2. MUSTER-ERSTELLUNG (Regex-Builder-Tab)\n- Nutze den visuellen Regex-Builder für zur einfachen Mustererstellung\n- Wähle aus vorgefertigten Bausteinen (Text, Zahlen, Spezialzeichen)\n- Definiere Mengen (einmal, mehrmals, optional)\n- Füge optionale Anker und Gruppen hinzu\n- Teste die Muster mit Beispieltexten\n- Verwalte gespeicherte Muster\n\n3. AUSFÜHRUNG\n- Überprüfe den auszuführenden Befehl vor der Verarbeitung\n- Starten die Analyse\n- Verfolgen den Fortschritt in Echtzeit\n- Automatische Öffnung der Ergebnisdatei\n\nERWEITERTE KONFIGURATIONSOPTIONEN\n----------------------------------\n\nRegex-Filterung (Standardmodus)\n- Suche nach Textmustern mit voller Regex-Unterstützung\n- Unterstützung für komplexe Suchmuster\n- Wortgrenzen, Groß-/Kleinschreibung, Spezialzeichen\n\nNumerische Filterung\n- Filtern nach Zahlenwerten (größer/kleiner als)\n- Bereichsfilterung (zwischen Werten)\n- Spaltenübergreifende numerische Suche\n\nSpaltenbasierte Filterung\n- Auswahl spezifischer zu durchsuchender Spalten\n- Automatische Spaltenerkennung aus Excel-Dateien\n- Individuelle Spaltenauswahl für zielgerichtete Suche\n\nKONFIGURATIONSMANAGEMENT\n--------------------------\n• Speichern/Laden von Konfigurationen für wiederkehrende Aufgaben\n• Persönliche Musterbibliothek mit benutzerdefinierten Regex-Mustern\n• Automatische Speicherung von zuletzt verwendeten Dateipfaden\n• Wiederherstellung vorheriger Arbeitssitzungen\n", # Config Tab "tooltip_config_section": "Du kannst Konfigurationen speichern und laden, statt alles jedes Mal neu einzugeben.", "enable_regex": "Regex-Filter aktivieren", "tooltip_enable_regex": "Wenn aktiviert, werden Regex-Muster für die Filterung verwendet", "regex_options": " Regex-Optionen ", "regex_pattern": "Regex-Muster:", "preset_patterns": "Voreingestellte Muster:", "apply_regex_column": "Regex auf Spalte anwählen:", "all_columns": "Alle Spalten", "manage_patterns": "Muster verwalten…", "enable_numeric": "Numerische Filter aktivieren", "numeric_filters": "Numerische Filter", "column": "Spalte:", "comparison": "Vergleich:", "value": "Wert:", "regex_builder_info": "Eigene Muster zur Filterung können im Regex-Builder erstellt werden.", "enable_column_selection": "Spaltenauswahl aktivieren", "column_selection": "Spaltenauswahl", "select_all": "Alle auswählen", "deselect_all": "Alle abwählen", "proceed_to_execution": "Weiter zur Ausführung", "msg_no_regex_copy": "Kein Regex-Muster verwendet - es werden nur die ausgewählten Spalten kopiert", "msg_warn_no_selection": "Warnung: Kein Regex-Muster und keine Spalten ausgewählt - alle Daten werden kopiert", "msg_copy_all": "Kopiere alle Spalten", "msg_copy_selected": "Kopiere ausgewählte Spalten: {}", "msg_written_success": "Erfolgreich geschrieben: {}", "msg_ask_open": "Möchten Sie die Ausgabedatei öffnen?", "msg_process_success": "Verarbeitung erfolgreich abgeschlossen", "msg_process_failed": "Verarbeitung fehlgeschlagen", "numeric_invalid": "❌ Ungültiger numerischer Wert", "numeric_incomplete": "Konfiguration unvollständig", "filter_desc": "Filter: {} {} {}", # Execution Tab "ready_to_execute": "Bereit zur Ausführung...", "status_ready": "Bereit", "command_to_execute": "Auszuführender Befehl", "execute_button": "AUSFÜHREN", "activity_log": "Aktivitätsprotokoll", "clear_log": "Löschen", "save_log": "Speichern", "log_cleared": "Protokoll gelöscht", "ready_for_execution": "Excel Filter bereit zur Ausführung", "configure_and_execute": "Konfigurieren Sie die Einstellungen und klicken Sie auf 'AUSFÜHREN'", "error_main_gui_not_connected": "Fehler: Haupt-GUI nicht verbunden", "input_file_label": "Eingabedatei:", "output_file_label": "Ausgabedatei:", "search_pattern_label": "Suchmuster:", "worksheet_label": "Arbeitsblatt:", "columns_label": "Spalten:", "numeric_filter_label": "Numerischer Filter: {column} {operator} {value}", "not_selected": "(nicht ausgewählt)", "not_specified": "(nicht angegeben)", "more_columns": "(+{} weitere)", "error_updating_command_display": "Fehler beim Aktualisieren der Befehlsanzeige: {error}", "execution_running": "Läuft...", "waiting": "WARTEN...", "execution_started": "▶️ Ausführung gestartet", "execution_completed": "✅ Ausführung erfolgreich abgeschlossen", "execution_failed": "❌ Ausführung mit Fehlern beendet", "log_saved": "💾 Protokoll gespeichert: {file}", # Regex Builder Tab "tab_builder": "🧱 Baustein-Builder", "tab_tester": "🧪 Tester", "tab_examples": "📚 Beispiele", "step_1": "📝 Schritt 1: Zeichen suchen", "step_2": "🔢 Schritt 2: Wie oft?", "step_3": "⚙️ Schritt 3: Optionen", "btn_letters": "🔤 Buchstaben", "desc_letters": "a-z, A-Z", "btn_digits": "🔢 Zahlen", "desc_digits": "0-9", "btn_alphanum": "🔤🔢 Alphanum.", "desc_alphanum": "Buchst.+Zahlen", "btn_any": "❓ Beliebig", "desc_any": "Ein Zeichen", "btn_custom": "📝 Eigener Text", "desc_custom": "Ihr Text", "btn_special": "⚙️ Spezial", "desc_special": "Satzzeichen", "btn_once": "🎯 1-mal", "desc_once": "Genau einmal", "btn_one_plus": "➕ 1+ mal", "desc_one_plus": "Mindestens 1-mal", "btn_zero_one": "❓ 0-1 mal", "desc_zero_one": "Optional", "btn_zero_plus": "♾️ 0+ mal", "desc_zero_plus": "Beliebig oft", "btn_n_times": "📏 N-mal", "desc_n_times": "Genau N-mal", "btn_m_n_times": "📊 M-N mal", "desc_m_n_times": "M bis N-mal", "btn_start": "^ Anfang", "desc_start": "Zeilenanfang", "btn_end": "$ Ende", "desc_end": "Zeilenende", "btn_word": "\\b Wort", "desc_word": "Wortgrenze", "btn_group": "( ) Gruppe", "desc_group": "Gruppierung", "btn_or": "| ODER", "desc_or": "Alternative", "btn_alt": "(?: ) Alt.", "desc_alt": "Gruppe o. Speicher", "preview": "👀 Vorschau", "selection": "Auswahl:", "btn_add": "➕ Hinzufügen", "btn_reset": "🔄 Zurücksetzen", "regex_result": "🎯 Regex-Muster", "btn_manage": "📝 Muster verwalten", "btn_save_preset": "💾 Als Muster speichern", "btn_copy": "📋 Kopieren", "btn_reset_pattern": "🔄 Muster zurücksetzen", "btn_undo": "↶ Rückgängig", "btn_redo": "↷ Wiederholen", "btn_apply": "💾 In Hauptfenster übernehmen", "btn_test": "🧪 Testen", "test_input": "Testtext eingeben:", "test_text_frame": "📝 Testtext", "test_pattern_frame": "🔍 Regex-Muster", "btn_load_example": "📋 Beispiel laden", "result_label": "Ergebnis:", "matches_label": "Gefundene Treffer:", "common_examples": "📚 Häufig verwendete Regex-Beispiele", "msg_pattern_applied": "Regex-Muster wurde in das Hauptfenster übernommen!", "msg_main_not_avail": "Hauptfenster-Referenz nicht verfügbar. Kopieren Sie das Muster manuell.", "msg_no_pattern_apply": "Kein Regex-Muster zum Übernehmen verfügbar", "msg_copied": "Regex-Muster wurde in die Zwischenablage kopiert!", "msg_no_pattern_copy": "Kein Regex-Muster zum Kopieren verfügbar", "msg_no_undo": "Keine weiteren Rückgängig-Aktionen verfügbar", "msg_no_redo": "Keine Wiederholen-Aktionen verfügbar", "msg_enter_pattern": "❌ Bitte geben Sie ein Regex-Muster ein", "msg_enter_text": "❌ Bitte geben Sie einen Testtext ein", "msg_pattern_found": "✅ Muster gefunden! {} Treffer (davon {} einzigartig)", "msg_no_matches": "❌ Keine Treffer gefunden", "msg_invalid_regex": "❌ Ungültiges Regex-Muster: {}", "msg_example_loaded": "Beispiel geladen - klicken Sie auf 'Testen'", "builder_desc_letters": "Buchstaben (a-z, A-Z)", "builder_desc_digits": "Zahlen (0-9)", "builder_desc_alphanum": "Buchstaben und Zahlen", "builder_desc_any": "Ein beliebiges Zeichen", "builder_desc_custom": "Der Text: '{}'", "builder_desc_custom_generic": "Ihr eigener Suchtext", "builder_desc_special": "Sonderzeichen (Leerzeichen, Punkt, Komma, etc.)", "builder_desc_once": "erscheint genau einmal", "builder_desc_one_plus": "erscheint ein- oder mehrmals", "builder_desc_zero_one": "ist optional (0- oder 1-mal)", "builder_desc_zero_plus": "erscheint beliebig oft (0-mal oder mehr)", "builder_desc_n_times": "erscheint genau {}-mal", "builder_desc_m_n_times": "erscheint {} bis {}-mal", "builder_desc_start": "am Zeilenanfang", "builder_desc_end": "am Zeilenende", "builder_desc_word": "als ganzes Wort", "builder_desc_or": "mit Alternativen", "default_test_text": "Beispieltext mit error und warning 123 Zahlen und E-Mail: test@example.com", "default_result": "Hier erscheint das Testergebnis...", "no_matches": "Keine Treffer", "auto_desc": "Beschreibung wird automatisch generiert...", "select_char_first": "Wählen Sie zuerst einen Zeichentyp aus...", "enter_name": "Geben Sie einen Namen ein", "save_pattern": "Muster speichern", "name_for_pattern": "Name für das neue Muster:", "msg_save_success": "Muster '{}' wurde gespeichert", "overwrite_confirm": "Ein Muster mit dem Namen '{}' existiert bereits. Möchten Sie es überschreiben?", # Additional keys needed for gui_new.py "errors_and_warnings": "Fehler und Warnungen", "errors_only": "Nur Fehler", "warnings_only": "Nur Warnungen", "critical_errors": "Kritische Fehler", "numbers_100_199": "Zahlen 100-199", "email_addresses": "E-Mail-Adressen", "phone_numbers": "Telefonnummern (DE)", "date_yyyy_mm_dd": "Datum (YYYY-MM-DD)", "desc_errors_and_warnings": "Findet 'error', 'warning' oder 'critical'", "desc_errors_only": "Findet nur 'error'", "desc_warnings_only": "Findet nur 'warning'", "desc_critical_errors": "Findet nur 'critical'", "desc_numbers_100_199": "Findet Zahlen von 100 bis 199", "desc_email_addresses": "Findet übliche E-Mail-Adressen", "desc_phone_numbers": "Findet Telefonnummern (deutsches Format)", "desc_date_yyyy_mm_dd": "Findet Datum im ISO-Format", } def set_language(self, language): """ Set the current language Args: language: Language code ('en' or 'de') """ if language in self.translations: self.current_language = language else: raise ValueError(f"Unsupported language: {language}") def get(self, key, default=None): """ Get a translation for a key Args: key: Translation key default: Default value if key not found Returns: Translated string or default value """ return self.translations[self.current_language].get(key, default if default is not None else key) def __getitem__(self, key): """ Get a translation using dictionary-style access """ return self.get(key) def get_available_languages(self): """ Get list of available language codes Returns: List of language codes """ return list(self.translations.keys()) def get_language_names(self): """ Get dictionary mapping language codes to display names Returns: Dictionary with language codes as keys and display names as values """ return { "en": self.get("english"), "de": self.get("german") }