- Shipped
- September 12, 2026 at 7:42 PM UTC
- Author
- Kamo
- Commit
- 20e85da
The page behind every unsubscribe link only spoke English. It now speaks all 22 languages the product UI ships: English, Chinese, Hindi, Spanish, French, Arabic, Bengali, Russian, Portuguese, Indonesian, German, Japanese, Swahili, Turkish, Tamil, Vietnamese, Korean, Italian, Thai, Polish, Ukrainian and Romanian. - Every sentence the page says itself now lives in a message bundle, **************** with English as the source and the fallback for anything missing. Numbers take the right plural form for each language, and dates are written the language's own way (UTC). - The language is chosen per request: a lang parameter wins, then the browser's Accept-Language (quality values honoured, pt-BR falls back to pt), then English. A language the reader picks stays picked through every form and redirect. The page sets <html lang>, Content-Language and Vary, and lists every language, named in itself, at the bottom as plain links. - Arabic is laid out right to left: dir="rtl", logical CSS, a mirrored switch, and the organization's own words (name, subject, address) kept in their own direction. Those words are never translated. - On wide screens the page now uses the full width: who it is for and why on one side, the choices beside it in columns, the notes and footer below. Under 720px it is the same single column as before. - Nothing else changes: every value is still escaped (translated text around it too), no script, the same locked-down headers, GET still never changes anything, and a link that names nobody still gets the same neutral page, now in the reader's language. Tests check that every bundle has exactly the English keys and placeholders and a branch for each plural form of its language, and cover the language negotiation, right-to-left output, dates, escaping, and the language surviving a save and its redirect.