Skip to content

Commit 8aa46c1

Browse files
authored
Merge pull request #4921 from NginxProxyManager/Firfr-chinese
Add Chinese language 添加中文
2 parents 221c3ed + b26db50 commit 8aa46c1

File tree

15 files changed

+936
-5
lines changed

15 files changed

+936
-5
lines changed

frontend/check-locales.cjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const allLocales = [
1111
["es", "es-ES"],
1212
["de", "de-DE"],
1313
["ru", "ru-RU"],
14+
["zh", "zh-CN"],
1415
];
1516

1617
const ignoreUnused = [

frontend/src/locale/IntlProvider.tsx

100644100755
Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import { createIntl, createIntlCache } from "react-intl";
2-
import langEn from "./lang/en.json";
32
import langDe from "./lang/de.json";
3+
import langEn from "./lang/en.json";
44
import langEs from "./lang/es.json";
55
import langJa from "./lang/ja.json";
6-
import langRu from "./lang/ru.json";
76
import langList from "./lang/lang-list.json";
7+
import langRu from "./lang/ru.json";
8+
import langZh from "./lang/zh.json";
89

910
// first item of each array should be the language code,
1011
// not the country code
@@ -15,6 +16,7 @@ const localeOptions = [
1516
["es", "es-ES"],
1617
["ja", "ja-JP"],
1718
["ru", "ru-RU"],
19+
["zh", "zh-CN"],
1820
];
1921

2022
const loadMessages = (locale?: string): typeof langList & typeof langEn => {
@@ -28,6 +30,8 @@ const loadMessages = (locale?: string): typeof langList & typeof langEn => {
2830
return Object.assign({}, langList, langEn, langJa);
2931
case "ru":
3032
return Object.assign({}, langList, langEn, langRu);
33+
case "zh":
34+
return Object.assign({}, langList, langEn, langZh);
3135
default:
3236
return Object.assign({}, langList, langEn);
3337
}
@@ -47,6 +51,9 @@ const getFlagCodeForLocale = (locale?: string) => {
4751
case "ru-RU":
4852
case "ru":
4953
return "RU";
54+
case "zh":
55+
case "zh-CN":
56+
return "CN";
5057
default:
5158
return "EN";
5259
}

frontend/src/locale/lang/de.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,4 +213,4 @@
213213
"user.switch-light": "Zum Light Mode wechslen",
214214
"username": "Benutzername",
215215
"users": "Benutzer"
216-
}
216+
}

frontend/src/locale/lang/lang-list.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
"locale-en-US": "English",
44
"locale-es-ES": "Español",
55
"locale-ja-JP": "日本語",
6-
"locale-ru-RU": "Русский"
6+
"locale-ru-RU": "Русский",
7+
"locale-zh-CN": "中文"
78
}

