From 66aac3eb3e6d7d81d8e3b3834e1851c69c44bc2f Mon Sep 17 00:00:00 2001 From: firfe Date: Tue, 11 Nov 2025 23:56:26 +0800 Subject: [PATCH 1/4] =?UTF-8?q?Add=20Chinese=20=E4=B8=AD=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/locale/IntlProvider.tsx | 11 +- frontend/src/locale/lang/de.json | 2 +- frontend/src/locale/lang/lang-list.json | 3 +- frontend/src/locale/lang/zh.json | 215 ++++++ .../src/locale/src/HelpDoc/zh/AccessLists.md | 7 + .../src/locale/src/HelpDoc/zh/Certificates.md | 21 + .../src/locale/src/HelpDoc/zh/DeadHosts.md | 7 + .../src/locale/src/HelpDoc/zh/ProxyHosts.md | 7 + .../locale/src/HelpDoc/zh/RedirectionHosts.md | 5 + frontend/src/locale/src/HelpDoc/zh/Streams.md | 5 + frontend/src/locale/src/HelpDoc/zh/index.ts | 6 + frontend/src/locale/src/lang-list.json | 3 + frontend/src/locale/src/zh.json | 641 ++++++++++++++++++ 13 files changed, 929 insertions(+), 4 deletions(-) mode change 100644 => 100755 frontend/src/locale/IntlProvider.tsx create mode 100755 frontend/src/locale/lang/zh.json create mode 100755 frontend/src/locale/src/HelpDoc/zh/AccessLists.md create mode 100755 frontend/src/locale/src/HelpDoc/zh/Certificates.md create mode 100755 frontend/src/locale/src/HelpDoc/zh/DeadHosts.md create mode 100755 frontend/src/locale/src/HelpDoc/zh/ProxyHosts.md create mode 100755 frontend/src/locale/src/HelpDoc/zh/RedirectionHosts.md create mode 100755 frontend/src/locale/src/HelpDoc/zh/Streams.md create mode 100755 frontend/src/locale/src/HelpDoc/zh/index.ts mode change 100644 => 100755 frontend/src/locale/src/lang-list.json create mode 100755 frontend/src/locale/src/zh.json diff --git a/frontend/src/locale/IntlProvider.tsx b/frontend/src/locale/IntlProvider.tsx old mode 100644 new mode 100755 index 1162a991..14657fcb --- a/frontend/src/locale/IntlProvider.tsx +++ b/frontend/src/locale/IntlProvider.tsx @@ -1,10 +1,11 @@ import { createIntl, createIntlCache } from "react-intl"; -import langEn from "./lang/en.json"; import langDe from "./lang/de.json"; +import langEn from "./lang/en.json"; import langEs from "./lang/es.json"; import langJa from "./lang/ja.json"; -import langRu from "./lang/ru.json"; import langList from "./lang/lang-list.json"; +import langRu from "./lang/ru.json"; +import langZh from "./lang/zh.json"; // first item of each array should be the language code, // not the country code @@ -15,6 +16,7 @@ const localeOptions = [ ["es", "es-ES"], ["ja", "ja-JP"], ["ru", "ru-RU"], + ["zh", "zh-CN"], ]; const loadMessages = (locale?: string): typeof langList & typeof langEn => { @@ -28,6 +30,8 @@ const loadMessages = (locale?: string): typeof langList & typeof langEn => { return Object.assign({}, langList, langEn, langJa); case "ru": return Object.assign({}, langList, langEn, langRu); + case "zh": + return Object.assign({}, langList, langEn, langZh); default: return Object.assign({}, langList, langEn); } @@ -47,6 +51,9 @@ const getFlagCodeForLocale = (locale?: string) => { case "ru-RU": case "ru": return "RU"; + case "zh": + case "zh-CN": + return "CN"; default: return "EN"; } diff --git a/frontend/src/locale/lang/de.json b/frontend/src/locale/lang/de.json index 316708b8..b6b80eab 100644 --- a/frontend/src/locale/lang/de.json +++ b/frontend/src/locale/lang/de.json @@ -213,4 +213,4 @@ "user.switch-light": "Zum Light Mode wechslen", "username": "Benutzername", "users": "Benutzer" -} +} \ No newline at end of file diff --git a/frontend/src/locale/lang/lang-list.json b/frontend/src/locale/lang/lang-list.json index 6338528b..7d9bc214 100644 --- a/frontend/src/locale/lang/lang-list.json +++ b/frontend/src/locale/lang/lang-list.json @@ -3,5 +3,6 @@ "locale-en-US": "English", "locale-es-ES": "Español", "locale-ja-JP": "日本語", - "locale-ru-RU": "Русский" + "locale-ru-RU": "Русский", + "locale-zh-CN": "中文" } \ No newline at end of file diff --git a/frontend/src/locale/lang/zh.json b/frontend/src/locale/lang/zh.json new file mode 100755 index 00000000..61763aa4 --- /dev/null +++ b/frontend/src/locale/lang/zh.json @@ -0,0 +1,215 @@ +{ + "access-list": "通信规则", + "access-list.access-count": "{count} 条规则", + "access-list.auth-count": "{count} 个用户", + "access-list.help-rules-last": "当至少存在1条规则时,此拒绝所有规则将被添加到最后", + "access-list.help.rules-order": " 允许 (allow) 和禁止 (deny) 规则将按照它们定义的顺序执行。", + "access-list.pass-auth": "将认证传递给上游", + "access-list.public": "公开可访问", + "access-list.public.subtitle": "无需基本认证", + "access-list.satisfy-any": "满足任意条件", + "access-list.subtitle": "{users} 个用户, {rules} 条规则 - 创建时间: {date}", + "access-lists": "通信规则", + "action.add": "添加", + "action.add-location": "添加路径规则(Location)", + "action.close": "关闭", + "action.delete": "删除", + "action.disable": "禁用", + "action.download": "下载", + "action.edit": "编辑", + "action.enable": "启用", + "action.permissions": "权限", + "action.renew": "续期", + "action.view-details": "查看详情", + "auditlogs": "审计日志", + "cancel": "取消", + "certificate": "证书", + "certificate.custom-certificate": "证书", + "certificate.custom-certificate-key": "证书密钥", + "certificate.custom-intermediate": "中间证书", + "certificate.in-use": "使用中", + "certificate.none.subtitle": "未分配证书", + "certificate.none.subtitle.for-http": "此主机将不使用 HTTPS", + "certificate.none.title": "无", + "certificate.not-in-use": "未使用", + "certificate.renew": "续期证书", + "certificates": "证书列表", + "certificates.custom": "自定义证书", + "certificates.custom.warning": "不支持受密码保护的密钥文件。", + "certificates.dns.credentials": "凭据文件内容", + "certificates.dns.credentials-note": "此插件需要一个包含 API 令牌或提供商其他凭证的配置文件", + "certificates.dns.credentials-warning": "此数据将以明文形式存储在数据库和文件中!", + "certificates.dns.propagation-seconds": "传播时间 (秒)", + "certificates.dns.propagation-seconds-note": "留空以使用插件默认值。等待DNS传播的秒数。", + "certificates.dns.provider": "DNS 提供商", + "certificates.dns.warning": "本节需要您具备一些关于 Certbot 及其 DNS 插件的知识,请参阅相应插件的官方文档。", + "certificates.http.reachability-404": "在此域名下找到了一个服务器,但它似乎不是 Nginx 代理管理器。请确保您的域名指向 NPM 实例运行的 IP 地址。", + "certificates.http.reachability-failed-to-check": "由于与site24x7.com通信错误,无法检查可达性。", + "certificates.http.reachability-not-resolved": "此域名下没有可用的服务器。请确保您的域名存在并指向NPM实例运行的 IP 地址,如有必要,请在路由器中转发 80 端口。", + "certificates.http.reachability-ok": "您的服务器可以访问,应该可以创建证书。", + "certificates.http.reachability-other": "在此域名下找到了一个服务器,但它返回了意外的状态码 {code}。它是 NPM 服务器吗?请确保您的域名指向NPM实例运行的 IP 地址。", + "certificates.http.reachability-wrong-data": "在此域名下找到了一个服务器,但它返回了意外的数据。它是 NPM 服务器吗?请确保您的域名指向 NPM 实例运行的 IP 地址。", + "certificates.http.test-results": "测试结果", + "certificates.http.warning": "这些域名必须配置为指向本设备。", + "certificates.request.subtitle": "使用 Let's Encrypt", + "certificates.request.title": "申请新证书", + "column.access": "访问", + "column.authorization": "授权", + "column.authorizations": "授权列表", + "column.custom-locations": "自定义路径规则 (Locations)", + "column.destination": "目标", + "column.details": "详情", + "column.email": "邮箱", + "column.event": "事件", + "column.expires": "过期时间", + "column.http-code": "访问", + "column.incoming-port": "入站端口", + "column.name": "名称", + "column.protocol": "协议", + "column.provider": "提供商", + "column.roles": "角色", + "column.rules": "规则", + "column.satisfy": "满足", + "column.satisfy-all": "全部", + "column.satisfy-any": "任意", + "column.scheme": "协议", + "column.source": "来源", + "column.ssl": "SSL", + "column.status": "状态", + "created-on": "创建时间: {date}", + "dashboard": "仪表板", + "dead-host": "错误页面", + "dead-hosts": "错误页面列表", + "dead-hosts.count": "{count} 个错误页面列表", + "disabled": "已禁用", + "domain-names": "域名", + "domain-names.max": "{count} 个最多域名数量", + "domain-names.placeholder": "开始输入以添加域名...", + "domain-names.wildcards-not-permitted": "此类型不允许使用通配符", + "domain-names.wildcards-not-supported": "此 CA 不支持通配符", + "domains.force-ssl": "强制 SSL", + "domains.hsts-enabled": "HSTS 已启用", + "domains.hsts-subdomains": "HSTS 子域名", + "domains.http2-support": "HTTP/2 支持", + "domains.use-dns": "使用DNS验证", + "email-address": "邮箱地址", + "empty-search": "未找到结果", + "empty-subtitle": "为什么不由您来创建一个呢?", + "enabled": "已启用", + "error.access.at-least-one": "需要至少一个授权或访问规则", + "error.access.duplicate-usernames": "授权用户名必须唯一", + "error.invalid-auth": "无效的邮箱或密码", + "error.invalid-domain": "无效的域名: {domain}", + "error.invalid-email": "无效的邮箱地址", + "error.max-character-length": "最大长度为 {max} 个字符", + "error.max-domains": "域名过多,最多为 {max} 个", + "error.maximum": "最大值为 {max}", + "error.min-character-length": "最小长度为 {min} 个字符", + "error.minimum": "最小值为 {min}", + "error.passwords-must-match": "密码必须匹配", + "error.required": "此项为必填项", + "expires.on": "过期时间: {date}", + "footer.github-fork": "在 Github 上复刻 (For) 本项目", + "host.flags.block-exploits": "阻止常见攻击", + "host.flags.cache-assets": "缓存资源", + "host.flags.preserve-path": "保留路径", + "host.flags.protocols": "协议", + "host.flags.websockets-upgrade": "Websockets 支持", + "host.forward-port": "转发端口", + "host.forward-scheme": "协议", + "hosts": "主机列表", + "http-only": "仅 HTTP", + "lets-encrypt": "Let's Encrypt", + "lets-encrypt-via-dns": "Let's Encrypt DNS 验证", + "lets-encrypt-via-http": "Let's Encrypt HTTP 验证", + "loading": "加载中···", + "login.title": "登录您的账户", + "nginx-config.label": "自定义 Nginx 配置", + "nginx-config.placeholder": "# 在此输入您的自定义 Nginx 配置,风险自负!", + "no-permission-error": "您无权查看此内容。", + "notfound.action": "返回首页", + "notfound.content": "很抱歉,您要查找的页面未找到", + "notfound.title": "糟糕...您刚刚找到了一个错误页面", + "notification.error": "错误", + "notification.object-deleted": "{object} 已被删除", + "notification.object-disabled": "{object} 已被禁用", + "notification.object-enabled": "{object} 已被启用", + "notification.object-renewed": "{object} 已续期", + "notification.object-saved": "{object} 已保存", + "notification.success": "成功", + "object.actions-title": "{object} #{id}", + "object.add": "添加 {object}", + "object.delete": "删除 {object}", + "object.delete.content": "您确定要删除 {object} 吗?", + "object.edit": "编辑 {object}", + "object.empty": "没有 {objects}", + "object.event.created": "已创建 {object}", + "object.event.deleted": "已删除 {object}", + "object.event.disabled": "已禁用 {object}", + "object.event.enabled": "已启用 {object}", + "object.event.renewed": "已续期 {object}", + "object.event.updated": "已更新 {object}", + "offline": "离线", + "online": "在线", + "options": "选项", + "password": "密码", + "password.generate": "生成随机密码", + "password.hide": "隐藏密码", + "password.show": "显示密码", + "permissions.hidden": "隐藏", + "permissions.manage": "管理", + "permissions.view": "仅查看", + "permissions.visibility.all": "所有项目", + "permissions.visibility.title": "项目可见性", + "permissions.visibility.user": "仅创建的项目", + "proxy-host": "代理服务", + "proxy-host.forward-host": "转发主机名 / IP", + "proxy-hosts": "代理服务列表", + "proxy-hosts.count": "{count} 个代理服务", + "public": "公开", + "redirection-host": "重定向主机", + "redirection-host.forward-domain": "转发域名", + "redirection-hosts": "重定向主机列表", + "redirection-hosts.count": "{count} 个重定向主机", + "role.admin": "管理员", + "role.standard-user": "标准用户", + "save": "保存", + "setting": "设置", + "settings": "设置列表", + "settings.default-site": "默认站点", + "settings.default-site.404": "错误页面", + "settings.default-site.444": "无响应 (444)", + "settings.default-site.congratulations": "欢迎页面", + "settings.default-site.description": "当 Nginx 遇到未知主机时显示什么", + "settings.default-site.html": "自定义 HTML", + "settings.default-site.html.placeholder": "", + "settings.default-site.redirect": "重定向", + "setup.preamble": "通过创建您的管理员账户开始使用。", + "setup.title": "欢迎!", + "sign-in": "登录", + "ssl-certificate": "SSL 证书", + "stream": "端口转发", + "stream.forward-host": "转发主机", + "stream.incoming-port": "入站端口", + "streams": "端口转发列表", + "streams.count": "{count} 个端口转发", + "streams.tcp": "TCP", + "streams.udp": "UDP", + "test": "测试", + "user": "用户", + "user.change-password": "修改密码", + "user.confirm-password": "确认密码", + "user.current-password": "当前密码", + "user.edit-profile": "编辑资料", + "user.full-name": "全名", + "user.login-as": "登录用户 {name}", + "user.logout": "退出登录", + "user.new-password": "新密码", + "user.nickname": "昵称", + "user.set-password": "设置密码", + "user.set-permissions": "为用户 {name} 设置权限", + "user.switch-dark": "切换到深色模式", + "user.switch-light": "切换到浅色模式", + "username": "用户名", + "users": "用户列表" +} \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/zh/AccessLists.md b/frontend/src/locale/src/HelpDoc/zh/AccessLists.md new file mode 100755 index 00000000..5d508366 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/zh/AccessLists.md @@ -0,0 +1,7 @@ +## 什么是通信规则? + +通信规则提供了一个特定客户IP地址的黑名单或白名单,以及通过基本HTTP认证对代理服务的认证。 + +你可以为一个通信规则配置多个客户规则、用户名和密码,然后将其应用于代理服务。 + +这对那些没有内置认证机制的转发网络服务或你想保护其免受未知客户的访问是最有用的。 diff --git a/frontend/src/locale/src/HelpDoc/zh/Certificates.md b/frontend/src/locale/src/HelpDoc/zh/Certificates.md new file mode 100755 index 00000000..1c51c6e8 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/zh/Certificates.md @@ -0,0 +1,21 @@ +## 证书帮助 + +### HTTP 证书 + +HTTP 验证的证书表示 Let's Encrypt 服务器将尝试通过 HTTP(而非 HTTPS!)访问您的域名,如果成功,它们将为您颁发证书。 + +使用此方法时,您必须为您的域名创建一个可通过 HTTP 访问并指向此 Nginx 安装的 代理主机。在获得证书后,您可以修改该 代理主机,使其也使用此证书处理 HTTPS 连接。然而,为了证书能够续期,该 代理主机 仍需配置为支持 HTTP 访问。 + +此过程_不支持_通配符域名。 + +### DNS 证书 + +DNS 验证的证书要求您使用一个 DNS 服务商插件。该 DNS 服务商将用于在您的域名下创建临时记录,随后 Let's Encrypt 将查询这些记录以确认您是域名所有者,如果成功,它们将为您颁发证书。 + +请求此类证书前,您无需预先创建 代理主机,也无需将您的 代理主机 配置为支持 HTTP 访问。 + +此过程_支持_通配符域名。 + +### 自定义证书 + +使用此选项上传您自己的 SSL 证书,该证书由您自己的证书颁发机构提供。 diff --git a/frontend/src/locale/src/HelpDoc/zh/DeadHosts.md b/frontend/src/locale/src/HelpDoc/zh/DeadHosts.md new file mode 100755 index 00000000..9d166023 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/zh/DeadHosts.md @@ -0,0 +1,7 @@ +## 什么是错误页面? + +错误页面是一个简单的主机设置,显示错误页面。 + +当你的域名被列入搜索引擎,而你想提供一个更好的错误页面或特别是告诉搜索索引者域名页面不再存在时,这可能是有用的。 + +拥有这种主机的另一个好处是可以跟踪点击它的日志并查看访问来源。 diff --git a/frontend/src/locale/src/HelpDoc/zh/ProxyHosts.md b/frontend/src/locale/src/HelpDoc/zh/ProxyHosts.md new file mode 100755 index 00000000..36da09e7 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/zh/ProxyHosts.md @@ -0,0 +1,7 @@ +## 什么是代理服务? + +代理服务是你想转发网络应用的主机。 + +代理服务可以为没有SSL服务的网络应用提供SSL服务(可选)。 + +代理服务是Nginx代理管理器的最常见用途之一。 diff --git a/frontend/src/locale/src/HelpDoc/zh/RedirectionHosts.md b/frontend/src/locale/src/HelpDoc/zh/RedirectionHosts.md new file mode 100755 index 00000000..ef3a4d40 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/zh/RedirectionHosts.md @@ -0,0 +1,5 @@ +## 什么是重定向? + +重定向是将接入域名的请求推送到另一个域名。 + +使用这种类型的主机最常见的原因是当你的网站改变了域名,但你仍然有链接指向旧域名的应用。 diff --git a/frontend/src/locale/src/HelpDoc/zh/Streams.md b/frontend/src/locale/src/HelpDoc/zh/Streams.md new file mode 100755 index 00000000..24cac7cf --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/zh/Streams.md @@ -0,0 +1,5 @@ +## 什么是端口转发? + +端口转发是Nginx的一个相对较新的功能,可以直接转发 TCP/UDP 流量到网络上的另一台计算机。 + +如果你正在运行游戏服务器、FTP或SSH服务器,这个功能就会很有用。 diff --git a/frontend/src/locale/src/HelpDoc/zh/index.ts b/frontend/src/locale/src/HelpDoc/zh/index.ts new file mode 100755 index 00000000..a9bb46ba --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/zh/index.ts @@ -0,0 +1,6 @@ +export * as AccessLists from "./AccessLists.md"; +export * as Certificates from "./Certificates.md"; +export * as DeadHosts from "./DeadHosts.md"; +export * as ProxyHosts from "./ProxyHosts.md"; +export * as RedirectionHosts from "./RedirectionHosts.md"; +export * as Streams from "./Streams.md"; diff --git a/frontend/src/locale/src/lang-list.json b/frontend/src/locale/src/lang-list.json old mode 100644 new mode 100755 index 8bf2a596..9343a882 --- a/frontend/src/locale/src/lang-list.json +++ b/frontend/src/locale/src/lang-list.json @@ -13,5 +13,8 @@ }, "locale-ru-RU": { "defaultMessage": "Русский" + }, + "locale-zh-CN": { + "defaultMessage": "中文" } } diff --git a/frontend/src/locale/src/zh.json b/frontend/src/locale/src/zh.json new file mode 100755 index 00000000..7dd30abe --- /dev/null +++ b/frontend/src/locale/src/zh.json @@ -0,0 +1,641 @@ +{ + "access-list": { + "defaultMessage": "通信规则" + }, + "access-list.access-count": { + "defaultMessage": "{count} 条规则" + }, + "access-list.auth-count": { + "defaultMessage": "{count} 个用户" + }, + "access-list.help-rules-last": { + "defaultMessage": "当至少存在1条规则时,此拒绝所有规则将被添加到最后" + }, + "access-list.help.rules-order": { + "defaultMessage": " 允许 (allow) 和禁止 (deny) 规则将按照它们定义的顺序执行。" + }, + "access-list.pass-auth": { + "defaultMessage": "将认证传递给上游" + }, + "access-list.public": { + "defaultMessage": "公开可访问" + }, + "access-list.public.subtitle": { + "defaultMessage": "无需基本认证" + }, + "access-list.satisfy-any": { + "defaultMessage": "满足任意条件" + }, + "access-list.subtitle": { + "defaultMessage": "{users} 个用户, {rules} 条规则 - 创建时间: {date}" + }, + "access-lists": { + "defaultMessage": "通信规则" + }, + "action.add": { + "defaultMessage": "添加" + }, + "action.add-location": { + "defaultMessage": "添加路径规则(Location)" + }, + "action.close": { + "defaultMessage": "关闭" + }, + "action.delete": { + "defaultMessage": "删除" + }, + "action.disable": { + "defaultMessage": "禁用" + }, + "action.download": { + "defaultMessage": "下载" + }, + "action.edit": { + "defaultMessage": "编辑" + }, + "action.enable": { + "defaultMessage": "启用" + }, + "action.permissions": { + "defaultMessage": "权限" + }, + "action.renew": { + "defaultMessage": "续期" + }, + "action.view-details": { + "defaultMessage": "查看详情" + }, + "auditlogs": { + "defaultMessage": "审计日志" + }, + "cancel": { + "defaultMessage": "取消" + }, + "certificate": { + "defaultMessage": "证书" + }, + "certificate.custom-certificate": { + "defaultMessage": "证书" + }, + "certificate.custom-certificate-key": { + "defaultMessage": "证书密钥" + }, + "certificate.custom-intermediate": { + "defaultMessage": "中间证书" + }, + "certificate.in-use": { + "defaultMessage": "使用中" + }, + "certificate.none.subtitle": { + "defaultMessage": "未分配证书" + }, + "certificate.none.subtitle.for-http": { + "defaultMessage": "此主机将不使用 HTTPS" + }, + "certificate.none.title": { + "defaultMessage": "无" + }, + "certificate.not-in-use": { + "defaultMessage": "未使用" + }, + "certificate.renew": { + "defaultMessage": "续期证书" + }, + "certificates": { + "defaultMessage": "证书列表" + }, + "certificates.custom": { + "defaultMessage": "自定义证书" + }, + "certificates.custom.warning": { + "defaultMessage": "不支持受密码保护的密钥文件。" + }, + "certificates.dns.credentials": { + "defaultMessage": "凭据文件内容" + }, + "certificates.dns.credentials-note": { + "defaultMessage": "此插件需要一个包含 API 令牌或提供商其他凭证的配置文件" + }, + "certificates.dns.credentials-warning": { + "defaultMessage": "此数据将以明文形式存储在数据库和文件中!" + }, + "certificates.dns.propagation-seconds": { + "defaultMessage": "传播时间 (秒)" + }, + "certificates.dns.propagation-seconds-note": { + "defaultMessage": "留空以使用插件默认值。等待DNS传播的秒数。" + }, + "certificates.dns.provider": { + "defaultMessage": "DNS 提供商" + }, + "certificates.dns.warning": { + "defaultMessage": "本节需要您具备一些关于 Certbot 及其 DNS 插件的知识,请参阅相应插件的官方文档。" + }, + "certificates.http.reachability-404": { + "defaultMessage": "在此域名下找到了一个服务器,但它似乎不是 Nginx 代理管理器。请确保您的域名指向 NPM 实例运行的 IP 地址。" + }, + "certificates.http.reachability-failed-to-check": { + "defaultMessage": "由于与site24x7.com通信错误,无法检查可达性。" + }, + "certificates.http.reachability-not-resolved": { + "defaultMessage": "此域名下没有可用的服务器。请确保您的域名存在并指向NPM实例运行的 IP 地址,如有必要,请在路由器中转发 80 端口。" + }, + "certificates.http.reachability-ok": { + "defaultMessage": "您的服务器可以访问,应该可以创建证书。" + }, + "certificates.http.reachability-other": { + "defaultMessage": "在此域名下找到了一个服务器,但它返回了意外的状态码 {code}。它是 NPM 服务器吗?请确保您的域名指向NPM实例运行的 IP 地址。" + }, + "certificates.http.reachability-wrong-data": { + "defaultMessage": "在此域名下找到了一个服务器,但它返回了意外的数据。它是 NPM 服务器吗?请确保您的域名指向 NPM 实例运行的 IP 地址。" + }, + "certificates.http.test-results": { + "defaultMessage": "测试结果" + }, + "certificates.http.warning": { + "defaultMessage": "这些域名必须配置为指向本设备。" + }, + "certificates.request.subtitle": { + "defaultMessage": "使用 Let's Encrypt" + }, + "certificates.request.title": { + "defaultMessage": "申请新证书" + }, + "column.access": { + "defaultMessage": "访问" + }, + "column.authorization": { + "defaultMessage": "授权" + }, + "column.authorizations": { + "defaultMessage": "授权列表" + }, + "column.custom-locations": { + "defaultMessage": "自定义路径规则 (Locations)" + }, + "column.destination": { + "defaultMessage": "目标" + }, + "column.details": { + "defaultMessage": "详情" + }, + "column.email": { + "defaultMessage": "邮箱" + }, + "column.event": { + "defaultMessage": "事件" + }, + "column.expires": { + "defaultMessage": "过期时间" + }, + "column.http-code": { + "defaultMessage": "访问" + }, + "column.incoming-port": { + "defaultMessage": "入站端口" + }, + "column.name": { + "defaultMessage": "名称" + }, + "column.protocol": { + "defaultMessage": "协议" + }, + "column.provider": { + "defaultMessage": "提供商" + }, + "column.roles": { + "defaultMessage": "角色" + }, + "column.rules": { + "defaultMessage": "规则" + }, + "column.satisfy": { + "defaultMessage": "满足" + }, + "column.satisfy-all": { + "defaultMessage": "全部" + }, + "column.satisfy-any": { + "defaultMessage": "任意" + }, + "column.scheme": { + "defaultMessage": "协议" + }, + "column.source": { + "defaultMessage": "来源" + }, + "column.ssl": { + "defaultMessage": "SSL" + }, + "column.status": { + "defaultMessage": "状态" + }, + "created-on": { + "defaultMessage": "创建时间: {date}" + }, + "dashboard": { + "defaultMessage": "仪表板" + }, + "dead-host": { + "defaultMessage": "错误页面" + }, + "dead-hosts": { + "defaultMessage": "错误页面列表" + }, + "dead-hosts.count": { + "defaultMessage": "{count} 个错误页面列表" + }, + "disabled": { + "defaultMessage": "已禁用" + }, + "domain-names": { + "defaultMessage": "域名" + }, + "domain-names.max": { + "defaultMessage": "{count} 个最多域名数量" + }, + "domain-names.placeholder": { + "defaultMessage": "开始输入以添加域名..." + }, + "domain-names.wildcards-not-permitted": { + "defaultMessage": "此类型不允许使用通配符" + }, + "domain-names.wildcards-not-supported": { + "defaultMessage": "此 CA 不支持通配符" + }, + "domains.force-ssl": { + "defaultMessage": "强制 SSL" + }, + "domains.hsts-enabled": { + "defaultMessage": "HSTS 已启用" + }, + "domains.hsts-subdomains": { + "defaultMessage": "HSTS 子域名" + }, + "domains.http2-support": { + "defaultMessage": "HTTP/2 支持" + }, + "domains.use-dns": { + "defaultMessage": "使用DNS验证" + }, + "email-address": { + "defaultMessage": "邮箱地址" + }, + "empty-search": { + "defaultMessage": "未找到结果" + }, + "empty-subtitle": { + "defaultMessage": "为什么不由您来创建一个呢?" + }, + "enabled": { + "defaultMessage": "已启用" + }, + "error.access.at-least-one": { + "defaultMessage": "需要至少一个授权或访问规则" + }, + "error.access.duplicate-usernames": { + "defaultMessage": "授权用户名必须唯一" + }, + "error.invalid-auth": { + "defaultMessage": "无效的邮箱或密码" + }, + "error.invalid-domain": { + "defaultMessage": "无效的域名: {domain}" + }, + "error.invalid-email": { + "defaultMessage": "无效的邮箱地址" + }, + "error.max-character-length": { + "defaultMessage": "最大长度为 {max} 个字符" + }, + "error.max-domains": { + "defaultMessage": "域名过多,最多为 {max} 个" + }, + "error.maximum": { + "defaultMessage": "最大值为 {max}" + }, + "error.min-character-length": { + "defaultMessage": "最小长度为 {min} 个字符" + }, + "error.minimum": { + "defaultMessage": "最小值为 {min}" + }, + "error.passwords-must-match": { + "defaultMessage": "密码必须匹配" + }, + "error.required": { + "defaultMessage": "此项为必填项" + }, + "expires.on": { + "defaultMessage": "过期时间: {date}" + }, + "footer.github-fork": { + "defaultMessage": "在 Github 上复刻 (For) 本项目" + }, + "host.flags.block-exploits": { + "defaultMessage": "阻止常见攻击" + }, + "host.flags.cache-assets": { + "defaultMessage": "缓存资源" + }, + "host.flags.preserve-path": { + "defaultMessage": "保留路径" + }, + "host.flags.protocols": { + "defaultMessage": "协议" + }, + "host.flags.websockets-upgrade": { + "defaultMessage": "Websockets 支持" + }, + "host.forward-port": { + "defaultMessage": "转发端口" + }, + "host.forward-scheme": { + "defaultMessage": "协议" + }, + "hosts": { + "defaultMessage": "主机列表" + }, + "http-only": { + "defaultMessage": "仅 HTTP" + }, + "lets-encrypt": { + "defaultMessage": "Let's Encrypt" + }, + "lets-encrypt-via-dns": { + "defaultMessage": "Let's Encrypt DNS 验证" + }, + "lets-encrypt-via-http": { + "defaultMessage": "Let's Encrypt HTTP 验证" + }, + "loading": { + "defaultMessage": "加载中···" + }, + "login.title": { + "defaultMessage": "登录您的账户" + }, + "nginx-config.label": { + "defaultMessage": "自定义 Nginx 配置" + }, + "nginx-config.placeholder": { + "defaultMessage": "# 在此输入您的自定义 Nginx 配置,风险自负!" + }, + "no-permission-error": { + "defaultMessage": "您无权查看此内容。" + }, + "notfound.action": { + "defaultMessage": "返回首页" + }, + "notfound.content": { + "defaultMessage": "很抱歉,您要查找的页面未找到" + }, + "notfound.title": { + "defaultMessage": "糟糕...您刚刚找到了一个错误页面" + }, + "notification.error": { + "defaultMessage": "错误" + }, + "notification.object-deleted": { + "defaultMessage": "{object} 已被删除" + }, + "notification.object-disabled": { + "defaultMessage": "{object} 已被禁用" + }, + "notification.object-enabled": { + "defaultMessage": "{object} 已被启用" + }, + "notification.object-renewed": { + "defaultMessage": "{object} 已续期" + }, + "notification.object-saved": { + "defaultMessage": "{object} 已保存" + }, + "notification.success": { + "defaultMessage": "成功" + }, + "object.actions-title": { + "defaultMessage": "{object} #{id}" + }, + "object.add": { + "defaultMessage": "添加 {object}" + }, + "object.delete": { + "defaultMessage": "删除 {object}" + }, + "object.delete.content": { + "defaultMessage": "您确定要删除 {object} 吗?" + }, + "object.edit": { + "defaultMessage": "编辑 {object}" + }, + "object.empty": { + "defaultMessage": "没有 {objects}" + }, + "object.event.created": { + "defaultMessage": "已创建 {object}" + }, + "object.event.deleted": { + "defaultMessage": "已删除 {object}" + }, + "object.event.disabled": { + "defaultMessage": "已禁用 {object}" + }, + "object.event.enabled": { + "defaultMessage": "已启用 {object}" + }, + "object.event.renewed": { + "defaultMessage": "已续期 {object}" + }, + "object.event.updated": { + "defaultMessage": "已更新 {object}" + }, + "offline": { + "defaultMessage": "离线" + }, + "online": { + "defaultMessage": "在线" + }, + "options": { + "defaultMessage": "选项" + }, + "password": { + "defaultMessage": "密码" + }, + "password.generate": { + "defaultMessage": "生成随机密码" + }, + "password.hide": { + "defaultMessage": "隐藏密码" + }, + "password.show": { + "defaultMessage": "显示密码" + }, + "permissions.hidden": { + "defaultMessage": "隐藏" + }, + "permissions.manage": { + "defaultMessage": "管理" + }, + "permissions.view": { + "defaultMessage": "仅查看" + }, + "permissions.visibility.all": { + "defaultMessage": "所有项目" + }, + "permissions.visibility.title": { + "defaultMessage": "项目可见性" + }, + "permissions.visibility.user": { + "defaultMessage": "仅创建的项目" + }, + "proxy-host": { + "defaultMessage": "代理服务" + }, + "proxy-host.forward-host": { + "defaultMessage": "转发主机名 / IP" + }, + "proxy-hosts": { + "defaultMessage": "代理服务列表" + }, + "proxy-hosts.count": { + "defaultMessage": "{count} 个代理服务" + }, + "public": { + "defaultMessage": "公开" + }, + "redirection-host": { + "defaultMessage": "重定向主机" + }, + "redirection-host.forward-domain": { + "defaultMessage": "转发域名" + }, + "redirection-hosts": { + "defaultMessage": "重定向主机列表" + }, + "redirection-hosts.count": { + "defaultMessage": "{count} 个重定向主机" + }, + "role.admin": { + "defaultMessage": "管理员" + }, + "role.standard-user": { + "defaultMessage": "标准用户" + }, + "save": { + "defaultMessage": "保存" + }, + "setting": { + "defaultMessage": "设置" + }, + "settings": { + "defaultMessage": "设置列表" + }, + "settings.default-site": { + "defaultMessage": "默认站点" + }, + "settings.default-site.404": { + "defaultMessage": "错误页面" + }, + "settings.default-site.444": { + "defaultMessage": "无响应 (444)" + }, + "settings.default-site.congratulations": { + "defaultMessage": "欢迎页面" + }, + "settings.default-site.description": { + "defaultMessage": "当 Nginx 遇到未知主机时显示什么" + }, + "settings.default-site.html": { + "defaultMessage": "自定义 HTML" + }, + "settings.default-site.html.placeholder": { + "defaultMessage": "" + }, + "settings.default-site.redirect": { + "defaultMessage": "重定向" + }, + "setup.preamble": { + "defaultMessage": "通过创建您的管理员账户开始使用。" + }, + "setup.title": { + "defaultMessage": "欢迎!" + }, + "sign-in": { + "defaultMessage": "登录" + }, + "ssl-certificate": { + "defaultMessage": "SSL 证书" + }, + "stream": { + "defaultMessage": "端口转发" + }, + "stream.forward-host": { + "defaultMessage": "转发主机" + }, + "stream.incoming-port": { + "defaultMessage": "入站端口" + }, + "streams": { + "defaultMessage": "端口转发列表" + }, + "streams.count": { + "defaultMessage": "{count} 个端口转发" + }, + "streams.tcp": { + "defaultMessage": "TCP" + }, + "streams.udp": { + "defaultMessage": "UDP" + }, + "test": { + "defaultMessage": "测试" + }, + "user": { + "defaultMessage": "用户" + }, + "user.change-password": { + "defaultMessage": "修改密码" + }, + "user.confirm-password": { + "defaultMessage": "确认密码" + }, + "user.current-password": { + "defaultMessage": "当前密码" + }, + "user.edit-profile": { + "defaultMessage": "编辑资料" + }, + "user.full-name": { + "defaultMessage": "全名" + }, + "user.login-as": { + "defaultMessage": "登录用户 {name}" + }, + "user.logout": { + "defaultMessage": "退出登录" + }, + "user.new-password": { + "defaultMessage": "新密码" + }, + "user.nickname": { + "defaultMessage": "昵称" + }, + "user.set-password": { + "defaultMessage": "设置密码" + }, + "user.set-permissions": { + "defaultMessage": "为用户 {name} 设置权限" + }, + "user.switch-dark": { + "defaultMessage": "切换到深色模式" + }, + "user.switch-light": { + "defaultMessage": "切换到浅色模式" + }, + "username": { + "defaultMessage": "用户名" + }, + "users": { + "defaultMessage": "用户列表" + } +} From 8e900dbc92310723a571ebe641aa9ad22e63240b Mon Sep 17 00:00:00 2001 From: firfe Date: Wed, 12 Nov 2025 00:15:23 +0800 Subject: [PATCH 2/4] Add Chinese HelpDoc --- frontend/src/locale/src/HelpDoc/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/locale/src/HelpDoc/index.ts b/frontend/src/locale/src/HelpDoc/index.ts index 8adaa190..dc57c343 100644 --- a/frontend/src/locale/src/HelpDoc/index.ts +++ b/frontend/src/locale/src/HelpDoc/index.ts @@ -1,8 +1,9 @@ import * as de from "./de/index"; import * as en from "./en/index"; import * as ja from "./ja/index"; +import * as zh from "./zh/index"; -const items: any = { en, de, ja }; +const items: any = { en, de, ja, zh }; const fallbackLang = "en"; From d66bb2104a111842b9c73f57ee72fa0fd979b042 Mon Sep 17 00:00:00 2001 From: firfe Date: Wed, 12 Nov 2025 00:34:56 +0800 Subject: [PATCH 3/4] Add the new translation for "redirection-host.forward-http-code". --- frontend/src/locale/lang/zh.json | 1 + frontend/src/locale/src/zh.json | 3 +++ 2 files changed, 4 insertions(+) diff --git a/frontend/src/locale/lang/zh.json b/frontend/src/locale/lang/zh.json index 61763aa4..47a6abe2 100755 --- a/frontend/src/locale/lang/zh.json +++ b/frontend/src/locale/lang/zh.json @@ -169,6 +169,7 @@ "public": "公开", "redirection-host": "重定向主机", "redirection-host.forward-domain": "转发域名", + "redirection-host.forward-http-code": "HTTP 状态码", "redirection-hosts": "重定向主机列表", "redirection-hosts.count": "{count} 个重定向主机", "role.admin": "管理员", diff --git a/frontend/src/locale/src/zh.json b/frontend/src/locale/src/zh.json index 7dd30abe..158d1ff7 100755 --- a/frontend/src/locale/src/zh.json +++ b/frontend/src/locale/src/zh.json @@ -509,6 +509,9 @@ "redirection-host.forward-domain": { "defaultMessage": "转发域名" }, + "redirection-host.forward-http-code": { + "defaultMessage": "HTTP 状态码" + }, "redirection-hosts": { "defaultMessage": "重定向主机列表" }, From b26db50ae7c1f98d028af0426ba84b6cf182516f Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Wed, 12 Nov 2025 20:26:22 +1000 Subject: [PATCH 4/4] Adds cn to check locales script --- frontend/check-locales.cjs | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/check-locales.cjs b/frontend/check-locales.cjs index 7cd04420..d300c9d1 100755 --- a/frontend/check-locales.cjs +++ b/frontend/check-locales.cjs @@ -11,6 +11,7 @@ const allLocales = [ ["es", "es-ES"], ["de", "de-DE"], ["ru", "ru-RU"], + ["zh", "zh-CN"], ]; const ignoreUnused = [