Files
Excel-Filter-Tool/excel_filter/translations.py
2026-02-12 09:51:22 +01:00

557 lines
30 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
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")
}