Right-to-left layout, so Arabic and Hebrew can be read #67
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
security
tier
1
tier
2
tier
3
tier/4
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Blocks
#70 Languages: every language of Africa
Postulo/postulo
#73 Readable and usable on a phone, not merely rendered on one
Postulo/postulo
Reference
Postulo/postulo#67
Loading…
Add table
Add a link
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?
Observation
What exists today
One line of it, in
base.html:The hook is there and nothing has ever exercised it. Every one of the 24 languages
Postulo currently offers is written left to right, so
dirhas beenltron every pageever rendered, and whatever the interface does when it is
rtlis unknown rather thanknown-good.
What actually has to change
dir="rtl"flips text and inline layout. It does not touch a stylesheet that names aside, and the interface names sides in 59 places across the templates:
ml-auto(pushes an action group to one edge)text-lefttext-rightml-*/pl-*left-*/right-*Tailwind v4 has the logical equivalents —
ms/me,ps/pe,start/end,text-start/text-end— which resolve against the document direction. Most of this isthat substitution, and
ml-autois the single biggest group: it is what puts Record anapplication at the far end of a heading row, and in Arabic the far end is the other one.
Then the parts a substitution does not reach:
chevrons on menus and the pagination arrows. Vertical ones stay; horizontal ones flip.
A "next page" arrow pointing the wrong way is worse than no arrow.
status must sit at the reading-start edge and the scroll must begin there. Drag and
drop needs the same treatment.
Science — a Latin name inside an Arabic sentence — needs the name isolated, or the
punctuation around it jumps to the wrong end. Same for a URL, an email address, a
version number and anything else that stays Latin.
<bdi>around user-entered text inthe templates is the mechanism.
documents/themes/base_cv.htmlsets no direction. That needs to follow the document'slanguage — which is the same field #65 is about for letters.
from widgets; whatever it builds should be direction-agnostic from the start rather than
fixed afterwards.
What this issue does not include
Arabic itself. #43 sets the order languages arrive in — the European Union, then the
rest of Europe, then Africa, Asia and the world — and Arabic belongs to a later phase of
it. This is the layout work that has to exist before any right-to-left language can be
added without the interface falling apart, and it can land and be tested with none.
How it gets tested
There is no language to test with, which is the whole difficulty. Two answers, both worth
having:
text, so the browser suite can visit the same pages under
dir="rtl"and thescreenshots can be looked at. Test-only, never offered in the picker.
tests/test_template_lint.pyalready refuses a broken comment. That is what stops itdrifting back one heading row at a time.
Classification
Enhancement, 0.5.0. Not breaking:
diris already emitted, and every logical utilityresolves to today's behaviour under
ltr.Depends on
Nothing hard. It should land before Arabic or Hebrew is offered, and #44 should be built
with it in mind rather than after it.
Landed on
0.3.0as0fee264.