Skip to content

fix(i18n): Hauptfenster, Tray und Notifications vollständig übersetzen (Paket-G-Nachzug) - #15

Merged
TimInTech merged 1 commit into
mainfrom
fix/paket-g-i18n-restsites
Jun 20, 2026
Merged

fix(i18n): Hauptfenster, Tray und Notifications vollständig übersetzen (Paket-G-Nachzug)#15
TimInTech merged 1 commit into
mainfrom
fix/paket-g-i18n-restsites

Conversation

@TimInTech

Copy link
Copy Markdown
Owner

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 durch t() laufen.

Fix

Alle übersehenen Call-Sites über t() geführt, neue Keys in app/i18n.py ergänzt (de == en, je 149 Keys, missing_keys() leer).

Hauptfenster (app/main_window.py)

  • Status: Bereit / Fehler / Aufnahme läuft… / Transkribiere… / Verarbeite mit KI…
  • Buttons: Verwerfen, Diktat, Verlauf (mit Zähler {count})
  • Tooltips: Vorlesen, Einstellungen

Tray (app/blitztext_linux.py)

  • Actions: Diktat-Modus, Verlauf…, Vorlesen…
  • Tray-Tooltips: Fehler, Aufnahme läuft…, Transkribiere…, Verarbeite mit KI…
  • Verlauf-Fenstertitel, Diktat-/Fehler-Notifications, Aufnahme-Fehlermeldungen

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.py 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 liegen bewusst im bestehenden Boot (kein zweiter BlitztextApp → keine QObject-Leaks in Folgetests; in deterministischer Order verifiziert).

Test Plan

  • missing_keys() leer, de/en je 149 Keys
  • Volle Suite 262 grün (QT_QPA_PLATFORM=offscreen WHISPER_GUI_TESTS=1)
  • Stabil in deterministischer (-p no:randomly) und randomisierter Reihenfolge (je mehrfach)
  • Kein Version-Bump / Tag / Release — Release-Stand bleibt v0.3.0

🤖 Generated with Claude Code

…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.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread app/main_window.py
sec_row = QHBoxLayout()
sec_row.setSpacing(6)
self._btn_discard = QPushButton("↺ Verwerfen")
self._btn_discard = QPushButton(t("mainwindow.button.discard"))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment thread app/blitztext_linux.py

# Diktat-Modus (Toggle): sammelt Transkripte als Notizen
self.action_dictation = QAction("🎤 Diktat-Modus", self)
self.action_dictation = QAction(t("tray.dictation_mode"), self)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

@TimInTech
TimInTech merged commit 64bb2b5 into main Jun 20, 2026
7 checks passed
@TimInTech
TimInTech deleted the fix/paket-g-i18n-restsites branch June 20, 2026 22:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant