mirror of
https://github.com/outline/outline.git
synced 2026-06-13 03:14:59 +03:00
49d5052a51
* First pass * Remove prop drilling, fix comment layout * Revert dev:watch to use dev:backend Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
33 lines
1.0 KiB
TypeScript
33 lines
1.0 KiB
TypeScript
const ltrChars =
|
|
"A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02B8\u0300-\u0590\u0800-\u1FFF\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF";
|
|
const rtlChars = "\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC";
|
|
// oxlint-disable-next-line no-misleading-character-class
|
|
const rtlDirCheck = new RegExp("^[^" + ltrChars + "]*[" + rtlChars + "]");
|
|
|
|
const rtlLanguageCodes = new Set(["ar", "fa", "he", "ps", "ur", "yi"]);
|
|
|
|
/**
|
|
* Returns true if the text is likely written in an RTL language.
|
|
*
|
|
* @param text The text to check
|
|
* @returns True if the text is RTL
|
|
*/
|
|
export function isRTL(text: string) {
|
|
return rtlDirCheck.test(text);
|
|
}
|
|
|
|
/**
|
|
* Returns true if the given locale is an RTL language. Accepts both CLDR
|
|
* (`he_IL`) and BCP47 (`he-IL`, `he`) formats.
|
|
*
|
|
* @param locale The locale to check
|
|
* @returns True if the locale is RTL
|
|
*/
|
|
export function isRTLLanguage(locale: string | null | undefined) {
|
|
if (!locale) {
|
|
return false;
|
|
}
|
|
const code = locale.toLowerCase().split(/[-_]/)[0];
|
|
return rtlLanguageCodes.has(code);
|
|
}
|