基于v2.12.2更新中文翻译

This commit is contained in:
chishin 2024-12-29 16:00:37 +08:00
parent b4f49969d6
commit 16d44f261a
17 changed files with 607 additions and 113 deletions

45
.github/workflows/docker.yml vendored Normal file
View File

@ -0,0 +1,45 @@
name: GitHub Actions Docker Buildx
on:
workflow_dispatch:
push:
branches:
- 'develop-zh'
- 'zh-v[1-9].[0-9]+.[0-9]+'
release:
types: [published]
jobs:
Docker-Buildx:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: 添加Build环境变量
run: |
echo "BUILD_IMAGE=chishin/nginx-proxy-manager-zh" >> $GITHUB_ENV
echo "BUILD_PLATFORM=linux/amd64,linux/arm64,linux/arm/7" >> $GITHUB_ENV
echo "BUILD_VERSION=$(cat .version)" >> $GITHUB_ENV
- name: 添加BuildTag环境变量push
if: ${{ github.event_name == 'push'}}
run: |
echo "BUILD_TAG=-t ${BUILD_IMAGE}:dev-${BUILD_VERSION} -t ${BUILD_IMAGE}:dev" >> $GITHUB_ENV
- name: 添加BuildTag环境变量release
if: ${{ github.event_name == 'release'}}
run: |
echo "BUILD_TAG=-t ${BUILD_IMAGE}:${BUILD_VERSION} -t ${BUILD_IMAGE}:${BUILD_VERSION%.*} -t ${BUILD_IMAGE}:${BUILD_VERSION%.*.*} -t ${BUILD_IMAGE}:release -t ${BUILD_IMAGE}:latest" >> $GITHUB_ENV
- name: 登录DockerHub账号
env:
DOCKER_USERNAME: ${{secrets.DOCKER_USERNAME}}
DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}
run: echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin
- name: Docker Setup Buildx
uses: docker/setup-buildx-action@v2.5.0
- name: 输出Buildx环境变量
run: |
echo "BUILD_TAG=$BUILD_TAG"
echo "BUILD_IMAGE=$BUILD_IMAGE"
echo "BUILD_PLATFORM=$BUILD_PLATFORM"
echo "BUILD_VERSION=$BUILD_VERSION"
- name: Buildx Dockerfile
run: |
chmod -R 755 scripts
./scripts/buildx-zh

View File

@ -1,21 +0,0 @@
name: 'Close stale issues and PRs'
on:
schedule:
- cron: '30 1 * * *'
workflow_dispatch:
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
stale-issue-label: 'stale'
stale-pr-label: 'stale'
stale-issue-message: 'Issue is now considered stale. If you want to keep it open, please comment :+1:'
stale-pr-message: 'PR is now considered stale. If you want to keep it open, please comment :+1:'
close-issue-message: 'Issue was closed due to inactivity.'
close-pr-message: 'PR was closed due to inactivity.'
days-before-stale: 182
days-before-close: 365
operations-per-run: 50

111
README-en.md Normal file
View File

