feat: Mehrsprachige Oberfläche EN/DE (Paket G) - #14
Conversation
Führt eine umschaltbare App-Oberfläche (Deutsch/Englisch) ein, plus eine
englische README. Leichtgewichtiges Dict-i18n statt Qt-Linguist – passt zum
Muster reiner, isoliert testbarer Domänendaten (wie writing_presets.py),
ohne zusätzliche Build-Toolchain.
Fundament
- app/i18n.py: TRANSLATIONS{de,en} (125 Keys), t(key) mit Fallback
aktiv→de→key, get_language/set_language (ValueError bei ungültig),
missing_keys() für die Vollständigkeits-Invariante.
- app/config.py: neuer Top-Level-Schlüssel ui_language (de/en, Default de)
mit Property-Validierung und Sanitize, analog writing_preset.
UI
- Sprach-Combo im Allgemein-Tab; set_language beim Start (aus config) und
nach Settings-Save. Hinweis: Sprachwechsel greift nach Neustart.
- String-Extraktion → t(...) in blitztext_linux.py (Tray-Menü + kompletter
Settings-Dialog), main_window.py, tts_window.py, history_panel.py.
- Workflow- und Preset-Anzeigenamen zweisprachig über i18n-Keys aufgelöst;
workflows.py/writing_presets.py bleiben strukturell unverändert (deutsche
Defaults als Fallback, bestehende Tests bleiben grün).
- tts_window.py: Install-/Consent-Texte als lazy t()-Funktionen, damit
Sprachwechsel greift.
Docs
- README.md jetzt Englisch (primär) + README.de.md (Deutsch), mit
Sprach-Switcher und ui_language-Dokumentation.
Tests
- tests/test_i18n.py: Key-Vollständigkeit, Placeholder-Konsistenz zwischen
Sprachen, Fallback- und set_language-Verhalten.
- tests/test_config.py: ui_language-Validierung/Sanitize.
- tests/test_settings_dialog.py: Sprach-Combo.
- tests/test_smoke_launch.py: Offscreen-Boot je Sprache (de/en).
- Volle Suite: 262 grün (offscreen, WHISPER_GUI_TESTS=1).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VMvvvYvyX69yWwFFCjTMzU
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e885958f89
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| self.config.ui_language = self.combo_ui_language.currentData() | ||
|
|
||
| self.config.save() | ||
| set_language(self.config.ui_language) |
There was a problem hiding this comment.
Defer language switch until all widgets refresh
When a user changes ui_language while the app is running, this immediately flips the global translator, but the subsequent refresh only updates a subset of existing UI; the already-open main window and optional history/TTS windows keep their old labels, and some tray items are still hardcoded. Since main() shows the main window at startup, saving a language change leaves users with a mixed-language interface until they restart; either defer set_language to the next launch or refresh/recreate all live widgets.
Useful? React with 👍 / 👎.
Was geändert wurde
Paket G führt eine mehrsprachige Oberfläche (EN/DE) für Blitztext ein:
a154965(origin/main, enthält Paket F)Tests / Verifikation
python3 -m compileall app tests→ OKQT_QPA_PLATFORM=offscreen WHISPER_GUI_TESTS=1 python -m pytest -q→ 262 passedi18n-Key-Vollständigkeit
de: 125 Keysen: 125 Keysmissing:set()(keine fehlenden Keys, EN/DE deckungsgleich)Hinweis
Ein Sprachwechsel wird nach einem Neustart der App wirksam.
Rollback
feat/paket-g-i18n-en-delöschen.main.