1
0
Fork 0
mirror of https://github.com/immich-app/immich.git synced 2025-03-01 15:11:21 +01:00
immich/web/src/lib/utils/i18n.ts
2024-07-04 22:56:54 -05:00

33 lines
1.1 KiB
TypeScript

import { langs } from '$lib/constants';
import { locale, t, waitLocale } from 'svelte-i18n';
import { get, type Unsubscriber } from 'svelte/store';
export async function getFormatter() {
let unsubscribe: Unsubscriber | undefined;
await new Promise((resolve) => {
unsubscribe = locale.subscribe((value) => value && resolve(value));
});
unsubscribe?.();
await waitLocale();
return get(t);
}
// https://github.com/kaisermann/svelte-i18n/blob/780932a3e1270d521d348aac8ba03be9df309f04/src/runtime/stores/locale.ts#L11
function getSubLocales(refLocale: string) {
return refLocale
.split('-')
.map((_, i, arr) => arr.slice(0, i + 1).join('-'))
.reverse();
}
export function getClosestAvailableLocale(locales: readonly string[], allLocales: readonly string[]) {
const allLocalesSet = new Set(allLocales);
return locales.find((locale) => getSubLocales(locale).some((subLocale) => allLocalesSet.has(subLocale)));
}
export const langCodes = langs.map((lang) => lang.code);
export function getPreferredLocale() {
return getClosestAvailableLocale(navigator.languages, langCodes);
}