docs(i18n): Arabic language notes and right-to-left guidance

- docs/translations/ar.md: style, Western digits and direction, units,
  the six plural forms and the glossary.
- TRANSLATORS.md and CURRENT-STATE.md list Arabic and say how a
  right-to-left language mirrors the chrome.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
German KhokhlovandClaude Opus 5.5 committed 2026-10-28 13:28:52 +04:00
1 parent 06370d8676
commit 33985138ef
3 files changed
+105 -5

No files matched your search

+10 -2
View File
@@ -3733,7 +3733,7 @@ test:track` 43 tracking invariants · headless QA harnesses under
### Interface localization (October 2026)
Shipped locales: **en** (source and fallback), **es**, **ru**, **zh-CN** and **zh-Hant**. The code lives in
Shipped locales: **en** (source and fallback), **ar**, **es**, **ru**, **zh-CN** and **zh-Hant**. The code lives in
`src/i18n/`. How to mark UI text: [`docs/I18N.md`](./I18N.md); translator workflow:
[`docs/TRANSLATORS.md`](./TRANSLATORS.md).
@@ -3747,11 +3747,19 @@ Shipped locales: **en** (source and fallback), **es**, **ru**, **zh-CN** and **z
`navigator.languages` → English. Chinese tags default to `zh-CN`; Traditional Chinese tags
select `zh-Hant`. Explicit `Hans` selects `zh-CN` regardless of region. `?lang=` is not stored, and share links drop
it, so a recipient keeps their own language. The globe picker in the
bottom-right corner (`src/ui/localePicker.js`) stores the choice, drops
bottom-right corner (bottom-left in Arabic) (`src/ui/localePicker.js`) stores the choice, drops
`?lang=` (keeps it only when storage is blocked) and reloads. It asks first
when the reload would lose work registered with `registerUnsavedWork`:
unsaved keys or CCTV calibration, Draw marks, imported map files, the open
cockpit, a voice session.
- **Right to left.** Arabic (`ar`) is in `RTL_LOCALES`, so `<html dir="rtl">`:
the title, style indicator and both rails swap sides through logical
properties (`inset-inline-*`, `margin-inline-*`), the dock and corner row
reverse their order, and `src/ui/styles/rtl.css` holds the rest: no
letter-spacing on Arabic text, Noto Sans Arabic in the font stacks, the intel
HUD kept as a left-to-right instrument overlay, media transport and the radio
dial kept left to right. Intl formatters get `ar-u-nu-latn`, so numbers and
dates keep Western digits.
- **Gate.** `npm run i18n` (and `src/i18n/catalog.test.mjs` under `npm test`)
extracts every message and fails on missing, empty, unused,
placeholder-mismatched, still-English (plural forms included) or