github new-usemame/Calibre-Web-NextGen v4.0.48
v4.0.48 — Hungarian OPDS translations actually ship

latest releases: v4.0.172, v4.0.171, v4.0.170...
one month ago

What changed

Hungarian translations from v4.0.47 actually ship in v4.0.48.

The v4.0.47 hu.po addition for "Random Books" collided with an obsolete #~ msgid for the same string further down the file. msgfmt rejects this as a duplicate definition, but compile_translations.sh is intentionally tolerant — it logs the failure and moves on to other locales so one broken .po doesn't strand the rest. Result: the v4.0.47 image shipped without hu/messages.mo, and Hungarian users got the English fallback on every string — including the four labels the prior release was supposed to fix.

Two changes:

  1. Delete the obsolete #~ msgid "Random Books" block in hu.po. It was commented out; removing it doesn't change behavior. The active msgid "Random Books"msgstr "Véletlenszerű könyvek" entry remains and is now the only one in the file.

  2. New regression test tests/unit/test_translations_compile.py runs msgfmt against every shipped .po as a unit test, parametrized per locale. Catches this class of regression before CI builds an image, not after deploy.

What the user sees

Hungarian users on :v4.0.48 (or :latest once it picks this up) get the four newly-translated OPDS root labels in Hungarian:

  • "Alphabetical Books" → "Könyvek ábécé sorrendben"
  • "Recently added Books" → "Nemrég hozzáadott könyvek"
  • "Random Books" → "Véletlenszerű könyvek"
  • "Magic Shelves" → "Varázspolcok"

Other locales unaffected.

To get the update

docker pull ghcr.io/new-usemame/calibre-web-nextgen:v4.0.48

Test verification

  • 30/30 locales compile cleanly under msgfmt in the new regression suite.
  • Reproduced the v4.0.47 bug by regenerating the obsolete duplicate and confirmed the test fails with the expected duplicate message definition error.
  • Production Docker build will now ship hu/messages.mo (verified post-fix that the .mo compiles to 155 KB with all 4 new translations resolving correctly under gettext.translation('messages', languages=['hu'])).

Honest note

This bug shipped because v4.0.47's verification didn't include "pull the GHCR image and check the .mo files survived the production Docker build." That's now a fixed step in the CLAUDE.md enterprise verification checklist — every i18n-touching release must include a gettext.translation(...).gettext(...) probe against the production image, not just the local rebuilt one.

Don't miss a new Calibre-Web-NextGen release

NewReleases is sending notifications on new releases.