this repo has no description
1import { _, getLocaleFromNavigator, init, locale, register } from "svelte-i18n";
2
3const LOCALE_STORAGE_KEY = "tranquil-pds-locale";
4
5const SUPPORTED_LOCALES = ["en", "zh", "ja", "ko", "sv", "fi"] as const;
6export type SupportedLocale = typeof SUPPORTED_LOCALES[number];
7
8export const localeNames: Record<SupportedLocale, string> = {
9 en: "English",
10 zh: "中文",
11 ja: "日本語",
12 ko: "한국어",
13 sv: "Svenska",
14 fi: "Suomi",
15};
16
17register("en", () => import("../locales/en.json"));
18register("zh", () => import("../locales/zh.json"));
19register("ja", () => import("../locales/ja.json"));
20register("ko", () => import("../locales/ko.json"));
21register("sv", () => import("../locales/sv.json"));
22register("fi", () => import("../locales/fi.json"));
23
24function getInitialLocale(): string {
25 const stored = localStorage.getItem(LOCALE_STORAGE_KEY);
26 if (stored && SUPPORTED_LOCALES.includes(stored as SupportedLocale)) {
27 return stored;
28 }
29
30 const browserLocale = getLocaleFromNavigator();
31 if (browserLocale) {
32 const lang = browserLocale.split("-")[0];
33 if (SUPPORTED_LOCALES.includes(lang as SupportedLocale)) {
34 return lang;
35 }
36 }
37
38 return "en";
39}
40
41export function initI18n() {
42 init({
43 fallbackLocale: "en",
44 initialLocale: getInitialLocale(),
45 });
46}
47
48export function setLocale(newLocale: SupportedLocale) {
49 locale.set(newLocale);
50 localStorage.setItem(LOCALE_STORAGE_KEY, newLocale);
51 document.documentElement.lang = newLocale;
52}
53
54export function getSupportedLocales(): SupportedLocale[] {
55 return [...SUPPORTED_LOCALES];
56}
57
58export { _, locale };