From e2a8ffa2d3bfb223fdf40f3d9979003f5082bc3b Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 3 Nov 2025 14:18:08 +0100 Subject: [PATCH 01/42] Add files via upload Add German --- frontend/src/locale/IntlProvider.tsx | 11 +- frontend/src/locale/lang/de.json | 214 ++++++ frontend/src/locale/lang/lang-list.json | 3 +- .../src/locale/src/HelpDoc/de/AccessLists.md | 7 + .../src/locale/src/HelpDoc/de/Certificates.md | 35 + .../src/locale/src/HelpDoc/de/DeadHosts.md | 12 + .../src/locale/src/HelpDoc/de/ProxyHosts.md | 7 + .../locale/src/HelpDoc/de/RedirectionHosts.md | 7 + frontend/src/locale/src/HelpDoc/de/Streams.md | 6 + frontend/src/locale/src/HelpDoc/de/index.ts | 6 + frontend/src/locale/src/HelpDoc/index.ts | 13 +- frontend/src/locale/src/de.json | 638 ++++++++++++++++++ frontend/src/locale/src/lang-list.json | 3 + 13 files changed, 957 insertions(+), 5 deletions(-) create mode 100644 frontend/src/locale/lang/de.json create mode 100644 frontend/src/locale/src/HelpDoc/de/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/de/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/de/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/de/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/de/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/de/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/de/index.ts create mode 100644 frontend/src/locale/src/de.json diff --git a/frontend/src/locale/IntlProvider.tsx b/frontend/src/locale/IntlProvider.tsx index 46467d01..8d771ac6 100644 --- a/frontend/src/locale/IntlProvider.tsx +++ b/frontend/src/locale/IntlProvider.tsx @@ -1,15 +1,21 @@ import { createIntl, createIntlCache } from "react-intl"; import langEn from "./lang/en.json"; +import langDe from "./lang/de.json"; import langList from "./lang/lang-list.json"; // first item of each array should be the language code, // not the country code // Remember when adding to this list, also update check-locales.js script -const localeOptions = [["en", "en-US"]]; +const localeOptions = [ + ["en", "en-US"], + ["de", "de-DE"], +]; const loadMessages = (locale?: string): typeof langList & typeof langEn => { const thisLocale = locale || "en"; switch (thisLocale.slice(0, 2)) { + case "de": + return Object.assign({}, langList, langEn, langDe); default: return Object.assign({}, langList, langEn); } @@ -17,6 +23,9 @@ const loadMessages = (locale?: string): typeof langList & typeof langEn => { const getFlagCodeForLocale = (locale?: string) => { switch (locale) { + case "de-DE": + case "de": + return "DE"; default: return "EN"; } diff --git a/frontend/src/locale/lang/de.json b/frontend/src/locale/lang/de.json new file mode 100644 index 00000000..8b3e313c --- /dev/null +++ b/frontend/src/locale/lang/de.json @@ -0,0 +1,214 @@ +{ + "access-list": "Zugriffsliste", + "access-list.access-count": "{count} {count, plural, one {Regel} other {Regeln}}", + "access-list.auth-count": "{count} {count, plural, onr {User} other {Users}}", + "access-list.help-rules-last": "Wenn mindestens eine Regel vorhanden ist, wird diese Regel zum Ablehnen aller Anfragen als letzte hinzugefügt.", + "access-list.help.rules-order": "Beachten Sie, dass die Anweisungen „Erlauben“ und „Verbieten“ in der Reihenfolge ihrer Definition angewendet werden.", + "access-list.pass-auth": "Authentifizierung an Upstream weiterleiten", + "access-list.public": "Öffentlich", + "access-list.public.subtitle": "Keine Authentifizierung erforderlich", + "access-list.satisfy-any": "Satisfy Any", + "access-list.subtitle": "{users} {users, plural, one {User} other {Users}}, {rules} {rules, plural, one {Regel} other {Regeln}} - Erstellt: {date}", + "access-lists": "Zugriffslisten", + "action.add": "Hinzufügen", + "action.add-location": "Lokation Hinzufügen", + "action.close": "Schließen", + "action.delete": "Löschen", + "action.disable": "Deaktivieren", + "action.download": "Herrunterladen", + "action.edit": "Bearbeiten", + "action.enable": "Aktivieren", + "action.permissions": "Berechtigungen", + "action.renew": "Erneuert", + "action.view-details": "Details", + "auditlogs": "Protokoll", + "cancel": "Abbrechen", + "certificate": "Zertifikate", + "certificate.custom-certificate": "Zertifikat", + "certificate.custom-certificate-key": "Privater Schlüssel", + "certificate.custom-intermediate": "Zwischen Zertifikat", + "certificate.in-use": "In Benutzung", + "certificate.none.subtitle": "Kein Zertifikat zugewiesen", + "certificate.none.subtitle.for-http": "Dieser Host verwendet kein HTTPS.", + "certificate.none.title": "Kein", + "certificate.not-in-use": "Nicht in Benutzung", + "certificates": "Zertifikate", + "certificates.custom": "Benutzerdefiniertes Zertifikat", + "certificates.custom.warning": "Mit einem Passwort geschützte Schlüsseldateien werden nicht unterstützt.", + "certificates.dns.credentials": "Inhalt der Anmeldedaten-Datei", + "certificates.dns.credentials-note": "Dieses Plugin erfordert eine Konfigurationsdatei, die einen API-Token oder andere Anmeldedaten für Ihren Anbieter enthält.", + "certificates.dns.credentials-warning": "Diese Daten werden als Klartext in der Datenbank und in einer Datei gespeichert!", + "certificates.dns.propagation-seconds": "Wartzeit in Sekunden", + "certificates.dns.propagation-seconds-note": "Leer lassen um die Standardwartezeit des Plugins zu nutzen", + "certificates.dns.provider": "DNS Provider", + "certificates.dns.warning": "Dieser Abschnitt erfordert einige Kenntnisse über Certbot und seine DNS-Plugins. Bitte konsultieren Sie die jeweilige Plugin-Dokumentation.", + "certificates.http.reachability-404": "Unter dieser Domain wurde ein Server gefunden, aber es scheint sich nicht um Nginx Proxy Manager zu handeln. Bitte stellen Sie sicher, dass Ihre Domain auf die IP-Adresse verweist, unter der Ihre NPM-Instanz ausgeführt wird.", + "certificates.http.reachability-failed-to-check": "Die Erreichbarkeit konnte aufgrund eines Kommunikationsfehlers mit site24x7.com nicht überprüft werden.", + "certificates.http.reachability-not-resolved": "Unter dieser Domain ist kein Server verfügbar. Bitte stellen Sie sicher, dass Ihre Domain existiert und auf die IP-Adresse verweist, unter der Ihre NPM-Instanz läuft, und dass gegebenenfalls Port 80 in Ihrem Router weitergeleitet wird.", + "certificates.http.reachability-ok": "Ihr Server ist erreichbar und die Erstellung von Zertifikaten sollte möglich sein.", + "certificates.http.reachability-other": "Unter dieser Domain wurde ein Server gefunden, der jedoch einen unerwarteten Statuscode {code} zurückgegeben hat. Handelt es sich um den NPM-Server? Bitte stellen Sie sicher, dass Ihre Domain auf die IP-Adresse verweist, unter der Ihre NPM-Instanz ausgeführt wird.", + "certificates.http.reachability-wrong-data": "Unter dieser Domain wurde ein Server gefunden, der jedoch unerwartete Daten zurückgegeben hat. Handelt es sich um den NPM-Server? Bitte stellen Sie sicher, dass Ihre Domain auf die IP-Adresse verweist, unter der Ihre NPM-Instanz ausgeführt wird.", + "certificates.http.test-results": "Test Ergeniss", + "certificates.http.warning": "Diese Domänen müssen bereits so konfiguriert sein, dass sie auf diese Installation verweisen.", + "certificates.request.subtitle": "Über Let's Encrypt", + "certificates.request.title": "Anfordern eines neuen Zertifikates", + "column.access": "Zugriff", + "column.authorization": "Genehmigung", + "column.authorizations": "Genehmigungen", + "column.custom-locations": "Benutzerdefinierte Lokation", + "column.destination": "Ziel", + "column.details": "Details", + "column.email": "Email", + "column.event": "Ereignis", + "column.expires": "Verfällt am", + "column.http-code": "Zugriff", + "column.incoming-port": "Eingehender Port", + "column.name": "Name", + "column.protocol": "Protokoll", + "column.provider": "Provider", + "column.roles": "Rollen", + "column.rules": "Regeln", + "column.satisfy": "Satisfy", + "column.satisfy-all": "Alle", + "column.satisfy-any": "Jeder", + "column.scheme": "Schema", + "column.source": "Quelle", + "column.ssl": "SSL", + "column.status": "Status", + "created-on": "Erstellung: {date}", + "dashboard": "Dashboard", + "dead-host": "404 Host", + "dead-hosts": "404 Hosts", + "dead-hosts.count": "{count} {count, plural, one {404 Host} other {404 Hosts}}", + "disabled": "Deaktiviert", + "domain-names": "Domain Name", + "domain-names.max": "{count} Maximale Anzahl von Domainnamen", + "domain-names.placeholder": "Eintragen der Domain...", + "domain-names.wildcards-not-permitted": "Wildcards sind für diesen Typ nicht zulässig.", + "domain-names.wildcards-not-supported": "Wildcards werden für diese Zertifizierungsstelle nicht unterstützt.", + "domains.force-ssl": "SSL Zwang", + "domains.hsts-enabled": "HSTS aktiviert", + "domains.hsts-subdomains": "HSTS Sub-domains", + "domains.http2-support": "HTTP/2 Support", + "domains.use-dns": "Nutze DNS Challenge", + "email-address": "Email Addresse", + "empty-search": "Keine Ergebnisse gefunden", + "empty-subtitle": "Warum erstellen Sie nicht selbst eine?", + "enabled": "aktiviert", + "error.access.at-least-one": "Entweder eine Berechtigung oder eine Zugriffsregel ist erforderlich.", + "error.access.duplicate-usernames": "Autorisierung Benutzernamen müssen eindeutig sein", + "error.invalid-auth": "Ungültige E-Mail-Adresse oder Passwort", + "error.invalid-domain": "Ungültige Domain: {domain}", + "error.invalid-email": "Ungültige E-Mail-Adresse", + "error.max-character-length": "Die maximale Länge beträgt {max} Zeichen{max, plural, one {} other {s}}", + "error.max-domains": "Zu viele Domains, maximal sind {max}", + "error.maximum": "Maximum ist {max}", + "error.min-character-length": "Die mainimale Länge beträgt {min} Zeichen{min, plural, one {} other {s}}", + "error.minimum": "Minimum ist {min}", + "error.passwords-must-match": "Passwörter müssen übereinstimmen", + "error.required": "Dies ist erforderlich.", + "expires.on": "Ablauf am: {date}", + "footer.github-fork": "Fork me on Github", + "host.flags.block-exploits": "Gängige Exploits blockieren", + "host.flags.cache-assets": "Cache Assets", + "host.flags.preserve-path": "Pfad beibehalten", + "host.flags.protocols": "Protokole", + "host.flags.websockets-upgrade": "Websockets Support", + "host.forward-port": "Forward Port", + "host.forward-scheme": "Schema", + "hosts": "Hosts", + "http-only": "HTTP Only", + "lets-encrypt": "Let's Encrypt", + "lets-encrypt-via-dns": "Let's Encrypt via DNS", + "lets-encrypt-via-http": "Let's Encrypt via HTTP", + "loading": "Loading…", + "login.title": "Account Login", + "nginx-config.label": "Benutzerdefinierte Nginx Konfiguration", + "nginx-config.placeholder": "# Geben Sie hier Ihre benutzerdefinierte Nginx-Konfiguration auf eigene Gefahr ein!", + "no-permission-error": "Sie haben keinen Zugriff, um dies anzuzeigen.", + "notfound.action": "Take me home", + "notfound.content": "We are sorry but the page you are looking for was not found", + "notfound.title": "Oops… You just found an error page", + "notification.error": "Error", + "notification.object-deleted": "{object} wurde gelöscht", + "notification.object-disabled": "{object} wurde deaktiviert", + "notification.object-enabled": "{object} wurde aktiviert", + "notification.object-renewed": "{object} wurde erneuert", + "notification.object-saved": "{object} wurde gespeichert", + "notification.success": "Erfolgreich", + "object.actions-title": "{object} #{id}", + "object.add": "{object} hinzufügen", + "object.delete": "{object} löschen", + "object.delete.content": "Bist du dir sicher das du {object} löschen möchtest?", + "object.edit": "{object} bearbeiten", + "object.empty": "keine {objects} vorhanden", + "object.event.created": "{object} erstellen ", + "object.event.deleted": "{object} löschen", + "object.event.disabled": "{object} deaktivieren", + "object.event.enabled": "{object} aktivieren", + "object.event.renewed": "{object} erneuert", + "object.event.updated": "{object} updaten", + "offline": "Offline", + "online": "Online", + "options": "Optionen", + "password": "Passwort", + "password.generate": "Generate random Passwort", + "password.hide": "Passwort verstecken", + "password.show": "Passwort anzeigen", + "permissions.hidden": "Versteckt", + "permissions.manage": "Verwalten", + "permissions.view": "Nur anzeigen", + "permissions.visibility.all": "All Items", + "permissions.visibility.title": "Objekt Sichtbarkeit", + "permissions.visibility.user": "Nur erstellte Elemente", + "proxy-host": "Proxy Host", + "proxy-host.forward-host": "Forward Hostname / IP", + "proxy-hosts": "Proxy Hosts", + "proxy-hosts.count": "{count} {count, plural, one {Proxy Host} other {Proxy Hosts}}", + "public": "Öffentlich", + "redirection-host": "Redirection Host", + "redirection-host.forward-domain": "Forward Domain", + "redirection-hosts": "Redirection Hosts", + "redirection-hosts.count": "{count} {count, plural, one {Redirection Host} other {Redirection Hosts}}", + "role.admin": "Administrator", + "role.standard-user": "Standard User", + "save": "Speichern", + "setting": "Einstellung", + "settings": "Einstellungen", + "settings.default-site": "Standard Seite", + "settings.default-site.404": "404 Page", + "settings.default-site.444": "No Response (444)", + "settings.default-site.congratulations": "Willkommensseite", + "settings.default-site.description": "Was angezeigt werden soll, wenn Nginx mit einem unbekannten Host konfrontiert wird", + "settings.default-site.html": "Benutzerdefinierte HTML", + "settings.default-site.html.placeholder": "", + "settings.default-site.redirect": "Weiterleitung", + "setup.preamble": "Beginnen Sie mit der Erstellung Ihres Administratorkontos.", + "setup.title": "Willkommen!", + "sign-in": "Login", + "ssl-certificate": "SSL Zertifikate", + "stream": "Stream", + "stream.forward-host": "Forward Host", + "stream.incoming-port": "Incoming Port", + "streams": "Streams", + "streams.count": "{count} {count, plural, one {Stream} other {Streams}}", + "streams.tcp": "TCP", + "streams.udp": "UDP", + "test": "Test", + "user": "User", + "user.change-password": "Passwort ändern", + "user.confirm-password": "Passwort wiederholen", + "user.current-password": "Aktuelles Passwort", + "user.edit-profile": "Profil bearbeiten", + "user.full-name": "Name", + "user.login-as": "Einloggen als {name}", + "user.logout": "Ausloggen", + "user.new-password": "Neues Passwort", + "user.nickname": "Nickname", + "user.set-password": "Passwort setzen", + "user.set-permissions": "Berechtigungen für {name} setzen", + "user.switch-dark": "Zum Dark Mode wechseln", + "user.switch-light": "Zum hellen Modus wechslen", + "username": "Username", + "users": "Users" +} \ No newline at end of file diff --git a/frontend/src/locale/lang/lang-list.json b/frontend/src/locale/lang/lang-list.json index 4d9de4e5..e8a5072e 100644 --- a/frontend/src/locale/lang/lang-list.json +++ b/frontend/src/locale/lang/lang-list.json @@ -1,3 +1,4 @@ { - "locale-en-US": "English" + "locale-en-US": "English", + "locale-de-DE": "German" } \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/de/AccessLists.md b/frontend/src/locale/src/HelpDoc/de/AccessLists.md new file mode 100644 index 00000000..315406a7 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/de/AccessLists.md @@ -0,0 +1,7 @@ +## Was ist eine Zugriffsliste? + +Zugriffslisten bieten eine Blacklist oder Whitelist mit bestimmten Client-IP-Adressen sowie eine Authentifizierung für die Proxy-Hosts über die grundlegende HTTP-Authentifizierung. + +Sie können mehrere Client-Regeln, Benutzernamen und Passwörter für eine einzelne Zugriffsliste konfigurieren und diese dann auf einen oder mehrere Proxy-Hosts anwenden. + +Dies ist besonders nützlich für weitergeleitete Webdienste, die keine integrierten Authentifizierungsmechanismen haben, oder wenn Sie sich vor unbekannten Clients schützen möchten. diff --git a/frontend/src/locale/src/HelpDoc/de/Certificates.md b/frontend/src/locale/src/HelpDoc/de/Certificates.md new file mode 100644 index 00000000..77dfe3c4 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/de/Certificates.md @@ -0,0 +1,35 @@ +## Hilfe zu Zertifikaten + +### HTTP-Zertifikat + +Ein HTTP-validiertes Zertifikat bedeutet, dass Let's Encrypt-Server +versuchen, Ihre Domains über HTTP (nicht HTTPS!) zu erreichen, und wenn dies erfolgreich ist, +stellen sie Ihr Zertifikat aus. + +Für diese Methode müssen Sie einen _Proxy-Host_ für Ihre Domain(s) erstellen, der +über HTTP zugänglich ist und auf diese Nginx-Installation verweist. Nachdem ein Zertifikat +ausgestellt wurde, können Sie den _Proxy-Host_ so ändern, dass dieses Zertifikat auch für HTTPS-Verbindungen +verwendet wird. Der _Proxy-Host_ muss jedoch weiterhin für den HTTP-Zugriff konfiguriert sein, + damit das Zertifikat erneuert werden kann. + +Dieser Prozess unterstützt keine Wildcard-Domains. + +### DNS-Zertifikat + +Für ein DNS-validiertes Zertifikat müssen Sie ein DNS-Provider-Plugin verwenden. Dieser DNS- +Provider wird verwendet, um temporäre Einträge auf Ihrer Domain zu erstellen. Anschließend fragt Let's +Encrypt diese Einträge ab, um sicherzustellen, dass Sie der Eigentümer sind. Bei Erfolg wird +Ihr Zertifikat ausgestellt. + +Sie müssen vor der Beantragung dieser Art von Zertifikat keinen _Proxy-Host_ erstellen. +Sie müssen Ihren _Proxy-Host_ auch nicht für den HTTP-Zugriff konfigurieren. + +Dieser Prozess unterstützt Wildcard-Domains. + +### Benutzerdefiniertes Zertifikat + +Verwenden Sie diese Option, um Ihr eigenes SSL-Zertifikat hochzuladen, das Ihnen von Ihrer eigenen +Zertifizierungsstelle bereitgestellt wurde. + + +Übersetzt mit DeepL.com (kostenlose Version) \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/de/DeadHosts.md b/frontend/src/locale/src/HelpDoc/de/DeadHosts.md new file mode 100644 index 00000000..7c321149 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/de/DeadHosts.md @@ -0,0 +1,12 @@ +## Was ist ein 404-Host? + +Ein 404-Host ist einfach ein Host-Setup, das eine 404-Seite anzeigt. + +Dies kann nützlich sein, wenn Ihre Domain in Suchmaschinen gelistet ist und Sie +eine ansprechendere Fehlerseite bereitstellen oder den Suchindexern ausdrücklich mitteilen möchten, dass +die Domain-Seiten nicht mehr existieren. + +Ein weiterer Vorteil dieses Hosts besteht darin, dass Sie die Protokolle für Zugriffe darauf verfolgen und +die Verweise anzeigen können. + +Übersetzt mit DeepL.com (kostenlose Version) \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/de/ProxyHosts.md b/frontend/src/locale/src/HelpDoc/de/ProxyHosts.md new file mode 100644 index 00000000..f116b857 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/de/ProxyHosts.md @@ -0,0 +1,7 @@ +## Was ist ein Proxy-Host? + +Ein Proxy-Host ist der eingehende Endpunkt für einen Webdienst, den Sie weiterleiten möchten. + +Er bietet optionale SSL-Terminierung für Ihren Dienst, der möglicherweise keine integrierte SSL-Unterstützung hat. + +Proxy-Hosts sind die häufigste Verwendung für den Nginx Proxy Manager. \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/de/RedirectionHosts.md b/frontend/src/locale/src/HelpDoc/de/RedirectionHosts.md new file mode 100644 index 00000000..3e06919b --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/de/RedirectionHosts.md @@ -0,0 +1,7 @@ +## Was ist ein Redirection Host? + +Ein Redirection Host leitet Anfragen von der eingehenden Domain weiter und leitet den +Besucher zu einer anderen Domain weiter. + +Der häufigste Grund für die Verwendung dieses Host-Typs ist, wenn Ihre Website die +Domain wechselt, aber Sie noch Suchmaschinen- oder Referrer-Links haben, die auf die alte Domain verweisen. \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/de/Streams.md b/frontend/src/locale/src/HelpDoc/de/Streams.md new file mode 100644 index 00000000..35cd539d --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/de/Streams.md @@ -0,0 +1,6 @@ +## Was ist ein Stream? + +Ein Stream ist eine relativ neue Funktion von Nginx, die dazu dient, TCP/UDP-Datenverkehr +direkt an einen anderen Computer im Netzwerk weiterzuleiten. + +Wenn Sie Spielserver, FTP- oder SSH-Server betreiben, kann dies sehr nützlich sein. \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/de/index.ts b/frontend/src/locale/src/HelpDoc/de/index.ts new file mode 100644 index 00000000..a9bb46ba --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/de/index.ts @@ -0,0 +1,6 @@ +export * as AccessLists from "./AccessLists.md"; +export * as Certificates from "./Certificates.md"; +export * as DeadHosts from "./DeadHosts.md"; +export * as ProxyHosts from "./ProxyHosts.md"; +export * as RedirectionHosts from "./RedirectionHosts.md"; +export * as Streams from "./Streams.md"; diff --git a/frontend/src/locale/src/HelpDoc/index.ts b/frontend/src/locale/src/HelpDoc/index.ts index 40ca1b52..c7db49b5 100644 --- a/frontend/src/locale/src/HelpDoc/index.ts +++ b/frontend/src/locale/src/HelpDoc/index.ts @@ -1,17 +1,24 @@ // import * as de from "./de/index"; // import * as fa from "./fa/index"; import * as en from "./en/index"; +import * as de from "./de/index"; -const items: any = { en }; +const items: any = { en, de }; const fallbackLang = "en"; export const getHelpFile = (lang: string, section: string): string => { - if (typeof items[lang] !== "undefined" && typeof items[lang][section] !== "undefined") { + if ( + typeof items[lang] !== "undefined" && + typeof items[lang][section] !== "undefined" + ) { return items[lang][section].default; } // Fallback to English - if (typeof items[fallbackLang] !== "undefined" && typeof items[fallbackLang][section] !== "undefined") { + if ( + typeof items[fallbackLang] !== "undefined" && + typeof items[fallbackLang][section] !== "undefined" + ) { return items[fallbackLang][section].default; } throw new Error(`Cannot load help doc for ${lang}-${section}`); diff --git a/frontend/src/locale/src/de.json b/frontend/src/locale/src/de.json new file mode 100644 index 00000000..60b83de0 --- /dev/null +++ b/frontend/src/locale/src/de.json @@ -0,0 +1,638 @@ +{ + "access-list": { + "defaultMessage": "Zugriffsliste" + }, + "access-list.access-count": { + "defaultMessage": "{count} {count, plural, one {Rule} other {Rules}}" + }, + "access-list.auth-count": { + "defaultMessage": "{count} {count, plural, one {User} other {Users}}" + }, + "access-list.help-rules-last": { + "defaultMessage": "Wenn mindestens eine Regel vorhanden ist, wird diese Regel zum Ablehnen aller Anfragen als letzte hinzugefügt." + }, + "access-list.help.rules-order": { + "defaultMessage": "Beachten Sie, dass die Anweisungen „Erlauben“ und „Verbieten“ in der Reihenfolge ihrer Definition angewendet werden." + }, + "access-list.pass-auth": { + "defaultMessage": "Authentifizierung an Upstream weiterleiten" + }, + "access-list.public": { + "defaultMessage": "Öffentlich" + }, + "access-list.public.subtitle": { + "defaultMessage": "Keine Authentifizierung erforderlich" + }, + "access-list.satisfy-any": { + "defaultMessage": "Satisfy Any" + }, + "access-list.subtitle": { + "defaultMessage": "{users} {users, plural, one {User} other {Users}}, {rules} {rules, plural, one {Rule} other {Rules}} - Erstellt: {date}" + }, + "access-lists": { + "defaultMessage": "Zugrifflisten" + }, + "action.add": { + "defaultMessage": "Hinzufügen" + }, + "action.add-location": { + "defaultMessage": "Lokation Hinzufügen" + }, + "action.close": { + "defaultMessage": "Schließen" + }, + "action.delete": { + "defaultMessage": "Löschen" + }, + "action.disable": { + "defaultMessage": "Deaktivieren" + }, + "action.download": { + "defaultMessage": "Herrunterladen" + }, + "action.edit": { + "defaultMessage": "Bearbeiten" + }, + "action.enable": { + "defaultMessage": "Aktivieren" + }, + "action.permissions": { + "defaultMessage": "Berechtigungen" + }, + "action.renew": { + "defaultMessage": "Erneuert" + }, + "action.view-details": { + "defaultMessage": "Details" + }, + "auditlogs": { + "defaultMessage": "Protokoll" + }, + "cancel": { + "defaultMessage": "Abbrechen" + }, + "certificate": { + "defaultMessage": "ZertifiKat" + }, + "certificate.custom-certificate": { + "defaultMessage": "Zertifikat" + }, + "certificate.custom-certificate-key": { + "defaultMessage": "Privater Schlüssel" + }, + "certificate.custom-intermediate": { + "defaultMessage": "wischen Zertifikat" + }, + "certificate.in-use": { + "defaultMessage": "In Benutzung" + }, + "certificate.none.subtitle": { + "defaultMessage": "Kein Zertifikat zugewiesen" + }, + "certificate.none.subtitle.for-http": { + "defaultMessage": "Dieser Host verwendet kein HTTPS." + }, + "certificate.none.title": { + "defaultMessage": "Kein" + }, + "certificate.not-in-use": { + "defaultMessage": "Nicht in Benutzung" + }, + "certificates": { + "defaultMessage": "Zertifikate" + }, + "certificates.custom": { + "defaultMessage": "Benutzerdefiniertes Zertifikat" + }, + "certificates.custom.warning": { + "defaultMessage": "Mit einem Passwort geschützte Schlüsseldateien werden nicht unterstützt." + }, + "certificates.dns.credentials": { + "defaultMessage": "Inhalt der Anmeldedaten-Datei" + }, + "certificates.dns.credentials-note": { + "defaultMessage": "Dieses Plugin erfordert eine Konfigurationsdatei, die einen API-Token oder andere Anmeldedaten für Ihren Anbieter enthält." + }, + "certificates.dns.credentials-warning": { + "defaultMessage": "Diese Daten werden als Klartext in der Datenbank und in einer Datei gespeichert!" + }, + "certificates.dns.propagation-seconds": { + "defaultMessage": "Wartzeit in Sekunden" + }, + "certificates.dns.propagation-seconds-note": { + "defaultMessage": "Leer lassen um die Standardwartezeit des Plugins zu nutzen" + }, + "certificates.dns.provider": { + "defaultMessage": "DNS Provider" + }, + "certificates.dns.warning": { + "defaultMessage": "Dieser Abschnitt erfordert einige Kenntnisse über Certbot und seine DNS-Plugins. Bitte konsultieren Sie die jeweilige Plugin-Dokumentation." + }, + "certificates.http.reachability-404": { + "defaultMessage": "Unter dieser Domain wurde ein Server gefunden, aber es scheint sich nicht um Nginx Proxy Manager zu handeln. Bitte stellen Sie sicher, dass Ihre Domain auf die IP-Adresse verweist, unter der Ihre NPM-Instanz ausgeführt wird." + }, + "certificates.http.reachability-failed-to-check": { + "defaultMessage": "Die Erreichbarkeit konnte aufgrund eines Kommunikationsfehlers mit site24x7.com nicht überprüft werden." + }, + "certificates.http.reachability-not-resolved": { + "defaultMessage": "Unter dieser Domain ist kein Server verfügbar. Bitte stellen Sie sicher, dass Ihre Domain existiert und auf die IP-Adresse verweist, unter der Ihre NPM-Instanz läuft, und dass gegebenenfalls Port 80 in Ihrem Router weitergeleitet wird." + }, + "certificates.http.reachability-ok": { + "defaultMessage": "Ihr Server ist erreichbar und die Erstellung von Zertifikaten sollte möglich sein." + }, + "certificates.http.reachability-other": { + "defaultMessage": "Unter dieser Domain wurde ein Server gefunden, der jedoch einen unerwarteten Statuscode {code} zurückgegeben hat. Handelt es sich um den NPM-Server? Bitte stellen Sie sicher, dass Ihre Domain auf die IP-Adresse verweist, unter der Ihre NPM-Instanz ausgeführt wird." + }, + "certificates.http.reachability-wrong-data": { + "defaultMessage": "Unter dieser Domain wurde ein Server gefunden, der jedoch unerwartete Daten zurückgegeben hat. Handelt es sich um den NPM-Server? Bitte stellen Sie sicher, dass Ihre Domain auf die IP-Adresse verweist, unter der Ihre NPM-Instanz ausgeführt wird." + }, + "certificates.http.test-results": { + "defaultMessage": "Test Ergeniss" + }, + "certificates.http.warning": { + "defaultMessage": "Diese Domänen müssen bereits so konfiguriert sein, dass sie auf diese Installation verweisen." + }, + "certificates.request.subtitle": { + "defaultMessage": "Über Let's Encrypt" + }, + "certificates.request.title": { + "defaultMessage": "Anfordern eines neuen Zertifikates" + }, + "column.access": { + "defaultMessage": "Zugriff" + }, + "column.authorization": { + "defaultMessage": "Genehmigung" + }, + "column.authorizations": { + "defaultMessage": "Genehmigungen" + }, + "column.custom-locations": { + "defaultMessage": "Benutzerdefinierte Lokation" + }, + "column.destination": { + "defaultMessage": "Ziel" + }, + "column.details": { + "defaultMessage": "Details" + }, + "column.email": { + "defaultMessage": "Email" + }, + "column.event": { + "defaultMessage": "Ereignis" + }, + "column.expires": { + "defaultMessage": "Verfällt am" + }, + "column.http-code": { + "defaultMessage": "Zugriff" + }, + "column.incoming-port": { + "defaultMessage": "Eingehender Port" + }, + "column.name": { + "defaultMessage": "Name" + }, + "column.protocol": { + "defaultMessage": "Protokoll" + }, + "column.provider": { + "defaultMessage": "Provider" + }, + "column.roles": { + "defaultMessage": "Rollen" + }, + "column.rules": { + "defaultMessage": "Regeln" + }, + "column.satisfy": { + "defaultMessage": "Satisfy" + }, + "column.satisfy-all": { + "defaultMessage": "Alle" + }, + "column.satisfy-any": { + "defaultMessage": "Jeder" + }, + "column.scheme": { + "defaultMessage": "Schema" + }, + "column.source": { + "defaultMessage": "Quelle" + }, + "column.ssl": { + "defaultMessage": "SSL" + }, + "column.status": { + "defaultMessage": "Status" + }, + "created-on": { + "defaultMessage": "Erstellung: {date}" + }, + "dashboard": { + "defaultMessage": "Dashboard" + }, + "dead-host": { + "defaultMessage": "404 Host" + }, + "dead-hosts": { + "defaultMessage": "404 Hosts" + }, + "dead-hosts.count": { + "defaultMessage": "{count} {count, plural, one {404 Host} other {404 Hosts}}" + }, + "disabled": { + "defaultMessage": "Deaktiviert" + }, + "domain-names": { + "defaultMessage": "Domain Names" + }, + "domain-names.max": { + "defaultMessage": "{count} Maximale Anzahl von Domainnamen" + }, + "domain-names.placeholder": { + "defaultMessage": "Eintragen der Domain..." + }, + "domain-names.wildcards-not-permitted": { + "defaultMessage": "Wildcards sind für diesen Typ nicht zulässig." + }, + "domain-names.wildcards-not-supported": { + "defaultMessage": "Wildcards werden für diese Zertifizierungsstelle nicht unterstützt." + }, + "domains.force-ssl": { + "defaultMessage": "SSL Zwang" + }, + "domains.hsts-enabled": { + "defaultMessage": "HSTS aktiviert" + }, + "domains.hsts-subdomains": { + "defaultMessage": "HSTS Sub-domains" + }, + "domains.http2-support": { + "defaultMessage": "HTTP/2 Support" + }, + "domains.use-dns": { + "defaultMessage": "Nutze DNS Challenge" + }, + "email-address": { + "defaultMessage": "Email Addresse" + }, + "empty-search": { + "defaultMessage": "Keine Ergebnisse gefunden" + }, + "empty-subtitle": { + "defaultMessage": "Warum erstellen Sie nicht selbst eine?" + }, + "enabled": { + "defaultMessage": "aktiviert" + }, + "error.access.at-least-one": { + "defaultMessage": "Entweder eine Berechtigung oder eine Zugriffsregel ist erforderlich." + }, + "error.access.duplicate-usernames": { + "defaultMessage": "Autorisierung Benutzernamen müssen eindeutig sein" + }, + "error.invalid-auth": { + "defaultMessage": "Ungültige E-Mail-Adresse oder Passwort" + }, + "error.invalid-domain": { + "defaultMessage": "Ungültige Domain: {domain}" + }, + "error.invalid-email": { + "defaultMessage": "Ungültige E-Mail-Adresse" + }, + "error.max-character-length": { + "defaultMessage": "Die maximale Länge beträgt {max} Zeichen{max, plural, one {} other {s}}" + }, + "error.max-domains": { + "defaultMessage": "Zu viele Domains, maximal sind {max}" + }, + "error.maximum": { + "defaultMessage": "Maximum ist {max}" + }, + "error.min-character-length": { + "defaultMessage": "Die mainimale Länge beträgt {min} Zeichen{min, plural, one {} other {s}}" + }, + "error.minimum": { + "defaultMessage": "Minimum ist {min}" + }, + "error.passwords-must-match": { + "defaultMessage": "Passwörter müssen übereinstimmen" + }, + "error.required": { + "defaultMessage": "Dies ist erforderlich." + }, + "expires.on": { + "defaultMessage": "Ablauf am: {date}" + }, + "footer.github-fork": { + "defaultMessage": "Fork me on Github" + }, + "host.flags.block-exploits": { + "defaultMessage": "Gängige Exploits blockieren" + }, + "host.flags.cache-assets": { + "defaultMessage": "Cache Assets" + }, + "host.flags.preserve-path": { + "defaultMessage": "Pfad beibehalten" + }, + "host.flags.protocols": { + "defaultMessage": "Protokole" + }, + "host.flags.websockets-upgrade": { + "defaultMessage": "Websockets Support" + }, + "host.forward-port": { + "defaultMessage": "Forward Port" + }, + "host.forward-scheme": { + "defaultMessage": "Schema" + }, + "hosts": { + "defaultMessage": "Hosts" + }, + "http-only": { + "defaultMessage": "HTTP Only" + }, + "lets-encrypt": { + "defaultMessage": "Let's Encrypt" + }, + "lets-encrypt-via-dns": { + "defaultMessage": "Let's Encrypt via DNS" + }, + "lets-encrypt-via-http": { + "defaultMessage": "Let's Encrypt via HTTP" + }, + "loading": { + "defaultMessage": "Loading…" + }, + "login.title": { + "defaultMessage": "Account Login" + }, + "nginx-config.label": { + "defaultMessage": "Benutzerdefinierte Nginx Konfiguration" + }, + "nginx-config.placeholder": { + "defaultMessage": "# Geben Sie hier Ihre benutzerdefinierte Nginx-Konfiguration auf eigene Gefahr ein!" + }, + "no-permission-error": { + "defaultMessage": "Sie haben keinen Zugriff, um dies anzuzeigen." + }, + "notfound.action": { + "defaultMessage": "Take me home" + }, + "notfound.content": { + "defaultMessage": "We are sorry but the page you are looking for was not found" + }, + "notfound.title": { + "defaultMessage": "Oops… You just found an error page" + }, + "notification.error": { + "defaultMessage": "Error" + }, + "notification.object-deleted": { + "defaultMessage": "{object} wurde gelöscht" + }, + "notification.object-disabled": { + "defaultMessage": "{object} wurde deaktiviert" + }, + "notification.object-enabled": { + "defaultMessage": "{object} wurde aktiviert" + }, + "notification.object-renewed": { + "defaultMessage": "{object} wurde erneuert" + }, + "notification.object-saved": { + "defaultMessage": "{object} wurde gespeichert" + }, + "notification.success": { + "defaultMessage": "Erfolgreich" + }, + "object.actions-title": { + "defaultMessage": "{object} #{id}" + }, + "object.add": { + "defaultMessage": "{object} hinzufügen" + }, + "object.delete": { + "defaultMessage": "{object} löschen" + }, + "object.delete.content": { + "defaultMessage": "Bist du dir sicher das du {object} löschen möchtest?" + }, + "object.edit": { + "defaultMessage": "{object} bearbeiten" + }, + "object.empty": { + "defaultMessage": "keine {objects} vorhanden" + }, + "object.event.created": { + "defaultMessage": "{object} erstellen" + }, + "object.event.deleted": { + "defaultMessage": "{object} löschen" + }, + "object.event.disabled": { + "defaultMessage": "{object} deaktivieren" + }, + "object.event.enabled": { + "defaultMessage": "{object} aktivieren" + }, + "object.event.renewed": { + "defaultMessage": "{object} erneuert" + }, + "object.event.updated": { + "defaultMessage": "{object} updaten" + }, + "offline": { + "defaultMessage": "Offline" + }, + "online": { + "defaultMessage": "Online" + }, + "options": { + "defaultMessage": "Optionen" + }, + "password": { + "defaultMessage": "Passwort" + }, + "password.generate": { + "defaultMessage": "Generate random Passwort" + }, + "password.hide": { + "defaultMessage": "Passwort verstecken" + }, + "password.show": { + "defaultMessage": "Passwort anzeigen" + }, + "permissions.hidden": { + "defaultMessage": "Versteckt" + }, + "permissions.manage": { + "defaultMessage": "Verwalten" + }, + "permissions.view": { + "defaultMessage": "Nur anzeigen" + }, + "permissions.visibility.all": { + "defaultMessage": "All Items" + }, + "permissions.visibility.title": { + "defaultMessage": "Objekt Sichtbarkeit" + }, + "permissions.visibility.user": { + "defaultMessage": "Nur erstellte Elemente" + }, + "proxy-host": { + "defaultMessage": "Proxy Host" + }, + "proxy-host.forward-host": { + "defaultMessage": "Forward Hostname / IP" + }, + "proxy-hosts": { + "defaultMessage": "Proxy Hosts" + }, + "proxy-hosts.count": { + "defaultMessage": "{count} {count, plural, one {Proxy Host} other {Proxy Hosts}}" + }, + "public": { + "defaultMessage": "Öffentlich" + }, + "redirection-host": { + "defaultMessage": "Redirection Host" + }, + "redirection-host.forward-domain": { + "defaultMessage": "Forward Domain" + }, + "redirection-hosts": { + "defaultMessage": "Redirection Hosts" + }, + "redirection-hosts.count": { + "defaultMessage": "{count} {count, plural, one {Redirection Host} other {Redirection Hosts}}" + }, + "role.admin": { + "defaultMessage": "Administrator" + }, + "role.standard-user": { + "defaultMessage": "Standard User" + }, + "save": { + "defaultMessage": "Speichern" + }, + "setting": { + "defaultMessage": "Einstellung" + }, + "settings": { + "defaultMessage": "Einstellungen" + }, + "settings.default-site": { + "defaultMessage": "Standard Seite" + }, + "settings.default-site.404": { + "defaultMessage": "404 Page" + }, + "settings.default-site.444": { + "defaultMessage": "No Response (444)" + }, + "settings.default-site.congratulations": { + "defaultMessage": "Willkommensseite" + }, + "settings.default-site.description": { + "defaultMessage": "Was angezeigt werden soll, wenn Nginx mit einem unbekannten Host konfrontiert wird" + }, + "settings.default-site.html": { + "defaultMessage": "Benutzerdefinierte HTML" + }, + "settings.default-site.html.placeholder": { + "defaultMessage": "" + }, + "settings.default-site.redirect": { + "defaultMessage": "Weiterleitung" + }, + "setup.preamble": { + "defaultMessage": "Beginnen Sie mit der Erstellung Ihres Administratorkontos." + }, + "setup.title": { + "defaultMessage": "Willkommen!" + }, + "sign-in": { + "defaultMessage": "Login" + }, + "ssl-certificate": { + "defaultMessage": "SSL Zertifikate" + }, + "stream": { + "defaultMessage": "Stream" + }, + "stream.forward-host": { + "defaultMessage": "Forward Host" + }, + "stream.incoming-port": { + "defaultMessage": "Incoming Port" + }, + "streams": { + "defaultMessage": "Streams" + }, + "streams.count": { + "defaultMessage": "{count} {count, plural, one {Stream} other {Streams}}" + }, + "streams.tcp": { + "defaultMessage": "TCP" + }, + "streams.udp": { + "defaultMessage": "UDP" + }, + "test": { + "defaultMessage": "Test" + }, + "user": { + "defaultMessage": "User" + }, + "user.change-password": { + "defaultMessage": "Passwort ändern" + }, + "user.confirm-password": { + "defaultMessage": "Passwort wiederholen" + }, + "user.current-password": { + "defaultMessage": "Aktuelles Passwort" + }, + "user.edit-profile": { + "defaultMessage": "Profil bearbeiten" + }, + "user.full-name": { + "defaultMessage": "Name" + }, + "user.login-as": { + "defaultMessage": "Einloggen als {name}" + }, + "user.logout": { + "defaultMessage": "Ausloggen" + }, + "user.new-password": { + "defaultMessage": "Neues Password" + }, + "user.nickname": { + "defaultMessage": "Nickname" + }, + "user.set-password": { + "defaultMessage": "Passwort setzen" + }, + "user.set-permissions": { + "defaultMessage": "Berechtigungen für {name} setzen" + }, + "user.switch-dark": { + "defaultMessage": "Zum Dark Mode wechseln" + }, + "user.switch-light": { + "defaultMessage": "Zum hellen Modus wechslen" + }, + "username": { + "defaultMessage": "Username" + }, + "users": { + "defaultMessage": "Users" + } +} diff --git a/frontend/src/locale/src/lang-list.json b/frontend/src/locale/src/lang-list.json index 3f3b2697..fcb59268 100644 --- a/frontend/src/locale/src/lang-list.json +++ b/frontend/src/locale/src/lang-list.json @@ -1,5 +1,8 @@ { "locale-en-US": { "defaultMessage": "English" + }, + "locale-de-DE": { + "defaultMessage": "German" } } From 8991e88ff3881d271fd435a6e2fdccc8f5013d4a Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 3 Nov 2025 14:22:13 +0100 Subject: [PATCH 02/42] Update de.json --- frontend/src/locale/lang/de.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/src/locale/lang/de.json b/frontend/src/locale/lang/de.json index 8b3e313c..b4c350d4 100644 --- a/frontend/src/locale/lang/de.json +++ b/frontend/src/locale/lang/de.json @@ -179,7 +179,7 @@ "settings.default-site.404": "404 Page", "settings.default-site.444": "No Response (444)", "settings.default-site.congratulations": "Willkommensseite", - "settings.default-site.description": "Was angezeigt werden soll, wenn Nginx mit einem unbekannten Host konfrontiert wird", + "settings.default-site.description": "Was angezeigt werden soll, wenn Nginx mit einem unbekannten Host aufgerufen wird", "settings.default-site.html": "Benutzerdefinierte HTML", "settings.default-site.html.placeholder": "", "settings.default-site.redirect": "Weiterleitung", @@ -211,4 +211,5 @@ "user.switch-light": "Zum hellen Modus wechslen", "username": "Username", "users": "Users" -} \ No newline at end of file + +} From 7e28d8a5d6bb2c6add9e89025211165863159c66 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 3 Nov 2025 17:51:48 +0100 Subject: [PATCH 03/42] Add files via upload add german --- frontend/src/locale/lang/de.json | 429 ++++++++++++------------ frontend/src/locale/lang/lang-list.json | 4 +- frontend/src/locale/src/de.json | 36 +- 3 files changed, 234 insertions(+), 235 deletions(-) diff --git a/frontend/src/locale/lang/de.json b/frontend/src/locale/lang/de.json index b4c350d4..b0044b07 100644 --- a/frontend/src/locale/lang/de.json +++ b/frontend/src/locale/lang/de.json @@ -1,215 +1,214 @@ -{ - "access-list": "Zugriffsliste", - "access-list.access-count": "{count} {count, plural, one {Regel} other {Regeln}}", - "access-list.auth-count": "{count} {count, plural, onr {User} other {Users}}", - "access-list.help-rules-last": "Wenn mindestens eine Regel vorhanden ist, wird diese Regel zum Ablehnen aller Anfragen als letzte hinzugefügt.", - "access-list.help.rules-order": "Beachten Sie, dass die Anweisungen „Erlauben“ und „Verbieten“ in der Reihenfolge ihrer Definition angewendet werden.", - "access-list.pass-auth": "Authentifizierung an Upstream weiterleiten", - "access-list.public": "Öffentlich", - "access-list.public.subtitle": "Keine Authentifizierung erforderlich", - "access-list.satisfy-any": "Satisfy Any", - "access-list.subtitle": "{users} {users, plural, one {User} other {Users}}, {rules} {rules, plural, one {Regel} other {Regeln}} - Erstellt: {date}", - "access-lists": "Zugriffslisten", - "action.add": "Hinzufügen", - "action.add-location": "Lokation Hinzufügen", - "action.close": "Schließen", - "action.delete": "Löschen", - "action.disable": "Deaktivieren", - "action.download": "Herrunterladen", - "action.edit": "Bearbeiten", - "action.enable": "Aktivieren", - "action.permissions": "Berechtigungen", - "action.renew": "Erneuert", - "action.view-details": "Details", - "auditlogs": "Protokoll", - "cancel": "Abbrechen", - "certificate": "Zertifikate", - "certificate.custom-certificate": "Zertifikat", - "certificate.custom-certificate-key": "Privater Schlüssel", - "certificate.custom-intermediate": "Zwischen Zertifikat", - "certificate.in-use": "In Benutzung", - "certificate.none.subtitle": "Kein Zertifikat zugewiesen", - "certificate.none.subtitle.for-http": "Dieser Host verwendet kein HTTPS.", - "certificate.none.title": "Kein", - "certificate.not-in-use": "Nicht in Benutzung", - "certificates": "Zertifikate", - "certificates.custom": "Benutzerdefiniertes Zertifikat", - "certificates.custom.warning": "Mit einem Passwort geschützte Schlüsseldateien werden nicht unterstützt.", - "certificates.dns.credentials": "Inhalt der Anmeldedaten-Datei", - "certificates.dns.credentials-note": "Dieses Plugin erfordert eine Konfigurationsdatei, die einen API-Token oder andere Anmeldedaten für Ihren Anbieter enthält.", - "certificates.dns.credentials-warning": "Diese Daten werden als Klartext in der Datenbank und in einer Datei gespeichert!", - "certificates.dns.propagation-seconds": "Wartzeit in Sekunden", - "certificates.dns.propagation-seconds-note": "Leer lassen um die Standardwartezeit des Plugins zu nutzen", - "certificates.dns.provider": "DNS Provider", - "certificates.dns.warning": "Dieser Abschnitt erfordert einige Kenntnisse über Certbot und seine DNS-Plugins. Bitte konsultieren Sie die jeweilige Plugin-Dokumentation.", - "certificates.http.reachability-404": "Unter dieser Domain wurde ein Server gefunden, aber es scheint sich nicht um Nginx Proxy Manager zu handeln. Bitte stellen Sie sicher, dass Ihre Domain auf die IP-Adresse verweist, unter der Ihre NPM-Instanz ausgeführt wird.", - "certificates.http.reachability-failed-to-check": "Die Erreichbarkeit konnte aufgrund eines Kommunikationsfehlers mit site24x7.com nicht überprüft werden.", - "certificates.http.reachability-not-resolved": "Unter dieser Domain ist kein Server verfügbar. Bitte stellen Sie sicher, dass Ihre Domain existiert und auf die IP-Adresse verweist, unter der Ihre NPM-Instanz läuft, und dass gegebenenfalls Port 80 in Ihrem Router weitergeleitet wird.", - "certificates.http.reachability-ok": "Ihr Server ist erreichbar und die Erstellung von Zertifikaten sollte möglich sein.", - "certificates.http.reachability-other": "Unter dieser Domain wurde ein Server gefunden, der jedoch einen unerwarteten Statuscode {code} zurückgegeben hat. Handelt es sich um den NPM-Server? Bitte stellen Sie sicher, dass Ihre Domain auf die IP-Adresse verweist, unter der Ihre NPM-Instanz ausgeführt wird.", - "certificates.http.reachability-wrong-data": "Unter dieser Domain wurde ein Server gefunden, der jedoch unerwartete Daten zurückgegeben hat. Handelt es sich um den NPM-Server? Bitte stellen Sie sicher, dass Ihre Domain auf die IP-Adresse verweist, unter der Ihre NPM-Instanz ausgeführt wird.", - "certificates.http.test-results": "Test Ergeniss", - "certificates.http.warning": "Diese Domänen müssen bereits so konfiguriert sein, dass sie auf diese Installation verweisen.", - "certificates.request.subtitle": "Über Let's Encrypt", - "certificates.request.title": "Anfordern eines neuen Zertifikates", - "column.access": "Zugriff", - "column.authorization": "Genehmigung", - "column.authorizations": "Genehmigungen", - "column.custom-locations": "Benutzerdefinierte Lokation", - "column.destination": "Ziel", - "column.details": "Details", - "column.email": "Email", - "column.event": "Ereignis", - "column.expires": "Verfällt am", - "column.http-code": "Zugriff", - "column.incoming-port": "Eingehender Port", - "column.name": "Name", - "column.protocol": "Protokoll", - "column.provider": "Provider", - "column.roles": "Rollen", - "column.rules": "Regeln", - "column.satisfy": "Satisfy", - "column.satisfy-all": "Alle", - "column.satisfy-any": "Jeder", - "column.scheme": "Schema", - "column.source": "Quelle", - "column.ssl": "SSL", - "column.status": "Status", - "created-on": "Erstellung: {date}", - "dashboard": "Dashboard", - "dead-host": "404 Host", - "dead-hosts": "404 Hosts", - "dead-hosts.count": "{count} {count, plural, one {404 Host} other {404 Hosts}}", - "disabled": "Deaktiviert", - "domain-names": "Domain Name", - "domain-names.max": "{count} Maximale Anzahl von Domainnamen", - "domain-names.placeholder": "Eintragen der Domain...", - "domain-names.wildcards-not-permitted": "Wildcards sind für diesen Typ nicht zulässig.", - "domain-names.wildcards-not-supported": "Wildcards werden für diese Zertifizierungsstelle nicht unterstützt.", - "domains.force-ssl": "SSL Zwang", - "domains.hsts-enabled": "HSTS aktiviert", - "domains.hsts-subdomains": "HSTS Sub-domains", - "domains.http2-support": "HTTP/2 Support", - "domains.use-dns": "Nutze DNS Challenge", - "email-address": "Email Addresse", - "empty-search": "Keine Ergebnisse gefunden", - "empty-subtitle": "Warum erstellen Sie nicht selbst eine?", - "enabled": "aktiviert", - "error.access.at-least-one": "Entweder eine Berechtigung oder eine Zugriffsregel ist erforderlich.", - "error.access.duplicate-usernames": "Autorisierung Benutzernamen müssen eindeutig sein", - "error.invalid-auth": "Ungültige E-Mail-Adresse oder Passwort", - "error.invalid-domain": "Ungültige Domain: {domain}", - "error.invalid-email": "Ungültige E-Mail-Adresse", - "error.max-character-length": "Die maximale Länge beträgt {max} Zeichen{max, plural, one {} other {s}}", - "error.max-domains": "Zu viele Domains, maximal sind {max}", - "error.maximum": "Maximum ist {max}", - "error.min-character-length": "Die mainimale Länge beträgt {min} Zeichen{min, plural, one {} other {s}}", - "error.minimum": "Minimum ist {min}", - "error.passwords-must-match": "Passwörter müssen übereinstimmen", - "error.required": "Dies ist erforderlich.", - "expires.on": "Ablauf am: {date}", - "footer.github-fork": "Fork me on Github", - "host.flags.block-exploits": "Gängige Exploits blockieren", - "host.flags.cache-assets": "Cache Assets", - "host.flags.preserve-path": "Pfad beibehalten", - "host.flags.protocols": "Protokole", - "host.flags.websockets-upgrade": "Websockets Support", - "host.forward-port": "Forward Port", - "host.forward-scheme": "Schema", - "hosts": "Hosts", - "http-only": "HTTP Only", - "lets-encrypt": "Let's Encrypt", - "lets-encrypt-via-dns": "Let's Encrypt via DNS", - "lets-encrypt-via-http": "Let's Encrypt via HTTP", - "loading": "Loading…", - "login.title": "Account Login", - "nginx-config.label": "Benutzerdefinierte Nginx Konfiguration", - "nginx-config.placeholder": "# Geben Sie hier Ihre benutzerdefinierte Nginx-Konfiguration auf eigene Gefahr ein!", - "no-permission-error": "Sie haben keinen Zugriff, um dies anzuzeigen.", - "notfound.action": "Take me home", - "notfound.content": "We are sorry but the page you are looking for was not found", - "notfound.title": "Oops… You just found an error page", - "notification.error": "Error", - "notification.object-deleted": "{object} wurde gelöscht", - "notification.object-disabled": "{object} wurde deaktiviert", - "notification.object-enabled": "{object} wurde aktiviert", - "notification.object-renewed": "{object} wurde erneuert", - "notification.object-saved": "{object} wurde gespeichert", - "notification.success": "Erfolgreich", - "object.actions-title": "{object} #{id}", - "object.add": "{object} hinzufügen", - "object.delete": "{object} löschen", - "object.delete.content": "Bist du dir sicher das du {object} löschen möchtest?", - "object.edit": "{object} bearbeiten", - "object.empty": "keine {objects} vorhanden", - "object.event.created": "{object} erstellen ", - "object.event.deleted": "{object} löschen", - "object.event.disabled": "{object} deaktivieren", - "object.event.enabled": "{object} aktivieren", - "object.event.renewed": "{object} erneuert", - "object.event.updated": "{object} updaten", - "offline": "Offline", - "online": "Online", - "options": "Optionen", - "password": "Passwort", - "password.generate": "Generate random Passwort", - "password.hide": "Passwort verstecken", - "password.show": "Passwort anzeigen", - "permissions.hidden": "Versteckt", - "permissions.manage": "Verwalten", - "permissions.view": "Nur anzeigen", - "permissions.visibility.all": "All Items", - "permissions.visibility.title": "Objekt Sichtbarkeit", - "permissions.visibility.user": "Nur erstellte Elemente", - "proxy-host": "Proxy Host", - "proxy-host.forward-host": "Forward Hostname / IP", - "proxy-hosts": "Proxy Hosts", - "proxy-hosts.count": "{count} {count, plural, one {Proxy Host} other {Proxy Hosts}}", - "public": "Öffentlich", - "redirection-host": "Redirection Host", - "redirection-host.forward-domain": "Forward Domain", - "redirection-hosts": "Redirection Hosts", - "redirection-hosts.count": "{count} {count, plural, one {Redirection Host} other {Redirection Hosts}}", - "role.admin": "Administrator", - "role.standard-user": "Standard User", - "save": "Speichern", - "setting": "Einstellung", - "settings": "Einstellungen", - "settings.default-site": "Standard Seite", - "settings.default-site.404": "404 Page", - "settings.default-site.444": "No Response (444)", - "settings.default-site.congratulations": "Willkommensseite", - "settings.default-site.description": "Was angezeigt werden soll, wenn Nginx mit einem unbekannten Host aufgerufen wird", - "settings.default-site.html": "Benutzerdefinierte HTML", - "settings.default-site.html.placeholder": "", - "settings.default-site.redirect": "Weiterleitung", - "setup.preamble": "Beginnen Sie mit der Erstellung Ihres Administratorkontos.", - "setup.title": "Willkommen!", - "sign-in": "Login", - "ssl-certificate": "SSL Zertifikate", - "stream": "Stream", - "stream.forward-host": "Forward Host", - "stream.incoming-port": "Incoming Port", - "streams": "Streams", - "streams.count": "{count} {count, plural, one {Stream} other {Streams}}", - "streams.tcp": "TCP", - "streams.udp": "UDP", - "test": "Test", - "user": "User", - "user.change-password": "Passwort ändern", - "user.confirm-password": "Passwort wiederholen", - "user.current-password": "Aktuelles Passwort", - "user.edit-profile": "Profil bearbeiten", - "user.full-name": "Name", - "user.login-as": "Einloggen als {name}", - "user.logout": "Ausloggen", - "user.new-password": "Neues Passwort", - "user.nickname": "Nickname", - "user.set-password": "Passwort setzen", - "user.set-permissions": "Berechtigungen für {name} setzen", - "user.switch-dark": "Zum Dark Mode wechseln", - "user.switch-light": "Zum hellen Modus wechslen", - "username": "Username", - "users": "Users" - -} +{ + "access-list": "Zugriffsliste", + "access-list.access-count": "{count} {count, plural, one {Regel} other {Regeln}}", + "access-list.auth-count": "{count} {count, plural, one {User} other {Users}}", + "access-list.help-rules-last": "Wenn mindestens eine Regel vorhanden ist, wird diese Regel zum Ablehnen aller Anfragen als letzte hinzugefügt.", + "access-list.help.rules-order": "Beachten Sie, dass die Anweisungen „Erlauben“ und „Verbieten“ in der Reihenfolge ihrer Definition angewendet werden.", + "access-list.pass-auth": "Authentifizierung an Upstream weiterleiten", + "access-list.public": "Öffentlich", + "access-list.public.subtitle": "Keine Authentifizierung erforderlich", + "access-list.satisfy-any": "Satisfy Any", + "access-list.subtitle": "{users} {users, plural, one {User} other {Users}}, {rules} {rules, plural, one {Regel} other {Regeln}} - Erstellt: {date}", + "access-lists": "Zugrifflisten", + "action.add": "Hinzufügen", + "action.add-location": "Lokation Hinzufügen", + "action.close": "Schließen", + "action.delete": "Löschen", + "action.disable": "Deaktivieren", + "action.download": "Herrunterladen", + "action.edit": "Bearbeiten", + "action.enable": "Aktivieren", + "action.permissions": "Berechtigungen", + "action.renew": "Erneuert", + "action.view-details": "Details", + "auditlogs": "Protokoll", + "cancel": "Abbrechen", + "certificate": "Zertifikat", + "certificate.custom-certificate": "Zertifikat", + "certificate.custom-certificate-key": "Privater Schlüssel", + "certificate.custom-intermediate": "Zwischen Zertifikat", + "certificate.in-use": "In Benutzung", + "certificate.none.subtitle": "Kein Zertifikat zugewiesen", + "certificate.none.subtitle.for-http": "Dieser Host verwendet kein HTTPS.", + "certificate.none.title": "Kein", + "certificate.not-in-use": "Nicht in Benutzung", + "certificates": "Zertifikate", + "certificates.custom": "Benutzerdefiniertes Zertifikat", + "certificates.custom.warning": "Mit einem Passwort geschützte Schlüsseldateien werden nicht unterstützt.", + "certificates.dns.credentials": "Inhalt der Anmeldedaten-Datei", + "certificates.dns.credentials-note": "Dieses Plugin erfordert eine Konfigurationsdatei, die einen API-Token oder andere Anmeldedaten für Ihren Anbieter enthält.", + "certificates.dns.credentials-warning": "Diese Daten werden als Klartext in der Datenbank und in einer Datei gespeichert!", + "certificates.dns.propagation-seconds": "Wartzeit in Sekunden", + "certificates.dns.propagation-seconds-note": "Leer lassen um die Standardwartezeit des Plugins zu nutzen", + "certificates.dns.provider": "DNS Provider", + "certificates.dns.warning": "Dieser Abschnitt erfordert einige Kenntnisse über Certbot und seine DNS-Plugins. Bitte konsultieren Sie die jeweilige Plugin-Dokumentation.", + "certificates.http.reachability-404": "Unter dieser Domain wurde ein Server gefunden, aber es scheint sich nicht um Nginx Proxy Manager zu handeln. Bitte stellen Sie sicher, dass Ihre Domain auf die IP-Adresse verweist, unter der Ihre NPM-Instanz ausgeführt wird.", + "certificates.http.reachability-failed-to-check": "Die Erreichbarkeit konnte aufgrund eines Kommunikationsfehlers mit site24x7.com nicht überprüft werden.", + "certificates.http.reachability-not-resolved": "Unter dieser Domain ist kein Server verfügbar. Bitte stellen Sie sicher, dass Ihre Domain existiert und auf die IP-Adresse verweist, unter der Ihre NPM-Instanz läuft, und dass gegebenenfalls Port 80 in Ihrem Router weitergeleitet wird.", + "certificates.http.reachability-ok": "Ihr Server ist erreichbar und die Erstellung von Zertifikaten sollte möglich sein.", + "certificates.http.reachability-other": "Unter dieser Domain wurde ein Server gefunden, der jedoch einen unerwarteten Statuscode {code} zurückgegeben hat. Handelt es sich um den NPM-Server? Bitte stellen Sie sicher, dass Ihre Domain auf die IP-Adresse verweist, unter der Ihre NPM-Instanz ausgeführt wird.", + "certificates.http.reachability-wrong-data": "Unter dieser Domain wurde ein Server gefunden, der jedoch unerwartete Daten zurückgegeben hat. Handelt es sich um den NPM-Server? Bitte stellen Sie sicher, dass Ihre Domain auf die IP-Adresse verweist, unter der Ihre NPM-Instanz ausgeführt wird.", + "certificates.http.test-results": "Test Ergeniss", + "certificates.http.warning": "Diese Domänen müssen bereits so konfiguriert sein, dass sie auf diese Installation verweisen.", + "certificates.request.subtitle": "Über Let's Encrypt", + "certificates.request.title": "Anfordern eines neuen Zertifikates", + "column.access": "Zugriff", + "column.authorization": "Genehmigung", + "column.authorizations": "Genehmigungen", + "column.custom-locations": "Benutzerdefinierte Lokation", + "column.destination": "Ziel", + "column.details": "Details", + "column.email": "Email", + "column.event": "Ereignis", + "column.expires": "Verfällt am", + "column.http-code": "Zugriff", + "column.incoming-port": "Eingehender Port", + "column.name": "Name", + "column.protocol": "Protokoll", + "column.provider": "Provider", + "column.roles": "Rollen", + "column.rules": "Regeln", + "column.satisfy": "Satisfy", + "column.satisfy-all": "Alle", + "column.satisfy-any": "Jeder", + "column.scheme": "Schema", + "column.source": "Quelle", + "column.ssl": "SSL", + "column.status": "Status", + "created-on": "Erstellr: {date}", + "dashboard": "Dashboard", + "dead-host": "404 Host", + "dead-hosts": "404 Hosts", + "dead-hosts.count": "{count} {count, plural, one {404 Host} other {404 Hosts}}", + "disabled": "Deaktiviert", + "domain-names": "Domain Names", + "domain-names.max": "{count} Maximale Anzahl von Domainnamen", + "domain-names.placeholder": "Eintragen der Domain...", + "domain-names.wildcards-not-permitted": "Wildcards sind für diesen Typ nicht zulässig.", + "domain-names.wildcards-not-supported": "Wildcards werden für diese Zertifizierungsstelle nicht unterstützt.", + "domains.force-ssl": "Erzwinge SSL", + "domains.hsts-enabled": "HSTS aktiviert", + "domains.hsts-subdomains": "HSTS Sub-domains", + "domains.http2-support": "HTTP/2 Support", + "domains.use-dns": "Nutze DNS Challenge", + "email-address": "Email Addresse", + "empty-search": "Keine Ergebnisse gefunden", + "empty-subtitle": "Warum erstellen Sie nicht eine?", + "enabled": "aktiviert", + "error.access.at-least-one": "Entweder eine Genehmigung oder eine Zugriffsregel ist erforderlich.", + "error.access.duplicate-usernames": "Autorisierung Benutzernamen müssen eindeutig sein", + "error.invalid-auth": "Ungültige E-Mail-Adresse oder Passwort", + "error.invalid-domain": "Ungültige Domain: {domain}", + "error.invalid-email": "Ungültige E-Mail-Adresse", + "error.max-character-length": "Die maximale Länge beträgt {max} Zeichen{max, plural, one {} other {s}}", + "error.max-domains": "Zu viele Domains, maximal sind {max}", + "error.maximum": "Maximum ist {max}", + "error.min-character-length": "Die mainimale Länge beträgt {min} Zeichen{min, plural, one {} other {s}}", + "error.minimum": "Minimum ist {min}", + "error.passwords-must-match": "Passwörter müssen übereinstimmen", + "error.required": "Dies ist erforderlich.", + "expires.on": "Ablauf am: {date}", + "footer.github-fork": "Fork me on Github", + "host.flags.block-exploits": "Gängige Exploits blockieren", + "host.flags.cache-assets": "Cache Assets", + "host.flags.preserve-path": "Pfad beibehalten", + "host.flags.protocols": "Protokole", + "host.flags.websockets-upgrade": "Websockets Support", + "host.forward-port": "Forward Port", + "host.forward-scheme": "Schema", + "hosts": "Hosts", + "http-only": "HTTP Only", + "lets-encrypt": "Let's Encrypt", + "lets-encrypt-via-dns": "Let's Encrypt via DNS", + "lets-encrypt-via-http": "Let's Encrypt via HTTP", + "loading": "Loading…", + "login.title": "Account Login", + "nginx-config.label": "Benutzerdefinierte Nginx Konfiguration", + "nginx-config.placeholder": "# Geben Sie hier Ihre benutzerdefinierte Nginx-Konfiguration auf eigene Gefahr ein!", + "no-permission-error": "Sie haben keinen Zugriff, um dies anzuzeigen.", + "notfound.action": "Take me home", + "notfound.content": "We are sorry but the page you are looking for was not found", + "notfound.title": "Oops… You just found an error page", + "notification.error": "Error", + "notification.object-deleted": "{object} wurde gelöscht", + "notification.object-disabled": "{object} wurde deaktiviert", + "notification.object-enabled": "{object} wurde aktiviert", + "notification.object-renewed": "{object} wurde erneuert", + "notification.object-saved": "{object} wurde gespeichert", + "notification.success": "Erfolgreich", + "object.actions-title": "{object} #{id}", + "object.add": "{object} hinzufügen", + "object.delete": "{object} löschen", + "object.delete.content": "Bist du dir sicher das du diese(n) {object} löschen möchtest?", + "object.edit": "{object} bearbeiten", + "object.empty": "Keine {objects} vorhanden", + "object.event.created": "{object} erstellt", + "object.event.deleted": "{object} gelöscht", + "object.event.disabled": "{object} deaktiviert", + "object.event.enabled": "{object} aktiviert", + "object.event.renewed": "{object} erneuert", + "object.event.updated": "{object} aktualisiert", + "offline": "Offline", + "online": "Online", + "options": "Optionen", + "password": "Passwort", + "password.generate": "Zufälliges Passwort generieren", + "password.hide": "Passwort verstecken", + "password.show": "Passwort anzeigen", + "permissions.hidden": "Versteckt", + "permissions.manage": "Verwalten", + "permissions.view": "Nur anzeigen", + "permissions.visibility.all": "Alle Elemente", + "permissions.visibility.title": "Objekt Sichtbarkeit", + "permissions.visibility.user": "Nur erstellte Elemente", + "proxy-host": "Proxy Host", + "proxy-host.forward-host": "Forward Hostname / IP", + "proxy-hosts": "Proxy Hosts", + "proxy-hosts.count": "{count} {count, plural, one {Proxy Host} other {Proxy Hosts}}", + "public": "Öffentlich", + "redirection-host": "Redirection Host", + "redirection-host.forward-domain": "Forward Domain", + "redirection-hosts": "Redirection Hosts", + "redirection-hosts.count": "{count} {count, plural, one {Redirection Host} other {Redirection Hosts}}", + "role.admin": "Administrator", + "role.standard-user": "Standard User", + "save": "Speichern", + "setting": "Einstellung", + "settings": "Einstellungen", + "settings.default-site": "Standard Seite", + "settings.default-site.404": "404 Page", + "settings.default-site.444": "No Response (444)", + "settings.default-site.congratulations": "Willkommensseite", + "settings.default-site.description": "Was angezeigt wird, wenn der Nginx eine unbekannte Webseitenanfrage bekommt", + "settings.default-site.html": "Benutzerdefinierte HTML", + "settings.default-site.html.placeholder": "", + "settings.default-site.redirect": "Weiterleitung", + "setup.preamble": "Beginnen Sie mit der Erstellung Ihres Administratorkontos.", + "setup.title": "Willkommen!", + "sign-in": "Login", + "ssl-certificate": "SSL Zertifikate", + "stream": "Stream", + "stream.forward-host": "Forward Host", + "stream.incoming-port": "Incoming Port", + "streams": "Streams", + "streams.count": "{count} {count, plural, one {Stream} other {Streams}}", + "streams.tcp": "TCP", + "streams.udp": "UDP", + "test": "Test", + "user": "User", + "user.change-password": "Passwort ändern", + "user.confirm-password": "Passwort wiederholen", + "user.current-password": "Aktuelles Passwort", + "user.edit-profile": "Profil bearbeiten", + "user.full-name": "Name", + "user.login-as": "Einloggen als {name}", + "user.logout": "Ausloggen", + "user.new-password": "Neues Password", + "user.nickname": "Nickname", + "user.set-password": "Passwort setzen", + "user.set-permissions": "Berechtigungen für {name} setzen", + "user.switch-dark": "Zum Dark Mode wechseln", + "user.switch-light": "Zum hellen Modus wechslen", + "username": "Username", + "users": "Users" +} \ No newline at end of file diff --git a/frontend/src/locale/lang/lang-list.json b/frontend/src/locale/lang/lang-list.json index e8a5072e..a3582ded 100644 --- a/frontend/src/locale/lang/lang-list.json +++ b/frontend/src/locale/lang/lang-list.json @@ -1,4 +1,4 @@ { - "locale-en-US": "English", - "locale-de-DE": "German" + "locale-de-DE": "German", + "locale-en-US": "English" } \ No newline at end of file diff --git a/frontend/src/locale/src/de.json b/frontend/src/locale/src/de.json index 60b83de0..be76432c 100644 --- a/frontend/src/locale/src/de.json +++ b/frontend/src/locale/src/de.json @@ -3,7 +3,7 @@ "defaultMessage": "Zugriffsliste" }, "access-list.access-count": { - "defaultMessage": "{count} {count, plural, one {Rule} other {Rules}}" + "defaultMessage": "{count} {count, plural, one {Regel} other {Regeln}}" }, "access-list.auth-count": { "defaultMessage": "{count} {count, plural, one {User} other {Users}}" @@ -27,7 +27,7 @@ "defaultMessage": "Satisfy Any" }, "access-list.subtitle": { - "defaultMessage": "{users} {users, plural, one {User} other {Users}}, {rules} {rules, plural, one {Rule} other {Rules}} - Erstellt: {date}" + "defaultMessage": "{users} {users, plural, one {User} other {Users}}, {rules} {rules, plural, one {Regel} other {Regeln}} - Erstellt: {date}" }, "access-lists": { "defaultMessage": "Zugrifflisten" @@ -72,7 +72,7 @@ "defaultMessage": "Abbrechen" }, "certificate": { - "defaultMessage": "ZertifiKat" + "defaultMessage": "Zertifikat" }, "certificate.custom-certificate": { "defaultMessage": "Zertifikat" @@ -81,7 +81,7 @@ "defaultMessage": "Privater Schlüssel" }, "certificate.custom-intermediate": { - "defaultMessage": "wischen Zertifikat" + "defaultMessage": "Zwischen Zertifikat" }, "certificate.in-use": { "defaultMessage": "In Benutzung" @@ -228,7 +228,7 @@ "defaultMessage": "Status" }, "created-on": { - "defaultMessage": "Erstellung: {date}" + "defaultMessage": "Erstellr: {date}" }, "dashboard": { "defaultMessage": "Dashboard" @@ -261,7 +261,7 @@ "defaultMessage": "Wildcards werden für diese Zertifizierungsstelle nicht unterstützt." }, "domains.force-ssl": { - "defaultMessage": "SSL Zwang" + "defaultMessage": "Erzwinge SSL" }, "domains.hsts-enabled": { "defaultMessage": "HSTS aktiviert" @@ -282,13 +282,13 @@ "defaultMessage": "Keine Ergebnisse gefunden" }, "empty-subtitle": { - "defaultMessage": "Warum erstellen Sie nicht selbst eine?" + "defaultMessage": "Warum erstellen Sie nicht eine?" }, "enabled": { "defaultMessage": "aktiviert" }, "error.access.at-least-one": { - "defaultMessage": "Entweder eine Berechtigung oder eine Zugriffsregel ist erforderlich." + "defaultMessage": "Entweder eine Genehmigung oder eine Zugriffsregel ist erforderlich." }, "error.access.duplicate-usernames": { "defaultMessage": "Autorisierung Benutzernamen müssen eindeutig sein" @@ -420,31 +420,31 @@ "defaultMessage": "{object} löschen" }, "object.delete.content": { - "defaultMessage": "Bist du dir sicher das du {object} löschen möchtest?" + "defaultMessage": "Bist du dir sicher das du diese(n) {object} löschen möchtest?" }, "object.edit": { "defaultMessage": "{object} bearbeiten" }, "object.empty": { - "defaultMessage": "keine {objects} vorhanden" + "defaultMessage": "Keine {objects} vorhanden" }, "object.event.created": { - "defaultMessage": "{object} erstellen" + "defaultMessage": "{object} erstellt" }, "object.event.deleted": { - "defaultMessage": "{object} löschen" + "defaultMessage": "{object} gelöscht" }, "object.event.disabled": { - "defaultMessage": "{object} deaktivieren" + "defaultMessage": "{object} deaktiviert" }, "object.event.enabled": { - "defaultMessage": "{object} aktivieren" + "defaultMessage": "{object} aktiviert" }, "object.event.renewed": { "defaultMessage": "{object} erneuert" }, "object.event.updated": { - "defaultMessage": "{object} updaten" + "defaultMessage": "{object} aktualisiert" }, "offline": { "defaultMessage": "Offline" @@ -459,7 +459,7 @@ "defaultMessage": "Passwort" }, "password.generate": { - "defaultMessage": "Generate random Passwort" + "defaultMessage": "Zufälliges Passwort generieren" }, "password.hide": { "defaultMessage": "Passwort verstecken" @@ -477,7 +477,7 @@ "defaultMessage": "Nur anzeigen" }, "permissions.visibility.all": { - "defaultMessage": "All Items" + "defaultMessage": "Alle Elemente" }, "permissions.visibility.title": { "defaultMessage": "Objekt Sichtbarkeit" @@ -540,7 +540,7 @@ "defaultMessage": "Willkommensseite" }, "settings.default-site.description": { - "defaultMessage": "Was angezeigt werden soll, wenn Nginx mit einem unbekannten Host konfrontiert wird" + "defaultMessage": "Was angezeigt wird, wenn der Nginx eine unbekannte Webseitenanfrage bekommt" }, "settings.default-site.html": { "defaultMessage": "Benutzerdefinierte HTML" From 639ba3a5252663db63bee66adf09051db5caf236 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 5 Nov 2025 07:52:28 +0100 Subject: [PATCH 04/42] Update de.json fix: typo fix: translate Location with Pfad --- frontend/src/locale/lang/de.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/locale/lang/de.json b/frontend/src/locale/lang/de.json index b0044b07..1aa4216f 100644 --- a/frontend/src/locale/lang/de.json +++ b/frontend/src/locale/lang/de.json @@ -11,7 +11,7 @@ "access-list.subtitle": "{users} {users, plural, one {User} other {Users}}, {rules} {rules, plural, one {Regel} other {Regeln}} - Erstellt: {date}", "access-lists": "Zugrifflisten", "action.add": "Hinzufügen", - "action.add-location": "Lokation Hinzufügen", + "action.add-location": "Pfad Hinzufügen", "action.close": "Schließen", "action.delete": "Löschen", "action.disable": "Deaktivieren", @@ -55,7 +55,7 @@ "column.access": "Zugriff", "column.authorization": "Genehmigung", "column.authorizations": "Genehmigungen", - "column.custom-locations": "Benutzerdefinierte Lokation", + "column.custom-locations": "Benutzerdefinierte Pfad", "column.destination": "Ziel", "column.details": "Details", "column.email": "Email", @@ -211,4 +211,4 @@ "user.switch-light": "Zum hellen Modus wechslen", "username": "Username", "users": "Users" -} \ No newline at end of file +} From ceb098fcfe1a447d8454bbe13c38eda4236e90b0 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 5 Nov 2025 07:53:56 +0100 Subject: [PATCH 05/42] Fix typo in German locale for min character length fix: typo mainimale should be minimale --- frontend/src/locale/lang/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/locale/lang/de.json b/frontend/src/locale/lang/de.json index 1aa4216f..fd899285 100644 --- a/frontend/src/locale/lang/de.json +++ b/frontend/src/locale/lang/de.json @@ -103,7 +103,7 @@ "error.max-character-length": "Die maximale Länge beträgt {max} Zeichen{max, plural, one {} other {s}}", "error.max-domains": "Zu viele Domains, maximal sind {max}", "error.maximum": "Maximum ist {max}", - "error.min-character-length": "Die mainimale Länge beträgt {min} Zeichen{min, plural, one {} other {s}}", + "error.min-character-length": "Die minimale Länge beträgt {min} Zeichen{min, plural, one {} other {s}}", "error.minimum": "Minimum ist {min}", "error.passwords-must-match": "Passwörter müssen übereinstimmen", "error.required": "Dies ist erforderlich.", From d0e20d4f1b08396b99d7376a6b1c71e60d2ec3b9 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 5 Nov 2025 07:57:11 +0100 Subject: [PATCH 06/42] Update de.json fix: typo dark and light mode --- frontend/src/locale/lang/de.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/locale/lang/de.json b/frontend/src/locale/lang/de.json index fd899285..2195710e 100644 --- a/frontend/src/locale/lang/de.json +++ b/frontend/src/locale/lang/de.json @@ -208,7 +208,7 @@ "user.set-password": "Passwort setzen", "user.set-permissions": "Berechtigungen für {name} setzen", "user.switch-dark": "Zum Dark Mode wechseln", - "user.switch-light": "Zum hellen Modus wechslen", - "username": "Username", - "users": "Users" + "user.switch-light": "Zum Light Mode wechslen", + "username": "Benutzername", + "users": "Benutzer" } From cd3a09ebf62603a025c68878e40771a50fe499ff Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 5 Nov 2025 07:59:45 +0100 Subject: [PATCH 07/42] Update Certificates.md fix: typo --- frontend/src/locale/src/HelpDoc/de/Certificates.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/frontend/src/locale/src/HelpDoc/de/Certificates.md b/frontend/src/locale/src/HelpDoc/de/Certificates.md index 77dfe3c4..be15ffa6 100644 --- a/frontend/src/locale/src/HelpDoc/de/Certificates.md +++ b/frontend/src/locale/src/HelpDoc/de/Certificates.md @@ -30,6 +30,3 @@ Dieser Prozess unterstützt Wildcard-Domains. Verwenden Sie diese Option, um Ihr eigenes SSL-Zertifikat hochzuladen, das Ihnen von Ihrer eigenen Zertifizierungsstelle bereitgestellt wurde. - - -Übersetzt mit DeepL.com (kostenlose Version) \ No newline at end of file From 1209303a1de47c376279fdb8a6e2057cfe7504c4 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 5 Nov 2025 08:00:15 +0100 Subject: [PATCH 08/42] Update DeadHosts.md fix: translation "Umgangssprachlich" --- frontend/src/locale/src/HelpDoc/de/DeadHosts.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/frontend/src/locale/src/HelpDoc/de/DeadHosts.md b/frontend/src/locale/src/HelpDoc/de/DeadHosts.md index 7c321149..a73992c2 100644 --- a/frontend/src/locale/src/HelpDoc/de/DeadHosts.md +++ b/frontend/src/locale/src/HelpDoc/de/DeadHosts.md @@ -1,6 +1,6 @@ ## Was ist ein 404-Host? -Ein 404-Host ist einfach ein Host-Setup, das eine 404-Seite anzeigt. +Ein 404-Host ist ein Host-Setup, das eine 404-Seite anzeigt. Dies kann nützlich sein, wenn Ihre Domain in Suchmaschinen gelistet ist und Sie eine ansprechendere Fehlerseite bereitstellen oder den Suchindexern ausdrücklich mitteilen möchten, dass @@ -8,5 +8,3 @@ die Domain-Seiten nicht mehr existieren. Ein weiterer Vorteil dieses Hosts besteht darin, dass Sie die Protokolle für Zugriffe darauf verfolgen und die Verweise anzeigen können. - -Übersetzt mit DeepL.com (kostenlose Version) \ No newline at end of file From bf1ad15ed7fd97951a0721a44236cd7cce4ad4b2 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 5 Nov 2025 08:08:50 +0100 Subject: [PATCH 09/42] Update de.json fix: typos --- frontend/src/locale/src/de.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/frontend/src/locale/src/de.json b/frontend/src/locale/src/de.json index be76432c..fd235897 100644 --- a/frontend/src/locale/src/de.json +++ b/frontend/src/locale/src/de.json @@ -36,7 +36,7 @@ "defaultMessage": "Hinzufügen" }, "action.add-location": { - "defaultMessage": "Lokation Hinzufügen" + "defaultMessage": "Pfad Hinzufügen" }, "action.close": { "defaultMessage": "Schließen" @@ -48,7 +48,7 @@ "defaultMessage": "Deaktivieren" }, "action.download": { - "defaultMessage": "Herrunterladen" + "defaultMessage": "Herunterladen" }, "action.edit": { "defaultMessage": "Bearbeiten" @@ -168,7 +168,7 @@ "defaultMessage": "Genehmigungen" }, "column.custom-locations": { - "defaultMessage": "Benutzerdefinierte Lokation" + "defaultMessage": "Benutzerdefinierte Pfad" }, "column.destination": { "defaultMessage": "Ziel" @@ -228,7 +228,7 @@ "defaultMessage": "Status" }, "created-on": { - "defaultMessage": "Erstellr: {date}" + "defaultMessage": "Erstelldatum: {date}" }, "dashboard": { "defaultMessage": "Dashboard" @@ -312,7 +312,7 @@ "defaultMessage": "Maximum ist {max}" }, "error.min-character-length": { - "defaultMessage": "Die mainimale Länge beträgt {min} Zeichen{min, plural, one {} other {s}}" + "defaultMessage": "Die minimale Länge beträgt {min} Zeichen{min, plural, one {} other {s}}" }, "error.minimum": { "defaultMessage": "Minimum ist {min}" @@ -366,7 +366,7 @@ "defaultMessage": "Let's Encrypt via HTTP" }, "loading": { - "defaultMessage": "Loading…" + "defaultMessage": "Laden…" }, "login.title": { "defaultMessage": "Account Login" @@ -627,12 +627,12 @@ "defaultMessage": "Zum Dark Mode wechseln" }, "user.switch-light": { - "defaultMessage": "Zum hellen Modus wechslen" + "defaultMessage": "Zum Light Mode wechslen" }, "username": { - "defaultMessage": "Username" + "defaultMessage": "Benutzername" }, "users": { - "defaultMessage": "Users" + "defaultMessage": "Benutzer" } } From b21d6d9d784bdc5a3e738dc6a4e05f2caab0db7b Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 5 Nov 2025 08:09:10 +0100 Subject: [PATCH 10/42] Fix German translations Fix: German translations --- frontend/src/locale/lang/de.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/locale/lang/de.json b/frontend/src/locale/lang/de.json index 2195710e..e90eb06c 100644 --- a/frontend/src/locale/lang/de.json +++ b/frontend/src/locale/lang/de.json @@ -15,7 +15,7 @@ "action.close": "Schließen", "action.delete": "Löschen", "action.disable": "Deaktivieren", - "action.download": "Herrunterladen", + "action.download": "Herunterladen", "action.edit": "Bearbeiten", "action.enable": "Aktivieren", "action.permissions": "Berechtigungen", @@ -75,7 +75,7 @@ "column.source": "Quelle", "column.ssl": "SSL", "column.status": "Status", - "created-on": "Erstellr: {date}", + "created-on": "Erstelldatum: {date}", "dashboard": "Dashboard", "dead-host": "404 Host", "dead-hosts": "404 Hosts", @@ -121,7 +121,7 @@ "lets-encrypt": "Let's Encrypt", "lets-encrypt-via-dns": "Let's Encrypt via DNS", "lets-encrypt-via-http": "Let's Encrypt via HTTP", - "loading": "Loading…", + "loading": "Laden…", "login.title": "Account Login", "nginx-config.label": "Benutzerdefinierte Nginx Konfiguration", "nginx-config.placeholder": "# Geben Sie hier Ihre benutzerdefinierte Nginx-Konfiguration auf eigene Gefahr ein!", From 9de40f067bd6047fc3d9fc89a67bcf2cf5f959a5 Mon Sep 17 00:00:00 2001 From: Takahisa-Okawa Date: Wed, 5 Nov 2025 22:25:15 +0900 Subject: [PATCH 11/42] Add Japanese language support and translations Co-authored-by: kz2870 --- frontend/src/locale/IntlProvider.tsx | 11 +- frontend/src/locale/lang/ja.json | 215 ++++++ frontend/src/locale/lang/lang-list.json | 3 +- frontend/src/locale/src/HelpDoc/index.ts | 3 +- .../src/locale/src/HelpDoc/ja/AccessLists.md | 8 + .../src/locale/src/HelpDoc/ja/Certificates.md | 21 + .../src/locale/src/HelpDoc/ja/DeadHosts.md | 7 + .../src/locale/src/HelpDoc/ja/ProxyHosts.md | 7 + .../locale/src/HelpDoc/ja/RedirectionHosts.md | 5 + frontend/src/locale/src/HelpDoc/ja/Streams.md | 5 + frontend/src/locale/src/HelpDoc/ja/index.ts | 6 + frontend/src/locale/src/ja.json | 641 ++++++++++++++++++ frontend/src/locale/src/lang-list.json | 3 + 13 files changed, 932 insertions(+), 3 deletions(-) create mode 100644 frontend/src/locale/lang/ja.json create mode 100644 frontend/src/locale/src/HelpDoc/ja/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/ja/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/ja/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/ja/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/ja/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/ja/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/ja/index.ts create mode 100644 frontend/src/locale/src/ja.json diff --git a/frontend/src/locale/IntlProvider.tsx b/frontend/src/locale/IntlProvider.tsx index 46467d01..af027024 100644 --- a/frontend/src/locale/IntlProvider.tsx +++ b/frontend/src/locale/IntlProvider.tsx @@ -1,15 +1,21 @@ import { createIntl, createIntlCache } from "react-intl"; import langEn from "./lang/en.json"; +import langJa from "./lang/ja.json"; import langList from "./lang/lang-list.json"; // first item of each array should be the language code, // not the country code // Remember when adding to this list, also update check-locales.js script -const localeOptions = [["en", "en-US"]]; +const localeOptions = [ + ["en", "en-US"], + ["ja", "ja-JP"] +]; const loadMessages = (locale?: string): typeof langList & typeof langEn => { const thisLocale = locale || "en"; switch (thisLocale.slice(0, 2)) { + case "ja": + return Object.assign({}, langList, langJa); default: return Object.assign({}, langList, langEn); } @@ -17,6 +23,9 @@ const loadMessages = (locale?: string): typeof langList & typeof langEn => { const getFlagCodeForLocale = (locale?: string) => { switch (locale) { + case "ja-JP": + case "ja": + return "JP"; default: return "EN"; } diff --git a/frontend/src/locale/lang/ja.json b/frontend/src/locale/lang/ja.json new file mode 100644 index 00000000..1bf7dfb1 --- /dev/null +++ b/frontend/src/locale/lang/ja.json @@ -0,0 +1,215 @@ +{ + "access-list": "アクセスリスト", + "access-list.access-count": "{count} ルール", + "access-list.auth-count": "{count} ユーザー", + "access-list.help-rules-last": "少なくとも 1 つのルールが存在する場合、 他のすべてを拒否するルールが最後に追加されます", + "access-list.help.rules-order": "許可コマンドと拒否コマンドは定義された順番で適用されます", + "access-list.pass-auth": "認証情報をアップストリームに送信する", + "access-list.public": "公開されたアクセス", + "access-list.public.subtitle": "ベーシック認証を使用しません", + "access-list.satisfy-any": "いずれかを満たす", + "access-list.subtitle": "{users} ユーザー, {rules} ルール - 作成日時: {date}", + "access-lists": "アクセスリスト", + "action.add": "追加", + "action.add-location": "場所を追加", + "action.close": "閉じる", + "action.delete": "削除", + "action.disable": "無効化", + "action.download": "ダウンロード", + "action.edit": "編集", + "action.enable": "有効化", + "action.permissions": "権限", + "action.renew": "更新", + "action.view-details": "詳細", + "auditlogs": "監査ログ", + "cancel": "キャンセル", + "certificate": "証明書", + "certificate.custom-certificate": "証明書", + "certificate.custom-certificate-key": "証明書キー", + "certificate.custom-intermediate": "中間証明書", + "certificate.in-use": "使用中", + "certificate.none.subtitle": "証明書が割り当てられていません", + "certificate.none.subtitle.for-http": "このホストはHTTPSを使用しません", + "certificate.none.title": "無し", + "certificate.not-in-use": "未使用", + "certificate.renew": "証明書を更新", + "certificates": "証明書", + "certificates.custom": "カスタム証明書", + "certificates.custom.warning": "パスワードによって保護されたキーファイルはサポートされていません", + "certificates.dns.credentials": "資格情報ファイルの内容", + "certificates.dns.credentials-note": "このプラグインはプロバイダーのAPIキーか認証情報を含む設定ファイルが必要です", + "certificates.dns.credentials-warning": "このデータはファイルとデータベースにプレーンテキストとして保存されます", + "certificates.dns.propagation-seconds": "DNS伝播時間(秒)", + "certificates.dns.propagation-seconds-note": "DNSの伝搬時間を秒で指定します。空にするとデフォルトの値を使用します。", + "certificates.dns.provider": "DNSプロバイダー", + "certificates.dns.warning": "このセクションはCertbotとそのDNSプラグインの知識が必要です。各プラグインのドキュメントを参照してください。", + "certificates.http.reachability-404": "このドメインはNginx Proxy Managerではないサーバーを指しているようです。ドメインがこのNPMインスタンスを指していることを確認してください。", + "certificates.http.reachability-failed-to-check": "site24x7.comへの接続でエラーが発生し、到達性チェックに失敗しました", + "certificates.http.reachability-not-resolved": "このドメインには利用可能なサーバーがありません。ドメインが存在し、NPMインスタンスのIPアドレスを指していること、必要に応じてルーターでポート80が転送されていることを確認してください。", + "certificates.http.reachability-ok": "サーバーへ到達可能であり、証明書の作成が可能です。", + "certificates.http.reachability-other": "このドメインでサーバーが見つかりましたが予期しないステータスコード {code} を返しました. NPMサーバーが動いていますか? ドメインがこのNPMインスタンスを指していることを確認してください。", + "certificates.http.reachability-wrong-data": "このドメインでサーバーが見つかりましたが予期しないデータを返しました. NPMサーバーが動いていますか? ドメインがこのNPMインスタンスを指していることを確認してください。", + "certificates.http.test-results": "テスト結果", + "certificates.http.warning": "これらのドメインは、すでにこのインストール先を指すように設定されている必要がありますあ.", + "certificates.request.subtitle": "Let's Encryptを使用する", + "certificates.request.title": "新しい証明書を作成", + "column.access": "アクセス", + "column.authorization": "認証", + "column.authorizations": "認証", + "column.custom-locations": "カスタムロケーション", + "column.destination": "宛先", + "column.details": "詳細", + "column.email": "Email", + "column.event": "イベント", + "column.expires": "期限切れ", + "column.http-code": "アクセス", + "column.incoming-port": "受信ポート", + "column.name": "名前", + "column.protocol": "プロトコル", + "column.provider": "プロバイダー", + "column.roles": "Roles", + "column.rules": "ルール", + "column.satisfy": "Satisfy", + "column.satisfy-all": "すべて", + "column.satisfy-any": "いずれか", + "column.scheme": "スキーム", + "column.source": "ソース", + "column.ssl": "SSL", + "column.status": "ステータス", + "created-on": "作成日時: {date}", + "dashboard": "ダッシュボード", + "dead-host": "404 ホスト", + "dead-hosts": "404 ホスト", + "dead-hosts.count": "{count} 404 ホスト", + "disabled": "無効化", + "domain-names": "ドメイン名", + "domain-names.max": "{count}のドメイン名が最大です", + "domain-names.placeholder": "追加するドメインを入力...", + "domain-names.wildcards-not-permitted": "ワイルドカードはこのタイプでは許可されていません", + "domain-names.wildcards-not-supported": "ワイルドカードはこのCAではサポートされていません", + "domains.force-ssl": "SSLを強制", + "domains.hsts-enabled": "HSTSを有効化", + "domains.hsts-subdomains": "HSTSサブドメイン", + "domains.http2-support": "HTTP/2サポート", + "domains.use-dns": "DNSチャレンジを使用", + "email-address": "Emailアドレス", + "empty-search": "見つかりませんでした", + "empty-subtitle": "作ってみましょう", + "enabled": "有効", + "error.access.at-least-one": "少なくとも一つの認証またはアクセスルールが必要です", + "error.access.duplicate-usernames": "認証のユーザー名は他と同じ名前は使用できません", + "error.invalid-auth": "無効なemailまたはパスワード", + "error.invalid-domain": "無効なドメイン: {domain}", + "error.invalid-email": "無効なemailアドレス", + "error.max-character-length": "文字数は長くとも{max}文字です", + "error.max-domains": "ドメインが多すぎます, 最大値は{max}です", + "error.maximum": "最大値は{max}です", + "error.min-character-length": "文字数は少なくとも{min}文字です", + "error.minimum": "最小値は{min}です", + "error.passwords-must-match": "パスワードは一致する必要があります", + "error.required": "必須項目です", + "expires.on": "有効期限: {date}", + "footer.github-fork": "Fork me on Github", + "host.flags.block-exploits": "一般的なエクスプロイトをブロックする", + "host.flags.cache-assets": "アセットをキャッシュする", + "host.flags.preserve-path": "パスワードは一致する必要があります", + "host.flags.protocols": "プロトコル", + "host.flags.websockets-upgrade": "Websocketsサポート", + "host.forward-port": "転送ポート", + "host.forward-scheme": "スキーム", + "hosts": "ホスト", + "http-only": "HTTP Only", + "lets-encrypt": "Let's Encrypt", + "lets-encrypt-via-dns": "Let's Encrypt via DNS", + "lets-encrypt-via-http": "Let's Encrypt via HTTP", + "loading": "Loading…", + "login.title": "アカウントにログイン", + "nginx-config.label": "カスタムNginx設定", + "nginx-config.placeholder": "# Enter your custom Nginx configuration here at your own risk!", + "no-permission-error": "これを表示する権限がありません", + "notfound.action": "ホームに戻る", + "notfound.content": "申し訳ありませんが探しているページは見つかりませんでした", + "notfound.title": "おっと... エラーページにたどり着いてしまったようです", + "notification.error": "エラー", + "notification.object-deleted": "{object}は削除されました", + "notification.object-disabled": "{object}は無効化されました", + "notification.object-enabled": "{object}は有効化されました", + "notification.object-renewed": "{object}は再作成されました", + "notification.object-saved": "{object}は保存されました", + "notification.success": "成功", + "object.actions-title": "{object} #{id}", + "object.add": "{object}を追加", + "object.delete": "{object}を削除", + "object.delete.content": "本当に{object}を削除しますか?", + "object.edit": "{object}を編集", + "object.empty": "{objects}はありません", + "object.event.created": "{object}を作成済み", + "object.event.deleted": "{object}を削除済み", + "object.event.disabled": "{object}を無効化済み", + "object.event.enabled": "{object}を有効化済み", + "object.event.renewed": "{object}を再作成済み", + "object.event.updated": "{object}を更新済み", + "offline": "Offline", + "online": "Online", + "options": "Options", + "password": "パスワード", + "password.generate": "ランダムなパスワードを生成", + "password.hide": "パスワードを隠す", + "password.show": "パスワードを表示する", + "permissions.hidden": "非公開", + "permissions.manage": "管理", + "permissions.view": "表示のみ", + "permissions.visibility.all": "すべて", + "permissions.visibility.title": "可視性", + "permissions.visibility.user": "作成したもののみ", + "proxy-host": "プロキシホスト", + "proxy-host.forward-host": "転送ホスト名/IP", + "proxy-hosts": "プロキシホスト", + "proxy-hosts.count": "{count} プロキシホスト", + "public": "Public", + "redirection-host": "リダイレクトホスト", + "redirection-host.forward-domain": "転送ホスト", + "redirection-hosts": "リダイレクトホスト", + "redirection-hosts.count": "{count} リダイレクトホスト", + "role.admin": "管理者", + "role.standard-user": "一般ユーザー", + "save": "保存", + "setting": "設定", + "settings": "設定", + "settings.default-site": "デフォルトサイト", + "settings.default-site.404": "404ページ", + "settings.default-site.444": "返答しない (444)", + "settings.default-site.congratulations": "設定ページ", + "settings.default-site.description": "不明なホストを要求されたときにNginxが何を返すかを設定します", + "settings.default-site.html": "カスタムHTML", + "settings.default-site.html.placeholder": "", + "settings.default-site.redirect": "リダイレクト", + "setup.preamble": "管理者アカウントを作成して始めましょう", + "setup.title": "ようこそ!", + "sign-in": "サインイン", + "ssl-certificate": "SSL証明書", + "stream": "ストリーム", + "stream.forward-host": "転送ポート", + "stream.incoming-port": "受信ポート", + "streams": "ストリーム", + "streams.count": "{count} ストリーム", + "streams.tcp": "TCP", + "streams.udp": "UDP", + "test": "テスト", + "user": "ユーザー", + "user.change-password": "変更するパスワード", + "user.confirm-password": "変更するパスワードを確認", + "user.current-password": "現在のパスワード", + "user.edit-profile": "プロフィールを編集", + "user.full-name": "フルネーム", + "user.login-as": "{name}としてサインイン", + "user.logout": "ログアウト", + "user.new-password": "新しいパスワード", + "user.nickname": "ニックネーム", + "user.set-password": "パスワードを設定", + "user.set-permissions": "{name}に権限を設定", + "user.switch-dark": "ダークモードに変更", + "user.switch-light": "ライトモードに変更", + "username": "ユーザー名", + "users": "ユーザー" +} \ No newline at end of file diff --git a/frontend/src/locale/lang/lang-list.json b/frontend/src/locale/lang/lang-list.json index 4d9de4e5..962787be 100644 --- a/frontend/src/locale/lang/lang-list.json +++ b/frontend/src/locale/lang/lang-list.json @@ -1,3 +1,4 @@ { - "locale-en-US": "English" + "locale-en-US": "English", + "locale-ja-JP": "日本語" } \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/index.ts b/frontend/src/locale/src/HelpDoc/index.ts index 40ca1b52..1b8a5422 100644 --- a/frontend/src/locale/src/HelpDoc/index.ts +++ b/frontend/src/locale/src/HelpDoc/index.ts @@ -1,8 +1,9 @@ // import * as de from "./de/index"; // import * as fa from "./fa/index"; import * as en from "./en/index"; +import * as ja from "./ja/index"; -const items: any = { en }; +const items: any = { en, ja }; const fallbackLang = "en"; diff --git a/frontend/src/locale/src/HelpDoc/ja/AccessLists.md b/frontend/src/locale/src/HelpDoc/ja/AccessLists.md new file mode 100644 index 00000000..aaeea87a --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/ja/AccessLists.md @@ -0,0 +1,8 @@ +## アクセスリストとは + +アクセスリストは特定のクライアントIPへのブラックリストとホワイトリストを提供し、ベーシック認証によるプロキシホストへの認証を可能にします。 + +複数のクライアントルールやユーザー名とパスワードを一つのアクセスリストに設定し、一つ以上の _プロキシホスト_ に適応することができます。 + +これは認証システムを持たないサービスや不明なクライアントからの保護が必要な場合に有効です。 + diff --git a/frontend/src/locale/src/HelpDoc/ja/Certificates.md b/frontend/src/locale/src/HelpDoc/ja/Certificates.md new file mode 100644 index 00000000..dbe2cfb1 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/ja/Certificates.md @@ -0,0 +1,21 @@ +## 証明書 + +### HTTP 証明書 + +HTTPによって検証された証明書はLet's EncryptサーバーがHTTPでドメインにアクセスを試みサーバーを管理していることを確認できた場合に発行される証明書です。 + +この方法では、HTTPアクセス可能でこのNginxを指しているドメインに対して _プロキシホスト_ を作成する必要があります。証明書が発行された後は、 _プロキシホスト_ を編集してこの証明書をHTTPS接続に使用するように設定できます。ただし、証明書の更新には、_プロキシホスト_ がHTTP接続用に設定された状態を維持する必要があります。 + +この方法はワイルドカードのドメインをサポート _していません_ 。 + +### DNS 証明書 + +DNSによって検証された証明書にはDNSプロバイダープラグインが必要です。このプロバイダーはドメイン上に一時レコードを作成するために使用されます。その後Let's Encryptサーバーがそのレコードを参照し、あなたが所有していることを確認できると証明書が発行されます。 + +このタイプの証明書を作成する際に、 _プロキシホスト_ を作成する必要はありません。また、_プロキシホスト_ をHTTPアクセス用に設定する必要もありません。 + +この方法はワイルドカードのドメインをサポート _します_ 。 + +### カスタム証明書 + +このオプションでは、あなたの証明書認証局によって提供された自身の証明書をアップロードして使用できます。 diff --git a/frontend/src/locale/src/HelpDoc/ja/DeadHosts.md b/frontend/src/locale/src/HelpDoc/ja/DeadHosts.md new file mode 100644 index 00000000..4c6aad9f --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/ja/DeadHosts.md @@ -0,0 +1,7 @@ +## 404ホストとはなんですか? + +404ホストとは、単に404ページを表示するよう設定されたホストです。 + +これは、検索エンジンに登録されたドメインに分かりやすいエラーページを提供したい場合や、検索エンジンのインデクサーにドメインページがもう存在しないことを伝えたい場合に便利です。 + +このホストを持つもう一つの利点は、アクセスログを追跡し、参照元を確認できることです。 diff --git a/frontend/src/locale/src/HelpDoc/ja/ProxyHosts.md b/frontend/src/locale/src/HelpDoc/ja/ProxyHosts.md new file mode 100644 index 00000000..e01d0a62 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/ja/ProxyHosts.md @@ -0,0 +1,7 @@ +## プロキシホストとは何ですか? + +プロキシホストは転送したいwebサービスの受信エンドポイントです。 + +サービスにSSLサーバーが組み込まれていない場合でも、オプションでSSL終端機能を提供します。 + +プロキシホストはNginx Proxy Managerのもっとも一般的な使用方法です。 \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/ja/RedirectionHosts.md b/frontend/src/locale/src/HelpDoc/ja/RedirectionHosts.md new file mode 100644 index 00000000..e1fb5881 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/ja/RedirectionHosts.md @@ -0,0 +1,5 @@ +## リダイレクトホストとは何ですか? + +リダイレクトホストは受信したリクエストを別のドメインにリダイレクトして訪問者に表示します。 + +このタイプのもっとも一般的な使用理由は、webサイトのドメインが変更されたが検索エンジンやリンクが古いドメインを指し続けている場合です。 diff --git a/frontend/src/locale/src/HelpDoc/ja/Streams.md b/frontend/src/locale/src/HelpDoc/ja/Streams.md new file mode 100644 index 00000000..8fc38b73 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/ja/Streams.md @@ -0,0 +1,5 @@ +## ストリームとは何ですか? + +Nginxの比較的新しい機能であるストリームは、TCP/UDPトラフィックをネットワーク上の別のコンピュータに直接転送します。 + +ゲームサーバー、FTPサーバー、SSHサーバーを運用している場合に便利です。 diff --git a/frontend/src/locale/src/HelpDoc/ja/index.ts b/frontend/src/locale/src/HelpDoc/ja/index.ts new file mode 100644 index 00000000..a9bb46ba --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/ja/index.ts @@ -0,0 +1,6 @@ +export * as AccessLists from "./AccessLists.md"; +export * as Certificates from "./Certificates.md"; +export * as DeadHosts from "./DeadHosts.md"; +export * as ProxyHosts from "./ProxyHosts.md"; +export * as RedirectionHosts from "./RedirectionHosts.md"; +export * as Streams from "./Streams.md"; diff --git a/frontend/src/locale/src/ja.json b/frontend/src/locale/src/ja.json new file mode 100644 index 00000000..1ace1c64 --- /dev/null +++ b/frontend/src/locale/src/ja.json @@ -0,0 +1,641 @@ +{ + "access-list": { + "defaultMessage": "アクセスリスト" + }, + "access-list.access-count": { + "defaultMessage": "{count} ルール" + }, + "access-list.auth-count": { + "defaultMessage": "{count} ユーザー" + }, + "access-list.help-rules-last": { + "defaultMessage": "少なくとも 1 つのルールが存在する場合、 他のすべてを拒否するルールが最後に追加されます" + }, + "access-list.help.rules-order": { + "defaultMessage": "許可コマンドと拒否コマンドは定義された順番で適用されます" + }, + "access-list.pass-auth": { + "defaultMessage": "認証情報をアップストリームに送信する" + }, + "access-list.public": { + "defaultMessage": "公開されたアクセス" + }, + "access-list.public.subtitle": { + "defaultMessage": "ベーシック認証を使用しません" + }, + "access-list.satisfy-any": { + "defaultMessage": "いずれかを満たす" + }, + "access-list.subtitle": { + "defaultMessage": "{users} ユーザー, {rules} ルール - 作成日時: {date}" + }, + "access-lists": { + "defaultMessage": "アクセスリスト" + }, + "action.add": { + "defaultMessage": "追加" + }, + "action.add-location": { + "defaultMessage": "場所を追加" + }, + "action.close": { + "defaultMessage": "閉じる" + }, + "action.delete": { + "defaultMessage": "削除" + }, + "action.disable": { + "defaultMessage": "無効化" + }, + "action.download": { + "defaultMessage": "ダウンロード" + }, + "action.edit": { + "defaultMessage": "編集" + }, + "action.enable": { + "defaultMessage": "有効化" + }, + "action.permissions": { + "defaultMessage": "権限" + }, + "action.renew": { + "defaultMessage": "更新" + }, + "action.view-details": { + "defaultMessage": "詳細" + }, + "auditlogs": { + "defaultMessage": "監査ログ" + }, + "cancel": { + "defaultMessage": "キャンセル" + }, + "certificate": { + "defaultMessage": "証明書" + }, + "certificate.custom-certificate": { + "defaultMessage": "証明書" + }, + "certificate.custom-certificate-key": { + "defaultMessage": "証明書キー" + }, + "certificate.custom-intermediate": { + "defaultMessage": "中間証明書" + }, + "certificate.in-use": { + "defaultMessage": "使用中" + }, + "certificate.none.subtitle": { + "defaultMessage": "証明書が割り当てられていません" + }, + "certificate.none.subtitle.for-http": { + "defaultMessage": "このホストはHTTPSを使用しません" + }, + "certificate.none.title": { + "defaultMessage": "無し" + }, + "certificate.not-in-use": { + "defaultMessage": "未使用" + }, + "certificate.renew": { + "defaultMessage": "証明書を更新" + }, + "certificates": { + "defaultMessage": "証明書" + }, + "certificates.custom": { + "defaultMessage": "カスタム証明書" + }, + "certificates.custom.warning": { + "defaultMessage": "パスワードによって保護されたキーファイルはサポートされていません" + }, + "certificates.dns.credentials": { + "defaultMessage": "資格情報ファイルの内容" + }, + "certificates.dns.credentials-note": { + "defaultMessage": "このプラグインはプロバイダーのAPIキーか認証情報を含む設定ファイルが必要です" + }, + "certificates.dns.credentials-warning": { + "defaultMessage": "このデータはファイルとデータベースにプレーンテキストとして保存されます" + }, + "certificates.dns.propagation-seconds": { + "defaultMessage": "DNS伝播時間(秒)" + }, + "certificates.dns.propagation-seconds-note": { + "defaultMessage": "DNSの伝搬時間を秒で指定します。空にするとデフォルトの値を使用します。" + }, + "certificates.dns.provider": { + "defaultMessage": "DNSプロバイダー" + }, + "certificates.dns.warning": { + "defaultMessage": "このセクションはCertbotとそのDNSプラグインの知識が必要です。各プラグインのドキュメントを参照してください。" + }, + "certificates.http.reachability-404": { + "defaultMessage": "このドメインはNginx Proxy Managerではないサーバーを指しているようです。ドメインがこのNPMインスタンスを指していることを確認してください。" + }, + "certificates.http.reachability-failed-to-check": { + "defaultMessage": "site24x7.comへの接続でエラーが発生し、到達性チェックに失敗しました" + }, + "certificates.http.reachability-not-resolved": { + "defaultMessage": "このドメインには利用可能なサーバーがありません。ドメインが存在し、NPMインスタンスのIPアドレスを指していること、必要に応じてルーターでポート80が転送されていることを確認してください。" + }, + "certificates.http.reachability-ok": { + "defaultMessage": "サーバーへ到達可能であり、証明書の作成が可能です。" + }, + "certificates.http.reachability-other": { + "defaultMessage": "このドメインでサーバーが見つかりましたが予期しないステータスコード {code} を返しました. NPMサーバーが動いていますか? ドメインがこのNPMインスタンスを指していることを確認してください。" + }, + "certificates.http.reachability-wrong-data": { + "defaultMessage": "このドメインでサーバーが見つかりましたが予期しないデータを返しました. NPMサーバーが動いていますか? ドメインがこのNPMインスタンスを指していることを確認してください。" + }, + "certificates.http.test-results": { + "defaultMessage": "テスト結果" + }, + "certificates.http.warning": { + "defaultMessage": "これらのドメインは、すでにこのインストール先を指すように設定されている必要がありますあ." + }, + "certificates.request.subtitle": { + "defaultMessage": "Let's Encryptを使用する" + }, + "certificates.request.title": { + "defaultMessage": "新しい証明書を作成" + }, + "column.access": { + "defaultMessage": "アクセス" + }, + "column.authorization": { + "defaultMessage": "認証" + }, + "column.authorizations": { + "defaultMessage": "認証" + }, + "column.custom-locations": { + "defaultMessage": "カスタムロケーション" + }, + "column.destination": { + "defaultMessage": "宛先" + }, + "column.details": { + "defaultMessage": "詳細" + }, + "column.email": { + "defaultMessage": "Email" + }, + "column.event": { + "defaultMessage": "イベント" + }, + "column.expires": { + "defaultMessage": "期限切れ" + }, + "column.http-code": { + "defaultMessage": "アクセス" + }, + "column.incoming-port": { + "defaultMessage": "受信ポート" + }, + "column.name": { + "defaultMessage": "名前" + }, + "column.protocol": { + "defaultMessage": "プロトコル" + }, + "column.provider": { + "defaultMessage": "プロバイダー" + }, + "column.roles": { + "defaultMessage": "Roles" + }, + "column.rules": { + "defaultMessage": "ルール" + }, + "column.satisfy": { + "defaultMessage": "Satisfy" + }, + "column.satisfy-all": { + "defaultMessage": "すべて" + }, + "column.satisfy-any": { + "defaultMessage": "いずれか" + }, + "column.scheme": { + "defaultMessage": "スキーム" + }, + "column.source": { + "defaultMessage": "ソース" + }, + "column.ssl": { + "defaultMessage": "SSL" + }, + "column.status": { + "defaultMessage": "ステータス" + }, + "created-on": { + "defaultMessage": "作成日時: {date}" + }, + "dashboard": { + "defaultMessage": "ダッシュボード" + }, + "dead-host": { + "defaultMessage": "404 ホスト" + }, + "dead-hosts": { + "defaultMessage": "404 ホスト" + }, + "dead-hosts.count": { + "defaultMessage": "{count} 404 ホスト" + }, + "disabled": { + "defaultMessage": "無効化" + }, + "domain-names": { + "defaultMessage": "ドメイン名" + }, + "domain-names.max": { + "defaultMessage": "{count}のドメイン名が最大です" + }, + "domain-names.placeholder": { + "defaultMessage": "追加するドメインを入力..." + }, + "domain-names.wildcards-not-permitted": { + "defaultMessage": "ワイルドカードはこのタイプでは許可されていません" + }, + "domain-names.wildcards-not-supported": { + "defaultMessage": "ワイルドカードはこのCAではサポートされていません" + }, + "domains.force-ssl": { + "defaultMessage": "SSLを強制" + }, + "domains.hsts-enabled": { + "defaultMessage": "HSTSを有効化" + }, + "domains.hsts-subdomains": { + "defaultMessage": "HSTSサブドメイン" + }, + "domains.http2-support": { + "defaultMessage": "HTTP/2サポート" + }, + "domains.use-dns": { + "defaultMessage": "DNSチャレンジを使用" + }, + "email-address": { + "defaultMessage": "Emailアドレス" + }, + "empty-search": { + "defaultMessage": "見つかりませんでした" + }, + "empty-subtitle": { + "defaultMessage": "作ってみましょう" + }, + "enabled": { + "defaultMessage": "有効" + }, + "error.access.at-least-one": { + "defaultMessage": "少なくとも一つの認証またはアクセスルールが必要です" + }, + "error.access.duplicate-usernames": { + "defaultMessage": "認証のユーザー名は他と同じ名前は使用できません" + }, + "error.invalid-auth": { + "defaultMessage": "無効なemailまたはパスワード" + }, + "error.invalid-domain": { + "defaultMessage": "無効なドメイン: {domain}" + }, + "error.invalid-email": { + "defaultMessage": "無効なemailアドレス" + }, + "error.max-character-length": { + "defaultMessage": "文字数は長くとも{max}文字です" + }, + "error.max-domains": { + "defaultMessage": "ドメインが多すぎます, 最大値は{max}です" + }, + "error.maximum": { + "defaultMessage": "最大値は{max}です" + }, + "error.min-character-length": { + "defaultMessage": "文字数は少なくとも{min}文字です" + }, + "error.minimum": { + "defaultMessage": "最小値は{min}です" + }, + "error.passwords-must-match": { + "defaultMessage": "パスワードは一致する必要があります" + }, + "error.required": { + "defaultMessage": "必須項目です" + }, + "expires.on": { + "defaultMessage": "有効期限: {date}" + }, + "footer.github-fork": { + "defaultMessage": "Fork me on Github" + }, + "host.flags.block-exploits": { + "defaultMessage": "一般的なエクスプロイトをブロックする" + }, + "host.flags.cache-assets": { + "defaultMessage": "アセットをキャッシュする" + }, + "host.flags.preserve-path": { + "defaultMessage": "パスワードは一致する必要があります" + }, + "host.flags.protocols": { + "defaultMessage": "プロトコル" + }, + "host.flags.websockets-upgrade": { + "defaultMessage": "Websocketsサポート" + }, + "host.forward-port": { + "defaultMessage": "転送ポート" + }, + "host.forward-scheme": { + "defaultMessage": "スキーム" + }, + "hosts": { + "defaultMessage": "ホスト" + }, + "http-only": { + "defaultMessage": "HTTP Only" + }, + "lets-encrypt": { + "defaultMessage": "Let's Encrypt" + }, + "lets-encrypt-via-dns": { + "defaultMessage": "Let's Encrypt via DNS" + }, + "lets-encrypt-via-http": { + "defaultMessage": "Let's Encrypt via HTTP" + }, + "loading": { + "defaultMessage": "Loading…" + }, + "login.title": { + "defaultMessage": "アカウントにログイン" + }, + "nginx-config.label": { + "defaultMessage": "カスタムNginx設定" + }, + "nginx-config.placeholder": { + "defaultMessage": "# Enter your custom Nginx configuration here at your own risk!" + }, + "no-permission-error": { + "defaultMessage": "これを表示する権限がありません" + }, + "notfound.action": { + "defaultMessage": "ホームに戻る" + }, + "notfound.content": { + "defaultMessage": "申し訳ありませんが探しているページは見つかりませんでした" + }, + "notfound.title": { + "defaultMessage": "おっと... エラーページにたどり着いてしまったようです" + }, + "notification.error": { + "defaultMessage": "エラー" + }, + "notification.object-deleted": { + "defaultMessage": "{object}は削除されました" + }, + "notification.object-disabled": { + "defaultMessage": "{object}は無効化されました" + }, + "notification.object-enabled": { + "defaultMessage": "{object}は有効化されました" + }, + "notification.object-renewed": { + "defaultMessage": "{object}は再作成されました" + }, + "notification.object-saved": { + "defaultMessage": "{object}は保存されました" + }, + "notification.success": { + "defaultMessage": "成功" + }, + "object.actions-title": { + "defaultMessage": "{object} #{id}" + }, + "object.add": { + "defaultMessage": "{object}を追加" + }, + "object.delete": { + "defaultMessage": "{object}を削除" + }, + "object.delete.content": { + "defaultMessage": "本当に{object}を削除しますか?" + }, + "object.edit": { + "defaultMessage": "{object}を編集" + }, + "object.empty": { + "defaultMessage": "{objects}はありません" + }, + "object.event.created": { + "defaultMessage": "{object}を作成済み" + }, + "object.event.deleted": { + "defaultMessage": "{object}を削除済み" + }, + "object.event.disabled": { + "defaultMessage": "{object}を無効化済み" + }, + "object.event.enabled": { + "defaultMessage": "{object}を有効化済み" + }, + "object.event.renewed": { + "defaultMessage": "{object}を再作成済み" + }, + "object.event.updated": { + "defaultMessage": "{object}を更新済み" + }, + "offline": { + "defaultMessage": "Offline" + }, + "online": { + "defaultMessage": "Online" + }, + "options": { + "defaultMessage": "Options" + }, + "password": { + "defaultMessage": "パスワード" + }, + "password.generate": { + "defaultMessage": "ランダムなパスワードを生成" + }, + "password.hide": { + "defaultMessage": "パスワードを隠す" + }, + "password.show": { + "defaultMessage": "パスワードを表示する" + }, + "permissions.hidden": { + "defaultMessage": "非公開" + }, + "permissions.manage": { + "defaultMessage": "管理" + }, + "permissions.view": { + "defaultMessage": "表示のみ" + }, + "permissions.visibility.all": { + "defaultMessage": "すべて" + }, + "permissions.visibility.title": { + "defaultMessage": "可視性" + }, + "permissions.visibility.user": { + "defaultMessage": "作成したもののみ" + }, + "proxy-host": { + "defaultMessage": "プロキシホスト" + }, + "proxy-host.forward-host": { + "defaultMessage": "転送ホスト名/IP" + }, + "proxy-hosts": { + "defaultMessage": "プロキシホスト" + }, + "proxy-hosts.count": { + "defaultMessage": "{count} プロキシホスト" + }, + "public": { + "defaultMessage": "Public" + }, + "redirection-host": { + "defaultMessage": "リダイレクトホスト" + }, + "redirection-host.forward-domain": { + "defaultMessage": "転送ホスト" + }, + "redirection-hosts": { + "defaultMessage": "リダイレクトホスト" + }, + "redirection-hosts.count": { + "defaultMessage": "{count} リダイレクトホスト" + }, + "role.admin": { + "defaultMessage": "管理者" + }, + "role.standard-user": { + "defaultMessage": "一般ユーザー" + }, + "save": { + "defaultMessage": "保存" + }, + "setting": { + "defaultMessage": "設定" + }, + "settings": { + "defaultMessage": "設定" + }, + "settings.default-site": { + "defaultMessage": "デフォルトサイト" + }, + "settings.default-site.404": { + "defaultMessage": "404ページ" + }, + "settings.default-site.444": { + "defaultMessage": "返答しない (444)" + }, + "settings.default-site.congratulations": { + "defaultMessage": "設定ページ" + }, + "settings.default-site.description": { + "defaultMessage": "不明なホストを要求されたときにNginxが何を返すかを設定します" + }, + "settings.default-site.html": { + "defaultMessage": "カスタムHTML" + }, + "settings.default-site.html.placeholder": { + "defaultMessage": "" + }, + "settings.default-site.redirect": { + "defaultMessage": "リダイレクト" + }, + "setup.preamble": { + "defaultMessage": "管理者アカウントを作成して始めましょう" + }, + "setup.title": { + "defaultMessage": "ようこそ!" + }, + "sign-in": { + "defaultMessage": "サインイン" + }, + "ssl-certificate": { + "defaultMessage": "SSL証明書" + }, + "stream": { + "defaultMessage": "ストリーム" + }, + "stream.forward-host": { + "defaultMessage": "転送ポート" + }, + "stream.incoming-port": { + "defaultMessage": "受信ポート" + }, + "streams": { + "defaultMessage": "ストリーム" + }, + "streams.count": { + "defaultMessage": "{count} ストリーム" + }, + "streams.tcp": { + "defaultMessage": "TCP" + }, + "streams.udp": { + "defaultMessage": "UDP" + }, + "test": { + "defaultMessage": "テスト" + }, + "user": { + "defaultMessage": "ユーザー" + }, + "user.change-password": { + "defaultMessage": "変更するパスワード" + }, + "user.confirm-password": { + "defaultMessage": "変更するパスワードを確認" + }, + "user.current-password": { + "defaultMessage": "現在のパスワード" + }, + "user.edit-profile": { + "defaultMessage": "プロフィールを編集" + }, + "user.full-name": { + "defaultMessage": "フルネーム" + }, + "user.login-as": { + "defaultMessage": "{name}としてサインイン" + }, + "user.logout": { + "defaultMessage": "ログアウト" + }, + "user.new-password": { + "defaultMessage": "新しいパスワード" + }, + "user.nickname": { + "defaultMessage": "ニックネーム" + }, + "user.set-password": { + "defaultMessage": "パスワードを設定" + }, + "user.set-permissions": { + "defaultMessage": "{name}に権限を設定" + }, + "user.switch-dark": { + "defaultMessage": "ダークモードに変更" + }, + "user.switch-light": { + "defaultMessage": "ライトモードに変更" + }, + "username": { + "defaultMessage": "ユーザー名" + }, + "users": { + "defaultMessage": "ユーザー" + } +} diff --git a/frontend/src/locale/src/lang-list.json b/frontend/src/locale/src/lang-list.json index 3f3b2697..e5e8ea76 100644 --- a/frontend/src/locale/src/lang-list.json +++ b/frontend/src/locale/src/lang-list.json @@ -1,5 +1,8 @@ { "locale-en-US": { "defaultMessage": "English" + }, + "locale-ja-JP": { + "defaultMessage": "日本語" } } From 123f7d19998ac1fce0627f5b74cf95822f793c76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Portas=20L=C3=B3pez?= <81629707+TeenBiscuits@users.noreply.github.com> Date: Thu, 6 Nov 2025 01:04:02 +0100 Subject: [PATCH 12/42] Add Spanish language support and translations --- frontend/check-locales.cjs | 2 +- frontend/src/locale/IntlProvider.tsx | 11 +- frontend/src/locale/lang/es.json | 215 ++++++ frontend/src/locale/lang/lang-list.json | 5 +- .../src/locale/src/HelpDoc/es/AccessLists.md | 7 + .../src/locale/src/HelpDoc/es/Certificates.md | 32 + .../src/locale/src/HelpDoc/es/DeadHosts.md | 10 + .../src/locale/src/HelpDoc/es/ProxyHosts.md | 7 + .../locale/src/HelpDoc/es/RedirectionHosts.md | 7 + frontend/src/locale/src/HelpDoc/es/Streams.md | 6 + frontend/src/locale/src/HelpDoc/es/index.ts | 6 + frontend/src/locale/src/es.json | 641 ++++++++++++++++++ frontend/src/locale/src/lang-list.json | 5 +- 13 files changed, 949 insertions(+), 5 deletions(-) create mode 100644 frontend/src/locale/lang/es.json create mode 100644 frontend/src/locale/src/HelpDoc/es/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/es/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/es/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/es/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/es/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/es/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/es/index.ts create mode 100644 frontend/src/locale/src/es.json diff --git a/frontend/check-locales.cjs b/frontend/check-locales.cjs index 03a8be14..08b2f773 100755 --- a/frontend/check-locales.cjs +++ b/frontend/check-locales.cjs @@ -8,7 +8,7 @@ const allLocales = [ ["en", "en-US"], - ["fa", "fa-IR"], + ["es", "es-ES"], ]; const ignoreUnused = [ diff --git a/frontend/src/locale/IntlProvider.tsx b/frontend/src/locale/IntlProvider.tsx index 46467d01..0005794b 100644 --- a/frontend/src/locale/IntlProvider.tsx +++ b/frontend/src/locale/IntlProvider.tsx @@ -1,15 +1,21 @@ import { createIntl, createIntlCache } from "react-intl"; import langEn from "./lang/en.json"; +import langEs from "./lang/es.json"; import langList from "./lang/lang-list.json"; // first item of each array should be the language code, // not the country code // Remember when adding to this list, also update check-locales.js script -const localeOptions = [["en", "en-US"]]; +const localeOptions = [ + ["en", "en-US"], + ["es", "es-ES"] +]; const loadMessages = (locale?: string): typeof langList & typeof langEn => { const thisLocale = locale || "en"; switch (thisLocale.slice(0, 2)) { + case "es": + return Object.assign({}, langList, langEs); default: return Object.assign({}, langList, langEn); } @@ -17,6 +23,9 @@ const loadMessages = (locale?: string): typeof langList & typeof langEn => { const getFlagCodeForLocale = (locale?: string) => { switch (locale) { + case "es-ES": + case "es": + return "ES"; default: return "EN"; } diff --git a/frontend/src/locale/lang/es.json b/frontend/src/locale/lang/es.json new file mode 100644 index 00000000..5a71d3c5 --- /dev/null +++ b/frontend/src/locale/lang/es.json @@ -0,0 +1,215 @@ +{ + "access-list": "Lista de Acceso", + "access-list.access-count": "{count} {count, plural, one {Regla} other {Reglas}}", + "access-list.auth-count": "{count} {count, plural, one {Usuario} other {Usuarios}}", + "access-list.help-rules-last": "Cuando exista al menos 1 regla, esta regla de denegar todo se añadirá al final", + "access-list.help.rules-order": "Ten en cuenta que las directivas de permitir y denegar se aplicarán en el orden en que estén definidas.", + "access-list.pass-auth": "Pasar Autenticación al Upstream", + "access-list.public": "Accesible Públicamente", + "access-list.public.subtitle": "No se requiere autenticación básica", + "access-list.satisfy-any": "Satisfacer Cualquiera", + "access-list.subtitle": "{users} {users, plural, one {Usuario} other {Usuarios}}, {rules} {rules, plural, one {Regla} other {Reglas}} - Creado: {date}", + "access-lists": "Listas de Acceso", + "action.add": "Añadir", + "action.add-location": "Añadir Ubicación", + "action.close": "Cerrar", + "action.delete": "Eliminar", + "action.disable": "Deshabilitar", + "action.download": "Descargar", + "action.edit": "Editar", + "action.enable": "Habilitar", + "action.permissions": "Permisos", + "action.renew": "Renovar", + "action.view-details": "Ver Detalles", + "auditlogs": "Registros de Auditoría", + "cancel": "Cancelar", + "certificate": "Certificado", + "certificate.custom-certificate": "Certificado", + "certificate.custom-certificate-key": "Clave del Certificado", + "certificate.custom-intermediate": "Certificado Intermedio", + "certificate.in-use": "En Uso", + "certificate.none.subtitle": "Sin certificado asignado", + "certificate.none.subtitle.for-http": "Este host no usará HTTPS", + "certificate.none.title": "Ninguno", + "certificate.not-in-use": "Sin Usar", + "certificate.renew": "Renovar Certificado", + "certificates": "Certificados", + "certificates.custom": "Certificado Personalizado", + "certificates.custom.warning": "No se admiten archivos de claves protegidos con contraseña.", + "certificates.dns.credentials": "Contenido del Archivo de Credenciales", + "certificates.dns.credentials-note": "Este plugin requiere un archivo de configuración que contenga un token de API u otras credenciales para tu proveedor", + "certificates.dns.credentials-warning": "¡Estos datos se almacenarán como texto plano en la base de datos y en un archivo!", + "certificates.dns.propagation-seconds": "Segundos de Propagación", + "certificates.dns.propagation-seconds-note": "Dejar vacío para usar el valor predeterminado del plugin. Número de segundos a esperar para la propagación DNS.", + "certificates.dns.provider": "Proveedor DNS", + "certificates.dns.warning": "Esta sección requiere algunos conocimientos sobre Certbot y sus plugins DNS. Consulta la documentación de los plugins respectivos.", + "certificates.http.reachability-404": "Se encontró un servidor en este dominio pero no parece ser Nginx Proxy Manager. Asegúrate de que tu dominio apunte a la IP donde se está ejecutando tu instancia de NPM.", + "certificates.http.reachability-failed-to-check": "No se pudo verificar la accesibilidad debido a un error de comunicación con site24x7.com.", + "certificates.http.reachability-not-resolved": "No hay ningún servidor disponible en este dominio. Asegúrate de que tu dominio existe y apunta a la IP donde se está ejecutando tu instancia de NPM y, si es necesario, que el puerto 80 esté redirigido en tu router.", + "certificates.http.reachability-ok": "Tu servidor es accesible y debería ser posible crear certificados.", + "certificates.http.reachability-other": "Se encontró un servidor en este dominio pero devolvió un código de estado inesperado {code}. ¿Es el servidor NPM? Asegúrate de que tu dominio apunte a la IP donde se está ejecutando tu instancia de NPM.", + "certificates.http.reachability-wrong-data": "Se encontró un servidor en este dominio pero devolvió datos inesperados. ¿Es el servidor NPM? Asegúrate de que tu dominio apunte a la IP donde se está ejecutando tu instancia de NPM.", + "certificates.http.test-results": "Resultados de la Prueba", + "certificates.http.warning": "Estos dominios ya deben estar configurados para apuntar a esta instalación.", + "certificates.request.subtitle": "con Let's Encrypt", + "certificates.request.title": "Solicitar un nuevo Certificado", + "column.access": "Acceso", + "column.authorization": "Autorización", + "column.authorizations": "Autorizaciones", + "column.custom-locations": "Ubicaciones Personalizadas", + "column.destination": "Destino", + "column.details": "Detalles", + "column.email": "Correo Electrónico", + "column.event": "Evento", + "column.expires": "Expira", + "column.http-code": "Acceso", + "column.incoming-port": "Puerto de Entrada", + "column.name": "Nombre", + "column.protocol": "Protocolo", + "column.provider": "Proveedor", + "column.roles": "Roles", + "column.rules": "Reglas", + "column.satisfy": "Satisfacer", + "column.satisfy-all": "Todo", + "column.satisfy-any": "Cualquiera", + "column.scheme": "Esquema", + "column.source": "Origen", + "column.ssl": "SSL", + "column.status": "Estado", + "created-on": "Creado: {date}", + "dashboard": "Panel de Control", + "dead-host": "Host 404", + "dead-hosts": "Hosts 404", + "dead-hosts.count": "{count} {count, plural, one {Host 404} other {Hosts 404}}", + "disabled": "Deshabilitado", + "domain-names": "Nombres de Dominio", + "domain-names.max": "{count} nombres de dominio como máximo", + "domain-names.placeholder": "Comienza a escribir para añadir dominio...", + "domain-names.wildcards-not-permitted": "No se permiten comodines para este tipo", + "domain-names.wildcards-not-supported": "No se admiten comodines para esta CA", + "domains.force-ssl": "Forzar SSL", + "domains.hsts-enabled": "HSTS Habilitado", + "domains.hsts-subdomains": "HSTS en Subdominios", + "domains.http2-support": "Soporte HTTP/2", + "domains.use-dns": "Usar Desafío DNS", + "email-address": "Dirección de correo electrónico", + "empty-search": "No se encontraron resultados", + "empty-subtitle": "¿Por qué no creas uno?", + "enabled": "Habilitado", + "error.access.at-least-one": "Se requiere al menos una Autorización o una Regla de Acceso", + "error.access.duplicate-usernames": "Los nombres de usuario de autorización deben ser únicos", + "error.invalid-auth": "Correo electrónico o contraseña no válidos", + "error.invalid-domain": "Dominio no válido: {domain}", + "error.invalid-email": "Dirección de correo electrónico no válida", + "error.max-character-length": "La longitud máxima es {max} caracter{max, plural, one {} other {es}}", + "error.max-domains": "Demasiados dominios, el máximo es {max}", + "error.maximum": "El máximo es {max}", + "error.min-character-length": "La longitud mínima es {min} caracter{min, plural, one {} other {es}}", + "error.minimum": "El mínimo es {min}", + "error.passwords-must-match": "Las contraseñas deben coincidir", + "error.required": "Este campo es obligatorio", + "expires.on": "Expira: {date}", + "footer.github-fork": "Bifúrcame en Github", + "host.flags.block-exploits": "Bloquear Exploits Comunes", + "host.flags.cache-assets": "Cachear Recursos", + "host.flags.preserve-path": "Preservar Ruta", + "host.flags.protocols": "Protocolos", + "host.flags.websockets-upgrade": "Soporte de Websockets", + "host.forward-port": "Puerto de Reenvío", + "host.forward-scheme": "Esquema", + "hosts": "Hosts", + "http-only": "Solo HTTP", + "lets-encrypt": "Let's Encrypt", + "lets-encrypt-via-dns": "Let's Encrypt vía DNS", + "lets-encrypt-via-http": "Let's Encrypt vía HTTP", + "loading": "Cargando…", + "login.title": "Inicia sesión en tu cuenta", + "nginx-config.label": "Configuración Personalizada de Nginx", + "nginx-config.placeholder": "# ¡Introduce aquí tu configuración personalizada de Nginx bajo tu propio riesgo!", + "no-permission-error": "No tienes acceso para ver esto.", + "notfound.action": "Llévame al inicio", + "notfound.content": "Lo sentimos, pero la página que buscas no fue encontrada", + "notfound.title": "Ups… Has encontrado una página de error", + "notification.error": "Error", + "notification.object-deleted": "{object} ha sido eliminado", + "notification.object-disabled": "{object} ha sido deshabilitado", + "notification.object-enabled": "{object} ha sido habilitado", + "notification.object-renewed": "{object} ha sido renovado", + "notification.object-saved": "{object} ha sido guardado", + "notification.success": "Éxito", + "object.actions-title": "{object} #{id}", + "object.add": "Añadir {object}", + "object.delete": "Eliminar {object}", + "object.delete.content": "¿Estás seguro de que quieres eliminar este {object}?", + "object.edit": "Editar {object}", + "object.empty": "No hay {objects}", + "object.event.created": "{object} Creado", + "object.event.deleted": "{object} Eliminado", + "object.event.disabled": "{object} Deshabilitado", + "object.event.enabled": "{object} Habilitado", + "object.event.renewed": "{object} Renovado", + "object.event.updated": "{object} Actualizado", + "offline": "Desconectado", + "online": "Conectado", + "options": "Opciones", + "password": "Contraseña", + "password.generate": "Generar contraseña aleatoria", + "password.hide": "Ocultar Contraseña", + "password.show": "Mostrar Contraseña", + "permissions.hidden": "Oculto", + "permissions.manage": "Gestionar", + "permissions.view": "Solo Ver", + "permissions.visibility.all": "Todos los Elementos", + "permissions.visibility.title": "Visibilidad de Elementos", + "permissions.visibility.user": "Solo Elementos Creados", + "proxy-host": "Host Proxy", + "proxy-host.forward-host": "Nombre de Host / IP de Reenvío", + "proxy-hosts": "Hosts Proxy", + "proxy-hosts.count": "{count} {count, plural, one {Host Proxy} other {Hosts Proxy}}", + "public": "Público", + "redirection-host": "Host de Redirección", + "redirection-host.forward-domain": "Dominio de Reenvío", + "redirection-hosts": "Hosts de Redirección", + "redirection-hosts.count": "{count} {count, plural, one {Host de Redirección} other {Hosts de Redirección}}", + "role.admin": "Administrador", + "role.standard-user": "Usuario Estándar", + "save": "Guardar", + "setting": "Configuración", + "settings": "Configuración", + "settings.default-site": "Sitio Predeterminado", + "settings.default-site.404": "Página 404", + "settings.default-site.444": "Sin Respuesta (444)", + "settings.default-site.congratulations": "Página de Felicitaciones", + "settings.default-site.description": "Qué mostrar cuando Nginx recibe un Host desconocido", + "settings.default-site.html": "HTML Personalizado", + "settings.default-site.html.placeholder": "", + "settings.default-site.redirect": "Redirigir", + "setup.preamble": "Comienza creando tu cuenta de administrador.", + "setup.title": "¡Bienvenido!", + "sign-in": "Iniciar Sesión", + "ssl-certificate": "Certificado SSL", + "stream": "Stream", + "stream.forward-host": "Host de Reenvío", + "stream.incoming-port": "Puerto de Entrada", + "streams": "Streams", + "streams.count": "{count} {count, plural, one {Stream} other {Streams}}", + "streams.tcp": "TCP", + "streams.udp": "UDP", + "test": "Probar", + "user": "Usuario", + "user.change-password": "Cambiar Contraseña", + "user.confirm-password": "Confirmar Contraseña", + "user.current-password": "Contraseña Actual", + "user.edit-profile": "Editar Perfil", + "user.full-name": "Nombre Completo", + "user.login-as": "Iniciar sesión como {name}", + "user.logout": "Cerrar Sesión", + "user.new-password": "Nueva Contraseña", + "user.nickname": "Apodo", + "user.set-password": "Establecer Contraseña", + "user.set-permissions": "Establecer Permisos para {name}", + "user.switch-dark": "Cambiar a modo Oscuro", + "user.switch-light": "Cambiar a modo Claro", + "username": "Nombre de Usuario", + "users": "Usuarios" +} \ No newline at end of file diff --git a/frontend/src/locale/lang/lang-list.json b/frontend/src/locale/lang/lang-list.json index 4d9de4e5..864cf2e7 100644 --- a/frontend/src/locale/lang/lang-list.json +++ b/frontend/src/locale/lang/lang-list.json @@ -1,3 +1,4 @@ { - "locale-en-US": "English" -} \ No newline at end of file + "locale-en-US": "English", + "locale-es-ES": "Español" +} diff --git a/frontend/src/locale/src/HelpDoc/es/AccessLists.md b/frontend/src/locale/src/HelpDoc/es/AccessLists.md new file mode 100644 index 00000000..f0a089f6 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/es/AccessLists.md @@ -0,0 +1,7 @@ +## ¿Qué es una Lista de Acceso? + +Las Listas de Acceso proporcionan una lista negra o blanca de direcciones IP de cliente específicas junto con autenticación para los Hosts Proxy a través de Autenticación HTTP Básica. + +Puede configurar múltiples reglas de cliente, nombres de usuario y contraseñas para una única Lista de Acceso y luego aplicarla a uno o más _Hosts Proxy_. + +Esto es más útil para servicios web reenviados que no tienen mecanismos de autenticación integrados o cuando desea protegerse de clientes desconocidos. diff --git a/frontend/src/locale/src/HelpDoc/es/Certificates.md b/frontend/src/locale/src/HelpDoc/es/Certificates.md new file mode 100644 index 00000000..5907147f --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/es/Certificates.md @@ -0,0 +1,32 @@ +## Ayuda de Certificados + +### Certificado HTTP + +Un certificado validado por HTTP significa que los servidores de Let's Encrypt +intentarán acceder a tus dominios a través de HTTP (¡no HTTPS!) y, si tienen éxito, +emitirán tu certificado. + +Para este método, deberás tener un _Host Proxy_ creado para tu(s) dominio(s) que +sea accesible por HTTP y que apunte a esta instalación de Nginx. Después de que se +haya emitido un certificado, puedes modificar el _Host Proxy_ para que también use +este certificado para conexiones HTTPS. Sin embargo, el _Host Proxy_ seguirá +necesitando estar configurado para acceso HTTP para que el certificado se renueve. + +Este proceso _no_ admite dominios comodín. + +### Certificado DNS + +Un certificado validado por DNS requiere que uses un complemento de Proveedor de DNS. +Este Proveedor de DNS se usará para crear registros temporales en tu dominio y luego +Let's Encrypt consultará esos registros para asegurarse de que eres el propietario y, +si tiene éxito, emitirá tu certificado. + +No necesitas tener un _Host Proxy_ creado antes de solicitar este tipo de certificado. +Tampoco necesitas tener tu _Host Proxy_ configurado para acceso HTTP. + +Este proceso _sí_ admite dominios comodín. + +### Certificado Personalizado + +Usa esta opción para cargar tu propio Certificado SSL, proporcionado por tu propia +Autoridad de Certificación. diff --git a/frontend/src/locale/src/HelpDoc/es/DeadHosts.md b/frontend/src/locale/src/HelpDoc/es/DeadHosts.md new file mode 100644 index 00000000..bc775684 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/es/DeadHosts.md @@ -0,0 +1,10 @@ +## ¿Qué es un Host 404? + +Un Host 404 es simplemente una configuración de host que muestra una página 404. + +Esto puede ser útil cuando tu dominio está listado en los motores de búsqueda y deseas +proporcionar una página de error más agradable o específicamente para indicar a los indexadores de búsqueda que +las páginas del dominio ya no existen. + +Otro beneficio de tener este host es rastrear los registros de visitas a él y +ver los referentes. diff --git a/frontend/src/locale/src/HelpDoc/es/ProxyHosts.md b/frontend/src/locale/src/HelpDoc/es/ProxyHosts.md new file mode 100644 index 00000000..57994b7c --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/es/ProxyHosts.md @@ -0,0 +1,7 @@ +## ¿Qué es un Host Proxy? + +Un Host Proxy es el punto de entrada para un servicio web que deseas reenviar. + +Proporciona terminación SSL opcional para tu servicio que podría no tener soporte SSL integrado. + +Los Hosts Proxy son el uso más común del Nginx Proxy Manager. diff --git a/frontend/src/locale/src/HelpDoc/es/RedirectionHosts.md b/frontend/src/locale/src/HelpDoc/es/RedirectionHosts.md new file mode 100644 index 00000000..7a05a301 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/es/RedirectionHosts.md @@ -0,0 +1,7 @@ +## ¿Qué es un Host de Redirección? + +Un Host de Redirección redirigirá las solicitudes del dominio entrante e impulsará al +visitante a otro dominio. + +La razón más común para usar este tipo de host es cuando tu sitio web cambia de +dominios pero aún tienes enlaces de motores de búsqueda o referencias apuntando al dominio anterior. diff --git a/frontend/src/locale/src/HelpDoc/es/Streams.md b/frontend/src/locale/src/HelpDoc/es/Streams.md new file mode 100644 index 00000000..f085352f --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/es/Streams.md @@ -0,0 +1,6 @@ +## ¿Qué es un Stream? + +Una característica relativamente nueva para Nginx, un Stream servirá para reenviar tráfico TCP/UDP +directamente a otra computadora en la red. + +Si estás ejecutando servidores de juegos, FTP o servidores SSH esto puede ser muy útil. diff --git a/frontend/src/locale/src/HelpDoc/es/index.ts b/frontend/src/locale/src/HelpDoc/es/index.ts new file mode 100644 index 00000000..a9bb46ba --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/es/index.ts @@ -0,0 +1,6 @@ +export * as AccessLists from "./AccessLists.md"; +export * as Certificates from "./Certificates.md"; +export * as DeadHosts from "./DeadHosts.md"; +export * as ProxyHosts from "./ProxyHosts.md"; +export * as RedirectionHosts from "./RedirectionHosts.md"; +export * as Streams from "./Streams.md"; diff --git a/frontend/src/locale/src/es.json b/frontend/src/locale/src/es.json new file mode 100644 index 00000000..9f7213a7 --- /dev/null +++ b/frontend/src/locale/src/es.json @@ -0,0 +1,641 @@ +{ + "redirection-host.forward-domain": { + "defaultMessage": "Dominio de Reenvío" + }, + "redirection-hosts.count": { + "defaultMessage": "{count} {count, plural, one {Host de Redirección} other {Hosts de Redirección}}" + }, + "notification.success": { + "defaultMessage": "Éxito" + }, + "setup.preamble": { + "defaultMessage": "Comienza creando tu cuenta de administrador." + }, + "column.event": { + "defaultMessage": "Evento" + }, + "auditlogs": { + "defaultMessage": "Registros de Auditoría" + }, + "enabled": { + "defaultMessage": "Habilitado" + }, + "column.source": { + "defaultMessage": "Origen" + }, + "column.details": { + "defaultMessage": "Detalles" + }, + "column.ssl": { + "defaultMessage": "SSL" + }, + "column.destination": { + "defaultMessage": "Destino" + }, + "settings.default-site.html": { + "defaultMessage": "HTML Personalizado" + }, + "proxy-host": { + "defaultMessage": "Host Proxy" + }, + "certificates.dns.propagation-seconds-note": { + "defaultMessage": "Dejar vacío para usar el valor predeterminado del plugin. Número de segundos a esperar para la propagación DNS." + }, + "settings.default-site.redirect": { + "defaultMessage": "Redirigir" + }, + "hosts": { + "defaultMessage": "Hosts" + }, + "users": { + "defaultMessage": "Usuarios" + }, + "permissions.visibility.all": { + "defaultMessage": "Todos los Elementos" + }, + "password.generate": { + "defaultMessage": "Generar contraseña aleatoria" + }, + "host.flags.preserve-path": { + "defaultMessage": "Preservar Ruta" + }, + "password.show": { + "defaultMessage": "Mostrar Contraseña" + }, + "permissions.visibility.title": { + "defaultMessage": "Visibilidad de Elementos" + }, + "http-only": { + "defaultMessage": "Solo HTTP" + }, + "empty-search": { + "defaultMessage": "No se encontraron resultados" + }, + "column.provider": { + "defaultMessage": "Proveedor" + }, + "user": { + "defaultMessage": "Usuario" + }, + "domain-names.placeholder": { + "defaultMessage": "Comienza a escribir para añadir dominio..." + }, + "certificates": { + "defaultMessage": "Certificados" + }, + "host.flags.websockets-upgrade": { + "defaultMessage": "Soporte de Websockets" + }, + "dead-host": { + "defaultMessage": "Host 404" + }, + "column.email": { + "defaultMessage": "Correo Electrónico" + }, + "settings.default-site": { + "defaultMessage": "Sitio Predeterminado" + }, + "action.add-location": { + "defaultMessage": "Añadir Ubicación" + }, + "settings.default-site.404": { + "defaultMessage": "Página 404" + }, + "user.change-password": { + "defaultMessage": "Cambiar Contraseña" + }, + "settings": { + "defaultMessage": "Configuración" + }, + "certificate.custom-certificate": { + "defaultMessage": "Certificado" + }, + "streams": { + "defaultMessage": "Streams" + }, + "streams.count": { + "defaultMessage": "{count} {count, plural, one {Stream} other {Streams}}" + }, + "error.passwords-must-match": { + "defaultMessage": "Las contraseñas deben coincidir" + }, + "ssl-certificate": { + "defaultMessage": "Certificado SSL" + }, + "certificate.none.subtitle.for-http": { + "defaultMessage": "Este host no usará HTTPS" + }, + "user.confirm-password": { + "defaultMessage": "Confirmar Contraseña" + }, + "notfound.title": { + "defaultMessage": "Ups… Has encontrado una página de error" + }, + "object.edit": { + "defaultMessage": "Editar {object}" + }, + "error.max-domains": { + "defaultMessage": "Demasiados dominios, el máximo es {max}" + }, + "column.scheme": { + "defaultMessage": "Esquema" + }, + "permissions.hidden": { + "defaultMessage": "Oculto" + }, + "certificate.in-use": { + "defaultMessage": "En Uso" + }, + "column.satisfy": { + "defaultMessage": "Satisfacer" + }, + "column.protocol": { + "defaultMessage": "Protocolo" + }, + "action.add": { + "defaultMessage": "Añadir" + }, + "column.custom-locations": { + "defaultMessage": "Ubicaciones Personalizadas" + }, + "certificate.renew": { + "defaultMessage": "Renovar Certificado" + }, + "offline": { + "defaultMessage": "Desconectado" + }, + "permissions.visibility.user": { + "defaultMessage": "Solo Elementos Creados" + }, + "certificates.dns.credentials": { + "defaultMessage": "Contenido del Archivo de Credenciales" + }, + "proxy-hosts": { + "defaultMessage": "Hosts Proxy" + }, + "user.edit-profile": { + "defaultMessage": "Editar Perfil" + }, + "user.switch-dark": { + "defaultMessage": "Cambiar a modo Oscuro" + }, + "certificates.custom.warning": { + "defaultMessage": "No se admiten archivos de claves protegidos con contraseña." + }, + "access-list.help.rules-order": { + "defaultMessage": "Ten en cuenta que las directivas de permitir y denegar se aplicarán en el orden en que estén definidas." + }, + "save": { + "defaultMessage": "Guardar" + }, + "certificates.http.reachability-404": { + "defaultMessage": "Se encontró un servidor en este dominio pero no parece ser Nginx Proxy Manager. Asegúrate de que tu dominio apunte a la IP donde se está ejecutando tu instancia de NPM." + }, + "certificates.http.reachability-wrong-data": { + "defaultMessage": "Se encontró un servidor en este dominio pero devolvió datos inesperados. ¿Es el servidor NPM? Asegúrate de que tu dominio apunte a la IP donde se está ejecutando tu instancia de NPM." + }, + "settings.default-site.congratulations": { + "defaultMessage": "Página de Felicitaciones" + }, + "streams.tcp": { + "defaultMessage": "TCP" + }, + "user.current-password": { + "defaultMessage": "Contraseña Actual" + }, + "access-list": { + "defaultMessage": "Lista de Acceso" + }, + "column.access": { + "defaultMessage": "Acceso" + }, + "action.delete": { + "defaultMessage": "Eliminar" + }, + "certificates.custom": { + "defaultMessage": "Certificado Personalizado" + }, + "column.authorizations": { + "defaultMessage": "Autorizaciones" + }, + "host.flags.block-exploits": { + "defaultMessage": "Bloquear Exploits Comunes" + }, + "object.event.created": { + "defaultMessage": "{object} Creado" + }, + "options": { + "defaultMessage": "Opciones" + }, + "redirection-host": { + "defaultMessage": "Host de Redirección" + }, + "certificate.none.title": { + "defaultMessage": "Ninguno" + }, + "created-on": { + "defaultMessage": "Creado: {date}" + }, + "user.login-as": { + "defaultMessage": "Iniciar sesión como {name}" + }, + "certificates.request.subtitle": { + "defaultMessage": "con Let's Encrypt" + }, + "proxy-hosts.count": { + "defaultMessage": "{count} {count, plural, one {Host Proxy} other {Hosts Proxy}}" + }, + "host.forward-port": { + "defaultMessage": "Puerto de Reenvío" + }, + "notfound.content": { + "defaultMessage": "Lo sentimos, pero la página que buscas no fue encontrada" + }, + "access-list.public.subtitle": { + "defaultMessage": "No se requiere autenticación básica" + }, + "proxy-host.forward-host": { + "defaultMessage": "Nombre de Host / IP de Reenvío" + }, + "settings.default-site.444": { + "defaultMessage": "Sin Respuesta (444)" + }, + "settings.default-site.description": { + "defaultMessage": "Qué mostrar cuando Nginx recibe un Host desconocido" + }, + "column.expires": { + "defaultMessage": "Expira" + }, + "object.delete": { + "defaultMessage": "Eliminar {object}" + }, + "notification.object-deleted": { + "defaultMessage": "{object} ha sido eliminado" + }, + "cancel": { + "defaultMessage": "Cancelar" + }, + "user.set-password": { + "defaultMessage": "Establecer Contraseña" + }, + "nginx-config.placeholder": { + "defaultMessage": "# ¡Introduce aquí tu configuración personalizada de Nginx bajo tu propio riesgo!" + }, + "access-list.auth-count": { + "defaultMessage": "{count} {count, plural, one {Usuario} other {Usuarios}}" + }, + "password.hide": { + "defaultMessage": "Ocultar Contraseña" + }, + "settings.default-site.html.placeholder": { + "defaultMessage": "" + }, + "notification.object-renewed": { + "defaultMessage": "{object} ha sido renovado" + }, + "object.event.deleted": { + "defaultMessage": "{object} Eliminado" + }, + "error.invalid-auth": { + "defaultMessage": "Correo electrónico o contraseña no válidos" + }, + "domains.force-ssl": { + "defaultMessage": "Forzar SSL" + }, + "domains.hsts-subdomains": { + "defaultMessage": "HSTS en Subdominios" + }, + "host.flags.protocols": { + "defaultMessage": "Protocolos" + }, + "action.download": { + "defaultMessage": "Descargar" + }, + "certificates.dns.warning": { + "defaultMessage": "Esta sección requiere algunos conocimientos sobre Certbot y sus plugins DNS. Consulta la documentación de los plugins respectivos." + }, + "certificates.request.title": { + "defaultMessage": "Solicitar un nuevo Certificado" + }, + "password": { + "defaultMessage": "Contraseña" + }, + "notification.object-saved": { + "defaultMessage": "{object} ha sido guardado" + }, + "setting": { + "defaultMessage": "Configuración" + }, + "object.empty": { + "defaultMessage": "No hay {objects}" + }, + "lets-encrypt-via-http": { + "defaultMessage": "Let's Encrypt vía HTTP" + }, + "domains.hsts-enabled": { + "defaultMessage": "HSTS Habilitado" + }, + "error.maximum": { + "defaultMessage": "El máximo es {max}" + }, + "user.switch-light": { + "defaultMessage": "Cambiar a modo Claro" + }, + "action.edit": { + "defaultMessage": "Editar" + }, + "access-list.subtitle": { + "defaultMessage": "{users} {users, plural, one {Usuario} other {Usuarios}}, {rules} {rules, plural, one {Regla} other {Reglas}} - Creado: {date}" + }, + "action.enable": { + "defaultMessage": "Habilitar" + }, + "error.access.duplicate-usernames": { + "defaultMessage": "Los nombres de usuario de autorización deben ser únicos" + }, + "notfound.action": { + "defaultMessage": "Llévame al inicio" + }, + "notification.object-disabled": { + "defaultMessage": "{object} ha sido deshabilitado" + }, + "user.logout": { + "defaultMessage": "Cerrar Sesión" + }, + "stream.incoming-port": { + "defaultMessage": "Puerto de Entrada" + }, + "certificates.http.reachability-ok": { + "defaultMessage": "Tu servidor es accesible y debería ser posible crear certificados." + }, + "access-list.help-rules-last": { + "defaultMessage": "Cuando exista al menos 1 regla, esta regla de denegar todo se añadirá al final" + }, + "action.view-details": { + "defaultMessage": "Ver Detalles" + }, + "notification.object-enabled": { + "defaultMessage": "{object} ha sido habilitado" + }, + "object.actions-title": { + "defaultMessage": "{object} #{id}" + }, + "username": { + "defaultMessage": "Nombre de Usuario" + }, + "user.nickname": { + "defaultMessage": "Apodo" + }, + "column.name": { + "defaultMessage": "Nombre" + }, + "column.roles": { + "defaultMessage": "Roles" + }, + "footer.github-fork": { + "defaultMessage": "Bifúrcame en Github" + }, + "object.event.updated": { + "defaultMessage": "{object} Actualizado" + }, + "certificates.dns.credentials-warning": { + "defaultMessage": "¡Estos datos se almacenarán como texto plano en la base de datos y en un archivo!" + }, + "access-list.satisfy-any": { + "defaultMessage": "Satisfacer Cualquiera" + }, + "dead-hosts.count": { + "defaultMessage": "{count} {count, plural, one {Host 404} other {Hosts 404}}" + }, + "certificates.dns.propagation-seconds": { + "defaultMessage": "Segundos de Propagación" + }, + "error.min-character-length": { + "defaultMessage": "La longitud mínima es {min} caracter{min, plural, one {} other {es}}" + }, + "domain-names.max": { + "defaultMessage": "{count} nombres de dominio como máximo" + }, + "object.delete.content": { + "defaultMessage": "¿Estás seguro de que quieres eliminar este {object}?" + }, + "column.rules": { + "defaultMessage": "Reglas" + }, + "error.required": { + "defaultMessage": "Este campo es obligatorio" + }, + "certificate": { + "defaultMessage": "Certificado" + }, + "public": { + "defaultMessage": "Público" + }, + "domains.use-dns": { + "defaultMessage": "Usar Desafío DNS" + }, + "error.max-character-length": { + "defaultMessage": "La longitud máxima es {max} caracter{max, plural, one {} other {es}}" + }, + "permissions.view": { + "defaultMessage": "Solo Ver" + }, + "expires.on": { + "defaultMessage": "Expira: {date}" + }, + "setup.title": { + "defaultMessage": "¡Bienvenido!" + }, + "certificates.http.reachability-failed-to-check": { + "defaultMessage": "No se pudo verificar la accesibilidad debido a un error de comunicación con site24x7.com." + }, + "certificates.http.warning": { + "defaultMessage": "Estos dominios ya deben estar configurados para apuntar a esta instalación." + }, + "certificate.custom-certificate-key": { + "defaultMessage": "Clave del Certificado" + }, + "empty-subtitle": { + "defaultMessage": "¿Por qué no creas uno?" + }, + "dead-hosts": { + "defaultMessage": "Hosts 404" + }, + "lets-encrypt": { + "defaultMessage": "Let's Encrypt" + }, + "email-address": { + "defaultMessage": "Dirección de correo electrónico" + }, + "domain-names": { + "defaultMessage": "Nombres de Dominio" + }, + "user.full-name": { + "defaultMessage": "Nombre Completo" + }, + "column.incoming-port": { + "defaultMessage": "Puerto de Entrada" + }, + "column.http-code": { + "defaultMessage": "Acceso" + }, + "certificate.not-in-use": { + "defaultMessage": "Sin Usar" + }, + "action.disable": { + "defaultMessage": "Deshabilitar" + }, + "redirection-hosts": { + "defaultMessage": "Hosts de Redirección" + }, + "streams.udp": { + "defaultMessage": "UDP" + }, + "role.admin": { + "defaultMessage": "Administrador" + }, + "nginx-config.label": { + "defaultMessage": "Configuración Personalizada de Nginx" + }, + "disabled": { + "defaultMessage": "Deshabilitado" + }, + "domain-names.wildcards-not-permitted": { + "defaultMessage": "No se permiten comodines para este tipo" + }, + "online": { + "defaultMessage": "Conectado" + }, + "access-list.public": { + "defaultMessage": "Accesible Públicamente" + }, + "action.renew": { + "defaultMessage": "Renovar" + }, + "object.add": { + "defaultMessage": "Añadir {object}" + }, + "certificates.dns.credentials-note": { + "defaultMessage": "Este plugin requiere un archivo de configuración que contenga un token de API u otras credenciales para tu proveedor" + }, + "error.invalid-email": { + "defaultMessage": "Dirección de correo electrónico no válida" + }, + "notification.error": { + "defaultMessage": "Error" + }, + "error.invalid-domain": { + "defaultMessage": "Dominio no válido: {domain}" + }, + "user.set-permissions": { + "defaultMessage": "Establecer Permisos para {name}" + }, + "certificate.none.subtitle": { + "defaultMessage": "Sin certificado asignado" + }, + "object.event.enabled": { + "defaultMessage": "{object} Habilitado" + }, + "login.title": { + "defaultMessage": "Inicia sesión en tu cuenta" + }, + "access-list.access-count": { + "defaultMessage": "{count} {count, plural, one {Regla} other {Reglas}}" + }, + "certificate.custom-intermediate": { + "defaultMessage": "Certificado Intermedio" + }, + "error.access.at-least-one": { + "defaultMessage": "Se requiere al menos una Autorización o una Regla de Acceso" + }, + "stream": { + "defaultMessage": "Stream" + }, + "action.close": { + "defaultMessage": "Cerrar" + }, + "certificates.http.test-results": { + "defaultMessage": "Resultados de la Prueba" + }, + "certificates.dns.provider": { + "defaultMessage": "Proveedor DNS" + }, + "object.event.renewed": { + "defaultMessage": "{object} Renovado" + }, + "lets-encrypt-via-dns": { + "defaultMessage": "Let's Encrypt vía DNS" + }, + "certificates.http.reachability-not-resolved": { + "defaultMessage": "No hay ningún servidor disponible en este dominio. Asegúrate de que tu dominio existe y apunta a la IP donde se está ejecutando tu instancia de NPM y, si es necesario, que el puerto 80 esté redirigido en tu router." + }, + "no-permission-error": { + "defaultMessage": "No tienes acceso para ver esto." + }, + "column.satisfy-all": { + "defaultMessage": "Todo" + }, + "host.forward-scheme": { + "defaultMessage": "Esquema" + }, + "domains.http2-support": { + "defaultMessage": "Soporte HTTP/2" + }, + "action.permissions": { + "defaultMessage": "Permisos" + }, + "loading": { + "defaultMessage": "Cargando…" + }, + "object.event.disabled": { + "defaultMessage": "{object} Deshabilitado" + }, + "dashboard": { + "defaultMessage": "Panel de Control" + }, + "sign-in": { + "defaultMessage": "Iniciar Sesión" + }, + "permissions.manage": { + "defaultMessage": "Gestionar" + }, + "user.new-password": { + "defaultMessage": "Nueva Contraseña" + }, + "stream.forward-host": { + "defaultMessage": "Host de Reenvío" + }, + "test": { + "defaultMessage": "Probar" + }, + "column.authorization": { + "defaultMessage": "Autorización" + }, + "column.satisfy-any": { + "defaultMessage": "Cualquiera" + }, + "host.flags.cache-assets": { + "defaultMessage": "Cachear Recursos" + }, + "access-lists": { + "defaultMessage": "Listas de Acceso" + }, + "role.standard-user": { + "defaultMessage": "Usuario Estándar" + }, + "certificates.http.reachability-other": { + "defaultMessage": "Se encontró un servidor en este dominio pero devolvió un código de estado inesperado {code}. ¿Es el servidor NPM? Asegúrate de que tu dominio apunte a la IP donde se está ejecutando tu instancia de NPM." + }, + "column.status": { + "defaultMessage": "Estado" + }, + "error.minimum": { + "defaultMessage": "El mínimo es {min}" + }, + "domain-names.wildcards-not-supported": { + "defaultMessage": "No se admiten comodines para esta CA" + }, + "access-list.pass-auth": { + "defaultMessage": "Pasar Autenticación al Upstream" + } +} diff --git a/frontend/src/locale/src/lang-list.json b/frontend/src/locale/src/lang-list.json index 3f3b2697..f58eb794 100644 --- a/frontend/src/locale/src/lang-list.json +++ b/frontend/src/locale/src/lang-list.json @@ -1,5 +1,8 @@ { "locale-en-US": { "defaultMessage": "English" - } + }, + "locale-es-ES": { + "defaultMessage": "Español" + } } From b3b1e94b8c420f98765a31215d418b9c7436e823 Mon Sep 17 00:00:00 2001 From: Alexey Krainev Date: Sat, 8 Nov 2025 15:02:05 +0500 Subject: [PATCH 13/42] Add Russian Support --- frontend/src/locale/lang/lang-list.json | 3 +- frontend/src/locale/lang/ru.json | 215 ++++++++++++++++++++++++ 2 files changed, 217 insertions(+), 1 deletion(-) create mode 100644 frontend/src/locale/lang/ru.json diff --git a/frontend/src/locale/lang/lang-list.json b/frontend/src/locale/lang/lang-list.json index 4d9de4e5..fb286200 100644 --- a/frontend/src/locale/lang/lang-list.json +++ b/frontend/src/locale/lang/lang-list.json @@ -1,3 +1,4 @@ { - "locale-en-US": "English" + "locale-en-US": "English", + "locale-ru-RU": "Русский" } \ No newline at end of file diff --git a/frontend/src/locale/lang/ru.json b/frontend/src/locale/lang/ru.json new file mode 100644 index 00000000..db5f7fc5 --- /dev/null +++ b/frontend/src/locale/lang/ru.json @@ -0,0 +1,215 @@ +{ + "access-list": "Список доступа", + "access-list.access-count": "{count} {count, plural, one {правило} few {правила} many {правил} other {правила}}", + "access-list.auth-count": "{count} {count, plural, one {пользователь} few {пользователя} many {пользователей} other {пользователя}}", + "access-list.help-rules-last": "When at least 1 rule exists, this deny all rule will be added last", + "access-list.help.rules-order": "Note that the allow and deny directives will be applied in the order they are defined.", + "access-list.pass-auth": "Pass Auth to Upstream", + "access-list.public": "Publicly Accessible", + "access-list.public.subtitle": "No basic auth required", + "access-list.satisfy-any": "Satisfy Any", + "access-list.subtitle": "{users} {users, plural, one {User} other {Users}}, {rules} {rules, plural, one {Rule} other {Rules}} - Created: {date}", + "access-lists": "Списки доступа", + "action.add": "Добавить", + "action.add-location": "Add Location", + "action.close": "Закрыть", + "action.delete": "Удалить", + "action.disable": "Выключить", + "action.download": "Скачать", + "action.edit": "Изменить", + "action.enable": "Включить", + "action.permissions": "Permissions", + "action.renew": "Продлить", + "action.view-details": "Просмотреть детали", + "auditlogs": "Audit Logs", + "cancel": "Отменить", + "certificate": "Сертификат", + "certificate.custom-certificate": "Сертификат", + "certificate.custom-certificate-key": "Ключ сертификата", + "certificate.custom-intermediate": "Промежуточный сертификат", + "certificate.in-use": "Используется", + "certificate.none.subtitle": "No certificate assigned", + "certificate.none.subtitle.for-http": "This host will not use HTTPS", + "certificate.none.title": "Нет", + "certificate.not-in-use": "Не используется", + "certificate.renew": "Продлить сертификат", + "certificates": "Сертификаты", + "certificates.custom": "Пользовательский сертификат", + "certificates.custom.warning": "Файлы ключей, защищённые паролем, не поддерживаются.", + "certificates.dns.credentials": "Credentials File Content", + "certificates.dns.credentials-note": "This plugin requires a configuration file containing an API token or other credentials for your provider", + "certificates.dns.credentials-warning": "This data will be stored as plaintext in the database and in a file!", + "certificates.dns.propagation-seconds": "Propagation Seconds", + "certificates.dns.propagation-seconds-note": "Leave empty to use the plugins default value. Number of seconds to wait for DNS propagation.", + "certificates.dns.provider": "DNS-провайдер", + "certificates.dns.warning": "This section requires some knowledge about Certbot and its DNS plugins. Please consult the respective plugins documentation.", + "certificates.http.reachability-404": "There is a server found at this domain but it does not seem to be Nginx Proxy Manager. Please make sure your domain points to the IP where your NPM instance is running.", + "certificates.http.reachability-failed-to-check": "Failed to check the reachability due to a communication error with site24x7.com.", + "certificates.http.reachability-not-resolved": "There is no server available at this domain. Please make sure your domain exists and points to the IP where your NPM instance is running and if necessary port 80 is forwarded in your router.", + "certificates.http.reachability-ok": "Your server is reachable and creating certificates should be possible.", + "certificates.http.reachability-other": "There is a server found at this domain but it returned an unexpected status code {code}. Is it the NPM server? Please make sure your domain points to the IP where your NPM instance is running.", + "certificates.http.reachability-wrong-data": "There is a server found at this domain but it returned an unexpected data. Is it the NPM server? Please make sure your domain points to the IP where your NPM instance is running.", + "certificates.http.test-results": "Test Results", + "certificates.http.warning": "These domains must be already configured to point to this installation.", + "certificates.request.subtitle": "с Let's Encrypt", + "certificates.request.title": "Request a new Certificate", + "column.access": "Доступ", + "column.authorization": "Authorization", + "column.authorizations": "Authorizations", + "column.custom-locations": "Custom Locations", + "column.destination": "Destination", + "column.details": "Детали", + "column.email": "Email", + "column.event": "Событие", + "column.expires": "Истекает", + "column.http-code": "Access", + "column.incoming-port": "Incoming Port", + "column.name": "Имя", + "column.protocol": "Протокол", + "column.provider": "Провайдер", + "column.roles": "Роли", + "column.rules": "Правила", + "column.satisfy": "Satisfy", + "column.satisfy-all": "All", + "column.satisfy-any": "Any", + "column.scheme": "Схема", + "column.source": "Источник", + "column.ssl": "SSL", + "column.status": "Статус", + "created-on": "Создан: {date}", + "dashboard": "Обзор", + "dead-host": "404-хост", + "dead-hosts": "404-хосты", + "dead-hosts.count": "{count} {count, plural, one {404 Host} other {404 Hosts}}", + "disabled": "Выключен", + "domain-names": "Домены", + "domain-names.max": "Максимум доменов: {count}", + "domain-names.placeholder": "Начните ввод, чтобы добавить домен...", + "domain-names.wildcards-not-permitted": "Wildcard'ы не разрешены для этого типа", + "domain-names.wildcards-not-supported": "Wildcard'ы не поддерживаются этим CA", + "domains.force-ssl": "Force SSL", + "domains.hsts-enabled": "HSTS Enabled", + "domains.hsts-subdomains": "HSTS Sub-domains", + "domains.http2-support": "HTTP/2 Support", + "domains.use-dns": "Use DNS Challenge", + "email-address": "Email-адрес", + "empty-search": "No results found", + "empty-subtitle": "Why don't you create one?", + "enabled": "Включен", + "error.access.at-least-one": "Either one Authorization or one Access Rule is required", + "error.access.duplicate-usernames": "Authorization Usernames must be unique", + "error.invalid-auth": "Invalid email or password", + "error.invalid-domain": "Invalid domain: {domain}", + "error.invalid-email": "Invalid email address", + "error.max-character-length": "Maximum length is {max} character{max, plural, one {} other {s}}", + "error.max-domains": "Too many domains, max is {max}", + "error.maximum": "Maximum is {max}", + "error.min-character-length": "Minimum length is {min} character{min, plural, one {} other {s}}", + "error.minimum": "Minimum is {min}", + "error.passwords-must-match": "Passwords must match", + "error.required": "This is required", + "expires.on": "Истекает: {date}", + "footer.github-fork": "Fork me on Github", + "host.flags.block-exploits": "Block Common Exploits", + "host.flags.cache-assets": "Cache Assets", + "host.flags.preserve-path": "Preserve Path", + "host.flags.protocols": "Protocols", + "host.flags.websockets-upgrade": "Websockets Support", + "host.forward-port": "Forward Port", + "host.forward-scheme": "Scheme", + "hosts": "Хосты", + "http-only": "HTTP Only", + "lets-encrypt": "Let's Encrypt", + "lets-encrypt-via-dns": "Let's Encrypt через DNS", + "lets-encrypt-via-http": "Let's Encrypt через HTTP", + "loading": "Загрузка…", + "login.title": "Login to your account", + "nginx-config.label": "Custom Nginx Configuration", + "nginx-config.placeholder": "# Enter your custom Nginx configuration here at your own risk!", + "no-permission-error": "You do not have access to view this.", + "notfound.action": "Take me home", + "notfound.content": "We are sorry but the page you are looking for was not found", + "notfound.title": "Oops… You just found an error page", + "notification.error": "Ошибка", + "notification.object-deleted": "{object} удален", + "notification.object-disabled": "{object} выключен", + "notification.object-enabled": "{object} включен", + "notification.object-renewed": "{object} продлен", + "notification.object-saved": "{object} сохранен", + "notification.success": "Успешно", + "object.actions-title": "{object} #{id}", + "object.add": "Добавить {object}", + "object.delete": "Удалить {object}", + "object.delete.content": "Вы уверены, что хотите удалить {object}?", + "object.edit": "Изменить {object}", + "object.empty": "There are no {objects}", + "object.event.created": "Создан {object}", + "object.event.deleted": "Удален {object}", + "object.event.disabled": "Выключен {object}", + "object.event.enabled": "Включен {object}", + "object.event.renewed": "Продлен {object}", + "object.event.updated": "Обновлен {object}", + "offline": "Офлайн", + "online": "Онлайн", + "options": "Параметры", + "password": "Пароль", + "password.generate": "Сгенерировать случайный пароль", + "password.hide": "Скрыть пароль", + "password.show": "Показать пароль", + "permissions.hidden": "Hidden", + "permissions.manage": "Manage", + "permissions.view": "View Only", + "permissions.visibility.all": "All Items", + "permissions.visibility.title": "Item Visibility", + "permissions.visibility.user": "Created Items Only", + "proxy-host": "Прокси-хост", + "proxy-host.forward-host": "Forward Hostname / IP", + "proxy-hosts": "Прокси-хосты", + "proxy-hosts.count": "{count} {count, plural, one {прокси-хост} few {прокси-хоста} many {прокси-хостов} other {прокси-хоста}}", + "public": "Public", + "redirection-host": "Редирект-хост", + "redirection-host.forward-domain": "Forward Domain", + "redirection-hosts": "Редирект-хосты", + "redirection-hosts.count": "{count} {count, plural, one {редирект-хост} few {редирект-хоста} many {редирект-хостов} other {редирект-хоста}}", + "role.admin": "Администратор", + "role.standard-user": "Обычный пользователь", + "save": "Сохранить", + "setting": "Настройка", + "settings": "Настройки", + "settings.default-site": "Страница по умолчанию", + "settings.default-site.404": "404-страница", + "settings.default-site.444": "Нет ответа (444)", + "settings.default-site.congratulations": "Страница поздравления", + "settings.default-site.description": "Что показывать, когда Nginx получает неизвестный хост", + "settings.default-site.html": "Пользовательский HTML", + "settings.default-site.html.placeholder": "", + "settings.default-site.redirect": "Перенаправление", + "setup.preamble": "Get started by creating your admin account.", + "setup.title": "Welcome!", + "sign-in": "Sign in", + "ssl-certificate": "SSL-сертификат", + "stream": "Поток", + "stream.forward-host": "Forward Host", + "stream.incoming-port": "Incoming Port", + "streams": "Потоки", + "streams.count": "{count} {count, plural, one {поток} few {потока} many {потоков} other {потока}}", + "streams.tcp": "TCP", + "streams.udp": "UDP", + "test": "Test", + "user": "Пользователь", + "user.change-password": "Изменить пароль", + "user.confirm-password": "Подтвердить пароль", + "user.current-password": "Текущий пароль", + "user.edit-profile": "Edit Profile", + "user.full-name": "Полное имя", + "user.login-as": "Sign in as {name}", + "user.logout": "Logout", + "user.new-password": "Новый пароль", + "user.nickname": "Псевдоним", + "user.set-password": "Задать пароль", + "user.set-permissions": "Set Permissions for {name}", + "user.switch-dark": "Switch to Dark mode", + "user.switch-light": "Switch to Light mode", + "username": "Username", + "users": "Пользователи" +} \ No newline at end of file From 58182fcbdff37231fa82334d0d5211d0828e41b3 Mon Sep 17 00:00:00 2001 From: Alexey Krainev Date: Sat, 8 Nov 2025 15:08:08 +0500 Subject: [PATCH 14/42] Add Russian case --- frontend/src/locale/IntlProvider.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/frontend/src/locale/IntlProvider.tsx b/frontend/src/locale/IntlProvider.tsx index c2779908..34f268d8 100644 --- a/frontend/src/locale/IntlProvider.tsx +++ b/frontend/src/locale/IntlProvider.tsx @@ -1,15 +1,18 @@ import { createIntl, createIntlCache } from "react-intl"; import langEn from "./lang/en.json"; +import langRu from "./lang/ru.json"; import langList from "./lang/lang-list.json"; // first item of each array should be the language code, // not the country code // Remember when adding to this list, also update check-locales.js script -const localeOptions = [["en", "en-US"]]; +const localeOptions = [["en", "en-US"], ["ru", "ru-RU"]]; const loadMessages = (locale?: string): typeof langList & typeof langEn => { const thisLocale = locale || "en"; switch (thisLocale.slice(0, 2)) { + case "ru": + return Object.assign({}, langList, langRu); default: return Object.assign({}, langList, langEn); } @@ -17,6 +20,8 @@ const loadMessages = (locale?: string): typeof langList & typeof langEn => { const getFlagCodeForLocale = (locale?: string) => { switch (locale) { + case "ru": + return "RU"; default: return "EN"; } From 8fdb6091f3e67233f10a941160f88ef30abe220c Mon Sep 17 00:00:00 2001 From: Alexey Krainev Date: Sat, 8 Nov 2025 15:51:39 +0500 Subject: [PATCH 15/42] More strings --- frontend/src/locale/lang/ru.json | 138 +++++++++++++++---------------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/frontend/src/locale/lang/ru.json b/frontend/src/locale/lang/ru.json index db5f7fc5..06395025 100644 --- a/frontend/src/locale/lang/ru.json +++ b/frontend/src/locale/lang/ru.json @@ -5,20 +5,20 @@ "access-list.help-rules-last": "When at least 1 rule exists, this deny all rule will be added last", "access-list.help.rules-order": "Note that the allow and deny directives will be applied in the order they are defined.", "access-list.pass-auth": "Pass Auth to Upstream", - "access-list.public": "Publicly Accessible", - "access-list.public.subtitle": "No basic auth required", - "access-list.satisfy-any": "Satisfy Any", + "access-list.public": "Публично доступен", + "access-list.public.subtitle": "Без аутентификации", + "access-list.satisfy-any": "Любое соответствие", "access-list.subtitle": "{users} {users, plural, one {User} other {Users}}, {rules} {rules, plural, one {Rule} other {Rules}} - Created: {date}", "access-lists": "Списки доступа", "action.add": "Добавить", - "action.add-location": "Add Location", + "action.add-location": "Добавить маршрут", "action.close": "Закрыть", "action.delete": "Удалить", "action.disable": "Выключить", "action.download": "Скачать", "action.edit": "Изменить", "action.enable": "Включить", - "action.permissions": "Permissions", + "action.permissions": "Разрешения", "action.renew": "Продлить", "action.view-details": "Просмотреть детали", "auditlogs": "Audit Logs", @@ -28,13 +28,13 @@ "certificate.custom-certificate-key": "Ключ сертификата", "certificate.custom-intermediate": "Промежуточный сертификат", "certificate.in-use": "Используется", - "certificate.none.subtitle": "No certificate assigned", - "certificate.none.subtitle.for-http": "This host will not use HTTPS", + "certificate.none.subtitle": "Сертификат не назначен", + "certificate.none.subtitle.for-http": "Этот хост не будет использовать HTTPS", "certificate.none.title": "Нет", "certificate.not-in-use": "Не используется", "certificate.renew": "Продлить сертификат", "certificates": "Сертификаты", - "certificates.custom": "Пользовательский сертификат", + "certificates.custom": "Свой сертификат", "certificates.custom.warning": "Файлы ключей, защищённые паролем, не поддерживаются.", "certificates.dns.credentials": "Credentials File Content", "certificates.dns.credentials-note": "This plugin requires a configuration file containing an API token or other credentials for your provider", @@ -51,27 +51,27 @@ "certificates.http.reachability-wrong-data": "There is a server found at this domain but it returned an unexpected data. Is it the NPM server? Please make sure your domain points to the IP where your NPM instance is running.", "certificates.http.test-results": "Test Results", "certificates.http.warning": "These domains must be already configured to point to this installation.", - "certificates.request.subtitle": "с Let's Encrypt", - "certificates.request.title": "Request a new Certificate", + "certificates.request.subtitle": "через Let's Encrypt", + "certificates.request.title": "Получить новый сертификат", "column.access": "Доступ", - "column.authorization": "Authorization", - "column.authorizations": "Authorizations", - "column.custom-locations": "Custom Locations", - "column.destination": "Destination", + "column.authorization": "Авторизация", + "column.authorizations": "Авторизации", + "column.custom-locations": "Свои маршруты", + "column.destination": "Назначение", "column.details": "Детали", "column.email": "Email", "column.event": "Событие", "column.expires": "Истекает", "column.http-code": "Access", - "column.incoming-port": "Incoming Port", + "column.incoming-port": "Входящий порт", "column.name": "Имя", "column.protocol": "Протокол", "column.provider": "Провайдер", "column.roles": "Роли", "column.rules": "Правила", - "column.satisfy": "Satisfy", - "column.satisfy-all": "All", - "column.satisfy-any": "Any", + "column.satisfy": "Соответствие", + "column.satisfy-all": "Все", + "column.satisfy-any": "Любое", "column.scheme": "Схема", "column.source": "Источник", "column.ssl": "SSL", @@ -87,49 +87,49 @@ "domain-names.placeholder": "Начните ввод, чтобы добавить домен...", "domain-names.wildcards-not-permitted": "Wildcard'ы не разрешены для этого типа", "domain-names.wildcards-not-supported": "Wildcard'ы не поддерживаются этим CA", - "domains.force-ssl": "Force SSL", - "domains.hsts-enabled": "HSTS Enabled", - "domains.hsts-subdomains": "HSTS Sub-domains", - "domains.http2-support": "HTTP/2 Support", - "domains.use-dns": "Use DNS Challenge", + "domains.force-ssl": "Всегда SSL", + "domains.hsts-enabled": "Поддержка HSTS", + "domains.hsts-subdomains": "Поддомены HSTS", + "domains.http2-support": "Поддержка HTTP/2", + "domains.use-dns": "Использовать DNS Challenge", "email-address": "Email-адрес", - "empty-search": "No results found", - "empty-subtitle": "Why don't you create one?", + "empty-search": "Ничего не найдено", + "empty-subtitle": "Почему бы не создать его?", "enabled": "Включен", "error.access.at-least-one": "Either one Authorization or one Access Rule is required", "error.access.duplicate-usernames": "Authorization Usernames must be unique", - "error.invalid-auth": "Invalid email or password", - "error.invalid-domain": "Invalid domain: {domain}", - "error.invalid-email": "Invalid email address", + "error.invalid-auth": "Неверный email или пароль", + "error.invalid-domain": "Неверный домен: {domain}", + "error.invalid-email": "Неверный email-адрес", "error.max-character-length": "Maximum length is {max} character{max, plural, one {} other {s}}", - "error.max-domains": "Too many domains, max is {max}", - "error.maximum": "Maximum is {max}", + "error.max-domains": "Слишком много доменов, максимум {max}", + "error.maximum": "Максимум {max}", "error.min-character-length": "Minimum length is {min} character{min, plural, one {} other {s}}", - "error.minimum": "Minimum is {min}", - "error.passwords-must-match": "Passwords must match", - "error.required": "This is required", + "error.minimum": "Минимум {min}", + "error.passwords-must-match": "Пароли должны совпадать", + "error.required": "Обязательное поле", "expires.on": "Истекает: {date}", "footer.github-fork": "Fork me on Github", - "host.flags.block-exploits": "Block Common Exploits", - "host.flags.cache-assets": "Cache Assets", - "host.flags.preserve-path": "Preserve Path", - "host.flags.protocols": "Protocols", - "host.flags.websockets-upgrade": "Websockets Support", - "host.forward-port": "Forward Port", - "host.forward-scheme": "Scheme", + "host.flags.block-exploits": "Блокировать известные эксплойты", + "host.flags.cache-assets": "Кэшировать ресурсы", + "host.flags.preserve-path": "Сохранять путь", + "host.flags.protocols": "Протоколы", + "host.flags.websockets-upgrade": "Поддержка WebSocket", + "host.forward-port": "Порт перенаправления", + "host.forward-scheme": "Схема", "hosts": "Хосты", - "http-only": "HTTP Only", + "http-only": "Только HTTP", "lets-encrypt": "Let's Encrypt", "lets-encrypt-via-dns": "Let's Encrypt через DNS", "lets-encrypt-via-http": "Let's Encrypt через HTTP", "loading": "Загрузка…", - "login.title": "Login to your account", - "nginx-config.label": "Custom Nginx Configuration", - "nginx-config.placeholder": "# Enter your custom Nginx configuration here at your own risk!", + "login.title": "Авторизация", + "nginx-config.label": "Своя Nginx-конфигурация", + "nginx-config.placeholder": "# Введите здесь свою Nginx-конфигурацию, будьте осторожны!", "no-permission-error": "You do not have access to view this.", - "notfound.action": "Take me home", - "notfound.content": "We are sorry but the page you are looking for was not found", - "notfound.title": "Oops… You just found an error page", + "notfound.action": "Вернуться на главную", + "notfound.content": "Извините, но страница, которую вы ищете, не найдена", + "notfound.title": "Упс… Вы попали на страницу ошибки", "notification.error": "Ошибка", "notification.object-deleted": "{object} удален", "notification.object-disabled": "{object} выключен", @@ -142,7 +142,7 @@ "object.delete": "Удалить {object}", "object.delete.content": "Вы уверены, что хотите удалить {object}?", "object.edit": "Изменить {object}", - "object.empty": "There are no {objects}", + "object.empty": "Нет {objects}", "object.event.created": "Создан {object}", "object.event.deleted": "Удален {object}", "object.event.disabled": "Выключен {object}", @@ -156,19 +156,19 @@ "password.generate": "Сгенерировать случайный пароль", "password.hide": "Скрыть пароль", "password.show": "Показать пароль", - "permissions.hidden": "Hidden", - "permissions.manage": "Manage", - "permissions.view": "View Only", - "permissions.visibility.all": "All Items", - "permissions.visibility.title": "Item Visibility", - "permissions.visibility.user": "Created Items Only", + "permissions.hidden": "Скрыто", + "permissions.manage": "Управление", + "permissions.view": "Только просмотр", + "permissions.visibility.all": "Все элементы", + "permissions.visibility.title": "Видимость элементов", + "permissions.visibility.user": "Созданные элементы", "proxy-host": "Прокси-хост", - "proxy-host.forward-host": "Forward Hostname / IP", + "proxy-host.forward-host": "Хост/IP перенаправления", "proxy-hosts": "Прокси-хосты", "proxy-hosts.count": "{count} {count, plural, one {прокси-хост} few {прокси-хоста} many {прокси-хостов} other {прокси-хоста}}", - "public": "Public", + "public": "Публичный", "redirection-host": "Редирект-хост", - "redirection-host.forward-domain": "Forward Domain", + "redirection-host.forward-domain": "Домен перенаправления", "redirection-hosts": "Редирект-хосты", "redirection-hosts.count": "{count} {count, plural, one {редирект-хост} few {редирект-хоста} many {редирект-хостов} other {редирект-хоста}}", "role.admin": "Администратор", @@ -181,35 +181,35 @@ "settings.default-site.444": "Нет ответа (444)", "settings.default-site.congratulations": "Страница поздравления", "settings.default-site.description": "Что показывать, когда Nginx получает неизвестный хост", - "settings.default-site.html": "Пользовательский HTML", - "settings.default-site.html.placeholder": "", + "settings.default-site.html": "Свой HTML", + "settings.default-site.html.placeholder": "", "settings.default-site.redirect": "Перенаправление", - "setup.preamble": "Get started by creating your admin account.", - "setup.title": "Welcome!", - "sign-in": "Sign in", + "setup.preamble": "Начните с создания учётной записи администратора.", + "setup.title": "Добро пожаловать!", + "sign-in": "Войти", "ssl-certificate": "SSL-сертификат", "stream": "Поток", - "stream.forward-host": "Forward Host", - "stream.incoming-port": "Incoming Port", + "stream.forward-host": "Хост перенаправления", + "stream.incoming-port": "Входящий порт", "streams": "Потоки", "streams.count": "{count} {count, plural, one {поток} few {потока} many {потоков} other {потока}}", "streams.tcp": "TCP", "streams.udp": "UDP", - "test": "Test", + "test": "Проверить", "user": "Пользователь", "user.change-password": "Изменить пароль", "user.confirm-password": "Подтвердить пароль", "user.current-password": "Текущий пароль", - "user.edit-profile": "Edit Profile", + "user.edit-profile": "Изменить профиль", "user.full-name": "Полное имя", - "user.login-as": "Sign in as {name}", - "user.logout": "Logout", + "user.login-as": "Войти как {name}", + "user.logout": "Выйти", "user.new-password": "Новый пароль", "user.nickname": "Псевдоним", "user.set-password": "Задать пароль", "user.set-permissions": "Set Permissions for {name}", "user.switch-dark": "Switch to Dark mode", "user.switch-light": "Switch to Light mode", - "username": "Username", + "username": "Логин", "users": "Пользователи" } \ No newline at end of file From 5aa56c63d42bed41ca8a72f2a3a3fb1f0a990449 Mon Sep 17 00:00:00 2001 From: Alexey Krainev Date: Sat, 8 Nov 2025 17:15:24 +0500 Subject: [PATCH 16/42] Fixes & New Strings --- frontend/src/locale/lang/ru.json | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/frontend/src/locale/lang/ru.json b/frontend/src/locale/lang/ru.json index 06395025..a6360a67 100644 --- a/frontend/src/locale/lang/ru.json +++ b/frontend/src/locale/lang/ru.json @@ -7,7 +7,7 @@ "access-list.pass-auth": "Pass Auth to Upstream", "access-list.public": "Публично доступен", "access-list.public.subtitle": "Без аутентификации", - "access-list.satisfy-any": "Любое соответствие", + "access-list.satisfy-any": "Любое совпадение", "access-list.subtitle": "{users} {users, plural, one {User} other {Users}}, {rules} {rules, plural, one {Rule} other {Rules}} - Created: {date}", "access-lists": "Списки доступа", "action.add": "Добавить", @@ -21,7 +21,7 @@ "action.permissions": "Разрешения", "action.renew": "Продлить", "action.view-details": "Просмотреть детали", - "auditlogs": "Audit Logs", + "auditlogs": "Журнал аудита", "cancel": "Отменить", "certificate": "Сертификат", "certificate.custom-certificate": "Сертификат", @@ -49,7 +49,7 @@ "certificates.http.reachability-ok": "Your server is reachable and creating certificates should be possible.", "certificates.http.reachability-other": "There is a server found at this domain but it returned an unexpected status code {code}. Is it the NPM server? Please make sure your domain points to the IP where your NPM instance is running.", "certificates.http.reachability-wrong-data": "There is a server found at this domain but it returned an unexpected data. Is it the NPM server? Please make sure your domain points to the IP where your NPM instance is running.", - "certificates.http.test-results": "Test Results", + "certificates.http.test-results": "Результаты проверки", "certificates.http.warning": "These domains must be already configured to point to this installation.", "certificates.request.subtitle": "через Let's Encrypt", "certificates.request.title": "Получить новый сертификат", @@ -69,7 +69,7 @@ "column.provider": "Провайдер", "column.roles": "Роли", "column.rules": "Правила", - "column.satisfy": "Соответствие", + "column.satisfy": "Совпадение", "column.satisfy-all": "Все", "column.satisfy-any": "Любое", "column.scheme": "Схема", @@ -80,7 +80,7 @@ "dashboard": "Обзор", "dead-host": "404-хост", "dead-hosts": "404-хосты", - "dead-hosts.count": "{count} {count, plural, one {404 Host} other {404 Hosts}}", + "dead-hosts.count": "{count} {count, plural, one {404-хост} few {404-хоста} many {404-хостов} other {404-хоста}}", "disabled": "Выключен", "domain-names": "Домены", "domain-names.max": "Максимум доменов: {count}", @@ -142,13 +142,13 @@ "object.delete": "Удалить {object}", "object.delete.content": "Вы уверены, что хотите удалить {object}?", "object.edit": "Изменить {object}", - "object.empty": "Нет {objects}", - "object.event.created": "Создан {object}", - "object.event.deleted": "Удален {object}", - "object.event.disabled": "Выключен {object}", - "object.event.enabled": "Включен {object}", - "object.event.renewed": "Продлен {object}", - "object.event.updated": "Обновлен {object}", + "object.empty": "{objects} отстутствуют", + "object.event.created": "{object} создан", + "object.event.deleted": "{object} удален", + "object.event.disabled": "{object} выключен", + "object.event.enabled": "{object} включен", + "object.event.renewed": "{object} продлен", + "object.event.updated": "{object} обновлен", "offline": "Офлайн", "online": "Онлайн", "options": "Параметры", @@ -163,7 +163,7 @@ "permissions.visibility.title": "Видимость элементов", "permissions.visibility.user": "Созданные элементы", "proxy-host": "Прокси-хост", - "proxy-host.forward-host": "Хост/IP перенаправления", + "proxy-host.forward-host": "Хост / IP перенаправления", "proxy-hosts": "Прокси-хосты", "proxy-hosts.count": "{count} {count, plural, one {прокси-хост} few {прокси-хоста} many {прокси-хостов} other {прокси-хоста}}", "public": "Публичный", @@ -198,7 +198,7 @@ "test": "Проверить", "user": "Пользователь", "user.change-password": "Изменить пароль", - "user.confirm-password": "Подтвердить пароль", + "user.confirm-password": "Повторите пароль", "user.current-password": "Текущий пароль", "user.edit-profile": "Изменить профиль", "user.full-name": "Полное имя", @@ -208,8 +208,8 @@ "user.nickname": "Псевдоним", "user.set-password": "Задать пароль", "user.set-permissions": "Set Permissions for {name}", - "user.switch-dark": "Switch to Dark mode", - "user.switch-light": "Switch to Light mode", + "user.switch-dark": "Включить тёмную тему", + "user.switch-light": "Включить светлую тему", "username": "Логин", "users": "Пользователи" } \ No newline at end of file From df1b414c2e3e9920befab8f11c2757042717ed6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Portas=20L=C3=B3pez?= <81629707+TeenBiscuits@users.noreply.github.com> Date: Mon, 10 Nov 2025 21:58:01 +0100 Subject: [PATCH 17/42] Delete Spanish Test --- frontend/check-locales.cjs | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/check-locales.cjs b/frontend/check-locales.cjs index 08b2f773..8eac8c91 100755 --- a/frontend/check-locales.cjs +++ b/frontend/check-locales.cjs @@ -8,7 +8,6 @@ const allLocales = [ ["en", "en-US"], - ["es", "es-ES"], ]; const ignoreUnused = [ From 7cde6ee7cad31744262440362e55dfa6bba821db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Portas=20L=C3=B3pez?= <81629707+TeenBiscuits@users.noreply.github.com> Date: Mon, 10 Nov 2025 21:58:23 +0100 Subject: [PATCH 18/42] Add Spanish Test --- frontend/check-locales.cjs | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/check-locales.cjs b/frontend/check-locales.cjs index 8eac8c91..08b2f773 100755 --- a/frontend/check-locales.cjs +++ b/frontend/check-locales.cjs @@ -8,6 +8,7 @@ const allLocales = [ ["en", "en-US"], + ["es", "es-ES"], ]; const ignoreUnused = [ From 12b000abb934f5db71a00cb3434d3c363c4f5f76 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 11 Nov 2025 07:12:57 +0100 Subject: [PATCH 19/42] Add HTTP Code message to German locale new: redirection-host.forward-http-code added --- frontend/src/locale/src/de.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frontend/src/locale/src/de.json b/frontend/src/locale/src/de.json index fd235897..4fc630c3 100644 --- a/frontend/src/locale/src/de.json +++ b/frontend/src/locale/src/de.json @@ -506,6 +506,9 @@ "redirection-host.forward-domain": { "defaultMessage": "Forward Domain" }, + "redirection-host.forward-http-code": { + "defaultMessage": "HTTP Code" + }, "redirection-hosts": { "defaultMessage": "Redirection Hosts" }, From 3a6b221b0c7a077f271caadde2aaa89c181a67be Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 11 Nov 2025 07:13:13 +0100 Subject: [PATCH 20/42] Add HTTP Code translation to German locale new: redirection-host.forward-http-code added --- frontend/src/locale/lang/de.json | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/locale/lang/de.json b/frontend/src/locale/lang/de.json index e90eb06c..19520ee7 100644 --- a/frontend/src/locale/lang/de.json +++ b/frontend/src/locale/lang/de.json @@ -168,6 +168,7 @@ "public": "Öffentlich", "redirection-host": "Redirection Host", "redirection-host.forward-domain": "Forward Domain", + "redirection-host.forward-http-code" : "HTTP Code", "redirection-hosts": "Redirection Hosts", "redirection-hosts.count": "{count} {count, plural, one {Redirection Host} other {Redirection Hosts}}", "role.admin": "Administrator", From a7231777aa89e24c9a712db6930b1cf45d114763 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 11 Nov 2025 08:56:20 +0100 Subject: [PATCH 21/42] FIX: Update HTTP code message in German locale fix: Updated column http code --- frontend/src/locale/src/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/locale/src/de.json b/frontend/src/locale/src/de.json index 4fc630c3..0fe9f5f7 100644 --- a/frontend/src/locale/src/de.json +++ b/frontend/src/locale/src/de.json @@ -186,7 +186,7 @@ "defaultMessage": "Verfällt am" }, "column.http-code": { - "defaultMessage": "Zugriff" + "defaultMessage": "HTTP Code" }, "column.incoming-port": { "defaultMessage": "Eingehender Port" From ba79bbc750e56c17cbf8f5c66f6410e860d18942 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 11 Nov 2025 08:56:32 +0100 Subject: [PATCH 22/42] Update German translation for HTTP code fix: Updated column http code --- frontend/src/locale/lang/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/locale/lang/de.json b/frontend/src/locale/lang/de.json index 19520ee7..64ba15fa 100644 --- a/frontend/src/locale/lang/de.json +++ b/frontend/src/locale/lang/de.json @@ -61,7 +61,7 @@ "column.email": "Email", "column.event": "Ereignis", "column.expires": "Verfällt am", - "column.http-code": "Zugriff", + "column.http-code": "HTTP Code", "column.incoming-port": "Eingehender Port", "column.name": "Name", "column.protocol": "Protokoll", From 74d381e7fa5367cc9d535ddf1606063a119529d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Portas=20L=C3=B3pez?= <81629707+TeenBiscuits@users.noreply.github.com> Date: Tue, 11 Nov 2025 13:50:23 +0100 Subject: [PATCH 23/42] Add missing spanish translation --- frontend/src/locale/lang/es.json | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/locale/lang/es.json b/frontend/src/locale/lang/es.json index 5a71d3c5..4ce65e05 100644 --- a/frontend/src/locale/lang/es.json +++ b/frontend/src/locale/lang/es.json @@ -169,6 +169,7 @@ "public": "Público", "redirection-host": "Host de Redirección", "redirection-host.forward-domain": "Dominio de Reenvío", + "redirection-host.forward-http-code": "Código HTTP", "redirection-hosts": "Hosts de Redirección", "redirection-hosts.count": "{count} {count, plural, one {Host de Redirección} other {Hosts de Redirección}}", "role.admin": "Administrador", From 16005994103eba2ffe4643dcaf8e9b79bd88baa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Portas=20L=C3=B3pez?= <81629707+TeenBiscuits@users.noreply.github.com> Date: Tue, 11 Nov 2025 13:53:45 +0100 Subject: [PATCH 24/42] Fix column.http-code translation --- frontend/src/locale/lang/en.json | 2 +- frontend/src/locale/lang/es.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/locale/lang/en.json b/frontend/src/locale/lang/en.json index bda50f47..bf14f590 100644 --- a/frontend/src/locale/lang/en.json +++ b/frontend/src/locale/lang/en.json @@ -62,7 +62,7 @@ "column.email": "Email", "column.event": "Event", "column.expires": "Expires", - "column.http-code": "Access", + "column.http-code": "HTTP Code", "column.incoming-port": "Incoming Port", "column.name": "Name", "column.protocol": "Protocol", diff --git a/frontend/src/locale/lang/es.json b/frontend/src/locale/lang/es.json index 4ce65e05..ddca4559 100644 --- a/frontend/src/locale/lang/es.json +++ b/frontend/src/locale/lang/es.json @@ -62,7 +62,7 @@ "column.email": "Correo Electrónico", "column.event": "Evento", "column.expires": "Expira", - "column.http-code": "Acceso", + "column.http-code": "Código HTTP", "column.incoming-port": "Puerto de Entrada", "column.name": "Nombre", "column.protocol": "Protocolo", From 441a7262cd7db20da3e84217be607755725c5e14 Mon Sep 17 00:00:00 2001 From: 7heMech <83923848+7heMech@users.noreply.github.com> Date: Tue, 11 Nov 2025 12:54:01 +0000 Subject: [PATCH 25/42] Add scheme back in destination --- frontend/src/pages/Nginx/ProxyHosts/Table.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/pages/Nginx/ProxyHosts/Table.tsx b/frontend/src/pages/Nginx/ProxyHosts/Table.tsx index aec9ffd8..9d58b26a 100644 --- a/frontend/src/pages/Nginx/ProxyHosts/Table.tsx +++ b/frontend/src/pages/Nginx/ProxyHosts/Table.tsx @@ -51,7 +51,7 @@ export default function Table({ data, isFetching, onEdit, onDelete, onDisableTog header: intl.formatMessage({ id: "column.destination" }), cell: (info: any) => { const value = info.getValue(); - return `${value.forwardHost}:${value.forwardPort}`; + return `${value.forwardScheme}://${value.forwardHost}:${value.forwardPort}`; }, }), columnHelper.accessor((row: any) => row.certificate, { From 9f0f89ff03a2188414c4363e1e5f055fb2968188 Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Tue, 11 Nov 2025 17:47:42 +1000 Subject: [PATCH 26/42] Fix wrong translation for EN --- frontend/src/locale/src/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/locale/src/en.json b/frontend/src/locale/src/en.json index 425e9cc2..36ee14d9 100644 --- a/frontend/src/locale/src/en.json +++ b/frontend/src/locale/src/en.json @@ -189,7 +189,7 @@ "defaultMessage": "Expires" }, "column.http-code": { - "defaultMessage": "Access" + "defaultMessage": "HTTP Code" }, "column.incoming-port": { "defaultMessage": "Incoming Port" From 711f312b71b32300d90c5c2cee213bf2d994fbeb Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Wed, 12 Nov 2025 16:30:22 +1000 Subject: [PATCH 27/42] Fix up language inconsistenties --- frontend/check-locales.cjs | 1 + frontend/src/locale/IntlProvider.tsx | 31 +- frontend/src/locale/lang/de.json | 5 +- frontend/src/locale/lang/lang-list.json | 2 +- frontend/src/locale/src/de.json | 3 + frontend/src/locale/src/es.json | 1281 ++++++++++++----------- 6 files changed, 660 insertions(+), 663 deletions(-) diff --git a/frontend/check-locales.cjs b/frontend/check-locales.cjs index 08b2f773..3a6ecff4 100755 --- a/frontend/check-locales.cjs +++ b/frontend/check-locales.cjs @@ -9,6 +9,7 @@ const allLocales = [ ["en", "en-US"], ["es", "es-ES"], + ["de", "de-DE"], ]; const ignoreUnused = [ diff --git a/frontend/src/locale/IntlProvider.tsx b/frontend/src/locale/IntlProvider.tsx index c7e602a3..2e62408c 100644 --- a/frontend/src/locale/IntlProvider.tsx +++ b/frontend/src/locale/IntlProvider.tsx @@ -1,23 +1,23 @@ import { createIntl, createIntlCache } from "react-intl"; +import langDe from "./lang/de.json"; import langEn from "./lang/en.json"; import langEs from "./lang/es.json"; -import langDe from "./lang/de.json"; import langList from "./lang/lang-list.json"; // first item of each array should be the language code, // not the country code // Remember when adding to this list, also update check-locales.js script const localeOptions = [ - ["en", "en-US"], - ["es", "es-ES"], - ["de", "de-DE"] + ["en", "en-US"], + ["es", "es-ES"], + ["de", "de-DE"], ]; const loadMessages = (locale?: string): typeof langList & typeof langEn => { const thisLocale = locale || "en"; switch (thisLocale.slice(0, 2)) { - case "es": - return Object.assign({}, langList, langEs); + case "es": + return Object.assign({}, langList, langEn, langEs); case "de": return Object.assign({}, langList, langEn, langDe); default: @@ -27,8 +27,8 @@ const loadMessages = (locale?: string): typeof langList & typeof langEn => { const getFlagCodeForLocale = (locale?: string) => { switch (locale) { - case "es-ES": - case "es": + case "es-ES": + case "es": return "ES"; case "de-DE": case "de": @@ -56,10 +56,7 @@ const getLocale = (short = false) => { const cache = createIntlCache(); const initialMessages = loadMessages(getLocale()); -let intl = createIntl( - { locale: getLocale(), messages: initialMessages }, - cache, -); +let intl = createIntl({ locale: getLocale(), messages: initialMessages }, cache); const changeLocale = (locale: string): void => { const messages = loadMessages(locale); @@ -99,12 +96,4 @@ const T = ({ ); }; -export { - localeOptions, - getFlagCodeForLocale, - getLocale, - createIntl, - changeLocale, - intl, - T, -}; +export { localeOptions, getFlagCodeForLocale, getLocale, createIntl, changeLocale, intl, T }; diff --git a/frontend/src/locale/lang/de.json b/frontend/src/locale/lang/de.json index 64ba15fa..8e308f0b 100644 --- a/frontend/src/locale/lang/de.json +++ b/frontend/src/locale/lang/de.json @@ -32,6 +32,7 @@ "certificate.none.subtitle.for-http": "Dieser Host verwendet kein HTTPS.", "certificate.none.title": "Kein", "certificate.not-in-use": "Nicht in Benutzung", + "certificate.renew": "Zertifikat erneuern", "certificates": "Zertifikate", "certificates.custom": "Benutzerdefiniertes Zertifikat", "certificates.custom.warning": "Mit einem Passwort geschützte Schlüsseldateien werden nicht unterstützt.", @@ -168,7 +169,7 @@ "public": "Öffentlich", "redirection-host": "Redirection Host", "redirection-host.forward-domain": "Forward Domain", - "redirection-host.forward-http-code" : "HTTP Code", + "redirection-host.forward-http-code": "HTTP Code", "redirection-hosts": "Redirection Hosts", "redirection-hosts.count": "{count} {count, plural, one {Redirection Host} other {Redirection Hosts}}", "role.admin": "Administrator", @@ -212,4 +213,4 @@ "user.switch-light": "Zum Light Mode wechslen", "username": "Benutzername", "users": "Benutzer" -} +} \ No newline at end of file diff --git a/frontend/src/locale/lang/lang-list.json b/frontend/src/locale/lang/lang-list.json index 9caffc39..8505ced8 100644 --- a/frontend/src/locale/lang/lang-list.json +++ b/frontend/src/locale/lang/lang-list.json @@ -2,4 +2,4 @@ "locale-de-DE": "German", "locale-en-US": "English", "locale-es-ES": "Español" -} +} \ No newline at end of file diff --git a/frontend/src/locale/src/de.json b/frontend/src/locale/src/de.json index 0fe9f5f7..561ef82b 100644 --- a/frontend/src/locale/src/de.json +++ b/frontend/src/locale/src/de.json @@ -98,6 +98,9 @@ "certificate.not-in-use": { "defaultMessage": "Nicht in Benutzung" }, + "certificate.renew": { + "defaultMessage": "Zertifikat erneuern" + }, "certificates": { "defaultMessage": "Zertifikate" }, diff --git a/frontend/src/locale/src/es.json b/frontend/src/locale/src/es.json index 9f7213a7..bd65f4de 100644 --- a/frontend/src/locale/src/es.json +++ b/frontend/src/locale/src/es.json @@ -1,641 +1,644 @@ { - "redirection-host.forward-domain": { - "defaultMessage": "Dominio de Reenvío" - }, - "redirection-hosts.count": { - "defaultMessage": "{count} {count, plural, one {Host de Redirección} other {Hosts de Redirección}}" - }, - "notification.success": { - "defaultMessage": "Éxito" - }, - "setup.preamble": { - "defaultMessage": "Comienza creando tu cuenta de administrador." - }, - "column.event": { - "defaultMessage": "Evento" - }, - "auditlogs": { - "defaultMessage": "Registros de Auditoría" - }, - "enabled": { - "defaultMessage": "Habilitado" - }, - "column.source": { - "defaultMessage": "Origen" - }, - "column.details": { - "defaultMessage": "Detalles" - }, - "column.ssl": { - "defaultMessage": "SSL" - }, - "column.destination": { - "defaultMessage": "Destino" - }, - "settings.default-site.html": { - "defaultMessage": "HTML Personalizado" - }, - "proxy-host": { - "defaultMessage": "Host Proxy" - }, - "certificates.dns.propagation-seconds-note": { - "defaultMessage": "Dejar vacío para usar el valor predeterminado del plugin. Número de segundos a esperar para la propagación DNS." - }, - "settings.default-site.redirect": { - "defaultMessage": "Redirigir" - }, - "hosts": { - "defaultMessage": "Hosts" - }, - "users": { - "defaultMessage": "Usuarios" - }, - "permissions.visibility.all": { - "defaultMessage": "Todos los Elementos" - }, - "password.generate": { - "defaultMessage": "Generar contraseña aleatoria" - }, - "host.flags.preserve-path": { - "defaultMessage": "Preservar Ruta" - }, - "password.show": { - "defaultMessage": "Mostrar Contraseña" - }, - "permissions.visibility.title": { - "defaultMessage": "Visibilidad de Elementos" - }, - "http-only": { - "defaultMessage": "Solo HTTP" - }, - "empty-search": { - "defaultMessage": "No se encontraron resultados" - }, - "column.provider": { - "defaultMessage": "Proveedor" - }, - "user": { - "defaultMessage": "Usuario" - }, - "domain-names.placeholder": { - "defaultMessage": "Comienza a escribir para añadir dominio..." - }, - "certificates": { - "defaultMessage": "Certificados" - }, - "host.flags.websockets-upgrade": { - "defaultMessage": "Soporte de Websockets" - }, - "dead-host": { - "defaultMessage": "Host 404" - }, - "column.email": { - "defaultMessage": "Correo Electrónico" - }, - "settings.default-site": { - "defaultMessage": "Sitio Predeterminado" - }, - "action.add-location": { - "defaultMessage": "Añadir Ubicación" - }, - "settings.default-site.404": { - "defaultMessage": "Página 404" - }, - "user.change-password": { - "defaultMessage": "Cambiar Contraseña" - }, - "settings": { - "defaultMessage": "Configuración" - }, - "certificate.custom-certificate": { - "defaultMessage": "Certificado" - }, - "streams": { - "defaultMessage": "Streams" - }, - "streams.count": { - "defaultMessage": "{count} {count, plural, one {Stream} other {Streams}}" - }, - "error.passwords-must-match": { - "defaultMessage": "Las contraseñas deben coincidir" - }, - "ssl-certificate": { - "defaultMessage": "Certificado SSL" - }, - "certificate.none.subtitle.for-http": { - "defaultMessage": "Este host no usará HTTPS" - }, - "user.confirm-password": { - "defaultMessage": "Confirmar Contraseña" - }, - "notfound.title": { - "defaultMessage": "Ups… Has encontrado una página de error" - }, - "object.edit": { - "defaultMessage": "Editar {object}" - }, - "error.max-domains": { - "defaultMessage": "Demasiados dominios, el máximo es {max}" - }, - "column.scheme": { - "defaultMessage": "Esquema" - }, - "permissions.hidden": { - "defaultMessage": "Oculto" - }, - "certificate.in-use": { - "defaultMessage": "En Uso" - }, - "column.satisfy": { - "defaultMessage": "Satisfacer" - }, - "column.protocol": { - "defaultMessage": "Protocolo" - }, - "action.add": { - "defaultMessage": "Añadir" - }, - "column.custom-locations": { - "defaultMessage": "Ubicaciones Personalizadas" - }, - "certificate.renew": { - "defaultMessage": "Renovar Certificado" - }, - "offline": { - "defaultMessage": "Desconectado" - }, - "permissions.visibility.user": { - "defaultMessage": "Solo Elementos Creados" - }, - "certificates.dns.credentials": { - "defaultMessage": "Contenido del Archivo de Credenciales" - }, - "proxy-hosts": { - "defaultMessage": "Hosts Proxy" - }, - "user.edit-profile": { - "defaultMessage": "Editar Perfil" - }, - "user.switch-dark": { - "defaultMessage": "Cambiar a modo Oscuro" - }, - "certificates.custom.warning": { - "defaultMessage": "No se admiten archivos de claves protegidos con contraseña." - }, - "access-list.help.rules-order": { - "defaultMessage": "Ten en cuenta que las directivas de permitir y denegar se aplicarán en el orden en que estén definidas." - }, - "save": { - "defaultMessage": "Guardar" - }, - "certificates.http.reachability-404": { - "defaultMessage": "Se encontró un servidor en este dominio pero no parece ser Nginx Proxy Manager. Asegúrate de que tu dominio apunte a la IP donde se está ejecutando tu instancia de NPM." - }, - "certificates.http.reachability-wrong-data": { - "defaultMessage": "Se encontró un servidor en este dominio pero devolvió datos inesperados. ¿Es el servidor NPM? Asegúrate de que tu dominio apunte a la IP donde se está ejecutando tu instancia de NPM." - }, - "settings.default-site.congratulations": { - "defaultMessage": "Página de Felicitaciones" - }, - "streams.tcp": { - "defaultMessage": "TCP" - }, - "user.current-password": { - "defaultMessage": "Contraseña Actual" - }, - "access-list": { - "defaultMessage": "Lista de Acceso" - }, - "column.access": { - "defaultMessage": "Acceso" - }, - "action.delete": { - "defaultMessage": "Eliminar" - }, - "certificates.custom": { - "defaultMessage": "Certificado Personalizado" - }, - "column.authorizations": { - "defaultMessage": "Autorizaciones" - }, - "host.flags.block-exploits": { - "defaultMessage": "Bloquear Exploits Comunes" - }, - "object.event.created": { - "defaultMessage": "{object} Creado" - }, - "options": { - "defaultMessage": "Opciones" - }, - "redirection-host": { - "defaultMessage": "Host de Redirección" - }, - "certificate.none.title": { - "defaultMessage": "Ninguno" - }, - "created-on": { - "defaultMessage": "Creado: {date}" - }, - "user.login-as": { - "defaultMessage": "Iniciar sesión como {name}" - }, - "certificates.request.subtitle": { - "defaultMessage": "con Let's Encrypt" - }, - "proxy-hosts.count": { - "defaultMessage": "{count} {count, plural, one {Host Proxy} other {Hosts Proxy}}" - }, - "host.forward-port": { - "defaultMessage": "Puerto de Reenvío" - }, - "notfound.content": { - "defaultMessage": "Lo sentimos, pero la página que buscas no fue encontrada" - }, - "access-list.public.subtitle": { - "defaultMessage": "No se requiere autenticación básica" - }, - "proxy-host.forward-host": { - "defaultMessage": "Nombre de Host / IP de Reenvío" - }, - "settings.default-site.444": { - "defaultMessage": "Sin Respuesta (444)" - }, - "settings.default-site.description": { - "defaultMessage": "Qué mostrar cuando Nginx recibe un Host desconocido" - }, - "column.expires": { - "defaultMessage": "Expira" - }, - "object.delete": { - "defaultMessage": "Eliminar {object}" - }, - "notification.object-deleted": { - "defaultMessage": "{object} ha sido eliminado" - }, - "cancel": { - "defaultMessage": "Cancelar" - }, - "user.set-password": { - "defaultMessage": "Establecer Contraseña" - }, - "nginx-config.placeholder": { - "defaultMessage": "# ¡Introduce aquí tu configuración personalizada de Nginx bajo tu propio riesgo!" - }, - "access-list.auth-count": { - "defaultMessage": "{count} {count, plural, one {Usuario} other {Usuarios}}" - }, - "password.hide": { - "defaultMessage": "Ocultar Contraseña" - }, - "settings.default-site.html.placeholder": { - "defaultMessage": "" - }, - "notification.object-renewed": { - "defaultMessage": "{object} ha sido renovado" - }, - "object.event.deleted": { - "defaultMessage": "{object} Eliminado" - }, - "error.invalid-auth": { - "defaultMessage": "Correo electrónico o contraseña no válidos" - }, - "domains.force-ssl": { - "defaultMessage": "Forzar SSL" - }, - "domains.hsts-subdomains": { - "defaultMessage": "HSTS en Subdominios" - }, - "host.flags.protocols": { - "defaultMessage": "Protocolos" - }, - "action.download": { - "defaultMessage": "Descargar" - }, - "certificates.dns.warning": { - "defaultMessage": "Esta sección requiere algunos conocimientos sobre Certbot y sus plugins DNS. Consulta la documentación de los plugins respectivos." - }, - "certificates.request.title": { - "defaultMessage": "Solicitar un nuevo Certificado" - }, - "password": { - "defaultMessage": "Contraseña" - }, - "notification.object-saved": { - "defaultMessage": "{object} ha sido guardado" - }, - "setting": { - "defaultMessage": "Configuración" - }, - "object.empty": { - "defaultMessage": "No hay {objects}" - }, - "lets-encrypt-via-http": { - "defaultMessage": "Let's Encrypt vía HTTP" - }, - "domains.hsts-enabled": { - "defaultMessage": "HSTS Habilitado" - }, - "error.maximum": { - "defaultMessage": "El máximo es {max}" - }, - "user.switch-light": { - "defaultMessage": "Cambiar a modo Claro" - }, - "action.edit": { - "defaultMessage": "Editar" - }, - "access-list.subtitle": { - "defaultMessage": "{users} {users, plural, one {Usuario} other {Usuarios}}, {rules} {rules, plural, one {Regla} other {Reglas}} - Creado: {date}" - }, - "action.enable": { - "defaultMessage": "Habilitar" - }, - "error.access.duplicate-usernames": { - "defaultMessage": "Los nombres de usuario de autorización deben ser únicos" - }, - "notfound.action": { - "defaultMessage": "Llévame al inicio" - }, - "notification.object-disabled": { - "defaultMessage": "{object} ha sido deshabilitado" - }, - "user.logout": { - "defaultMessage": "Cerrar Sesión" - }, - "stream.incoming-port": { - "defaultMessage": "Puerto de Entrada" - }, - "certificates.http.reachability-ok": { - "defaultMessage": "Tu servidor es accesible y debería ser posible crear certificados." - }, - "access-list.help-rules-last": { - "defaultMessage": "Cuando exista al menos 1 regla, esta regla de denegar todo se añadirá al final" - }, - "action.view-details": { - "defaultMessage": "Ver Detalles" - }, - "notification.object-enabled": { - "defaultMessage": "{object} ha sido habilitado" - }, - "object.actions-title": { - "defaultMessage": "{object} #{id}" - }, - "username": { - "defaultMessage": "Nombre de Usuario" - }, - "user.nickname": { - "defaultMessage": "Apodo" - }, - "column.name": { - "defaultMessage": "Nombre" - }, - "column.roles": { - "defaultMessage": "Roles" - }, - "footer.github-fork": { - "defaultMessage": "Bifúrcame en Github" - }, - "object.event.updated": { - "defaultMessage": "{object} Actualizado" - }, - "certificates.dns.credentials-warning": { - "defaultMessage": "¡Estos datos se almacenarán como texto plano en la base de datos y en un archivo!" - }, - "access-list.satisfy-any": { - "defaultMessage": "Satisfacer Cualquiera" - }, - "dead-hosts.count": { - "defaultMessage": "{count} {count, plural, one {Host 404} other {Hosts 404}}" - }, - "certificates.dns.propagation-seconds": { - "defaultMessage": "Segundos de Propagación" - }, - "error.min-character-length": { - "defaultMessage": "La longitud mínima es {min} caracter{min, plural, one {} other {es}}" - }, - "domain-names.max": { - "defaultMessage": "{count} nombres de dominio como máximo" - }, - "object.delete.content": { - "defaultMessage": "¿Estás seguro de que quieres eliminar este {object}?" - }, - "column.rules": { - "defaultMessage": "Reglas" - }, - "error.required": { - "defaultMessage": "Este campo es obligatorio" - }, - "certificate": { - "defaultMessage": "Certificado" - }, - "public": { - "defaultMessage": "Público" - }, - "domains.use-dns": { - "defaultMessage": "Usar Desafío DNS" - }, - "error.max-character-length": { - "defaultMessage": "La longitud máxima es {max} caracter{max, plural, one {} other {es}}" - }, - "permissions.view": { - "defaultMessage": "Solo Ver" - }, - "expires.on": { - "defaultMessage": "Expira: {date}" - }, - "setup.title": { - "defaultMessage": "¡Bienvenido!" - }, - "certificates.http.reachability-failed-to-check": { - "defaultMessage": "No se pudo verificar la accesibilidad debido a un error de comunicación con site24x7.com." - }, - "certificates.http.warning": { - "defaultMessage": "Estos dominios ya deben estar configurados para apuntar a esta instalación." - }, - "certificate.custom-certificate-key": { - "defaultMessage": "Clave del Certificado" - }, - "empty-subtitle": { - "defaultMessage": "¿Por qué no creas uno?" - }, - "dead-hosts": { - "defaultMessage": "Hosts 404" - }, - "lets-encrypt": { - "defaultMessage": "Let's Encrypt" - }, - "email-address": { - "defaultMessage": "Dirección de correo electrónico" - }, - "domain-names": { - "defaultMessage": "Nombres de Dominio" - }, - "user.full-name": { - "defaultMessage": "Nombre Completo" - }, - "column.incoming-port": { - "defaultMessage": "Puerto de Entrada" - }, - "column.http-code": { - "defaultMessage": "Acceso" - }, - "certificate.not-in-use": { - "defaultMessage": "Sin Usar" - }, - "action.disable": { - "defaultMessage": "Deshabilitar" - }, - "redirection-hosts": { - "defaultMessage": "Hosts de Redirección" - }, - "streams.udp": { - "defaultMessage": "UDP" - }, - "role.admin": { - "defaultMessage": "Administrador" - }, - "nginx-config.label": { - "defaultMessage": "Configuración Personalizada de Nginx" - }, - "disabled": { - "defaultMessage": "Deshabilitado" - }, - "domain-names.wildcards-not-permitted": { - "defaultMessage": "No se permiten comodines para este tipo" - }, - "online": { - "defaultMessage": "Conectado" - }, - "access-list.public": { - "defaultMessage": "Accesible Públicamente" - }, - "action.renew": { - "defaultMessage": "Renovar" - }, - "object.add": { - "defaultMessage": "Añadir {object}" - }, - "certificates.dns.credentials-note": { - "defaultMessage": "Este plugin requiere un archivo de configuración que contenga un token de API u otras credenciales para tu proveedor" - }, - "error.invalid-email": { - "defaultMessage": "Dirección de correo electrónico no válida" - }, - "notification.error": { - "defaultMessage": "Error" - }, - "error.invalid-domain": { - "defaultMessage": "Dominio no válido: {domain}" - }, - "user.set-permissions": { - "defaultMessage": "Establecer Permisos para {name}" - }, - "certificate.none.subtitle": { - "defaultMessage": "Sin certificado asignado" - }, - "object.event.enabled": { - "defaultMessage": "{object} Habilitado" - }, - "login.title": { - "defaultMessage": "Inicia sesión en tu cuenta" - }, - "access-list.access-count": { - "defaultMessage": "{count} {count, plural, one {Regla} other {Reglas}}" - }, - "certificate.custom-intermediate": { - "defaultMessage": "Certificado Intermedio" - }, - "error.access.at-least-one": { - "defaultMessage": "Se requiere al menos una Autorización o una Regla de Acceso" - }, - "stream": { - "defaultMessage": "Stream" - }, - "action.close": { - "defaultMessage": "Cerrar" - }, - "certificates.http.test-results": { - "defaultMessage": "Resultados de la Prueba" - }, - "certificates.dns.provider": { - "defaultMessage": "Proveedor DNS" - }, - "object.event.renewed": { - "defaultMessage": "{object} Renovado" - }, - "lets-encrypt-via-dns": { - "defaultMessage": "Let's Encrypt vía DNS" - }, - "certificates.http.reachability-not-resolved": { - "defaultMessage": "No hay ningún servidor disponible en este dominio. Asegúrate de que tu dominio existe y apunta a la IP donde se está ejecutando tu instancia de NPM y, si es necesario, que el puerto 80 esté redirigido en tu router." - }, - "no-permission-error": { - "defaultMessage": "No tienes acceso para ver esto." - }, - "column.satisfy-all": { - "defaultMessage": "Todo" - }, - "host.forward-scheme": { - "defaultMessage": "Esquema" - }, - "domains.http2-support": { - "defaultMessage": "Soporte HTTP/2" - }, - "action.permissions": { - "defaultMessage": "Permisos" - }, - "loading": { - "defaultMessage": "Cargando…" - }, - "object.event.disabled": { - "defaultMessage": "{object} Deshabilitado" - }, - "dashboard": { - "defaultMessage": "Panel de Control" - }, - "sign-in": { - "defaultMessage": "Iniciar Sesión" - }, - "permissions.manage": { - "defaultMessage": "Gestionar" - }, - "user.new-password": { - "defaultMessage": "Nueva Contraseña" - }, - "stream.forward-host": { - "defaultMessage": "Host de Reenvío" - }, - "test": { - "defaultMessage": "Probar" - }, - "column.authorization": { - "defaultMessage": "Autorización" - }, - "column.satisfy-any": { - "defaultMessage": "Cualquiera" - }, - "host.flags.cache-assets": { - "defaultMessage": "Cachear Recursos" - }, - "access-lists": { - "defaultMessage": "Listas de Acceso" - }, - "role.standard-user": { - "defaultMessage": "Usuario Estándar" - }, - "certificates.http.reachability-other": { - "defaultMessage": "Se encontró un servidor en este dominio pero devolvió un código de estado inesperado {code}. ¿Es el servidor NPM? Asegúrate de que tu dominio apunte a la IP donde se está ejecutando tu instancia de NPM." - }, - "column.status": { - "defaultMessage": "Estado" - }, - "error.minimum": { - "defaultMessage": "El mínimo es {min}" - }, - "domain-names.wildcards-not-supported": { - "defaultMessage": "No se admiten comodines para esta CA" - }, - "access-list.pass-auth": { - "defaultMessage": "Pasar Autenticación al Upstream" - } + "access-list": { + "defaultMessage": "Lista de Acceso" + }, + "access-list.access-count": { + "defaultMessage": "{count} {count, plural, one {Regla} other {Reglas}}" + }, + "access-list.auth-count": { + "defaultMessage": "{count} {count, plural, one {Usuario} other {Usuarios}}" + }, + "access-list.help-rules-last": { + "defaultMessage": "Cuando exista al menos 1 regla, esta regla de denegar todo se añadirá al final" + }, + "access-list.help.rules-order": { + "defaultMessage": "Ten en cuenta que las directivas de permitir y denegar se aplicarán en el orden en que estén definidas." + }, + "access-list.pass-auth": { + "defaultMessage": "Pasar Autenticación al Upstream" + }, + "access-list.public": { + "defaultMessage": "Accesible Públicamente" + }, + "access-list.public.subtitle": { + "defaultMessage": "No se requiere autenticación básica" + }, + "access-list.satisfy-any": { + "defaultMessage": "Satisfacer Cualquiera" + }, + "access-list.subtitle": { + "defaultMessage": "{users} {users, plural, one {Usuario} other {Usuarios}}, {rules} {rules, plural, one {Regla} other {Reglas}} - Creado: {date}" + }, + "access-lists": { + "defaultMessage": "Listas de Acceso" + }, + "action.add": { + "defaultMessage": "Añadir" + }, + "action.add-location": { + "defaultMessage": "Añadir Ubicación" + }, + "action.close": { + "defaultMessage": "Cerrar" + }, + "action.delete": { + "defaultMessage": "Eliminar" + }, + "action.disable": { + "defaultMessage": "Deshabilitar" + }, + "action.download": { + "defaultMessage": "Descargar" + }, + "action.edit": { + "defaultMessage": "Editar" + }, + "action.enable": { + "defaultMessage": "Habilitar" + }, + "action.permissions": { + "defaultMessage": "Permisos" + }, + "action.renew": { + "defaultMessage": "Renovar" + }, + "action.view-details": { + "defaultMessage": "Ver Detalles" + }, + "auditlogs": { + "defaultMessage": "Registros de Auditoría" + }, + "cancel": { + "defaultMessage": "Cancelar" + }, + "certificate": { + "defaultMessage": "Certificado" + }, + "certificate.custom-certificate": { + "defaultMessage": "Certificado" + }, + "certificate.custom-certificate-key": { + "defaultMessage": "Clave del Certificado" + }, + "certificate.custom-intermediate": { + "defaultMessage": "Certificado Intermedio" + }, + "certificate.in-use": { + "defaultMessage": "En Uso" + }, + "certificate.none.subtitle": { + "defaultMessage": "Sin certificado asignado" + }, + "certificate.none.subtitle.for-http": { + "defaultMessage": "Este host no usará HTTPS" + }, + "certificate.none.title": { + "defaultMessage": "Ninguno" + }, + "certificate.not-in-use": { + "defaultMessage": "Sin Usar" + }, + "certificate.renew": { + "defaultMessage": "Renovar Certificado" + }, + "certificates": { + "defaultMessage": "Certificados" + }, + "certificates.custom": { + "defaultMessage": "Certificado Personalizado" + }, + "certificates.custom.warning": { + "defaultMessage": "No se admiten archivos de claves protegidos con contraseña." + }, + "certificates.dns.credentials": { + "defaultMessage": "Contenido del Archivo de Credenciales" + }, + "certificates.dns.credentials-note": { + "defaultMessage": "Este plugin requiere un archivo de configuración que contenga un token de API u otras credenciales para tu proveedor" + }, + "certificates.dns.credentials-warning": { + "defaultMessage": "¡Estos datos se almacenarán como texto plano en la base de datos y en un archivo!" + }, + "certificates.dns.propagation-seconds": { + "defaultMessage": "Segundos de Propagación" + }, + "certificates.dns.propagation-seconds-note": { + "defaultMessage": "Dejar vacío para usar el valor predeterminado del plugin. Número de segundos a esperar para la propagación DNS." + }, + "certificates.dns.provider": { + "defaultMessage": "Proveedor DNS" + }, + "certificates.dns.warning": { + "defaultMessage": "Esta sección requiere algunos conocimientos sobre Certbot y sus plugins DNS. Consulta la documentación de los plugins respectivos." + }, + "certificates.http.reachability-404": { + "defaultMessage": "Se encontró un servidor en este dominio pero no parece ser Nginx Proxy Manager. Asegúrate de que tu dominio apunte a la IP donde se está ejecutando tu instancia de NPM." + }, + "certificates.http.reachability-failed-to-check": { + "defaultMessage": "No se pudo verificar la accesibilidad debido a un error de comunicación con site24x7.com." + }, + "certificates.http.reachability-not-resolved": { + "defaultMessage": "No hay ningún servidor disponible en este dominio. Asegúrate de que tu dominio existe y apunta a la IP donde se está ejecutando tu instancia de NPM y, si es necesario, que el puerto 80 esté redirigido en tu router." + }, + "certificates.http.reachability-ok": { + "defaultMessage": "Tu servidor es accesible y debería ser posible crear certificados." + }, + "certificates.http.reachability-other": { + "defaultMessage": "Se encontró un servidor en este dominio pero devolvió un código de estado inesperado {code}. ¿Es el servidor NPM? Asegúrate de que tu dominio apunte a la IP donde se está ejecutando tu instancia de NPM." + }, + "certificates.http.reachability-wrong-data": { + "defaultMessage": "Se encontró un servidor en este dominio pero devolvió datos inesperados. ¿Es el servidor NPM? Asegúrate de que tu dominio apunte a la IP donde se está ejecutando tu instancia de NPM." + }, + "certificates.http.test-results": { + "defaultMessage": "Resultados de la Prueba" + }, + "certificates.http.warning": { + "defaultMessage": "Estos dominios ya deben estar configurados para apuntar a esta instalación." + }, + "certificates.request.subtitle": { + "defaultMessage": "con Let's Encrypt" + }, + "certificates.request.title": { + "defaultMessage": "Solicitar un nuevo Certificado" + }, + "column.access": { + "defaultMessage": "Acceso" + }, + "column.authorization": { + "defaultMessage": "Autorización" + }, + "column.authorizations": { + "defaultMessage": "Autorizaciones" + }, + "column.custom-locations": { + "defaultMessage": "Ubicaciones Personalizadas" + }, + "column.destination": { + "defaultMessage": "Destino" + }, + "column.details": { + "defaultMessage": "Detalles" + }, + "column.email": { + "defaultMessage": "Correo Electrónico" + }, + "column.event": { + "defaultMessage": "Evento" + }, + "column.expires": { + "defaultMessage": "Expira" + }, + "column.http-code": { + "defaultMessage": "Código HTTP" + }, + "column.incoming-port": { + "defaultMessage": "Puerto de Entrada" + }, + "column.name": { + "defaultMessage": "Nombre" + }, + "column.protocol": { + "defaultMessage": "Protocolo" + }, + "column.provider": { + "defaultMessage": "Proveedor" + }, + "column.roles": { + "defaultMessage": "Roles" + }, + "column.rules": { + "defaultMessage": "Reglas" + }, + "column.satisfy": { + "defaultMessage": "Satisfacer" + }, + "column.satisfy-all": { + "defaultMessage": "Todo" + }, + "column.satisfy-any": { + "defaultMessage": "Cualquiera" + }, + "column.scheme": { + "defaultMessage": "Esquema" + }, + "column.source": { + "defaultMessage": "Origen" + }, + "column.ssl": { + "defaultMessage": "SSL" + }, + "column.status": { + "defaultMessage": "Estado" + }, + "created-on": { + "defaultMessage": "Creado: {date}" + }, + "dashboard": { + "defaultMessage": "Panel de Control" + }, + "dead-host": { + "defaultMessage": "Host 404" + }, + "dead-hosts": { + "defaultMessage": "Hosts 404" + }, + "dead-hosts.count": { + "defaultMessage": "{count} {count, plural, one {Host 404} other {Hosts 404}}" + }, + "disabled": { + "defaultMessage": "Deshabilitado" + }, + "domain-names": { + "defaultMessage": "Nombres de Dominio" + }, + "domain-names.max": { + "defaultMessage": "{count} nombres de dominio como máximo" + }, + "domain-names.placeholder": { + "defaultMessage": "Comienza a escribir para añadir dominio..." + }, + "domain-names.wildcards-not-permitted": { + "defaultMessage": "No se permiten comodines para este tipo" + }, + "domain-names.wildcards-not-supported": { + "defaultMessage": "No se admiten comodines para esta CA" + }, + "domains.force-ssl": { + "defaultMessage": "Forzar SSL" + }, + "domains.hsts-enabled": { + "defaultMessage": "HSTS Habilitado" + }, + "domains.hsts-subdomains": { + "defaultMessage": "HSTS en Subdominios" + }, + "domains.http2-support": { + "defaultMessage": "Soporte HTTP/2" + }, + "domains.use-dns": { + "defaultMessage": "Usar Desafío DNS" + }, + "email-address": { + "defaultMessage": "Dirección de correo electrónico" + }, + "empty-search": { + "defaultMessage": "No se encontraron resultados" + }, + "empty-subtitle": { + "defaultMessage": "¿Por qué no creas uno?" + }, + "enabled": { + "defaultMessage": "Habilitado" + }, + "error.access.at-least-one": { + "defaultMessage": "Se requiere al menos una Autorización o una Regla de Acceso" + }, + "error.access.duplicate-usernames": { + "defaultMessage": "Los nombres de usuario de autorización deben ser únicos" + }, + "error.invalid-auth": { + "defaultMessage": "Correo electrónico o contraseña no válidos" + }, + "error.invalid-domain": { + "defaultMessage": "Dominio no válido: {domain}" + }, + "error.invalid-email": { + "defaultMessage": "Dirección de correo electrónico no válida" + }, + "error.max-character-length": { + "defaultMessage": "La longitud máxima es {max} caracter{max, plural, one {} other {es}}" + }, + "error.max-domains": { + "defaultMessage": "Demasiados dominios, el máximo es {max}" + }, + "error.maximum": { + "defaultMessage": "El máximo es {max}" + }, + "error.min-character-length": { + "defaultMessage": "La longitud mínima es {min} caracter{min, plural, one {} other {es}}" + }, + "error.minimum": { + "defaultMessage": "El mínimo es {min}" + }, + "error.passwords-must-match": { + "defaultMessage": "Las contraseñas deben coincidir" + }, + "error.required": { + "defaultMessage": "Este campo es obligatorio" + }, + "expires.on": { + "defaultMessage": "Expira: {date}" + }, + "footer.github-fork": { + "defaultMessage": "Bifúrcame en Github" + }, + "host.flags.block-exploits": { + "defaultMessage": "Bloquear Exploits Comunes" + }, + "host.flags.cache-assets": { + "defaultMessage": "Cachear Recursos" + }, + "host.flags.preserve-path": { + "defaultMessage": "Preservar Ruta" + }, + "host.flags.protocols": { + "defaultMessage": "Protocolos" + }, + "host.flags.websockets-upgrade": { + "defaultMessage": "Soporte de Websockets" + }, + "host.forward-port": { + "defaultMessage": "Puerto de Reenvío" + }, + "host.forward-scheme": { + "defaultMessage": "Esquema" + }, + "hosts": { + "defaultMessage": "Hosts" + }, + "http-only": { + "defaultMessage": "Solo HTTP" + }, + "lets-encrypt": { + "defaultMessage": "Let's Encrypt" + }, + "lets-encrypt-via-dns": { + "defaultMessage": "Let's Encrypt vía DNS" + }, + "lets-encrypt-via-http": { + "defaultMessage": "Let's Encrypt vía HTTP" + }, + "loading": { + "defaultMessage": "Cargando…" + }, + "login.title": { + "defaultMessage": "Inicia sesión en tu cuenta" + }, + "nginx-config.label": { + "defaultMessage": "Configuración Personalizada de Nginx" + }, + "nginx-config.placeholder": { + "defaultMessage": "# ¡Introduce aquí tu configuración personalizada de Nginx bajo tu propio riesgo!" + }, + "no-permission-error": { + "defaultMessage": "No tienes acceso para ver esto." + }, + "notfound.action": { + "defaultMessage": "Llévame al inicio" + }, + "notfound.content": { + "defaultMessage": "Lo sentimos, pero la página que buscas no fue encontrada" + }, + "notfound.title": { + "defaultMessage": "Ups… Has encontrado una página de error" + }, + "notification.error": { + "defaultMessage": "Error" + }, + "notification.object-deleted": { + "defaultMessage": "{object} ha sido eliminado" + }, + "notification.object-disabled": { + "defaultMessage": "{object} ha sido deshabilitado" + }, + "notification.object-enabled": { + "defaultMessage": "{object} ha sido habilitado" + }, + "notification.object-renewed": { + "defaultMessage": "{object} ha sido renovado" + }, + "notification.object-saved": { + "defaultMessage": "{object} ha sido guardado" + }, + "notification.success": { + "defaultMessage": "Éxito" + }, + "object.actions-title": { + "defaultMessage": "{object} #{id}" + }, + "object.add": { + "defaultMessage": "Añadir {object}" + }, + "object.delete": { + "defaultMessage": "Eliminar {object}" + }, + "object.delete.content": { + "defaultMessage": "¿Estás seguro de que quieres eliminar este {object}?" + }, + "object.edit": { + "defaultMessage": "Editar {object}" + }, + "object.empty": { + "defaultMessage": "No hay {objects}" + }, + "object.event.created": { + "defaultMessage": "{object} Creado" + }, + "object.event.deleted": { + "defaultMessage": "{object} Eliminado" + }, + "object.event.disabled": { + "defaultMessage": "{object} Deshabilitado" + }, + "object.event.enabled": { + "defaultMessage": "{object} Habilitado" + }, + "object.event.renewed": { + "defaultMessage": "{object} Renovado" + }, + "object.event.updated": { + "defaultMessage": "{object} Actualizado" + }, + "offline": { + "defaultMessage": "Desconectado" + }, + "online": { + "defaultMessage": "Conectado" + }, + "options": { + "defaultMessage": "Opciones" + }, + "password": { + "defaultMessage": "Contraseña" + }, + "password.generate": { + "defaultMessage": "Generar contraseña aleatoria" + }, + "password.hide": { + "defaultMessage": "Ocultar Contraseña" + }, + "password.show": { + "defaultMessage": "Mostrar Contraseña" + }, + "permissions.hidden": { + "defaultMessage": "Oculto" + }, + "permissions.manage": { + "defaultMessage": "Gestionar" + }, + "permissions.view": { + "defaultMessage": "Solo Ver" + }, + "permissions.visibility.all": { + "defaultMessage": "Todos los Elementos" + }, + "permissions.visibility.title": { + "defaultMessage": "Visibilidad de Elementos" + }, + "permissions.visibility.user": { + "defaultMessage": "Solo Elementos Creados" + }, + "proxy-host": { + "defaultMessage": "Host Proxy" + }, + "proxy-host.forward-host": { + "defaultMessage": "Nombre de Host / IP de Reenvío" + }, + "proxy-hosts": { + "defaultMessage": "Hosts Proxy" + }, + "proxy-hosts.count": { + "defaultMessage": "{count} {count, plural, one {Host Proxy} other {Hosts Proxy}}" + }, + "public": { + "defaultMessage": "Público" + }, + "redirection-host": { + "defaultMessage": "Host de Redirección" + }, + "redirection-host.forward-domain": { + "defaultMessage": "Dominio de Reenvío" + }, + "redirection-host.forward-http-code": { + "defaultMessage": "Código HTTP" + }, + "redirection-hosts": { + "defaultMessage": "Hosts de Redirección" + }, + "redirection-hosts.count": { + "defaultMessage": "{count} {count, plural, one {Host de Redirección} other {Hosts de Redirección}}" + }, + "role.admin": { + "defaultMessage": "Administrador" + }, + "role.standard-user": { + "defaultMessage": "Usuario Estándar" + }, + "save": { + "defaultMessage": "Guardar" + }, + "setting": { + "defaultMessage": "Configuración" + }, + "settings": { + "defaultMessage": "Configuración" + }, + "settings.default-site": { + "defaultMessage": "Sitio Predeterminado" + }, + "settings.default-site.404": { + "defaultMessage": "Página 404" + }, + "settings.default-site.444": { + "defaultMessage": "Sin Respuesta (444)" + }, + "settings.default-site.congratulations": { + "defaultMessage": "Página de Felicitaciones" + }, + "settings.default-site.description": { + "defaultMessage": "Qué mostrar cuando Nginx recibe un Host desconocido" + }, + "settings.default-site.html": { + "defaultMessage": "HTML Personalizado" + }, + "settings.default-site.html.placeholder": { + "defaultMessage": "" + }, + "settings.default-site.redirect": { + "defaultMessage": "Redirigir" + }, + "setup.preamble": { + "defaultMessage": "Comienza creando tu cuenta de administrador." + }, + "setup.title": { + "defaultMessage": "¡Bienvenido!" + }, + "sign-in": { + "defaultMessage": "Iniciar Sesión" + }, + "ssl-certificate": { + "defaultMessage": "Certificado SSL" + }, + "stream": { + "defaultMessage": "Stream" + }, + "stream.forward-host": { + "defaultMessage": "Host de Reenvío" + }, + "stream.incoming-port": { + "defaultMessage": "Puerto de Entrada" + }, + "streams": { + "defaultMessage": "Streams" + }, + "streams.count": { + "defaultMessage": "{count} {count, plural, one {Stream} other {Streams}}" + }, + "streams.tcp": { + "defaultMessage": "TCP" + }, + "streams.udp": { + "defaultMessage": "UDP" + }, + "test": { + "defaultMessage": "Probar" + }, + "user": { + "defaultMessage": "Usuario" + }, + "user.change-password": { + "defaultMessage": "Cambiar Contraseña" + }, + "user.confirm-password": { + "defaultMessage": "Confirmar Contraseña" + }, + "user.current-password": { + "defaultMessage": "Contraseña Actual" + }, + "user.edit-profile": { + "defaultMessage": "Editar Perfil" + }, + "user.full-name": { + "defaultMessage": "Nombre Completo" + }, + "user.login-as": { + "defaultMessage": "Iniciar sesión como {name}" + }, + "user.logout": { + "defaultMessage": "Cerrar Sesión" + }, + "user.new-password": { + "defaultMessage": "Nueva Contraseña" + }, + "user.nickname": { + "defaultMessage": "Apodo" + }, + "user.set-password": { + "defaultMessage": "Establecer Contraseña" + }, + "user.set-permissions": { + "defaultMessage": "Establecer Permisos para {name}" + }, + "user.switch-dark": { + "defaultMessage": "Cambiar a modo Oscuro" + }, + "user.switch-light": { + "defaultMessage": "Cambiar a modo Claro" + }, + "username": { + "defaultMessage": "Nombre de Usuario" + }, + "users": { + "defaultMessage": "Usuarios" + } } From ff792f76affec6ae22e1f9e29b95ce465e60f379 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 12 Nov 2025 07:32:34 +0100 Subject: [PATCH 28/42] Add translation for 'Renew Certificate' in de.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix: Add missing translation für renew Certificate --- frontend/src/locale/src/de.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frontend/src/locale/src/de.json b/frontend/src/locale/src/de.json index 0fe9f5f7..9b7414e9 100644 --- a/frontend/src/locale/src/de.json +++ b/frontend/src/locale/src/de.json @@ -98,6 +98,9 @@ "certificate.not-in-use": { "defaultMessage": "Nicht in Benutzung" }, + "certificate.renew": { + "defaultMessage": "Renew Certificate" + }, "certificates": { "defaultMessage": "Zertifikate" }, From e52975bf6c69e1b1bc2b6e25451e47c173f10402 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 12 Nov 2025 07:34:42 +0100 Subject: [PATCH 29/42] Translate 'Renew Certificate' to German Fix: add missing translation for renew certificates --- frontend/src/locale/src/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/locale/src/de.json b/frontend/src/locale/src/de.json index 9b7414e9..561ef82b 100644 --- a/frontend/src/locale/src/de.json +++ b/frontend/src/locale/src/de.json @@ -99,7 +99,7 @@ "defaultMessage": "Nicht in Benutzung" }, "certificate.renew": { - "defaultMessage": "Renew Certificate" + "defaultMessage": "Zertifikat erneuern" }, "certificates": { "defaultMessage": "Zertifikate" From 86c7cbddab57b5f7780ee69da7f09cc2e7a4ca8b Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 12 Nov 2025 07:34:44 +0100 Subject: [PATCH 30/42] Add certificate renewal message in German locale Fix: add missing translation for renew certificates --- frontend/src/locale/lang/de.json | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/locale/lang/de.json b/frontend/src/locale/lang/de.json index 64ba15fa..2541fe9c 100644 --- a/frontend/src/locale/lang/de.json +++ b/frontend/src/locale/lang/de.json @@ -32,6 +32,7 @@ "certificate.none.subtitle.for-http": "Dieser Host verwendet kein HTTPS.", "certificate.none.title": "Kein", "certificate.not-in-use": "Nicht in Benutzung", + "certificate.renew": "Zertifikat erneuern", "certificates": "Zertifikate", "certificates.custom": "Benutzerdefiniertes Zertifikat", "certificates.custom.warning": "Mit einem Passwort geschützte Schlüsseldateien werden nicht unterstützt.", From f36d4e6906a13c318666736ecd8d352a6b177195 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 12 Nov 2025 07:47:06 +0100 Subject: [PATCH 31/42] Fix: CustomCertificateModal Wrong displayname Fix: https://github.com/NginxProxyManager/nginx-proxy-manager/issues/4912 Wrong Locale for Custom --- frontend/src/modals/CustomCertificateModal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/modals/CustomCertificateModal.tsx b/frontend/src/modals/CustomCertificateModal.tsx index 7fe2f4bd..deab1c52 100644 --- a/frontend/src/modals/CustomCertificateModal.tsx +++ b/frontend/src/modals/CustomCertificateModal.tsx @@ -74,7 +74,7 @@ const CustomCertificateModal = EasyModal.create(({ visible, remove }: InnerModal
- + From 06d7db43f75b612b3379499d12e66d5a3129ee49 Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Wed, 12 Nov 2025 18:59:37 +1000 Subject: [PATCH 32/42] Fix Russion locale, compiled file was comitted without a source file --- frontend/check-locales.cjs | 1 + frontend/src/locale/lang/lang-list.json | 2 +- frontend/src/locale/lang/ru.json | 3 +- frontend/src/locale/src/HelpDoc/index.ts | 12 +- frontend/src/locale/src/lang-list.json | 3 + frontend/src/locale/src/ru.json | 644 +++++++++++++++++++++++ 6 files changed, 654 insertions(+), 11 deletions(-) create mode 100644 frontend/src/locale/src/ru.json diff --git a/frontend/check-locales.cjs b/frontend/check-locales.cjs index 3a6ecff4..7cd04420 100755 --- a/frontend/check-locales.cjs +++ b/frontend/check-locales.cjs @@ -10,6 +10,7 @@ const allLocales = [ ["en", "en-US"], ["es", "es-ES"], ["de", "de-DE"], + ["ru", "ru-RU"], ]; const ignoreUnused = [ diff --git a/frontend/src/locale/lang/lang-list.json b/frontend/src/locale/lang/lang-list.json index 253ab4ef..6338528b 100644 --- a/frontend/src/locale/lang/lang-list.json +++ b/frontend/src/locale/lang/lang-list.json @@ -1,6 +1,6 @@ { - "locale-en-US": "English", "locale-de-DE": "German", + "locale-en-US": "English", "locale-es-ES": "Español", "locale-ja-JP": "日本語", "locale-ru-RU": "Русский" diff --git a/frontend/src/locale/lang/ru.json b/frontend/src/locale/lang/ru.json index a6360a67..78b553dd 100644 --- a/frontend/src/locale/lang/ru.json +++ b/frontend/src/locale/lang/ru.json @@ -62,7 +62,7 @@ "column.email": "Email", "column.event": "Событие", "column.expires": "Истекает", - "column.http-code": "Access", + "column.http-code": "HTTP Code", "column.incoming-port": "Входящий порт", "column.name": "Имя", "column.protocol": "Протокол", @@ -169,6 +169,7 @@ "public": "Публичный", "redirection-host": "Редирект-хост", "redirection-host.forward-domain": "Домен перенаправления", + "redirection-host.forward-http-code": "HTTP Code", "redirection-hosts": "Редирект-хосты", "redirection-hosts.count": "{count} {count, plural, one {редирект-хост} few {редирект-хоста} many {редирект-хостов} other {редирект-хоста}}", "role.admin": "Администратор", diff --git a/frontend/src/locale/src/HelpDoc/index.ts b/frontend/src/locale/src/HelpDoc/index.ts index 5ba9396b..8adaa190 100644 --- a/frontend/src/locale/src/HelpDoc/index.ts +++ b/frontend/src/locale/src/HelpDoc/index.ts @@ -1,5 +1,5 @@ -import * as en from "./en/index"; import * as de from "./de/index"; +import * as en from "./en/index"; import * as ja from "./ja/index"; const items: any = { en, de, ja }; @@ -7,17 +7,11 @@ const items: any = { en, de, ja }; const fallbackLang = "en"; export const getHelpFile = (lang: string, section: string): string => { - if ( - typeof items[lang] !== "undefined" && - typeof items[lang][section] !== "undefined" - ) { + if (typeof items[lang] !== "undefined" && typeof items[lang][section] !== "undefined") { return items[lang][section].default; } // Fallback to English - if ( - typeof items[fallbackLang] !== "undefined" && - typeof items[fallbackLang][section] !== "undefined" - ) { + if (typeof items[fallbackLang] !== "undefined" && typeof items[fallbackLang][section] !== "undefined") { return items[fallbackLang][section].default; } throw new Error(`Cannot load help doc for ${lang}-${section}`); diff --git a/frontend/src/locale/src/lang-list.json b/frontend/src/locale/src/lang-list.json index a068a5d1..8bf2a596 100644 --- a/frontend/src/locale/src/lang-list.json +++ b/frontend/src/locale/src/lang-list.json @@ -10,5 +10,8 @@ }, "locale-ja-JP": { "defaultMessage": "日本語" + }, + "locale-ru-RU": { + "defaultMessage": "Русский" } } diff --git a/frontend/src/locale/src/ru.json b/frontend/src/locale/src/ru.json new file mode 100644 index 00000000..3fa25ff3 --- /dev/null +++ b/frontend/src/locale/src/ru.json @@ -0,0 +1,644 @@ +{ + "access-list": { + "defaultMessage": "Список доступа" + }, + "access-list.access-count": { + "defaultMessage": "{count} {count, plural, one {правило} few {правила} many {правил} other {правила}}" + }, + "access-list.auth-count": { + "defaultMessage": "{count} {count, plural, one {пользователь} few {пользователя} many {пользователей} other {пользователя}}" + }, + "access-list.help-rules-last": { + "defaultMessage": "When at least 1 rule exists, this deny all rule will be added last" + }, + "access-list.help.rules-order": { + "defaultMessage": "Note that the allow and deny directives will be applied in the order they are defined." + }, + "access-list.pass-auth": { + "defaultMessage": "Pass Auth to Upstream" + }, + "access-list.public": { + "defaultMessage": "Публично доступен" + }, + "access-list.public.subtitle": { + "defaultMessage": "Без аутентификации" + }, + "access-list.satisfy-any": { + "defaultMessage": "Любое совпадение" + }, + "access-list.subtitle": { + "defaultMessage": "{users} {users, plural, one {User} other {Users}}, {rules} {rules, plural, one {Rule} other {Rules}} - Created: {date}" + }, + "access-lists": { + "defaultMessage": "Списки доступа" + }, + "action.add": { + "defaultMessage": "Добавить" + }, + "action.add-location": { + "defaultMessage": "Добавить маршрут" + }, + "action.close": { + "defaultMessage": "Закрыть" + }, + "action.delete": { + "defaultMessage": "Удалить" + }, + "action.disable": { + "defaultMessage": "Выключить" + }, + "action.download": { + "defaultMessage": "Скачать" + }, + "action.edit": { + "defaultMessage": "Изменить" + }, + "action.enable": { + "defaultMessage": "Включить" + }, + "action.permissions": { + "defaultMessage": "Разрешения" + }, + "action.renew": { + "defaultMessage": "Продлить" + }, + "action.view-details": { + "defaultMessage": "Просмотреть детали" + }, + "auditlogs": { + "defaultMessage": "Журнал аудита" + }, + "cancel": { + "defaultMessage": "Отменить" + }, + "certificate": { + "defaultMessage": "Сертификат" + }, + "certificate.custom-certificate": { + "defaultMessage": "Сертификат" + }, + "certificate.custom-certificate-key": { + "defaultMessage": "Ключ сертификата" + }, + "certificate.custom-intermediate": { + "defaultMessage": "Промежуточный сертификат" + }, + "certificate.in-use": { + "defaultMessage": "Используется" + }, + "certificate.none.subtitle": { + "defaultMessage": "Сертификат не назначен" + }, + "certificate.none.subtitle.for-http": { + "defaultMessage": "Этот хост не будет использовать HTTPS" + }, + "certificate.none.title": { + "defaultMessage": "Нет" + }, + "certificate.not-in-use": { + "defaultMessage": "Не используется" + }, + "certificate.renew": { + "defaultMessage": "Продлить сертификат" + }, + "certificates": { + "defaultMessage": "Сертификаты" + }, + "certificates.custom": { + "defaultMessage": "Свой сертификат" + }, + "certificates.custom.warning": { + "defaultMessage": "Файлы ключей, защищённые паролем, не поддерживаются." + }, + "certificates.dns.credentials": { + "defaultMessage": "Credentials File Content" + }, + "certificates.dns.credentials-note": { + "defaultMessage": "This plugin requires a configuration file containing an API token or other credentials for your provider" + }, + "certificates.dns.credentials-warning": { + "defaultMessage": "This data will be stored as plaintext in the database and in a file!" + }, + "certificates.dns.propagation-seconds": { + "defaultMessage": "Propagation Seconds" + }, + "certificates.dns.propagation-seconds-note": { + "defaultMessage": "Leave empty to use the plugins default value. Number of seconds to wait for DNS propagation." + }, + "certificates.dns.provider": { + "defaultMessage": "DNS-провайдер" + }, + "certificates.dns.warning": { + "defaultMessage": "This section requires some knowledge about Certbot and its DNS plugins. Please consult the respective plugins documentation." + }, + "certificates.http.reachability-404": { + "defaultMessage": "There is a server found at this domain but it does not seem to be Nginx Proxy Manager. Please make sure your domain points to the IP where your NPM instance is running." + }, + "certificates.http.reachability-failed-to-check": { + "defaultMessage": "Failed to check the reachability due to a communication error with site24x7.com." + }, + "certificates.http.reachability-not-resolved": { + "defaultMessage": "There is no server available at this domain. Please make sure your domain exists and points to the IP where your NPM instance is running and if necessary port 80 is forwarded in your router." + }, + "certificates.http.reachability-ok": { + "defaultMessage": "Your server is reachable and creating certificates should be possible." + }, + "certificates.http.reachability-other": { + "defaultMessage": "There is a server found at this domain but it returned an unexpected status code {code}. Is it the NPM server? Please make sure your domain points to the IP where your NPM instance is running." + }, + "certificates.http.reachability-wrong-data": { + "defaultMessage": "There is a server found at this domain but it returned an unexpected data. Is it the NPM server? Please make sure your domain points to the IP where your NPM instance is running." + }, + "certificates.http.test-results": { + "defaultMessage": "Результаты проверки" + }, + "certificates.http.warning": { + "defaultMessage": "These domains must be already configured to point to this installation." + }, + "certificates.request.subtitle": { + "defaultMessage": "через Let's Encrypt" + }, + "certificates.request.title": { + "defaultMessage": "Получить новый сертификат" + }, + "column.access": { + "defaultMessage": "Доступ" + }, + "column.authorization": { + "defaultMessage": "Авторизация" + }, + "column.authorizations": { + "defaultMessage": "Авторизации" + }, + "column.custom-locations": { + "defaultMessage": "Свои маршруты" + }, + "column.destination": { + "defaultMessage": "Назначение" + }, + "column.details": { + "defaultMessage": "Детали" + }, + "column.email": { + "defaultMessage": "Email" + }, + "column.event": { + "defaultMessage": "Событие" + }, + "column.expires": { + "defaultMessage": "Истекает" + }, + "column.http-code": { + "defaultMessage": "HTTP Code" + }, + "column.incoming-port": { + "defaultMessage": "Входящий порт" + }, + "column.name": { + "defaultMessage": "Имя" + }, + "column.protocol": { + "defaultMessage": "Протокол" + }, + "column.provider": { + "defaultMessage": "Провайдер" + }, + "column.roles": { + "defaultMessage": "Роли" + }, + "column.rules": { + "defaultMessage": "Правила" + }, + "column.satisfy": { + "defaultMessage": "Совпадение" + }, + "column.satisfy-all": { + "defaultMessage": "Все" + }, + "column.satisfy-any": { + "defaultMessage": "Любое" + }, + "column.scheme": { + "defaultMessage": "Схема" + }, + "column.source": { + "defaultMessage": "Источник" + }, + "column.ssl": { + "defaultMessage": "SSL" + }, + "column.status": { + "defaultMessage": "Статус" + }, + "created-on": { + "defaultMessage": "Создан: {date}" + }, + "dashboard": { + "defaultMessage": "Обзор" + }, + "dead-host": { + "defaultMessage": "404-хост" + }, + "dead-hosts": { + "defaultMessage": "404-хосты" + }, + "dead-hosts.count": { + "defaultMessage": "{count} {count, plural, one {404-хост} few {404-хоста} many {404-хостов} other {404-хоста}}" + }, + "disabled": { + "defaultMessage": "Выключен" + }, + "domain-names": { + "defaultMessage": "Домены" + }, + "domain-names.max": { + "defaultMessage": "Максимум доменов: {count}" + }, + "domain-names.placeholder": { + "defaultMessage": "Начните ввод, чтобы добавить домен..." + }, + "domain-names.wildcards-not-permitted": { + "defaultMessage": "Wildcard'ы не разрешены для этого типа" + }, + "domain-names.wildcards-not-supported": { + "defaultMessage": "Wildcard'ы не поддерживаются этим CA" + }, + "domains.force-ssl": { + "defaultMessage": "Всегда SSL" + }, + "domains.hsts-enabled": { + "defaultMessage": "Поддержка HSTS" + }, + "domains.hsts-subdomains": { + "defaultMessage": "Поддомены HSTS" + }, + "domains.http2-support": { + "defaultMessage": "Поддержка HTTP/2" + }, + "domains.use-dns": { + "defaultMessage": "Использовать DNS Challenge" + }, + "email-address": { + "defaultMessage": "Email-адрес" + }, + "empty-search": { + "defaultMessage": "Ничего не найдено" + }, + "empty-subtitle": { + "defaultMessage": "Почему бы не создать его?" + }, + "enabled": { + "defaultMessage": "Включен" + }, + "error.access.at-least-one": { + "defaultMessage": "Either one Authorization or one Access Rule is required" + }, + "error.access.duplicate-usernames": { + "defaultMessage": "Authorization Usernames must be unique" + }, + "error.invalid-auth": { + "defaultMessage": "Неверный email или пароль" + }, + "error.invalid-domain": { + "defaultMessage": "Неверный домен: {domain}" + }, + "error.invalid-email": { + "defaultMessage": "Неверный email-адрес" + }, + "error.max-character-length": { + "defaultMessage": "Maximum length is {max} character{max, plural, one {} other {s}}" + }, + "error.max-domains": { + "defaultMessage": "Слишком много доменов, максимум {max}" + }, + "error.maximum": { + "defaultMessage": "Максимум {max}" + }, + "error.min-character-length": { + "defaultMessage": "Minimum length is {min} character{min, plural, one {} other {s}}" + }, + "error.minimum": { + "defaultMessage": "Минимум {min}" + }, + "error.passwords-must-match": { + "defaultMessage": "Пароли должны совпадать" + }, + "error.required": { + "defaultMessage": "Обязательное поле" + }, + "expires.on": { + "defaultMessage": "Истекает: {date}" + }, + "footer.github-fork": { + "defaultMessage": "Fork me on Github" + }, + "host.flags.block-exploits": { + "defaultMessage": "Блокировать известные эксплойты" + }, + "host.flags.cache-assets": { + "defaultMessage": "Кэшировать ресурсы" + }, + "host.flags.preserve-path": { + "defaultMessage": "Сохранять путь" + }, + "host.flags.protocols": { + "defaultMessage": "Протоколы" + }, + "host.flags.websockets-upgrade": { + "defaultMessage": "Поддержка WebSocket" + }, + "host.forward-port": { + "defaultMessage": "Порт перенаправления" + }, + "host.forward-scheme": { + "defaultMessage": "Схема" + }, + "hosts": { + "defaultMessage": "Хосты" + }, + "http-only": { + "defaultMessage": "Только HTTP" + }, + "lets-encrypt": { + "defaultMessage": "Let's Encrypt" + }, + "lets-encrypt-via-dns": { + "defaultMessage": "Let's Encrypt через DNS" + }, + "lets-encrypt-via-http": { + "defaultMessage": "Let's Encrypt через HTTP" + }, + "loading": { + "defaultMessage": "Загрузка…" + }, + "login.title": { + "defaultMessage": "Авторизация" + }, + "nginx-config.label": { + "defaultMessage": "Своя Nginx-конфигурация" + }, + "nginx-config.placeholder": { + "defaultMessage": "# Введите здесь свою Nginx-конфигурацию, будьте осторожны!" + }, + "no-permission-error": { + "defaultMessage": "You do not have access to view this." + }, + "notfound.action": { + "defaultMessage": "Вернуться на главную" + }, + "notfound.content": { + "defaultMessage": "Извините, но страница, которую вы ищете, не найдена" + }, + "notfound.title": { + "defaultMessage": "Упс… Вы попали на страницу ошибки" + }, + "notification.error": { + "defaultMessage": "Ошибка" + }, + "notification.object-deleted": { + "defaultMessage": "{object} удален" + }, + "notification.object-disabled": { + "defaultMessage": "{object} выключен" + }, + "notification.object-enabled": { + "defaultMessage": "{object} включен" + }, + "notification.object-renewed": { + "defaultMessage": "{object} продлен" + }, + "notification.object-saved": { + "defaultMessage": "{object} сохранен" + }, + "notification.success": { + "defaultMessage": "Успешно" + }, + "object.actions-title": { + "defaultMessage": "{object} #{id}" + }, + "object.add": { + "defaultMessage": "Добавить {object}" + }, + "object.delete": { + "defaultMessage": "Удалить {object}" + }, + "object.delete.content": { + "defaultMessage": "Вы уверены, что хотите удалить {object}?" + }, + "object.edit": { + "defaultMessage": "Изменить {object}" + }, + "object.empty": { + "defaultMessage": "{objects} отстутствуют" + }, + "object.event.created": { + "defaultMessage": "{object} создан" + }, + "object.event.deleted": { + "defaultMessage": "{object} удален" + }, + "object.event.disabled": { + "defaultMessage": "{object} выключен" + }, + "object.event.enabled": { + "defaultMessage": "{object} включен" + }, + "object.event.renewed": { + "defaultMessage": "{object} продлен" + }, + "object.event.updated": { + "defaultMessage": "{object} обновлен" + }, + "offline": { + "defaultMessage": "Офлайн" + }, + "online": { + "defaultMessage": "Онлайн" + }, + "options": { + "defaultMessage": "Параметры" + }, + "password": { + "defaultMessage": "Пароль" + }, + "password.generate": { + "defaultMessage": "Сгенерировать случайный пароль" + }, + "password.hide": { + "defaultMessage": "Скрыть пароль" + }, + "password.show": { + "defaultMessage": "Показать пароль" + }, + "permissions.hidden": { + "defaultMessage": "Скрыто" + }, + "permissions.manage": { + "defaultMessage": "Управление" + }, + "permissions.view": { + "defaultMessage": "Только просмотр" + }, + "permissions.visibility.all": { + "defaultMessage": "Все элементы" + }, + "permissions.visibility.title": { + "defaultMessage": "Видимость элементов" + }, + "permissions.visibility.user": { + "defaultMessage": "Созданные элементы" + }, + "proxy-host": { + "defaultMessage": "Прокси-хост" + }, + "proxy-host.forward-host": { + "defaultMessage": "Хост / IP перенаправления" + }, + "proxy-hosts": { + "defaultMessage": "Прокси-хосты" + }, + "proxy-hosts.count": { + "defaultMessage": "{count} {count, plural, one {прокси-хост} few {прокси-хоста} many {прокси-хостов} other {прокси-хоста}}" + }, + "public": { + "defaultMessage": "Публичный" + }, + "redirection-host": { + "defaultMessage": "Редирект-хост" + }, + "redirection-host.forward-domain": { + "defaultMessage": "Домен перенаправления" + }, + "redirection-host.forward-http-code": { + "defaultMessage": "HTTP Code" + }, + "redirection-hosts": { + "defaultMessage": "Редирект-хосты" + }, + "redirection-hosts.count": { + "defaultMessage": "{count} {count, plural, one {редирект-хост} few {редирект-хоста} many {редирект-хостов} other {редирект-хоста}}" + }, + "role.admin": { + "defaultMessage": "Администратор" + }, + "role.standard-user": { + "defaultMessage": "Обычный пользователь" + }, + "save": { + "defaultMessage": "Сохранить" + }, + "setting": { + "defaultMessage": "Настройка" + }, + "settings": { + "defaultMessage": "Настройки" + }, + "settings.default-site": { + "defaultMessage": "Страница по умолчанию" + }, + "settings.default-site.404": { + "defaultMessage": "404-страница" + }, + "settings.default-site.444": { + "defaultMessage": "Нет ответа (444)" + }, + "settings.default-site.congratulations": { + "defaultMessage": "Страница поздравления" + }, + "settings.default-site.description": { + "defaultMessage": "Что показывать, когда Nginx получает неизвестный хост" + }, + "settings.default-site.html": { + "defaultMessage": "Свой HTML" + }, + "settings.default-site.html.placeholder": { + "defaultMessage": "" + }, + "settings.default-site.redirect": { + "defaultMessage": "Перенаправление" + }, + "setup.preamble": { + "defaultMessage": "Начните с создания учётной записи администратора." + }, + "setup.title": { + "defaultMessage": "Добро пожаловать!" + }, + "sign-in": { + "defaultMessage": "Войти" + }, + "ssl-certificate": { + "defaultMessage": "SSL-сертификат" + }, + "stream": { + "defaultMessage": "Поток" + }, + "stream.forward-host": { + "defaultMessage": "Хост перенаправления" + }, + "stream.incoming-port": { + "defaultMessage": "Входящий порт" + }, + "streams": { + "defaultMessage": "Потоки" + }, + "streams.count": { + "defaultMessage": "{count} {count, plural, one {поток} few {потока} many {потоков} other {потока}}" + }, + "streams.tcp": { + "defaultMessage": "TCP" + }, + "streams.udp": { + "defaultMessage": "UDP" + }, + "test": { + "defaultMessage": "Проверить" + }, + "user": { + "defaultMessage": "Пользователь" + }, + "user.change-password": { + "defaultMessage": "Изменить пароль" + }, + "user.confirm-password": { + "defaultMessage": "Повторите пароль" + }, + "user.current-password": { + "defaultMessage": "Текущий пароль" + }, + "user.edit-profile": { + "defaultMessage": "Изменить профиль" + }, + "user.full-name": { + "defaultMessage": "Полное имя" + }, + "user.login-as": { + "defaultMessage": "Войти как {name}" + }, + "user.logout": { + "defaultMessage": "Выйти" + }, + "user.new-password": { + "defaultMessage": "Новый пароль" + }, + "user.nickname": { + "defaultMessage": "Псевдоним" + }, + "user.set-password": { + "defaultMessage": "Задать пароль" + }, + "user.set-permissions": { + "defaultMessage": "Set Permissions for {name}" + }, + "user.switch-dark": { + "defaultMessage": "Включить тёмную тему" + }, + "user.switch-light": { + "defaultMessage": "Включить светлую тему" + }, + "username": { + "defaultMessage": "Логин" + }, + "users": { + "defaultMessage": "Пользователи" + } +} From 1a36bdce7695d663362284a1f32820eeecd96bd3 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 12 Nov 2025 10:47:51 +0100 Subject: [PATCH 33/42] fix: Grammatical change fix: Grammatical change --- frontend/src/locale/lang/de.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/locale/lang/de.json b/frontend/src/locale/lang/de.json index 8e308f0b..316708b8 100644 --- a/frontend/src/locale/lang/de.json +++ b/frontend/src/locale/lang/de.json @@ -140,7 +140,7 @@ "object.actions-title": "{object} #{id}", "object.add": "{object} hinzufügen", "object.delete": "{object} löschen", - "object.delete.content": "Bist du dir sicher das du diese(n) {object} löschen möchtest?", + "object.delete.content": "{object} wirklich löschen?", "object.edit": "{object} bearbeiten", "object.empty": "Keine {objects} vorhanden", "object.event.created": "{object} erstellt", @@ -213,4 +213,4 @@ "user.switch-light": "Zum Light Mode wechslen", "username": "Benutzername", "users": "Benutzer" -} \ No newline at end of file +} From 0344bb3c19afbb52e2649305fae09daae7d48e95 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 12 Nov 2025 10:47:53 +0100 Subject: [PATCH 34/42] fix: Grammatical change fix: Grammatical change --- frontend/src/locale/src/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/locale/src/de.json b/frontend/src/locale/src/de.json index 561ef82b..d36b259d 100644 --- a/frontend/src/locale/src/de.json +++ b/frontend/src/locale/src/de.json @@ -423,7 +423,7 @@ "defaultMessage": "{object} löschen" }, "object.delete.content": { - "defaultMessage": "Bist du dir sicher das du diese(n) {object} löschen möchtest?" + "defaultMessage": "{object} wirklich löschen?" }, "object.edit": { "defaultMessage": "{object} bearbeiten" From 8460b285979a94ba67b508daf84cd3b1bbea5e80 Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Wed, 12 Nov 2025 20:13:18 +1000 Subject: [PATCH 35/42] Bump version --- .version | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.version b/.version index a1a4224d..965a689e 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -2.13.3 +2.13.4 diff --git a/README.md b/README.md index 6b3d1a8b..2a4c8171 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@



- + From 66aac3eb3e6d7d81d8e3b3834e1851c69c44bc2f Mon Sep 17 00:00:00 2001 From: firfe Date: Tue, 11 Nov 2025 23:56:26 +0800 Subject: [PATCH 36/42] =?UTF-8?q?Add=20Chinese=20=E4=B8=AD=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/locale/IntlProvider.tsx | 11 +- frontend/src/locale/lang/de.json | 2 +- frontend/src/locale/lang/lang-list.json | 3 +- frontend/src/locale/lang/zh.json | 215 ++++++ .../src/locale/src/HelpDoc/zh/AccessLists.md | 7 + .../src/locale/src/HelpDoc/zh/Certificates.md | 21 + .../src/locale/src/HelpDoc/zh/DeadHosts.md | 7 + .../src/locale/src/HelpDoc/zh/ProxyHosts.md | 7 + .../locale/src/HelpDoc/zh/RedirectionHosts.md | 5 + frontend/src/locale/src/HelpDoc/zh/Streams.md | 5 + frontend/src/locale/src/HelpDoc/zh/index.ts | 6 + frontend/src/locale/src/lang-list.json | 3 + frontend/src/locale/src/zh.json | 641 ++++++++++++++++++ 13 files changed, 929 insertions(+), 4 deletions(-) mode change 100644 => 100755 frontend/src/locale/IntlProvider.tsx create mode 100755 frontend/src/locale/lang/zh.json create mode 100755 frontend/src/locale/src/HelpDoc/zh/AccessLists.md create mode 100755 frontend/src/locale/src/HelpDoc/zh/Certificates.md create mode 100755 frontend/src/locale/src/HelpDoc/zh/DeadHosts.md create mode 100755 frontend/src/locale/src/HelpDoc/zh/ProxyHosts.md create mode 100755 frontend/src/locale/src/HelpDoc/zh/RedirectionHosts.md create mode 100755 frontend/src/locale/src/HelpDoc/zh/Streams.md create mode 100755 frontend/src/locale/src/HelpDoc/zh/index.ts mode change 100644 => 100755 frontend/src/locale/src/lang-list.json create mode 100755 frontend/src/locale/src/zh.json diff --git a/frontend/src/locale/IntlProvider.tsx b/frontend/src/locale/IntlProvider.tsx old mode 100644 new mode 100755 index 1162a991..14657fcb --- a/frontend/src/locale/IntlProvider.tsx +++ b/frontend/src/locale/IntlProvider.tsx @@ -1,10 +1,11 @@ import { createIntl, createIntlCache } from "react-intl"; -import langEn from "./lang/en.json"; import langDe from "./lang/de.json"; +import langEn from "./lang/en.json"; import langEs from "./lang/es.json"; import langJa from "./lang/ja.json"; -import langRu from "./lang/ru.json"; import langList from "./lang/lang-list.json"; +import langRu from "./lang/ru.json"; +import langZh from "./lang/zh.json"; // first item of each array should be the language code, // not the country code @@ -15,6 +16,7 @@ const localeOptions = [ ["es", "es-ES"], ["ja", "ja-JP"], ["ru", "ru-RU"], + ["zh", "zh-CN"], ]; const loadMessages = (locale?: string): typeof langList & typeof langEn => { @@ -28,6 +30,8 @@ const loadMessages = (locale?: string): typeof langList & typeof langEn => { return Object.assign({}, langList, langEn, langJa); case "ru": return Object.assign({}, langList, langEn, langRu); + case "zh": + return Object.assign({}, langList, langEn, langZh); default: return Object.assign({}, langList, langEn); } @@ -47,6 +51,9 @@ const getFlagCodeForLocale = (locale?: string) => { case "ru-RU": case "ru": return "RU"; + case "zh": + case "zh-CN": + return "CN"; default: return "EN"; } diff --git a/frontend/src/locale/lang/de.json b/frontend/src/locale/lang/de.json index 316708b8..b6b80eab 100644 --- a/frontend/src/locale/lang/de.json +++ b/frontend/src/locale/lang/de.json @@ -213,4 +213,4 @@ "user.switch-light": "Zum Light Mode wechslen", "username": "Benutzername", "users": "Benutzer" -} +} \ No newline at end of file diff --git a/frontend/src/locale/lang/lang-list.json b/frontend/src/locale/lang/lang-list.json index 6338528b..7d9bc214 100644 --- a/frontend/src/locale/lang/lang-list.json +++ b/frontend/src/locale/lang/lang-list.json @@ -3,5 +3,6 @@ "locale-en-US": "English", "locale-es-ES": "Español", "locale-ja-JP": "日本語", - "locale-ru-RU": "Русский" + "locale-ru-RU": "Русский", + "locale-zh-CN": "中文" } \ No newline at end of file diff --git a/frontend/src/locale/lang/zh.json b/frontend/src/locale/lang/zh.json new file mode 100755 index 00000000..61763aa4 --- /dev/null +++ b/frontend/src/locale/lang/zh.json @@ -0,0 +1,215 @@ +{ + "access-list": "通信规则", + "access-list.access-count": "{count} 条规则", + "access-list.auth-count": "{count} 个用户", + "access-list.help-rules-last": "当至少存在1条规则时,此拒绝所有规则将被添加到最后", + "access-list.help.rules-order": " 允许 (allow) 和禁止 (deny) 规则将按照它们定义的顺序执行。", + "access-list.pass-auth": "将认证传递给上游", + "access-list.public": "公开可访问", + "access-list.public.subtitle": "无需基本认证", + "access-list.satisfy-any": "满足任意条件", + "access-list.subtitle": "{users} 个用户, {rules} 条规则 - 创建时间: {date}", + "access-lists": "通信规则", + "action.add": "添加", + "action.add-location": "添加路径规则(Location)", + "action.close": "关闭", + "action.delete": "删除", + "action.disable": "禁用", + "action.download": "下载", + "action.edit": "编辑", + "action.enable": "启用", + "action.permissions": "权限", + "action.renew": "续期", + "action.view-details": "查看详情", + "auditlogs": "审计日志", + "cancel": "取消", + "certificate": "证书", + "certificate.custom-certificate": "证书", + "certificate.custom-certificate-key": "证书密钥", + "certificate.custom-intermediate": "中间证书", + "certificate.in-use": "使用中", + "certificate.none.subtitle": "未分配证书", + "certificate.none.subtitle.for-http": "此主机将不使用 HTTPS", + "certificate.none.title": "无", + "certificate.not-in-use": "未使用", + "certificate.renew": "续期证书", + "certificates": "证书列表", + "certificates.custom": "自定义证书", + "certificates.custom.warning": "不支持受密码保护的密钥文件。", + "certificates.dns.credentials": "凭据文件内容", + "certificates.dns.credentials-note": "此插件需要一个包含 API 令牌或提供商其他凭证的配置文件", + "certificates.dns.credentials-warning": "此数据将以明文形式存储在数据库和文件中!", + "certificates.dns.propagation-seconds": "传播时间 (秒)", + "certificates.dns.propagation-seconds-note": "留空以使用插件默认值。等待DNS传播的秒数。", + "certificates.dns.provider": "DNS 提供商", + "certificates.dns.warning": "本节需要您具备一些关于 Certbot 及其 DNS 插件的知识,请参阅相应插件的官方文档。", + "certificates.http.reachability-404": "在此域名下找到了一个服务器,但它似乎不是 Nginx 代理管理器。请确保您的域名指向 NPM 实例运行的 IP 地址。", + "certificates.http.reachability-failed-to-check": "由于与site24x7.com通信错误,无法检查可达性。", + "certificates.http.reachability-not-resolved": "此域名下没有可用的服务器。请确保您的域名存在并指向NPM实例运行的 IP 地址,如有必要,请在路由器中转发 80 端口。", + "certificates.http.reachability-ok": "您的服务器可以访问,应该可以创建证书。", + "certificates.http.reachability-other": "在此域名下找到了一个服务器,但它返回了意外的状态码 {code}。它是 NPM 服务器吗?请确保您的域名指向NPM实例运行的 IP 地址。", + "certificates.http.reachability-wrong-data": "在此域名下找到了一个服务器,但它返回了意外的数据。它是 NPM 服务器吗?请确保您的域名指向 NPM 实例运行的 IP 地址。", + "certificates.http.test-results": "测试结果", + "certificates.http.warning": "这些域名必须配置为指向本设备。", + "certificates.request.subtitle": "使用 Let's Encrypt", + "certificates.request.title": "申请新证书", + "column.access": "访问", + "column.authorization": "授权", + "column.authorizations": "授权列表", + "column.custom-locations": "自定义路径规则 (Locations)", + "column.destination": "目标", + "column.details": "详情", + "column.email": "邮箱", + "column.event": "事件", + "column.expires": "过期时间", + "column.http-code": "访问", + "column.incoming-port": "入站端口", + "column.name": "名称", + "column.protocol": "协议", + "column.provider": "提供商", + "column.roles": "角色", + "column.rules": "规则", + "column.satisfy": "满足", + "column.satisfy-all": "全部", + "column.satisfy-any": "任意", + "column.scheme": "协议", + "column.source": "来源", + "column.ssl": "SSL", + "column.status": "状态", + "created-on": "创建时间: {date}", + "dashboard": "仪表板", + "dead-host": "错误页面", + "dead-hosts": "错误页面列表", + "dead-hosts.count": "{count} 个错误页面列表", + "disabled": "已禁用", + "domain-names": "域名", + "domain-names.max": "{count} 个最多域名数量", + "domain-names.placeholder": "开始输入以添加域名...", + "domain-names.wildcards-not-permitted": "此类型不允许使用通配符", + "domain-names.wildcards-not-supported": "此 CA 不支持通配符", + "domains.force-ssl": "强制 SSL", + "domains.hsts-enabled": "HSTS 已启用", + "domains.hsts-subdomains": "HSTS 子域名", + "domains.http2-support": "HTTP/2 支持", + "domains.use-dns": "使用DNS验证", + "email-address": "邮箱地址", + "empty-search": "未找到结果", + "empty-subtitle": "为什么不由您来创建一个呢?", + "enabled": "已启用", + "error.access.at-least-one": "需要至少一个授权或访问规则", + "error.access.duplicate-usernames": "授权用户名必须唯一", + "error.invalid-auth": "无效的邮箱或密码", + "error.invalid-domain": "无效的域名: {domain}", + "error.invalid-email": "无效的邮箱地址", + "error.max-character-length": "最大长度为 {max} 个字符", + "error.max-domains": "域名过多,最多为 {max} 个", + "error.maximum": "最大值为 {max}", + "error.min-character-length": "最小长度为 {min} 个字符", + "error.minimum": "最小值为 {min}", + "error.passwords-must-match": "密码必须匹配", + "error.required": "此项为必填项", + "expires.on": "过期时间: {date}", + "footer.github-fork": "在 Github 上复刻 (For) 本项目", + "host.flags.block-exploits": "阻止常见攻击", + "host.flags.cache-assets": "缓存资源", + "host.flags.preserve-path": "保留路径", + "host.flags.protocols": "协议", + "host.flags.websockets-upgrade": "Websockets 支持", + "host.forward-port": "转发端口", + "host.forward-scheme": "协议", + "hosts": "主机列表", + "http-only": "仅 HTTP", + "lets-encrypt": "Let's Encrypt", + "lets-encrypt-via-dns": "Let's Encrypt DNS 验证", + "lets-encrypt-via-http": "Let's Encrypt HTTP 验证", + "loading": "加载中···", + "login.title": "登录您的账户", + "nginx-config.label": "自定义 Nginx 配置", + "nginx-config.placeholder": "# 在此输入您的自定义 Nginx 配置,风险自负!", + "no-permission-error": "您无权查看此内容。", + "notfound.action": "返回首页", + "notfound.content": "很抱歉,您要查找的页面未找到", + "notfound.title": "糟糕...您刚刚找到了一个错误页面", + "notification.error": "错误", + "notification.object-deleted": "{object} 已被删除", + "notification.object-disabled": "{object} 已被禁用", + "notification.object-enabled": "{object} 已被启用", + "notification.object-renewed": "{object} 已续期", + "notification.object-saved": "{object} 已保存", + "notification.success": "成功", + "object.actions-title": "{object} #{id}", + "object.add": "添加 {object}", + "object.delete": "删除 {object}", + "object.delete.content": "您确定要删除 {object} 吗?", + "object.edit": "编辑 {object}", + "object.empty": "没有 {objects}", + "object.event.created": "已创建 {object}", + "object.event.deleted": "已删除 {object}", + "object.event.disabled": "已禁用 {object}", + "object.event.enabled": "已启用 {object}", + "object.event.renewed": "已续期 {object}", + "object.event.updated": "已更新 {object}", + "offline": "离线", + "online": "在线", + "options": "选项", + "password": "密码", + "password.generate": "生成随机密码", + "password.hide": "隐藏密码", + "password.show": "显示密码", + "permissions.hidden": "隐藏", + "permissions.manage": "管理", + "permissions.view": "仅查看", + "permissions.visibility.all": "所有项目", + "permissions.visibility.title": "项目可见性", + "permissions.visibility.user": "仅创建的项目", + "proxy-host": "代理服务", + "proxy-host.forward-host": "转发主机名 / IP", + "proxy-hosts": "代理服务列表", + "proxy-hosts.count": "{count} 个代理服务", + "public": "公开", + "redirection-host": "重定向主机", + "redirection-host.forward-domain": "转发域名", + "redirection-hosts": "重定向主机列表", + "redirection-hosts.count": "{count} 个重定向主机", + "role.admin": "管理员", + "role.standard-user": "标准用户", + "save": "保存", + "setting": "设置", + "settings": "设置列表", + "settings.default-site": "默认站点", + "settings.default-site.404": "错误页面", + "settings.default-site.444": "无响应 (444)", + "settings.default-site.congratulations": "欢迎页面", + "settings.default-site.description": "当 Nginx 遇到未知主机时显示什么", + "settings.default-site.html": "自定义 HTML", + "settings.default-site.html.placeholder": "", + "settings.default-site.redirect": "重定向", + "setup.preamble": "通过创建您的管理员账户开始使用。", + "setup.title": "欢迎!", + "sign-in": "登录", + "ssl-certificate": "SSL 证书", + "stream": "端口转发", + "stream.forward-host": "转发主机", + "stream.incoming-port": "入站端口", + "streams": "端口转发列表", + "streams.count": "{count} 个端口转发", + "streams.tcp": "TCP", + "streams.udp": "UDP", + "test": "测试", + "user": "用户", + "user.change-password": "修改密码", + "user.confirm-password": "确认密码", + "user.current-password": "当前密码", + "user.edit-profile": "编辑资料", + "user.full-name": "全名", + "user.login-as": "登录用户 {name}", + "user.logout": "退出登录", + "user.new-password": "新密码", + "user.nickname": "昵称", + "user.set-password": "设置密码", + "user.set-permissions": "为用户 {name} 设置权限", + "user.switch-dark": "切换到深色模式", + "user.switch-light": "切换到浅色模式", + "username": "用户名", + "users": "用户列表" +} \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/zh/AccessLists.md b/frontend/src/locale/src/HelpDoc/zh/AccessLists.md new file mode 100755 index 00000000..5d508366 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/zh/AccessLists.md @@ -0,0 +1,7 @@ +## 什么是通信规则? + +通信规则提供了一个特定客户IP地址的黑名单或白名单,以及通过基本HTTP认证对代理服务的认证。 + +你可以为一个通信规则配置多个客户规则、用户名和密码,然后将其应用于代理服务。 + +这对那些没有内置认证机制的转发网络服务或你想保护其免受未知客户的访问是最有用的。 diff --git a/frontend/src/locale/src/HelpDoc/zh/Certificates.md b/frontend/src/locale/src/HelpDoc/zh/Certificates.md new file mode 100755 index 00000000..1c51c6e8 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/zh/Certificates.md @@ -0,0 +1,21 @@ +## 证书帮助 + +### HTTP 证书 + +HTTP 验证的证书表示 Let's Encrypt 服务器将尝试通过 HTTP(而非 HTTPS!)访问您的域名,如果成功,它们将为您颁发证书。 + +使用此方法时,您必须为您的域名创建一个可通过 HTTP 访问并指向此 Nginx 安装的 代理主机。在获得证书后,您可以修改该 代理主机,使其也使用此证书处理 HTTPS 连接。然而,为了证书能够续期,该 代理主机 仍需配置为支持 HTTP 访问。 + +此过程_不支持_通配符域名。 + +### DNS 证书 + +DNS 验证的证书要求您使用一个 DNS 服务商插件。该 DNS 服务商将用于在您的域名下创建临时记录,随后 Let's Encrypt 将查询这些记录以确认您是域名所有者,如果成功,它们将为您颁发证书。 + +请求此类证书前,您无需预先创建 代理主机,也无需将您的 代理主机 配置为支持 HTTP 访问。 + +此过程_支持_通配符域名。 + +### 自定义证书 + +使用此选项上传您自己的 SSL 证书,该证书由您自己的证书颁发机构提供。 diff --git a/frontend/src/locale/src/HelpDoc/zh/DeadHosts.md b/frontend/src/locale/src/HelpDoc/zh/DeadHosts.md new file mode 100755 index 00000000..9d166023 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/zh/DeadHosts.md @@ -0,0 +1,7 @@ +## 什么是错误页面? + +错误页面是一个简单的主机设置,显示错误页面。 + +当你的域名被列入搜索引擎,而你想提供一个更好的错误页面或特别是告诉搜索索引者域名页面不再存在时,这可能是有用的。 + +拥有这种主机的另一个好处是可以跟踪点击它的日志并查看访问来源。 diff --git a/frontend/src/locale/src/HelpDoc/zh/ProxyHosts.md b/frontend/src/locale/src/HelpDoc/zh/ProxyHosts.md new file mode 100755 index 00000000..36da09e7 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/zh/ProxyHosts.md @@ -0,0 +1,7 @@ +## 什么是代理服务? + +代理服务是你想转发网络应用的主机。 + +代理服务可以为没有SSL服务的网络应用提供SSL服务(可选)。 + +代理服务是Nginx代理管理器的最常见用途之一。 diff --git a/frontend/src/locale/src/HelpDoc/zh/RedirectionHosts.md b/frontend/src/locale/src/HelpDoc/zh/RedirectionHosts.md new file mode 100755 index 00000000..ef3a4d40 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/zh/RedirectionHosts.md @@ -0,0 +1,5 @@ +## 什么是重定向? + +重定向是将接入域名的请求推送到另一个域名。 + +使用这种类型的主机最常见的原因是当你的网站改变了域名,但你仍然有链接指向旧域名的应用。 diff --git a/frontend/src/locale/src/HelpDoc/zh/Streams.md b/frontend/src/locale/src/HelpDoc/zh/Streams.md new file mode 100755 index 00000000..24cac7cf --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/zh/Streams.md @@ -0,0 +1,5 @@ +## 什么是端口转发? + +端口转发是Nginx的一个相对较新的功能,可以直接转发 TCP/UDP 流量到网络上的另一台计算机。 + +如果你正在运行游戏服务器、FTP或SSH服务器,这个功能就会很有用。 diff --git a/frontend/src/locale/src/HelpDoc/zh/index.ts b/frontend/src/locale/src/HelpDoc/zh/index.ts new file mode 100755 index 00000000..a9bb46ba --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/zh/index.ts @@ -0,0 +1,6 @@ +export * as AccessLists from "./AccessLists.md"; +export * as Certificates from "./Certificates.md"; +export * as DeadHosts from "./DeadHosts.md"; +export * as ProxyHosts from "./ProxyHosts.md"; +export * as RedirectionHosts from "./RedirectionHosts.md"; +export * as Streams from "./Streams.md"; diff --git a/frontend/src/locale/src/lang-list.json b/frontend/src/locale/src/lang-list.json old mode 100644 new mode 100755 index 8bf2a596..9343a882 --- a/frontend/src/locale/src/lang-list.json +++ b/frontend/src/locale/src/lang-list.json @@ -13,5 +13,8 @@ }, "locale-ru-RU": { "defaultMessage": "Русский" + }, + "locale-zh-CN": { + "defaultMessage": "中文" } } diff --git a/frontend/src/locale/src/zh.json b/frontend/src/locale/src/zh.json new file mode 100755 index 00000000..7dd30abe --- /dev/null +++ b/frontend/src/locale/src/zh.json @@ -0,0 +1,641 @@ +{ + "access-list": { + "defaultMessage": "通信规则" + }, + "access-list.access-count": { + "defaultMessage": "{count} 条规则" + }, + "access-list.auth-count": { + "defaultMessage": "{count} 个用户" + }, + "access-list.help-rules-last": { + "defaultMessage": "当至少存在1条规则时,此拒绝所有规则将被添加到最后" + }, + "access-list.help.rules-order": { + "defaultMessage": " 允许 (allow) 和禁止 (deny) 规则将按照它们定义的顺序执行。" + }, + "access-list.pass-auth": { + "defaultMessage": "将认证传递给上游" + }, + "access-list.public": { + "defaultMessage": "公开可访问" + }, + "access-list.public.subtitle": { + "defaultMessage": "无需基本认证" + }, + "access-list.satisfy-any": { + "defaultMessage": "满足任意条件" + }, + "access-list.subtitle": { + "defaultMessage": "{users} 个用户, {rules} 条规则 - 创建时间: {date}" + }, + "access-lists": { + "defaultMessage": "通信规则" + }, + "action.add": { + "defaultMessage": "添加" + }, + "action.add-location": { + "defaultMessage": "添加路径规则(Location)" + }, + "action.close": { + "defaultMessage": "关闭" + }, + "action.delete": { + "defaultMessage": "删除" + }, + "action.disable": { + "defaultMessage": "禁用" + }, + "action.download": { + "defaultMessage": "下载" + }, + "action.edit": { + "defaultMessage": "编辑" + }, + "action.enable": { + "defaultMessage": "启用" + }, + "action.permissions": { + "defaultMessage": "权限" + }, + "action.renew": { + "defaultMessage": "续期" + }, + "action.view-details": { + "defaultMessage": "查看详情" + }, + "auditlogs": { + "defaultMessage": "审计日志" + }, + "cancel": { + "defaultMessage": "取消" + }, + "certificate": { + "defaultMessage": "证书" + }, + "certificate.custom-certificate": { + "defaultMessage": "证书" + }, + "certificate.custom-certificate-key": { + "defaultMessage": "证书密钥" + }, + "certificate.custom-intermediate": { + "defaultMessage": "中间证书" + }, + "certificate.in-use": { + "defaultMessage": "使用中" + }, + "certificate.none.subtitle": { + "defaultMessage": "未分配证书" + }, + "certificate.none.subtitle.for-http": { + "defaultMessage": "此主机将不使用 HTTPS" + }, + "certificate.none.title": { + "defaultMessage": "无" + }, + "certificate.not-in-use": { + "defaultMessage": "未使用" + }, + "certificate.renew": { + "defaultMessage": "续期证书" + }, + "certificates": { + "defaultMessage": "证书列表" + }, + "certificates.custom": { + "defaultMessage": "自定义证书" + }, + "certificates.custom.warning": { + "defaultMessage": "不支持受密码保护的密钥文件。" + }, + "certificates.dns.credentials": { + "defaultMessage": "凭据文件内容" + }, + "certificates.dns.credentials-note": { + "defaultMessage": "此插件需要一个包含 API 令牌或提供商其他凭证的配置文件" + }, + "certificates.dns.credentials-warning": { + "defaultMessage": "此数据将以明文形式存储在数据库和文件中!" + }, + "certificates.dns.propagation-seconds": { + "defaultMessage": "传播时间 (秒)" + }, + "certificates.dns.propagation-seconds-note": { + "defaultMessage": "留空以使用插件默认值。等待DNS传播的秒数。" + }, + "certificates.dns.provider": { + "defaultMessage": "DNS 提供商" + }, + "certificates.dns.warning": { + "defaultMessage": "本节需要您具备一些关于 Certbot 及其 DNS 插件的知识,请参阅相应插件的官方文档。" + }, + "certificates.http.reachability-404": { + "defaultMessage": "在此域名下找到了一个服务器,但它似乎不是 Nginx 代理管理器。请确保您的域名指向 NPM 实例运行的 IP 地址。" + }, + "certificates.http.reachability-failed-to-check": { + "defaultMessage": "由于与site24x7.com通信错误,无法检查可达性。" + }, + "certificates.http.reachability-not-resolved": { + "defaultMessage": "此域名下没有可用的服务器。请确保您的域名存在并指向NPM实例运行的 IP 地址,如有必要,请在路由器中转发 80 端口。" + }, + "certificates.http.reachability-ok": { + "defaultMessage": "您的服务器可以访问,应该可以创建证书。" + }, + "certificates.http.reachability-other": { + "defaultMessage": "在此域名下找到了一个服务器,但它返回了意外的状态码 {code}。它是 NPM 服务器吗?请确保您的域名指向NPM实例运行的 IP 地址。" + }, + "certificates.http.reachability-wrong-data": { + "defaultMessage": "在此域名下找到了一个服务器,但它返回了意外的数据。它是 NPM 服务器吗?请确保您的域名指向 NPM 实例运行的 IP 地址。" + }, + "certificates.http.test-results": { + "defaultMessage": "测试结果" + }, + "certificates.http.warning": { + "defaultMessage": "这些域名必须配置为指向本设备。" + }, + "certificates.request.subtitle": { + "defaultMessage": "使用 Let's Encrypt" + }, + "certificates.request.title": { + "defaultMessage": "申请新证书" + }, + "column.access": { + "defaultMessage": "访问" + }, + "column.authorization": { + "defaultMessage": "授权" + }, + "column.authorizations": { + "defaultMessage": "授权列表" + }, + "column.custom-locations": { + "defaultMessage": "自定义路径规则 (Locations)" + }, + "column.destination": { + "defaultMessage": "目标" + }, + "column.details": { + "defaultMessage": "详情" + }, + "column.email": { + "defaultMessage": "邮箱" + }, + "column.event": { + "defaultMessage": "事件" + }, + "column.expires": { + "defaultMessage": "过期时间" + }, + "column.http-code": { + "defaultMessage": "访问" + }, + "column.incoming-port": { + "defaultMessage": "入站端口" + }, + "column.name": { + "defaultMessage": "名称" + }, + "column.protocol": { + "defaultMessage": "协议" + }, + "column.provider": { + "defaultMessage": "提供商" + }, + "column.roles": { + "defaultMessage": "角色" + }, + "column.rules": { + "defaultMessage": "规则" + }, + "column.satisfy": { + "defaultMessage": "满足" + }, + "column.satisfy-all": { + "defaultMessage": "全部" + }, + "column.satisfy-any": { + "defaultMessage": "任意" + }, + "column.scheme": { + "defaultMessage": "协议" + }, + "column.source": { + "defaultMessage": "来源" + }, + "column.ssl": { + "defaultMessage": "SSL" + }, + "column.status": { + "defaultMessage": "状态" + }, + "created-on": { + "defaultMessage": "创建时间: {date}" + }, + "dashboard": { + "defaultMessage": "仪表板" + }, + "dead-host": { + "defaultMessage": "错误页面" + }, + "dead-hosts": { + "defaultMessage": "错误页面列表" + }, + "dead-hosts.count": { + "defaultMessage": "{count} 个错误页面列表" + }, + "disabled": { + "defaultMessage": "已禁用" + }, + "domain-names": { + "defaultMessage": "域名" + }, + "domain-names.max": { + "defaultMessage": "{count} 个最多域名数量" + }, + "domain-names.placeholder": { + "defaultMessage": "开始输入以添加域名..." + }, + "domain-names.wildcards-not-permitted": { + "defaultMessage": "此类型不允许使用通配符" + }, + "domain-names.wildcards-not-supported": { + "defaultMessage": "此 CA 不支持通配符" + }, + "domains.force-ssl": { + "defaultMessage": "强制 SSL" + }, + "domains.hsts-enabled": { + "defaultMessage": "HSTS 已启用" + }, + "domains.hsts-subdomains": { + "defaultMessage": "HSTS 子域名" + }, + "domains.http2-support": { + "defaultMessage": "HTTP/2 支持" + }, + "domains.use-dns": { + "defaultMessage": "使用DNS验证" + }, + "email-address": { + "defaultMessage": "邮箱地址" + }, + "empty-search": { + "defaultMessage": "未找到结果" + }, + "empty-subtitle": { + "defaultMessage": "为什么不由您来创建一个呢?" + }, + "enabled": { + "defaultMessage": "已启用" + }, + "error.access.at-least-one": { + "defaultMessage": "需要至少一个授权或访问规则" + }, + "error.access.duplicate-usernames": { + "defaultMessage": "授权用户名必须唯一" + }, + "error.invalid-auth": { + "defaultMessage": "无效的邮箱或密码" + }, + "error.invalid-domain": { + "defaultMessage": "无效的域名: {domain}" + }, + "error.invalid-email": { + "defaultMessage": "无效的邮箱地址" + }, + "error.max-character-length": { + "defaultMessage": "最大长度为 {max} 个字符" + }, + "error.max-domains": { + "defaultMessage": "域名过多,最多为 {max} 个" + }, + "error.maximum": { + "defaultMessage": "最大值为 {max}" + }, + "error.min-character-length": { + "defaultMessage": "最小长度为 {min} 个字符" + }, + "error.minimum": { + "defaultMessage": "最小值为 {min}" + }, + "error.passwords-must-match": { + "defaultMessage": "密码必须匹配" + }, + "error.required": { + "defaultMessage": "此项为必填项" + }, + "expires.on": { + "defaultMessage": "过期时间: {date}" + }, + "footer.github-fork": { + "defaultMessage": "在 Github 上复刻 (For) 本项目" + }, + "host.flags.block-exploits": { + "defaultMessage": "阻止常见攻击" + }, + "host.flags.cache-assets": { + "defaultMessage": "缓存资源" + }, + "host.flags.preserve-path": { + "defaultMessage": "保留路径" + }, + "host.flags.protocols": { + "defaultMessage": "协议" + }, + "host.flags.websockets-upgrade": { + "defaultMessage": "Websockets 支持" + }, + "host.forward-port": { + "defaultMessage": "转发端口" + }, + "host.forward-scheme": { + "defaultMessage": "协议" + }, + "hosts": { + "defaultMessage": "主机列表" + }, + "http-only": { + "defaultMessage": "仅 HTTP" + }, + "lets-encrypt": { + "defaultMessage": "Let's Encrypt" + }, + "lets-encrypt-via-dns": { + "defaultMessage": "Let's Encrypt DNS 验证" + }, + "lets-encrypt-via-http": { + "defaultMessage": "Let's Encrypt HTTP 验证" + }, + "loading": { + "defaultMessage": "加载中···" + }, + "login.title": { + "defaultMessage": "登录您的账户" + }, + "nginx-config.label": { + "defaultMessage": "自定义 Nginx 配置" + }, + "nginx-config.placeholder": { + "defaultMessage": "# 在此输入您的自定义 Nginx 配置,风险自负!" + }, + "no-permission-error": { + "defaultMessage": "您无权查看此内容。" + }, + "notfound.action": { + "defaultMessage": "返回首页" + }, + "notfound.content": { + "defaultMessage": "很抱歉,您要查找的页面未找到" + }, + "notfound.title": { + "defaultMessage": "糟糕...您刚刚找到了一个错误页面" + }, + "notification.error": { + "defaultMessage": "错误" + }, + "notification.object-deleted": { + "defaultMessage": "{object} 已被删除" + }, + "notification.object-disabled": { + "defaultMessage": "{object} 已被禁用" + }, + "notification.object-enabled": { + "defaultMessage": "{object} 已被启用" + }, + "notification.object-renewed": { + "defaultMessage": "{object} 已续期" + }, + "notification.object-saved": { + "defaultMessage": "{object} 已保存" + }, + "notification.success": { + "defaultMessage": "成功" + }, + "object.actions-title": { + "defaultMessage": "{object} #{id}" + }, + "object.add": { + "defaultMessage": "添加 {object}" + }, + "object.delete": { + "defaultMessage": "删除 {object}" + }, + "object.delete.content": { + "defaultMessage": "您确定要删除 {object} 吗?" + }, + "object.edit": { + "defaultMessage": "编辑 {object}" + }, + "object.empty": { + "defaultMessage": "没有 {objects}" + }, + "object.event.created": { + "defaultMessage": "已创建 {object}" + }, + "object.event.deleted": { + "defaultMessage": "已删除 {object}" + }, + "object.event.disabled": { + "defaultMessage": "已禁用 {object}" + }, + "object.event.enabled": { + "defaultMessage": "已启用 {object}" + }, + "object.event.renewed": { + "defaultMessage": "已续期 {object}" + }, + "object.event.updated": { + "defaultMessage": "已更新 {object}" + }, + "offline": { + "defaultMessage": "离线" + }, + "online": { + "defaultMessage": "在线" + }, + "options": { + "defaultMessage": "选项" + }, + "password": { + "defaultMessage": "密码" + }, + "password.generate": { + "defaultMessage": "生成随机密码" + }, + "password.hide": { + "defaultMessage": "隐藏密码" + }, + "password.show": { + "defaultMessage": "显示密码" + }, + "permissions.hidden": { + "defaultMessage": "隐藏" + }, + "permissions.manage": { + "defaultMessage": "管理" + }, + "permissions.view": { + "defaultMessage": "仅查看" + }, + "permissions.visibility.all": { + "defaultMessage": "所有项目" + }, + "permissions.visibility.title": { + "defaultMessage": "项目可见性" + }, + "permissions.visibility.user": { + "defaultMessage": "仅创建的项目" + }, + "proxy-host": { + "defaultMessage": "代理服务" + }, + "proxy-host.forward-host": { + "defaultMessage": "转发主机名 / IP" + }, + "proxy-hosts": { + "defaultMessage": "代理服务列表" + }, + "proxy-hosts.count": { + "defaultMessage": "{count} 个代理服务" + }, + "public": { + "defaultMessage": "公开" + }, + "redirection-host": { + "defaultMessage": "重定向主机" + }, + "redirection-host.forward-domain": { + "defaultMessage": "转发域名" + }, + "redirection-hosts": { + "defaultMessage": "重定向主机列表" + }, + "redirection-hosts.count": { + "defaultMessage": "{count} 个重定向主机" + }, + "role.admin": { + "defaultMessage": "管理员" + }, + "role.standard-user": { + "defaultMessage": "标准用户" + }, + "save": { + "defaultMessage": "保存" + }, + "setting": { + "defaultMessage": "设置" + }, + "settings": { + "defaultMessage": "设置列表" + }, + "settings.default-site": { + "defaultMessage": "默认站点" + }, + "settings.default-site.404": { + "defaultMessage": "错误页面" + }, + "settings.default-site.444": { + "defaultMessage": "无响应 (444)" + }, + "settings.default-site.congratulations": { + "defaultMessage": "欢迎页面" + }, + "settings.default-site.description": { + "defaultMessage": "当 Nginx 遇到未知主机时显示什么" + }, + "settings.default-site.html": { + "defaultMessage": "自定义 HTML" + }, + "settings.default-site.html.placeholder": { + "defaultMessage": "" + }, + "settings.default-site.redirect": { + "defaultMessage": "重定向" + }, + "setup.preamble": { + "defaultMessage": "通过创建您的管理员账户开始使用。" + }, + "setup.title": { + "defaultMessage": "欢迎!" + }, + "sign-in": { + "defaultMessage": "登录" + }, + "ssl-certificate": { + "defaultMessage": "SSL 证书" + }, + "stream": { + "defaultMessage": "端口转发" + }, + "stream.forward-host": { + "defaultMessage": "转发主机" + }, + "stream.incoming-port": { + "defaultMessage": "入站端口" + }, + "streams": { + "defaultMessage": "端口转发列表" + }, + "streams.count": { + "defaultMessage": "{count} 个端口转发" + }, + "streams.tcp": { + "defaultMessage": "TCP" + }, + "streams.udp": { + "defaultMessage": "UDP" + }, + "test": { + "defaultMessage": "测试" + }, + "user": { + "defaultMessage": "用户" + }, + "user.change-password": { + "defaultMessage": "修改密码" + }, + "user.confirm-password": { + "defaultMessage": "确认密码" + }, + "user.current-password": { + "defaultMessage": "当前密码" + }, + "user.edit-profile": { + "defaultMessage": "编辑资料" + }, + "user.full-name": { + "defaultMessage": "全名" + }, + "user.login-as": { + "defaultMessage": "登录用户 {name}" + }, + "user.logout": { + "defaultMessage": "退出登录" + }, + "user.new-password": { + "defaultMessage": "新密码" + }, + "user.nickname": { + "defaultMessage": "昵称" + }, + "user.set-password": { + "defaultMessage": "设置密码" + }, + "user.set-permissions": { + "defaultMessage": "为用户 {name} 设置权限" + }, + "user.switch-dark": { + "defaultMessage": "切换到深色模式" + }, + "user.switch-light": { + "defaultMessage": "切换到浅色模式" + }, + "username": { + "defaultMessage": "用户名" + }, + "users": { + "defaultMessage": "用户列表" + } +} From 8e900dbc92310723a571ebe641aa9ad22e63240b Mon Sep 17 00:00:00 2001 From: firfe Date: Wed, 12 Nov 2025 00:15:23 +0800 Subject: [PATCH 37/42] Add Chinese HelpDoc --- frontend/src/locale/src/HelpDoc/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/locale/src/HelpDoc/index.ts b/frontend/src/locale/src/HelpDoc/index.ts index 8adaa190..dc57c343 100644 --- a/frontend/src/locale/src/HelpDoc/index.ts +++ b/frontend/src/locale/src/HelpDoc/index.ts @@ -1,8 +1,9 @@ import * as de from "./de/index"; import * as en from "./en/index"; import * as ja from "./ja/index"; +import * as zh from "./zh/index"; -const items: any = { en, de, ja }; +const items: any = { en, de, ja, zh }; const fallbackLang = "en"; From d66bb2104a111842b9c73f57ee72fa0fd979b042 Mon Sep 17 00:00:00 2001 From: firfe Date: Wed, 12 Nov 2025 00:34:56 +0800 Subject: [PATCH 38/42] Add the new translation for "redirection-host.forward-http-code". --- frontend/src/locale/lang/zh.json | 1 + frontend/src/locale/src/zh.json | 3 +++ 2 files changed, 4 insertions(+) diff --git a/frontend/src/locale/lang/zh.json b/frontend/src/locale/lang/zh.json index 61763aa4..47a6abe2 100755 --- a/frontend/src/locale/lang/zh.json +++ b/frontend/src/locale/lang/zh.json @@ -169,6 +169,7 @@ "public": "公开", "redirection-host": "重定向主机", "redirection-host.forward-domain": "转发域名", + "redirection-host.forward-http-code": "HTTP 状态码", "redirection-hosts": "重定向主机列表", "redirection-hosts.count": "{count} 个重定向主机", "role.admin": "管理员", diff --git a/frontend/src/locale/src/zh.json b/frontend/src/locale/src/zh.json index 7dd30abe..158d1ff7 100755 --- a/frontend/src/locale/src/zh.json +++ b/frontend/src/locale/src/zh.json @@ -509,6 +509,9 @@ "redirection-host.forward-domain": { "defaultMessage": "转发域名" }, + "redirection-host.forward-http-code": { + "defaultMessage": "HTTP 状态码" + }, "redirection-hosts": { "defaultMessage": "重定向主机列表" }, From b26db50ae7c1f98d028af0426ba84b6cf182516f Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Wed, 12 Nov 2025 20:26:22 +1000 Subject: [PATCH 39/42] Adds cn to check locales script --- frontend/check-locales.cjs | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/check-locales.cjs b/frontend/check-locales.cjs index 7cd04420..d300c9d1 100755 --- a/frontend/check-locales.cjs +++ b/frontend/check-locales.cjs @@ -11,6 +11,7 @@ const allLocales = [ ["es", "es-ES"], ["de", "de-DE"], ["ru", "ru-RU"], + ["zh", "zh-CN"], ]; const ignoreUnused = [ From 2b5182d339bdf0f2ffe5221f20975a5781fe3ae8 Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Wed, 12 Nov 2025 21:49:04 +1000 Subject: [PATCH 40/42] Add Slovak language by @dodog in #4911 --- frontend/check-locales.cjs | 1 + frontend/src/locale/IntlProvider.tsx | 7 + frontend/src/locale/lang/lang-list.json | 1 + frontend/src/locale/lang/sk.json | 216 ++++++ frontend/src/locale/src/HelpDoc/index.ts | 3 +- .../src/locale/src/HelpDoc/sk/AccessLists.md | 7 + .../src/locale/src/HelpDoc/sk/Certificates.md | 32 + .../src/locale/src/HelpDoc/sk/DeadHosts.md | 10 + .../src/locale/src/HelpDoc/sk/ProxyHosts.md | 7 + .../locale/src/HelpDoc/sk/RedirectionHosts.md | 7 + frontend/src/locale/src/HelpDoc/sk/Streams.md | 6 + frontend/src/locale/src/HelpDoc/sk/index.ts | 6 + frontend/src/locale/src/lang-list.json | 3 + frontend/src/locale/src/sk.json | 644 ++++++++++++++++++ 14 files changed, 949 insertions(+), 1 deletion(-) create mode 100644 frontend/src/locale/lang/sk.json create mode 100644 frontend/src/locale/src/HelpDoc/sk/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/sk/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/sk/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/sk/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/sk/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/sk/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/sk/index.ts create mode 100644 frontend/src/locale/src/sk.json diff --git a/frontend/check-locales.cjs b/frontend/check-locales.cjs index d300c9d1..684272e1 100755 --- a/frontend/check-locales.cjs +++ b/frontend/check-locales.cjs @@ -11,6 +11,7 @@ const allLocales = [ ["es", "es-ES"], ["de", "de-DE"], ["ru", "ru-RU"], + ["sk", "sk-SK"], ["zh", "zh-CN"], ]; diff --git a/frontend/src/locale/IntlProvider.tsx b/frontend/src/locale/IntlProvider.tsx index 14657fcb..b7b04154 100755 --- a/frontend/src/locale/IntlProvider.tsx +++ b/frontend/src/locale/IntlProvider.tsx @@ -5,6 +5,7 @@ import langEs from "./lang/es.json"; import langJa from "./lang/ja.json"; import langList from "./lang/lang-list.json"; import langRu from "./lang/ru.json"; +import langSk from "./lang/sk.json"; import langZh from "./lang/zh.json"; // first item of each array should be the language code, @@ -16,6 +17,7 @@ const localeOptions = [ ["es", "es-ES"], ["ja", "ja-JP"], ["ru", "ru-RU"], + ["sk", "sk-SK"], ["zh", "zh-CN"], ]; @@ -30,6 +32,8 @@ const loadMessages = (locale?: string): typeof langList & typeof langEn => { 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); default: @@ -51,6 +55,9 @@ const getFlagCodeForLocale = (locale?: string) => { case "ru-RU": case "ru": return "RU"; + case "sk-SK": + case "sk": + return "SK"; case "zh": case "zh-CN": return "CN"; diff --git a/frontend/src/locale/lang/lang-list.json b/frontend/src/locale/lang/lang-list.json index 7d9bc214..7a0d12c5 100644 --- a/frontend/src/locale/lang/lang-list.json +++ b/frontend/src/locale/lang/lang-list.json @@ -4,5 +4,6 @@ "locale-es-ES": "Español", "locale-ja-JP": "日本語", "locale-ru-RU": "Русский", + "locale-sk-SK": "Slovak", "locale-zh-CN": "中文" } \ No newline at end of file diff --git a/frontend/src/locale/lang/sk.json b/frontend/src/locale/lang/sk.json new file mode 100644 index 00000000..ec42c743 --- /dev/null +++ b/frontend/src/locale/lang/sk.json @@ -0,0 +1,216 @@ +{ + "access-list": "zoznam prístupov", + "access-list.access-count": "{count} {count, plural, one {pravidlo} few {pravidlá} other {pravidiel}}", + "access-list.auth-count": "{count} {count, plural, one {používateľ} few {používatelia} other {používateľov}}", + "access-list.help-rules-last": "Keď existuje aspoň jedno pravidlo, toto pravidlo „zamietnuť všetko“ bude pridané ako posledné", + "access-list.help.rules-order": "Upozornenie: pravidlá povoliť a zamietnuť budú uplatňované v poradí, v akom sú definované.", + "access-list.pass-auth": "Odoslať overenie na Upstream", + "access-list.public": "Verejne prístupné", + "access-list.public.subtitle": "Nie je potrebné základné overenie", + "access-list.satisfy-any": "Splniť ktorékoľvek", + "access-list.subtitle": "{users} {users, plural, one {používateľ} few {používatelia} other {používateľov}}, {rules} {rules, plural, one {pravidlo} few {pravidlá} other {pravidiel}} - Vytvorené: {date}", + "access-lists": "Zoznamy prístupov", + "action.add": "Pridať", + "action.add-location": "Pridať umiestnenie", + "action.close": "Zavrieť", + "action.delete": "Vymazať", + "action.disable": "Deaktivovať", + "action.download": "Stiahnuť", + "action.edit": "Upraviť", + "action.enable": "Aktivovať", + "action.permissions": "Oprávnenia", + "action.renew": "Obnoviť", + "action.view-details": "Zobraziť podrobnosti", + "auditlogs": "Záznamy auditu", + "cancel": "Zrušiť", + "certificate": "Certifikát", + "certificate.custom-certificate": "Certifikát", + "certificate.custom-certificate-key": "Kľúč certifikátu", + "certificate.custom-intermediate": "Sprostredkovateľský certifikát", + "certificate.in-use": "Používa sa", + "certificate.none.subtitle": "Nie je priradený žiadny certifikát", + "certificate.none.subtitle.for-http": "Tento hostiteľ nebude používať HTTPS", + "certificate.none.title": "Žiadny", + "certificate.not-in-use": "Nepoužíva sa", + "certificate.renew": "Obnoviť certifikát", + "certificates": "Certifikáty", + "certificates.custom": "Vlastný certifikát", + "certificates.custom.warning": "Súbory kľúčov chránené heslom nie sú podporované.", + "certificates.dns.credentials": "Obsah súboru s prihlasovacími údajmi", + "certificates.dns.credentials-note": "Tento doplnok vyžaduje konfiguračný súbor obsahujúci API token alebo iné prihlasovacie údaje vášho poskytovateľa", + "certificates.dns.credentials-warning": "Tieto údaje budú uložené v databáze a v súbore ako obyčajný text!", + "certificates.dns.propagation-seconds": "Propagácia v sekundách", + "certificates.dns.propagation-seconds-note": "Ponechajte prázdne pre predvolenú hodnotu doplnku. Počet sekúnd, počas ktorých sa čaká na propagáciu DNS.", + "certificates.dns.provider": "DNS poskytovateľ", + "certificates.dns.warning": "Táto sekcia vyžaduje znalosť Certbotu a jeho DNS doplnkov. Prosím, pozrite si dokumentáciu príslušného doplnku.", + "certificates.http.reachability-404": "Na tejto doméne bol nájdený server, ale nezdá sa, že ide o Nginx Proxy Manager. Uistite sa, že vaša doména smeruje na IP, kde beží vaša inštancia NPM.", + "certificates.http.reachability-failed-to-check": "Nepodarilo sa overiť dostupnosť kvôli chybe komunikácie so službou site24x7.com.", + "certificates.http.reachability-not-resolved": "Na tejto doméne nie je dostupný žiadny server. Uistite sa, že doména existuje a smeruje na IP adresu s NPM a ak je to potrebné, port 80 je presmerovaný vo vašom smerovači.", + "certificates.http.reachability-ok": "Váš server je dostupný a vytvorenie certifikátu by malo byť možné.", + "certificates.http.reachability-other": "Na tejto doméne bol nájdený server, ale vrátil neočakávaný stavový kód {code}. Je to NPM server? Uistite sa prosím, že doména smeruje na IP, kde beží vaša inštancia NPM.", + "certificates.http.reachability-wrong-data": "Na tejto doméne bol nájdený server, ale vrátil neočakávané údaje. Je to NPM server? Uistite sa, že doména smeruje na IP, kde beží vaša inštancia NPM.", + "certificates.http.test-results": "Výsledky testu", + "certificates.http.warning": "Tieto domény musia byť už nakonfigurované tak, aby smerovali na túto inštaláciu.", + "certificates.request.subtitle": "pomocou Let's Encrypt", + "certificates.request.title": "Vyžiadať nový certifikát", + "column.access": "Prístup", + "column.authorization": "Autorizácia", + "column.authorizations": "Autorizácie", + "column.custom-locations": "Vlastné umiestnenia", + "column.destination": "Cieľ", + "column.details": "Podrobnosti", + "column.email": "Email", + "column.event": "Udalosť", + "column.expires": "Platnosť do", + "column.http-code": "Prístup", + "column.incoming-port": "Vstupný port", + "column.name": "Názov", + "column.protocol": "Protokol", + "column.provider": "Poskytovateľ", + "column.roles": "Roly", + "column.rules": "Pravidlá", + "column.satisfy": "Splniť", + "column.satisfy-all": "Všetky", + "column.satisfy-any": "Ktorékoľvek", + "column.scheme": "Schéma", + "column.source": "Zdroj", + "column.ssl": "SSL", + "column.status": "Stav", + "created-on": "Vytvorené: {date}", + "dashboard": "Panel", + "dead-host": "404 Hostiteľ", + "dead-hosts": "404 Hostitelia", + "dead-hosts.count": "{count} {count, plural, one {404 hostiteľ} few {404 hostitelia} other {404 hostiteľov}}", + "disabled": "Deaktivované", + "domain-names": "Doménové mená", + "domain-names.max": "Maximálne {count} doménových mien", + "domain-names.placeholder": "Začnite písať pre pridanie domény...", + "domain-names.wildcards-not-permitted": "Wildcards nie sú pre tento typ povolené", + "domain-names.wildcards-not-supported": "Wildcards nie sú podporované pre túto certifikačnú autoritu", + "domains.force-ssl": "Vynútiť SSL", + "domains.hsts-enabled": "HSTS povolené", + "domains.hsts-subdomains": "HSTS pre subdomény", + "domains.http2-support": "Podpora HTTP/2", + "domains.use-dns": "Použiť DNS výzvu", + "email-address": "Emailová adresa", + "empty-search": "Nenašli sa žiadne výsledky", + "empty-subtitle": "Prečo nevytvoríte nejaký?", + "enabled": "Aktivované", + "error.access.at-least-one": "Je vyžadovaná aspoň jedna autorizácia alebo jedno prístupové pravidlo", + "error.access.duplicate-usernames": "Používateľské mená pre autorizáciu musia byť jedinečné", + "error.invalid-auth": "Neplatný email alebo heslo", + "error.invalid-domain": "Neplatná doména: {domain}", + "error.invalid-email": "Neplatná emailová adresa", + "error.max-character-length": "Maximálna dĺžka je {max} znak{max, plural, one {} few {y} other {ov}}", + "error.max-domains": "Príliš veľa domén, maximum je {max}", + "error.maximum": "Maximum je {max}", + "error.min-character-length": "Minimálna dĺžka je {min} znak{min, plural, one {} few {y} other {ov}}", + "error.minimum": "Minimum je {min}", + "error.passwords-must-match": "Heslá sa musia zhodovať", + "error.required": "Toto pole je povinné", + "expires.on": "Platnosť do: {date}", + "footer.github-fork": "Forknite ma na GitHube", + "host.flags.block-exploits": "Blokovať bežné exploity", + "host.flags.cache-assets": "Uložiť zdroje do vyrovnávacej pamäte", + "host.flags.preserve-path": "Zachovať cestu", + "host.flags.protocols": "Protokoly", + "host.flags.websockets-upgrade": "Podpora WebSockets", + "host.forward-port": "Port presmerovania", + "host.forward-scheme": "Schéma", + "hosts": "Hostitelia", + "http-only": "Len HTTP", + "lets-encrypt": "Let's Encrypt", + "lets-encrypt-via-dns": "Let's Encrypt cez DNS", + "lets-encrypt-via-http": "Let's Encrypt cez HTTP", + "loading": "Načítava sa…", + "login.title": "Prihláste sa do svojho účtu", + "nginx-config.label": "Vlastná Nginx konfigurácia", + "nginx-config.placeholder": "# Zadajte vlastnú Nginx konfiguráciu na vlastné riziko!", + "no-permission-error": "Nemáte oprávnenie na zobrazenie tohto obsahu.", + "notfound.action": "Späť na hlavnú stránku", + "notfound.content": "Ľutujeme, stránka, ktorú hľadáte, nebola nájdená", + "notfound.title": "Ups… Našli ste chybovú stránku", + "notification.error": "Chyba", + "notification.object-deleted": "{object} bol odstránený", + "notification.object-disabled": "{object} bol deaktivovaný", + "notification.object-enabled": "{object} bol aktivovaný", + "notification.object-renewed": "{object} bol obnovený", + "notification.object-saved": "{object} bol uložené", + "notification.success": "Úspech", + "object.actions-title": "{object} #{id}", + "object.add": "Pridať {object}", + "object.delete": "Vymazať {object}", + "object.delete.content": "Naozaj chcete vymazať tento {object}?", + "object.edit": "Upraviť {object}", + "object.empty": "Nie sú žiadne/y {objects}", + "object.event.created": "Vytvorený {object}", + "object.event.deleted": "Vymazaný {object}", + "object.event.disabled": "Deaktivovaný {object}", + "object.event.enabled": "Aktivovaný {object}", + "object.event.renewed": "Obnovený {object}", + "object.event.updated": "Aktualizovaný {object}", + "offline": "Offline", + "online": "Online", + "options": "Možnosti", + "password": "Heslo", + "password.generate": "Vygenerovať náhodné heslo", + "password.hide": "Skryť heslo", + "password.show": "Zobraziť heslo", + "permissions.hidden": "Skryté", + "permissions.manage": "Spravovať", + "permissions.view": "Len na zobrazenie", + "permissions.visibility.all": "Všetky položky", + "permissions.visibility.title": "Viditeľnosť položky", + "permissions.visibility.user": "Len vytvorené položky", + "proxy-host": "Proxy hostiteľa", + "proxy-host.forward-host": "Cieľový názov hostiteľa / IP", + "proxy-hosts": "Proxy hostitelia", + "proxy-hosts.count": "{count} {count, plural, one {proxy hostiteľ} few {proxy hostitelia} other {proxy hostiteľov}}", + "public": "Verejné", + "redirection-host": "presmerovacieho hostiteľa", + "redirection-host.forward-domain": "Cieľová doména", + "redirection-host.forward-http-code": "HTTP kód", + "redirection-hosts": "Presmerovací hostitelia", + "redirection-hosts.count": "{count} {count, plural, one {presmerovací hostiteľ} few {presmerovací hostitelia} other {presmerovacích hostiteľov}}", + "role.admin": "Administrátor", + "role.standard-user": "Bežný používateľ", + "save": "Uložiť", + "setting": "Nastavenie", + "settings": "Nastavenia", + "settings.default-site": "Predvolená stránka", + "settings.default-site.404": "Stránka 404", + "settings.default-site.444": "Bez odpovede (444)", + "settings.default-site.congratulations": "Gratulačná stránka", + "settings.default-site.description": "Čo zobraziť, keď Nginx zachytí neznámeho hostiteľa", + "settings.default-site.html": "Vlastné HTML", + "settings.default-site.html.placeholder": "", + "settings.default-site.redirect": "Presmerovať", + "setup.preamble": "Začnite vytvorením administrátorského účtu.", + "setup.title": "Vitajte!", + "sign-in": "Prihlásiť sa", + "ssl-certificate": "SSL certifikát", + "stream": "Stream", + "stream.forward-host": "Cieľový hostiteľ", + "stream.incoming-port": "Vstupný port", + "streams": "Streamy", + "streams.count": "{count} {count, plural, one {stream} few {streamy} other {streamov}}", + "streams.tcp": "TCP", + "streams.udp": "UDP", + "test": "Test", + "user": "používateľa", + "user.change-password": "Zmeniť heslo", + "user.confirm-password": "Potvrdiť heslo", + "user.current-password": "Aktuálne heslo", + "user.edit-profile": "Upraviť profil", + "user.full-name": "Celé meno", + "user.login-as": "Prihlásiť sa ako {name}", + "user.logout": "Odhlásiť sa", + "user.new-password": "Nové heslo", + "user.nickname": "Prezývka", + "user.set-password": "Nastaviť heslo", + "user.set-permissions": "Nastaviť oprávnenia pre {name}", + "user.switch-dark": "Prepnúť na tmavý režim", + "user.switch-light": "Prepnúť na svetlý režim", + "username": "Používateľské meno", + "users": "Používatelia" +} \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/index.ts b/frontend/src/locale/src/HelpDoc/index.ts index dc57c343..b84f954d 100644 --- a/frontend/src/locale/src/HelpDoc/index.ts +++ b/frontend/src/locale/src/HelpDoc/index.ts @@ -1,9 +1,10 @@ import * as de from "./de/index"; import * as en from "./en/index"; import * as ja from "./ja/index"; +import * as sk from "./sk/index"; import * as zh from "./zh/index"; -const items: any = { en, de, ja, zh }; +const items: any = { en, de, ja, sk, zh }; const fallbackLang = "en"; diff --git a/frontend/src/locale/src/HelpDoc/sk/AccessLists.md b/frontend/src/locale/src/HelpDoc/sk/AccessLists.md new file mode 100644 index 00000000..8f4eea3b --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/sk/AccessLists.md @@ -0,0 +1,7 @@ +## Čo je zoznam prístupov? + +Zoznamy prístupov poskytujú čiernu alebo bielu listinu konkrétnych IP adries klientov spolu s overovaním pre proxy hostiteľov prostredníctvom základného overovania HTTP. + +Môžete nakonfigurovať viacero pravidiel pre klientov, používateľských mien a hesiel pre jeden zoznam prístupov a potom ho použiť na jeden alebo viacero proxy hostiteľov. + +Toto je najužitočnejšie pre presmerované webové služby, ktoré nemajú zabudované overovacie mechanizmy, alebo ak sa chcete chrániť pred neznámymi klientmi. diff --git a/frontend/src/locale/src/HelpDoc/sk/Certificates.md b/frontend/src/locale/src/HelpDoc/sk/Certificates.md new file mode 100644 index 00000000..a2e57978 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/sk/Certificates.md @@ -0,0 +1,32 @@ +## Pomoc s certifikátmi + +### Certifikát HTTP + +Certifikát overený protokolom HTTP znamená, že servery Let's Encrypt sa +pokúsia pripojiť k vašim doménam cez protokol HTTP (nie HTTPS!) a v prípade úspechu +vydajú váš certifikát. + +Pre túto metódu budete musieť mať pre svoje domény vytvorený _Proxy Host_, ktorý +je prístupný cez HTTP a smeruje na túto inštaláciu Nginx. Po vydaní certifikátu +môžete zmeniť _Proxy Host_ tak, aby tento certifikát používal aj pre HTTPS +pripojenia. _Proxy Host_ však bude stále potrebné nakonfigurovať pre prístup cez HTTP, +aby sa certifikát mohol obnoviť. + +Tento proces _nepodporuje_ domény s divokými kartami. + +### Certifikát DNS + +Certifikát overený DNS vyžaduje použitie pluginu DNS Provider. Tento DNS +Provider sa použije na vytvorenie dočasných záznamov vo vašej doméne a potom Let's +Encrypt overí tieto záznamy, aby sa uistil, že ste vlastníkom, a ak bude úspešný, +vydá váš certifikát. + +Pred požiadaním o tento typ certifikátu nie je potrebné vytvoriť _Proxy Host_. +Tiež nie je potrebné mať _Proxy Host_ nakonfigurovaný pre prístup HTTP. + +Tento proces _podporuje_ domény s divokými kartami. + +### Vlastný certifikát + +Túto možnosť použite na nahratie vlastného SSL certifikátu, ktorý vám poskytla vaša +certifikačná autorita. diff --git a/frontend/src/locale/src/HelpDoc/sk/DeadHosts.md b/frontend/src/locale/src/HelpDoc/sk/DeadHosts.md new file mode 100644 index 00000000..a232d231 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/sk/DeadHosts.md @@ -0,0 +1,10 @@ +## Čo je to 404 Hostiteľ? + +404 Hostiteľ je jednoducho nastavenie hostiteľa, ktoré zobrazuje stránku 404. + +To môže byť užitočné, ak je vaša doména uvedená vo vyhľadávačoch a chcete +poskytnúť krajšiu stránku s chybou alebo konkrétne oznámiť vyhľadávačom, že +stránky domény už neexistujú. + +Ďalšou výhodou tohto hostiteľa je sledovanie protokolov o návštevách a +zobrazenie odkazov. diff --git a/frontend/src/locale/src/HelpDoc/sk/ProxyHosts.md b/frontend/src/locale/src/HelpDoc/sk/ProxyHosts.md new file mode 100644 index 00000000..631a1b49 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/sk/ProxyHosts.md @@ -0,0 +1,7 @@ +## Čo je proxy hostiteľ? + +Proxy hostiteľ je prichádzajúci koncový bod pre webovú službu, ktorú chcete presmerovať. + +Poskytuje voliteľné ukončenie SSL pre vašu službu, ktorá nemusí mať zabudovanú podporu SSL. + +Proxy hostitelia sú najbežnejším použitím pre Nginx Proxy Manager. diff --git a/frontend/src/locale/src/HelpDoc/sk/RedirectionHosts.md b/frontend/src/locale/src/HelpDoc/sk/RedirectionHosts.md new file mode 100644 index 00000000..92b5e540 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/sk/RedirectionHosts.md @@ -0,0 +1,7 @@ +## Čo je presmerovací hostiteľ? + +Presmerovací hostiteľ presmeruje požiadavky z prichádzajúcej domény a presmeruje +návštevníka na inú doménu. + +Najčastejším dôvodom na použitie tohto typu hostiteľa je situácia, keď vaša webová stránka zmení +doménu, ale stále máte odkazy vo vyhľadávačoch alebo referenčné odkazy smerujúce na starú doménu. diff --git a/frontend/src/locale/src/HelpDoc/sk/Streams.md b/frontend/src/locale/src/HelpDoc/sk/Streams.md new file mode 100644 index 00000000..39b3b1cc --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/sk/Streams.md @@ -0,0 +1,6 @@ +## Čo je stream? + +Stream je relatívne nová funkcia pre Nginx, ktorá slúži na presmerovanie TCP/UDP +dátového toku priamo do iného počítača v sieti. + +Ak prevádzkujete herné servery, FTP alebo SSH servery, táto funkcia sa vám môže hodiť. diff --git a/frontend/src/locale/src/HelpDoc/sk/index.ts b/frontend/src/locale/src/HelpDoc/sk/index.ts new file mode 100644 index 00000000..a9bb46ba --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/sk/index.ts @@ -0,0 +1,6 @@ +export * as AccessLists from "./AccessLists.md"; +export * as Certificates from "./Certificates.md"; +export * as DeadHosts from "./DeadHosts.md"; +export * as ProxyHosts from "./ProxyHosts.md"; +export * as RedirectionHosts from "./RedirectionHosts.md"; +export * as Streams from "./Streams.md"; diff --git a/frontend/src/locale/src/lang-list.json b/frontend/src/locale/src/lang-list.json index 9343a882..5ab58133 100755 --- a/frontend/src/locale/src/lang-list.json +++ b/frontend/src/locale/src/lang-list.json @@ -14,6 +14,9 @@ "locale-ru-RU": { "defaultMessage": "Русский" }, + "locale-sk-SK": { + "defaultMessage": "Slovak" + }, "locale-zh-CN": { "defaultMessage": "中文" } diff --git a/frontend/src/locale/src/sk.json b/frontend/src/locale/src/sk.json new file mode 100644 index 00000000..d006e555 --- /dev/null +++ b/frontend/src/locale/src/sk.json @@ -0,0 +1,644 @@ +{ + "access-list": { + "defaultMessage": "zoznam prístupov" + }, + "access-list.access-count": { + "defaultMessage": "{count} {count, plural, one {pravidlo} few {pravidlá} other {pravidiel}}" + }, + "access-list.auth-count": { + "defaultMessage": "{count} {count, plural, one {používateľ} few {používatelia} other {používateľov}}" + }, + "access-list.help-rules-last": { + "defaultMessage": "Keď existuje aspoň jedno pravidlo, toto pravidlo „zamietnuť všetko“ bude pridané ako posledné" + }, + "access-list.help.rules-order": { + "defaultMessage": "Upozornenie: pravidlá povoliť a zamietnuť budú uplatňované v poradí, v akom sú definované." + }, + "access-list.pass-auth": { + "defaultMessage": "Odoslať overenie na Upstream" + }, + "access-list.public": { + "defaultMessage": "Verejne prístupné" + }, + "access-list.public.subtitle": { + "defaultMessage": "Nie je potrebné základné overenie" + }, + "access-list.satisfy-any": { + "defaultMessage": "Splniť ktorékoľvek" + }, + "access-list.subtitle": { + "defaultMessage": "{users} {users, plural, one {používateľ} few {používatelia} other {používateľov}}, {rules} {rules, plural, one {pravidlo} few {pravidlá} other {pravidiel}} - Vytvorené: {date}" + }, + "access-lists": { + "defaultMessage": "Zoznamy prístupov" + }, + "action.add": { + "defaultMessage": "Pridať" + }, + "action.add-location": { + "defaultMessage": "Pridať umiestnenie" + }, + "action.close": { + "defaultMessage": "Zavrieť" + }, + "action.delete": { + "defaultMessage": "Vymazať" + }, + "action.disable": { + "defaultMessage": "Deaktivovať" + }, + "action.download": { + "defaultMessage": "Stiahnuť" + }, + "action.edit": { + "defaultMessage": "Upraviť" + }, + "action.enable": { + "defaultMessage": "Aktivovať" + }, + "action.permissions": { + "defaultMessage": "Oprávnenia" + }, + "action.renew": { + "defaultMessage": "Obnoviť" + }, + "action.view-details": { + "defaultMessage": "Zobraziť podrobnosti" + }, + "auditlogs": { + "defaultMessage": "Záznamy auditu" + }, + "cancel": { + "defaultMessage": "Zrušiť" + }, + "certificate": { + "defaultMessage": "Certifikát" + }, + "certificate.custom-certificate": { + "defaultMessage": "Certifikát" + }, + "certificate.custom-certificate-key": { + "defaultMessage": "Kľúč certifikátu" + }, + "certificate.custom-intermediate": { + "defaultMessage": "Sprostredkovateľský certifikát" + }, + "certificate.in-use": { + "defaultMessage": "Používa sa" + }, + "certificate.none.subtitle": { + "defaultMessage": "Nie je priradený žiadny certifikát" + }, + "certificate.none.subtitle.for-http": { + "defaultMessage": "Tento hostiteľ nebude používať HTTPS" + }, + "certificate.none.title": { + "defaultMessage": "Žiadny" + }, + "certificate.not-in-use": { + "defaultMessage": "Nepoužíva sa" + }, + "certificate.renew": { + "defaultMessage": "Obnoviť certifikát" + }, + "certificates": { + "defaultMessage": "Certifikáty" + }, + "certificates.custom": { + "defaultMessage": "Vlastný certifikát" + }, + "certificates.custom.warning": { + "defaultMessage": "Súbory kľúčov chránené heslom nie sú podporované." + }, + "certificates.dns.credentials": { + "defaultMessage": "Obsah súboru s prihlasovacími údajmi" + }, + "certificates.dns.credentials-note": { + "defaultMessage": "Tento doplnok vyžaduje konfiguračný súbor obsahujúci API token alebo iné prihlasovacie údaje vášho poskytovateľa" + }, + "certificates.dns.credentials-warning": { + "defaultMessage": "Tieto údaje budú uložené v databáze a v súbore ako obyčajný text!" + }, + "certificates.dns.propagation-seconds": { + "defaultMessage": "Propagácia v sekundách" + }, + "certificates.dns.propagation-seconds-note": { + "defaultMessage": "Ponechajte prázdne pre predvolenú hodnotu doplnku. Počet sekúnd, počas ktorých sa čaká na propagáciu DNS." + }, + "certificates.dns.provider": { + "defaultMessage": "DNS poskytovateľ" + }, + "certificates.dns.warning": { + "defaultMessage": "Táto sekcia vyžaduje znalosť Certbotu a jeho DNS doplnkov. Prosím, pozrite si dokumentáciu príslušného doplnku." + }, + "certificates.http.reachability-404": { + "defaultMessage": "Na tejto doméne bol nájdený server, ale nezdá sa, že ide o Nginx Proxy Manager. Uistite sa, že vaša doména smeruje na IP, kde beží vaša inštancia NPM." + }, + "certificates.http.reachability-failed-to-check": { + "defaultMessage": "Nepodarilo sa overiť dostupnosť kvôli chybe komunikácie so službou site24x7.com." + }, + "certificates.http.reachability-not-resolved": { + "defaultMessage": "Na tejto doméne nie je dostupný žiadny server. Uistite sa, že doména existuje a smeruje na IP adresu s NPM a ak je to potrebné, port 80 je presmerovaný vo vašom smerovači." + }, + "certificates.http.reachability-ok": { + "defaultMessage": "Váš server je dostupný a vytvorenie certifikátu by malo byť možné." + }, + "certificates.http.reachability-other": { + "defaultMessage": "Na tejto doméne bol nájdený server, ale vrátil neočakávaný stavový kód {code}. Je to NPM server? Uistite sa prosím, že doména smeruje na IP, kde beží vaša inštancia NPM." + }, + "certificates.http.reachability-wrong-data": { + "defaultMessage": "Na tejto doméne bol nájdený server, ale vrátil neočakávané údaje. Je to NPM server? Uistite sa, že doména smeruje na IP, kde beží vaša inštancia NPM." + }, + "certificates.http.test-results": { + "defaultMessage": "Výsledky testu" + }, + "certificates.http.warning": { + "defaultMessage": "Tieto domény musia byť už nakonfigurované tak, aby smerovali na túto inštaláciu." + }, + "certificates.request.subtitle": { + "defaultMessage": "pomocou Let's Encrypt" + }, + "certificates.request.title": { + "defaultMessage": "Vyžiadať nový certifikát" + }, + "column.access": { + "defaultMessage": "Prístup" + }, + "column.authorization": { + "defaultMessage": "Autorizácia" + }, + "column.authorizations": { + "defaultMessage": "Autorizácie" + }, + "column.custom-locations": { + "defaultMessage": "Vlastné umiestnenia" + }, + "column.destination": { + "defaultMessage": "Cieľ" + }, + "column.details": { + "defaultMessage": "Podrobnosti" + }, + "column.email": { + "defaultMessage": "Email" + }, + "column.event": { + "defaultMessage": "Udalosť" + }, + "column.expires": { + "defaultMessage": "Platnosť do" + }, + "column.http-code": { + "defaultMessage": "Prístup" + }, + "column.incoming-port": { + "defaultMessage": "Vstupný port" + }, + "column.name": { + "defaultMessage": "Názov" + }, + "column.protocol": { + "defaultMessage": "Protokol" + }, + "column.provider": { + "defaultMessage": "Poskytovateľ" + }, + "column.roles": { + "defaultMessage": "Roly" + }, + "column.rules": { + "defaultMessage": "Pravidlá" + }, + "column.satisfy": { + "defaultMessage": "Splniť" + }, + "column.satisfy-all": { + "defaultMessage": "Všetky" + }, + "column.satisfy-any": { + "defaultMessage": "Ktorékoľvek" + }, + "column.scheme": { + "defaultMessage": "Schéma" + }, + "column.source": { + "defaultMessage": "Zdroj" + }, + "column.ssl": { + "defaultMessage": "SSL" + }, + "column.status": { + "defaultMessage": "Stav" + }, + "created-on": { + "defaultMessage": "Vytvorené: {date}" + }, + "dashboard": { + "defaultMessage": "Panel" + }, + "dead-host": { + "defaultMessage": "404 Hostiteľ" + }, + "dead-hosts": { + "defaultMessage": "404 Hostitelia" + }, + "dead-hosts.count": { + "defaultMessage": "{count} {count, plural, one {404 hostiteľ} few {404 hostitelia} other {404 hostiteľov}}" + }, + "disabled": { + "defaultMessage": "Deaktivované" + }, + "domain-names": { + "defaultMessage": "Doménové mená" + }, + "domain-names.max": { + "defaultMessage": "Maximálne {count} doménových mien" + }, + "domain-names.placeholder": { + "defaultMessage": "Začnite písať pre pridanie domény..." + }, + "domain-names.wildcards-not-permitted": { + "defaultMessage": "Wildcards nie sú pre tento typ povolené" + }, + "domain-names.wildcards-not-supported": { + "defaultMessage": "Wildcards nie sú podporované pre túto certifikačnú autoritu" + }, + "domains.force-ssl": { + "defaultMessage": "Vynútiť SSL" + }, + "domains.hsts-enabled": { + "defaultMessage": "HSTS povolené" + }, + "domains.hsts-subdomains": { + "defaultMessage": "HSTS pre subdomény" + }, + "domains.http2-support": { + "defaultMessage": "Podpora HTTP/2" + }, + "domains.use-dns": { + "defaultMessage": "Použiť DNS výzvu" + }, + "email-address": { + "defaultMessage": "Emailová adresa" + }, + "empty-search": { + "defaultMessage": "Nenašli sa žiadne výsledky" + }, + "empty-subtitle": { + "defaultMessage": "Prečo nevytvoríte nejaký?" + }, + "enabled": { + "defaultMessage": "Aktivované" + }, + "error.access.at-least-one": { + "defaultMessage": "Je vyžadovaná aspoň jedna autorizácia alebo jedno prístupové pravidlo" + }, + "error.access.duplicate-usernames": { + "defaultMessage": "Používateľské mená pre autorizáciu musia byť jedinečné" + }, + "error.invalid-auth": { + "defaultMessage": "Neplatný email alebo heslo" + }, + "error.invalid-domain": { + "defaultMessage": "Neplatná doména: {domain}" + }, + "error.invalid-email": { + "defaultMessage": "Neplatná emailová adresa" + }, + "error.max-character-length": { + "defaultMessage": "Maximálna dĺžka je {max} znak{max, plural, one {} few {y} other {ov}}" + }, + "error.max-domains": { + "defaultMessage": "Príliš veľa domén, maximum je {max}" + }, + "error.maximum": { + "defaultMessage": "Maximum je {max}" + }, + "error.min-character-length": { + "defaultMessage": "Minimálna dĺžka je {min} znak{min, plural, one {} few {y} other {ov}}" + }, + "error.minimum": { + "defaultMessage": "Minimum je {min}" + }, + "error.passwords-must-match": { + "defaultMessage": "Heslá sa musia zhodovať" + }, + "error.required": { + "defaultMessage": "Toto pole je povinné" + }, + "expires.on": { + "defaultMessage": "Platnosť do: {date}" + }, + "footer.github-fork": { + "defaultMessage": "Forknite ma na GitHube" + }, + "host.flags.block-exploits": { + "defaultMessage": "Blokovať bežné exploity" + }, + "host.flags.cache-assets": { + "defaultMessage": "Uložiť zdroje do vyrovnávacej pamäte" + }, + "host.flags.preserve-path": { + "defaultMessage": "Zachovať cestu" + }, + "host.flags.protocols": { + "defaultMessage": "Protokoly" + }, + "host.flags.websockets-upgrade": { + "defaultMessage": "Podpora WebSockets" + }, + "host.forward-port": { + "defaultMessage": "Port presmerovania" + }, + "host.forward-scheme": { + "defaultMessage": "Schéma" + }, + "hosts": { + "defaultMessage": "Hostitelia" + }, + "http-only": { + "defaultMessage": "Len HTTP" + }, + "lets-encrypt": { + "defaultMessage": "Let's Encrypt" + }, + "lets-encrypt-via-dns": { + "defaultMessage": "Let's Encrypt cez DNS" + }, + "lets-encrypt-via-http": { + "defaultMessage": "Let's Encrypt cez HTTP" + }, + "loading": { + "defaultMessage": "Načítava sa…" + }, + "login.title": { + "defaultMessage": "Prihláste sa do svojho účtu" + }, + "nginx-config.label": { + "defaultMessage": "Vlastná Nginx konfigurácia" + }, + "nginx-config.placeholder": { + "defaultMessage": "# Zadajte vlastnú Nginx konfiguráciu na vlastné riziko!" + }, + "no-permission-error": { + "defaultMessage": "Nemáte oprávnenie na zobrazenie tohto obsahu." + }, + "notfound.action": { + "defaultMessage": "Späť na hlavnú stránku" + }, + "notfound.content": { + "defaultMessage": "Ľutujeme, stránka, ktorú hľadáte, nebola nájdená" + }, + "notfound.title": { + "defaultMessage": "Ups… Našli ste chybovú stránku" + }, + "notification.error": { + "defaultMessage": "Chyba" + }, + "notification.object-deleted": { + "defaultMessage": "{object} bol odstránený" + }, + "notification.object-disabled": { + "defaultMessage": "{object} bol deaktivovaný" + }, + "notification.object-enabled": { + "defaultMessage": "{object} bol aktivovaný" + }, + "notification.object-renewed": { + "defaultMessage": "{object} bol obnovený" + }, + "notification.object-saved": { + "defaultMessage": "{object} bol uložené" + }, + "notification.success": { + "defaultMessage": "Úspech" + }, + "object.actions-title": { + "defaultMessage": "{object} #{id}" + }, + "object.add": { + "defaultMessage": "Pridať {object}" + }, + "object.delete": { + "defaultMessage": "Vymazať {object}" + }, + "object.delete.content": { + "defaultMessage": "Naozaj chcete vymazať tento {object}?" + }, + "object.edit": { + "defaultMessage": "Upraviť {object}" + }, + "object.empty": { + "defaultMessage": "Nie sú žiadne/y {objects}" + }, + "object.event.created": { + "defaultMessage": "Vytvorený {object}" + }, + "object.event.deleted": { + "defaultMessage": "Vymazaný {object}" + }, + "object.event.disabled": { + "defaultMessage": "Deaktivovaný {object}" + }, + "object.event.enabled": { + "defaultMessage": "Aktivovaný {object}" + }, + "object.event.renewed": { + "defaultMessage": "Obnovený {object}" + }, + "object.event.updated": { + "defaultMessage": "Aktualizovaný {object}" + }, + "offline": { + "defaultMessage": "Offline" + }, + "online": { + "defaultMessage": "Online" + }, + "options": { + "defaultMessage": "Možnosti" + }, + "password": { + "defaultMessage": "Heslo" + }, + "password.generate": { + "defaultMessage": "Vygenerovať náhodné heslo" + }, + "password.hide": { + "defaultMessage": "Skryť heslo" + }, + "password.show": { + "defaultMessage": "Zobraziť heslo" + }, + "permissions.hidden": { + "defaultMessage": "Skryté" + }, + "permissions.manage": { + "defaultMessage": "Spravovať" + }, + "permissions.view": { + "defaultMessage": "Len na zobrazenie" + }, + "permissions.visibility.all": { + "defaultMessage": "Všetky položky" + }, + "permissions.visibility.title": { + "defaultMessage": "Viditeľnosť položky" + }, + "permissions.visibility.user": { + "defaultMessage": "Len vytvorené položky" + }, + "proxy-host": { + "defaultMessage": "Proxy hostiteľa" + }, + "proxy-host.forward-host": { + "defaultMessage": "Cieľový názov hostiteľa / IP" + }, + "proxy-hosts": { + "defaultMessage": "Proxy hostitelia" + }, + "proxy-hosts.count": { + "defaultMessage": "{count} {count, plural, one {proxy hostiteľ} few {proxy hostitelia} other {proxy hostiteľov}}" + }, + "public": { + "defaultMessage": "Verejné" + }, + "redirection-host": { + "defaultMessage": "presmerovacieho hostiteľa" + }, + "redirection-host.forward-domain": { + "defaultMessage": "Cieľová doména" + }, + "redirection-host.forward-http-code": { + "defaultMessage": "HTTP kód" + }, + "redirection-hosts": { + "defaultMessage": "Presmerovací hostitelia" + }, + "redirection-hosts.count": { + "defaultMessage": "{count} {count, plural, one {presmerovací hostiteľ} few {presmerovací hostitelia} other {presmerovacích hostiteľov}}" + }, + "role.admin": { + "defaultMessage": "Administrátor" + }, + "role.standard-user": { + "defaultMessage": "Bežný používateľ" + }, + "save": { + "defaultMessage": "Uložiť" + }, + "setting": { + "defaultMessage": "Nastavenie" + }, + "settings": { + "defaultMessage": "Nastavenia" + }, + "settings.default-site": { + "defaultMessage": "Predvolená stránka" + }, + "settings.default-site.404": { + "defaultMessage": "Stránka 404" + }, + "settings.default-site.444": { + "defaultMessage": "Bez odpovede (444)" + }, + "settings.default-site.congratulations": { + "defaultMessage": "Gratulačná stránka" + }, + "settings.default-site.description": { + "defaultMessage": "Čo zobraziť, keď Nginx zachytí neznámeho hostiteľa" + }, + "settings.default-site.html": { + "defaultMessage": "Vlastné HTML" + }, + "settings.default-site.html.placeholder": { + "defaultMessage": "" + }, + "settings.default-site.redirect": { + "defaultMessage": "Presmerovať" + }, + "setup.preamble": { + "defaultMessage": "Začnite vytvorením administrátorského účtu." + }, + "setup.title": { + "defaultMessage": "Vitajte!" + }, + "sign-in": { + "defaultMessage": "Prihlásiť sa" + }, + "ssl-certificate": { + "defaultMessage": "SSL certifikát" + }, + "stream": { + "defaultMessage": "Stream" + }, + "stream.forward-host": { + "defaultMessage": "Cieľový hostiteľ" + }, + "stream.incoming-port": { + "defaultMessage": "Vstupný port" + }, + "streams": { + "defaultMessage": "Streamy" + }, + "streams.count": { + "defaultMessage": "{count} {count, plural, one {stream} few {streamy} other {streamov}}" + }, + "streams.tcp": { + "defaultMessage": "TCP" + }, + "streams.udp": { + "defaultMessage": "UDP" + }, + "test": { + "defaultMessage": "Test" + }, + "user": { + "defaultMessage": "používateľa" + }, + "user.change-password": { + "defaultMessage": "Zmeniť heslo" + }, + "user.confirm-password": { + "defaultMessage": "Potvrdiť heslo" + }, + "user.current-password": { + "defaultMessage": "Aktuálne heslo" + }, + "user.edit-profile": { + "defaultMessage": "Upraviť profil" + }, + "user.full-name": { + "defaultMessage": "Celé meno" + }, + "user.login-as": { + "defaultMessage": "Prihlásiť sa ako {name}" + }, + "user.logout": { + "defaultMessage": "Odhlásiť sa" + }, + "user.new-password": { + "defaultMessage": "Nové heslo" + }, + "user.nickname": { + "defaultMessage": "Prezývka" + }, + "user.set-password": { + "defaultMessage": "Nastaviť heslo" + }, + "user.set-permissions": { + "defaultMessage": "Nastaviť oprávnenia pre {name}" + }, + "user.switch-dark": { + "defaultMessage": "Prepnúť na tmavý režim" + }, + "user.switch-light": { + "defaultMessage": "Prepnúť na svetlý režim" + }, + "username": { + "defaultMessage": "Používateľské meno" + }, + "users": { + "defaultMessage": "Používatelia" + } +} From 0373017a9fa936c7e507466b693d425454289ac3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Gruszczy=C5=84ski?= Date: Wed, 12 Nov 2025 13:10:29 +0100 Subject: [PATCH 41/42] Add Polish locale --- frontend/check-locales.cjs | 1 + frontend/src/locale/IntlProvider.tsx | 7 + frontend/src/locale/lang/lang-list.json | 3 +- frontend/src/locale/lang/pl.json | 216 ++++++ frontend/src/locale/src/HelpDoc/index.ts | 3 +- .../src/locale/src/HelpDoc/pl/AccessLists.md | 7 + .../src/locale/src/HelpDoc/pl/Certificates.md | 22 + .../src/locale/src/HelpDoc/pl/DeadHosts.md | 7 + .../src/locale/src/HelpDoc/pl/ProxyHosts.md | 7 + .../locale/src/HelpDoc/pl/RedirectionHosts.md | 5 + frontend/src/locale/src/HelpDoc/pl/Streams.md | 5 + frontend/src/locale/src/HelpDoc/pl/index.ts | 6 + frontend/src/locale/src/lang-list.json | 3 + frontend/src/locale/src/pl.json | 644 ++++++++++++++++++ 14 files changed, 934 insertions(+), 2 deletions(-) create mode 100755 frontend/src/locale/lang/pl.json create mode 100644 frontend/src/locale/src/HelpDoc/pl/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/pl/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/pl/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/pl/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/pl/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/pl/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/pl/index.ts create mode 100644 frontend/src/locale/src/pl.json diff --git a/frontend/check-locales.cjs b/frontend/check-locales.cjs index d300c9d1..cfc1df99 100755 --- a/frontend/check-locales.cjs +++ b/frontend/check-locales.cjs @@ -12,6 +12,7 @@ const allLocales = [ ["de", "de-DE"], ["ru", "ru-RU"], ["zh", "zh-CN"], + ["pl", "pl-PL"], ]; const ignoreUnused = [ diff --git a/frontend/src/locale/IntlProvider.tsx b/frontend/src/locale/IntlProvider.tsx index 14657fcb..1276e2a3 100755 --- a/frontend/src/locale/IntlProvider.tsx +++ b/frontend/src/locale/IntlProvider.tsx @@ -6,6 +6,7 @@ import langJa from "./lang/ja.json"; import langList from "./lang/lang-list.json"; import langRu from "./lang/ru.json"; import langZh from "./lang/zh.json"; +import langPl from "./lang/pl.json"; // first item of each array should be the language code, // not the country code @@ -17,6 +18,7 @@ const localeOptions = [ ["ja", "ja-JP"], ["ru", "ru-RU"], ["zh", "zh-CN"], + ["pl", "pl-PL"], ]; const loadMessages = (locale?: string): typeof langList & typeof langEn => { @@ -32,6 +34,8 @@ const loadMessages = (locale?: string): typeof langList & typeof langEn => { return Object.assign({}, langList, langEn, langRu); case "zh": return Object.assign({}, langList, langEn, langZh); + case "pl": + return Object.assign({}, langList, langEn, langPl); default: return Object.assign({}, langList, langEn); } @@ -54,6 +58,9 @@ const getFlagCodeForLocale = (locale?: string) => { case "zh": case "zh-CN": return "CN"; + case "pl": + case "pl-PL": + return "PL"; default: return "EN"; } diff --git a/frontend/src/locale/lang/lang-list.json b/frontend/src/locale/lang/lang-list.json index 7d9bc214..19bc2313 100644 --- a/frontend/src/locale/lang/lang-list.json +++ b/frontend/src/locale/lang/lang-list.json @@ -4,5 +4,6 @@ "locale-es-ES": "Español", "locale-ja-JP": "日本語", "locale-ru-RU": "Русский", - "locale-zh-CN": "中文" + "locale-zh-CN": "中文", + "locale-pl-PL": "Polski" } \ No newline at end of file diff --git a/frontend/src/locale/lang/pl.json b/frontend/src/locale/lang/pl.json new file mode 100755 index 00000000..29de6e96 --- /dev/null +++ b/frontend/src/locale/lang/pl.json @@ -0,0 +1,216 @@ +{ + "access-list": "Lista dostępu", + "access-list.access-count": "{count} {count, plural, one {Reguła} few {Reguły} other {Reguł}}", + "access-list.auth-count": "{count} {count, plural, one {Użytkownik} few {Użytkowników} other {Użytkowników}}", + "access-list.help-rules-last": "Gdy istnieje co najmniej 1 reguła, ta reguła blokująca wszystko zostanie dodana na końcu", + "access-list.help.rules-order": "Należy pamiętać, że dyrektywy zezwolenia i odmowy będą stosowane w kolejności, w jakiej zostały zdefiniowane.", + "access-list.pass-auth": "Przekaż uwierzytelnienie do Upstream'u", + "access-list.public": "Publicznie dostępne", + "access-list.public.subtitle": "Nie wymaga uwierzytelnienia podstawowego", + "access-list.satisfy-any": "Dowolny warunek wystarczy", + "access-list.subtitle": "{users} {users, plural, one {Użytkownik} few {Użytkowników} other {Użytkowników}}, {rules} {rules, plural, one {Reguła} few {Reguły} other {Reguł}} - Utworzono: {date}", + "access-lists": "Listy dostępu", + "action.add": "Dodaj", + "action.add-location": "Dodaj lokalizację", + "action.close": "Zamknij", + "action.delete": "Usuń", + "action.disable": "Wyłącz", + "action.download": "Pobierz", + "action.edit": "Edytuj", + "action.enable": "Włącz", + "action.permissions": "Uprawnienia", + "action.renew": "Odnów", + "action.view-details": "Pokaż szczegóły", + "auditlogs": "Logi audytu", + "cancel": "Anuluj", + "certificate": "Certyfikat", + "certificate.custom-certificate": "Certyfikat", + "certificate.custom-certificate-key": "Klucz certyfikatu", + "certificate.custom-intermediate": "Certyfikat pośredni", + "certificate.in-use": "W użyciu", + "certificate.none.subtitle": "Nie przypisano certyfikatu", + "certificate.none.subtitle.for-http": "Ten host nie będzie używał HTTPS", + "certificate.none.title": "Brak", + "certificate.not-in-use": "Nie używany", + "certificate.renew": "Odnów certyfikat", + "certificates": "Certyfikaty", + "certificates.custom": "Certyfikat własny", + "certificates.custom.warning": "Pliki kluczy chronione hasłem nie są obsługiwane.", + "certificates.dns.credentials": "Zawartość pliku z poświadczeniami", + "certificates.dns.credentials-note": "Ta wtyczka wymaga pliku konfiguracyjnego zawierającego token API lub inne poświadczenia dla twojego dostawcy", + "certificates.dns.credentials-warning": "Te dane zostaną zapisane jako zwykły tekst w bazie danych i pliku!", + "certificates.dns.propagation-seconds": "Sekundy propagacji", + "certificates.dns.propagation-seconds-note": "Pozostaw puste, aby użyć domyślnej wartości wtyczki. Liczba sekund oczekiwania na propagację DNS.", + "certificates.dns.provider": "Dostawca DNS", + "certificates.dns.warning": "Ta sekcja wymaga pewnej wiedzy na temat Certbot i jego wtyczek DNS. Zapoznaj się z dokumentacją odpowiednich wtyczek.", + "certificates.http.reachability-404": "Znaleziono serwer pod tą domeną, ale nie wygląda na to, że jest to Nginx Proxy Manager. Upewnij się, że twoja domena wskazuje na adres IP, gdzie działa twoja instancja NPM.", + "certificates.http.reachability-failed-to-check": "Nie udało się sprawdzić dostępności z powodu błędu komunikacji z site24x7.com.", + "certificates.http.reachability-not-resolved": "Brak dostępnego serwera pod tą domeną. Upewnij się, że twoja domena istnieje i wskazuje na adres IP, gdzie działa twoja instancja NPM, oraz w razie potrzeby, że port 80 jest przekierowany w routerze.", + "certificates.http.reachability-ok": "Twój serwer jest dostępny i tworzenie certyfikatów powinno być możliwe.", + "certificates.http.reachability-other": "Znaleziono serwer pod tą domeną, ale zwrócił nieoczekiwany kod statusu {code}. Czy to serwer NPM? Upewnij się, że twoja domena wskazuje na adres IP, gdzie działa twoja instancja NPM.", + "certificates.http.reachability-wrong-data": "Znaleziono serwer pod tą domeną, ale zwrócił nieoczekiwane dane. Czy to serwer NPM? Upewnij się, że twoja domena wskazuje na adres IP, gdzie działa twoja instancja NPM.", + "certificates.http.test-results": "Wyniki testu", + "certificates.http.warning": "Te domeny muszą być już skonfigurowane tak, aby wskazywały na tę instalację.", + "certificates.request.subtitle": "z Let's Encrypt", + "certificates.request.title": "Zamów nowy certyfikat", + "column.access": "Dostęp", + "column.authorization": "Autoryzacja", + "column.authorizations": "Autoryzacje", + "column.custom-locations": "Własne lokalizacje", + "column.destination": "Cel", + "column.details": "Szczegóły", + "column.email": "Email", + "column.event": "Zdarzenie", + "column.expires": "Wygasa", + "column.http-code": "Kod HTTP", + "column.incoming-port": "Port przychodzący", + "column.name": "Nazwa", + "column.protocol": "Protokół", + "column.provider": "Dostawca", + "column.roles": "Role", + "column.rules": "Reguły", + "column.satisfy": "Spełnij", + "column.satisfy-all": "Wszystkie", + "column.satisfy-any": "Dowolny", + "column.scheme": "Schemat", + "column.source": "Źródło", + "column.ssl": "SSL", + "column.status": "Status", + "created-on": "Utworzono: {date}", + "dashboard": "Panel", + "dead-host": "Host 404", + "dead-hosts": "Hosty 404", + "dead-hosts.count": "{count} {count, plural, one {Host 404} few {Hosty 404} other {Hostów 404}}", + "disabled": "Wyłączone", + "domain-names": "Nazwy domen", + "domain-names.max": "Maksymalnie {count} nazw domen", + "domain-names.placeholder": "Zacznij pisać, aby dodać domenę...", + "domain-names.wildcards-not-permitted": "Symbole wieloznaczne nie są dozwolone dla tego typu", + "domain-names.wildcards-not-supported": "Symbole wieloznaczne nie są obsługiwane dla tego CA", + "domains.force-ssl": "Wymuś SSL", + "domains.hsts-enabled": "HSTS włączone", + "domains.hsts-subdomains": "HSTS dla subdomen", + "domains.http2-support": "Obsługa HTTP/2", + "domains.use-dns": "Użyj wyzwania DNS", + "email-address": "Adres email", + "empty-search": "Nie znaleziono wyników", + "empty-subtitle": "Może utworzysz nowy?", + "enabled": "Włączone", + "error.access.at-least-one": "Wymagana jest co najmniej jedna autoryzacja lub jedna reguła dostępu", + "error.access.duplicate-usernames": "Nazwy użytkowników autoryzacji muszą być unikalne", + "error.invalid-auth": "Nieprawidłowy email lub hasło", + "error.invalid-domain": "Nieprawidłowa domena: {domain}", + "error.invalid-email": "Nieprawidłowy adres email", + "error.max-character-length": "Maksymalna długość to {max} {max, plural, one {znak} few {znaki} other {znaków}}", + "error.max-domains": "Zbyt wiele domen, maksimum to {max}", + "error.maximum": "Maksimum to {max}", + "error.min-character-length": "Minimalna długość to {min} {min, plural, one {znak} few {znaki} other {znaków}}", + "error.minimum": "Minimum to {min}", + "error.passwords-must-match": "Hasła muszą się zgadzać", + "error.required": "To pole jest wymagane", + "expires.on": "Wygasa: {date}", + "footer.github-fork": "Forkuj mnie na Github", + "host.flags.block-exploits": "Blokuj typowe exploity", + "host.flags.cache-assets": "Buforuj zasoby", + "host.flags.preserve-path": "Zachowaj ścieżkę", + "host.flags.protocols": "Protokoły", + "host.flags.websockets-upgrade": "Obsługa WebSockets", + "host.forward-port": "Port przekierowania", + "host.forward-scheme": "Schemat", + "hosts": "Hosty", + "http-only": "Tylko HTTP", + "lets-encrypt": "Let's Encrypt", + "lets-encrypt-via-dns": "Let's Encrypt przez DNS", + "lets-encrypt-via-http": "Let's Encrypt przez HTTP", + "loading": "Ładowanie…", + "login.title": "Zaloguj się na swoje konto", + "nginx-config.label": "Własna konfiguracja Nginx", + "nginx-config.placeholder": "# Wprowadź tutaj własną konfigurację Nginx na własną odpowiedzialność!", + "no-permission-error": "Nie masz uprawnień do wyświetlenia tego.", + "notfound.action": "Zabierz mnie do strony głównej", + "notfound.content": "Przepraszamy, ale strona, której szukasz, nie została znaleziona", + "notfound.title": "Ups… Właśnie znalazłeś stronę błędu", + "notification.error": "Błąd", + "notification.object-deleted": "{object} został usunięty", + "notification.object-disabled": "{object} został wyłączony", + "notification.object-enabled": "{object} został włączony", + "notification.object-renewed": "{object} został odnowiony", + "notification.object-saved": "{object} został zapisany", + "notification.success": "Sukces", + "object.actions-title": "{object} #{id}", + "object.add": "Dodaj {object}", + "object.delete": "Usuń {object}", + "object.delete.content": "Czy na pewno chcesz usunąć ten {object}?", + "object.edit": "Edytuj {object}", + "object.empty": "Brak {objects}", + "object.event.created": "Utworzono {object}", + "object.event.deleted": "Usunięto {object}", + "object.event.disabled": "Wyłączono {object}", + "object.event.enabled": "Włączono {object}", + "object.event.renewed": "Odnowiono {object}", + "object.event.updated": "Zaktualizowano {object}", + "offline": "Offline", + "online": "Online", + "options": "Opcje", + "password": "Hasło", + "password.generate": "Wygeneruj losowe hasło", + "password.hide": "Ukryj hasło", + "password.show": "Pokaż hasło", + "permissions.hidden": "Ukryte", + "permissions.manage": "Zarządzaj", + "permissions.view": "Tylko podgląd", + "permissions.visibility.all": "Wszystkie elementy", + "permissions.visibility.title": "Widoczność elementów", + "permissions.visibility.user": "Tylko utworzone elementy", + "proxy-host": "Host proxy", + "proxy-host.forward-host": "Przekieruj na hostname / IP", + "proxy-hosts": "Hosty proxy", + "proxy-hosts.count": "{count} {count, plural, one {Host proxy} few {Hosty proxy} other {Hostów proxy}}", + "public": "Publiczne", + "redirection-host": "Host przekierowania", + "redirection-host.forward-domain": "Domena docelowa", + "redirection-host.forward-http-code": "Kod HTTP", + "redirection-hosts": "Hosty przekierowań", + "redirection-hosts.count": "{count} {count, plural, one {Host przekierowania} few {Hosty przekierowań} other {Hostów przekierowań}}", + "role.admin": "Administrator", + "role.standard-user": "Standardowy użytkownik", + "save": "Zapisz", + "setting": "Ustawienie", + "settings": "Ustawienia", + "settings.default-site": "Domyślna strona", + "settings.default-site.404": "Strona 404", + "settings.default-site.444": "Brak odpowiedzi (444)", + "settings.default-site.congratulations": "Strona gratulacyjna", + "settings.default-site.description": "Co wyświetlić, gdy Nginx otrzyma nieznany Host", + "settings.default-site.html": "Własny HTML", + "settings.default-site.html.placeholder": "", + "settings.default-site.redirect": "Przekierowanie", + "setup.preamble": "Zacznij od utworzenia konta administratora.", + "setup.title": "Witaj!", + "sign-in": "Zaloguj się", + "ssl-certificate": "Certyfikat SSL", + "stream": "Stream", + "stream.forward-host": "Host docelowy", + "stream.incoming-port": "Port przychodzący", + "streams": "Streamy", + "streams.count": "{count} {count, plural, one {Stream} few {Streamy} other {Streamów}}", + "streams.tcp": "TCP", + "streams.udp": "UDP", + "test": "Test", + "user": "Użytkownik", + "user.change-password": "Zmień hasło", + "user.confirm-password": "Potwierdź hasło", + "user.current-password": "Aktualne hasło", + "user.edit-profile": "Edytuj profil", + "user.full-name": "Pełne imię i nazwisko", + "user.login-as": "Zaloguj jako {name}", + "user.logout": "Wyloguj", + "user.new-password": "Nowe hasło", + "user.nickname": "Pseudonim", + "user.set-password": "Ustaw hasło", + "user.set-permissions": "Ustaw uprawnienia dla {name}", + "user.switch-dark": "Przełącz na tryb ciemny", + "user.switch-light": "Przełącz na tryb jasny", + "username": "Nazwa użytkownika", + "users": "Użytkownicy" +} diff --git a/frontend/src/locale/src/HelpDoc/index.ts b/frontend/src/locale/src/HelpDoc/index.ts index dc57c343..d58b8b9e 100644 --- a/frontend/src/locale/src/HelpDoc/index.ts +++ b/frontend/src/locale/src/HelpDoc/index.ts @@ -2,8 +2,9 @@ import * as de from "./de/index"; import * as en from "./en/index"; import * as ja from "./ja/index"; import * as zh from "./zh/index"; +import * as pl from "./pl/index"; -const items: any = { en, de, ja, zh }; +const items: any = { en, de, ja, zh, pl }; const fallbackLang = "en"; diff --git a/frontend/src/locale/src/HelpDoc/pl/AccessLists.md b/frontend/src/locale/src/HelpDoc/pl/AccessLists.md new file mode 100644 index 00000000..9cfe9756 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/pl/AccessLists.md @@ -0,0 +1,7 @@ +## Czym jest lista dostępu? + +Listy dostępu zapewniają czarną lub białą listę określonych adresów IP klientów wraz z uwierzytelnianiem dla hostów proxy za pomocą podstawowego uwierzytelniania HTTP. + +Możesz skonfigurować wiele reguł klienta, nazw użytkowników i haseł dla pojedynczej listy dostępu, a następnie zastosować ją do jednego lub więcej hostów proxy. + +Jest to najbardziej przydatne w przypadku przekierowywanych usług internetowych, które nie mają wbudowanych mechanizmów uwierzytelniania lub gdy chcesz zabezpieczyć się przed nieznanymi klientami. \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/pl/Certificates.md b/frontend/src/locale/src/HelpDoc/pl/Certificates.md new file mode 100644 index 00000000..261dc327 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/pl/Certificates.md @@ -0,0 +1,22 @@ +## Pomoc dotycząca certyfikatów + +### Certyfikat HTTP + +Certyfikat weryfikowany przez HTTP oznacza, że serwery Let's Encrypt będą próbowały połączyć się z twoimi domenami przez HTTP (nie HTTPS!) i jeśli się to powiedzie, wydadzą twój certyfikat. + +W przypadku tej metody musisz mieć utworzony Host proxy dla swoich domen, który jest dostępny przez HTTP i wskazuje na tę instalację Nginx. +Po otrzymaniu certyfikatu możesz zmodyfikować Host proxy, aby używał również tego certyfikatu do połączeń HTTPS. Jednak Host proxy nadal będzie musiał być skonfigurowany do dostępu przez HTTP, aby certyfikat mógł być odnawiany. + +Ten proces nie obsługuje domen wieloznacznych (wildcard). + +### Certyfikat DNS + +Certyfikat weryfikowany przez DNS wymaga użycia wtyczki dostawcy DNS. Ten dostawca DNS zostanie użyty do utworzenia tymczasowych rekordów w twojej domenie, a następnie Let's Encrypt sprawdzi te rekordy, aby upewnić się, że jesteś właścicielem i jeśli się powiedzie, wydadzą twój certyfikat. + +Nie musisz mieć utworzonego Hosta proxy przed wystąpieniem o ten typ certyfikatu. Nie musisz również mieć skonfigurowanego Hosta proxy do dostępu przez HTTP. + +Ten proces obsługuje domeny wieloznaczne (wildcard). + +### Własny certyfikat + +Użyj tej opcji, aby przesłać własny certyfikat SSL, dostarczony przez twój własny urząd certyfikacji. diff --git a/frontend/src/locale/src/HelpDoc/pl/DeadHosts.md b/frontend/src/locale/src/HelpDoc/pl/DeadHosts.md new file mode 100644 index 00000000..ec3d4fd2 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/pl/DeadHosts.md @@ -0,0 +1,7 @@ +## Czym jest host 404? + +Host 404 to po prostu konfiguracja hosta, która wyświetla stronę 404. + +Może to być przydatne, gdy twoja domena jest indeksowana w wyszukiwarkach i chcesz zapewnić ładniejszą stronę błędu lub konkretnie poinformować roboty indeksujące, że strony domeny już nie istnieją. + +Kolejną zaletą posiadania tego hosta jest możliwość śledzenia logów dla odwiedzin oraz przeglądania źródeł ruchu (referrerów). \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/pl/ProxyHosts.md b/frontend/src/locale/src/HelpDoc/pl/ProxyHosts.md new file mode 100644 index 00000000..43e94efb --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/pl/ProxyHosts.md @@ -0,0 +1,7 @@ +## Czym jest host proxy? + +Host proxy to punkt wejściowy dla usługi internetowej, którą chcesz przekierować. + +Zapewnia opcjonalne zakończenie SSL dla twojej usługi, która może nie mieć wbudowanej obsługi SSL. + +Hosty proxy są najpopularniejszym zastosowaniem Nginx Proxy Manager \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/pl/RedirectionHosts.md b/frontend/src/locale/src/HelpDoc/pl/RedirectionHosts.md new file mode 100644 index 00000000..22854dfc --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/pl/RedirectionHosts.md @@ -0,0 +1,5 @@ +## Czym jest host przekierowania? + +Host przekierowania przekierowuje żądania z domeny przychodzącej i przenosi odwiedzającego na inną domenę. + +Najczęstszym powodem używania tego typu hosta jest sytuacja, gdy twoja strona internetowa zmienia domeny, ale nadal masz linki z wyszukiwarek lub odnośniki wskazujące na starą domenę. \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/pl/Streams.md b/frontend/src/locale/src/HelpDoc/pl/Streams.md new file mode 100644 index 00000000..793cada0 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/pl/Streams.md @@ -0,0 +1,5 @@ +## Czym jest strumień? + +Stosunkowo nowa funkcja dla Nginx, strumień służy do przekazywania ruchu TCP/UDP bezpośrednio na inny komputer/serwer w sieci. + +Jeśli prowadzisz serwery gier, FTP lub SSH, może się to okazać przydatne \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/pl/index.ts b/frontend/src/locale/src/HelpDoc/pl/index.ts new file mode 100644 index 00000000..a9bb46ba --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/pl/index.ts @@ -0,0 +1,6 @@ +export * as AccessLists from "./AccessLists.md"; +export * as Certificates from "./Certificates.md"; +export * as DeadHosts from "./DeadHosts.md"; +export * as ProxyHosts from "./ProxyHosts.md"; +export * as RedirectionHosts from "./RedirectionHosts.md"; +export * as Streams from "./Streams.md"; diff --git a/frontend/src/locale/src/lang-list.json b/frontend/src/locale/src/lang-list.json index 9343a882..9697e294 100755 --- a/frontend/src/locale/src/lang-list.json +++ b/frontend/src/locale/src/lang-list.json @@ -16,5 +16,8 @@ }, "locale-zh-CN": { "defaultMessage": "中文" + }, + "locale-pl-PL": { + "defaultMessage": "Polski" } } diff --git a/frontend/src/locale/src/pl.json b/frontend/src/locale/src/pl.json new file mode 100644 index 00000000..265ae562 --- /dev/null +++ b/frontend/src/locale/src/pl.json @@ -0,0 +1,644 @@ +{ + "access-list": { + "defaultMessage": "Lista dostępu" + }, + "access-list.access-count": { + "defaultMessage": "{count} {count, plural, one {Reguła} few {Reguły} other {Reguł}}" + }, + "access-list.auth-count": { + "defaultMessage": "{count} {count, plural, one {Użytkownik} few {Użytkowników} other {Użytkowników}}" + }, + "access-list.help-rules-last": { + "defaultMessage": "Gdy istnieje co najmniej 1 reguła, ta reguła blokująca wszystko zostanie dodana na końcu" + }, + "access-list.help.rules-order": { + "defaultMessage": "Należy pamiętać, że dyrektywy zezwolenia i odmowy będą stosowane w kolejności, w jakiej zostały zdefiniowane." + }, + "access-list.pass-auth": { + "defaultMessage": "Przekaż uwierzytelnienie do serwera docelowego" + }, + "access-list.public": { + "defaultMessage": "Publicznie dostępne" + }, + "access-list.public.subtitle": { + "defaultMessage": "Nie wymaga uwierzytelnienia podstawowego" + }, + "access-list.satisfy-any": { + "defaultMessage": "Spełnij dowolny warunek" + }, + "access-list.subtitle": { + "defaultMessage": "{users} {users, plural, one {Użytkownik} few {Użytkowników} other {Użytkowników}}, {rules} {rules, plural, one {Reguła} few {Reguły} other {Reguł}} - Utworzono: {date}" + }, + "access-lists": { + "defaultMessage": "Listy dostępu" + }, + "action.add": { + "defaultMessage": "Dodaj" + }, + "action.add-location": { + "defaultMessage": "Dodaj lokalizację" + }, + "action.close": { + "defaultMessage": "Zamknij" + }, + "action.delete": { + "defaultMessage": "Usuń" + }, + "action.disable": { + "defaultMessage": "Wyłącz" + }, + "action.download": { + "defaultMessage": "Pobierz" + }, + "action.edit": { + "defaultMessage": "Edytuj" + }, + "action.enable": { + "defaultMessage": "Włącz" + }, + "action.permissions": { + "defaultMessage": "Uprawnienia" + }, + "action.renew": { + "defaultMessage": "Odnów" + }, + "action.view-details": { + "defaultMessage": "Pokaż szczegóły" + }, + "auditlogs": { + "defaultMessage": "Logi audytu" + }, + "cancel": { + "defaultMessage": "Anuluj" + }, + "certificate": { + "defaultMessage": "Certyfikat" + }, + "certificate.custom-certificate": { + "defaultMessage": "Certyfikat" + }, + "certificate.custom-certificate-key": { + "defaultMessage": "Klucz certyfikatu" + }, + "certificate.custom-intermediate": { + "defaultMessage": "Certyfikat pośredni" + }, + "certificate.in-use": { + "defaultMessage": "W użyciu" + }, + "certificate.none.subtitle": { + "defaultMessage": "Nie przypisano certyfikatu" + }, + "certificate.none.subtitle.for-http": { + "defaultMessage": "Ten host nie będzie używał HTTPS" + }, + "certificate.none.title": { + "defaultMessage": "Brak" + }, + "certificate.not-in-use": { + "defaultMessage": "Nie używany" + }, + "certificate.renew": { + "defaultMessage": "Odnów certyfikat" + }, + "certificates": { + "defaultMessage": "Certyfikaty" + }, + "certificates.custom": { + "defaultMessage": "Certyfikat własny" + }, + "certificates.custom.warning": { + "defaultMessage": "Pliki kluczy chronione hasłem nie są obsługiwane." + }, + "certificates.dns.credentials": { + "defaultMessage": "Zawartość pliku z poświadczeniami" + }, + "certificates.dns.credentials-note": { + "defaultMessage": "Ta wtyczka wymaga pliku konfiguracyjnego zawierającego token API lub inne poświadczenia dla twojego dostawcy" + }, + "certificates.dns.credentials-warning": { + "defaultMessage": "Te dane zostaną zapisane jako zwykły tekst w bazie danych i pliku!" + }, + "certificates.dns.propagation-seconds": { + "defaultMessage": "Sekundy propagacji" + }, + "certificates.dns.propagation-seconds-note": { + "defaultMessage": "Pozostaw puste, aby użyć domyślnej wartości wtyczki. Liczba sekund oczekiwania na propagację DNS." + }, + "certificates.dns.provider": { + "defaultMessage": "Dostawca DNS" + }, + "certificates.dns.warning": { + "defaultMessage": "Ta sekcja wymaga pewnej wiedzy na temat Certbot i jego wtyczek DNS. Zapoznaj się z dokumentacją odpowiednich wtyczek." + }, + "certificates.http.reachability-404": { + "defaultMessage": "Znaleziono serwer pod tą domeną, ale nie wygląda na to, że jest to Nginx Proxy Manager. Upewnij się, że twoja domena wskazuje na adres IP, gdzie działa twoja instancja NPM." + }, + "certificates.http.reachability-failed-to-check": { + "defaultMessage": "Nie udało się sprawdzić dostępności z powodu błędu komunikacji z site24x7.com." + }, + "certificates.http.reachability-not-resolved": { + "defaultMessage": "Brak dostępnego serwera pod tą domeną. Upewnij się, że twoja domena istnieje i wskazuje na adres IP, gdzie działa twoja instancja NPM, oraz w razie potrzeby, że port 80 jest przekierowany w routerze lub owarty w firewall-u." + }, + "certificates.http.reachability-ok": { + "defaultMessage": "Twój serwer jest dostępny i tworzenie certyfikatów powinno być możliwe." + }, + "certificates.http.reachability-other": { + "defaultMessage": "Znaleziono serwer pod tą domeną, ale zwrócił nieoczekiwany kod statusu {code}. Czy to serwer NPM? Upewnij się, że twoja domena wskazuje na adres IP, gdzie działa twoja instancja NPM." + }, + "certificates.http.reachability-wrong-data": { + "defaultMessage": "Znaleziono serwer pod tą domeną, ale zwrócił nieoczekiwane dane. Czy to serwer NPM? Upewnij się, że twoja domena wskazuje na adres IP, gdzie działa twoja instancja NPM." + }, + "certificates.http.test-results": { + "defaultMessage": "Wyniki testu" + }, + "certificates.http.warning": { + "defaultMessage": "Te domeny muszą być już skonfigurowane tak, aby wskazywały na ten serwer www" + }, + "certificates.request.subtitle": { + "defaultMessage": "z Let's Encrypt" + }, + "certificates.request.title": { + "defaultMessage": "Zamów nowy certyfikat" + }, + "column.access": { + "defaultMessage": "Dostęp" + }, + "column.authorization": { + "defaultMessage": "Autoryzacja" + }, + "column.authorizations": { + "defaultMessage": "Autoryzacje" + }, + "column.custom-locations": { + "defaultMessage": "Własne lokalizacje" + }, + "column.destination": { + "defaultMessage": "Cel" + }, + "column.details": { + "defaultMessage": "Szczegóły" + }, + "column.email": { + "defaultMessage": "Email" + }, + "column.event": { + "defaultMessage": "Zdarzenie" + }, + "column.expires": { + "defaultMessage": "Wygasa" + }, + "column.http-code": { + "defaultMessage": "Kod HTTP" + }, + "column.incoming-port": { + "defaultMessage": "Port przychodzący" + }, + "column.name": { + "defaultMessage": "Nazwa" + }, + "column.protocol": { + "defaultMessage": "Protokół" + }, + "column.provider": { + "defaultMessage": "Dostawca" + }, + "column.roles": { + "defaultMessage": "Role" + }, + "column.rules": { + "defaultMessage": "Reguły" + }, + "column.satisfy": { + "defaultMessage": "Spełnij" + }, + "column.satisfy-all": { + "defaultMessage": "Wszystkie" + }, + "column.satisfy-any": { + "defaultMessage": "Dowolny" + }, + "column.scheme": { + "defaultMessage": "Schemat" + }, + "column.source": { + "defaultMessage": "Źródło" + }, + "column.ssl": { + "defaultMessage": "SSL" + }, + "column.status": { + "defaultMessage": "Status" + }, + "created-on": { + "defaultMessage": "Utworzono: {date}" + }, + "dashboard": { + "defaultMessage": "Panel" + }, + "dead-host": { + "defaultMessage": "Host 404" + }, + "dead-hosts": { + "defaultMessage": "Hosty 404" + }, + "dead-hosts.count": { + "defaultMessage": "{count} {count, plural, one {Host 404} few {Hosty 404} other {Hostów 404}}" + }, + "disabled": { + "defaultMessage": "Wyłączone" + }, + "domain-names": { + "defaultMessage": "Nazwy domen" + }, + "domain-names.max": { + "defaultMessage": "Maksymalnie {count} nazw domen" + }, + "domain-names.placeholder": { + "defaultMessage": "Zacznij pisać, aby dodać domenę..." + }, + "domain-names.wildcards-not-permitted": { + "defaultMessage": "Symbole wieloznaczne nie są dozwolone dla tego typu" + }, + "domain-names.wildcards-not-supported": { + "defaultMessage": "Symbole wieloznaczne nie są obsługiwane dla tego CA" + }, + "domains.force-ssl": { + "defaultMessage": "Wymuś SSL" + }, + "domains.hsts-enabled": { + "defaultMessage": "HSTS włączone" + }, + "domains.hsts-subdomains": { + "defaultMessage": "HSTS dla subdomen" + }, + "domains.http2-support": { + "defaultMessage": "Obsługa HTTP/2" + }, + "domains.use-dns": { + "defaultMessage": "Użyj wyzwania DNS" + }, + "email-address": { + "defaultMessage": "Adres email" + }, + "empty-search": { + "defaultMessage": "Nie znaleziono wyników" + }, + "empty-subtitle": { + "defaultMessage": "Może utworzysz nowy?" + }, + "enabled": { + "defaultMessage": "Włączone" + }, + "error.access.at-least-one": { + "defaultMessage": "Wymagana jest co najmniej jedna autoryzacja lub jedna reguła dostępu" + }, + "error.access.duplicate-usernames": { + "defaultMessage": "Nazwy użytkowników autoryzacji muszą być unikalne" + }, + "error.invalid-auth": { + "defaultMessage": "Nieprawidłowy email lub hasło" + }, + "error.invalid-domain": { + "defaultMessage": "Nieprawidłowa domena: {domain}" + }, + "error.invalid-email": { + "defaultMessage": "Nieprawidłowy adres email" + }, + "error.max-character-length": { + "defaultMessage": "Maksymalna długość to {max} {max, plural, one {znak} few {znaki} other {znaków}}" + }, + "error.max-domains": { + "defaultMessage": "Zbyt wiele domen, maksimum to {max}" + }, + "error.maximum": { + "defaultMessage": "Maksimum to {max}" + }, + "error.min-character-length": { + "defaultMessage": "Minimalna długość to {min} {min, plural, one {znak} few {znaki} other {znaków}}" + }, + "error.minimum": { + "defaultMessage": "Minimum to {min}" + }, + "error.passwords-must-match": { + "defaultMessage": "Hasła muszą się zgadzać" + }, + "error.required": { + "defaultMessage": "To pole jest wymagane" + }, + "expires.on": { + "defaultMessage": "Wygasa: {date}" + }, + "footer.github-fork": { + "defaultMessage": "Forkuj mnie na Github" + }, + "host.flags.block-exploits": { + "defaultMessage": "Blokuj typowe exploity" + }, + "host.flags.cache-assets": { + "defaultMessage": "Buforuj zasoby" + }, + "host.flags.preserve-path": { + "defaultMessage": "Zachowaj ścieżkę" + }, + "host.flags.protocols": { + "defaultMessage": "Protokoły" + }, + "host.flags.websockets-upgrade": { + "defaultMessage": "Obsługa WebSockets" + }, + "host.forward-port": { + "defaultMessage": "Port przekierowania" + }, + "host.forward-scheme": { + "defaultMessage": "Schemat" + }, + "hosts": { + "defaultMessage": "Hosty" + }, + "http-only": { + "defaultMessage": "Tylko HTTP" + }, + "lets-encrypt": { + "defaultMessage": "Let's Encrypt" + }, + "lets-encrypt-via-dns": { + "defaultMessage": "Let's Encrypt przez DNS" + }, + "lets-encrypt-via-http": { + "defaultMessage": "Let's Encrypt przez HTTP" + }, + "loading": { + "defaultMessage": "Ładowanie…" + }, + "login.title": { + "defaultMessage": "Zaloguj się na swoje konto" + }, + "nginx-config.label": { + "defaultMessage": "Własna konfiguracja Nginx" + }, + "nginx-config.placeholder": { + "defaultMessage": "# Wprowadź tutaj własną konfigurację Nginx na własną odpowiedzialność!" + }, + "no-permission-error": { + "defaultMessage": "Nie masz uprawnień do wyświetlenia tego." + }, + "notfound.action": { + "defaultMessage": "Zabierz mnie do strony głównej" + }, + "notfound.content": { + "defaultMessage": "Przepraszamy, ale strona, której szukasz, nie została znaleziona" + }, + "notfound.title": { + "defaultMessage": "Ups… Właśnie znalazłeś stronę błędu" + }, + "notification.error": { + "defaultMessage": "Błąd" + }, + "notification.object-deleted": { + "defaultMessage": "{object} został usunięty" + }, + "notification.object-disabled": { + "defaultMessage": "{object} został wyłączony" + }, + "notification.object-enabled": { + "defaultMessage": "{object} został włączony" + }, + "notification.object-renewed": { + "defaultMessage": "{object} został odnowiony" + }, + "notification.object-saved": { + "defaultMessage": "{object} został zapisany" + }, + "notification.success": { + "defaultMessage": "Sukces" + }, + "object.actions-title": { + "defaultMessage": "{object} #{id}" + }, + "object.add": { + "defaultMessage": "Dodaj {object}" + }, + "object.delete": { + "defaultMessage": "Usuń {object}" + }, + "object.delete.content": { + "defaultMessage": "Czy na pewno chcesz usunąć {object}?" + }, + "object.edit": { + "defaultMessage": "Edytuj {object}" + }, + "object.empty": { + "defaultMessage": "Brak {objects}" + }, + "object.event.created": { + "defaultMessage": "Utworzono {object}" + }, + "object.event.deleted": { + "defaultMessage": "Usunięto {object}" + }, + "object.event.disabled": { + "defaultMessage": "Wyłączono {object}" + }, + "object.event.enabled": { + "defaultMessage": "Włączono {object}" + }, + "object.event.renewed": { + "defaultMessage": "Odnowiono {object}" + }, + "object.event.updated": { + "defaultMessage": "Zaktualizowano {object}" + }, + "offline": { + "defaultMessage": "Offline" + }, + "online": { + "defaultMessage": "Online" + }, + "options": { + "defaultMessage": "Opcje" + }, + "password": { + "defaultMessage": "Hasło" + }, + "password.generate": { + "defaultMessage": "Wygeneruj losowe hasło" + }, + "password.hide": { + "defaultMessage": "Ukryj hasło" + }, + "password.show": { + "defaultMessage": "Pokaż hasło" + }, + "permissions.hidden": { + "defaultMessage": "Ukryte" + }, + "permissions.manage": { + "defaultMessage": "Zarządzaj" + }, + "permissions.view": { + "defaultMessage": "Tylko podgląd" + }, + "permissions.visibility.all": { + "defaultMessage": "Wszystkie elementy" + }, + "permissions.visibility.title": { + "defaultMessage": "Widoczność elementów" + }, + "permissions.visibility.user": { + "defaultMessage": "Tylko utworzone elementy" + }, + "proxy-host": { + "defaultMessage": "Host proxy" + }, + "proxy-host.forward-host": { + "defaultMessage": "Przekieruj na hostname / IP" + }, + "proxy-hosts": { + "defaultMessage": "Hosty proxy" + }, + "proxy-hosts.count": { + "defaultMessage": "{count} {count, plural, one {Host proxy} few {Hosty proxy} other {Hostów proxy}}" + }, + "public": { + "defaultMessage": "Publiczne" + }, + "redirection-host": { + "defaultMessage": "Host przekierowania" + }, + "redirection-host.forward-domain": { + "defaultMessage": "Domena docelowa" + }, + "redirection-host.forward-http-code": { + "defaultMessage": "Kod HTTP" + }, + "redirection-hosts": { + "defaultMessage": "Hosty przekierowań" + }, + "redirection-hosts.count": { + "defaultMessage": "{count} {count, plural, one {Host przekierowania} few {Hosty przekierowań} other {Hostów przekierowań}}" + }, + "role.admin": { + "defaultMessage": "Administrator" + }, + "role.standard-user": { + "defaultMessage": "Standardowy użytkownik" + }, + "save": { + "defaultMessage": "Zapisz" + }, + "setting": { + "defaultMessage": "Ustawienie" + }, + "settings": { + "defaultMessage": "Ustawienia" + }, + "settings.default-site": { + "defaultMessage": "Domyślna strona" + }, + "settings.default-site.404": { + "defaultMessage": "Strona 404" + }, + "settings.default-site.444": { + "defaultMessage": "Brak odpowiedzi (444)" + }, + "settings.default-site.congratulations": { + "defaultMessage": "Strona gratulacyjna" + }, + "settings.default-site.description": { + "defaultMessage": "Co wyświetlić, gdy Nginx otrzyma nieznany Host" + }, + "settings.default-site.html": { + "defaultMessage": "Własny HTML" + }, + "settings.default-site.html.placeholder": { + "defaultMessage": "" + }, + "settings.default-site.redirect": { + "defaultMessage": "Przekierowanie" + }, + "setup.preamble": { + "defaultMessage": "Zacznij od utworzenia konta administratora." + }, + "setup.title": { + "defaultMessage": "Witaj!" + }, + "sign-in": { + "defaultMessage": "Zaloguj się" + }, + "ssl-certificate": { + "defaultMessage": "Certyfikat SSL" + }, + "stream": { + "defaultMessage": "Strumień" + }, + "stream.forward-host": { + "defaultMessage": "Host docelowy" + }, + "stream.incoming-port": { + "defaultMessage": "Port przychodzący" + }, + "streams": { + "defaultMessage": "Strumienie" + }, + "streams.count": { + "defaultMessage": "{count} {count, plural, one {Strumień} few {Strumienie} other {Strumieni}}" + }, + "streams.tcp": { + "defaultMessage": "TCP" + }, + "streams.udp": { + "defaultMessage": "UDP" + }, + "test": { + "defaultMessage": "Test" + }, + "user": { + "defaultMessage": "Użytkownik" + }, + "user.change-password": { + "defaultMessage": "Zmień hasło" + }, + "user.confirm-password": { + "defaultMessage": "Potwierdź hasło" + }, + "user.current-password": { + "defaultMessage": "Aktualne hasło" + }, + "user.edit-profile": { + "defaultMessage": "Edytuj profil" + }, + "user.full-name": { + "defaultMessage": "Pełne imię i nazwisko" + }, + "user.login-as": { + "defaultMessage": "Zaloguj jako {name}" + }, + "user.logout": { + "defaultMessage": "Wyloguj" + }, + "user.new-password": { + "defaultMessage": "Nowe hasło" + }, + "user.nickname": { + "defaultMessage": "Pseudonim" + }, + "user.set-password": { + "defaultMessage": "Ustaw hasło" + }, + "user.set-permissions": { + "defaultMessage": "Ustaw uprawnienia dla {name}" + }, + "user.switch-dark": { + "defaultMessage": "Przełącz na tryb ciemny" + }, + "user.switch-light": { + "defaultMessage": "Przełącz na tryb jasny" + }, + "username": { + "defaultMessage": "Nazwa użytkownika" + }, + "users": { + "defaultMessage": "Użytkownicy" + } +} From 5dde98cf3ecaa3a998058ec793d6b36fd225a092 Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Wed, 12 Nov 2025 23:01:40 +1000 Subject: [PATCH 42/42] Updates to polish locale after running through automated scripts --- frontend/src/locale/lang/lang-list.json | 4 +- frontend/src/locale/lang/pl.json | 18 +- frontend/src/locale/src/pl.json | 1284 +++++++++++------------ 3 files changed, 653 insertions(+), 653 deletions(-) diff --git a/frontend/src/locale/lang/lang-list.json b/frontend/src/locale/lang/lang-list.json index 040c7f62..e2fcd4ee 100644 --- a/frontend/src/locale/lang/lang-list.json +++ b/frontend/src/locale/lang/lang-list.json @@ -3,8 +3,8 @@ "locale-en-US": "English", "locale-es-ES": "Español", "locale-ja-JP": "日本語", + "locale-pl-PL": "Polski", "locale-ru-RU": "Русский", "locale-sk-SK": "Slovak", - "locale-zh-CN": "中文", - "locale-pl-PL": "Polski" + "locale-zh-CN": "中文" } \ No newline at end of file diff --git a/frontend/src/locale/lang/pl.json b/frontend/src/locale/lang/pl.json index 29de6e96..9b646e6a 100755 --- a/frontend/src/locale/lang/pl.json +++ b/frontend/src/locale/lang/pl.json @@ -4,10 +4,10 @@ "access-list.auth-count": "{count} {count, plural, one {Użytkownik} few {Użytkowników} other {Użytkowników}}", "access-list.help-rules-last": "Gdy istnieje co najmniej 1 reguła, ta reguła blokująca wszystko zostanie dodana na końcu", "access-list.help.rules-order": "Należy pamiętać, że dyrektywy zezwolenia i odmowy będą stosowane w kolejności, w jakiej zostały zdefiniowane.", - "access-list.pass-auth": "Przekaż uwierzytelnienie do Upstream'u", + "access-list.pass-auth": "Przekaż uwierzytelnienie do serwera docelowego", "access-list.public": "Publicznie dostępne", "access-list.public.subtitle": "Nie wymaga uwierzytelnienia podstawowego", - "access-list.satisfy-any": "Dowolny warunek wystarczy", + "access-list.satisfy-any": "Spełnij dowolny warunek", "access-list.subtitle": "{users} {users, plural, one {Użytkownik} few {Użytkowników} other {Użytkowników}}, {rules} {rules, plural, one {Reguła} few {Reguły} other {Reguł}} - Utworzono: {date}", "access-lists": "Listy dostępu", "action.add": "Dodaj", @@ -45,12 +45,12 @@ "certificates.dns.warning": "Ta sekcja wymaga pewnej wiedzy na temat Certbot i jego wtyczek DNS. Zapoznaj się z dokumentacją odpowiednich wtyczek.", "certificates.http.reachability-404": "Znaleziono serwer pod tą domeną, ale nie wygląda na to, że jest to Nginx Proxy Manager. Upewnij się, że twoja domena wskazuje na adres IP, gdzie działa twoja instancja NPM.", "certificates.http.reachability-failed-to-check": "Nie udało się sprawdzić dostępności z powodu błędu komunikacji z site24x7.com.", - "certificates.http.reachability-not-resolved": "Brak dostępnego serwera pod tą domeną. Upewnij się, że twoja domena istnieje i wskazuje na adres IP, gdzie działa twoja instancja NPM, oraz w razie potrzeby, że port 80 jest przekierowany w routerze.", + "certificates.http.reachability-not-resolved": "Brak dostępnego serwera pod tą domeną. Upewnij się, że twoja domena istnieje i wskazuje na adres IP, gdzie działa twoja instancja NPM, oraz w razie potrzeby, że port 80 jest przekierowany w routerze lub owarty w firewall-u.", "certificates.http.reachability-ok": "Twój serwer jest dostępny i tworzenie certyfikatów powinno być możliwe.", "certificates.http.reachability-other": "Znaleziono serwer pod tą domeną, ale zwrócił nieoczekiwany kod statusu {code}. Czy to serwer NPM? Upewnij się, że twoja domena wskazuje na adres IP, gdzie działa twoja instancja NPM.", "certificates.http.reachability-wrong-data": "Znaleziono serwer pod tą domeną, ale zwrócił nieoczekiwane dane. Czy to serwer NPM? Upewnij się, że twoja domena wskazuje na adres IP, gdzie działa twoja instancja NPM.", "certificates.http.test-results": "Wyniki testu", - "certificates.http.warning": "Te domeny muszą być już skonfigurowane tak, aby wskazywały na tę instalację.", + "certificates.http.warning": "Te domeny muszą być już skonfigurowane tak, aby wskazywały na ten serwer www", "certificates.request.subtitle": "z Let's Encrypt", "certificates.request.title": "Zamów nowy certyfikat", "column.access": "Dostęp", @@ -140,7 +140,7 @@ "object.actions-title": "{object} #{id}", "object.add": "Dodaj {object}", "object.delete": "Usuń {object}", - "object.delete.content": "Czy na pewno chcesz usunąć ten {object}?", + "object.delete.content": "Czy na pewno chcesz usunąć {object}?", "object.edit": "Edytuj {object}", "object.empty": "Brak {objects}", "object.event.created": "Utworzono {object}", @@ -189,11 +189,11 @@ "setup.title": "Witaj!", "sign-in": "Zaloguj się", "ssl-certificate": "Certyfikat SSL", - "stream": "Stream", + "stream": "Strumień", "stream.forward-host": "Host docelowy", "stream.incoming-port": "Port przychodzący", - "streams": "Streamy", - "streams.count": "{count} {count, plural, one {Stream} few {Streamy} other {Streamów}}", + "streams": "Strumienie", + "streams.count": "{count} {count, plural, one {Strumień} few {Strumienie} other {Strumieni}}", "streams.tcp": "TCP", "streams.udp": "UDP", "test": "Test", @@ -213,4 +213,4 @@ "user.switch-light": "Przełącz na tryb jasny", "username": "Nazwa użytkownika", "users": "Użytkownicy" -} +} \ No newline at end of file diff --git a/frontend/src/locale/src/pl.json b/frontend/src/locale/src/pl.json index 265ae562..ed9ac5dd 100644 --- a/frontend/src/locale/src/pl.json +++ b/frontend/src/locale/src/pl.json @@ -1,644 +1,644 @@ { - "access-list": { - "defaultMessage": "Lista dostępu" - }, - "access-list.access-count": { - "defaultMessage": "{count} {count, plural, one {Reguła} few {Reguły} other {Reguł}}" - }, - "access-list.auth-count": { - "defaultMessage": "{count} {count, plural, one {Użytkownik} few {Użytkowników} other {Użytkowników}}" - }, - "access-list.help-rules-last": { - "defaultMessage": "Gdy istnieje co najmniej 1 reguła, ta reguła blokująca wszystko zostanie dodana na końcu" - }, - "access-list.help.rules-order": { - "defaultMessage": "Należy pamiętać, że dyrektywy zezwolenia i odmowy będą stosowane w kolejności, w jakiej zostały zdefiniowane." - }, - "access-list.pass-auth": { - "defaultMessage": "Przekaż uwierzytelnienie do serwera docelowego" - }, - "access-list.public": { - "defaultMessage": "Publicznie dostępne" - }, - "access-list.public.subtitle": { - "defaultMessage": "Nie wymaga uwierzytelnienia podstawowego" - }, - "access-list.satisfy-any": { - "defaultMessage": "Spełnij dowolny warunek" - }, - "access-list.subtitle": { - "defaultMessage": "{users} {users, plural, one {Użytkownik} few {Użytkowników} other {Użytkowników}}, {rules} {rules, plural, one {Reguła} few {Reguły} other {Reguł}} - Utworzono: {date}" - }, - "access-lists": { - "defaultMessage": "Listy dostępu" - }, - "action.add": { - "defaultMessage": "Dodaj" - }, - "action.add-location": { - "defaultMessage": "Dodaj lokalizację" - }, - "action.close": { - "defaultMessage": "Zamknij" - }, - "action.delete": { - "defaultMessage": "Usuń" - }, - "action.disable": { - "defaultMessage": "Wyłącz" - }, - "action.download": { - "defaultMessage": "Pobierz" - }, - "action.edit": { - "defaultMessage": "Edytuj" - }, - "action.enable": { - "defaultMessage": "Włącz" - }, - "action.permissions": { - "defaultMessage": "Uprawnienia" - }, - "action.renew": { - "defaultMessage": "Odnów" - }, - "action.view-details": { - "defaultMessage": "Pokaż szczegóły" - }, - "auditlogs": { - "defaultMessage": "Logi audytu" - }, - "cancel": { - "defaultMessage": "Anuluj" - }, - "certificate": { - "defaultMessage": "Certyfikat" - }, - "certificate.custom-certificate": { - "defaultMessage": "Certyfikat" - }, - "certificate.custom-certificate-key": { - "defaultMessage": "Klucz certyfikatu" - }, - "certificate.custom-intermediate": { - "defaultMessage": "Certyfikat pośredni" - }, - "certificate.in-use": { - "defaultMessage": "W użyciu" - }, - "certificate.none.subtitle": { - "defaultMessage": "Nie przypisano certyfikatu" - }, - "certificate.none.subtitle.for-http": { - "defaultMessage": "Ten host nie będzie używał HTTPS" - }, - "certificate.none.title": { - "defaultMessage": "Brak" - }, - "certificate.not-in-use": { - "defaultMessage": "Nie używany" - }, - "certificate.renew": { - "defaultMessage": "Odnów certyfikat" - }, - "certificates": { - "defaultMessage": "Certyfikaty" - }, - "certificates.custom": { - "defaultMessage": "Certyfikat własny" - }, - "certificates.custom.warning": { - "defaultMessage": "Pliki kluczy chronione hasłem nie są obsługiwane." - }, - "certificates.dns.credentials": { - "defaultMessage": "Zawartość pliku z poświadczeniami" - }, - "certificates.dns.credentials-note": { - "defaultMessage": "Ta wtyczka wymaga pliku konfiguracyjnego zawierającego token API lub inne poświadczenia dla twojego dostawcy" - }, - "certificates.dns.credentials-warning": { - "defaultMessage": "Te dane zostaną zapisane jako zwykły tekst w bazie danych i pliku!" - }, - "certificates.dns.propagation-seconds": { - "defaultMessage": "Sekundy propagacji" - }, - "certificates.dns.propagation-seconds-note": { - "defaultMessage": "Pozostaw puste, aby użyć domyślnej wartości wtyczki. Liczba sekund oczekiwania na propagację DNS." - }, - "certificates.dns.provider": { - "defaultMessage": "Dostawca DNS" - }, - "certificates.dns.warning": { - "defaultMessage": "Ta sekcja wymaga pewnej wiedzy na temat Certbot i jego wtyczek DNS. Zapoznaj się z dokumentacją odpowiednich wtyczek." - }, - "certificates.http.reachability-404": { - "defaultMessage": "Znaleziono serwer pod tą domeną, ale nie wygląda na to, że jest to Nginx Proxy Manager. Upewnij się, że twoja domena wskazuje na adres IP, gdzie działa twoja instancja NPM." - }, - "certificates.http.reachability-failed-to-check": { - "defaultMessage": "Nie udało się sprawdzić dostępności z powodu błędu komunikacji z site24x7.com." - }, - "certificates.http.reachability-not-resolved": { - "defaultMessage": "Brak dostępnego serwera pod tą domeną. Upewnij się, że twoja domena istnieje i wskazuje na adres IP, gdzie działa twoja instancja NPM, oraz w razie potrzeby, że port 80 jest przekierowany w routerze lub owarty w firewall-u." - }, - "certificates.http.reachability-ok": { - "defaultMessage": "Twój serwer jest dostępny i tworzenie certyfikatów powinno być możliwe." - }, - "certificates.http.reachability-other": { - "defaultMessage": "Znaleziono serwer pod tą domeną, ale zwrócił nieoczekiwany kod statusu {code}. Czy to serwer NPM? Upewnij się, że twoja domena wskazuje na adres IP, gdzie działa twoja instancja NPM." - }, - "certificates.http.reachability-wrong-data": { - "defaultMessage": "Znaleziono serwer pod tą domeną, ale zwrócił nieoczekiwane dane. Czy to serwer NPM? Upewnij się, że twoja domena wskazuje na adres IP, gdzie działa twoja instancja NPM." - }, - "certificates.http.test-results": { - "defaultMessage": "Wyniki testu" - }, - "certificates.http.warning": { - "defaultMessage": "Te domeny muszą być już skonfigurowane tak, aby wskazywały na ten serwer www" - }, - "certificates.request.subtitle": { - "defaultMessage": "z Let's Encrypt" - }, - "certificates.request.title": { - "defaultMessage": "Zamów nowy certyfikat" - }, - "column.access": { - "defaultMessage": "Dostęp" - }, - "column.authorization": { - "defaultMessage": "Autoryzacja" - }, - "column.authorizations": { - "defaultMessage": "Autoryzacje" - }, - "column.custom-locations": { - "defaultMessage": "Własne lokalizacje" - }, - "column.destination": { - "defaultMessage": "Cel" - }, - "column.details": { - "defaultMessage": "Szczegóły" - }, - "column.email": { - "defaultMessage": "Email" - }, - "column.event": { - "defaultMessage": "Zdarzenie" - }, - "column.expires": { - "defaultMessage": "Wygasa" - }, - "column.http-code": { - "defaultMessage": "Kod HTTP" - }, - "column.incoming-port": { - "defaultMessage": "Port przychodzący" - }, - "column.name": { - "defaultMessage": "Nazwa" - }, - "column.protocol": { - "defaultMessage": "Protokół" - }, - "column.provider": { - "defaultMessage": "Dostawca" - }, - "column.roles": { - "defaultMessage": "Role" - }, - "column.rules": { - "defaultMessage": "Reguły" - }, - "column.satisfy": { - "defaultMessage": "Spełnij" - }, - "column.satisfy-all": { - "defaultMessage": "Wszystkie" - }, - "column.satisfy-any": { - "defaultMessage": "Dowolny" - }, - "column.scheme": { - "defaultMessage": "Schemat" - }, - "column.source": { - "defaultMessage": "Źródło" - }, - "column.ssl": { - "defaultMessage": "SSL" - }, - "column.status": { - "defaultMessage": "Status" - }, - "created-on": { - "defaultMessage": "Utworzono: {date}" - }, - "dashboard": { - "defaultMessage": "Panel" - }, - "dead-host": { - "defaultMessage": "Host 404" - }, - "dead-hosts": { - "defaultMessage": "Hosty 404" - }, - "dead-hosts.count": { - "defaultMessage": "{count} {count, plural, one {Host 404} few {Hosty 404} other {Hostów 404}}" - }, - "disabled": { - "defaultMessage": "Wyłączone" - }, - "domain-names": { - "defaultMessage": "Nazwy domen" - }, - "domain-names.max": { - "defaultMessage": "Maksymalnie {count} nazw domen" - }, - "domain-names.placeholder": { - "defaultMessage": "Zacznij pisać, aby dodać domenę..." - }, - "domain-names.wildcards-not-permitted": { - "defaultMessage": "Symbole wieloznaczne nie są dozwolone dla tego typu" - }, - "domain-names.wildcards-not-supported": { - "defaultMessage": "Symbole wieloznaczne nie są obsługiwane dla tego CA" - }, - "domains.force-ssl": { - "defaultMessage": "Wymuś SSL" - }, - "domains.hsts-enabled": { - "defaultMessage": "HSTS włączone" - }, - "domains.hsts-subdomains": { - "defaultMessage": "HSTS dla subdomen" - }, - "domains.http2-support": { - "defaultMessage": "Obsługa HTTP/2" - }, - "domains.use-dns": { - "defaultMessage": "Użyj wyzwania DNS" - }, - "email-address": { - "defaultMessage": "Adres email" - }, - "empty-search": { - "defaultMessage": "Nie znaleziono wyników" - }, - "empty-subtitle": { - "defaultMessage": "Może utworzysz nowy?" - }, - "enabled": { - "defaultMessage": "Włączone" - }, - "error.access.at-least-one": { - "defaultMessage": "Wymagana jest co najmniej jedna autoryzacja lub jedna reguła dostępu" - }, - "error.access.duplicate-usernames": { - "defaultMessage": "Nazwy użytkowników autoryzacji muszą być unikalne" - }, - "error.invalid-auth": { - "defaultMessage": "Nieprawidłowy email lub hasło" - }, - "error.invalid-domain": { - "defaultMessage": "Nieprawidłowa domena: {domain}" - }, - "error.invalid-email": { - "defaultMessage": "Nieprawidłowy adres email" - }, - "error.max-character-length": { - "defaultMessage": "Maksymalna długość to {max} {max, plural, one {znak} few {znaki} other {znaków}}" - }, - "error.max-domains": { - "defaultMessage": "Zbyt wiele domen, maksimum to {max}" - }, - "error.maximum": { - "defaultMessage": "Maksimum to {max}" - }, - "error.min-character-length": { - "defaultMessage": "Minimalna długość to {min} {min, plural, one {znak} few {znaki} other {znaków}}" - }, - "error.minimum": { - "defaultMessage": "Minimum to {min}" - }, - "error.passwords-must-match": { - "defaultMessage": "Hasła muszą się zgadzać" - }, - "error.required": { - "defaultMessage": "To pole jest wymagane" - }, - "expires.on": { - "defaultMessage": "Wygasa: {date}" - }, - "footer.github-fork": { - "defaultMessage": "Forkuj mnie na Github" - }, - "host.flags.block-exploits": { - "defaultMessage": "Blokuj typowe exploity" - }, - "host.flags.cache-assets": { - "defaultMessage": "Buforuj zasoby" - }, - "host.flags.preserve-path": { - "defaultMessage": "Zachowaj ścieżkę" - }, - "host.flags.protocols": { - "defaultMessage": "Protokoły" - }, - "host.flags.websockets-upgrade": { - "defaultMessage": "Obsługa WebSockets" - }, - "host.forward-port": { - "defaultMessage": "Port przekierowania" - }, - "host.forward-scheme": { - "defaultMessage": "Schemat" - }, - "hosts": { - "defaultMessage": "Hosty" - }, - "http-only": { - "defaultMessage": "Tylko HTTP" - }, - "lets-encrypt": { - "defaultMessage": "Let's Encrypt" - }, - "lets-encrypt-via-dns": { - "defaultMessage": "Let's Encrypt przez DNS" - }, - "lets-encrypt-via-http": { - "defaultMessage": "Let's Encrypt przez HTTP" - }, - "loading": { - "defaultMessage": "Ładowanie…" - }, - "login.title": { - "defaultMessage": "Zaloguj się na swoje konto" - }, - "nginx-config.label": { - "defaultMessage": "Własna konfiguracja Nginx" - }, - "nginx-config.placeholder": { - "defaultMessage": "# Wprowadź tutaj własną konfigurację Nginx na własną odpowiedzialność!" - }, - "no-permission-error": { - "defaultMessage": "Nie masz uprawnień do wyświetlenia tego." - }, - "notfound.action": { - "defaultMessage": "Zabierz mnie do strony głównej" - }, - "notfound.content": { - "defaultMessage": "Przepraszamy, ale strona, której szukasz, nie została znaleziona" - }, - "notfound.title": { - "defaultMessage": "Ups… Właśnie znalazłeś stronę błędu" - }, - "notification.error": { - "defaultMessage": "Błąd" - }, - "notification.object-deleted": { - "defaultMessage": "{object} został usunięty" - }, - "notification.object-disabled": { - "defaultMessage": "{object} został wyłączony" - }, - "notification.object-enabled": { - "defaultMessage": "{object} został włączony" - }, - "notification.object-renewed": { - "defaultMessage": "{object} został odnowiony" - }, - "notification.object-saved": { - "defaultMessage": "{object} został zapisany" - }, - "notification.success": { - "defaultMessage": "Sukces" - }, - "object.actions-title": { - "defaultMessage": "{object} #{id}" - }, - "object.add": { - "defaultMessage": "Dodaj {object}" - }, - "object.delete": { - "defaultMessage": "Usuń {object}" - }, - "object.delete.content": { - "defaultMessage": "Czy na pewno chcesz usunąć {object}?" - }, - "object.edit": { - "defaultMessage": "Edytuj {object}" - }, - "object.empty": { - "defaultMessage": "Brak {objects}" - }, - "object.event.created": { - "defaultMessage": "Utworzono {object}" - }, - "object.event.deleted": { - "defaultMessage": "Usunięto {object}" - }, - "object.event.disabled": { - "defaultMessage": "Wyłączono {object}" - }, - "object.event.enabled": { - "defaultMessage": "Włączono {object}" - }, - "object.event.renewed": { - "defaultMessage": "Odnowiono {object}" - }, - "object.event.updated": { - "defaultMessage": "Zaktualizowano {object}" - }, - "offline": { - "defaultMessage": "Offline" - }, - "online": { - "defaultMessage": "Online" - }, - "options": { - "defaultMessage": "Opcje" - }, - "password": { - "defaultMessage": "Hasło" - }, - "password.generate": { - "defaultMessage": "Wygeneruj losowe hasło" - }, - "password.hide": { - "defaultMessage": "Ukryj hasło" - }, - "password.show": { - "defaultMessage": "Pokaż hasło" - }, - "permissions.hidden": { - "defaultMessage": "Ukryte" - }, - "permissions.manage": { - "defaultMessage": "Zarządzaj" - }, - "permissions.view": { - "defaultMessage": "Tylko podgląd" - }, - "permissions.visibility.all": { - "defaultMessage": "Wszystkie elementy" - }, - "permissions.visibility.title": { - "defaultMessage": "Widoczność elementów" - }, - "permissions.visibility.user": { - "defaultMessage": "Tylko utworzone elementy" - }, - "proxy-host": { - "defaultMessage": "Host proxy" - }, - "proxy-host.forward-host": { - "defaultMessage": "Przekieruj na hostname / IP" - }, - "proxy-hosts": { - "defaultMessage": "Hosty proxy" - }, - "proxy-hosts.count": { - "defaultMessage": "{count} {count, plural, one {Host proxy} few {Hosty proxy} other {Hostów proxy}}" - }, - "public": { - "defaultMessage": "Publiczne" - }, - "redirection-host": { - "defaultMessage": "Host przekierowania" - }, - "redirection-host.forward-domain": { - "defaultMessage": "Domena docelowa" - }, - "redirection-host.forward-http-code": { - "defaultMessage": "Kod HTTP" - }, - "redirection-hosts": { - "defaultMessage": "Hosty przekierowań" - }, - "redirection-hosts.count": { - "defaultMessage": "{count} {count, plural, one {Host przekierowania} few {Hosty przekierowań} other {Hostów przekierowań}}" - }, - "role.admin": { - "defaultMessage": "Administrator" - }, - "role.standard-user": { - "defaultMessage": "Standardowy użytkownik" - }, - "save": { - "defaultMessage": "Zapisz" - }, - "setting": { - "defaultMessage": "Ustawienie" - }, - "settings": { - "defaultMessage": "Ustawienia" - }, - "settings.default-site": { - "defaultMessage": "Domyślna strona" - }, - "settings.default-site.404": { - "defaultMessage": "Strona 404" - }, - "settings.default-site.444": { - "defaultMessage": "Brak odpowiedzi (444)" - }, - "settings.default-site.congratulations": { - "defaultMessage": "Strona gratulacyjna" - }, - "settings.default-site.description": { - "defaultMessage": "Co wyświetlić, gdy Nginx otrzyma nieznany Host" - }, - "settings.default-site.html": { - "defaultMessage": "Własny HTML" - }, - "settings.default-site.html.placeholder": { - "defaultMessage": "" - }, - "settings.default-site.redirect": { - "defaultMessage": "Przekierowanie" - }, - "setup.preamble": { - "defaultMessage": "Zacznij od utworzenia konta administratora." - }, - "setup.title": { - "defaultMessage": "Witaj!" - }, - "sign-in": { - "defaultMessage": "Zaloguj się" - }, - "ssl-certificate": { - "defaultMessage": "Certyfikat SSL" - }, - "stream": { - "defaultMessage": "Strumień" - }, - "stream.forward-host": { - "defaultMessage": "Host docelowy" - }, - "stream.incoming-port": { - "defaultMessage": "Port przychodzący" - }, - "streams": { - "defaultMessage": "Strumienie" - }, - "streams.count": { - "defaultMessage": "{count} {count, plural, one {Strumień} few {Strumienie} other {Strumieni}}" - }, - "streams.tcp": { - "defaultMessage": "TCP" - }, - "streams.udp": { - "defaultMessage": "UDP" - }, - "test": { - "defaultMessage": "Test" - }, - "user": { - "defaultMessage": "Użytkownik" - }, - "user.change-password": { - "defaultMessage": "Zmień hasło" - }, - "user.confirm-password": { - "defaultMessage": "Potwierdź hasło" - }, - "user.current-password": { - "defaultMessage": "Aktualne hasło" - }, - "user.edit-profile": { - "defaultMessage": "Edytuj profil" - }, - "user.full-name": { - "defaultMessage": "Pełne imię i nazwisko" - }, - "user.login-as": { - "defaultMessage": "Zaloguj jako {name}" - }, - "user.logout": { - "defaultMessage": "Wyloguj" - }, - "user.new-password": { - "defaultMessage": "Nowe hasło" - }, - "user.nickname": { - "defaultMessage": "Pseudonim" - }, - "user.set-password": { - "defaultMessage": "Ustaw hasło" - }, - "user.set-permissions": { - "defaultMessage": "Ustaw uprawnienia dla {name}" - }, - "user.switch-dark": { - "defaultMessage": "Przełącz na tryb ciemny" - }, - "user.switch-light": { - "defaultMessage": "Przełącz na tryb jasny" - }, - "username": { - "defaultMessage": "Nazwa użytkownika" - }, - "users": { - "defaultMessage": "Użytkownicy" - } + "access-list": { + "defaultMessage": "Lista dostępu" + }, + "access-list.access-count": { + "defaultMessage": "{count} {count, plural, one {Reguła} few {Reguły} other {Reguł}}" + }, + "access-list.auth-count": { + "defaultMessage": "{count} {count, plural, one {Użytkownik} few {Użytkowników} other {Użytkowników}}" + }, + "access-list.help-rules-last": { + "defaultMessage": "Gdy istnieje co najmniej 1 reguła, ta reguła blokująca wszystko zostanie dodana na końcu" + }, + "access-list.help.rules-order": { + "defaultMessage": "Należy pamiętać, że dyrektywy zezwolenia i odmowy będą stosowane w kolejności, w jakiej zostały zdefiniowane." + }, + "access-list.pass-auth": { + "defaultMessage": "Przekaż uwierzytelnienie do serwera docelowego" + }, + "access-list.public": { + "defaultMessage": "Publicznie dostępne" + }, + "access-list.public.subtitle": { + "defaultMessage": "Nie wymaga uwierzytelnienia podstawowego" + }, + "access-list.satisfy-any": { + "defaultMessage": "Spełnij dowolny warunek" + }, + "access-list.subtitle": { + "defaultMessage": "{users} {users, plural, one {Użytkownik} few {Użytkowników} other {Użytkowników}}, {rules} {rules, plural, one {Reguła} few {Reguły} other {Reguł}} - Utworzono: {date}" + }, + "access-lists": { + "defaultMessage": "Listy dostępu" + }, + "action.add": { + "defaultMessage": "Dodaj" + }, + "action.add-location": { + "defaultMessage": "Dodaj lokalizację" + }, + "action.close": { + "defaultMessage": "Zamknij" + }, + "action.delete": { + "defaultMessage": "Usuń" + }, + "action.disable": { + "defaultMessage": "Wyłącz" + }, + "action.download": { + "defaultMessage": "Pobierz" + }, + "action.edit": { + "defaultMessage": "Edytuj" + }, + "action.enable": { + "defaultMessage": "Włącz" + }, + "action.permissions": { + "defaultMessage": "Uprawnienia" + }, + "action.renew": { + "defaultMessage": "Odnów" + }, + "action.view-details": { + "defaultMessage": "Pokaż szczegóły" + }, + "auditlogs": { + "defaultMessage": "Logi audytu" + }, + "cancel": { + "defaultMessage": "Anuluj" + }, + "certificate": { + "defaultMessage": "Certyfikat" + }, + "certificate.custom-certificate": { + "defaultMessage": "Certyfikat" + }, + "certificate.custom-certificate-key": { + "defaultMessage": "Klucz certyfikatu" + }, + "certificate.custom-intermediate": { + "defaultMessage": "Certyfikat pośredni" + }, + "certificate.in-use": { + "defaultMessage": "W użyciu" + }, + "certificate.none.subtitle": { + "defaultMessage": "Nie przypisano certyfikatu" + }, + "certificate.none.subtitle.for-http": { + "defaultMessage": "Ten host nie będzie używał HTTPS" + }, + "certificate.none.title": { + "defaultMessage": "Brak" + }, + "certificate.not-in-use": { + "defaultMessage": "Nie używany" + }, + "certificate.renew": { + "defaultMessage": "Odnów certyfikat" + }, + "certificates": { + "defaultMessage": "Certyfikaty" + }, + "certificates.custom": { + "defaultMessage": "Certyfikat własny" + }, + "certificates.custom.warning": { + "defaultMessage": "Pliki kluczy chronione hasłem nie są obsługiwane." + }, + "certificates.dns.credentials": { + "defaultMessage": "Zawartość pliku z poświadczeniami" + }, + "certificates.dns.credentials-note": { + "defaultMessage": "Ta wtyczka wymaga pliku konfiguracyjnego zawierającego token API lub inne poświadczenia dla twojego dostawcy" + }, + "certificates.dns.credentials-warning": { + "defaultMessage": "Te dane zostaną zapisane jako zwykły tekst w bazie danych i pliku!" + }, + "certificates.dns.propagation-seconds": { + "defaultMessage": "Sekundy propagacji" + }, + "certificates.dns.propagation-seconds-note": { + "defaultMessage": "Pozostaw puste, aby użyć domyślnej wartości wtyczki. Liczba sekund oczekiwania na propagację DNS." + }, + "certificates.dns.provider": { + "defaultMessage": "Dostawca DNS" + }, + "certificates.dns.warning": { + "defaultMessage": "Ta sekcja wymaga pewnej wiedzy na temat Certbot i jego wtyczek DNS. Zapoznaj się z dokumentacją odpowiednich wtyczek." + }, + "certificates.http.reachability-404": { + "defaultMessage": "Znaleziono serwer pod tą domeną, ale nie wygląda na to, że jest to Nginx Proxy Manager. Upewnij się, że twoja domena wskazuje na adres IP, gdzie działa twoja instancja NPM." + }, + "certificates.http.reachability-failed-to-check": { + "defaultMessage": "Nie udało się sprawdzić dostępności z powodu błędu komunikacji z site24x7.com." + }, + "certificates.http.reachability-not-resolved": { + "defaultMessage": "Brak dostępnego serwera pod tą domeną. Upewnij się, że twoja domena istnieje i wskazuje na adres IP, gdzie działa twoja instancja NPM, oraz w razie potrzeby, że port 80 jest przekierowany w routerze lub owarty w firewall-u." + }, + "certificates.http.reachability-ok": { + "defaultMessage": "Twój serwer jest dostępny i tworzenie certyfikatów powinno być możliwe." + }, + "certificates.http.reachability-other": { + "defaultMessage": "Znaleziono serwer pod tą domeną, ale zwrócił nieoczekiwany kod statusu {code}. Czy to serwer NPM? Upewnij się, że twoja domena wskazuje na adres IP, gdzie działa twoja instancja NPM." + }, + "certificates.http.reachability-wrong-data": { + "defaultMessage": "Znaleziono serwer pod tą domeną, ale zwrócił nieoczekiwane dane. Czy to serwer NPM? Upewnij się, że twoja domena wskazuje na adres IP, gdzie działa twoja instancja NPM." + }, + "certificates.http.test-results": { + "defaultMessage": "Wyniki testu" + }, + "certificates.http.warning": { + "defaultMessage": "Te domeny muszą być już skonfigurowane tak, aby wskazywały na ten serwer www" + }, + "certificates.request.subtitle": { + "defaultMessage": "z Let's Encrypt" + }, + "certificates.request.title": { + "defaultMessage": "Zamów nowy certyfikat" + }, + "column.access": { + "defaultMessage": "Dostęp" + }, + "column.authorization": { + "defaultMessage": "Autoryzacja" + }, + "column.authorizations": { + "defaultMessage": "Autoryzacje" + }, + "column.custom-locations": { + "defaultMessage": "Własne lokalizacje" + }, + "column.destination": { + "defaultMessage": "Cel" + }, + "column.details": { + "defaultMessage": "Szczegóły" + }, + "column.email": { + "defaultMessage": "Email" + }, + "column.event": { + "defaultMessage": "Zdarzenie" + }, + "column.expires": { + "defaultMessage": "Wygasa" + }, + "column.http-code": { + "defaultMessage": "Kod HTTP" + }, + "column.incoming-port": { + "defaultMessage": "Port przychodzący" + }, + "column.name": { + "defaultMessage": "Nazwa" + }, + "column.protocol": { + "defaultMessage": "Protokół" + }, + "column.provider": { + "defaultMessage": "Dostawca" + }, + "column.roles": { + "defaultMessage": "Role" + }, + "column.rules": { + "defaultMessage": "Reguły" + }, + "column.satisfy": { + "defaultMessage": "Spełnij" + }, + "column.satisfy-all": { + "defaultMessage": "Wszystkie" + }, + "column.satisfy-any": { + "defaultMessage": "Dowolny" + }, + "column.scheme": { + "defaultMessage": "Schemat" + }, + "column.source": { + "defaultMessage": "Źródło" + }, + "column.ssl": { + "defaultMessage": "SSL" + }, + "column.status": { + "defaultMessage": "Status" + }, + "created-on": { + "defaultMessage": "Utworzono: {date}" + }, + "dashboard": { + "defaultMessage": "Panel" + }, + "dead-host": { + "defaultMessage": "Host 404" + }, + "dead-hosts": { + "defaultMessage": "Hosty 404" + }, + "dead-hosts.count": { + "defaultMessage": "{count} {count, plural, one {Host 404} few {Hosty 404} other {Hostów 404}}" + }, + "disabled": { + "defaultMessage": "Wyłączone" + }, + "domain-names": { + "defaultMessage": "Nazwy domen" + }, + "domain-names.max": { + "defaultMessage": "Maksymalnie {count} nazw domen" + }, + "domain-names.placeholder": { + "defaultMessage": "Zacznij pisać, aby dodać domenę..." + }, + "domain-names.wildcards-not-permitted": { + "defaultMessage": "Symbole wieloznaczne nie są dozwolone dla tego typu" + }, + "domain-names.wildcards-not-supported": { + "defaultMessage": "Symbole wieloznaczne nie są obsługiwane dla tego CA" + }, + "domains.force-ssl": { + "defaultMessage": "Wymuś SSL" + }, + "domains.hsts-enabled": { + "defaultMessage": "HSTS włączone" + }, + "domains.hsts-subdomains": { + "defaultMessage": "HSTS dla subdomen" + }, + "domains.http2-support": { + "defaultMessage": "Obsługa HTTP/2" + }, + "domains.use-dns": { + "defaultMessage": "Użyj wyzwania DNS" + }, + "email-address": { + "defaultMessage": "Adres email" + }, + "empty-search": { + "defaultMessage": "Nie znaleziono wyników" + }, + "empty-subtitle": { + "defaultMessage": "Może utworzysz nowy?" + }, + "enabled": { + "defaultMessage": "Włączone" + }, + "error.access.at-least-one": { + "defaultMessage": "Wymagana jest co najmniej jedna autoryzacja lub jedna reguła dostępu" + }, + "error.access.duplicate-usernames": { + "defaultMessage": "Nazwy użytkowników autoryzacji muszą być unikalne" + }, + "error.invalid-auth": { + "defaultMessage": "Nieprawidłowy email lub hasło" + }, + "error.invalid-domain": { + "defaultMessage": "Nieprawidłowa domena: {domain}" + }, + "error.invalid-email": { + "defaultMessage": "Nieprawidłowy adres email" + }, + "error.max-character-length": { + "defaultMessage": "Maksymalna długość to {max} {max, plural, one {znak} few {znaki} other {znaków}}" + }, + "error.max-domains": { + "defaultMessage": "Zbyt wiele domen, maksimum to {max}" + }, + "error.maximum": { + "defaultMessage": "Maksimum to {max}" + }, + "error.min-character-length": { + "defaultMessage": "Minimalna długość to {min} {min, plural, one {znak} few {znaki} other {znaków}}" + }, + "error.minimum": { + "defaultMessage": "Minimum to {min}" + }, + "error.passwords-must-match": { + "defaultMessage": "Hasła muszą się zgadzać" + }, + "error.required": { + "defaultMessage": "To pole jest wymagane" + }, + "expires.on": { + "defaultMessage": "Wygasa: {date}" + }, + "footer.github-fork": { + "defaultMessage": "Forkuj mnie na Github" + }, + "host.flags.block-exploits": { + "defaultMessage": "Blokuj typowe exploity" + }, + "host.flags.cache-assets": { + "defaultMessage": "Buforuj zasoby" + }, + "host.flags.preserve-path": { + "defaultMessage": "Zachowaj ścieżkę" + }, + "host.flags.protocols": { + "defaultMessage": "Protokoły" + }, + "host.flags.websockets-upgrade": { + "defaultMessage": "Obsługa WebSockets" + }, + "host.forward-port": { + "defaultMessage": "Port przekierowania" + }, + "host.forward-scheme": { + "defaultMessage": "Schemat" + }, + "hosts": { + "defaultMessage": "Hosty" + }, + "http-only": { + "defaultMessage": "Tylko HTTP" + }, + "lets-encrypt": { + "defaultMessage": "Let's Encrypt" + }, + "lets-encrypt-via-dns": { + "defaultMessage": "Let's Encrypt przez DNS" + }, + "lets-encrypt-via-http": { + "defaultMessage": "Let's Encrypt przez HTTP" + }, + "loading": { + "defaultMessage": "Ładowanie…" + }, + "login.title": { + "defaultMessage": "Zaloguj się na swoje konto" + }, + "nginx-config.label": { + "defaultMessage": "Własna konfiguracja Nginx" + }, + "nginx-config.placeholder": { + "defaultMessage": "# Wprowadź tutaj własną konfigurację Nginx na własną odpowiedzialność!" + }, + "no-permission-error": { + "defaultMessage": "Nie masz uprawnień do wyświetlenia tego." + }, + "notfound.action": { + "defaultMessage": "Zabierz mnie do strony głównej" + }, + "notfound.content": { + "defaultMessage": "Przepraszamy, ale strona, której szukasz, nie została znaleziona" + }, + "notfound.title": { + "defaultMessage": "Ups… Właśnie znalazłeś stronę błędu" + }, + "notification.error": { + "defaultMessage": "Błąd" + }, + "notification.object-deleted": { + "defaultMessage": "{object} został usunięty" + }, + "notification.object-disabled": { + "defaultMessage": "{object} został wyłączony" + }, + "notification.object-enabled": { + "defaultMessage": "{object} został włączony" + }, + "notification.object-renewed": { + "defaultMessage": "{object} został odnowiony" + }, + "notification.object-saved": { + "defaultMessage": "{object} został zapisany" + }, + "notification.success": { + "defaultMessage": "Sukces" + }, + "object.actions-title": { + "defaultMessage": "{object} #{id}" + }, + "object.add": { + "defaultMessage": "Dodaj {object}" + }, + "object.delete": { + "defaultMessage": "Usuń {object}" + }, + "object.delete.content": { + "defaultMessage": "Czy na pewno chcesz usunąć {object}?" + }, + "object.edit": { + "defaultMessage": "Edytuj {object}" + }, + "object.empty": { + "defaultMessage": "Brak {objects}" + }, + "object.event.created": { + "defaultMessage": "Utworzono {object}" + }, + "object.event.deleted": { + "defaultMessage": "Usunięto {object}" + }, + "object.event.disabled": { + "defaultMessage": "Wyłączono {object}" + }, + "object.event.enabled": { + "defaultMessage": "Włączono {object}" + }, + "object.event.renewed": { + "defaultMessage": "Odnowiono {object}" + }, + "object.event.updated": { + "defaultMessage": "Zaktualizowano {object}" + }, + "offline": { + "defaultMessage": "Offline" + }, + "online": { + "defaultMessage": "Online" + }, + "options": { + "defaultMessage": "Opcje" + }, + "password": { + "defaultMessage": "Hasło" + }, + "password.generate": { + "defaultMessage": "Wygeneruj losowe hasło" + }, + "password.hide": { + "defaultMessage": "Ukryj hasło" + }, + "password.show": { + "defaultMessage": "Pokaż hasło" + }, + "permissions.hidden": { + "defaultMessage": "Ukryte" + }, + "permissions.manage": { + "defaultMessage": "Zarządzaj" + }, + "permissions.view": { + "defaultMessage": "Tylko podgląd" + }, + "permissions.visibility.all": { + "defaultMessage": "Wszystkie elementy" + }, + "permissions.visibility.title": { + "defaultMessage": "Widoczność elementów" + }, + "permissions.visibility.user": { + "defaultMessage": "Tylko utworzone elementy" + }, + "proxy-host": { + "defaultMessage": "Host proxy" + }, + "proxy-host.forward-host": { + "defaultMessage": "Przekieruj na hostname / IP" + }, + "proxy-hosts": { + "defaultMessage": "Hosty proxy" + }, + "proxy-hosts.count": { + "defaultMessage": "{count} {count, plural, one {Host proxy} few {Hosty proxy} other {Hostów proxy}}" + }, + "public": { + "defaultMessage": "Publiczne" + }, + "redirection-host": { + "defaultMessage": "Host przekierowania" + }, + "redirection-host.forward-domain": { + "defaultMessage": "Domena docelowa" + }, + "redirection-host.forward-http-code": { + "defaultMessage": "Kod HTTP" + }, + "redirection-hosts": { + "defaultMessage": "Hosty przekierowań" + }, + "redirection-hosts.count": { + "defaultMessage": "{count} {count, plural, one {Host przekierowania} few {Hosty przekierowań} other {Hostów przekierowań}}" + }, + "role.admin": { + "defaultMessage": "Administrator" + }, + "role.standard-user": { + "defaultMessage": "Standardowy użytkownik" + }, + "save": { + "defaultMessage": "Zapisz" + }, + "setting": { + "defaultMessage": "Ustawienie" + }, + "settings": { + "defaultMessage": "Ustawienia" + }, + "settings.default-site": { + "defaultMessage": "Domyślna strona" + }, + "settings.default-site.404": { + "defaultMessage": "Strona 404" + }, + "settings.default-site.444": { + "defaultMessage": "Brak odpowiedzi (444)" + }, + "settings.default-site.congratulations": { + "defaultMessage": "Strona gratulacyjna" + }, + "settings.default-site.description": { + "defaultMessage": "Co wyświetlić, gdy Nginx otrzyma nieznany Host" + }, + "settings.default-site.html": { + "defaultMessage": "Własny HTML" + }, + "settings.default-site.html.placeholder": { + "defaultMessage": "" + }, + "settings.default-site.redirect": { + "defaultMessage": "Przekierowanie" + }, + "setup.preamble": { + "defaultMessage": "Zacznij od utworzenia konta administratora." + }, + "setup.title": { + "defaultMessage": "Witaj!" + }, + "sign-in": { + "defaultMessage": "Zaloguj się" + }, + "ssl-certificate": { + "defaultMessage": "Certyfikat SSL" + }, + "stream": { + "defaultMessage": "Strumień" + }, + "stream.forward-host": { + "defaultMessage": "Host docelowy" + }, + "stream.incoming-port": { + "defaultMessage": "Port przychodzący" + }, + "streams": { + "defaultMessage": "Strumienie" + }, + "streams.count": { + "defaultMessage": "{count} {count, plural, one {Strumień} few {Strumienie} other {Strumieni}}" + }, + "streams.tcp": { + "defaultMessage": "TCP" + }, + "streams.udp": { + "defaultMessage": "UDP" + }, + "test": { + "defaultMessage": "Test" + }, + "user": { + "defaultMessage": "Użytkownik" + }, + "user.change-password": { + "defaultMessage": "Zmień hasło" + }, + "user.confirm-password": { + "defaultMessage": "Potwierdź hasło" + }, + "user.current-password": { + "defaultMessage": "Aktualne hasło" + }, + "user.edit-profile": { + "defaultMessage": "Edytuj profil" + }, + "user.full-name": { + "defaultMessage": "Pełne imię i nazwisko" + }, + "user.login-as": { + "defaultMessage": "Zaloguj jako {name}" + }, + "user.logout": { + "defaultMessage": "Wyloguj" + }, + "user.new-password": { + "defaultMessage": "Nowe hasło" + }, + "user.nickname": { + "defaultMessage": "Pseudonim" + }, + "user.set-password": { + "defaultMessage": "Ustaw hasło" + }, + "user.set-permissions": { + "defaultMessage": "Ustaw uprawnienia dla {name}" + }, + "user.switch-dark": { + "defaultMessage": "Przełącz na tryb ciemny" + }, + "user.switch-light": { + "defaultMessage": "Przełącz na tryb jasny" + }, + "username": { + "defaultMessage": "Nazwa użytkownika" + }, + "users": { + "defaultMessage": "Użytkownicy" + } }