|
1 | | -// @ts-ignore |
2 | | -import {messages as en} from "./locales/en.po"; |
3 | | -// @ts-ignore |
4 | | -import {messages as de} from "./locales/de.po"; |
5 | | -// @ts-ignore |
6 | | -import {messages as fr} from "./locales/fr.po"; |
7 | | -// @ts-ignore |
8 | | -import {messages as nl} from "./locales/nl.po"; |
9 | | -// @ts-ignore |
10 | | -import {messages as pt} from "./locales/pt.po"; |
11 | | -// @ts-ignore |
12 | | -import {messages as es} from "./locales/es.po"; |
13 | | -// @ts-ignore |
14 | | -import {messages as zhCn} from "./locales/zh-cn.po"; |
15 | | -// @ts-ignore |
16 | | -import {messages as zhHk} from "./locales/zh-hk.po"; |
17 | | -// @ts-ignore |
18 | | -import {messages as ptBr} from "./locales/pt-br.po"; |
19 | | -// @ts-ignore |
20 | | -import {messages as vi} from "./locales/vi.po"; |
21 | 1 | import {i18n} from "@lingui/core"; |
22 | 2 | import {t} from "@lingui/macro"; |
23 | 3 |
|
24 | 4 | export type SupportedLocales = "en" | "de" | "fr" | "nl" | "pt" | "es" | "zh-cn" | "pt-br" | "vi" |"zh-hk"; |
25 | 5 |
|
26 | | -export const localeMessages: Record<string, any> = { |
27 | | - en: en, |
28 | | - de: de, |
29 | | - fr: fr, |
30 | | - nl: nl, |
31 | | - pt: pt, |
32 | | - es: es, |
33 | | - "zh-cn": zhCn, |
34 | | - "zh-hk": zhHk, |
35 | | - "pt-br": ptBr, |
36 | | - vi: vi, |
37 | | -}; |
| 6 | +export const availableLocales = ["en", "de", "fr", "nl", "pt", "es", "zh-cn", "zh-hk", "pt-br", "vi",]; |
38 | 7 |
|
39 | 8 | export const localeToFlagEmojiMap: Record<SupportedLocales, string> = { |
40 | 9 | en: '🇬🇧', |
@@ -85,24 +54,21 @@ export const getClientLocale = () => { |
85 | 54 | }; |
86 | 55 |
|
87 | 56 | export async function dynamicActivateLocale(locale: string) { |
88 | | - try { |
89 | | - const messages = localeMessages[locale] || localeMessages["en"]; |
90 | | - i18n.load(locale, messages); |
| 57 | + locale = availableLocales.includes(locale) ? locale : "en"; |
| 58 | + const module = (await import(`./locales/${locale}.po`)); |
| 59 | + i18n.load(locale, module.messages); |
91 | 60 | i18n.activate(locale); |
92 | | - } catch (error) { |
93 | | - i18n.activate("en"); |
94 | | - } |
95 | 61 | } |
96 | 62 |
|
97 | 63 | export const getSupportedLocale = (userLocale: string) => { |
98 | 64 | const normalizedLocale = userLocale.toLowerCase(); |
99 | 65 |
|
100 | | - if (localeMessages[normalizedLocale]) { |
| 66 | + if (availableLocales.includes(normalizedLocale)) { |
101 | 67 | return normalizedLocale; |
102 | 68 | } |
103 | 69 |
|
104 | 70 | const mainLanguage = normalizedLocale.split('-')[0]; |
105 | | - const mainLocale = Object.keys(localeMessages).find(locale => locale.startsWith(mainLanguage)); |
| 71 | + const mainLocale = availableLocales.find(locale => locale.startsWith(mainLanguage)); |
106 | 72 | if (mainLocale) { |
107 | 73 | return mainLocale; |
108 | 74 | } |
|
0 commit comments