Choose the next language by how many people speak it, not by which continent it is on #269
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#269
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?
Decision
Which language Postulo learns next is decided by how many people speak it, not by which
continent it is on. #70, #71 and #72 divided the world into Africa, Asia and South America,
and the rest; that division is replaced by this ordering, and those three issues are
re-scoped below rather than closed.
Why geography failed, concretely
Russian has no catalogue. Roughly 255 million speakers, and it is named in none of the
three issues — not in Africa, not in "Asia and South America", not in "the rest of the
world". Russia straddles two continents and each list assumed the other carried it. It is not
in
src/postulo/locale/at all.That is not an oversight to patch; it is what happens when the organising principle is a map.
A continent is also not a unit of work: #70 is 29 catalogues at about 1,790 strings each —
roughly 52,000 translations — for a milestone due in twenty-five days that holds
twenty-four other issues, while the single largest sweep this project has ever done was 110
strings across 36 languages.
Ordering by speakers spends the same effort on more people, and it cannot lose a language
between two lists.
Where the catalogues actually stand
bg bs ca cs cy da de el es et eu fi fr_FR ga gl hr hu hy is it ka lb lt lv mk mt nb nl pl pt_BR pt_PT ro sk sl sq sr sv tr ukaf ak am ar bm ee ff ha ig kab ln mg nr ny om rw sn so ss st sw ti tn ts ve wo xh yo zuru,zh,hi,bn,ja,ko,vi,id,ur,fa,th.An empty catalogue costs nothing, because
accounts/forms.py::language_choicesdoes notoffer a language until somebody starts it. That is what makes this re-ordering free: no
half-finished language is ever visible to anybody.
Two gates that outrank the speaker count
Speaker order sets the priority. It does not override these, and the current plan violates
both.
Fonts (#74). Han, Devanagari, Bengali, Tamil, Thai, Khmer and Ge'ez need glyphs that ship
— #74's title says it: a declared package is not a drawn glyph. Mandarin has more speakers
than anything else here and still waits, because a page of tofu boxes is worse than the same
page in English.
Right-to-left (#73, #67). Arabic, Urdu, Persian and Hebrew need the layout before the
catalogue.
aris currently in #70 at 0.4.0, while the RTL layout work is at 0.6.0 — thefirst right-to-left language is scheduled two milestones before the thing it depends on. That
is a bug in the plan regardless of which ordering wins.
The tiers
Speaker figures are approximate and include second-language speakers; they order the list,
they are not a promise.
Tier 1 — 0.4.0. Nothing blocks these.
Latin or Cyrillic, no new font work, no RTL.
bg,mk,sr,uk.way) — new; from #71.
pulled forward rather than wait on fonts they do not need.
#71. (pt-BR already exists: filled,
draft.)haandswalready scaffolded.Afrikaans, Somali, Oromo, Kinyarwanda, Shona, Sesotho, Setswana, Wolof, Malagasy and the
others.
Tier 2 — 0.5.0, gated on #74.
each needs its script drawn.
before the fonts land.
Tier 3 — 0.6.0, gated on #73 and #67.
kab) — also carved out of #70.1.0.0
machine translation, not a place in this ordering.
that issue worth keeping.
What changes on the three existing issues
ar,kab,amandtileave it for Tiers 2 and 3, so it can close when the ones that are notblocked are done.
(
ur,fa,he) move to Tier 3. Quechua, Guaraní and Aymara are Latin-script and may bepulled into Tier 1 by whoever starts it. Merged into this issue on 2026-09-29.
a speaker adding a language without waiting for a developer. That is what makes the tail
reachable at all, and Weblate is already running for it.
What does not change
draftuntil a speaker reviews it, and stays out oflanguage_choicesuntilsomebody starts it.
release commit.
tests/test_translations.py::test_every_european_union_language_stays_completestill hard-gates the 24 EU languages on every commit, and its conflict with the three-language working
rule is still unresolved. This issue does not fix that and should not be read as having
done so.
Since this was written
Facts that changed after 2026-09-17, noted at the merge. The tiers above are left as they
were decided.
default.
manage.py check_fonts, and a row on Server settings → Overview, say whichscripts the offered languages need and whether the running instance can draw them; the
document themes name a per-script fallback. What a Tier 2 language waits on is its script
showing as drawable there, not #74.
closed in 0.3.0, and #70's first comment says Arabic is exercised end to end. #73 is the
phone layout, not direction; it names #67 only because both are layout work. If nothing
else is missing, Tier 3 is not blocked the way the gate above says. Not decided here.
haandsware still empty, and there is no
ru,id,viorfil. #70 moved to 1.0.0 on2026-09-21, and its comment notes that the carved-out
am,ti,arandkabnow landbefore the Latin-script set they came from. This issue moved from 0.4.0 to 0.5.0 on
2026-09-29, the milestone #71 was already in.
From #71: what these catalogues need beyond a translation
#71's decision was "milestone for 0.4.0 - all languages from Asia and South America"; the
ordering above replaced it. Its list of what was new, with where each point stands:
are catalogues (Tier 3).
that does not draw is a box on somebody's CV. The check exists since #74 (above); each
language still has to pass it.
Thai):
nplurals=1, which the tooling has to accept as readily as Arabic's six. Italready carries one-form rules for Wolof, Igbo, Shona and Bamanankan (#70).
Neither breaks on spaces, and a CV that wraps in the wrong place looks careless. Open.
variants, simplified and traditional Chinese — which the language picker has to present
without turning into a list nobody can scan. "Ficheiro" and "arquivo" are not the same
word to the person reading them. pt-BR is the first; the picker question is open.
#71 is merged into this issue. The body now opens with a note saying so, places the languages
#71 listed and this issue had not named (marked from #71), and ends with two new sections:
Since this was written (#74 closed; a question about whether the right-to-left gate still
holds; the milestone moves) and From #71 (its five points, with where each stands).
Final decision on translations (maintainer, 2026-10-01)
What this changes here
draft); then the European languages that still have no catalogue; then Chinese and Arabic.manage.py check_fontssays whether an instance can draw it); Arabic needs the right-to-left layout (#67, closed in 0.3.0). That is the load the decision means when it allows the two to move to 0.6.0.Left open, to settle here
zh-Hans,zh-Hantonce #337 lands).Follow-up to the final decision on translations (maintainer, 2026-10-01)
zh-Hans,zh-Hant).The work is postulo/postulo#347.
Which languages of the continent are still missing
The 39 started catalogues already cover the Union, the 15 others that came with 0.3.0 (Ukrainian, Turkish, Norwegian bokmål, Icelandic, Serbian, Bosnian, Albanian, Macedonian, Georgian, Armenian, Basque, Catalan, Galician, Welsh, Luxembourgish) and pt-BR. Measured against the continent rather than the Union, what has no catalogue is:
az), Belarusian (be), Kazakh (kk), Montenegrin (cnr), Norwegian nynorsk (nn), Romansh (rm), Faroese (fo). Russian is excepted by the decision.gd), Breton (br), Occitan (oc), Corsican (co), Sardinian (sc), West Frisian (fy), Northern Sami (se), Asturian (ast), and others of the same standing.The first group is proposed as 0.5.0's "missing European languages"; the second needs the maintainer's word on whether it belongs to this release, a later one, or the process in #72.
This also settles the third point left open above: 0.4.0's set is the European set carried today, all 39, not the Union's 24.
Europe's missing languages, decided (maintainer, 2026-10-01)
az), Belarusian (be), Kazakh (kk), Montenegrin (cnr), Norwegian nynorsk (nn), Romansh (rm), Faroese (fo). Russian stays excepted.So 0.5.0's additions, in full: fr-CA and en-CA; the seven above; then Chinese (simplified and traditional) and Arabic, which may move to 0.6.0. Nothing is left open here from the comments above.
Superseded in part by #728 (maintainer, 2026-10-06): the 0.5.0 language list given in the comments of 2026-10-01 is replaced by the list in #728 (Mandarin Chinese, Hindi, Urdu, Modern Standard Arabic, Bengali and Indonesian, as drafts). The rest of this issue is not changed by that decision.
Closing: every decision this issue held is settled, and what is left has its own issue.
Decided and done
SELECTEDfor its line, and drafts count (#347).Moved to their own issues
The right-to-left gate is #67, closed in 0.3.0. The font gate is #74, closed, plus
manage.py check_fonts.