mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2026-09-24 13:50:20 +01:00
Merge pull request #5848 from siimaarmaa/develop
Translate the entire user interface into Estonian and ensure that the Estonian flag is displayed./Tõlgi kogu kasutajaliides eesti keelde ja kinnita Eesti lipp.
This commit is contained in:
@@ -69,17 +69,17 @@ const loadMessages = (locale?: string): typeof langList & typeof langEn => {
|
||||
const getFlagCodeForLocale = (locale?: string) => {
|
||||
const thisLocale = (locale || "en").slice(0, 2);
|
||||
|
||||
// only add to this if your flag is different from the locale code
|
||||
const specialCases: Record<string, string> = {
|
||||
ja: "jp", // Japan
|
||||
zh: "cn", // China
|
||||
vi: "vn", // Vietnam
|
||||
ko: "kr", // Korea
|
||||
cs: "cz", // Czechia
|
||||
ga: "ie", // Ireland (Irish)
|
||||
et: "ee", // Estonia
|
||||
uk: "ua", // Ukraine
|
||||
};
|
||||
// only add to this if your flag is different from the locale code
|
||||
const specialCases: Record<string, string> = {
|
||||
ja: "jp", // Japan
|
||||
zh: "cn", // China
|
||||
vi: "vn", // Vietnam
|
||||
ko: "kr", // Korea
|
||||
cs: "cz", // Czechia
|
||||
ga: "ie", // Ireland (Irish)
|
||||
et: "ee", // Estonia (ISO 3166-1). "et" as a country code would be Ethiopia.
|
||||
uk: "ua", // Ukraine
|
||||
};
|
||||
|
||||
if (specialCases[thisLocale]) {
|
||||
return specialCases[thisLocale].toUpperCase();
|
||||
|
||||
@@ -92,8 +92,23 @@ describe("getFlagCodeForLocale", () => {
|
||||
expect(getFlagCodeForLocale("ga-IE")).toBe("IE");
|
||||
});
|
||||
|
||||
it("returns EE (Estonia) for Estonian locale, not ET (Ethiopia)", () => {
|
||||
expect(getFlagCodeForLocale("et")).toBe("EE");
|
||||
expect(getFlagCodeForLocale("et-EE")).toBe("EE");
|
||||
});
|
||||
|
||||
it("falls back to EN when no locale is provided", () => {
|
||||
expect(getFlagCodeForLocale()).toBe("EN");
|
||||
expect(getFlagCodeForLocale(undefined)).toBe("EN");
|
||||
});
|
||||
});
|
||||
|
||||
describe("formatDateTime Estonian locale", () => {
|
||||
it("uses 24-hour clock for et and et-EE", () => {
|
||||
const value = "2024-06-15T15:30:00.000Z";
|
||||
for (const locale of ["et", "et-EE"]) {
|
||||
const text = formatDateTime(value, locale);
|
||||
expect(text.toLowerCase()).not.toMatch(/\b(am|pm)\b/);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -20,18 +20,29 @@ const parseDate = (value: string | number): Date | null => {
|
||||
}
|
||||
};
|
||||
|
||||
const DATE_LOCALE_BY_LANG: Record<string, string> = {
|
||||
et: "et-EE",
|
||||
};
|
||||
|
||||
const HOUR_CYCLE_BY_LANG: Record<string, "h12" | "h23"> = {
|
||||
et: "h23",
|
||||
};
|
||||
|
||||
const formatDateTime = (value: string | number, locale = "en-US"): string => {
|
||||
const d = parseDate(value);
|
||||
if (!d) return `${value}`;
|
||||
const lang = (locale || "en").slice(0, 2);
|
||||
const resolvedLocale = DATE_LOCALE_BY_LANG[lang] || locale;
|
||||
const hourCycle = HOUR_CYCLE_BY_LANG[lang] || "h12";
|
||||
try {
|
||||
return intlFormat(
|
||||
d,
|
||||
{
|
||||
dateStyle: "medium",
|
||||
timeStyle: "medium",
|
||||
hourCycle: "h12",
|
||||
hourCycle,
|
||||
} as IntlFormatFormatOptions,
|
||||
{ locale },
|
||||
{ locale: resolvedLocale },
|
||||
);
|
||||
} catch {
|
||||
return `${value}`;
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import en from "./src/en.json";
|
||||
import et from "./src/et.json";
|
||||
|
||||
const english = en as Record<string, { defaultMessage: string }>;
|
||||
const estonian = et as Record<string, { defaultMessage: string }>;
|
||||
|
||||
// Brand names, codes and ICU-only strings can stay the same as English.
|
||||
const allowedIdentical = new Set([
|
||||
"certificates.key-type-ecdsa",
|
||||
"certificates.key-type-rsa",
|
||||
"column.ssl",
|
||||
"lets-encrypt",
|
||||
"object.actions-title",
|
||||
"streams.tcp",
|
||||
"streams.udp",
|
||||
]);
|
||||
|
||||
describe("Estonian UI locale", () => {
|
||||
it("covers every English UI key", () => {
|
||||
const missing = Object.keys(english).filter((key) => !(key in estonian));
|
||||
expect(missing).toEqual([]);
|
||||
});
|
||||
|
||||
it("does not add keys that are missing from English", () => {
|
||||
const extra = Object.keys(estonian).filter((key) => !(key in english));
|
||||
expect(extra).toEqual([]);
|
||||
});
|
||||
|
||||
it("is translated, not an English copy", () => {
|
||||
const identical = Object.keys(english).filter(
|
||||
(key) => estonian[key]?.defaultMessage === english[key]?.defaultMessage,
|
||||
);
|
||||
const unexpected = identical.filter((key) => !allowedIdentical.has(key));
|
||||
expect(unexpected).toEqual([]);
|
||||
});
|
||||
|
||||
it("keeps ICU data placeholders from English strings", () => {
|
||||
const argNames = [
|
||||
"count",
|
||||
"object",
|
||||
"objects",
|
||||
"id",
|
||||
"date",
|
||||
"users",
|
||||
"rules",
|
||||
"max",
|
||||
"min",
|
||||
"domain",
|
||||
"code",
|
||||
"latestVersion",
|
||||
"name",
|
||||
];
|
||||
const usedArgs = (message: string) => argNames.filter((name) => message.includes(`{${name}`));
|
||||
const broken: string[] = [];
|
||||
|
||||
for (const key of Object.keys(english)) {
|
||||
const expected = usedArgs(english[key].defaultMessage).join(",");
|
||||
const actual = usedArgs(estonian[key]?.defaultMessage ?? "").join(",");
|
||||
if (expected !== actual) {
|
||||
broken.push(`${key}: expected {${expected}} got {${actual}}`);
|
||||
}
|
||||
}
|
||||
|
||||
expect(broken).toEqual([]);
|
||||
});
|
||||
});
|
||||
@@ -1,7 +1,7 @@
|
||||
## Mis on juurdepääsuloend?
|
||||
|
||||
Ligipääsuloendid pakuvad konkreetsete klientide IP-aadresside musta või valget nimekirja koos puhverserverite autentimisega põhilise HTTP-autentimise kaudu.
|
||||
Juurdepääsuloendiga saad lubada või keelata klientide IP-aadresse ning panna puhverserverile ette HTTP basic-autentimise.
|
||||
|
||||
Saate ühe juurdepääsuloendi jaoks konfigureerida mitu kliendireeglit, kasutajanime ja parooli ning seejärel rakendada neid ühele või mitmele _puhverserverile_.
|
||||
Ühte loendisse saab panna mitu reeglit, kasutajanime ja parooli. Sama loendi saad kinnitada ühele või mitmele puhverserverile.
|
||||
|
||||
See on kõige kasulikum edastatud veebiteenuste puhul, millel pole sisseehitatud autentimismehhanisme või kui soovite kaitsta tundmatute klientide eest.
|
||||
Sellest on kasu siis, kui edastataval teenusel endal sisselogimist pole või tahad võõrad kliendid eemal hoida.
|
||||
|
||||
@@ -2,25 +2,20 @@
|
||||
|
||||
### HTTP-sertifikaat
|
||||
|
||||
HTTP-valideeritud sertifikaat tähendab, et Let's Encrypti serverid
|
||||
HTTP-ga kinnitatud sertifikaadi puhul üritavad Let's Encrypti serverid su domeenidele ligi saada HTTP kaudu (mitte HTTPS!) ja õnnestumise korral väljastavad sertifikaadi.
|
||||
|
||||
proovivad teie domeenidega ühendust luua HTTP (mitte HTTPS!) kaudu ja kui see õnnestub,
|
||||
väljastavad nad teile sertifikaadi.
|
||||
Selleks peab olema loodud puhverserver, mis on HTTP kaudu kättesaadav ja osutab sellele Nginxile. Kui sertifikaat on käes, võid puhverserveri panna HTTPS-i ka kasutama. Uuendamiseks peab HTTP-ligipääs siiski alles jääma.
|
||||
|
||||
Selle meetodi jaoks peate oma domeeni(de) jaoks looma _Proxy Host_, millele pääseb ligi HTTP kaudu ja mis osutab sellele Nginxi installile. Pärast sertifikaadi väljastamist saate muuta _Proxy Host_'i, et seda sertifikaati ka HTTPS
|
||||
ühenduste jaoks kasutada. Sertifikaadi uuendamiseks tuleb aga _Proxy Host_ ikkagi HTTP-juurdepääsu jaoks konfigureerida.
|
||||
|
||||
See protsess _ei_ toeta metamärke kasutavaid domeene.
|
||||
Metamärgid (wildcard) selle meetodiga ei tööta.
|
||||
|
||||
### DNS-sertifikaat
|
||||
|
||||
DNS-i poolt valideeritud sertifikaadi saamiseks peate kasutama DNS-pakkuja pistikprogrammi. Seda DNS-teenuse pakkujat kasutatakse teie domeenis ajutiste kirjete loomiseks ja seejärel pärib Let's
|
||||
Encrypt nende kirjete kohta päringu, et veenduda, et olete omanik, ja kui see õnnestub, väljastavad nad teile sertifikaadi.
|
||||
DNS-iga kinnitatud sertifikaat vajab DNS-teenuse pakkuja pluginat. Plugin loob domeenile ajutised kirjed, Let's Encrypt kontrollib need üle ja õnnestumise korral väljastab sertifikaadi.
|
||||
|
||||
Selle tüüpi sertifikaadi taotlemiseks ei ole vaja luua _Proxy Host_'i. Samuti ei pea teie _Proxy Host_ olema HTTP-juurdepääsu jaoks konfigureeritud.
|
||||
Puhverserverit enne taotlust looma ei pea. HTTP-ligipääsu ka ei nõuta.
|
||||
|
||||
See protsess _toetab_ metamärke kasutavaid domeene.
|
||||
See meetod toetab metamärke.
|
||||
|
||||
### Kohandatud sertifikaat
|
||||
|
||||
Kasutage seda valikut oma SSL-sertifikaadi üleslaadimiseks, mille on esitanud teie enda sertifitseerimisasutus.
|
||||
Siia saad üles laadida oma SSL-sertifikaadi, mille on väljastanud sinu sertifitseerija.
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
## Mis on 404 host?
|
||||
## Mis on 404-host?
|
||||
|
||||
404 host on lihtsalt hosti seadistus, mis kuvab 404 lehte.
|
||||
404-host on lihtsalt host, mis näitab 404 lehte.
|
||||
|
||||
See võib olla kasulik, kui teie domeen on otsingumootorites loetletud ja soovite
|
||||
esitada kenama vealehe või konkreetselt otsingu indekseerijatele öelda, et
|
||||
domeenilehed enam ei eksisteeri.
|
||||
Sellest on abi, kui domeen on otsingumootorites kirjas ja tahad näidata kenamat vealehte või anda indekseerijatele märku, et lehti enam pole.
|
||||
|
||||
Selle hosti teine eelis on selle külastatavuste logide jälgimine ja suunajate vaatamine.
|
||||
Lisaks näed logist, kes sinna sattus ja kust nad tulid.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
## Mis on puhverserver?
|
||||
|
||||
Puhverserver on veebiteenuse sissetuleva andmevoo lõpp-punkt, mida soovite edastada.
|
||||
Puhverserver on veebiteenuse sisend, mille suunad edasi oma tegelikule teenusele.
|
||||
|
||||
See pakub valikulist SSL-i lõpetamist teie teenusele, millel ei pruugi olla sisseehitatud SSL-tuge.
|
||||
Soovi korral lõpetab see SSL-i sinu eest — isegi kui teenusel endal SSL-tuge pole.
|
||||
|
||||
Puhverserverid on Nginxi puhverserveri halduri kõige levinum kasutusala.
|
||||
Puhverserverid on Nginx Proxy Manageri kõige tavalisem kasutus.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
## Mis on ümbersuunamishost?
|
||||
|
||||
Ümbersuunamishost suunab sissetuleva domeeni päringud ümber ja suunab vaataja teisele domeenile.
|
||||
Ümbersuunamishost võtab päringud ühelt domeenilt ja saadab külastaja teisele.
|
||||
|
||||
Kõige levinum põhjus seda tüüpi hosti kasutamiseks on see, kui teie veebisaidi domeenid muutuvad, kuid otsingumootori või suunaja lingid osutavad endiselt vanale domeenile.
|
||||
Kõige sagedamini on seda vaja siis, kui sait kolis uuele domeenile, aga vanad lingid otsingust või viidetest käivad veel vana aadressi pihta.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
## Mis on voog?
|
||||
|
||||
Nginxi suhteliselt uus funktsioon, voog, edastab TCP/UDP liiklust otse võrgus olevale teisele arvutile.
|
||||
Voog on Nginxi suhteliselt uus võimalus suunata TCP/UDP liiklus otse teisele masinale võrgus.
|
||||
|
||||
Kui sul on mänguserverid, FTP- või SSH-serverid, võib see kasuks tulla.
|
||||
Kasulik näiteks mängu-, FTP- või SSH-serverite puhul.
|
||||
|
||||
+260
-251
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user