this repo has no description
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}