frontend/src/locale/lang/zh.json

Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,216 @@
1+
{
2+
"access-list": "通信规则",
3+
"access-list.access-count": "{count} 条规则",
4+
"access-list.auth-count": "{count} 个用户",
5+
"access-list.help-rules-last": "当至少存在1条规则时,此拒绝所有规则将被添加到最后",
6+
"access-list.help.rules-order": " 允许 (allow) 和禁止 (deny) 规则将按照它们定义的顺序执行。",
7+
"access-list.pass-auth": "将认证传递给上游",
8+
"access-list.public": "公开可访问",
9+
"access-list.public.subtitle": "无需基本认证",
10+
"access-list.satisfy-any": "满足任意条件",
11+
"access-list.subtitle": "{users} 个用户, {rules} 条规则 - 创建时间: {date}",
12+
"access-lists": "通信规则",
13+
"action.add": "添加",
14+
"action.add-location": "添加路径规则(Location)",
15+
"action.close": "关闭",
16+
"action.delete": "删除",
17+
"action.disable": "禁用",
18+
"action.download": "下载",
19+
"action.edit": "编辑",
20+
"action.enable": "启用",
21+
"action.permissions": "权限",
22+
"action.renew": "续期",
23+
"action.view-details": "查看详情",
24+
"auditlogs": "审计日志",
25+
"cancel": "取消",
26+
"certificate": "证书",
27+
"certificate.custom-certificate": "证书",
28+
"certificate.custom-certificate-key": "证书密钥",
29+
"certificate.custom-intermediate": "中间证书",
30+
"certificate.in-use": "使用中",
31+
"certificate.none.subtitle": "未分配证书",
32+
"certificate.none.subtitle.for-http": "此主机将不使用 HTTPS",
33+
"certificate.none.title": "",
34+
"certificate.not-in-use": "未使用",
35+
"certificate.renew": "续期证书",
36+
"certificates": "证书列表",
37+
"certificates.custom": "自定义证书",
38+
"certificates.custom.warning": "不支持受密码保护的密钥文件。",
39+
"certificates.dns.credentials": "凭据文件内容",
40+
"certificates.dns.credentials-note": "此插件需要一个包含 API 令牌或提供商其他凭证的配置文件",
41+
"certificates.dns.credentials-warning": "此数据将以明文形式存储在数据库和文件中!",
42+
"certificates.dns.propagation-seconds": "传播时间 (秒)",
43+
"certificates.dns.propagation-seconds-note": "留空以使用插件默认值。等待DNS传播的秒数。",
44+
"certificates.dns.provider": "DNS 提供商",
45+
"certificates.dns.warning": "本节需要您具备一些关于 Certbot 及其 DNS 插件的知识,请参阅相应插件的官方文档。",
46+
"certificates.http.reachability-404": "在此域名下找到了一个服务器,但它似乎不是 Nginx 代理管理器。请确保您的域名指向 NPM 实例运行的 IP 地址。",
47+
"certificates.http.reachability-failed-to-check": "由于与site24x7.com通信错误,无法检查可达性。",
48+
"certificates.http.reachability-not-resolved": "此域名下没有可用的服务器。请确保您的域名存在并指向NPM实例运行的 IP 地址,如有必要,请在路由器中转发 80 端口。",
49+
"certificates.http.reachability-ok": "您的服务器可以访问,应该可以创建证书。",
50+
"certificates.http.reachability-other": "在此域名下找到了一个服务器,但它返回了意外的状态码 {code}。它是 NPM 服务器吗?请确保您的域名指向NPM实例运行的 IP 地址。",
51+
"certificates.http.reachability-wrong-data": "在此域名下找到了一个服务器,但它返回了意外的数据。它是 NPM 服务器吗?请确保您的域名指向 NPM 实例运行的 IP 地址。",
52+
"certificates.http.test-results": "测试结果",
53+
"certificates.http.warning": "这些域名必须配置为指向本设备。",
54+
"certificates.request.subtitle": "使用 Let's Encrypt",
55+
"certificates.request.title": "申请新证书",
56+
"column.access": "访问",
57+
"column.authorization": "授权",
58+
"column.authorizations": "授权列表",
59+
"column.custom-locations": "自定义路径规则 (Locations)",
60+
"column.destination": "目标",
61+
"column.details": "详情",
62+
"column.email": "邮箱",
63+
"column.event": "事件",
64+
"column.expires": "过期时间",
65+
"column.http-code": "访问",
66+
"column.incoming-port": "入站端口",
67+
"column.name": "名称",
68+
"column.protocol": "协议",
69+
"column.provider": "提供商",
70+
"column.roles": "角色",
71+
"column.rules": "规则",
72+
"column.satisfy": "满足",
73+
"column.satisfy-all": "全部",
74+
"column.satisfy-any": "任意",
75+
"column.scheme": "协议",
76+
"column.source": "来源",
77+
"column.ssl": "SSL",
78+
"column.status": "状态",
79+
"created-on": "创建时间: {date}",
80+
"dashboard": "仪表板",
81+
"dead-host": "错误页面",
82+
"dead-hosts": "错误页面列表",
83+
"dead-hosts.count": "{count} 个错误页面列表",
84+
"disabled": "已禁用",
85+
"domain-names": "域名",
86+
"domain-names.max": "{count} 个最多域名数量",
87+
"domain-names.placeholder": "开始输入以添加域名...",
88+
"domain-names.wildcards-not-permitted": "此类型不允许使用通配符",
89+
"domain-names.wildcards-not-supported": "此 CA 不支持通配符",
90+
"domains.force-ssl": "强制 SSL",
91+
"domains.hsts-enabled": "HSTS 已启用",
92+
"domains.hsts-subdomains": "HSTS 子域名",
93+
"domains.http2-support": "HTTP/2 支持",
94+
"domains.use-dns": "使用DNS验证",
95+
"email-address": "邮箱地址",
96+
"empty-search": "未找到结果",
97+
"empty-subtitle": "为什么不由您来创建一个呢?",
98+
"enabled": "已启用",
99+
"error.access.at-least-one": "需要至少一个授权或访问规则",
100+
"error.access.duplicate-usernames": "授权用户名必须唯一",
101+
"error.invalid-auth": "无效的邮箱或密码",
102+
"error.invalid-domain": "无效的域名: {domain}",
103+
"error.invalid-email": "无效的邮箱地址",
104+
"error.max-character-length": "最大长度为 {max} 个字符",
105+
"error.max-domains": "域名过多,最多为 {max} 个",
106+
"error.maximum": "最大值为 {max}",
107+
"error.min-character-length": "最小长度为 {min} 个字符",
108+
"error.minimum": "最小值为 {min}",
109+
"error.passwords-must-match": "密码必须匹配",
110+
"error.required": "此项为必填项",
111+
"expires.on": "过期时间: {date}",
112+
"footer.github-fork": "在 Github 上复刻 (For) 本项目",
113+
"host.flags.block-exploits": "阻止常见攻击",
114+
"host.flags.cache-assets": "缓存资源",
115+
"host.flags.preserve-path": "保留路径",
116+
"host.flags.protocols": "协议",
117+
"host.flags.websockets-upgrade": "Websockets 支持",
118+
"host.forward-port": "转发端口",
119+
"host.forward-scheme": "协议",
120+
"hosts": "主机列表",
121+
"http-only": "仅 HTTP",
122+
"lets-encrypt": "Let's Encrypt",
123+
"lets-encrypt-via-dns": "Let's Encrypt DNS 验证",
124+
"lets-encrypt-via-http": "Let's Encrypt HTTP 验证",
125+
"loading": "加载中···",
126+
"login.title": "登录您的账户",
127+
"nginx-config.label": "自定义 Nginx 配置",
128+
"nginx-config.placeholder": "# 在此输入您的自定义 Nginx 配置,风险自负!",
129+
"no-permission-error": "您无权查看此内容。",
130+
"notfound.action": "返回首页",
131+
"notfound.content": "很抱歉,您要查找的页面未找到",
132+
"notfound.title": "糟糕...您刚刚找到了一个错误页面",
133+
"notification.error": "错误",
134+
"notification.object-deleted": "{object} 已被删除",
135+
"notification.object-disabled": "{object} 已被禁用",
136+
"notification.object-enabled": "{object} 已被启用",
137+
"notification.object-renewed": "{object} 已续期",
138+
"notification.object-saved": "{object} 已保存",
139+
"notification.success": "成功",
140+
"object.actions-title": "{object} #{id}",
141+
"object.add": "添加 {object}",
142+
"object.delete": "删除 {object}",
143+
"object.delete.content": "您确定要删除 {object} 吗?",
144+
"object.edit": "编辑 {object}",
145+
"object.empty": "没有 {objects}",
146+
"object.event.created": "已创建 {object}",
147+
"object.event.deleted": "已删除 {object}",
148+
"object.event.disabled": "已禁用 {object}",
149+
"object.event.enabled": "已启用 {object}",
150+
"object.event.renewed": "已续期 {object}",
151+
"object.event.updated": "已更新 {object}",
152+
"offline": "离线",
153+
"online": "在线",
154+
"options": "选项",
155+
"password": "密码",
156+
"password.generate": "生成随机密码",
157+
"password.hide": "隐藏密码",
158+
"password.show": "显示密码",
159+
"permissions.hidden": "隐藏",
160+
"permissions.manage": "管理",
161+
"permissions.view": "仅查看",
162+
"permissions.visibility.all": "所有项目",
163+
"permissions.visibility.title": "项目可见性",
164+
"permissions.visibility.user": "仅创建的项目",
165+
"proxy-host": "代理服务",
166+
"proxy-host.forward-host": "转发主机名 / IP",
167+
"proxy-hosts": "代理服务列表",
168+
"proxy-hosts.count": "{count} 个代理服务",
169+
"public": "公开",
170+
"redirection-host": "重定向主机",
171+
"redirection-host.forward-domain": "转发域名",
172+
"redirection-host.forward-http-code": "HTTP 状态码",
173+
"redirection-hosts": "重定向主机列表",
174+
"redirection-hosts.count": "{count} 个重定向主机",
175+
"role.admin": "管理员",
176+
"role.standard-user": "标准用户",
177+
"save": "保存",
178+
"setting": "设置",
179+
"settings": "设置列表",
180+
"settings.default-site": "默认站点",
181+
"settings.default-site.404": "错误页面",
182+
"settings.default-site.444": "无响应 (444)",
183+
"settings.default-site.congratulations": "欢迎页面",
184+
"settings.default-site.description": "当 Nginx 遇到未知主机时显示什么",
185+
"settings.default-site.html": "自定义 HTML",
186+
"settings.default-site.html.placeholder": "<!-- 在此输入您的自定义 HTML 内容 -->",
187+
"settings.default-site.redirect": "重定向",
188+
"setup.preamble": "通过创建您的管理员账户开始使用。",
189+
"setup.title": "欢迎!",
190+
"sign-in": "登录",
191+
"ssl-certificate": "SSL 证书",
192+
"stream": "端口转发",
193+
"stream.forward-host": "转发主机",
194+
"stream.incoming-port": "入站端口",
195+
"streams": "端口转发列表",
196+
"streams.count": "{count} 个端口转发",
197+
"streams.tcp": "TCP",
198+
"streams.udp": "UDP",
199+
"test": "测试",
200+
"user": "用户",
201+
"user.change-password": "修改密码",
202+
"user.confirm-password": "确认密码",
203+
"user.current-password": "当前密码",
204+
"user.edit-profile": "编辑资料",
205+
"user.full-name": "全名",
206+
"user.login-as": "登录用户 {name}",
207+
"user.logout": "退出登录",
208+
"user.new-password": "新密码",
209+
"user.nickname": "昵称",
210+
"user.set-password": "设置密码",
211+
"user.set-permissions": "为用户 {name} 设置权限",
212+
"user.switch-dark": "切换到深色模式",
213+
"user.switch-light": "切换到浅色模式",
214+
"username": "用户名",
215+
"users": "用户列表"
216+
}

