Skip to content

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 29 Jul 15:55
· 11 commits to main since this release
v0.9.0: Swedish, Spanish and German

The app now speaks English, Swedish, Spanish and German, picking whichever the
Mac prefers. Menus, every dialog and button, the About panel, notifications,
update and self-update messages, and the HTML report (headings, column names,
meta line) are translated; dates are localised too.

- src/i18n.py: language detection + _() / ngettext() / localised dates.
  Detection reads macOS AppleLanguages (honours the per-app language override)
  and deliberately ignores Python's locale module, which reports "C" in our
  frozen app and would have shipped English to everyone.
- src/translations.py: dict catalogues keyed by the English source string.
  Chosen over gettext/.mo — 83 strings don't justify a compile step, and dicts
  stay reviewable in a diff. Anything missing falls back to English.
- packaging/locales: an InfoPlist.strings per language. The Automation
  permission prompt is rendered by macOS, so it needs .lproj files rather than
  gettext; CFBundleLocalizations declares the languages so macOS offers the
  per-app override in System Settings.
- Plurals: English "tab(s)" hides a problem the translations can't — one tab
  read "1 flikar" / "1 pestañas" / "1 Tabs". Added singular/plural variants for
  the menu total, the export dialog and the HTML meta line.
- CSV column headers stay English (machine-readable); the HTML report's visible
  headers are translated.
- tests/test_i18n.py: every used string is translated, no stale entries,
  placeholders survive translation, plurals differ, unknown strings fall back.

Verified: all suites pass; the .lproj files ship in the bundle; and with the
app's own preference domain in the search list (what the running app sees)
detection resolves to sv and the UI renders in Swedish.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>