this repo has no description
at main 73 lines 1.8 kB view raw
1import { i18n } from '@lingui/core'; 2import { 3 fromNavigator, 4 fromStorage, 5 fromUrl, 6 multipleDetect, 7} from '@lingui/detect-locale'; 8import Locale from 'intl-locale-textinfo-polyfill'; 9 10import { ALL_LOCALES, DEFAULT_LANG } from '../locales'; 11import { messages } from '../locales/en.po'; 12import localeMatch from '../utils/locale-match'; 13 14const { PHANPY_DEFAULT_LANG } = import.meta.env; 15 16const langFileMaps = { 17 // kab: 'kab-KAB', 18}; 19 20i18n.load(DEFAULT_LANG, messages); 21i18n.on('change', () => { 22 const lang = i18n.locale; 23 if (lang) { 24 // lang 25 document.documentElement.lang = lang; 26 // LTR or RTL 27 try { 28 const { direction } = new Locale(lang).textInfo; 29 document.documentElement.dir = direction; 30 } catch (e) { 31 console.error(e); 32 } 33 } 34}); 35 36export async function activateLang(lang) { 37 if (!lang || lang === DEFAULT_LANG) { 38 i18n.activate(DEFAULT_LANG); 39 console.log('💬 ACTIVATE LANG', DEFAULT_LANG, lang); 40 } else { 41 try { 42 const { messages } = await import( 43 `../locales/${langFileMaps[lang] || lang}.po` 44 ); 45 i18n.loadAndActivate({ locale: lang, messages }); 46 console.log('💬 ACTIVATE LANG', lang, messages); 47 } catch (e) { 48 console.error(e); 49 // Fallback to default language 50 i18n.activate(DEFAULT_LANG); 51 console.log('💬 ACTIVATE LANG', DEFAULT_LANG, lang); 52 } 53 } 54} 55 56export function initActivateLang() { 57 const languages = multipleDetect( 58 fromUrl('lang'), 59 fromStorage('lang'), 60 fromNavigator(), 61 PHANPY_DEFAULT_LANG, 62 DEFAULT_LANG, 63 ); 64 const matchedLang = 65 languages.find((l) => ALL_LOCALES.includes(l)) || 66 localeMatch(languages, ALL_LOCALES); 67 activateLang(matchedLang); 68 69 // const yes = confirm(t`Reload to apply language setting?`); 70 // if (yes) { 71 // window.location.reload(); 72 // } 73}