frontend/src/locale/src/HelpDoc/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import * as de from "./de/index";
22
import * as en from "./en/index";
33
import * as ja from "./ja/index";
4+
import * as zh from "./zh/index";
45

5-
const items: any = { en, de, ja };
6+
const items: any = { en, de, ja, zh };
67

78
const fallbackLang = "en";
89

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
## 什么是通信规则?
2+
3+
通信规则提供了一个特定客户IP地址的黑名单或白名单,以及通过基本HTTP认证对代理服务的认证。
4+
5+
你可以为一个通信规则配置多个客户规则、用户名和密码,然后将其应用于代理服务。
6+
7+
这对那些没有内置认证机制的转发网络服务或你想保护其免受未知客户的访问是最有用的。
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
## 证书帮助
2+
3+
### HTTP 证书
4+
5+
HTTP 验证的证书表示 Let's Encrypt 服务器将尝试通过 HTTP(而非 HTTPS!)访问您的域名,如果成功,它们将为您颁发证书。
6+
7+
使用此方法时,您必须为您的域名创建一个可通过 HTTP 访问并指向此 Nginx 安装的 代理主机。在获得证书后,您可以修改该 代理主机,使其也使用此证书处理 HTTPS 连接。然而,为了证书能够续期,该 代理主机 仍需配置为支持 HTTP 访问。
8+
9+
此过程_不支持_通配符域名。
10+
11+
### DNS 证书
12+
13+
DNS 验证的证书要求您使用一个 DNS 服务商插件。该 DNS 服务商将用于在您的域名下创建临时记录,随后 Let's Encrypt 将查询这些记录以确认您是域名所有者,如果成功,它们将为您颁发证书。
14+
15+
请求此类证书前,您无需预先创建 代理主机,也无需将您的 代理主机 配置为支持 HTTP 访问。
16+
17+
此过程_支持_通配符域名。
18+
19+
### 自定义证书
20+
21+
使用此选项上传您自己的 SSL 证书,该证书由您自己的证书颁发机构提供。
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
## 什么是错误页面?
2+
3+
错误页面是一个简单的主机设置,显示错误页面。
4+
5+
当你的域名被列入搜索引擎,而你想提供一个更好的错误页面或特别是告诉搜索索引者域名页面不再存在时,这可能是有用的。
6+
7+
拥有这种主机的另一个好处是可以跟踪点击它的日志并查看访问来源。
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
## 什么是代理服务?
2+
3+
代理服务是你想转发网络应用的主机。
4+
5+
代理服务可以为没有SSL服务的网络应用提供SSL服务(可选)。
6+
7+
代理服务是Nginx代理管理器的最常见用途之一。

0 commit comments

Comments
 (0)