mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-12-06 00:16:49 +00:00
Fix up locales, optimised some functions
This commit is contained in:
@@ -8,14 +8,16 @@
|
|||||||
|
|
||||||
const allLocales = [
|
const allLocales = [
|
||||||
["en", "en-US"],
|
["en", "en-US"],
|
||||||
["es", "es-ES"],
|
|
||||||
["de", "de-DE"],
|
["de", "de-DE"],
|
||||||
|
["es", "es-ES"],
|
||||||
|
["it", "it-IT"],
|
||||||
|
["ja", "ja-JP"],
|
||||||
|
["nl", "nl-NL"],
|
||||||
|
["pl", "pl-PL"],
|
||||||
["ru", "ru-RU"],
|
["ru", "ru-RU"],
|
||||||
["sk", "sk-SK"],
|
["sk", "sk-SK"],
|
||||||
|
["vi", "vi-VN"],
|
||||||
["zh", "zh-CN"],
|
["zh", "zh-CN"],
|
||||||
["pl", "pl-PL"],
|
|
||||||
["it", "it-IT"],
|
|
||||||
["nl", "nl-NL"],
|
|
||||||
];
|
];
|
||||||
|
|
||||||
const ignoreUnused = [
|
const ignoreUnused = [
|
||||||
|
|||||||
@@ -27,12 +27,12 @@ function LocalePicker({ menuAlign = "start" }: Props) {
|
|||||||
<button type="button" className={cns} data-bs-toggle="dropdown">
|
<button type="button" className={cns} data-bs-toggle="dropdown">
|
||||||
<Flag countryCode={getFlagCodeForLocale(locale)} />
|
<Flag countryCode={getFlagCodeForLocale(locale)} />
|
||||||
</button>
|
</button>
|
||||||
<div className={cn("dropdown-menu", {
|
<div
|
||||||
|
className={cn("dropdown-menu", {
|
||||||
"dropdown-menu-end": menuAlign === "end",
|
"dropdown-menu-end": menuAlign === "end",
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
{localeOptions.map((item) => {
|
{localeOptions.map((item: any) => (
|
||||||
return (
|
|
||||||
<a
|
<a
|
||||||
className="dropdown-item"
|
className="dropdown-item"
|
||||||
href={`/locale/${item[0]}`}
|
href={`/locale/${item[0]}`}
|
||||||
@@ -44,8 +44,7 @@ function LocalePicker({ menuAlign = "start" }: Props) {
|
|||||||
>
|
>
|
||||||
<Flag countryCode={getFlagCodeForLocale(item[0])} /> <T id={`locale-${item[1]}`} />
|
<Flag countryCode={getFlagCodeForLocale(item[0])} /> <T id={`locale-${item[1]}`} />
|
||||||
</a>
|
</a>
|
||||||
);
|
))}
|
||||||
})}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -16,82 +16,43 @@ import langZh from "./lang/zh.json";
|
|||||||
// not the country code
|
// not the country code
|
||||||
// Remember when adding to this list, also update check-locales.js script
|
// Remember when adding to this list, also update check-locales.js script
|
||||||
const localeOptions = [
|
const localeOptions = [
|
||||||
["en", "en-US"],
|
["en", "en-US", langEn],
|
||||||
["de", "de-DE"],
|
["de", "de-DE", langDe],
|
||||||
["es", "es-ES"],
|
["es", "es-ES", langEs],
|
||||||
["ja", "ja-JP"],
|
["ja", "ja-JP", langJa],
|
||||||
["ru", "ru-RU"],
|
["it", "it-IT", langIt],
|
||||||
["sk", "sk-SK"],
|
["nl", "nl-NL", langNl],
|
||||||
["zh", "zh-CN"],
|
["pl", "pl-PL", langPl],
|
||||||
["pl", "pl-PL"],
|
["ru", "ru-RU", langRu],
|
||||||
["it", "it-IT"],
|
["sk", "sk-SK", langSk],
|
||||||
["vi", "vi-VN"],
|
["vi", "vi-VN", langVi],
|
||||||
["nl", "nl-NL"],
|
["zh", "zh-CN", langZh],
|
||||||
];
|
];
|
||||||
|
|
||||||
const loadMessages = (locale?: string): typeof langList & typeof langEn => {
|
const loadMessages = (locale?: string): typeof langList & typeof langEn => {
|
||||||
const thisLocale = locale || "en";
|
const thisLocale = (locale || "en").slice(0, 2);
|
||||||
switch (thisLocale.slice(0, 2)) {
|
|
||||||
case "de":
|
// ensure this lang exists in localeOptions above, otherwise fallback to en
|
||||||
return Object.assign({}, langList, langEn, langDe);
|
if (thisLocale === "en" || !localeOptions.some(([code]) => code === thisLocale)) {
|
||||||
case "es":
|
|
||||||
return Object.assign({}, langList, langEn, langEs);
|
|
||||||
case "ja":
|
|
||||||
return Object.assign({}, langList, langEn, langJa);
|
|
||||||
case "ru":
|
|
||||||
return Object.assign({}, langList, langEn, langRu);
|
|
||||||
case "sk":
|
|
||||||
return Object.assign({}, langList, langEn, langSk);
|
|
||||||
case "zh":
|
|
||||||
return Object.assign({}, langList, langEn, langZh);
|
|
||||||
case "pl":
|
|
||||||
return Object.assign({}, langList, langEn, langPl);
|
|
||||||
case "it":
|
|
||||||
return Object.assign({}, langList, langEn, langIt);
|
|
||||||
case "vi":
|
|
||||||
return Object.assign({}, langList, langEn, langVi);
|
|
||||||
case "nl":
|
|
||||||
return Object.assign({}, langList, langEn, langNl);
|
|
||||||
default:
|
|
||||||
return Object.assign({}, langList, langEn);
|
return Object.assign({}, langList, langEn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return Object.assign({}, langList, langEn, localeOptions.find(([code]) => code === thisLocale)?.[2]);
|
||||||
};
|
};
|
||||||
|
|
||||||
const getFlagCodeForLocale = (locale?: string) => {
|
const getFlagCodeForLocale = (locale?: string) => {
|
||||||
switch (locale) {
|
const thisLocale = (locale || "en").slice(0, 2);
|
||||||
case "es-ES":
|
|
||||||
case "es":
|
// only add to this if your flag is different from the locale code
|
||||||
return "ES";
|
const specialCases: Record<string, string> = {
|
||||||
case "de-DE":
|
ja: "jp", // Japan
|
||||||
case "de":
|
zh: "cn", // China
|
||||||
return "DE";
|
};
|
||||||
case "ja-JP":
|
|
||||||
case "ja":
|
if (specialCases[thisLocale]) {
|
||||||
return "JP";
|
return specialCases[thisLocale].toUpperCase();
|
||||||
case "ru-RU":
|
|
||||||
case "ru":
|
|
||||||
return "RU";
|
|
||||||
case "sk-SK":
|
|
||||||
case "sk":
|
|
||||||
return "SK";
|
|
||||||
case "zh":
|
|
||||||
case "zh-CN":
|
|
||||||
return "CN";
|
|
||||||
case "pl":
|
|
||||||
case "pl-PL":
|
|
||||||
return "PL";
|
|
||||||
case "it":
|
|
||||||
case "it-IT":
|
|
||||||
return "IT";
|
|
||||||
case "vi":
|
|
||||||
case "vi-VN":
|
|
||||||
return "VN";
|
|
||||||
case "nl":
|
|
||||||
case "nl-NL":
|
|
||||||
return "NL";
|
|
||||||
default:
|
|
||||||
return "EN";
|
|
||||||
}
|
}
|
||||||
|
return thisLocale.toUpperCase();
|
||||||
};
|
};
|
||||||
|
|
||||||
const getLocale = (short = false) => {
|
const getLocale = (short = false) => {
|
||||||
@@ -112,10 +73,7 @@ const getLocale = (short = false) => {
|
|||||||
const cache = createIntlCache();
|
const cache = createIntlCache();
|
||||||
|
|
||||||
const initialMessages = loadMessages(getLocale());
|
const initialMessages = loadMessages(getLocale());
|
||||||
let intl = createIntl(
|
let intl = createIntl({ locale: getLocale(), messages: initialMessages }, cache);
|
||||||
{ locale: getLocale(), messages: initialMessages },
|
|
||||||
cache,
|
|
||||||
);
|
|
||||||
|
|
||||||
const changeLocale = (locale: string): void => {
|
const changeLocale = (locale: string): void => {
|
||||||
const messages = loadMessages(locale);
|
const messages = loadMessages(locale);
|
||||||
@@ -155,12 +113,6 @@ const T = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export {
|
console.log("L:", localeOptions);
|
||||||
localeOptions,
|
|
||||||
getFlagCodeForLocale,
|
export { localeOptions, getFlagCodeForLocale, getLocale, createIntl, changeLocale, intl, T };
|
||||||
getLocale,
|
|
||||||
createIntl,
|
|
||||||
changeLocale,
|
|
||||||
intl,
|
|
||||||
T,
|
|
||||||
};
|
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
{
|
{
|
||||||
"aaccess-list.rule-source.placeholder": {
|
|
||||||
"defaultMessage": "192.168.1.100 or 192.168.1.0/24 or 2001:0db8::/32"
|
|
||||||
},
|
|
||||||
"access-list": {
|
"access-list": {
|
||||||
"defaultMessage": "Access List"
|
"defaultMessage": "Access List"
|
||||||
},
|
},
|
||||||
@@ -26,6 +23,9 @@
|
|||||||
"access-list.public.subtitle": {
|
"access-list.public.subtitle": {
|
||||||
"defaultMessage": "No basic auth required"
|
"defaultMessage": "No basic auth required"
|
||||||
},
|
},
|
||||||
|
"access-list.rule-source.placeholder": {
|
||||||
|
"defaultMessage": "192.168.1.100 or 192.168.1.0/24 or 2001:0db8::/32"
|
||||||
|
},
|
||||||
"access-list.satisfy-any": {
|
"access-list.satisfy-any": {
|
||||||
"defaultMessage": "Satisfy Any"
|
"defaultMessage": "Satisfy Any"
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user