Translations: hold a development build to en-GB, fr-FR and pt-PT and a release to its selected languages, with every language scaffolded #347
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
performance
security
tier
1
tier
2
tier
3
tier/4
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo#347
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This is the work the maintainer's final decision on translations (2026-10-01) implies for the core. The decision is recorded on #269 and #72; this issue is where it is built. Which languages 0.5.0 adds is #269's subject; the spelling of their codes is #337's.
The decision
Settled the same day:
zh-Hans,zh-Hant).What the code does today
tests/test_language_variants.py::test_every_string_came_across. The decision does not ask that of a development build.tests/test_translations.py::test_every_european_union_language_stays_complete(markedrelease) holds the 24 languages of the European Union, the tupleEUROPEAN_UNIONin the test. The 15 other European catalogues and pt-BR are not held by anything at a release, which is the "just the European Union" the maintainer ruled out.accounts/forms.py::language_choicesoffers a language only once somebody has started it, so a scaffolded catalogue is invisible.What to build
postulo.core.messages_tool, which they already depend on. 0.4.0 selects the European set carried today (the 39), nothing added; 0.5.0 adds what the decision names, as #269 fills it in.EUROPEAN_UNION, and pt-BR's completeness moves from every commit to the release it is selected for.CONTRIBUTING.md§ Making a release andscripts/release_tools.pyname the same list.core/languages.pyfor each language Postulo means to carry, with the right plural rule (nplurals=1for Chinese, six forms for Arabic), written byscripts/messages.py extractlike the others. Variants are seeded from their sibling and flaggeddraft, as pt-BR was from pt-PT (#110): fr-CA from fr-FR, en-CA from en-GB.docs/TRANSLATING.mdstates the five points in place of its table of phases by release.Done when
uv run pytest -m releasefails when a language selected for the version being released lacks a string, in any catalogue set, and passes however empty a language that is not selected may be.The other components
Language-wise they move with the core, each under its own issue:
postulo/postulo-apprise#7, postulo/postulo-dav#16, postulo/postulo-imap#5, postulo/postulo-paperless#7, postulo/postulo-helloworld#6, postulo/postulo-firefox#5, and the issues that already covered it: postulo/postulo-chromium#10, postulo/postulo-thunderbird#7, postulo/postulo-templates#7. postulo-mcp is English only by decision and carries no catalogues, so nothing changes there.
The development gate follows #706's rule, decided 2026-10-10: translations are made in Weblate only, so a commit adds a string with its slots empty and cannot carry fr-FR and pt-PT itself. Weblate drafts the new string by machine (LibreTranslate, needs editing) and brings it in with its pull request from the
weblatebranch; the gate is held there, in CI:scripts/messages.py gate fr-FR pt-PTon a pull request whose head isweblate(e014152fc), a draft counting. Between the commit and that pull request a development build shows the new string in English. The release gate (pytest -m release) is unchanged. docs/TRANSLATING.md states the five points of this issue in place of the table of phases (925e3e9cd).