38 lines
1.0 KiB
TypeScript
38 lines
1.0 KiB
TypeScript
import i18n from "i18next";
|
|
import { initReactI18next } from "react-i18next";
|
|
import en from "./locales/en.json";
|
|
import de from "./locales/de.json";
|
|
|
|
export const SUPPORTED_LANGUAGES = [
|
|
{ code: "en", label: "English" },
|
|
{ code: "de", label: "Deutsch" },
|
|
] as const;
|
|
|
|
export type LanguageCode = (typeof SUPPORTED_LANGUAGES)[number]["code"];
|
|
|
|
const STORAGE_KEY = "toolr-language";
|
|
|
|
export function getStoredLanguage(): LanguageCode {
|
|
if (typeof window === "undefined") return "en";
|
|
const stored = window.localStorage.getItem(STORAGE_KEY);
|
|
if (stored === "en" || stored === "de") return stored;
|
|
const nav = window.navigator.language?.toLowerCase() ?? "";
|
|
return nav.startsWith("de") ? "de" : "en";
|
|
}
|
|
|
|
export function setStoredLanguage(lang: LanguageCode) {
|
|
window.localStorage.setItem(STORAGE_KEY, lang);
|
|
}
|
|
|
|
void i18n.use(initReactI18next).init({
|
|
resources: {
|
|
en: { translation: en },
|
|
de: { translation: de },
|
|
},
|
|
lng: getStoredLanguage(),
|
|
fallbackLng: "en",
|
|
interpolation: { escapeValue: false },
|
|
});
|
|
|
|
export default i18n;
|