Translations are made in Weblate only: the rule, the documents that contradict it, and what a commit does with a string #706
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#706
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?
From the list: “All further translations must be made using Weblate.” The documents that tell people how to translate, and the instructions to anyone working on the code, say the opposite: edit the
.pofile and open a pull request, or write the translation in the commit. This issue states the rule in those documents and settles what a commit does when the rule meets a string; what it cannot yet do is switched on by #349's round trip, and this issue says exactly which parts wait for it.What exists today
docs/TRANSLATING.md:181-190(Editing a catalogue): “Editsrc/postulo/locale/<locale>/LC_MESSAGES/django.po… Open a pull request.” Adding a language ends the same way (:252-253); reviewing a draft means “reading it and deleting the flag” in the file (:138-143). The file never mentions Weblate. Nor doREADME.md,CONTRIBUTING.mdor the wiki; the only documents that do aredocs/PLAN.md:342and the changelog.CONTRIBUTING.md:295-299: “French and Portuguese catalogues exist and are waiting for contributors”, pointing at that handbook;:348-351(Making a release): “Ordinary work translates English, French and European Portuguese”, and the release gate is where the rest are swept up.CLAUDE.md:46-48: after changing a string, runscripts/messages.py extract“so every catalogue gets its slot; a new translation carries thedraftflag until a speaker reviews it”. The per-commit check is a convention: CI runsextract --checkandcheck(.forgejo/workflows/ci.yml:104-105) and holds no language complete on a commit; the only completeness test is the release-markedtests/test_translations.py::test_every_european_union_language_stays_complete(:155).translate.tiagoagueda.com, one project with 23 components, brought level with every repository on 2026-10-01 (comment on #349). It “has merged nothing since the day it was set up”:AUTO_UPDATEis off, no repository has a webhook, and a translation made there rewrites the catalogue's header, so mergingmainconflicts. A translation made in Weblate reaches the repository only when the maintainer takes it by hand (the one that has, “Token da API”, is in the changelog,CHANGELOG.md:93). #349 lists what a working round trip needs: out on push, in as a pull request that CI judges, one format written by two writers, thedraftflag mapped to a Weblate state, and who may translate and on what terms.scripts/messages.py extractkeeps every translation and drops what the source lost (docs/TRANSLATING.md:164-165,tests/test_messages_tool.py:100): a commit that renames a string discards its translations in the repository, including any that exist only in Weblate.tests/test_translations.py::test_the_catalogues_are_what_a_fresh_extraction_writes(:221) is the test that says whether Weblate's output and the tool's agree.docs/TRANSLATING.md:47-55still has the table of phases by release that #347 replaces; stale against #269.Checked against
mainatf09b6010b.Proposal
docs/TRANSLATING.md,CONTRIBUTING.md(Translations) andCLAUDE.md: a translation, a correction and the review of a draft are made in Weblate and nowhere else; nobody translates by editing a.pofile; a pull request that does is asked to be redone there. Say what is not a translation: the English source in the code, the slotsextractwrites, and a mechanical rename carried out by a script.CLAUDE.mdandCONTRIBUTING.mdto whatever the decisions below choose, and say so on #347 so its development gate is written for the same rule.Decisions
draft, and every later change is made in Weblate; (b) the commit carries only the English and Weblate's Automatic translation add-on fills the other two, which arrive as a pull request. Recommended: (a) for now. (b) cannot satisfy a per-commit gate, because the pull request lands after the commit; it would turn every development image red until the round trip has run, and it needs a machine translation service configured and paid for. Revisit when #349 works and merges on its own. This is a narrow carve-out from “all further translations”, not a way around it, and the maintainer should confirm that reading.extract's slots, a scripted rename that carries translations to the new ids, and a seed for a new variant (as pt-BR was seeded from pt-PT, #110), which Weblate then holds. Recommended: exactly those, each said in the handbook so nobody guesses.CLAUDE.mdtells an assistant to write translations. Recommended: it writes the draft of (a) and nothing else, and says in the commit that the drafts are awaiting review in Weblate.What is blocked until #349's round trip exists
draftflag's meaning in Weblate. A draft arriving from a commit has to show there as needing a reader, and a speaker approving it has to clear the flag here (#349).None of the five proposals above is blocked: the rule, the rewritten pages with their stated interim, and the commit rules can all be written now.
Builds on
Issues #349 (the round trip, and the other repositories' twins), #347 (the gates), #269 (the languages and the decision of 2026-10-01), #346 (the licence a contribution comes in under), #337 (language codes). Related: #705 (a rename sweep that has to meet this rule).
Done when
docs/TRANSLATING.md,CONTRIBUTING.mdandCLAUDE.mdstate the rule, the exceptions and the commit rules, and no longer tell anyone to translate by editing a.pofile or open a pull request for it; the handbook says plainly what is interim until #349.tests/test_translations.pyholds the three documents to the rule: none still contains the instruction to open a pull request for a translation, anddocs/TRANSLATING.mdnames Weblate. The catalogue tests keep passing on a commit that follows (a):scripts/messages.py extract --checkandcheck.f09b6010b); new strings, if any, are in the working catalogues (en-GB, fr-FR, pt-PT as drafts) and Weblate.From the list of improvements of 2026-10-02.
Done. Translations are made in Weblate only: docs/TRANSLATING.md, CONTRIBUTING.md, CLAUDE.md, README and the wiki say so and say what a commit may do with a string (
925e3e9cd), tests/test_translation_docs.py holds them to it, andscripts/messages.py guardrefuses in CI and before a commit any translation written outside Weblate (e014152fc). No test pins a translated word. The interim the issue foresaw is gone: the round trip of #349 works, proven by Weblate's first pull request #829, merged as8c3d03570with every CI job green.