mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-12-05 16:06:51 +00:00
Compare commits
88 Commits
f02145c5ef
...
847c58b170
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
847c58b170 | ||
|
|
89b8b747e1 | ||
|
|
3231023513 | ||
|
|
dc89635971 | ||
|
|
cfa98361d1 | ||
|
|
c2177abe39 | ||
|
|
2c6d614597 | ||
|
|
484ce8db3c | ||
|
|
2c11c0c7e2 | ||
|
|
f1039ce2ef | ||
|
|
d49ff6e7c2 | ||
|
|
a87f24c9dc | ||
|
|
decdfec447 | ||
|
|
32ab3faf57 | ||
|
|
c7f999fa7a | ||
|
|
de7d3b0d19 | ||
|
|
2d4b7399c0 | ||
|
|
316b758455 | ||
|
|
890d06c863 | ||
|
|
81f2aa17d4 | ||
|
|
9b4c34915c | ||
|
|
fce569ca21 | ||
|
|
87ec9c4bdf | ||
|
|
2650648d68 | ||
|
|
fdc0c29f28 | ||
|
|
6cae088432 | ||
|
|
9d8c4cc30b | ||
|
|
66ebecdb43 | ||
|
|
60f3ee03c0 | ||
|
|
a4d54a0291 | ||
|
|
7536b1b1c9 | ||
|
|
5288fbd7af | ||
|
|
2c630bbdca | ||
|
|
0ec1a09c30 | ||
|
|
118c4793e3 | ||
|
|
d7384c568f | ||
|
|
0bcfe0bba6 | ||
|
|
74cbfb2c58 | ||
|
|
8ef65caa5a | ||
|
|
bc341c1dff | ||
|
|
5fc9febf1f | ||
|
|
b23ceebfd8 | ||
|
|
c281fc54a1 | ||
|
|
d0f7dc5b48 | ||
|
|
fb53df862e | ||
|
|
8d8463ae41 | ||
|
|
8774cfe5f9 | ||
|
|
4ca5cadd19 | ||
|
|
45a8d50e03 | ||
|
|
960d4bfe6f | ||
|
|
8c3c964c52 | ||
|
|
afd6134a3e | ||
|
|
9b2d60e67b | ||
|
|
9807e25d45 | ||
|
|
824c895f52 | ||
|
|
7f9b9dfea4 | ||
|
|
d848ba9f65 | ||
|
|
47db5c9aa6 | ||
|
|
79a9653b26 | ||
|
|
e5aae1f365 | ||
|
|
8959190d32 | ||
|
|
7e875eb27a | ||
|
|
cf7306e766 | ||
|
|
1c442dcce6 | ||
|
|
dadd10f89b | ||
|
|
8838dabe8a | ||
|
|
75c012b558 | ||
|
|
9be1381ffe | ||
|
|
f40fe56572 | ||
|
|
b4fd242eb7 | ||
|
|
911476f82f | ||
|
|
963125f963 | ||
|
|
e86a34f2f3 | ||
|
|
6ce9567e48 | ||
|
|
66fa08fd8e | ||
|
|
d783cc3b90 | ||
|
|
17cc75fe7d | ||
|
|
15394c6532 | ||
|
|
2d6252d75d | ||
|
|
b043e70fc0 | ||
|
|
87eef10ff8 | ||
|
|
dc03ad8239 | ||
|
|
ae5faa75fa | ||
|
|
b6dbb68ef3 | ||
|
|
b434bba12f | ||
|
|
f1d7203212 | ||
|
|
990ba28831 | ||
|
|
a85b5f664f |
@@ -1,7 +1,7 @@
|
||||
<p align="center">
|
||||
<img src="https://nginxproxymanager.com/github.png">
|
||||
<br><br>
|
||||
<img src="https://img.shields.io/badge/version-2.13.4-green.svg?style=for-the-badge">
|
||||
<img src="https://img.shields.io/badge/version-2.13.5-green.svg?style=for-the-badge">
|
||||
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager">
|
||||
<img src="https://img.shields.io/docker/stars/jc21/nginx-proxy-manager.svg?style=for-the-badge">
|
||||
</a>
|
||||
|
||||
@@ -26,8 +26,8 @@
|
||||
"azure": {
|
||||
"name": "Azure",
|
||||
"package_name": "certbot-dns-azure",
|
||||
"version": "~=1.2.0",
|
||||
"dependencies": "",
|
||||
"version": "~=2.6.1",
|
||||
"dependencies": "azure-mgmt-dns==8.2.0",
|
||||
"credentials": "# This plugin supported API authentication using either Service Principals or utilizing a Managed Identity assigned to the virtual machine.\n# Regardless which authentication method used, the identity will need the “DNS Zone Contributor” role assigned to it.\n# As multiple Azure DNS Zones in multiple resource groups can exist, the config file needs a mapping of zone to resource group ID. Multiple zones -> ID mappings can be listed by using the key dns_azure_zoneX where X is a unique number. At least 1 zone mapping is required.\n\n# Using a service principal (option 1)\ndns_azure_sp_client_id = 912ce44a-0156-4669-ae22-c16a17d34ca5\ndns_azure_sp_client_secret = E-xqXU83Y-jzTI6xe9fs2YC~mck3ZzUih9\ndns_azure_tenant_id = ed1090f3-ab18-4b12-816c-599af8a88cf7\n\n# Using used assigned MSI (option 2)\n# dns_azure_msi_client_id = 912ce44a-0156-4669-ae22-c16a17d34ca5\n\n# Using system assigned MSI (option 3)\n# dns_azure_msi_system_assigned = true\n\n# Zones (at least one always required)\ndns_azure_zone1 = example.com:/subscriptions/c135abce-d87d-48df-936c-15596c6968a5/resourceGroups/dns1\ndns_azure_zone2 = example.org:/subscriptions/99800903-fb14-4992-9aff-12eaf2744622/resourceGroups/dns2",
|
||||
"full_plugin_name": "dns-azure"
|
||||
},
|
||||
@@ -482,7 +482,7 @@
|
||||
"porkbun": {
|
||||
"name": "Porkbun",
|
||||
"package_name": "certbot-dns-porkbun",
|
||||
"version": "~=0.9",
|
||||
"version": "~=0.11.0",
|
||||
"dependencies": "",
|
||||
"credentials": "dns_porkbun_key=your-porkbun-api-key\ndns_porkbun_secret=your-porkbun-api-secret",
|
||||
"full_plugin_name": "dns-porkbun"
|
||||
|
||||
84
backend/internal/remote-version.js
Normal file
84
backend/internal/remote-version.js
Normal file
@@ -0,0 +1,84 @@
|
||||
import https from "node:https";
|
||||
import { ProxyAgent } from "proxy-agent";
|
||||
import { debug, remoteVersion as logger } from "../logger.js";
|
||||
import pjson from "../package.json" with { type: "json" };
|
||||
|
||||
const VERSION_URL = "https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest";
|
||||
|
||||
const internalRemoteVersion = {
|
||||
cache_timeout: 1000 * 60 * 15, // 15 minutes
|
||||
last_result: null,
|
||||
last_fetch_time: null,
|
||||
|
||||
/**
|
||||
* Fetch the latest version info, using a cached result if within the cache timeout period.
|
||||
* @return {Promise<{current: string, latest: string, update_available: boolean}>} Version info
|
||||
*/
|
||||
get: async () => {
|
||||
if (
|
||||
!internalRemoteVersion.last_result ||
|
||||
!internalRemoteVersion.last_fetch_time ||
|
||||
Date.now() - internalRemoteVersion.last_fetch_time > internalRemoteVersion.cache_timeout
|
||||
) {
|
||||
const raw = await internalRemoteVersion.fetchUrl(VERSION_URL);
|
||||
const data = JSON.parse(raw);
|
||||
internalRemoteVersion.last_result = data;
|
||||
internalRemoteVersion.last_fetch_time = Date.now();
|
||||
} else {
|
||||
debug(logger, "Using cached remote version result");
|
||||
}
|
||||
|
||||
const latestVersion = internalRemoteVersion.last_result.tag_name;
|
||||
const version = pjson.version.split("-").shift().split(".");
|
||||
const currentVersion = `v${version[0]}.${version[1]}.${version[2]}`;
|
||||
return {
|
||||
current: currentVersion,
|
||||
latest: latestVersion,
|
||||
update_available: internalRemoteVersion.compareVersions(currentVersion, latestVersion),
|
||||
};
|
||||
},
|
||||
|
||||
fetchUrl: (url) => {
|
||||
const agent = new ProxyAgent();
|
||||
const headers = {
|
||||
"User-Agent": `NginxProxyManager v${pjson.version}`,
|
||||
};
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
logger.info(`Fetching ${url}`);
|
||||
return https
|
||||
.get(url, { agent, headers }, (res) => {
|
||||
res.setEncoding("utf8");
|
||||
let raw_data = "";
|
||||
res.on("data", (chunk) => {
|
||||
raw_data += chunk;
|
||||
});
|
||||
res.on("end", () => {
|
||||
resolve(raw_data);
|
||||
});
|
||||
})
|
||||
.on("error", (err) => {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
compareVersions: (current, latest) => {
|
||||
const cleanCurrent = current.replace(/^v/, "");
|
||||
const cleanLatest = latest.replace(/^v/, "");
|
||||
|
||||
const currentParts = cleanCurrent.split(".").map(Number);
|
||||
const latestParts = cleanLatest.split(".").map(Number);
|
||||
|
||||
for (let i = 0; i < Math.max(currentParts.length, latestParts.length); i++) {
|
||||
const curr = currentParts[i] || 0;
|
||||
const lat = latestParts[i] || 0;
|
||||
|
||||
if (lat > curr) return true;
|
||||
if (lat < curr) return false;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
};
|
||||
|
||||
export default internalRemoteVersion;
|
||||
@@ -15,6 +15,7 @@ const certbot = new signale.Signale({ scope: "Certbot ", ...opts });
|
||||
const importer = new signale.Signale({ scope: "Importer ", ...opts });
|
||||
const setup = new signale.Signale({ scope: "Setup ", ...opts });
|
||||
const ipRanges = new signale.Signale({ scope: "IP Ranges", ...opts });
|
||||
const remoteVersion = new signale.Signale({ scope: "Remote Version", ...opts });
|
||||
|
||||
const debug = (logger, ...args) => {
|
||||
if (isDebugMode()) {
|
||||
@@ -22,4 +23,4 @@ const debug = (logger, ...args) => {
|
||||
}
|
||||
};
|
||||
|
||||
export { debug, global, migrate, express, access, nginx, ssl, certbot, importer, setup, ipRanges };
|
||||
export { debug, global, migrate, express, access, nginx, ssl, certbot, importer, setup, ipRanges, remoteVersion };
|
||||
|
||||
@@ -14,6 +14,7 @@ import schemaRoutes from "./schema.js";
|
||||
import settingsRoutes from "./settings.js";
|
||||
import tokensRoutes from "./tokens.js";
|
||||
import usersRoutes from "./users.js";
|
||||
import versionRoutes from "./version.js";
|
||||
|
||||
const router = express.Router({
|
||||
caseSensitive: true,
|
||||
@@ -46,6 +47,7 @@ router.use("/users", usersRoutes);
|
||||
router.use("/audit-log", auditLogRoutes);
|
||||
router.use("/reports", reportsRoutes);
|
||||
router.use("/settings", settingsRoutes);
|
||||
router.use("/version", versionRoutes);
|
||||
router.use("/nginx/proxy-hosts", proxyHostsRoutes);
|
||||
router.use("/nginx/redirection-hosts", redirectionHostsRoutes);
|
||||
router.use("/nginx/dead-hosts", deadHostsRoutes);
|
||||
|
||||
40
backend/routes/version.js
Normal file
40
backend/routes/version.js
Normal file
@@ -0,0 +1,40 @@
|
||||
import express from "express";
|
||||
import internalRemoteVersion from "../internal/remote-version.js";
|
||||
import { debug, express as logger } from "../logger.js";
|
||||
|
||||
const router = express.Router({
|
||||
caseSensitive: true,
|
||||
strict: true,
|
||||
mergeParams: true,
|
||||
});
|
||||
|
||||
/**
|
||||
* /api/version/check
|
||||
*/
|
||||
router
|
||||
.route("/check")
|
||||
.options((_, res) => {
|
||||
res.sendStatus(204);
|
||||
})
|
||||
|
||||
/**
|
||||
* GET /api/version/check
|
||||
*
|
||||
* Check for available updates
|
||||
*/
|
||||
.get(async (req, res, _next) => {
|
||||
try {
|
||||
const data = await internalRemoteVersion.get();
|
||||
res.status(200).send(data);
|
||||
} catch (error) {
|
||||
debug(logger, `${req.method.toUpperCase()} ${req.path}: ${error}`);
|
||||
// Send 200 even though there's an error to avoid triggering update checks repeatedly
|
||||
res.status(200).send({
|
||||
current: null,
|
||||
latest: null,
|
||||
update_available: false,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
export default router;
|
||||
23
backend/schema/components/check-version-object.json
Normal file
23
backend/schema/components/check-version-object.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "Check Version object",
|
||||
"additionalProperties": false,
|
||||
"required": ["current", "latest", "update_available"],
|
||||
"properties": {
|
||||
"current": {
|
||||
"type": ["string", "null"],
|
||||
"description": "Current version string",
|
||||
"example": "v2.10.1"
|
||||
},
|
||||
"latest": {
|
||||
"type": ["string", "null"],
|
||||
"description": "Latest version string",
|
||||
"example": "v2.13.4"
|
||||
},
|
||||
"update_available": {
|
||||
"type": "boolean",
|
||||
"description": "Whether there's an update available",
|
||||
"example": true
|
||||
}
|
||||
}
|
||||
}
|
||||
26
backend/schema/paths/version/check/get.json
Normal file
26
backend/schema/paths/version/check/get.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"operationId": "checkVersion",
|
||||
"summary": "Returns any new version data from github",
|
||||
"tags": ["public"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"current": "v2.12.0",
|
||||
"latest": "v2.13.4",
|
||||
"update_available": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"schema": {
|
||||
"$ref": "../../../components/check-version-object.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -293,6 +293,11 @@
|
||||
"$ref": "./paths/tokens/post.json"
|
||||
}
|
||||
},
|
||||
"/version/check": {
|
||||
"get": {
|
||||
"$ref": "./paths/version/check/get.json"
|
||||
}
|
||||
},
|
||||
"/users": {
|
||||
"get": {
|
||||
"$ref": "./paths/users/get.json"
|
||||
|
||||
@@ -1430,9 +1430,9 @@ isexe@^2.0.0:
|
||||
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
|
||||
|
||||
js-yaml@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
|
||||
integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b"
|
||||
integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==
|
||||
dependencies:
|
||||
argparse "^2.0.1"
|
||||
|
||||
|
||||
@@ -24,9 +24,13 @@ services:
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
expose:
|
||||
- "80-81/tcp"
|
||||
- "80/tcp"
|
||||
- "81/tcp"
|
||||
- "443/tcp"
|
||||
- "1500-1503/tcp"
|
||||
- "1500/tcp"
|
||||
- "1501/tcp"
|
||||
- "1502/tcp"
|
||||
- "1503/tcp"
|
||||
networks:
|
||||
fulltest:
|
||||
aliases:
|
||||
|
||||
2
frontend/.gitignore
vendored
2
frontend/.gitignore
vendored
@@ -1,3 +1,5 @@
|
||||
src/locale/lang
|
||||
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
|
||||
@@ -8,12 +8,16 @@
|
||||
|
||||
const allLocales = [
|
||||
["en", "en-US"],
|
||||
["es", "es-ES"],
|
||||
["de", "de-DE"],
|
||||
["es", "es-ES"],
|
||||
["it", "it-IT"],
|
||||
["ja", "ja-JP"],
|
||||
["nl", "nl-NL"],
|
||||
["pl", "pl-PL"],
|
||||
["ru", "ru-RU"],
|
||||
["sk", "sk-SK"],
|
||||
["vi", "vi-VN"],
|
||||
["zh", "zh-CN"],
|
||||
["pl", "pl-PL"],
|
||||
];
|
||||
|
||||
const ignoreUnused = [
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Nginx Proxy Manager</title>
|
||||
<meta name="description" content="In The Office Planner" />
|
||||
<link rel="preload" href="/images/logo-no-text.svg" as="image" type="image/svg+xml" fetchPriority="high">
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="180x180"
|
||||
|
||||
@@ -13,6 +13,15 @@
|
||||
--tblr-backdrop-opacity: 0.8 !important;
|
||||
}
|
||||
|
||||
[data-bs-theme="dark"] .modal-content {
|
||||
--tblr-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
|
||||
}
|
||||
|
||||
[data-bs-theme="dark"] .modal-backdrop {
|
||||
--tblr-backdrop-bg: #000 !important;
|
||||
--tblr-backdrop-opacity: 0.65 !important;
|
||||
}
|
||||
|
||||
.domain-name {
|
||||
font-family: monospace;
|
||||
}
|
||||
@@ -95,3 +104,15 @@ label.row {
|
||||
border-radius: var(--tblr-border-radius) 0 0 var(--tblr-border-radius);
|
||||
}
|
||||
}
|
||||
|
||||
/* Fix for dropdown menus being clipped by table-responsive containers. */
|
||||
.table-responsive .dropdown {
|
||||
position: static;
|
||||
}
|
||||
|
||||
/* Fix for Tabler scrollbar compensation */
|
||||
@media (min-width: 992px) {
|
||||
:host, :root {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
8
frontend/src/api/backend/checkVersion.ts
Normal file
8
frontend/src/api/backend/checkVersion.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import * as api from "./base";
|
||||
import type { VersionCheckResponse } from "./responseTypes";
|
||||
|
||||
export async function checkVersion(): Promise<VersionCheckResponse> {
|
||||
return await api.get({
|
||||
url: "/version/check",
|
||||
});
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
export * from "./checkVersion";
|
||||
export * from "./createAccessList";
|
||||
export * from "./createCertificate";
|
||||
export * from "./createDeadHost";
|
||||
|
||||
@@ -19,3 +19,9 @@ export interface ValidatedCertificateResponse {
|
||||
export interface LoginAsTokenResponse extends TokenResponse {
|
||||
user: User;
|
||||
}
|
||||
|
||||
export interface VersionCheckResponse {
|
||||
current: string | null;
|
||||
latest: string | null;
|
||||
updateAvailable: boolean;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ import cn from "classnames";
|
||||
import { useFormikContext } from "formik";
|
||||
import { useState } from "react";
|
||||
import type { AccessListClient } from "src/api/backend";
|
||||
import { T } from "src/locale";
|
||||
import { intl, T } from "src/locale";
|
||||
|
||||
interface Props {
|
||||
initialValues: AccessListClient[];
|
||||
@@ -65,8 +65,8 @@ export function AccessClientFields({ initialValues, name = "clients" }: Props) {
|
||||
value={client.directive}
|
||||
onChange={(e) => handleChange(idx, "directive", e.target.value)}
|
||||
>
|
||||
<option value="allow">Allow</option>
|
||||
<option value="deny">Deny</option>
|
||||
<option value="allow"><T id="action.allow" /></option>
|
||||
<option value="deny"><T id="action.deny" /></option>
|
||||
</select>
|
||||
</span>
|
||||
<input
|
||||
@@ -76,7 +76,7 @@ export function AccessClientFields({ initialValues, name = "clients" }: Props) {
|
||||
autoComplete="off"
|
||||
value={client.address}
|
||||
onChange={(e) => handleChange(idx, "address", e.target.value)}
|
||||
placeholder="192.168.1.100 or 192.168.1.0/24 or 2001:0db8::/32"
|
||||
placeholder={intl.formatMessage({ id: "access-list.rule-source.placeholder" })}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -112,7 +112,7 @@ export function AccessClientFields({ initialValues, name = "clients" }: Props) {
|
||||
value="deny"
|
||||
disabled
|
||||
>
|
||||
<option value="deny">Deny</option>
|
||||
<option value="deny"><T id="action.deny" /></option>
|
||||
</select>
|
||||
</span>
|
||||
<input
|
||||
|
||||
@@ -5,7 +5,7 @@ import { useState } from "react";
|
||||
import Select, { type ActionMeta } from "react-select";
|
||||
import type { DNSProvider } from "src/api/backend";
|
||||
import { useDnsProviders } from "src/hooks";
|
||||
import { T } from "src/locale";
|
||||
import { intl, T } from "src/locale";
|
||||
import styles from "./DNSProviderFields.module.css";
|
||||
|
||||
interface DNSProviderOption {
|
||||
@@ -57,7 +57,7 @@ export function DNSProviderFields({ showBoundaryBox = false }: Props) {
|
||||
id="dnsProvider"
|
||||
closeMenuOnSelect={true}
|
||||
isClearable={false}
|
||||
placeholder="Select a Provider..."
|
||||
placeholder={intl.formatMessage({ id: "certificates.dns.provider.placeholder" })}
|
||||
isLoading={isLoading}
|
||||
isSearchable
|
||||
onChange={handleChange}
|
||||
|
||||
@@ -5,7 +5,11 @@ import { useTheme } from "src/hooks";
|
||||
import { changeLocale, getFlagCodeForLocale, localeOptions, T } from "src/locale";
|
||||
import styles from "./LocalePicker.module.css";
|
||||
|
||||
function LocalePicker() {
|
||||
interface Props {
|
||||
menuAlign?: "start" | "end";
|
||||
}
|
||||
|
||||
function LocalePicker({ menuAlign = "start" }: Props) {
|
||||
const { locale, setLocale } = useLocaleState();
|
||||
const { getTheme } = useTheme();
|
||||
|
||||
@@ -23,22 +27,24 @@ function LocalePicker() {
|
||||
<button type="button" className={cns} data-bs-toggle="dropdown">
|
||||
<Flag countryCode={getFlagCodeForLocale(locale)} />
|
||||
</button>
|
||||
<div className="dropdown-menu">
|
||||
{localeOptions.map((item) => {
|
||||
return (
|
||||
<a
|
||||
className="dropdown-item"
|
||||
href={`/locale/${item[0]}`}
|
||||
key={`locale-${item[0]}`}
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
changeTo(item[0]);
|
||||
}}
|
||||
>
|
||||
<Flag countryCode={getFlagCodeForLocale(item[0])} /> <T id={`locale-${item[1]}`} />
|
||||
</a>
|
||||
);
|
||||
<div
|
||||
className={cn("dropdown-menu", {
|
||||
"dropdown-menu-end": menuAlign === "end",
|
||||
})}
|
||||
>
|
||||
{localeOptions.map((item: any) => (
|
||||
<a
|
||||
className="dropdown-item"
|
||||
href={`/locale/${item[0]}`}
|
||||
key={`locale-${item[0]}`}
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
changeTo(item[0]);
|
||||
}}
|
||||
>
|
||||
<Flag countryCode={getFlagCodeForLocale(item[0])} /> <T id={`locale-${item[1]}`} />
|
||||
</a>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -2,5 +2,5 @@ interface Props {
|
||||
children: React.ReactNode;
|
||||
}
|
||||
export function SiteContainer({ children }: Props) {
|
||||
return <div className="container-xl py-3">{children}</div>;
|
||||
return <div className="container-xl py-3 min-w-0 overflow-x-auto">{children}</div>;
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import { useHealth } from "src/hooks";
|
||||
import { useCheckVersion, useHealth } from "src/hooks";
|
||||
import { T } from "src/locale";
|
||||
|
||||
export function SiteFooter() {
|
||||
const health = useHealth();
|
||||
const { data: versionData } = useCheckVersion();
|
||||
|
||||
const getVersion = () => {
|
||||
if (!health.data) {
|
||||
@@ -55,6 +56,19 @@ export function SiteFooter() {
|
||||
{getVersion()}{" "}
|
||||
</a>
|
||||
</li>
|
||||
{versionData?.updateAvailable && versionData?.latest && (
|
||||
<li className="list-inline-item">
|
||||
<a
|
||||
href={`https://github.com/NginxProxyManager/nginx-proxy-manager/releases/tag/${versionData.latest}`}
|
||||
className="link-warning fw-bold"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
title={`New version ${versionData.latest} is available`}
|
||||
>
|
||||
<T id="update-available" data={{ latestVersion: versionData.latest }} />
|
||||
</a>
|
||||
</li>
|
||||
)}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -25,7 +25,7 @@ export function SiteHeader() {
|
||||
>
|
||||
<span className="navbar-toggler-icon" />
|
||||
</button>
|
||||
<div className="navbar-brand navbar-brand-autodark d-none-navbar-horizontal pe-0 pe-md-3">
|
||||
<div className="navbar-brand navbar-brand-autodark pe-0 pe-md-3">
|
||||
<NavLink to="/">
|
||||
<div className={styles.logo}>
|
||||
<img
|
||||
@@ -48,11 +48,11 @@ export function SiteHeader() {
|
||||
<ThemeSwitcher />
|
||||
</div>
|
||||
</div>
|
||||
<div className="nav-item d-none d-md-flex me-3">
|
||||
<div className="nav-item d-md-flex">
|
||||
<div className="nav-item dropdown">
|
||||
<a
|
||||
href="/"
|
||||
className="nav-link d-flex lh-1 p-0 px-2"
|
||||
className="nav-link d-flex lh-1"
|
||||
data-bs-toggle="dropdown"
|
||||
aria-label="Open user menu"
|
||||
>
|
||||
@@ -70,6 +70,22 @@ export function SiteHeader() {
|
||||
</div>
|
||||
</a>
|
||||
<div className="dropdown-menu dropdown-menu-end dropdown-menu-arrow">
|
||||
<div className="d-md-none">
|
||||
{/* biome-ignore lint/a11y/noStaticElementInteractions lint/a11y/useKeyWithClickEvents: This div is not interactive. */}
|
||||
<div className="p-2 pb-1 pe-1 d-flex align-items-center" onClick={e => e.stopPropagation()}>
|
||||
<div className="ps-2 pe-1 me-auto">
|
||||
<div>{currentUser?.nickname}</div>
|
||||
<div className="mt-1 small text-secondary text-nowrap">
|
||||
<T id={isAdmin ? "role.admin" : "role.standard-user"} />
|
||||
</div>
|
||||
</div>
|
||||
<div className="d-flex align-items-center">
|
||||
<ThemeSwitcher className="me-n2" />
|
||||
<LocalePicker menuAlign="end" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="dropdown-divider" />
|
||||
</div>
|
||||
<a
|
||||
href="?"
|
||||
className="dropdown-item"
|
||||
|
||||
@@ -176,21 +176,17 @@ const getMenuDropown = (item: MenuItem, onClick?: () => void) => {
|
||||
};
|
||||
|
||||
export function SiteMenu() {
|
||||
// This is hacky AF. But that's the price of using a non-react UI kit.
|
||||
const closeMenus = () => {
|
||||
const navMenus = document.querySelectorAll(".nav-item.dropdown");
|
||||
navMenus.forEach((menu) => {
|
||||
menu.classList.remove("show");
|
||||
const dropdown = menu.querySelector(".dropdown-menu");
|
||||
if (dropdown) {
|
||||
dropdown.classList.remove("show");
|
||||
}
|
||||
});
|
||||
};
|
||||
const closeMenu = () => setTimeout(() => {
|
||||
const navbarToggler = document.querySelector<HTMLElement>(".navbar-toggler");
|
||||
const navbarMenu = document.querySelector("#navbar-menu");
|
||||
if (navbarToggler && navbarMenu?.classList.contains("show")) {
|
||||
navbarToggler.click();
|
||||
}
|
||||
}, 300);
|
||||
|
||||
return (
|
||||
<header className="navbar-expand-md">
|
||||
<div className="collapse navbar-collapse" id="navbar-menu">
|
||||
<div className="collapse navbar-collapse" id="navbar-menu">
|
||||
<div className="navbar">
|
||||
<div className="container-xl">
|
||||
<div className="row flex-column flex-md-row flex-fill align-items-center">
|
||||
@@ -198,7 +194,7 @@ export function SiteMenu() {
|
||||
<ul className="navbar-nav">
|
||||
{menuItems.length > 0 &&
|
||||
menuItems.map((item) => {
|
||||
return getMenuItem(item, closeMenus);
|
||||
return getMenuItem(item, closeMenu);
|
||||
})}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -10,35 +10,42 @@ interface Props {
|
||||
color?: string;
|
||||
}
|
||||
|
||||
const DomainLink = ({ domain, color }: { domain: string; color?: string }) => {
|
||||
const DomainLink = ({ domain, color }: { domain?: string; color?: string }) => {
|
||||
// when domain contains a wildcard, make the link go nowhere.
|
||||
let onClick: ((e: React.MouseEvent) => void) | undefined;
|
||||
if (domain.includes("*")) {
|
||||
onClick = (e: React.MouseEvent) => e.preventDefault();
|
||||
// Apparently the domain can be null or undefined sometimes.
|
||||
// This try is just a safeguard to prevent the whole formatter from breaking.
|
||||
if (!domain) return null;
|
||||
try {
|
||||
let onClick: ((e: React.MouseEvent) => void) | undefined;
|
||||
if (domain.includes("*")) {
|
||||
onClick = (e: React.MouseEvent) => e.preventDefault();
|
||||
}
|
||||
return (
|
||||
<a
|
||||
key={domain}
|
||||
href={`http://${domain}`}
|
||||
target="_blank"
|
||||
onClick={onClick}
|
||||
className={cn("badge", color ? `bg-${color}-lt` : null, "domain-name", "me-2")}
|
||||
>
|
||||
{domain}
|
||||
</a>
|
||||
);
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
return (
|
||||
<a
|
||||
key={domain}
|
||||
href={`http://${domain}`}
|
||||
target="_blank"
|
||||
onClick={onClick}
|
||||
className={cn("badge", color ? `bg-${color}-lt` : null, "domain-name", "me-2")}
|
||||
>
|
||||
{domain}
|
||||
</a>
|
||||
);
|
||||
};
|
||||
|
||||
export function DomainsFormatter({ domains, createdOn, niceName, provider, color }: Props) {
|
||||
const elms: ReactNode[] = [];
|
||||
if (domains.length === 0 && !niceName) {
|
||||
if ((!domains || domains.length === 0) && !niceName) {
|
||||
elms.push(
|
||||
<span key="nice-name" className="badge bg-danger-lt me-2">
|
||||
Unknown
|
||||
</span>,
|
||||
);
|
||||
}
|
||||
if (niceName && provider !== "letsencrypt") {
|
||||
if (!domains || (niceName && provider !== "letsencrypt")) {
|
||||
elms.push(
|
||||
<span key="nice-name" className="badge bg-info-lt me-2">
|
||||
{niceName}
|
||||
@@ -46,7 +53,9 @@ export function DomainsFormatter({ domains, createdOn, niceName, provider, color
|
||||
);
|
||||
}
|
||||
|
||||
domains.map((domain: string) => elms.push(<DomainLink key={domain} domain={domain} color={color} />));
|
||||
if (domains) {
|
||||
domains.map((domain: string) => elms.push(<DomainLink key={domain} domain={domain} color={color} />));
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="flex-fill">
|
||||
|
||||
@@ -12,10 +12,12 @@ interface TableLayoutProps<TFields> {
|
||||
function TableLayout<TFields>(props: TableLayoutProps<TFields>) {
|
||||
const hasRows = props.tableInstance.getRowModel().rows.length > 0;
|
||||
return (
|
||||
<table className="table table-vcenter table-selectable mb-0">
|
||||
{hasRows ? <TableHeader tableInstance={props.tableInstance} /> : null}
|
||||
<TableBody {...props} />
|
||||
</table>
|
||||
<div className="table-responsive">
|
||||
<table className="table table-vcenter table-selectable mb-0">
|
||||
{hasRows ? <TableHeader tableInstance={props.tableInstance} /> : null}
|
||||
<TableBody {...props} />
|
||||
</table>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ export * from "./useAuditLog";
|
||||
export * from "./useAuditLogs";
|
||||
export * from "./useCertificate";
|
||||
export * from "./useCertificates";
|
||||
export * from "./useCheckVersion";
|
||||
export * from "./useDeadHost";
|
||||
export * from "./useDeadHosts";
|
||||
export * from "./useDnsProviders";
|
||||
|
||||
18
frontend/src/hooks/useCheckVersion.ts
Normal file
18
frontend/src/hooks/useCheckVersion.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { useQuery } from "@tanstack/react-query";
|
||||
import { checkVersion, type VersionCheckResponse } from "src/api/backend";
|
||||
|
||||
const fetchVersion = () => checkVersion();
|
||||
|
||||
const useCheckVersion = (options = {}) => {
|
||||
return useQuery<VersionCheckResponse, Error>({
|
||||
queryKey: ["version-check"],
|
||||
queryFn: fetchVersion,
|
||||
refetchOnWindowFocus: false,
|
||||
retry: 5,
|
||||
refetchInterval: 30 * 1000, // 30 seconds
|
||||
staleTime: 5 * 60 * 1000, // 5 mins
|
||||
...options,
|
||||
});
|
||||
};
|
||||
|
||||
export { fetchVersion, useCheckVersion };
|
||||
@@ -2,75 +2,57 @@ 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 langIt from "./lang/it.json";
|
||||
import langJa from "./lang/ja.json";
|
||||
import langList from "./lang/lang-list.json";
|
||||
import langNl from "./lang/nl.json";
|
||||
import langPl from "./lang/pl.json";
|
||||
import langRu from "./lang/ru.json";
|
||||
import langSk from "./lang/sk.json";
|
||||
import langVi from "./lang/vi.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
|
||||
// Remember when adding to this list, also update check-locales.js script
|
||||
const localeOptions = [
|
||||
["en", "en-US"],
|
||||
["de", "de-DE"],
|
||||
["es", "es-ES"],
|
||||
["ja", "ja-JP"],
|
||||
["ru", "ru-RU"],
|
||||
["sk", "sk-SK"],
|
||||
["zh", "zh-CN"],
|
||||
["pl", "pl-PL"],
|
||||
["en", "en-US", langEn],
|
||||
["de", "de-DE", langDe],
|
||||
["es", "es-ES", langEs],
|
||||
["ja", "ja-JP", langJa],
|
||||
["it", "it-IT", langIt],
|
||||
["nl", "nl-NL", langNl],
|
||||
["pl", "pl-PL", langPl],
|
||||
["ru", "ru-RU", langRu],
|
||||
["sk", "sk-SK", langSk],
|
||||
["vi", "vi-VN", langVi],
|
||||
["zh", "zh-CN", langZh],
|
||||
];
|
||||
|
||||
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);
|
||||
case "es":
|
||||
return Object.assign({}, langList, langEn, langEs);
|
||||
case "ja":
|
||||
return Object.assign({}, langList, langEn, langJa);
|
||||
case "ru":
|
||||
return Object.assign({}, langList, langEn, langRu);
|
||||
case "sk":
|
||||
return Object.assign({}, langList, langEn, langSk);
|
||||
case "zh":
|
||||
return Object.assign({}, langList, langEn, langZh);
|
||||
case "pl":
|
||||
return Object.assign({}, langList, langEn, langPl);
|
||||
default:
|
||||
return Object.assign({}, langList, langEn);
|
||||
const thisLocale = (locale || "en").slice(0, 2);
|
||||
|
||||
// ensure this lang exists in localeOptions above, otherwise fallback to en
|
||||
if (thisLocale === "en" || !localeOptions.some(([code]) => code === thisLocale)) {
|
||||
return Object.assign({}, langList, langEn);
|
||||
}
|
||||
|
||||
return Object.assign({}, langList, langEn, localeOptions.find(([code]) => code === thisLocale)?.[2]);
|
||||
};
|
||||
|
||||
const getFlagCodeForLocale = (locale?: string) => {
|
||||
switch (locale) {
|
||||
case "es-ES":
|
||||
case "es":
|
||||
return "ES";
|
||||
case "de-DE":
|
||||
case "de":
|
||||
return "DE";
|
||||
case "ja-JP":
|
||||
case "ja":
|
||||
return "JP";
|
||||
case "ru-RU":
|
||||
case "ru":
|
||||
return "RU";
|
||||
case "sk-SK":
|
||||
case "sk":
|
||||
return "SK";
|
||||
case "zh":
|
||||
case "zh-CN":
|
||||
return "CN";
|
||||
case "pl":
|
||||
case "pl-PL":
|
||||
return "PL";
|
||||
default:
|
||||
return "EN";
|
||||
const thisLocale = (locale || "en").slice(0, 2);
|
||||
|
||||
// only add to this if your flag is different from the locale code
|
||||
const specialCases: Record<string, string> = {
|
||||
ja: "jp", // Japan
|
||||
zh: "cn", // China
|
||||
};
|
||||
|
||||
if (specialCases[thisLocale]) {
|
||||
return specialCases[thisLocale].toUpperCase();
|
||||
}
|
||||
return thisLocale.toUpperCase();
|
||||
};
|
||||
|
||||
const getLocale = (short = false) => {
|
||||
@@ -131,4 +113,6 @@ const T = ({
|
||||
);
|
||||
};
|
||||
|
||||
console.log("L:", localeOptions);
|
||||
|
||||
export { localeOptions, getFlagCodeForLocale, getLocale, createIntl, changeLocale, intl, T };
|
||||
|
||||
@@ -39,8 +39,9 @@ not be complete by the time you're reading this:
|
||||
|
||||
- frontend/src/locale/src/[yourlang].json
|
||||
- frontend/src/locale/src/lang-list.json
|
||||
- frontend/src/locale/src/HelpDoc/*
|
||||
- frontend/src/locale/src/HelpDoc/[yourlang]/*
|
||||
- frontend/src/locale/IntlProvider.tsx
|
||||
- frontend/check-locales.cjs
|
||||
|
||||
|
||||
## Checking for missing translations in languages
|
||||
|
||||
@@ -1,216 +0,0 @@
|
||||
{
|
||||
"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": "Pfad Hinzufügen",
|
||||
"action.close": "Schließen",
|
||||
"action.delete": "Löschen",
|
||||
"action.disable": "Deaktivieren",
|
||||
"action.download": "Herunterladen",
|
||||
"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",
|
||||
"certificate.renew": "Zertifikat erneuern",
|
||||
"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 Pfad",
|
||||
"column.destination": "Ziel",
|
||||
"column.details": "Details",
|
||||
"column.email": "Email",
|
||||
"column.event": "Ereignis",
|
||||
"column.expires": "Verfällt am",
|
||||
"column.http-code": "HTTP Code",
|
||||
"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": "Erstelldatum: {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 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.",
|
||||
"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": "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!",
|
||||
"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": "{object} wirklich löschen?",
|
||||
"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-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",
|
||||
"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": "<!-- Geben Sie hier Ihren benutzerdefinierten HTML-Inhalt ein. -->",
|
||||
"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 Light Mode wechslen",
|
||||
"username": "Benutzername",
|
||||
"users": "Benutzer"
|
||||
}
|
||||
@@ -1,216 +0,0 @@
|
||||
{
|
||||
"access-list": "Access List",
|
||||
"access-list.access-count": "{count} {count, plural, one {Rule} other {Rules}}",
|
||||
"access-list.auth-count": "{count} {count, plural, one {User} other {Users}}",
|
||||
"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": "Access Lists",
|
||||
"action.add": "Add",
|
||||
"action.add-location": "Add Location",
|
||||
"action.close": "Close",
|
||||
"action.delete": "Delete",
|
||||
"action.disable": "Disable",
|
||||
"action.download": "Download",
|
||||
"action.edit": "Edit",
|
||||
"action.enable": "Enable",
|
||||
"action.permissions": "Permissions",
|
||||
"action.renew": "Renew",
|
||||
"action.view-details": "View Details",
|
||||
"auditlogs": "Audit Logs",
|
||||
"cancel": "Cancel",
|
||||
"certificate": "Certificate",
|
||||
"certificate.custom-certificate": "Certificate",
|
||||
"certificate.custom-certificate-key": "Certificate Key",
|
||||
"certificate.custom-intermediate": "Intermediate Certificate",
|
||||
"certificate.in-use": "In Use",
|
||||
"certificate.none.subtitle": "No certificate assigned",
|
||||
"certificate.none.subtitle.for-http": "This host will not use HTTPS",
|
||||
"certificate.none.title": "None",
|
||||
"certificate.not-in-use": "Not Used",
|
||||
"certificate.renew": "Renew Certificate",
|
||||
"certificates": "Certificates",
|
||||
"certificates.custom": "Custom Certificate",
|
||||
"certificates.custom.warning": "Key files protected with a passphrase are not supported.",
|
||||
"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 Provider",
|
||||
"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": "with Let's Encrypt",
|
||||
"certificates.request.title": "Request a new Certificate",
|
||||
"column.access": "Access",
|
||||
"column.authorization": "Authorization",
|
||||
"column.authorizations": "Authorizations",
|
||||
"column.custom-locations": "Custom Locations",
|
||||
"column.destination": "Destination",
|
||||
"column.details": "Details",
|
||||
"column.email": "Email",
|
||||
"column.event": "Event",
|
||||
"column.expires": "Expires",
|
||||
"column.http-code": "HTTP Code",
|
||||
"column.incoming-port": "Incoming Port",
|
||||
"column.name": "Name",
|
||||
"column.protocol": "Protocol",
|
||||
"column.provider": "Provider",
|
||||
"column.roles": "Roles",
|
||||
"column.rules": "Rules",
|
||||
"column.satisfy": "Satisfy",
|
||||
"column.satisfy-all": "All",
|
||||
"column.satisfy-any": "Any",
|
||||
"column.scheme": "Scheme",
|
||||
"column.source": "Source",
|
||||
"column.ssl": "SSL",
|
||||
"column.status": "Status",
|
||||
"created-on": "Created: {date}",
|
||||
"dashboard": "Dashboard",
|
||||
"dead-host": "404 Host",
|
||||
"dead-hosts": "404 Hosts",
|
||||
"dead-hosts.count": "{count} {count, plural, one {404 Host} other {404 Hosts}}",
|
||||
"disabled": "Disabled",
|
||||
"domain-names": "Domain Names",
|
||||
"domain-names.max": "{count} domain names maximum",
|
||||
"domain-names.placeholder": "Start typing to add domain...",
|
||||
"domain-names.wildcards-not-permitted": "Wildcards not permitted for this type",
|
||||
"domain-names.wildcards-not-supported": "Wildcards not supported for this 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 address",
|
||||
"empty-search": "No results found",
|
||||
"empty-subtitle": "Why don't you create one?",
|
||||
"enabled": "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": "Expires: {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": "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": "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": "Error",
|
||||
"notification.object-deleted": "{object} has been deleted",
|
||||
"notification.object-disabled": "{object} has been disabled",
|
||||
"notification.object-enabled": "{object} has been enabled",
|
||||
"notification.object-renewed": "{object} has been renewed",
|
||||
"notification.object-saved": "{object} has been saved",
|
||||
"notification.success": "Success",
|
||||
"object.actions-title": "{object} #{id}",
|
||||
"object.add": "Add {object}",
|
||||
"object.delete": "Delete {object}",
|
||||
"object.delete.content": "Are you sure you want to delete this {object}?",
|
||||
"object.edit": "Edit {object}",
|
||||
"object.empty": "There are no {objects}",
|
||||
"object.event.created": "Created {object}",
|
||||
"object.event.deleted": "Deleted {object}",
|
||||
"object.event.disabled": "Disabled {object}",
|
||||
"object.event.enabled": "Enabled {object}",
|
||||
"object.event.renewed": "Renewed {object}",
|
||||
"object.event.updated": "Updated {object}",
|
||||
"offline": "Offline",
|
||||
"online": "Online",
|
||||
"options": "Options",
|
||||
"password": "Password",
|
||||
"password.generate": "Generate random password",
|
||||
"password.hide": "Hide Password",
|
||||
"password.show": "Show Password",
|
||||
"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",
|
||||
"proxy-host.forward-host": "Forward Hostname / IP",
|
||||
"proxy-hosts": "Proxy Hosts",
|
||||
"proxy-hosts.count": "{count} {count, plural, one {Proxy Host} other {Proxy Hosts}}",
|
||||
"public": "Public",
|
||||
"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",
|
||||
"role.standard-user": "Standard User",
|
||||
"save": "Save",
|
||||
"setting": "Setting",
|
||||
"settings": "Settings",
|
||||
"settings.default-site": "Default Site",
|
||||
"settings.default-site.404": "404 Page",
|
||||
"settings.default-site.444": "No Response (444)",
|
||||
"settings.default-site.congratulations": "Congratulations Page",
|
||||
"settings.default-site.description": "What to show when Nginx is hit with an unknown Host",
|
||||
"settings.default-site.html": "Custom HTML",
|
||||
"settings.default-site.html.placeholder": "<!-- Enter your custom HTML content here -->",
|
||||
"settings.default-site.redirect": "Redirect",
|
||||
"setup.preamble": "Get started by creating your admin account.",
|
||||
"setup.title": "Welcome!",
|
||||
"sign-in": "Sign in",
|
||||
"ssl-certificate": "SSL Certificate",
|
||||
"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": "Change Password",
|
||||
"user.confirm-password": "Confirm Password",
|
||||
"user.current-password": "Current Password",
|
||||
"user.edit-profile": "Edit Profile",
|
||||
"user.full-name": "Full Name",
|
||||
"user.login-as": "Sign in as {name}",
|
||||
"user.logout": "Logout",
|
||||
"user.new-password": "New Password",
|
||||
"user.nickname": "Nickname",
|
||||
"user.set-password": "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": "Users"
|
||||
}
|
||||
@@ -1,216 +0,0 @@
|
||||
{
|
||||
"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": "Código HTTP",
|
||||
"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-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",
|
||||
"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": "<!-- Introduce aquí tu contenido HTML personalizado -->",
|
||||
"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"
|
||||
}
|
||||
@@ -1,215 +0,0 @@
|
||||
{
|
||||
"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": "<!-- Enter your custom HTML content here -->",
|
||||
"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": "ユーザー"
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"locale-de-DE": "German",
|
||||
"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": "中文"
|
||||
}
|
||||
@@ -1,216 +0,0 @@
|
||||
{
|
||||
"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 serwera docelowego",
|
||||
"access-list.public": "Publicznie dostępne",
|
||||
"access-list.public.subtitle": "Nie wymaga uwierzytelnienia podstawowego",
|
||||
"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",
|
||||
"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 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 ten serwer www",
|
||||
"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ąć {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": "<!-- Wprowadź tutaj własną zawartość HTML -->",
|
||||
"settings.default-site.redirect": "Przekierowanie",
|
||||
"setup.preamble": "Zacznij od utworzenia konta administratora.",
|
||||
"setup.title": "Witaj!",
|
||||
"sign-in": "Zaloguj się",
|
||||
"ssl-certificate": "Certyfikat SSL",
|
||||
"stream": "Strumień",
|
||||
"stream.forward-host": "Host docelowy",
|
||||
"stream.incoming-port": "Port przychodzący",
|
||||
"streams": "Strumienie",
|
||||
"streams.count": "{count} {count, plural, one {Strumień} few {Strumienie} other {Strumieni}}",
|
||||
"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"
|
||||
}
|
||||
@@ -1,216 +0,0 @@
|
||||
{
|
||||
"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": "Публично доступен",
|
||||
"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": "Добавить маршрут",
|
||||
"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": "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": "Результаты проверки",
|
||||
"certificates.http.warning": "These domains must be already configured to point to this installation.",
|
||||
"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": "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": "404-хост",
|
||||
"dead-hosts": "404-хосты",
|
||||
"dead-hosts.count": "{count} {count, plural, one {404-хост} few {404-хоста} many {404-хостов} other {404-хоста}}",
|
||||
"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": "Всегда SSL",
|
||||
"domains.hsts-enabled": "Поддержка HSTS",
|
||||
"domains.hsts-subdomains": "Поддомены HSTS",
|
||||
"domains.http2-support": "Поддержка HTTP/2",
|
||||
"domains.use-dns": "Использовать DNS Challenge",
|
||||
"email-address": "Email-адрес",
|
||||
"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": "Неверный 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": "Слишком много доменов, максимум {max}",
|
||||
"error.maximum": "Максимум {max}",
|
||||
"error.min-character-length": "Minimum length is {min} character{min, plural, one {} other {s}}",
|
||||
"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": "Поддержка WebSocket",
|
||||
"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": "You do not have access to view this.",
|
||||
"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} {count, plural, one {прокси-хост} few {прокси-хоста} many {прокси-хостов} other {прокси-хоста}}",
|
||||
"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": "Администратор",
|
||||
"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": "<!-- Введите здесь свой HTML-контент -->",
|
||||
"settings.default-site.redirect": "Перенаправление",
|
||||
"setup.preamble": "Начните с создания учётной записи администратора.",
|
||||
"setup.title": "Добро пожаловать!",
|
||||
"sign-in": "Войти",
|
||||
"ssl-certificate": "SSL-сертификат",
|
||||
"stream": "Поток",
|
||||
"stream.forward-host": "Хост перенаправления",
|
||||
"stream.incoming-port": "Входящий порт",
|
||||
"streams": "Потоки",
|
||||
"streams.count": "{count} {count, plural, one {поток} few {потока} many {потоков} other {потока}}",
|
||||
"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": "Set Permissions for {name}",
|
||||
"user.switch-dark": "Включить тёмную тему",
|
||||
"user.switch-light": "Включить светлую тему",
|
||||
"username": "Логин",
|
||||
"users": "Пользователи"
|
||||
}
|
||||
@@ -1,216 +0,0 @@
|
||||
{
|
||||
"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": "<!-- Sem zadajte vlastný HTML obsah -->",
|
||||
"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"
|
||||
}
|
||||
@@ -1,216 +0,0 @@
|
||||
{
|
||||
"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-host.forward-http-code": "HTTP 状态码",
|
||||
"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": "<!-- 在此输入您的自定义 HTML 内容 -->",
|
||||
"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": "用户列表"
|
||||
}
|
||||
@@ -1,20 +1,30 @@
|
||||
import * as de from "./de/index";
|
||||
import * as en from "./en/index";
|
||||
import * as it from "./it/index";
|
||||
import * as ja from "./ja/index";
|
||||
import * as sk from "./sk/index";
|
||||
import * as zh from "./zh/index";
|
||||
import * as nl from "./nl/index";
|
||||
import * as pl from "./pl/index";
|
||||
import * as ru from "./ru/index";
|
||||
import * as sk from "./sk/index";
|
||||
import * as vi from "./vi/index";
|
||||
import * as zh from "./zh/index";
|
||||
|
||||
const items: any = { en, de, ja, sk, zh, pl };
|
||||
const items: any = { en, de, ja, sk, zh, pl, ru, it, vi, nl };
|
||||
|
||||
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}`);
|
||||
|
||||
7
frontend/src/locale/src/HelpDoc/it/AccessLists.md
Normal file
7
frontend/src/locale/src/HelpDoc/it/AccessLists.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Che cos'è una Lista di Accesso?
|
||||
|
||||
La Lista di Accesso fornisce una blacklist o una whitelist di indirizzi IP specifici dei client insieme all'autenticazione per gli host proxy tramite autenticazione HTTP di base.
|
||||
|
||||
È possibile configurare più regole client, nomi utente e password per un singolo lista di accesso e quindi applicarlo a uno o più host proxy.
|
||||
|
||||
Ciò è particolarmente utile per i servizi web inoltrati che non dispongono di meccanismi di autenticazione integrati o quando si desidera proteggersi da client sconosciuti.
|
||||
24
frontend/src/locale/src/HelpDoc/it/Certificates.md
Normal file
24
frontend/src/locale/src/HelpDoc/it/Certificates.md
Normal file
@@ -0,0 +1,24 @@
|
||||
## Guida sui Certificati
|
||||
|
||||
### Certificato HTTP
|
||||
|
||||
Un certificato convalidato HTTP significa che i server Let's Encrypttenteranno di raggiungere i tuoi domini tramite HTTP (non HTTPS!) e, in caso di esito positivo, emetteranno il tuo certificato.
|
||||
|
||||
Per questo metodo, dovrai creare un _Proxy Host_ per i tuoi domini chesia accessibile con HTTP e che punti a questa installazione Nginx.
|
||||
Dopo che il certificato è stato rilasciato, puoi modificare il _Proxy Host_ per utilizzare questo certificato anche per le connessioni HTTPS.
|
||||
Tuttavia, il _Proxy Host_ dovrà comunque essere configurato per l'accesso HTTP affinché il certificato possa essere rinnovato.
|
||||
|
||||
Questo processo _non_ supporta i domini wildcard.
|
||||
|
||||
### Certificato DNS
|
||||
|
||||
Un certificato convalidato dal DNS richiede l'uso di un plugin DNS Provider. Questo DNS Provider verrà utilizzato per creare record temporanei sul tuo dominio,
|
||||
quindi Let's Encrypt interrogherà tali record per assicurarsi che tu sia il proprietario e, in caso di esito positivo,rilascerà il tuo certificato.
|
||||
|
||||
Non è necessario creare un _Proxy Host_ prima di richiedere questo tipo di certificato. Non è nemmeno necessario configurare il tuo _proxy host_ per l'accesso HTTP.
|
||||
|
||||
Questo processo _supporta_ i domini wildcard.
|
||||
|
||||
### Certificato personalizzato
|
||||
|
||||
Utilizza questa opzione per caricare il tuo certificato SSL, fornito dalla tua autorità di certificazione.
|
||||
9
frontend/src/locale/src/HelpDoc/it/DeadHosts.md
Normal file
9
frontend/src/locale/src/HelpDoc/it/DeadHosts.md
Normal file
@@ -0,0 +1,9 @@
|
||||
## Che cos'è un Host 404?
|
||||
|
||||
Un Host 404 è semplicemente una configurazione host che mostra una pagina 404.
|
||||
|
||||
Questo può essere utile quando il tuo dominio è elencato nei motori di ricerca e desideri fornire una pagina di errore più gradevole o specificare agli
|
||||
indicizzatori di ricerca che le pagine del dominio non esistono più.
|
||||
|
||||
Un altro vantaggio di avere questo host è quello di tracciare i log degli accessi e
|
||||
visualizzare i referrer.
|
||||
7
frontend/src/locale/src/HelpDoc/it/ProxyHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/it/ProxyHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Che cos'è un Proxy Host?
|
||||
|
||||
Un host proxy è l'endpoint in entrata per un servizio web che si desidera inoltrare.
|
||||
|
||||
Fornisce la terminazione SSL opzionale per il servizio che potrebbe non avere il supporto SSL integrato.
|
||||
|
||||
Gli host proxy sono l'uso più comune per Nginx Proxy Manager.
|
||||
7
frontend/src/locale/src/HelpDoc/it/RedirectionHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/it/RedirectionHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Che cos'è un Host di reindirizzamento?
|
||||
|
||||
Un Host di reindirizzamento reindirizza le richieste provenienti dal dominio in entrata e indirizza il
|
||||
visitatore verso un altro dominio.
|
||||
|
||||
Il motivo più comune per utilizzare questo tipo di host è quando il tuo sito web cambia
|
||||
dominio, ma hai ancora link di motori di ricerca o referrer che puntano al vecchio dominio.
|
||||
6
frontend/src/locale/src/HelpDoc/it/Streams.md
Normal file
6
frontend/src/locale/src/HelpDoc/it/Streams.md
Normal file
@@ -0,0 +1,6 @@
|
||||
## Che cos'è uno Stream?
|
||||
|
||||
Una funzionalità relativamente nuova per Nginx, uno Stream serve a inoltrare il traffico TCP/UDP
|
||||
direttamente a un altro computer sulla rete.
|
||||
|
||||
Se gestisci server di gioco, FTP o SSH, questa funzionalità può rivelarsi molto utile.
|
||||
6
frontend/src/locale/src/HelpDoc/it/index.ts
Normal file
6
frontend/src/locale/src/HelpDoc/it/index.ts
Normal file
@@ -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";
|
||||
7
frontend/src/locale/src/HelpDoc/nl/AccessLists.md
Normal file
7
frontend/src/locale/src/HelpDoc/nl/AccessLists.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Wat is een Toegangslijst?
|
||||
|
||||
Toeganslijsten bieden een zwarte- of witte lijst van specifieke client IP-adressen samen met authenticatie voor de Proxy Hosts via Basic HTTP Authenticatie.
|
||||
|
||||
Je kan meerdere client regels, gebruikersnamen en wachtwoorden voor een enkele Toegangslijst configureren en toepassen op één of meerdere _Proxy Hosts_.
|
||||
|
||||
Dit is het meest nuttig voor doorgestuurde webdiensten die geen authenticatiemechanismen hebben of wanneer je wilt beveiligen tegen onbekende bezoekers.
|
||||
31
frontend/src/locale/src/HelpDoc/nl/Certificates.md
Normal file
31
frontend/src/locale/src/HelpDoc/nl/Certificates.md
Normal file
@@ -0,0 +1,31 @@
|
||||
## Certificaten Hulp
|
||||
|
||||
### HTTP Certificaat
|
||||
|
||||
Een HTTP gevalideerd certificaat betekent dat Let's Encrypt servers
|
||||
zullen proberen om over HTTP te bereiken (niet HTTPS!) en als dat gelukt is, zal
|
||||
jouw certificaat worden uitgegeven.
|
||||
|
||||
Voor deze zal je een _Proxy Host_ moeten hebben die is toegankelijk via HTTP en
|
||||
die naar deze Nginx installatie wijst. Nadat een certificaat is uitgegeven kan je
|
||||
de _Proxy Host_ wijzigen om ook HTTPS toegang te geven. Maar de _Proxy Host_ zal
|
||||
nog moeten worden geconfigureerd voor HTTP toegang om het certificaat te verlengen.
|
||||
|
||||
Dit proces ondersteunt geen domeinen met wildcards.
|
||||
|
||||
### DNS Certificaat
|
||||
|
||||
Een DNS gevalideerd certificaat zal gebruik maken van een DNS Provider plugin. De
|
||||
DNS Provider zal tijdelijke records op jouw domein maken en Let's Encrypt zal deze
|
||||
records opvragen om te controleren of je de eigenaar bent. Als dat is gecontroleerd
|
||||
is zal Let's Encrypt het certificaat uitgeven.
|
||||
|
||||
Je hebt geen _Proxy Host_ nodig om dit soort certificaat aan te vragen. Je hebt dus
|
||||
geen HTTP _Proxy Host_ nodig.
|
||||
|
||||
Dit proces ondersteunt _wel_ domeinen met wildcards.
|
||||
|
||||
### Aangepast Certificaat
|
||||
|
||||
Gebruik deze optie om jouw eigen SSL Certificaat te uploaden, zoals
|
||||
geleverd door jouw eigen Certificate Authority.
|
||||
10
frontend/src/locale/src/HelpDoc/nl/DeadHosts.md
Normal file
10
frontend/src/locale/src/HelpDoc/nl/DeadHosts.md
Normal file
@@ -0,0 +1,10 @@
|
||||
## Wat is een 404 Host?
|
||||
|
||||
Simpel gezegd is een 404 Host een host setup die een 404 pagina weergeeft.
|
||||
|
||||
Dit kan nuttig zijn wanneer jouw domein is opgegeven in zoekmachines en je wil
|
||||
een betere foutpagina leveren of specifiek om te zeggen tegen de zoekmachines dat
|
||||
het domein niet langer bestaat.
|
||||
|
||||
Een ander voordeel van het hebben van een 404 Host is om de logs voor bezoeken
|
||||
te volgen en de referenties te bekijken.
|
||||
7
frontend/src/locale/src/HelpDoc/nl/ProxyHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/nl/ProxyHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Wat is een Proxy Host?
|
||||
|
||||
Een Proxy Host is de inkomende endpoint voor een webdienst dat je wilt doorsturen.
|
||||
|
||||
Het biedt optionele SSL voor je dienst die mogelijk geen SSL ondersteuning heeft.
|
||||
|
||||
Proxy Hosts worden het meest gebruikt in Nginx Proxy Manager.
|
||||
7
frontend/src/locale/src/HelpDoc/nl/RedirectionHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/nl/RedirectionHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Wat is een Redirection Host?
|
||||
|
||||
Een Redirection Host zal verzoeken van de inkomende domeinnaam doorsturen, en de bezoeker
|
||||
omleiden naar een andere domeinnaam.
|
||||
|
||||
Het gebruik van een Redirection Host is vooral handig wanneer je jouw website verandert
|
||||
maar je nog zoekmachines of referenties naar de oude domeinnaam hebben.
|
||||
6
frontend/src/locale/src/HelpDoc/nl/Streams.md
Normal file
6
frontend/src/locale/src/HelpDoc/nl/Streams.md
Normal file
@@ -0,0 +1,6 @@
|
||||
## Wat is een Stream?
|
||||
|
||||
Streams zijn een nieuwe toevoeging aan Nginx, die toelaat om TCP/UDP
|
||||
verkeer naar een ander computer op het netwerk te sturen.
|
||||
|
||||
Als je game servers, FTP of SSH servers draait kan dit handig zijn.
|
||||
6
frontend/src/locale/src/HelpDoc/nl/index.ts
Normal file
6
frontend/src/locale/src/HelpDoc/nl/index.ts
Normal file
@@ -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";
|
||||
7
frontend/src/locale/src/HelpDoc/ru/AccessLists.md
Normal file
7
frontend/src/locale/src/HelpDoc/ru/AccessLists.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Что такое список доступа?
|
||||
|
||||
Списки доступа позволяют задавать белый/чёрный список IP‑адресов клиентов и настраивать аутентификацию для прокси‑хостов через базовую HTTP‑аутентификацию.
|
||||
|
||||
Для одного списка доступа можно настроить несколько правил клиентов, логины и пароли, а затем применить его к одному или нескольким _прокси‑хостам_.
|
||||
|
||||
Это особенно полезно для проксируемых веб‑сервисов без встроенной аутентификации или когда нужно защититься от неизвестных клиентов.
|
||||
21
frontend/src/locale/src/HelpDoc/ru/Certificates.md
Normal file
21
frontend/src/locale/src/HelpDoc/ru/Certificates.md
Normal file
@@ -0,0 +1,21 @@
|
||||
## Справка по сертификатам
|
||||
|
||||
### HTTP-сертификат
|
||||
|
||||
Сертификат, подтверждённый по HTTP, означает, что серверы Let's Encrypt попытаются обратиться к вашим доменам по HTTP (не HTTPS!) и при успехе выпустят сертификат.
|
||||
|
||||
Для этого метода должен существовать _прокси‑хост_ для ваших доменов, доступный по HTTP и указывающий на эту установку Nginx. После выдачи сертификата вы можете настроить _прокси‑хост_ на использование этого сертификата для HTTPS‑подключений. Однако доступ по HTTP должен сохраняться, чтобы сертификат мог обновляться.
|
||||
|
||||
Этот способ _не_ поддерживает wildcard‑домены.
|
||||
|
||||
### DNS-сертификат
|
||||
|
||||
Сертификат, подтверждённый по DNS, требует использования плагина DNS‑провайдера. Такой провайдер создаст временные записи в вашем домене, затем Let's Encrypt проверит эти записи, чтобы убедиться, что вы владелец домена, и при успехе выпустит сертификат.
|
||||
|
||||
Для запроса такого сертификата предварительно создавать _прокси‑хост_ не требуется. Также не нужен доступ по HTTP для вашего _прокси‑хоста_.
|
||||
|
||||
Этот способ _поддерживает_ wildcard‑домены.
|
||||
|
||||
### Свой сертификат
|
||||
|
||||
Используйте этот вариант, чтобы загрузить собственный SSL‑сертификат, выданный вашим удостоверяющим центром (CA).
|
||||
7
frontend/src/locale/src/HelpDoc/ru/DeadHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/ru/DeadHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Что такое 404‑хост?
|
||||
|
||||
404‑хост — это конфигурация, которая показывает страницу 404.
|
||||
|
||||
Это полезно, когда ваш домен присутствует в поисковых системах и вы хотите показать более дружелюбную страницу ошибки или явно сообщить индексаторам, что страницы домена больше не существуют.
|
||||
|
||||
Ещё одно преимущество — можно отдельно отслеживать обращения в журналах и смотреть источники переходов.
|
||||
7
frontend/src/locale/src/HelpDoc/ru/ProxyHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/ru/ProxyHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Что такое прокси‑хост?
|
||||
|
||||
Прокси‑хост — это входная точка веб‑сервиса, который вы проксируете.
|
||||
|
||||
Он может выполнять терминaцию SSL для сервиса, у которого нет собственной поддержки SSL.
|
||||
|
||||
Прокси‑хосты — самый распространённый сценарий использования Nginx Proxy Manager.
|
||||
5
frontend/src/locale/src/HelpDoc/ru/RedirectionHosts.md
Normal file
5
frontend/src/locale/src/HelpDoc/ru/RedirectionHosts.md
Normal file
@@ -0,0 +1,5 @@
|
||||
## Что такое редирект‑хост?
|
||||
|
||||
Редирект‑хост перенаправляет запросы, поступающие на входящий домен, на другой домен.
|
||||
|
||||
Чаще всего это используют, когда сайт сменил домен, а в поиске или на сторонних ресурсах всё ещё остаются ссылки на старый домен.
|
||||
5
frontend/src/locale/src/HelpDoc/ru/Streams.md
Normal file
5
frontend/src/locale/src/HelpDoc/ru/Streams.md
Normal file
@@ -0,0 +1,5 @@
|
||||
## Что такое поток?
|
||||
|
||||
Относительно новая возможность Nginx: поток позволяет напрямую проксировать TCP/UDP‑трафик на другой компьютер в сети.
|
||||
|
||||
Полезно для игровых серверов, FTP или SSH‑серверов.
|
||||
6
frontend/src/locale/src/HelpDoc/ru/index.ts
Normal file
6
frontend/src/locale/src/HelpDoc/ru/index.ts
Normal file
@@ -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";
|
||||
11
frontend/src/locale/src/HelpDoc/vi/AccessLists.md
Normal file
11
frontend/src/locale/src/HelpDoc/vi/AccessLists.md
Normal file
@@ -0,0 +1,11 @@
|
||||
## Khái niệm Access List là gì?
|
||||
|
||||
Access List (Danh sách truy cập) cung cấp cơ chế chặn (blacklist) hoặc cho phép (whitelist) các địa chỉ IP của client, đồng thời hỗ trợ xác thực Basic HTTP Authentication cho các Proxy Host.
|
||||
|
||||
Bạn có thể cấu hình nhiều quy tắc client, nhiều tên người dùng và mật khẩu trong một Access List duy nhất, sau đó áp dụng Access List đó cho một hoặc nhiều Proxy Host.
|
||||
|
||||
Tính năng này đặc biệt hữu ích đối với:
|
||||
|
||||
các dịch vụ web được forward mà không có cơ chế xác thực tích hợp, hoặc
|
||||
|
||||
khi bạn muốn bảo vệ tài nguyên khỏi những client không xác định.
|
||||
25
frontend/src/locale/src/HelpDoc/vi/Certificates.md
Normal file
25
frontend/src/locale/src/HelpDoc/vi/Certificates.md
Normal file
@@ -0,0 +1,25 @@
|
||||
## Hỗ trợ Chứng chỉ
|
||||
|
||||
### Chứng chỉ HTTP (HTTP Certificate)
|
||||
|
||||
Chứng chỉ được xác thực qua HTTP nghĩa là máy chủ của Let's Encrypt sẽ cố gắng truy cập vào tên miền của bạn thông qua HTTP (không phải HTTPS!). Nếu kiểm tra thành công, chứng chỉ sẽ được cấp.
|
||||
|
||||
Với phương thức này, bạn phải tạo trước một Proxy Host cho tên miền, có thể truy cập qua HTTP và trỏ về đúng cài đặt Nginx này.
|
||||
Sau khi chứng chỉ được cấp, bạn có thể chỉnh sửa Proxy Host để sử dụng chứng chỉ đó cho kết nối HTTPS.
|
||||
|
||||
Tuy nhiên, Proxy Host vẫn phải hỗ trợ truy cập HTTP để việc gia hạn chứng chỉ diễn ra bình thường.
|
||||
|
||||
Phương thức này _không hỗ trợ_ wildcard domain.
|
||||
|
||||
### Chứng chỉ DNS (DNS Certificate)
|
||||
|
||||
Chứng chỉ được xác thực qua DNS yêu cầu bạn sử dụng plugin của DNS Provider.
|
||||
Plugin này sẽ tạo các bản ghi tạm thời trong DNS của bạn để Let's Encrypt kiểm tra quyền sở hữu tên miền. Nếu hợp lệ, chứng chỉ sẽ được cấp.
|
||||
|
||||
Khi dùng phương thức này: Bạn không cần tạo sẵn Proxy Host trước và bạn không cần mở HTTP cho Proxy Host.
|
||||
|
||||
Phương thức DNS _có hỗ trợ_ wildcard domain.
|
||||
|
||||
### Chứng chỉ tùy chỉnh (Custom Certificate)
|
||||
|
||||
Tùy chọn này cho phép bạn tải lên chứng chỉ SSL của riêng mình, được cung cấp bởi Certificate Authority (CA) mà bạn tự chọn.
|
||||
8
frontend/src/locale/src/HelpDoc/vi/DeadHosts.md
Normal file
8
frontend/src/locale/src/HelpDoc/vi/DeadHosts.md
Normal file
@@ -0,0 +1,8 @@
|
||||
## 404 Host là gì?
|
||||
|
||||
404 Host đơn giản là một host được thiết lập để hiển thị trang 404.
|
||||
|
||||
Điều này có thể hữu ích khi tên miền của bạn vẫn xuất hiện trên các công cụ tìm kiếm và bạn muốn hiển thị một trang lỗi đẹp hơn, hoặc muốn thông báo rõ ràng cho các trình thu thập dữ liệu tìm kiếm rằng các trang thuộc tên miền đó không còn tồn tại.
|
||||
|
||||
Một lợi ích khác của việc có 404 Host là bạn có thể theo dõi nhật ký truy cập vào nó và
|
||||
xem các nguồn giới thiệu (referrers).
|
||||
7
frontend/src/locale/src/HelpDoc/vi/ProxyHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/vi/ProxyHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Proxy Host là gì?
|
||||
|
||||
Proxy Host là điểm truy cập đầu vào cho một dịch vụ web mà bạn muốn chuyển tiếp.
|
||||
|
||||
Nó cung cấp khả năng kết thúc SSL (SSL termination) tùy chọn cho các dịch vụ vốn không hỗ trợ SSL tích hợp.
|
||||
|
||||
Proxy Host là loại cấu hình phổ biến nhất trong Nginx Proxy Manager.
|
||||
5
frontend/src/locale/src/HelpDoc/vi/RedirectionHosts.md
Normal file
5
frontend/src/locale/src/HelpDoc/vi/RedirectionHosts.md
Normal file
@@ -0,0 +1,5 @@
|
||||
## Redirection Host là gì?
|
||||
|
||||
Redirection Host sẽ chuyển hướng các yêu cầu từ tên miền truy cập vào và đưa người xem sang một tên miền khác
|
||||
|
||||
Lý do phổ biến nhất để sử dụng loại host này là khi trang web của bạn đổi sang tên miền mới nhưng vẫn còn các liên kết từ công cụ tìm kiếm hoặc nguồn giới thiệu trỏ về tên miền cũ.
|
||||
6
frontend/src/locale/src/HelpDoc/vi/Streams.md
Normal file
6
frontend/src/locale/src/HelpDoc/vi/Streams.md
Normal file
@@ -0,0 +1,6 @@
|
||||
## Stream là gì?
|
||||
|
||||
Stream là một tính năng tương đối mới của Nginx, dùng để chuyển tiếp lưu lượng
|
||||
TCP/UDP trực tiếp tới một máy khác trong mạng.
|
||||
|
||||
Nếu bạn đang vận hành các máy chủ game, FTP hoặc SSH thì tính năng này sẽ rất hữu ích.
|
||||
6
frontend/src/locale/src/HelpDoc/vi/index.ts
Normal file
6
frontend/src/locale/src/HelpDoc/vi/index.ts
Normal file
@@ -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";
|
||||
@@ -23,6 +23,9 @@
|
||||
"access-list.public.subtitle": {
|
||||
"defaultMessage": "No basic auth required"
|
||||
},
|
||||
"access-list.rule-source.placeholder": {
|
||||
"defaultMessage": "192.168.1.100 or 192.168.1.0/24 or 2001:0db8::/32"
|
||||
},
|
||||
"access-list.satisfy-any": {
|
||||
"defaultMessage": "Satisfy Any"
|
||||
},
|
||||
@@ -38,12 +41,18 @@
|
||||
"action.add-location": {
|
||||
"defaultMessage": "Add Location"
|
||||
},
|
||||
"action.allow": {
|
||||
"defaultMessage": "Allow"
|
||||
},
|
||||
"action.close": {
|
||||
"defaultMessage": "Close"
|
||||
},
|
||||
"action.delete": {
|
||||
"defaultMessage": "Delete"
|
||||
},
|
||||
"action.deny": {
|
||||
"defaultMessage": "Deny"
|
||||
},
|
||||
"action.disable": {
|
||||
"defaultMessage": "Disable"
|
||||
},
|
||||
@@ -68,6 +77,9 @@
|
||||
"auditlogs": {
|
||||
"defaultMessage": "Audit Logs"
|
||||
},
|
||||
"auto": {
|
||||
"defaultMessage": "Auto"
|
||||
},
|
||||
"cancel": {
|
||||
"defaultMessage": "Cancel"
|
||||
},
|
||||
@@ -128,6 +140,9 @@
|
||||
"certificates.dns.provider": {
|
||||
"defaultMessage": "DNS Provider"
|
||||
},
|
||||
"certificates.dns.provider.placeholder": {
|
||||
"defaultMessage": "Select a Provider..."
|
||||
},
|
||||
"certificates.dns.warning": {
|
||||
"defaultMessage": "This section requires some knowledge about Certbot and its DNS plugins. Please consult the respective plugins documentation."
|
||||
},
|
||||
@@ -518,6 +533,24 @@
|
||||
"redirection-hosts.count": {
|
||||
"defaultMessage": "{count} {count, plural, one {Redirection Host} other {Redirection Hosts}}"
|
||||
},
|
||||
"redirection-hosts.http-code.300": {
|
||||
"defaultMessage": "300 Multiple Choices"
|
||||
},
|
||||
"redirection-hosts.http-code.301": {
|
||||
"defaultMessage": "301 Moved permanently"
|
||||
},
|
||||
"redirection-hosts.http-code.302": {
|
||||
"defaultMessage": "302 Moved temporarily"
|
||||
},
|
||||
"redirection-hosts.http-code.303": {
|
||||
"defaultMessage": "303 See other"
|
||||
},
|
||||
"redirection-hosts.http-code.307": {
|
||||
"defaultMessage": "307 Temporary redirect"
|
||||
},
|
||||
"redirection-hosts.http-code.308": {
|
||||
"defaultMessage": "308 Permanent redirect"
|
||||
},
|
||||
"role.admin": {
|
||||
"defaultMessage": "Administrator"
|
||||
},
|
||||
@@ -575,6 +608,9 @@
|
||||
"stream.forward-host": {
|
||||
"defaultMessage": "Forward Host"
|
||||
},
|
||||
"stream.forward-host.placeholder": {
|
||||
"defaultMessage": "example.com or 10.0.0.1 or 2001:db8:3333:4444:5555:6666:7777:8888"
|
||||
},
|
||||
"stream.incoming-port": {
|
||||
"defaultMessage": "Incoming Port"
|
||||
},
|
||||
@@ -593,6 +629,9 @@
|
||||
"test": {
|
||||
"defaultMessage": "Test"
|
||||
},
|
||||
"update-available": {
|
||||
"defaultMessage": "Update Available: {latestVersion}"
|
||||
},
|
||||
"user": {
|
||||
"defaultMessage": "User"
|
||||
},
|
||||
|
||||
@@ -23,6 +23,9 @@
|
||||
"access-list.public.subtitle": {
|
||||
"defaultMessage": "No se requiere autenticación básica"
|
||||
},
|
||||
"access-list.rule-source.placeholder": {
|
||||
"defaultMessage": "192.168.1.100 o 192.168.1.0/24 o 2001:0db8::/32"
|
||||
},
|
||||
"access-list.satisfy-any": {
|
||||
"defaultMessage": "Satisfacer Cualquiera"
|
||||
},
|
||||
@@ -38,12 +41,18 @@
|
||||
"action.add-location": {
|
||||
"defaultMessage": "Añadir Ubicación"
|
||||
},
|
||||
"action.allow": {
|
||||
"defaultMessage": "Permitir"
|
||||
},
|
||||
"action.close": {
|
||||
"defaultMessage": "Cerrar"
|
||||
},
|
||||
"action.delete": {
|
||||
"defaultMessage": "Eliminar"
|
||||
},
|
||||
"action.deny": {
|
||||
"defaultMessage": "Denegar"
|
||||
},
|
||||
"action.disable": {
|
||||
"defaultMessage": "Deshabilitar"
|
||||
},
|
||||
@@ -68,6 +77,9 @@
|
||||
"auditlogs": {
|
||||
"defaultMessage": "Registros de Auditoría"
|
||||
},
|
||||
"auto": {
|
||||
"defaultMessage": "Auto"
|
||||
},
|
||||
"cancel": {
|
||||
"defaultMessage": "Cancelar"
|
||||
},
|
||||
@@ -128,6 +140,9 @@
|
||||
"certificates.dns.provider": {
|
||||
"defaultMessage": "Proveedor DNS"
|
||||
},
|
||||
"certificates.dns.provider.placeholder": {
|
||||
"defaultMessage": "Selecciona un Proveedor..."
|
||||
},
|
||||
"certificates.dns.warning": {
|
||||
"defaultMessage": "Esta sección requiere algunos conocimientos sobre Certbot y sus plugins DNS. Consulta la documentación de los plugins respectivos."
|
||||
},
|
||||
@@ -348,7 +363,7 @@
|
||||
"defaultMessage": "Soporte de Websockets"
|
||||
},
|
||||
"host.forward-port": {
|
||||
"defaultMessage": "Puerto de Reenvío"
|
||||
"defaultMessage": "Puerto"
|
||||
},
|
||||
"host.forward-scheme": {
|
||||
"defaultMessage": "Esquema"
|
||||
@@ -518,6 +533,24 @@
|
||||
"redirection-hosts.count": {
|
||||
"defaultMessage": "{count} {count, plural, one {Host de Redirección} other {Hosts de Redirección}}"
|
||||
},
|
||||
"redirection-hosts.http-code.300": {
|
||||
"defaultMessage": "300 Multiples Opciones"
|
||||
},
|
||||
"redirection-hosts.http-code.301": {
|
||||
"defaultMessage": "301 Movido permanentemente"
|
||||
},
|
||||
"redirection-hosts.http-code.302": {
|
||||
"defaultMessage": "302 Movido temporalmente"
|
||||
},
|
||||
"redirection-hosts.http-code.303": {
|
||||
"defaultMessage": "303 Ver otro"
|
||||
},
|
||||
"redirection-hosts.http-code.307": {
|
||||
"defaultMessage": "307 Redirección temporal"
|
||||
},
|
||||
"redirection-hosts.http-code.308": {
|
||||
"defaultMessage": "308 Redirección permanente"
|
||||
},
|
||||
"role.admin": {
|
||||
"defaultMessage": "Administrador"
|
||||
},
|
||||
@@ -575,6 +608,9 @@
|
||||
"stream.forward-host": {
|
||||
"defaultMessage": "Host de Reenvío"
|
||||
},
|
||||
"stream.forward-host.placeholder": {
|
||||
"defaultMessage": "example.com o 10.0.0.1 o 2001:db8:3333:4444:5555:6666:7777:8888"
|
||||
},
|
||||
"stream.incoming-port": {
|
||||
"defaultMessage": "Puerto de Entrada"
|
||||
},
|
||||
|
||||
647
frontend/src/locale/src/it.json
Normal file
647
frontend/src/locale/src/it.json
Normal file
@@ -0,0 +1,647 @@
|
||||
{
|
||||
"access-list": {
|
||||
"defaultMessage": "Lista di Accesso"
|
||||
},
|
||||
"access-list.access-count": {
|
||||
"defaultMessage": "{count} {count, plural, one {Regola} other {Regole}}"
|
||||
},
|
||||
"access-list.auth-count": {
|
||||
"defaultMessage": "{count} {count, plural, one {Utente} other {Utenti}}"
|
||||
},
|
||||
"access-list.help-rules-last": {
|
||||
"defaultMessage": "Quando esiste almeno 1 regola, questa regola di negazione verrà aggiunta per ultima"
|
||||
},
|
||||
"access-list.help.rules-order": {
|
||||
"defaultMessage": "Nota che le direttive di allow e deny saranno applicate nell'ordine in cui sono definite."
|
||||
},
|
||||
"access-list.pass-auth": {
|
||||
"defaultMessage": "Passa Autenticazione all'Upstream"
|
||||
},
|
||||
"access-list.public": {
|
||||
"defaultMessage": "Accessibile Pubblicamente"
|
||||
},
|
||||
"access-list.public.subtitle": {
|
||||
"defaultMessage": "Nessuna autenticazione base richiesta"
|
||||
},
|
||||
"access-list.satisfy-any": {
|
||||
"defaultMessage": "Soddisfa Qualsiasi"
|
||||
},
|
||||
"access-list.subtitle": {
|
||||
"defaultMessage": "{users} {users, plural, one {Utente} other {Utenti}}, {rules} {rules, plural, one {Regola} other {Regole}} - Creato: {date}"
|
||||
},
|
||||
"access-lists": {
|
||||
"defaultMessage": "Liste di Accesso"
|
||||
},
|
||||
"action.add": {
|
||||
"defaultMessage": "Aggiungi"
|
||||
},
|
||||
"action.add-location": {
|
||||
"defaultMessage": "Aggiungi Percorso"
|
||||
},
|
||||
"action.close": {
|
||||
"defaultMessage": "Chiudi"
|
||||
},
|
||||
"action.delete": {
|
||||
"defaultMessage": "Elimina"
|
||||
},
|
||||
"action.disable": {
|
||||
"defaultMessage": "Disabilita"
|
||||
},
|
||||
"action.download": {
|
||||
"defaultMessage": "Scarica"
|
||||
},
|
||||
"action.edit": {
|
||||
"defaultMessage": "Modifica"
|
||||
},
|
||||
"action.enable": {
|
||||
"defaultMessage": "Abilita"
|
||||
},
|
||||
"action.permissions": {
|
||||
"defaultMessage": "Permessi"
|
||||
},
|
||||
"action.renew": {
|
||||
"defaultMessage": "Rinnova"
|
||||
},
|
||||
"action.view-details": {
|
||||
"defaultMessage": "Visualizza Dettagli"
|
||||
},
|
||||
"auditlogs": {
|
||||
"defaultMessage": "Log di Audit"
|
||||
},
|
||||
"cancel": {
|
||||
"defaultMessage": "Annulla"
|
||||
},
|
||||
"certificate": {
|
||||
"defaultMessage": "Certificato"
|
||||
},
|
||||
"certificate.custom-certificate": {
|
||||
"defaultMessage": "Certificato"
|
||||
},
|
||||
"certificate.custom-certificate-key": {
|
||||
"defaultMessage": "Chiave del Certificato"
|
||||
},
|
||||
"certificate.custom-intermediate": {
|
||||
"defaultMessage": "Certificato Intermedio"
|
||||
},
|
||||
"certificate.in-use": {
|
||||
"defaultMessage": "In Uso"
|
||||
},
|
||||
"certificate.none.subtitle": {
|
||||
"defaultMessage": "Nessun certificato assegnato"
|
||||
},
|
||||
"certificate.none.subtitle.for-http": {
|
||||
"defaultMessage": "Questo host non utilizzerà HTTPS"
|
||||
},
|
||||
"certificate.none.title": {
|
||||
"defaultMessage": "Nessuno"
|
||||
},
|
||||
"certificate.not-in-use": {
|
||||
"defaultMessage": "Non in Uso"
|
||||
},
|
||||
"certificate.renew": {
|
||||
"defaultMessage": "Rinnova Certificato"
|
||||
},
|
||||
"certificates": {
|
||||
"defaultMessage": "Certificati"
|
||||
},
|
||||
"certificates.custom": {
|
||||
"defaultMessage": "Certificato Personalizzato"
|
||||
},
|
||||
"certificates.custom.warning": {
|
||||
"defaultMessage": "I file di chiave protetti da passphrase non sono supportati."
|
||||
},
|
||||
"certificates.dns.credentials": {
|
||||
"defaultMessage": "Contenuto File Credenziali"
|
||||
},
|
||||
"certificates.dns.credentials-note": {
|
||||
"defaultMessage": "Questo plugin richiede un file di configurazione contenente un token API o altre credenziali per il tuo provider"
|
||||
},
|
||||
"certificates.dns.credentials-warning": {
|
||||
"defaultMessage": "Questi dati saranno memorizzati in chiaro nel database e in un file!"
|
||||
},
|
||||
"certificates.dns.propagation-seconds": {
|
||||
"defaultMessage": "Secondi di Propagazione"
|
||||
},
|
||||
"certificates.dns.propagation-seconds-note": {
|
||||
"defaultMessage": "Lascia vuoto per usare il valore predefinito del plugin. Numero di secondi da attendere per la propagazione DNS."
|
||||
},
|
||||
"certificates.dns.provider": {
|
||||
"defaultMessage": "Provider DNS"
|
||||
},
|
||||
"certificates.dns.warning": {
|
||||
"defaultMessage": "Questa sezione richiede conoscenze su Certbot e i relativi plugin DNS. Consulta la documentazione del plugin."
|
||||
},
|
||||
"certificates.http.reachability-404": {
|
||||
"defaultMessage": "È stato trovato un server su questo dominio, ma non sembra essere Nginx Proxy Manager. Assicurati che il dominio punti all'IP dove è in esecuzione NPM."
|
||||
},
|
||||
"certificates.http.reachability-failed-to-check": {
|
||||
"defaultMessage": "Verifica di raggiungibilità fallita per errore di comunicazione con site24x7.com."
|
||||
},
|
||||
"certificates.http.reachability-not-resolved": {
|
||||
"defaultMessage": "Nessun server disponibile su questo dominio. Assicurati che il dominio esista e punti all'IP corretto e che la porta 80 sia inoltrata."
|
||||
},
|
||||
"certificates.http.reachability-ok": {
|
||||
"defaultMessage": "Il server è raggiungibile e la creazione dei certificati è possibile."
|
||||
},
|
||||
"certificates.http.reachability-other": {
|
||||
"defaultMessage": "È stato trovato un server su questo dominio ma ha restituito un codice di stato imprevisto {code}. È il server NPM? Controlla che il dominio punti correttamente all'IP."
|
||||
},
|
||||
"certificates.http.reachability-wrong-data": {
|
||||
"defaultMessage": "È stato trovato un server su questo dominio ma ha restituito dati imprevisti. È il server NPM? Controlla che il dominio punti correttamente all'IP."
|
||||
},
|
||||
"certificates.http.test-results": {
|
||||
"defaultMessage": "Risultati Test"
|
||||
},
|
||||
"certificates.http.warning": {
|
||||
"defaultMessage": "Questi domini devono già essere configurati per puntare a questa installazione."
|
||||
},
|
||||
"certificates.request.subtitle": {
|
||||
"defaultMessage": "con Let's Encrypt"
|
||||
},
|
||||
"certificates.request.title": {
|
||||
"defaultMessage": "Richiedi un nuovo Certificato"
|
||||
},
|
||||
"column.access": {
|
||||
"defaultMessage": "Accesso"
|
||||
},
|
||||
"column.authorization": {
|
||||
"defaultMessage": "Autorizzazione"
|
||||
},
|
||||
"column.authorizations": {
|
||||
"defaultMessage": "Autorizzazioni"
|
||||
},
|
||||
"column.custom-locations": {
|
||||
"defaultMessage": "Percorsi Personalizzati"
|
||||
},
|
||||
"column.destination": {
|
||||
"defaultMessage": "Destinazione"
|
||||
},
|
||||
"column.details": {
|
||||
"defaultMessage": "Dettagli"
|
||||
},
|
||||
"column.email": {
|
||||
"defaultMessage": "Email"
|
||||
},
|
||||
"column.event": {
|
||||
"defaultMessage": "Evento"
|
||||
},
|
||||
"column.expires": {
|
||||
"defaultMessage": "Scadenza"
|
||||
},
|
||||
"column.http-code": {
|
||||
"defaultMessage": "Codice HTTP"
|
||||
},
|
||||
"column.incoming-port": {
|
||||
"defaultMessage": "Porta in Ingresso"
|
||||
},
|
||||
"column.name": {
|
||||
"defaultMessage": "Nome"
|
||||
},
|
||||
"column.protocol": {
|
||||
"defaultMessage": "Protocollo"
|
||||
},
|
||||
"column.provider": {
|
||||
"defaultMessage": "Provider"
|
||||
},
|
||||
"column.roles": {
|
||||
"defaultMessage": "Ruoli"
|
||||
},
|
||||
"column.rules": {
|
||||
"defaultMessage": "Regole"
|
||||
},
|
||||
"column.satisfy": {
|
||||
"defaultMessage": "Condizione"
|
||||
},
|
||||
"column.satisfy-all": {
|
||||
"defaultMessage": "Tutte"
|
||||
},
|
||||
"column.satisfy-any": {
|
||||
"defaultMessage": "Qualsiasi"
|
||||
},
|
||||
"column.scheme": {
|
||||
"defaultMessage": "Schema"
|
||||
},
|
||||
"column.source": {
|
||||
"defaultMessage": "Origine"
|
||||
},
|
||||
"column.ssl": {
|
||||
"defaultMessage": "SSL"
|
||||
},
|
||||
"column.status": {
|
||||
"defaultMessage": "Stato"
|
||||
},
|
||||
"created-on": {
|
||||
"defaultMessage": "Creato: {date}"
|
||||
},
|
||||
"dashboard": {
|
||||
"defaultMessage": "Dashboard"
|
||||
},
|
||||
"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": "Disabilitato"
|
||||
},
|
||||
"domain-names": {
|
||||
"defaultMessage": "Nomi di Dominio"
|
||||
},
|
||||
"domain-names.max": {
|
||||
"defaultMessage": "Massimo {count} nomi di dominio"
|
||||
},
|
||||
"domain-names.placeholder": {
|
||||
"defaultMessage": "Inizia a digitare per aggiungere un dominio..."
|
||||
},
|
||||
"domain-names.wildcards-not-permitted": {
|
||||
"defaultMessage": "Wildcard non consentite per questo tipo"
|
||||
},
|
||||
"domain-names.wildcards-not-supported": {
|
||||
"defaultMessage": "Wildcard non supportate per questa CA"
|
||||
},
|
||||
"domains.force-ssl": {
|
||||
"defaultMessage": "Forza SSL"
|
||||
},
|
||||
"domains.hsts-enabled": {
|
||||
"defaultMessage": "HSTS Abilitato"
|
||||
},
|
||||
"domains.hsts-subdomains": {
|
||||
"defaultMessage": "Sottodomini HSTS"
|
||||
},
|
||||
"domains.http2-support": {
|
||||
"defaultMessage": "Supporto HTTP/2"
|
||||
},
|
||||
"domains.use-dns": {
|
||||
"defaultMessage": "Usa Challenge DNS"
|
||||
},
|
||||
"email-address": {
|
||||
"defaultMessage": "Indirizzo Email"
|
||||
},
|
||||
"empty-search": {
|
||||
"defaultMessage": "Nessun risultato trovato"
|
||||
},
|
||||
"empty-subtitle": {
|
||||
"defaultMessage": "Perché non ne crei uno?"
|
||||
},
|
||||
"enabled": {
|
||||
"defaultMessage": "Abilitato"
|
||||
},
|
||||
"error.access.at-least-one": {
|
||||
"defaultMessage": "È richiesta almeno un'Autorizzazione o una Regola di Accesso"
|
||||
},
|
||||
"error.access.duplicate-usernames": {
|
||||
"defaultMessage": "I nomi utente devono essere unici"
|
||||
},
|
||||
"error.invalid-auth": {
|
||||
"defaultMessage": "Email o password non validi"
|
||||
},
|
||||
"error.invalid-domain": {
|
||||
"defaultMessage": "Dominio non valido: {domain}"
|
||||
},
|
||||
"error.invalid-email": {
|
||||
"defaultMessage": "Indirizzo email non valido"
|
||||
},
|
||||
"error.max-character-length": {
|
||||
"defaultMessage": "Lunghezza massima {max} caratter{max, plural, one {e} other {i}}"
|
||||
},
|
||||
"error.max-domains": {
|
||||
"defaultMessage": "Troppi domini, massimo {max}"
|
||||
},
|
||||
"error.maximum": {
|
||||
"defaultMessage": "Massimo {max}"
|
||||
},
|
||||
"error.min-character-length": {
|
||||
"defaultMessage": "Lunghezza minima {min} caratter{min, plural, one {e} other {i}}"
|
||||
},
|
||||
"error.minimum": {
|
||||
"defaultMessage": "Minimo {min}"
|
||||
},
|
||||
"error.passwords-must-match": {
|
||||
"defaultMessage": "Le password devono coincidere"
|
||||
},
|
||||
"error.required": {
|
||||
"defaultMessage": "Campo obbligatorio"
|
||||
},
|
||||
"expires.on": {
|
||||
"defaultMessage": "Scade: {date}"
|
||||
},
|
||||
"footer.github-fork": {
|
||||
"defaultMessage": "Forkami su GitHub"
|
||||
},
|
||||
"host.flags.block-exploits": {
|
||||
"defaultMessage": "Blocca Exploit Comuni"
|
||||
},
|
||||
"host.flags.cache-assets": {
|
||||
"defaultMessage": "Cache degli Asset"
|
||||
},
|
||||
"host.flags.preserve-path": {
|
||||
"defaultMessage": "Preserva Percorso"
|
||||
},
|
||||
"host.flags.protocols": {
|
||||
"defaultMessage": "Protocolli"
|
||||
},
|
||||
"host.flags.websockets-upgrade": {
|
||||
"defaultMessage": "Supporto WebSockets"
|
||||
},
|
||||
"host.forward-port": {
|
||||
"defaultMessage": "Porta di Destinazione"
|
||||
},
|
||||
"host.forward-scheme": {
|
||||
"defaultMessage": "Schema"
|
||||
},
|
||||
"hosts": {
|
||||
"defaultMessage": "Host"
|
||||
},
|
||||
"http-only": {
|
||||
"defaultMessage": "Solo HTTP"
|
||||
},
|
||||
"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": "Caricamento…"
|
||||
},
|
||||
"login.title": {
|
||||
"defaultMessage": "Accedi al tuo account"
|
||||
},
|
||||
"nginx-config.label": {
|
||||
"defaultMessage": "Configurazione Nginx Personalizzata"
|
||||
},
|
||||
"nginx-config.placeholder": {
|
||||
"defaultMessage": "# Inserisci qui la configurazione Nginx personalizzata a tuo rischio!"
|
||||
},
|
||||
"no-permission-error": {
|
||||
"defaultMessage": "Non hai accesso per visualizzare questa pagina."
|
||||
},
|
||||
"notfound.action": {
|
||||
"defaultMessage": "Torna alla Home"
|
||||
},
|
||||
"notfound.content": {
|
||||
"defaultMessage": "Spiacenti, la pagina richiesta non è stata trovata"
|
||||
},
|
||||
"notfound.title": {
|
||||
"defaultMessage": "Oops… Hai trovato una pagina di errore"
|
||||
},
|
||||
"notification.error": {
|
||||
"defaultMessage": "Errore"
|
||||
},
|
||||
"notification.object-deleted": {
|
||||
"defaultMessage": "{object} è stato eliminato"
|
||||
},
|
||||
"notification.object-disabled": {
|
||||
"defaultMessage": "{object} è stato disabilitato"
|
||||
},
|
||||
"notification.object-enabled": {
|
||||
"defaultMessage": "{object} è stato abilitato"
|
||||
},
|
||||
"notification.object-renewed": {
|
||||
"defaultMessage": "{object} è stato rinnovato"
|
||||
},
|
||||
"notification.object-saved": {
|
||||
"defaultMessage": "{object} è stato salvato"
|
||||
},
|
||||
"notification.success": {
|
||||
"defaultMessage": "Successo"
|
||||
},
|
||||
"object.actions-title": {
|
||||
"defaultMessage": "{object} #{id}"
|
||||
},
|
||||
"object.add": {
|
||||
"defaultMessage": "Aggiungi {object}"
|
||||
},
|
||||
"object.delete": {
|
||||
"defaultMessage": "Elimina {object}"
|
||||
},
|
||||
"object.delete.content": {
|
||||
"defaultMessage": "Sei sicuro di voler eliminare questo {object}?"
|
||||
},
|
||||
"object.edit": {
|
||||
"defaultMessage": "Modifica {object}"
|
||||
},
|
||||
"object.empty": {
|
||||
"defaultMessage": "Nessun {objects} presente"
|
||||
},
|
||||
"object.event.created": {
|
||||
"defaultMessage": "{object} creato"
|
||||
},
|
||||
"object.event.deleted": {
|
||||
"defaultMessage": "{object} eliminato"
|
||||
},
|
||||
"object.event.disabled": {
|
||||
"defaultMessage": "{object} disabilitato"
|
||||
},
|
||||
"object.event.enabled": {
|
||||
"defaultMessage": "{object} abilitato"
|
||||
},
|
||||
"object.event.renewed": {
|
||||
"defaultMessage": "{object} rinnovato"
|
||||
},
|
||||
"object.event.updated": {
|
||||
"defaultMessage": "{object} aggiornato"
|
||||
},
|
||||
"offline": {
|
||||
"defaultMessage": "Offline"
|
||||
},
|
||||
"online": {
|
||||
"defaultMessage": "Online"
|
||||
},
|
||||
"options": {
|
||||
"defaultMessage": "Opzioni"
|
||||
},
|
||||
"password": {
|
||||
"defaultMessage": "Password"
|
||||
},
|
||||
"password.generate": {
|
||||
"defaultMessage": "Genera password casuale"
|
||||
},
|
||||
"password.hide": {
|
||||
"defaultMessage": "Nascondi Password"
|
||||
},
|
||||
"password.show": {
|
||||
"defaultMessage": "Mostra Password"
|
||||
},
|
||||
"permissions.hidden": {
|
||||
"defaultMessage": "Nascosto"
|
||||
},
|
||||
"permissions.manage": {
|
||||
"defaultMessage": "Gestisci"
|
||||
},
|
||||
"permissions.view": {
|
||||
"defaultMessage": "Sola Lettura"
|
||||
},
|
||||
"permissions.visibility.all": {
|
||||
"defaultMessage": "Tutti gli Elementi"
|
||||
},
|
||||
"permissions.visibility.title": {
|
||||
"defaultMessage": "Visibilità Elementi"
|
||||
},
|
||||
"permissions.visibility.user": {
|
||||
"defaultMessage": "Solo Elementi Creati"
|
||||
},
|
||||
"proxy-host": {
|
||||
"defaultMessage": "Proxy Host"
|
||||
},
|
||||
"proxy-host.forward-host": {
|
||||
"defaultMessage": "Hostname / IP di Destinazione"
|
||||
},
|
||||
"proxy-hosts": {
|
||||
"defaultMessage": "Proxy Hosts"
|
||||
},
|
||||
"proxy-hosts.count": {
|
||||
"defaultMessage": "{count} {count, plural, one {Host Proxy} other {Host Proxy}}"
|
||||
},
|
||||
"public": {
|
||||
"defaultMessage": "Pubblico"
|
||||
},
|
||||
"redirection-host": {
|
||||
"defaultMessage": "Host di Reindirizzamento"
|
||||
},
|
||||
"redirection-host.forward-domain": {
|
||||
"defaultMessage": "Dominio di Destinazione"
|
||||
},
|
||||
"redirection-host.forward-http-code": {
|
||||
"defaultMessage": "Codice HTTP"
|
||||
},
|
||||
"redirection-hosts": {
|
||||
"defaultMessage": "Host di Reindirizzamento"
|
||||
},
|
||||
"redirection-hosts.count": {
|
||||
"defaultMessage": "{count} {count, plural, one {Host di Reindirizzamento} other {Host di Reindirizzamento}}"
|
||||
},
|
||||
"role.admin": {
|
||||
"defaultMessage": "Amministratore"
|
||||
},
|
||||
"role.standard-user": {
|
||||
"defaultMessage": "Utente Standard"
|
||||
},
|
||||
"save": {
|
||||
"defaultMessage": "Salva"
|
||||
},
|
||||
"setting": {
|
||||
"defaultMessage": "Impostazione"
|
||||
},
|
||||
"settings": {
|
||||
"defaultMessage": "Impostazioni"
|
||||
},
|
||||
"settings.default-site": {
|
||||
"defaultMessage": "Sito Predefinito"
|
||||
},
|
||||
"settings.default-site.404": {
|
||||
"defaultMessage": "Pagina 404"
|
||||
},
|
||||
"settings.default-site.444": {
|
||||
"defaultMessage": "Nessuna Risposta (444)"
|
||||
},
|
||||
"settings.default-site.congratulations": {
|
||||
"defaultMessage": "Pagina di Congratulazioni"
|
||||
},
|
||||
"settings.default-site.description": {
|
||||
"defaultMessage": "Cosa mostrare quando Nginx riceve una richiesta da un host sconosciuto"
|
||||
},
|
||||
"settings.default-site.html": {
|
||||
"defaultMessage": "HTML Personalizzato"
|
||||
},
|
||||
"settings.default-site.html.placeholder": {
|
||||
"defaultMessage": "<!-- Inserisci qui il tuo contenuto HTML personalizzato -->"
|
||||
},
|
||||
"settings.default-site.redirect": {
|
||||
"defaultMessage": "Reindirizza"
|
||||
},
|
||||
"setup.preamble": {
|
||||
"defaultMessage": "Inizia creando il tuo account amministratore."
|
||||
},
|
||||
"setup.title": {
|
||||
"defaultMessage": "Benvenuto!"
|
||||
},
|
||||
"sign-in": {
|
||||
"defaultMessage": "Accedi"
|
||||
},
|
||||
"ssl-certificate": {
|
||||
"defaultMessage": "Certificato SSL"
|
||||
},
|
||||
"stream": {
|
||||
"defaultMessage": "Stream"
|
||||
},
|
||||
"stream.forward-host": {
|
||||
"defaultMessage": "Host di Destinazione"
|
||||
},
|
||||
"stream.incoming-port": {
|
||||
"defaultMessage": "Porta in Ingresso"
|
||||
},
|
||||
"streams": {
|
||||
"defaultMessage": "Stream"
|
||||
},
|
||||
"streams.count": {
|
||||
"defaultMessage": "{count} {count, plural, one {Stream} other {Stream}}"
|
||||
},
|
||||
"streams.tcp": {
|
||||
"defaultMessage": "TCP"
|
||||
},
|
||||
"streams.udp": {
|
||||
"defaultMessage": "UDP"
|
||||
},
|
||||
"test": {
|
||||
"defaultMessage": "Test"
|
||||
},
|
||||
"update-available": {
|
||||
"defaultMessage": "Aggiornamento Disponibile: {latestVersion}"
|
||||
},
|
||||
"user": {
|
||||
"defaultMessage": "Utente"
|
||||
},
|
||||
"user.change-password": {
|
||||
"defaultMessage": "Cambia Password"
|
||||
},
|
||||
"user.confirm-password": {
|
||||
"defaultMessage": "Conferma Password"
|
||||
},
|
||||
"user.current-password": {
|
||||
"defaultMessage": "Password Attuale"
|
||||
},
|
||||
"user.edit-profile": {
|
||||
"defaultMessage": "Modifica Profilo"
|
||||
},
|
||||
"user.full-name": {
|
||||
"defaultMessage": "Nome Completo"
|
||||
},
|
||||
"user.login-as": {
|
||||
"defaultMessage": "Accedi come {name}"
|
||||
},
|
||||
"user.logout": {
|
||||
"defaultMessage": "Disconnetti"
|
||||
},
|
||||
"user.new-password": {
|
||||
"defaultMessage": "Nuova Password"
|
||||
},
|
||||
"user.nickname": {
|
||||
"defaultMessage": "Soprannome"
|
||||
},
|
||||
"user.set-password": {
|
||||
"defaultMessage": "Imposta Password"
|
||||
},
|
||||
"user.set-permissions": {
|
||||
"defaultMessage": "Imposta Permessi per {name}"
|
||||
},
|
||||
"user.switch-dark": {
|
||||
"defaultMessage": "Passa alla modalità Scura"
|
||||
},
|
||||
"user.switch-light": {
|
||||
"defaultMessage": "Passa alla modalità Chiara"
|
||||
},
|
||||
"username": {
|
||||
"defaultMessage": "Nome Utente"
|
||||
},
|
||||
"users": {
|
||||
"defaultMessage": "Utenti"
|
||||
}
|
||||
}
|
||||
@@ -15,12 +15,21 @@
|
||||
"defaultMessage": "Русский"
|
||||
},
|
||||
"locale-sk-SK": {
|
||||
"defaultMessage": "Slovak"
|
||||
"defaultMessage": "Slovenčina"
|
||||
},
|
||||
"locale-zh-CN": {
|
||||
"defaultMessage": "中文"
|
||||
},
|
||||
"locale-pl-PL": {
|
||||
"defaultMessage": "Polski"
|
||||
},
|
||||
"locale-it-IT": {
|
||||
"defaultMessage": "Italiano"
|
||||
},
|
||||
"locale-vi-VN": {
|
||||
"defaultMessage": "Tiếng Việt"
|
||||
},
|
||||
"locale-nl-NL": {
|
||||
"defaultMessage": "Nederlands"
|
||||
}
|
||||
}
|
||||
|
||||
647
frontend/src/locale/src/nl.json
Normal file
647
frontend/src/locale/src/nl.json
Normal file
@@ -0,0 +1,647 @@
|
||||
{
|
||||
"access-list": {
|
||||
"defaultMessage": "Toegangslijst"
|
||||
},
|
||||
"access-list.access-count": {
|
||||
"defaultMessage": "{count} {count, plural, one {Regel} other {Regels}}"
|
||||
},
|
||||
"access-list.auth-count": {
|
||||
"defaultMessage": "{count} {count, plural, one {Gebruiker} other {Gebruikers}}"
|
||||
},
|
||||
"access-list.help-rules-last": {
|
||||
"defaultMessage": "Als er minimaal 1 regel bestaat, wordt deze regel als laatste toegevoegd"
|
||||
},
|
||||
"access-list.help.rules-order": {
|
||||
"defaultMessage": "Onthoud dat de regels van boven naar beneden worden toegevoegd."
|
||||
},
|
||||
"access-list.pass-auth": {
|
||||
"defaultMessage": "Pass Auth to Upstream"
|
||||
},
|
||||
"access-list.public": {
|
||||
"defaultMessage": "Publiekelijk toegankelijk"
|
||||
},
|
||||
"access-list.public.subtitle": {
|
||||
"defaultMessage": "Geen basisautentificatie vereist"
|
||||
},
|
||||
"access-list.satisfy-any": {
|
||||
"defaultMessage": "Voldoe aan elke"
|
||||
},
|
||||
"access-list.subtitle": {
|
||||
"defaultMessage": "{users} {users, plural, one {Gebruiker} other {Gebruikers}}, {rules} {rules, plural, one {Regel} other {Regels}} - Aangemaakt: {date}"
|
||||
},
|
||||
"access-lists": {
|
||||
"defaultMessage": "Toegangslijsten"
|
||||
},
|
||||
"action.add": {
|
||||
"defaultMessage": "Toevoegen"
|
||||
},
|
||||
"action.add-location": {
|
||||
"defaultMessage": "Locatie Toevoegen"
|
||||
},
|
||||
"action.close": {
|
||||
"defaultMessage": "Sluiten"
|
||||
},
|
||||
"action.delete": {
|
||||
"defaultMessage": "Verwijderen"
|
||||
},
|
||||
"action.disable": {
|
||||
"defaultMessage": "Uitzetten"
|
||||
},
|
||||
"action.download": {
|
||||
"defaultMessage": "Download"
|
||||
},
|
||||
"action.edit": {
|
||||
"defaultMessage": "Bewerken"
|
||||
},
|
||||
"action.enable": {
|
||||
"defaultMessage": "Aanzetten"
|
||||
},
|
||||
"action.permissions": {
|
||||
"defaultMessage": "Rechten"
|
||||
},
|
||||
"action.renew": {
|
||||
"defaultMessage": "Vernieuwen"
|
||||
},
|
||||
"action.view-details": {
|
||||
"defaultMessage": "Bekijk Details"
|
||||
},
|
||||
"auditlogs": {
|
||||
"defaultMessage": "Logboeken"
|
||||
},
|
||||
"cancel": {
|
||||
"defaultMessage": "Annuleren"
|
||||
},
|
||||
"certificate": {
|
||||
"defaultMessage": "Certificaat"
|
||||
},
|
||||
"certificate.custom-certificate": {
|
||||
"defaultMessage": "Certificaat"
|
||||
},
|
||||
"certificate.custom-certificate-key": {
|
||||
"defaultMessage": "Certificaat Sleutel"
|
||||
},
|
||||
"certificate.custom-intermediate": {
|
||||
"defaultMessage": "Intermediate Certificaat"
|
||||
},
|
||||
"certificate.in-use": {
|
||||
"defaultMessage": "In Gebruik"
|
||||
},
|
||||
"certificate.none.subtitle": {
|
||||
"defaultMessage": "Geen certificaat toegewezen"
|
||||
},
|
||||
"certificate.none.subtitle.for-http": {
|
||||
"defaultMessage": "Deze host gebruikt geen HTTPS"
|
||||
},
|
||||
"certificate.none.title": {
|
||||
"defaultMessage": "Geen"
|
||||
},
|
||||
"certificate.not-in-use": {
|
||||
"defaultMessage": "Niet Gebruikt"
|
||||
},
|
||||
"certificate.renew": {
|
||||
"defaultMessage": "Certificaat Vernieuwen"
|
||||
},
|
||||
"certificates": {
|
||||
"defaultMessage": "Certificaten"
|
||||
},
|
||||
"certificates.custom": {
|
||||
"defaultMessage": "Aangepast Certificaat"
|
||||
},
|
||||
"certificates.custom.warning": {
|
||||
"defaultMessage": "Sleutels met een wachtzin zijn niet ondersteund."
|
||||
},
|
||||
"certificates.dns.credentials": {
|
||||
"defaultMessage": "Credentials File Content"
|
||||
},
|
||||
"certificates.dns.credentials-note": {
|
||||
"defaultMessage": "Deze plugin vereist een configuratiebestand met een API token of andere gegevens van de provider."
|
||||
},
|
||||
"certificates.dns.credentials-warning": {
|
||||
"defaultMessage": "Deze data zal worden opgeslagen als plaintext in de database en in een bestand!"
|
||||
},
|
||||
"certificates.dns.propagation-seconds": {
|
||||
"defaultMessage": "Verwerkingstijd (seconden)"
|
||||
},
|
||||
"certificates.dns.propagation-seconds-note": {
|
||||
"defaultMessage": "Laat leeg om de standaardwaarde van de plugin te gebruiken. Aantal seconden om te wachten op DNS propagatie."
|
||||
},
|
||||
"certificates.dns.provider": {
|
||||
"defaultMessage": "DNS Provider"
|
||||
},
|
||||
"certificates.dns.warning": {
|
||||
"defaultMessage": "Deze sectie vereist wat informatie over Certbot en zijn DNS plugins. Gebruik de documentatie van de bijbehorende plugins."
|
||||
},
|
||||
"certificates.http.reachability-404": {
|
||||
"defaultMessage": "Er is een server gevonden op deze domeinnaam, maar dat lijkt niet Nginx Proxy Manager te zijn. Zorg ervoor dat je domein naar het IP waar je NPM instance draait wijst."
|
||||
},
|
||||
"certificates.http.reachability-failed-to-check": {
|
||||
"defaultMessage": "Bereikbaarheid kan niet worden bepaald door een communicatiefout met site24x7.com."
|
||||
},
|
||||
"certificates.http.reachability-not-resolved": {
|
||||
"defaultMessage": "Er is geen server beschikbaar op dit domein. Zorg ervoor dat je domein bestaat en naar het IP waar je NPM instance draait wijst en eventueel port 80 wordt doorgegeven in je router."
|
||||
},
|
||||
"certificates.http.reachability-ok": {
|
||||
"defaultMessage": "Jouw server is bereikbaar en certificaten kunnen worden aangemaakt."
|
||||
},
|
||||
"certificates.http.reachability-other": {
|
||||
"defaultMessage": "Er is een server gevonden op deze domeinnaam, maar heeft een onverwachte statuscode ({code}) teruggegeven. Is dat de NPM server? Zorg ervoor dat je domein naar het IP waar je NPM instance draait wijst."
|
||||
},
|
||||
"certificates.http.reachability-wrong-data": {
|
||||
"defaultMessage": "Er is een server gevonden op deze domeinnaam, maar heeft een onverwachte gegevens teruggegeven. Is dat de NPM server? Zorg ervoor dat je domein naar het IP waar je NPM instance draait wijst."
|
||||
},
|
||||
"certificates.http.test-results": {
|
||||
"defaultMessage": "Testresultaten"
|
||||
},
|
||||
"certificates.http.warning": {
|
||||
"defaultMessage": "Deze domeinen moeten al worden geconfigureerd om naar deze installatie te wijzen."
|
||||
},
|
||||
"certificates.request.subtitle": {
|
||||
"defaultMessage": "met Let's Encrypt"
|
||||
},
|
||||
"certificates.request.title": {
|
||||
"defaultMessage": "Vraag een nieuwe Certificaat aan"
|
||||
},
|
||||
"column.access": {
|
||||
"defaultMessage": "Toegang"
|
||||
},
|
||||
"column.authorization": {
|
||||
"defaultMessage": "Authorizatie"
|
||||
},
|
||||
"column.authorizations": {
|
||||
"defaultMessage": "Authorizaties"
|
||||
},
|
||||
"column.custom-locations": {
|
||||
"defaultMessage": "Aangepaste Locaties"
|
||||
},
|
||||
"column.destination": {
|
||||
"defaultMessage": "Doel"
|
||||
},
|
||||
"column.details": {
|
||||
"defaultMessage": "Details"
|
||||
},
|
||||
"column.email": {
|
||||
"defaultMessage": "Email"
|
||||
},
|
||||
"column.event": {
|
||||
"defaultMessage": "Gebeurtenis"
|
||||
},
|
||||
"column.expires": {
|
||||
"defaultMessage": "Verloopt"
|
||||
},
|
||||
"column.http-code": {
|
||||
"defaultMessage": "HTTP Code"
|
||||
},
|
||||
"column.incoming-port": {
|
||||
"defaultMessage": "Inkomende Poort"
|
||||
},
|
||||
"column.name": {
|
||||
"defaultMessage": "Naam"
|
||||
},
|
||||
"column.protocol": {
|
||||
"defaultMessage": "Protocol"
|
||||
},
|
||||
"column.provider": {
|
||||
"defaultMessage": "Provider"
|
||||
},
|
||||
"column.roles": {
|
||||
"defaultMessage": "Rollen"
|
||||
},
|
||||
"column.rules": {
|
||||
"defaultMessage": "Regels"
|
||||
},
|
||||
"column.satisfy": {
|
||||
"defaultMessage": "Vervul"
|
||||
},
|
||||
"column.satisfy-all": {
|
||||
"defaultMessage": "Alle"
|
||||
},
|
||||
"column.satisfy-any": {
|
||||
"defaultMessage": "Elke"
|
||||
},
|
||||
"column.scheme": {
|
||||
"defaultMessage": "Schema"
|
||||
},
|
||||
"column.source": {
|
||||
"defaultMessage": "Bron"
|
||||
},
|
||||
"column.ssl": {
|
||||
"defaultMessage": "SSL"
|
||||
},
|
||||
"column.status": {
|
||||
"defaultMessage": "Status"
|
||||
},
|
||||
"created-on": {
|
||||
"defaultMessage": "Aangemaakt: {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": "Uitgezet"
|
||||
},
|
||||
"domain-names": {
|
||||
"defaultMessage": "Domeinnamen"
|
||||
},
|
||||
"domain-names.max": {
|
||||
"defaultMessage": "{count} domeinnamen toegestaan"
|
||||
},
|
||||
"domain-names.placeholder": {
|
||||
"defaultMessage": "Voeg een domeinnaam toe..."
|
||||
},
|
||||
"domain-names.wildcards-not-permitted": {
|
||||
"defaultMessage": "Wildcards zijn niet toegestaan voor dit type"
|
||||
},
|
||||
"domain-names.wildcards-not-supported": {
|
||||
"defaultMessage": "Wildcards zijn niet ondersteund voor deze CA"
|
||||
},
|
||||
"domains.force-ssl": {
|
||||
"defaultMessage": "Forceer SSL"
|
||||
},
|
||||
"domains.hsts-enabled": {
|
||||
"defaultMessage": "HSTS Aangezet"
|
||||
},
|
||||
"domains.hsts-subdomains": {
|
||||
"defaultMessage": "HSTS Subdomein"
|
||||
},
|
||||
"domains.http2-support": {
|
||||
"defaultMessage": "HTTP/2 Ondersteuning"
|
||||
},
|
||||
"domains.use-dns": {
|
||||
"defaultMessage": "Gebruik DNS Challenge"
|
||||
},
|
||||
"email-address": {
|
||||
"defaultMessage": "E-mailadres"
|
||||
},
|
||||
"empty-search": {
|
||||
"defaultMessage": "Geen resultaten gevonden"
|
||||
},
|
||||
"empty-subtitle": {
|
||||
"defaultMessage": "Waarom niet een maken?"
|
||||
},
|
||||
"enabled": {
|
||||
"defaultMessage": "Aangezet"
|
||||
},
|
||||
"error.access.at-least-one": {
|
||||
"defaultMessage": "Minimaal één authorizatie- of één toegangsregel is vereist"
|
||||
},
|
||||
"error.access.duplicate-usernames": {
|
||||
"defaultMessage": "Gebruikersnamen moeten uniek zijn"
|
||||
},
|
||||
"error.invalid-auth": {
|
||||
"defaultMessage": "Ongeldige email of wachtwoord"
|
||||
},
|
||||
"error.invalid-domain": {
|
||||
"defaultMessage": "Ongeldige domeinnaam: {domain}"
|
||||
},
|
||||
"error.invalid-email": {
|
||||
"defaultMessage": "Ongeldig e-mailadres"
|
||||
},
|
||||
"error.max-character-length": {
|
||||
"defaultMessage": "Maximale lengte is {max} karakter{max, plural, one {} other {s}}"
|
||||
},
|
||||
"error.max-domains": {
|
||||
"defaultMessage": "Te veel domeinnamen, max is {max}"
|
||||
},
|
||||
"error.maximum": {
|
||||
"defaultMessage": "Maximale is {max}"
|
||||
},
|
||||
"error.min-character-length": {
|
||||
"defaultMessage": "Minimale lengte is {min} karakter{min, plural, one {} other {s}}"
|
||||
},
|
||||
"error.minimum": {
|
||||
"defaultMessage": "Minimale is {min}"
|
||||
},
|
||||
"error.passwords-must-match": {
|
||||
"defaultMessage": "Wachtwoorden moeten overeenkomen"
|
||||
},
|
||||
"error.required": {
|
||||
"defaultMessage": "Dit is verplicht"
|
||||
},
|
||||
"expires.on": {
|
||||
"defaultMessage": "Verloopt: {date}"
|
||||
},
|
||||
"footer.github-fork": {
|
||||
"defaultMessage": "Maak een Fork op Github"
|
||||
},
|
||||
"host.flags.block-exploits": {
|
||||
"defaultMessage": "Blokkeer Veelvoorkomende Kwetsbaarheden"
|
||||
},
|
||||
"host.flags.cache-assets": {
|
||||
"defaultMessage": "Cache Assets"
|
||||
},
|
||||
"host.flags.preserve-path": {
|
||||
"defaultMessage": "Pad Behouden"
|
||||
},
|
||||
"host.flags.protocols": {
|
||||
"defaultMessage": "Protocollen"
|
||||
},
|
||||
"host.flags.websockets-upgrade": {
|
||||
"defaultMessage": "Websockets Ondersteuning"
|
||||
},
|
||||
"host.forward-port": {
|
||||
"defaultMessage": "Poort Doorsturen"
|
||||
},
|
||||
"host.forward-scheme": {
|
||||
"defaultMessage": "Schema"
|
||||
},
|
||||
"hosts": {
|
||||
"defaultMessage": "Hosts"
|
||||
},
|
||||
"http-only": {
|
||||
"defaultMessage": "Alleen HTTP"
|
||||
},
|
||||
"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": "Laden…"
|
||||
},
|
||||
"login.title": {
|
||||
"defaultMessage": "Inloggen"
|
||||
},
|
||||
"nginx-config.label": {
|
||||
"defaultMessage": "Aangepaste Nginx Configuratie"
|
||||
},
|
||||
"nginx-config.placeholder": {
|
||||
"defaultMessage": "# Voeg jouw aangepaste Nginx configuratie hier op eigen risico toe!"
|
||||
},
|
||||
"no-permission-error": {
|
||||
"defaultMessage": "Jij hebt geen toegang om dit te bekijken."
|
||||
},
|
||||
"notfound.action": {
|
||||
"defaultMessage": "Thuis"
|
||||
},
|
||||
"notfound.content": {
|
||||
"defaultMessage": "De pagina waar je naar op zoek bent kan niet worden gevonden"
|
||||
},
|
||||
"notfound.title": {
|
||||
"defaultMessage": "Oeps… Je hebt een foutpagina gevonden"
|
||||
},
|
||||
"notification.error": {
|
||||
"defaultMessage": "Fout"
|
||||
},
|
||||
"notification.object-deleted": {
|
||||
"defaultMessage": "{object} is verwijderd"
|
||||
},
|
||||
"notification.object-disabled": {
|
||||
"defaultMessage": "{object} is uitgezet"
|
||||
},
|
||||
"notification.object-enabled": {
|
||||
"defaultMessage": "{object} is aangezet"
|
||||
},
|
||||
"notification.object-renewed": {
|
||||
"defaultMessage": "{object} is vernieuwd"
|
||||
},
|
||||
"notification.object-saved": {
|
||||
"defaultMessage": "{object} is opgeslagen"
|
||||
},
|
||||
"notification.success": {
|
||||
"defaultMessage": "Succes"
|
||||
},
|
||||
"object.actions-title": {
|
||||
"defaultMessage": "{object} #{id}"
|
||||
},
|
||||
"object.add": {
|
||||
"defaultMessage": "Voeg {object} toe"
|
||||
},
|
||||
"object.delete": {
|
||||
"defaultMessage": "Verwijder {object}"
|
||||
},
|
||||
"object.delete.content": {
|
||||
"defaultMessage": "Weet je zeker dat je {object} wilt verwijderen?"
|
||||
},
|
||||
"object.edit": {
|
||||
"defaultMessage": "Bewerk {object}"
|
||||
},
|
||||
"object.empty": {
|
||||
"defaultMessage": "Er zijn geen {objects}"
|
||||
},
|
||||
"object.event.created": {
|
||||
"defaultMessage": "{object} is aangemaakt"
|
||||
},
|
||||
"object.event.deleted": {
|
||||
"defaultMessage": "{object} is verwijderd"
|
||||
},
|
||||
"object.event.disabled": {
|
||||
"defaultMessage": "{object} is uitgezet"
|
||||
},
|
||||
"object.event.enabled": {
|
||||
"defaultMessage": "{object} is aangezet"
|
||||
},
|
||||
"object.event.renewed": {
|
||||
"defaultMessage": "{object} is vernieuwd"
|
||||
},
|
||||
"object.event.updated": {
|
||||
"defaultMessage": "{object} is bijgewerkt"
|
||||
},
|
||||
"offline": {
|
||||
"defaultMessage": "Offline"
|
||||
},
|
||||
"online": {
|
||||
"defaultMessage": "Online"
|
||||
},
|
||||
"options": {
|
||||
"defaultMessage": "Opties"
|
||||
},
|
||||
"password": {
|
||||
"defaultMessage": "Wachtwoord"
|
||||
},
|
||||
"password.generate": {
|
||||
"defaultMessage": "Willekeurig wachtwoord genereren"
|
||||
},
|
||||
"password.hide": {
|
||||
"defaultMessage": "Wachtwoord Verbergen"
|
||||
},
|
||||
"password.show": {
|
||||
"defaultMessage": "Toon Wachtwoord"
|
||||
},
|
||||
"permissions.hidden": {
|
||||
"defaultMessage": "Verborgen"
|
||||
},
|
||||
"permissions.manage": {
|
||||
"defaultMessage": "Beheer"
|
||||
},
|
||||
"permissions.view": {
|
||||
"defaultMessage": "Alleen Bekijken"
|
||||
},
|
||||
"permissions.visibility.all": {
|
||||
"defaultMessage": "Alle Items"
|
||||
},
|
||||
"permissions.visibility.title": {
|
||||
"defaultMessage": "Item Zichtbaarheid"
|
||||
},
|
||||
"permissions.visibility.user": {
|
||||
"defaultMessage": "Alleen Aangemaakte Items"
|
||||
},
|
||||
"proxy-host": {
|
||||
"defaultMessage": "Proxy Host"
|
||||
},
|
||||
"proxy-host.forward-host": {
|
||||
"defaultMessage": "Hostname / IP Doorsturen"
|
||||
},
|
||||
"proxy-hosts": {
|
||||
"defaultMessage": "Proxy Hosts"
|
||||
},
|
||||
"proxy-hosts.count": {
|
||||
"defaultMessage": "{count} {count, plural, one {Proxy Host} other {Proxy Hosts}}"
|
||||
},
|
||||
"public": {
|
||||
"defaultMessage": "Openbaar"
|
||||
},
|
||||
"redirection-host": {
|
||||
"defaultMessage": "Redirection Host"
|
||||
},
|
||||
"redirection-host.forward-domain": {
|
||||
"defaultMessage": "Doorgestuurd Domein"
|
||||
},
|
||||
"redirection-host.forward-http-code": {
|
||||
"defaultMessage": "HTTP Code"
|
||||
},
|
||||
"redirection-hosts": {
|
||||
"defaultMessage": "Redirection Hosts"
|
||||
},
|
||||
"redirection-hosts.count": {
|
||||
"defaultMessage": "{count} {count, plural, one {Redirection Host} other {Redirection Hosts}}"
|
||||
},
|
||||
"role.admin": {
|
||||
"defaultMessage": "Beheerder"
|
||||
},
|
||||
"role.standard-user": {
|
||||
"defaultMessage": "Standaard Gebruiker"
|
||||
},
|
||||
"save": {
|
||||
"defaultMessage": "Opslaan"
|
||||
},
|
||||
"setting": {
|
||||
"defaultMessage": "Instelling"
|
||||
},
|
||||
"settings": {
|
||||
"defaultMessage": "Instellingen"
|
||||
},
|
||||
"settings.default-site": {
|
||||
"defaultMessage": "Standaard Site"
|
||||
},
|
||||
"settings.default-site.404": {
|
||||
"defaultMessage": "404 Pagina"
|
||||
},
|
||||
"settings.default-site.444": {
|
||||
"defaultMessage": "Geen Antwoord (444)"
|
||||
},
|
||||
"settings.default-site.congratulations": {
|
||||
"defaultMessage": "Felicitatiepagina"
|
||||
},
|
||||
"settings.default-site.description": {
|
||||
"defaultMessage": "Wat te tonen als Nginx een onbekende Host ontvangt"
|
||||
},
|
||||
"settings.default-site.html": {
|
||||
"defaultMessage": "Aangepaste HTML"
|
||||
},
|
||||
"settings.default-site.html.placeholder": {
|
||||
"defaultMessage": "<!-- Plaats jouw aangepaste HTML hier -->"
|
||||
},
|
||||
"settings.default-site.redirect": {
|
||||
"defaultMessage": "Omleiding"
|
||||
},
|
||||
"setup.preamble": {
|
||||
"defaultMessage": "Begin met het aanmaken van je beheerder account."
|
||||
},
|
||||
"setup.title": {
|
||||
"defaultMessage": "Welkom!"
|
||||
},
|
||||
"sign-in": {
|
||||
"defaultMessage": "Inloggen"
|
||||
},
|
||||
"ssl-certificate": {
|
||||
"defaultMessage": "SSL Certificaten"
|
||||
},
|
||||
"stream": {
|
||||
"defaultMessage": "Stream"
|
||||
},
|
||||
"stream.forward-host": {
|
||||
"defaultMessage": "Doorgestuurde Host"
|
||||
},
|
||||
"stream.incoming-port": {
|
||||
"defaultMessage": "Inkomende Poort"
|
||||
},
|
||||
"streams": {
|
||||
"defaultMessage": "Streams"
|
||||
},
|
||||
"streams.count": {
|
||||
"defaultMessage": "{count} {count, plural, one {Stream} other {Streams}}"
|
||||
},
|
||||
"streams.tcp": {
|
||||
"defaultMessage": "TCP"
|
||||
},
|
||||
"streams.udp": {
|
||||
"defaultMessage": "UDP"
|
||||
},
|
||||
"test": {
|
||||
"defaultMessage": "Test"
|
||||
},
|
||||
"update-available": {
|
||||
"defaultMessage": "Update Beschikbaar: {latestVersion}"
|
||||
},
|
||||
"user": {
|
||||
"defaultMessage": "Gebruiker"
|
||||
},
|
||||
"user.change-password": {
|
||||
"defaultMessage": "Verander Wachtwoord"
|
||||
},
|
||||
"user.confirm-password": {
|
||||
"defaultMessage": "Bevestig Wachtwoord"
|
||||
},
|
||||
"user.current-password": {
|
||||
"defaultMessage": "Huidig Wachtwoord"
|
||||
},
|
||||
"user.edit-profile": {
|
||||
"defaultMessage": "Profiel Bewerken"
|
||||
},
|
||||
"user.full-name": {
|
||||
"defaultMessage": "Volledige Naam"
|
||||
},
|
||||
"user.login-as": {
|
||||
"defaultMessage": "Inloggen als {name}"
|
||||
},
|
||||
"user.logout": {
|
||||
"defaultMessage": "Uitloggen"
|
||||
},
|
||||
"user.new-password": {
|
||||
"defaultMessage": "Nieuw Wachtwoord"
|
||||
},
|
||||
"user.nickname": {
|
||||
"defaultMessage": "Bijnaam"
|
||||
},
|
||||
"user.set-password": {
|
||||
"defaultMessage": "Zet Wachtwoord"
|
||||
},
|
||||
"user.set-permissions": {
|
||||
"defaultMessage": "Zet machtigingen voor {name}"
|
||||
},
|
||||
"user.switch-dark": {
|
||||
"defaultMessage": "Verander naar donkere modus"
|
||||
},
|
||||
"user.switch-light": {
|
||||
"defaultMessage": "Verander naar lichte modus"
|
||||
},
|
||||
"username": {
|
||||
"defaultMessage": "Gebruikersnaam"
|
||||
},
|
||||
"users": {
|
||||
"defaultMessage": "Gebruikers"
|
||||
}
|
||||
}
|
||||
@@ -204,7 +204,7 @@
|
||||
"defaultMessage": "Dostawca"
|
||||
},
|
||||
"column.roles": {
|
||||
"defaultMessage": "Role"
|
||||
"defaultMessage": "Rola"
|
||||
},
|
||||
"column.rules": {
|
||||
"defaultMessage": "Reguły"
|
||||
@@ -417,7 +417,7 @@
|
||||
"defaultMessage": "{object} #{id}"
|
||||
},
|
||||
"object.add": {
|
||||
"defaultMessage": "Dodaj {object}"
|
||||
"defaultMessage": "Nowy {object}"
|
||||
},
|
||||
"object.delete": {
|
||||
"defaultMessage": "Usuń {object}"
|
||||
|
||||
@@ -9,16 +9,16 @@
|
||||
"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"
|
||||
"defaultMessage": "Если есть хотя бы одно правило, правило 'запретить всё' будет добавлено последним"
|
||||
},
|
||||
"access-list.help.rules-order": {
|
||||
"defaultMessage": "Note that the allow and deny directives will be applied in the order they are defined."
|
||||
"defaultMessage": "Обратите внимание: разрешающие и запрещающие директивы применяются в порядке их определения."
|
||||
},
|
||||
"access-list.pass-auth": {
|
||||
"defaultMessage": "Pass Auth to Upstream"
|
||||
"defaultMessage": "Передавать авторизацию на upstream-сервер"
|
||||
},
|
||||
"access-list.public": {
|
||||
"defaultMessage": "Публично доступен"
|
||||
"defaultMessage": "Общедоступный"
|
||||
},
|
||||
"access-list.public.subtitle": {
|
||||
"defaultMessage": "Без аутентификации"
|
||||
@@ -27,7 +27,7 @@
|
||||
"defaultMessage": "Любое совпадение"
|
||||
},
|
||||
"access-list.subtitle": {
|
||||
"defaultMessage": "{users} {users, plural, one {User} other {Users}}, {rules} {rules, plural, one {Rule} other {Rules}} - Created: {date}"
|
||||
"defaultMessage": "{users} {users, plural, one {пользователь} few {пользователя} many {пользователей} other {пользователя}}, {rules} {rules, plural, one {правило} few {правила} many {правил} other {правила}} - создан: {date}"
|
||||
},
|
||||
"access-lists": {
|
||||
"defaultMessage": "Списки доступа"
|
||||
@@ -63,7 +63,7 @@
|
||||
"defaultMessage": "Продлить"
|
||||
},
|
||||
"action.view-details": {
|
||||
"defaultMessage": "Просмотреть детали"
|
||||
"defaultMessage": "Просмотреть сведения"
|
||||
},
|
||||
"auditlogs": {
|
||||
"defaultMessage": "Журнал аудита"
|
||||
@@ -111,49 +111,49 @@
|
||||
"defaultMessage": "Файлы ключей, защищённые паролем, не поддерживаются."
|
||||
},
|
||||
"certificates.dns.credentials": {
|
||||
"defaultMessage": "Credentials File Content"
|
||||
"defaultMessage": "Содержимое файла учётных данных"
|
||||
},
|
||||
"certificates.dns.credentials-note": {
|
||||
"defaultMessage": "This plugin requires a configuration file containing an API token or other credentials for your provider"
|
||||
"defaultMessage": "Этот плагин требует файл конфигурации, содержащий API-токен или другие учётные данные вашего провайдера"
|
||||
},
|
||||
"certificates.dns.credentials-warning": {
|
||||
"defaultMessage": "This data will be stored as plaintext in the database and in a file!"
|
||||
"defaultMessage": "Эти данные будут храниться в незашифрованном виде в базе данных и файле!"
|
||||
},
|
||||
"certificates.dns.propagation-seconds": {
|
||||
"defaultMessage": "Propagation Seconds"
|
||||
"defaultMessage": "Ожидание распространения (сек.)"
|
||||
},
|
||||
"certificates.dns.propagation-seconds-note": {
|
||||
"defaultMessage": "Leave empty to use the plugins default value. Number of seconds to wait for DNS propagation."
|
||||
"defaultMessage": "Оставьте пустым для значения по умолчанию плагина. Секунды ожидания распространения DNS."
|
||||
},
|
||||
"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."
|
||||
"defaultMessage": "Этот раздел требует знаний о Certbot и его DNS-плагинах. Пожалуйста, обратитесь к документации соответствующих плагинов."
|
||||
},
|
||||
"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."
|
||||
"defaultMessage": "На этом домене найден сервер, но, похоже, это не Nginx Proxy Manager. Убедитесь, что ваш домен указывает на IP-адрес, где запущен ваш экземпляр NPM."
|
||||
},
|
||||
"certificates.http.reachability-failed-to-check": {
|
||||
"defaultMessage": "Failed to check the reachability due to a communication error with site24x7.com."
|
||||
"defaultMessage": "Не удалось проверить доступность из‑за ошибки связи с 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."
|
||||
"defaultMessage": "На этом домене недоступен сервер. Убедитесь, что домен существует и указывает на IP-адрес, где запущен ваш экземпляр NPM, и при необходимости порт 80 проброшен на вашем роутере."
|
||||
},
|
||||
"certificates.http.reachability-ok": {
|
||||
"defaultMessage": "Your server is reachable and creating certificates should be possible."
|
||||
"defaultMessage": "Сервер доступен, выпуск сертификатов возможен."
|
||||
},
|
||||
"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."
|
||||
"defaultMessage": "На этом домене найден сервер, но он вернул неожиданный статус‑код {code}. Это сервер NPM? Убедитесь, что ваш домен указывает на IP-адрес, где запущен ваш экземпляр NPM."
|
||||
},
|
||||
"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."
|
||||
"defaultMessage": "На этом домене найден сервер, но он вернул неожиданные данные. Это сервер NPM? Убедитесь, что ваш домен указывает на IP-адрес, где запущен ваш экземпляр NPM."
|
||||
},
|
||||
"certificates.http.test-results": {
|
||||
"defaultMessage": "Результаты проверки"
|
||||
},
|
||||
"certificates.http.warning": {
|
||||
"defaultMessage": "These domains must be already configured to point to this installation."
|
||||
"defaultMessage": "Эти домены должны быть настроены и указывать на этот экземпляр."
|
||||
},
|
||||
"certificates.request.subtitle": {
|
||||
"defaultMessage": "через Let's Encrypt"
|
||||
@@ -177,10 +177,10 @@
|
||||
"defaultMessage": "Назначение"
|
||||
},
|
||||
"column.details": {
|
||||
"defaultMessage": "Детали"
|
||||
"defaultMessage": "Сведения"
|
||||
},
|
||||
"column.email": {
|
||||
"defaultMessage": "Email"
|
||||
"defaultMessage": "Эл. почта"
|
||||
},
|
||||
"column.event": {
|
||||
"defaultMessage": "Событие"
|
||||
@@ -189,7 +189,7 @@
|
||||
"defaultMessage": "Истекает"
|
||||
},
|
||||
"column.http-code": {
|
||||
"defaultMessage": "HTTP Code"
|
||||
"defaultMessage": "HTTP-код"
|
||||
},
|
||||
"column.incoming-port": {
|
||||
"defaultMessage": "Входящий порт"
|
||||
@@ -210,7 +210,7 @@
|
||||
"defaultMessage": "Правила"
|
||||
},
|
||||
"column.satisfy": {
|
||||
"defaultMessage": "Совпадение"
|
||||
"defaultMessage": "Условия"
|
||||
},
|
||||
"column.satisfy-all": {
|
||||
"defaultMessage": "Все"
|
||||
@@ -252,16 +252,16 @@
|
||||
"defaultMessage": "Домены"
|
||||
},
|
||||
"domain-names.max": {
|
||||
"defaultMessage": "Максимум доменов: {count}"
|
||||
"defaultMessage": "Максимум {count} доменов"
|
||||
},
|
||||
"domain-names.placeholder": {
|
||||
"defaultMessage": "Начните ввод, чтобы добавить домен..."
|
||||
},
|
||||
"domain-names.wildcards-not-permitted": {
|
||||
"defaultMessage": "Wildcard'ы не разрешены для этого типа"
|
||||
"defaultMessage": "Подстановочные домены не разрешены для этого типа"
|
||||
},
|
||||
"domain-names.wildcards-not-supported": {
|
||||
"defaultMessage": "Wildcard'ы не поддерживаются этим CA"
|
||||
"defaultMessage": "Подстановочные домены не поддерживаются этим центром сертификации"
|
||||
},
|
||||
"domains.force-ssl": {
|
||||
"defaultMessage": "Всегда SSL"
|
||||
@@ -276,10 +276,10 @@
|
||||
"defaultMessage": "Поддержка HTTP/2"
|
||||
},
|
||||
"domains.use-dns": {
|
||||
"defaultMessage": "Использовать DNS Challenge"
|
||||
"defaultMessage": "Проверка через DNS"
|
||||
},
|
||||
"email-address": {
|
||||
"defaultMessage": "Email-адрес"
|
||||
"defaultMessage": "Адрес эл. почты"
|
||||
},
|
||||
"empty-search": {
|
||||
"defaultMessage": "Ничего не найдено"
|
||||
@@ -288,25 +288,25 @@
|
||||
"defaultMessage": "Почему бы не создать его?"
|
||||
},
|
||||
"enabled": {
|
||||
"defaultMessage": "Включен"
|
||||
"defaultMessage": "Включён"
|
||||
},
|
||||
"error.access.at-least-one": {
|
||||
"defaultMessage": "Either one Authorization or one Access Rule is required"
|
||||
"defaultMessage": "Требуется хотя бы одна авторизация или одно правило доступа"
|
||||
},
|
||||
"error.access.duplicate-usernames": {
|
||||
"defaultMessage": "Authorization Usernames must be unique"
|
||||
"defaultMessage": "Имена пользователей для авторизации должны быть уникальными"
|
||||
},
|
||||
"error.invalid-auth": {
|
||||
"defaultMessage": "Неверный email или пароль"
|
||||
"defaultMessage": "Неверный адрес эл. почты или пароль"
|
||||
},
|
||||
"error.invalid-domain": {
|
||||
"defaultMessage": "Неверный домен: {domain}"
|
||||
},
|
||||
"error.invalid-email": {
|
||||
"defaultMessage": "Неверный email-адрес"
|
||||
"defaultMessage": "Неверный адрес эл. почты"
|
||||
},
|
||||
"error.max-character-length": {
|
||||
"defaultMessage": "Maximum length is {max} character{max, plural, one {} other {s}}"
|
||||
"defaultMessage": "Максимальная длина {max} {max, plural, one {символ} few {символа} many {символов} other {символа}}"
|
||||
},
|
||||
"error.max-domains": {
|
||||
"defaultMessage": "Слишком много доменов, максимум {max}"
|
||||
@@ -315,7 +315,7 @@
|
||||
"defaultMessage": "Максимум {max}"
|
||||
},
|
||||
"error.min-character-length": {
|
||||
"defaultMessage": "Minimum length is {min} character{min, plural, one {} other {s}}"
|
||||
"defaultMessage": "Минимальная длина {min} {min, plural, one {символ} few {символа} many {символов} other {символа}}"
|
||||
},
|
||||
"error.minimum": {
|
||||
"defaultMessage": "Минимум {min}"
|
||||
@@ -330,7 +330,7 @@
|
||||
"defaultMessage": "Истекает: {date}"
|
||||
},
|
||||
"footer.github-fork": {
|
||||
"defaultMessage": "Fork me on Github"
|
||||
"defaultMessage": "Сделать форк на GitHub"
|
||||
},
|
||||
"host.flags.block-exploits": {
|
||||
"defaultMessage": "Блокировать известные эксплойты"
|
||||
@@ -381,7 +381,7 @@
|
||||
"defaultMessage": "# Введите здесь свою Nginx-конфигурацию, будьте осторожны!"
|
||||
},
|
||||
"no-permission-error": {
|
||||
"defaultMessage": "You do not have access to view this."
|
||||
"defaultMessage": "У вас нет доступа для просмотра."
|
||||
},
|
||||
"notfound.action": {
|
||||
"defaultMessage": "Вернуться на главную"
|
||||
@@ -429,7 +429,7 @@
|
||||
"defaultMessage": "Изменить {object}"
|
||||
},
|
||||
"object.empty": {
|
||||
"defaultMessage": "{objects} отстутствуют"
|
||||
"defaultMessage": "{objects} отсутствуют"
|
||||
},
|
||||
"object.event.created": {
|
||||
"defaultMessage": "{object} создан"
|
||||
@@ -501,7 +501,7 @@
|
||||
"defaultMessage": "{count} {count, plural, one {прокси-хост} few {прокси-хоста} many {прокси-хостов} other {прокси-хоста}}"
|
||||
},
|
||||
"public": {
|
||||
"defaultMessage": "Публичный"
|
||||
"defaultMessage": "Общедоступный"
|
||||
},
|
||||
"redirection-host": {
|
||||
"defaultMessage": "Редирект-хост"
|
||||
@@ -510,7 +510,7 @@
|
||||
"defaultMessage": "Домен перенаправления"
|
||||
},
|
||||
"redirection-host.forward-http-code": {
|
||||
"defaultMessage": "HTTP Code"
|
||||
"defaultMessage": "HTTP-код"
|
||||
},
|
||||
"redirection-hosts": {
|
||||
"defaultMessage": "Редирект-хосты"
|
||||
@@ -627,7 +627,7 @@
|
||||
"defaultMessage": "Задать пароль"
|
||||
},
|
||||
"user.set-permissions": {
|
||||
"defaultMessage": "Set Permissions for {name}"
|
||||
"defaultMessage": "Задать разрешения для {name}"
|
||||
},
|
||||
"user.switch-dark": {
|
||||
"defaultMessage": "Включить тёмную тему"
|
||||
@@ -636,7 +636,7 @@
|
||||
"defaultMessage": "Включить светлую тему"
|
||||
},
|
||||
"username": {
|
||||
"defaultMessage": "Логин"
|
||||
"defaultMessage": "Имя пользователя"
|
||||
},
|
||||
"users": {
|
||||
"defaultMessage": "Пользователи"
|
||||
|
||||
647
frontend/src/locale/src/vi.json
Normal file
647
frontend/src/locale/src/vi.json
Normal file
@@ -0,0 +1,647 @@
|
||||
{
|
||||
"access-list": {
|
||||
"defaultMessage": "Danh sách truy cập"
|
||||
},
|
||||
"access-list.access-count": {
|
||||
"defaultMessage": "{count} quy tắc"
|
||||
},
|
||||
"access-list.auth-count": {
|
||||
"defaultMessage": "{count} người dùng"
|
||||
},
|
||||
"access-list.help-rules-last": {
|
||||
"defaultMessage": "Quy tắc từ chối tất cả này sẽ được thêm vào cuối khi tồn tại ít nhất 1 quy tắc"
|
||||
},
|
||||
"access-list.help.rules-order": {
|
||||
"defaultMessage": "Các quy tắc cho phép và từ chối sẽ được thực thi theo thứ tự được xác định."
|
||||
},
|
||||
"access-list.pass-auth": {
|
||||
"defaultMessage": "Chuyển xác thực lên thượng nguồn"
|
||||
},
|
||||
"access-list.public": {
|
||||
"defaultMessage": "Có thể truy cập công khai"
|
||||
},
|
||||
"access-list.public.subtitle": {
|
||||
"defaultMessage": "Không cần xác thực cơ bản"
|
||||
},
|
||||
"access-list.satisfy-any": {
|
||||
"defaultMessage": "Thỏa mãn điều kiện bất kỳ"
|
||||
},
|
||||
"access-list.subtitle": {
|
||||
"defaultMessage": "{users} người dùng, {rules} quy tắc - Tạo lúc: {date}"
|
||||
},
|
||||
"access-lists": {
|
||||
"defaultMessage": "Danh sách truy cập"
|
||||
},
|
||||
"action.add": {
|
||||
"defaultMessage": "Thêm"
|
||||
},
|
||||
"action.add-location": {
|
||||
"defaultMessage": "Thêm Vị trí"
|
||||
},
|
||||
"action.close": {
|
||||
"defaultMessage": "Đóng"
|
||||
},
|
||||
"action.delete": {
|
||||
"defaultMessage": "Xóa"
|
||||
},
|
||||
"action.disable": {
|
||||
"defaultMessage": "Tắt"
|
||||
},
|
||||
"action.download": {
|
||||
"defaultMessage": "Tải xuống"
|
||||
},
|
||||
"action.edit": {
|
||||
"defaultMessage": "Chỉnh sửa"
|
||||
},
|
||||
"action.enable": {
|
||||
"defaultMessage": "Bật"
|
||||
},
|
||||
"action.permissions": {
|
||||
"defaultMessage": "Quyền"
|
||||
},
|
||||
"action.renew": {
|
||||
"defaultMessage": "Gia hạn"
|
||||
},
|
||||
"action.view-details": {
|
||||
"defaultMessage": "Xem Chi tiết"
|
||||
},
|
||||
"auditlogs": {
|
||||
"defaultMessage": "Nhật ký kiểm tra"
|
||||
},
|
||||
"cancel": {
|
||||
"defaultMessage": "Hủy"
|
||||
},
|
||||
"certificate": {
|
||||
"defaultMessage": "Chứng chỉ"
|
||||
},
|
||||
"certificate.custom-certificate": {
|
||||
"defaultMessage": "Certificate (crt)"
|
||||
},
|
||||
"certificate.custom-certificate-key": {
|
||||
"defaultMessage": "Certificate Key"
|
||||
},
|
||||
"certificate.custom-intermediate": {
|
||||
"defaultMessage": "Intermediate Certificate"
|
||||
},
|
||||
"certificate.in-use": {
|
||||
"defaultMessage": "Đang sử dụng"
|
||||
},
|
||||
"certificate.none.subtitle": {
|
||||
"defaultMessage": "Không có chứng chỉ nào được chỉ định"
|
||||
},
|
||||
"certificate.none.subtitle.for-http": {
|
||||
"defaultMessage": "Máy chủ này sẽ không sử dụng HTTPS"
|
||||
},
|
||||
"certificate.none.title": {
|
||||
"defaultMessage": "Không có"
|
||||
},
|
||||
"certificate.not-in-use": {
|
||||
"defaultMessage": "Không được dùng"
|
||||
},
|
||||
"certificate.renew": {
|
||||
"defaultMessage": "Gia hạn Chứng chỉ"
|
||||
},
|
||||
"certificates": {
|
||||
"defaultMessage": "Danh sách chứng chỉ"
|
||||
},
|
||||
"certificates.custom": {
|
||||
"defaultMessage": "Chứng chỉ tùy chỉnh"
|
||||
},
|
||||
"certificates.custom.warning": {
|
||||
"defaultMessage": "Các tệp chính được bảo vệ bằng cụm mật khẩu không được hỗ trợ."
|
||||
},
|
||||
"certificates.dns.credentials": {
|
||||
"defaultMessage": "Nội dung tệp thông tin xác thực"
|
||||
},
|
||||
"certificates.dns.credentials-note": {
|
||||
"defaultMessage": "Plugin này yêu cầu tệp cấu hình chứa mã thông báo API hoặc thông tin xác thực khác cho nhà cung cấp của bạn"
|
||||
},
|
||||
"certificates.dns.credentials-warning": {
|
||||
"defaultMessage": "Dữ liệu này sẽ được lưu trữ dưới dạng bản rõ trong cơ sở dữ liệu và trong một tệp!"
|
||||
},
|
||||
"certificates.dns.propagation-seconds": {
|
||||
"defaultMessage": "Thời gian lan truyền (Giây)"
|
||||
},
|
||||
"certificates.dns.propagation-seconds-note": {
|
||||
"defaultMessage": "Để trống để sử dụng giá trị mặc định của plugin. Số giây chờ truyền DNS."
|
||||
},
|
||||
"certificates.dns.provider": {
|
||||
"defaultMessage": "Nhà cung cấp DNS"
|
||||
},
|
||||
"certificates.dns.warning": {
|
||||
"defaultMessage": "Phần này yêu cầu một số kiến thức về Certbot và các plugin DNS của nó. Vui lòng tham khảo tài liệu plugin tương ứng."
|
||||
},
|
||||
"certificates.http.reachability-404": {
|
||||
"defaultMessage": "Có một máy chủ được tìm thấy ở miền này nhưng có vẻ như nó không phải là NPM. Vui lòng đảm bảo tên miền của bạn trỏ đến IP nơi phiên bản NPM của bạn đang chạy."
|
||||
},
|
||||
"certificates.http.reachability-failed-to-check": {
|
||||
"defaultMessage": "Không thể kiểm tra khả năng truy cập do lỗi giao tiếp với site24x7.com."
|
||||
},
|
||||
"certificates.http.reachability-not-resolved": {
|
||||
"defaultMessage": "Không có máy chủ có sẵn tại tên miền này. Vui lòng đảm bảo rằng miền của bạn tồn tại và trỏ đến IP nơi phiên bản NPM của bạn đang chạy và nếu cần, cổng 80 sẽ được chuyển tiếp trong bộ định tuyến của bạn."
|
||||
},
|
||||
"certificates.http.reachability-ok": {
|
||||
"defaultMessage": "Máy chủ của bạn có thể truy cập được và có thể tạo chứng chỉ."
|
||||
},
|
||||
"certificates.http.reachability-other": {
|
||||
"defaultMessage": "Có một máy chủ được tìm thấy ở miền này nhưng nó trả về mã trạng thái không mong muốn {code}. Đây có phải là máy chủ NPM không? Vui lòng đảm bảo tên miền của bạn trỏ đến IP nơi phiên bản NPM của bạn đang chạy."
|
||||
},
|
||||
"certificates.http.reachability-wrong-data": {
|
||||
"defaultMessage": "Có một máy chủ được tìm thấy ở miền này nhưng nó trả về một dữ liệu không mong muốn. Đây có phải là máy chủ NPM không? Vui lòng đảm bảo tên miền của bạn trỏ đến IP nơi phiên bản NPM của bạn đang chạy."
|
||||
},
|
||||
"certificates.http.test-results": {
|
||||
"defaultMessage": "Kết quả kiểm tra"
|
||||
},
|
||||
"certificates.http.warning": {
|
||||
"defaultMessage": "Các miền này phải được cấu hình sẵn để trỏ đến cài đặt này."
|
||||
},
|
||||
"certificates.request.subtitle": {
|
||||
"defaultMessage": "bằng Let's Encrypt"
|
||||
},
|
||||
"certificates.request.title": {
|
||||
"defaultMessage": "Yêu cầu chứng chỉ mới"
|
||||
},
|
||||
"column.access": {
|
||||
"defaultMessage": "Truy cập"
|
||||
},
|
||||
"column.authorization": {
|
||||
"defaultMessage": "Ủy quyền"
|
||||
},
|
||||
"column.authorizations": {
|
||||
"defaultMessage": "Danh sách ủy quyền"
|
||||
},
|
||||
"column.custom-locations": {
|
||||
"defaultMessage": "Quy tắc đường dẫn tùy chỉnh (Vị trí)"
|
||||
},
|
||||
"column.destination": {
|
||||
"defaultMessage": "Mục tiêu"
|
||||
},
|
||||
"column.details": {
|
||||
"defaultMessage": "Chi tiết"
|
||||
},
|
||||
"column.email": {
|
||||
"defaultMessage": "Email"
|
||||
},
|
||||
"column.event": {
|
||||
"defaultMessage": "Sự kiện"
|
||||
},
|
||||
"column.expires": {
|
||||
"defaultMessage": "Hết hạn"
|
||||
},
|
||||
"column.http-code": {
|
||||
"defaultMessage": "HTTP Code"
|
||||
},
|
||||
"column.incoming-port": {
|
||||
"defaultMessage": "Cổng đến"
|
||||
},
|
||||
"column.name": {
|
||||
"defaultMessage": "Tên"
|
||||
},
|
||||
"column.protocol": {
|
||||
"defaultMessage": "Giao thức"
|
||||
},
|
||||
"column.provider": {
|
||||
"defaultMessage": "Nhà cung cấp"
|
||||
},
|
||||
"column.roles": {
|
||||
"defaultMessage": "Vai trò"
|
||||
},
|
||||
"column.rules": {
|
||||
"defaultMessage": "Quy tắc"
|
||||
},
|
||||
"column.satisfy": {
|
||||
"defaultMessage": "Thỏa mãn"
|
||||
},
|
||||
"column.satisfy-all": {
|
||||
"defaultMessage": "Tất cả"
|
||||
},
|
||||
"column.satisfy-any": {
|
||||
"defaultMessage": "Bất kì"
|
||||
},
|
||||
"column.scheme": {
|
||||
"defaultMessage": "Scheme"
|
||||
},
|
||||
"column.source": {
|
||||
"defaultMessage": "Nguồn"
|
||||
},
|
||||
"column.ssl": {
|
||||
"defaultMessage": "SSL"
|
||||
},
|
||||
"column.status": {
|
||||
"defaultMessage": "Trạng thái"
|
||||
},
|
||||
"created-on": {
|
||||
"defaultMessage": "Đã tạo: {date}"
|
||||
},
|
||||
"dashboard": {
|
||||
"defaultMessage": "Bảng điều khiển"
|
||||
},
|
||||
"dead-host": {
|
||||
"defaultMessage": "Máy chủ 404"
|
||||
},
|
||||
"dead-hosts": {
|
||||
"defaultMessage": "Máy chủ 404"
|
||||
},
|
||||
"dead-hosts.count": {
|
||||
"defaultMessage": "Số trang lỗi {count}"
|
||||
},
|
||||
"disabled": {
|
||||
"defaultMessage": "Đã tắt"
|
||||
},
|
||||
"domain-names": {
|
||||
"defaultMessage": "Danh sách tên miền"
|
||||
},
|
||||
"domain-names.max": {
|
||||
"defaultMessage": "Tối đa {count} tên miền"
|
||||
},
|
||||
"domain-names.placeholder": {
|
||||
"defaultMessage": "Nhập tên miền vào đây..."
|
||||
},
|
||||
"domain-names.wildcards-not-permitted": {
|
||||
"defaultMessage": "Ký tự đại diện không được phép cho loại này"
|
||||
},
|
||||
"domain-names.wildcards-not-supported": {
|
||||
"defaultMessage": "Ký tự đại diện không được hỗ trợ cho CA này"
|
||||
},
|
||||
"domains.force-ssl": {
|
||||
"defaultMessage": "Bắt buộc SSL"
|
||||
},
|
||||
"domains.hsts-enabled": {
|
||||
"defaultMessage": "Bật HSTS"
|
||||
},
|
||||
"domains.hsts-subdomains": {
|
||||
"defaultMessage": "Tên miền phụ HSTS"
|
||||
},
|
||||
"domains.http2-support": {
|
||||
"defaultMessage": "Hỗ trợ HTTP/2"
|
||||
},
|
||||
"domains.use-dns": {
|
||||
"defaultMessage": "Dùng thử thách DNS"
|
||||
},
|
||||
"email-address": {
|
||||
"defaultMessage": "Địa chỉ email"
|
||||
},
|
||||
"empty-search": {
|
||||
"defaultMessage": "Không có kết quả nào"
|
||||
},
|
||||
"empty-subtitle": {
|
||||
"defaultMessage": "Tại sao bạn không tạo một cái luôn?"
|
||||
},
|
||||
"enabled": {
|
||||
"defaultMessage": "Đã bật"
|
||||
},
|
||||
"error.access.at-least-one": {
|
||||
"defaultMessage": "Yêu cầu ít nhất một quy tắc ủy quyền hoặc truy cập"
|
||||
},
|
||||
"error.access.duplicate-usernames": {
|
||||
"defaultMessage": "Tên người dùng được ủy quyền phải là duy nhất"
|
||||
},
|
||||
"error.invalid-auth": {
|
||||
"defaultMessage": "Email hoặc Mật khẩu không hợp lệ"
|
||||
},
|
||||
"error.invalid-domain": {
|
||||
"defaultMessage": "Tên miền không hợp lệ: {domain}"
|
||||
},
|
||||
"error.invalid-email": {
|
||||
"defaultMessage": "Địa chỉ email không hợp lệ"
|
||||
},
|
||||
"error.max-character-length": {
|
||||
"defaultMessage": "Độ dài tối đa là {max} ký tự"
|
||||
},
|
||||
"error.max-domains": {
|
||||
"defaultMessage": "Quá nhiều tên miền, tối đa là {max}"
|
||||
},
|
||||
"error.maximum": {
|
||||
"defaultMessage": "Tối đa là {max}"
|
||||
},
|
||||
"error.min-character-length": {
|
||||
"defaultMessage": "Độ dài tối thiểu là {min} ký tự"
|
||||
},
|
||||
"error.minimum": {
|
||||
"defaultMessage": "Tối thiểu là {min}"
|
||||
},
|
||||
"error.passwords-must-match": {
|
||||
"defaultMessage": "Mật khẩu phải khớp"
|
||||
},
|
||||
"error.required": {
|
||||
"defaultMessage": "Điều này là bắt buộc"
|
||||
},
|
||||
"expires.on": {
|
||||
"defaultMessage": "Hết hạn: {date}"
|
||||
},
|
||||
"footer.github-fork": {
|
||||
"defaultMessage": "Fork dự án này trên Github"
|
||||
},
|
||||
"host.flags.block-exploits": {
|
||||
"defaultMessage": "Chặn các hoạt động khai thác phổ biến"
|
||||
},
|
||||
"host.flags.cache-assets": {
|
||||
"defaultMessage": "Cache tài nguyên"
|
||||
},
|
||||
"host.flags.preserve-path": {
|
||||
"defaultMessage": "Bảo toàn đường dẫn"
|
||||
},
|
||||
"host.flags.protocols": {
|
||||
"defaultMessage": "Giao thức"
|
||||
},
|
||||
"host.flags.websockets-upgrade": {
|
||||
"defaultMessage": "Hỗ trợ Websockets"
|
||||
},
|
||||
"host.forward-port": {
|
||||
"defaultMessage": "Chuyển tiếp cổng"
|
||||
},
|
||||
"host.forward-scheme": {
|
||||
"defaultMessage": "Scheme"
|
||||
},
|
||||
"hosts": {
|
||||
"defaultMessage": "Máy chủ"
|
||||
},
|
||||
"http-only": {
|
||||
"defaultMessage": "HTTP Only"
|
||||
},
|
||||
"lets-encrypt": {
|
||||
"defaultMessage": "Let's Encrypt"
|
||||
},
|
||||
"lets-encrypt-via-dns": {
|
||||
"defaultMessage": "Let's Encrypt qua DNS"
|
||||
},
|
||||
"lets-encrypt-via-http": {
|
||||
"defaultMessage": "Let's Encrypt qua HTTP"
|
||||
},
|
||||
"loading": {
|
||||
"defaultMessage": "Đang tải..."
|
||||
},
|
||||
"login.title": {
|
||||
"defaultMessage": "Đăng nhập vào tài khoản của bạn"
|
||||
},
|
||||
"nginx-config.label": {
|
||||
"defaultMessage": "Cấu hình Nginx tùy chỉnh"
|
||||
},
|
||||
"nginx-config.placeholder": {
|
||||
"defaultMessage": "# Nhập cấu hình Nginx tùy chỉnh của bạn vào đây và bạn phải tự chịu rủi ro!"
|
||||
},
|
||||
"no-permission-error": {
|
||||
"defaultMessage": "Bạn không có quyền truy cập trang này."
|
||||
},
|
||||
"notfound.action": {
|
||||
"defaultMessage": "Về trang chủ"
|
||||
},
|
||||
"notfound.content": {
|
||||
"defaultMessage": "Chúng tôi xin lỗi nhưng trang bạn đang tìm kiếm không được tìm thấy"
|
||||
},
|
||||
"notfound.title": {
|
||||
"defaultMessage": "Rất tiếc… Bạn vừa tìm thấy một trang lỗi"
|
||||
},
|
||||
"notification.error": {
|
||||
"defaultMessage": "Lỗi"
|
||||
},
|
||||
"notification.object-deleted": {
|
||||
"defaultMessage": "{object} đã được xóa"
|
||||
},
|
||||
"notification.object-disabled": {
|
||||
"defaultMessage": "{object} đã được tắt"
|
||||
},
|
||||
"notification.object-enabled": {
|
||||
"defaultMessage": "{object} đã được bật"
|
||||
},
|
||||
"notification.object-renewed": {
|
||||
"defaultMessage": "{object} đã được làm mới"
|
||||
},
|
||||
"notification.object-saved": {
|
||||
"defaultMessage": "{object} đã được lưu"
|
||||
},
|
||||
"notification.success": {
|
||||
"defaultMessage": "Thành công"
|
||||
},
|
||||
"object.actions-title": {
|
||||
"defaultMessage": "{object} #{id}"
|
||||
},
|
||||
"object.add": {
|
||||
"defaultMessage": "Thêm {object}"
|
||||
},
|
||||
"object.delete": {
|
||||
"defaultMessage": "Xóa {object}"
|
||||
},
|
||||
"object.delete.content": {
|
||||
"defaultMessage": "Bạn có chắc muốn xóa {object} không?"
|
||||
},
|
||||
"object.edit": {
|
||||
"defaultMessage": "Chỉnh sửa {object}"
|
||||
},
|
||||
"object.empty": {
|
||||
"defaultMessage": "Không có {objects}"
|
||||
},
|
||||
"object.event.created": {
|
||||
"defaultMessage": "Đã tạo {object}"
|
||||
},
|
||||
"object.event.deleted": {
|
||||
"defaultMessage": "Đã xóa {object}"
|
||||
},
|
||||
"object.event.disabled": {
|
||||
"defaultMessage": "Đã tắt {object}"
|
||||
},
|
||||
"object.event.enabled": {
|
||||
"defaultMessage": "Đã bật {object}"
|
||||
},
|
||||
"object.event.renewed": {
|
||||
"defaultMessage": "Đã gia hạn {object}"
|
||||
},
|
||||
"object.event.updated": {
|
||||
"defaultMessage": "Đã cập nhật {object}"
|
||||
},
|
||||
"offline": {
|
||||
"defaultMessage": "Ngoại tuyến"
|
||||
},
|
||||
"online": {
|
||||
"defaultMessage": "Trực tuyến"
|
||||
},
|
||||
"options": {
|
||||
"defaultMessage": "Tùy chọn"
|
||||
},
|
||||
"password": {
|
||||
"defaultMessage": "Mật khẩu"
|
||||
},
|
||||
"password.generate": {
|
||||
"defaultMessage": "Tạo mật khẩu ngẫu nhiên"
|
||||
},
|
||||
"password.hide": {
|
||||
"defaultMessage": "Ẩn Mật khẩu"
|
||||
},
|
||||
"password.show": {
|
||||
"defaultMessage": "Hiện Mật khẩu"
|
||||
},
|
||||
"permissions.hidden": {
|
||||
"defaultMessage": "Ẩn"
|
||||
},
|
||||
"permissions.manage": {
|
||||
"defaultMessage": "Quản lý"
|
||||
},
|
||||
"permissions.view": {
|
||||
"defaultMessage": "Chỉ xem"
|
||||
},
|
||||
"permissions.visibility.all": {
|
||||
"defaultMessage": "Tất cả các mục"
|
||||
},
|
||||
"permissions.visibility.title": {
|
||||
"defaultMessage": "Khả năng hiển thị mục"
|
||||
},
|
||||
"permissions.visibility.user": {
|
||||
"defaultMessage": "Chỉ các mục đã tạo"
|
||||
},
|
||||
"proxy-host": {
|
||||
"defaultMessage": "Máy chủ proxy"
|
||||
},
|
||||
"proxy-host.forward-host": {
|
||||
"defaultMessage": "Chuyển tiếp Hostname / IP"
|
||||
},
|
||||
"proxy-hosts": {
|
||||
"defaultMessage": "Máy chủ proxy"
|
||||
},
|
||||
"proxy-hosts.count": {
|
||||
"defaultMessage": "{count} máy chủ proxy"
|
||||
},
|
||||
"public": {
|
||||
"defaultMessage": "Công khai"
|
||||
},
|
||||
"redirection-host": {
|
||||
"defaultMessage": "Redirection Host"
|
||||
},
|
||||
"redirection-host.forward-domain": {
|
||||
"defaultMessage": "Chuyển tiếp Tên miền"
|
||||
},
|
||||
"redirection-host.forward-http-code": {
|
||||
"defaultMessage": "HTTP Code"
|
||||
},
|
||||
"redirection-hosts": {
|
||||
"defaultMessage": "Redirection Hosts"
|
||||
},
|
||||
"redirection-hosts.count": {
|
||||
"defaultMessage": "{count} máy chủ chuyển hướng"
|
||||
},
|
||||
"role.admin": {
|
||||
"defaultMessage": "Quản trị viên"
|
||||
},
|
||||
"role.standard-user": {
|
||||
"defaultMessage": "Người dùng bình thường"
|
||||
},
|
||||
"save": {
|
||||
"defaultMessage": "Lưu"
|
||||
},
|
||||
"setting": {
|
||||
"defaultMessage": "Cài đặt"
|
||||
},
|
||||
"settings": {
|
||||
"defaultMessage": "Cài đặt"
|
||||
},
|
||||
"settings.default-site": {
|
||||
"defaultMessage": "Trang web mặc định"
|
||||
},
|
||||
"settings.default-site.404": {
|
||||
"defaultMessage": "Trang 404"
|
||||
},
|
||||
"settings.default-site.444": {
|
||||
"defaultMessage": "Không có phản hồi (444)"
|
||||
},
|
||||
"settings.default-site.congratulations": {
|
||||
"defaultMessage": "Trang chào mừng"
|
||||
},
|
||||
"settings.default-site.description": {
|
||||
"defaultMessage": "Hiển thị gì khi Nginx gặp phải Máy chủ không xác định"
|
||||
},
|
||||
"settings.default-site.html": {
|
||||
"defaultMessage": "HTML tùy chỉnh"
|
||||
},
|
||||
"settings.default-site.html.placeholder": {
|
||||
"defaultMessage": "<!-- Nhập nội dung HTML tùy chỉnh tại đây -->"
|
||||
},
|
||||
"settings.default-site.redirect": {
|
||||
"defaultMessage": "Chuyển hướng"
|
||||
},
|
||||
"setup.preamble": {
|
||||
"defaultMessage": "Bắt đầu bằng cách tạo tài khoản quản trị viên."
|
||||
},
|
||||
"setup.title": {
|
||||
"defaultMessage": "Chào mừng!"
|
||||
},
|
||||
"sign-in": {
|
||||
"defaultMessage": "Đăng nhập"
|
||||
},
|
||||
"ssl-certificate": {
|
||||
"defaultMessage": "Chứng chỉ SSL"
|
||||
},
|
||||
"stream": {
|
||||
"defaultMessage": "Stream"
|
||||
},
|
||||
"stream.forward-host": {
|
||||
"defaultMessage": "Chuyển tiếp Host"
|
||||
},
|
||||
"stream.incoming-port": {
|
||||
"defaultMessage": "Cổng vào"
|
||||
},
|
||||
"streams": {
|
||||
"defaultMessage": "Danh sách các Stream"
|
||||
},
|
||||
"streams.count": {
|
||||
"defaultMessage": "Số Stream {count}"
|
||||
},
|
||||
"streams.tcp": {
|
||||
"defaultMessage": "TCP"
|
||||
},
|
||||
"streams.udp": {
|
||||
"defaultMessage": "UDP"
|
||||
},
|
||||
"test": {
|
||||
"defaultMessage": "Kiểm tra"
|
||||
},
|
||||
"update-available": {
|
||||
"defaultMessage": "Cập nhật khả dụng: {latestVersion}"
|
||||
},
|
||||
"user": {
|
||||
"defaultMessage": "Người dùng"
|
||||
},
|
||||
"user.change-password": {
|
||||
"defaultMessage": "Đổi Mật khẩu"
|
||||
},
|
||||
"user.confirm-password": {
|
||||
"defaultMessage": "Xác nhận Mật khẩu"
|
||||
},
|
||||
"user.current-password": {
|
||||
"defaultMessage": "Mật khẩu hiện tại"
|
||||
},
|
||||
"user.edit-profile": {
|
||||
"defaultMessage": "Chỉnh sửa hồ sơ"
|
||||
},
|
||||
"user.full-name": {
|
||||
"defaultMessage": "Tên"
|
||||
},
|
||||
"user.login-as": {
|
||||
"defaultMessage": "Đăng nhập bằng {name}"
|
||||
},
|
||||
"user.logout": {
|
||||
"defaultMessage": "Đăng xuất"
|
||||
},
|
||||
"user.new-password": {
|
||||
"defaultMessage": "Mật khẩu mới"
|
||||
},
|
||||
"user.nickname": {
|
||||
"defaultMessage": "Tên hiển thị"
|
||||
},
|
||||
"user.set-password": {
|
||||
"defaultMessage": "Đặt Mật khẩu"
|
||||
},
|
||||
"user.set-permissions": {
|
||||
"defaultMessage": "Đặt quyền cho {name}"
|
||||
},
|
||||
"user.switch-dark": {
|
||||
"defaultMessage": "Chuyển sang chế độ tối"
|
||||
},
|
||||
"user.switch-light": {
|
||||
"defaultMessage": "Chuyển sang chế độ sáng"
|
||||
},
|
||||
"username": {
|
||||
"defaultMessage": "Tên người dùng"
|
||||
},
|
||||
"users": {
|
||||
"defaultMessage": "Danh sách người dùng"
|
||||
}
|
||||
}
|
||||
@@ -330,7 +330,7 @@
|
||||
"defaultMessage": "过期时间: {date}"
|
||||
},
|
||||
"footer.github-fork": {
|
||||
"defaultMessage": "在 Github 上复刻 (For) 本项目"
|
||||
"defaultMessage": "在 Github 上复刻 (Fork) 本项目"
|
||||
},
|
||||
"host.flags.block-exploits": {
|
||||
"defaultMessage": "阻止常见攻击"
|
||||
|
||||
@@ -162,7 +162,7 @@ const RedirectionHostModal = EasyModal.create(({ id, visible, remove }: Props) =
|
||||
required
|
||||
{...field}
|
||||
>
|
||||
<option value="auto">Auto</option>
|
||||
<option value="auto"><T id="auto" /></option>
|
||||
<option value="http">http</option>
|
||||
<option value="https">https</option>
|
||||
</select>
|
||||
@@ -224,12 +224,12 @@ const RedirectionHostModal = EasyModal.create(({ id, visible, remove }: Props) =
|
||||
required
|
||||
{...field}
|
||||
>
|
||||
<option value="300">300 Multiple choices</option>
|
||||
<option value="301">301 Moved permanently</option>
|
||||
<option value="302">302 Moved temporarily</option>
|
||||
<option value="303">303 See other</option>
|
||||
<option value="307">307 Temporary redirect</option>
|
||||
<option value="308">308 Permanent redirect</option>
|
||||
<option value="300"><T id="redirection-hosts.http-code.300" /></option>
|
||||
<option value="301"><T id="redirection-hosts.http-code.301" /></option>
|
||||
<option value="302"><T id="redirection-hosts.http-code.302" /></option>
|
||||
<option value="303"><T id="redirection-hosts.http-code.303" /></option>
|
||||
<option value="307"><T id="redirection-hosts.http-code.307" /></option>
|
||||
<option value="308"><T id="redirection-hosts.http-code.308" /></option>
|
||||
</select>
|
||||
{form.errors.forwardHttpCode ? (
|
||||
<div className="invalid-feedback">
|
||||
|
||||
@@ -5,7 +5,7 @@ import { Alert } from "react-bootstrap";
|
||||
import Modal from "react-bootstrap/Modal";
|
||||
import { Button, Loading, SSLCertificateField, SSLOptionsFields } from "src/components";
|
||||
import { useSetStream, useStream } from "src/hooks";
|
||||
import { T } from "src/locale";
|
||||
import { intl, T } from "src/locale";
|
||||
import { validateNumber, validateString } from "src/modules/Validations";
|
||||
import { showObjectSuccess } from "src/notifications";
|
||||
|
||||
@@ -154,7 +154,7 @@ const StreamModal = EasyModal.create(({ id, visible, remove }: Props) => {
|
||||
type="text"
|
||||
className={`form-control ${form.errors.forwardingHost && form.touched.forwardingHost ? "is-invalid" : ""}`}
|
||||
required
|
||||
placeholder="example.com or 10.0.0.1 or 2001:db8:3333:4444:5555:6666:7777:8888"
|
||||
placeholder={intl.formatMessage({ id: "stream.forward-host.placeholder" })}
|
||||
{...field}
|
||||
/>
|
||||
{form.errors.forwardingHost ? (
|
||||
|
||||
@@ -1,10 +1,3 @@
|
||||
.logo {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.helperBtns {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import cn from "classnames";
|
||||
import { Field, Form, Formik } from "formik";
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import Alert from "react-bootstrap/Alert";
|
||||
@@ -43,17 +42,17 @@ export default function Login() {
|
||||
|
||||
return (
|
||||
<Page className="page page-center">
|
||||
<div className={cn("d-none", "d-md-flex", styles.helperBtns)}>
|
||||
<LocalePicker />
|
||||
<ThemeSwitcher />
|
||||
</div>
|
||||
<div className="container container-tight py-4">
|
||||
<div className="text-center mb-4">
|
||||
<div className="d-flex justify-content-between align-items-center mb-4 ps-4 pe-3">
|
||||
<img
|
||||
className={styles.logo}
|
||||
src="/images/logo-text-horizontal-grey.png"
|
||||
alt="Nginx Proxy Manager"
|
||||
/>
|
||||
<div className="d-flex align-items-center gap-1">
|
||||
<LocalePicker />
|
||||
<ThemeSwitcher />
|
||||
</div>
|
||||
</div>
|
||||
<div className="card card-md">
|
||||
<div className="card-body">
|
||||
@@ -103,7 +102,7 @@ export default function Login() {
|
||||
required
|
||||
maxLength={255}
|
||||
className={`form-control ${form.errors.password && form.touched.password ? " is-invalid" : ""}`}
|
||||
placeholder="Password"
|
||||
placeholder={intl.formatMessage({ id: "password" })}
|
||||
/>
|
||||
<div className="invalid-feedback">{form.errors.password}</div>
|
||||
</label>
|
||||
|
||||
@@ -5,27 +5,37 @@ import tsconfigPaths from "vite-tsconfig-paths";
|
||||
import "vitest/config";
|
||||
import { execFile } from "node:child_process";
|
||||
|
||||
const runLocaleScripts = () => {
|
||||
execFile("yarn", ["locale-compile"], (error, stdout, _stderr) => {
|
||||
if (error) {
|
||||
throw error;
|
||||
}
|
||||
console.log(stdout);
|
||||
execFile("yarn", ["locale-sort"], (error, stdout, _stderr) => {
|
||||
if (error) {
|
||||
throw error;
|
||||
}
|
||||
console.log(stdout);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
// https://vitejs.dev/config/
|
||||
export default defineConfig({
|
||||
plugins: [
|
||||
{
|
||||
name: "trigger-script-on-reload",
|
||||
name: 'run-on-start',
|
||||
configureServer(_server) {
|
||||
runLocaleScripts();
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "trigger-on-reload",
|
||||
configureServer(server) {
|
||||
server.watcher.on("change", (file) => {
|
||||
if (file.includes("locale/src")) {
|
||||
console.log(`File changed: ${file}, running locale-compile script...`);
|
||||
execFile("yarn", ["locale-compile"], (error, stdout, _stderr) => {
|
||||
if (error) {
|
||||
throw error;
|
||||
}
|
||||
console.log(stdout);
|
||||
execFile("yarn", ["locale-sort"], (error, stdout, _stderr) => {
|
||||
if (error) {
|
||||
throw error;
|
||||
}
|
||||
console.log(stdout);
|
||||
});
|
||||
});
|
||||
console.log(`File changed: ${file}, running locale scripts...`);
|
||||
runLocaleScripts();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
@@ -16,7 +16,7 @@ if hash docker 2>/dev/null; then
|
||||
-e NODE_OPTIONS=--openssl-legacy-provider \
|
||||
-v "$(pwd)/frontend:/app/frontend" \
|
||||
-w /app/frontend "${DOCKER_IMAGE}" \
|
||||
sh -c "yarn install && yarn lint && yarn vitest run && yarn build && chown -R $(id -u):$(id -g) /app/frontend"
|
||||
sh -c "yarn install && yarn lint && yarn locale-compile && yarn vitest run && yarn build && chown -R $(id -u):$(id -g) /app/frontend"
|
||||
|
||||
echo -e "${BLUE}❯ ${GREEN}Building Frontend Complete${RESET}"
|
||||
else
|
||||
|
||||
@@ -17,4 +17,12 @@ describe('Basic API checks', () => {
|
||||
expect(data.openapi).to.be.equal('3.1.0');
|
||||
});
|
||||
});
|
||||
|
||||
it('Should return a valid payload for version check', () => {
|
||||
cy.task('backendApiGet', {
|
||||
path: `/api/version/check?ts=${Date.now()}`,
|
||||
}).then((data) => {
|
||||
cy.validateSwaggerSchema('get', 200, '/version/check', data);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,21 +1,7 @@
|
||||
/// <reference types="cypress" />
|
||||
|
||||
const SWAGGER_SCHEMA_FILENAME = 'results/swagger-schema.json';
|
||||
|
||||
describe('Swagger Schema Linting', () => {
|
||||
it('Should be a completely valid schema', () => {
|
||||
// Save the schema to a file and lint it
|
||||
cy.request('/api/schema')
|
||||
.then((response) => {
|
||||
const fileContent = response.body;
|
||||
cy.writeFile(SWAGGER_SCHEMA_FILENAME, fileContent);
|
||||
})
|
||||
.then(() => {
|
||||
cy.exec(`yarn swagger-lint '${SWAGGER_SCHEMA_FILENAME}'`)
|
||||
.then((result) => {
|
||||
cy.log("Swagger Vacuum Results:\n", result.stdout);
|
||||
expect(result.code).to.eq(0);
|
||||
});
|
||||
});
|
||||
cy.validateSwaggerFile('/api/schema', 'results/swagger-schema.json');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
const { SwaggerValidation } = require('@jc21/cypress-swagger-validation');
|
||||
const chalk = require('chalk');
|
||||
|
||||
module.exports = (on, config) => {
|
||||
// Replace swaggerBase config var wildcard
|
||||
@@ -11,7 +12,7 @@ module.exports = (on, config) => {
|
||||
on('task', require('./backendApi/task')(config));
|
||||
on('task', {
|
||||
log(message) {
|
||||
console.log(message);
|
||||
console.log(`${chalk.cyan.bold('[')}${chalk.blue.bold('LOG')}${chalk.cyan.bold(']')} ${chalk.red.bold(message)}`);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -22,7 +22,25 @@ Cypress.Commands.add('randomString', (length) => {
|
||||
});
|
||||
|
||||
/**
|
||||
* Check the swagger schema:
|
||||
* Check the swagger schema file:
|
||||
*
|
||||
* @param {string} url
|
||||
* @param {string} savePath
|
||||
*/
|
||||
Cypress.Commands.add("validateSwaggerFile", (url, savePath) => {
|
||||
cy.task('log', `validateSwaggerFile: ${url} -- ${savePath}`)
|
||||
.then(() => {
|
||||
return cy
|
||||
.request(url)
|
||||
.then((response) => cy.writeFile(savePath, response.body, { log: false }))
|
||||
.then(() => cy.exec(`yarn swagger-lint '${savePath}'`, { failOnNonZeroExit: false }))
|
||||
.then((result) => cy.task('log', `Swagger Vacuum Results:\n${result.stdout || ''}`)
|
||||
.then(() => expect(result.code).to.eq(0)));
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Check the swagger schema for a specific endpoint:
|
||||
*
|
||||
* @param {string} method API Method in swagger doc, "get", "put", "post", "delete"
|
||||
* @param {integer} code Swagger doc endpoint response code, exactly as defined in swagger doc
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
"@jc21/cypress-swagger-validation": "^0.3.2",
|
||||
"@quobix/vacuum": "^0.19.4",
|
||||
"axios": "^1.13.1",
|
||||
"chalk": "^4.1.0",
|
||||
"cypress": "^14.0.1",
|
||||
"cypress-multi-reporters": "^2.0.5",
|
||||
"cypress-wait-until": "^3.0.2",
|
||||
|
||||
@@ -247,11 +247,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47"
|
||||
integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg==
|
||||
|
||||
"@types/tmp@^0.2.3":
|
||||
version "0.2.6"
|
||||
resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.6.tgz#d785ee90c52d7cc020e249c948c36f7b32d1e217"
|
||||
integrity sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==
|
||||
|
||||
"@types/yauzl@^2.9.1":
|
||||
version "2.10.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599"
|
||||
@@ -405,6 +400,11 @@ astral-regex@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
|
||||
integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
|
||||
|
||||
async@^3.2.0:
|
||||
version "3.2.6"
|
||||
resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce"
|
||||
integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==
|
||||
|
||||
asynckit@^0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
||||
@@ -557,6 +557,11 @@ charenc@0.0.2:
|
||||
resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
|
||||
integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==
|
||||
|
||||
check-more-types@^2.24.0:
|
||||
version "2.24.0"
|
||||
resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600"
|
||||
integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==
|
||||
|
||||
chokidar@^4.0.1:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30"
|
||||
@@ -689,22 +694,22 @@ cypress-wait-until@^3.0.2:
|
||||
resolved "https://registry.yarnpkg.com/cypress-wait-until/-/cypress-wait-until-3.0.2.tgz#c90dddfa4c46a2c422f5b91d486531c560bae46e"
|
||||
integrity sha512-iemies796dD5CgjG5kV0MnpEmKSH+s7O83ZoJLVzuVbZmm4lheMsZqAVT73hlMx4QlkwhxbyUzhOBUOZwoOe0w==
|
||||
|
||||
cypress@^15.5.0:
|
||||
version "15.5.0"
|
||||
resolved "https://registry.yarnpkg.com/cypress/-/cypress-15.5.0.tgz#039c8549f623957a14e57adee46dbfabaabac741"
|
||||
integrity sha512-7jXBsh5hTfjxr9QQONC2IbdTj0nxSyU8x4eiarMZBzXzCj3pedKviUx8JnLcE4vL8e0TsOzp70WSLRORjEssRA==
|
||||
cypress@^14.0.1:
|
||||
version "14.5.4"
|
||||
resolved "https://registry.yarnpkg.com/cypress/-/cypress-14.5.4.tgz#d821fbb6220c3328e7413acc7724b75319c9e64d"
|
||||
integrity sha512-0Dhm4qc9VatOcI1GiFGVt8osgpPdqJLHzRwcAB5MSD/CAAts3oybvPUPawHyvJZUd8osADqZe/xzMsZ8sDTjXw==
|
||||
dependencies:
|
||||
"@cypress/request" "^3.0.9"
|
||||
"@cypress/xvfb" "^1.2.4"
|
||||
"@types/sinonjs__fake-timers" "8.1.1"
|
||||
"@types/sizzle" "^2.3.2"
|
||||
"@types/tmp" "^0.2.3"
|
||||
arch "^2.2.0"
|
||||
blob-util "^2.0.2"
|
||||
bluebird "^3.7.2"
|
||||
buffer "^5.7.1"
|
||||
cachedir "^2.3.0"
|
||||
chalk "^4.1.0"
|
||||
check-more-types "^2.24.0"
|
||||
ci-info "^4.1.0"
|
||||
cli-cursor "^3.1.0"
|
||||
cli-table3 "0.6.1"
|
||||
@@ -719,8 +724,10 @@ cypress@^15.5.0:
|
||||
extract-zip "2.0.1"
|
||||
figures "^3.2.0"
|
||||
fs-extra "^9.1.0"
|
||||
getos "^3.2.1"
|
||||
hasha "5.2.2"
|
||||
is-installed-globally "~0.4.0"
|
||||
lazy-ass "^1.6.0"
|
||||
listr2 "^3.8.3"
|
||||
lodash "^4.17.21"
|
||||
log-symbols "^4.0.0"
|
||||
@@ -732,8 +739,7 @@ cypress@^15.5.0:
|
||||
request-progress "^3.0.0"
|
||||
semver "^7.7.1"
|
||||
supports-color "^8.1.1"
|
||||
systeminformation "5.27.7"
|
||||
tmp "~0.2.4"
|
||||
tmp "~0.2.3"
|
||||
tree-kill "1.2.2"
|
||||
untildify "^4.0.0"
|
||||
yauzl "^2.10.0"
|
||||
@@ -1279,6 +1285,13 @@ get-stream@^5.0.0, get-stream@^5.1.0:
|
||||
dependencies:
|
||||
pump "^3.0.0"
|
||||
|
||||
getos@^3.2.1:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5"
|
||||
integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==
|
||||
dependencies:
|
||||
async "^3.2.0"
|
||||
|
||||
getpass@^0.1.1:
|
||||
version "0.1.7"
|
||||
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
|
||||
@@ -1582,6 +1595,11 @@ keyv@^4.5.4:
|
||||
dependencies:
|
||||
json-buffer "3.0.1"
|
||||
|
||||
lazy-ass@^1.6.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513"
|
||||
integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==
|
||||
|
||||
levn@^0.4.1:
|
||||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
|
||||
@@ -2281,11 +2299,6 @@ supports-color@^8.1.1:
|
||||
dependencies:
|
||||
has-flag "^4.0.0"
|
||||
|
||||
systeminformation@5.27.7:
|
||||
version "5.27.7"
|
||||
resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-5.27.7.tgz#4dc9d436419948cd5e5f076779a1298220d19a72"
|
||||
integrity sha512-saaqOoVEEFaux4v0K8Q7caiauRwjXC4XbD2eH60dxHXbpKxQ8kH9Rf7Jh+nryKpOUSEFxtCdBlSUx0/lO6rwRg==
|
||||
|
||||
tar@^6.1.11:
|
||||
version "6.2.1"
|
||||
resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a"
|
||||
@@ -2320,7 +2333,7 @@ tldts@^6.1.32:
|
||||
dependencies:
|
||||
tldts-core "^6.1.86"
|
||||
|
||||
tmp@~0.2.4:
|
||||
tmp@~0.2.3:
|
||||
version "0.2.5"
|
||||
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8"
|
||||
integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==
|
||||
|
||||
Reference in New Issue
Block a user