evOo-local/apps/mobile/lib/ui-direction.ts
cynarAI 6c7eed7580 Initial clean evOo-local from f00577b
Fresh history cut from cynarAI/evoo antigravity-handoff/project-timeline
(Voice First + project timeline). Brand docs/titles as evOo; keep @rakazo/*
packages as tech debt. Excludes node_modules, caches, secrets, voice blobs.
2026-09-20 17:15:16 +02:00

35 lines
1.2 KiB
TypeScript

import { textDirectionForLocale } from "@rakazo/core";
import { reloadAppAsync } from "expo";
import { I18nManager, Platform } from "react-native";
let directionReloadScheduled = false;
export function resolveMobileUiLocale(): string {
return Intl.DateTimeFormat().resolvedOptions().locale || "en";
}
/**
* Apply layout direction for a UI locale.
* Default is English (LTR): supported mobile UI locales are en / zh-CN / ru.
* Do not pass the device locale here — that fights bootstrapI18n on RTL phones
* and can reload-loop when the resolved UI locale stays LTR.
*/
export function applyMobileUiDirection(locale = "en") {
const rtl = textDirectionForLocale(locale) === "rtl";
// Always allow RTL so a later locale switch can take effect after relaunch.
I18nManager.allowRTL(true);
if (I18nManager.isRTL === rtl) return rtl;
// forceRTL persists and only takes effect after reload / next cold start.
I18nManager.forceRTL(rtl);
if (!directionReloadScheduled && Platform.OS !== "web") {
directionReloadScheduled = true;
queueMicrotask(() => {
void reloadAppAsync("ui-direction").catch(() => {
directionReloadScheduled = false;
});
});
}
return rtl;
}