Why Noto Sans
Noto Sans was chosen for a specific reason: it is one of the few families with comprehensive coverage of African language scripts and diacritics. Languages using Latin script with diacritical marks are routinely broken by popular UI fonts. Noto Sans handles:- Yoruba — underdots (ẹ, ọ, ṣ) and tone marks (à, á, è, é)
- Igbo — underdots (ị, ọ, ụ) and combining marks
- Hausa — hooked characters (ɓ, ɗ, ƙ)
- Shona — circumflex accents and extended vowels
- Swahili — standard Latin script
- Amharic and Tigrinya — Ge’ez script, via Noto Sans Ethiopic
- Arabic — via Noto Sans Arabic, with right-to-left support
Text direction
Most African languages are left-to-right, anddir="ltr" on <html> covers them.
For Arabic, wrap the application in a direction provider so Radix’s direction context reaches
every primitive:
- Use logical properties —
ms-4rather thanml-4,ps-4rather thanpl-4. - Use
startandendrather thanleftandright—text-start,justify-end. - Mark directional icons with
data-rtl-mirror="true"where they should flip. See icons.
Number formatting
Formats differ by region. UseIntl.NumberFormat and never hardcode a symbol or a separator:
toFixed(2) gets it wrong in a way that looks right to a reader
who is not from there.
Date formatting
Content considerations
- Shona and Ndebele are primary languages alongside English, not secondary translations.
- Do not assume English. Labels, error messages and UI text should be externalisable from the start; retrofitting is far more expensive.
- Avoid idioms. “Hit the ground running” does not translate. See writing guidelines.
- Support variable text length. Translated strings run 30–50% longer than English. A layout that only works at English length is a layout that breaks on first translation.
- Respect naming conventions. Use a single “Full name” field; never validate name length; support Unicode. See inclusive language.