56 lines
1.5 KiB
TypeScript
56 lines
1.5 KiB
TypeScript
import { appLocales } from "../i18n/routing";
|
|
|
|
export type AppLocale = (typeof appLocales)[number];
|
|
|
|
export const FALLBACK_LOCALE: AppLocale = "de";
|
|
|
|
export function isSupportedLocale(locale: string | undefined | null): locale is AppLocale {
|
|
return locale === "de" || locale === "en" || locale === "ar";
|
|
}
|
|
|
|
export function resolveLocale(locale: string | undefined | null, fallbackLocale: AppLocale): AppLocale {
|
|
return isSupportedLocale(locale) ? locale : fallbackLocale;
|
|
}
|
|
|
|
export function getDirection(locale: string): "ltr" | "rtl" {
|
|
return locale === "ar" ? "rtl" : "ltr";
|
|
}
|
|
|
|
export function stripLocalePrefix(pathname: string): string {
|
|
for (const locale of appLocales) {
|
|
if (pathname === `/${locale}`) {
|
|
return "/";
|
|
}
|
|
|
|
if (pathname.startsWith(`/${locale}/`)) {
|
|
return pathname.slice(locale.length + 1);
|
|
}
|
|
}
|
|
|
|
return pathname || "/";
|
|
}
|
|
|
|
export function getLocalizedPath(
|
|
locale: string,
|
|
pathname = "/",
|
|
defaultLocale: AppLocale,
|
|
): string {
|
|
return getLocalizedPathWithDefault(locale, pathname, defaultLocale);
|
|
}
|
|
|
|
export function getLocalizedPathWithDefault(
|
|
locale: string,
|
|
pathname = "/",
|
|
defaultLocale: AppLocale,
|
|
): string {
|
|
const localeKey = resolveLocale(locale, defaultLocale);
|
|
const normalizedPath = pathname === "" ? "/" : pathname;
|
|
const strippedPath = stripLocalePrefix(normalizedPath);
|
|
|
|
if (localeKey === defaultLocale) {
|
|
return strippedPath;
|
|
}
|
|
|
|
return strippedPath === "/" ? `/${localeKey}` : `/${localeKey}${strippedPath}`;
|
|
}
|