From 59c4675e8a2c19365c26e4953a0304d1ad413587 Mon Sep 17 00:00:00 2001 From: Joseph Garrone Date: Sat, 12 Oct 2024 17:30:30 +0200 Subject: [PATCH] Add dir=rtl attribut to html when using a RTL language --- src/login/KcContext/KcContext.ts | 1 + src/login/i18n/noJsx/getI18n.tsx | 44 ++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/src/login/KcContext/KcContext.ts b/src/login/KcContext/KcContext.ts index 14d1169f..161e45de 100644 --- a/src/login/KcContext/KcContext.ts +++ b/src/login/KcContext/KcContext.ts @@ -94,6 +94,7 @@ export declare namespace KcContext { languageTag: string; }[]; currentLanguageTag: string; + rtl?: boolean; }; auth?: { showUsername?: boolean; diff --git a/src/login/i18n/noJsx/getI18n.tsx b/src/login/i18n/noJsx/getI18n.tsx index e560e2e3..f619a303 100644 --- a/src/login/i18n/noJsx/getI18n.tsx +++ b/src/login/i18n/noJsx/getI18n.tsx @@ -19,6 +19,7 @@ export type KcContextLike = { locale?: { currentLanguageTag: string; supported: { languageTag: string; url: string; label: string }[]; + rtl?: boolean; }; "x-keycloakify": { messages: Record; @@ -95,6 +96,49 @@ export function createGetI18n< const html = document.querySelector("html"); assert(html !== null); html.lang = currentLanguageTag; + + const isRtl = (() => { + const { rtl } = kcContext.locale ?? {}; + + if (rtl !== undefined) { + return rtl; + } + + return [ + /* spell-checker: disable */ + // Common RTL languages + "ar", // Arabic + "fa", // Persian (Farsi) + "he", // Hebrew + "ur", // Urdu + "ps", // Pashto + "syr", // Syriac + "dv", // Divehi (Maldivian) + "ku", // Kurdish (Sorani) + "ug", // Uighur + "az", // Azerbaijani (Arabic script) + "sd", // Sindhi + + // Less common RTL languages + "yi", // Yiddish + "ha", // Hausa (when written in Arabic script) + "ks", // Kashmiri (written in the Perso-Arabic script) + "bal", // Balochi (when written in Arabic script) + "khw", // Khowar (Chitrali) + "brh", // Brahui (when written in Arabic script) + "tmh", // Tamashek (some dialects use Arabic script) + "bgn", // Western Balochi + "arc", // Aramaic + "sam", // Samaritan Aramaic + "prd", // Parsi-Dari (a dialect of Persian) + "huz", // Hazaragi (a dialect of Persian) + "gbz", // Zaza (written in Arabic script in some areas) + "urj" // Urdu in Romanized script (not always RTL, but to account for edge cases) + /* spell-checker: enable */ + ].includes(currentLanguageTag); + })(); + + html.dir = isRtl ? "rtl" : "ltr"; } const getLanguageLabel = (languageTag: LanguageTag) => {