Skip to content

Commit dc89635

Browse files
committed
Fix up locales, optimised some functions
1 parent cfa9836 commit dc89635

File tree

6 files changed

+1352
-1399
lines changed

6 files changed

+1352
-1399
lines changed

frontend/check-locales.cjs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,16 @@
88

99
const allLocales = [
1010
["en", "en-US"],
11-
["es", "es-ES"],
1211
["de", "de-DE"],
12+
["es", "es-ES"],
13+
["it", "it-IT"],
14+
["ja", "ja-JP"],
15+
["nl", "nl-NL"],
16+
["pl", "pl-PL"],
1317
["ru", "ru-RU"],
1418
["sk", "sk-SK"],
19+
["vi", "vi-VN"],
1520
["zh", "zh-CN"],
16-
["pl", "pl-PL"],
17-
["it", "it-IT"],
18-
["nl", "nl-NL"],
1921
];
2022

2123
const ignoreUnused = [

frontend/src/components/LocalePicker.tsx

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,25 +27,24 @@ function LocalePicker({ menuAlign = "start" }: Props) {
2727
<button type="button" className={cns} data-bs-toggle="dropdown">
2828
<Flag countryCode={getFlagCodeForLocale(locale)} />
2929
</button>
30-
<div className={cn("dropdown-menu", {
31-
"dropdown-menu-end": menuAlign === "end",
32-
})}
33-
>
34-
{localeOptions.map((item) => {
35-
return (
36-
<a
37-
className="dropdown-item"
38-
href={`/locale/${item[0]}`}
39-
key={`locale-${item[0]}`}
40-
onClick={(e) => {
41-
e.preventDefault();
42-
changeTo(item[0]);
43-
}}
44-
>
45-
<Flag countryCode={getFlagCodeForLocale(item[0])} /> <T id={`locale-${item[1]}`} />
46-
</a>
47-
);
30+
<div
31+
className={cn("dropdown-menu", {
32+
"dropdown-menu-end": menuAlign === "end",
4833
})}
34+
>
35+
{localeOptions.map((item: any) => (
36+
<a
37+
className="dropdown-item"
38+
href={`/locale/${item[0]}`}
39+
key={`locale-${item[0]}`}
40+
onClick={(e) => {
41+
e.preventDefault();
42+
changeTo(item[0]);
43+
}}
44+
>
45+
<Flag countryCode={getFlagCodeForLocale(item[0])} /> <T id={`locale-${item[1]}`} />
46+
</a>
47+
))}
4948
</div>
5049
</div>
5150
);

frontend/src/locale/IntlProvider.tsx

Lines changed: 33 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -16,82 +16,43 @@ import langZh from "./lang/zh.json";
1616
// not the country code
1717
// Remember when adding to this list, also update check-locales.js script
1818
const localeOptions = [
19-
["en", "en-US"],
20-
["de", "de-DE"],
21-
["es", "es-ES"],
22-
["ja", "ja-JP"],
23-
["ru", "ru-RU"],
24-
["sk", "sk-SK"],
25-
["zh", "zh-CN"],
26-
["pl", "pl-PL"],
27-
["it", "it-IT"],
28-
["vi", "vi-VN"],
29-
["nl", "nl-NL"],
19+
["en", "en-US", langEn],
20+
["de", "de-DE", langDe],
21+
["es", "es-ES", langEs],
22+
["ja", "ja-JP", langJa],
23+
["it", "it-IT", langIt],
24+
["nl", "nl-NL", langNl],
25+
["pl", "pl-PL", langPl],
26+
["ru", "ru-RU", langRu],
27+
["sk", "sk-SK", langSk],
28+
["vi", "vi-VN", langVi],
29+
["zh", "zh-CN", langZh],
3030
];
3131

3232
const loadMessages = (locale?: string): typeof langList & typeof langEn => {
33-
const thisLocale = locale || "en";
34-
switch (thisLocale.slice(0, 2)) {
35-
case "de":
36-
return Object.assign({}, langList, langEn, langDe);
37-
case "es":
38-
return Object.assign({}, langList, langEn, langEs);
39-
case "ja":
40-
return Object.assign({}, langList, langEn, langJa);
41-
case "ru":
42-
return Object.assign({}, langList, langEn, langRu);
43-
case "sk":
44-
return Object.assign({}, langList, langEn, langSk);
45-
case "zh":
46-
return Object.assign({}, langList, langEn, langZh);
47-
case "pl":
48-
return Object.assign({}, langList, langEn, langPl);
49-
case "it":
50-
return Object.assign({}, langList, langEn, langIt);
51-
case "vi":
52-
return Object.assign({}, langList, langEn, langVi);
53-
case "nl":
54-
return Object.assign({}, langList, langEn, langNl);
55-
default:
56-
return Object.assign({}, langList, langEn);
33+
const thisLocale = (locale || "en").slice(0, 2);
34+
35+
// ensure this lang exists in localeOptions above, otherwise fallback to en
36+
if (thisLocale === "en" || !localeOptions.some(([code]) => code === thisLocale)) {
37+
return Object.assign({}, langList, langEn);
5738
}
39+
40+
return Object.assign({}, langList, langEn, localeOptions.find(([code]) => code === thisLocale)?.[2]);
5841
};
5942

6043
const getFlagCodeForLocale = (locale?: string) => {
61-
switch (locale) {
62-
case "es-ES":
63-
case "es":
64-
return "ES";
65-
case "de-DE":
66-
case "de":
67-
return "DE";
68-
case "ja-JP":
69-
case "ja":
70-
return "JP";
71-
case "ru-RU":
72-
case "ru":
73-
return "RU";
74-
case "sk-SK":
75-
case "sk":
76-
return "SK";
77-
case "zh":
78-
case "zh-CN":
79-
return "CN";
80-
case "pl":
81-
case "pl-PL":
82-
return "PL";
83-
case "it":
84-
case "it-IT":
85-
return "IT";
86-
case "vi":
87-
case "vi-VN":
88-
return "VN";
89-
case "nl":
90-
case "nl-NL":
91-
return "NL";
92-
default:
93-
return "EN";
44+
const thisLocale = (locale || "en").slice(0, 2);
45+
46+
// only add to this if your flag is different from the locale code
47+
const specialCases: Record<string, string> = {
48+
ja: "jp", // Japan
49+
zh: "cn", // China
50+
};
51+
52+
if (specialCases[thisLocale]) {
53+
return specialCases[thisLocale].toUpperCase();
9454
}
55+
return thisLocale.toUpperCase();
9556
};
9657

9758
const getLocale = (short = false) => {
@@ -112,10 +73,7 @@ const getLocale = (short = false) => {
11273
const cache = createIntlCache();
11374

11475
const initialMessages = loadMessages(getLocale());
115-
let intl = createIntl(
116-
{ locale: getLocale(), messages: initialMessages },
117-
cache,
118-
);
76+
let intl = createIntl({ locale: getLocale(), messages: initialMessages }, cache);
11977

12078
const changeLocale = (locale: string): void => {
12179
const messages = loadMessages(locale);
@@ -155,12 +113,6 @@ const T = ({
155113
);
156114
};
157115

158-
export {
159-
localeOptions,
160-
getFlagCodeForLocale,
161-
getLocale,
162-
createIntl,
163-
changeLocale,
164-
intl,
165-
T,
166-
};
116+
console.log("L:", localeOptions);
117+
118+
export { localeOptions, getFlagCodeForLocale, getLocale, createIntl, changeLocale, intl, T };

frontend/src/locale/src/en.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
{
2-
"aaccess-list.rule-source.placeholder": {
3-
"defaultMessage": "192.168.1.100 or 192.168.1.0/24 or 2001:0db8::/32"
4-
},
52
"access-list": {
63
"defaultMessage": "Access List"
74
},
@@ -26,6 +23,9 @@
2623
"access-list.public.subtitle": {
2724
"defaultMessage": "No basic auth required"
2825
},
26+
"access-list.rule-source.placeholder": {
27+
"defaultMessage": "192.168.1.100 or 192.168.1.0/24 or 2001:0db8::/32"
28+
},
2929
"access-list.satisfy-any": {
3030
"defaultMessage": "Satisfy Any"
3131
},

0 commit comments

Comments
 (0)