fix(i18n): Hauptfenster, Tray und Notifications vollständig übersetzen (Paket-G-Nachzug) - #15
Conversation
…n (Paket-G-Nachzug) Paket G hatte mehrere UI-Call-Sites bei der String-Extraktion ausgelassen, sodass die Oberfläche trotz Sprachwahl "English" teils deutsch blieb. Der i18n-Completeness-Test prüft nur Key-Parität zwischen de/en, nicht ob alle sichtbaren Strings durch t() laufen — darum unbemerkt durch die CI. Übersetzt (über t(), neue Keys in app/i18n.py, de==en je 149): - Hauptfenster (main_window.py): Status "Bereit/Fehler/Aufnahme läuft…/ Transkribiere…/Verarbeite mit KI…", Buttons "Verwerfen/Diktat", History- Button mit Zähler, Tooltips "Vorlesen/Einstellungen". - Tray (blitztext_linux.py): Actions "Diktat-Modus/Verlauf…/Vorlesen…", Tray-Tooltips (Fehler/Aufnahme/Transkribiere/Verarbeite), Verlauf- Fenstertitel, Diktat-/Fehler-Notifications, Aufnahme-Fehlermeldungen. Nicht angefasst: Start/Stopp-Text des Shutter-Buttons (reiner Test-/Logik- Text, gemalt wird der Glyph), Logger-Ausgaben, Docstrings. Regressionsschutz: test_smoke_launch prüft beim Offscreen-Boot je Sprache (de/en) jetzt zusätzlich, dass Hauptfenster- und Tray-Texte der aktiven Sprache entsprechen — fängt künftige vergessene Call-Sites ab. Assertions bewusst im bestehenden Boot (kein zweiter BlitztextApp/QObject-Leak). Volle Suite 262 grün (offscreen, WHISPER_GUI_TESTS=1), stabil in deterministischer und randomisierter Reihenfolge.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1819b94824
ℹ️ 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".
| sec_row = QHBoxLayout() | ||
| sec_row.setSpacing(6) | ||
| self._btn_discard = QPushButton("↺ Verwerfen") | ||
| self._btn_discard = QPushButton(t("mainwindow.button.discard")) |
There was a problem hiding this comment.
Refresh main-window labels after language changes
When the main window already exists, changing the interface language in Settings calls BlitztextApp._refresh_i18n_texts(), but that method only updates the window title for _main_window; the buttons, tooltips, history label, and current status text initialized here keep the old language until restart or window recreation. This is visible when starting in English and switching to Deutsch, even though the settings help says changes apply after saving.
Useful? React with 👍 / 👎.
|
|
||
| # Diktat-Modus (Toggle): sammelt Transkripte als Notizen | ||
| self.action_dictation = QAction("🎤 Diktat-Modus", self) | ||
| self.action_dictation = QAction(t("tray.dictation_mode"), self) |
There was a problem hiding this comment.
Refresh new tray actions after language changes
These newly translated tray actions are only evaluated during setup_tray(), while the Settings save path calls _refresh_i18n_texts() without updating action_dictation, action_history, or action_tts. In an app started in English, switching the interface language to Deutsch leaves these tray menu entries in English until restart, so the saved language change is only partially applied.
Useful? React with 👍 / 👎.
Problem
Paket G (#14) hatte beim String-Extraktion-Schritt mehrere UI-Call-Sites ausgelassen. Folge: Bei UI-Sprache English blieben Hauptfenster, Teile des Tray-Menüs und Notifications deutsch (vom Nutzer live verifiziert nach Umschalten + Neustart).
Warum durch CI gerutscht: Der i18n-Completeness-Test prüft nur Key-Parität zwischen
de/en, nicht ob alle sichtbaren Strings tatsächlich durcht()laufen.Fix
Alle übersehenen Call-Sites über
t()geführt, neue Keys inapp/i18n.pyergänzt (de == en, je 149 Keys,missing_keys()leer).Hauptfenster (
app/main_window.py){count})Tray (
app/blitztext_linux.py)Bewusst nicht angefasst:
setText("Start"/"Stopp")des Shutter-Buttons (reiner Test-/Logik-Text, sichtbar ist der gemalte Glyph), Logger-Ausgaben, Docstrings.Regressionsschutz
tests/test_smoke_launch.pyprüft beim Offscreen-Boot je Sprache (de/en) jetzt zusätzlich, dass Hauptfenster- und Tray-Texte der aktiven Sprache entsprechen — fängt künftige vergessene Call-Sites ab. Assertions liegen bewusst im bestehenden Boot (kein zweiterBlitztextApp→ keine QObject-Leaks in Folgetests; in deterministischer Order verifiziert).Test Plan
missing_keys()leer, de/en je 149 KeysQT_QPA_PLATFORM=offscreen WHISPER_GUI_TESTS=1)-p no:randomly) und randomisierter Reihenfolge (je mehrfach)🤖 Generated with Claude Code