Migrate to GitLab

This commit is contained in:
jonasgaudian
2026-02-12 09:51:22 +01:00
commit d7f49197c0
57 changed files with 9838 additions and 0 deletions

View File

@@ -0,0 +1,556 @@
"""
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")
}