From 44853095b24a357ad1e5bce80cb4b2426cc06405 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonardo=20Mur=C3=A7a?= Date: Thu, 10 Apr 2025 19:50:56 -0300 Subject: [PATCH] Persist user lang chose --- src/i18n/index.js | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/i18n/index.js b/src/i18n/index.js index c465f60..9b358f3 100644 --- a/src/i18n/index.js +++ b/src/i18n/index.js @@ -1,23 +1,35 @@ import { derived, writable } from "svelte/store"; import translations from "./translations"; +const storedLocale = localStorage.getItem("locale"); const browserLocale = navigator.language || "en"; -const [baseLang, region] = browserLocale.split("-"); +const [baseLang] = browserLocale.split("-"); + +export const DEFAULT_LOCALE = + storedLocale && translations[storedLocale] ? storedLocale : + translations[browserLocale] ? browserLocale : + translations[baseLang] ? baseLang : + "en"; -export const DEFAULT_LOCALE = translations[browserLocale] ? browserLocale : translations[baseLang] ? baseLang :"en"; export const locale = writable(DEFAULT_LOCALE); + +locale.subscribe((value) => { + if (value) localStorage.setItem("locale", value); +}); + export const locales = Object.entries(translations).map(([key, lang]) => [key, lang.name]); function translate(locale, key, vars = {}) { if (!key) throw new Error("Translation key is required."); + const fallbackLocale = "en"; const validLocale = translations[locale] ? locale : translations[baseLang] ? baseLang - : "en"; + : fallbackLocale; - let text = translations[validLocale][key] || translations["en"][key]; + let text = translations[validLocale][key] || translations[fallbackLocale][key]; if (!text) { console.error(`Missing translation for key "${key}" in locale "${validLocale}".`); @@ -32,4 +44,4 @@ function translate(locale, key, vars = {}) { export const t = derived(locale, ($locale) => (key, vars = {}) => translate($locale, key, vars) -); +); \ No newline at end of file