Skip to content

Commit 5f80c36

Browse files
authored
Revert "I18N performance improvements (#526)" (#527)
1 parent 29bc321 commit 5f80c36

23 files changed

+475
-715
lines changed

frontend/src/locales.ts

+90-33
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,111 @@
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";
121
import {i18n} from "@lingui/core";
22+
import {t} from "@lingui/macro";
223

3-
export type SupportedLocales =
4-
| "en" | "de" | "fr" | "nl" | "pt" | "es"
5-
| "zh-cn" | "zh-hk" | "pt-br" | "vi";
24+
export type SupportedLocales = "en" | "de" | "fr" | "nl" | "pt" | "es" | "zh-cn" | "pt-br" | "vi" |"zh-hk";
25+
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+
};
638

739
export const localeToFlagEmojiMap: Record<SupportedLocales, string> = {
8-
en: '🇬🇧', de: '🇩🇪', fr: '🇫🇷', nl: '🇳🇱', pt: '🇵🇹',
9-
es: '🇪🇸', "zh-cn": '🇨🇳', "zh-hk": '🇭🇰',
10-
"pt-br": '🇧🇷', vi: '🇻🇳',
40+
en: '🇬🇧',
41+
de: '🇩🇪',
42+
fr: '🇫🇷',
43+
nl: '🇳🇱',
44+
pt: '🇵🇹',
45+
es: '🇪🇸',
46+
"zh-cn": '🇨🇳',
47+
"zh-hk": '🇭🇰',
48+
"pt-br": '🇧🇷',
49+
vi: '🇻🇳',
1150
};
1251

1352
export const localeToNameMap: Record<SupportedLocales, string> = {
14-
en: `English`, de: `German`, fr: `French`, nl: `Dutch`,
15-
pt: `Portuguese`, es: `Spanish`, "zh-cn": `Chinese`,
16-
"zh-hk": `Cantonese`, "pt-br": `Portuguese (Brazil)`, vi: `Vietnamese`,
53+
en: `English`,
54+
de: `German`,
55+
fr: `French`,
56+
nl: `Dutch`,
57+
pt: `Portuguese`,
58+
es: `Spanish`,
59+
"zh-cn": `Chinese`,
60+
"zh-hk": `Cantonese`,
61+
"pt-br": `Portuguese (Brazil)`,
62+
vi: `Vietnamese`,
1763
};
1864

19-
export const getLocaleName = (locale: SupportedLocales) => localeToNameMap[locale];
65+
export const getLocaleName = (locale: SupportedLocales) => {
66+
return t`${localeToNameMap[locale]}`
67+
}
2068

21-
export const getClientLocale = (): SupportedLocales => {
69+
export const getClientLocale = () => {
2270
if (typeof window !== "undefined") {
23-
const storedLocale = document.cookie.split(";")
24-
.find((c) => c.includes("locale="))?.split("=")[1];
25-
return getSupportedLocale(storedLocale || window.navigator.language);
26-
}
27-
return "en";
28-
};
71+
const storedLocale = document
72+
.cookie
73+
.split(";")
74+
.find((c) => c.includes("locale="))
75+
?.split("=")[1];
2976

30-
export const getSupportedLocale = (userLocale: string): SupportedLocales => {
31-
const supported: SupportedLocales[] = [
32-
"en", "de", "fr", "nl", "pt", "es", "zh-cn", "zh-hk", "pt-br", "vi"
33-
];
77+
if (storedLocale) {
78+
return getSupportedLocale(storedLocale);
79+
}
3480

35-
const normalized = userLocale.toLowerCase();
36-
if (supported.includes(normalized as SupportedLocales)) return normalized as SupportedLocales;
81+
return getSupportedLocale(window.navigator.language);
82+
}
3783

38-
const mainLang = normalized.split('-')[0];
39-
return supported.find(l => l.startsWith(mainLang)) || "en";
84+
return "en";
4085
};
4186

4287
export async function dynamicActivateLocale(locale: string) {
43-
const safeLocale = getSupportedLocale(locale);
4488
try {
45-
const {messages} = await import(
46-
/* @vite-ignore */
47-
`./locales/${safeLocale}.po`
48-
);
49-
i18n.load(safeLocale, messages);
50-
i18n.activate(safeLocale);
51-
} catch {
89+
const messages = localeMessages[locale] || localeMessages["en"];
90+
i18n.load(locale, messages);
91+
i18n.activate(locale);
92+
} catch (error) {
5293
i18n.activate("en");
5394
}
5495
}
96+
97+
export const getSupportedLocale = (userLocale: string) => {
98+
const normalizedLocale = userLocale.toLowerCase();
99+
100+
if (localeMessages[normalizedLocale]) {
101+
return normalizedLocale;
102+
}
103+
104+
const mainLanguage = normalizedLocale.split('-')[0];
105+
const mainLocale = Object.keys(localeMessages).find(locale => locale.startsWith(mainLanguage));
106+
if (mainLocale) {
107+
return mainLocale;
108+
}
109+
110+
return "en";
111+
};

frontend/src/locales/de.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)