@ -0,0 +1,111 @@
<p align="center">
<img src="https://nginxproxymanager.com/github.png">
<br><br>
<img src="https://img.shields.io/badge/version-2.12.2-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>
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager">
<img src="https://img.shields.io/docker/pulls/jc21/nginx-proxy-manager.svg?style=for-the-badge">
</a>
</p>
This project comes as a pre-built docker image that enables you to easily forward to your websites
running at home or otherwise, including free SSL, without having to know too much about Nginx or Letsencrypt.
- [Quick Setup](#quick-setup)
- [Full Setup](https://nginxproxymanager.com/setup/)
- [Screenshots](https://nginxproxymanager.com/screenshots/)
## Project Goal
I created this project to fill a personal need to provide users with a easy way to accomplish reverse
proxying hosts with SSL termination and it had to be so easy that a monkey could do it. This goal hasn't changed.
While there might be advanced options they are optional and the project should be as simple as possible
so that the barrier for entry here is low.
<a href="https://www.buymeacoffee.com/jc21" target="_blank"><img src="http://public.jc21.com/github/by-me-a-coffee.png" alt="Buy Me A Coffee" style="height: 51px !important;width: 217px !important;" ></a>
## Features
- Beautiful and Secure Admin Interface based on [Tabler](https://tabler.github.io/)
- Easily create forwarding domains, redirections, streams and 404 hosts without knowing anything about Nginx
- Free SSL using Let's Encrypt or provide your own custom SSL certificates
- Access Lists and basic HTTP Authentication for your hosts
- Advanced Nginx configuration available for super users
- User management, permissions and audit log
## Hosting your home network
I won't go in to too much detail here but here are the basics for someone new to this self-hosted world.
1. Your home router will have a Port Forwarding section somewhere. Log in and find it
2. Add port forwarding for port 80 and 443 to the server hosting this project
3. Configure your domain name details to point to your home, either with a static ip or a service like DuckDNS or [Amazon Route53](https://github.com/jc21/route53-ddns)
4. Use the Nginx Proxy Manager as your gateway to forward to your other web based services
## Quick Setup
1. Install Docker and Docker-Compose
- [Docker Install documentation](https://docs.docker.com/install/)
- [Docker-Compose Install documentation](https://docs.docker.com/compose/install/)
2. Create a docker-compose.yml file similar to this:
```yml
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
```
This is the bare minimum configuration required. See the [documentation](https://nginxproxymanager.com/setup/) for more.
3. Bring up your stack by running
```bash
docker-compose up -d
# If using docker-compose-plugin
docker compose up -d
```
4. Log in to the Admin UI
When your docker container is running, connect to it on port `81` for the admin interface.
Sometimes this can take a little bit because of the entropy of keys.
[http://127.0.0.1:81](http://127.0.0.1:81)
Default Admin User:
```
Email: admin@example.com
Password: changeme
```
Immediately after logging in with this default user you will be asked to modify your details and change your password.
## Contributors
Special thanks to [all of our contributors](https://github.com/NginxProxyManager/nginx-proxy-manager/graphs/contributors).
## Getting Support
1. [Found a bug?](https://github.com/NginxProxyManager/nginx-proxy-manager/issues)
2. [Discussions](https://github.com/NginxProxyManager/nginx-proxy-manager/discussions)
3. [Development Gitter](https://gitter.im/nginx-proxy-manager/community)
4. [Reddit](https://reddit.com/r/nginxproxymanager)

153
README.md
View File

@ -1,65 +1,35 @@
[Original English README](https://github.com/xiaoxinpro/nginx-proxy-manager-zh/blob/develop-zh/README-en.md)
<p align="center"> <p align="center">
<img src="https://nginxproxymanager.com/github.png"> <img src="https://nginxproxymanager.com/github.png">
<br><br> <br>
<img src="https://img.shields.io/badge/version-2.12.2-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>
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager">
<img src="https://img.shields.io/docker/pulls/jc21/nginx-proxy-manager.svg?style=for-the-badge">
</a>
</p> </p>
This project comes as a pre-built docker image that enables you to easily forward to your websites 本项目是基于 [NginxProxyManager/nginx-proxy-manager](https://github.com/NginxProxyManager/nginx-proxy-manager) 翻译的中文版本该项目属于一个预构建的docker映像它可以让你轻松地部署到你的网站上运行包括免费的SSL而不需要知道太多关于 Nginx 或 Let's Encrypt 的信息。
running at home or otherwise, including free SSL, without having to know too much about Nginx or Letsencrypt.
- [Quick Setup](#quick-setup) ![](http://image.xiaoxin.pro/2022/05/16/75687b5bfffbe.png)
- [Full Setup](https://nginxproxymanager.com/setup/)
- [Screenshots](https://nginxproxymanager.com/screenshots/)
## Project Goal ## 快速部署
I created this project to fill a personal need to provide users with an easy way to accomplish reverse ### 1. 环境部署
proxying hosts with SSL termination and it had to be so easy that a monkey could do it. This goal hasn't changed.
While there might be advanced options they are optional and the project should be as simple as possible
so that the barrier for entry here is low.
<a href="https://www.buymeacoffee.com/jc21" target="_blank"><img src="http://public.jc21.com/github/by-me-a-coffee.png" alt="Buy Me A Coffee" style="height: 51px !important;width: 217px !important;" ></a> 安装Docker和Docker-compose
- [Docker官方安装文档英文](https://docs.docker.com/install/)
- [Docker-Compose官方安装文档英文](https://docs.docker.com/compose/install/)
- **[Docker和Docker-compose安装文档中文](https://blog.csdn.net/zhangzejin3883/article/details/124778945)**
## Features ### 2. 创建YAML文件
- Beautiful and Secure Admin Interface based on [Tabler](https://tabler.github.io/) 创建一个 `docker-compose.yml` 文件:
- Easily create forwarding domains, redirections, streams and 404 hosts without knowing anything about Nginx
- Free SSL using Let's Encrypt or provide your own custom SSL certificates
- Access Lists and basic HTTP Authentication for your hosts
- Advanced Nginx configuration available for super users
- User management, permissions and audit log
## Hosting your home network
I won't go in to too much detail here but here are the basics for someone new to this self-hosted world.
1. Your home router will have a Port Forwarding section somewhere. Log in and find it
2. Add port forwarding for port 80 and 443 to the server hosting this project
3. Configure your domain name details to point to your home, either with a static ip or a service like DuckDNS or [Amazon Route53](https://github.com/jc21/route53-ddns)
4. Use the Nginx Proxy Manager as your gateway to forward to your other web based services
## Quick Setup
1. Install Docker and Docker-Compose
- [Docker Install documentation](https://docs.docker.com/install/)
- [Docker-Compose Install documentation](https://docs.docker.com/compose/install/)
2. Create a docker-compose.yml file similar to this:
```yml ```yml
version: '3'
services: services:
app: app:
image: 'docker.io/jc21/nginx-proxy-manager:latest' image: 'chishin/nginx-proxy-manager-zh:release'
restart: unless-stopped restart: always
ports: ports:
- '80:80' - '80:80'
- '81:81' - '81:81'
@ -69,52 +39,93 @@ services:
- ./letsencrypt:/etc/letsencrypt - ./letsencrypt:/etc/letsencrypt
``` ```
This is the bare minimum configuration required. See the [documentation](https://nginxproxymanager.com/setup/) for more. ### 3. 部署运行
3. Bring up your stack by running
```bash ```bash
docker-compose up -d docker-compose up -d
# If using docker-compose-plugin
docker compose up -d
``` ```
4. Log in to the Admin UI ### 4. 登录管理页面
When your docker container is running, connect to it on port `81` for the admin interface. 当你的docker容器成功运行使用浏览器访问`81`端口。
Sometimes this can take a little bit because of the entropy of keys. 有些时候需要稍等一段时间。
[http://127.0.0.1:81](http://127.0.0.1:81) [http://127.0.0.1:81](http://127.0.0.1:81)
Default Admin User: 默认管理员信息:
``` ```
Email: admin@example.com Email: admin@example.com
Password: changeme Password: changeme
``` ```
Immediately after logging in with this default user you will be asked to modify your details and change your password. 使用这个默认用户登录后,系统会立即要求您修改详细信息和密码。
### 5. 快速升级
## Contributing ```bash
docker-compose down
docker-compose pull
docker-compose up -d
```
All are welcome to create pull requests for this project, against the `develop` branch. Official releases are created from the `master` branch. 这个项目将自动更新任何数据库或其他要求所以你不必遵循任何疯狂的指示。上面的这些步骤将提取最新的更新并重新创建docker容器。
CI is used in this project. All PR's must pass before being considered. After passing, ## 更多
docker builds for PR's are available on dockerhub for manual verifications.
Documentation within the `develop` branch is available for preview at ### 1. 官方文档(英文)
[https://develop.nginxproxymanager.com](https://develop.nginxproxymanager.com)
关于本应用的更多用法请访问官方文档:
### Contributors - [项目源码](https://github.com/NginxProxyManager/nginx-proxy-manager)
- [项目官网](https://nginxproxymanager.com/)
- [安装手册](https://nginxproxymanager.com/setup/)
- [高级配置](https://nginxproxymanager.com/advanced-config/#best-practice-use-a-docker-network)
- [常见问题](https://nginxproxymanager.com/faq/#do-i-have-to-use-docker)
Special thanks to [all of our contributors](https://github.com/NginxProxyManager/nginx-proxy-manager/graphs/contributors). ### 2. 替换中文镜像
当你使用官方示例的`docker-compose`时需要注意将image镜像`jc21/nginx-proxy-manager`替换为`chishin/nginx-proxy-manager-zh`即可实现中文部署。
## Getting Support ### 3. 关于中文镜像
1. [Found a bug?](https://github.com/NginxProxyManager/nginx-proxy-manager/issues) 中文镜像并没有重新构建后端代码,由[Dockerfile-zh](https://github.com/xiaoxinpro/nginx-proxy-manager-zh/blob/develop-zh/docker/Dockerfile-zh)文件可以得知,中文镜像基于官方镜像替换前端代码来实现的,所以中文版本的全部功能与官方版本完全相同,只是显示界面的文字不同的区别。
2. [Discussions](https://github.com/NginxProxyManager/nginx-proxy-manager/discussions)
3. [Reddit](https://reddit.com/r/nginxproxymanager) ### 4. 关于DNSPod创建证书失败
此问题在2.9.19版本开始就已经存在,原因是`zope`引起的由于ARM架构一直安装失败所以无法打包到镜像中建议使用如下方法修复此问题
首先确保nginx-proxy-manager-zh的Docker容器已经正常运行使用`docker-compose ps`查看容器名,这里假设容器名为`npm-zh`。
进入容器:(注意替换下文中的容器名)
```
docker exec -it npm-zh bash
```
执行安装`zope`命令:
```
python3 -m pip install --upgrade pip
pip install certbot-dns-dnspod
pip install zope
```
等待安装完成,退出容器:
```
exit
```
最后刷新浏览器再次使用DNSPod创建证书即可。
## 捐赠
如果您觉得本项目对你有帮助,欢迎给予我们一定的捐助来翻译项目的长期发展。
### 支付宝扫码捐赠
![支付宝扫码捐赠](https://image.xiaoxin.pro/2022/05/16/1f1a5f025c13c.png)
### 微信扫描捐赠
![微信扫描捐赠](https://image.xiaoxin.pro/2022/05/16/9c9906b102b29.png)

22
docker/Dockerfile-zh Normal file
View File

@ -0,0 +1,22 @@
FROM jc21/nginx-proxy-manager:2.12.2
ENV NPM_LANGUAGE="zh"
EXPOSE 80 81 443
RUN rm -rf /app/frontend /var/www/html/index.html
COPY frontend/dist /app/frontend
COPY docker/rootfs/var/www/html/index.html /var/www/html/index.html
WORKDIR /app
VOLUME [ "/data", "/etc/letsencrypt" ]
ENTRYPOINT [ "/init" ]
LABEL org.label-schema.schema-version="1.0" \
org.label-schema.license="MIT" \
org.label-schema.name="nginx-proxy-manager-zh" \
org.label-schema.description="Docker container for managing Nginx proxy hosts with a simple, powerful interface " \
org.label-schema.url="https://github.com/xiaoxinpro/nginx-proxy-manager-zh" \
org.label-schema.vcs-url="https://github.com/xiaoxinpro/nginx-proxy-manager-zh.git" \
org.label-schema.cmd="docker run --rm -ti chishin/nginx-proxy-manager-zh:latest"

View File

@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="zh">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
@ -13,12 +13,12 @@
<body> <body>
<div class="container"> <div class="container">
<div class="jumbotron"> <div class="jumbotron">
<h1>Congratulations!</h1> <h1>恭喜!</h1>
<p>You've successfully started the Nginx Proxy Manager.</p> <p>您已成功启动 Nginx 代理管理器。</p>
<p>If you're seeing this site then you're trying to access a host that isn't set up yet.</p> <p>如果您看到此站点,则说明您正在尝试访问尚未设置的主机。</p>
<p>Log in to the Admin panel to get started.</p> <p>登录管理面板开始使用。</p>
</div> </div>
<p class="text-center"><small>Powered by <a href="https://github.com/jc21/nginx-proxy-manager" target="_blank">Nginx Proxy Manager</a></small></p> <p class="text-center"><small>Powered by <a href="https://github.com/xiaoxinpro/nginx-proxy-manager-zh" target="_blank">Nginx Proxy Manager</a></small></p>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,4 +1,4 @@
<% var title = 'Nginx Proxy Manager' %> <% var title = 'Nginx 代理管理器' %>
<%- include partials/header.ejs %> <%- include partials/header.ejs %>
<div id="app" class="page"> <div id="app" class="page">

View File

@ -1,4 +1,4 @@
<% var title = 'Login &ndash; Nginx Proxy Manager' %> <% var title = '登录 &ndash; Nginx 代理管理器' %>
<%- include partials/header.ejs %> <%- include partials/header.ejs %>
<div class="page" id="login" data-version="<%= version %>"> <div class="page" id="login" data-version="<%= version %>">

View File

@ -1,10 +1,10 @@
<!doctype html> <!doctype html>
<html lang="en" dir="ltr"> <html lang="zh" dir="ltr">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge"> <meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta http-equiv="Content-Language" content="en"> <meta http-equiv="Content-Language" content="zh">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-capable" content="yes">
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@ -28,7 +28,7 @@
<noscript> <noscript>
<div class="container no-js-warning"> <div class="container no-js-warning">
<div class="alert alert-warning text-center"> <div class="alert alert-warning text-center">
<strong>Warning!</strong> This application requires Javascript and your browser doesn't support it. <strong>警告!</strong> 此应用程序需要Javascript而您的浏览器不支持它。
</div> </div>
</div> </div>
</noscript> </noscript>

View File

@ -2,7 +2,7 @@ const UserModel = require('../models/user');
let cache = { let cache = {
User: new UserModel.Model(), User: new UserModel.Model(),
locale: 'en', locale: 'zh',
version: null version: null
}; };

View File

@ -10,13 +10,13 @@ module.exports = function (namespace, key, data) {
let locale = Cache.locale; let locale = Cache.locale;
// check that the locale exists // check that the locale exists
if (typeof messages[locale] === 'undefined') { if (typeof messages[locale] === 'undefined') {
locale = 'en'; locale = 'zh';
} }
if (typeof messages[locale][namespace] !== 'undefined' && typeof messages[locale][namespace][key] !== 'undefined') { if (typeof messages[locale][namespace] !== 'undefined' && typeof messages[locale][namespace][key] !== 'undefined') {
return messages[locale][namespace][key](data); return messages[locale][namespace][key](data);
} else if (locale !== 'en' && typeof messages['en'][namespace] !== 'undefined' && typeof messages['en'][namespace][key] !== 'undefined') { } else if (locale !== 'zh' && typeof messages['zh'][namespace] !== 'undefined' && typeof messages['zh'][namespace][key] !== 'undefined') {
return messages['en'][namespace][key](data); return messages['zh'][namespace][key](data);
} }
return '(MISSING: ' + namespace + '/' + key + ')'; return '(MISSING: ' + namespace + '/' + key + ')';

View File

@ -47,10 +47,11 @@
<!-- Authorization --> <!-- Authorization -->
<div class="tab-pane" id="auth"> <div class="tab-pane" id="auth">
<p> <p>
Basic Authorization via 授权用户基于
<a target="_blank" href="https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html"> <a target="_blank" href="https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html">
Nginx HTTP Basic Authentication Nginx HTTP Basic Authentication
</a> </a>
实现
</p> </p>
<div class="row"> <div class="row">
<div class="col-sm-6 col-md-6"> <div class="col-sm-6 col-md-6">
@ -74,10 +75,11 @@
<!-- Access --> <!-- Access -->
<div class="tab-pane" id="access"> <div class="tab-pane" id="access">
<p> <p>
IP Address Whitelist/Blacklist via IP地址黑白名单基于
<a target="_blank" href="https://nginx.org/en/docs/http/ngx_http_access_module.html"> <a target="_blank" href="https://nginx.org/en/docs/http/ngx_http_access_module.html">
Nginx HTTP Access Nginx HTTP Access
</a> </a>
实现
</p> </p>
<div class="clients"><!-- clients --></div> <div class="clients"><!-- clients --></div>
<div class="row"> <div class="row">
@ -92,7 +94,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="text-muted">Note that the <code>allow</code> and <code>deny</code> directives will be applied in the order they are defined.</div> <div class="text-muted">注意: <code>allow(允许)</code> 和 <code>deny(禁止)</code> 规则将按照它们定义的顺序执行。</div>
<div class="btn-list justify-content-end"> <div class="btn-list justify-content-end">
<button type="button" class="btn btn-teal access_add"><%- i18n('access-lists', 'access-add') %></button> <button type="button" class="btn btn-teal access_add"><%- i18n('access-lists', 'access-add') %></button>
</div> </div>

View File

@ -3,7 +3,7 @@
<div class="row align-items-center"> <div class="row align-items-center">
<div class="col-auto"> <div class="col-auto">
<ul class="list-inline list-inline-dots mb-0"> <ul class="list-inline list-inline-dots mb-0">
<li class="list-inline-item"><a href="https://github.com/jc21/nginx-proxy-manager?utm_source=nginx-proxy-manager" target="_blank"><%- i18n('footer', 'fork-me') %></a></li> <li class="list-inline-item"><a href="https://github.com/xiaoxinpro/nginx-proxy-manager-zh?utm_source=nginx-proxy-manager-zh"><%- i18n('footer', 'fork-me') %></a></li>
</ul> </ul>
</div> </div>
</div> </div>
@ -12,5 +12,6 @@
<%- i18n('main', 'version', {version: getVersion()}) %> <%- i18n('main', 'version', {version: getVersion()}) %>
<%= i18n('footer', 'copy', {url: 'https://jc21.com?utm_source=nginx-proxy-manager'}) %> <%= i18n('footer', 'copy', {url: 'https://jc21.com?utm_source=nginx-proxy-manager'}) %>
<%= i18n('footer', 'theme', {url: 'https://tabler.github.io/?utm_source=nginx-proxy-manager'}) %> <%= i18n('footer', 'theme', {url: 'https://tabler.github.io/?utm_source=nginx-proxy-manager'}) %>
<%= i18n('footer', 'translate', {url: 'https://github.com/xiaoxinpro/nginx-proxy-manager-zh'}) %>
</div> </div>
</div> </div>

View File

@ -292,5 +292,300 @@
"default-site-html": "Custom Page", "default-site-html": "Custom Page",
"default-site-redirect": "Redirect" "default-site-redirect": "Redirect"
} }
},
"zh": {
"str": {
"email-address": "邮箱",
"username": "账号",
"password": "密码",
"sign-in": "登录",
"sign-out": "退出",
"try-again": "重试",
"name": "名字",
"email": "邮箱",
"roles": "角色",
"created-on": "创建:{date}",
"save": "保存",
"cancel": "取消",
"close": "关闭",
"enable": "启用",
"disable": "禁用",
"sure": "是的,我确定",
"disabled": "禁用",
"choose-file": "选择文件",
"source": "来源",
"destination": "目标地址",
"ssl": "SSL",
"access": "规则",
"public": "公开",
"edit": "编辑",
"delete": "删除",
"logs": "日志",
"status": "状态",
"online": "在线",
"offline": "离线",
"unknown": "未知",
"expires": "过期",
"value": "值",
"please-wait": "请稍等...",
"all": "全部",
"any": "任意"
},
"login": {
"title": "登录到您的账户"
},
"main": {
"app": "Nginx 代理管理器",
"version": "v{version}",
"welcome": "欢迎来到 Nginx 代理管理器",
"logged-in": "您的登录身份是 {name}",
"unknown-error": "加载出错,请重新加载应用程序。",
"unknown-user": "未知用户",
"sign-in-as": "重新登录为 {name}"
},
"roles": {
"title": "角色",
"admin": "管理员",
"user": "Apache Helicopter"
},
"menu": {
"dashboard": "仪表盘",
"hosts": "主机"
},
"footer": {
"fork-me": "在Github上Fork项目",
"copy": "&copy; 2022-2024 <a href=\"{url}\" target=\"_blank\">jc21.com</a>, ",
"theme": "Theme by <a href=\"{url}\" target=\"_blank\">Tabler</a>, ",
"translate": "汉化版由 <a href=\"{url}\" target=\"_blank\">xiaoxinpro</a> 提供. "
},
"dashboard": {
"title": "你好 {name}"
},
"all-hosts": {
"empty-subtitle": "{manage, select, true{您为什么不创建一个?} other{您目前没有权限创建。}}",
"details": "详细内容",
"enable-ssl": "启用SSL",
"force-ssl": "强制SSL",
"http2-support": "支持HTTP/2",
"domain-names": "域名",
"cert-provider": "证书提供商",
"block-exploits": "阻止常见漏洞",
"caching-enabled": "缓存资源",
"ssl-certificate": "SSL证书",
"none": "无",
"new-cert": "申请一个新的SSL证书",
"with-le": "使用Let's Encrypt",
"no-ssl": "该主机将不使用HTTPS",
"advanced": "高级",
"advanced-warning": "在此输入你的自定义 Nginx 配置,风险自负!",
"advanced-config": "自定义 Nginx 配置",
"advanced-config-var-headline": "这些代理详情可以作为nginx的变量。",
"advanced-config-header-info": "请注意这里添加的任何add_header或set_header配置都不会被nginx使用。你将不得不添加一个自定义的位置'/',并在那里的自定义配置中添加头信息。",
"hsts-enabled": "启用了HSTS",
"hsts-subdomains": "HSTS子域",
"locations": "自定义位置"
},
"locations": {
"new_location": "添加位置",
"path": "/path",
"location_label": "定义位置",
"delete": "删除"
},
"ssl": {
"letsencrypt": "Let's Encrypt",
"other": "上传证书",
"none": "仅HTTP",
"letsencrypt-email": "Let's Encrypt ",
"letsencrypt-agree": "我同意 <a href=\"{url}\" target=\"_blank\">Let's Encrypt 服务条款</a>",
"delete-ssl": "附加的SSL证书将不会被删除它们需要手动删除。",
"hosts-warning": "这些域名必须配置为指向本设备。",
"no-wildcard-without-dns": "不使用DNS认证时不能用通配符域名申请Let's Encrypt证书",
"dns-challenge": "使用DNS认证",
"certbot-warning": "本节需要一些关于Certbot及其DNS扩展的知识。请查阅相关扩展的文档。",
"dns-provider": "DNS提供者",
"please-choose": "选择...",
"credentials-file-content": "证书内容",
"credentials-file-content-info": "这个插件需要一个包含API令牌或其他供应商凭证的配置文件。",
"stored-as-plaintext-info": "这些数据将以明文形式存储在数据库和文件中",
"propagation-seconds": "等待时间(秒)",
"propagation-seconds-info": "留空为默认值。等待DNS生效的时间。",
"processing-info": "处理中... 这可能需要几分钟的时间。",
"passphrase-protection-support-info": "不支持使用密码保护密钥文件。"
},
"proxy-hosts": {
"title": "代理服务",
"empty": "目前还没有代理服务",
"add": "添加代理服务",
"form-title": "{id, select, undefined{新建} other{编辑}} 代理服务",
"forward-scheme": "协议",
"forward-host": "转发主机/IP",
"forward-port": "转发端口",
"delete": "删除代理服务",
"delete-confirm": "你确定要删除代理服务 <strong>{domains}</strong> 吗?",
"help-title": "什么是代理服务?",
"help-content": "代理服务是你想转发网络应用的主机。\n代理服务可以为没有SSL服务的网络应用提供SSL服务可选。\n代理服务是Nginx代理管理器的最常见用途之一。",
"access-list": "通信规则",
"allow-websocket-upgrade": "支持WebSockets",
"ignore-invalid-upstream-ssl": "忽略无效的SSL",
"custom-forward-host-help": "为子目录转发添加路径。\n例如203.0.113.25/路径/",
"search": "搜索主机…"
},
"redirection-hosts": {
"title": "重定向",
"empty": "目前还没有重定向",
"add": "添加重定向",
"form-title": "{id, select, undefined{新建} other{编辑}} 重定向",
"forward-scheme": "协议",
"forward-http-status-code": "HTTP 代码",
"forward-domain": "转发域名",
"preserve-path": "保留路径",
"delete": "删除重定向",
"delete-confirm": "确定要删除 <strong>{domains}</strong> 的重定向吗?",
"help-title": "什么是重定向?",
"help-content": "重定向是将接入域名的请求推送到另一个域名。\n使用这种类型的主机最常见的原因是当你的网站改变了域名但你仍然有链接指向旧域名的应用。",
"search": "搜索主机…"
},
"dead-hosts": {
"title": "错误页面",
"empty": "目前还没有错误页面",
"add": "添加错误页面",
"form-title": "{id, select, undefined{新建} other{编辑}} 错误页面",
"delete": "删除错误页面",
"delete-confirm": "确定要删除错误页面吗?",
"help-title": "什么是错误页面?",
"help-content": "错误页面是一个简单的主机设置,显示错误页面。\n当你的域名被列入搜索引擎而你想提供一个更好的错误页面或特别是告诉搜索索引者域名页面不再存在时这可能是有用的。\n拥有这种主机的另一个好处是可以跟踪点击它的日志并查看访问来源。",
"search": "搜索主机…"
},
"streams": {
"title": "端口转发",
"empty": "目前还没有端口转发",
"add": "添加端口转发",
"form-title": "{id, select, undefined{新建} other{编辑}} 端口转发",
"incoming-port": "入站端口",
"forwarding-host": "转发主机",
"forwarding-port": "转发端口",
"tcp-forwarding": "TCP转发",
"udp-forwarding": "UDP转发",
"forward-type-error": "至少有一种协议必须被启用",
"protocol": "协议",
"tcp": "TCP",
"udp": "UDP",
"delete": "删除端口转发",
"delete-confirm": "你确定删除这个端口转发吗?",
"help-title": "什么是端口转发?",
"help-content": "端口转发是Nginx的一个相对较新的功能可以直接转发TCP/UDP流量到网络上的另一台计算机。\n如果你正在运行游戏服务器、FTP或SSH服务器这个功能就会很有用。",
"search": "搜索入站端口…"
},
"certificates": {
"title": "SSL证书",
"empty": "目前还没有SSL证书",
"add": "添加SSL证书",
"form-title": "添加 {provider, select, letsencrypt{Let's Encrypt} other{上传}} 证书",
"delete": "删除SSL证书",
"delete-confirm": "你确定要删除这个SSL证书吗任何使用该证书的主机之后都需要进行更新。",
"help-title": "SSL证书",
"help-content": "SSL证书TLS证书是一种加密密钥的形式它允许你的网站为终端用户进行数据加密。\n目前使用Let's Encrypt的服务来免费发放SSL证书。\n如果你的代理服务后面有个人信息、密码或敏感数据使用证书是个非常好的安全措施。\n如果你的网站不是面向互联网运行或者你只是想要一个通配符证书需要使用DNS认证获取证书。",
"other-certificate": "证书",
"other-certificate-key": "证书密钥",
"other-intermediate-certificate": "中间证书",
"force-renew": "现在更新",
"test-reachability": "测试服务器的可用性",
"reachability-title": "测试服务器的可用性",
"reachability-info": "使用 Site24x7 测试域名是否可以从公共互联网访问。在使用DNS认证时没有必要这样做。",
"reachability-failed-to-reach-api": "与API的通信失败请检查NPM是否正确运行",
"reachability-failed-to-check": "由于与 site24x7.com 的通信错误,检查可用性失败。",
"reachability-ok": "您的服务器是可用的,创建证书应该是可能的。",
"reachability-404": "在这个域名中发现了一个服务器但它似乎指向的不是本Nginx代理管理器。请确保你的域名指向本NPM实例的IP。",
"reachability-not-resolved": "在这个域名中没有可用的服务器。请确保你的域名存在并且指向本NPM实例运行的IP如果有必要请检查80端口在路由器中是否被映射到外网。",
"reachability-wrong-data": "在这个域名中发现了一个服务器但它返回了一个意外的数据。它是指向本NPM服务器吗请确保你的域名指向本NPM实例的IP。",
"reachability-other": "在这个域名中发现了一个服务器,但它返回了一个意外的状态代码{code}。它是指向本NPM服务器吗请确保你的域名指向本NPM实例的IP。",
"download": "下载",
"renew-title": "更新Let's Encrypt证书",
"search": "搜索证书…"
},
"access-lists": {
"title": "通信规则",
"empty": "目前还没有通信规则",
"add": "添加通信规则",
"form-title": "{id, select, undefined{新建} other{编辑}} 通信规则",
"delete": "删除通信规则",
"delete-confirm": "您确定要删除这个通信规则吗?",
"public": "公开规则",
"public-sub": "没有规则限制",
"help-title": "什么是通信规则?",
"help-content": "通信规则提供了一个特定客户IP地址的黑名单或白名单以及通过基本HTTP认证对代理服务的认证。\n你可以为一个通信规则配置多个客户规则、用户名和密码然后将其应用于代理服务。\n这对那些没有内置认证机制的转发网络服务或你想保护其免受未知客户的访问是最有用的。",
"item-count": "{count} {count, select, 1{个} other{个}}",
"client-count": "{count} {count, select, 1{条} other{条}}",
"proxy-host-count": "{count} {count, select, 1{个} other{个}}",
"delete-has-hosts": "该通信规则与{count}代理服务有关,在被删除后将成为公开的。",
"details": "详情",
"authorization": "授权用户",
"access": "规则",
"satisfy": "满足",
"satisfy-any": "满足任何要求",
"pass-auth": "授权访问主机",
"access-add": "添加",
"auth-add": "添加",
"search": "搜索通信规则…"
},
"users": {
"title": "用户",
"default_error": "必须改变默认的邮箱地址",
"add": "添加用户",
"nickname": "昵称",
"full-name": "名称",
"edit-details": "编辑详情",
"change-password": "修改密码",
"edit-permissions": "编辑权限",
"sign-in-as": "以此用户登录",
"form-title": "{id, select, undefined{新建} other{编辑}} 用户",
"delete": "删除 {name, select, undefined{User} other{{name}}}",
"delete-confirm": "您确定要删除 <strong>{name}</strong> 吗?",
"password-title": "修改密码{self, select, false{ {name}} other{}}",
"current-password": "修改密码",
"new-password": "新密码",
"confirm-password": "确认密码",
"permissions-title": "{name} 的权限",
"admin-perms": "该用户是管理员,一些项目不能被修改。",
"perms-visibility": "项目可见性",
"perms-visibility-user": "仅限创建的项目",
"perms-visibility-all": "所有项目",
"perm-manage": "管理项目",
"perm-view": "仅限查看",
"perm-hidden": "隐藏",
"search": "搜索用户…"
},
"audit-log": {
"title": "检查日志",
"empty": "目前还没有日志。",
"empty-subtitle": "只要你或其他用户修改了什么,这些历史就会在这里显示出来。",
"proxy-host": "代理服务",
"redirection-host": "重定向",
"dead-host": "错误页面",
"stream": "端口转发",
"user": "用户",
"certificate": "证书",
"access-list": "通信规则",
"created": "创建 {name}",
"updated": "更新 {name}",
"deleted": "删除 {name}",
"enabled": "启用 {name}",
"disabled": "禁用 {name}",
"renewed": "续约 {name}",
"meta-title": "事件详情",
"view-meta": "查看详情",
"date": "日期",
"search": "搜索日志…"
},
"settings": {
"title": "设置",
"default-site": "默认页面",
"default-site-description": "当 Nginx 遇到未知请求时显示的默认页面",
"default-site-congratulations": "成功页面",
"default-site-404": "错误页面 (404)",
"default-site-444": "无响应 (444)",
"default-site-html": "自定义页面",
"default-site-redirect": "重定向"
}
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "nginx-proxy-manager", "name": "nginx-proxy-manager",
"version": "0.0.0", "version": "2.12.2",
"description": "A beautiful interface for creating Nginx endpoints", "description": "A beautiful interface for creating Nginx endpoints",
"main": "js/index.js", "main": "js/index.js",
"devDependencies": { "devDependencies": {

8
scripts/build-zh Normal file
View File

@ -0,0 +1,8 @@
#!/bin/bash
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
. "$DIR/ci/frontend-build"
cd "${DIR}/../.."
docker build -t chishin/nginx-proxy-manager-zh:2.12.2 -f docker/Dockerfile-zh .

20
scripts/buildx-zh Normal file
View File

@ -0,0 +1,20 @@
#!/bin/bash
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
. "$DIR/ci/frontend-build"
cd "${DIR}/../.."
# Buildx Builder
docker buildx create --name "Buildx-NPM" || echo
docker buildx use "Buildx-NPM"
if [ "${BUILD_TAG:-0}" != 0 ]; then
docker buildx build -f docker/Dockerfile-zh $BUILD_TAG --platform $BUILD_PLATFORM . --push
else
docker buildx build -f docker/Dockerfile-zh -t "chishin/nginx-proxy-manager-zh:dev" --platform linux/amd64,linux/arm64,linux/arm/7 . --push
fi
docker buildx rm "Buildx-NPM"
echo "Multiarch build Complete"