Repository: hello-yunshu/Xray_bash_onekey Branch: main Commit: 582d408f6021 Files: 58 Total size: 740.0 KB Directory structure: gitextract_9rt8erfj/ ├── .dockerignore ├── .editorconfig ├── .github/ │ └── workflows/ │ ├── cleanup.yml │ ├── i18n.yml │ └── translate_readme.yml ├── DOCKER.md ├── Dockerfile ├── LICENSE ├── README.md ├── VLESS_reality/ │ └── config.json ├── VLESS_tls/ │ └── config.json ├── VLESS_xtls/ │ └── config.json ├── auto_update.sh ├── docker-compose.yml ├── docker-entrypoint.sh ├── fail2ban_manager.sh ├── fake-systemctl ├── file_manager.sh ├── install.sh ├── languages/ │ ├── en/ │ │ ├── DOCKER.md │ │ ├── LC_MESSAGES/ │ │ │ ├── version │ │ │ └── xray_install.mo │ │ └── README.md │ ├── fa/ │ │ ├── DOCKER.md │ │ ├── LC_MESSAGES/ │ │ │ ├── version │ │ │ └── xray_install.mo │ │ └── README.md │ ├── fr/ │ │ ├── DOCKER.md │ │ ├── LC_MESSAGES/ │ │ │ ├── version │ │ │ └── xray_install.mo │ │ └── README.md │ ├── ko/ │ │ ├── DOCKER.md │ │ ├── LC_MESSAGES/ │ │ │ ├── version │ │ │ └── xray_install.mo │ │ └── README.md │ ├── ru/ │ │ ├── DOCKER.md │ │ ├── LC_MESSAGES/ │ │ │ ├── version │ │ │ └── xray_install.mo │ │ └── README.md │ └── zh_CN/ │ └── LC_MESSAGES/ │ ├── version │ └── xray_install.mo ├── po/ │ ├── POTFILES.in │ ├── cache_English.json │ ├── cache_French.json │ ├── cache_Korean.json │ ├── cache_Persian.json │ ├── cache_Russian.json │ ├── en.po │ ├── fa.po │ ├── fr.po │ ├── ko.po │ ├── ru.po │ ├── xray_install.pot │ └── zh_CN.po ├── ssl_update.sh ├── status_config.json ├── translate.py └── translate_readme.py ================================================ FILE CONTENTS ================================================ ================================================ FILE: .dockerignore ================================================ .github/ .git/ .gitignore .editorconfig LICENSE po/ translate.py translate_readme.py Dockerfile docker-compose.yml docker-entrypoint.sh fake-systemctl .dockerignore ================================================ FILE: .editorconfig ================================================ root = true [*] end_of_line = crlf insert_final_newline = true charset = utf-8 ================================================ FILE: .github/workflows/cleanup.yml ================================================ name: Cleanup Workflow Runs on: workflow_dispatch: schedule: - cron: '0 0 * * *' jobs: del_runs: runs-on: ubuntu-latest permissions: actions: write contents: read steps: - name: Delete workflow runs uses: Mattraks/delete-workflow-runs@main with: token: ${{ github.token }} repository: ${{ github.repository }} retain_days: 14 keep_minimum_runs: 10 ================================================ FILE: .github/workflows/i18n.yml ================================================ name: Update Translations on: push: paths: - 'install.sh' - 'fail2ban_manager.sh' - 'file_manager.sh' - 'translate.py' branches: - main workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: update-translations: runs-on: ubuntu-latest steps: - name: Check running workflows uses: styfle/cancel-workflow-action@main with: access_token: ${{ github.token }} - uses: actions/checkout@main with: persist-credentials: true - name: Restore translation cache id: cache-translations uses: actions/cache@main with: path: po/cache_*.json key: ${{ runner.os }}-translations-${{ hashFiles('po/*.po') }} restore-keys: | ${{ runner.os }}-translations- - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y gettext python3 python3-pip i18nspector pip3 install googletrans-py langdetect openai - name: Cache Python dependencies uses: actions/cache@main with: path: ~/.cache/pip key: ${{ runner.os }}-pip-googletrans-py-langdetect-openai restore-keys: | ${{ runner.os }}-pip- - name: Setup directories run: | mkdir -p po mkdir -p languages/{en,fa,ru,zh_CN,ko,fr}/LC_MESSAGES - name: Extract strings from specified scripts run: | echo "install.sh" > po/POTFILES.in echo "fail2ban_manager.sh" >> po/POTFILES.in echo "file_manager.sh" >> po/POTFILES.in xgettext \ --files-from=po/POTFILES.in \ --from-code=UTF-8 \ --language=Shell \ --keyword=gettext \ --package-name=xray_install \ --package-version=1.0 \ --msgid-bugs-address=https://github.com/hello-yunshu/Xray_bash_onekey/issues \ --copyright-holder="yunshu" \ --output=po/xray_install.pot - name: Update/Create PO files run: | rm -f po/*.po for lang in zh_CN en fa ru ko fr; do msginit --no-translator --locale=$lang --input=po/xray_install.pot --output=po/$lang.po done - name: Auto translate run: python3 translate.py env: AI_API_KEY: ${{ secrets.AI_API_KEY }} - name: Compile MO files if necessary run: | needs_compile=false for lang in en fa ru ko fr; do if [ ! -f "po/${lang}.po.no-update" ]; then needs_compile=true if ! msgfmt --check -v --statistics -o languages/${lang}/LC_MESSAGES/xray_install.mo po/${lang}.po; then echo "Error in ${lang}.po file:" cat po/${lang}.po fi fi done if [ "$needs_compile" = false ]; then echo "No translations were updated. Skipping MO file compilation." fi - name: Run i18nspector checks on PO files run: | i18nspector check po/ - name: Run i18nspector checks on MO files if compiled run: | for lang in en fa ru ko fr; do if [ ! -f "po/${lang}.po.no-update" ] && [ -f "languages/${lang}/LC_MESSAGES/xray_install.mo" ]; then i18nspector check-binary languages/${lang}/LC_MESSAGES/xray_install.mo fi done - name: Save translation cache if: always() uses: actions/cache@main with: path: po/cache_*.json key: ${{ runner.os }}-translations-${{ hashFiles('po/*.po') }} - name: Pull changes run: | git pull origin main - name: Commit changes if necessary run: | needs_commit=false for lang in en fa ru ko fr; do if [ ! -f "po/${lang}.po.no-update" ]; then needs_commit=true break else rm po/${lang}.po.no-update fi done if [ "$needs_commit" = true ]; then git config --local user.email "action@github.com" git config --local user.name "GitHub Action" git add po/ languages/ git commit -m "Update translations for all languages [$(date +%Y-%m-%d)]" || echo "No changes to commit" git push else echo "No translations were updated. Skipping commit and push." fi ================================================ FILE: .github/workflows/translate_readme.yml ================================================ name: Translate README on: push: paths: - 'README.md' branches: - main workflow_dispatch: jobs: translate-readme: runs-on: ubuntu-latest steps: - name: Check running workflows uses: styfle/cancel-workflow-action@main with: access_token: ${{ github.token }} - uses: actions/checkout@main with: persist-credentials: true - name: Set up Python uses: actions/setup-python@main with: python-version: '3.x' - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y gettext pip install --upgrade pip pip install googletrans==4.0.0-rc1 langdetect markdown beautifulsoup4 # 确保使用具体版本,避免兼容性问题 - name: Cache Python dependencies uses: actions/cache@main with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('**/translate_readme.py') }} restore-keys: | ${{ runner.os }}-pip- - name: Translate README run: python3 translate_readme.py README.md languages/ - name: Pull changes run: | git pull origin main - name: Commit changes env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | git config --local user.email "action@github.com" git config --local user.name "GitHub Action" git add languages/ git commit -m "Update translations for README [$(date +%Y-%m-%d)]" || echo "No changes to commit" git push https://${GITHUB_ACTOR}:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git HEAD:main ================================================ FILE: DOCKER.md ================================================ # Docker 部署指南 简体中文 | [English](/languages/en/DOCKER.md) | [Français](/languages/fr/DOCKER.md) | [Русский](/languages/ru/DOCKER.md) | [فارسی](/languages/fa/DOCKER.md) | [한국어](/languages/ko/DOCKER.md) 本文档介绍如何使用 Docker 运行 Xray 一键脚本。镜像预装了 Xray 和 Nginx,容器内可直接使用原脚本的所有功能。 ## 快速启动 ### 1. 克隆仓库并构建 ```bash git clone https://github.com/hello-yunshu/Xray_bash_onekey.git cd Xray_bash_onekey docker compose up -d ``` ### 2. 进入交互式安装菜单 ```bash docker attach xray-onekey ``` 首次运行会自动启动安装脚本,按照提示完成配置即可。退出菜单后容器自动进入守护模式。 ### 3. 后续管理 ```bash docker exec -it xray-onekey idleleo ``` ## 运行模式 | 模式 | 说明 | 命令 | |------|------|------| | `idleleo`(默认) | 启动服务并进入管理菜单 | `docker compose up -d` + `docker attach xray-onekey` | | `start` | 仅启动服务(守护模式) | 修改 `docker-compose.yml` 中 `command: start` | | `shell` | 启动服务并进入 Shell | `docker exec -it xray-onekey bash` | ## 管理操作 所有原脚本命令均可使用: ```bash docker exec -it xray-onekey idleleo # 管理菜单 docker exec -it xray-onekey idleleo -s # 查看安装信息 docker exec -it xray-onekey idleleo -x # 更新 Xray docker exec -it xray-onekey idleleo -n # 更新 Nginx docker exec -it xray-onekey idleleo -h # 查看帮助 ``` ## 使用 docker run ```bash docker build -t xray-onekey . docker run -d --name xray-onekey --network host --cap-add NET_ADMIN -e TZ=Asia/Shanghai -v xray-conf:/etc/idleleo/conf -v xray-cert:/etc/idleleo/cert -v xray-info:/etc/idleleo/info -v xray-logs:/var/log/xray -v acme-data:/root/.acme.sh -it xray-onekey ``` ## 数据持久化 | Volume | 容器路径 | 说明 | |--------|---------|------| | `xray-conf` | `/etc/idleleo/conf` | Xray 和 Nginx 配置文件 | | `xray-cert` | `/etc/idleleo/cert` | SSL 证书文件 | | `xray-info` | `/etc/idleleo/info` | 连接信息和状态文件 | | `xray-logs` | `/var/log/xray` | Xray 日志文件 | | `acme-data` | `/root/.acme.sh` | acme.sh 证书签发数据 | ## 网络配置 容器使用 `network_mode: host`,直接使用宿主机网络: * Reality 模式需要看到真实客户端 IP * TLS 模式需要直接绑定 443/80 端口 * 避免额外的 NAT 转发性能损耗 ## 注意事项 * 容器内使用 `fake-systemctl` 替代 systemd,`systemctl` 命令可正常使用 * 内置看门狗每 30 秒检查服务状态,异常时自动重启 * 退出管理菜单后容器自动进入守护模式,服务不会中断 * 防火墙建议在宿主机层面管理 * 证书自动续签在容器内可正常工作(需确保 80 端口可访问) ## 故障排查 ```bash docker logs xray-onekey # 查看容器日志 docker exec -it xray-onekey bash # 进入容器 docker exec -it xray-onekey idleleo -s # 查看安装信息 ``` ### 完全重置 ```bash docker compose down docker volume rm xray-conf xray-cert xray-info xray-logs acme-data docker compose up -d ``` ================================================ FILE: Dockerfile ================================================ FROM debian:bookworm-slim ARG XRAY_VERSION=26.3.27 ARG NGINX_BUILD_VERSION=2026.04.14 ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y --no-install-recommends \ bc \ ca-certificates \ cron \ curl \ dbus \ fail2ban \ gettext \ git \ gnupg \ gzip \ iftop \ iptables \ iptables-persistent \ jq \ lsof \ netcat-openbsd \ nmap \ openssl \ procps \ psmisc \ python3 \ qrencode \ socat \ sysvinit-utils \ unzip \ vim \ && rm -rf /var/lib/apt/lists/* RUN groupadd -f nogroup && \ id nobody >/dev/null 2>&1 || useradd -g nogroup -s /usr/sbin/nologin nobody RUN temp_dir=$(mktemp -d) && cd "$temp_dir" && \ nginx_filename="xray-nginx-custom-$(dpkg --print-architecture).tar.gz" && \ curl -L -o "$nginx_filename" "https://github.com/hello-yunshu/Xray_bash_onekey_Nginx/releases/download/v${NGINX_BUILD_VERSION}/$nginx_filename" && \ tar -xzf "$nginx_filename" && \ mv ./nginx /usr/local/nginx && \ cd / && rm -rf "$temp_dir" RUN curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh | bash -s -- install -f --version v${XRAY_VERSION} && \ rm -f /usr/local/etc/xray/config.json COPY fake-systemctl /usr/local/bin/systemctl RUN chmod +x /usr/local/bin/systemctl WORKDIR /etc/idleleo COPY . /etc/idleleo/ RUN ln -sf /etc/idleleo/install.sh /usr/bin/idleleo && \ ln -sf /etc/idleleo/conf/xray/config.json /usr/local/etc/xray/config.json && \ chmod +x /etc/idleleo/install.sh /etc/idleleo/auto_update.sh \ /etc/idleleo/ssl_update.sh /etc/idleleo/fail2ban_manager.sh \ /etc/idleleo/file_manager.sh && \ mkdir -p /etc/idleleo/conf/xray /etc/idleleo/conf/nginx \ /etc/idleleo/cert /etc/idleleo/info /etc/idleleo/logs \ /etc/idleleo/tmp /var/log/xray /root/.acme.sh RUN mkdir -p /etc/systemd/system && \ printf '[Unit]\nDescription=Xray Service\n[Service]\nType=simple\nExecStart=/usr/local/bin/xray run -config /etc/idleleo/conf/xray/config.json\n[Install]\nWantedBy=multi-user.target\n' > /etc/systemd/system/xray.service && \ printf '[Unit]\nDescription=NGINX HTTP and reverse proxy server\n[Service]\nType=forking\nPIDFile=/usr/local/nginx/logs/nginx.pid\nExecStart=/usr/local/nginx/sbin/nginx\nExecReload=/usr/local/nginx/sbin/nginx -s reload\nExecStop=/bin/kill -s QUIT \\$MAINPID\n[Install]\nWantedBy=multi-user.target\n' > /etc/systemd/system/nginx.service && \ echo '* soft nofile 65536' >> /etc/security/limits.conf && \ echo '* hard nofile 65536' >> /etc/security/limits.conf COPY docker-entrypoint.sh /docker-entrypoint.sh RUN chmod +x /docker-entrypoint.sh EXPOSE 443 80 VOLUME ["/etc/idleleo/conf", "/etc/idleleo/cert", "/etc/idleleo/info", "/var/log/xray", "/root/.acme.sh"] ENTRYPOINT ["/docker-entrypoint.sh"] CMD ["idleleo"] ================================================ FILE: LICENSE ================================================ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ================================================ FILE: README.md ================================================ # Xray 一键安装脚本 — Reality / VLESS WebSocket/gRPC+TLS + Nginx 简体中文 | [English](/languages/en/README.md) | [Français](/languages/fr/README.md) | [Русский](/languages/ru/README.md) | [فارسی](/languages/fa/README.md) | [한국어](/languages/ko/README.md) [![GitHub stars](https://img.shields.io/github/stars/hello-yunshu/Xray_bash_onekey?color=%230885ce)](https://github.com/hello-yunshu/Xray_bash_onekey/stargazers) [![GitHub forks](https://img.shields.io/github/forks/hello-yunshu/Xray_bash_onekey?color=%230885ce)](https://github.com/hello-yunshu/Xray_bash_onekey/network) [![GitHub issues](https://img.shields.io/github/issues/hello-yunshu/Xray_bash_onekey)](https://github.com/hello-yunshu/Xray_bash_onekey/issues) > Thanks for non-commercial open source development authorization by JetBrains ## 功能特性 * 输入 `idleleo` 即可管理脚本([查看 `idleleo` 背景故事](https://github.com/hello-yunshu/Xray_bash_onekey/wiki/%E8%BF%B7%E9%9B%BE%E5%90%8E%E7%9A%84%E7%9C%9F%E5%AE%B9)) * 采用 Qwen-MT-Plus AI 实现多语言精准翻译 * 支持 Reality 协议,建议搭配 Nginx 前置(脚本内可安装) * 内置 fail2ban 防护(脚本内可安装) * 采用 [@DuckSoft](https://github.com/DuckSoft) 的分享链接[提案](https://github.com/XTLS/Xray-core/issues/91)(beta),兼容 Qv2ray、V2rayN、V2rayNG * 采用 [XTLS](https://github.com/XTLS/Xray-core/issues/158) 提案,遵循 [UUIDv5](https://tools.ietf.org/html/rfc4122#section-4.3) 标准,支持自定义字符串映射至 VLESS UUID * 支持 gRPC 协议:[使用 gRPC 协议](https://hey.run/archives/xrayjin-jie-wan-fa---shi-yong-grpcxie-yi) * 支持 Reality / ws/gRPC 负载均衡: - [部署 Reality 负载均衡](https://hey.run/archives/bushu-reality-balance) - [搭建后端负载均衡](https://hey.run/archives/xrayjin-jie-wan-fa---da-jian-hou-duan-fu-wu-qi-fu-zai-jun-heng) ## 延伸阅读 * Reality 安装指南:[搭建 Xray Reality 服务器](https://hey.run/archives/da-jian-xray-reality-xie-yi-fu-wu-qi) * Reality 协议风险:[Xray Reality 协议的风险](https://hey.run/archives/reality-xie-yi-de-feng-xian) * Reality 加速服务器:[利用 Reality 协议"漏洞"加速服务器](https://hey.run/archives/use-reality) ## Telegram 群组 * 交流群:[点击加入](https://t.me/+48VSqv7xIIFmZDZl) ## 准备工作 * 一台境外服务器,具备公网 IP * 安装 Reality 协议:需准备符合 Xray 要求的目标域名 * 安装 TLS 版本:需准备域名并添加 A 记录 * 阅读 [Xray 官方文档](https://xtls.github.io),了解 Reality、TLS、WebSocket、gRPC 及 Xray 相关概念 * **确保已安装 curl**:CentOS 用户执行 `yum install -y curl`;Debian/Ubuntu 用户执行 `apt install -y curl` ## 快速安装 ```bash bash <(curl -Ss https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/install.sh) ``` ## Docker 部署 支持使用 Docker 部署,镜像预装 Xray 和 Nginx,容器内可直接使用原脚本所有功能。详见 [Docker 部署指南](/DOCKER.md)。 ```bash git clone https://github.com/hello-yunshu/Xray_bash_onekey.git cd Xray_bash_onekey docker compose up -d docker attach xray-onekey ``` ## 注意事项 * 不了解各项设置含义时,除必填项外请使用默认值(全程回车即可) * Cloudflare 用户请在安装完成后再开启 CDN * 本脚本需要 Linux 基础知识及计算机网络常识 * 支持 Debian 12+ / Ubuntu 24.04+ / CentOS Stream 8+,部分 CentOS 模板可能存在编译问题,建议遇到问题时更换系统 * 建议单服务器仅部署单个代理,使用默认 443 端口 * 自定义字符串映射至 UUIDv5 需要客户端支持 * 推荐在纯净环境下使用;新手请勿使用 CentOS * 本程序依赖 Nginx,已通过 [LNMP](https://lnmp.org) 等脚本安装过 Nginx 的用户请注意潜在冲突 * 请勿在未验证可用性前将本脚本用于生产环境 * 作者仅提供有限支持(因为太笨了) ## 鸣谢 * 基于 [wulabing/V2Ray_ws-tls_bash_onekey](https://github.com/wulabing/V2Ray_ws-tls_bash_onekey) 开发 * TCP 加速脚本引用自 [ylx2016/Linux-NetSpeed](https://github.com/ylx2016/Linux-NetSpeed) ## 证书配置 **自定义证书**:将 crt 和 key 文件分别命名为 `xray.crt` 和 `xray.key`,放入 `/etc/idleleo/cert` 目录(目录不存在则先创建)。请注意证书权限及有效期,自定义证书过期后需自行续签。 **自动证书**:脚本支持自动生成 Let's Encrypt 证书(有效期 3 个月),理论上支持自动续签。 ## 查看客户端配置 ```bash cat /etc/idleleo/info/xray_info.inf ``` ## Xray 简介 * Xray 是一款优秀的开源网络代理工具,支持 Windows、macOS、Android、iOS、Linux 等全平台 * 本脚本为一键完整配置脚本,所有流程正常完成后,按输出结果设置客户端即可使用 * **强烈建议**全面了解程序的工作流程及原理 ## 服务管理 | 操作 | 命令 | |------|------| | 启动 Xray | `systemctl start xray` | | 停止 Xray | `systemctl stop xray` | | 启动 Nginx | `systemctl start nginx` | | 停止 Nginx | `systemctl stop nginx` | ## 相关目录 | 内容 | 路径 | |------|------| | Xray 服务端配置 | `/etc/idleleo/conf/xray/config.json` | | Nginx 目录 | `/usr/local/nginx` | | 证书文件 | `/etc/idleleo/cert/xray.key`、`/etc/idleleo/cert/xray.crt` | | 配置信息等 | `/etc/idleleo` | ================================================ FILE: VLESS_reality/config.json ================================================ { "log": { "access": "/var/log/xray/access.log", "error": "/var/log/xray/error.log", "loglevel": "warning" }, "inbounds": [ { "port": 9443, "listen": "0.0.0.0", "protocol": "VLESS", "tag": "VLESS-Reality-in", "settings": { "clients": [ { "id": "UUID", "flow": "xtls-rprx-vision", "level": 0, "email": "me@hey.run" } ], "decryption": "none" }, "streamSettings": { "network": "raw", "security": "reality", "realitySettings": { "target": "example.com:443", "serverNames": ["example.com"], "privateKey": "privateKey", "shortIds": ["shortIds"] } } }, { "port": 10086, "listen": "127.0.0.1", "tag": "VLESS-ws-in", "protocol": "VLESS", "settings": { "clients": [ { "id": "UUID", "level": 0, "email": "ws@hey.run" } ], "decryption": "none" }, "streamSettings": { "network": "ws", "security": "none", "wsSettings": { "path": "/websocket" } } }, { "port": 10087, "listen": "127.0.0.1", "tag": "VLESS-gRPC-in", "protocol": "VLESS", "settings": { "clients": [ { "id": "UUID", "level": 0, "email": "me@hey.run" } ], "decryption": "none" }, "streamSettings": { "network": "grpc", "security": "none", "grpcSettings": { "serviceName": "grpc", "multiMode": true, "idle_timeout": 20 } } } ], "outbounds": [ { "protocol": "freedom", "settings": { "domainStrategy": "UseIPv4v6" }, "tag": "direct" }, { "protocol": "blackhole", "tag": "blocked" } ], "dns": { "servers": [ "https+local://dns.google/dns-query", "https+local://cloudflare-dns.com/dns-query", "https+local://doh.opendns.com/dns-query", "208.67.222.222", "8.8.8.8", "1.1.1.1", "localhost" ], "disableCache": false }, "routing": { "domainStrategy": "AsIs", "rules": [ { "type": "field", "inboundTag": [ "VLESS-Reality-in", "VLESS-ws-in", "VLESS-gRPC-in" ], "outboundTag": "direct" } ] } } ================================================ FILE: VLESS_tls/config.json ================================================ { "log": { "access": "/var/log/xray/access.log", "error": "/var/log/xray/error.log", "loglevel": "warning" }, "inbounds": [ { "port": 10086, "listen": "127.0.0.1", "tag": "VLESS-ws-in", "protocol": "VLESS", "settings": { "clients": [ { "id": "UUID", "level": 0, "email": "me@hey.run" } ], "decryption": "none" }, "streamSettings": { "network": "ws", "security": "none", "wsSettings": { "path": "/ray/" } } }, { "port": 10087, "listen": "127.0.0.1", "tag": "VLESS-gRPC-in", "protocol": "VLESS", "settings": { "clients": [ { "id": "UUID", "level": 0, "email": "me@hey.run" } ], "decryption": "none" }, "streamSettings": { "network": "grpc", "security": "none", "grpcSettings": { "serviceName": "grpc", "multiMode": true, "idle_timeout": 20 } } } ], "outbounds": [ { "protocol": "freedom", "settings": { "domainStrategy": "UseIPv4v6" }, "tag": "direct" }, { "protocol": "blackhole", "tag": "blocked" } ], "dns": { "servers": [ "https+local://dns.google/dns-query", "https+local://cloudflare-dns.com/dns-query", "https+local://doh.opendns.com/dns-query", "208.67.222.222", "8.8.8.8", "1.1.1.1", "localhost" ], "disableCache": false }, "routing": { "domainStrategy": "AsIs", "rules": [ { "type": "field", "inboundTag": [ "VLESS-ws-in", "VLESS-gRPC-in" ], "outboundTag": "direct" } ] } } ================================================ FILE: VLESS_xtls/config.json ================================================ { "log": { "access": "/var/log/xray/access.log", "error": "/var/log/xray/error.log", "loglevel": "warning" }, "inbounds": [ { "port": 443, "listen": "0.0.0.0", "protocol": "VLESS", "tag": "VLESS-XTLS-in", "settings": { "clients": [ { "id": "UUID", "flow": "xtls-rprx-vision", "level": 0, "email": "me@hey.run" } ], "decryption": "none", "fallbacks": [ { "outboundTag": "blocked", "xver": 1 } ] }, "streamSettings": { "network": "raw", "security": "none" } } ], "outbounds": [ { "protocol": "freedom", "settings": { "domainStrategy": "UseIPv4v6" }, "tag": "direct" }, { "protocol": "blackhole", "tag": "blocked" } ], "dns": { "servers": [ "8.8.8.8", "1.1.1.1", "localhost" ], "disableCache": false }, "routing": { "domainStrategy": "AsIs", "rules": [ { "type": "field", "inboundTag": [ "VLESS-XTLS-in" ], "outboundTag": "direct" } ] } } ================================================ FILE: auto_update.sh ================================================ #!/usr/bin/env bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH VERSION="1.0.4" idleleo_dir="/etc/idleleo" local_bin="/usr/local" nginx_dir="${local_bin}/nginx" xray_conf_dir="${idleleo_dir}/conf/xray" xray_conf="${xray_conf_dir}/config.json" log_dir="${idleleo_dir}/logs" log_file="${log_dir}/auto_update.log" running_file="${log_dir}/auto_update.running" xray_qr_config_file="${idleleo_dir}/info/vless_qr.json" failed_update_marker="${log_dir}/update_failed.mark" check_update() { temp_file="/tmp/temp_script.sh" if ! curl -s -o "$temp_file" "https://github.com/hello-yunshu/Xray_bash_onekey/raw/refs/heads/main/auto_update.sh"; then echo "Failed to download remote script" >>${log_file} return 1 fi remote_version=$(grep "^VERSION=" "$temp_file" | cut -d'"' -f2) if [ -z "$remote_version" ]; then echo "Unable to get remote version number" >>${log_file} return 1 fi if [ "$VERSION" != "$remote_version" ]; then echo "New version found: $remote_version" >>${log_file} cp "$temp_file" "$0" chmod +x "$0" rm -f "$temp_file" exec "$0" "$@" fi rm -f "$temp_file" return 0 } if [[ -f "${failed_update_marker}" ]]; then echo "Previous update failed, skipping auto update. Remove ${failed_update_marker} or perform manual update to re-enable." >>${log_file} exit 0 fi [[ ! -d "${log_dir}" ]] && mkdir -p ${log_dir} if [[ -f "${running_file}" ]]; then echo "Previous auto update process is still running! Checked at: $(date '+%Y-%m-%d %H:%M') Manual troubleshooting recommended!" >>${log_file} exit 1 else touch ${running_file} fi [[ -f "${log_file}" ]] && rm -rf ${log_file} echo "Update time: $(date '+%Y-%m-%d %H:%M')" >${log_file} check_update get_versions_all=$(curl -s https://cdn.jsdelivr.net/gh/hello-yunshu/Xray_bash_onekey_api@main/xray_shell_versions.json) if [[ ! -f ${xray_qr_config_file} ]]; then echo "Config file not found, skipping update checks." >>${log_file} rm -rf ${running_file} exit 0 fi info_extraction_all=$(jq -rc . ${xray_qr_config_file}) check_online_version() { echo ${get_versions_all} | jq -rc ".$1" [[ 0 -ne $? ]] && echo "Online version check failed, please try again later!" >>${log_file} && exit 1 } info_extraction() { echo ${info_extraction_all} | jq -r ".$1" } shell_online_version="$(check_online_version shell_online_version)" xray_online_version="$(check_online_version xray_online_version)" nginx_online_version="$(check_online_version nginx_build_version)" if [[ -f ${xray_qr_config_file} ]]; then if [[ $(info_extraction shell_version) == null ]] || [[ $(info_extraction shell_version) != ${shell_online_version} ]]; then bash idleleo -u auto_update [[ 0 -ne $? ]] && echo "Script update failed!" >>${log_file} && exit 1 echo "Script updated successfully!" >>${log_file} add_shell_version=$(jq -r ". += {\"shell_version\": \"${shell_online_version}\"}" ${xray_qr_config_file}) echo "${add_shell_version}" | jq . >${xray_qr_config_file} else echo "Script is up to date!" >>${log_file} fi if [[ $(info_extraction nginx_build_version) != null ]] && [[ -f "${nginx_dir}/sbin/nginx" ]]; then if [[ ${nginx_online_version} != $(info_extraction nginx_build_version) ]]; then echo "Updating Nginx..." >>${log_file} auto_update=YES bash idleleo -n auto_update if [[ $? -ne 0 ]]; then echo "Nginx update failed!" >>${log_file} touch ${failed_update_marker} else echo "Nginx updated successfully!" >>${log_file} fi else echo "Nginx is up to date!" >>${log_file} fi else echo "Nginx not installed!" >>${log_file} fi if [[ -f ${xray_qr_config_file} ]] && [[ -f ${xray_conf} ]] && [[ -f /usr/local/bin/xray ]]; then if [[ $(info_extraction xray_version) != null ]]; then if [[ ${xray_online_version} != $(info_extraction xray_version) ]]; then echo "Updating Xray..." >>${log_file} auto_update=YES bash idleleo -x auto_update if [[ $? -ne 0 ]]; then echo "Xray update failed!" >>${log_file} touch ${failed_update_marker} else echo "Xray updated successfully!" >>${log_file} fi else echo "Xray is up to date!" >>${log_file} fi else echo "Xray version unknown, cannot auto update" >>${log_file} fi else echo "Xray not installed!" >>${log_file} fi fi rm -rf ${running_file} ================================================ FILE: docker-compose.yml ================================================ services: xray-onekey: build: context: . dockerfile: Dockerfile container_name: xray-onekey restart: unless-stopped network_mode: host cap_add: - NET_ADMIN environment: - TZ=Asia/Shanghai volumes: - xray-conf:/etc/idleleo/conf - xray-cert:/etc/idleleo/cert - xray-info:/etc/idleleo/info - xray-logs:/var/log/xray - acme-data:/root/.acme.sh stdin_open: true tty: true volumes: xray-conf: xray-cert: xray-info: xray-logs: acme-data: ================================================ FILE: docker-entrypoint.sh ================================================ #!/bin/bash set -e export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin XRAY_BIN="/usr/local/bin/xray" NGINX_BIN="/usr/local/nginx/sbin/nginx" XRAY_CONF="/etc/idleleo/conf/xray/config.json" NGINX_CONF="/usr/local/nginx/conf/nginx.conf" _start_cron() { pgrep -f "cron" >/dev/null 2>&1 || cron } _start_services() { if [[ -f "$XRAY_CONF" ]] && [[ -x "$XRAY_BIN" ]]; then echo "[entrypoint] Starting Xray..." systemctl start xray fi if [[ -f "$NGINX_CONF" ]] && [[ -x "$NGINX_BIN" ]]; then echo "[entrypoint] Starting Nginx..." systemctl start nginx fi } STOPPING=0 _stop_services() { if [[ "$STOPPING" -eq 1 ]]; then return; fi STOPPING=1 echo "[entrypoint] Stopping services..." if [[ -f /usr/local/nginx/logs/nginx.pid ]]; then "$NGINX_BIN" -s stop 2>/dev/null || true fi pkill -f "$NGINX_BIN" 2>/dev/null || true if [[ -f /var/run/xray.pid ]]; then kill "$(cat /var/run/xray.pid 2>/dev/null)" 2>/dev/null || true fi pkill -f "$XRAY_BIN" 2>/dev/null || true echo "[entrypoint] Services stopped." } _watchdog() { while [[ "$STOPPING" -eq 0 ]]; do if [[ -f "$XRAY_CONF" ]] && [[ -x "$XRAY_BIN" ]]; then if ! systemctl -q is-active xray 2>/dev/null; then echo "[watchdog] Xray not running, restarting..." systemctl start xray fi fi if [[ -f "$NGINX_CONF" ]] && [[ -x "$NGINX_BIN" ]]; then if ! systemctl -q is-active nginx 2>/dev/null; then echo "[watchdog] Nginx not running, restarting..." systemctl start nginx fi fi sleep 30 done } trap '_stop_services; exit 0' SIGTERM SIGINT SIGQUIT _start_cron case "${1:-idleleo}" in idleleo) if [[ -f "$XRAY_CONF" ]] && [[ -x "$XRAY_BIN" ]]; then _start_services echo "[entrypoint] Services started. Launching management script..." echo "[entrypoint] Type 'exit' to return to daemon mode." bash /etc/idleleo/install.sh echo "[entrypoint] Entering daemon mode..." _watchdog else echo "[entrypoint] No config found. Launching install script..." bash /etc/idleleo/install.sh if [[ -f "$XRAY_CONF" ]]; then _start_services echo "[entrypoint] Installation complete. Entering daemon mode..." else echo "[entrypoint] No config. Entering daemon mode..." fi _watchdog fi ;; start) _start_services echo "[entrypoint] Services started. Daemon mode." _watchdog ;; shell|bash) _start_services echo "[entrypoint] Services started. Opening shell..." /bin/bash echo "[entrypoint] Entering daemon mode..." _watchdog ;; *) _start_services exec "$@" ;; esac ================================================ FILE: fail2ban_manager.sh ================================================ #!/bin/bash # 定义当前版本号 mf_SCRIPT_VERSION="1.2.1" mf_main_menu() { check_system while true; do echo log_echo "${GreenBG} $(gettext "设置") Fail2ban $(gettext "用于防止暴力破解") ${Font}" log_echo "${Green} $(gettext "主菜单") ${Font}" log_echo "1. ${Green}$(gettext "安装") Fail2ban${Font}" log_echo "2. ${Green}$(gettext "管理") Fail2ban${Font}" log_echo "3. ${Green}$(gettext "卸载") Fail2ban${Font}" log_echo "4. ${Green}$(gettext "查看") Fail2ban $(gettext "状态")${Font}" log_echo "5. ${Green}$(gettext "退出")${Font}" local fail2ban_fq read_optimize "$(gettext "请选择一个选项"):" fail2ban_fq "" 1 case $fail2ban_fq in 1) mf_install_fail2ban ;; 2) mf_manage_fail2ban ;; 3) mf_uninstall_fail2ban ;; 4) mf_display_fail2ban_status ;; 5) source "${idleleo}" ;; *) echo log_echo "${Error} ${RedBG} $(gettext "无效的选择, 请重试") ${Font}" ;; esac done } mf_install_fail2ban() { if command -v fail2ban-client &> /dev/null; then log_echo "${OK} ${Green} Fail2ban $(gettext "已经安装, 跳过安装步骤") ${Font}" else pkg_install "fail2ban" mf_configure_fail2ban judge "Fail2ban $(gettext "安装")" source "${idleleo}" fi } mf_ensure_sshd_config() { cat > /etc/fail2ban/jail.d/sshd.local << 'EOF' [sshd] enabled = true filter = sshd logpath = %(sshd_log)s backend = systemd maxretry = 5 bantime = 604800 EOF } mf_configure_fail2ban() { # 确保 jail.d 目录存在 mkdir -p /etc/fail2ban/jail.d # 如果 jail.local 不存在,创建它 if [[ ! -f "/etc/fail2ban/jail.local" ]]; then cp -fp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local fi # systemd SSH 日志检查 if ! journalctl -u ssh --since "1 hour ago" --no-pager -q | head -n 1 >/dev/null 2>&1; then log_echo "${Warning} ${YellowBG} $(gettext "systemd 无法读取 SSH 日志") ${Font}" log_echo "${Warning} ${YellowBG} $(gettext "跳过启用") SSH $(gettext "规则") ${Font}" else mf_ensure_sshd_config fi # 检查 Nginx 是否安装 if [[ ${tls_mode} == "TLS" || ${reality_add_nginx} == "on" ]]; then if [[ ! -f "${nginx_dir}/sbin/nginx" ]]; then log_echo "${Warning} ${YellowBG} Nginx $(gettext "未安装, 请先安装") Nginx ${Font}" return fi fi # 配置 Nginx 相关规则 if [[ ${tls_mode} == "TLS" || ${reality_add_nginx} == "on" ]]; then cat > /etc/fail2ban/jail.d/nginx-badbots.local << EOF [nginx-badbots] enabled = true port = http,https,8080 filter = apache-badbots logpath = ${nginx_dir}/logs/access.log bantime = 604800 maxretry = 5 EOF log_echo "${OK} ${GreenBG} $(gettext "已启用") nginx-badbots $(gettext "规则") ${Font}" cat > /etc/fail2ban/jail.d/nginx-botsearch.local << EOF [nginx-botsearch] enabled = true filter = nginx-botsearch logpath = ${nginx_dir}/logs/access.log ${nginx_dir}/logs/error.log bantime = 604800 EOF log_echo "${OK} ${GreenBG} $(gettext "已启用") nginx-botsearch $(gettext "规则") ${Font}" fi # 启用 nginx-no-host 规则 if [[ ${reality_add_nginx} == "on" ]]; then if [[ ! -f "/etc/fail2ban/jail.d/nginx-no-host.local" ]]; then mf_create_nginx_no_host_filter cat > /etc/fail2ban/jail.d/nginx-no-host.local << EOF [nginx-no-host] enabled = true filter = nginx-no-host logpath = ${nginx_dir}/logs/sni_error.log bantime = 604800 maxretry = 5 findtime = 120 EOF log_echo "${GreenBG} $(gettext "是否启用") nginx-no-host $(gettext "规则")? [${Red}Y${Font}${GreenBG}/N] ${Font}" read -r enable_nginx_no_host case $enable_nginx_no_host in [nN][oO] | [nN]) sed -i "s/enabled\s*=\s*true/enabled = false/" /etc/fail2ban/jail.d/nginx-no-host.local log_echo "${OK} ${GreenBG} $(gettext "已禁用") nginx-no-host $(gettext "规则") ${Font}" ;; *) log_echo "${OK} ${GreenBG} $(gettext "已启用") nginx-no-host $(gettext "规则") ${Font}" ;; esac fi # 启用 nginx-tls-error 规则 if [[ ! -f "/etc/fail2ban/jail.d/nginx-tls-error.local" ]]; then mf_create_nginx_tls_error_filter cat > /etc/fail2ban/jail.d/nginx-tls-error.local << EOF [nginx-tls-error] enabled = true filter = nginx-tls-error logpath = ${nginx_dir}/logs/tls_error.log bantime = 43200 maxretry = 8 findtime = 300 EOF log_echo "${GreenBG} $(gettext "是否启用") nginx-tls-error $(gettext "规则")? [${Red}Y${Font}${GreenBG}/N] ${Font}" read -r enable_nginx_tls_error case $enable_nginx_tls_error in [nN][oO] | [nN]) sed -i "s/enabled\s*=\s*true/enabled = false/" /etc/fail2ban/jail.d/nginx-tls-error.local log_echo "${OK} ${GreenBG} $(gettext "已禁用") nginx-tls-error $(gettext "规则") ${Font}" ;; *) log_echo "${OK} ${GreenBG} $(gettext "已启用") nginx-tls-error $(gettext "规则") ${Font}" ;; esac fi fi systemctl daemon-reload systemctl restart fail2ban judge "Fail2ban $(gettext "配置")" } mf_create_nginx_no_host_filter() { local filter_file="/etc/fail2ban/filter.d/nginx-no-host.conf" if [[ ! -f "$filter_file" ]]; then cat >"$filter_file" <<'EOF' [Definition] datepattern = ^%%d/%%b/%%Y:%%H:%%M:%%S %%z$ failregex = ^ \[.*\] ".*".*\d+$ ignoreregex = EOF fi } mf_create_nginx_tls_error_filter() { local filter_file="/etc/fail2ban/filter.d/nginx-tls-error.conf" if [[ ! -f "$filter_file" ]]; then cat >"$filter_file" <<'EOF' [Definition] datepattern = ^%%d/%%b/%%Y:%%H:%%M:%%S %%z$ failregex = ^ \[.*\] ".*".*\d+$ ignoreregex = EOF fi } # 检查模块是否启用 mf_is_module_enabled() { local module_file="$1" local default_status="${2:-true}" if [[ ! -f "$module_file" ]]; then return 1 fi local enabled_status=$(grep -oP 'enabled\s*=\s*\K\w+' "$module_file" 2>/dev/null || echo "$default_status") [[ "$enabled_status" == "true" ]] } mf_manage_fail2ban() { if ! command -v fail2ban-client &> /dev/null; then log_echo "${Error} ${RedBG} Fail2ban $(gettext "未安装, 请先安装") Fail2ban ${Font}" return fi while true; do echo log_echo "${Green} $(gettext "请选择") Fail2ban $(gettext "操作"): ${Font}" echo "1. $(gettext "管理模块")" echo "2. $(gettext "添加自定义规则")" echo "3. $(gettext "服务管理")" echo "4. $(gettext "返回")" local mf_action read_optimize "$(gettext "请输入"):" mf_action 1 case $mf_action in 1) mf_manage_modules ;; 2) mf_add_custom_rule mf_main_menu ;; 3) # 服务管理子菜单 while true; do echo log_echo "${Green} $(gettext "服务管理"): ${Font}" echo "1. $(gettext "启动") Fail2ban" echo "2. $(gettext "停止") Fail2ban" echo "3. $(gettext "重启") Fail2ban" echo "4. $(gettext "返回")" local service_action read_optimize "$(gettext "请输入"):" service_action 1 case $service_action in 1) mf_start_enable_fail2ban ;; 2) mf_stop_disable_fail2ban ;; 3) mf_restart_fail2ban ;; 4) break ;; *) echo log_echo "${Error} ${RedBG} $(gettext "无效的选择, 请重试") ${Font}" ;; esac done ;; 4) mf_main_menu ;; *) echo log_echo "${Error} ${RedBG} $(gettext "无效的选择, 请重试") ${Font}" ;; esac done } mf_add_custom_rule() { local jail_name local filter_name local log_path local max_retry local ban_time read_optimize "$(gettext "请输入新的") Jail $(gettext "名称"):" "jail_name" NULL read_optimize "$(gettext "请输入") Filter $(gettext "名称"):" "filter_name" NULL read_optimize "$(gettext "请输入日志路径"):" "log_path" NULL read_optimize "$(gettext "请输入最大重试次数") ($(gettext "默认") 5):" "max_retry" 5 1 99 "$(gettext "最大重试次数必须在 1 到 99 之间")" read_optimize "$(gettext "请输入封禁时间") ($(gettext "秒"), $(gettext "默认") 604800):" "ban_time" 604800 1 8640000 "$(gettext "封禁时间必须在 1 到 8640000 秒之间")" cat > "/etc/fail2ban/jail.d/${jail_name}.local" << EOF [$jail_name] enabled = true filter = $filter_name logpath = $log_path maxretry = $max_retry bantime = $ban_time EOF log_echo "${OK} ${GreenBG} $(gettext "自定义规则添加成功") ${Font}" systemctl daemon-reload systemctl restart fail2ban judge "Fail2ban $(gettext "重启以应用新规则")" } mf_manage_modules() { echo log_echo "${Green} $(gettext "管理 Fail2ban 模块") ${Font}" # 列出所有模块化配置文件 local module_files=() local module_names=() local index=1 # 查找所有 .local 文件 for file in /etc/fail2ban/jail.d/*.local; do if [[ -f "$file" ]]; then module_files[$index]="$file" module_names[$index]=$(basename "$file" .local) index=$((index + 1)) fi done if [[ ${#module_files[@]} -eq 0 ]]; then log_echo "${Warning} ${YellowBG} $(gettext "未找到任何模块化配置文件") ${Font}" return fi # 计算列宽 local max_name_length=15 local compare_strings=() compare_strings+=("$(gettext "模块名称")") for ((i=1; i<${#module_files[@]}+1; i++)); do compare_strings+=("${module_names[$i]}") done compare_strings+=("$(gettext "返回")") for str in "${compare_strings[@]}"; do local length=${#str} if (( length > max_name_length )); then max_name_length=$length fi done # 计算总宽度 local total_width=$((max_name_length + 20)) # 打印表头 printf "%s\n" "$(printf '%*s' "$total_width" | tr ' ' '-')" printf "| %-4s | %-${max_name_length}s | %-10s |\n" "$(gettext "序号")" "$(gettext "模块名称")" "$(gettext "状态")" printf "%s\n" "$(printf '%*s' "$total_width" | tr ' ' '-')" for ((i=1; i<${#module_files[@]}+1; i++)); do local module_file=${module_files[$i]} local module_name=${module_names[$i]} if mf_is_module_enabled "$module_file"; then local status_text="$(gettext "已启用")" else local status_text="$(gettext "已禁用")" fi printf "| %4d | %-${max_name_length}s | %-10s |\n" $i "$module_name" "$status_text" done # 打印表尾 printf "%s\n" "$(printf '%*s' "$total_width" | tr ' ' '-')" printf "| %4d | %-${max_name_length}s | %-10s |\n" 0 "$(gettext "返回")" "" printf "%s\n" "$(printf '%*s' "$total_width" | tr ' ' '-')" # 让用户选择要管理的模块 local module_choice read_optimize "$(gettext "请选择要管理的模块"): " "module_choice" 0 0 ${#module_files[@]} "$(gettext "无效的选择, 请重试")" if [[ $module_choice -eq 0 ]]; then return fi local selected_file=${module_files[$module_choice]} local selected_name=${module_names[$module_choice]} # 获取当前状态 local current_status=$(grep -oP 'enabled\s*=\s*\K\w+' "$selected_file" 2>/dev/null || echo "true") local new_status=$([[ "$current_status" == "true" ]] && echo "false" || echo "true") local status_text=$([[ "$new_status" == "true" ]] && echo "$(gettext "启用")" || echo "$(gettext "禁用")") # 确认操作 log_echo "${GreenBG} $(gettext "是否") $status_text $selected_name $(gettext "模块") [${Red}Y${Font}${GreenBG}/N]? ${Font}" read -r confirm if [[ ! $confirm =~ ^[nN]([oO])?$ ]]; then sed -i "s/enabled\s*=\s*\w*/enabled = $new_status/" "$selected_file" mf_restart_fail2ban log_echo "${OK} ${GreenBG} $selected_name $(gettext "模块") $status_text ${Font}" else log_echo "${Green} $(gettext "操作已取消") ${Font}" fi mf_manage_modules } mf_start_enable_fail2ban() { systemctl daemon-reload systemctl start fail2ban systemctl enable fail2ban judge "Fail2ban $(gettext "启动")" # timeout "$(gettext "清空屏幕")!" # clear } mf_uninstall_fail2ban() { systemctl stop fail2ban systemctl disable fail2ban ${INS} -y remove fail2ban [[ -f "/etc/fail2ban/jail.local" ]] && rm -rf /etc/fail2ban/jail.local rm -rf /etc/fail2ban/jail.d/*.local if [[ -f "/etc/fail2ban/filter.d/nginx-no-host.conf" ]]; then rm -rf /etc/fail2ban/filter.d/nginx-no-host.conf fi if [[ -f "/etc/fail2ban/filter.d/nginx-tls-error.conf" ]]; then rm -rf /etc/fail2ban/filter.d/nginx-tls-error.conf fi judge "Fail2ban $(gettext "卸载")" timeout "$(gettext "清空屏幕")!" clear source "${idleleo}" } mf_stop_disable_fail2ban() { systemctl stop fail2ban systemctl disable fail2ban log_echo "${OK} ${GreenBG} Fail2ban $(gettext "停止成功") ${Font}" # timeout "$(gettext "清空屏幕")!" # clear } mf_restart_fail2ban() { systemctl daemon-reload systemctl restart fail2ban judge "Fail2ban $(gettext "重启")" # timeout "$(gettext "清空屏幕")!" # clear } mf_display_fail2ban_status() { echo if ! command -v fail2ban-client &> /dev/null; then log_echo "${Error} ${RedBG} Fail2ban $(gettext "未安装, 请先安装") Fail2ban ${Font}" return fi log_echo "${GreenBG} Fail2ban $(gettext "总体状态"): ${Font}" fail2ban-client status echo log_echo "${Green} $(gettext "默认启用的 Jail 状态"): ${Font}" echo "----------------------------------------" if mf_is_module_enabled "/etc/fail2ban/jail.d/sshd.local"; then log_echo "${Green} SSH $(gettext "封锁情况"): ${Font}" fail2ban-client status sshd 2>/dev/null || log_echo "${Warning} ${YellowBG} SSH Jail $(gettext "未启用或配置异常") ${Font}" fi if [[ ${tls_mode} == "TLS" || ${reality_add_nginx} == "on" ]]; then if mf_is_module_enabled "/etc/fail2ban/jail.d/nginx-badbots.local"; then log_echo "${Green} Fail2ban Nginx $(gettext "封锁情况"): ${Font}" fail2ban-client status nginx-badbots 2>/dev/null || log_echo "${Warning} ${YellowBG} nginx-badbots $(gettext "未启用或配置异常") ${Font}" fi if mf_is_module_enabled "/etc/fail2ban/jail.d/nginx-botsearch.local"; then fail2ban-client status nginx-botsearch 2>/dev/null || log_echo "${Warning} ${YellowBG} nginx-botsearch $(gettext "未启用或配置异常") ${Font}" fi if [[ ${reality_add_nginx} == "on" ]]; then if mf_is_module_enabled "/etc/fail2ban/jail.d/nginx-no-host.local"; then fail2ban-client status nginx-no-host 2>/dev/null || log_echo "${Warning} ${YellowBG} nginx-no-host $(gettext "未启用或配置异常") ${Font}" fi if mf_is_module_enabled "/etc/fail2ban/jail.d/nginx-tls-error.local"; then fail2ban-client status nginx-tls-error 2>/dev/null || log_echo "${Warning} ${YellowBG} nginx-tls-error $(gettext "未启用或配置异常") ${Font}" fi fi fi echo mf_main_menu } mf_check_for_updates() { local latest_version local update_choice # 直接使用 curl 下载远程版本信息 latest_version=$(curl -s "$mf_remote_url" | grep 'mf_SCRIPT_VERSION=' | head -n 1 | sed 's/mf_SCRIPT_VERSION="//; s/"//') if [ -n "$latest_version" ] && [ "$latest_version" != "$mf_SCRIPT_VERSION" ]; then log_echo "${Warning} ${YellowBG} $(gettext "新版本可用"): $latest_version $(gettext "当前版本"): $mf_SCRIPT_VERSION ${Font}" log_echo "${Warning} ${YellowBG} $(gettext "请访问") https://github.com/hello-yunshu/Xray_bash_onekey $(gettext "查看更新说明") ${Font}" log_echo "${GreenBG} $(gettext "是否下载并安装新版本") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r update_choice case $update_choice in [yY][eE][sS] | [yY]) log_echo "${Info} ${Green} $(gettext "正在下载新版本")... ${Font}" curl -sL "$mf_remote_url" -o "${idleleo_dir}/fail2ban_manager.sh" if [ $? -eq 0 ]; then chmod +x "${idleleo_dir}/fail2ban_manager.sh" log_echo "${OK} ${GreenBG} $(gettext "下载完成, 请重新运行脚本") ${Font}" bash "${idleleo}" else echo log_echo "${Error} ${RedBG} $(gettext "下载失败, 请手动下载并安装新版本") ${Font}" fi ;; *) log_echo "${Green} $(gettext "跳过更新") ${Font}" ;; esac else log_echo "${OK} ${Green} $(gettext "当前已经是最新版本"): $mf_SCRIPT_VERSION ${Font}" fi } # 检查更新 mf_check_for_updates mf_main_menu ================================================ FILE: fake-systemctl ================================================ #!/bin/bash XRAY_PID_FILE="/var/run/xray.pid" NGINX_PID_FILE="/usr/local/nginx/logs/nginx.pid" XRAY_BIN="/usr/local/bin/xray" NGINX_BIN="/usr/local/nginx/sbin/nginx" XRAY_CONF="/etc/idleleo/conf/xray/config.json" NGINX_CONF="/usr/local/nginx/conf/nginx.conf" _xray_is_running() { if [[ -f "$XRAY_PID_FILE" ]]; then local pid=$(cat "$XRAY_PID_FILE" 2>/dev/null) [[ -n "$pid" ]] && kill -0 "$pid" 2>/dev/null && return 0 fi pgrep -f "$XRAY_BIN" >/dev/null 2>&1 } _nginx_is_running() { if [[ -f "$NGINX_PID_FILE" ]]; then local pid=$(cat "$NGINX_PID_FILE" 2>/dev/null) [[ -n "$pid" ]] && kill -0 "$pid" 2>/dev/null && return 0 fi pgrep -f "$NGINX_BIN" >/dev/null 2>&1 } _start_xray() { _xray_is_running && return 0 if [[ -x "$XRAY_BIN" ]] && [[ -f "$XRAY_CONF" ]]; then nohup "$XRAY_BIN" run -config "$XRAY_CONF" \ >/var/log/xray/access.log 2>/var/log/xray/error.log & echo $! > "$XRAY_PID_FILE" sleep 1 _xray_is_running && return 0 rm -f "$XRAY_PID_FILE" fi return 1 } _stop_xray() { if [[ -f "$XRAY_PID_FILE" ]]; then kill "$(cat "$XRAY_PID_FILE" 2>/dev/null)" 2>/dev/null sleep 1 kill -9 "$(cat "$XRAY_PID_FILE" 2>/dev/null)" 2>/dev/null rm -f "$XRAY_PID_FILE" fi pkill -f "$XRAY_BIN" 2>/dev/null } _start_nginx() { _nginx_is_running && return 0 if [[ -x "$NGINX_BIN" ]] && [[ -f "$NGINX_CONF" ]]; then "$NGINX_BIN" 2>/dev/null sleep 1 _nginx_is_running && return 0 fi return 1 } _stop_nginx() { [[ -x "$NGINX_BIN" ]] && "$NGINX_BIN" -s stop 2>/dev/null sleep 1 pkill -f "$NGINX_BIN" 2>/dev/null rm -f "$NGINX_PID_FILE" } _reload_nginx() { _nginx_is_running && "$NGINX_BIN" -s reload 2>/dev/null } _iptables_restore() { if [[ -f /etc/iptables/rules.v4 ]]; then iptables-restore < /etc/iptables/rules.v4 2>/dev/null fi if [[ -f /etc/iptables/rules.v6 ]]; then ip6tables-restore < /etc/iptables/rules.v6 2>/dev/null fi } case "$1" in start) case "$2" in xray) _start_xray ;; nginx) _start_nginx ;; crond|cron) cron ;; iptables) _iptables_restore ;; fail2ban) fail2ban-client start 2>/dev/null ;; *) ;; esac ;; stop) case "$2" in xray) _stop_xray ;; nginx) _stop_nginx ;; iptables) iptables -F 2>/dev/null; ip6tables -F 2>/dev/null ;; fail2ban) fail2ban-client stop 2>/dev/null ;; *) ;; esac ;; restart) case "$2" in xray) _stop_xray; sleep 1; _start_xray ;; nginx) _stop_nginx; sleep 1; _start_nginx ;; iptables) iptables -F 2>/dev/null; ip6tables -F 2>/dev/null; _iptables_restore ;; fail2ban) fail2ban-client restart 2>/dev/null ;; *) ;; esac ;; reload) case "$2" in nginx) _reload_nginx ;; *) ;; esac ;; enable|disable|daemon-reload) exit 0 ;; is-active) shift if [[ "$1" == "--quiet" ]] || [[ "$1" == "-q" ]]; then shift; fi case "$1" in xray) _xray_is_running && echo "active" && exit 0 || echo "inactive" && exit 3 ;; nginx) _nginx_is_running && echo "active" && exit 0 || echo "inactive" && exit 3 ;; fail2ban) pgrep -f "fail2ban-server" >/dev/null && echo "active" && exit 0 || echo "inactive" && exit 3 ;; *) echo "unknown"; exit 3 ;; esac ;; -q) [[ "$2" == "is-active" ]] || exit 0 case "$3" in xray) _xray_is_running && exit 0 || exit 3 ;; nginx) _nginx_is_running && exit 0 || exit 3 ;; fail2ban) pgrep -f "fail2ban-server" >/dev/null && exit 0 || exit 3 ;; *) exit 3 ;; esac ;; is-enabled) exit 0 ;; status) case "$2" in xray) _xray_is_running && echo "active (running)" || echo "inactive (dead)" ;; nginx) _nginx_is_running && echo "active (running)" || echo "inactive (dead)" ;; *) echo "unknown" ;; esac ;; *) echo "Fake systemctl for Docker" >&2 exit 0 ;; esac ================================================ FILE: file_manager.sh ================================================ #!/bin/bash # 定义当前版本号 fm_SCRIPT_VERSION="1.2.4" if [ -z "$1" ]; then echo "$(gettext "用法"):" $0 <$(gettext "文件扩展名")> [<$(gettext "目录路径")>] exit 1 fi fm_EXTENSION="$1" fm_WORKDIR="${2:-$(pwd)}" if [ ! -d "$fm_WORKDIR" ]; then echo log_echo "${Error} ${RedBG} $(gettext "目录") $fm_WORKDIR $(gettext "不存在, 请检查路径") ${Font}" exit 1 fi fm_original_dir=$(pwd) cd "$fm_WORKDIR" fm_list_files() { local max_length log_echo "${GreenBG} $(gettext "列出所有") .$fm_EXTENSION $(gettext "文件") ${Font}" # 设置 dotglob 选项,使通配符 * 包括以点开头的文件 shopt -s dotglob nullglob # 使用数组存储匹配到的文件 files=(*.$fm_EXTENSION) if [ ${#files[@]} -eq 0 ]; then log_echo "${Warning} ${YellowBG} $(gettext "未找到") .$fm_EXTENSION $(gettext "文件") ${Font}" return 1 else local max_length=0 for file in "${files[@]}"; do local length=${#file} if (( length > max_length )); then max_length=$length fi done if (( max_length < 10 )); then max_length=10 fi local total_width=$((max_length + 10)) printf "%-${total_width}s\n" "$(printf '%*s' "$total_width" | tr ' ' '-')" local header_text="$(gettext "文件名")" local header_length=${#header_text} local padding=$(( (total_width - header_length - 4) / 2 )) local left_padding=$(( padding - 4 )) # 加上序号列的宽度 local right_padding=$(( padding - 4 )) printf "| %-4s | %-${left_padding}s%-${header_length}s%-${right_padding}s |\n" "$(gettext "序号")" "" "$header_text" "" printf "%-${total_width}s\n" "$(printf '%*s' "$total_width" | tr ' ' '-')" local index=1 for file in "${files[@]}"; do printf "| %4d | %-*s |\n" $index $((max_length)) "$file" ((index++)) done printf "%-${total_width}s\n" "$(printf '%*s' "$total_width" | tr ' ' '-')" return 0 fi } fm_create_servername_file() { local url fm_list_files echo log_echo "${Green} $(gettext "请输入网址 (例如 hey.run)")" log_echo "${Green} $(gettext "不要包含 http:// 或 https:// 开头") ${Font}" read_optimize "$(gettext "请输入"):" url if [[ $url =~ ^(http|https):// ]]; then echo log_echo "${Error} ${RedBG} $(gettext "网址不能包含 http:// 或 https:// 前缀") ${Font}" return fi echo "${url} reality;" > "${url}.serverNames" log_echo "${OK} ${GreenBG} $(gettext "文件") ${url}.serverNames $(gettext "已创建") ${Font}" fm_restart_nginx_and_check_status fm_list_files } fm_create_server_file() { local default_port="$1" local host port weight content firewall_set_fq fm_list_files read_optimize "$(gettext "请输入主机") (host):" host if [[ -n "$default_port" ]]; then read_optimize "$(gettext "请输入端口") (port $(gettext "默认值"): ${default_port}):" port "${default_port}" 1 65535 else read_optimize "$(gettext "请输入端口") (port):" port "" 1 65535 fi read_optimize "$(gettext "请输入权重") (0~100 $(gettext "默认值") 50):" weight "50" 0 100 content="server ${host}:${port} weight=${weight} max_fails=2 fail_timeout=10;" echo "$content" > "${host}.${fm_EXTENSION}" log_echo "${OK} ${GreenBG} $(gettext "文件") ${host}.${fm_EXTENSION} $(gettext "已创建") ${Font}" echo log_echo "${GreenBG} $(gettext "是否需要设置防火墙") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r firewall_set_fq case $firewall_set_fq in [yY][eE][sS] | [yY]) if [[ "${ID}" == "centos" ]]; then pkg_install "iptables-services" else pkg_install "iptables-persistent" fi iptables -I INPUT -p tcp --dport ${port} -j ACCEPT iptables -I INPUT -p udp --dport ${port} -j ACCEPT iptables -I OUTPUT -p tcp --sport ${port} -j ACCEPT iptables -I OUTPUT -p udp --sport ${port} -j ACCEPT log_echo "${OK} ${GreenBG} $(gettext "防火墙") $(gettext "追加完成") ${Font}" if [[ "${ID}" == "centos" && ${VERSION_ID} -ge 7 ]]; then service iptables save service iptables restart log_echo "${OK} ${GreenBG} $(gettext "防火墙") $(gettext "重启完成") ${Font}" else netfilter-persistent save systemctl restart iptables log_echo "${OK} ${GreenBG} $(gettext "防火墙") $(gettext "重启完成") ${Font}" fi ;; *) log_echo "${OK} ${GreenBG} $(gettext "跳过防火墙设置") ${Font}" ;; esac fm_restart_nginx_and_check_status fm_list_files } fm_edit_file() { fm_list_files local num_files=${#files[@]} local choice read_optimize "$(gettext "请输入要编辑的文件编号") (1-$num_files): " choice "" 1 "$num_files" local filename="${files[$((choice - 1))]}" if ! command -v vim &> /dev/null; then log_echo "${Warning} ${YellowBG} vim $(gettext "未安装, 正在尝试安装") ${Font}" pkg_install vim fi vim "$filename" log_echo "${OK} ${GreenBG} $(gettext "文件") $filename $(gettext "已编辑") ${Font}" fm_restart_nginx_and_check_status } fm_delete_file() { if ! fm_list_files; then return fi local num_files=${#files[@]} local choice read_optimize "$(gettext "请输入要删除的文件编号") (1-$num_files): " choice "" 1 "$num_files" local filename="${files[$((choice - 1))]}" rm "$filename" log_echo "${OK} ${GreenBG} $(gettext "文件") $filename $(gettext "已删除") ${Font}" fm_restart_nginx_and_check_status fm_list_files } fm_create_file() { case $fm_EXTENSION in serverNames) fm_create_servername_file ;; wsServers|grpcServers) fm_create_server_file "" ;; realityServers) fm_create_server_file "" ;; *) echo log_echo "${Error} ${RedBG} $(gettext "不支持的文件扩展名") $fm_EXTENSION ${Font}" ;; esac } fm_main_menu() { fm_list_files while true; do echo log_echo "${GreenBG} $(gettext "主菜单") ${Font}" log_echo "1 ${Green}$(gettext "列出所有") $fm_EXTENSION $(gettext "文件")${Font}" log_echo "2 ${Green}$(gettext "创建一个新的") $fm_EXTENSION $(gettext "文件")${Font}" log_echo "3 ${Green}$(gettext "编辑一个已存在的") $fm_EXTENSION $(gettext "文件")${Font}" log_echo "4 ${Green}$(gettext "删除一个已存在的") $fm_EXTENSION $(gettext "文件")${Font}" log_echo "5 ${Green}$(gettext "退出")${Font}" local choice read_optimize "$(gettext "请选择一个选项"):" choice "" 1 5 case $choice in 1) fm_list_files ;; 2) fm_create_file ;; 3) fm_edit_file ;; 4) fm_delete_file ;; 5) source "$idleleo" ;; *) echo log_echo "${Error} ${RedBG} $(gettext "无效选项, 请重试") ${Font}" ;; esac done } fm_check_for_updates() { local latest_version local update_choice latest_version=$(curl -s "$fm_remote_url" | grep 'fm_SCRIPT_VERSION=' | head -n 1 | sed 's/fm_SCRIPT_VERSION="//; s/"//') if [ -n "$latest_version" ] && [ "$latest_version" != "$fm_SCRIPT_VERSION" ]; then log_echo "${Warning} ${YellowBG} $(gettext "新版本可用"): $latest_version $(gettext "当前版本"): $fm_SCRIPT_VERSION ${Font}" log_echo "${Warning} ${YellowBG} $(gettext "请访问") https://github.com/hello-yunshu/Xray_bash_onekey $(gettext "查看更新说明") ${Font}" log_echo "${GreenBG} $(gettext "是否下载并安装新版本") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r update_choice case $update_choice in [yY][eE][sS] | [yY]) log_echo "${Info} ${Green} $(gettext "正在下载新版本")... ${Font}" curl -sL "$fm_remote_url" -o "${idleleo_dir}/file_manager.sh" if [ $? -eq 0 ]; then chmod +x "${idleleo_dir}/file_manager.sh" log_echo "${OK} ${GreenBG} $(gettext "下载完成, 请重新运行脚本") ${Font}" bash "${idleleo}" else echo log_echo "${Error} ${RedBG} $(gettext "下载失败, 请手动下载并安装新版本") ${Font}" fi ;; *) log_echo "${OK} ${Green} $(gettext "跳过更新") ${Font}" ;; esac else log_echo "${OK} ${Green} $(gettext "当前已经是最新版本"): $fm_SCRIPT_VERSION ${Font}" fi } fm_restart_nginx_and_check_status() { if [[ -f ${nginx_systemd_file} ]]; then systemctl restart nginx if systemctl is-active --quiet nginx; then echo log_echo "${OK} ${GreenBG} Nginx $(gettext "重启成功") ${Font}" else echo log_echo "${Error} ${RedBG} Nginx $(gettext "重启失败"), $(gettext "请检查配置文件是否有误") ${Font}" fm_edit_file fi fi } fm_check_for_updates fm_main_menu cd "$fm_original_dir" || exit 1 ================================================ FILE: install.sh ================================================ #!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH #stty erase ^? cd "$( cd "$(dirname "$0")" || exit pwd )" || exit #================================================================= # System Request: Debian 12+ / Ubuntu 24.04+ / Centos Stream 8+ # Author: yunyunshu # Dscription: Xray Onekey Management # Version: 2.8 # Official document: hey.run #================================================================= #fonts color Green="\033[32m" Red="\033[31m" GreenW="\033[1;32m" RedW="\033[1;31m" #Yellow="\033[33m" GreenBG="\033[42;30m" RedBG="\033[41;30m" YellowBG="\033[43;30m" Font="\033[0m" #notification information Info="${Green}[$(gettext "信息")]${Font}" OK="${Green}[OK]${Font}" Error="${RedW}[$(gettext "错误")]${Font}" Warning="${RedW}[$(gettext "警告")]${Font}" shell_version="2.8.12" shell_mode="$(gettext "未安装")" tls_mode="None" ws_grpc_mode="None" local_bin="/usr/local" idleleo_dir="/etc/idleleo" idleleo="${idleleo_dir}/install.sh" idleleo_conf_dir="${idleleo_dir}/conf" log_dir="${idleleo_dir}/logs" xray_bin_dir="${local_bin}/bin" xray_conf_dir="${idleleo_conf_dir}/xray" nginx_conf_dir="${idleleo_conf_dir}/nginx" xray_conf="${xray_conf_dir}/config.json" xray_status_conf="${xray_conf_dir}/status_config.json" xray_default_conf="${local_bin}/etc/xray/config.json" nginx_conf="${nginx_conf_dir}/00-xray.conf" nginx_ssl_conf="${nginx_conf_dir}/01-xray-80.conf" nginx_upstream_conf="${nginx_conf_dir}/02-xray-server.conf" idleleo_commend_file="/usr/bin/idleleo" ssl_chainpath="${idleleo_dir}/cert" nginx_dir="${local_bin}/nginx" xray_info_file="${idleleo_dir}/info/xray_info.inf" xray_qr_config_file="${idleleo_dir}/info/vless_qr.json" nginx_systemd_file="/etc/systemd/system/nginx.service" xray_systemd_file="/etc/systemd/system/xray.service" xray_access_log="/var/log/xray/access.log" xray_error_log="/var/log/xray/error.log" amce_sh_file="/root/.acme.sh/acme.sh" auto_update_file="${idleleo_dir}/auto_update.sh" ssl_update_file="${idleleo_dir}/ssl_update.sh" myemali="my@example.com" shell_version_tmp="${idleleo_dir}/tmp/shell_version.tmp" get_versions_all=$(curl -s https://cdn.jsdelivr.net/gh/hello-yunshu/Xray_bash_onekey_api@main/xray_shell_versions.json) read_config_status=1 reality_add_more="off" reality_add_nginx="off" reality_add_balance="off" old_config_status="off" old_tls_mode="NULL" random_num=$((RANDOM % 12 + 4)) [[ -f "${xray_qr_config_file}" ]] && info_extraction_all=$(jq -rc . ${xray_qr_config_file}) [[ ! -d ${log_dir} ]] && mkdir -p ${log_dir} [[ ! -f "${log_dir}/install.log" ]] && touch ${log_dir}/install.log LOG_FILE="${log_dir}/install.log" LOG_MAX_SIZE=$((3 * 1024 * 1024)) # 3 MB MAX_ARCHIVES=5 log() { if [ $(stat -c%s "$LOG_FILE" 2>/dev/null) -gt $LOG_MAX_SIZE ]; then log_rotate fi local message=$(echo -e "$1" | sed 's/\x1B\[\([0-9]\(;[0-9]\)*\)*m//g' | tr -d '\n') echo "$(date '+%Y-%m-%d %H:%M:%S') - $message" | tee -a $LOG_FILE >/dev/null } log_rotate() { local timestamp=$(date +%Y%m%d%H%M%S) local archived_log="${LOG_FILE}.${timestamp}.gz" if ! gzip -c "$LOG_FILE" > "$archived_log"; then log_echo "${Error} ${RedBG} $(gettext "日志文件归档失败") ${Font}" return 1 fi if ! :> "$LOG_FILE"; then log_echo "${Error} ${RedBG} $(gettext "日志文件清空失败") ${Font}" return 1 fi log "$(gettext "日志文件已轮转并归档为") $archived_log" rotate_archives } rotate_archives() { local archives=($(ls ${LOG_FILE}.*.gz 2>/dev/null)) while [ ${#archives[@]} -gt $MAX_ARCHIVES ]; do oldest_archive=${archives[0]} rm "$oldest_archive" archives=($(ls ${LOG_FILE}.*.gz 2>/dev/null)) done } log_echo() { local message=$(printf "%b" "$@") echo -e "$message" log "$message" } source '/etc/os-release' VERSION=$(echo "${VERSION}" | awk -F "[()]" '{print $2}') check_system() { if [[ "${ID}" == "centos" && ${VERSION_ID} -ge 7 ]]; then log_echo "${OK} ${GreenBG} $(gettext "当前系统为") Centos ${VERSION_ID} ${VERSION} ${Font}" INS="yum" [[ ! -f "${xray_qr_config_file}" ]] && $INS update || true elif [[ "${ID}" == "debian" && ${VERSION_ID} -ge 8 ]]; then log_echo "${OK} ${GreenBG} $(gettext "当前系统为") Debian ${VERSION_ID} ${VERSION} ${Font}" INS="apt" [[ ! -f "${xray_qr_config_file}" ]] && $INS update || true elif [[ "${ID}" == "ubuntu" && $(echo "${VERSION_ID}" | cut -d '.' -f1) -ge 16 ]]; then log_echo "${OK} ${GreenBG} $(gettext "当前系统为") Ubuntu ${VERSION_ID} ${UBUNTU_CODENAME} ${Font}" INS="apt" if [[ ! -f "${xray_qr_config_file}" ]]; then rm /var/lib/dpkg/lock || true dpkg --configure -a || true rm /var/lib/apt/lists/lock || true rm /var/cache/apt/archives/lock || true $INS update || true fi else log_echo "${Error} ${RedBG} $(gettext "当前系统为") ${ID} ${VERSION_ID} $(gettext "不在支持的系统列表内, 安装中断")! ${Font}" exit 1 fi } is_root() { if [[ 0 == $UID ]]; then log_echo "${OK} ${GreenBG} $(gettext "当前用户是 root 用户, 开始安装") ${Font}" else log_echo "${Error} ${RedBG} $(gettext "当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本")! ${Font}" exit 1 fi } check_and_create_user_group() { if ! getent group nogroup > /dev/null; then groupadd nogroup fi if ! id nobody > /dev/null 2>&1; then useradd -r -g nogroup -s /sbin/nologin -c "Unprivileged User" nobody fi } check_language_update() { local lang_code="$1" local local_file="${idleleo_dir}/languages/${lang_code}/LC_MESSAGES/xray_install.mo" local version_file_url="https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/languages/${lang_code}/LC_MESSAGES/version" [[ ! -f "${local_file}" ]] && return 0 local remote_version remote_version=$(curl -s "${version_file_url}" || echo "") if [ -z "$remote_version" ]; then log_echo "${Warning} ${YellowBG} $(gettext "无法获取远程语言文件信息") ${Font}" return 1 fi local local_version local_version=$(cat "${idleleo_dir}/languages/${lang_code}/LC_MESSAGES/version" 2>/dev/null || echo "") [ "$remote_version" != "$local_version" ] } update_language_file() { local lang_code="$1" local mo_file="${idleleo_dir}/languages/${lang_code}/LC_MESSAGES/xray_install.mo" local version_file="${idleleo_dir}/languages/${lang_code}/LC_MESSAGES/version" local github_url="https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/languages" mkdir -p "${idleleo_dir}/languages/${lang_code}/LC_MESSAGES" log_echo "${Info} ${Green} $(gettext "正在更新语言文件")... ${Font}" if ! curl -s -o "${mo_file}" "${github_url}/${lang_code}/LC_MESSAGES/xray_install.mo"; then log_echo "${Error} ${RedBG} $(gettext "语言文件更新失败") ${Font}" return 1 fi if [ ! -s "${mo_file}" ]; then log_echo "${Error} ${RedBG} $(gettext "语言文件无效") ${Font}" rm -f "${mo_file}" return 1 fi if ! curl -s -o "${version_file}" "${github_url}/${lang_code}/LC_MESSAGES/version"; then log_echo "${Error} ${RedBG} $(gettext "版本文件更新失败") ${Font}" return 1 fi find "${idleleo_dir}/languages" -type d -exec chmod 755 {} \; find "${idleleo_dir}/languages" -type f -exec chmod 644 {} \; log_echo "${OK} ${Green} $(gettext "语言文件更新完成") ${Font}" } init_language() { if ! command -v gettext >/dev/null 2>&1; then log_echo "${Warning} ${YellowBG} $(gettext "正在安装") gettext... ${Font}" pkg_install "gettext" if [ $? -ne 0 ]; then log_echo "${Error} ${RedBG} gettext $(gettext "安装失败"), $(gettext "将使用默认语言") ${Font}" unset LANG unset LC_MESSAGES return 1 fi fi local gettext_paths=( "/usr/share/gettext/gettext.sh" "/usr/local/share/gettext/gettext.sh" "/usr/bin/gettext.sh" "/usr/local/bin/gettext.sh" "/usr/share/gettext-"*/gettext.sh ) local gettext_sh="" for path in "${gettext_paths[@]}"; do if [ -f "$path" ]; then gettext_sh="$path" break fi done if [ -z "$gettext_sh" ]; then log_echo "${Error} ${RedBG} $(gettext "未找到") gettext.sh, $(gettext "将使用默认语言") ${Font}" unset LANG unset LC_MESSAGES return 1 fi [ -d "${idleleo_dir}/languages" ] || mkdir "${idleleo_dir}/languages" export TEXTDOMAIN="xray_install" export TEXTDOMAINDIR="${idleleo_dir}/languages" . "$gettext_sh" if [ -f "${idleleo_dir}/language.conf" ]; then source "${idleleo_dir}/language.conf" if [[ "${LANG%.*}" != "zh_CN" ]]; then local lang_code case "${LANG%.*}" in "en_US") lang_code="en" ;; "fa_IR") lang_code="fa" ;; "ru_RU") lang_code="ru" ;; "ko_KR") lang_code="ko" ;; "fr_FR") lang_code="fr" ;; *) log_echo "${Warning} ${YellowBG} $(gettext "不支持的语言"):${LANG%.*}, $(gettext "将使用默认语言") ${Font}" unset LANG unset LC_MESSAGES return 0 ;; esac local lang_file="${TEXTDOMAINDIR}/${lang_code}/LC_MESSAGES/${TEXTDOMAIN}.mo" if [ ! -f "$lang_file" ]; then if ! update_language_file "$lang_code"; then log_echo "${Warning} ${YellowBG} $(gettext "语言文件更新失败"), $(gettext "将使用默认语言") ${Font}" unset LANG unset LC_MESSAGES return 0 fi elif check_language_update "$lang_code"; then log_echo "${Info} ${Green} $(gettext "发现语言文件更新") ${Font}" if update_language_file "$lang_code"; then . "$gettext_sh" fi fi fi # else # log_echo "${Info} ${Green} $(gettext "未找到") language.conf, $(gettext "将使用默认语言") ${Font}" # unset LANG # unset LC_MESSAGES fi } judge() { if [[ 0 -eq $? ]]; then log_echo "${OK} ${GreenBG} $1 $(gettext "完成") ${Font}" sleep 0.5 else log_echo "${Error} ${RedBG} $1 $(gettext "失败") ${Font}" exit 1 fi } check_version() { echo ${get_versions_all} | jq -rc ".$1" [[ 0 -ne $? ]] && log_echo "${Error} ${RedBG} $(gettext "在线版本检测失败, 请稍后再试")! ${Font}" && exit 1 } pkg_install_judge() { if [[ "${ID}" == "centos" ]]; then yum list installed | grep -iw "^$1" else dpkg --get-selections | grep -iw "^$1" | grep -ivw "deinstall" fi } pkg_install() { install_array=(${1//,/ }) install_status=1 if [[ ${#install_array[@]} -gt 1 ]]; then for install_var in ${install_array[@]}; do if [[ -z $(pkg_install_judge "${install_var}") ]]; then ${INS} -y install ${install_var} install_status=0 fi done if [[ ${install_status} == 0 ]]; then judge "$(gettext "安装") ${1//,/ }" else log_echo "${OK} ${GreenBG} $(gettext "已安装") ${1//,/ } ${Font}" sleep 0.5 fi else if [[ -z $(pkg_install_judge "$1") ]]; then ${INS} -y install $1 judge "$(gettext "安装") $1" else log_echo "${OK} ${GreenBG} $(gettext "已安装") $1 ${Font}" sleep 0.5 fi fi } dependency_install() { pkg_install "bc,curl,dbus,git,jq,lsof,python3,qrencode" if [[ "${ID}" == "centos" ]]; then pkg_install "crontabs" else pkg_install "cron" fi if [[ ! -f "/var/spool/cron/root" ]] && [[ ! -f "/var/spool/cron/crontabs/root" ]]; then if [[ "${ID}" == "centos" ]]; then touch /var/spool/cron/root && chmod 600 /var/spool/cron/root systemctl start crond && systemctl enable crond >/dev/null 2>&1 judge "crontab $(gettext "自启动配置")" else touch /var/spool/cron/crontabs/root && chmod 600 /var/spool/cron/crontabs/root systemctl start cron && systemctl enable cron >/dev/null 2>&1 judge "crontab $(gettext "自启动配置")" fi fi if [[ ${tls_mode} != "None" ]]; then if [[ "${ID}" == "centos" ]]; then pkg_install "epel-release,iputils,pcre,pcre-devel,zlib-devel,perl-IPC-Cmd" else pkg_install "iputils-ping,libpcre3,libpcre3-dev,zlib1g-dev" fi judge "Nginx $(gettext "链接库安装")" fi } read_optimize() { local prompt="$1" var_name="$2" default_value="${3:-NULL}" min_value="${4:-}" max_value="${5:-}" error_msg="${6:-$(gettext "值为空或超出范围, 请重新输入")!}" local user_input read -rp "$prompt" user_input if [[ -z $user_input ]]; then if [[ $default_value != "NULL" ]]; then user_input=$default_value else log_echo "${Error} ${RedBG} $(gettext "值为空, 请重新输入")! ${Font}" read_optimize "$prompt" "$var_name" "$default_value" "$min_value" "$max_value" "$error_msg" return fi fi printf -v "$var_name" "%s" "$user_input" if [[ -n $min_value ]] && [[ -n $max_value ]]; then if (( user_input < min_value )) || (( user_input > max_value )); then log_echo "${Error} ${RedBG} $error_msg ${Font}" read_optimize "$prompt" "$var_name" "$default_value" "$min_value" "$max_value" "$error_msg" return fi fi } basic_optimization() { sed -i '/^\*\ *soft\ *nofile\ *[[:digit:]]*/d' /etc/security/limits.conf sed -i '/^\*\ *hard\ *nofile\ *[[:digit:]]*/d' /etc/security/limits.conf echo '* soft nofile 65536' >>/etc/security/limits.conf echo '* hard nofile 65536' >>/etc/security/limits.conf if [[ "${ID}" == "centos" ]]; then sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config setenforce 0 fi } create_directory() { if [[ ${tls_mode} != "None" ]]; then [[ ! -d "${nginx_conf_dir}" ]] && mkdir -p ${nginx_conf_dir} fi [[ ! -d "${ssl_chainpath}" ]] && mkdir -p ${ssl_chainpath} [[ ! -d "${xray_conf_dir}" ]] && mkdir -p ${xray_conf_dir} [[ ! -d "${idleleo_dir}/info" ]] && mkdir -p ${idleleo_dir}/info } port_set() { if [[ "on" != ${old_config_status} ]]; then echo log_echo "${GreenBG} $(gettext "确定端口") ${Font}" read_optimize "$(gettext "请输入端口") ($(gettext "默认值"):443):" "port" 443 0 65535 "$(gettext "请输入 0-65535 之间的值")!" if [[ ${port} -eq 9443 || ${port} -eq 9403 ]] && [[ ${tls_mode} == "Reality" ]]; then echo -e "${Error} ${RedBG} $(gettext "端口不允许使用, 请重新输入")! ${Font}" read_optimize "$(gettext "请输入端口") ($(gettext "默认值"):443):" "port" 443 0 65535 "$(gettext "请输入 0-65535 之间的值")!" fi fi } ws_grpc_choose() { if [[ "on" != ${old_config_status} ]]; then echo log_echo "${GreenBG} $(gettext "请选择安装协议") ws/gRPC ${Font}" echo -e "${Red}1${Font}: ws ($(gettext "默认"))" echo "2: gRPC" echo "3: ws+gRPC" local choose_network read_optimize "$(gettext "请输入"): " "choose_network" 1 1 3 "$(gettext "请输入有效的数字")!" if [[ $choose_network == 2 ]]; then [[ ${shell_mode} == "Nginx+ws+TLS" ]] && shell_mode="Nginx+gRPC+TLS" [[ ${shell_mode} == "Reality" ]] && shell_mode="Reality+gRPC" [[ ${shell_mode} == "ws ONLY" ]] && shell_mode="gRPC ONLY" ws_grpc_mode="onlygRPC" elif [[ $choose_network == 3 ]]; then [[ ${shell_mode} == "Nginx+ws+TLS" ]] && shell_mode="Nginx+ws+gRPC+TLS" [[ ${shell_mode} == "Reality" ]] && shell_mode="Reality+ws+gRPC" [[ ${shell_mode} == "ws ONLY" ]] && shell_mode="ws+gRPC ONLY" ws_grpc_mode="all" else [[ ${shell_mode} == "Reality" ]] && shell_mode="Reality+ws" ws_grpc_mode="onlyws" fi fi } xray_reality_add_more_choose() { if [[ "on" != ${old_config_status} ]]; then echo log_echo "${GreenBG} $(gettext "是否添加简单 ws/gRPC 协议 用于负载均衡") [Y/${Red}N${Font}${GreenBG}]? ${Font}" echo -e "${Warning} ${YellowBG} $(gettext "如不清楚具体用途, 请勿选择")! ${Font}" read -r reality_add_more_fq case $reality_add_more_fq in [yY][eE][sS] | [yY]) reality_add_more="on" ws_grpc_choose ws_inbound_port_set grpc_inbound_port_set ws_path_set grpc_path_set port_exist_check "${xport}" port_exist_check "${gport}" ;; *) reality_add_more="off" ws_grpc_mode="None" ws_inbound_port_set grpc_inbound_port_set ws_path_set grpc_path_set log_echo "${OK} ${GreenBG} $(gettext "已跳过添加简单 ws/gRPC 协议") ${Font}" ;; esac fi } ws_grpc_qr() { artpath="None" artxport="None" artserviceName="None" artgport="None" if [[ ${ws_grpc_mode} == "onlyws" ]]; then artxport=${xport} artpath=${path} elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then artgport=${gport} artserviceName=${serviceName} elif [[ ${ws_grpc_mode} == "all" ]]; then artxport=${xport} artpath=${path} artgport=${gport} artserviceName=${serviceName} fi } ws_inbound_port_set() { if [[ "on" != ${old_config_status} ]]; then if [[ ${ws_grpc_mode} == "onlyws" || ${ws_grpc_mode} == "all" ]] || [[ ${reality_add_more} == "on" ]]; then echo log_echo "${GreenBG} $(gettext "是否需要自定义") ws inbound_port [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r inbound_port_modify_fq case $inbound_port_modify_fq in [yY][eE][sS] | [yY]) read_optimize "$(gettext "请输入") ws inbound_port ($(gettext "请勿与其他端口相同")!): " "xport" "NULL" 0 65535 "$(gettext "请输入 0-65535 之间的值")!" log_echo "${Green} ws inbound_port: ${xport} ${Font}" ;; *) xport=$((RANDOM % 1000 + 10000)) log_echo "${Green} ws inbound_port: ${xport} ${Font}" ;; esac else xport=$((RANDOM % 1000 + 20000)) fi fi } grpc_inbound_port_set() { if [[ "on" != ${old_config_status} ]]; then if [[ ${ws_grpc_mode} == "onlygRPC" || ${ws_grpc_mode} == "all" ]] || [[ ${reality_add_more} == "on" ]]; then echo log_echo "${GreenBG} $(gettext "是否需要自定义") gRPC inbound_port [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r inbound_port_modify_fq case $inbound_port_modify_fq in [yY][eE][sS] | [yY]) read_optimize "$(gettext "请输入") gRPC inbound_port ($(gettext "请勿与其他端口相同")!): " "gport" "NULL" 0 65535 "$(gettext "请输入 0-65535 之间的值")!" log_echo "${Green} gRPC inbound_port: ${gport} ${Font}" ;; *) gport=$((RANDOM % 1000 + 10000)) while [[ ${gport} == ${xport} ]]; do gport=$((RANDOM % 1000 + 10000)); done log_echo "${Green} gRPC inbound_port: ${gport} ${Font}" ;; esac else gport=$((RANDOM % 1000 + 30000)) fi fi } firewall_set() { echo log_echo "${GreenBG} $(gettext "是否需要设置防火墙") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r firewall_set_fq case $firewall_set_fq in [yY][eE][sS] | [yY]) if [[ "${ID}" == "centos" ]]; then pkg_install "iptables-services" else pkg_install "iptables-persistent" fi iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT if [[ ${tls_mode} == "TLS" || ${tls_mode} == "XTLS" ]]; then iptables -I INPUT -p tcp -m multiport --dport 53,80,${port} -j ACCEPT iptables -I INPUT -p udp -m multiport --dport 53,80,${port} -j ACCEPT iptables -I OUTPUT -p tcp -m multiport --sport 53,80,${port} -j ACCEPT iptables -I OUTPUT -p udp -m multiport --sport 53,80,${port} -j ACCEPT iptables -I INPUT -p udp --dport 1024:65535 -j ACCEPT fi if [[ ${ws_grpc_mode} == "onlyws" ]]; then iptables -I INPUT -p tcp -m multiport --dport 53,${xport} -j ACCEPT iptables -I INPUT -p udp -m multiport --dport 53,${xport} -j ACCEPT iptables -I OUTPUT -p tcp -m multiport --sport 53,${xport} -j ACCEPT iptables -I OUTPUT -p udp -m multiport --sport 53,${xport} -j ACCEPT iptables -I INPUT -p udp --dport 1024:65535 -j ACCEPT elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then iptables -I INPUT -p tcp -m multiport --dport 53,${gport} -j ACCEPT iptables -I INPUT -p udp -m multiport --dport 53,${gport} -j ACCEPT iptables -I OUTPUT -p tcp -m multiport --sport 53,${gport} -j ACCEPT iptables -I OUTPUT -p udp -m multiport --sport 53,${gport} -j ACCEPT iptables -I INPUT -p udp --dport 1024:65535 -j ACCEPT elif [[ ${ws_grpc_mode} == "all" ]]; then iptables -I INPUT -p tcp -m multiport --dport 53,${xport},${gport} -j ACCEPT iptables -I INPUT -p udp -m multiport --dport 53,${xport},${gport} -j ACCEPT iptables -I OUTPUT -p tcp -m multiport --sport 53,${xport},${gport} -j ACCEPT iptables -I OUTPUT -p udp -m multiport --sport 53,${xport},${gport} -j ACCEPT iptables -I INPUT -p udp --dport 1024:65535 -j ACCEPT fi if [[ "${ID}" == "centos" && ${VERSION_ID} -ge 7 ]]; then service iptables save service iptables restart log_echo "${OK} ${GreenBG} $(gettext "防火墙") $(gettext "重启") ${Font}" else netfilter-persistent save systemctl restart iptables log_echo "${OK} ${GreenBG} $(gettext "防火墙") $(gettext "重启") ${Font}" fi log_echo "${OK} ${GreenBG} $(gettext "开放防火墙相关端口") ${Font}" log_echo "${GreenBG} $(gettext "若修改配置, 请注意关闭防火墙相关端口") ${Font}" log_echo "${OK} ${GreenBG} $(gettext "配置") Xray FullCone ${Font}" ;; *) log_echo "${OK} ${GreenBG} $(gettext "跳过防火墙设置") ${Font}" ;; esac } ws_path_set() { if [[ "on" != ${old_config_status} ]] || [[ ${change_ws_path} == "yes" ]]; then if [[ ${ws_grpc_mode} == "onlyws" || ${ws_grpc_mode} == "all" ]] || [[ ${reality_add_more} == "on" ]]; then echo log_echo "${GreenBG} $(gettext "是否需要自定义") ws $(gettext "伪装路径") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r path_modify_fq case $path_modify_fq in [yY][eE][sS] | [yY]) read_optimize "$(gettext "请输入") ws $(gettext "伪装路径") ($(gettext "不需要")"/":)" "path" "NULL" log_echo "${Green} ws $(gettext "伪装路径"): ${path} ${Font}" ;; *) path="$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})" log_echo "${Green} ws $(gettext "伪装路径"): ${path} ${Font}" ;; esac else path="$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})" fi elif [[ ${ws_grpc_mode} == "onlyws" ]] || [[ ${ws_grpc_mode} == "all" ]]; then echo log_echo "${GreenBG} $(gettext "是否需要自定义") ws $(gettext "伪装路径") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r change_ws_path_fq case $change_ws_path_fq in [yY][eE][sS] | [yY]) change_ws_path="yes" ws_path_set ;; *) ;; esac fi } grpc_path_set() { if [[ "on" != ${old_config_status} ]] || [[ ${change_grpc_path} == "yes" ]]; then if [[ ${ws_grpc_mode} == "onlygRPC" || ${ws_grpc_mode} == "all" ]] || [[ ${reality_add_more} == "on" ]]; then echo log_echo "${GreenBG} $(gettext "是否需要自定义") gRPC $(gettext "伪装路径") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r path_modify_fq case $path_modify_fq in [yY][eE][sS] | [yY]) read_optimize "$(gettext "请输入") gRPC $(gettext "伪装路径") ($(gettext "不需要")"/":)" "serviceName" "NULL" log_echo "${Green} gRPC $(gettext "伪装路径"): ${serviceName} ${Font}" ;; *) serviceName="$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})" log_echo "${Green} gRPC $(gettext "伪装路径"): ${serviceName} ${Font}" ;; esac else serviceName="$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})" fi elif [[ ${ws_grpc_mode} == "onlygRPC" ]] || [[ ${ws_grpc_mode} == "all" ]]; then echo log_echo "${GreenBG} $(gettext "是否需要自定义") gRPC $(gettext "伪装路径") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r change_grpc_path_fq case $change_grpc_path_fq in [yY][eE][sS] | [yY]) change_grpc_path="yes" grpc_path_set ;; *) ;; esac fi } email_set() { if [[ "on" != ${old_config_status} ]]; then echo log_echo "${GreenBG} $(gettext "是否需要自定义") Xray $(gettext "用户名") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r custom_email_fq case $custom_email_fq in [yY][eE][sS] | [yY]) read_optimize "$(gettext "请输入正确的 email") (e.g. me@hey.run): " "custom_email" "NULL" ;; *) custom_email="$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})@hey.run" ;; esac log_echo "${Green} Xray $(gettext "用户名") (email): ${custom_email} ${Font}" fi } UUID_set() { if [[ "on" != ${old_config_status} ]]; then echo log_echo "${GreenBG} $(gettext "是否需要自定义字符串映射") (UUIDv5) [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r need_UUID5 case $need_UUID5 in [yY][eE][sS] | [yY]) read_optimize "$(gettext "请输入自定义字符串") ($(gettext "最多30字符")):" "UUID5_char" "NULL" UUID="$(UUIDv5_tranc ${UUID5_char})" log_echo "${Green} $(gettext "自定义字符串"): ${UUID5_char} ${Font}" log_echo "${Green} UUIDv5: ${UUID} ${Font}" echo ;; *) UUID5_char="$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})" UUID="$(UUIDv5_tranc ${UUID5_char})" log_echo "${Green} UUID $(gettext "映射字符串"): ${UUID5_char} ${Font}" log_echo "${Green} UUID: ${UUID} ${Font}" echo ;; esac fi } target_set() { if [[ "on" == ${old_config_status} ]] && [[ -n $(info_extraction target) ]]; then echo log_echo "${GreenBG} $(gettext "检测到 target 域名已配置, 是否保留") [${Red}Y${Font}${GreenBG}/N]? ${Font}" read -r old_host_fq case $old_host_fq in [nN][oO] | [nN]) target_reset=1 nginx_reality_serverNames_del ;; *) target_reset=0 ;; esac fi if [[ ${target_reset} == 1 ]] || [[ "on" != ${old_config_status} ]]; then local domain local output local curl_output pkg_install "nmap" while true; do echo log_echo "${GreenBG} $(gettext "请输入一个域名") (e.g. bing.com)${Font}" log_echo "${Green}$(gettext "域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用")${Font}" read_optimize "$(gettext "确认域名符合要求后请输入"): " "domain" "NULL" log_echo "${Green}$(gettext "正在检测域名请等待")...${Font}" output=$(nmap --script ssl-enum-ciphers -p 443 "${domain}") curl_output=$(curl -I -k -m 5 "https://${domain}" 2>&1) # 检测TLSv1.3支持 if ! echo "$output" | grep -q "TLSv1.3"; then log_echo "${Warning} ${YellowBG} $(gettext "该域名不支持") TLSv1.3 ${YellowBG}${Font}" fi # 检测X25519支持 if ! echo "$output" | grep -q "x25519"; then log_echo "${Warning} ${YellowBG} $(gettext "该域名不支持") X25519 ${YellowBG}${Font}" fi # 检测HTTP/2支持 if ! echo "$curl_output" | grep -q "HTTP/2"; then log_echo "${Warning} ${YellowBG} $(gettext "该域名不支持") HTTP/2 ${YellowBG}${Font}" fi # 检测是否跳转 if echo "$curl_output" | grep -i -q 'location:'; then log_echo "${Warning} ${YellowBG} $(gettext "该域名发生了跳转") ${YellowBG}${Font}" fi if ! echo "$output" | grep -q "TLSv1.3" || \ ! echo "$output" | grep -q "x25519" || \ ! echo "$curl_output" | grep -q "HTTP/2" || \ echo "$curl_output" | grep -i -q 'location:'; then log_echo "${Warning} ${YellowBG} $(gettext "该域名可能不满足所有要求") ${YellowBG}${Font}" log_echo "${GreenBG} $(gettext "是否仍要设置此域名") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r force_set_fq case $force_set_fq in [yY][eE][sS] | [yY]) target=$domain break ;; *) continue ;; esac else log_echo "${OK} ${GreenBG} $(gettext "域名") ${domain} $(gettext "满足所有要求") ${Font}" target=$domain break fi done log_echo "${Green} target $(gettext "域名"): ${target} ${Font}" fi } serverNames_set() { if [[ ${target_reset} == 1 ]] || [[ "on" != ${old_config_status} ]]; then local custom_serverNames_fq echo log_echo "${GreenBG} $(gettext "是否需要自定义") ${target} $(gettext "域名的") serverNames [Y/${Red}N${Font}${GreenBG}]? ${Font}" echo -e "${Green} $(gettext "默认为") ${target} $(gettext "域名本身")${Font}" echo -e "${Warning} ${YellowBG} $(gettext "如不清楚具体用途, 请勿继续")! ${Font}" read -r custom_serverNames_fq case $custom_serverNames_fq in [yY][eE][sS] | [yY]) read_optimize "$(gettext "请输入"): " "serverNames" "NULL" ;; *) serverNames=$target ;; esac log_echo "${Green} serverNames: ${serverNames} ${Font}" echo fi } keys_set() { if [[ "on" != ${old_config_status} ]]; then local keys custom_keys_fq echo log_echo "${GreenBG} $(gettext "是否需要自定义") privateKey [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r custom_keys_fq case $custom_keys_fq in [yY][eE][sS] | [yY]) read_optimize "$(gettext "请输入") privateKey:" "privateKey" "NULL" keys=$(${xray_bin_dir}/xray x25519 -i "${privateKey}" | tr '\n' ' ') ## 兼容之前的xray版本,一个大版本后删除 from: 2.8.9 if echo "${keys}" | grep -q "Password (PublicKey): "; then password=$(echo "${keys}" | sed 's/.*Password (PublicKey): //' | awk '{print $1}') elif echo "${keys}" | grep -q "Password: "; then password=$(echo "${keys}" | awk -F"Password: " '{print $2}' | awk '{print $1}') elif echo "${keys}" | grep -q "PublicKey: "; then password=$(echo "${keys}" | awk -F"PublicKey: " '{print $2}' | awk '{print $1}') fi ## 兼容结束 ;; *) keys=$(${xray_bin_dir}/xray x25519 | tr '\n' ' ') privateKey=$(echo "${keys}" | awk -F"PrivateKey: " '{print $2}' | awk '{print $1}') ## 兼容之前的xray版本,一个大版本后删除 from: 2.8.9 if echo "${keys}" | grep -q "Password (PublicKey): "; then password=$(echo "${keys}" | sed 's/.*Password (PublicKey): //' | awk '{print $1}') elif echo "${keys}" | grep -q "Password: "; then password=$(echo "${keys}" | awk -F"Password: " '{print $2}' | awk '{print $1}') elif echo "${keys}" | grep -q "PublicKey: "; then password=$(echo "${keys}" | awk -F"PublicKey: " '{print $2}' | awk '{print $1}') fi ## 兼容结束 ;; esac log_echo "${Green} privateKey: ${privateKey} ${Font}" log_echo "${Green} Password: ${password} ${Font}" echo fi } shortIds_set() { if [[ "on" != ${old_config_status} ]]; then local custom_shortids_fq echo log_echo "${GreenBG} $(gettext "是否需要自定义") shortIds [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r custom_shortids_fq case $custom_shortids_fq in [yY][eE][sS] | [yY]) read_optimize "$(gettext "请输入") shortIds:" "shortIds" "NULL" ;; *) pkg_install "openssl" shortIds=$(openssl rand -hex 8) ;; esac log_echo "${Green} shortIds: ${shortIds} ${Font}" echo fi } ensure_file_manager() { local fm_remote_url="https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/file_manager.sh" local fm_local_path="${idleleo_dir}/file_manager.sh" if [[ ! -f "${fm_local_path}" ]]; then log_echo "${Info} ${Green} $(gettext "本地文件 file_manager.sh 不存在, 正在下载")... ${Font}" if ! curl -sL "$fm_remote_url" -o "$fm_local_path"; then log_echo "${Error} ${RedBG} $(gettext "下载失败, 请手动下载并安装新版本") ${Font}" return 1 fi chmod +x "$fm_local_path" fi return 0 } nginx_upstream_server_set() { echo log_echo "${GreenBG} $(gettext "是否变更") Nginx $(gettext "负载均衡") [Y/${Red}N${Font}${GreenBG}]? ${Font}" echo -e "${Warning} ${YellowBG} $(gettext "如不清楚具体用途, 请勿继续")! ${Font}" read -r nginx_upstream_server_fq case $nginx_upstream_server_fq in [yY][eE][sS] | [yY]) if [[ ${tls_mode} == "TLS" ]]; then echo -e "\n${GreenBG} $(gettext "请选择协议为 ws 或 gRPC") ${Font}" echo "1: ws" echo "2: gRPC" echo "3: $(gettext "返回")" local upstream_choose read_optimize "$(gettext "请输入"): " "upstream_choose" "NULL" 1 3 "$(gettext "请输入有效的数字")!" if ensure_file_manager; then case $upstream_choose in 1) source "${idleleo_dir}/file_manager.sh" wsServers ${nginx_conf_dir} ;; 2) source "${idleleo_dir}/file_manager.sh" grpcServers ${nginx_conf_dir} ;; 3) ;; *) log_echo "${Error} ${RedBG} $(gettext "无效选项, 请重试")! ${Font}" nginx_upstream_server_set ;; esac fi elif [[ ${tls_mode} == "Reality" ]] && [[ ${reality_add_balance} == "on" ]] && [[ ${reality_add_nginx} == "on" ]]; then if ensure_file_manager; then source "${idleleo_dir}/file_manager.sh" realityServers ${nginx_conf_dir} fi else log_echo "${Error} ${RedBG} $(gettext "当前模式不支持此操作")! ${Font}" return 1 fi ;; *) ;; esac } nginx_servernames_server_set() { if [[ ${tls_mode} == "Reality" ]] && [[ ${reality_add_nginx} == "on" ]]; then echo log_echo "${GreenBG} $(gettext "是否变更") Nginx serverNames [Y/${Red}N${Font}${GreenBG}]? ${Font}" echo -e "${Warning} ${YellowBG} $(gettext "如不清楚具体用途, 请勿继续")! ${Font}" echo -e "${Info} ${GreenBG} $(gettext "配置用途可以参考文章"): https://hey.run/archives/use-reality ${Font}" read -r nginx_servernames_server_fq case $nginx_servernames_server_fq in [yY][eE][sS] | [yY]) if ensure_file_manager; then source "${idleleo_dir}/file_manager.sh" serverNames ${nginx_conf_dir} fi ;; *) ;; esac else log_echo "${Error} ${RedBG} $(gettext "当前模式不支持此操作")! ${Font}" fi } UUIDv5_tranc() { [[ $# = 0 ]] && return python3 -c "import uuid,sys;UUID_NAMESPACE=uuid.UUID('00000000-0000-0000-0000-000000000000');print(uuid.uuid5(UUID_NAMESPACE,sys.argv[1]))" "$1" } modify_listen_address() { local modifynum modifynum2 if [[ ${tls_mode} == "Reality" ]]; then modifynum=1 modifynum2=2 elif [[ ${tls_mode} == "XTLS" ]]; then jq '.inbounds[0].listen = "0.0.0.0"' "${xray_conf}" > "${xray_conf}.tmp" judge "Xray listen address $(gettext "修改")" mv "${xray_conf}.tmp" "${xray_conf}" return else modifynum=0 modifynum2=1 fi if [[ ${ws_grpc_mode} == "onlyws" ]]; then jq --argjson modifynum "$modifynum" \ '.inbounds[$modifynum].listen = "0.0.0.0"' "${xray_conf}" > "${xray_conf}.tmp" judge "Xray listen address $(gettext "修改")" elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then jq --argjson modifynum2 "$modifynum2" \ '.inbounds[$modifynum2].listen = "0.0.0.0"' "${xray_conf}" > "${xray_conf}.tmp" judge "Xray listen address $(gettext "修改")" elif [[ ${ws_grpc_mode} == "all" ]]; then jq --argjson modifynum "$modifynum" --argjson modifynum2 "$modifynum2" \ '.inbounds[$modifynum].listen = "0.0.0.0" | .inbounds[$modifynum2].listen = "0.0.0.0"' "${xray_conf}" > "${xray_conf}.tmp" judge "Xray listen address $(gettext "修改")" fi mv "${xray_conf}.tmp" "${xray_conf}" } modify_inbound_port() { if [[ ${tls_mode} == "Reality" ]]; then if [[ ${reality_add_nginx} == "off" ]]; then jq --argjson port "${port}" --argjson xport "${xport}" --argjson gport "${gport}" \ '.inbounds[0].port = $port | .inbounds[1].port = $xport | .inbounds[2].port = $gport' "${xray_conf}" > "${xray_conf}.tmp" judge "Xray inbound port $(gettext "修改")" else jq --argjson xport "${xport}" --argjson gport "${gport}" \ '.inbounds[1].port = $xport | .inbounds[2].port = $gport' "${xray_conf}" > "${xray_conf}.tmp" judge "Xray inbound port $(gettext "修改")" fi elif [[ ${tls_mode} == "XTLS" ]]; then jq --argjson port "${port}" '.inbounds[0].port = $port' "${xray_conf}" > "${xray_conf}.tmp" judge "Xray inbound port $(gettext "修改")" else jq --argjson xport "${xport}" --argjson gport "${gport}" \ '.inbounds[0].port = $xport | .inbounds[1].port = $gport' "${xray_conf}" > "${xray_conf}.tmp" judge "Xray inbound port $(gettext "修改")" fi mv "${xray_conf}.tmp" "${xray_conf}" } modify_nginx_origin_conf() { sed -i "s/worker_processes 1;/worker_processes auto;/" ${nginx_dir}/conf/nginx.conf sed -i "s/^\( *\)worker_connections 1024;.*/\1worker_connections 4096;/" ${nginx_dir}/conf/nginx.conf if [[ ${tls_mode} == "TLS" ]]; then sed -i "\$i include ${nginx_conf_dir}/*.conf;" ${nginx_dir}/conf/nginx.conf elif [[ ${tls_mode} == "Reality" ]] && [[ ${reality_add_nginx} == "on" ]]; then sed -i "\$a include ${nginx_conf_dir}/*.conf;" ${nginx_dir}/conf/nginx.conf fi sed -i "/http\( *\){/a \\\tserver_tokens off;" ${nginx_dir}/conf/nginx.conf sed -i "/error_page.*504/i \\\t\\tif (\$host = '${local_ip}') {\\n\\t\\t\\treturn 403;\\n\\t\\t}" ${nginx_dir}/conf/nginx.conf } modify_nginx_port() { if [[ ${tls_mode} == "Reality" ]] && [[ ${reality_add_nginx} == "on" ]]; then sed -i "s/^\( *\)listen.*so_keepalive=on.*/\1listen ${port} reuseport so_keepalive=on backlog=65535;/" ${nginx_conf} judge "Nginx port $(gettext "修改")" elif [[ ${tls_mode} == "TLS" ]]; then sed -i "2s/^\( *\).*ssl reuseport;$/\1listen ${port} ssl reuseport;/" ${nginx_conf} sed -i "3s/^\( *\).*ssl reuseport;$/\1listen [::]:${port} ssl reuseport;/" ${nginx_conf} sed -i "4s/^\( *\).*quic reuseport;$/\1listen ${port} quic reuseport;/" ${nginx_conf} sed -i "5s/^\( *\).*quic reuseport;$/\1listen [::]:${port} quic reuseport;/" ${nginx_conf} judge "Xray port $(gettext "修改")" fi [[ "on" != ${old_config_status} ]] && log_echo "${Green} $(gettext "端口"): ${port} ${Font}" } modify_nginx_ssl_other() { if [[ -f "${nginx_dir}/conf/nginx.conf" ]] && [[ $(grep -c "server_tokens off;" ${nginx_dir}/conf/nginx.conf) -eq '0' ]] && [[ ${save_originconf} != "Yes" ]]; then modify_nginx_origin_conf fi sed -i "s/^\( *\)server_name\( *\).*/\1server_name\2${domain};/g" ${nginx_ssl_conf} sed -i "s/^\( *\)return 301.*/\1return 301 https:\/\/${domain}\$request_uri;/" ${nginx_ssl_conf} } modify_nginx_other() { if [[ -f "${nginx_dir}/conf/nginx.conf" ]] && [[ $(grep -c "server_tokens off;" ${nginx_dir}/conf/nginx.conf) -eq '0' ]] && [[ ${save_originconf} != "Yes" ]]; then modify_nginx_origin_conf fi if [[ ${tls_mode} == "TLS" ]]; then sed -i "s/^\( *\)server_name\( *\).*/\1server_name\2${domain};/g" ${nginx_conf} sed -i "s/^\( *\)location ws$/\1location \/${path}/" ${nginx_conf} sed -i "s/^\( *\)location grpc$/\1location \/${serviceName}/" ${nginx_conf} sed -i "s/^\( *\)return 301.*/\1return 301 https:\/\/${domain}\$request_uri;/" ${nginx_conf} if [[ ${ws_grpc_mode} == "onlyws" ]]; then sed -i "s/^\( *\)#proxy_pass\(.*\)/\1proxy_pass\2/" ${nginx_conf} sed -i "s/^\( *\)#proxy_redirect default;/\1proxy_redirect default;/" ${nginx_conf} elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then sed -i "s/^\( *\)#grpc_pass\(.*\)/\1grpc_pass\2/" ${nginx_conf} elif [[ ${ws_grpc_mode} == "all" ]]; then sed -i "s/^\( *\)#proxy_pass\(.*\)/\1proxy_pass\2/" ${nginx_conf} sed -i "s/^\( *\)#proxy_redirect default;/\1proxy_redirect default;/" ${nginx_conf} sed -i "s/^\( *\)#grpc_pass\(.*\)/\1grpc_pass\2/" ${nginx_conf} fi fi } nginx_servers_add() { touch ${nginx_conf_dir}/127.0.0.1.wsServers cat >${nginx_conf_dir}/127.0.0.1.wsServers <${nginx_conf_dir}/127.0.0.1.grpcServers< "${xray_conf}.tmp" judge "target serverNames $(gettext "配置修改")" mv "${xray_conf}.tmp" "${xray_conf}" } modify_privateKey_shortIds() { jq --arg privateKey "${privateKey}" --arg shortIds "${shortIds}" ' .inbounds[0].streamSettings.realitySettings.privateKey = $privateKey | .inbounds[0].streamSettings.realitySettings.shortIds = [$shortIds]' "${xray_conf}" > "${xray_conf}.tmp" judge "privateKey shortIds $(gettext "配置修改")" mv "${xray_conf}.tmp" "${xray_conf}" } modify_reality_listen_address () { jq '.inbounds[0].listen = "127.0.0.1"' "${xray_conf}" > "${xray_conf}.tmp" mv "${xray_conf}.tmp" "${xray_conf}" judge "Xray reality listen address $(gettext "配置修改")" } xray_privilege_escalation() { if [[ -n "$(grep "User=nobody" ${xray_systemd_file})" ]]; then log_echo "${OK} ${GreenBG} $(gettext "检测到 Xray 的权限控制, 启动修改程序") ${Font}" chmod -fR a+rw /var/log/xray/ chown -fR nobody:nogroup /var/log/xray/ [[ -f "${ssl_chainpath}/xray.key" ]] && chown -fR nobody:nogroup ${ssl_chainpath}/* fi log_echo "${OK} ${GreenBG} Xray $(gettext "修改完成") ${Font}" } xray_install() { if [[ $(xray version) == "" ]] || [[ ! -f "${xray_conf}" ]]; then bash -c "$(curl -L https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)" @ install -f --version v${xray_online_version} judge "$(gettext "安装") Xray" systemctl daemon-reload xray_privilege_escalation [[ -f "${xray_default_conf}" ]] && rm -rf ${xray_default_conf} ln -s ${xray_conf} ${xray_default_conf} xray_version=${xray_online_version} else log_echo "${OK} ${GreenBG} $(gettext "已安装") Xray ${Font}" xray_version=$(info_extraction xray_version) fi } xray_update() { [[ -f "/etc/idleleo/logs/update_failed.mark" ]] && rm -rf "/etc/idleleo/logs/update_failed.mark" [[ ! -d "${local_bin}/etc/xray" ]] && log_echo "${GreenBG} $(gettext "若更新无效, 建议直接卸载再安装")! ${Font}" log_echo "${Warning} ${GreenBG} $(gettext "部分新功能需要重新安装才可生效") ${Font}" ## xray_online_version=$(check_version xray_online_pre_version) ## if [[ $(info_extraction xray_version) != ${xray_online_version} ]] && [[ ${xray_version} != ${xray_online_version} ]]; then if [[ $(info_extraction xray_version) != ${xray_online_version} ]]; then if [[ ${auto_update} != "YES" ]]; then log_echo "${Warning} ${GreenBG} $(gettext "检测到存在最新版") ${Font}" log_echo "${Warning} ${GreenBG} $(gettext "脚本可能未兼容此版本") ${Font}" log_echo "${Warning} ${GreenBG} $(gettext "是否更新") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r xray_test_fq case $xray_test_fq in [yY][eE][sS] | [yY]) log_echo "${OK} ${GreenBG} $(gettext "更新") Xray ! ${Font}" systemctl stop xray bash -c "$(curl -L https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)" @ install -f --version v${xray_online_version} if ! ${xray_bin_dir}/xray -version &> /dev/null; then log_echo "${Error} ${RedBG} Xray $(gettext "启动失败")! ${Font}" log_echo "${Warning} ${GreenBG} $(gettext "是否回滚到之前的版本") [${Red}Y${Font}${GreenBG}/N]? ${Font}" read -r rollback_fq case $rollback_fq in [nN][oO] | [nN]) log_echo "${Info} ${YellowBG} $(gettext "未执行回滚操作")! ${Font}" return 0 ;; *) log_echo "${OK} ${GreenBG} $(gettext "正在回滚")... ${Font}" xray_version=$(info_extraction xray_version) bash -c "$(curl -L https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)" @ install -f --version v${xray_version} if ${xray_bin_dir}/xray -version &> /dev/null; then log_echo "${OK} ${GreenBG} $(gettext "已成功回滚到之前的") Xray $(gettext "版本")! ${Font}" else log_echo "${Error} ${RedBG} Xray $(gettext "回滚失败")! ${Font}" return 1 fi ;; esac else judge "Xray $(gettext "更新")" xray_version=${xray_online_version} fi ;; *) return 0 ;; esac else systemctl stop xray bash -c "$(curl -L https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)" @ install -f --version v${xray_online_version} if ! ${xray_bin_dir}/xray -version &> /dev/null; then xray_version=$(info_extraction xray_version) bash -c "$(curl -L https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)" @ install -f --version v${xray_version} if ! ${xray_bin_dir}/xray -version &> /dev/null; then echo "Xray $(gettext "回滚失败")!" >>${log_file} return 1 fi fi fi else timeout "$(gettext "重装") Xray !" systemctl stop xray xray_version=${xray_online_version} bash -c "$(curl -L https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)" @ install -f --version v${xray_online_version} judge "Xray $(gettext "重装")" fi xray_privilege_escalation [[ -f "${xray_default_conf}" ]] && rm -rf ${xray_default_conf} ln -s ${xray_conf} ${xray_default_conf} jq --arg xray_version "${xray_version}" '.xray_version = $xray_version' "${xray_qr_config_file}" > "${xray_qr_config_file}.tmp" mv "${xray_qr_config_file}.tmp" "${xray_qr_config_file}" systemctl daemon-reload systemctl start xray if ! ${xray_bin_dir}/xray -version &> /dev/null; then [[ ${auto_update} == "YES" ]] && echo "Xray $(gettext "更新失败")!" >>${log_file} [[ ${auto_update} != "YES" ]] && log_echo "${Error} ${RedBG} Xray $(gettext "更新失败")! ${Font}" return 1 fi return 0 } reality_balance_add_fq() { echo log_echo "${GreenBG} $(gettext "是否添加 Reality 负载均衡") [Y/${Red}N${Font}${GreenBG}]? ${Font}" echo -e "${Warning} ${Green} $(gettext "使用此功能前,建议先阅读作者教程")! ${Font}" echo -e "${Warning} ${YellowBG} $(gettext "如不清楚具体用途, 请勿选择")! ${Font}" read -r reality_balance_add_fq case $reality_balance_add_fq in [yY][eE][sS] | [yY]) reality_add_balance="on" log_echo "${OK} ${GreenBG} $(gettext "已启用") ${Font}" ;; *) reality_add_balance="off" log_echo "${OK} ${GreenBG} $(gettext "已跳过") ${Font}" ;; esac } reality_nginx_add_fq() { echo log_echo "${Warning} ${Green} $(gettext "Reality 协议有流量偷跑的风险") ${Font}" if [[ ${reality_add_balance} == "off" ]]; then log_echo "${GreenBG} $(gettext "是否额外安装 nginx 前置保护")($(gettext "推荐")) [${Red}Y${Font}${GreenBG}/N]? ${Font}" read -r reality_nginx_add_fq case $reality_nginx_add_fq in [nN][oO] | [nN]) reality_add_nginx="off" if [[ -d "${nginx_dir}" ]]; then echo log_echo "${Warning} ${Green} $(gettext "检测到已安装") nginx ${Font}" uninstall_nginx else log_echo "${OK} ${GreenBG} $(gettext "已跳过安装") nginx ${Font}" fi ;; *) reality_add_nginx="on" nginx_exist_check nginx_systemd nginx_reality_conf_add nginx_reality_servers_add nginx_reality_serverNames_add ;; esac else log_echo "${Warning} ${Green} $(gettext "检测到已开启 Reality 负载均衡") ${Font}" log_echo "${Warning} ${Green} $(gettext "如用作 Reality 负载均衡主服务器必须安装") ${Font}" log_echo "${Warning} ${Green} $(gettext "如用作 Reality 负载均衡二级服务器则无需安装") ${Font}" log_echo "${GreenBG} $(gettext "是否额外安装 nginx 前置保护") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r reality_nginx_add_fq case $reality_nginx_add_fq in [yY][eE][sS] | [yY]) reality_add_nginx="on" nginx_exist_check nginx_systemd nginx_reality_conf_add nginx_reality_servers_add nginx_reality_serverNames_add ;; *) reality_add_nginx="off" if [[ -d "${nginx_dir}" ]]; then echo log_echo "${Warning} ${Green} $(gettext "检测到已安装") nginx ${Font}" uninstall_nginx else log_echo "${OK} ${GreenBG} $(gettext "已跳过安装") nginx ${Font}" fi ;; esac fi } nginx_exist_check() { if [[ -f "${nginx_dir}/sbin/nginx" ]] && [[ -n "$(info_extraction nginx_build_version)" ]]; then if [[ -d "${nginx_conf_dir}" ]]; then rm -rf ${nginx_conf_dir}/*.conf if [[ -f "${nginx_conf_dir}/nginx.default" ]]; then cp -fp ${nginx_conf_dir}/nginx.default ${nginx_dir}/conf/nginx.conf elif [[ -f "${nginx_dir}/conf/nginx.conf.default" ]]; then cp -fp ${nginx_dir}/conf/nginx.conf.default ${nginx_dir}/conf/nginx.conf else sed -i "/if \(.*\) {$/,+2d" ${nginx_dir}/conf/nginx.conf sed -i "/^include.*\*\.conf;$/d" ${nginx_dir}/conf/nginx.conf fi else sed -i "/if \(.*\) {$/,+2d" ${nginx_dir}/conf/nginx.conf sed -i "/^include.*\*\.conf;$/d" ${nginx_dir}/conf/nginx.conf fi modify_nginx_origin_conf nginx_build_version=$(info_extraction nginx_build_version) log_echo "${OK} ${GreenBG} Nginx $(gettext "已存在, 跳过编译安装过程") ${Font}" elif [[ -d "/etc/nginx" ]] && [[ -n "$(info_extraction nginx_version)" ]]; then log_echo "${Error} ${RedBG} $(gettext "检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装")! ${Font}" exit 1 else nginx_install fi } nginx_install() { local temp_dir=$(mktemp -d) local current_dir=$(pwd) cd "$temp_dir" || exit log_echo "${OK} ${GreenBG} $(gettext "即将下载已编译的") Nginx ${Font}" local nginx_filename case $(uname -m) in x86_64) nginx_filename="xray-nginx-custom-x86.tar.gz" ;; armv7l|armv8l|aarch64) nginx_filename="xray-nginx-custom-arm.tar.gz" ;; *) log_echo "${Error} ${RedBG} $(gettext "不支持的系统架构"): $(uname -m) ${Font}" cd "$current_dir" && rm -rf "$temp_dir" exit 1 ;; esac local url="https://github.com/hello-yunshu/Xray_bash_onekey_Nginx/releases/download/v${nginx_build_version}/${nginx_filename}" if ! curl -L -# -o "$nginx_filename" "$url"; then log_echo "${Error} ${RedBG} Nginx $(gettext "下载失败") ${Font}" cd "$current_dir" && rm -rf "$temp_dir" exit 1 fi log_echo "${OK} ${GreenBG} Nginx $(gettext "下载成功") ${Font}" if ! tar -xzf "$nginx_filename" -C ./; then log_echo "${Error} ${RedBG} Nginx $(gettext "解压失败") ${Font}" cd "$current_dir" && rm -rf "$temp_dir" exit 1 fi [[ -d ${nginx_dir} ]] && rm -rf "${nginx_dir}" mv ./nginx "${nginx_dir}" cp -fp ${nginx_dir}/conf/nginx.conf ${nginx_conf_dir}/nginx.default # 修改基本配置 #sed -i 's/#user nobody;/user root;/' ${nginx_dir}/conf/nginx.conf modify_nginx_origin_conf # 删除临时文件 cd "$current_dir" && rm -rf "$temp_dir" chown -fR nobody:nogroup "${nginx_dir}" chmod -fR 755 "${nginx_dir}" } nginx_update() { [[ -f "/etc/idleleo/logs/update_failed.mark" ]] && rm -rf "/etc/idleleo/logs/update_failed.mark" if [[ -f "${nginx_dir}/sbin/nginx" ]]; then current_nginx_build_version=$(info_extraction nginx_build_version) if [[ ${nginx_build_version} != ${current_nginx_build_version} ]]; then ip_check if [[ -f "${xray_qr_config_file}" ]]; then domain=$(info_extraction host) if [[ ${tls_mode} == "TLS" ]]; then port=$(info_extraction port) if [[ ${ws_grpc_mode} == "onlyws" ]]; then xport=$(info_extraction ws_port) path=$(info_extraction path) gport=$((RANDOM % 1000 + 30000)) while [[ ${gport} == ${xport} ]]; do gport=$((RANDOM % 1000 + 30000)); done serviceName="$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})" elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then gport=$(info_extraction grpc_port) serviceName=$(info_extraction serviceName) xport=$((RANDOM % 1000 + 20000)) path="$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})" elif [[ ${ws_grpc_mode} == "all" ]]; then xport=$(info_extraction ws_port) path=$(info_extraction path) gport=$(info_extraction grpc_port) serviceName=$(info_extraction serviceName) fi if [[ 0 -eq ${read_config_status} ]]; then [[ ${auto_update} == "YES" ]] && echo "Nginx $(gettext "配置不完整, 退出更新")!" >>${log_file} && return 1 log_echo "${Error} ${RedBG} $(gettext "配置不完整, 退出更新")! ${Font}" return 1 fi elif [[ ${tls_mode} == "Reality" ]] && [[ ${reality_add_nginx} == "on" ]]; then port=$(info_extraction port) serverNames=$(info_extraction serverNames) if [[ 0 -eq ${read_config_status} ]]; then [[ ${auto_update} == "YES" ]] && echo "Nginx $(gettext "配置不完整, 退出更新")!" >>${log_file} && return 1 log_echo "${Error} ${RedBG} $(gettext "配置不完整, 退出更新")! ${Font}" return 1 fi elif [[ ${tls_mode} == "None" ]]; then [[ ${auto_update} == "YES" ]] && echo "$(gettext "当前安装模式不需要") Nginx !" >>${log_file} && return 1 log_echo "${Error} ${RedBG} $(gettext "当前安装模式不需要") Nginx ! ${Font}" return 1 fi else [[ ${auto_update} == "YES" ]] && echo "Nginx $(gettext "配置不存在, 退出更新")!" >>${log_file} && return 1 log_echo "${Error} ${RedBG} $(gettext "配置不存在, 退出更新")! ${Font}" return 1 fi service_stop backup_nginx_dir="${nginx_dir}_backup_${current_nginx_build_version}" cp -r ${nginx_dir} ${backup_nginx_dir} judge "$(gettext "备份旧版") Nginx" timeout "$(gettext "删除旧版") Nginx !" rm -rf ${nginx_dir} if [[ ${auto_update} != "YES" ]]; then echo log_echo "${GreenBG} $(gettext "是否保留原 Nginx 配置文件") [${Red}Y${Font}${GreenBG}/N]? ${Font}" read -r save_originconf_fq else save_originconf_fq=1 fi case $save_originconf_fq in [nN][oO] | [nN]) rm -rf ${nginx_conf_dir}/*.conf log_echo "${OK} ${GreenBG} $(gettext "原配置文件已删除")! ${Font}" ;; *) save_originconf="Yes" log_echo "${OK} ${GreenBG} $(gettext "原配置文件已保留")! ${Font}" ;; esac nginx_install if [[ ${tls_mode} == "TLS" ]] && [[ ${save_originconf} != "Yes" ]]; then nginx_ssl_conf_add nginx_conf_add nginx_servers_conf_add elif [[ ${tls_mode} == "Reality" ]] && [[ ${reality_add_nginx} == "on" ]] && [[ ${save_originconf} != "Yes" ]]; then nginx_reality_conf_add fi service_start sleep 1 if ! systemctl -q is-active nginx; then log_echo "${Error} ${RedBG} Nginx $(gettext "启动失败")! ${Font}" if [[ ${auto_update} != "YES" ]]; then echo log_echo "${GreenBG} $(gettext "是否回滚到之前的版本") [${Red}Y${Font}${GreenBG}/N]? ${Font}" read -r rollback_fq else service_stop rm -rf ${nginx_dir} mv ${backup_nginx_dir} ${nginx_dir} service_start fi case $rollback_fq in [nN][oO] | [nN]) log_echo "${Info} ${YellowBG} $(gettext "未执行回滚操作")! ${Font}" return 1 ;; *) log_echo "${OK} ${GreenBG} $(gettext "正在回滚")... ${Font}" service_stop rm -rf ${nginx_dir} mv ${backup_nginx_dir} ${nginx_dir} service_start sleep 1 if systemctl -q is-active nginx; then log_echo "${OK} ${GreenBG} $(gettext "已成功回滚到之前的") Nginx $(gettext "版本")! ${Font}" jq --arg nginx_build_version "${current_nginx_build_version}" '.nginx_build_version = $nginx_build_version' "${xray_qr_config_file}" > "${xray_qr_config_file}.tmp" mv "${xray_qr_config_file}.tmp" "${xray_qr_config_file}" rm -rf ${backup_nginx_dir} return 1 else log_echo "${Error} ${RedBG} $(gettext "回滚失败")! ${Font}" return 1 fi ;; esac else jq --arg nginx_build_version "${nginx_build_version}" '.nginx_build_version = $nginx_build_version' "${xray_qr_config_file}" > "${xray_qr_config_file}.tmp" mv "${xray_qr_config_file}.tmp" "${xray_qr_config_file}" judge "Nginx $(gettext "更新")" rm -rf ${backup_nginx_dir} judge "$(gettext "删除") Nginx $(gettext "备份")" fi else log_echo "${OK} ${GreenBG} Nginx $(gettext "已为最新版") ${Font}" fi else log_echo "${Error} ${RedBG} Nginx $(gettext "未安装") ${Font}" fi return 0 } auto_update() { if [[ "${ID}" == "centos" ]]; then crontab_file="/var/spool/cron/root" else crontab_file="/var/spool/cron/crontabs/root" fi if [[ ! -f "${auto_update_file}" ]] || [[ $(crontab -l | grep -c "auto_update.sh") -lt 1 ]]; then echo log_echo "${GreenBG} $(gettext "设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)") ${Font}" log_echo "${Warning} ${YellowBG} $(gettext "可能自动更新后有兼容问题, 谨慎启用") ${Font}" log_echo "${GreenBG} $(gettext "是否启用") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r auto_update_fq case $auto_update_fq in [yY][eE][sS] | [yY]) curl -L -o "${idleleo_dir}/auto_update.sh" "https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/auto_update.sh" && chmod +x ${auto_update_file} echo "0 1 15 * * bash ${auto_update_file}" >>${crontab_file} judge "$(gettext "设置自动更新")" ;; *) ;; esac else log_echo "${OK} ${GreenBG} $(gettext "已设置自动更新") ${Font}" log_echo "${GreenBG} $(gettext "是否关闭") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r auto_update_close_fq case $auto_update_close_fq in [yY][eE][sS] | [yY]) sed -i "/auto_update.sh/d" ${crontab_file} rm -rf ${auto_update_file} judge "$(gettext "删除自动更新")" ;; *) ;; esac fi } ssl_install() { pkg_install "socat" judge "$(gettext "安装 SSL 证书生成脚本依赖")" curl https://get.acme.sh | sh -s email=${custom_email} judge "$(gettext "安装 SSL 证书生成脚本")" } domain_check() { if [[ "on" == ${old_config_status} ]] && [[ -n $(info_extraction host) ]] && [[ -n $(info_extraction ip_version) ]]; then echo log_echo "${GreenBG} $(gettext "检测到原域名配置存在, 是否跳过域名设置") [${Red}Y${Font}${GreenBG}/N]? ${Font}" read -r old_host_fq case $old_host_fq in [nN][oO] | [nN]) ;; *) domain=$(info_extraction host) ip_version=$(info_extraction ip_version) if [[ ${ip_version} == "IPv4" ]]; then local_ip=$(curl -4 ip.me 2>/dev/null || curl -4 ip.im) elif [[ ${ip_version} == "IPv6" ]]; then local_ip=$(curl -6 ip.me 2>/dev/null || curl -6 ip.im) else local_ip=${ip_version} fi if [[ -z ${local_ip} ]]; then log_echo "${Error} ${RedBG} $(gettext "无法获取公网IP地址"), $(gettext "安装终止")! ${Font}" return 1 fi log_echo "${OK} ${GreenBG} $(gettext "已跳过域名设置") ${Font}" return 0 ;; esac fi echo log_echo "${GreenBG} $(gettext "确定域名信息") ${Font}" read_optimize "$(gettext "请输入你的域名信息") (e.g. www.hey.run):" "domain" "NULL" echo -e "\n${GreenBG} $(gettext "请选择公网IP(IPv4/IPv6)或手动输入域名") ${Font}" echo -e "${Red}1${Font}: IPv4 ($(gettext "默认"))" echo "2: IPv6" echo "3: $(gettext "域名")" local ip_version_fq read_optimize "$(gettext "请输入"): " "ip_version_fq" 1 1 3 "$(gettext "请输入有效的数字")!" log_echo "${OK} ${GreenBG} $(gettext "正在获取公网IP信息, 请耐心等待") ${Font}" if [[ ${ip_version_fq} == 1 ]]; then local_ip=$(curl -4 ip.me 2>/dev/null || curl -4 ip.im) domain_ip=$(ping -4 "${domain}" -c 1 | sed '1{s/[^(]*(//;s/).*//;q}') ip_version="IPv4" elif [[ ${ip_version_fq} == 2 ]]; then local_ip=$(curl -6 ip.me 2>/dev/null || curl -6 ip.im) domain_ip=$(ping -6 "${domain}" -c 1 | sed '2{s/[^(]*(//;s/).*//;q}' | tail -n +2) ip_version="IPv6" elif [[ ${ip_version_fq} == 3 ]]; then log_echo "${Warning} ${GreenBG} $(gettext "此选项用于服务器商仅提供域名访问服务器") ${Font}" log_echo "${Warning} ${GreenBG} $(gettext "注意服务器商域名添加 CNAME 记录") ${Font}" read_optimize "$(gettext "请输入"): " "local_ip" "NULL" ip_version=${local_ip} else local_ip=$(curl -4 ip.me 2>/dev/null || curl -4 ip.im) domain_ip=$(ping -4 "${domain}" -c 1 | sed '1{s/[^(]*(//;s/).*//;q}') ip_version="IPv4" fi if [[ -z ${local_ip} ]]; then log_echo "${Error} ${RedBG} $(gettext "无法获取公网IP地址"), $(gettext "安装终止")! ${Font}" return 1 fi log_echo "$(gettext "域名DNS解析IP"): ${domain_ip}" log_echo "$(gettext "公网IP/域名"): ${local_ip}" if [[ ${ip_version_fq} != 3 ]] && [[ ${local_ip} == ${domain_ip} ]]; then log_echo "${OK} ${GreenBG} $(gettext "域名DNS解析IP与公网IP匹配") ${Font}" else log_echo "${Warning} ${YellowBG} $(gettext "请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray") ${Font}" log_echo "${Error} ${RedBG} $(gettext "域名DNS解析IP与公网IP不匹配, 请选择"): ${Font}" echo "1: $(gettext "继续安装")" echo "2: $(gettext "重新输入")" log_echo "${Red}3${Font}: $(gettext "终止安装") ($(gettext "默认"))" local install read_optimize "$(gettext "请输入"): " "install" 3 1 3 "$(gettext "请输入有效的数字")!" case $install in 1) log_echo "${OK} ${GreenBG} $(gettext "继续安装") ${Font}" ;; 2) domain_check ;; *) log_echo "${Error} ${RedBG} $(gettext "安装终止") ${Font}" exit 2 ;; esac fi } ip_check() { if [[ "on" == ${old_config_status} || ${auto_update} == "YES" ]] && [[ -n $(info_extraction host) ]] && [[ -n $(info_extraction ip_version) ]]; then if [[ ${auto_update} != "YES" ]]; then echo log_echo "${GreenBG} $(gettext "检测到原IP配置存在, 是否跳过IP设置") [${Red}Y${Font}${GreenBG}/N]? ${Font}" read -r old_host_fq else old_host_fq=1 fi case $old_host_fq in [nN][oO] | [nN]) ;; *) ip_version=$(info_extraction ip_version) if [[ ${ip_version} == "IPv4" ]]; then local_ip=$(curl -4 ip.me 2>/dev/null || curl -4 ip.im) elif [[ ${ip_version} == "IPv6" ]]; then local_ip=$(curl -6 ip.me 2>/dev/null || curl -6 ip.im) else local_ip=${ip_version} fi if [[ -z ${local_ip} ]]; then log_echo "${Error} ${RedBG} $(gettext "无法获取公网IP地址"), $(gettext "安装终止")! ${Font}" return 1 fi echo log_echo "${OK} ${GreenBG} $(gettext "已跳过IP设置") ${Font}" return 0 ;; esac fi echo log_echo "${GreenBG} $(gettext "确定公网IP信息") ${Font}" log_echo "${GreenBG} $(gettext "请选择公网IP为IPv4或IPv6") ${Font}" echo -e "${Red}1${Font}: IPv4 ($(gettext "默认"))" echo "2: IPv6" echo "3: $(gettext "手动输入")" local ip_version_fq read_optimize "$(gettext "请输入"): " "ip_version_fq" 1 1 3 "$(gettext "请输入有效的数字")!" [[ -z ${ip_version_fq} ]] && ip_version=1 log_echo "${OK} ${GreenBG} $(gettext "正在获取公网IP信息, 请耐心等待") ${Font}" if [[ ${ip_version_fq} == 1 ]]; then local_ip=$(curl -4 ip.me 2>/dev/null || curl -4 ip.im) ip_version="IPv4" elif [[ ${ip_version_fq} == 2 ]]; then local_ip=$(curl -6 ip.me 2>/dev/null || curl -6 ip.im) ip_version="IPv6" elif [[ ${ip_version_fq} == 3 ]]; then read_optimize "$(gettext "请输入"): " "local_ip" "NULL" ip_version=${local_ip} else local_ip=$(curl -4 ip.me 2>/dev/null || curl -4 ip.im) ip_version="IPv4" fi if [[ -z ${local_ip} ]]; then log_echo "${Error} ${RedBG} $(gettext "无法获取公网IP地址"), $(gettext "安装终止")! ${Font}" return 1 fi log_echo "$(gettext "公网IP/域名"): ${local_ip}" } port_exist_check() { if [[ 0 -eq $(lsof -i:"$1" | grep -i -c "listen") ]]; then log_echo "${OK} ${GreenBG} $1 $(gettext "端口未被占用") ${Font}" else log_echo "${Error} ${RedBG} $(gettext "检测到") $1 $(gettext "端口被占用"), $(gettext "以下为") $1 $(gettext "端口占用信息") ${Font}" lsof -i:"$1" timeout "$(gettext "尝试终止占用的进程")!" lsof -i:"$1" | awk '{print $2}' | grep -v "PID" | xargs kill -9 log_echo "${OK} ${GreenBG} kill $(gettext "完成") ${Font}" fi } acme() { systemctl restart nginx #暂时解决ca问题 if "$HOME"/.acme.sh/acme.sh --issue -d ${domain} -w ${idleleo_conf_dir} --server letsencrypt --keylength ec-256 --force --test; then #if "$HOME"/.acme.sh/acme.sh --issue -d ${domain} -w ${idleleo_conf_dir} --keylength ec-256 --force --test; then log_echo "${OK} ${GreenBG} SSL $(gettext "证书测试签发成功, 开始正式签发") ${Font}" rm -rf "$HOME/.acme.sh/${domain}_ecc" else log_echo "${Error} ${RedBG} SSL $(gettext "证书测试签发失败") ${Font}" rm -rf "$HOME/.acme.sh/${domain}_ecc" exit 1 fi if "$HOME"/.acme.sh/acme.sh --issue -d ${domain} -w ${idleleo_conf_dir} --server letsencrypt --keylength ec-256 --force; then #if "$HOME"/.acme.sh/acme.sh --issue -d ${domain} -w ${idleleo_conf_dir} --keylength ec-256 --force; then log_echo "${OK} ${GreenBG} SSL $(gettext "证书生成成功") ${Font}" mkdir -p ${ssl_chainpath} if "$HOME"/.acme.sh/acme.sh --installcert -d ${domain} --fullchainpath ${ssl_chainpath}/xray.crt --keypath ${ssl_chainpath}/xray.key --ecc --force; then chmod -f a+rw ${ssl_chainpath}/xray.crt chmod -f a+rw ${ssl_chainpath}/xray.key chown -fR nobody:nogroup ${ssl_chainpath}/* log_echo "${OK} ${GreenBG} SSL $(gettext "证书配置成功") ${Font}" systemctl stop nginx fi else log_echo "${Error} ${RedBG} SSL $(gettext "证书生成失败") ${Font}" rm -rf "$HOME/.acme.sh/${domain}_ecc" exit 1 fi } xray_conf_add() { if [[ $(info_extraction multi_user) != "yes" ]]; then if [[ ${tls_mode} == "TLS" ]]; then curl -L -o "${xray_conf}" "https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/VLESS_tls/config.json" modify_listen_address modify_path modify_inbound_port elif [[ ${tls_mode} == "Reality" ]]; then curl -L -o "${xray_conf}" "https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/VLESS_reality/config.json" modify_target_serverNames modify_privateKey_shortIds xray_reality_add_more elif [[ ${tls_mode} == "None" ]]; then curl -L -o "${xray_conf}" "https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/VLESS_tls/config.json" modify_listen_address modify_path modify_inbound_port elif [[ ${tls_mode} == "XTLS" ]]; then curl -L -o "${xray_conf}" "https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/VLESS_xtls/config.json" modify_listen_address modify_inbound_port fi modify_email_address modify_UUID else echo log_echo "${Warning} ${GreenBG} $(gettext "检测到 Xray 配置过多用户") ${Font}" log_echo "${GreenBG} $(gettext "是否保留原 Xray 配置文件") [${Red}Y${Font}${GreenBG}/N]? ${Font}" read -r save_originxray_fq case $save_originxray_fq in [nN][oO] | [nN]) rm -rf ${xray_conf} jq 'del(.multi_user)' "${xray_qr_config_file}" > "${xray_qr_config_file}.tmp" mv "${xray_qr_config_file}.tmp" "${xray_qr_config_file}" log_echo "${OK} ${GreenBG} $(gettext "原配置文件已删除")! ${Font}" xray_conf_add ;; *) ;; esac fi } xray_reality_add_more() { if [[ ${reality_add_more} == "on" ]]; then modify_path modify_listen_address modify_inbound_port judge "$(gettext "添加简单 ws/gRPC 协议")" else modify_path modify_inbound_port fi if [[ ${reality_add_nginx} == "on" ]] && [[ ${reality_add_balance} == "off" ]]; then modify_reality_listen_address fi } old_config_exist_check() { if [[ -f "${xray_qr_config_file}" ]]; then if [[ ${old_tls_mode} == ${tls_mode} ]]; then echo log_echo "${GreenBG} $(gettext "检测到配置文件, 是否读取配置文件") [${Red}Y${Font}${GreenBG}/N]? ${Font}" read -r old_config_fq case $old_config_fq in [nN][oO] | [nN]) rm -rf ${xray_qr_config_file} log_echo "${OK} ${GreenBG} $(gettext "已删除配置文件") ${Font}" ;; *) log_echo "${OK} ${GreenBG} $(gettext "已保留配置文件") ${Font}" old_config_status="on" old_config_input ;; esac else echo log_echo "${Warning} ${GreenBG} $(gettext "检测到当前安装模式与配置文件的安装模式不一致") ${Font}" log_echo "${GreenBG} $(gettext "是否保留配置文件 (强烈不建议)") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r old_config_fq case $old_config_fq in [yY][eE][sS] | [yY]) log_echo "${Warning} ${GreenBG} $(gettext "请务必确保配置文件正确") ${Font}" log_echo "${OK} ${GreenBG} $(gettext "已保留配置文件") ${Font}" menu ;; *) rm -rf ${xray_qr_config_file} log_echo "${OK} ${GreenBG} $(gettext "已删除配置文件") ${Font}" ;; esac fi fi } old_config_input() { info_extraction_all=$(jq -rc . ${xray_qr_config_file}) custom_email=$(info_extraction email) UUID5_char=$(info_extraction idc) UUID=$(info_extraction id) if [[ ${tls_mode} == "TLS" ]]; then port=$(info_extraction port) if [[ ${ws_grpc_mode} == "onlyws" ]]; then xport=$(info_extraction ws_port) path=$(info_extraction path) gport=$((RANDOM % 1000 + 30000)) while [[ ${gport} == ${xport} ]]; do gport=$((RANDOM % 1000 + 30000)); done serviceName="$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})" elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then gport=$(info_extraction grpc_port) serviceName=$(info_extraction serviceName) xport=$((RANDOM % 1000 + 20000)) while [[ ${gport} == ${xport} ]]; do xport=$((RANDOM % 1000 + 20000)); done path="$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})" elif [[ ${ws_grpc_mode} == "all" ]]; then xport=$(info_extraction ws_port) path=$(info_extraction path) gport=$(info_extraction grpc_port) serviceName=$(info_extraction serviceName) fi elif [[ ${tls_mode} == "Reality" ]]; then port=$(info_extraction port) target=$(info_extraction target) serverNames=$(info_extraction serverNames) privateKey=$(info_extraction privateKey) password=$(info_extraction password) shortIds=$(info_extraction shortIds) if [[ ${reality_add_more} == "on" ]]; then if [[ ${ws_grpc_mode} == "onlyws" ]]; then xport=$(info_extraction ws_port) path=$(info_extraction ws_path) gport=$((RANDOM % 1000 + 30000)) while [[ ${gport} == ${xport} ]]; do gport=$((RANDOM % 1000 + 30000)); done serviceName="$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})" elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then gport=$(info_extraction grpc_port) serviceName=$(info_extraction grpc_serviceName) xport=$((RANDOM % 1000 + 20000)) while [[ ${gport} == ${xport} ]]; do xport=$((RANDOM % 1000 + 20000)); done path="$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})" elif [[ ${ws_grpc_mode} == "all" ]]; then xport=$(info_extraction ws_port) path=$(info_extraction ws_path) gport=$(info_extraction grpc_port) serviceName=$(info_extraction grpc_serviceName) fi else path="$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})" serviceName="$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})" xport=$((RANDOM % 1000 + 20000)) gport=$((RANDOM % 1000 + 30000)) fi elif [[ ${tls_mode} == "None" ]]; then if [[ ${ws_grpc_mode} == "onlyws" ]]; then xport=$(info_extraction ws_port) path=$(info_extraction path) gport=$((RANDOM % 1000 + 30000)) while [[ ${gport} == ${xport} ]]; do gport=$((RANDOM % 1000 + 30000)); done serviceName="$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})" elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then gport=$(info_extraction grpc_port) serviceName=$(info_extraction serviceName) xport=$((RANDOM % 1000 + 20000)) while [[ ${gport} == ${xport} ]]; do xport=$((RANDOM % 1000 + 20000)); done path="$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})" elif [[ ${ws_grpc_mode} == "all" ]]; then xport=$(info_extraction ws_port) path=$(info_extraction path) gport=$(info_extraction grpc_port) serviceName=$(info_extraction serviceName) fi elif [[ ${tls_mode} == "XTLS" ]]; then port=$(info_extraction port) fi if [[ 0 -eq ${read_config_status} ]]; then echo log_echo "${GreenBG} $(gettext "检测到配置文件不完整, 是否保留配置文件") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r old_config_input_fq case $old_config_input_fq in [yY][eE][sS] | [yY]) old_config_status="off" log_echo "${OK} ${GreenBG} $(gettext "已保留配置文件") ${Font}" ;; *) rm -rf ${xray_qr_config_file} old_config_status="off" log_echo "${OK} ${GreenBG} $(gettext "已删除配置文件") ${Font}" ;; esac fi } nginx_ssl_conf_add() { touch ${nginx_ssl_conf} cat >${nginx_ssl_conf} <${nginx_conf} <${nginx_conf} < 最终上游 ~^reality:1\$ reality; default deny; } map \$final_upstream \$is_abnormal { deny 1; default 0; } map "\$sni_upstream:\$is_valid_protocol" \$error_type { ~^reality:0\$ "tls_error"; ~^deny:1\$ "sni_error"; ~^deny:0\$ "tls_sni_error"; default "other_error"; } map \$error_type \$is_tls_error { "tls_error" 1; #"tls_sni_error" 1; default 0; } map \$error_type \$is_sni_error { "sni_error" 1; "tls_sni_error" 1; default 0; } upstream reality { include ${nginx_conf_dir}/*.realityServers; } upstream deny { server 127.0.0.1:9403; } log_format tls_error_log '\$remote_addr [\$time_local] "\$ssl_preread_server_name" ' '\$ssl_preread_protocol \$status'; log_format sni_error_log '\$remote_addr [\$time_local] "\$ssl_preread_server_name" ' '\$ssl_preread_protocol \$status'; server { listen 443 reuseport so_keepalive=on backlog=65535; proxy_pass \$final_upstream; ssl_preread on; proxy_connect_timeout 5s; proxy_timeout 300s; access_log ${nginx_dir}/logs/tls_error.log tls_error_log buffer=8k flush=3s if=\$is_tls_error; access_log ${nginx_dir}/logs/sni_error.log sni_error_log buffer=8k flush=3s if=\$is_sni_error; } server { listen 127.0.0.1:9403 reuseport; #ssl_preread on; ssl_reject_handshake on; return 444; access_log off; error_log /dev/null; } } EOF modify_nginx_port modify_nginx_other judge "Nginx $(gettext "配置修改")" } nginx_reality_servers_add () { touch ${nginx_conf_dir}/127.0.0.1.realityServers cat >${nginx_conf_dir}/127.0.0.1.realityServers <${nginx_conf_dir}/${serverNames}.serverNames <${nginx_upstream_conf} < "$logrotate_config" echo " weekly" >> "$logrotate_config" echo " rotate 3" >> "$logrotate_config" echo " compress" >> "$logrotate_config" echo " missingok" >> "$logrotate_config" echo " notifempty" >> "$logrotate_config" echo " create 640 nobody nogroup" >> "$logrotate_config" echo "}" >> "$logrotate_config" judge "$(gettext "设置自动清理日志")" ;; esac } clean_logs() { echo log_echo "${Green} $(gettext "检测到日志文件大小如下:") ${Font}" log_echo "${Green}$(du -sh /var/log/xray ${nginx_dir}/logs 2>/dev/null)${Font}" timeout "$(gettext "即将清除")!" for i in $(find /var/log/xray/ ${nginx_dir}/logs -name "*.log" 2>/dev/null); do cat /dev/null >"$i" 2>/dev/null; done judge "$(gettext "日志清理")" setup_auto_clean_logs } vless_qr_config_tls_ws() { cat >${xray_qr_config_file} <<-EOF { "shell_mode": "${shell_mode}", "ws_grpc_mode": "${ws_grpc_mode}", "host": "${domain}", "ip_version": "${ip_version}", "port": ${port}, "ws_port": "${artxport}", "grpc_port": "${artgport}", "tls": "TLS", "email": "${custom_email}", "idc": "${UUID5_char}", "id": "${UUID}", "net": "ws/gRPC", "path": "${artpath}", "serviceName": "${artserviceName}", "shell_version": "${shell_version}", "xray_version": "${xray_version}", "nginx_build_version": "${nginx_build_version}" } EOF info_extraction_all=$(jq -rc . ${xray_qr_config_file}) } vless_qr_config_reality() { cat >${xray_qr_config_file} <<-EOF { "shell_mode": "${shell_mode}", "ws_grpc_mode": "${ws_grpc_mode}", "host": "${local_ip}", "ip_version": "${ip_version}", "port": ${port}, "email": "${custom_email}", "idc": "${UUID5_char}", "id": "${UUID}", "net": "raw", "tls": "Reality", "target": "${target}", "serverNames":"${serverNames}", "privateKey":"${privateKey}", "password":"${password}", "shortIds":"${shortIds}", "reality_add_nginx": "${reality_add_nginx}", "reality_add_balance": "${reality_add_balance}", "reality_add_more": "${reality_add_more}", "ws_port": "${artxport}", "grpc_port": "${artgport}", "ws_path": "${artpath}", "grpc_serviceName": "${artserviceName}", "shell_version": "${shell_version}", "xray_version": "${xray_version}" } EOF if [[ ${reality_add_nginx} == "on" ]]; then jq --arg nginx_build_version "${nginx_build_version}" '. + {"nginx_build_version": $nginx_build_version}' "${xray_qr_config_file}" > "${xray_qr_config_file}.tmp" mv "${xray_qr_config_file}.tmp" "${xray_qr_config_file}" fi info_extraction_all=$(jq -rc . ${xray_qr_config_file}) } vless_qr_config_xtls_only() { if [[ "on" == ${old_config_status} ]]; then port=$(info_extraction port) fi cat >${xray_qr_config_file} <<-EOF { "shell_mode": "${shell_mode}", "host": "${local_ip}", "ip_version": "${ip_version}", "port": "${port}", "tls": "XTLS", "email": "${custom_email}", "idc": "${UUID5_char}", "id": "${UUID}", "net": "raw", "security": "none", "flow": "xtls-rprx-vision", "shell_version": "${shell_version}", "xray_version": "${xray_version}" } EOF info_extraction_all=$(jq -rc . ${xray_qr_config_file}) } vless_qr_config_ws_only() { cat >${xray_qr_config_file} <<-EOF { "shell_mode": "${shell_mode}", "ws_grpc_mode": "${ws_grpc_mode}", "host": "${local_ip}", "ip_version": "${ip_version}", "ws_port": "${artxport}", "grpc_port": "${artgport}", "tls": "None", "email": "${custom_email}", "idc": "${UUID5_char}", "id": "${UUID}", "net": "ws/gRPC", "path": "${artpath}", "serviceName": "${artserviceName}", "shell_version": "${shell_version}", "xray_version": "${xray_version}" } EOF info_extraction_all=$(jq -rc . ${xray_qr_config_file}) } vless_urlquote() { [[ $# = 0 ]] && return 1 python3 -c "import urllib.request,sys;print(urllib.request.quote(sys.argv[1]))" "$1" } vless_qr_link_image() { if [[ ${tls_mode} == "TLS" ]]; then if [[ ${ws_grpc_mode} == "onlyws" ]]; then vless_ws_link="vless://$(info_extraction id)@$(vless_urlquote $(info_extraction host)):$(info_extraction port)?path=%2f$(vless_urlquote $(info_extraction path))%3Fed%3D2048&security=tls&encryption=none&host=$(vless_urlquote $(info_extraction host))&type=ws&fp=chrome#$(vless_urlquote $(info_extraction host))+ws%E5%8D%8F%E8%AE%AE" elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then vless_grpc_link="vless://$(info_extraction id)@$(vless_urlquote $(info_extraction host)):$(info_extraction port)?serviceName=$(vless_urlquote $(info_extraction serviceName))&security=tls&encryption=none&host=$(vless_urlquote $(info_extraction host))&type=grpc&fp=chrome#$(vless_urlquote $(info_extraction host))+gRPC%E5%8D%8F%E8%AE%AE" elif [[ ${ws_grpc_mode} == "all" ]]; then vless_ws_link="vless://$(info_extraction id)@$(vless_urlquote $(info_extraction host)):$(info_extraction port)?path=%2f$(vless_urlquote $(info_extraction path))%3Fed%3D2048&security=tls&encryption=none&host=$(vless_urlquote $(info_extraction host))&type=ws&fp=chrome#$(vless_urlquote $(info_extraction host))+ws%E5%8D%8F%E8%AE%AE" vless_grpc_link="vless://$(info_extraction id)@$(vless_urlquote $(info_extraction host)):$(info_extraction port)?serviceName=$(vless_urlquote $(info_extraction serviceName))&security=tls&encryption=none&host=$(vless_urlquote $(info_extraction host))&type=grpc&fp=chrome#$(vless_urlquote $(info_extraction host))+gRPC%E5%8D%8F%E8%AE%AE" fi elif [[ ${tls_mode} == "Reality" ]]; then vless_link="vless://$(info_extraction id)@$(vless_urlquote $(info_extraction host)):$(info_extraction port)?security=reality&flow=xtls-rprx-vision&fp=chrome&pbk=$(info_extraction password)&sni=$(info_extraction serverNames)&target=$(info_extraction target)&sid=$(info_extraction shortIds)#$(vless_urlquote $(info_extraction host))+Reality%E5%8D%8F%E8%AE%AE" if [[ ${reality_add_more} == "on" ]]; then if [[ ${ws_grpc_mode} == "onlyws" ]]; then vless_ws_link="vless://$(info_extraction id)@$(vless_urlquote $(info_extraction host)):$(info_extraction ws_port)?path=%2f$(vless_urlquote $(info_extraction path))%3Fed%3D2048&encryption=none&type=ws&fp=chrome#$(vless_urlquote $(info_extraction host))+%E5%8D%95%E7%8B%ADws%E5%8D%8F%E8%AE%AE" elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then vless_grpc_link="vless://$(info_extraction id)@$(vless_urlquote $(info_extraction host)):$(info_extraction grpc_port)?serviceName=$(vless_urlquote $(info_extraction serviceName))&encryption=none&type=grpc&fp=chrome#$(vless_urlquote $(info_extraction host))+%E5%8D%95%E7%8B%ADgrpc%E5%8D%8F%E8%AE%AE" elif [[ ${ws_grpc_mode} == "all" ]]; then vless_ws_link="vless://$(info_extraction id)@$(vless_urlquote $(info_extraction host)):$(info_extraction ws_port)?path=%2f$(vless_urlquote $(info_extraction path))%3Fed%3D2048&encryption=none&type=ws&fp=chrome#$(vless_urlquote $(info_extraction host))+%E5%8D%95%E7%8B%ADws%E5%8D%8F%E8%AE%AE" vless_grpc_link="vless://$(info_extraction id)@$(vless_urlquote $(info_extraction host)):$(info_extraction grpc_port)?serviceName=$(vless_urlquote $(info_extraction serviceName))&encryption=none&type=grpc&fp=chrome#$(vless_urlquote $(info_extraction host))+%E5%8D%95%E7%8B%ADgrpc%E5%8D%8F%E8%AE%AE" fi fi elif [[ ${tls_mode} == "None" ]]; then if [[ ${ws_grpc_mode} == "onlyws" ]]; then vless_ws_link="vless://$(info_extraction id)@$(vless_urlquote $(info_extraction host)):$(info_extraction ws_port)?path=%2f$(vless_urlquote $(info_extraction path))%3Fed%3D2048&encryption=none&type=ws&fp=chrome#$(vless_urlquote $(info_extraction host))+%E5%8D%95%E7%8B%ADws%E5%8D%8F%E8%AE%AE" elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then vless_grpc_link="vless://$(info_extraction id)@$(vless_urlquote $(info_extraction host)):$(info_extraction grpc_port)?serviceName=$(vless_urlquote $(info_extraction serviceName))&encryption=none&type=grpc&fp=chrome#$(vless_urlquote $(info_extraction host))+%E5%8D%95%E7%8B%ADgrpc%E5%8D%8F%E8%AE%AE" elif [[ ${ws_grpc_mode} == "all" ]]; then vless_ws_link="vless://$(info_extraction id)@$(vless_urlquote $(info_extraction host)):$(info_extraction ws_port)?path=%2f$(vless_urlquote $(info_extraction path))%3Fed%3D2048&encryption=none&type=ws&fp=chrome#$(vless_urlquote $(info_extraction host))+%E5%8D%95%E7%8B%ADws%E5%8D%8F%E8%AE%AE" vless_grpc_link="vless://$(info_extraction id)@$(vless_urlquote $(info_extraction host)):$(info_extraction grpc_port)?serviceName=$(vless_urlquote $(info_extraction serviceName))&encryption=none&type=grpc&fp=chrome#$(vless_urlquote $(info_extraction host))+%E5%8D%95%E7%8B%ADgrpc%E5%8D%8F%E8%AE%AE" fi elif [[ ${tls_mode} == "XTLS" ]]; then vless_link="vless://$(info_extraction id)@$(vless_urlquote $(info_extraction host)):$(info_extraction port)?security=none&encryption=none&headerType=none&type=raw&flow=xtls-rprx-vision#$(vless_urlquote $(info_extraction host))+XTLS%E5%8D%8F%E8%AE%AE" fi # 生成Clash配置 generate_clash_config() { local type=$1 local port=$2 local path=$3 local service_name=$4 local security=$5 local flow=$6 local pbk=$7 local sni=$8 local target=$9 local sid=${10} local tls=${11} local clash_name="VLESS-$(info_extraction host)-${type}" local clash_config="" if [[ ${type} == "ws" ]]; then clash_config=" - name: ${clash_name} type: vless server: $(info_extraction host) port: ${port} uuid: $(info_extraction id) client-fingerprint: chrome tls: ${tls} flow: ${flow} network: ws ws-opts: path: ${path} headers: Host: $(info_extraction host) skip-cert-verify: false" elif [[ ${type} == "grpc" ]]; then clash_config=" - name: ${clash_name} type: vless server: $(info_extraction host) port: ${port} uuid: $(info_extraction id) client-fingerprint: chrome tls: ${tls} flow: ${flow} network: grpc grpc-opts: grpc-service-name: ${service_name} skip-cert-verify: false" elif [[ ${type} == "tcp" ]]; then clash_config=" - name: ${clash_name} type: vless server: $(info_extraction host) port: ${port} uuid: $(info_extraction id) client-fingerprint: chrome tls: ${tls} flow: ${flow} network: tcp skip-cert-verify: false" fi # 添加Reality相关配置 if [[ ${security} == "reality" ]]; then clash_config="${clash_config} servername: ${sni} reality-opts: public-key: ${pbk} short-id: ${sid}" fi echo "${clash_config}" } # 生成Clash配置内容(仅节点部分) clash_config_content="proxies:" if [[ ${tls_mode} == "TLS" ]]; then if [[ ${ws_grpc_mode} == "onlyws" ]]; then clash_config_content="${clash_config_content} $(generate_clash_config "ws" "$(info_extraction port)" "$(info_extraction path)" "" "tls" "" "" "" "" "" "true")" elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then clash_config_content="${clash_config_content} $(generate_clash_config "grpc" "$(info_extraction port)" "" "$(info_extraction serviceName)" "tls" "" "" "" "" "" "true")" elif [[ ${ws_grpc_mode} == "all" ]]; then clash_config_content="${clash_config_content} $(generate_clash_config "ws" "$(info_extraction port)" "$(info_extraction path)" "" "tls" "" "" "" "" "" "true") $(generate_clash_config "grpc" "$(info_extraction port)" "" "$(info_extraction serviceName)" "tls" "" "" "" "" "" "true")" fi elif [[ ${tls_mode} == "Reality" ]]; then # Reality模式下的TCP节点 clash_config_content="${clash_config_content} $(generate_clash_config "tcp" "$(info_extraction port)" "" "" "reality" "xtls-rprx-vision" "$(info_extraction password)" "$(info_extraction serverNames)" "$(info_extraction target)" "$(info_extraction shortIds)" "true")" # 如果启用了额外配置,则生成ws和grpc节点 if [[ ${reality_add_more} == "on" ]]; then if [[ ${ws_grpc_mode} == "onlyws" ]]; then clash_config_content="${clash_config_content} $(generate_clash_config "ws" "$(info_extraction ws_port)" "$(info_extraction path)" "" "none" "" "" "" "" "" "" "false")" elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then clash_config_content="${clash_config_content} $(generate_clash_config "grpc" "$(info_extraction grpc_port)" "" "$(info_extraction serviceName)" "none" "" "" "" "" "" "" "false")" elif [[ ${ws_grpc_mode} == "all" ]]; then clash_config_content="${clash_config_content} $(generate_clash_config "ws" "$(info_extraction ws_port)" "$(info_extraction path)" "" "none" "" "" "" "" "" "" "false") $(generate_clash_config "grpc" "$(info_extraction grpc_port)" "" "$(info_extraction serviceName)" "none" "" "" "" "" "" "" "false")" fi fi elif [[ ${tls_mode} == "None" ]]; then if [[ ${ws_grpc_mode} == "onlyws" ]]; then clash_config_content="${clash_config_content} $(generate_clash_config "ws" "$(info_extraction ws_port)" "$(info_extraction path)" "" "none" "" "" "" "" "" "" "false")" elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then clash_config_content="${clash_config_content} $(generate_clash_config "grpc" "$(info_extraction grpc_port)" "" "$(info_extraction serviceName)" "none" "" "" "" "" "" "" "false")" elif [[ ${ws_grpc_mode} == "all" ]]; then clash_config_content="${clash_config_content} $(generate_clash_config "ws" "$(info_extraction ws_port)" "$(info_extraction path)" "" "none" "" "" "" "" "" "" "false") $(generate_clash_config "grpc" "$(info_extraction grpc_port)" "" "$(info_extraction serviceName)" "none" "" "" "" "" "" "" "false")" fi fi { echo log_echo "${Red} —————————————— Xray $(gettext "链接分享") —————————————— ${Font}" if [[ ${tls_mode} == "Reality" ]]; then log_echo "${Red} URL $(gettext "分享链接"):${Font} ${vless_link}" log_echo "${Red} $(gettext "二维码"): ${Font}" echo -n "${vless_link}" | qrencode -o - -t utf8 echo fi if [[ ${ws_grpc_mode} == "onlyws" ]]; then log_echo "${Red} ws URL $(gettext "分享链接"):${Font} ${vless_ws_link}" log_echo "${Red} $(gettext "二维码"): ${Font}" echo -n "${vless_ws_link}" | qrencode -o - -t utf8 echo elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then log_echo "${Red} gRPC URL $(gettext "分享链接"):${Font} ${vless_grpc_link}" log_echo "${Red} $(gettext "二维码"): ${Font}" echo -n "${vless_grpc_link}" | qrencode -o - -t utf8 echo elif [[ ${ws_grpc_mode} == "all" ]]; then log_echo "${Red} ws URL $(gettext "分享链接"):${Font} ${vless_ws_link}" log_echo "${Red} $(gettext "二维码"): ${Font}" echo -n "${vless_ws_link}" | qrencode -o - -t utf8 echo log_echo "${Red} gRPC URL $(gettext "分享链接"):${Font} ${vless_grpc_link}" log_echo "${Red} $(gettext "二维码"): ${Font}" echo -n "${vless_grpc_link}" | qrencode -o - -t utf8 echo fi # 输出Clash配置 log_echo "${Red} —————————————— Clash $(gettext "配置分享") —————————————— ${Font}" log_echo "${Red} Clash $(gettext "配置分享"): ${Font}" echo "${clash_config_content}" echo # 添加结束线 log_echo "${Red} —————————————————— END —————————————————— ${Font}" echo } >>"${xray_info_file}" # 保存Clash配置到文件 echo "${clash_config_content}" > "${xray_info_file%.*}_clash.yaml" } vless_link_image_choice() { echo log_echo "${GreenBG} $(gettext "生成分享链接"): ${Font}" vless_qr_link_image } info_extraction() { local result result=$(echo "${info_extraction_all}" | jq -r ".$1 // empty" 2>/dev/null) local jq_exit_code=$? echo "$result" if [[ $jq_exit_code -ne 0 ]]; then read_config_status=0 fi } install_iftop() { if ! command -v iftop &>/dev/null; then log_echo "${Info} ${Green} $(gettext "正在安装") iftop... ${Font}" check_system pkg_install "iftop" else log_echo "${OK} ${GreenBG} $(gettext "已安装") iftop ${Font}" fi } monitor_traffic_with_iftop() { if [[ ! -f "${xray_qr_config_file}" ]]; then log_echo "${Warning} ${YellowBG} $(gettext "请先安装") Xray ! ${Font}" exit 1 fi install_iftop local port local interface port=$(info_extraction port) if [[ -z "${port}" ]]; then log_echo "${Warning} ${YellowBG} $(gettext "请先安装") Xray ! ${Font}" exit 1 fi interface=$(ip route show | awk '/default/ {print $5; exit}') if [[ -z "${interface}" ]]; then interface="any" log_echo "${Warning} ${YellowBG} $(gettext "无法获取网卡, 将监控所有网卡") ${Font}" else log_echo "${OK} ${GreenBG} $(gettext "监控网卡"): ${interface} ${Font}" fi log_echo "${OK} ${GreenBG} $(gettext "监控端口"): ${port} ${Font}" echo log_echo "${Info} ${Green} $(gettext "按 q 键退出 iftop") ${Font}" timeout "$(gettext "启动") iftop" sleep 3 if [[ "${interface}" == "any" ]]; then iftop -i any -n -f "port ${port}" else iftop -i "${interface}" -n -f "port ${port}" fi } basic_information() { { echo case ${shell_mode} in Nginx+ws+TLS) log_echo "${OK} ${GreenBG} Xray+Nginx+ws+TLS $(gettext "安装成功") ${Font}" ;; Nginx+gRPC+TLS) log_echo "${OK} ${GreenBG} Xray+Nginx+grpc+TLS $(gettext "安装成功") ${Font}" ;; Nginx+ws+gRPC+TLS) log_echo "${OK} ${GreenBG} Xray+Nginx+ws+gRPC+TLS $(gettext "安装成功") ${Font}" ;; Reality) log_echo "${OK} ${GreenBG} Xray+Reality $(gettext "安装成功") ${Font}" ;; Reality+ws) log_echo "${OK} ${GreenBG} Xray+Reality+ws $(gettext "安装成功") ${Font}" ;; Reality+gRPC) log_echo "${OK} ${GreenBG} Xray+Reality+gRPC $(gettext "安装成功") ${Font}" ;; Reality+ws+gRPC) log_echo "${OK} ${GreenBG} Xray+Reality+ws+gRPC $(gettext "安装成功") ${Font}" ;; ws\ ONLY) log_echo "${OK} ${GreenBG} ws ONLY $(gettext "安装成功") ${Font}" ;; gRPC\ ONLY) log_echo "${OK} ${GreenBG} gRPC ONLY $(gettext "安装成功") ${Font}" ;; ws+gRPC\ ONLY) log_echo "${OK} ${GreenBG} ws+gRPC ONLY $(gettext "安装成功") ${Font}" ;; XTLS\ ONLY) log_echo "${OK} ${GreenBG} Xray+XTLS $(gettext "安装成功") ${Font}" ;; esac echo log_echo "${Warning} ${YellowBG} VLESS $(gettext "目前分享链接规范为实验阶段, 请自行判断是否适用") ${Font}" echo log_echo "${Red} —————————————— Xray $(gettext "配置信息") —————————————— ${Font}" log_echo "${Red} $(gettext "主机") (host):${Font} $(info_extraction host) " if [[ ${tls_mode} == "None" ]]; then if [[ ${ws_grpc_mode} == "onlyws" ]]; then log_echo "${Red} ws $(gettext "端口") (port):${Font} $(info_extraction ws_port) " elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then log_echo "${Red} gRPC $(gettext "端口") (port):${Font} $(info_extraction grpc_port) " elif [[ ${ws_grpc_mode} == "all" ]]; then log_echo "${Red} ws $(gettext "端口") (port):${Font} $(info_extraction ws_port) " log_echo "${Red} gRPC $(gettext "端口") (port):${Font} $(info_extraction grpc_port) " fi else log_echo "${Red} $(gettext "端口") (port):${Font} $(info_extraction port) " fi if [[ ${tls_mode} == "TLS" ]]; then if [[ ${ws_grpc_mode} == "onlyws" ]]; then log_echo "${Red} Xray ws $(gettext "端口") (inbound_port):${Font} $(info_extraction ws_port) " elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then log_echo "${Red} Xray gRPC $(gettext "端口") (inbound_port):${Font} $(info_extraction grpc_port) " elif [[ ${ws_grpc_mode} == "all" ]]; then log_echo "${Red} Xray ws $(gettext "端口") (inbound_port):${Font} $(info_extraction ws_port) " log_echo "${Red} Xray gRPC $(gettext "端口") (inbound_port):${Font} $(info_extraction grpc_port) " fi fi log_echo "${Red} UUIDv5 $(gettext "映射字符串"):${Font} $(info_extraction idc)" log_echo "${Red} $(gettext "用户id") (UUID):${Font} $(info_extraction id)" log_echo "${Red} $(gettext "加密") (encryption):${Font} None " log_echo "${Red} $(gettext "传输协议") (network):${Font} $(info_extraction net) " log_echo "${Red} $(gettext "底层传输安全") (tls):${Font} $(info_extraction tls) " if [[ ${tls_mode} != "Reality" && ${tls_mode} != "XTLS" ]]; then if [[ ${ws_grpc_mode} == "onlyws" ]]; then log_echo "${Red} $(gettext "路径") (path $(gettext "不要落下")/):${Font} /$(info_extraction path) " elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then log_echo "${Red} serviceName ($(gettext "不需要加")/):${Font} $(info_extraction serviceName) " elif [[ ${ws_grpc_mode} == "all" ]]; then log_echo "${Red} $(gettext "路径") (path $(gettext "不要落下")/):${Font} /$(info_extraction path) " log_echo "${Red} serviceName ($(gettext "不需要加")/):${Font} $(info_extraction serviceName) " fi else log_echo "${Red} $(gettext "流控") (flow):${Font} xtls-rprx-vision " if [[ ${tls_mode} == "Reality" ]]; then log_echo "${Red} target:${Font} $(info_extraction target) " log_echo "${Red} serverNames:${Font} $(info_extraction serverNames) " log_echo "${Red} privateKey:${Font} $(info_extraction privateKey) " log_echo "${Red} Password:${Font} $(info_extraction password) " log_echo "${Red} shortIds:${Font} $(info_extraction shortIds) " if [[ "$reality_add_more" == "on" ]]; then if [[ ${ws_grpc_mode} == "onlyws" ]]; then log_echo "${Red} ws $(gettext "端口") (port):${Font} $(info_extraction ws_port) " log_echo "${Red} ws $(gettext "路径") ($(gettext "不要落下")/):${Font} /$(info_extraction ws_path) " elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then log_echo "${Red} gRPC $(gettext "端口") (port):${Font} $(info_extraction grpc_port) " log_echo "${Red} gRPC serviceName ($(gettext "不需要加")/):${Font} $(info_extraction grpc_serviceName) " elif [[ ${ws_grpc_mode} == "all" ]]; then log_echo "${Red} ws $(gettext "端口") (port):${Font} $(info_extraction ws_port) " log_echo "${Red} ws $(gettext "路径") ($(gettext "不要落下")/):${Font} /$(info_extraction ws_path) " log_echo "${Red} gRPC $(gettext "端口") (port):${Font} $(info_extraction grpc_port) " log_echo "${Red} gRPC serviceName ($(gettext "不需要加")/):${Font} $(info_extraction grpc_serviceName) " fi fi fi fi } >"${xray_info_file}" } show_information() { cat "${xray_info_file}" } ssl_judge_and_install() { cd $HOME echo log_echo "${GreenBG} $(gettext "即将申请证书, 支持使用自定义证书") ${Font}" log_echo "${Green} $(gettext "如需使用自定义证书, 请按如下步骤:") ${Font}" log_echo " $(gettext "1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)")" log_echo " $(gettext "2. 将重命名后的证书文件放入") ${ssl_chainpath} $(gettext "目录后再运行脚本")" log_echo " $(gettext "3. 重新运行脚本")" log_echo "${GreenBG} $(gettext "是否继续") [${Red}Y${Font}${GreenBG}/N]? ${Font}" read -r ssl_continue case $ssl_continue in [nN][oO] | [nN]) exit 0 ;; *) if [[ -f "${ssl_chainpath}/xray.key" && -f "${ssl_chainpath}/xray.crt" ]] && [[ -f "$HOME/.acme.sh/${domain}_ecc/${domain}.key" && -f "$HOME/.acme.sh/${domain}_ecc/${domain}.cer" ]]; then log_echo "${GreenBG} $(gettext "所有证书文件均已存在, 是否保留") [${Red}Y${Font}${GreenBG}/N]? ${Font}" read -r ssl_delete_1 case $ssl_delete_1 in [nN][oO] | [nN]) delete_tls_key_and_crt rm -rf ${ssl_chainpath}/* log_echo "${OK} ${GreenBG} $(gettext "已删除") ${Font}" ssl_install acme ;; *) chown -fR nobody:nogroup ${ssl_chainpath}/* judge "$(gettext "证书应用")" ;; esac elif [[ -f "${ssl_chainpath}/xray.key" || -f "${ssl_chainpath}/xray.crt" ]] && [[ ! -f "$HOME/.acme.sh/${domain}_ecc/${domain}.key" && ! -f "$HOME/.acme.sh/${domain}_ecc/${domain}.cer" ]]; then log_echo "${GreenBG} $(gettext "证书文件已存在, 是否保留") [${Red}Y${Font}${GreenBG}/N]? ${Font}" read -r ssl_delete_2 case $ssl_delete_2 in [nN][oO] | [nN]) rm -rf ${ssl_chainpath}/* log_echo "${OK} ${GreenBG} $(gettext "已删除") ${Font}" ssl_install acme ;; *) chown -fR nobody:nogroup ${ssl_chainpath}/* judge "$(gettext "证书应用")" ssl_self="on" ;; esac elif [[ -f "$HOME/.acme.sh/${domain}_ecc/${domain}.key" && -f "$HOME/.acme.sh/${domain}_ecc/${domain}.cer" ]] && [[ ! -f "${ssl_chainpath}/xray.key" || ! -f "${ssl_chainpath}/xray.crt" ]]; then log_echo "${GreenBG} $(gettext "证书签发残留文件已存在, 是否保留") [${Red}Y${Font}${GreenBG}/N]? ${Font}" read -r ssl_delete_3 case $ssl_delete_3 in [nN][oO] | [nN]) delete_tls_key_and_crt log_echo "${OK} ${GreenBG} $(gettext "已删除") ${Font}" ssl_install acme ;; *) "$HOME"/.acme.sh/acme.sh --installcert -d "${domain}" --fullchainpath ${ssl_chainpath}/xray.crt --keypath ${ssl_chainpath}/xray.key --ecc chown -fR nobody:nogroup ${ssl_chainpath}/* judge "$(gettext "证书应用")" ;; esac else ssl_install acme fi ;; esac } nginx_systemd() { cat >${nginx_systemd_file} < "${xray_qr_config_file}.tmp" mv "${xray_qr_config_file}.tmp" "${xray_qr_config_file}" service_restart reset_vless_qr_config else log_echo "${Warning} ${YellowBG} $(gettext "请先安装") Xray ! ${Font}" fi } reset_port() { if [[ -f "${xray_qr_config_file}" ]] && [[ -f "${xray_conf}" ]]; then if [[ ${tls_mode} == "TLS" ]]; then port_set modify_nginx_port jq --argjson port "${port}" '.port = $port' "${xray_qr_config_file}" > "${xray_qr_config_file}.tmp" mv "${xray_qr_config_file}.tmp" "${xray_qr_config_file}" log_echo "${Green} $(gettext "端口"): ${port} ${Font}" elif [[ ${tls_mode} == "Reality" ]]; then port_set xport=$((RANDOM % 1000 + 20000)) gport=$((RANDOM % 1000 + 30000)) if [[ ${ws_grpc_mode} == "onlyws" ]]; then read_optimize "$(gettext "请输入") ws inbound_port:" "xport" "NULL" 0 65535 "$(gettext "请输入 0-65535 之间的值")!" port_exist_check "${xport}" gport=$((RANDOM % 1000 + 30000)) log_echo "${Green} ws inbound_port: ${xport} ${Font}" elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then read_optimize "$(gettext "请输入") gRPC inbound_port:" "gport" "NULL" 0 65535 "$(gettext "请输入 0-65535 之间的值")!" port_exist_check "${gport}" xport=$((RANDOM % 1000 + 20000)) log_echo "${Green} gRPC inbound_port: ${gport} ${Font}" elif [[ ${ws_grpc_mode} == "all" ]]; then read_optimize "$(gettext "请输入") ws inbound_port:" "xport" "NULL" 0 65535 "$(gettext "请输入 0-65535 之间的值")!" read_optimize "$(gettext "请输入") gRPC inbound_port:" "gport" "NULL" 0 65535 "$(gettext "请输入 0-65535 之间的值")!" port_exist_check "${xport}" port_exist_check "${gport}" log_echo "${Green} ws inbound_port: ${xport} ${Font}" log_echo "${Green} gRPC inbound_port: ${gport} ${Font}" fi jq --argjson port "$port" \ --argjson ws_port "$xport" \ --argjson grpc_port "$gport" \ '.port = $port | .ws_port = $ws_port | .grpc_port = $grpc_port' "${xray_qr_config_file}" > "${xray_qr_config_file}.tmp" mv "${xray_qr_config_file}.tmp" "${xray_qr_config_file}" modify_inbound_port [[ ${reality_add_nginx} == "on" ]] && modify_nginx_port elif [[ ${tls_mode} == "None" ]]; then if [[ ${ws_grpc_mode} == "onlyws" ]]; then read_optimize "$(gettext "请输入") ws inbound_port:" "xport" "NULL" 0 65535 "$(gettext "请输入 0-65535 之间的值")!" port_exist_check "${xport}" gport=$((RANDOM % 1000 + 30000)) log_echo "${Green} ws inbound_port: ${xport} ${Font}" elif [[ ${ws_grpc_mode} == "onlygRPC" ]]; then read_optimize "$(gettext "请输入") gRPC inbound_port:" "gport" "NULL" 0 65535 "$(gettext "请输入 0-65535 之间的值")!" port_exist_check "${gport}" xport=$((RANDOM % 1000 + 20000)) log_echo "${Green} gRPC inbound_port: ${gport} ${Font}" elif [[ ${ws_grpc_mode} == "all" ]]; then read_optimize "$(gettext "请输入") ws inbound_port:" "xport" "NULL" 0 65535 "$(gettext "请输入 0-65535 之间的值")!" read_optimize "$(gettext "请输入") gRPC inbound_port:" "gport" "NULL" 0 65535 "$(gettext "请输入 0-65535 之间的值")!" port_exist_check "${xport}" port_exist_check "${gport}" log_echo "${Green} ws inbound_port: ${xport} ${Font}" log_echo "${Green} gRPC inbound_port: ${gport} ${Font}" fi jq --argjson ws_port "$xport" \ --argjson grpc_port "$gport" \ '.ws_port = $ws_port | .grpc_port = $grpc_port' "${xray_qr_config_file}" > "${xray_qr_config_file}.tmp" mv "${xray_qr_config_file}.tmp" "${xray_qr_config_file}" modify_inbound_port fi firewall_set service_restart reset_vless_qr_config else log_echo "${Warning} ${YellowBG} $(gettext "请先安装") Xray ! ${Font}" fi } reset_target() { if [[ -f "${xray_qr_config_file}" ]] && [[ -f "${xray_conf}" ]] && [[ ${tls_mode} == "Reality" ]]; then target_reset=1 serverNames=$(info_extraction serverNames) nginx_reality_serverNames_del target_set serverNames_set modify_target_serverNames if [[ ${reality_add_nginx} == "on" ]]; then nginx_reality_serverNames_add fi jq --arg target "${target}" \ --arg serverNames "${serverNames}" \ '.target = $target | .serverNames = $serverNames' "${xray_qr_config_file}" > "${xray_qr_config_file}.tmp" mv "${xray_qr_config_file}.tmp" "${xray_qr_config_file}" service_restart reset_vless_qr_config elif [[ ${tls_mode} != "Reality" ]]; then log_echo "${Warning} ${YellowBG} $(gettext "此模式不支持修改") target ! ${Font}" else log_echo "${Warning} ${YellowBG} $(gettext "请先安装") Xray ! ${Font}" fi } show_user() { if [[ -f "${xray_qr_config_file}" ]] && [[ -f "${xray_conf}" ]] && [[ ${tls_mode} != "None" ]]; then echo log_echo "${GreenBG} $(gettext "即将显示用户, 一次仅能显示一个") ${Font}" if [[ ${tls_mode} == "TLS" ]]; then log_echo "${GreenBG} $(gettext "请选择显示用户使用的协议") ws/gRPC ${Font}" echo -e "${Red}1${Font}: ws ($(gettext "默认"))" echo "2: gRPC" local choose_user_prot read_optimize "$(gettext "请输入"): " "choose_user_prot" 1 1 2 "$(gettext "请输入有效的数字")!" choose_user_prot=$((choose_user_prot - 1)) elif [[ ${tls_mode} == "Reality" ]]; then choose_user_prot=0 fi echo log_echo "${GreenBG} $(gettext "请选择要显示的用户编号"): ${Font}" jq -r -c .inbounds[${choose_user_prot}].settings.clients[].email ${xray_conf} | awk '{print NR""": "$0}' local show_user_index read_optimize "$(gettext "请输入"): " "show_user_index" "NULL" if [[ $(jq -r '.inbounds['${choose_user_prot}'].settings.clients|length' ${xray_conf}) -lt ${show_user_index} ]] || [[ ${show_user_index} == 0 ]]; then log_echo "${Error} ${RedBG} $(gettext "选择错误")! ${Font}" show_user elif [[ ${show_user_index} == 1 ]]; then log_echo "${Error} ${RedBG} $(gettext "请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户") ${Font}" echo elif [[ ${show_user_index} -gt 1 ]]; then show_user_index=$((show_user_index - 1)) user_email=$(jq -r -c '.inbounds['${choose_user_prot}'].settings.clients['${show_user_index}'].email' ${xray_conf}) user_id=$(jq -r -c '.inbounds['${choose_user_prot}'].settings.clients['${show_user_index}'].id' ${xray_conf}) elif [[ ! -z $(echo ${show_user_index} | sed 's/[0-9]//g') ]] || [[ ${show_user_index} == '' ]]; then log_echo "${Error} ${RedBG} $(gettext "选择错误")! ${Font}" show_user else log_echo "${Warning} ${YellowBG} $(gettext "请先检测 Xray 是否正确安装")! ${Font}" fi if [[ ! -z ${user_email} ]] && [[ ! -z ${user_id} ]]; then log_echo "${Green} $(gettext "用户名"): ${user_email} ${Font}" log_echo "${Green} UUID: ${user_id} ${Font}" if [[ ${tls_mode} == "TLS" ]]; then if [[ ${choose_user_prot} == 0 ]]; then user_vless_link="vless://${user_id}@$(vless_urlquote $(info_extraction host)):$(info_extraction port)?path=%2f$(vless_urlquote $(info_extraction path))%3Fed%3D2048&security=tls&encryption=none&host=$(vless_urlquote $(info_extraction host))&type=ws#$(vless_urlquote $(info_extraction host))+ws%E5%8D%8F%E8%AE%AE" elif [[ ${choose_user_prot} == 1 ]]; then user_vless_link="vless://${user_id}@$(vless_urlquote $(info_extraction host)):$(info_extraction port)?serviceName=$(vless_urlquote $(info_extraction serviceName))&security=tls&encryption=none&host=$(vless_urlquote $(info_extraction host))&type=grpc#$(vless_urlquote $(info_extraction host))+gRPC%E5%8D%8F%E8%AE%AE" fi elif [[ ${tls_mode} == "Reality" ]]; then user_vless_link="vless://${user_id}@$(vless_urlquote $(info_extraction host)):$(info_extraction port)?security=tls&encryption=none&headerType=none&type=raw&flow=xtls-rprx-vision#$(vless_urlquote $(info_extraction host))+reality%E5%8D%8F%E8%AE%AE" fi log_echo "${Red} URL $(gettext "分享链接"):${Font} ${user_vless_link}" echo -n "${user_vless_link}" | qrencode -o - -t utf8 fi echo log_echo "${GreenBG} $(gettext "是否继续显示用户") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r show_user_continue case $show_user_continue in [yY][eE][sS] | [yY]) show_user ;; *) ;; esac elif [[ ${tls_mode} == "None" ]]; then log_echo "${Warning} ${YellowBG} $(gettext "此模式不支持删除用户")! ${Font}" else log_echo "${Warning} ${YellowBG} $(gettext "请先安装") Xray ! ${Font}" fi } add_user() { local choose_user_prot reality_user_more if [[ -f "${xray_qr_config_file}" ]] && [[ -f "${xray_conf}" ]] && [[ ${tls_mode} != "None" ]]; then echo log_echo "${GreenBG} $(gettext "即将添加用户, 一次仅能添加一个") ${Font}" if [[ ${tls_mode} == "TLS" ]]; then log_echo "${GreenBG} $(gettext "请选择添加用户使用的协议") ws/gRPC ${Font}" echo -e "${Red}1${Font}: ws ($(gettext "默认"))" echo "2: gRPC" local choose_user_prot read_optimize "$(gettext "请输入"): " "choose_user_prot" 1 1 2 "$(gettext "请输入有效的数字")!" choose_user_prot=$((choose_user_prot - 1)) reality_user_more="{}" elif [[ ${tls_mode} == "Reality" ]]; then choose_user_prot=0 reality_user_more='{"flow":"xtls-rprx-vision"}' fi email_set UUID_set jq --argjson choose_user_prot "${choose_user_prot}" \ --arg UUID "${UUID}" \ --argjson reality_user_more "${reality_user_more}" \ --arg custom_email "${custom_email}" \ '.inbounds[$choose_user_prot].settings.clients += [ {"id": $UUID} + ($reality_user_more // {}) + {"level": 0, "email": $custom_email} ]' "${xray_conf}" > "${xray_conf}.tmp" judge "$(gettext "添加用户")" mv "${xray_conf}.tmp" "${xray_conf}" jq ". += {\"multi_user\": \"yes\"}" ${xray_qr_config_file} > "${xray_qr_config_file}.tmp" mv "${xray_qr_config_file}.tmp" "${xray_qr_config_file}" echo log_echo "${GreenBG} $(gettext "是否继续添加用户") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r add_user_continue case $add_user_continue in [yY][eE][sS] | [yY]) add_user ;; *) ;; esac elif [[ ${tls_mode} == "None" ]]; then log_echo "${Warning} ${YellowBG} $(gettext "此模式不支持添加用户")! ${Font}" else log_echo "${Warning} ${YellowBG} $(gettext "请先安装") Xray ! ${Font}" fi } remove_user() { if [[ -f "${xray_qr_config_file}" ]] && [[ -f "${xray_conf}" ]] && [[ ${tls_mode} != "None" ]]; then echo log_echo "${GreenBG} $(gettext "即将删除用户, 一次仅能删除一个") ${Font}" if [[ ${tls_mode} == "TLS" ]]; then log_echo "${GreenBG} $(gettext "请选择删除用户使用的协议") ws/gRPC ${Font}" echo -e "${Red}1${Font}: ws ($(gettext "默认"))" echo "2: gRPC" local choose_user_prot read_optimize "$(gettext "请输入"): " "choose_user_prot" 1 1 2 "$(gettext "请输入有效的数字")!" choose_user_prot=$((choose_user_prot - 1)) elif [[ ${tls_mode} == "Reality" ]]; then choose_user_prot=0 fi echo log_echo "${GreenBG} $(gettext "请选择要删除的用户编号") ${Font}" jq -r -c .inbounds[${choose_user_prot}].settings.clients[].email ${xray_conf} | awk '{print NR""": "$0}' local del_user_index read_optimize "$(gettext "请输入"): " "del_user_index" "NULL" if [[ $(jq -r '.inbounds['${choose_user_prot}'].settings.clients|length' ${xray_conf}) -lt ${del_user_index} ]] || [[ ${del_user_index} == 0 ]]; then log_echo "${Error} ${RedBG} $(gettext "选择错误")! ${Font}" remove_user elif [[ ${del_user_index} == 1 ]]; then echo log_echo "${Error} ${RedBG} $(gettext "主用户无法删除")! ${Font}" echo elif [[ ${del_user_index} -gt 1 ]]; then del_user_index=$((del_user_index - 1)) jq --argjson choose_user_prot "${choose_user_prot}" --argjson del_user_index "${del_user_index}" \ 'del(.inbounds[$choose_user_prot].settings.clients[$del_user_index])' ${xray_conf} > "${xray_conf}.tmp" judge "$(gettext "删除用户")" mv "${xray_conf}.tmp" "${xray_conf}" echo log_echo "${GreenBG} $(gettext "是否继续删除用户") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r remove_user_continue case $remove_user_continue in [yY][eE][sS] | [yY]) remove_user ;; *) ;; esac elif [[ ! -z $(echo ${del_user_index} | sed 's/[0-9]//g') ]] || [[ ${del_user_index} == '' ]]; then log_echo "${Error} ${RedBG} $(gettext "选择错误")! ${Font}" remove_user else log_echo "${Warning} ${YellowBG} $(gettext "请先检测 Xray 是否正确安装")! ${Font}" fi elif [[ ${tls_mode} == "None" ]]; then log_echo "${Warning} ${YellowBG} $(gettext "此模式不支持删除用户")! ${Font}" else log_echo "${Warning} ${YellowBG} $(gettext "请先安装") Xray ! ${Font}" fi } show_access_log() { [[ -f "${xray_access_log}" ]] && tail -f ${xray_access_log} || log_echo "${Error} ${RedBG} log $(gettext "文件不存在")! ${Font}" } show_error_log() { [[ -f "${xray_error_log}" ]] && tail -f ${xray_error_log} || log_echo "${Error} ${RedBG} log $(gettext "文件不存在")! ${Font}" } xray_status_add() { if [[ -f "${xray_conf}" ]]; then if [[ $(jq -r .stats ${xray_conf}) != "null" ]]; then echo log_echo "${GreenBG} $(gettext "已配置 Xray 流量统计") ${Font}" log_echo "${GreenBG} $(gettext "是否需要关闭此功能") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r xray_status_add_fq case $xray_status_add_fq in [yY][eE][sS] | [yY]) service_stop jq "del(.api)|del(.stats)|del(.policy)" ${xray_conf} > "${xray_conf}.tmp" judge "$(gettext "关闭 Xray 流量统计")" mv "${xray_conf}.tmp" "${xray_conf}" service_start [[ -f "${xray_status_conf}" ]] && rm -rf ${xray_status_conf} ;; *) ;; esac else echo log_echo "${GreenBG} Xray $(gettext "流量统计需要使用") api ${Font}" log_echo "${GreenBG} $(gettext "可能会影响 Xray 性能") ${Font}" log_echo "${GreenBG} $(gettext "是否继续") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r xray_status_add_fq case $xray_status_add_fq in [yY][eE][sS] | [yY]) service_stop curl -L -o "${xray_status_conf}" "https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/status_config.json" local status_config status_config=$(jq -c . "${xray_status_conf}") jq --argjson status_config "${status_config}" \ '. += $status_config' "${xray_conf}" > "${xray_conf}.tmp" judge "$(gettext "设置 Xray 流量统计")" mv "${xray_conf}.tmp" "${xray_conf}" service_start ;; *) ;; esac fi else log_echo "${Warning} ${YellowBG} $(gettext "请先安装") Xray ! ${Font}" fi } bbr_boost_sh() { read -t 0.1 -n 10000 -d '' _ /dev/null || true if [[ -f "${idleleo_dir}/tcp.sh" ]]; then cd ${idleleo_dir} && chmod +x ./tcp.sh && ./tcp.sh else curl -L -o "${idleleo_dir}/tcp.sh" "https://raw.githubusercontent.com/ylx2016/Linux-NetSpeed/master/tcp.sh" && chmod +x "${idleleo_dir}/tcp.sh" && "${idleleo_dir}/tcp.sh" fi read -t 0.1 -n 10000 -d '' _ /dev/null || true } uninstall_xray() { systemctl disable xray bash -c "$(curl -L https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)" @ remove --purge [[ -d "${xray_conf_dir}" ]] && rm -rf ${xray_conf_dir} if [[ -f "${xray_qr_config_file}" ]]; then jq -r 'del(.xray_version)' ${xray_qr_config_file} > "${xray_qr_config_file}.tmp" mv "${xray_qr_config_file}.tmp" "${xray_qr_config_file}" fi log_echo "${OK} ${GreenBG} $(gettext "已卸载") Xray ${Font}" } uninstall_nginx() { log_echo "${GreenBG} $(gettext "是否卸载") Nginx [${Red}Y${Font}${GreenBG}/N]? ${Font}" read -r uninstall_nginx case $uninstall_nginx in [nN][oO] | [nN]) log_echo "${OK} ${GreenBG} $(gettext "已取消卸载") Nginx ${Font}" return ;; *) systemctl disable nginx rm -rf ${nginx_dir} rm -rf ${nginx_conf_dir}/* [[ -f "${nginx_systemd_file}" ]] && rm -rf ${nginx_systemd_file} if [[ -f "${xray_qr_config_file}" ]]; then jq 'del(.nginx_build_version)' ${xray_qr_config_file} > "${xray_qr_config_file}.tmp" mv "${xray_qr_config_file}.tmp" "${xray_qr_config_file}" fi log_echo "${OK} ${GreenBG} $(gettext "已卸载") Nginx ${Font}" ;; esac } uninstall_all() { stop_service_all [[ -f "${xray_bin_dir}/xray" ]] && uninstall_xray echo [[ -d "${nginx_dir}" ]] && uninstall_nginx echo log_echo "${GreenBG} $(gettext "是否删除所有脚本文件") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r remove_all_idleleo_file_fq case $remove_all_idleleo_file_fq in [yY][eE][sS] | [yY]) rm -rf ${idleleo_commend_file} rm -rf ${idleleo_dir} systemctl daemon-reload log_echo "${OK} ${GreenBG} $(gettext "已删除所有文件") ${Font}" log_echo "${GreenBG} $(gettext "ヾ( ̄▽ ̄) 拜拜~") ${Font}" exit 0 ;; *) systemctl daemon-reload log_echo "${OK} ${GreenBG} $(gettext "已保留脚本文件 (包含 SSL 证书等)") ${Font}" ;; esac if [[ -f "${xray_qr_config_file}" ]]; then log_echo "${GreenBG} $(gettext "是否保留配置文件") [Y/${Red}N${Font}${GreenBG}]? ${Font}" read -r remove_config_fq case $remove_config_fq in [yY][eE][sS] | [yY]) log_echo "${OK} ${GreenBG} $(gettext "已保留配置文件") ${Font}" ;; *) rm -rf ${xray_qr_config_file} log_echo "${OK} ${GreenBG} $(gettext "已删除配置文件") ${Font}" ;; esac fi } delete_tls_key_and_crt() { [[ -f "$HOME/.acme.sh/acme.sh" ]] && /root/.acme.sh/acme.sh uninstall >/dev/null 2>&1 [[ -d "$HOME/.acme.sh" ]] && rm -rf "$HOME/.acme.sh" log_echo "${OK} ${GreenBG} $(gettext "已清空证书遗留文件") ${Font}" } timeout() { timeout=0 timeout_str="" while [[ ${timeout} -le 30 ]]; do let timeout++ timeout_str+="#" done let timeout=timeout+5 while [[ ${timeout} -gt 0 ]]; do let timeout-- if [[ ${timeout} -gt 25 ]]; then let timeout_color=32 let timeout_bg=42 timeout_index="3" elif [[ ${timeout} -gt 15 ]]; then let timeout_color=33 let timeout_bg=43 timeout_index="2" elif [[ ${timeout} -gt 5 ]]; then let timeout_color=31 let timeout_bg=41 timeout_index="1" else timeout_index="0" fi printf "${Warning} ${GreenBG} %d%s%s ${Font} \033[%d;%dm%-s\033[0m \033[%dm%d\033[0m \r" \ "$timeout_index" \ " $(gettext "秒后") " \ "$1" \ "$timeout_color" \ "$timeout_bg" \ "$timeout_str" \ "$timeout_color" \ "$timeout_index" sleep 0.1 timeout_str=${timeout_str%?} [[ ${timeout} -eq 0 ]] && printf "\n" done } judge_mode() { local ws_grpc_mode_add if [[ -f "${xray_qr_config_file}" ]]; then ws_grpc_mode=$(info_extraction ws_grpc_mode) tls_mode=$(info_extraction tls) case ${ws_grpc_mode} in onlyws) ws_grpc_mode_add="ws";; onlygRPC) ws_grpc_mode_add="gRPC";; all) ws_grpc_mode_add="ws+gRPC";; *);; esac case ${tls_mode} in TLS) shell_mode="Nginx+${ws_grpc_mode_add}+TLS" ;; Reality) reality_add_more=$(info_extraction reality_add_more) reality_add_nginx=$(info_extraction reality_add_nginx) reality_add_balance=$(info_extraction reality_add_balance) if [[ ${reality_add_more} == "on" && ${reality_add_nginx} == "off" ]]; then shell_mode="Reality+${ws_grpc_mode_add}" elif [[ ${reality_add_nginx} == "on" && ${reality_add_more} == "on" ]]; then shell_mode="Nginx+Reality+${ws_grpc_mode_add}" elif [[ ${reality_add_nginx} == "on" && ${reality_add_more} == "off" ]]; then shell_mode="Nginx+Reality" else shell_mode="Reality" fi if [[ ${reality_add_balance} == "on" ]]; then shell_mode=${shell_mode}"+Balance" fi ;; None) shell_mode="${ws_grpc_mode_add} ONLY" ;; *) ;; esac old_tls_mode=${tls_mode} fi } install_xray_ws_tls() { is_root check_and_create_user_group check_system dependency_install basic_optimization create_directory old_config_exist_check domain_check ws_grpc_choose port_set ws_inbound_port_set grpc_inbound_port_set firewall_set ws_path_set grpc_path_set email_set UUID_set ws_grpc_qr vless_qr_config_tls_ws stop_service_all xray_install port_exist_check 80 port_exist_check "${port}" nginx_exist_check nginx_systemd nginx_ssl_conf_add ssl_judge_and_install nginx_conf_add nginx_servers_conf_add xray_conf_add tls_type basic_information enable_process_systemd acme_cron_update auto_update service_restart setup_auto_clean_logs vless_link_image_choice show_information } install_xray_reality() { is_root check_and_create_user_group check_system dependency_install basic_optimization create_directory old_config_exist_check ip_check xray_install port_set email_set UUID_set target_set serverNames_set keys_set shortIds_set xray_reality_add_more_choose ws_grpc_qr firewall_set stop_service_all port_exist_check "${port}" reality_balance_add_fq reality_nginx_add_fq xray_conf_add vless_qr_config_reality tls_type basic_information enable_process_systemd auto_update service_restart setup_auto_clean_logs vless_link_image_choice show_information } install_xray_xtls_only() { is_root check_and_create_user_group check_system dependency_install basic_optimization create_directory old_config_exist_check ip_check shell_mode="XTLS ONLY" tls_mode="XTLS" port_set firewall_set email_set UUID_set vless_qr_config_xtls_only stop_service_all xray_install port_exist_check "${port}" xray_conf_add basic_information enable_process_systemd auto_update service_restart setup_auto_clean_logs vless_link_image_choice show_information } install_xray_ws_only() { is_root check_and_create_user_group check_system dependency_install basic_optimization create_directory old_config_exist_check ip_check ws_grpc_choose ws_inbound_port_set grpc_inbound_port_set firewall_set ws_path_set grpc_path_set email_set UUID_set ws_grpc_qr vless_qr_config_ws_only stop_service_all xray_install port_exist_check "${xport}" port_exist_check "${gport}" xray_conf_add basic_information enable_process_systemd auto_update service_restart setup_auto_clean_logs vless_link_image_choice show_information } update_sh() { ol_version=${shell_online_version} echo "${ol_version}" >${shell_version_tmp} [[ -z ${ol_version} ]] && log_echo "${Error} ${RedBG} $(gettext "检测最新版本失败")! ${Font}" && return 1 echo "${shell_version}" >>${shell_version_tmp} newest_version=$(sort -rV ${shell_version_tmp} | head -1) oldest_version=$(sort -V ${shell_version_tmp} | head -1) version_difference=$(echo "(${newest_version:0:3}-${oldest_version:0:3})>0" | bc) if [[ ${shell_version} != ${newest_version} ]]; then if [[ ${auto_update} != "YES" ]]; then echo log_echo "${GreenBG} $(gettext "新版本")(${newest_version}) $(gettext "更新内容"): ${Font}" log_echo "${Green} $(check_version shell_upgrade_details) ${Font}" if [[ ${version_difference} == 1 ]]; then echo log_echo "${Warning} ${YellowBG} $(gettext "存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新") [Y/${Red}N${Font}${YellowBG}]? ${Font}" else echo log_echo "${GreenBG} $(gettext "存在新版本, 是否更新") [Y/${Red}N${Font}${GreenBG}]? ${Font}" fi read -r update_confirm else [[ -z ${ol_version} ]] && echo "$(gettext "检测 脚本 最新版本失败")!" >>${log_file} && return 1 [[ ${version_difference} == 1 ]] && echo "$(gettext "脚本 版本差别过大, 跳过更新")!" >>${log_file} && return 1 update_confirm="YES" fi case $update_confirm in [yY][eE][sS] | [yY]) [[ -L "${idleleo_commend_file}" ]] && rm -f ${idleleo_commend_file} curl -L -o "${idleleo_dir}/install.sh" "https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/install.sh" && chmod +x "${idleleo_dir}/install.sh" if [[ $? -ne 0 ]]; then [[ ${auto_update} == "YES" ]] && echo "$(gettext "脚本更新失败")!" >>${log_file} [[ ${auto_update} != "YES" ]] && log_echo "${Error} ${RedBG} $(gettext "脚本更新失败")! ${Font}" return 1 fi ln -s ${idleleo} ${idleleo_commend_file} [[ -f "${xray_qr_config_file}" ]] && jq --arg shell_version "${shell_version}" '.shell_version = $shell_version' "${xray_qr_config_file}" > "${xray_qr_config_file}.tmp" && mv "${xray_qr_config_file}.tmp" "${xray_qr_config_file}" clear log_echo "${OK} ${GreenBG} $(gettext "更新完成") ${Font}" [[ ${version_difference} == 1 ]] && log_echo "${Warning} ${YellowBG} $(gettext "脚本版本变化较大, 若服务无法正常运行请卸载后重装")! ${Font}" return 0 ;; *) return 0 ;; esac else clear log_echo "${OK} ${GreenBG} $(gettext "当前版本为最新版本") ${Font}" fi return 0 } check_file_integrity() { if [[ ! -L "${idleleo_commend_file}" ]] && [[ ! -f "${idleleo}" ]]; then check_system pkg_install "bc,jq" [[ ! -d "${idleleo_dir}" ]] && mkdir -p ${idleleo_dir} [[ ! -d "${idleleo_dir}/tmp" ]] && mkdir -p ${idleleo_dir}/tmp curl -L -o "${idleleo_dir}/install.sh" "https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/install.sh" && chmod +x "${idleleo_dir}/install.sh" judge "$(gettext "下载最新脚本")" ln -s ${idleleo} ${idleleo_commend_file} clear source "$idleleo" fi } read_version() { shell_online_version="$(check_version shell_online_version)" xray_online_version="$(check_version xray_online_version)" nginx_build_version="$(check_version nginx_build_online_version)" } maintain() { log_echo "${Error} ${RedBG} $(gettext "该选项暂时无法使用")! ${Font}" log_echo "${Error} ${RedBG} $(gettext "$1") ${Font}" exit 0 } list() { case $1 in '-1' | '--install-tls') shell_mode="Nginx+ws+TLS" tls_mode="TLS" install_xray_ws_tls ;; '-2' | '--install-reality') shell_mode="Reality" tls_mode="Reality" install_xray_reality ;; '-3' | '--install-none') echo log_echo "${Warning} ${YellowBG} $(gettext "此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装") [Y/${Red}N${Font}${YellowBG}]? ${Font}" read -r wsonly_fq case $wsonly_fq in [yY][eE][sS] | [yY]) shell_mode="ws ONLY" tls_mode="None" install_xray_ws_only ;; *) ;; esac ;; '-4' | '--install-xtls') echo log_echo "${Warning} ${YellowBG} $(gettext "此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装") [Y/${Red}N${Font}${YellowBG}]? ${Font}" read -r xtlsonly_fq case $xtlsonly_fq in [yY][eE][sS] | [yY]) shell_mode="XTLS ONLY" tls_mode="XTLS" install_xray_xtls_only ;; *) ;; esac ;; '-5' | '--add-upstream') nginx_upstream_server_set ;; '-6' | '--add-servernames') nginx_servernames_server_set ;; '-au' | '--auto-update') auto_update ;; '-c' | '--clean-logs') clean_logs ;; '-cs' | '--cert-status') check_cert_status ;; '-cu' | '--cert-update') cert_update_manuel ;; '-cau' | '--cert-auto-update') acme_cron_update ;; '-f' | '--set-fail2ban') set_fail2ban ;; '-h' | '--help') show_help ;; '-l' | '--language') set_language ;; '-n' | '--nginx-update') [[ $2 == "auto_update" ]] && auto_update="YES" && log_file="${log_dir}/auto_update.log" nginx_update ;; '-p' | '--port-reset') reset_port ;; '-pt' | '--port-traffic') clear monitor_traffic_with_iftop ;; '--purge' | '--uninstall') uninstall_all ;; '-s' | '-show') clear basic_information vless_qr_link_image show_information ;; '-t' | '--target-reset') reset_target ;; '-tcp' | '--tcp') bbr_boost_sh ;; '-tls' | '--tls') tls_type ;; '-u' | '--update') [[ $2 == "auto_update" ]] && auto_update="YES" && log_file="${log_dir}/auto_update.log" update_sh ;; '-uu' | '--uuid-reset') reset_UUID ;; '-xa' | '--xray-access') clear show_access_log ;; '-xe' | '--xray-error') clear show_error_log ;; '-x' | '--xray-update') [[ $2 == "auto_update" ]] && auto_update="YES" && log_file="${log_dir}/auto_update.log" xray_update ;; *) menu ;; esac } show_help() { echo "usage: idleleo [OPTION]" echo echo "OPTION:" echo " -1, --install-tls $(gettext "安装") Xray (Nginx+ws/gRPC+TLS)" echo " -2, --install-reality $(gettext "安装") Xray (Nginx+Reality+ws/gRPC)" echo " -3, --install-none $(gettext "安装") Xray (ws/gRPC ONLY)" echo " -4, --install-xtls $(gettext "安装") Xray (XTLS ONLY)" echo " -5, --add-upstream $(gettext "变更") Nginx $(gettext "负载均衡配置")" echo " -6, --add-servernames $(gettext "变更") Nginx serverNames $(gettext "配置")" echo " -au, --auto-update $(gettext "设置自动更新")" echo " -c, --clean-logs $(gettext "清除日志文件")" echo " -cs, --cert-status $(gettext "查看证书状态")" echo " -cu, --cert-update $(gettext "更新证书有效期")" echo " -cau, --cert-auto-update $(gettext "设置证书自动更新")" echo " -f, --set-fail2ban $(gettext "设置 Fail2ban 防暴力破解")" echo " -h, --help $(gettext "显示帮助")" echo " -l, --language $(gettext "修改语言")" echo " -n, --nginx-update $(gettext "更新") Nginx" echo " -p, --port-reset $(gettext "变更") port" echo " -pt, --port-traffic $(gettext "查看") port $(gettext "实时流量")" echo " --purge, --uninstall $(gettext "脚本卸载")" echo " -s, --show $(gettext "显示安装信息")" echo " -t, --target-reset $(gettext "变更") target" echo " -tcp, --tcp $(gettext "配置") TCP $(gettext "加速")" echo " -tls, --tls $(gettext "修改") TLS $(gettext "配置")" echo " -u, --update $(gettext "更新脚本")" echo " -uu, --uuid-reset $(gettext "变更") UUIDv5/$(gettext "映射字符串")" echo " -xa, --xray-access $(gettext "显示") Xray $(gettext "访问信息")" echo " -xe, --xray-error $(gettext "显示") Xray $(gettext "错误信息")" echo " -x, --xray-update $(gettext "更新") Xray" exit 0 } idleleo_commend() { if [[ -L "${idleleo_commend_file}" ]] || [[ -f "${idleleo}" ]]; then [[ ! -L "${idleleo_commend_file}" ]] && chmod +x ${idleleo} && ln -s ${idleleo} ${idleleo_commend_file} old_version=$(grep "shell_version=" ${idleleo} | head -1 | awk -F '=|"' '{print $3}') echo "${old_version}" >${shell_version_tmp} echo "${shell_version}" >>${shell_version_tmp} oldest_version=$(sort -V ${shell_version_tmp} | head -1) version_difference=$(echo "(${shell_version:0:3}-${oldest_version:0:3})>0" | bc) if [[ -z ${old_version} ]]; then curl -L -o "${idleleo_dir}/install.sh" "https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/install.sh" && chmod +x "${idleleo_dir}/install.sh" judge "$(gettext "下载最新脚本")" clear source "$idleleo" elif [[ ${shell_version} != ${oldest_version} ]]; then echo log_echo "${GreenBG} $(gettext "新版本")(${shell_version}) $(gettext "更新内容"): ${Font}" log_echo "${Green} $(check_version shell_upgrade_details) ${Font}" if [[ ${version_difference} == 1 ]]; then echo log_echo "${Warning} ${YellowBG} $(gettext "脚本版本变化较大, 可能存在不兼容情况, 是否继续使用") [Y/${Red}N${Font}${YellowBG}]? ${Font}" read -r update_sh_fq case $update_sh_fq in [yY][eE][sS] | [yY]) rm -rf ${idleleo} curl -L -o "${idleleo_dir}/install.sh" "https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/install.sh" && chmod +x "${idleleo_dir}/install.sh" judge "$(gettext "下载最新脚本")" clear log_echo "${Warning} ${YellowBG} $(gettext "脚本版本变化较大, 若服务无法正常运行请卸载后重装")! ${Font}" echo ;; *) source "$idleleo" ;; esac else rm -rf ${idleleo} curl -L -o "${idleleo_dir}/install.sh" "https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/install.sh" && chmod +x "${idleleo_dir}/install.sh" echo judge "$(gettext "下载最新脚本")" clear echo fi source "$idleleo" else ol_version=${shell_online_version} echo "${ol_version}" >${shell_version_tmp} [[ -z ${ol_version} ]] && shell_need_update="${Red}[$(gettext "检测失败")]!${Font}" echo "${shell_version}" >>${shell_version_tmp} newest_version=$(sort -rV ${shell_version_tmp} | head -1) if [[ ${shell_version} != ${newest_version} ]]; then shell_need_update="${Red}[$(gettext "有新版")!]${Font}" shell_emoji="${Red}>_<${Font}" else shell_need_update="${Green}[$(gettext "最新版")]${Font}" shell_emoji="${Green}^O^${Font}" fi if [[ -f "${xray_qr_config_file}" ]]; then if [[ -z "$(info_extraction nginx_build_version)" ]] || [[ ! -f "${nginx_dir}/sbin/nginx" ]]; then nginx_need_update="${Green}[$(gettext "未安装")]${Font}" elif [[ ${nginx_build_version} != $(info_extraction nginx_build_version) ]]; then nginx_need_update="${Green}[$(gettext "有新版")!]${Font}" else nginx_need_update="${Green}[$(gettext "最新版")]${Font}" fi if [[ -f "${xray_qr_config_file}" ]] && [[ -f "${xray_conf}" ]] && [[ -f "${xray_bin_dir}/xray" ]]; then ##xray_online_version=$(check_version xray_online_pre_version) if [[ -z "$(info_extraction xray_version)" ]]; then xray_need_update="${Green}[$(gettext "已安装")] ($(gettext "版本未知"))${Font}" elif [[ ${xray_online_version} != $(info_extraction xray_version) ]]; then xray_need_update="${Green}[$(gettext "有新版")!]${Font}" ### xray_need_update="${Red}[$(gettext "请务必更新")]!${Font}" else xray_need_update="${Green}[$(gettext "最新版")]${Font}" fi else xray_need_update="${Red}[$(gettext "未安装")]${Font}" fi else nginx_need_update="${Green}[$(gettext "未安装")]${Font}" xray_need_update="${Red}[$(gettext "未安装")]${Font}" fi fi fi } check_program() { if [[ -n $(pgrep nginx) ]]; then nginx_status="${Green}$(gettext "运行中")..${Font}" elif [[ ${tls_mode} == "None" ]] || [[ ${reality_add_nginx} == "off" ]]; then nginx_status="${Green}$(gettext "无需测试")${Font}" else nginx_status="${Red}$(gettext "未运行")${Font}" fi if [[ -n $(pgrep xray) ]]; then xray_status="${Green}$(gettext "运行中")..${Font}" else xray_status="${Red}$(gettext "未运行")${Font}" fi } curl_local_connect() { curl -Is -o /dev/null -w %{http_code} "https://$1/$2" } check_xray_local_connect() { if [[ -f "${xray_qr_config_file}" ]]; then xray_local_connect_status="${Red}$(gettext "无法连通")${Font}" if [[ ${tls_mode} == "TLS" ]]; then [[ ${ws_grpc_mode} == "onlyws" ]] && [[ $(curl_local_connect $(info_extraction host) $(info_extraction path)) == "400" ]] && xray_local_connect_status="${Green}$(gettext "本地正常")${Font}" [[ ${ws_grpc_mode} == "onlygRPC" ]] && [[ $(curl_local_connect $(info_extraction host) $(info_extraction serviceName)) == "502" ]] && xray_local_connect_status="${Green}$(gettext "本地正常")${Font}" [[ ${ws_grpc_mode} == "all" ]] && [[ $(curl_local_connect $(info_extraction host) $(info_extraction serviceName)) == "502" && $(curl_local_connect $(info_extraction host) $(info_extraction path)) == "400" ]] && xray_local_connect_status="${Green}$(gettext "本地正常")${Font}" elif [[ ${tls_mode} == "Reality" ]]; then xray_local_connect_status="${Green}$(gettext "无需测试")${Font}" elif [[ ${tls_mode} == "None" ]]; then xray_local_connect_status="${Green}$(gettext "无需测试")${Font}" fi else xray_local_connect_status="${Red}$(gettext "未安装")${Font}" fi } check_online_version_connect() { maintain_file_status=$(curl -s -o /dev/null -w "%{http_code}" "https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/maintain") if [[ ${maintain_file_status} == "200" ]]; then log_echo "${Error} ${RedBG} $(gettext "脚本维护中.. 请稍后再试")! ${Font}" sleep 0.5 exit 0 fi xray_online_version_status=$(curl -s -o /dev/null -w "%{http_code}" "https://cdn.jsdelivr.net/gh/hello-yunshu/Xray_bash_onekey_api@main/xray_shell_versions.json") if [[ ${xray_online_version_status} != "200" ]]; then log_echo "${Error} ${RedBG} $(gettext "无法检测所需依赖的在线版本, 请稍后再试")! ${Font}" sleep 0.5 exit 0 fi } set_language() { echo log_echo "${GreenBG} 选择语言 / Select Language / انتخاب زبان / Выберите язык ${Font}" echo -e "${Green}1.${Font} 中文 (默认)" echo -e "${Green}2.${Font} English" echo -e "${Green}3.${Font} Français" echo -e "${Green}4.${Font} فارسی" echo -e "${Green}5.${Font} Русский" echo -e "${Green}6.${Font} 한국어" local lang_choice read_optimize "$(gettext "请输入数字"): " "lang_choice" "NULL" 1 6 "$(gettext "请输入 1 到 6 之间的有效数字")" case $lang_choice in 1) unset LANG unset LC_MESSAGES rm -f "${idleleo_dir}/language.conf" rm -rf "${idleleo_dir}/languages" ;; 2) export LANG=en_US.UTF-8 export LC_MESSAGES=en_US.UTF-8 ;; 3) export LANG=fr_FR.UTF-8 export LC_MESSAGES=fr_FR.UTF-8 ;; 4) export LANG=fa_IR.UTF-8 export LC_MESSAGES=fa_IR.UTF-8 ;; 5) export LANG=ru_RU.UTF-8 export LC_MESSAGES=ru_RU.UTF-8 ;; 6) export LANG=ko_KR.UTF-8 export LC_MESSAGES=ko_KR.UTF-8 ;; *) log_echo "${Error} ${RedBG} $(gettext "无效的选择") ${Font}" return 1 ;; esac if [ "$lang_choice" -ne 1 ]; then check_system echo "LANG=$LANG" > "${idleleo_dir}/language.conf" echo "LC_MESSAGES=$LC_MESSAGES" >> "${idleleo_dir}/language.conf" case $ID in debian|ubuntu) if ! dpkg -s locales-all >/dev/null 2>&1; then pkg_install "locales-all" fi if command -v locale-gen >/dev/null 2>&1; then locale-gen "$LANG" 2>/dev/null || true # 忽略可能的错误 fi ;; centos) local ins_lang_code="${LANG%%_*}" if ! rpm -q "glibc-langpack-$ins_lang_code" >/dev/null 2>&1; then pkg_install "glibc-langpack-$ins_lang_code" fi # 尝试生成 locale (非必需,但可能有帮助) if command -v localedef >/dev/null 2>&1 && [ -f "/usr/share/i18n/locales/${LANG%.*}" ]; then localedef -c -i "${LANG%.*}" -f UTF-8 "$LANG" 2>/dev/null || true # 忽略可能的错误 fi ;; esac fi source "$idleleo" } function backup_directories() { local timestamp=$(date +"%Y%m%d%H%M%S") local backup_name="" read_optimize "$(gettext "请输入备份名称") ($(gettext "不需要后缀")): " "backup_name" "" local backup_filename="xray_bash_${backup_name}_${timestamp}.tar.gz" local backup_path="/etc/idleleo/${backup_filename}" local tar_output tar_output='' tar_output=$(tar --exclude='/etc/idleleo/xray_bash_*.tar.gz' -czf "${backup_path}" /etc/idleleo /usr/local/nginx 2>&1) if [[ $? -ne 0 ]]; then log_echo "${Green} tar $(gettext "报错信息"): ${Font}" echo "${tar_output}" log_echo "${Warning} ${YellowBG} $(gettext "备份完整性可能受到影响, 请检查上述错误信息") ${Font}" fi if [[ ! -f "${backup_path}" ]]; then log_echo "${Error} ${RedBG} $(gettext "备份失败") ${Font}" else log_echo "${OK} ${GreenBG} $(gettext "备份成功"): ${backup_path} ${Font}" fi } function restore_directories() { log_echo "${Warning} ${YellowBG} $(gettext "请确保备份文件在目录"): /etc/idleleo ${Font}" local backup_files=($(ls /etc/idleleo/xray_bash_*.tar.gz 2>/dev/null)) if [[ ${#backup_files[@]} -eq 0 ]]; then log_echo "${Error} ${RedBG} $(gettext "没有找到备份文件") ${Font}" return 1 fi if [[ ${#backup_files[@]} -gt 1 ]]; then log_echo "${Warning} ${YellowBG} $(gettext "发现多个备份文件"), $(gettext "将使用最新的文件进行恢复") ${Font}" fi local latest_backup_file=${backup_files[-1]} log_echo "${Green} $(gettext "找到最新备份文件"): ${latest_backup_file} ${Font}" timeout "$(gettext "恢复备份")!" tar -xzf "${latest_backup_file}" -C / &> /dev/null if [[ $? -eq 0 ]]; then log_echo "${OK} ${GreenBG} $(gettext "恢复成功") ${Font}" log_echo "${Info} ${Green} $(gettext "记得安装") xray ${Font}" if [[ -d "/usr/local/nginx" ]]; then log_echo "${Info} ${Green} $(gettext "记得安装") nginx ${Font}" fi else log_echo "${Error} ${RedBG} $(gettext "恢复失败") ${Font}" fi } menu() { echo log_echo "Xray $(gettext "安装管理脚本") ${Red}[${shell_version}]${Font} ${shell_emoji}" log_echo "--- $(gettext "作者"): hello-yunshu ---" log_echo "--- $(gettext "修改"): hey.run ---" log_echo "--- https://github.com/hello-yunshu ---" echo log_echo "$(gettext "当前模式"): ${shell_mode}" log_echo "$(gettext "当前语言"): ${LANG%.*}" echo echo -e "$(gettext "可以使用")${RedW} idleleo ${Font}$(gettext "命令管理脚本")${Font}\n" log_echo "—————————————— ${GreenW}$(gettext "版本检测")${Font} ——————————————" log_echo "$(gettext "脚本"): ${shell_need_update}" log_echo "Xray: ${xray_need_update}" log_echo "Nginx: ${nginx_need_update}" log_echo "—————————————— ${GreenW}$(gettext "运行状态")${Font} ——————————————" log_echo "Xray: ${xray_status}" log_echo "Nginx: ${nginx_status}" log_echo "$(gettext "连通性"): ${xray_local_connect_status}" echo -e "—————————————— ${GreenW}$(gettext "更新向导")${Font} ——————————————" echo -e "${Green}0.${Font} $(gettext "更新") $(gettext "脚本")" echo -e "${Green}1.${Font} $(gettext "更新") Xray" echo -e "${Green}2.${Font} $(gettext "更新") Nginx" echo -e "—————————————— ${GreenW}语言 / Language${Font} ———————" echo -e "${Green}99.${Font} 中文 (默认)" echo -e " English" echo -e " Français" echo -e " فارسی " echo -e " Русский" echo -e " 한국어" echo -e "—————————————— ${GreenW}$(gettext "安装向导")${Font} ——————————————" echo -e "${Green}3.${Font} $(gettext "安装") Xray (Reality+ws/gRPC+Nginx)" echo -e "${Green}4.${Font} $(gettext "安装") Xray (Nginx+ws/gRPC+TLS)" echo -e "${Green}5.${Font} $(gettext "安装") Xray (ws/gRPC ONLY)" echo -e "${Green}6.${Font} $(gettext "安装") Xray (XTLS ONLY)" echo -e "—————————————— ${GreenW}$(gettext "配置变更")${Font} ——————————————" echo -e "${Green}7.${Font} $(gettext "变更") UUIDv5/$(gettext "映射字符串")" echo -e "${Green}8.${Font} $(gettext "变更") port" echo -e "${Green}9.${Font} $(gettext "变更") target" echo -e "${Green}10.${Font} $(gettext "变更") TLS $(gettext "版本")" echo -e "${Green}11.${Font} $(gettext "变更") Nginx $(gettext "负载均衡配置")" echo -e "${Green}12.${Font} $(gettext "变更") Nginx serverNames $(gettext "配置")" echo -e "—————————————— ${GreenW}$(gettext "用户管理")${Font} ——————————————" echo -e "${Green}13.${Font} $(gettext "查看") Xray $(gettext "用户")" echo -e "${Green}14.${Font} $(gettext "添加") Xray $(gettext "用户")" echo -e "${Green}15.${Font} $(gettext "删除") Xray $(gettext "用户")" echo -e "—————————————— ${GreenW}$(gettext "查看信息")${Font} ——————————————" echo -e "${Green}16.${Font} $(gettext "查看") Xray $(gettext "实时访问日志")" echo -e "${Green}17.${Font} $(gettext "查看") Xray $(gettext "实时错误日志")" echo -e "${Green}18.${Font} $(gettext "查看") Xray $(gettext "配置信息")" echo -e "${Green}19.${Font} $(gettext "查看") port $(gettext "实时流量")" echo -e "—————————————— ${GreenW}$(gettext "服务相关")${Font} ——————————————" echo -e "${Green}20.${Font} $(gettext "重启") $(gettext "所有服务")" echo -e "${Green}21.${Font} $(gettext "启动") $(gettext "所有服务")" echo -e "${Green}22.${Font} $(gettext "停止") $(gettext "所有服务")" echo -e "${Green}23.${Font} $(gettext "查看") $(gettext "所有服务")" echo -e "—————————————— ${GreenW}$(gettext "证书相关")${Font} ——————————————" echo -e "${Green}24.${Font} $(gettext "查看") $(gettext "证书状态")" echo -e "${Green}25.${Font} $(gettext "更新") $(gettext "证书有效期")" echo -e "${Green}26.${Font} $(gettext "设置") $(gettext "证书自动更新")" echo -e "—————————————— ${GreenW}$(gettext "其他选项")${Font} ——————————————" echo -e "${Green}27.${Font} $(gettext "配置") $(gettext "自动更新")" echo -e "${Green}28.${Font} $(gettext "设置") TCP $(gettext "加速")" echo -e "${Green}29.${Font} $(gettext "设置") Fail2ban $(gettext "防暴力破解")" echo -e "${Green}30.${Font} $(gettext "设置") Xray $(gettext "流量统计")" echo -e "${Green}31.${Font} $(gettext "清除") $(gettext "日志文件")" echo -e "${Green}32.${Font} $(gettext "测试") $(gettext "服务器网速")" echo -e "—————————————— ${GreenW}$(gettext "备份恢复")${Font} ——————————————" echo -e "${Green}33.${Font} $(gettext "备份") $(gettext "全部文件")" echo -e "${Green}34.${Font} $(gettext "恢复") $(gettext "全部文件")" echo -e "—————————————— ${GreenW}$(gettext "卸载向导")${Font} ——————————————" echo -e "${Green}35.${Font} $(gettext "卸载") $(gettext "脚本")" echo -e "${Green}36.${Font} $(gettext "清空") $(gettext "证书文件")" echo -e "${Green}37.${Font} $(gettext "退出") \n" local menu_num read_optimize "$(gettext "请输入选项"): " "menu_num" "NULL" 0 99 "$(gettext "请输入有效的数字")!" case $menu_num in 0) update_sh source "$idleleo" ;; 1) xray_update timeout "$(gettext "清空屏幕")!" clear source "$idleleo" ;; 2) echo log_echo "${Red}[$(gettext "不建议")]${Font} $(gettext "频繁更新 Nginx, 请确认 Nginx 有更新的必要")!" timeout "$(gettext "开始更新")!" nginx_update timeout "$(gettext "清空屏幕")!" clear source "$idleleo" ;; 3) shell_mode="Reality" tls_mode="Reality" install_xray_reality source "$idleleo" ;; 4) shell_mode="Nginx+ws+TLS" tls_mode="TLS" install_xray_ws_tls source "$idleleo" ;; 5) echo log_echo "${Warning} ${YellowBG} $(gettext "此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装") [Y/${Red}N${Font}${YellowBG}]? ${Font}" read -r wsonly_fq case $wsonly_fq in [yY][eE][sS] | [yY]) shell_mode="ws ONLY" tls_mode="None" install_xray_ws_only ;; *) ;; esac source "$idleleo" ;; 6) echo log_echo "${Warning} ${YellowBG} $(gettext "此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装") [Y/${Red}N${Font}${YellowBG}]? ${Font}" read -r xtlsonly_fq case $xtlsonly_fq in [yY][eE][sS] | [yY]) shell_mode="XTLS ONLY" tls_mode="XTLS" install_xray_xtls_only ;; *) ;; esac source "$idleleo" ;; 7) reset_UUID judge "$(gettext "变更") UUIDv5/$(gettext "映射字符串")" menu ;; 8) reset_port judge "$(gettext "变更") port" menu ;; 9) reset_target judge "$(gettext "变更") target" menu ;; 10) tls_type judge "$(gettext "变更") TLS $(gettext "版本")" menu ;; 11) nginx_upstream_server_set timeout "$(gettext "清空屏幕")!" clear menu ;; 12) nginx_servernames_server_set timeout "$(gettext "清空屏幕")!" clear menu ;; 13) show_user timeout "$(gettext "回到菜单")!" menu ;; 14) service_stop add_user service_start timeout "$(gettext "回到菜单")!" menu ;; 15) service_stop remove_user service_start timeout "$(gettext "回到菜单")!" menu ;; 16) clear show_access_log ;; 17) clear show_error_log ;; 18) clear basic_information vless_qr_link_image show_information menu ;; 19) clear monitor_traffic_with_iftop menu ;; 20) service_restart timeout "$(gettext "清空屏幕")!" clear menu ;; 21) service_start timeout "$(gettext "清空屏幕")!" clear source "$idleleo" ;; 22) service_stop timeout "$(gettext "清空屏幕")!" clear source "$idleleo" ;; 23) if [[ ${tls_mode} == "TLS" ]] || [[ ${reality_add_nginx} == "on" ]]; then systemctl status nginx fi systemctl status xray menu ;; 24) check_cert_status timeout "$(gettext "回到菜单")!" menu ;; 25) cert_update_manuel timeout "$(gettext "回到菜单")!" menu ;; 26) acme_cron_update timeout "$(gettext "回到菜单")!" clear menu ;; 27) auto_update timeout "$(gettext "清空屏幕")!" clear menu ;; 28) clear bbr_boost_sh echo menu ;; 29) set_fail2ban menu ;; 30) xray_status_add timeout "$(gettext "回到菜单")!" menu ;; 31) clean_logs menu ;; 32) clear read -t 0.1 -n 10000 -d '' _ /dev/null || true bash <(curl -Lso- https://cdn.jsdelivr.net/gh/hello-yunshu/superspeed@master/superspeed.sh) read -t 0.1 -n 10000 -d '' _ /dev/null || true echo menu ;; 33) backup_directories menu ;; 34) restore_directories menu ;; 35) uninstall_all timeout "$(gettext "清空屏幕")!" clear source "$idleleo" ;; 36) delete_tls_key_and_crt rm -rf ${ssl_chainpath}/* timeout "$(gettext "清空屏幕")!" clear menu ;; 37) timeout "$(gettext "清空屏幕")!" clear exit 0 ;; 99) set_language bash idleleo ;; *) clear log_echo "${Error} ${RedBG} $(gettext "请输入有效的数字")! ${Font}" menu ;; esac } check_file_integrity check_online_version_connect init_language read_version judge_mode idleleo_commend check_program check_xray_local_connect fix_bugs list "$@" ================================================ FILE: languages/en/DOCKER.md ================================================ # Docker Deployment Guide [简体中文](/DOCKER.md) | English | [Français](/languages/fr/DOCKER.md) | [Русский](/languages/ru/DOCKER.md) | [فارسی](/languages/fa/DOCKER.md) | [한국어](/languages/ko/DOCKER.md) This guide describes how to run the Xray one-click script using Docker. The image comes with Xray and Nginx pre-installed, and all original script features are available inside the container. ## Quick Start ### 1. Clone and Build ```bash git clone https://github.com/hello-yunshu/Xray_bash_onekey.git cd Xray_bash_onekey docker compose up -d ``` ### 2. Enter Interactive Installation Menu ```bash docker attach xray-onekey ``` On first run, the installation script launches automatically. Follow the prompts to complete the configuration. After exiting the menu, the container enters daemon mode automatically. ### 3. Subsequent Management ```bash docker exec -it xray-onekey idleleo ``` ## Running Modes | Mode | Description | Command | |------|-------------|---------| | `idleleo` (default) | Start services and enter management menu | `docker compose up -d` + `docker attach xray-onekey` | | `start` | Start services only (daemon mode) | Modify `command: start` in `docker-compose.yml` | | `shell` | Start services and enter shell | `docker exec -it xray-onekey bash` | ## Management Operations All original script commands are available: ```bash docker exec -it xray-onekey idleleo # Management menu docker exec -it xray-onekey idleleo -s # View installation info docker exec -it xray-onekey idleleo -x # Update Xray docker exec -it xray-onekey idleleo -n # Update Nginx docker exec -it xray-onekey idleleo -h # Show help ``` ## Using docker run ```bash docker build -t xray-onekey . docker run -d --name xray-onekey --network host --cap-add NET_ADMIN -e TZ=Asia/Shanghai -v xray-conf:/etc/idleleo/conf -v xray-cert:/etc/idleleo/cert -v xray-info:/etc/idleleo/info -v xray-logs:/var/log/xray -v acme-data:/root/.acme.sh -it xray-onekey ``` ## Data Persistence | Volume | Container Path | Description | |--------|---------------|-------------| | `xray-conf` | `/etc/idleleo/conf` | Xray and Nginx configuration files | | `xray-cert` | `/etc/idleleo/cert` | SSL certificate files | | `xray-info` | `/etc/idleleo/info` | Connection info and status files | | `xray-logs` | `/var/log/xray` | Xray log files | | `acme-data` | `/root/.acme.sh` | acme.sh certificate issuance data | ## Network Configuration The container uses `network_mode: host`, directly using the host network: * Reality mode requires seeing the real client IP * TLS mode requires direct binding to ports 443/80 * Avoids additional NAT forwarding performance overhead ## Important Notes * The container uses `fake-systemctl` instead of systemd; `systemctl` commands work normally * A built-in watchdog checks service status every 30 seconds and auto-restarts on failure * After exiting the management menu, the container enters daemon mode automatically — services keep running * Firewall management is recommended at the host level * Automatic certificate renewal works inside the container (ensure port 80 is accessible) ## Troubleshooting ```bash docker logs xray-onekey # View container logs docker exec -it xray-onekey bash # Enter container docker exec -it xray-onekey idleleo -s # View installation info ``` ### Complete Reset ```bash docker compose down docker volume rm xray-conf xray-cert xray-info xray-logs acme-data docker compose up -d ``` ================================================ FILE: languages/en/LC_MESSAGES/version ================================================ 1777024069 ================================================ FILE: languages/en/README.md ================================================ # Xray One-Click Installation Script — Reality / VLESS WebSocket/gRPC+TLS + Nginx [简体中文](/README.md) | English | [Français](/languages/fr/README.md) | [Русский](/languages/ru/README.md) | [فارسی](/languages/fa/README.md) | [한국어](/languages/ko/README.md) [![GitHub stars](https://img.shields.io/github/stars/hello-yunshu/Xray_bash_onekey?color=%230885ce)](https://github.com/hello-yunshu/Xray_bash_onekey/stargazers) [![GitHub forks](https://img.shields.io/github/forks/hello-yunshu/Xray_bash_onekey?color=%230885ce)](https://github.com/hello-yunshu/Xray_bash_onekey/network) [![GitHub issues](https://img.shields.io/github/issues/hello-yunshu/Xray_bash_onekey)](https://github.com/hello-yunshu/Xray_bash_onekey/issues) > Thanks for non-commercial open source development authorization by JetBrains ## Features * Type `idleleo` to manage the script ([View the backstory of `idleleo`](https://github.com/hello-yunshu/Xray_bash_onekey/wiki/The-True-Face-Behind-the-Fog)) * Powered by Qwen-MT-Plus AI for accurate multilingual translation * Supports Reality protocol with recommended Nginx frontend (installable via script) * Built-in fail2ban protection (installable via script) * Adopts the share link [proposal](https://github.com/XTLS/Xray-core/issues/91) by [@DuckSoft](https://github.com/DuckSoft) (beta), compatible with Qv2ray, V2rayN, V2rayNG * Adopts the [XTLS](https://github.com/XTLS/Xray-core/issues/158) proposal, following the [UUIDv5](https://tools.ietf.org/html/rfc4122#section-4.3) standard, supporting custom string mapping to VLESS UUID * Supports gRPC protocol: [Using gRPC Protocol](https://hey.run/archives/xrayjin-jie-wan-fa---shi-yong-grpcxie-yi) * Supports Reality / ws/gRPC load balancing: - [Deploy Reality Load Balancer](https://hey.run/archives/bushu-reality-balance) - [Build Backend Load Balancer](https://hey.run/archives/xrayjin-jie-wan-fa---da-jian-hou-duan-fu-wu-qi-fu-zai-jun-heng) ## Further Reading * Reality installation guide: [Setting Up Xray Reality Server](https://hey.run/archives/da-jian-xray-reality-xie-yi-fu-wu-qi) * Reality protocol risks: [Risks of Xray Reality Protocol](https://hey.run/archives/reality-xie-yi-de-feng-xian) * Accelerating server with Reality: [Accelerate Server Using Reality Protocol "Vulnerability"](https://hey.run/archives/use-reality) ## Telegram Group * Discussion group: [Click to join](https://t.me/+48VSqv7xIIFmZDZl) ## Prerequisites * An overseas server with a public IP address * For Reality protocol: prepare a target domain that meets Xray's requirements * For TLS version: prepare a domain and add an A record * Read the [Xray official documentation](https://xtls.github.io) to understand Reality, TLS, WebSocket, gRPC, and related Xray concepts * **Ensure curl is installed**: CentOS users run `yum install -y curl`; Debian/Ubuntu users run `apt install -y curl` ## Quick Install ```bash bash <(curl -Ss https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/install.sh) ``` ## Docker Deployment Docker deployment is supported. The image comes with Xray and Nginx pre-installed, and all original script features are available inside the container. See the [Docker Deployment Guide](/languages/en/DOCKER.md) for details. ```bash git clone https://github.com/hello-yunshu/Xray_bash_onekey.git cd Xray_bash_onekey docker compose up -d docker attach xray-onekey ``` ## Important Notes * If you are unfamiliar with the settings, use the default values for all non-required fields (just press Enter throughout) * Cloudflare users should enable CDN only after installation is complete * This script requires basic Linux knowledge and computer networking fundamentals * Supports Debian 12+ / Ubuntu 24.04+ / CentOS Stream 8+; some CentOS templates may have compilation issues — consider switching to another OS if problems occur * It is recommended to deploy only one proxy per server and use the default port 443 * Custom string mapping to UUIDv5 requires client-side support * Use this script in a clean environment; beginners should avoid CentOS * This program depends on Nginx — users who have installed Nginx via [LNMP](https://lnmp.org) or similar scripts should be aware of potential conflicts * Do not use this script in production environments before verifying its functionality * The author provides limited support (because they're not very smart) ## Acknowledgments * Based on [wulabing/V2Ray_ws-tls_bash_onekey](https://github.com/wulabing/V2Ray_ws-tls_bash_onekey) * TCP acceleration script from [ylx2016/Linux-NetSpeed](https://github.com/ylx2016/Linux-NetSpeed) ## Certificate Configuration **Custom Certificate**: Rename your crt and key files to `xray.crt` and `xray.key`, then place them in the `/etc/idleleo/cert` directory (create it if it doesn't exist). Note the certificate permissions and validity period — custom certificates must be renewed manually after expiration. **Auto Certificate**: The script supports automatic Let's Encrypt certificate generation (valid for 3 months), with theoretical support for auto-renewal. ## View Client Configuration ```bash cat /etc/idleleo/info/xray_info.inf ``` ## About Xray * Xray is an excellent open-source network proxy tool supporting Windows, macOS, Android, iOS, Linux, and more * This script provides one-click complete configuration — once all processes finish successfully, simply configure your client using the output * **Strongly recommended** to fully understand the program's workflow and principles ## Service Management | Action | Command | |--------|---------| | Start Xray | `systemctl start xray` | | Stop Xray | `systemctl stop xray` | | Start Nginx | `systemctl start nginx` | | Stop Nginx | `systemctl stop nginx` | ## Directories | Item | Path | |------|------| | Xray server config | `/etc/idleleo/conf/xray/config.json` | | Nginx directory | `/usr/local/nginx` | | Certificate files | `/etc/idleleo/cert/xray.key`, `/etc/idleleo/cert/xray.crt` | | Config info etc. | `/etc/idleleo` | ================================================ FILE: languages/fa/DOCKER.md ================================================ # راهنمای استقرار Docker [简体中文](/DOCKER.md) | [English](/languages/en/DOCKER.md) | [Français](/languages/fr/DOCKER.md) | [Русский](/languages/ru/DOCKER.md) | فارسی | [한국어](/languages/ko/DOCKER.md) این راهنما نحوه اجرای اسکریپت نصب خودکار Xray با Docker را توضیح می‌دهد. ایمیج شامل Xray و Nginx پیش‌نصب‌شده است و تمام قابلیت‌های اسکریپت اصلی در کانتینر در دسترس هستند. ## شروع سریع ### ۱. کلون و ساخت ```bash git clone https://github.com/hello-yunshu/Xray_bash_onekey.git cd Xray_bash_onekey docker compose up -d ``` ### ۲. ورود به منوی نصب تعاملی ```bash docker attach xray-onekey ``` در اولین اجرا، اسکریپت نصب به طور خودکار راه‌اندازی می‌شود. دستورالعمل‌ها را برای تکمیل پیکربندی دنبال کنید. پس از خروج از منو، کانتینر به طور خودکار وارد حالت دیمون می‌شود. ### ۳. مدیریت بعدی ```bash docker exec -it xray-onekey idleleo ``` ## حالت‌های اجرا | حالت | توضیح | دستور | |------|--------|-------| | `idleleo` (پیش‌فرض) | راه‌اندازی سرویس‌ها و ورود به منوی مدیریت | `docker compose up -d` + `docker attach xray-onekey` | | `start` | فقط راه‌اندازی سرویس‌ها (حالت دیمون) | `command: start` را در `docker-compose.yml` تغییر دهید | | `shell` | راه‌اندازی سرویس‌ها و ورود به پوسته | `docker exec -it xray-onekey bash` | ## عملیات مدیریت تمام دستورات اسکریپت اصلی در دسترس هستند: ```bash docker exec -it xray-onekey idleleo # منوی مدیریت docker exec -it xray-onekey idleleo -s # مشاهده اطلاعات نصب docker exec -it xray-onekey idleleo -x # به‌روزرسانی Xray docker exec -it xray-onekey idleleo -n # به‌روزرسانی Nginx docker exec -it xray-onekey idleleo -h # نمایش راهنما ``` ## استفاده از docker run ```bash docker build -t xray-onekey . docker run -d --name xray-onekey --network host --cap-add NET_ADMIN -e TZ=Asia/Shanghai -v xray-conf:/etc/idleleo/conf -v xray-cert:/etc/idleleo/cert -v xray-info:/etc/idleleo/info -v xray-logs:/var/log/xray -v acme-data:/root/.acme.sh -it xray-onekey ``` ## ماندگاری داده‌ها | حجم | مسیر کانتینر | توضیح | |-----|-------------|--------| | `xray-conf` | `/etc/idleleo/conf` | فایل‌های پیکربندی Xray و Nginx | | `xray-cert` | `/etc/idleleo/cert` | فایل‌های گواهی SSL | | `xray-info` | `/etc/idleleo/info` | اطلاعات اتصال و فایل‌های وضعیت | | `xray-logs` | `/var/log/xray` | فایل‌های لاگ Xray | | `acme-data` | `/root/.acme.sh` | داده‌های صدور گواهی acme.sh | ## پیکربندی شبکه کانتینر از `network_mode: host` استفاده می‌کند و مستقیماً از شبکه میزبان استفاده می‌کند: * حالت Reality نیاز به دیدن آی‌پی واقعی کلاینت دارد * حالت TLS نیاز به اتصال مستقیم به پورت‌های ۴۴۳/۸۰ دارد * از سربار عملکرد ناشی از NAT اضافی جلوگیری می‌کند ## نکات مهم * کانتینر از `fake-systemctl` به جای systemd استفاده می‌کند؛ دستورات `systemctl` به طور عادی کار می‌کنند * یک نگهبان داخلی هر ۳۰ ثانیه وضعیت سرویس‌ها را بررسی کرده و در صورت خرابی به طور خودکار راه‌اندازی مجدد می‌کند * پس از خروج از منوی مدیریت، کانتینر به طور خودکار وارد حالت دیمون می‌شود — سرویس‌ها به کار خود ادامه می‌دهند * مدیریت فایروال در سطح میزبان توصیه می‌شود * تمدید خودکار گواهی در کانتینر کار می‌کند (مطمئن شوید پورت ۸۰ قابل دسترسی است) ## عیب‌یابی ```bash docker logs xray-onekey # مشاهده لاگ‌های کانتینر docker exec -it xray-onekey bash # ورود به کانتینر docker exec -it xray-onekey idleleo -s # مشاهده اطلاعات نصب ``` ### بازنشانی کامل ```bash docker compose down docker volume rm xray-conf xray-cert xray-info xray-logs acme-data docker compose up -d ``` ================================================ FILE: languages/fa/LC_MESSAGES/version ================================================ 1777024069 ================================================ FILE: languages/fa/README.md ================================================ # اسکریپت نصب خودکار Xray — Reality / VLESS WebSocket/gRPC+TLS + Nginx [简体中文](/README.md) | [English](/languages/en/README.md) | [Français](/languages/fr/README.md) | [Русский](/languages/ru/README.md) | فارسی | [한국어](/languages/ko/README.md) [![GitHub stars](https://img.shields.io/github/stars/hello-yunshu/Xray_bash_onekey?color=%230885ce)](https://github.com/hello-yunshu/Xray_bash_onekey/stargazers) [![GitHub forks](https://img.shields.io/github/forks/hello-yunshu/Xray_bash_onekey?color=%230885ce)](https://github.com/hello-yunshu/Xray_bash_onekey/network) [![GitHub issues](https://img.shields.io/github/issues/hello-yunshu/Xray_bash_onekey)](https://github.com/hello-yunshu/Xray_bash_onekey/issues) > سپاس از اجازه توسعه آزاد و غیرتجاری توسط JetBrains ## ویژگی‌ها * دستور `idleleo` را وارد کنید تا اسکریپت را مدیریت کنید ([مشاهده پیشینهٔ داستان `idleleo`](https://github.com/hello-yunshu/Xray_bash_onekey/wiki/%DA%86%D9%87%D8%B1%D9%87-%D9%88%D8%A7%D9%82%D8%B9%DB%8C-%D9%BE%D8%B4%D8%AA-%D9%85%D9%87)) * ترجمه دقیق چندزبانه با Qwen-MT-Plus AI * پشتیبانی از پروتکل Reality با Nginx پیشگام توصیه‌شده (قابل نصب از طریق اسکریپت) * حفاظت داخلی fail2ban (قابل نصب از طریق اسکریپت) * استفاده از [پیشنهاد](https://github.com/XTLS/Xray-core/issues/91) لینک اشتراک‌گذاری [@DuckSoft](https://github.com/DuckSoft) (بتا)، سازگار با Qv2ray، V2rayN، V2rayNG * استفاده از پیشنهاد پروژه [XTLS](https://github.com/XTLS/Xray-core/issues/158)، پیروی از استاندارد [UUIDv5](https://tools.ietf.org/html/rfc4122#section-4.3)، پشتیبانی از نگاشت رشته‌های سفارشی به UUID VLESS * پشتیبانی از پروتکل gRPC: [استفاده از پروتکل gRPC](https://hey.run/archives/xrayjin-jie-wan-fa---shi-yong-grpcxie-yi) * پشتیبانی از تعادل بار Reality / ws/gRPC: - [استقرار تعادل بار Reality](https://hey.run/archives/bushu-reality-balance) - [ساخت تعادل بار بک‌اند](https://hey.run/archives/xrayjin-jie-wan-fa---da-jian-hou-duan-fu-wu-qi-fu-zai-jun-heng) ## مطالعه بیشتر * راهنمای نصب Reality: [راه‌اندازی سرور Xray Reality](https://hey.run/archives/da-jian-xray-reality-xie-yi-fu-wu-qi) * خطرات پروتکل Reality: [خطرات پروتکل Xray Reality](https://hey.run/archives/reality-xie-yi-de-feng-xian) * تسریع سرور با Reality: [تسریع سرور از طریق «آسیب‌پذیری» پروتکل Reality](https://hey.run/archives/use-reality) ## گروه تلگرام * گروه بحث: [کلیک برای عضویت](https://t.me/+48VSqv7xIIFmZDZl) ## پیش‌نیازها * یک سرور خارج از کشور با آدرس آی‌پی عمومی * برای پروتکل Reality: یک دامنه هدف مطابق با الزامات Xray آماده کنید * برای نسخه TLS: یک دامنه آماده کنید و رکورد A اضافه کنید * [مستندات رسمی Xray](https://xtls.github.io) را بخوانید تا با Reality، TLS، WebSocket، gRPC و مفاهیم مرتبط Xray آشنا شوید * **اطمینان از نصب curl**: کاربران CentOS دستور `yum install -y curl` را اجرا کنند؛ کاربران Debian/Ubuntu دستور `apt install -y curl` را اجرا کنند ## نصب سریع ```bash bash <(curl -Ss https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/install.sh) ``` ## استقرار Docker استقرار با Docker پشتیبانی می‌شود. ایمیج شامل Xray و Nginx پیش‌نصب‌شده است و تمام قابلیت‌های اسکریپت اصلی در کانتینر در دسترس هستند. برای جزئیات [راهنمای استقرار Docker](/languages/fa/DOCKER.md) را ببینید. ```bash git clone https://github.com/hello-yunshu/Xray_bash_onekey.git cd Xray_bash_onekey docker compose up -d docker attach xray-onekey ``` ## نکات مهم * اگر با تنظیمات آشنا نیستید، برای فیلدهای غیرضروری از مقادیر پیش‌فرض استفاده کنید (فقط Enter بزنید) * کاربران Cloudflare فقط پس از اتمام نصب CDN را فعال کنند * این اسکریپت به دانش پایه Linux و شبکه‌های کامپیوتری نیاز دارد * پشتیبانی از Debian 12+ / Ubuntu 24.04+ / CentOS Stream 8+؛ برخی قالب‌های CentOS ممکن است مشکل کامپایل داشته باشند — در صورت بروز مشکل، تغییر سیستم‌عامل توصیه می‌شود * توصیه می‌شود فقط یک پروکسی در هر سرور مستقر کنید و از پورت پیش‌فرض 443 استفاده کنید * نگاشت رشته‌های سفارشی به UUIDv5 نیازمند پشتیبانی سمت کلاینت است * از این اسکریپت در محیط تمیز استفاده کنید؛ مبتدیان از CentOS استفاده نکنند * این برنامه به Nginx وابسته است — کاربرانی که Nginx را از طریق [LNMP](https://lnmp.org) یا اسکریپت‌های مشابه نصب کرده‌اند، به تداخلات احتمالی توجه کنند * قبل از تأیید عملکرد، از این اسکریپت در محیط تولیدی استفاده نکنید * نویسنده فقط پشتیبانی محدودی ارائه می‌دهد (چون خیلی باهوش نیست) ## تشکر * بر اساس [wulabing/V2Ray_ws-tls_bash_onekey](https://github.com/wulabing/V2Ray_ws-tls_bash_onekey) * اسکریپت تسریع TCP از [ylx2016/Linux-NetSpeed](https://github.com/ylx2016/Linux-NetSpeed) ## پیکربندی گواهی‌نامه **گواهی سفارشی**: فایل‌های crt و key را به `xray.crt` و `xray.key` تغییر نام دهید و در مسیر `/etc/idleleo/cert` قرار دهید (در صورت عدم وجود، دایرکتوری را ایجاد کنید). به مجوزها و مدت اعتبار گواهی توجه کنید — گواهی‌های سفارشی پس از انقضا باید به صورت دستی تمدید شوند. **گواهی خودکار**: اسکریپت از تولید خودکار گواهی Let's Encrypt پشتیبانی می‌کند (اعتبار ۳ ماهه)، با پشتیبانی نظری از تمدید خودکار. ## مشاهده تنظیمات کلاینت ```bash cat /etc/idleleo/info/xray_info.inf ``` ## درباره Xray * Xray یک ابزار پروکسی شبکه متن‌باز عالی است که از Windows، macOS، Android، iOS، Linux و سایر پلتفرم‌ها پشتیبانی می‌کند * این اسکریپت یک پیکربندی کامل یک‌کلیکی ارائه می‌دهد — پس از پایان موفقیت‌آمیز تمام فرآیندها، کلاینت خود را بر اساس نتایج خروجی تنظیم کنید * **به شدت توصیه می‌شود** فرآیند کار و اصول برنامه را به طور کامل درک کنید ## مدیریت سرویس | عمل | دستور | |-----|-------| | راه‌اندازی Xray | `systemctl start xray` | | توقف Xray | `systemctl stop xray` | | راه‌اندازی Nginx | `systemctl start nginx` | | توقف Nginx | `systemctl stop nginx` | ## دایرکتوری‌ها | مورد | مسیر | |------|------| | تنظیمات سرور Xray | `/etc/idleleo/conf/xray/config.json` | | دایرکتوری Nginx | `/usr/local/nginx` | | فایل‌های گواهی | `/etc/idleleo/cert/xray.key`, `/etc/idleleo/cert/xray.crt` | | اطلاعات پیکربندی و غیره | `/etc/idleleo` | ================================================ FILE: languages/fr/DOCKER.md ================================================ # Guide de déploiement Docker [简体中文](/DOCKER.md) | [English](/languages/en/DOCKER.md) | Français | [Русский](/languages/ru/DOCKER.md) | [فارسی](/languages/fa/DOCKER.md) | [한국어](/languages/ko/DOCKER.md) Ce guide décrit comment exécuter le script d'installation automatique Xray avec Docker. L'image intègre Xray et Nginx préinstallés, et toutes les fonctionnalités du script original sont disponibles dans le conteneur. ## Démarrage rapide ### 1. Cloner et construire ```bash git clone https://github.com/hello-yunshu/Xray_bash_onekey.git cd Xray_bash_onekey docker compose up -d ``` ### 2. Accéder au menu d'installation interactif ```bash docker attach xray-onekey ``` Lors de la première exécution, le script d'installation se lance automatiquement. Suivez les instructions pour terminer la configuration. Après avoir quitté le menu, le conteneur passe automatiquement en mode démon. ### 3. Gestion ultérieure ```bash docker exec -it xray-onekey idleleo ``` ## Modes de fonctionnement | Mode | Description | Commande | |------|-------------|----------| | `idleleo` (par défaut) | Démarrer les services et accéder au menu de gestion | `docker compose up -d` + `docker attach xray-onekey` | | `start` | Démarrer uniquement les services (mode démon) | Modifier `command: start` dans `docker-compose.yml` | | `shell` | Démarrer les services et accéder à un shell | `docker exec -it xray-onekey bash` | ## Opérations de gestion Toutes les commandes du script original sont disponibles : ```bash docker exec -it xray-onekey idleleo # Menu de gestion docker exec -it xray-onekey idleleo -s # Afficher les informations docker exec -it xray-onekey idleleo -x # Mettre à jour Xray docker exec -it xray-onekey idleleo -n # Mettre à jour Nginx docker exec -it xray-onekey idleleo -h # Afficher l'aide ``` ## Utilisation de docker run ```bash docker build -t xray-onekey . docker run -d --name xray-onekey --network host --cap-add NET_ADMIN -e TZ=Asia/Shanghai -v xray-conf:/etc/idleleo/conf -v xray-cert:/etc/idleleo/cert -v xray-info:/etc/idleleo/info -v xray-logs:/var/log/xray -v acme-data:/root/.acme.sh -it xray-onekey ``` ## Persistance des données | Volume | Chemin du conteneur | Description | |--------|-------------------|-------------| | `xray-conf` | `/etc/idleleo/conf` | Fichiers de configuration Xray et Nginx | | `xray-cert` | `/etc/idleleo/cert` | Fichiers de certificats SSL | | `xray-info` | `/etc/idleleo/info` | Informations de connexion et fichiers d'état | | `xray-logs` | `/var/log/xray` | Fichiers de journaux Xray | | `acme-data` | `/root/.acme.sh` | Données d'émission de certificats acme.sh | ## Configuration réseau Le conteneur utilise `network_mode: host`, utilisant directement le réseau de l'hôte : * Le mode Reality nécessite de voir la véritable IP du client * Le mode TLS nécessite une liaison directe aux ports 443/80 * Évite la surcharge de performance liée au transfert NAT supplémentaire ## Remarques importantes * Le conteneur utilise `fake-systemctl` au lieu de systemd ; les commandes `systemctl` fonctionnent normalement * Un chien de garde intégré vérifie l'état des services toutes les 30 secondes et redémarre automatiquement en cas de défaillance * Après avoir quitté le menu de gestion, le conteneur passe automatiquement en mode démon — les services continuent de fonctionner * La gestion du pare-feu est recommandée au niveau de l'hôte * Le renouvellement automatique des certificats fonctionne dans le conteneur (assurez-vous que le port 80 est accessible) ## Dépannage ```bash docker logs xray-onekey # Afficher les journaux du conteneur docker exec -it xray-onekey bash # Entrer dans le conteneur docker exec -it xray-onekey idleleo -s # Afficher les informations d'installation ``` ### Réinitialisation complète ```bash docker compose down docker volume rm xray-conf xray-cert xray-info xray-logs acme-data docker compose up -d ``` ================================================ FILE: languages/fr/LC_MESSAGES/version ================================================ 1777024070 ================================================ FILE: languages/fr/README.md ================================================ # Script d'installation automatique Xray — Reality / VLESS WebSocket/gRPC+TLS + Nginx [简体中文](/README.md) | [English](/languages/en/README.md) | Français | [Русский](/languages/ru/README.md) | [فارسی](/languages/fa/README.md) | [한국어](/languages/ko/README.md) [![GitHub stars](https://img.shields.io/github/stars/hello-yunshu/Xray_bash_onekey?color=%230885ce)](https://github.com/hello-yunshu/Xray_bash_onekey/stargazers) [![GitHub forks](https://img.shields.io/github/forks/hello-yunshu/Xray_bash_onekey?color=%230885ce)](https://github.com/hello-yunshu/Xray_bash_onekey/network) [![GitHub issues](https://img.shields.io/github/issues/hello-yunshu/Xray_bash_onekey)](https://github.com/hello-yunshu/Xray_bash_onekey/issues) > Merci à JetBrains pour l'autorisation de développement open source non commercial ## Fonctionnalités * Tapez `idleleo` pour gérer le script ([Voir l'histoire de `idleleo`](https://github.com/hello-yunshu/Xray_bash_onekey/wiki/Le-Vrai-Visage-Derri%C3%A8re-la-Brume)) * Traduction multilingue précise propulsée par Qwen-MT-Plus AI * Prend en charge le protocole Reality avec Nginx en frontal recommandé (installable via le script) * Protection fail2ban intégrée (installable via le script) * Adopte la [proposition](https://github.com/XTLS/Xray-core/issues/91) de lien de partage de [@DuckSoft](https://github.com/DuckSoft) (beta), compatible avec Qv2ray, V2rayN, V2rayNG * Adopte la proposition du projet [XTLS](https://github.com/XTLS/Xray-core/issues/158), conforme à la norme [UUIDv5](https://tools.ietf.org/html/rfc4122#section-4.3), permettant le mappage de chaînes personnalisées vers un UUID VLESS * Prend en charge le protocole gRPC : [Utiliser le protocole gRPC](https://hey.run/archives/xrayjin-jie-wan-fa---shi-yong-grpcxie-yi) * Prend en charge l'équilibrage de charge Reality / ws/gRPC : - [Déployer un équilibreur de charge Reality](https://hey.run/archives/bushu-reality-balance) - [Construire un équilibreur de charge backend](https://hey.run/archives/xrayjin-jie-wan-fa---da-jian-hou-duan-fu-wu-qi-fu-zai-jun-heng) ## Pour aller plus loin * Guide d'installation Reality : [Configurer un serveur Xray Reality](https://hey.run/archives/da-jian-xray-reality-xie-yi-fu-wu-qi) * Risques du protocole Reality : [Risques du protocole Xray Reality](https://hey.run/archives/reality-xie-yi-de-feng-xian) * Accélérer le serveur avec Reality : [Accélérer le serveur via la « faille » du protocole Reality](https://hey.run/archives/use-reality) ## Groupe Telegram * Groupe de discussion : [Cliquez pour rejoindre](https://t.me/+48VSqv7xIIFmZDZl) ## Prérequis * Un serveur à l'étranger avec une adresse IP publique * Pour le protocole Reality : préparez un domaine cible conforme aux exigences de Xray * Pour la version TLS : préparez un domaine et ajoutez un enregistrement A * Lisez la [documentation officielle Xray](https://xtls.github.io) pour comprendre Reality, TLS, WebSocket, gRPC et les concepts liés à Xray * **Assurez-vous que curl est installé** : utilisateurs CentOS, exécutez `yum install -y curl` ; utilisateurs Debian/Ubuntu, exécutez `apt install -y curl` ## Installation rapide ```bash bash <(curl -Ss https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/install.sh) ``` ## Déploiement Docker Le déploiement Docker est pris en charge. L'image intègre Xray et Nginx préinstallés, et toutes les fonctionnalités du script original sont disponibles dans le conteneur. Consultez le [Guide de déploiement Docker](/languages/fr/DOCKER.md) pour plus de détails. ```bash git clone https://github.com/hello-yunshu/Xray_bash_onekey.git cd Xray_bash_onekey docker compose up -d docker attach xray-onekey ``` ## Remarques importantes * Si vous n'êtes pas familier avec les paramètres, utilisez les valeurs par défaut pour les champs non obligatoires (appuyez simplement sur Entrée) * Les utilisateurs Cloudflare doivent activer le CDN uniquement après l'installation * Ce script nécessite des connaissances de base en Linux et en réseaux informatiques * Compatible Debian 12+ / Ubuntu 24.04+ / CentOS Stream 8+ ; certains modèles CentOS peuvent rencontrer des problèmes de compilation — envisagez de changer de système si nécessaire * Il est recommandé de ne déployer qu'un seul proxy par serveur et d'utiliser le port 443 par défaut * Le mappage de chaînes personnalisées vers UUIDv5 nécessite la prise en charge du client * Utilisez ce script dans un environnement propre ; les débutants doivent éviter CentOS * Ce programme dépend de Nginx — les utilisateurs ayant installé Nginx via [LNMP](https://lnmp.org) ou des scripts similaires doivent être attentifs aux conflits potentiels * N'utilisez pas ce script en production avant d'avoir vérifié son bon fonctionnement * L'auteur fournit un support limité (parce qu'il n'est pas très doué) ## Remerciements * Basé sur [wulabing/V2Ray_ws-tls_bash_onekey](https://github.com/wulabing/V2Ray_ws-tls_bash_onekey) * Script d'accélération TCP de [ylx2016/Linux-NetSpeed](https://github.com/ylx2016/Linux-NetSpeed) ## Configuration des certificats **Certificat personnalisé** : Renommez vos fichiers crt et key en `xray.crt` et `xray.key`, puis placez-les dans le répertoire `/etc/idleleo/cert` (créez-le s'il n'existe pas). Attention aux permissions et à la durée de validité — les certificats personnalisés doivent être renouvelés manuellement après expiration. **Certificat automatique** : Le script prend en charge la génération automatique de certificats Let's Encrypt (valides 3 mois), avec prise en charge théorique du renouvellement automatique. ## Afficher la configuration client ```bash cat /etc/idleleo/info/xray_info.inf ``` ## À propos de Xray * Xray est un excellent outil proxy réseau open source prenant en charge Windows, macOS, Android, iOS, Linux et plus encore * Ce script offre une configuration complète en un clic — une fois tous les processus terminés, configurez simplement votre client à partir des résultats affichés * **Il est fortement recommandé** de bien comprendre le fonctionnement et les principes du programme ## Gestion des services | Action | Commande | |--------|----------| | Démarrer Xray | `systemctl start xray` | | Arrêter Xray | `systemctl stop xray` | | Démarrer Nginx | `systemctl start nginx` | | Arrêter Nginx | `systemctl stop nginx` | ## Répertoires | Élément | Chemin | |---------|--------| | Config serveur Xray | `/etc/idleleo/conf/xray/config.json` | | Répertoire Nginx | `/usr/local/nginx` | | Fichiers de certificat | `/etc/idleleo/cert/xray.key`, `/etc/idleleo/cert/xray.crt` | | Infos de config etc. | `/etc/idleleo` | ================================================ FILE: languages/ko/DOCKER.md ================================================ # Docker 배포 가이드 [简体中文](/DOCKER.md) | [English](/languages/en/DOCKER.md) | [Français](/languages/fr/DOCKER.md) | [Русский](/languages/ru/DOCKER.md) | [فارسی](/languages/fa/DOCKER.md) | 한국어 이 가이드에서는 Docker를 사용하여 Xray 원클릭 스크립트를 실행하는 방법을 설명합니다. 이미지에 Xray와 Nginx가 사전 설치되어 있으며, 컨테이너 내에서 원본 스크립트의 모든 기능을 사용할 수 있습니다. ## 빠른 시작 ### 1. 클론 및 빌드 ```bash git clone https://github.com/hello-yunshu/Xray_bash_onekey.git cd Xray_bash_onekey docker compose up -d ``` ### 2. 대화형 설치 메뉴 진입 ```bash docker attach xray-onekey ``` 첫 실행 시 설치 스크립트가 자동으로 시작됩니다. 안내에 따라 설정을 완료하세요. 메뉴를 종료하면 컨테이너가 자동으로 데몬 모드로 전환됩니다. ### 3. 이후 관리 ```bash docker exec -it xray-onekey idleleo ``` ## 실행 모드 | 모드 | 설명 | 명령어 | |------|------|--------| | `idleleo` (기본값) | 서비스 시작 및 관리 메뉴 진입 | `docker compose up -d` + `docker attach xray-onekey` | | `start` | 서비스만 시작 (데몬 모드) | `docker-compose.yml`에서 `command: start`로 수정 | | `shell` | 서비스 시작 및 셸 진입 | `docker exec -it xray-onekey bash` | ## 관리 작업 원본 스크립트의 모든 명령을 사용할 수 있습니다: ```bash docker exec -it xray-onekey idleleo # 관리 메뉴 docker exec -it xray-onekey idleleo -s # 설치 정보 확인 docker exec -it xray-onekey idleleo -x # Xray 업데이트 docker exec -it xray-onekey idleleo -n # Nginx 업데이트 docker exec -it xray-onekey idleleo -h # 도움말 ``` ## docker run 사용 ```bash docker build -t xray-onekey . docker run -d --name xray-onekey --network host --cap-add NET_ADMIN -e TZ=Asia/Shanghai -v xray-conf:/etc/idleleo/conf -v xray-cert:/etc/idleleo/cert -v xray-info:/etc/idleleo/info -v xray-logs:/var/log/xray -v acme-data:/root/.acme.sh -it xray-onekey ``` ## 데이터 지속성 | 볼륨 | 컨테이너 경로 | 설명 | |------|-------------|------| | `xray-conf` | `/etc/idleleo/conf` | Xray 및 Nginx 설정 파일 | | `xray-cert` | `/etc/idleleo/cert` | SSL 인증서 파일 | | `xray-info` | `/etc/idleleo/info` | 연결 정보 및 상태 파일 | | `xray-logs` | `/var/log/xray` | Xray 로그 파일 | | `acme-data` | `/root/.acme.sh` | acme.sh 인증서 발급 데이터 | ## 네트워크 설정 컨테이너는 `network_mode: host`를 사용하여 호스트 네트워크를 직접 사용합니다: * Reality 모드는 실제 클라이언트 IP를 확인해야 합니다 * TLS 모드는 443/80 포트에 직접 바인딩해야 합니다 * 추가 NAT 전달로 인한 성능 오버헤드를 방지합니다 ## 주의사항 * 컨테이너에서는 systemd 대신 `fake-systemctl`을 사용합니다; `systemctl` 명령어가 정상적으로 작동합니다 * 내장 와치독이 30초마다 서비스 상태를 확인하고 장애 시 자동으로 재시작합니다 * 관리 메뉴를 종료하면 컨테이너가 자동으로 데몬 모드로 전환됩니다 — 서비스가 계속 실행됩니다 * 방화벽 관리는 호스트 수준에서 권장됩니다 * 자동 인증서 갱신이 컨테이너 내에서 작동합니다 (포트 80에 접근 가능한지 확인) ## 문제 해결 ```bash docker logs xray-onekey # 컨테이너 로그 확인 docker exec -it xray-onekey bash # 컨테이너 진입 docker exec -it xray-onekey idleleo -s # 설치 정보 확인 ``` ### 전체 초기화 ```bash docker compose down docker volume rm xray-conf xray-cert xray-info xray-logs acme-data docker compose up -d ``` ================================================ FILE: languages/ko/LC_MESSAGES/version ================================================ 1777024070 ================================================ FILE: languages/ko/README.md ================================================ # Xray 원클릭 설치 스크립트 — Reality / VLESS WebSocket/gRPC+TLS + Nginx [简体中文](/README.md) | [English](/languages/en/README.md) | [Français](/languages/fr/README.md) | [Русский](/languages/ru/README.md) | [فارسی](/languages/fa/README.md) | 한국어 [![GitHub stars](https://img.shields.io/github/stars/hello-yunshu/Xray_bash_onekey?color=%230885ce)](https://github.com/hello-yunshu/Xray_bash_onekey/stargazers) [![GitHub forks](https://img.shields.io/github/forks/hello-yunshu/Xray_bash_onekey?color=%230885ce)](https://github.com/hello-yunshu/Xray_bash_onekey/network) [![GitHub issues](https://img.shields.io/github/issues/hello-yunshu/Xray_bash_onekey)](https://github.com/hello-yunshu/Xray_bash_onekey/issues) > JetBrains의 비상업 오픈소스 개발 라이선스 지원에 감사드립니다 ## 주요 기능 * `idleleo` 명령어로 스크립트 관리 ([`idleleo` 배경 이야기 보기](https://github.com/hello-yunshu/Xray_bash_onekey/wiki/%EC%95%88%EA%B0%9C-%EB%92%A4%EC%9D%98-%EC%A7%84%EC%8B%A4%EB%90%9C-%EC%96%BC%EA%B5%B4)) * Qwen-MT-Plus AI 기반 정확한 다국어 번역 * Reality 프로토콜 지원, Nginx 프론트엔드 권장 (스크립트 내 설치 가능) * fail2ban 보호 내장 (스크립트 내 설치 가능) * [@DuckSoft](https://github.com/DuckSoft)의 공유 링크 [제안](https://github.com/XTLS/Xray-core/issues/91) (beta) 채택, Qv2ray, V2rayN, V2rayNG 호환 * [XTLS](https://github.com/XTLS/Xray-core/issues/158) 프로젝트 제안 채택, [UUIDv5](https://tools.ietf.org/html/rfc4122#section-4.3) 표준 준수, 사용자 정의 문자열을 VLESS UUID로 매핑 지원 * gRPC 프로토콜 지원: [gRPC 프로토콜 사용하기](https://hey.run/archives/xrayjin-jie-wan-fa---shi-yong-grpcxie-yi) * Reality / ws/gRPC 로드 밸런싱 지원: - [Reality 로드 밸런서 배포](https://hey.run/archives/bushu-reality-balance) - [백엔드 로드 밸런서 구축](https://hey.run/archives/xrayjin-jie-wan-fa---da-jian-hou-duan-fu-wu-qi-fu-zai-jun-heng) ## 추가 자료 * Reality 설치 가이드: [Xray Reality 서버 구축](https://hey.run/archives/da-jian-xray-reality-xie-yi-fu-wu-qi) * Reality 프로토콜 위험: [Xray Reality 프로토콜의 위험](https://hey.run/archives/reality-xie-yi-de-feng-xian) * Reality로 서버 가속: [Reality 프로토콜 "취약점"으로 서버 가속](https://hey.run/archives/use-reality) ## Telegram 그룹 * 토론 그룹: [클릭하여 참여](https://t.me/+48VSqv7xIIFmZDZl) ## 사전 준비 * 공인 IP를 가진 해외 서버 * Reality 프로토콜: Xray 요구사항을 충족하는 대상 도메인 준비 * TLS 버전: 도메인 준비 및 A 레코드 추가 * [Xray 공식 문서](https://xtls.github.io)를 읽고 Reality, TLS, WebSocket, gRPC 및 Xray 관련 개념 이해 * **curl 설치 확인**: CentOS 사용자는 `yum install -y curl` 실행; Debian/Ubuntu 사용자는 `apt install -y curl` 실행 ## 빠른 설치 ```bash bash <(curl -Ss https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/install.sh) ``` ## Docker 배포 Docker 배포가 지원됩니다. 이미지에 Xray와 Nginx가 사전 설치되어 있으며, 컨테이너 내에서 원본 스크립트의 모든 기능을 사용할 수 있습니다. 자세한 내용은 [Docker 배포 가이드](/languages/ko/DOCKER.md)를 참조하세요. ```bash git clone https://github.com/hello-yunshu/Xray_bash_onekey.git cd Xray_bash_onekey docker compose up -d docker attach xray-onekey ``` ## 주의사항 * 설정의 의미를 모르면 필수 항목 외에는 기본값을 사용하세요 (계속 Enter) * Cloudflare 사용자는 설치 완료 후에만 CDN을 활성화하세요 * 이 스크립트는 Linux 기초 지식과 컴퓨터 네트워크 기본이 필요합니다 * Debian 12+ / Ubuntu 24.04+ / CentOS Stream 8+ 지원; 일부 CentOS 템플릿에서 컴파일 문제가 발생할 수 있으며, 문제 시 다른 OS로 전환 권장 * 서버당 하나의 프록시만 배포하고 기본 포트 443 사용을 권장합니다 * 사용자 정의 문자열을 UUIDv5로 매핑하려면 클라이언트 지원이 필요합니다 * 깨끗한 환경에서 사용하세요; 초보자는 CentOS를 피하세요 * 이 프로그램은 Nginx에 의존합니다 — [LNMP](https://lnmp.org) 등으로 Nginx를 설치한 사용자는 잠재적 충돌에 주의하세요 * 작동을 확인하기 전까지 프로덕션 환경에 사용하지 마세요 * 작성자는 제한된 지원만 제공합니다 (너무 멍청해서요) ## 감사의 말 * [wulabing/V2Ray_ws-tls_bash_onekey](https://github.com/wulabing/V2Ray_ws-tls_bash_onekey) 기반 * TCP 가속 스크립트 출처: [ylx2016/Linux-NetSpeed](https://github.com/ylx2016/Linux-NetSpeed) ## 인증서 설정 **사용자 정의 인증서**: crt 및 key 파일을 `xray.crt`와 `xray.key`로 이름을 변경한 후 `/etc/idleleo/cert` 디렉토리에 넣으세요 (디렉토리가 없으면 생성). 인증서 권한 및 유효기간에 주의하세요 — 사용자 정의 인증서는 만료 후 수동으로 갱신해야 합니다. **자동 인증서**: 스크립트는 Let's Encrypt 인증서 자동 생성을 지원합니다 (유효기간 3개월), 이론적으로 자동 갱신이 지원됩니다. ## 클라이언트 설정 확인 ```bash cat /etc/idleleo/info/xray_info.inf ``` ## Xray 소개 * Xray는 Windows, macOS, Android, iOS, Linux 등을 지원하는 우수한 오픈소스 네트워크 프록시 도구입니다 * 이 스크립트는 원클릭 완전 설정 스크립트입니다 — 모든 프로세스가 정상적으로 완료되면 출력 결과에 따라 클라이언트를 설정하기만 하면 됩니다 * **프로그램의 작동 방식과 원리를 완전히 이해할 것을 강력히 권장합니다** ## 서비스 관리 | 작업 | 명령어 | |------|--------| | Xray 시작 | `systemctl start xray` | | Xray 중지 | `systemctl stop xray` | | Nginx 시작 | `systemctl start nginx` | | Nginx 중지 | `systemctl stop nginx` | ## 디렉토리 | 항목 | 경로 | |------|------| | Xray 서버 설정 | `/etc/idleleo/conf/xray/config.json` | | Nginx 디렉토리 | `/usr/local/nginx` | | 인증서 파일 | `/etc/idleleo/cert/xray.key`, `/etc/idleleo/cert/xray.crt` | | 설정 정보 등 | `/etc/idleleo` | ================================================ FILE: languages/ru/DOCKER.md ================================================ # Руководство по развёртыванию Docker [简体中文](/DOCKER.md) | [English](/languages/en/DOCKER.md) | [Français](/languages/fr/DOCKER.md) | Русский | [فارسی](/languages/fa/DOCKER.md) | [한국어](/languages/ko/DOCKER.md) В этом руководстве описывается запуск скрипта автоматической установки Xray с использованием Docker. Образ поставляется с предустановленными Xray и Nginx, все функции оригинального скрипта доступны в контейнере. ## Быстрый старт ### 1. Клонирование и сборка ```bash git clone https://github.com/hello-yunshu/Xray_bash_onekey.git cd Xray_bash_onekey docker compose up -d ``` ### 2. Вход в интерактивное меню установки ```bash docker attach xray-onekey ``` При первом запуске скрипт установки запускается автоматически. Следуйте подсказкам для завершения настройки. После выхода из меню контейнер автоматически переходит в режим демона. ### 3. Последующее управление ```bash docker exec -it xray-onekey idleleo ``` ## Режимы работы | Режим | Описание | Команда | |-------|----------|---------| | `idleleo` (по умолчанию) | Запуск служб и вход в меню управления | `docker compose up -d` + `docker attach xray-onekey` | | `start` | Только запуск служб (режим демона) | Измените `command: start` в `docker-compose.yml` | | `shell` | Запуск служб и вход в оболочку | `docker exec -it xray-onekey bash` | ## Управление Все команды оригинального скрипта доступны: ```bash docker exec -it xray-onekey idleleo # Меню управления docker exec -it xray-onekey idleleo -s # Просмотр информации об установке docker exec -it xray-onekey idleleo -x # Обновление Xray docker exec -it xray-onekey idleleo -n # Обновление Nginx docker exec -it xray-onekey idleleo -h # Справка ``` ## Использование docker run ```bash docker build -t xray-onekey . docker run -d --name xray-onekey --network host --cap-add NET_ADMIN -e TZ=Asia/Shanghai -v xray-conf:/etc/idleleo/conf -v xray-cert:/etc/idleleo/cert -v xray-info:/etc/idleleo/info -v xray-logs:/var/log/xray -v acme-data:/root/.acme.sh -it xray-onekey ``` ## Сохранение данных | Том | Путь в контейнере | Описание | |-----|-------------------|----------| | `xray-conf` | `/etc/idleleo/conf` | Файлы конфигурации Xray и Nginx | | `xray-cert` | `/etc/idleleo/cert` | Файлы SSL-сертификатов | | `xray-info` | `/etc/idleleo/info` | Информация о подключении и файлы состояния | | `xray-logs` | `/var/log/xray` | Файлы журналов Xray | | `acme-data` | `/root/.acme.sh` | Данные выпуска сертификатов acme.sh | ## Сетевая конфигурация Контейнер использует `network_mode: host`, напрямую используя сеть хоста: * Режиму Reality необходимо видеть реальный IP клиента * Режиму TLS требуется прямая привязка к портам 443/80 * Избегает дополнительных накладных расходов на трансляцию NAT ## Важные замечания * В контейнере используется `fake-systemctl` вместо systemd; команды `systemctl` работают нормально * Встроенный сторожевой таймер проверяет статус служб каждые 30 секунд и автоматически перезапускает их при сбое * После выхода из меню управления контейнер автоматически переходит в режим демона — службы продолжают работать * Управление брандмауэром рекомендуется на уровне хоста * Автоматическое продление сертификатов работает в контейнере (убедитесь, что порт 80 доступен) ## Устранение неполадок ```bash docker logs xray-onekey # Просмотр журналов контейнера docker exec -it xray-onekey bash # Вход в контейнер docker exec -it xray-onekey idleleo -s # Просмотр информации об установке ``` ### Полный сброс ```bash docker compose down docker volume rm xray-conf xray-cert xray-info xray-logs acme-data docker compose up -d ``` ================================================ FILE: languages/ru/LC_MESSAGES/version ================================================ 1777024070 ================================================ FILE: languages/ru/README.md ================================================ # Скрипт автоматической установки Xray — Reality / VLESS WebSocket/gRPC+TLS + Nginx [简体中文](/README.md) | [English](/languages/en/README.md) | [Français](/languages/fr/README.md) | Русский | [فارسی](/languages/fa/README.md) | [한국어](/languages/ko/README.md) [![GitHub stars](https://img.shields.io/github/stars/hello-yunshu/Xray_bash_onekey?color=%230885ce)](https://github.com/hello-yunshu/Xray_bash_onekey/stargazers) [![GitHub forks](https://img.shields.io/github/forks/hello-yunshu/Xray_bash_onekey?color=%230885ce)](https://github.com/hello-yunshu/Xray_bash_onekey/network) [![GitHub issues](https://img.shields.io/github/issues/hello-yunshu/Xray_bash_onekey)](https://github.com/hello-yunshu/Xray_bash_onekey/issues) > Спасибо за разрешение на некоммерческое развитие открытого исходного кода JetBrains ## Возможности * Введите `idleleo` для управления скриптом ([Узнать предысторию `idleleo`](https://github.com/hello-yunshu/Xray_bash_onekey/wiki/%D0%98%D1%81%D1%82%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5-%D0%9B%D0%B8%D1%86%D0%BE-%D0%97%D0%B0-%D0%A2%D1%83%D0%BC%D0%B0%D0%BD%D0%BE%D0%BC)) * Точный многоязычный перевод на базе Qwen-MT-Plus AI * Поддержка протокола Reality с рекомендуемым фронтендом Nginx (устанавливается через скрипт) * Встроенная защита fail2ban (устанавливается через скрипт) * Использует [предложение](https://github.com/XTLS/Xray-core/issues/91) ссылки для обмена от [@DuckSoft](https://github.com/DuckSoft) (beta), совместимое с Qv2ray, V2rayN, V2rayNG * Использует предложение проекта [XTLS](https://github.com/XTLS/Xray-core/issues/158), следуя стандарту [UUIDv5](https://tools.ietf.org/html/rfc4122#section-4.3), поддерживая маппинг пользовательских строк в UUID VLESS * Поддержка протокола gRPC: [Использование протокола gRPC](https://hey.run/archives/xrayjin-jie-wan-fa---shi-yong-grpcxie-yi) * Поддержка балансировки нагрузки Reality / ws/gRPC: - [Развёртывание балансировщика нагрузки Reality](https://hey.run/archives/bushu-reality-balance) - [Создание балансировщика нагрузки бэкенда](https://hey.run/archives/xrayjin-jie-wan-fa---da-jian-hou-duan-fu-wu-qi-fu-zai-jun-heng) ## Дополнительные материалы * Руководство по установке Reality: [Настройка сервера Xray Reality](https://hey.run/archives/da-jian-xray-reality-xie-yi-fu-wu-qi) * Риски протокола Reality: [Риски протокола Xray Reality](https://hey.run/archives/reality-xie-yi-de-feng-xian) * Ускорение сервера с помощью Reality: [Ускорение сервера через «уязвимость» протокола Reality](https://hey.run/archives/use-reality) ## Группа Telegram * Группа обсуждения: [Нажмите, чтобы присоединиться](https://t.me/+48VSqv7xIIFmZDZl) ## Требования * Заграничный сервер с публичным IP-адресом * Для протокола Reality: подготовьте целевой домен, соответствующий требованиям Xray * Для версии с TLS: подготовьте домен и добавьте A-запись * Прочитайте [официальную документацию Xray](https://xtls.github.io), чтобы понять Reality, TLS, WebSocket, gRPC и связанные концепции Xray * **Убедитесь, что установлен curl**: пользователи CentOS выполняют `yum install -y curl`; пользователи Debian/Ubuntu выполняют `apt install -y curl` ## Быстрая установка ```bash bash <(curl -Ss https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/install.sh) ``` ## Развёртывание Docker Поддерживается развёртывание через Docker. Образ поставляется с предустановленными Xray и Nginx, все функции оригинального скрипта доступны в контейнере. Подробности см. в [Руководстве по развёртыванию Docker](/languages/ru/DOCKER.md). ```bash git clone https://github.com/hello-yunshu/Xray_bash_onekey.git cd Xray_bash_onekey docker compose up -d docker attach xray-onekey ``` ## Важные замечания * Если вы не знакомы с настройками, используйте значения по умолчанию для необязательных полей (просто нажимайте Enter) * Пользователям Cloudflare следует включать CDN только после завершения установки * Этот скрипт требует базовых знаний Linux и компьютерных сетей * Поддерживаются Debian 12+ / Ubuntu 24.04+ / CentOS Stream 8+; некоторые шаблоны CentOS могут иметь проблемы с компиляцией — при возникновении проблем рекомендуется сменить ОС * Рекомендуется развёртывать только один прокси на сервер и использовать порт 443 по умолчанию * Маппинг пользовательских строк в UUIDv5 требует поддержки на стороне клиента * Используйте этот скрипт в чистой среде; новичкам не рекомендуется использовать CentOS * Эта программа зависит от Nginx — пользователи, установившие Nginx через [LNMP](https://lnmp.org) или аналогичные скрипты, должны учитывать возможные конфликты * Не используйте этот скрипт в продакшене, не проверив его работоспособность * Автор предоставляет ограниченную поддержку (потому что не очень умён) ## Благодарности * Основано на [wulabing/V2Ray_ws-tls_bash_onekey](https://github.com/wulabing/V2Ray_ws-tls_bash_onekey) * Скрипт ускорения TCP из [ylx2016/Linux-NetSpeed](https://github.com/ylx2016/Linux-NetSpeed) ## Настройка сертификатов **Пользовательский сертификат**: Переименуйте файлы crt и key в `xray.crt` и `xray.key`, затем поместите их в каталог `/etc/idleleo/cert` (создайте его при отсутствии). Обратите внимание на права доступа и срок действия — пользовательские сертификаты необходимо продлевать вручную после истечения срока. **Автоматический сертификат**: Скрипт поддерживает автоматическую генерацию сертификатов Let's Encrypt (действительны 3 месяца), с теоретической поддержкой автоматического продления. ## Просмотр конфигурации клиента ```bash cat /etc/idleleo/info/xray_info.inf ``` ## О Xray * Xray — отличный инструмент сетевого прокси с открытым исходным кодом, поддерживающий Windows, macOS, Android, iOS, Linux и другие платформы * Этот скрипт обеспечивает полную настройку в один клик — после успешного завершения всех процессов просто настройте клиент по результатам вывода * **Настоятельно рекомендуется** полностью понять рабочий процесс и принципы программы ## Управление службами | Действие | Команда | |----------|---------| | Запустить Xray | `systemctl start xray` | | Остановить Xray | `systemctl stop xray` | | Запустить Nginx | `systemctl start nginx` | | Остановить Nginx | `systemctl stop nginx` | ## Каталоги | Элемент | Путь | |---------|------| | Конфигурация сервера Xray | `/etc/idleleo/conf/xray/config.json` | | Каталог Nginx | `/usr/local/nginx` | | Файлы сертификатов | `/etc/idleleo/cert/xray.key`, `/etc/idleleo/cert/xray.crt` | | Информация о конфигурации и т.д. | `/etc/idleleo` | ================================================ FILE: languages/zh_CN/LC_MESSAGES/version ================================================ 1737125065 ================================================ FILE: po/POTFILES.in ================================================ install.sh fail2ban_manager.sh file_manager.sh ================================================ FILE: po/cache_English.json ================================================ { "错误": "error", "警告": "warning", "未安装": "not installed", "日志文件归档失败": "log file archiving failed", "日志文件已轮转并归档为": "the log file has been rotated and archived as", "当前系统为": "current system is", "不在支持的系统列表内, 安装中断": "not in the list of supported systems, installation interrupted", "无法获取远程语言文件信息": "unable to retrieve remote language file information", "正在更新语言文件": "updating language files", "语言文件更新失败": "language file update failed", "语言文件无效": "invalid language file", "版本文件更新失败": "failed to update the version file", "语言文件更新完成": "language file update completed", "正在安装": "installing", "安装失败": "installation failed", "将使用默认语言": "will use the default language", "未找到": "not found", "不支持的语言": "unsupported language", "发现语言文件更新": "language file update detected", "完成": "complete", "失败": "failure", "在线版本检测失败, 请稍后再试": "online version check failed, please try again later", "安装": "installation", "已安装": "installed", "自启动配置": "auto-start configuration", "链接库安装": "library installation", "值为空或超出范围, 请重新输入": "the value is empty or out of range, please re-enter", "值为空, 请重新输入": "the value is empty, please re-enter", "确定端口": "confirm port", "请输入端口": "please enter the port", "默认值": "default value", "请输入 0-65535 之间的值": "please enter a value between 0 and 65535", "端口不允许使用, 请重新输入": "the port is not allowed to be used, please re-enter", "请选择安装协议": "please select the installation agreement", "默认": "default", "请输入": "please enter", "请输入有效的数字": "please enter a valid number", "是否添加简单 ws/gRPC 协议 用于负载均衡": "whether to add simple ws/grpc protocol for load balancing", "如不清楚具体用途, 请勿选择": "if the specific purpose is unclear, please do not select", "已跳过添加简单 ws/gRPC 协议": "skipping adding simple ws/grpc protocol", "是否需要自定义": "whether customization is needed", "请勿与其他端口相同": "please do not use the same port as others", "是否需要设置防火墙": "whether a firewall needs to be set up", "防火墙": "firewall", "重启完成": "restart completed", "开放防火墙相关端口": "open the firewall for related ports", "若修改配置, 请注意关闭防火墙相关端口": "if modifying the configuration, please remember to close the firewall-related ports", "配置": "configuration", "跳过防火墙设置": "skip firewall settings", "伪装路径": "camouflage path", "不需要": "not needed", "用户名": "username", "请输入正确的 email": "please enter the correct email", "是否需要自定义字符串映射": "whether custom string mapping is needed", "请输入自定义字符串": "please enter a custom string", "最多30字符": "up to 30 characters", "自定义字符串": "custom string", "映射字符串": "mapping string", "检测到 target 域名已配置, 是否保留": "target domain name has been configured, do you want to keep it", "请输入一个域名": "please enter a domain name", "域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用": "domain names must support tlsv1.3, x25519, and h2, and should not use redirection", "确认域名符合要求后请输入": "after confirming that the domain name meets the requirements, please enter", "正在检测域名请等待": "checking domain name, please wait", "该域名不支持": "this domain name is not supported", "该域名发生了跳转": "the domain name has been redirected", "该域名可能不满足所有要求": "this domain name may not meet all requirements", "是否仍要设置此域名": "do you still want to set this domain name", "域名": "domain name", "满足所有要求": "meet all requirements", "域名的": "of the domain name", "默认为": "default is", "域名本身": "the domain name itself", "如不清楚具体用途, 请勿继续": "if you are unsure of the specific purpose, please do not proceed", "是否变更": "whether to change", "负载均衡": "load balancing", "请选择协议为 ws 或 gRPC": "please select the protocol as ws or grpc", "返回": "return", "本地文件 file_manager.sh 不存在, 正在下载": "the local file file_manager.sh does not exist, downloading now", "下载失败, 请手动下载并安装新版本": "download failed, please manually download and install the new version", "当前模式不支持此操作": "the current mode does not support this operation", "配置用途可以参考文章": "for configuration purposes, please refer to the article", "修改": "modify", "端口": "port", "不支持": "not supported", "用户名修改": "username modification", "请先删除多余的用户": "please delete the extra users first", "配置修改": "configuration modification", "检测到 Xray 的权限控制, 启动修改程序": "xray permission control detected, starting modification program", "修改完成": "modification completed", "若更新无效, 建议直接卸载再安装": "if the update is ineffective, it is recommended to uninstall and then reinstall", "部分新功能需要重新安装才可生效": "some new features require reinstallation to take effect", "检测到存在最新版": "a newer version has been detected", "脚本可能未兼容此版本": "the script may not be compatible with this version", "是否更新": "whether to update", "启动失败": "startup failed", "是否回滚到之前的版本": "whether to roll back to the previous version", "未执行回滚操作": "rollback operation not executed", "正在回滚": "rolling back", "已成功回滚到之前的": "successfully rolled back to the previous", "版本": "version", "回滚失败": "rollback failed", "重装": "reinstall", "Reality 协议有流量偷跑的风险": "reality protocol has the risk of traffic leakage", "已跳过安装": "installation skipped", "已存在, 跳过编译安装过程": "already exists, skip the compilation and installation process", "检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装": "other nginx packages installed have been detected. continuing the installation will cause conflicts. please resolve this issue before proceeding with the installation", "即将下载已编译的": "about to download the compiled", "不支持的系统架构": "unsupported system architecture", "当前安装模式不需要": "the current installation mode is not required", "备份旧版": "backup old version", "删除旧版": "delete old version", "是否保留原 Nginx 配置文件": "whether to keep the original nginx configuration file", "原配置文件已删除": "the original configuration file has been deleted", "原配置文件已保留": "the original configuration file has been retained", "删除": "delete", "备份": "backup", "已为最新版": "already updated to the latest version", "设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)": "set up a background scheduled automatic update program (including: script/xray/nginx)", "设置自动更新": "set automatic update", "已设置自动更新": "auto-update has been set", "是否关闭": "whether to close", "删除自动更新": "delete automatic update", "安装 SSL 证书生成脚本依赖": "install ssl certificate generation script dependencies", "安装 SSL 证书生成脚本": "install ssl certificate generation script", "检测到原域名配置存在, 是否跳过域名设置": "detected existing original domain configuration, do you want to skip domain settings", "无法获取公网IP地址": "unable to obtain public ip address", "安装终止": "installation terminated", "已跳过域名设置": "domain setting skipped", "确定域名信息": "confirm domain name information", "请输入你的域名信息": "please enter your domain name information", "请选择公网IP(IPv4/IPv6)或手动输入域名": "please select a public ip (ipv4/ipv6) or manually enter a domain name", "正在获取公网IP信息, 请耐心等待": "retrieving public ip information, please wait patiently", "此选项用于服务器商仅提供域名访问服务器": "this option is used when the server provider only provides domain name access to the server", "注意服务器商域名添加 CNAME 记录": "note: add a cname record for the server provider's domain", "域名DNS解析IP": "domain name dns resolution ip", "公网IP/域名": "public ip/domain name", "域名DNS解析IP与公网IP匹配": "domain name dns resolves ip matches public ip", "请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray": "please make sure the domain has added the correct a/aaaa record; otherwise, xray will not function properly", "域名DNS解析IP与公网IP不匹配, 请选择": "the domain name's dns resolution ip does not match the public ip. please select", "继续安装": "continue installation", "重新输入": "re-enter", "终止安装": "cancel installation", "检测到原IP配置存在, 是否跳过IP设置": "original ip configuration detected. skip ip setting", "已跳过IP设置": "ip setting skipped", "确定公网IP信息": "confirm public ip information", "请选择公网IP为IPv4或IPv6": "please select public ip as ipv4 or ipv6", "手动输入": "manual input", "端口未被占用": "the port is not in use", "检测到": "detected", "端口被占用": "port is occupied", "以下为": "the following is", "端口占用信息": "port occupation information", "尝试终止占用的进程": "attempt to terminate the occupied process", "证书测试签发成功, 开始正式签发": "certificate test issuance successful, starting official issuance", "证书测试签发失败": "certificate test issuance failed", "证书生成成功": "certificate generated successfully", "证书配置成功": "certificate configured successfully", "证书生成失败": "certificate generation failed", "检测到 Xray 配置过多用户": "detected that xray is configured with too many users", "是否保留原 Xray 配置文件": "keep the original xray configuration file", "添加简单 ws/gRPC 协议": "add simple ws/grpc protocol", "检测到配置文件, 是否读取配置文件": "configuration file detected. do you want to read the configuration file", "已删除配置文件": "configuration file deleted", "已保留配置文件": "configuration file has been retained", "检测到当前安装模式与配置文件的安装模式不一致": "detected that the current installation mode is inconsistent with the installation mode in the configuration file", "是否保留配置文件 (强烈不建议)": "keep configuration file (strongly not recommended)", "请务必确保配置文件正确": "please make sure the configuration file is correct", "检测到配置文件不完整, 是否保留配置文件": "incomplete configuration file detected. do you want to keep the configuration file", "配置删除": "configuration deletion", "设置 Nginx 开机自启": "set nginx to start automatically on boot", "设置": "settings", "开机自启": "startup on boot", "关闭 Nginx 开机自启": "disable nginx from starting automatically on boot", "关闭": "close", "重启": "restart", "启动": "start", "停止": "stop", "新版本已自动设置证书自动更新": "the new version has automatically set up certificate auto-updating", "老版本请及时删除 废弃的 改版证书自动更新": "please delete the old version in a timely manner. the obsolete certificate will be automatically updated after the revision", "已设置改版证书自动更新": "the certificate renewal has been set to update automatically", "是否需要删除改版证书自动更新 (请删除)": "whether to delete the certificate auto-update for the revised version (please delete)", "删除改版证书自动更新": "delete version certificate automatic update", "已过期": "expired", "证书生成日期": "certificate generation date", "证书生成天数": "number of days for certificate generation", "证书剩余天数": "remaining days of certificate", "是否立即更新证书": "whether to update the certificate immediately", "证书签发工具不存在, 请确认是否证书为脚本签发": "the certificate issuance tool does not exist. please confirm whether the certificate was issued by a script", "证书更新": "certificate update", "本地文件 fail2ban_manager.sh 不存在, 正在下载": "the local file fail2ban_manager.sh does not exist, downloading", "检测到日志文件大小如下:": "the log file size is detected as follows", "即将清除": "about to clear", "日志清理": "log cleanup", "保留现有自动清理日志任务": "retain the existing automatic log cleanup task", "是否需要设置自动清理日志": "whether to set automatic log cleanup", "清空屏幕": "clear the screen", "将在 每周三 04:00 自动清空日志": "logs will be automatically cleared every wednesday at 04:00", "已设置自动清理日志任务": "automatic log cleanup task has been set", "是否需要删除现有自动清理日志任务": "do you need to delete the existing automatic log cleanup task", "删除自动清理日志任务": "delete automatic log cleanup task", "设置自动清理日志": "set up automatic log cleanup", "配置分享": "configuration sharing", "分享链接": "share link", "二维码": "qr code", "生成分享链接": "generate share link", "安装成功": "installation successful", "目前分享链接规范为实验阶段, 请自行判断是否适用": "currently, the sharing link specification is in the experimental phase; please determine its applicability on your own", "配置信息": "configuration information", "主机": "host", "用户id": "user id", "加密": "encryption", "传输协议": "transmission protocol", "底层传输安全": "underlying transmission security", "路径": "path", "不要落下": "don't fall behind", "不需要加": "no need to add", "流控": "flow control", "即将申请证书, 支持使用自定义证书": "certificate will be applied soon, supporting the use of custom certificates", "如需使用自定义证书, 请按如下步骤:": "if you need to use a custom certificate, please follow the steps below", "1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)": "1. rename the certificate files: private key (xray.key), certificate (xray.crt)", "2. 将重命名后的证书文件放入": "2. place the renamed certificate file into", "目录后再运行脚本": "run the script after the directory", "3. 重新运行脚本": "3. re-run the script", "是否继续": "whether to continue", "所有证书文件均已存在, 是否保留": "all certificate files already exist, do you want to keep them", "已删除": "deleted", "证书应用": "certificate application", "证书文件已存在, 是否保留": "the certificate file already exists, do you want to keep it", "证书签发残留文件已存在, 是否保留": "the certificate issuance residual file already exists, do you want to keep it", "添加": "add", "请选择支持的 TLS 版本": "please select the supported tls version", "兼容模式": "compatibility mode", "安全模式": "safe mode", "已切换至": "already switched to", "请先安装": "please install first", "此模式不支持修改": "this mode does not support modification", "即将显示用户, 一次仅能显示一个": "users will be displayed soon, only one user can be displayed at a time", "请选择显示用户使用的协议": "please select the protocol used by the user to display", "请选择要显示的用户编号": "please select the user number to display", "选择错误": "selecting incorrectly", "请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户": "please directly select [view xray configuration information] in the main menu to display the primary user", "请先检测 Xray 是否正确安装": "please first check if xray is installed correctly", "是否继续显示用户": "whether to continue displaying the user", "此模式不支持删除用户": "this mode does not support deleting users", "即将添加用户, 一次仅能添加一个": "adding users is coming soon, but only one user can be added at a time", "请选择添加用户使用的协议": "please select the protocol used for adding users", "添加用户": "add user", "是否继续添加用户": "whether to continue adding users", "此模式不支持添加用户": "this mode does not support adding users", "即将删除用户, 一次仅能删除一个": "deleting user, only one at a time", "请选择删除用户使用的协议": "please select the agreement used by the deleted user", "请选择要删除的用户编号": "please select the user number to delete", "主用户无法删除": "the main user cannot be deleted", "删除用户": "delete user", "是否继续删除用户": "whether to continue deleting the user", "文件不存在": "the file does not exist", "已配置 Xray 流量统计": "xray traffic statistics have been configured", "是否需要关闭此功能": "do you need to disable this feature", "关闭 Xray 流量统计": "disable xray traffic statistics", "流量统计需要使用": "traffic statistics need to be used", "可能会影响 Xray 性能": "may affect x-ray performance", "设置 Xray 流量统计": "set up xray traffic statistics", "已卸载": "uninstalled", "是否卸载": "whether to uninstall", "是否删除所有脚本文件": "delete all script files", "已删除所有文件": "all files have been deleted", "ヾ( ̄▽ ̄) 拜拜~": "( ̄▽ ̄)ノ bye bye~", "已保留脚本文件 (包含 SSL 证书等)": "script file has been retained (including ssl certificate, etc.)", "是否保留配置文件": "whether to keep the configuration file", "已清空证书遗留文件": "certificate residual files have been cleared", "秒后": "seconds later", "检测最新版本失败": "failed to detect the latest version", "新版本": "new version", "更新内容": "update content", "存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新": "a new version is available, but the version change is significant and may cause compatibility issues. do you want to update", "存在新版本, 是否更新": "new version exists, update", "检测 脚本 最新版本失败": "failed to detect the latest version of the script", "脚本 版本差别过大, 跳过更新": "script version difference is too large, skipping update", "更新完成": "update completed", "脚本版本变化较大, 若服务无法正常运行请卸载后重装": "the script version has changed significantly. if the service cannot run properly, please uninstall and reinstall it", "当前版本为最新版本": "the current version is the latest version", "下载最新脚本": "download the latest script", "该选项暂时无法使用": "this option is temporarily unavailable", "此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装": "this mode is recommended for load balancing; it is generally not recommended for use. do you want to install", "变更": "change", "负载均衡配置": "load balancing configuration", "清除日志文件": "clear log files", "查看证书状态": "view certificate status", "更新证书有效期": "update certificate expiration date", "设置证书自动更新": "set certificate auto-update", "设置 Fail2ban 防暴力破解": "set up fail2ban to prevent brute-force attacks", "显示帮助": "show help", "更新": "update", "脚本卸载": "script uninstallation", "显示安装信息": "show installation information", "加速": "accelerate", "显示": "display", "访问信息": "access information", "错误信息": "error message", "脚本版本变化较大, 可能存在不兼容情况, 是否继续使用": "the script version has changed significantly, and there may be compatibility issues. do you want to continue using it", "检测失败": "detection failed", "有新版": "there is a new version", "最新版": "latest version", "版本未知": "version unknown", "运行中": "running", "无需测试": "no testing required", "未运行": "not running", "无法连通": "unable to connect", "本地正常": "locally normal", "脚本维护中.. 请稍后再试": "script is under maintenance. please try again later", "无法检测所需依赖的在线版本, 请稍后再试": "the required online version of the dependency cannot be detected. please try again later", "请输入数字": "please enter a number", "请输入 1 到 6 之间的有效数字": "please enter a valid number between 1 and 6", "无效的选择": "invalid selection", "请输入备份名称": "please enter the backup name", "不需要后缀": "no suffix needed", "报错信息": "error message", "备份完整性可能受到影响, 请检查上述错误信息": "backup integrity may be affected. please check the error messages above", "备份失败": "backup failed", "备份成功": "backup successful", "请确保备份文件在目录": "please ensure the backup file is in the directory", "没有找到备份文件": "backup file not found", "发现多个备份文件": "found multiple backup files", "将使用最新的文件进行恢复": "the latest file will be used for recovery", "找到最新备份文件": "find the latest backup file", "恢复备份": "restore backup", "恢复成功": "recovery successful", "记得安装": "remember to install", "恢复失败": "recovery failed", "安装管理脚本": "install management script", "作者": "author", "当前模式": "current mode", "当前语言": "current language", "可以使用": "can be used", "命令管理脚本": "command management script", "版本检测": "version detection", "脚本": "script", "运行状态": "running status", "连通性": "connectivity", "安装向导": "installation wizard", "配置变更": "configuration change", "用户管理": "user management", "查看": "view", "用户": "user", "查看信息": "view information", "实时访问日志": "real-time access log", "实时错误日志": "real-time error log", "服务相关": "service-related", "所有服务": "all services", "证书相关": "certificate-related", "证书状态": "certificate status", "证书有效期": "certificate validity period", "证书自动更新": "certificate auto update", "其他选项": "other options", "自动更新": "automatic update", "防暴力破解": "anti-brute force", "流量统计": "traffic statistics", "清除": "clear", "日志文件": "log file", "测试": "test", "服务器网速": "server network speed", "备份恢复": "backup and restore", "全部文件": "all files", "恢复": "recovery", "卸载向导": "uninstall wizard", "卸载": "uninstall", "清空": "empty", "证书文件": "certificate file", "退出": "exit", "请输入选项": "please enter an option", "不建议": "not recommended", "回到菜单": "back to menu", "用于防止暴力破解": "used to prevent brute-force attacks", "主菜单": "main menu", "管理": "management", "状态": "status", "请选择一个选项": "please select an option", "已经安装, 跳过安装步骤": "already installed, skip the installation step", "未安装, 请先安装": "not installed, please install first", "规则": "rule", "跳过启用": "skip activation", "已启用": "enabled", "请选择": "please select", "操作": "operation", "添加自定义规则": "add custom rule", "请输入新的": "please enter the new one", "名称": "name", "请输入日志路径": "please enter the log path", "请输入最大重试次数": "please enter the maximum number of retries", "最大重试次数必须在 1 到 99 之间": "the maximum number of retries must be between 1 and 99", "请输入封禁时间": "please enter the ban time", "秒": "second", "封禁时间必须在 1 到 8640000 秒之间": "the ban duration must be between 1 and 8,640,000 seconds", "自定义规则添加成功": "custom rule added successfully", "重启以应用新规则": "restart to apply new rules", "停止成功": "stopped successfully", "总体状态": "overall status", "默认启用的 Jail 状态": "default enabled jail status", "封锁情况": "lockdown situation", "新版本可用": "new version available", "当前版本": "current version", "请访问": "please visit", "查看更新说明": "view update notes", "正在下载新版本": "downloading the new version", "下载完成, 请重新运行脚本": "download completed, please run the script again", "跳过更新": "skip update", "当前已经是最新版本": "it is already the latest version", "用法": "usage", "文件扩展名": "file extension", "目录路径": "directory path", "目录": "table of contents", "不存在, 请检查路径": "does not exist, please check the path", "列出所有": "list all", "文件": "file", "文件名": "file name", "序号": "serial number", "请输入网址 (例如 hey.run)": "please enter the url (e.g., hey.run)", "不要包含 http:// 或 https:// 开头": "do not include http:// or https:// at the beginning", "已创建": "created", "请输入主机": "please enter the host", "请输入权重": "please enter the weight", "追加完成": "additional completion", "请输入要编辑的文件编号": "please enter the file number to edit", "未安装, 正在尝试安装": "not installed, attempting to install", "已编辑": "edited", "请输入要删除的文件编号": "please enter the file number to delete", "不支持的文件扩展名": "unsupported file extension", "创建一个新的": "create a new", "编辑一个已存在的": "edit an existing", "删除一个已存在的": "delete an existing", "无效选项, 请重试": "invalid option, please try again", "重启成功": "restart successful", "重启失败": "restart failed", "请检查配置文件是否有误": "please check if there is an error in the configuration file", "未启用或配置异常": "not enabled or configuration exception", "是否添加 Reality 负载均衡": "whether to add reality load balancing", "使用此功能前,建议先阅读作者教程": "before using this feature, it is recommended to first read the author's tutorial", "已跳过": "skipped", "如用作 Reality 负载均衡二级服务器则无需安装": "if used as a secondary server for reality load balancing, installation is not required", "是否额外安装 nginx 前置保护": "whether to additionally install nginx as a front-end protection", "推荐": "recommend", "检测到已开启 Reality 负载均衡": "reality load balancing has been detected as enabled", "如用作 Reality 负载均衡主服务器必须安装": "if used as a reality load balancing master server, it must be installed", "检测到已安装": "installed detected", "已取消卸载": "uninstallation canceled", "下载失败": "download failed", "下载成功": "download successful", "解压失败": "decompression failed", "链接分享": "link sharing", "修改语言": "change language", "此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装": "this mode is only intended for traffic forwarding and is not recommended for other use cases. do you want to install it", "信息": "information", "配置不完整, 退出更新": "configuration is incomplete; exiting update", "配置不存在, 退出更新": "configuration does not exist; exiting update", "无效的选择, 请重试": "invalid selection, please try again", "systemd 无法读取 SSH 日志": "systemd cannot read ssh logs", "网址不能包含 http:// 或 https:// 前缀": "the url cannot contain the http:// or https:// prefix", "日志文件清空失败": "failed to clear the log file", "当前用户是 root 用户, 开始安装": "the current user is the root user. starting installation", "当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本": "the current user is not the root user. please switch to the root user and then run the script again", "已跳过设置自动清理日志": "automatic log cleanup has been skipped", "脚本更新失败": "script update failed", "更新失败": "update failed", "更新脚本": "update script", "更新向导": "update wizard", "频繁更新 Nginx, 请确认 Nginx 有更新的必要": "nginx is updated frequently. please confirm whether an update is actually necessary", "开始更新": "starting update", "建议选择 TLSv1.3 only (安全模式)": "we recommend selecting “tlsv1.3 only (secure mode).”", "由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)": "since h3 only supports tlsv1.3, it only supports tlsv1.3 (secure mode)", "请选择 TLS 版本": "please select the tls version", "建议选择 TLSv1.3 (安全模式)": "we recommend selecting tlsv1.3 (secure mode)", "当前模式不支持": "current mode not supported", "Nginx配置文件不存在 或 当前模式不支持": "the nginx configuration file does not exist, or the current mode is not supported", "已禁用": "disabled", "管理模块": "management module", "服务管理": "service management", "管理 Fail2ban 模块": "manage the fail2ban module", "未找到任何模块化配置文件": "no modular configuration files were found", "模块名称": "module name", "请选择要管理的模块": "please select the module you want to manage", "启用": "enable", "禁用": "disable", "模块": "module", "操作已取消": "operation canceled", "可能自动更新后有兼容问题, 谨慎启用": "there may be compatibility issues after an automatic update, so enable it with caution", "是否启用": "enable or not", "是否": "whether… or not", "是否下载并安装新版本": "do you want to download and install the new version", "无法获取网卡, 将监控所有网卡": "unable to obtain the network adapter; monitoring all network adapters", "监控网卡": "monitor network card", "监控端口": "monitoring port", "按 q 键退出 iftop": "press the q key to exit iftop", "实时流量": "real-time traffic" } ================================================ FILE: po/cache_French.json ================================================ { "错误": "erreur", "警告": "avertissement", "未安装": "non installé", "日志文件归档失败": "échec de l'archivage du fichier journal", "日志文件已轮转并归档为": "le fichier journal a été tourné et archivé sous ", "当前系统为": "le système actuel est", "不在支持的系统列表内, 安装中断": "non inclus dans la liste des systèmes pris en charge, l'installation est interrompue", "无法获取远程语言文件信息": "impossible d'obtenir les informations sur le fichier de langue distant", "正在更新语言文件": "mise à jour du fichier de langue en cours", "语言文件更新失败": "échec de la mise à jour du fichier de langue", "语言文件无效": "fichier de langue invalide", "版本文件更新失败": "échec de la mise à jour du fichier de version", "语言文件更新完成": "mise à jour du fichier de langue terminée", "正在安装": "en cours d'installation", "安装失败": "échec de l'installation", "将使用默认语言": "utilisera la langue par défaut", "未找到": "non trouvé", "不支持的语言": "langue non prise en charge", "发现语言文件更新": "découvrir la mise à jour du fichier de langue", "完成": "terminé", "失败": "échec", "在线版本检测失败, 请稍后再试": "la vérification de la version en ligne a échoué, veuillez réessayer plus tard", "安装": "installation", "已安装": "déjà installé", "自启动配置": "configuration de démarrage automatique", "链接库安装": "installation de la bibliothèque liée", "值为空或超出范围, 请重新输入": "la valeur est vide ou hors de la plage, veuillez saisir à nouveau", "值为空, 请重新输入": "valeur vide, veuillez saisir à nouveau", "确定端口": "déterminer le port", "请输入端口": "veuillez entrer le port", "默认值": "valeur par défaut", "请输入 0-65535 之间的值": "veuillez saisir une valeur comprise entre 0 et 65535", "端口不允许使用, 请重新输入": "le port n'est pas autorisé, veuillez entrer à nouveau", "请选择安装协议": "veuillez sélectionner le contrat d'installation", "默认": "par défaut", "请输入": "veuillez entrer", "请输入有效的数字": "veuillez saisir un nombre valide", "是否添加简单 ws/gRPC 协议 用于负载均衡": "ajouter ou non le protocole simple ws/grpc pour l'équilibrage de charge", "如不清楚具体用途, 请勿选择": "si l'utilisation spécifique n'est pas claire, veuillez ne pas choisir", "已跳过添加简单 ws/gRPC 协议": "ajout du protocole simple ws/grpc déjà ignoré", "是否需要自定义": "a-t-on besoin d'une personnalisation ", "请勿与其他端口相同": "veuillez ne pas utiliser le même port que les autres", "是否需要设置防火墙": "doit-on configurer un pare-feu ", "防火墙": "pare-feu", "重启完成": "redémarrage terminé", "开放防火墙相关端口": "ouvrir les ports du pare-feu correspondants", "若修改配置, 请注意关闭防火墙相关端口": "si vous modifiez la configuration, veuillez veiller à désactiver les ports associés au pare-feu", "配置": "configuration", "跳过防火墙设置": "passer la configuration du pare-feu", "伪装路径": "chemin de camouflage", "不需要": "pas besoin", "用户名": "nom d'utilisateur", "请输入正确的 email": "veuillez saisir une adresse e-mail correcte", "是否需要自定义字符串映射": "a-t-on besoin d'une correspondance de chaînes personnalisée ", "请输入自定义字符串": "veuillez saisir une chaîne personnalisée", "最多30字符": "maximum 30 caractères", "自定义字符串": "chaîne personnalisée", "映射字符串": "chaîne de mappage", "检测到 target 域名已配置, 是否保留": "cible détectée, domaine déjà configuré, souhaitez-vous le conserver ", "请输入一个域名": "veuillez saisir un nom de domaine", "域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用": "le nom de domaine doit prendre en charge tlsv1.3, x25519 et h2, et ne pas être utilisé pour les redirections", "确认域名符合要求后请输入": "après avoir confirmé que le nom de domaine est conforme aux exigences, veuillez entrer", "正在检测域名请等待": "vérification du nom de domaine en cours, veuillez patienter", "该域名不支持": "ce nom de domaine n'est pas pris en charge", "该域名发生了跳转": "ce nom de domaine a subi une redirection", "该域名可能不满足所有要求": "ce nom de domaine pourrait ne pas répondre à toutes les exigences", "是否仍要设置此域名": "voulez-vous toujours configurer ce nom de domaine ", "域名": "nom de domaine", "满足所有要求": "satisfaire toutes les exigences", "域名的": "du nom de domaine", "默认为": "par défaut pour", "域名本身": "le nom de domaine lui-même", "如不清楚具体用途, 请勿继续": "si l'utilisation spécifique n'est pas claire, veuillez ne pas continuer", "是否变更": "est-ce que cela change", "负载均衡": "équilibrage de charge", "请选择协议为 ws 或 gRPC": "veuillez sélectionner le protocole ws ou grpc", "返回": "retour", "本地文件 file_manager.sh 不存在, 正在下载": "le fichier local file_manager.sh n'existe pas, téléchargement en cours", "下载失败, 请手动下载并安装新版本": "échec du téléchargement, veuillez télécharger manuellement et installer la nouvelle version", "当前模式不支持此操作": "le mode actuel ne prend pas en charge cette opération", "配置用途可以参考文章": "pour la configuration d'utilisation, vous pouvez consulter l'article", "修改": "modifier", "端口": "port", "不支持": "ne prend pas en charge", "用户名修改": "modification du nom d'utilisateur", "请先删除多余的用户": "veuillez d'abord supprimer les utilisateurs en trop", "配置修改": "modification de la configuration", "检测到 Xray 的权限控制, 启动修改程序": "contrôle d'autorisation xray détecté, lancement du programme de modification", "修改完成": "modification terminée", "若更新无效, 建议直接卸载再安装": "si la mise à jour n'est pas effective, il est recommandé de désinstaller puis réinstaller directement", "部分新功能需要重新安装才可生效": "certaines nouvelles fonctionnalités nécessitent une réinstallation pour entrer en vigueur", "检测到存在最新版": "dernière version détectée", "脚本可能未兼容此版本": "le script pourrait ne pas être compatible avec cette version", "是否更新": "mettre à jour ou non", "启动失败": "départ échoué", "是否回滚到之前的版本": "revenir à la version précédente ", "未执行回滚操作": "opération de rollback non effectuée", "正在回滚": "en train de revenir en arrière", "已成功回滚到之前的": "rétrogradé avec succès à l'ancien", "版本": "version", "回滚失败": "échec du retour en arrière", "重装": "réinstallation", "Reality 协议有流量偷跑的风险": "le protocole reality présente un risque de fuite de trafic", "已跳过安装": "installation ignorée", "已存在, 跳过编译安装过程": "déjà existant, sauter le processus de compilation et d'installation", "检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装": "un nginx installé par un autre paquet a été détecté. la poursuite de l'installation entraînera des conflits. veuillez résoudre ce problème avant d'installer", "即将下载已编译的": "téléchargement imminent du compilé", "不支持的系统架构": "architecture système non prise en charge", "当前安装模式不需要": "le mode d'installation actuel n'est pas nécessaire", "备份旧版": "sauvegarder l'ancienne version", "删除旧版": "supprimer l'ancienne version", "是否保留原 Nginx 配置文件": "conserver le fichier de configuration nginx original ", "原配置文件已删除": "le fichier de configuration d'origine a été supprimé", "原配置文件已保留": "le fichier de configuration d'origine a été conservé", "删除": "supprimer", "备份": "sauvegarde", "已为最新版": "déjà à la dernière version", "设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)": "configurer un programme de mise à jour automatique en arrière-plan (incluant : script/xray/nginx)", "设置自动更新": "configurer la mise à jour automatique", "已设置自动更新": "mise à jour automatique configurée", "是否关闭": "fermer ou non", "删除自动更新": "supprimer la mise à jour automatique", "安装 SSL 证书生成脚本依赖": "installer les dépendances du script de génération de certificat ssl", "安装 SSL 证书生成脚本": "installer le script de génération de certificat ssl", "检测到原域名配置存在, 是否跳过域名设置": "la configuration du domaine d'origine a été détectée. voulez-vous ignorer la configuration du domaine ", "无法获取公网IP地址": "impossible d'obtenir une adresse ip publique", "安装终止": "installation terminée", "已跳过域名设置": "configuration du domaine ignorée", "确定域名信息": "déterminer les informations du domaine", "请输入你的域名信息": "veuillez saisir les informations de votre domaine", "请选择公网IP(IPv4/IPv6)或手动输入域名": "veuillez sélectionner une adresse ip publique (ipv4/ipv6) ou saisir manuellement un nom de domaine", "正在获取公网IP信息, 请耐心等待": "obtention des informations sur l'adresse ip publique, veuillez patienter", "此选项用于服务器商仅提供域名访问服务器": "cette option est utilisée lorsque le fournisseur de serveur ne fournit que l'accès au serveur via un nom de domaine", "注意服务器商域名添加 CNAME 记录": "veuillez noter que le fournisseur de serveur doit ajouter un enregistrement cname au nom de domaine", "域名DNS解析IP": "résolution dns de nom de domaine vers ip", "公网IP/域名": "adresse ip publique/domaine", "域名DNS解析IP与公网IP匹配": "le dns du nom de domaine résout l'ip correspondant à l'adresse ip publique", "请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray": "veuillez vous assurer que les enregistrements a/aaaa corrects ont été ajoutés au domaine, sinon xray ne pourra pas fonctionner normalement", "域名DNS解析IP与公网IP不匹配, 请选择": "l'adresse ip obtenue par la résolution dns du nom de domaine ne correspond pas à l'adresse ip publique, veuillez sélectionner", "继续安装": "continuer l'installation", "重新输入": "saisir à nouveau", "终止安装": "arrêter l'installation", "检测到原IP配置存在, 是否跳过IP设置": "configuration ip originale détectée, souhaitez-vous ignorer la configuration ip ", "已跳过IP设置": "paramètres ip ignorés", "确定公网IP信息": "déterminer les informations sur l'adresse ip publique", "请选择公网IP为IPv4或IPv6": "veuillez sélectionner une adresse ip publique en ipv4 ou ipv6", "手动输入": "saisie manuelle", "端口未被占用": "le port n'est pas occupé", "检测到": "détecté", "端口被占用": "le port est occupé", "以下为": "voici", "端口占用信息": "informations sur l'utilisation du port", "尝试终止占用的进程": "essayez de terminer le processus occupé", "证书测试签发成功, 开始正式签发": "test de certificat émis avec succès, début de la délivrance officielle", "证书测试签发失败": "échec de la signature du certificat de test", "证书生成成功": "génération de certificat réussie", "证书配置成功": "configuration du certificat réussie", "证书生成失败": "échec de la génération du certificat", "检测到 Xray 配置过多用户": "détection d'un nombre excessif d'utilisateurs configurés pour xray", "是否保留原 Xray 配置文件": "conserver le fichier de configuration xray original ", "添加简单 ws/gRPC 协议": "ajouter le protocole simple ws/grpc", "检测到配置文件, 是否读取配置文件": "fichier de configuration détecté, souhaitez-vous lire le fichier de configuration ", "已删除配置文件": "profil supprimé", "已保留配置文件": "profil déjà réservé", "检测到当前安装模式与配置文件的安装模式不一致": "le mode d'installation actuel est détecté comme étant incompatible avec le mode d'installation du profil", "是否保留配置文件 (强烈不建议)": "conserver le fichier de configuration (fortement déconseillé)", "请务必确保配置文件正确": "veuillez vous assurer que le fichier de configuration est correct", "检测到配置文件不完整, 是否保留配置文件": "fichier de configuration détecté incomplet, souhaitez-vous conserver le fichier de configuration ", "配置删除": "configuration supprimée", "设置 Nginx 开机自启": "configurer le démarrage automatique de nginx", "设置": "configurer", "开机自启": "démarrage automatique", "关闭 Nginx 开机自启": "désactiver le démarrage automatique de nginx", "关闭": "fermer", "重启": "redémarrer", "启动": "démarrer", "停止": "arrêter", "新版本已自动设置证书自动更新": "la nouvelle version a automatiquement configuré la mise à jour automatique des certificats", "老版本请及时删除 废弃的 改版证书自动更新": "veuillez supprimer rapidement les anciennes versions. les certificats obsolètes seront automatiquement mis à jour", "已设置改版证书自动更新": "la mise à jour automatique du certificat de révision est déjà configurée", "是否需要删除改版证书自动更新 (请删除)": "doit-on supprimer la mise à jour automatique du certificat de révision (veuillez supprimer) ", "删除改版证书自动更新": "supprimer la mise à jour automatique du certificat révisé", "已过期": "dépassé", "证书生成日期": "date de génération du certificat", "证书生成天数": "nombre de jours pour la génération du certificat", "证书剩余天数": "nombre de jours restants du certificat", "是否立即更新证书": "mettre à jour immédiatement le certificat ", "证书签发工具不存在, 请确认是否证书为脚本签发": "l'outil de génération des certificats n'existe pas, veuillez vérifier si le certificat a été généré par un script", "证书更新": "mise à jour du certificat", "本地文件 fail2ban_manager.sh 不存在, 正在下载": "le fichier local fail2ban_manager.sh n'existe pas, téléchargement en cours", "检测到日志文件大小如下:": "taille du fichier journal détectée comme suit ", "即将清除": "bientôt effacé", "日志清理": "nettoyage des journaux", "保留现有自动清理日志任务": "conserver la tâche existante de nettoyage automatique des journaux", "是否需要设置自动清理日志": "doit-on configurer la suppression automatique des journaux ", "清空屏幕": "effacer l'écran", "将在 每周三 04:00 自动清空日志": "les journaux seront automatiquement vidés tous les mercredis à 04h00", "已设置自动清理日志任务": "la tâche de nettoyage automatique des journaux a été configurée", "是否需要删除现有自动清理日志任务": "doit-on supprimer la tâche existante de nettoyage automatique des journaux ", "删除自动清理日志任务": "supprimer la tâche de nettoyage automatique des journaux", "设置自动清理日志": "configurer la suppression automatique des journaux", "配置分享": "partage de configuration", "分享链接": "partager le lien", "二维码": "code qr", "生成分享链接": "générer un lien de partage", "安装成功": "installation réussie", "目前分享链接规范为实验阶段, 请自行判断是否适用": "la norme de partage des liens est actuellement en phase expérimentale ; veuillez déterminer vous-même si elle s'applique", "配置信息": "informations de configuration", "主机": "hôte", "用户id": "identifiant d'utilisateur", "加密": "chiffrement", "传输协议": "protocole de transmission", "底层传输安全": "sécurité de la couche de transport", "路径": "chemin", "不要落下": "ne pas laisser tomber", "不需要加": "pas besoin d'ajouter", "流控": "contrôle de flux", "即将申请证书, 支持使用自定义证书": "vais demander un certificat, supporte l'utilisation de certificats personnalisés", "如需使用自定义证书, 请按如下步骤:": "si vous souhaitez utiliser un certificat personnalisé, veuillez suivre les étapes ci-dessous ", "1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)": "1. renommer le fichier de certificat : clé privée (xray.key), certificat (xray.crt)", "2. 将重命名后的证书文件放入": "2. placez le fichier de certificat renommé dans", "目录后再运行脚本": "exécuter le script après la table des matières", "3. 重新运行脚本": "3. exécuter à nouveau le script", "是否继续": "continuer ou non", "所有证书文件均已存在, 是否保留": "tous les fichiers de certificat existent déjà, souhaitez-vous les conserver ", "已删除": "supprimé", "证书应用": "application de certificat", "证书文件已存在, 是否保留": "le fichier de certificat existe déjà, souhaitez-vous le conserver ", "证书签发残留文件已存在, 是否保留": "le fichier résiduel de la signature du certificat existe déjà, souhaitez-vous le conserver ", "添加": "ajouter", "请选择支持的 TLS 版本": "veuillez sélectionner la version tls prise en charge", "兼容模式": "mode de compatibilité", "安全模式": "mode sécurisé", "已切换至": "déjà basculé vers", "请先安装": "veuillez installer d'abord", "此模式不支持修改": "ce mode ne supporte pas la modification", "即将显示用户, 一次仅能显示一个": "affichage des utilisateurs à venir, un seul utilisateur peut être affiché à la fois", "请选择显示用户使用的协议": "veuillez sélectionner le protocole utilisé par l'utilisateur à afficher", "请选择要显示的用户编号": "veuillez sélectionner le numéro d'utilisateur à afficher", "选择错误": "erreur de sélection", "请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户": "veuillez sélectionner directement [afficher les informations de configuration xray] dans le menu principal pour afficher l'utilisateur principal", "请先检测 Xray 是否正确安装": "veuillez d'abord vérifier que xray est correctement installé", "是否继续显示用户": "continuer à afficher l'utilisateur", "此模式不支持删除用户": "ce mode ne prend pas en charge la suppression d'utilisateurs", "即将添加用户, 一次仅能添加一个": "ajout d'utilisateur en cours, un seul utilisateur peut être ajouté à la fois", "请选择添加用户使用的协议": "veuillez sélectionner le protocole utilisé pour ajouter l'utilisateur", "添加用户": "ajouter un utilisateur", "是否继续添加用户": "voulez-vous continuer à ajouter des utilisateurs ", "此模式不支持添加用户": "ce mode ne prend pas en charge l'ajout d'utilisateurs", "即将删除用户, 一次仅能删除一个": "l'utilisateur sera supprimé, une seule suppression à la fois", "请选择删除用户使用的协议": "veuillez sélectionner le protocole utilisé par l'utilisateur à supprimer", "请选择要删除的用户编号": "veuillez sélectionner le numéro d'utilisateur à supprimer", "主用户无法删除": "l'utilisateur principal ne peut pas être supprimé", "删除用户": "supprimer l'utilisateur", "是否继续删除用户": "voulez-vous continuer à supprimer l'utilisateur ", "文件不存在": "le fichier n'existe pas", "已配置 Xray 流量统计": "statistiques de trafic xray déjà configurées", "是否需要关闭此功能": "doit-on désactiver cette fonctionnalité ", "关闭 Xray 流量统计": "fermer la statistique du trafic xray", "流量统计需要使用": "la statistique du trafic doit être utilisée", "可能会影响 Xray 性能": "cela pourrait affecter les performances de l'analyseur xray", "设置 Xray 流量统计": "configurer la statistique du trafic xray", "已卸载": "déjà désinstallé", "是否卸载": "est-ce que je désinstalle ", "是否删除所有脚本文件": "supprimer tous les fichiers de script ", "已删除所有文件": "tous les fichiers ont été supprimés", "ヾ( ̄▽ ̄) 拜拜~": "( ̄▽ ̄) ヾ salut~", "已保留脚本文件 (包含 SSL 证书等)": "fichier de script déjà conservé (contenant certificat ssl, etc.)", "是否保留配置文件": "conserver le fichier de configuration ", "已清空证书遗留文件": "les fichiers résiduels du certificat ont été effacés", "秒后": "seconde(s) après", "检测最新版本失败": "échec de la vérification de la dernière version", "新版本": "nouvelle version", "更新内容": "contenu de la mise à jour", "存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新": "une nouvelle version est disponible, mais les changements sont importants, il pourrait y avoir des incompatibilités. voulez-vous mettre à jour ", "存在新版本, 是否更新": "une nouvelle version est disponible, souhaitez-vous la mettre à jour ", "检测 脚本 最新版本失败": "échec de la vérification de la dernière version du script", "脚本 版本差别过大, 跳过更新": "la différence de version du script est trop grande, mise à jour ignorée", "更新完成": "mise à jour terminée", "脚本版本变化较大, 若服务无法正常运行请卸载后重装": "la version du script a beaucoup changé. si le service ne fonctionne pas correctement, veuillez le désinstaller puis le réinstaller", "当前版本为最新版本": "la version actuelle est la dernière version", "下载最新脚本": "télécharger le script le plus récent", "该选项暂时无法使用": "cette option n'est pas disponible pour le moment", "此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装": "ce mode est recommandé pour l'équilibrage de charge, il n'est généralement pas recommandé d'utiliser, souhaitez-vous installer ", "变更": "changement", "负载均衡配置": "configuration d'équilibrage de charge", "清除日志文件": "effacer les fichiers journaux", "查看证书状态": "vérifier l'état du certificat", "更新证书有效期": "mettre à jour la validité du certificat", "设置证书自动更新": "configurer la mise à jour automatique des certificats", "设置 Fail2ban 防暴力破解": "configurer fail2ban pour prévenir les attaques par force brute", "显示帮助": "afficher l'aide", "更新": "mise à jour", "脚本卸载": "désinstallation de script", "显示安装信息": "afficher les informations d'installation", "加速": "accélérer", "显示": "afficher", "访问信息": "informations de visite", "错误信息": "message d'erreur", "脚本版本变化较大, 可能存在不兼容情况, 是否继续使用": "la version du script a beaucoup changé, il pourrait y avoir des incompatibilités. voulez-vous continuer à l'utiliser ", "检测失败": "échec de la détection", "有新版": "il y a une nouvelle version", "最新版": "dernière version", "版本未知": "version inconnue", "运行中": "en cours d'exécution", "无需测试": "pas besoin de tester", "未运行": "non exécuté", "无法连通": "impossible de se connecter", "本地正常": "normal localement", "脚本维护中.. 请稍后再试": "script en cours de maintenance... veuillez réessayer plus tard", "无法检测所需依赖的在线版本, 请稍后再试": "impossible de détecter la version en ligne des dépendances requises, veuillez réessayer plus tard", "请输入数字": "veuillez entrer un chiffre", "请输入 1 到 6 之间的有效数字": "veuillez saisir un chiffre valide entre 1 et 6", "无效的选择": "choix invalide", "请输入备份名称": "veuillez saisir le nom de la sauvegarde", "不需要后缀": "pas besoin de suffixe", "报错信息": "message d'erreur", "备份完整性可能受到影响, 请检查上述错误信息": "l'intégrité de la sauvegarde pourrait être affectée, veuillez vérifier les informations d'erreur ci-dessus", "备份失败": "échec de la sauvegarde", "备份成功": "sauvegarde réussie", "请确保备份文件在目录": "veuillez vous assurer que le fichier de sauvegarde se trouve dans le répertoire", "没有找到备份文件": "aucun fichier de sauvegarde n'a été trouvé", "发现多个备份文件": "découverte de plusieurs fichiers de sauvegarde", "将使用最新的文件进行恢复": "la restauration sera effectuée à partir du fichier le plus récent", "找到最新备份文件": "trouver le fichier de sauvegarde le plus récent", "恢复备份": "restaurer la sauvegarde", "恢复成功": "restauration réussie", "记得安装": "rappelez-vous d'installer", "恢复失败": "échec de la restauration", "安装管理脚本": "installer le script de gestion", "作者": "auteur", "当前模式": "mode actuel", "当前语言": "langue actuelle", "可以使用": "peut être utilisé", "命令管理脚本": "script de gestion des commandes", "版本检测": "détection de version", "脚本": "script", "运行状态": "état de fonctionnement", "连通性": "connectivité", "安装向导": "assistant d'installation", "配置变更": "changement de configuration", "用户管理": "gestion des utilisateurs", "查看": "voir", "用户": "utilisateur", "查看信息": "afficher les informations", "实时访问日志": "journal d'accès en temps réel", "实时错误日志": "journal des erreurs en temps réel", "服务相关": "service lié", "所有服务": "tous les services", "证书相关": "relatif aux certificats", "证书状态": "état du certificat", "证书有效期": "durée de validité du certificat", "证书自动更新": "mise à jour automatique des certificats", "其他选项": "autres options", "自动更新": "mise à jour automatique", "防暴力破解": "protection contre les attaques par force brute", "流量统计": "statistiques de trafic", "清除": "effacer", "日志文件": "fichier de journal", "测试": "test", "服务器网速": "vitesse de connexion du serveur", "备份恢复": "sauvegarde et restauration", "全部文件": "tous les fichiers", "恢复": "récupération", "卸载向导": "assistant de désinstallation", "卸载": "désinstaller", "清空": "vider", "证书文件": "fichier de certificat", "退出": "quitter", "请输入选项": "veuillez saisir une option", "不建议": "déconseillé", "回到菜单": "retour au menu", "用于防止暴力破解": "utilisé pour prévenir les attaques par force brute", "主菜单": "menu principal", "管理": "gestion", "状态": "état", "请选择一个选项": "veuillez sélectionner une option", "已经安装, 跳过安装步骤": "déjà installé, sauter l'étape d'installation", "未安装, 请先安装": "non installé, veuillez installer d'abord", "规则": "règle", "跳过启用": "passer l'activation", "已启用": "déjà activé", "请选择": "veuillez sélectionner", "操作": "opération", "添加自定义规则": "ajouter une règle personnalisée", "请输入新的": "veuillez entrer le nouveau", "名称": "nom", "请输入日志路径": "veuillez saisir le chemin du journal", "请输入最大重试次数": "veuillez saisir le nombre maximum de tentatives", "最大重试次数必须在 1 到 99 之间": "le nombre maximum de tentatives doit être compris entre 1 et 99", "请输入封禁时间": "veuillez saisir le temps de blocage", "秒": "seconde", "封禁时间必须在 1 到 8640000 秒之间": "la durée de blocage doit être comprise entre 1 et 8640000 secondes", "自定义规则添加成功": "règle personnalisée ajoutée avec succès", "重启以应用新规则": "redémarrez pour appliquer les nouvelles règles", "停止成功": "arrêt réussi", "总体状态": "état général", "默认启用的 Jail 状态": "état jail activé par défaut", "封锁情况": "situation de blocus", "新版本可用": "nouvelle version disponible", "当前版本": "version actuelle", "请访问": "veuillez visiter", "查看更新说明": "voir les notes de mise à jour", "正在下载新版本": "téléchargement de la nouvelle version en cours", "下载完成, 请重新运行脚本": "téléchargement terminé, veuillez relancer le script", "跳过更新": "ignorer la mise à jour", "当前已经是最新版本": "c'est déjà la version la plus récente", "用法": "utilisation", "文件扩展名": "extension de fichier", "目录路径": "chemin du répertoire", "目录": "table des matières", "不存在, 请检查路径": "inexistant, veuillez vérifier le chemin", "列出所有": "énumérer tout", "文件": "fichier", "文件名": "nom du fichier", "序号": "numéro de série", "请输入网址 (例如 hey.run)": "veuillez saisir l'adresse url (par exemple hey.run)", "不要包含 http:// 或 https:// 开头": "ne pas inclure http:// ou https:// au début", "已创建": "déjà créé", "请输入主机": "veuillez entrer l'hôte", "请输入权重": "veuillez entrer le poids", "追加完成": "ajout complété", "请输入要编辑的文件编号": "veuillez saisir le numéro du fichier à éditer", "未安装, 正在尝试安装": "non installé, en cours d'installation", "已编辑": "déjà édité", "请输入要删除的文件编号": "veuillez saisir le numéro du fichier à supprimer", "不支持的文件扩展名": "extension de fichier non prise en charge", "创建一个新的": "créer un nouveau", "编辑一个已存在的": "modifier un existant", "删除一个已存在的": "supprimer un existant", "无效选项, 请重试": "option invalide, veuillez réessayer", "重启成功": "redémarrage réussi", "重启失败": "redémarrage échoué", "请检查配置文件是否有误": "veuillez vérifier si le fichier de configuration contient des erreurs", "未启用或配置异常": "non activé ou configuration anormale", "是否添加 Reality 负载均衡": "ajouter ou non la charge de réalité", "使用此功能前,建议先阅读作者教程": "avant d'utiliser cette fonction, il est recommandé de lire le tutoriel de l'auteur", "已跳过": "déjà sauté", "如用作 Reality 负载均衡二级服务器则无需安装": "s'il est utilisé comme serveur secondaire de chargement du répartiteur de charge reality, aucune installation n'est nécessaire", "是否额外安装 nginx 前置保护": "installer ou non une protection frontale nginx supplémentaire", "推荐": "recommandé", "检测到已开启 Reality 负载均衡": "réalité de charge équilibrée détectée active", "如用作 Reality 负载均衡主服务器必须安装": "si utilisé comme serveur principal de chargement équilibré reality, il doit être installé", "检测到已安装": "détecté comme déjà installé", "已取消卸载": "désinstallation annulée", "下载失败": "échec du téléchargement", "下载成功": "téléchargement réussi", "解压失败": "échec du décompression", "链接分享": "partage de lien", "修改语言": "modifier la langue", "此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装": "ce mode est uniquement utilisé pour le transit du trafic et n’est pas recommandé pour d’autres utilisations. voulez-vous l’installer ", "信息": "informations", "配置不完整, 退出更新": "configuration incomplète, quittez la mise à jour", "配置不存在, 退出更新": "la configuration n’existe pas, quittez la mise à jour", "无效的选择, 请重试": "option invalide, veuillez réessayer", "systemd 无法读取 SSH 日志": "systemd ne peut pas lire les journaux ssh", "网址不能包含 http:// 或 https:// 前缀": "l’adresse url ne peut pas contenir le préfixe http:// ou https://", "日志文件清空失败": "échec de l’effacement du fichier journal", "当前用户是 root 用户, 开始安装": "l’utilisateur actuel est l’utilisateur root, commencez l’installation", "当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本": "l’utilisateur actuel n’est pas l’utilisateur root. veuillez passer à l’utilisateur root et exécuter à nouveau le script", "已跳过设置自动清理日志": "la configuration de l’effacement automatique des journaux a été ignorée", "脚本更新失败": "mise à jour du script échouée", "更新失败": "mise à jour échouée", "更新脚本": "mettre à jour le script", "更新向导": "assistant de mise à jour", "频繁更新 Nginx, 请确认 Nginx 有更新的必要": "mettez nginx à jour fréquemment et vérifiez qu’il est nécessaire de le mettre à jour", "开始更新": "commencer la mise à jour", "建议选择 TLSv1.3 only (安全模式)": "il est recommandé de sélectionner tlsv1.3 uniquement (mode sécurisé)", "由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)": "étant donné que h3 ne prend en charge que tlsv1.3, seul tlsv1.3 est pris en charge (mode sécurisé)", "请选择 TLS 版本": "veuillez sélectionner la version tls", "建议选择 TLSv1.3 (安全模式)": "il est recommandé de choisir tlsv1.3 (mode sécurisé)", "当前模式不支持": "le mode actuel n’est pas pris en charge", "Nginx配置文件不存在 或 当前模式不支持": "le fichier de configuration nginx n’existe pas ou le mode actuel n’est pas pris en charge", "已禁用": "désactivé", "管理模块": "module de gestion", "服务管理": "gestion des services", "管理 Fail2ban 模块": "gérer le module fail2ban", "未找到任何模块化配置文件": "aucun fichier de configuration modulaire n’a été trouvé", "模块名称": "nom du module", "请选择要管理的模块": "veuillez sélectionner le module à gérer", "启用": "activer", "禁用": "désactiver", "模块": "module", "操作已取消": "l’opération a été annulée", "可能自动更新后有兼容问题, 谨慎启用": "il peut y avoir des problèmes de compatibilité après une mise à jour automatique ; activez avec prudence", "是否启用": "activer ou non", "是否": "est-ce que…", "是否下载并安装新版本": "télécharger et installer la nouvelle version ", "无法获取网卡, 将监控所有网卡": "impossible d’obtenir la carte réseau ; toutes les cartes réseaux seront surveillées", "监控网卡": "surveiller la carte réseau", "监控端口": "port de surveillance", "按 q 键退出 iftop": "appuyez sur la touche q pour quitter iftop", "实时流量": "trafic en temps réel" } ================================================ FILE: po/cache_Korean.json ================================================ { "错误": "오류", "警告": "경고", "未安装": "미설치", "日志文件归档失败": "로그 파일 보관 실패", "日志文件已轮转并归档为": "로그 파일이 회전되어 다음과 같이 보관되었습니다", "当前系统为": "현재 시스템은", "不在支持的系统列表内, 安装中断": "지원되지 않는 시스템 목록에 포함되어 있어 설치가 중단되었습니다", "无法获取远程语言文件信息": "원격 언어 파일 정보를 가져올 수 없습니다", "正在更新语言文件": "언어 파일을 업데이트 중입니다", "语言文件更新失败": "언어 파일 업데이트 실패", "语言文件无效": "언어 파일이 유효하지 않습니다", "版本文件更新失败": "버전 파일 업데이트 실패", "语言文件更新完成": "언어 파일 업데이트 완료", "正在安装": "설치 중", "安装失败": "설치 실패", "将使用默认语言": "기본 언어를 사용합니다", "未找到": "찾을 수 없음", "不支持的语言": "지원하지 않는 언어", "发现语言文件更新": "언어 파일 업데이트를 발견했습니다", "完成": "완성", "失败": "실패", "在线版本检测失败, 请稍后再试": "온라인 버전 검사에 실패했습니다. 잠시 후 다시 시도해 주세요", "安装": "설치", "已安装": "설치됨", "自启动配置": "자동 실행 설정", "链接库安装": "링크 라이브러리 설치", "值为空或超出范围, 请重新输入": "값이 비어 있거나 범위를 초과했습니다. 다시 입력해 주십시오", "值为空, 请重新输入": "값이 비어 있습니다. 다시 입력해 주세요", "确定端口": "포트 확인", "请输入端口": "포트를 입력하세요", "默认值": "기본값", "请输入 0-65535 之间的值": "0-65535 사이의 값을 입력하세요", "端口不允许使用, 请重新输入": "포트를 사용할 수 없습니다. 다시 입력해 주세요", "请选择安装协议": "설치 계약서를 선택해 주십시오", "默认": "기본", "请输入": "입력하세요", "请输入有效的数字": "유효한 숫자를 입력하세요", "是否添加简单 ws/gRPC 协议 用于负载均衡": "단순한 ws/grpc 프로토콜을 로드 밸런싱에 추가할 것인지", "如不清楚具体用途, 请勿选择": "구체적인 용도가 명확하지 않은 경우 선택하지 마십시오", "已跳过添加简单 ws/gRPC 协议": "간단한 ws/grpc 프로토콜 추가를 건너뛰었습니다", "是否需要自定义": "맞춤형이 필요한가요", "请勿与其他端口相同": "다른 포트와 동일하지 마십시오", "是否需要设置防火墙": "방화벽을 설정해야 하나요", "防火墙": "방화벽", "重启完成": "재부팅 완료", "开放防火墙相关端口": "방화벽 관련 포트 개방", "若修改配置, 请注意关闭防火墙相关端口": "구성을 수정할 경우 방화벽 관련 포트를 닫는 것을 유의하십시오", "配置": "구성", "跳过防火墙设置": "방화벽 설정 건너뛰기", "伪装路径": "위장 경로", "不需要": "필요하지 않다", "用户名": "사용자 이름", "请输入正确的 email": "올바른 이메일을 입력하세요", "是否需要自定义字符串映射": "사용자 정의 문자열 매핑이 필요한가요", "请输入自定义字符串": "사용자 정의 문자열을 입력하세요", "最多30字符": "최대 30자", "自定义字符串": "사용자 정의 문자열", "映射字符串": "문자열 매핑", "检测到 target 域名已配置, 是否保留": "타겟 도메인이 이미 구성된 것을 감지했습니다. 유지하시겠습니까", "请输入一个域名": "도메인 이름을 입력하세요", "域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用": "도메인은 tlsv1.3, x25519 및 h2를 지원해야 하며 도메인 리디렉션을 사용하지 않아야 합니다", "确认域名符合要求后请输入": "도메인 이름이 요구 사항을 충족하는지 확인한 후 입력해 주십시오", "正在检测域名请等待": "도메인을 검사 중입니다. 잠시 기다려 주십시오", "该域名不支持": "해당 도메인은 지원하지 않습니다", "该域名发生了跳转": "해당 도메인이 리디렉션되었습니다", "该域名可能不满足所有要求": "해당 도메인명이 모든 요구 사항을 충족하지 않을 수 있습니다", "是否仍要设置此域名": "이 도메인 이름을 여전히 설정하시겠습니까", "域名": "도메인 이름", "满足所有要求": "모든 요구 사항을 충족하다", "域名的": "도메인의", "默认为": "기본값은", "域名本身": "도메인 자체", "如不清楚具体用途, 请勿继续": "구체적인 용도가 명확하지 않은 경우 계속 사용하지 마십시오", "是否变更": "변경 여부", "负载均衡": "로드 밸런싱", "请选择协议为 ws 或 gRPC": "프로토콜을 ws 또는 grpc로 선택하세요", "返回": "돌아가기", "本地文件 file_manager.sh 不存在, 正在下载": "로컬 파일 file_manager.sh가 존재하지 않아 다운로드 중입니다", "下载失败, 请手动下载并安装新版本": "다운로드에 실패했습니다. 수동으로 새 버전을 다운로드하여 설치해 주세요", "当前模式不支持此操作": "현재 모드는 이 작업을 지원하지 않습니다", "配置用途可以参考文章": "사용 용도는 문서를 참고하십시오", "修改": "수정", "端口": "포트", "不支持": "지원하지 않음", "用户名修改": "사용자 이름 수정", "请先删除多余的用户": "먼저 중복된 사용자를 삭제해 주십시오", "配置修改": "구성 수정", "检测到 Xray 的权限控制, 启动修改程序": "xray의 권한 제어를 감지하여 수정 프로그램을 시작합니다", "修改完成": "수정 완료", "若更新无效, 建议直接卸载再安装": "업데이트가 적용되지 않는 경우, 직접 삭제 후 다시 설치하는 것을 권장합니다", "部分新功能需要重新安装才可生效": "일부 새로운 기능은 다시 설치해야 적용됩니다", "检测到存在最新版": "최신 버전이 존재하는 것으로 감지됨", "脚本可能未兼容此版本": "스크립트가 이 버전과 호환되지 않을 수 있습니다", "是否更新": "업데이트 여부", "启动失败": "시작 실패", "是否回滚到之前的版本": "이전 버전으로 롤백할까요", "未执行回滚操作": "롤백 작업이 실행되지 않았습니다", "正在回滚": "롤백 중입니다", "已成功回滚到之前的": "이전 버전으로 성공적으로 롤백되었습니다", "版本": "버전", "回滚失败": "롤백 실패", "重装": "중장", "Reality 协议有流量偷跑的风险": "reality 프로토콜은 트래픽 유출의 위험이 있다", "已跳过安装": "설치를 건너뛰었습니다", "已存在, 跳过编译安装过程": "이미 존재합니다. 컴파일 설치 과정을 건너뜁니다", "检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装": "다른 패키지가 설치한 nginx를 감지했습니다. 계속 설치하면 충돌이 발생할 수 있으니 처리 후 설치해 주십시오", "即将下载已编译的": "곧 컴파일된 것을 다운로드할 예정입니다", "不支持的系统架构": "지원되지 않는 시스템 아키텍처", "当前安装模式不需要": "현재 설치 모드는 필요하지 않습니다", "备份旧版": "이전 버전 백업", "删除旧版": "이전 버전 삭제", "是否保留原 Nginx 配置文件": "기존 nginx 구성 파일을 유지할까요", "原配置文件已删除": "원래 구성 파일이 삭제되었습니다", "原配置文件已保留": "원래 구성 파일이 보존되었습니다", "删除": "삭제", "备份": "백업", "已为最新版": "최신 버전으로 업데이트되었습니다", "设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)": "백그라운드에서 자동 업데이트 프로그램 설정 (포함: 스크립트/xray/nginx)", "设置自动更新": "자동 업데이트 설정", "已设置自动更新": "자동 업데이트가 설정되었습니다", "是否关闭": "종료할까요", "删除自动更新": "자동 업데이트 삭제", "安装 SSL 证书生成脚本依赖": "ssl 인증서 생성 스크립트 의존성 설치", "安装 SSL 证书生成脚本": "ssl 인증서 생성 스크립트 설치", "检测到原域名配置存在, 是否跳过域名设置": "기존 도메인 구성이 존재하는 것을 감지했습니다. 도메인 설정을 건너뛸까요", "无法获取公网IP地址": "공용 ip 주소를 가져올 수 없습니다", "安装终止": "설치 종료", "已跳过域名设置": "도메인 설정을 건너뛰었습니다", "确定域名信息": "도메인 정보 확인", "请输入你的域名信息": "도메인 정보를 입력해 주세요", "请选择公网IP(IPv4/IPv6)或手动输入域名": "공용 ip(ipv4/ipv6)를 선택하거나 도메인을 수동으로 입력하세요", "正在获取公网IP信息, 请耐心等待": "공인 ip 정보를 가져오는 중입니다. 잠시 기다려 주십시오", "此选项用于服务器商仅提供域名访问服务器": "이 옵션은 서버 제공업체가 도메인만으로 서버에 접근할 수 있도록 하는 경우에 사용됩니다", "注意服务器商域名添加 CNAME 记录": "서버 업체의 도메인에 cname 레코드를 추가하는 것을 주의하세요", "域名DNS解析IP": "도메인 네임 dns 해석 ip", "公网IP/域名": "공용 ip/도메인 이름", "域名DNS解析IP与公网IP匹配": "도메인 네임의 dns 해석 ip와 공용 ip가 일치합니다", "请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray": "도메인에 올바른 a/aaaa 레코드가 추가되었는지 확인해 주세요. 그렇지 않으면 xray를 정상적으로 사용할 수 없습니다", "域名DNS解析IP与公网IP不匹配, 请选择": "도메인 네임의 dns 해석 ip가 공용 ip와 일치하지 않습니다. 선택해 주십시오", "继续安装": "계속 설치", "重新输入": "다시 입력", "终止安装": "설치 중단", "检测到原IP配置存在, 是否跳过IP设置": "기존 ip 설정이 존재하는 것을 감지했습니다. ip 설정을 건너뛸까요", "已跳过IP设置": "ip 설정을 건너뛰었습니다", "确定公网IP信息": "공용 ip 정보 확인", "请选择公网IP为IPv4或IPv6": "공용 ip를 ipv4 또는 ipv6로 선택하세요", "手动输入": "수동 입력", "端口未被占用": "포트가 사용 중이 아닙니다", "检测到": "검출됨", "端口被占用": "포트가 점유되었습니다", "以下为": "다음은", "端口占用信息": "포트 점유 정보", "尝试终止占用的进程": "점유된 프로세스를 종료해 보십시오", "证书测试签发成功, 开始正式签发": "인증서 테스트 발급 성공, 정식 발급 시작", "证书测试签发失败": "인증서 테스트 발급 실패", "证书生成成功": "인증서 생성 성공", "证书配置成功": "인증서 설정 성공", "证书生成失败": "인증서 생성 실패", "检测到 Xray 配置过多用户": "xray가 너무 많은 사용자를 구성한 것을 감지했습니다", "是否保留原 Xray 配置文件": "기존 xray 구성 파일을 유지할까요", "添加简单 ws/gRPC 协议": "간단한 ws/grpc 프로토콜 추가", "检测到配置文件, 是否读取配置文件": "구성 파일을 감지했습니다. 구성 파일을 읽으시겠습니까", "已删除配置文件": "구성 프로파일이 삭제되었습니다", "已保留配置文件": "구성 파일이 보존되었습니다", "检测到当前安装模式与配置文件的安装模式不一致": "현재 설치 모드가 구성 파일의 설치 모드와 일치하지 않는 것으로 감지되었습니다", "是否保留配置文件 (强烈不建议)": "구성 파일을 유지할지 여부 (강력히 권장하지 않음)", "请务必确保配置文件正确": "구성 파일이 정확한지 꼭 확인해 주십시오", "检测到配置文件不完整, 是否保留配置文件": "구성 파일이 불완전한 것으로 감지되었습니다. 구성 파일을 유지하시겠습니까", "配置删除": "설정 삭제", "设置 Nginx 开机自启": "nginx 자동 시작 설정", "设置": "설정", "开机自启": "부팅 자동 실행", "关闭 Nginx 开机自启": "nginx 자동 실행 비활성화", "关闭": "닫기", "重启": "재부팅", "启动": "시작", "停止": "정지", "新版本已自动设置证书自动更新": "새 버전에서 인증서 자동 갱신이 이미 자동으로 설정되었습니다", "老版本请及时删除 废弃的 改版证书自动更新": "구버전은 즉시 삭제하시고, 폐기된 개정 인증서는 자동으로 업데이트됩니다", "已设置改版证书自动更新": "버전 변경 인증서 자동 업데이트가 설정되었습니다", "是否需要删除改版证书自动更新 (请删除)": "개편된 인증서 자동 업데이트를 삭제할 필요가 있습니까 (삭제해 주십시오)", "删除改版证书自动更新": "개정된 인증서 자동 업데이트 삭제", "已过期": "만료됨", "证书生成日期": "인증서 생성일", "证书生成天数": "인증서 생성 일수", "证书剩余天数": "인증서 남은 일수", "是否立即更新证书": "인증서를 즉시 업데이트할까요", "证书签发工具不存在, 请确认是否证书为脚本签发": "인증서 발급 도구가 존재하지 않습니다. 스크립트로 인증서를 발급했는지 확인해 주십시오", "证书更新": "증명서 업데이트", "本地文件 fail2ban_manager.sh 不存在, 正在下载": "로컬 파일 fail2ban_manager.sh가 존재하지 않으므로 다운로드 중입니다", "检测到日志文件大小如下:": "로그 파일 크기가 다음과 같이 감지되었습니다", "即将清除": "곧 삭제됩니다", "日志清理": "로그 정리", "保留现有自动清理日志任务": "기존 자동 로그 정리 작업 유지", "是否需要设置自动清理日志": "로그 자동 정리 설정이 필요합니까", "清空屏幕": "화면을 비우다", "将在 每周三 04:00 自动清空日志": "매주 수요일 04:00에 로그가 자동으로 비워집니다", "已设置自动清理日志任务": "로그 자동 정리 작업이 설정되었습니다", "是否需要删除现有自动清理日志任务": "기존 자동 로그 정리 작업을 삭제할 필요가 있습니까", "删除自动清理日志任务": "자동 정리 로그 작업 삭제", "设置自动清理日志": "로그 자동 정리 설정", "配置分享": "구성 공유", "分享链接": "링크 공유", "二维码": "qr 코드", "生成分享链接": "공유 링크 생성", "安装成功": "설치 성공", "目前分享链接规范为实验阶段, 请自行判断是否适用": "현재 공유 링크 규칙은 실험 단계이므로, 직접 적용 가능한지 판단해 주십시오", "配置信息": "설정 정보", "主机": "호스트", "用户id": "사용자 id", "加密": "암호화", "传输协议": "전송 프로토콜", "底层传输安全": "기저 전송 보안", "路径": "경로", "不要落下": "놓치지 마세요", "不需要加": "추가할 필요가 없습니다", "流控": "유량 제어", "即将申请证书, 支持使用自定义证书": "인증서를 곧 신청할 예정이며, 사용자 정의 인증서를 지원합니다", "如需使用自定义证书, 请按如下步骤:": "사용자 정의 인증서를 사용하려면 다음 단계를 따르십시오", "1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)": "1. 인증서 파일의 이름을 변경합니다: 개인 키(xray.key), 인증서(xray.crt)", "2. 将重命名后的证书文件放入": "2. 이름이 변경된 인증서 파일을 넣으십시오", "目录后再运行脚本": "목록 뒤에 스크립트를 실행합니다", "3. 重新运行脚本": "3. 스크립트를 다시 실행합니다", "是否继续": "계속할 것인지", "所有证书文件均已存在, 是否保留": "모든 인증서 파일이 이미 존재합니다. 유지하시겠습니까", "已删除": "삭제됨", "证书应用": "인증서 응용", "证书文件已存在, 是否保留": "인증서 파일이 이미 존재합니다. 유지하시겠습니까", "证书签发残留文件已存在, 是否保留": "인증서 발급 잔류 파일이 이미 존재합니다. 유지하시겠습니까", "添加": "추가", "请选择支持的 TLS 版本": "지원되는 tls 버전을 선택하세요", "兼容模式": "호환 모드", "安全模式": "안전 모드", "已切换至": "이미 전환됨", "请先安装": "먼저 설치해 주세요", "此模式不支持修改": "이 모드는 수정을 지원하지 않습니다", "即将显示用户, 一次仅能显示一个": "사용자가 곧 표시됩니다. 한 번에 하나만 표시할 수 있습니다", "请选择显示用户使用的协议": "사용자가 사용한 프로토콜을 선택해 주세요", "请选择要显示的用户编号": "표시할 사용자 번호를 선택하세요", "选择错误": "선택 오류", "请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户": "메인 메뉴에서 [xray 구성 정보 보기]를 직접 선택하여 메인 사용자를 표시하십시오", "请先检测 Xray 是否正确安装": "먼저 xray가 올바르게 설치되었는지 확인해 주십시오", "是否继续显示用户": "사용자를 계속 표시할지 여부", "此模式不支持删除用户": "이 모드는 사용자 삭제를 지원하지 않습니다", "即将添加用户, 一次仅能添加一个": "사용자를 추가할 예정이며, 한 번에 하나씩만 추가할 수 있습니다", "请选择添加用户使用的协议": "사용자 추가 시 사용할 프로토콜을 선택하세요", "添加用户": "사용자 추가", "是否继续添加用户": "사용자를 계속 추가하시겠습니까", "此模式不支持添加用户": "이 모드는 사용자 추가를 지원하지 않습니다", "即将删除用户, 一次仅能删除一个": "사용자를 삭제할 예정이며, 한 번에 하나만 삭제할 수 있습니다", "请选择删除用户使用的协议": "사용자 삭제에 사용할 프로토콜을 선택하세요", "请选择要删除的用户编号": "삭제할 사용자 번호를 선택해 주세요", "主用户无法删除": "주 사용자는 삭제할 수 없습니다", "删除用户": "사용자 삭제", "是否继续删除用户": "사용자를 계속 삭제하시겠습니까", "文件不存在": "파일이 존재하지 않습니다", "已配置 Xray 流量统计": "xray 트래픽 통계가 이미 구성되었습니다", "是否需要关闭此功能": "이 기능을 종료할 필요가 있습니까", "关闭 Xray 流量统计": "xray 트래픽 통계 끄기", "流量统计需要使用": "트래픽 통계 사용 필요", "可能会影响 Xray 性能": "x레이 성능에 영향을 줄 수 있습니다", "设置 Xray 流量统计": "xray 트래픽 통계 설정", "已卸载": "제거됨", "是否卸载": "제거할까요", "是否删除所有脚本文件": "모든 스크립트 파일을 삭제하시겠습니까", "已删除所有文件": "모든 파일을 삭제했습니다", "ヾ( ̄▽ ̄) 拜拜~": "( ̄▽ ̄) 안녕~", "已保留脚本文件 (包含 SSL 证书等)": "스크립트 파일(ssl 인증서 등 포함)이 보존되었습니다", "是否保留配置文件": "구성 파일을 유지할까요", "已清空证书遗留文件": "인증서 잔여 파일을 이미 삭제했습니다", "秒后": "초 후", "检测最新版本失败": "최신 버전 검사 실패", "新版本": "새 버전", "更新内容": "업데이트 내용", "存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新": "새로운 버전이 존재하지만, 버전 간의 차이가 크므로 호환되지 않을 가능성이 있습니다. 업데이트하시겠습니까", "存在新版本, 是否更新": "새 버전이 존재합니다. 업데이트하시겠습니까", "检测 脚本 最新版本失败": "스크립트 최신 버전 검사 실패", "脚本 版本差别过大, 跳过更新": "스크립트 버전 차이가 너무 커서 업데이트를 건너뜁니다", "更新完成": "업데이트 완료", "脚本版本变化较大, 若服务无法正常运行请卸载后重装": "스크립트 버전이 크게 변경되었으니, 서비스가 정상적으로 작동하지 않을 경우 삭제 후 다시 설치해 주십시오", "当前版本为最新版本": "현재 버전은 최신 버전입니다", "下载最新脚本": "최신 스크립트 다운로드", "该选项暂时无法使用": "해당 옵션은 일시적으로 사용할 수 없습니다", "此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装": "이 모드는 로드 밸런싱에 권장되며, 일반적으로 사용하지 않는 것이 좋습니다. 설치하시겠습니까", "变更": "변경", "负载均衡配置": "로드 밸런싱 구성", "清除日志文件": "로그 파일 삭제", "查看证书状态": "인증서 상태 보기", "更新证书有效期": "인증서 유효기간 갱신", "设置证书自动更新": "인증서 자동 갱신 설정", "设置 Fail2ban 防暴力破解": "fail2ban 폭력적 해킹 공격 방지 설정", "显示帮助": "도움 표시", "更新": "업데이트", "脚本卸载": "스크립트 제거", "显示安装信息": "설치 정보 표시", "加速": "가속", "显示": "표시", "访问信息": "정보 방문", "错误信息": "오류 정보", "脚本版本变化较大, 可能存在不兼容情况, 是否继续使用": "스크립트 버전이 크게 변경되어 호환되지 않을 가능성이 있습니다. 계속 사용하시겠습니까", "检测失败": "검사 실패", "有新版": "새 버전이 있습니다", "最新版": "최신 버전", "版本未知": "버전 알 수 없음", "运行中": "실행 중", "无需测试": "테스트할 필요 없음", "未运行": "실행되지 않음", "无法连通": "연결할 수 없음", "本地正常": "현지 정상", "脚本维护中.. 请稍后再试": "스크립트를 유지 보수 중입니다. 잠시 후 다시 시도해 주세요", "无法检测所需依赖的在线版本, 请稍后再试": "필요한 종속 항목의 온라인 버전을 검출할 수 없습니다. 잠시 후 다시 시도해 주십시오", "请输入数字": "숫자를 입력하세요", "请输入 1 到 6 之间的有效数字": "1에서 6 사이의 유효한 숫자를 입력하세요", "无效的选择": "무효한 선택", "请输入备份名称": "백업 이름을 입력하세요", "不需要后缀": "접미사가 필요하지 않다", "报错信息": "오류 정보", "备份完整性可能受到影响, 请检查上述错误信息": "백업의 완전성이 영향을 받을 수 있으니, 위의 오류 메시지를 확인해 주십시오", "备份失败": "백업 실패", "备份成功": "백업 성공", "请确保备份文件在目录": "백업 파일이 디렉토리에 있는지 확인해 주십시오", "没有找到备份文件": "백업 파일을 찾지 못했습니다", "发现多个备份文件": "여러 개의 백업 파일을 발견했습니다", "将使用最新的文件进行恢复": "최신 파일을 사용하여 복구합니다", "找到最新备份文件": "최신 백업 파일 찾기", "恢复备份": "백업 복구", "恢复成功": "복구 성공", "记得安装": "설치 기억하기", "恢复失败": "복구 실패", "安装管理脚本": "관리 스크립트 설치", "作者": "저자", "当前模式": "현재 모드", "当前语言": "현재 언어", "可以使用": "사용할 수 있습니다", "命令管理脚本": "명령 관리 스크립트", "版本检测": "버전 검사", "脚本": "스크립트", "运行状态": "운영 상태", "连通性": "연결성", "安装向导": "설치 마법사", "配置变更": "구성 변경", "用户管理": "사용자 관리", "查看": "보기", "用户": "사용자", "查看信息": "정보 보기", "实时访问日志": "실시간 접근 로그", "实时错误日志": "실시간 오류 로그", "服务相关": "서비스 관련", "所有服务": "모든 서비스", "证书相关": "증명서 관련", "证书状态": "인증서 상태", "证书有效期": "인증서 유효기간", "证书自动更新": "인증서 자동 갱신", "其他选项": "기타 옵션", "自动更新": "자동 업데이트", "防暴力破解": "폭력적 해킹 방지", "流量统计": "트래픽 통계", "清除": "제거", "日志文件": "로그 파일", "测试": "테스트", "服务器网速": "서버 속도", "备份恢复": "백업 복구", "全部文件": "전체 파일", "恢复": "복구", "卸载向导": "제거 마법사", "卸载": "제거", "清空": "비우다", "证书文件": "인증서 파일", "退出": "퇴출", "请输入选项": "옵션을 입력하세요", "不建议": "추천하지 않음", "回到菜单": "메뉴로 돌아가기", "用于防止暴力破解": "폭력적 해킹을 방지하기 위해", "主菜单": "메인 메뉴", "管理": "관리", "状态": "상태", "请选择一个选项": "옵션 하나를 선택하세요", "已经安装, 跳过安装步骤": "이미 설치되어 있습니다. 설치 단계를 건너뜁니다", "未安装, 请先安装": "설치되지 않았습니다. 먼저 설치해 주세요", "规则": "규칙", "跳过启用": "활성화 건너뛰기", "已启用": "활성화됨", "请选择": "선택하세요", "操作": "작업", "添加自定义规则": "사용자 정의 규칙 추가", "请输入新的": "새로운 것을 입력하세요", "名称": "이름", "请输入日志路径": "로그 경로를 입력하세요", "请输入最大重试次数": "최대 재시도 횟수를 입력하세요", "最大重试次数必须在 1 到 99 之间": "최대 재시도 횟수는 1에서 99 사이여야 합니다", "请输入封禁时间": "금지 시간을 입력하세요", "秒": "초", "封禁时间必须在 1 到 8640000 秒之间": "봉쇄 시간은 1초에서 8640000초 사이여야 합니다", "自定义规则添加成功": "사용자 정의 규칙 추가 성공", "重启以应用新规则": "새로운 규칙을 적용하려면 다시 시작하세요", "停止成功": "정지 성공", "总体状态": "전체 상태", "默认启用的 Jail 状态": "기본적으로 활성화된 jail 상태", "封锁情况": "봉쇄 상황", "新版本可用": "새 버전 사용 가능", "当前版本": "현재 버전", "请访问": "방문해 주세요", "查看更新说明": "업데이트 설명 보기", "正在下载新版本": "새 버전을 다운로드 중입니다", "下载完成, 请重新运行脚本": "다운로드가 완료되었습니다. 스크립트를 다시 실행해 주세요", "跳过更新": "업데이트 건너뛰기", "当前已经是最新版本": "현재 이미 최신 버전입니다", "用法": "사용법", "文件扩展名": "파일 확장명", "目录路径": "디렉토리 경로", "目录": "목차", "不存在, 请检查路径": "존재하지 않습니다. 경로를 확인해 주십시오", "列出所有": "모두 나열하기", "文件": "파일", "文件名": "파일명", "序号": "순번", "请输入网址 (例如 hey.run)": "url을 입력하세요 (예: hey.run)", "不要包含 http:// 或 https:// 开头": "http:// 또는 https://로 시작하지 않도록 하세요", "已创建": "생성됨", "请输入主机": "호스트를 입력하세요", "请输入权重": "가중치를 입력하세요", "追加完成": "추가 완료", "请输入要编辑的文件编号": "편집할 파일 번호를 입력하세요", "未安装, 正在尝试安装": "설치되지 않음, 설치 중", "已编辑": "편집 완료", "请输入要删除的文件编号": "삭제할 파일 번호를 입력하세요", "不支持的文件扩展名": "지원되지 않는 파일 확장자", "创建一个新的": "새로운 것을 생성하다", "编辑一个已存在的": "기존의 것을 편집하다", "删除一个已存在的": "기존의 것을 삭제합니다", "无效选项, 请重试": "잘못된 옵션입니다. 다시 시도해 주세요", "重启成功": "재부팅 성공", "重启失败": "재부팅 실패", "请检查配置文件是否有误": "구성 파일에 오류가 없는지 확인해 주십시오", "未启用或配置异常": "미사용 또는 구성 이상", "是否添加 Reality 负载均衡": "리얼리티 로드 밸런싱을 추가할지 여부", "使用此功能前,建议先阅读作者教程": "이 기능을 사용하기 전에 먼저 작성자의 튜토리얼을 읽는 것을 권장합니다", "已跳过": "건너뛰었습니다", "如用作 Reality 负载均衡二级服务器则无需安装": "reality 로드 밸런싱 2차 서버로 사용할 경우 설치할 필요가 없습니다", "是否额外安装 nginx 前置保护": "nginx 프런트엔드 보호를 추가로 설치할 것인지 여부", "推荐": "추천", "检测到已开启 Reality 负载均衡": "reality 로드 밸런싱이 이미 활성화된 것을 감지했습니다", "如用作 Reality 负载均衡主服务器必须安装": "reality 부하 분산 주 서버로 사용할 경우 반드시 설치해야 합니다", "检测到已安装": "설치된 것을 감지했습니다", "已取消卸载": "설치 제거가 취소되었습니다", "下载失败": "다운로드 실패", "下载成功": "다운로드 성공", "解压失败": "압축 풀기 실패", "链接分享": "링크 공유", "修改语言": "언어 수정", "此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装": "이 모드는 트래픽 중계에만 사용되며, 다른 상황에서는 사용하지 않는 것이 좋습니다. 설치하시겠습니까", "信息": "정보", "配置不完整, 退出更新": "구성이 완전하지 않습니다. 업데이트를 종료합니다", "配置不存在, 退出更新": "구성이 존재하지 않습니다. 업데이트를 종료합니다", "无效的选择, 请重试": "유효하지 않은 선택입니다. 다시 시도해 주세요", "systemd 无法读取 SSH 日志": "systemd가 ssh 로그를 읽을 수 없습니다", "网址不能包含 http:// 或 https:// 前缀": "웹주소에는 http:// 또는 https:// 접두어를 포함할 수 없습니다", "日志文件清空失败": "로그 파일 비우기 실패", "当前用户是 root 用户, 开始安装": "현재 사용자는 root 사용자입니다. 설치를 시작합니다", "当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本": "현재 사용자는 root 사용자가 아닙니다. root 사용자로 전환한 후 스크립트를 다시 실행해 주세요", "已跳过设置自动清理日志": "로그 자동 정리를 설정하는 단계를 건너뛰었습니다", "脚本更新失败": "스크립트 업데이트 실패", "更新失败": "업데이트 실패", "更新脚本": "스크립트 업데이트", "更新向导": "업데이트 마법사", "频繁更新 Nginx, 请确认 Nginx 有更新的必要": "nginx를 자주 업데이트하십시오. nginx에 업데이트가 필요한지 확인해 주세요", "开始更新": "업데이트를 시작합니다", "建议选择 TLSv1.3 only (安全模式)": "tlsv1.3 전용(보안 모드)을 선택하는 것을 권장합니다", "由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)": "h3는 tlsv1.3만 지원하므로 tlsv1.3 전용(보안 모드)만 지원합니다", "请选择 TLS 版本": "tls 버전을 선택하세요", "建议选择 TLSv1.3 (安全模式)": "tlsv1.3(보안 모드)를 선택하는 것을 권장합니다", "当前模式不支持": "현재 모드는 지원되지 않습니다", "Nginx配置文件不存在 或 当前模式不支持": "nginx 구성 파일이 존재하지 않거나 현재 모드가 지원되지 않습니다", "已禁用": "비활성화됨", "管理模块": "관리 모듈", "服务管理": "서비스 관리", "管理 Fail2ban 模块": "fail2ban 모듈 관리하기", "未找到任何模块化配置文件": "모듈형 구성 파일을 찾을 수 없습니다", "模块名称": "모듈 이름", "请选择要管理的模块": "관리할 모듈을 선택하세요", "启用": "활성화", "禁用": "비활성화", "模块": "모듈", "操作已取消": "작업이 취소되었습니다", "可能自动更新后有兼容问题, 谨慎启用": "자동 업데이트 후 호환성 문제가 발생할 수 있으니 신중히 활성화하세요", "是否启用": "활성화 여부", "是否": "그것이…", "是否下载并安装新版本": "새 버전을 다운로드하고 설치하시겠습니까", "无法获取网卡, 将监控所有网卡": "네트워크 카드를 가져올 수 없습니다. 모든 네트워크 카드를 모니터링합니다", "监控网卡": "네트워크 카드 모니터링", "监控端口": "모니터링 포트", "按 q 键退出 iftop": "q 키를 눌러 iftop을 종료하세요", "实时流量": "실시간 트래픽" } ================================================ FILE: po/cache_Persian.json ================================================ { "错误": "اشتباه", "警告": "هشدار", "未安装": "ننصب نشده است", "日志文件归档失败": "ارشیو شدن فایل روزنامه با موفقیت انجام نشد", "日志文件已轮转并归档为": "فایل روزنامه به صورت چرخشی و در فرمت آرشیو ذخیره شده است", "当前系统为": "سیستم فعلی عبارت است از", "不在支持的系统列表内, 安装中断": "در لیست سیستم‌های پشتیبانی نیست، نصب متوقف شد", "无法获取远程语言文件信息": "نمی‌توان اطلاعات فایل زبان ریموت را به دست آورد", "正在更新语言文件": "در حال به‌روزرسانی فایل‌های زبانی", "语言文件更新失败": "به‌روزرسانی فایل زبان با موفقیت انجام نشد", "语言文件无效": "پرونده زبان نامعتبر است", "版本文件更新失败": "بازرسی فایل نسخه شکست خورد", "语言文件更新完成": "به‌روزرسانی فایل زبان به پایان رسید", "正在安装": "در حال نصب", "安装失败": "ناموفقیت نصب", "将使用默认语言": "از زبان پیش فرض استفاده خواهد شد", "未找到": "پیدا نشد", "不支持的语言": "زبان‌هایی که پشتیبانی نمی‌شوند", "发现语言文件更新": "به‌روزرسانی فایل زبان کشف شد", "完成": "کامل شدن", "失败": "شکست", "在线版本检测失败, 请稍后再试": "بررسی نسخه آنلاین با شکست مواجه شد، لطفاً بعداً دوباره تلاش کنید", "安装": "نصب", "已安装": "نصب شده", "自启动配置": "پیکربندی خودکار اجرا", "链接库安装": "نصب کتابخانه لینک", "值为空或超出范围, 请重新输入": "مقدار خالی یا خارج از محدوده است، لطفاً دوباره وارد کنید", "值为空, 请重新输入": "مقدار خالی است، لطفاً دوباره وارد کنید", "确定端口": "پورت را مشخص کنید", "请输入端口": "لطفاً پورت را وارد کنید", "默认值": "مقدار پیش فرض", "请输入 0-65535 之间的值": "لطفاً مقداری بین ۰ تا ۶۵۵۳۵ را وارد کنید", "端口不允许使用, 请重新输入": "پورت مجاز نیست، لطفاً دوباره وارد کنید", "请选择安装协议": "لطفاً توافق نامه نصب را انتخاب کنید", "默认": "پیش فرض", "请输入": "لطفاً وارد کنید", "请输入有效的数字": "لطفاً عدد معتبری وارد کنید", "是否添加简单 ws/gRPC 协议 用于负载均衡": "آیا برای تعادل بار، پروتکل ws/grpc ساده اضافه می‌شود؟", "如不清楚具体用途, 请勿选择": "اگر کاربرد دقیق آن را نمی‌دانید، لطفاً انتخاب نکنید", "已跳过添加简单 ws/gRPC 协议": "اضافه کردن پروتکل‌های ساده ws/grpc رد شد", "是否需要自定义": "آیا نیاز به سفارشی‌سازی دارید؟", "请勿与其他端口相同": "لطفاً با سایر پورت‌ها یکسان نباشد", "是否需要设置防火墙": "آیا نیاز به تنظیم فایروال دارید؟", "防火墙": "دیوار آتش", "重启完成": "بازنشانی کامل شد", "开放防火墙相关端口": "پورت‌های مرتبط با فایروال را باز کنید", "若修改配置, 请注意关闭防火墙相关端口": "اگر تنظیمات را تغییر می‌دهید، لطفاً پورت‌های مربوط به فایروال را ببندید", "配置": "تنظیم", "跳过防火墙设置": "پرش از تنظیمات فایروال", "伪装路径": "مسیر مخفی", "不需要": "نیاز نیست", "用户名": "نام کاربر", "请输入正确的 email": "لطفاً ایمیل صحیح را وارد کنید", "是否需要自定义字符串映射": "آیا نیاز به تطبیق رشته‌های کاربری دارد؟", "请输入自定义字符串": "لطفاً رشته کاربری را وارد کنید", "最多30字符": "حداکثر ۳۰ حرف", "自定义字符串": "رشته کاربری", "映射字符串": "رشته متنابه", "检测到 target 域名已配置, 是否保留": "نام دامنه هدف که قبلاً تنظیم شده را تشخیص داده‌ایم، آیا می‌خواهید حفظ کنید؟", "请输入一个域名": "لطفاً یک نام دامنه وارد کنید", "域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用": "نام دامنه باید از tlsv1.3، x25519 و h2 پشتیبانی کند و نباید جابجایی داشته باشد", "确认域名符合要求后请输入": "بعد از تأیید مطابقت نام دامنه با شرایط، وارد کنید", "正在检测域名请等待": "در حال بررسی نام دامنه است، لطفاً صبر کنید", "该域名不支持": "این نام دامنه پشتیبانی نمی‌شود", "该域名发生了跳转": "این نام دامنه به جایی منتقل شده است", "该域名可能不满足所有要求": "این نام دامنه ممکن است به تمامی شرایط را برآورده نکند", "是否仍要设置此域名": "آیا هنوز می‌خواهید این نام دامنه را تنظیم کنید؟", "域名": "نام دامنه", "满足所有要求": "همه‌ی شرایط را برآورده کند", "域名的": "دومین نام", "默认为": "پیش فرض به", "域名本身": "خود نام دامنه", "如不清楚具体用途, 请勿继续": "اگر کاربرد دقیق آن را نمی‌دانید، لطفاً ادامه ندهید", "是否变更": "آیا تغییر می‌کند", "负载均衡": "تعادل بار", "请选择协议为 ws 或 gRPC": "لطفاً پروتکل را به عنوان ws یا grpc انتخاب کنید", "返回": "بازگشت", "本地文件 file_manager.sh 不存在, 正在下载": "پرونده محلی file_manager.sh وجود ندارد، در حال دانلود است", "下载失败, 请手动下载并安装新版本": "دانلود ناموفق بود، لطفاً نسخه جدید را به صورت دستی دانلود و نصب کنید", "当前模式不支持此操作": "این روش در حالت فعلی پشتیبانی نمی‌شود", "配置用途可以参考文章": "برای استفاده از تنظیمات می‌توان به مقاله مراجعه کرد", "修改": "ویرایش کردن", "端口": "پورت", "不支持": "پشتیبانی نمی‌شود", "用户名修改": "تغییر نام کاربر", "请先删除多余的用户": "لطفاً ابتدا کاربران اضافی را حذف کنید", "配置修改": "تغییر تنظیمات", "检测到 Xray 的权限控制, 启动修改程序": "اجازه‌های کنترل xray شناسایی شد، برنامه تغییرات را شروع کنید", "修改完成": "تغییرات انجام شد", "若更新无效, 建议直接卸载再安装": "اگر به‌روزرسانی نتیجه‌ای نداشت، پیشنهاد می‌شود مستقیماً از بین ببرید و دوباره نصب کنید", "部分新功能需要重新安装才可生效": "برخی از ویژگی‌های جدید نیاز به نصب مجدد دارند تا فعال شوند", "检测到存在最新版": "نسخه جدیدتری شناسایی شده است", "脚本可能未兼容此版本": "اسکریپت ممکن است با این نسخه سازگار نباشد", "是否更新": "آیا به‌روزرسانی می‌شود", "启动失败": "شروع ناموفق", "是否回滚到之前的版本": "آیا به نسخه قبلی بازگردانده می‌شود؟", "未执行回滚操作": "عملکرد برگشت انجام نشده است", "正在回滚": "در حال بازگرداندن", "已成功回滚到之前的": "به موفقیت به نسخه قبل بازگردانده شد", "版本": "نسخه", "回滚失败": "بازگرداندن شکست خورد", "重装": "بازسازی", "Reality 协议有流量偷跑的风险": "پروتکل ریالیتی خطر دارد که ترافیک از آن خارج شود", "已跳过安装": "نصب را رد کرده‌اید", "已存在, 跳过编译安装过程": "قبلاً وجود دارد، فرآیند کامپایل و نصب را رد کنید", "检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装": "نگین‌کس نصب شده توسط مجموعه دیگر را تشخیص داده است، ادامه نصب باعث درگیری خواهد شد، لطفاً پس از حل مشکل، نصب کنید", "即将下载已编译的": "به زودی دانلود شده‌است", "不支持的系统架构": "ساختار سیستم پشتیبانی نشده است", "当前安装模式不需要": "حالت فعلی نصب نیاز به آن ندارد", "备份旧版": "نسخه قدیمی را ذخیره کنید", "删除旧版": "نسخه قدیم را حذف کنید", "是否保留原 Nginx 配置文件": "آیا فایل تنظیمات اصلی nginx را حفظ کنید؟", "原配置文件已删除": "پرونده تنظیمات اصلی حذف شده است", "原配置文件已保留": "پرونده تنظیمات اصلی نگهداری شده است", "删除": "حذف کردن", "备份": "پشتیبان‌گیری", "已为最新版": "برای نسخه جدیدترین آماده شده است", "设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)": "تنظیم برنامه‌های خودکار به‌روزرسانی پس‌زمینه (شامل: اسکریپت/xray/nginx)", "设置自动更新": "تنظیم به‌روزرسانی خودکار", "已设置自动更新": "به‌روزرسانی خودکار تنظیم شده است", "是否关闭": "آیا بسته شود", "删除自动更新": "به‌روزرسانی خودکار را حذف کنید", "安装 SSL 证书生成脚本依赖": "نصب وابستگی‌های اسکریپت تولید گواهینامه ssl", "安装 SSL 证书生成脚本": "نصب اسکریپت تولید گواهینامه ssl", "检测到原域名配置存在, 是否跳过域名设置": "تنظیمات دامنه اصلی قبلی شناسایی شده است، آیا تنظیمات دامنه را رد کنید؟", "无法获取公网IP地址": "نمی‌توان آدرس ip عمومی را بدست آورد", "安装终止": "نصب متوقف شد", "已跳过域名设置": "تنظیمات دامنه رد شد", "确定域名信息": "اطلاعات دامنه را تأیید کنید", "请输入你的域名信息": "لطفاً اطلاعات دامنه خود را وارد کنید", "请选择公网IP(IPv4/IPv6)或手动输入域名": "لطفاً ip عمومی (ipv4/ipv6) را انتخاب کنید یا نام دامنه را به صورت دستی وارد کنید", "正在获取公网IP信息, 请耐心等待": "دارد اطلاعات آی‌پی عمومی را دریافت می‌کند، لطفاً صبر کنید", "此选项用于服务器商仅提供域名访问服务器": "این گزینه برای سرویس‌دهندگانی است که تنها دسترسی به سرور با نام دامنه را فراهم می‌کنند", "注意服务器商域名添加 CNAME 记录": "توجه داشته باشید که شرکت سرور، رکورد cname را به نام دامنه اضافه کند", "域名DNS解析IP": "dns نام دامنه به آدرس ip تبدیل می‌شود", "公网IP/域名": "آی‌پی عمومی/نام دامنه", "域名DNS解析IP与公网IP匹配": "dns نام دامنه با ip عمومی مطابقت دارد", "请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray": "لطفاً مطمئن شوید که رکورد a/aaaa درست به نام دامنه اضافه شده است، در غیر این صورت xray قابلیت استفاده صحیح نخواهد داشت", "域名DNS解析IP与公网IP不匹配, 请选择": "dns تحلیل نام دامنه ip با ip عمومی مطابقت ندارد، لطفاً انتخاب کنید", "继续安装": "نصب را ادامه دهید", "重新输入": "دوباره وارد کنید", "终止安装": "نصب را متوقف کنید", "检测到原IP配置存在, 是否跳过IP设置": "پیکربندی ip اصلی شناسایی شد، آیا می‌خواهید از تنظیمات ip گذشته شوید؟", "已跳过IP设置": "تنظیمات ip پرشده شد", "确定公网IP信息": "اطلاعات ip عمومی را مشخص کنید", "请选择公网IP为IPv4或IPv6": "لطفاً ip عمومی را به عنوان ipv4 یا ipv6 انتخاب کنید", "手动输入": "ورود دستی", "端口未被占用": "پورت اشغال نشده است", "检测到": "شنیده شد", "端口被占用": "پورت در حال استفاده است", "以下为": "زیرا در", "端口占用信息": "اطلاعات استفاده از پورت", "尝试终止占用的进程": "تلاش برای متوقف کردن فرآیندی که در حال استفاده است", "证书测试签发成功, 开始正式签发": "ثبت شناسنامه با موفقیت انجام شد، شروع به صدور رسمی", "证书测试签发失败": "امکان ارسال گواهینامه آزمایشی وجود ندارد", "证书生成成功": "تصدیق تولید شد", "证书配置成功": "تنظیمات گواهینامه با موفقیت انجام شد", "证书生成失败": "ناموفقیت در تولید گواهینامه", "检测到 Xray 配置过多用户": "کشف شد که تنظیمات xray از تعداد بیش از حد کاربران استفاده می‌کنند", "是否保留原 Xray 配置文件": "آیا پرونده تنظیمات اصلی xray را حفظ کنید؟", "添加简单 ws/gRPC 协议": "افزودن پروتکل‌های ساده ws/grpc", "检测到配置文件, 是否读取配置文件": "پرونده تنظیمات شناسایی شد، آیا می‌خواهید پرونده تنظیمات را بخوانید؟", "已删除配置文件": "پروفایل حذف شده", "已保留配置文件": "پروفایل ذخیره شده است", "检测到当前安装模式与配置文件的安装模式不一致": "مشاهده شد که حالت نصب فعلی با حالت نصب فایل پیکربندی مطابقت ندارد", "是否保留配置文件 (强烈不建议)": "آیا فایل پیکربندی را حفظ کنید (به شدت توصیه نمی‌شود)", "请务必确保配置文件正确": "لطفاً حتماً مطمئن شوید که فایل پیکربندی درست است", "检测到配置文件不完整, 是否保留配置文件": "پرونده تنظیمات ناقص شناسایی شد، آیا می‌خواهید پرونده تنظیمات را حفظ کنید؟", "配置删除": "پاک کردن تنظیمات", "设置 Nginx 开机自启": "تنظیم اتوماتیک شروع nginx در هنگام روشن شدن سیستم", "设置": "تنظیمات", "开机自启": "روشن شدن خودکار", "关闭 Nginx 开机自启": "nginx را در زمان روشن شدن خودکار غیرفعال کنید", "关闭": "بستن", "重启": "بازنشانی", "启动": "شروع کردن", "停止": "متوقف شوید", "新版本已自动设置证书自动更新": "نسخه جدید به طور خودکار تنظیم شده است تا گواهینامه‌ها را به صورت خودکار به روزرسانی کند", "老版本请及时删除 废弃的 改版证书自动更新": "نسخه قدیمی را به موقع حذف کنید، گواهینامه‌های منسوخ شده به صورت خودکار به روز می‌شوند", "已设置改版证书自动更新": "به‌روزرسانی خودکار گواهینامه‌های بازطراحی شده تنظیم شده است", "是否需要删除改版证书自动更新 (请删除)": "آیا نیاز است که به‌روزرسانی خودکار گواهینامه بازطراحی شده حذف شود (لطفاً حذف کنید)", "删除改版证书自动更新": "حذف اتوماتیک به روزرسانی گواهینامه بازطراحی شده", "已过期": "منقضی شده است", "证书生成日期": "تاریخ تولید گواهینامه", "证书生成天数": "روزهای تولید گواهینامه", "证书剩余天数": "روز‌های باقی‌مانده گواهینامه", "是否立即更新证书": "آیا شناسنامه بلافاصله به روزرسانی می‌شود؟", "证书签发工具不存在, 请确认是否证书为脚本签发": "ابزار امضا کردن گواهینامه وجود ندارد، لطفاً تأیید کنید که آیا گواهینامه با اسکریپت امضا شده است", "证书更新": "به‌روزرسانی گواهینامه", "本地文件 fail2ban_manager.sh 不存在, 正在下载": "پرونده محلی fail2ban_manager.sh وجود ندارد، در حال دانلود است", "检测到日志文件大小如下:": "اندازه فایل روزنامه به شرح زیر تشخیص داده شد", "即将清除": "به زودی پاک می‌شود", "日志清理": "پاکسازی روزنامه", "保留现有自动清理日志任务": "ماموریت پاکسازی خودکار روزنامه‌ها را حفظ کنید", "是否需要设置自动清理日志": "آیا نیاز به تنظیم خودکار پاک کردن روزنامه‌ها وجود دارد؟", "清空屏幕": "صفحه را خالی کنید", "将在 每周三 04:00 自动清空日志": "روزانه در هر چهارشنبه ساعت 04:00 صبح خودکار روزنامه پاک می‌شود", "已设置自动清理日志任务": "وظیفه خودکار پاکسازی روزنامه‌ها تنظیم شده است", "是否需要删除现有自动清理日志任务": "آیا نیاز به حذف وظیفه پاکسازی خودکار روزنامه فعلی وجود دارد؟", "删除自动清理日志任务": "وظیفه خودکار حذف روزنامه‌ها را حذف کنید", "设置自动清理日志": "تنظیم خودکار پاک کردن روزنامه‌ها", "配置分享": "به اشتراک گذاری تنظیمات", "分享链接": "لینک اشتراک", "二维码": "کد qr", "生成分享链接": "لینک اشتراک‌گذاری را تولید کنید", "安装成功": "نصب موفقیت‌آمیز", "目前分享链接规范为实验阶段, 请自行判断是否适用": "در حال حاضر، استاندارد لینک اشتراک به عنوان مرحله آزمایشی است و لطفاً خودتان تصمیم بگیرید که آیا مناسب است یا نه", "配置信息": "اطلاعات تنظیم", "主机": "سرور", "用户id": "شناسه کاربر", "加密": "رمز‌گذاری", "传输协议": "پروتکل انتقال", "底层传输安全": "امنیت انتقال لایه پایین", "路径": "مسیر", "不要落下": "نگذار از دست بیفتد", "不需要加": "نیاز به افزودن ندارد", "流控": "کنترل جریان", "即将申请证书, 支持使用自定义证书": "در حال درخواست گواهینامه است، از استفاده از گواهینامه‌های سفارشی پشتیبانی می‌کند", "如需使用自定义证书, 请按如下步骤:": "برای استفاده از گواهینامه سفارشی، لطفاً مراحل زیر را دنبال کنید", "1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)": "۱. فایل گواهینامه را با نام جدیدی به نام: کلید خصوصی (xray.key)، گواهینامه (xray.crt) تغییر نام دهید", "2. 将重命名后的证书文件放入": "۲. فایل گواهینامه با نام تغییر یافته را قرار دهید", "目录后再运行脚本": "پس از فهرست، اسکریپت را اجرا کنید", "3. 重新运行脚本": "۳. دوباره اسکریپت را اجرا کنید", "是否继续": "آیا ادامه دادن؟", "所有证书文件均已存在, 是否保留": "تمام فایل‌های گواهینامه وجود دارد، آیا حفظ شود؟", "已删除": "حذف شده است", "证书应用": "کاربرد گواهینامه", "证书文件已存在, 是否保留": "پرونده گواهینامه وجود دارد، آیا حفظ می‌شود؟", "证书签发残留文件已存在, 是否保留": "پرونده‌های باقیمانده از صدور گواهینامه وجود دارد، آیا نگهداری می‌شود؟", "添加": "اضافه کردن", "请选择支持的 TLS 版本": "لطفاً نسخه tls مورد پشتیبانی را انتخاب کنید", "兼容模式": "حالت سازگار", "安全模式": "حالت امن", "已切换至": "به این تبدیل شده است", "请先安装": "لطفاً ابتدا نصب کنید", "此模式不支持修改": "این روش از تغییر پذیرش نمی‌کند", "即将显示用户, 一次仅能显示一个": "کاربران به زودی نمایش داده می‌شوند، اما فقط یک کاربر در هر بار نمایش داده می‌شود", "请选择显示用户使用的协议": "لطفاً پروتکل مورد استفاده کاربر را انتخاب کنید", "请选择要显示的用户编号": "لطفاً شماره کاربر مورد نظر برای نمایش را انتخاب کنید", "选择错误": "انتخاب اشتباه", "请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户": "لطفاً مستقیماً در منوی اصلی [اطلاعات پیکربندی xray] را انتخاب کنید تا کاربر اصلی نمایش داده شود", "请先检测 Xray 是否正确安装": "لطفاً ابتدا بررسی کنید که آیکس ری به درستی نصب شده است یا خیر", "是否继续显示用户": "آیا نمایش کاربر ادامه یابد", "此模式不支持删除用户": "این روش از حذف کاربر پشتیبانی نمی‌کند", "即将添加用户, 一次仅能添加一个": "کاربران به زودی اضافه می‌شوند، اما فقط یک کاربر در هر بار قابل اضافه کردن است", "请选择添加用户使用的协议": "لطفاً پروتکل استفاده شده برای افزودن کاربر را انتخاب کنید", "添加用户": "افزودن کاربر", "是否继续添加用户": "آیا می‌خواهید به افزودن کاربر ادامه دهید؟", "此模式不支持添加用户": "این روش اضافه کردن کاربر را پشتیبانی نمی‌کند", "即将删除用户, 一次仅能删除一个": "کاربر قرار است حذف شود، فقط یک نفر در هر بار قابل حذف است", "请选择删除用户使用的协议": "لطفاً توافقنامه‌ای که توسط کاربر استفاده می‌شود را انتخاب کنید", "请选择要删除的用户编号": "لطفاً شماره کاربر مورد نظر برای حذف را انتخاب کنید", "主用户无法删除": "کاربر اصلی نمی‌تواند حذف شود", "删除用户": "کاربر را حذف کنید", "是否继续删除用户": "آیا می‌خواهید کاربر را حذف کنید؟", "文件不存在": "فایل وجود ندارد", "已配置 Xray 流量统计": "آمار ترافیک xray تنظیم شده است", "是否需要关闭此功能": "آیا نیاز به غیرفعال کردن این ویژگی است؟", "关闭 Xray 流量统计": "آمار جریان xray را بستن", "流量统计需要使用": "برای آمار ترافیک باید استفاده کرد", "可能会影响 Xray 性能": "ممکن است بر عملکرد ایکس‌ری تأثیر بگذارد", "设置 Xray 流量统计": "تنظیم آمار جریان xray", "已卸载": "از نصب خارج شده است", "是否卸载": "آیا باید حذف شود؟", "是否删除所有脚本文件": "آیا می‌خواهید تمام فایل‌های اسکریپت را حذف کنید؟", "已删除所有文件": "تمام فایل‌ها حذف شدند", "ヾ( ̄▽ ̄) 拜拜~": "(¯▽¯) سلام ~", "已保留脚本文件 (包含 SSL 证书等)": "فایل‌های اسکریپت (شامل گواهینامه ssl و غیره) ذخیره شده است", "是否保留配置文件": "آیا فایل پیکربندی را حفظ کنید", "已清空证书遗留文件": "فایل‌های باقی‌مانده از گواهینامه خالی شده است", "秒后": "ثانیه بعد", "检测最新版本失败": "شکست در تشخیص آخرین نسخه", "新版本": "نسخه جدید", "更新内容": "محتوای به‌روزرسانی", "存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新": "نسخه جدیدی وجود دارد، اما تغییرات نسخه‌ها بسیار زیاد است و ممکن است بازهم ناسازگاری وجود داشته باشد. آیا به روزرسانی می‌کنید؟", "存在新版本, 是否更新": "نسخه جدیدی وجود دارد، آیا می‌خواهید به روزرسانی کنید؟", "检测 脚本 最新版本失败": "شکست در بررسی آخرین نسخه اسکریپت", "脚本 版本差别过大, 跳过更新": "نسخه‌ی اسکریپت بسیار متفاوت است، به‌روزرسانی را رد کنید", "更新完成": "به‌روزرسانی کامل شد", "脚本版本变化较大, 若服务无法正常运行请卸载后重装": "نسخه‌ی اسکریپت تغییرات قابل توجهی داشته است، لطفاً در صورت عدم عملکرد صحیح خدمات، آن را حذف کرده و دوباره نصب کنید", "当前版本为最新版本": "نسخه فعلی جدیدترین نسخه است", "下载最新脚本": "آخرین اسکریپت را دانلود کنید", "该选项暂时无法使用": "این گزینه در حال حاضر قابل استفاده نیست", "此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装": "این روش برای توازن بار توصیه می‌شود، در شرایط عادی توصیه نمی‌شود که استفاده شود، آیا نصب می‌کنید", "变更": "تغییر", "负载均衡配置": "پیکربندی توازن بار", "清除日志文件": "پاک کردن فایل‌های روزنامه", "查看证书状态": "وضعیت گواهینامه را بررسی کنید", "更新证书有效期": "به روزرسانی مدت اعتبار گواهینامه", "设置证书自动更新": "تنظیم به‌روزرسانی خودکار گواهینامه", "设置 Fail2ban 防暴力破解": "تنظیم فایل2بان برای جلوگیری از حملات کلمه‌پسوردی", "显示帮助": "نمایش کمک", "更新": "به‌روزرسانی", "脚本卸载": "اسکریپت‌های خارج شده", "显示安装信息": "اطلاعات نصب را نشان دهید", "加速": "سرعت بخشیدن", "显示": "نمایش", "访问信息": "اطلاعات بازدید", "错误信息": "پیام خطا", "脚本版本变化较大, 可能存在不兼容情况, 是否继续使用": "نسخه‌ی اسکریپت تغییرات زیادی داشته است و ممکن است با نسخه‌های قبلی سازگار نباشد، آیا می‌خواهید ادامه دهید؟", "检测失败": "عملیات تشخیص با شکست مواجه شد", "有新版": "نسخه جدیدی وجود دارد", "最新版": "نسخه جدیدترین", "版本未知": "نسخه ناشناخته", "运行中": "در حال اجرا", "无需测试": "نیاز به آزمایش ندارد", "未运行": "در حال اجرا نیست", "无法连通": "نمی‌توان به آن متصل شد", "本地正常": "وضعیت محلی عادی است", "脚本维护中.. 请稍后再试": "اسکریپت در حال نگهداری است.. لطفاً بعداً دوباره امتحان کنید", "无法检测所需依赖的在线版本, 请稍后再试": "نمی‌توان نسخه آنلاین وابستگی مورد نیاز را تشخیص داد، لطفاً بعداً دوباره تلاش کنید", "请输入数字": "عدد را وارد کنید", "请输入 1 到 6 之间的有效数字": "لطفاً عدد معتبری بین ۱ تا ۶ وارد کنید", "无效的选择": "انتخاب نامعتبر", "请输入备份名称": "لطفاً نام پشتیبان را وارد کنید", "不需要后缀": "نیاز به پسوند نیست", "报错信息": "پیام خطا", "备份完整性可能受到影响, 请检查上述错误信息": "ممکن است کامل بودن پشتیبان‌گیری تحت تأثیر قرار گرفته باشد، لطفاً اطلاعات خطا را بررسی کنید", "备份失败": "عملیات باک‌آپ ناموفق بود", "备份成功": "ذخیره‌سازی موفقیت‌آمیز", "请确保备份文件在目录": "لطفاً مطمئن شوید که فایل‌های پشتیبان در دایرکتوری هستند", "没有找到备份文件": "پرونده پشتیبان یافت نشد", "发现多个备份文件": "چندین فایل پشتیبان یافت شد", "将使用最新的文件进行恢复": "از آخرین فایل‌ها برای بازیابی استفاده خواهد شد", "找到最新备份文件": "پیدا کردن آخرین فایل پشتیبان", "恢复备份": "بازیابی پشتیبان", "恢复成功": "بازیابی موفق", "记得安装": "یادتان باشد نصب کنید", "恢复失败": "بازیابی ناموفق", "安装管理脚本": "نصب اسکریپت مدیریت", "作者": "نویسنده", "当前模式": "حالت فعلی", "当前语言": "زبان فعلی", "可以使用": "می‌تواند استفاده شود", "命令管理脚本": "اسکریپت مدیریت دستور", "版本检测": "تشخیص نسخه", "脚本": "اسکریپت", "运行状态": "حالت اجرا", "连通性": "اتصال", "安装向导": "راهنمای نصب", "配置变更": "تغییر تنظیمات", "用户管理": "مدیریت کاربران", "查看": "مشاهده کنید", "用户": "کاربر", "查看信息": "اطلاعات را ببینید", "实时访问日志": "روگردان وقوع زمان واقع", "实时错误日志": "روزنامه خطاها در زمان واقعی", "服务相关": "خدمات مرتبط", "所有服务": "تمام خدمات", "证书相关": "مربوط به گواهینامه", "证书状态": "وضع گواهینامه", "证书有效期": "مدت اعتبار گواهینامه", "证书自动更新": "به‌روزرسانی خودکار گواهینامه", "其他选项": "گزینه‌های دیگر", "自动更新": "به‌روزرسانی خودکار", "防暴力破解": "پاداشت خرابکاری", "流量统计": "آمار جریان", "清除": "پاک کردن", "日志文件": "فایل روزنامه", "测试": "آزمایش", "服务器网速": "سرعت اینترنت سرور", "备份恢复": "بازیابی پشتیبان", "全部文件": "تمام فایل‌ها", "恢复": "بازیابی", "卸载向导": "راهنمای خارج کردن نصب", "卸载": "حذف کردن", "清空": "خالی کردن", "证书文件": "فایل گواهینامه", "退出": "خروج", "请输入选项": "لطفاً گزینه را وارد کنید", "不建议": "توصیه نمی‌شود", "回到菜单": "برگرد به منو", "用于防止暴力破解": "برای جلوگیری از حمله به روش کلمه‌پردازی", "主菜单": "منوی اصل", "管理": "مدیریت", "状态": "وضع", "请选择一个选项": "یک گزینه انتخاب کنید", "已经安装, 跳过安装步骤": "قبلاً نصب شده است، گام نصب را رد کنید", "未安装, 请先安装": "نصب نشده است، لطفاً ابتدا نصب کنید", "规则": "قوانین", "跳过启用": "پرش از فعال‌سازی", "已启用": "فعال شده است", "请选择": "لطفاً انتخاب کنید", "操作": "عملیات", "添加自定义规则": "قوانین سفارشی اضافه کنید", "请输入新的": "لطفاً جدید را وارد کنید", "名称": "نام", "请输入日志路径": "مسیر لاگ را وارد کنید", "请输入最大重试次数": "حداکثر تعداد دفعات تلاش مجدد را وارد کنید", "最大重试次数必须在 1 到 99 之间": "حداکثر تعداد تلاش‌های مجدد باید بین ۱ تا ۹۹ باشد", "请输入封禁时间": "مدت زمان ممنوعیت را وارد کنید", "秒": "ثانیه", "封禁时间必须在 1 到 8640000 秒之间": "مدت زمان ممنوعیت باید بین ۱ تا ۸۶۴۰۰۰۰ ثانیه باشد", "自定义规则添加成功": "قوانین سفارشی با موفقیت اضافه شدند", "重启以应用新规则": "برای اعمال قوانین جدید، بازنشانی کنید", "停止成功": "موفقیت توقف", "总体状态": "وضع کلی", "默认启用的 Jail 状态": "وضع jail به طور پیش فرض فعال شده", "封锁情况": "وضع مسدود", "新版本可用": "نسخه جدید در دسترس است", "当前版本": "نسخه فعلی", "请访问": "لطفاً به دیدن", "查看更新说明": "دستورالعمل‌های به‌روزرسانی را مشاهده کنید", "正在下载新版本": "در حال دانلود نسخه جدید", "下载完成, 请重新运行脚本": "دانلود کامل شد، لطفاً دوباره اسکریپت را اجرا کنید", "跳过更新": "به‌روزرسانی را بگذارید", "当前已经是最新版本": "در حال حاضر، این آخرین نسخه است", "用法": "استفاده", "文件扩展名": "نام امتداد فایل", "目录路径": "مسیر فهرست", "目录": "فهرست", "不存在, 请检查路径": "وجود ندارد، لطفاً مسیر را بررسی کنید", "列出所有": "همه را لیست کنید", "文件": "فایل", "文件名": "نام فایل", "序号": "شماره ترتیب", "请输入网址 (例如 hey.run)": "لطفاً آدرس وب (مثلاً hey.run) را وارد کنید", "不要包含 http:// 或 https:// 开头": "نامی که با http:// یا https:// شروع می‌شود را شامل نکنید", "已创建": "ایجاد شده است", "请输入主机": "لطفاً میزبان را وارد کنید", "请输入权重": "لطفاً وزن را وارد کنید", "追加完成": "اضافه کردن به پایان رسیدن", "请输入要编辑的文件编号": "لطفاً شماره فایل مورد نظر برای ویرایش را وارد کنید", "未安装, 正在尝试安装": "نصب نشده، در حال تلاش برای نصب است", "已编辑": "ویرایش شده", "请输入要删除的文件编号": "شماره فایل مورد نظر برای حذف را وارد کنید", "不支持的文件扩展名": "پسوند فایل پشتیبانی نشده است", "创建一个新的": "یک چیز جدید ایجاد کنید", "编辑一个已存在的": "ویرایش یک مورد موجود", "删除一个已存在的": "حذف یک مورد موجود", "无效选项, 请重试": "گزینه نامعتبر، لطفاً دوباره تلاش کنید", "重启成功": "با موفقیت راه‌اندازی شد", "重启失败": "شکست در راه‌اندازی مجدد", "请检查配置文件是否有误": "لطفاً بررسی کنید که آیا فایل تنظیمات دچار خطا است یا نه", "未启用或配置异常": "خطا در فعال‌سازی یا تنظیم", "是否添加 Reality 负载均衡": "آیا بارگیری واقعی اضافه شود", "使用此功能前,建议先阅读作者教程": "قبل از استفاده از این ویژگی، توصیه می‌شود که آموزش نویسنده را بخوانید", "已跳过": "پرش شده است", "如用作 Reality 负载均衡二级服务器则无需安装": "اگر به عنوان سرور دوم بارگیری کننده واقعیت استفاده شود، نصب لازم نیست", "是否额外安装 nginx 前置保护": "آیا نگهدارنده nginx اضافه می‌شود؟", "推荐": "توصیه شده", "检测到已开启 Reality 负载均衡": "تعادل بار realiti فعال شده است", "如用作 Reality 负载均衡主服务器必须安装": "اگر به عنوان سرور اصلی تعادل بار reality استفاده شود، باید نصب شود", "检测到已安装": "نرم‌افزار نصب شده شناسایی شد", "已取消卸载": "لغو شدیدن از نصب", "下载失败": "دریافت ناموفق است", "下载成功": "دانلود با موفقیت انجام شد", "解压失败": "بازکردن فایل ناموفق بود", "链接分享": "به اشتراک گذاری پیوند", "修改语言": "زبان را ویرایش کنید", "此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装": "این روش فقط برای انتقال ترافیک استفاده می‌شود و در سایر موارد توصیه نمی‌شود. آیا می‌خواهید نصب کنید؟", "信息": "اطلاعات", "配置不完整, 退出更新": "پیکربندی ناقص است، به‌روزرسانی را ترک کنید", "配置不存在, 退出更新": "پیکربندی موجود نیست، به‌روزرسانی را ترک کنید", "无效的选择, 请重试": "انتخاب نامعتبر، لطفاً دوباره تلاش کنید", "systemd 无法读取 SSH 日志": "systemd نمی‌تواند روزنامه‌های ssh را بخواند", "网址不能包含 http:// 或 https:// 前缀": "آدرس وب نباید پیشوند http:// یا https:// داشته باشد", "日志文件清空失败": "پاکسازی فایل روزنامه ناموفق بود", "当前用户是 root 用户, 开始安装": "کاربر فعلی، کاربر روت است؛ نصب را شروع کنید", "当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本": "کاربر فعلی روت نیست، لطفاً به کاربر روت تغییر مسیر دهید و سپس اسکریپت را دوباره اجرا کنید", "已跳过设置自动清理日志": "تنظیمات پاکسازی خودکار روزنامه‌ها نادیده گرفته شده است", "脚本更新失败": "به‌روزرسانی اسکریپت ناموفق بود", "更新失败": "به‌روزرسانی ناموفق بود", "更新脚本": "برنامه‌ی به‌روزرسانی", "更新向导": "راهنمای به‌روزرسانی", "频繁更新 Nginx, 请确认 Nginx 有更新的必要": "به‌طور مکرر nginx را به‌روزرسانی کنید، لطفاً مطمئن شوید که nginx نیاز به به‌روزرسانی دارد", "开始更新": "آغاز به روزرسانی", "建议选择 TLSv1.3 only (安全模式)": "پیشنهاد می‌شود فقط tlsv1.3 انتخاب شود (حالت امن)", "由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)": "از آنجا که h3 فقط tlsv1.3 را پشتیبانی می‌کند، فقط tlsv1.3 (حالت امن) پشتیبانی می‌شود", "请选择 TLS 版本": "tls نسخه را انتخاب کنید", "建议选择 TLSv1.3 (安全模式)": "پیشنهاد می‌شود tlsv1.3 (حالت امن) انتخاب شود", "当前模式不支持": "حالت فعلی پشتیبانی نمی‌کند", "Nginx配置文件不存在 或 当前模式不支持": "فایل تنظیمات nginx موجود نیست یا حالت فعلی پشتیبانی نمی‌کند", "已禁用": "غیرفعال شده است", "管理模块": "مدول مدیریت", "服务管理": "مدیریت خدمات", "管理 Fail2ban 模块": "مدیریت ماژول fail2ban", "未找到任何模块化配置文件": "هیچ فایل پیکربندی مدولاری یافت نشد", "模块名称": "نام مدول", "请选择要管理的模块": "ماژول مورد نظر برای مدیریت را انتخاب کنید", "启用": "فعال کردن", "禁用": "غیرفعال کردن", "模块": "ماژول", "操作已取消": "عملیات لغو شد", "可能自动更新后有兼容问题, 谨慎启用": "ممکن است پس از به‌روزرسانی خودکار مشکلات سازگاری وجود داشته باشد؛ لطفاً با احتیاط فعال کنید", "是否启用": "فعال‌سازی شود؟", "是否": "آیا", "是否下载并安装新版本": "آیا نسخه جدید را دانلود و نصب می‌کنید؟", "无法获取网卡, 将监控所有网卡": "نمی‌توان کارت شبکه را دریافت کرد، تمام کارتهای شبکه تحت نظارت قرار خواهد گرفت", "监控网卡": "نگهبانی کارت شبکه", "监控端口": "پورت نظارتی", "按 q 键退出 iftop": "برای خروج از iftop، دکمه q را فشار دهید", "实时流量": "جریان زنده" } ================================================ FILE: po/cache_Russian.json ================================================ { "错误": "ошибка", "警告": "предупреждение", "未安装": "не установлен", "日志文件归档失败": "не удалось архивировать файл журнала", "日志文件已轮转并归档为": "файл журнала был переключен и архивирован как", "当前系统为": "текущая система —", "不在支持的系统列表内, 安装中断": "не входит в список поддерживаемых систем, установка прервана", "无法获取远程语言文件信息": "не удалось получить информацию о языковых файлах удаленного сервера", "正在更新语言文件": "обновляется файл языка", "语言文件更新失败": "сбой обновления языкового файла", "语言文件无效": "файл языка недействителен", "版本文件更新失败": "сбой обновления файла версии", "语言文件更新完成": "обновление языкового файла завершено", "正在安装": "устанавливается", "安装失败": "установка не удалась", "将使用默认语言": "будет использован язык по умолчанию", "未找到": "не найдено", "不支持的语言": "язык, который не поддерживается", "发现语言文件更新": "обнаружено обновление языкового файла", "完成": "завершить", "失败": "неудача", "在线版本检测失败, 请稍后再试": "не удалось проверить онлайн-версию, попробуйте позже", "安装": "установка", "已安装": "установлено", "自启动配置": "конфигурация автозапуска", "链接库安装": "установка библиотеки ссылок", "值为空或超出范围, 请重新输入": "значение пустое или выходит за пределы допустимого диапазона, введите снова", "值为空, 请重新输入": "значение пустое, введите заново", "确定端口": "определить порт", "请输入端口": "пожалуйста, введите порт", "默认值": "значение по умолчанию", "请输入 0-65535 之间的值": "пожалуйста, введите значение от 0 до 65535", "端口不允许使用, 请重新输入": "порт недоступен, введите снова", "请选择安装协议": "пожалуйста, выберите соглашение об установке", "默认": "по умолчанию", "请输入": "пожалуйста, введите", "请输入有效的数字": "пожалуйста, введите действительное число", "是否添加简单 ws/gRPC 协议 用于负载均衡": "добавить ли простой протокол ws/grpc для балансировки нагрузки", "如不清楚具体用途, 请勿选择": "если неясно конкретное назначение, пожалуйста, не выбирайте", "已跳过添加简单 ws/gRPC 协议": "пропущено добавление простых протоколов ws/grpc", "是否需要自定义": "требуется ли настройка", "请勿与其他端口相同": "не используйте тот же порт, что и другие", "是否需要设置防火墙": "нужно ли устанавливать брандмауэр", "防火墙": "брандмауэр", "重启完成": "перезагрузка завершена", "开放防火墙相关端口": "открыть соответствующие порты брандмауэра", "若修改配置, 请注意关闭防火墙相关端口": "если изменяете настройки, обратите внимание на закрытие соответствующих портов брандмауэра", "配置": "конфигурация", "跳过防火墙设置": "пропустить настройку брандмауэра", "伪装路径": "путь маскировки", "不需要": "не нужно", "用户名": "имя пользователя", "请输入正确的 email": "пожалуйста, введите правильный адрес электронной почты", "是否需要自定义字符串映射": "требуется ли пользовательское сопоставление строк", "请输入自定义字符串": "пожалуйста, введите пользовательскую строку", "最多30字符": "максимум 30 символов", "自定义字符串": "пользовательская строка", "映射字符串": "сопоставление строки", "检测到 target 域名已配置, 是否保留": "обнаружено, что домен target уже настроен. сохранить", "请输入一个域名": "пожалуйста, введите доменное имя", "域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用": "доменное имя должно поддерживать tlsv1.3, x25519 и h2, а также не использовать перенаправления", "确认域名符合要求后请输入": "после подтверждения соответствия доменного имени требованиям, введите", "正在检测域名请等待": "проверка домена, пожалуйста, подождите", "该域名不支持": "данный домен не поддерживается", "该域名发生了跳转": "это доменное имя перенаправляется", "该域名可能不满足所有要求": "данный домен может не соответствовать всем требованиям", "是否仍要设置此域名": "нужно ли все еще настраивать это доменное имя", "域名": "доменное имя", "满足所有要求": "удовлетворить все требования", "域名的": "домена", "默认为": "по умолчанию", "域名本身": "само доменное имя", "如不清楚具体用途, 请勿继续": "если неясно конкретное назначение, не продолжайте", "是否变更": "изменить ли", "负载均衡": "балансировка нагрузки", "请选择协议为 ws 或 gRPC": "выберите протокол ws или grpc", "返回": "вернуться", "本地文件 file_manager.sh 不存在, 正在下载": "локальный файл file_manager.sh не существует, идёт загрузка", "下载失败, 请手动下载并安装新版本": "скачивание не удалось, пожалуйста, скачайте и установите новую версию вручную", "当前模式不支持此操作": "текущий режим не поддерживает эту операцию", "配置用途可以参考文章": "конфигурацию использования можно найти в статье", "修改": "изменить", "端口": "порт", "不支持": "не поддерживается", "用户名修改": "изменение имени пользователя", "请先删除多余的用户": "пожалуйста, сначала удалите лишних пользователей", "配置修改": "изменение конфигурации", "检测到 Xray 的权限控制, 启动修改程序": "обнаружено управление доступом xray, запуск программы модификации", "修改完成": "изменение завершено", "若更新无效, 建议直接卸载再安装": "если обновление неэффективно, рекомендуется полностью удалить приложение, а затем установить заново", "部分新功能需要重新安装才可生效": "некоторые новые функции вступают в силу только после повторной установки", "检测到存在最新版": "обнаружена новейшая версия", "脚本可能未兼容此版本": "скрипт может быть несовместим с этой версией", "是否更新": "обновить ли", "启动失败": "запуск не удался", "是否回滚到之前的版本": "вернуться ли к предыдущей версии", "未执行回滚操作": "операция отката не выполнена", "正在回滚": "возвращается к исходному состоянию", "已成功回滚到之前的": "успешно отменено до предыдущего", "版本": "версия", "回滚失败": "откат не удался", "重装": "переустановить", "Reality 协议有流量偷跑的风险": "протокол reality имеет риск утечки трафика", "已跳过安装": "установка пропущена", "已存在, 跳过编译安装过程": "существует, пропустить процесс компиляции и установки", "检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装": "обнаружен nginx, установленный другим пакетом. продолжение установки приведёт к конфликту. пожалуйста, устраните проблему перед установкой", "即将下载已编译的": "готовится к загрузке скомпилированный", "不支持的系统架构": "неподдерживаемая архитектура системы", "当前安装模式不需要": "текущий режим установки не требуется", "备份旧版": "резервная копия старой версии", "删除旧版": "удалить старую версию", "是否保留原 Nginx 配置文件": "сохранить ли исходный файл конфигурации nginx", "原配置文件已删除": "исходный файл конфигурации удален", "原配置文件已保留": "исходный конфигурационный файл сохранен", "删除": "удалить", "备份": "резервная копия", "已为最新版": "уже для последней версии", "设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)": "настройка фоновой автоматической программы обновления (включая: скрипт/xray/nginx)", "设置自动更新": "настроить автоматическое обновление", "已设置自动更新": "автоматическое обновление установлено", "是否关闭": "закрыть ли", "删除自动更新": "удалить автоматическое обновление", "安装 SSL 证书生成脚本依赖": "установить зависимости для скрипта генерации ssl-сертификата", "安装 SSL 证书生成脚本": "установить скрипт для создания ssl-сертификата", "检测到原域名配置存在, 是否跳过域名设置": "обнаружено существующее конфигурирование исходного домена, пропустить ли настройку домена", "无法获取公网IP地址": "невозможно получить публичный ip-адрес", "安装终止": "установка завершена", "已跳过域名设置": "настройка домена пропущена", "确定域名信息": "подтвердить информацию о домене", "请输入你的域名信息": "пожалуйста, введите информацию о вашем домене", "请选择公网IP(IPv4/IPv6)或手动输入域名": "выберите ip-адрес (ipv4/ipv6) или вручную введите доменное имя", "正在获取公网IP信息, 请耐心等待": "получение информации о публичном ip-адресе, пожалуйста, подождите", "此选项用于服务器商仅提供域名访问服务器": "этот вариант используется, когда серверный провайдер предоставляет доступ к серверу только по доменному имени", "注意服务器商域名添加 CNAME 记录": "обратите внимание, что хостинг-провайдеру необходимо добавить запись cname для домена", "域名DNS解析IP": "dns-разрешение доменного имени в ip", "公网IP/域名": "общедоступный ip/доменное имя", "域名DNS解析IP与公网IP匹配": "dns-разрешение доменного имени на ip-адрес совпадает с публичным ip-адресом", "请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray": "пожалуйста, убедитесь, что доменное имя имеет правильные записи a/aaaa, иначе xray не будет работать корректно", "域名DNS解析IP与公网IP不匹配, 请选择": "dns-разрешение доменного имени на ip-адрес не совпадает с публичным ip-адресом, выберите", "继续安装": "продолжить установку", "重新输入": "повторно ввести", "终止安装": "прервать установку", "检测到原IP配置存在, 是否跳过IP设置": "обнаружено существующее исходное ip-конфигурация, пропустить настройку ip", "已跳过IP设置": "настройка ip пропущена", "确定公网IP信息": "определить информацию о публичном ip-адресе", "请选择公网IP为IPv4或IPv6": "выберите публичный ip-адрес в формате ipv4 или ipv6", "手动输入": "ручной ввод", "端口未被占用": "порт не занят", "检测到": "обнаружено", "端口被占用": "порт занят", "以下为": "ниже представлено", "端口占用信息": "информация об занятости портов", "尝试终止占用的进程": "попытаться завершить занятый процесс", "证书测试签发成功, 开始正式签发": "сертификат успешно протестирован, начинается официальная выдача", "证书测试签发失败": "сертификат не удалось выпустить для тестирования", "证书生成成功": "сертификат успешно создан", "证书配置成功": "конфигурация сертификата выполнена успешно", "证书生成失败": "сертификат не удалось сгенерировать", "检测到 Xray 配置过多用户": "обнаружено, что в конфигурации xray слишком много пользователей", "是否保留原 Xray 配置文件": "сохранить ли исходный файл конфигурации xray", "添加简单 ws/gRPC 协议": "добавить простой протокол ws/grpc", "检测到配置文件, 是否读取配置文件": "обнаружен файл конфигурации, считать ли файл конфигурации", "已删除配置文件": "файл конфигурации удален", "已保留配置文件": "конфигурационный файл сохранен", "检测到当前安装模式与配置文件的安装模式不一致": "обнаружено несоответствие текущего режима установки с режимом установки в конфигурационном файле", "是否保留配置文件 (强烈不建议)": "сохранить файл конфигурации (сильно не рекомендуется)", "请务必确保配置文件正确": "пожалуйста, обязательно убедитесь, что конфигурационный файл правильный", "检测到配置文件不完整, 是否保留配置文件": "обнаружено, что файл конфигурации неполный. сохранить файл конфигурации", "配置删除": "удаление конфигурации", "设置 Nginx 开机自启": "настройка автозапуска nginx при включении компьютера", "设置": "настройка", "开机自启": "автозапуск при включении", "关闭 Nginx 开机自启": "отключить автозапуск nginx при включении", "关闭": "закрыть", "重启": "перезапуск", "启动": "запуск", "停止": "остановить", "新版本已自动设置证书自动更新": "новая версия автоматически настроена для автоматического обновления сертификатов", "老版本请及时删除 废弃的 改版证书自动更新": "старые версии следует своевременно удалить. устаревшие сертификаты автоматически обновляются при изменении версии", "已设置改版证书自动更新": "автоматическое обновление сертификата изменений уже настроено", "是否需要删除改版证书自动更新 (请删除)": "нужно ли удалить автоматическое обновление сертификата измененной версии (пожалуйста, удалите)", "删除改版证书自动更新": "удалить обновление сертификата автоматически", "已过期": "истекло", "证书生成日期": "дата создания сертификата", "证书生成天数": "количество дней для генерации сертификата", "证书剩余天数": "оставшиеся дни сертификата", "是否立即更新证书": "обновить сертификат немедленно", "证书签发工具不存在, 请确认是否证书为脚本签发": "инструмент для выдачи сертификатов не существует, пожалуйста, убедитесь, был ли сертификат выдан с помощью скрипта", "证书更新": "обновление сертификата", "本地文件 fail2ban_manager.sh 不存在, 正在下载": "файл fail2ban_manager.sh отсутствует, загрузка", "检测到日志文件大小如下:": "обнаружено, что размер файла журнала следующий", "即将清除": "скоро очистить", "日志清理": "очистка журнала", "保留现有自动清理日志任务": "сохранить существующую задачу автоматической очистки журнала", "是否需要设置自动清理日志": "нужно ли настроить автоматическую очистку журнала", "清空屏幕": "очистить экран", "将在 每周三 04:00 自动清空日志": "журнал будет автоматически очищаться каждую среду в 04:00", "已设置自动清理日志任务": "автоматическая задача очистки журнала уже настроена", "是否需要删除现有自动清理日志任务": "нужно ли удалить существующую задачу автоматической очистки журнала", "删除自动清理日志任务": "удалить задачу автоматической очистки журнала", "设置自动清理日志": "настроить автоматическую очистку журнала", "配置分享": "настройка и обмен", "分享链接": "поделиться ссылкой", "二维码": "qr-код", "生成分享链接": "создать ссылку для обмена", "安装成功": "установка выполнена успешно", "目前分享链接规范为实验阶段, 请自行判断是否适用": "в настоящее время формат ссылки для совместного использования находится на экспериментальной стадии, пожалуйста, самостоятельно определите, применим ли он", "配置信息": "информация о настройках", "主机": "хост", "用户id": "идентификатор пользователя", "加密": "шифрование", "传输协议": "протокол передачи", "底层传输安全": "безопасность нижнего уровня передачи", "路径": "путь", "不要落下": "не отставать", "不需要加": "не нужно добавлять", "流控": "контроль потока", "即将申请证书, 支持使用自定义证书": "планируется подача заявки на сертификат, поддерживается использование пользовательского сертификата", "如需使用自定义证书, 请按如下步骤:": "если требуется использовать пользовательский сертификат, выполните следующие шаги", "1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)": "1. переименуйте файлы сертификатов: приватный ключ (xray.key), сертификат (xray.crt)", "2. 将重命名后的证书文件放入": "2. разместите переименованный файл сертификата в", "目录后再运行脚本": "запустить скрипт после каталога", "3. 重新运行脚本": "3. запустить скрипт заново", "是否继续": "продолжить ли", "所有证书文件均已存在, 是否保留": "все файлы сертификатов уже существуют, сохранить", "已删除": "удалено", "证书应用": "применение сертификата", "证书文件已存在, 是否保留": "файл сертификата уже существует, сохранить", "证书签发残留文件已存在, 是否保留": "оставшиеся файлы выдачи сертификата уже существуют, сохранить", "添加": "добавить", "请选择支持的 TLS 版本": "выберите поддерживаемую версию tls", "兼容模式": "режим совместимости", "安全模式": "безопасный режим", "已切换至": "уже переключено на", "请先安装": "пожалуйста, сначала установите", "此模式不支持修改": "этот режим не поддерживает изменение", "即将显示用户, 一次仅能显示一个": "пользователь будет показан в ближайшее время, одновременно может быть показан только один пользователь", "请选择显示用户使用的协议": "выберите протокол, используемый пользователем для отображения", "请选择要显示的用户编号": "выберите номер пользователя, который хотите отобразить", "选择错误": "выбор неверный", "请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户": "пожалуйста, выберите напрямую в главном меню [просмотр информации о конфигурации xray], чтобы отобразить основного пользователя", "请先检测 Xray 是否正确安装": "пожалуйста, сначала проверьте, правильно ли установлен xray", "是否继续显示用户": "продолжать ли показывать пользователя", "此模式不支持删除用户": "этот режим не поддерживает удаление пользователей", "即将添加用户, 一次仅能添加一个": "пользователь будет добавлен в ближайшее время, можно добавить только одного за раз", "请选择添加用户使用的协议": "выберите протокол, используемый для добавления пользователя", "添加用户": "добавить пользователя", "是否继续添加用户": "продолжить добавление пользователя", "此模式不支持添加用户": "этот режим не поддерживает добавление пользователей", "即将删除用户, 一次仅能删除一个": "пользователь будет удален, можно удалить только одного за раз", "请选择删除用户使用的协议": "пожалуйста, выберите протокол, используемый для удаления пользователя", "请选择要删除的用户编号": "выберите номер пользователя, которого хотите удалить", "主用户无法删除": "основной пользователь не может быть удален", "删除用户": "удалить пользователя", "是否继续删除用户": "продолжить удаление пользователя", "文件不存在": "файл не существует", "已配置 Xray 流量统计": "статистика трафика xray уже настроена", "是否需要关闭此功能": "нужно ли отключить эту функцию", "关闭 Xray 流量统计": "закрыть статистику трафика xray", "流量统计需要使用": "для статистики трафика необходимо использовать", "可能会影响 Xray 性能": "может повлиять на производительность рентгеновского аппарата", "设置 Xray 流量统计": "настройка статистики трафика xray", "已卸载": "удалено", "是否卸载": "удалить ли", "是否删除所有脚本文件": "удалить все файлы скриптов", "已删除所有文件": "все файлы удалены", "ヾ( ̄▽ ̄) 拜拜~": "( ̄▽ ̄) привет", "已保留脚本文件 (包含 SSL 证书等)": "скрипт-файл сохранён (включая ssl-сертификат и т.д.)", "是否保留配置文件": "сохранить файл конфигурации", "已清空证书遗留文件": "файлы, оставшиеся от сертификата, уже удалены", "秒后": "секунду спустя", "检测最新版本失败": "не удалось проверить последнюю версию", "新版本": "новая версия", "更新内容": "содержание обновления", "存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新": "доступна новая версия, но изменения в ней значительные, возможны несовместимости. обновить", "存在新版本, 是否更新": "доступна новая версия, обновить", "检测 脚本 最新版本失败": "не удалось проверить последнюю версию скрипта", "脚本 版本差别过大, 跳过更新": "версии скрипта слишком сильно различаются, пропускаем обновление", "更新完成": "обновление завершено", "脚本版本变化较大, 若服务无法正常运行请卸载后重装": "версия скрипта сильно изменилась, если служба не работает нормально, пожалуйста, удалите её и установите заново", "当前版本为最新版本": "текущая версия является последней", "下载最新脚本": "скачать последний скрипт", "该选项暂时无法使用": "этот вариант временно недоступен", "此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装": "этот режим рекомендуется для балансировки нагрузки, обычно не рекомендуется к использованию, установить", "变更": "изменение", "负载均衡配置": "конфигурация балансировки нагрузки", "清除日志文件": "очистить файлы журнала", "查看证书状态": "просмотреть статус сертификата", "更新证书有效期": "обновить срок действия сертификата", "设置证书自动更新": "настроить автоматическое обновление сертификата", "设置 Fail2ban 防暴力破解": "настройка fail2ban для защиты от brute-force атак", "显示帮助": "показать справку", "更新": "обновление", "脚本卸载": "удаление скрипта", "显示安装信息": "отобразить информацию об установке", "加速": "ускорение", "显示": "показать", "访问信息": "информация о посещении", "错误信息": "сообщение об ошибке", "脚本版本变化较大, 可能存在不兼容情况, 是否继续使用": "версия скрипта сильно изменилась, возможно, существуют несовместимости. продолжить использование", "检测失败": "ошибка проверки", "有新版": "есть новая версия", "最新版": "последняя версия", "版本未知": "версия неизвестна", "运行中": "в процессе выполнения", "无需测试": "не требуется тестирование", "未运行": "не запущено", "无法连通": "невозможно подключиться", "本地正常": "локально нормально", "脚本维护中.. 请稍后再试": "скрипт находится на обслуживании. пожалуйста, попробуйте позже", "无法检测所需依赖的在线版本, 请稍后再试": "невозможно обнаружить онлайн-версию необходимой зависимости, попробуйте позже", "请输入数字": "пожалуйста, введите цифры", "请输入 1 到 6 之间的有效数字": "пожалуйста, введите действительное число от 1 до 6", "无效的选择": "недопустимый выбор", "请输入备份名称": "введите имя резервной копии", "不需要后缀": "не требуется суффикс", "报错信息": "сообщение об ошибке", "备份完整性可能受到影响, 请检查上述错误信息": "целостность резервной копии может быть нарушена, пожалуйста, проверьте приведённые выше сообщения об ошибках", "备份失败": "сбой резервного копирования", "备份成功": "резервное копирование успешно выполнено", "请确保备份文件在目录": "пожалуйста, убедитесь, что файлы резервных копий находятся в каталоге", "没有找到备份文件": "резервная файл не найдена", "发现多个备份文件": "обнаружено несколько файлов резервных копий", "将使用最新的文件进行恢复": "будет использован последний файл для восстановления", "找到最新备份文件": "найти последний файл резервной копии", "恢复备份": "восстановить резервную копию", "恢复成功": "восстановление успешно", "记得安装": "помните установить", "恢复失败": "восстановление не удалось", "安装管理脚本": "установить скрипт управления", "作者": "автор", "当前模式": "текущий режим", "当前语言": "текущий язык", "可以使用": "можно использовать", "命令管理脚本": "скрипт управления командами", "版本检测": "проверка версии", "脚本": "сценарий", "运行状态": "рабочее состояние", "连通性": "связность", "安装向导": "мастер установки", "配置变更": "изменение конфигурации", "用户管理": "управление пользователями", "查看": "просмотреть", "用户": "пользователь", "查看信息": "просмотр информации", "实时访问日志": "журнал доступа в реальном времени", "实时错误日志": "журнал ошибок в реальном времени", "服务相关": "сервисный связанный", "所有服务": "все услуги", "证书相关": "сертификаты, связанные", "证书状态": "статус сертификата", "证书有效期": "срок действия сертификата", "证书自动更新": "автоматическое обновление сертификата", "其他选项": "другие варианты", "自动更新": "автоматическое обновление", "防暴力破解": "антивизионное растрескивание", "流量统计": "статистика трафика", "清除": "очистить", "日志文件": "журнал файлов", "测试": "тест", "服务器网速": "скорость интернета на сервере", "备份恢复": "резервное восстановление", "全部文件": "все файлы", "恢复": "восстановление", "卸载向导": "мастер удаления", "卸载": "удалить", "清空": "очистить", "证书文件": "файл сертификата", "退出": "выйти", "请输入选项": "пожалуйста, введите вариант", "不建议": "не рекомендуется", "回到菜单": "вернуться к меню", "用于防止暴力破解": "для предотвращения атак методом перебора", "主菜单": "главное меню", "管理": "управление", "状态": "состояние", "请选择一个选项": "выберите один из вариантов", "已经安装, 跳过安装步骤": "уже установлено, пропустить шаг установки", "未安装, 请先安装": "не установлено, сначала установите", "规则": "правило", "跳过启用": "пропустить включение", "已启用": "уже включено", "请选择": "пожалуйста, выберите", "操作": "операция", "添加自定义规则": "добавить пользовательское правило", "请输入新的": "пожалуйста, введите новое", "名称": "название", "请输入日志路径": "пожалуйста, введите путь к журналу", "请输入最大重试次数": "пожалуйста, введите максимальное количество попыток", "最大重试次数必须在 1 到 99 之间": "максимальное количество попыток должно быть в диапазоне от 1 до 99", "请输入封禁时间": "пожалуйста, введите время блокировки", "秒": "секунда", "封禁时间必须在 1 到 8640000 秒之间": "время блокировки должно быть от 1 до 8640000 секунд", "自定义规则添加成功": "правило успешно добавлено", "重启以应用新规则": "перезагрузите для применения новых правил", "停止成功": "остановка успешно выполнена", "总体状态": "общее состояние", "默认启用的 Jail 状态": "статус тюрьмы включено по умолчанию", "封锁情况": "ситуация с блокировкой", "新版本可用": "доступна новая версия", "当前版本": "текущая версия", "请访问": "пожалуйста, посетите", "查看更新说明": "просмотреть описание обновлений", "正在下载新版本": "загружается новая версия", "下载完成, 请重新运行脚本": "загрузка завершена, пожалуйста, запустите скрипт заново", "跳过更新": "пропустить обновление", "当前已经是最新版本": "в настоящее время уже установлена последняя версия", "用法": "применение", "文件扩展名": "расширение файла", "目录路径": "путь к каталогу", "目录": "оглавление", "不存在, 请检查路径": "не существует, проверьте путь", "列出所有": "перечислить все", "文件": "файл", "文件名": "имя файла", "序号": "порядковый номер", "请输入网址 (例如 hey.run)": "пожалуйста, введите адрес сайта (например, hey.run)", "不要包含 http:// 或 https:// 开头": "не включать строки, начинающиеся с http:// или https://", "已创建": "создано", "请输入主机": "пожалуйста, введите хост", "请输入权重": "пожалуйста, введите вес", "追加完成": "дополнительное завершение", "请输入要编辑的文件编号": "введите номер файла, который хотите отредактировать", "未安装, 正在尝试安装": "не установлено, пытается установить", "已编辑": "изменено", "请输入要删除的文件编号": "введите номер файла, который хотите удалить", "不支持的文件扩展名": "неподдерживаемое расширение файла", "创建一个新的": "создать новое", "编辑一个已存在的": "редактировать существующий", "删除一个已存在的": "удалить существующий", "无效选项, 请重试": "недопустимый вариант, повторите попытку", "重启成功": "перезапуск успешен", "重启失败": "перезапуск не удался", "请检查配置文件是否有误": "пожалуйста, проверьте, нет ли ошибок в конфигурационном файле", "未启用或配置异常": "не активировано или возникла ошибка конфигурации", "是否添加 Reality 负载均衡": "добавить ли балансировку нагрузки reality", "使用此功能前,建议先阅读作者教程": "перед использованием этой функции рекомендуется сначала ознакомиться с учебным материалом автора", "已跳过": "пропущено", "如用作 Reality 负载均衡二级服务器则无需安装": "если используется в качестве вторичного сервера балансировки нагрузки reality, то установка не требуется", "是否额外安装 nginx 前置保护": "устанавливать ли дополнительный защитный прокси nginx", "推荐": "рекомендовать", "检测到已开启 Reality 负载均衡": "обнаружено, что включен балансировщик нагрузки reality", "如用作 Reality 负载均衡主服务器必须安装": "если используется в качестве основного сервера балансировки нагрузки reality, необходимо установить", "检测到已安装": "обнаружено установленное", "已取消卸载": "установка отменена", "下载失败": "скачивание не удалось", "下载成功": "загрузка завершена успешно", "解压失败": "распаковка не удалась", "链接分享": "поделиться ссылкой", "修改语言": "изменить язык", "此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装": "этот режим предназначен только для переадресации трафика; не рекомендуется использовать его в других случаях. установить", "信息": "информация", "配置不完整, 退出更新": "конфигурация неполная, выйти из обновления", "配置不存在, 退出更新": "конфигурация не существует, выходим из обновления", "无效的选择, 请重试": "недопустимый выбор, попробуйте еще раз", "systemd 无法读取 SSH 日志": "systemd не может прочитать ssh-журналы", "网址不能包含 http:// 或 https:// 前缀": "url не может содержать префиксы http:// или https://", "日志文件清空失败": "не удалось очистить файл журнала", "当前用户是 root 用户, 开始安装": "текущий пользователь — root, начать установку", "当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本": "текущий пользователь не является пользователем root. переключитесь на пользователя root и запустите скрипт снова", "已跳过设置自动清理日志": "настройка автоматической очистки журналов пропущена", "脚本更新失败": "ошибка обновления скрипта", "更新失败": "ошибка обновления", "更新脚本": "обновить скрипт", "更新向导": "мастер обновления", "频繁更新 Nginx, 请确认 Nginx 有更新的必要": "часто обновляйте nginx; убедитесь, что обновление nginx действительно необходимо", "开始更新": "начать обновление", "建议选择 TLSv1.3 only (安全模式)": "рекомендуется выбрать только tlsv1.3 (безопасный режим)", "由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)": "поскольку h3 поддерживает только tlsv1.3, поддерживается только tlsv1.3 (безопасный режим)", "请选择 TLS 版本": "выберите версию tls", "建议选择 TLSv1.3 (安全模式)": "рекомендуется выбрать tlsv1.3 (безопасный режим)", "当前模式不支持": "текущий режим не поддерживается", "Nginx配置文件不存在 或 当前模式不支持": "файл конфигурации nginx отсутствует или текущий режим не поддерживается", "已禁用": "отключено", "管理模块": "модуль управления", "服务管理": "управление услугами", "管理 Fail2ban 模块": "управление модулем fail2ban", "未找到任何模块化配置文件": "не найден ни один модульный конфигурационный файл", "模块名称": "название модуля", "请选择要管理的模块": "пожалуйста, выберите модуль для управления", "启用": "включить", "禁用": "отключить", "模块": "модуль", "操作已取消": "операция отменена", "可能自动更新后有兼容问题, 谨慎启用": "после автоматического обновления могут возникнуть проблемы с совместимостью, поэтому включайте с осторожностью", "是否启用": "включить или нет", "是否": "является ли", "是否下载并安装新版本": "скачать и установить новую версию", "无法获取网卡, 将监控所有网卡": "не удалось получить сетевую карту, будет вестись мониторинг всех сетевых карт", "监控网卡": "мониторинг сетевой карты", "监控端口": "мониторинговый порт", "按 q 键退出 iftop": "нажмите клавишу q, чтобы выйти из iftop", "实时流量": "поток в реальном времени" } ================================================ FILE: po/en.po ================================================ # English translations for xray_install package. # Copyright (C) 2026 yunshu # This file is distributed under the same license as the xray_install package. # Automatically generated, 2026. # msgid "" msgstr "" "Project-Id-Version: xray_install 1.0\n" "Report-Msgid-Bugs-To: https://github.com/hello-yunshu/Xray_bash_onekey/" "issues\n" "POT-Creation-Date: 2026-04-24 09:47+0000\n" "PO-Revision-Date: 2026-04-24 09:47+0000\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: install.sh:32 msgid "信息" msgstr "information" #: install.sh:34 msgid "错误" msgstr "error" #: install.sh:35 msgid "警告" msgstr "warning" #: install.sh:38 install.sh:1540 install.sh:3960 install.sh:3977 #: install.sh:3980 install.sh:3981 install.sh:4019 msgid "未安装" msgstr "not installed" #: install.sh:99 msgid "日志文件归档失败" msgstr "log file archiving failed" #: install.sh:104 msgid "日志文件清空失败" msgstr "failed to clear the log file" #: install.sh:108 msgid "日志文件已轮转并归档为" msgstr "the log file has been rotated and archived as" #: install.sh:134 install.sh:138 install.sh:142 install.sh:152 msgid "当前系统为" msgstr "current system is" #: install.sh:152 msgid "不在支持的系统列表内, 安装中断" msgstr "not in the list of supported systems, installation interrupted" #: install.sh:159 msgid "当前用户是 root 用户, 开始安装" msgstr "the current user is the root user. starting installation" #: install.sh:161 msgid "当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本" msgstr "the current user is not the root user. please switch to the root user and then run the script again" #: install.sh:187 msgid "无法获取远程语言文件信息" msgstr "unable to retrieve remote language file information" #: install.sh:205 msgid "正在更新语言文件" msgstr "updating language files" #: install.sh:208 install.sh:291 msgid "语言文件更新失败" msgstr "language file update failed" #: install.sh:213 msgid "语言文件无效" msgstr "invalid language file" #: install.sh:219 msgid "版本文件更新失败" msgstr "failed to update the version file" #: install.sh:226 msgid "语言文件更新完成" msgstr "language file update completed" #: install.sh:231 install.sh:2725 msgid "正在安装" msgstr "installing" #: install.sh:234 msgid "安装失败" msgstr "installation failed" #: install.sh:234 install.sh:258 install.sh:281 install.sh:291 msgid "将使用默认语言" msgstr "will use the default language" #: install.sh:258 file_manager.sh:35 msgid "未找到" msgstr "not found" #: install.sh:281 msgid "不支持的语言" msgstr "unsupported language" #: install.sh:297 msgid "发现语言文件更新" msgstr "language file update detected" #: install.sh:312 install.sh:1740 msgid "完成" msgstr "complete" #: install.sh:315 msgid "失败" msgstr "failure" #: install.sh:322 msgid "在线版本检测失败, 请稍后再试" msgstr "online version check failed, please try again later" #: install.sh:344 install.sh:352 install.sh:1162 install.sh:3872 #: install.sh:3873 install.sh:3874 install.sh:3875 install.sh:4206 #: install.sh:4207 install.sh:4208 install.sh:4209 fail2ban_manager.sh:12 #: fail2ban_manager.sh:39 msgid "安装" msgstr "installation" #: install.sh:346 install.sh:354 install.sh:1169 install.sh:2729 #: install.sh:3969 msgid "已安装" msgstr "installed" #: install.sh:371 install.sh:375 msgid "自启动配置" msgstr "auto-start configuration" #: install.sh:384 msgid "链接库安装" msgstr "library installation" #: install.sh:389 msgid "值为空或超出范围, 请重新输入" msgstr "the value is empty or out of range, please re-enter" #: install.sh:398 msgid "值为空, 请重新输入" msgstr "the value is empty, please re-enter" #: install.sh:440 msgid "确定端口" msgstr "confirm port" #: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:104 msgid "请输入端口" msgstr "please enter the port" #: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:107 msgid "默认值" msgstr "default value" #: install.sh:441 install.sh:444 install.sh:532 install.sh:554 install.sh:3055 #: install.sh:3060 install.sh:3065 install.sh:3066 install.sh:3081 #: install.sh:3086 install.sh:3091 install.sh:3092 msgid "请输入 0-65535 之间的值" msgstr "please enter a value between 0 and 65535" #: install.sh:443 msgid "端口不允许使用, 请重新输入" msgstr "the port is not allowed to be used, please re-enter" #: install.sh:452 msgid "请选择安装协议" msgstr "please select the installation agreement" #: install.sh:453 install.sh:1617 install.sh:1654 install.sh:1705 #: install.sh:2997 install.sh:3142 install.sh:3209 install.sh:3256 #: fail2ban_manager.sh:274 fail2ban_manager.sh:275 msgid "默认" msgstr "default" #: install.sh:457 install.sh:532 install.sh:554 install.sh:635 install.sh:668 #: install.sh:821 install.sh:840 install.sh:881 install.sh:922 install.sh:1621 #: install.sh:1634 install.sh:1656 install.sh:1709 install.sh:1719 #: install.sh:2985 install.sh:3000 install.sh:3055 install.sh:3060 #: install.sh:3065 install.sh:3066 install.sh:3081 install.sh:3086 #: install.sh:3091 install.sh:3092 install.sh:3145 install.sh:3154 #: install.sh:3212 install.sh:3259 install.sh:3268 fail2ban_manager.sh:215 #: fail2ban_manager.sh:234 fail2ban_manager.sh:272 file_manager.sh:81 msgid "请输入" msgstr "please enter" #: install.sh:457 install.sh:922 install.sh:1621 install.sh:1656 #: install.sh:1709 install.sh:2985 install.sh:3000 install.sh:3145 #: install.sh:3212 install.sh:3259 install.sh:4251 install.sh:4489 msgid "请输入有效的数字" msgstr "please enter a valid number" #: install.sh:478 msgid "是否添加简单 ws/gRPC 协议 用于负载均衡" msgstr "whether to add simple ws/grpc protocol for load balancing" #: install.sh:479 install.sh:1259 msgid "如不清楚具体用途, 请勿选择" msgstr "if the specific purpose is unclear, please do not select" #: install.sh:499 msgid "已跳过添加简单 ws/gRPC 协议" msgstr "skipping adding simple ws/grpc protocol" #: install.sh:528 install.sh:550 install.sh:631 install.sh:648 install.sh:664 #: install.sh:681 install.sh:696 install.sh:815 install.sh:836 install.sh:877 msgid "是否需要自定义" msgstr "whether customization is needed" #: install.sh:532 install.sh:554 msgid "请勿与其他端口相同" msgstr "please do not use the same port as others" #: install.sh:571 file_manager.sh:114 msgid "是否需要设置防火墙" msgstr "whether a firewall needs to be set up" #: install.sh:611 install.sh:615 file_manager.sh:128 file_manager.sh:132 #: file_manager.sh:136 msgid "防火墙" msgstr "firewall" #: install.sh:611 install.sh:615 install.sh:2215 install.sh:2218 #: install.sh:3012 install.sh:3014 install.sh:4227 fail2ban_manager.sh:231 #: fail2ban_manager.sh:432 msgid "重启" msgstr "restart" #: install.sh:617 msgid "开放防火墙相关端口" msgstr "open the firewall for related ports" #: install.sh:618 msgid "若修改配置, 请注意关闭防火墙相关端口" msgstr "if modifying the configuration, please remember to close the firewall-related ports" #: install.sh:619 install.sh:3877 install.sh:3892 install.sh:3893 #: install.sh:4216 install.sh:4236 fail2ban_manager.sh:161 msgid "配置" msgstr "configuration" #: install.sh:622 file_manager.sh:140 msgid "跳过防火墙设置" msgstr "skip firewall settings" #: install.sh:631 install.sh:635 install.sh:636 install.sh:640 install.sh:648 #: install.sh:664 install.sh:668 install.sh:669 install.sh:673 install.sh:681 #: install.sh:1101 msgid "伪装路径" msgstr "camouflage path" #: install.sh:635 install.sh:668 msgid "不需要" msgstr "not needed" #: install.sh:696 install.sh:706 install.sh:3172 msgid "用户名" msgstr "username" #: install.sh:700 msgid "请输入正确的 email" msgstr "please enter the correct email" #: install.sh:713 msgid "是否需要自定义字符串映射" msgstr "whether custom string mapping is needed" #: install.sh:717 msgid "请输入自定义字符串" msgstr "please enter a custom string" #: install.sh:717 msgid "最多30字符" msgstr "up to 30 characters" #: install.sh:719 msgid "自定义字符串" msgstr "custom string" #: install.sh:726 install.sh:2836 install.sh:3895 install.sh:4211 #: install.sh:4314 msgid "映射字符串" msgstr "mapping string" #: install.sh:737 msgid "检测到 target 域名已配置, 是否保留" msgstr "target domain name has been configured, do you want to keep it" #: install.sh:757 msgid "请输入一个域名" msgstr "please enter a domain name" #: install.sh:758 msgid "域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用" msgstr "domain names must support tlsv1.3, x25519, and h2, and should not use redirection" #: install.sh:759 msgid "确认域名符合要求后请输入" msgstr "after confirming that the domain name meets the requirements, please enter" #: install.sh:760 msgid "正在检测域名请等待" msgstr "checking domain name, please wait" #: install.sh:767 install.sh:772 install.sh:777 msgid "该域名不支持" msgstr "this domain name is not supported" #: install.sh:782 msgid "该域名发生了跳转" msgstr "the domain name has been redirected" #: install.sh:789 msgid "该域名可能不满足所有要求" msgstr "this domain name may not meet all requirements" #: install.sh:790 msgid "是否仍要设置此域名" msgstr "do you still want to set this domain name" #: install.sh:802 install.sh:807 install.sh:1619 msgid "域名" msgstr "domain name" #: install.sh:802 msgid "满足所有要求" msgstr "meet all requirements" #: install.sh:815 msgid "域名的" msgstr "of the domain name" #: install.sh:816 msgid "默认为" msgstr "default is" #: install.sh:816 msgid "域名本身" msgstr "the domain name itself" #: install.sh:817 install.sh:912 install.sh:952 msgid "如不清楚具体用途, 请勿继续" msgstr "if you are unsure of the specific purpose, please do not proceed" #: install.sh:898 msgid "本地文件 file_manager.sh 不存在, 正在下载" msgstr "the local file file_manager.sh does not exist, downloading now" #: install.sh:900 install.sh:2330 fail2ban_manager.sh:500 file_manager.sh:248 msgid "下载失败, 请手动下载并安装新版本" msgstr "download failed, please manually download and install the new version" #: install.sh:911 install.sh:951 msgid "是否变更" msgstr "whether to change" #: install.sh:911 msgid "负载均衡" msgstr "load balancing" #: install.sh:917 msgid "请选择协议为 ws 或 gRPC" msgstr "please select the protocol as ws or grpc" #: install.sh:920 fail2ban_manager.sh:213 fail2ban_manager.sh:232 #: fail2ban_manager.sh:325 fail2ban_manager.sh:357 msgid "返回" msgstr "return" #: install.sh:930 file_manager.sh:220 msgid "无效选项, 请重试" msgstr "invalid option, please try again" #: install.sh:940 install.sh:964 install.sh:2266 install.sh:2304 #: install.sh:2320 msgid "当前模式不支持此操作" msgstr "the current mode does not support this operation" #: install.sh:953 msgid "配置用途可以参考文章" msgstr "for configuration purposes, please refer to the article" #: install.sh:980 install.sh:991 install.sh:995 install.sh:999 install.sh:1011 #: install.sh:1016 install.sh:1020 install.sh:1025 install.sh:1045 #: install.sh:1051 install.sh:1101 install.sh:1120 install.sh:3893 #: install.sh:4177 msgid "修改" msgstr "modify" #: install.sh:1053 install.sh:2816 install.sh:2818 install.sh:2820 #: install.sh:2821 install.sh:2824 install.sh:2828 install.sh:2830 #: install.sh:2832 install.sh:2833 install.sh:2861 install.sh:2864 #: install.sh:2867 install.sh:2869 install.sh:3049 msgid "端口" msgstr "port" #: install.sh:1103 msgid "不支持" msgstr "not supported" #: install.sh:1110 msgid "用户名修改" msgstr "username modification" #: install.sh:1113 install.sh:1123 msgid "请先删除多余的用户" msgstr "please delete the extra users first" #: install.sh:1131 install.sh:1139 install.sh:1146 install.sh:1990 #: install.sh:2061 install.sh:2146 install.sh:2154 install.sh:2163 #: install.sh:2186 msgid "配置修改" msgstr "configuration modification" #: install.sh:1151 msgid "检测到 Xray 的权限控制, 启动修改程序" msgstr "xray permission control detected, starting modification program" #: install.sh:1156 msgid "修改完成" msgstr "modification completed" #: install.sh:1176 msgid "若更新无效, 建议直接卸载再安装" msgstr "if the update is ineffective, it is recommended to uninstall and then reinstall" #: install.sh:1177 msgid "部分新功能需要重新安装才可生效" msgstr "some new features require reinstallation to take effect" #: install.sh:1182 msgid "检测到存在最新版" msgstr "a newer version has been detected" #: install.sh:1183 msgid "脚本可能未兼容此版本" msgstr "the script may not be compatible with this version" #: install.sh:1184 msgid "是否更新" msgstr "whether to update" #: install.sh:1188 install.sh:1213 install.sh:1532 install.sh:3886 #: install.sh:3898 install.sh:4195 install.sh:4196 install.sh:4197 #: install.sh:4233 msgid "更新" msgstr "update" #: install.sh:1192 install.sh:1494 msgid "启动失败" msgstr "startup failed" #: install.sh:1193 install.sh:1497 msgid "是否回滚到之前的版本" msgstr "whether to roll back to the previous version" #: install.sh:1197 install.sh:1507 msgid "未执行回滚操作" msgstr "rollback operation not executed" #: install.sh:1201 install.sh:1511 msgid "正在回滚" msgstr "rolling back" #: install.sh:1205 install.sh:1518 msgid "已成功回滚到之前的" msgstr "successfully rolled back to the previous" #: install.sh:1205 install.sh:1518 install.sh:4214 install.sh:4329 msgid "版本" msgstr "version" #: install.sh:1207 install.sh:1228 install.sh:1524 msgid "回滚失败" msgstr "rollback failed" #: install.sh:1234 install.sh:1238 msgid "重装" msgstr "reinstall" #: install.sh:1248 install.sh:1249 msgid "更新失败" msgstr "update failed" #: install.sh:1257 msgid "是否添加 Reality 负载均衡" msgstr "whether to add reality load balancing" #: install.sh:1258 msgid "使用此功能前,建议先阅读作者教程" msgstr "before using this feature, it is recommended to first read the author's tutorial" #: install.sh:1264 fail2ban_manager.sh:93 fail2ban_manager.sh:103 #: fail2ban_manager.sh:128 fail2ban_manager.sh:154 fail2ban_manager.sh:347 msgid "已启用" msgstr "enabled" #: install.sh:1268 msgid "已跳过" msgstr "skipped" #: install.sh:1277 msgid "Reality 协议有流量偷跑的风险" msgstr "reality protocol has the risk of traffic leakage" #: install.sh:1279 install.sh:1306 msgid "是否额外安装 nginx 前置保护" msgstr "whether to additionally install nginx as a front-end protection" #: install.sh:1279 msgid "推荐" msgstr "recommend" #: install.sh:1286 install.sh:1321 msgid "检测到已安装" msgstr "installed detected" #: install.sh:1289 install.sh:1324 msgid "已跳过安装" msgstr "installation skipped" #: install.sh:1303 msgid "检测到已开启 Reality 负载均衡" msgstr "reality load balancing has been detected as enabled" #: install.sh:1304 msgid "如用作 Reality 负载均衡主服务器必须安装" msgstr "if used as a reality load balancing master server, it must be installed" #: install.sh:1305 msgid "如用作 Reality 负载均衡二级服务器则无需安装" msgstr "if used as a secondary server for reality load balancing, installation is not required" #: install.sh:1349 msgid "已存在, 跳过编译安装过程" msgstr "already exists, skip the compilation and installation process" #: install.sh:1351 msgid "检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装" msgstr "other nginx packages installed have been detected. continuing the installation will cause conflicts. please resolve this issue before proceeding with the installation" #: install.sh:1364 msgid "即将下载已编译的" msgstr "about to download the compiled" #: install.sh:1374 msgid "不支持的系统架构" msgstr "unsupported system architecture" #: install.sh:1383 msgid "下载失败" msgstr "download failed" #: install.sh:1387 msgid "下载成功" msgstr "download successful" #: install.sh:1390 msgid "解压失败" msgstr "decompression failed" #: install.sh:1438 install.sh:1439 install.sh:1446 install.sh:1447 msgid "配置不完整, 退出更新" msgstr "configuration is incomplete; exiting update" #: install.sh:1451 install.sh:1452 msgid "当前安装模式不需要" msgstr "the current installation mode is not required" #: install.sh:1456 install.sh:1457 msgid "配置不存在, 退出更新" msgstr "configuration does not exist; exiting update" #: install.sh:1463 msgid "备份旧版" msgstr "backup old version" #: install.sh:1464 msgid "删除旧版" msgstr "delete old version" #: install.sh:1468 msgid "是否保留原 Nginx 配置文件" msgstr "whether to keep the original nginx configuration file" #: install.sh:1476 install.sh:1809 msgid "原配置文件已删除" msgstr "the original configuration file has been deleted" #: install.sh:1480 msgid "原配置文件已保留" msgstr "the original configuration file has been retained" #: install.sh:1534 install.sh:4220 msgid "删除" msgstr "delete" #: install.sh:1534 install.sh:4243 msgid "备份" msgstr "backup" #: install.sh:1537 msgid "已为最新版" msgstr "already updated to the latest version" #: install.sh:1553 msgid "设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)" msgstr "set up a background scheduled automatic update program (including: script/xray/nginx)" #: install.sh:1554 msgid "可能自动更新后有兼容问题, 谨慎启用" msgstr "there may be compatibility issues after an automatic update, so enable it with caution" #: install.sh:1555 fail2ban_manager.sh:120 fail2ban_manager.sh:146 msgid "是否启用" msgstr "enable or not" #: install.sh:1561 install.sh:3878 msgid "设置自动更新" msgstr "set automatic update" #: install.sh:1566 msgid "已设置自动更新" msgstr "auto-update has been set" #: install.sh:1567 msgid "是否关闭" msgstr "whether to close" #: install.sh:1573 msgid "删除自动更新" msgstr "delete automatic update" #: install.sh:1582 msgid "安装 SSL 证书生成脚本依赖" msgstr "install ssl certificate generation script dependencies" #: install.sh:1584 msgid "安装 SSL 证书生成脚本" msgstr "install ssl certificate generation script" #: install.sh:1590 msgid "检测到原域名配置存在, 是否跳过域名设置" msgstr "detected existing original domain configuration, do you want to skip domain settings" #: install.sh:1605 install.sh:1642 install.sh:1693 install.sh:1726 msgid "无法获取公网IP地址" msgstr "unable to obtain public ip address" #: install.sh:1605 install.sh:1642 install.sh:1665 install.sh:1693 #: install.sh:1726 msgid "安装终止" msgstr "installation terminated" #: install.sh:1608 msgid "已跳过域名设置" msgstr "domain setting skipped" #: install.sh:1614 msgid "确定域名信息" msgstr "confirm domain name information" #: install.sh:1615 msgid "请输入你的域名信息" msgstr "please enter your domain name information" #: install.sh:1616 msgid "请选择公网IP(IPv4/IPv6)或手动输入域名" msgstr "please select a public ip (ipv4/ipv6) or manually enter a domain name" #: install.sh:1622 install.sh:1711 msgid "正在获取公网IP信息, 请耐心等待" msgstr "retrieving public ip information, please wait patiently" #: install.sh:1632 msgid "此选项用于服务器商仅提供域名访问服务器" msgstr "this option is used when the server provider only provides domain name access to the server" #: install.sh:1633 msgid "注意服务器商域名添加 CNAME 记录" msgstr "note: add a cname record for the server provider's domain" #: install.sh:1645 msgid "域名DNS解析IP" msgstr "domain name dns resolution ip" #: install.sh:1646 install.sh:1729 msgid "公网IP/域名" msgstr "public ip/domain name" #: install.sh:1648 msgid "域名DNS解析IP与公网IP匹配" msgstr "domain name dns resolves ip matches public ip" #: install.sh:1650 msgid "请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray" msgstr "please make sure the domain has added the correct a/aaaa record; otherwise, xray will not function properly" #: install.sh:1651 msgid "域名DNS解析IP与公网IP不匹配, 请选择" msgstr "the domain name's dns resolution ip does not match the public ip. please select" #: install.sh:1652 install.sh:1659 msgid "继续安装" msgstr "continue installation" #: install.sh:1653 msgid "重新输入" msgstr "re-enter" #: install.sh:1654 msgid "终止安装" msgstr "cancel installation" #: install.sh:1676 msgid "检测到原IP配置存在, 是否跳过IP设置" msgstr "original ip configuration detected. skip ip setting" #: install.sh:1697 msgid "已跳过IP设置" msgstr "ip setting skipped" #: install.sh:1703 msgid "确定公网IP信息" msgstr "confirm public ip information" #: install.sh:1704 msgid "请选择公网IP为IPv4或IPv6" msgstr "please select public ip as ipv4 or ipv6" #: install.sh:1707 msgid "手动输入" msgstr "manual input" #: install.sh:1734 msgid "端口未被占用" msgstr "the port is not in use" #: install.sh:1736 msgid "检测到" msgstr "detected" #: install.sh:1736 msgid "端口被占用" msgstr "port is occupied" #: install.sh:1736 msgid "以下为" msgstr "the following is" #: install.sh:1736 msgid "端口占用信息" msgstr "port occupation information" #: install.sh:1738 msgid "尝试终止占用的进程" msgstr "attempt to terminate the occupied process" #: install.sh:1749 msgid "证书测试签发成功, 开始正式签发" msgstr "certificate test issuance successful, starting official issuance" #: install.sh:1752 msgid "证书测试签发失败" msgstr "certificate test issuance failed" #: install.sh:1759 msgid "证书生成成功" msgstr "certificate generated successfully" #: install.sh:1765 msgid "证书配置成功" msgstr "certificate configured successfully" #: install.sh:1769 msgid "证书生成失败" msgstr "certificate generation failed" #: install.sh:1801 msgid "检测到 Xray 配置过多用户" msgstr "detected that xray is configured with too many users" #: install.sh:1802 msgid "是否保留原 Xray 配置文件" msgstr "keep the original xray configuration file" #: install.sh:1822 msgid "添加简单 ws/gRPC 协议" msgstr "add simple ws/grpc protocol" #: install.sh:1837 msgid "检测到配置文件, 是否读取配置文件" msgstr "configuration file detected. do you want to read the configuration file" #: install.sh:1842 install.sh:1863 install.sh:1961 install.sh:3430 msgid "已删除配置文件" msgstr "configuration file deleted" #: install.sh:1845 install.sh:1858 install.sh:1956 install.sh:3426 msgid "已保留配置文件" msgstr "configuration file has been retained" #: install.sh:1852 msgid "检测到当前安装模式与配置文件的安装模式不一致" msgstr "detected that the current installation mode is inconsistent with the installation mode in the configuration file" #: install.sh:1853 msgid "是否保留配置文件 (强烈不建议)" msgstr "keep configuration file (strongly not recommended)" #: install.sh:1857 msgid "请务必确保配置文件正确" msgstr "please make sure the configuration file is correct" #: install.sh:1951 msgid "检测到配置文件不完整, 是否保留配置文件" msgstr "incomplete configuration file detected. do you want to keep the configuration file" #: install.sh:2170 msgid "配置删除" msgstr "configuration deletion" #: install.sh:2191 msgid "设置 Nginx 开机自启" msgstr "set nginx to start automatically on boot" #: install.sh:2194 install.sh:4234 install.sh:4237 install.sh:4238 #: install.sh:4239 fail2ban_manager.sh:10 msgid "设置" msgstr "settings" #: install.sh:2194 install.sh:2202 msgid "开机自启" msgstr "startup on boot" #: install.sh:2199 msgid "关闭 Nginx 开机自启" msgstr "disable nginx from starting automatically on boot" #: install.sh:2202 msgid "关闭" msgstr "close" #: install.sh:2209 install.sh:2231 install.sh:2234 install.sh:2294 #: install.sh:4229 fail2ban_manager.sh:230 msgid "停止" msgstr "stop" #: install.sh:2223 install.sh:2226 install.sh:2761 install.sh:4228 #: fail2ban_manager.sh:229 fail2ban_manager.sh:398 msgid "启动" msgstr "start" #: install.sh:2247 install.sh:2263 msgid "新版本已自动设置证书自动更新" msgstr "the new version has automatically set up certificate auto-updating" #: install.sh:2248 msgid "老版本请及时删除 废弃的 改版证书自动更新" msgstr "please delete the old version in a timely manner. the obsolete certificate will be automatically updated after the revision" #: install.sh:2249 msgid "已设置改版证书自动更新" msgstr "the certificate renewal has been set to update automatically" #: install.sh:2250 msgid "是否需要删除改版证书自动更新 (请删除)" msgstr "whether to delete the certificate auto-update for the revised version (please delete)" #: install.sh:2257 msgid "删除改版证书自动更新" msgstr "delete version certificate automatic update" #: install.sh:2281 msgid "已过期" msgstr "expired" #: install.sh:2283 msgid "证书生成日期" msgstr "certificate generation date" #: install.sh:2284 msgid "证书生成天数" msgstr "number of days for certificate generation" #: install.sh:2285 msgid "证书剩余天数" msgstr "remaining days of certificate" #: install.sh:2289 msgid "是否立即更新证书" msgstr "whether to update the certificate immediately" #: install.sh:2301 install.sh:2313 msgid "证书签发工具不存在, 请确认是否证书为脚本签发" msgstr "the certificate issuance tool does not exist. please confirm whether the certificate was issued by a script" #: install.sh:2317 msgid "证书更新" msgstr "certificate update" #: install.sh:2327 msgid "本地文件 fail2ban_manager.sh 不存在, 正在下载" msgstr "the local file fail2ban_manager.sh does not exist, downloading" #: install.sh:2342 msgid "是否需要设置自动清理日志" msgstr "whether to set automatic log cleanup" #: install.sh:2346 msgid "已跳过设置自动清理日志" msgstr "automatic log cleanup has been skipped" #: install.sh:2349 msgid "将在 每周三 04:00 自动清空日志" msgstr "logs will be automatically cleared every wednesday at 04:00" #: install.sh:2354 msgid "已设置自动清理日志任务" msgstr "automatic log cleanup task has been set" #: install.sh:2355 msgid "是否需要删除现有自动清理日志任务" msgstr "do you need to delete the existing automatic log cleanup task" #: install.sh:2360 msgid "删除自动清理日志任务" msgstr "delete automatic log cleanup task" #: install.sh:2363 msgid "保留现有自动清理日志任务" msgstr "retain the existing automatic log cleanup task" #: install.sh:2378 msgid "设置自动清理日志" msgstr "set up automatic log cleanup" #: install.sh:2385 msgid "检测到日志文件大小如下:" msgstr "the log file size is detected as follows" #: install.sh:2387 msgid "即将清除" msgstr "about to clear" #: install.sh:2389 msgid "日志清理" msgstr "log cleanup" #: install.sh:2663 msgid "链接分享" msgstr "link sharing" #: install.sh:2665 install.sh:2671 install.sh:2676 install.sh:2681 #: install.sh:2685 install.sh:3183 msgid "分享链接" msgstr "share link" #: install.sh:2666 install.sh:2672 install.sh:2677 install.sh:2682 #: install.sh:2686 msgid "二维码" msgstr "qr code" #: install.sh:2692 install.sh:2693 msgid "配置分享" msgstr "configuration sharing" #: install.sh:2707 msgid "生成分享链接" msgstr "generate share link" #: install.sh:2735 install.sh:2746 install.sh:3038 install.sh:3108 #: install.sh:3132 install.sh:3198 install.sh:3246 install.sh:3300 #: install.sh:3352 msgid "请先安装" msgstr "please install first" #: install.sh:2753 msgid "无法获取网卡, 将监控所有网卡" msgstr "unable to obtain the network adapter; monitoring all network adapters" #: install.sh:2755 msgid "监控网卡" msgstr "monitor network card" #: install.sh:2758 msgid "监控端口" msgstr "monitoring port" #: install.sh:2760 msgid "按 q 键退出 iftop" msgstr "press the q key to exit iftop" #: install.sh:2776 install.sh:2779 install.sh:2782 install.sh:2785 #: install.sh:2788 install.sh:2791 install.sh:2794 install.sh:2797 #: install.sh:2800 install.sh:2803 install.sh:2806 msgid "安装成功" msgstr "installation successful" #: install.sh:2810 msgid "目前分享链接规范为实验阶段, 请自行判断是否适用" msgstr "currently, the sharing link specification is in the experimental phase; please determine its applicability on your own" #: install.sh:2812 install.sh:4224 msgid "配置信息" msgstr "configuration information" #: install.sh:2813 msgid "主机" msgstr "host" #: install.sh:2837 msgid "用户id" msgstr "user id" #: install.sh:2839 msgid "加密" msgstr "encryption" #: install.sh:2840 msgid "传输协议" msgstr "transmission protocol" #: install.sh:2841 msgid "底层传输安全" msgstr "underlying transmission security" #: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868 msgid "路径" msgstr "path" #: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868 msgid "不要落下" msgstr "don't fall behind" #: install.sh:2846 install.sh:2849 install.sh:2865 install.sh:2870 msgid "不需要加" msgstr "no need to add" #: install.sh:2852 msgid "流控" msgstr "flow control" #: install.sh:2885 msgid "即将申请证书, 支持使用自定义证书" msgstr "certificate will be applied soon, supporting the use of custom certificates" #: install.sh:2886 msgid "如需使用自定义证书, 请按如下步骤:" msgstr "if you need to use a custom certificate, please follow the steps below" #: install.sh:2887 msgid "1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)" msgstr "1. rename the certificate files: private key (xray.key), certificate (xray.crt)" #: install.sh:2888 msgid "2. 将重命名后的证书文件放入" msgstr "2. place the renamed certificate file into" #: install.sh:2888 msgid "目录后再运行脚本" msgstr "run the script after the directory" #: install.sh:2889 msgid "3. 重新运行脚本" msgstr "3. re-run the script" #: install.sh:2890 install.sh:3334 msgid "是否继续" msgstr "whether to continue" #: install.sh:2898 msgid "所有证书文件均已存在, 是否保留" msgstr "all certificate files already exist, do you want to keep them" #: install.sh:2904 install.sh:2919 install.sh:2935 file_manager.sh:176 msgid "已删除" msgstr "deleted" #: install.sh:2910 install.sh:2925 install.sh:2942 msgid "证书应用" msgstr "certificate application" #: install.sh:2914 msgid "证书文件已存在, 是否保留" msgstr "the certificate file already exists, do you want to keep it" #: install.sh:2930 msgid "证书签发残留文件已存在, 是否保留" msgstr "the certificate issuance residual file already exists, do you want to keep it" #: install.sh:2972 install.sh:4219 msgid "添加" msgstr "add" #: install.sh:2980 msgid "请选择支持的 TLS 版本" msgstr "please select the supported tls version" #: install.sh:2981 msgid "建议选择 TLSv1.3 only (安全模式)" msgstr "we recommend selecting “tlsv1.3 only (secure mode).”" #: install.sh:2982 install.sh:2998 msgid "兼容模式" msgstr "compatibility mode" #: install.sh:2983 msgid "安全模式" msgstr "safe mode" #: install.sh:2987 msgid "由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)" msgstr "since h3 only supports tlsv1.3, it only supports tlsv1.3 (secure mode)" #: install.sh:2991 install.sh:3003 install.sh:3006 msgid "已切换至" msgstr "already switched to" #: install.sh:2995 msgid "请选择 TLS 版本" msgstr "please select the tls version" #: install.sh:2996 msgid "建议选择 TLSv1.3 (安全模式)" msgstr "we recommend selecting tlsv1.3 (secure mode)" #: install.sh:3009 msgid "当前模式不支持" msgstr "current mode not supported" #: install.sh:3016 msgid "Nginx配置文件不存在 或 当前模式不支持" msgstr "the nginx configuration file does not exist, or the current mode is not supported" #: install.sh:3130 msgid "此模式不支持修改" msgstr "this mode does not support modification" #: install.sh:3139 msgid "即将显示用户, 一次仅能显示一个" msgstr "users will be displayed soon, only one user can be displayed at a time" #: install.sh:3141 msgid "请选择显示用户使用的协议" msgstr "please select the protocol used by the user to display" #: install.sh:3151 msgid "请选择要显示的用户编号" msgstr "please select the user number to display" #: install.sh:3156 install.sh:3166 install.sh:3270 install.sh:3292 msgid "选择错误" msgstr "selecting incorrectly" #: install.sh:3159 msgid "请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户" msgstr "please directly select [view xray configuration information] in the main menu to display the primary user" #: install.sh:3169 install.sh:3295 msgid "请先检测 Xray 是否正确安装" msgstr "please first check if xray is installed correctly" #: install.sh:3187 msgid "是否继续显示用户" msgstr "whether to continue displaying the user" #: install.sh:3196 install.sh:3298 msgid "此模式不支持删除用户" msgstr "this mode does not support deleting users" #: install.sh:3206 msgid "即将添加用户, 一次仅能添加一个" msgstr "adding users is coming soon, but only one user can be added at a time" #: install.sh:3208 msgid "请选择添加用户使用的协议" msgstr "please select the protocol used for adding users" #: install.sh:3230 msgid "添加用户" msgstr "add user" #: install.sh:3235 msgid "是否继续添加用户" msgstr "whether to continue adding users" #: install.sh:3244 msgid "此模式不支持添加用户" msgstr "this mode does not support adding users" #: install.sh:3253 msgid "即将删除用户, 一次仅能删除一个" msgstr "deleting user, only one at a time" #: install.sh:3255 msgid "请选择删除用户使用的协议" msgstr "please select the agreement used by the deleted user" #: install.sh:3265 msgid "请选择要删除的用户编号" msgstr "please select the user number to delete" #: install.sh:3274 msgid "主用户无法删除" msgstr "the main user cannot be deleted" #: install.sh:3280 msgid "删除用户" msgstr "delete user" #: install.sh:3283 msgid "是否继续删除用户" msgstr "whether to continue deleting the user" #: install.sh:3305 install.sh:3309 msgid "文件不存在" msgstr "the file does not exist" #: install.sh:3316 msgid "已配置 Xray 流量统计" msgstr "xray traffic statistics have been configured" #: install.sh:3317 msgid "是否需要关闭此功能" msgstr "do you need to disable this feature" #: install.sh:3323 msgid "关闭 Xray 流量统计" msgstr "disable xray traffic statistics" #: install.sh:3332 msgid "流量统计需要使用" msgstr "traffic statistics need to be used" #: install.sh:3333 msgid "可能会影响 Xray 性能" msgstr "may affect x-ray performance" #: install.sh:3344 msgid "设置 Xray 流量统计" msgstr "set up xray traffic statistics" #: install.sh:3374 install.sh:3394 msgid "已卸载" msgstr "uninstalled" #: install.sh:3378 msgid "是否卸载" msgstr "whether to uninstall" #: install.sh:3382 msgid "已取消卸载" msgstr "uninstallation canceled" #: install.sh:3405 msgid "是否删除所有脚本文件" msgstr "delete all script files" #: install.sh:3412 msgid "已删除所有文件" msgstr "all files have been deleted" #: install.sh:3413 msgid "ヾ( ̄▽ ̄) 拜拜~" msgstr "( ̄▽ ̄)ノ bye bye~" #: install.sh:3418 msgid "已保留脚本文件 (包含 SSL 证书等)" msgstr "script file has been retained (including ssl certificate, etc.)" #: install.sh:3422 msgid "是否保留配置文件" msgstr "whether to keep the configuration file" #: install.sh:3439 msgid "已清空证书遗留文件" msgstr "certificate residual files have been cleared" #: install.sh:3469 msgid "秒后" msgstr "seconds later" #: install.sh:3669 msgid "检测最新版本失败" msgstr "failed to detect the latest version" #: install.sh:3677 install.sh:3917 msgid "新版本" msgstr "new version" #: install.sh:3677 install.sh:3917 msgid "更新内容" msgstr "update content" #: install.sh:3681 msgid "存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新" msgstr "a new version is available, but the version change is significant and may cause compatibility issues. do you want to update" #: install.sh:3684 msgid "存在新版本, 是否更新" msgstr "new version exists, update" #: install.sh:3688 msgid "检测 脚本 最新版本失败" msgstr "failed to detect the latest version of the script" #: install.sh:3689 msgid "脚本 版本差别过大, 跳过更新" msgstr "script version difference is too large, skipping update" #: install.sh:3697 install.sh:3698 msgid "脚本更新失败" msgstr "script update failed" #: install.sh:3704 msgid "更新完成" msgstr "update completed" #: install.sh:3705 install.sh:3929 msgid "脚本版本变化较大, 若服务无法正常运行请卸载后重装" msgstr "the script version has changed significantly. if the service cannot run properly, please uninstall and reinstall it" #: install.sh:3714 msgid "当前版本为最新版本" msgstr "the current version is the latest version" #: install.sh:3727 install.sh:3912 install.sh:3927 install.sh:3940 msgid "下载最新脚本" msgstr "download the latest script" #: install.sh:3741 msgid "该选项暂时无法使用" msgstr "this option is temporarily unavailable" #: install.sh:3760 install.sh:4286 msgid "此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装" msgstr "this mode is recommended for load balancing; it is generally not recommended for use. do you want to install" #: install.sh:3773 install.sh:4300 msgid "此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装" msgstr "this mode is only intended for traffic forwarding and is not recommended for other use cases. do you want to install it" #: install.sh:3876 install.sh:3877 install.sh:3887 install.sh:3891 #: install.sh:3895 install.sh:4211 install.sh:4212 install.sh:4213 #: install.sh:4214 install.sh:4215 install.sh:4216 install.sh:4314 #: install.sh:4319 install.sh:4324 install.sh:4329 msgid "变更" msgstr "change" #: install.sh:3876 install.sh:4215 msgid "负载均衡配置" msgstr "load balancing configuration" #: install.sh:3879 msgid "清除日志文件" msgstr "clear log files" #: install.sh:3880 msgid "查看证书状态" msgstr "view certificate status" #: install.sh:3881 msgid "更新证书有效期" msgstr "update certificate expiration date" #: install.sh:3882 msgid "设置证书自动更新" msgstr "set certificate auto-update" #: install.sh:3883 msgid "设置 Fail2ban 防暴力破解" msgstr "set up fail2ban to prevent brute-force attacks" #: install.sh:3884 msgid "显示帮助" msgstr "show help" #: install.sh:3885 msgid "修改语言" msgstr "change language" #: install.sh:3888 install.sh:4218 install.sh:4222 install.sh:4223 #: install.sh:4224 install.sh:4225 install.sh:4230 install.sh:4232 #: fail2ban_manager.sh:15 msgid "查看" msgstr "view" #: install.sh:3888 install.sh:4225 msgid "实时流量" msgstr "real-time traffic" #: install.sh:3889 msgid "脚本卸载" msgstr "script uninstallation" #: install.sh:3890 msgid "显示安装信息" msgstr "show installation information" #: install.sh:3892 install.sh:4237 msgid "加速" msgstr "accelerate" #: install.sh:3894 msgid "更新脚本" msgstr "update script" #: install.sh:3896 install.sh:3897 msgid "显示" msgstr "display" #: install.sh:3896 msgid "访问信息" msgstr "access information" #: install.sh:3897 msgid "错误信息" msgstr "error message" #: install.sh:3921 msgid "脚本版本变化较大, 可能存在不兼容情况, 是否继续使用" msgstr "the script version has changed significantly, and there may be compatibility issues. do you want to continue using it" #: install.sh:3948 msgid "检测失败" msgstr "detection failed" #: install.sh:3952 install.sh:3962 install.sh:3971 msgid "有新版" msgstr "there is a new version" #: install.sh:3955 install.sh:3964 install.sh:3974 msgid "最新版" msgstr "latest version" #: install.sh:3969 msgid "版本未知" msgstr "version unknown" #: install.sh:3989 install.sh:3996 msgid "运行中" msgstr "running" #: install.sh:3991 install.sh:4014 install.sh:4016 msgid "无需测试" msgstr "no testing required" #: install.sh:3993 install.sh:3998 msgid "未运行" msgstr "not running" #: install.sh:4008 msgid "无法连通" msgstr "unable to connect" #: install.sh:4010 install.sh:4011 install.sh:4012 msgid "本地正常" msgstr "locally normal" #: install.sh:4027 msgid "脚本维护中.. 请稍后再试" msgstr "script is under maintenance. please try again later" #: install.sh:4034 msgid "无法检测所需依赖的在线版本, 请稍后再试" msgstr "the required online version of the dependency cannot be detected. please try again later" #: install.sh:4051 msgid "请输入数字" msgstr "please enter a number" #: install.sh:4051 msgid "请输入 1 到 6 之间的有效数字" msgstr "please enter a valid number between 1 and 6" #: install.sh:4081 msgid "无效的选择" msgstr "invalid selection" #: install.sh:4122 msgid "请输入备份名称" msgstr "please enter the backup name" #: install.sh:4122 msgid "不需要后缀" msgstr "no suffix needed" #: install.sh:4131 msgid "报错信息" msgstr "error message" #: install.sh:4133 msgid "备份完整性可能受到影响, 请检查上述错误信息" msgstr "backup integrity may be affected. please check the error messages above" #: install.sh:4137 msgid "备份失败" msgstr "backup failed" #: install.sh:4139 msgid "备份成功" msgstr "backup successful" #: install.sh:4144 msgid "请确保备份文件在目录" msgstr "please ensure the backup file is in the directory" #: install.sh:4148 msgid "没有找到备份文件" msgstr "backup file not found" #: install.sh:4153 msgid "发现多个备份文件" msgstr "found multiple backup files" #: install.sh:4153 msgid "将使用最新的文件进行恢复" msgstr "the latest file will be used for recovery" #: install.sh:4157 msgid "找到最新备份文件" msgstr "find the latest backup file" #: install.sh:4159 msgid "恢复备份" msgstr "restore backup" #: install.sh:4163 msgid "恢复成功" msgstr "recovery successful" #: install.sh:4164 install.sh:4166 msgid "记得安装" msgstr "remember to install" #: install.sh:4169 msgid "恢复失败" msgstr "recovery failed" #: install.sh:4175 msgid "安装管理脚本" msgstr "install management script" #: install.sh:4176 msgid "作者" msgstr "author" #: install.sh:4180 msgid "当前模式" msgstr "current mode" #: install.sh:4181 msgid "当前语言" msgstr "current language" #: install.sh:4184 msgid "可以使用" msgstr "can be used" #: install.sh:4184 msgid "命令管理脚本" msgstr "command management script" #: install.sh:4186 msgid "版本检测" msgstr "version detection" #: install.sh:4187 install.sh:4195 install.sh:4246 msgid "脚本" msgstr "script" #: install.sh:4190 msgid "运行状态" msgstr "running status" #: install.sh:4193 msgid "连通性" msgstr "connectivity" #: install.sh:4194 msgid "更新向导" msgstr "update wizard" #: install.sh:4205 msgid "安装向导" msgstr "installation wizard" #: install.sh:4210 msgid "配置变更" msgstr "configuration change" #: install.sh:4217 msgid "用户管理" msgstr "user management" #: install.sh:4218 install.sh:4219 install.sh:4220 msgid "用户" msgstr "user" #: install.sh:4221 msgid "查看信息" msgstr "view information" #: install.sh:4222 msgid "实时访问日志" msgstr "real-time access log" #: install.sh:4223 msgid "实时错误日志" msgstr "real-time error log" #: install.sh:4226 msgid "服务相关" msgstr "service-related" #: install.sh:4227 install.sh:4228 install.sh:4229 install.sh:4230 msgid "所有服务" msgstr "all services" #: install.sh:4231 msgid "证书相关" msgstr "certificate-related" #: install.sh:4232 msgid "证书状态" msgstr "certificate status" #: install.sh:4233 msgid "证书有效期" msgstr "certificate validity period" #: install.sh:4234 msgid "证书自动更新" msgstr "certificate auto update" #: install.sh:4235 msgid "其他选项" msgstr "other options" #: install.sh:4236 msgid "自动更新" msgstr "automatic update" #: install.sh:4238 msgid "防暴力破解" msgstr "anti-brute force" #: install.sh:4239 msgid "流量统计" msgstr "traffic statistics" #: install.sh:4240 msgid "清除" msgstr "clear" #: install.sh:4240 msgid "日志文件" msgstr "log file" #: install.sh:4241 msgid "测试" msgstr "test" #: install.sh:4241 msgid "服务器网速" msgstr "server network speed" #: install.sh:4242 msgid "备份恢复" msgstr "backup and restore" #: install.sh:4243 install.sh:4244 msgid "全部文件" msgstr "all files" #: install.sh:4244 msgid "恢复" msgstr "recovery" #: install.sh:4245 msgid "卸载向导" msgstr "uninstall wizard" #: install.sh:4246 fail2ban_manager.sh:14 fail2ban_manager.sh:415 msgid "卸载" msgstr "uninstall" #: install.sh:4247 msgid "清空" msgstr "empty" #: install.sh:4247 msgid "证书文件" msgstr "certificate file" #: install.sh:4248 fail2ban_manager.sh:16 file_manager.sh:208 msgid "退出" msgstr "exit" #: install.sh:4251 msgid "请输入选项" msgstr "please enter an option" #: install.sh:4259 install.sh:4268 install.sh:4334 install.sh:4340 #: install.sh:4385 install.sh:4391 install.sh:4397 install.sh:4426 #: install.sh:4467 install.sh:4474 install.sh:4479 fail2ban_manager.sh:416 msgid "清空屏幕" msgstr "clear the screen" #: install.sh:4265 msgid "不建议" msgstr "not recommended" #: install.sh:4265 msgid "频繁更新 Nginx, 请确认 Nginx 有更新的必要" msgstr "nginx is updated frequently. please confirm whether an update is actually necessary" #: install.sh:4266 msgid "开始更新" msgstr "starting update" #: install.sh:4346 install.sh:4353 install.sh:4360 install.sh:4410 #: install.sh:4415 install.sh:4420 install.sh:4442 msgid "回到菜单" msgstr "back to menu" #: fail2ban_manager.sh:10 msgid "用于防止暴力破解" msgstr "used to prevent brute-force attacks" #: fail2ban_manager.sh:11 file_manager.sh:203 msgid "主菜单" msgstr "main menu" #: fail2ban_manager.sh:13 msgid "管理" msgstr "management" #: fail2ban_manager.sh:15 fail2ban_manager.sh:339 msgid "状态" msgstr "status" #: fail2ban_manager.sh:18 file_manager.sh:210 msgid "请选择一个选项" msgstr "please select an option" #: fail2ban_manager.sh:27 fail2ban_manager.sh:250 fail2ban_manager.sh:258 #: fail2ban_manager.sh:363 msgid "无效的选择, 请重试" msgstr "invalid selection, please try again" #: fail2ban_manager.sh:35 msgid "已经安装, 跳过安装步骤" msgstr "already installed, skip the installation step" #: fail2ban_manager.sh:68 msgid "systemd 无法读取 SSH 日志" msgstr "systemd cannot read ssh logs" #: fail2ban_manager.sh:69 msgid "跳过启用" msgstr "skip activation" #: fail2ban_manager.sh:69 fail2ban_manager.sh:93 fail2ban_manager.sh:103 #: fail2ban_manager.sh:120 fail2ban_manager.sh:125 fail2ban_manager.sh:128 #: fail2ban_manager.sh:146 fail2ban_manager.sh:151 fail2ban_manager.sh:154 msgid "规则" msgstr "rule" #: fail2ban_manager.sh:77 fail2ban_manager.sh:203 fail2ban_manager.sh:440 msgid "未安装, 请先安装" msgstr "not installed, please install first" #: fail2ban_manager.sh:125 fail2ban_manager.sh:151 fail2ban_manager.sh:349 msgid "已禁用" msgstr "disabled" #: fail2ban_manager.sh:209 msgid "请选择" msgstr "please select" #: fail2ban_manager.sh:209 msgid "操作" msgstr "operation" #: fail2ban_manager.sh:210 msgid "管理模块" msgstr "management module" #: fail2ban_manager.sh:211 msgid "添加自定义规则" msgstr "add custom rule" #: fail2ban_manager.sh:212 fail2ban_manager.sh:228 msgid "服务管理" msgstr "service management" #: fail2ban_manager.sh:271 msgid "请输入新的" msgstr "please enter the new one" #: fail2ban_manager.sh:271 fail2ban_manager.sh:272 msgid "名称" msgstr "name" #: fail2ban_manager.sh:273 msgid "请输入日志路径" msgstr "please enter the log path" #: fail2ban_manager.sh:274 msgid "请输入最大重试次数" msgstr "please enter the maximum number of retries" #: fail2ban_manager.sh:274 msgid "最大重试次数必须在 1 到 99 之间" msgstr "the maximum number of retries must be between 1 and 99" #: fail2ban_manager.sh:275 msgid "请输入封禁时间" msgstr "please enter the ban time" #: fail2ban_manager.sh:275 msgid "秒" msgstr "second" #: fail2ban_manager.sh:275 msgid "封禁时间必须在 1 到 8640000 秒之间" msgstr "the ban duration must be between 1 and 8,640,000 seconds" #: fail2ban_manager.sh:285 msgid "自定义规则添加成功" msgstr "custom rule added successfully" #: fail2ban_manager.sh:289 msgid "重启以应用新规则" msgstr "restart to apply new rules" #: fail2ban_manager.sh:294 msgid "管理 Fail2ban 模块" msgstr "manage the fail2ban module" #: fail2ban_manager.sh:311 msgid "未找到任何模块化配置文件" msgstr "no modular configuration files were found" #: fail2ban_manager.sh:319 fail2ban_manager.sh:339 msgid "模块名称" msgstr "module name" #: fail2ban_manager.sh:339 file_manager.sh:59 msgid "序号" msgstr "serial number" #: fail2ban_manager.sh:363 msgid "请选择要管理的模块" msgstr "please select the module you want to manage" #: fail2ban_manager.sh:375 msgid "启用" msgstr "enable" #: fail2ban_manager.sh:375 msgid "禁用" msgstr "disable" #: fail2ban_manager.sh:378 msgid "是否" msgstr "whether… or not" #: fail2ban_manager.sh:378 fail2ban_manager.sh:386 msgid "模块" msgstr "module" #: fail2ban_manager.sh:388 msgid "操作已取消" msgstr "operation canceled" #: fail2ban_manager.sh:424 msgid "停止成功" msgstr "stopped successfully" #: fail2ban_manager.sh:444 msgid "总体状态" msgstr "overall status" #: fail2ban_manager.sh:448 msgid "默认启用的 Jail 状态" msgstr "default enabled jail status" #: fail2ban_manager.sh:452 fail2ban_manager.sh:458 msgid "封锁情况" msgstr "lockdown situation" #: fail2ban_manager.sh:453 fail2ban_manager.sh:459 fail2ban_manager.sh:462 #: fail2ban_manager.sh:466 fail2ban_manager.sh:469 msgid "未启用或配置异常" msgstr "not enabled or configuration exception" #: fail2ban_manager.sh:484 file_manager.sh:232 msgid "新版本可用" msgstr "new version available" #: fail2ban_manager.sh:484 file_manager.sh:232 msgid "当前版本" msgstr "current version" #: fail2ban_manager.sh:485 file_manager.sh:233 msgid "请访问" msgstr "please visit" #: fail2ban_manager.sh:485 file_manager.sh:233 msgid "查看更新说明" msgstr "view update notes" #: fail2ban_manager.sh:487 file_manager.sh:235 msgid "是否下载并安装新版本" msgstr "do you want to download and install the new version" #: fail2ban_manager.sh:491 file_manager.sh:239 msgid "正在下载新版本" msgstr "downloading the new version" #: fail2ban_manager.sh:496 file_manager.sh:244 msgid "下载完成, 请重新运行脚本" msgstr "download completed, please run the script again" #: fail2ban_manager.sh:504 file_manager.sh:252 msgid "跳过更新" msgstr "skip update" #: fail2ban_manager.sh:508 file_manager.sh:256 msgid "当前已经是最新版本" msgstr "it is already the latest version" #: file_manager.sh:7 msgid "用法" msgstr "usage" #: file_manager.sh:7 msgid "文件扩展名" msgstr "file extension" #: file_manager.sh:7 msgid "目录路径" msgstr "directory path" #: file_manager.sh:16 msgid "目录" msgstr "table of contents" #: file_manager.sh:16 msgid "不存在, 请检查路径" msgstr "does not exist, please check the path" #: file_manager.sh:26 file_manager.sh:204 msgid "列出所有" msgstr "list all" #: file_manager.sh:26 file_manager.sh:35 file_manager.sh:88 file_manager.sh:111 #: file_manager.sh:160 file_manager.sh:176 file_manager.sh:204 #: file_manager.sh:205 file_manager.sh:206 file_manager.sh:207 msgid "文件" msgstr "file" #: file_manager.sh:53 msgid "文件名" msgstr "file name" #: file_manager.sh:79 msgid "请输入网址 (例如 hey.run)" msgstr "please enter the url (e.g., hey.run)" #: file_manager.sh:80 msgid "不要包含 http:// 或 https:// 开头" msgstr "do not include http:// or https:// at the beginning" #: file_manager.sh:84 msgid "网址不能包含 http:// 或 https:// 前缀" msgstr "the url cannot contain the http:// or https:// prefix" #: file_manager.sh:88 file_manager.sh:111 msgid "已创建" msgstr "created" #: file_manager.sh:99 msgid "请输入主机" msgstr "please enter the host" #: file_manager.sh:107 msgid "请输入权重" msgstr "please enter the weight" #: file_manager.sh:128 msgid "追加完成" msgstr "additional completion" #: file_manager.sh:132 file_manager.sh:136 msgid "重启完成" msgstr "restart completed" #: file_manager.sh:151 msgid "请输入要编辑的文件编号" msgstr "please enter the file number to edit" #: file_manager.sh:156 msgid "未安装, 正在尝试安装" msgstr "not installed, attempting to install" #: file_manager.sh:160 msgid "已编辑" msgstr "edited" #: file_manager.sh:171 msgid "请输入要删除的文件编号" msgstr "please enter the file number to delete" #: file_manager.sh:194 msgid "不支持的文件扩展名" msgstr "unsupported file extension" #: file_manager.sh:205 msgid "创建一个新的" msgstr "create a new" #: file_manager.sh:206 msgid "编辑一个已存在的" msgstr "edit an existing" #: file_manager.sh:207 msgid "删除一个已存在的" msgstr "delete an existing" #: file_manager.sh:265 msgid "重启成功" msgstr "restart successful" #: file_manager.sh:268 msgid "重启失败" msgstr "restart failed" #: file_manager.sh:268 msgid "请检查配置文件是否有误" msgstr "please check if there is an error in the configuration file" ================================================ FILE: po/fa.po ================================================ # Persian translations for xray_install package. # Copyright (C) 2026 yunshu # This file is distributed under the same license as the xray_install package. # Automatically generated, 2026. # msgid "" msgstr "" "Project-Id-Version: xray_install 1.0\n" "Report-Msgid-Bugs-To: https://github.com/hello-yunshu/Xray_bash_onekey/" "issues\n" "POT-Creation-Date: 2026-04-24 09:47+0000\n" "PO-Revision-Date: 2026-04-24 09:47+0000\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: fa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: install.sh:32 msgid "信息" msgstr "اطلاعات" #: install.sh:34 msgid "错误" msgstr "اشتباه" #: install.sh:35 msgid "警告" msgstr "هشدار" #: install.sh:38 install.sh:1540 install.sh:3960 install.sh:3977 #: install.sh:3980 install.sh:3981 install.sh:4019 msgid "未安装" msgstr "ننصب نشده است" #: install.sh:99 msgid "日志文件归档失败" msgstr "ارشیو شدن فایل روزنامه با موفقیت انجام نشد" #: install.sh:104 msgid "日志文件清空失败" msgstr "پاکسازی فایل روزنامه ناموفق بود" #: install.sh:108 msgid "日志文件已轮转并归档为" msgstr "فایل روزنامه به صورت چرخشی و در فرمت آرشیو ذخیره شده است" #: install.sh:134 install.sh:138 install.sh:142 install.sh:152 msgid "当前系统为" msgstr "سیستم فعلی عبارت است از" #: install.sh:152 msgid "不在支持的系统列表内, 安装中断" msgstr "در لیست سیستم‌های پشتیبانی نیست، نصب متوقف شد" #: install.sh:159 msgid "当前用户是 root 用户, 开始安装" msgstr "کاربر فعلی، کاربر روت است؛ نصب را شروع کنید" #: install.sh:161 msgid "当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本" msgstr "کاربر فعلی روت نیست، لطفاً به کاربر روت تغییر مسیر دهید و سپس اسکریپت را دوباره اجرا کنید" #: install.sh:187 msgid "无法获取远程语言文件信息" msgstr "نمی‌توان اطلاعات فایل زبان ریموت را به دست آورد" #: install.sh:205 msgid "正在更新语言文件" msgstr "در حال به‌روزرسانی فایل‌های زبانی" #: install.sh:208 install.sh:291 msgid "语言文件更新失败" msgstr "به‌روزرسانی فایل زبان با موفقیت انجام نشد" #: install.sh:213 msgid "语言文件无效" msgstr "پرونده زبان نامعتبر است" #: install.sh:219 msgid "版本文件更新失败" msgstr "بازرسی فایل نسخه شکست خورد" #: install.sh:226 msgid "语言文件更新完成" msgstr "به‌روزرسانی فایل زبان به پایان رسید" #: install.sh:231 install.sh:2725 msgid "正在安装" msgstr "در حال نصب" #: install.sh:234 msgid "安装失败" msgstr "ناموفقیت نصب" #: install.sh:234 install.sh:258 install.sh:281 install.sh:291 msgid "将使用默认语言" msgstr "از زبان پیش فرض استفاده خواهد شد" #: install.sh:258 file_manager.sh:35 msgid "未找到" msgstr "پیدا نشد" #: install.sh:281 msgid "不支持的语言" msgstr "زبان‌هایی که پشتیبانی نمی‌شوند" #: install.sh:297 msgid "发现语言文件更新" msgstr "به‌روزرسانی فایل زبان کشف شد" #: install.sh:312 install.sh:1740 msgid "完成" msgstr "کامل شدن" #: install.sh:315 msgid "失败" msgstr "شکست" #: install.sh:322 msgid "在线版本检测失败, 请稍后再试" msgstr "بررسی نسخه آنلاین با شکست مواجه شد، لطفاً بعداً دوباره تلاش کنید" #: install.sh:344 install.sh:352 install.sh:1162 install.sh:3872 #: install.sh:3873 install.sh:3874 install.sh:3875 install.sh:4206 #: install.sh:4207 install.sh:4208 install.sh:4209 fail2ban_manager.sh:12 #: fail2ban_manager.sh:39 msgid "安装" msgstr "نصب" #: install.sh:346 install.sh:354 install.sh:1169 install.sh:2729 #: install.sh:3969 msgid "已安装" msgstr "نصب شده" #: install.sh:371 install.sh:375 msgid "自启动配置" msgstr "پیکربندی خودکار اجرا" #: install.sh:384 msgid "链接库安装" msgstr "نصب کتابخانه لینک" #: install.sh:389 msgid "值为空或超出范围, 请重新输入" msgstr "مقدار خالی یا خارج از محدوده است، لطفاً دوباره وارد کنید" #: install.sh:398 msgid "值为空, 请重新输入" msgstr "مقدار خالی است، لطفاً دوباره وارد کنید" #: install.sh:440 msgid "确定端口" msgstr "پورت را مشخص کنید" #: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:104 msgid "请输入端口" msgstr "لطفاً پورت را وارد کنید" #: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:107 msgid "默认值" msgstr "مقدار پیش فرض" #: install.sh:441 install.sh:444 install.sh:532 install.sh:554 install.sh:3055 #: install.sh:3060 install.sh:3065 install.sh:3066 install.sh:3081 #: install.sh:3086 install.sh:3091 install.sh:3092 msgid "请输入 0-65535 之间的值" msgstr "لطفاً مقداری بین ۰ تا ۶۵۵۳۵ را وارد کنید" #: install.sh:443 msgid "端口不允许使用, 请重新输入" msgstr "پورت مجاز نیست، لطفاً دوباره وارد کنید" #: install.sh:452 msgid "请选择安装协议" msgstr "لطفاً توافق نامه نصب را انتخاب کنید" #: install.sh:453 install.sh:1617 install.sh:1654 install.sh:1705 #: install.sh:2997 install.sh:3142 install.sh:3209 install.sh:3256 #: fail2ban_manager.sh:274 fail2ban_manager.sh:275 msgid "默认" msgstr "پیش فرض" #: install.sh:457 install.sh:532 install.sh:554 install.sh:635 install.sh:668 #: install.sh:821 install.sh:840 install.sh:881 install.sh:922 install.sh:1621 #: install.sh:1634 install.sh:1656 install.sh:1709 install.sh:1719 #: install.sh:2985 install.sh:3000 install.sh:3055 install.sh:3060 #: install.sh:3065 install.sh:3066 install.sh:3081 install.sh:3086 #: install.sh:3091 install.sh:3092 install.sh:3145 install.sh:3154 #: install.sh:3212 install.sh:3259 install.sh:3268 fail2ban_manager.sh:215 #: fail2ban_manager.sh:234 fail2ban_manager.sh:272 file_manager.sh:81 msgid "请输入" msgstr "لطفاً وارد کنید" #: install.sh:457 install.sh:922 install.sh:1621 install.sh:1656 #: install.sh:1709 install.sh:2985 install.sh:3000 install.sh:3145 #: install.sh:3212 install.sh:3259 install.sh:4251 install.sh:4489 msgid "请输入有效的数字" msgstr "لطفاً عدد معتبری وارد کنید" #: install.sh:478 msgid "是否添加简单 ws/gRPC 协议 用于负载均衡" msgstr "آیا برای تعادل بار، پروتکل ws/grpc ساده اضافه می‌شود؟" #: install.sh:479 install.sh:1259 msgid "如不清楚具体用途, 请勿选择" msgstr "اگر کاربرد دقیق آن را نمی‌دانید، لطفاً انتخاب نکنید" #: install.sh:499 msgid "已跳过添加简单 ws/gRPC 协议" msgstr "اضافه کردن پروتکل‌های ساده ws/grpc رد شد" #: install.sh:528 install.sh:550 install.sh:631 install.sh:648 install.sh:664 #: install.sh:681 install.sh:696 install.sh:815 install.sh:836 install.sh:877 msgid "是否需要自定义" msgstr "آیا نیاز به سفارشی‌سازی دارید؟" #: install.sh:532 install.sh:554 msgid "请勿与其他端口相同" msgstr "لطفاً با سایر پورت‌ها یکسان نباشد" #: install.sh:571 file_manager.sh:114 msgid "是否需要设置防火墙" msgstr "آیا نیاز به تنظیم فایروال دارید؟" #: install.sh:611 install.sh:615 file_manager.sh:128 file_manager.sh:132 #: file_manager.sh:136 msgid "防火墙" msgstr "دیوار آتش" #: install.sh:611 install.sh:615 install.sh:2215 install.sh:2218 #: install.sh:3012 install.sh:3014 install.sh:4227 fail2ban_manager.sh:231 #: fail2ban_manager.sh:432 msgid "重启" msgstr "بازنشانی" #: install.sh:617 msgid "开放防火墙相关端口" msgstr "پورت‌های مرتبط با فایروال را باز کنید" #: install.sh:618 msgid "若修改配置, 请注意关闭防火墙相关端口" msgstr "اگر تنظیمات را تغییر می‌دهید، لطفاً پورت‌های مربوط به فایروال را ببندید" #: install.sh:619 install.sh:3877 install.sh:3892 install.sh:3893 #: install.sh:4216 install.sh:4236 fail2ban_manager.sh:161 msgid "配置" msgstr "تنظیم" #: install.sh:622 file_manager.sh:140 msgid "跳过防火墙设置" msgstr "پرش از تنظیمات فایروال" #: install.sh:631 install.sh:635 install.sh:636 install.sh:640 install.sh:648 #: install.sh:664 install.sh:668 install.sh:669 install.sh:673 install.sh:681 #: install.sh:1101 msgid "伪装路径" msgstr "مسیر مخفی" #: install.sh:635 install.sh:668 msgid "不需要" msgstr "نیاز نیست" #: install.sh:696 install.sh:706 install.sh:3172 msgid "用户名" msgstr "نام کاربر" #: install.sh:700 msgid "请输入正确的 email" msgstr "لطفاً ایمیل صحیح را وارد کنید" #: install.sh:713 msgid "是否需要自定义字符串映射" msgstr "آیا نیاز به تطبیق رشته‌های کاربری دارد؟" #: install.sh:717 msgid "请输入自定义字符串" msgstr "لطفاً رشته کاربری را وارد کنید" #: install.sh:717 msgid "最多30字符" msgstr "حداکثر ۳۰ حرف" #: install.sh:719 msgid "自定义字符串" msgstr "رشته کاربری" #: install.sh:726 install.sh:2836 install.sh:3895 install.sh:4211 #: install.sh:4314 msgid "映射字符串" msgstr "رشته متنابه" #: install.sh:737 msgid "检测到 target 域名已配置, 是否保留" msgstr "نام دامنه هدف که قبلاً تنظیم شده را تشخیص داده‌ایم، آیا می‌خواهید حفظ کنید؟" #: install.sh:757 msgid "请输入一个域名" msgstr "لطفاً یک نام دامنه وارد کنید" #: install.sh:758 msgid "域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用" msgstr "نام دامنه باید از tlsv1.3، x25519 و h2 پشتیبانی کند و نباید جابجایی داشته باشد" #: install.sh:759 msgid "确认域名符合要求后请输入" msgstr "بعد از تأیید مطابقت نام دامنه با شرایط، وارد کنید" #: install.sh:760 msgid "正在检测域名请等待" msgstr "در حال بررسی نام دامنه است، لطفاً صبر کنید" #: install.sh:767 install.sh:772 install.sh:777 msgid "该域名不支持" msgstr "این نام دامنه پشتیبانی نمی‌شود" #: install.sh:782 msgid "该域名发生了跳转" msgstr "این نام دامنه به جایی منتقل شده است" #: install.sh:789 msgid "该域名可能不满足所有要求" msgstr "این نام دامنه ممکن است به تمامی شرایط را برآورده نکند" #: install.sh:790 msgid "是否仍要设置此域名" msgstr "آیا هنوز می‌خواهید این نام دامنه را تنظیم کنید؟" #: install.sh:802 install.sh:807 install.sh:1619 msgid "域名" msgstr "نام دامنه" #: install.sh:802 msgid "满足所有要求" msgstr "همه‌ی شرایط را برآورده کند" #: install.sh:815 msgid "域名的" msgstr "دومین نام" #: install.sh:816 msgid "默认为" msgstr "پیش فرض به" #: install.sh:816 msgid "域名本身" msgstr "خود نام دامنه" #: install.sh:817 install.sh:912 install.sh:952 msgid "如不清楚具体用途, 请勿继续" msgstr "اگر کاربرد دقیق آن را نمی‌دانید، لطفاً ادامه ندهید" #: install.sh:898 msgid "本地文件 file_manager.sh 不存在, 正在下载" msgstr "پرونده محلی file_manager.sh وجود ندارد، در حال دانلود است" #: install.sh:900 install.sh:2330 fail2ban_manager.sh:500 file_manager.sh:248 msgid "下载失败, 请手动下载并安装新版本" msgstr "دانلود ناموفق بود، لطفاً نسخه جدید را به صورت دستی دانلود و نصب کنید" #: install.sh:911 install.sh:951 msgid "是否变更" msgstr "آیا تغییر می‌کند" #: install.sh:911 msgid "负载均衡" msgstr "تعادل بار" #: install.sh:917 msgid "请选择协议为 ws 或 gRPC" msgstr "لطفاً پروتکل را به عنوان ws یا grpc انتخاب کنید" #: install.sh:920 fail2ban_manager.sh:213 fail2ban_manager.sh:232 #: fail2ban_manager.sh:325 fail2ban_manager.sh:357 msgid "返回" msgstr "بازگشت" #: install.sh:930 file_manager.sh:220 msgid "无效选项, 请重试" msgstr "گزینه نامعتبر، لطفاً دوباره تلاش کنید" #: install.sh:940 install.sh:964 install.sh:2266 install.sh:2304 #: install.sh:2320 msgid "当前模式不支持此操作" msgstr "این روش در حالت فعلی پشتیبانی نمی‌شود" #: install.sh:953 msgid "配置用途可以参考文章" msgstr "برای استفاده از تنظیمات می‌توان به مقاله مراجعه کرد" #: install.sh:980 install.sh:991 install.sh:995 install.sh:999 install.sh:1011 #: install.sh:1016 install.sh:1020 install.sh:1025 install.sh:1045 #: install.sh:1051 install.sh:1101 install.sh:1120 install.sh:3893 #: install.sh:4177 msgid "修改" msgstr "ویرایش کردن" #: install.sh:1053 install.sh:2816 install.sh:2818 install.sh:2820 #: install.sh:2821 install.sh:2824 install.sh:2828 install.sh:2830 #: install.sh:2832 install.sh:2833 install.sh:2861 install.sh:2864 #: install.sh:2867 install.sh:2869 install.sh:3049 msgid "端口" msgstr "پورت" #: install.sh:1103 msgid "不支持" msgstr "پشتیبانی نمی‌شود" #: install.sh:1110 msgid "用户名修改" msgstr "تغییر نام کاربر" #: install.sh:1113 install.sh:1123 msgid "请先删除多余的用户" msgstr "لطفاً ابتدا کاربران اضافی را حذف کنید" #: install.sh:1131 install.sh:1139 install.sh:1146 install.sh:1990 #: install.sh:2061 install.sh:2146 install.sh:2154 install.sh:2163 #: install.sh:2186 msgid "配置修改" msgstr "تغییر تنظیمات" #: install.sh:1151 msgid "检测到 Xray 的权限控制, 启动修改程序" msgstr "اجازه‌های کنترل xray شناسایی شد، برنامه تغییرات را شروع کنید" #: install.sh:1156 msgid "修改完成" msgstr "تغییرات انجام شد" #: install.sh:1176 msgid "若更新无效, 建议直接卸载再安装" msgstr "اگر به‌روزرسانی نتیجه‌ای نداشت، پیشنهاد می‌شود مستقیماً از بین ببرید و دوباره نصب کنید" #: install.sh:1177 msgid "部分新功能需要重新安装才可生效" msgstr "برخی از ویژگی‌های جدید نیاز به نصب مجدد دارند تا فعال شوند" #: install.sh:1182 msgid "检测到存在最新版" msgstr "نسخه جدیدتری شناسایی شده است" #: install.sh:1183 msgid "脚本可能未兼容此版本" msgstr "اسکریپت ممکن است با این نسخه سازگار نباشد" #: install.sh:1184 msgid "是否更新" msgstr "آیا به‌روزرسانی می‌شود" #: install.sh:1188 install.sh:1213 install.sh:1532 install.sh:3886 #: install.sh:3898 install.sh:4195 install.sh:4196 install.sh:4197 #: install.sh:4233 msgid "更新" msgstr "به‌روزرسانی" #: install.sh:1192 install.sh:1494 msgid "启动失败" msgstr "شروع ناموفق" #: install.sh:1193 install.sh:1497 msgid "是否回滚到之前的版本" msgstr "آیا به نسخه قبلی بازگردانده می‌شود؟" #: install.sh:1197 install.sh:1507 msgid "未执行回滚操作" msgstr "عملکرد برگشت انجام نشده است" #: install.sh:1201 install.sh:1511 msgid "正在回滚" msgstr "در حال بازگرداندن" #: install.sh:1205 install.sh:1518 msgid "已成功回滚到之前的" msgstr "به موفقیت به نسخه قبل بازگردانده شد" #: install.sh:1205 install.sh:1518 install.sh:4214 install.sh:4329 msgid "版本" msgstr "نسخه" #: install.sh:1207 install.sh:1228 install.sh:1524 msgid "回滚失败" msgstr "بازگرداندن شکست خورد" #: install.sh:1234 install.sh:1238 msgid "重装" msgstr "بازسازی" #: install.sh:1248 install.sh:1249 msgid "更新失败" msgstr "به‌روزرسانی ناموفق بود" #: install.sh:1257 msgid "是否添加 Reality 负载均衡" msgstr "آیا بارگیری واقعی اضافه شود" #: install.sh:1258 msgid "使用此功能前,建议先阅读作者教程" msgstr "قبل از استفاده از این ویژگی، توصیه می‌شود که آموزش نویسنده را بخوانید" #: install.sh:1264 fail2ban_manager.sh:93 fail2ban_manager.sh:103 #: fail2ban_manager.sh:128 fail2ban_manager.sh:154 fail2ban_manager.sh:347 msgid "已启用" msgstr "فعال شده است" #: install.sh:1268 msgid "已跳过" msgstr "پرش شده است" #: install.sh:1277 msgid "Reality 协议有流量偷跑的风险" msgstr "پروتکل ریالیتی خطر دارد که ترافیک از آن خارج شود" #: install.sh:1279 install.sh:1306 msgid "是否额外安装 nginx 前置保护" msgstr "آیا نگهدارنده nginx اضافه می‌شود؟" #: install.sh:1279 msgid "推荐" msgstr "توصیه شده" #: install.sh:1286 install.sh:1321 msgid "检测到已安装" msgstr "نرم‌افزار نصب شده شناسایی شد" #: install.sh:1289 install.sh:1324 msgid "已跳过安装" msgstr "نصب را رد کرده‌اید" #: install.sh:1303 msgid "检测到已开启 Reality 负载均衡" msgstr "تعادل بار realiti فعال شده است" #: install.sh:1304 msgid "如用作 Reality 负载均衡主服务器必须安装" msgstr "اگر به عنوان سرور اصلی تعادل بار reality استفاده شود، باید نصب شود" #: install.sh:1305 msgid "如用作 Reality 负载均衡二级服务器则无需安装" msgstr "اگر به عنوان سرور دوم بارگیری کننده واقعیت استفاده شود، نصب لازم نیست" #: install.sh:1349 msgid "已存在, 跳过编译安装过程" msgstr "قبلاً وجود دارد، فرآیند کامپایل و نصب را رد کنید" #: install.sh:1351 msgid "检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装" msgstr "نگین‌کس نصب شده توسط مجموعه دیگر را تشخیص داده است، ادامه نصب باعث درگیری خواهد شد، لطفاً پس از حل مشکل، نصب کنید" #: install.sh:1364 msgid "即将下载已编译的" msgstr "به زودی دانلود شده‌است" #: install.sh:1374 msgid "不支持的系统架构" msgstr "ساختار سیستم پشتیبانی نشده است" #: install.sh:1383 msgid "下载失败" msgstr "دریافت ناموفق است" #: install.sh:1387 msgid "下载成功" msgstr "دانلود با موفقیت انجام شد" #: install.sh:1390 msgid "解压失败" msgstr "بازکردن فایل ناموفق بود" #: install.sh:1438 install.sh:1439 install.sh:1446 install.sh:1447 msgid "配置不完整, 退出更新" msgstr "پیکربندی ناقص است، به‌روزرسانی را ترک کنید" #: install.sh:1451 install.sh:1452 msgid "当前安装模式不需要" msgstr "حالت فعلی نصب نیاز به آن ندارد" #: install.sh:1456 install.sh:1457 msgid "配置不存在, 退出更新" msgstr "پیکربندی موجود نیست، به‌روزرسانی را ترک کنید" #: install.sh:1463 msgid "备份旧版" msgstr "نسخه قدیمی را ذخیره کنید" #: install.sh:1464 msgid "删除旧版" msgstr "نسخه قدیم را حذف کنید" #: install.sh:1468 msgid "是否保留原 Nginx 配置文件" msgstr "آیا فایل تنظیمات اصلی nginx را حفظ کنید؟" #: install.sh:1476 install.sh:1809 msgid "原配置文件已删除" msgstr "پرونده تنظیمات اصلی حذف شده است" #: install.sh:1480 msgid "原配置文件已保留" msgstr "پرونده تنظیمات اصلی نگهداری شده است" #: install.sh:1534 install.sh:4220 msgid "删除" msgstr "حذف کردن" #: install.sh:1534 install.sh:4243 msgid "备份" msgstr "پشتیبان‌گیری" #: install.sh:1537 msgid "已为最新版" msgstr "برای نسخه جدیدترین آماده شده است" #: install.sh:1553 msgid "设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)" msgstr "تنظیم برنامه‌های خودکار به‌روزرسانی پس‌زمینه (شامل: اسکریپت/xray/nginx)" #: install.sh:1554 msgid "可能自动更新后有兼容问题, 谨慎启用" msgstr "ممکن است پس از به‌روزرسانی خودکار مشکلات سازگاری وجود داشته باشد؛ لطفاً با احتیاط فعال کنید" #: install.sh:1555 fail2ban_manager.sh:120 fail2ban_manager.sh:146 msgid "是否启用" msgstr "فعال‌سازی شود؟" #: install.sh:1561 install.sh:3878 msgid "设置自动更新" msgstr "تنظیم به‌روزرسانی خودکار" #: install.sh:1566 msgid "已设置自动更新" msgstr "به‌روزرسانی خودکار تنظیم شده است" #: install.sh:1567 msgid "是否关闭" msgstr "آیا بسته شود" #: install.sh:1573 msgid "删除自动更新" msgstr "به‌روزرسانی خودکار را حذف کنید" #: install.sh:1582 msgid "安装 SSL 证书生成脚本依赖" msgstr "نصب وابستگی‌های اسکریپت تولید گواهینامه ssl" #: install.sh:1584 msgid "安装 SSL 证书生成脚本" msgstr "نصب اسکریپت تولید گواهینامه ssl" #: install.sh:1590 msgid "检测到原域名配置存在, 是否跳过域名设置" msgstr "تنظیمات دامنه اصلی قبلی شناسایی شده است، آیا تنظیمات دامنه را رد کنید؟" #: install.sh:1605 install.sh:1642 install.sh:1693 install.sh:1726 msgid "无法获取公网IP地址" msgstr "نمی‌توان آدرس ip عمومی را بدست آورد" #: install.sh:1605 install.sh:1642 install.sh:1665 install.sh:1693 #: install.sh:1726 msgid "安装终止" msgstr "نصب متوقف شد" #: install.sh:1608 msgid "已跳过域名设置" msgstr "تنظیمات دامنه رد شد" #: install.sh:1614 msgid "确定域名信息" msgstr "اطلاعات دامنه را تأیید کنید" #: install.sh:1615 msgid "请输入你的域名信息" msgstr "لطفاً اطلاعات دامنه خود را وارد کنید" #: install.sh:1616 msgid "请选择公网IP(IPv4/IPv6)或手动输入域名" msgstr "لطفاً ip عمومی (ipv4/ipv6) را انتخاب کنید یا نام دامنه را به صورت دستی وارد کنید" #: install.sh:1622 install.sh:1711 msgid "正在获取公网IP信息, 请耐心等待" msgstr "دارد اطلاعات آی‌پی عمومی را دریافت می‌کند، لطفاً صبر کنید" #: install.sh:1632 msgid "此选项用于服务器商仅提供域名访问服务器" msgstr "این گزینه برای سرویس‌دهندگانی است که تنها دسترسی به سرور با نام دامنه را فراهم می‌کنند" #: install.sh:1633 msgid "注意服务器商域名添加 CNAME 记录" msgstr "توجه داشته باشید که شرکت سرور، رکورد cname را به نام دامنه اضافه کند" #: install.sh:1645 msgid "域名DNS解析IP" msgstr "dns نام دامنه به آدرس ip تبدیل می‌شود" #: install.sh:1646 install.sh:1729 msgid "公网IP/域名" msgstr "آی‌پی عمومی/نام دامنه" #: install.sh:1648 msgid "域名DNS解析IP与公网IP匹配" msgstr "dns نام دامنه با ip عمومی مطابقت دارد" #: install.sh:1650 msgid "请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray" msgstr "لطفاً مطمئن شوید که رکورد a/aaaa درست به نام دامنه اضافه شده است، در غیر این صورت xray قابلیت استفاده صحیح نخواهد داشت" #: install.sh:1651 msgid "域名DNS解析IP与公网IP不匹配, 请选择" msgstr "dns تحلیل نام دامنه ip با ip عمومی مطابقت ندارد، لطفاً انتخاب کنید" #: install.sh:1652 install.sh:1659 msgid "继续安装" msgstr "نصب را ادامه دهید" #: install.sh:1653 msgid "重新输入" msgstr "دوباره وارد کنید" #: install.sh:1654 msgid "终止安装" msgstr "نصب را متوقف کنید" #: install.sh:1676 msgid "检测到原IP配置存在, 是否跳过IP设置" msgstr "پیکربندی ip اصلی شناسایی شد، آیا می‌خواهید از تنظیمات ip گذشته شوید؟" #: install.sh:1697 msgid "已跳过IP设置" msgstr "تنظیمات ip پرشده شد" #: install.sh:1703 msgid "确定公网IP信息" msgstr "اطلاعات ip عمومی را مشخص کنید" #: install.sh:1704 msgid "请选择公网IP为IPv4或IPv6" msgstr "لطفاً ip عمومی را به عنوان ipv4 یا ipv6 انتخاب کنید" #: install.sh:1707 msgid "手动输入" msgstr "ورود دستی" #: install.sh:1734 msgid "端口未被占用" msgstr "پورت اشغال نشده است" #: install.sh:1736 msgid "检测到" msgstr "شنیده شد" #: install.sh:1736 msgid "端口被占用" msgstr "پورت در حال استفاده است" #: install.sh:1736 msgid "以下为" msgstr "زیرا در" #: install.sh:1736 msgid "端口占用信息" msgstr "اطلاعات استفاده از پورت" #: install.sh:1738 msgid "尝试终止占用的进程" msgstr "تلاش برای متوقف کردن فرآیندی که در حال استفاده است" #: install.sh:1749 msgid "证书测试签发成功, 开始正式签发" msgstr "ثبت شناسنامه با موفقیت انجام شد، شروع به صدور رسمی" #: install.sh:1752 msgid "证书测试签发失败" msgstr "امکان ارسال گواهینامه آزمایشی وجود ندارد" #: install.sh:1759 msgid "证书生成成功" msgstr "تصدیق تولید شد" #: install.sh:1765 msgid "证书配置成功" msgstr "تنظیمات گواهینامه با موفقیت انجام شد" #: install.sh:1769 msgid "证书生成失败" msgstr "ناموفقیت در تولید گواهینامه" #: install.sh:1801 msgid "检测到 Xray 配置过多用户" msgstr "کشف شد که تنظیمات xray از تعداد بیش از حد کاربران استفاده می‌کنند" #: install.sh:1802 msgid "是否保留原 Xray 配置文件" msgstr "آیا پرونده تنظیمات اصلی xray را حفظ کنید؟" #: install.sh:1822 msgid "添加简单 ws/gRPC 协议" msgstr "افزودن پروتکل‌های ساده ws/grpc" #: install.sh:1837 msgid "检测到配置文件, 是否读取配置文件" msgstr "پرونده تنظیمات شناسایی شد، آیا می‌خواهید پرونده تنظیمات را بخوانید؟" #: install.sh:1842 install.sh:1863 install.sh:1961 install.sh:3430 msgid "已删除配置文件" msgstr "پروفایل حذف شده" #: install.sh:1845 install.sh:1858 install.sh:1956 install.sh:3426 msgid "已保留配置文件" msgstr "پروفایل ذخیره شده است" #: install.sh:1852 msgid "检测到当前安装模式与配置文件的安装模式不一致" msgstr "مشاهده شد که حالت نصب فعلی با حالت نصب فایل پیکربندی مطابقت ندارد" #: install.sh:1853 msgid "是否保留配置文件 (强烈不建议)" msgstr "آیا فایل پیکربندی را حفظ کنید (به شدت توصیه نمی‌شود)" #: install.sh:1857 msgid "请务必确保配置文件正确" msgstr "لطفاً حتماً مطمئن شوید که فایل پیکربندی درست است" #: install.sh:1951 msgid "检测到配置文件不完整, 是否保留配置文件" msgstr "پرونده تنظیمات ناقص شناسایی شد، آیا می‌خواهید پرونده تنظیمات را حفظ کنید؟" #: install.sh:2170 msgid "配置删除" msgstr "پاک کردن تنظیمات" #: install.sh:2191 msgid "设置 Nginx 开机自启" msgstr "تنظیم اتوماتیک شروع nginx در هنگام روشن شدن سیستم" #: install.sh:2194 install.sh:4234 install.sh:4237 install.sh:4238 #: install.sh:4239 fail2ban_manager.sh:10 msgid "设置" msgstr "تنظیمات" #: install.sh:2194 install.sh:2202 msgid "开机自启" msgstr "روشن شدن خودکار" #: install.sh:2199 msgid "关闭 Nginx 开机自启" msgstr "nginx را در زمان روشن شدن خودکار غیرفعال کنید" #: install.sh:2202 msgid "关闭" msgstr "بستن" #: install.sh:2209 install.sh:2231 install.sh:2234 install.sh:2294 #: install.sh:4229 fail2ban_manager.sh:230 msgid "停止" msgstr "متوقف شوید" #: install.sh:2223 install.sh:2226 install.sh:2761 install.sh:4228 #: fail2ban_manager.sh:229 fail2ban_manager.sh:398 msgid "启动" msgstr "شروع کردن" #: install.sh:2247 install.sh:2263 msgid "新版本已自动设置证书自动更新" msgstr "نسخه جدید به طور خودکار تنظیم شده است تا گواهینامه‌ها را به صورت خودکار به روزرسانی کند" #: install.sh:2248 msgid "老版本请及时删除 废弃的 改版证书自动更新" msgstr "نسخه قدیمی را به موقع حذف کنید، گواهینامه‌های منسوخ شده به صورت خودکار به روز می‌شوند" #: install.sh:2249 msgid "已设置改版证书自动更新" msgstr "به‌روزرسانی خودکار گواهینامه‌های بازطراحی شده تنظیم شده است" #: install.sh:2250 msgid "是否需要删除改版证书自动更新 (请删除)" msgstr "آیا نیاز است که به‌روزرسانی خودکار گواهینامه بازطراحی شده حذف شود (لطفاً حذف کنید)" #: install.sh:2257 msgid "删除改版证书自动更新" msgstr "حذف اتوماتیک به روزرسانی گواهینامه بازطراحی شده" #: install.sh:2281 msgid "已过期" msgstr "منقضی شده است" #: install.sh:2283 msgid "证书生成日期" msgstr "تاریخ تولید گواهینامه" #: install.sh:2284 msgid "证书生成天数" msgstr "روزهای تولید گواهینامه" #: install.sh:2285 msgid "证书剩余天数" msgstr "روز‌های باقی‌مانده گواهینامه" #: install.sh:2289 msgid "是否立即更新证书" msgstr "آیا شناسنامه بلافاصله به روزرسانی می‌شود؟" #: install.sh:2301 install.sh:2313 msgid "证书签发工具不存在, 请确认是否证书为脚本签发" msgstr "ابزار امضا کردن گواهینامه وجود ندارد، لطفاً تأیید کنید که آیا گواهینامه با اسکریپت امضا شده است" #: install.sh:2317 msgid "证书更新" msgstr "به‌روزرسانی گواهینامه" #: install.sh:2327 msgid "本地文件 fail2ban_manager.sh 不存在, 正在下载" msgstr "پرونده محلی fail2ban_manager.sh وجود ندارد، در حال دانلود است" #: install.sh:2342 msgid "是否需要设置自动清理日志" msgstr "آیا نیاز به تنظیم خودکار پاک کردن روزنامه‌ها وجود دارد؟" #: install.sh:2346 msgid "已跳过设置自动清理日志" msgstr "تنظیمات پاکسازی خودکار روزنامه‌ها نادیده گرفته شده است" #: install.sh:2349 msgid "将在 每周三 04:00 自动清空日志" msgstr "روزانه در هر چهارشنبه ساعت 04:00 صبح خودکار روزنامه پاک می‌شود" #: install.sh:2354 msgid "已设置自动清理日志任务" msgstr "وظیفه خودکار پاکسازی روزنامه‌ها تنظیم شده است" #: install.sh:2355 msgid "是否需要删除现有自动清理日志任务" msgstr "آیا نیاز به حذف وظیفه پاکسازی خودکار روزنامه فعلی وجود دارد؟" #: install.sh:2360 msgid "删除自动清理日志任务" msgstr "وظیفه خودکار حذف روزنامه‌ها را حذف کنید" #: install.sh:2363 msgid "保留现有自动清理日志任务" msgstr "ماموریت پاکسازی خودکار روزنامه‌ها را حفظ کنید" #: install.sh:2378 msgid "设置自动清理日志" msgstr "تنظیم خودکار پاک کردن روزنامه‌ها" #: install.sh:2385 msgid "检测到日志文件大小如下:" msgstr "اندازه فایل روزنامه به شرح زیر تشخیص داده شد" #: install.sh:2387 msgid "即将清除" msgstr "به زودی پاک می‌شود" #: install.sh:2389 msgid "日志清理" msgstr "پاکسازی روزنامه" #: install.sh:2663 msgid "链接分享" msgstr "به اشتراک گذاری پیوند" #: install.sh:2665 install.sh:2671 install.sh:2676 install.sh:2681 #: install.sh:2685 install.sh:3183 msgid "分享链接" msgstr "لینک اشتراک" #: install.sh:2666 install.sh:2672 install.sh:2677 install.sh:2682 #: install.sh:2686 msgid "二维码" msgstr "کد qr" #: install.sh:2692 install.sh:2693 msgid "配置分享" msgstr "به اشتراک گذاری تنظیمات" #: install.sh:2707 msgid "生成分享链接" msgstr "لینک اشتراک‌گذاری را تولید کنید" #: install.sh:2735 install.sh:2746 install.sh:3038 install.sh:3108 #: install.sh:3132 install.sh:3198 install.sh:3246 install.sh:3300 #: install.sh:3352 msgid "请先安装" msgstr "لطفاً ابتدا نصب کنید" #: install.sh:2753 msgid "无法获取网卡, 将监控所有网卡" msgstr "نمی‌توان کارت شبکه را دریافت کرد، تمام کارتهای شبکه تحت نظارت قرار خواهد گرفت" #: install.sh:2755 msgid "监控网卡" msgstr "نگهبانی کارت شبکه" #: install.sh:2758 msgid "监控端口" msgstr "پورت نظارتی" #: install.sh:2760 msgid "按 q 键退出 iftop" msgstr "برای خروج از iftop، دکمه q را فشار دهید" #: install.sh:2776 install.sh:2779 install.sh:2782 install.sh:2785 #: install.sh:2788 install.sh:2791 install.sh:2794 install.sh:2797 #: install.sh:2800 install.sh:2803 install.sh:2806 msgid "安装成功" msgstr "نصب موفقیت‌آمیز" #: install.sh:2810 msgid "目前分享链接规范为实验阶段, 请自行判断是否适用" msgstr "در حال حاضر، استاندارد لینک اشتراک به عنوان مرحله آزمایشی است و لطفاً خودتان تصمیم بگیرید که آیا مناسب است یا نه" #: install.sh:2812 install.sh:4224 msgid "配置信息" msgstr "اطلاعات تنظیم" #: install.sh:2813 msgid "主机" msgstr "سرور" #: install.sh:2837 msgid "用户id" msgstr "شناسه کاربر" #: install.sh:2839 msgid "加密" msgstr "رمز‌گذاری" #: install.sh:2840 msgid "传输协议" msgstr "پروتکل انتقال" #: install.sh:2841 msgid "底层传输安全" msgstr "امنیت انتقال لایه پایین" #: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868 msgid "路径" msgstr "مسیر" #: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868 msgid "不要落下" msgstr "نگذار از دست بیفتد" #: install.sh:2846 install.sh:2849 install.sh:2865 install.sh:2870 msgid "不需要加" msgstr "نیاز به افزودن ندارد" #: install.sh:2852 msgid "流控" msgstr "کنترل جریان" #: install.sh:2885 msgid "即将申请证书, 支持使用自定义证书" msgstr "در حال درخواست گواهینامه است، از استفاده از گواهینامه‌های سفارشی پشتیبانی می‌کند" #: install.sh:2886 msgid "如需使用自定义证书, 请按如下步骤:" msgstr "برای استفاده از گواهینامه سفارشی، لطفاً مراحل زیر را دنبال کنید" #: install.sh:2887 msgid "1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)" msgstr "۱. فایل گواهینامه را با نام جدیدی به نام: کلید خصوصی (xray.key)، گواهینامه (xray.crt) تغییر نام دهید" #: install.sh:2888 msgid "2. 将重命名后的证书文件放入" msgstr "۲. فایل گواهینامه با نام تغییر یافته را قرار دهید" #: install.sh:2888 msgid "目录后再运行脚本" msgstr "پس از فهرست، اسکریپت را اجرا کنید" #: install.sh:2889 msgid "3. 重新运行脚本" msgstr "۳. دوباره اسکریپت را اجرا کنید" #: install.sh:2890 install.sh:3334 msgid "是否继续" msgstr "آیا ادامه دادن؟" #: install.sh:2898 msgid "所有证书文件均已存在, 是否保留" msgstr "تمام فایل‌های گواهینامه وجود دارد، آیا حفظ شود؟" #: install.sh:2904 install.sh:2919 install.sh:2935 file_manager.sh:176 msgid "已删除" msgstr "حذف شده است" #: install.sh:2910 install.sh:2925 install.sh:2942 msgid "证书应用" msgstr "کاربرد گواهینامه" #: install.sh:2914 msgid "证书文件已存在, 是否保留" msgstr "پرونده گواهینامه وجود دارد، آیا حفظ می‌شود؟" #: install.sh:2930 msgid "证书签发残留文件已存在, 是否保留" msgstr "پرونده‌های باقیمانده از صدور گواهینامه وجود دارد، آیا نگهداری می‌شود؟" #: install.sh:2972 install.sh:4219 msgid "添加" msgstr "اضافه کردن" #: install.sh:2980 msgid "请选择支持的 TLS 版本" msgstr "لطفاً نسخه tls مورد پشتیبانی را انتخاب کنید" #: install.sh:2981 msgid "建议选择 TLSv1.3 only (安全模式)" msgstr "پیشنهاد می‌شود فقط tlsv1.3 انتخاب شود (حالت امن)" #: install.sh:2982 install.sh:2998 msgid "兼容模式" msgstr "حالت سازگار" #: install.sh:2983 msgid "安全模式" msgstr "حالت امن" #: install.sh:2987 msgid "由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)" msgstr "از آنجا که h3 فقط tlsv1.3 را پشتیبانی می‌کند، فقط tlsv1.3 (حالت امن) پشتیبانی می‌شود" #: install.sh:2991 install.sh:3003 install.sh:3006 msgid "已切换至" msgstr "به این تبدیل شده است" #: install.sh:2995 msgid "请选择 TLS 版本" msgstr "tls نسخه را انتخاب کنید" #: install.sh:2996 msgid "建议选择 TLSv1.3 (安全模式)" msgstr "پیشنهاد می‌شود tlsv1.3 (حالت امن) انتخاب شود" #: install.sh:3009 msgid "当前模式不支持" msgstr "حالت فعلی پشتیبانی نمی‌کند" #: install.sh:3016 msgid "Nginx配置文件不存在 或 当前模式不支持" msgstr "فایل تنظیمات nginx موجود نیست یا حالت فعلی پشتیبانی نمی‌کند" #: install.sh:3130 msgid "此模式不支持修改" msgstr "این روش از تغییر پذیرش نمی‌کند" #: install.sh:3139 msgid "即将显示用户, 一次仅能显示一个" msgstr "کاربران به زودی نمایش داده می‌شوند، اما فقط یک کاربر در هر بار نمایش داده می‌شود" #: install.sh:3141 msgid "请选择显示用户使用的协议" msgstr "لطفاً پروتکل مورد استفاده کاربر را انتخاب کنید" #: install.sh:3151 msgid "请选择要显示的用户编号" msgstr "لطفاً شماره کاربر مورد نظر برای نمایش را انتخاب کنید" #: install.sh:3156 install.sh:3166 install.sh:3270 install.sh:3292 msgid "选择错误" msgstr "انتخاب اشتباه" #: install.sh:3159 msgid "请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户" msgstr "لطفاً مستقیماً در منوی اصلی [اطلاعات پیکربندی xray] را انتخاب کنید تا کاربر اصلی نمایش داده شود" #: install.sh:3169 install.sh:3295 msgid "请先检测 Xray 是否正确安装" msgstr "لطفاً ابتدا بررسی کنید که آیکس ری به درستی نصب شده است یا خیر" #: install.sh:3187 msgid "是否继续显示用户" msgstr "آیا نمایش کاربر ادامه یابد" #: install.sh:3196 install.sh:3298 msgid "此模式不支持删除用户" msgstr "این روش از حذف کاربر پشتیبانی نمی‌کند" #: install.sh:3206 msgid "即将添加用户, 一次仅能添加一个" msgstr "کاربران به زودی اضافه می‌شوند، اما فقط یک کاربر در هر بار قابل اضافه کردن است" #: install.sh:3208 msgid "请选择添加用户使用的协议" msgstr "لطفاً پروتکل استفاده شده برای افزودن کاربر را انتخاب کنید" #: install.sh:3230 msgid "添加用户" msgstr "افزودن کاربر" #: install.sh:3235 msgid "是否继续添加用户" msgstr "آیا می‌خواهید به افزودن کاربر ادامه دهید؟" #: install.sh:3244 msgid "此模式不支持添加用户" msgstr "این روش اضافه کردن کاربر را پشتیبانی نمی‌کند" #: install.sh:3253 msgid "即将删除用户, 一次仅能删除一个" msgstr "کاربر قرار است حذف شود، فقط یک نفر در هر بار قابل حذف است" #: install.sh:3255 msgid "请选择删除用户使用的协议" msgstr "لطفاً توافقنامه‌ای که توسط کاربر استفاده می‌شود را انتخاب کنید" #: install.sh:3265 msgid "请选择要删除的用户编号" msgstr "لطفاً شماره کاربر مورد نظر برای حذف را انتخاب کنید" #: install.sh:3274 msgid "主用户无法删除" msgstr "کاربر اصلی نمی‌تواند حذف شود" #: install.sh:3280 msgid "删除用户" msgstr "کاربر را حذف کنید" #: install.sh:3283 msgid "是否继续删除用户" msgstr "آیا می‌خواهید کاربر را حذف کنید؟" #: install.sh:3305 install.sh:3309 msgid "文件不存在" msgstr "فایل وجود ندارد" #: install.sh:3316 msgid "已配置 Xray 流量统计" msgstr "آمار ترافیک xray تنظیم شده است" #: install.sh:3317 msgid "是否需要关闭此功能" msgstr "آیا نیاز به غیرفعال کردن این ویژگی است؟" #: install.sh:3323 msgid "关闭 Xray 流量统计" msgstr "آمار جریان xray را بستن" #: install.sh:3332 msgid "流量统计需要使用" msgstr "برای آمار ترافیک باید استفاده کرد" #: install.sh:3333 msgid "可能会影响 Xray 性能" msgstr "ممکن است بر عملکرد ایکس‌ری تأثیر بگذارد" #: install.sh:3344 msgid "设置 Xray 流量统计" msgstr "تنظیم آمار جریان xray" #: install.sh:3374 install.sh:3394 msgid "已卸载" msgstr "از نصب خارج شده است" #: install.sh:3378 msgid "是否卸载" msgstr "آیا باید حذف شود؟" #: install.sh:3382 msgid "已取消卸载" msgstr "لغو شدیدن از نصب" #: install.sh:3405 msgid "是否删除所有脚本文件" msgstr "آیا می‌خواهید تمام فایل‌های اسکریپت را حذف کنید؟" #: install.sh:3412 msgid "已删除所有文件" msgstr "تمام فایل‌ها حذف شدند" #: install.sh:3413 msgid "ヾ( ̄▽ ̄) 拜拜~" msgstr "(¯▽¯) سلام ~" #: install.sh:3418 msgid "已保留脚本文件 (包含 SSL 证书等)" msgstr "فایل‌های اسکریپت (شامل گواهینامه ssl و غیره) ذخیره شده است" #: install.sh:3422 msgid "是否保留配置文件" msgstr "آیا فایل پیکربندی را حفظ کنید" #: install.sh:3439 msgid "已清空证书遗留文件" msgstr "فایل‌های باقی‌مانده از گواهینامه خالی شده است" #: install.sh:3469 msgid "秒后" msgstr "ثانیه بعد" #: install.sh:3669 msgid "检测最新版本失败" msgstr "شکست در تشخیص آخرین نسخه" #: install.sh:3677 install.sh:3917 msgid "新版本" msgstr "نسخه جدید" #: install.sh:3677 install.sh:3917 msgid "更新内容" msgstr "محتوای به‌روزرسانی" #: install.sh:3681 msgid "存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新" msgstr "نسخه جدیدی وجود دارد، اما تغییرات نسخه‌ها بسیار زیاد است و ممکن است بازهم ناسازگاری وجود داشته باشد. آیا به روزرسانی می‌کنید؟" #: install.sh:3684 msgid "存在新版本, 是否更新" msgstr "نسخه جدیدی وجود دارد، آیا می‌خواهید به روزرسانی کنید؟" #: install.sh:3688 msgid "检测 脚本 最新版本失败" msgstr "شکست در بررسی آخرین نسخه اسکریپت" #: install.sh:3689 msgid "脚本 版本差别过大, 跳过更新" msgstr "نسخه‌ی اسکریپت بسیار متفاوت است، به‌روزرسانی را رد کنید" #: install.sh:3697 install.sh:3698 msgid "脚本更新失败" msgstr "به‌روزرسانی اسکریپت ناموفق بود" #: install.sh:3704 msgid "更新完成" msgstr "به‌روزرسانی کامل شد" #: install.sh:3705 install.sh:3929 msgid "脚本版本变化较大, 若服务无法正常运行请卸载后重装" msgstr "نسخه‌ی اسکریپت تغییرات قابل توجهی داشته است، لطفاً در صورت عدم عملکرد صحیح خدمات، آن را حذف کرده و دوباره نصب کنید" #: install.sh:3714 msgid "当前版本为最新版本" msgstr "نسخه فعلی جدیدترین نسخه است" #: install.sh:3727 install.sh:3912 install.sh:3927 install.sh:3940 msgid "下载最新脚本" msgstr "آخرین اسکریپت را دانلود کنید" #: install.sh:3741 msgid "该选项暂时无法使用" msgstr "این گزینه در حال حاضر قابل استفاده نیست" #: install.sh:3760 install.sh:4286 msgid "此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装" msgstr "این روش برای توازن بار توصیه می‌شود، در شرایط عادی توصیه نمی‌شود که استفاده شود، آیا نصب می‌کنید" #: install.sh:3773 install.sh:4300 msgid "此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装" msgstr "این روش فقط برای انتقال ترافیک استفاده می‌شود و در سایر موارد توصیه نمی‌شود. آیا می‌خواهید نصب کنید؟" #: install.sh:3876 install.sh:3877 install.sh:3887 install.sh:3891 #: install.sh:3895 install.sh:4211 install.sh:4212 install.sh:4213 #: install.sh:4214 install.sh:4215 install.sh:4216 install.sh:4314 #: install.sh:4319 install.sh:4324 install.sh:4329 msgid "变更" msgstr "تغییر" #: install.sh:3876 install.sh:4215 msgid "负载均衡配置" msgstr "پیکربندی توازن بار" #: install.sh:3879 msgid "清除日志文件" msgstr "پاک کردن فایل‌های روزنامه" #: install.sh:3880 msgid "查看证书状态" msgstr "وضعیت گواهینامه را بررسی کنید" #: install.sh:3881 msgid "更新证书有效期" msgstr "به روزرسانی مدت اعتبار گواهینامه" #: install.sh:3882 msgid "设置证书自动更新" msgstr "تنظیم به‌روزرسانی خودکار گواهینامه" #: install.sh:3883 msgid "设置 Fail2ban 防暴力破解" msgstr "تنظیم فایل2بان برای جلوگیری از حملات کلمه‌پسوردی" #: install.sh:3884 msgid "显示帮助" msgstr "نمایش کمک" #: install.sh:3885 msgid "修改语言" msgstr "زبان را ویرایش کنید" #: install.sh:3888 install.sh:4218 install.sh:4222 install.sh:4223 #: install.sh:4224 install.sh:4225 install.sh:4230 install.sh:4232 #: fail2ban_manager.sh:15 msgid "查看" msgstr "مشاهده کنید" #: install.sh:3888 install.sh:4225 msgid "实时流量" msgstr "جریان زنده" #: install.sh:3889 msgid "脚本卸载" msgstr "اسکریپت‌های خارج شده" #: install.sh:3890 msgid "显示安装信息" msgstr "اطلاعات نصب را نشان دهید" #: install.sh:3892 install.sh:4237 msgid "加速" msgstr "سرعت بخشیدن" #: install.sh:3894 msgid "更新脚本" msgstr "برنامه‌ی به‌روزرسانی" #: install.sh:3896 install.sh:3897 msgid "显示" msgstr "نمایش" #: install.sh:3896 msgid "访问信息" msgstr "اطلاعات بازدید" #: install.sh:3897 msgid "错误信息" msgstr "پیام خطا" #: install.sh:3921 msgid "脚本版本变化较大, 可能存在不兼容情况, 是否继续使用" msgstr "نسخه‌ی اسکریپت تغییرات زیادی داشته است و ممکن است با نسخه‌های قبلی سازگار نباشد، آیا می‌خواهید ادامه دهید؟" #: install.sh:3948 msgid "检测失败" msgstr "عملیات تشخیص با شکست مواجه شد" #: install.sh:3952 install.sh:3962 install.sh:3971 msgid "有新版" msgstr "نسخه جدیدی وجود دارد" #: install.sh:3955 install.sh:3964 install.sh:3974 msgid "最新版" msgstr "نسخه جدیدترین" #: install.sh:3969 msgid "版本未知" msgstr "نسخه ناشناخته" #: install.sh:3989 install.sh:3996 msgid "运行中" msgstr "در حال اجرا" #: install.sh:3991 install.sh:4014 install.sh:4016 msgid "无需测试" msgstr "نیاز به آزمایش ندارد" #: install.sh:3993 install.sh:3998 msgid "未运行" msgstr "در حال اجرا نیست" #: install.sh:4008 msgid "无法连通" msgstr "نمی‌توان به آن متصل شد" #: install.sh:4010 install.sh:4011 install.sh:4012 msgid "本地正常" msgstr "وضعیت محلی عادی است" #: install.sh:4027 msgid "脚本维护中.. 请稍后再试" msgstr "اسکریپت در حال نگهداری است.. لطفاً بعداً دوباره امتحان کنید" #: install.sh:4034 msgid "无法检测所需依赖的在线版本, 请稍后再试" msgstr "نمی‌توان نسخه آنلاین وابستگی مورد نیاز را تشخیص داد، لطفاً بعداً دوباره تلاش کنید" #: install.sh:4051 msgid "请输入数字" msgstr "عدد را وارد کنید" #: install.sh:4051 msgid "请输入 1 到 6 之间的有效数字" msgstr "لطفاً عدد معتبری بین ۱ تا ۶ وارد کنید" #: install.sh:4081 msgid "无效的选择" msgstr "انتخاب نامعتبر" #: install.sh:4122 msgid "请输入备份名称" msgstr "لطفاً نام پشتیبان را وارد کنید" #: install.sh:4122 msgid "不需要后缀" msgstr "نیاز به پسوند نیست" #: install.sh:4131 msgid "报错信息" msgstr "پیام خطا" #: install.sh:4133 msgid "备份完整性可能受到影响, 请检查上述错误信息" msgstr "ممکن است کامل بودن پشتیبان‌گیری تحت تأثیر قرار گرفته باشد، لطفاً اطلاعات خطا را بررسی کنید" #: install.sh:4137 msgid "备份失败" msgstr "عملیات باک‌آپ ناموفق بود" #: install.sh:4139 msgid "备份成功" msgstr "ذخیره‌سازی موفقیت‌آمیز" #: install.sh:4144 msgid "请确保备份文件在目录" msgstr "لطفاً مطمئن شوید که فایل‌های پشتیبان در دایرکتوری هستند" #: install.sh:4148 msgid "没有找到备份文件" msgstr "پرونده پشتیبان یافت نشد" #: install.sh:4153 msgid "发现多个备份文件" msgstr "چندین فایل پشتیبان یافت شد" #: install.sh:4153 msgid "将使用最新的文件进行恢复" msgstr "از آخرین فایل‌ها برای بازیابی استفاده خواهد شد" #: install.sh:4157 msgid "找到最新备份文件" msgstr "پیدا کردن آخرین فایل پشتیبان" #: install.sh:4159 msgid "恢复备份" msgstr "بازیابی پشتیبان" #: install.sh:4163 msgid "恢复成功" msgstr "بازیابی موفق" #: install.sh:4164 install.sh:4166 msgid "记得安装" msgstr "یادتان باشد نصب کنید" #: install.sh:4169 msgid "恢复失败" msgstr "بازیابی ناموفق" #: install.sh:4175 msgid "安装管理脚本" msgstr "نصب اسکریپت مدیریت" #: install.sh:4176 msgid "作者" msgstr "نویسنده" #: install.sh:4180 msgid "当前模式" msgstr "حالت فعلی" #: install.sh:4181 msgid "当前语言" msgstr "زبان فعلی" #: install.sh:4184 msgid "可以使用" msgstr "می‌تواند استفاده شود" #: install.sh:4184 msgid "命令管理脚本" msgstr "اسکریپت مدیریت دستور" #: install.sh:4186 msgid "版本检测" msgstr "تشخیص نسخه" #: install.sh:4187 install.sh:4195 install.sh:4246 msgid "脚本" msgstr "اسکریپت" #: install.sh:4190 msgid "运行状态" msgstr "حالت اجرا" #: install.sh:4193 msgid "连通性" msgstr "اتصال" #: install.sh:4194 msgid "更新向导" msgstr "راهنمای به‌روزرسانی" #: install.sh:4205 msgid "安装向导" msgstr "راهنمای نصب" #: install.sh:4210 msgid "配置变更" msgstr "تغییر تنظیمات" #: install.sh:4217 msgid "用户管理" msgstr "مدیریت کاربران" #: install.sh:4218 install.sh:4219 install.sh:4220 msgid "用户" msgstr "کاربر" #: install.sh:4221 msgid "查看信息" msgstr "اطلاعات را ببینید" #: install.sh:4222 msgid "实时访问日志" msgstr "روگردان وقوع زمان واقع" #: install.sh:4223 msgid "实时错误日志" msgstr "روزنامه خطاها در زمان واقعی" #: install.sh:4226 msgid "服务相关" msgstr "خدمات مرتبط" #: install.sh:4227 install.sh:4228 install.sh:4229 install.sh:4230 msgid "所有服务" msgstr "تمام خدمات" #: install.sh:4231 msgid "证书相关" msgstr "مربوط به گواهینامه" #: install.sh:4232 msgid "证书状态" msgstr "وضع گواهینامه" #: install.sh:4233 msgid "证书有效期" msgstr "مدت اعتبار گواهینامه" #: install.sh:4234 msgid "证书自动更新" msgstr "به‌روزرسانی خودکار گواهینامه" #: install.sh:4235 msgid "其他选项" msgstr "گزینه‌های دیگر" #: install.sh:4236 msgid "自动更新" msgstr "به‌روزرسانی خودکار" #: install.sh:4238 msgid "防暴力破解" msgstr "پاداشت خرابکاری" #: install.sh:4239 msgid "流量统计" msgstr "آمار جریان" #: install.sh:4240 msgid "清除" msgstr "پاک کردن" #: install.sh:4240 msgid "日志文件" msgstr "فایل روزنامه" #: install.sh:4241 msgid "测试" msgstr "آزمایش" #: install.sh:4241 msgid "服务器网速" msgstr "سرعت اینترنت سرور" #: install.sh:4242 msgid "备份恢复" msgstr "بازیابی پشتیبان" #: install.sh:4243 install.sh:4244 msgid "全部文件" msgstr "تمام فایل‌ها" #: install.sh:4244 msgid "恢复" msgstr "بازیابی" #: install.sh:4245 msgid "卸载向导" msgstr "راهنمای خارج کردن نصب" #: install.sh:4246 fail2ban_manager.sh:14 fail2ban_manager.sh:415 msgid "卸载" msgstr "حذف کردن" #: install.sh:4247 msgid "清空" msgstr "خالی کردن" #: install.sh:4247 msgid "证书文件" msgstr "فایل گواهینامه" #: install.sh:4248 fail2ban_manager.sh:16 file_manager.sh:208 msgid "退出" msgstr "خروج" #: install.sh:4251 msgid "请输入选项" msgstr "لطفاً گزینه را وارد کنید" #: install.sh:4259 install.sh:4268 install.sh:4334 install.sh:4340 #: install.sh:4385 install.sh:4391 install.sh:4397 install.sh:4426 #: install.sh:4467 install.sh:4474 install.sh:4479 fail2ban_manager.sh:416 msgid "清空屏幕" msgstr "صفحه را خالی کنید" #: install.sh:4265 msgid "不建议" msgstr "توصیه نمی‌شود" #: install.sh:4265 msgid "频繁更新 Nginx, 请确认 Nginx 有更新的必要" msgstr "به‌طور مکرر nginx را به‌روزرسانی کنید، لطفاً مطمئن شوید که nginx نیاز به به‌روزرسانی دارد" #: install.sh:4266 msgid "开始更新" msgstr "آغاز به روزرسانی" #: install.sh:4346 install.sh:4353 install.sh:4360 install.sh:4410 #: install.sh:4415 install.sh:4420 install.sh:4442 msgid "回到菜单" msgstr "برگرد به منو" #: fail2ban_manager.sh:10 msgid "用于防止暴力破解" msgstr "برای جلوگیری از حمله به روش کلمه‌پردازی" #: fail2ban_manager.sh:11 file_manager.sh:203 msgid "主菜单" msgstr "منوی اصل" #: fail2ban_manager.sh:13 msgid "管理" msgstr "مدیریت" #: fail2ban_manager.sh:15 fail2ban_manager.sh:339 msgid "状态" msgstr "وضع" #: fail2ban_manager.sh:18 file_manager.sh:210 msgid "请选择一个选项" msgstr "یک گزینه انتخاب کنید" #: fail2ban_manager.sh:27 fail2ban_manager.sh:250 fail2ban_manager.sh:258 #: fail2ban_manager.sh:363 msgid "无效的选择, 请重试" msgstr "انتخاب نامعتبر، لطفاً دوباره تلاش کنید" #: fail2ban_manager.sh:35 msgid "已经安装, 跳过安装步骤" msgstr "قبلاً نصب شده است، گام نصب را رد کنید" #: fail2ban_manager.sh:68 msgid "systemd 无法读取 SSH 日志" msgstr "systemd نمی‌تواند روزنامه‌های ssh را بخواند" #: fail2ban_manager.sh:69 msgid "跳过启用" msgstr "پرش از فعال‌سازی" #: fail2ban_manager.sh:69 fail2ban_manager.sh:93 fail2ban_manager.sh:103 #: fail2ban_manager.sh:120 fail2ban_manager.sh:125 fail2ban_manager.sh:128 #: fail2ban_manager.sh:146 fail2ban_manager.sh:151 fail2ban_manager.sh:154 msgid "规则" msgstr "قوانین" #: fail2ban_manager.sh:77 fail2ban_manager.sh:203 fail2ban_manager.sh:440 msgid "未安装, 请先安装" msgstr "نصب نشده است، لطفاً ابتدا نصب کنید" #: fail2ban_manager.sh:125 fail2ban_manager.sh:151 fail2ban_manager.sh:349 msgid "已禁用" msgstr "غیرفعال شده است" #: fail2ban_manager.sh:209 msgid "请选择" msgstr "لطفاً انتخاب کنید" #: fail2ban_manager.sh:209 msgid "操作" msgstr "عملیات" #: fail2ban_manager.sh:210 msgid "管理模块" msgstr "مدول مدیریت" #: fail2ban_manager.sh:211 msgid "添加自定义规则" msgstr "قوانین سفارشی اضافه کنید" #: fail2ban_manager.sh:212 fail2ban_manager.sh:228 msgid "服务管理" msgstr "مدیریت خدمات" #: fail2ban_manager.sh:271 msgid "请输入新的" msgstr "لطفاً جدید را وارد کنید" #: fail2ban_manager.sh:271 fail2ban_manager.sh:272 msgid "名称" msgstr "نام" #: fail2ban_manager.sh:273 msgid "请输入日志路径" msgstr "مسیر لاگ را وارد کنید" #: fail2ban_manager.sh:274 msgid "请输入最大重试次数" msgstr "حداکثر تعداد دفعات تلاش مجدد را وارد کنید" #: fail2ban_manager.sh:274 msgid "最大重试次数必须在 1 到 99 之间" msgstr "حداکثر تعداد تلاش‌های مجدد باید بین ۱ تا ۹۹ باشد" #: fail2ban_manager.sh:275 msgid "请输入封禁时间" msgstr "مدت زمان ممنوعیت را وارد کنید" #: fail2ban_manager.sh:275 msgid "秒" msgstr "ثانیه" #: fail2ban_manager.sh:275 msgid "封禁时间必须在 1 到 8640000 秒之间" msgstr "مدت زمان ممنوعیت باید بین ۱ تا ۸۶۴۰۰۰۰ ثانیه باشد" #: fail2ban_manager.sh:285 msgid "自定义规则添加成功" msgstr "قوانین سفارشی با موفقیت اضافه شدند" #: fail2ban_manager.sh:289 msgid "重启以应用新规则" msgstr "برای اعمال قوانین جدید، بازنشانی کنید" #: fail2ban_manager.sh:294 msgid "管理 Fail2ban 模块" msgstr "مدیریت ماژول fail2ban" #: fail2ban_manager.sh:311 msgid "未找到任何模块化配置文件" msgstr "هیچ فایل پیکربندی مدولاری یافت نشد" #: fail2ban_manager.sh:319 fail2ban_manager.sh:339 msgid "模块名称" msgstr "نام مدول" #: fail2ban_manager.sh:339 file_manager.sh:59 msgid "序号" msgstr "شماره ترتیب" #: fail2ban_manager.sh:363 msgid "请选择要管理的模块" msgstr "ماژول مورد نظر برای مدیریت را انتخاب کنید" #: fail2ban_manager.sh:375 msgid "启用" msgstr "فعال کردن" #: fail2ban_manager.sh:375 msgid "禁用" msgstr "غیرفعال کردن" #: fail2ban_manager.sh:378 msgid "是否" msgstr "آیا" #: fail2ban_manager.sh:378 fail2ban_manager.sh:386 msgid "模块" msgstr "ماژول" #: fail2ban_manager.sh:388 msgid "操作已取消" msgstr "عملیات لغو شد" #: fail2ban_manager.sh:424 msgid "停止成功" msgstr "موفقیت توقف" #: fail2ban_manager.sh:444 msgid "总体状态" msgstr "وضع کلی" #: fail2ban_manager.sh:448 msgid "默认启用的 Jail 状态" msgstr "وضع jail به طور پیش فرض فعال شده" #: fail2ban_manager.sh:452 fail2ban_manager.sh:458 msgid "封锁情况" msgstr "وضع مسدود" #: fail2ban_manager.sh:453 fail2ban_manager.sh:459 fail2ban_manager.sh:462 #: fail2ban_manager.sh:466 fail2ban_manager.sh:469 msgid "未启用或配置异常" msgstr "خطا در فعال‌سازی یا تنظیم" #: fail2ban_manager.sh:484 file_manager.sh:232 msgid "新版本可用" msgstr "نسخه جدید در دسترس است" #: fail2ban_manager.sh:484 file_manager.sh:232 msgid "当前版本" msgstr "نسخه فعلی" #: fail2ban_manager.sh:485 file_manager.sh:233 msgid "请访问" msgstr "لطفاً به دیدن" #: fail2ban_manager.sh:485 file_manager.sh:233 msgid "查看更新说明" msgstr "دستورالعمل‌های به‌روزرسانی را مشاهده کنید" #: fail2ban_manager.sh:487 file_manager.sh:235 msgid "是否下载并安装新版本" msgstr "آیا نسخه جدید را دانلود و نصب می‌کنید؟" #: fail2ban_manager.sh:491 file_manager.sh:239 msgid "正在下载新版本" msgstr "در حال دانلود نسخه جدید" #: fail2ban_manager.sh:496 file_manager.sh:244 msgid "下载完成, 请重新运行脚本" msgstr "دانلود کامل شد، لطفاً دوباره اسکریپت را اجرا کنید" #: fail2ban_manager.sh:504 file_manager.sh:252 msgid "跳过更新" msgstr "به‌روزرسانی را بگذارید" #: fail2ban_manager.sh:508 file_manager.sh:256 msgid "当前已经是最新版本" msgstr "در حال حاضر، این آخرین نسخه است" #: file_manager.sh:7 msgid "用法" msgstr "استفاده" #: file_manager.sh:7 msgid "文件扩展名" msgstr "نام امتداد فایل" #: file_manager.sh:7 msgid "目录路径" msgstr "مسیر فهرست" #: file_manager.sh:16 msgid "目录" msgstr "فهرست" #: file_manager.sh:16 msgid "不存在, 请检查路径" msgstr "وجود ندارد، لطفاً مسیر را بررسی کنید" #: file_manager.sh:26 file_manager.sh:204 msgid "列出所有" msgstr "همه را لیست کنید" #: file_manager.sh:26 file_manager.sh:35 file_manager.sh:88 file_manager.sh:111 #: file_manager.sh:160 file_manager.sh:176 file_manager.sh:204 #: file_manager.sh:205 file_manager.sh:206 file_manager.sh:207 msgid "文件" msgstr "فایل" #: file_manager.sh:53 msgid "文件名" msgstr "نام فایل" #: file_manager.sh:79 msgid "请输入网址 (例如 hey.run)" msgstr "لطفاً آدرس وب (مثلاً hey.run) را وارد کنید" #: file_manager.sh:80 msgid "不要包含 http:// 或 https:// 开头" msgstr "نامی که با http:// یا https:// شروع می‌شود را شامل نکنید" #: file_manager.sh:84 msgid "网址不能包含 http:// 或 https:// 前缀" msgstr "آدرس وب نباید پیشوند http:// یا https:// داشته باشد" #: file_manager.sh:88 file_manager.sh:111 msgid "已创建" msgstr "ایجاد شده است" #: file_manager.sh:99 msgid "请输入主机" msgstr "لطفاً میزبان را وارد کنید" #: file_manager.sh:107 msgid "请输入权重" msgstr "لطفاً وزن را وارد کنید" #: file_manager.sh:128 msgid "追加完成" msgstr "اضافه کردن به پایان رسیدن" #: file_manager.sh:132 file_manager.sh:136 msgid "重启完成" msgstr "بازنشانی کامل شد" #: file_manager.sh:151 msgid "请输入要编辑的文件编号" msgstr "لطفاً شماره فایل مورد نظر برای ویرایش را وارد کنید" #: file_manager.sh:156 msgid "未安装, 正在尝试安装" msgstr "نصب نشده، در حال تلاش برای نصب است" #: file_manager.sh:160 msgid "已编辑" msgstr "ویرایش شده" #: file_manager.sh:171 msgid "请输入要删除的文件编号" msgstr "شماره فایل مورد نظر برای حذف را وارد کنید" #: file_manager.sh:194 msgid "不支持的文件扩展名" msgstr "پسوند فایل پشتیبانی نشده است" #: file_manager.sh:205 msgid "创建一个新的" msgstr "یک چیز جدید ایجاد کنید" #: file_manager.sh:206 msgid "编辑一个已存在的" msgstr "ویرایش یک مورد موجود" #: file_manager.sh:207 msgid "删除一个已存在的" msgstr "حذف یک مورد موجود" #: file_manager.sh:265 msgid "重启成功" msgstr "با موفقیت راه‌اندازی شد" #: file_manager.sh:268 msgid "重启失败" msgstr "شکست در راه‌اندازی مجدد" #: file_manager.sh:268 msgid "请检查配置文件是否有误" msgstr "لطفاً بررسی کنید که آیا فایل تنظیمات دچار خطا است یا نه" ================================================ FILE: po/fr.po ================================================ # French translations for xray_install package. # Copyright (C) 2026 yunshu # This file is distributed under the same license as the xray_install package. # Automatically generated, 2026. # msgid "" msgstr "" "Project-Id-Version: xray_install 1.0\n" "Report-Msgid-Bugs-To: https://github.com/hello-yunshu/Xray_bash_onekey/" "issues\n" "POT-Creation-Date: 2026-04-24 09:47+0000\n" "PO-Revision-Date: 2026-04-24 09:47+0000\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: install.sh:32 msgid "信息" msgstr "informations" #: install.sh:34 msgid "错误" msgstr "erreur" #: install.sh:35 msgid "警告" msgstr "avertissement" #: install.sh:38 install.sh:1540 install.sh:3960 install.sh:3977 #: install.sh:3980 install.sh:3981 install.sh:4019 msgid "未安装" msgstr "non installé" #: install.sh:99 msgid "日志文件归档失败" msgstr "échec de l'archivage du fichier journal" #: install.sh:104 msgid "日志文件清空失败" msgstr "échec de l’effacement du fichier journal" #: install.sh:108 msgid "日志文件已轮转并归档为" msgstr "le fichier journal a été tourné et archivé sous " #: install.sh:134 install.sh:138 install.sh:142 install.sh:152 msgid "当前系统为" msgstr "le système actuel est" #: install.sh:152 msgid "不在支持的系统列表内, 安装中断" msgstr "non inclus dans la liste des systèmes pris en charge, l'installation est interrompue" #: install.sh:159 msgid "当前用户是 root 用户, 开始安装" msgstr "l’utilisateur actuel est l’utilisateur root, commencez l’installation" #: install.sh:161 msgid "当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本" msgstr "l’utilisateur actuel n’est pas l’utilisateur root. veuillez passer à l’utilisateur root et exécuter à nouveau le script" #: install.sh:187 msgid "无法获取远程语言文件信息" msgstr "impossible d'obtenir les informations sur le fichier de langue distant" #: install.sh:205 msgid "正在更新语言文件" msgstr "mise à jour du fichier de langue en cours" #: install.sh:208 install.sh:291 msgid "语言文件更新失败" msgstr "échec de la mise à jour du fichier de langue" #: install.sh:213 msgid "语言文件无效" msgstr "fichier de langue invalide" #: install.sh:219 msgid "版本文件更新失败" msgstr "échec de la mise à jour du fichier de version" #: install.sh:226 msgid "语言文件更新完成" msgstr "mise à jour du fichier de langue terminée" #: install.sh:231 install.sh:2725 msgid "正在安装" msgstr "en cours d'installation" #: install.sh:234 msgid "安装失败" msgstr "échec de l'installation" #: install.sh:234 install.sh:258 install.sh:281 install.sh:291 msgid "将使用默认语言" msgstr "utilisera la langue par défaut" #: install.sh:258 file_manager.sh:35 msgid "未找到" msgstr "non trouvé" #: install.sh:281 msgid "不支持的语言" msgstr "langue non prise en charge" #: install.sh:297 msgid "发现语言文件更新" msgstr "découvrir la mise à jour du fichier de langue" #: install.sh:312 install.sh:1740 msgid "完成" msgstr "terminé" #: install.sh:315 msgid "失败" msgstr "échec" #: install.sh:322 msgid "在线版本检测失败, 请稍后再试" msgstr "la vérification de la version en ligne a échoué, veuillez réessayer plus tard" #: install.sh:344 install.sh:352 install.sh:1162 install.sh:3872 #: install.sh:3873 install.sh:3874 install.sh:3875 install.sh:4206 #: install.sh:4207 install.sh:4208 install.sh:4209 fail2ban_manager.sh:12 #: fail2ban_manager.sh:39 msgid "安装" msgstr "installation" #: install.sh:346 install.sh:354 install.sh:1169 install.sh:2729 #: install.sh:3969 msgid "已安装" msgstr "déjà installé" #: install.sh:371 install.sh:375 msgid "自启动配置" msgstr "configuration de démarrage automatique" #: install.sh:384 msgid "链接库安装" msgstr "installation de la bibliothèque liée" #: install.sh:389 msgid "值为空或超出范围, 请重新输入" msgstr "la valeur est vide ou hors de la plage, veuillez saisir à nouveau" #: install.sh:398 msgid "值为空, 请重新输入" msgstr "valeur vide, veuillez saisir à nouveau" #: install.sh:440 msgid "确定端口" msgstr "déterminer le port" #: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:104 msgid "请输入端口" msgstr "veuillez entrer le port" #: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:107 msgid "默认值" msgstr "valeur par défaut" #: install.sh:441 install.sh:444 install.sh:532 install.sh:554 install.sh:3055 #: install.sh:3060 install.sh:3065 install.sh:3066 install.sh:3081 #: install.sh:3086 install.sh:3091 install.sh:3092 msgid "请输入 0-65535 之间的值" msgstr "veuillez saisir une valeur comprise entre 0 et 65535" #: install.sh:443 msgid "端口不允许使用, 请重新输入" msgstr "le port n'est pas autorisé, veuillez entrer à nouveau" #: install.sh:452 msgid "请选择安装协议" msgstr "veuillez sélectionner le contrat d'installation" #: install.sh:453 install.sh:1617 install.sh:1654 install.sh:1705 #: install.sh:2997 install.sh:3142 install.sh:3209 install.sh:3256 #: fail2ban_manager.sh:274 fail2ban_manager.sh:275 msgid "默认" msgstr "par défaut" #: install.sh:457 install.sh:532 install.sh:554 install.sh:635 install.sh:668 #: install.sh:821 install.sh:840 install.sh:881 install.sh:922 install.sh:1621 #: install.sh:1634 install.sh:1656 install.sh:1709 install.sh:1719 #: install.sh:2985 install.sh:3000 install.sh:3055 install.sh:3060 #: install.sh:3065 install.sh:3066 install.sh:3081 install.sh:3086 #: install.sh:3091 install.sh:3092 install.sh:3145 install.sh:3154 #: install.sh:3212 install.sh:3259 install.sh:3268 fail2ban_manager.sh:215 #: fail2ban_manager.sh:234 fail2ban_manager.sh:272 file_manager.sh:81 msgid "请输入" msgstr "veuillez entrer" #: install.sh:457 install.sh:922 install.sh:1621 install.sh:1656 #: install.sh:1709 install.sh:2985 install.sh:3000 install.sh:3145 #: install.sh:3212 install.sh:3259 install.sh:4251 install.sh:4489 msgid "请输入有效的数字" msgstr "veuillez saisir un nombre valide" #: install.sh:478 msgid "是否添加简单 ws/gRPC 协议 用于负载均衡" msgstr "ajouter ou non le protocole simple ws/grpc pour l'équilibrage de charge" #: install.sh:479 install.sh:1259 msgid "如不清楚具体用途, 请勿选择" msgstr "si l'utilisation spécifique n'est pas claire, veuillez ne pas choisir" #: install.sh:499 msgid "已跳过添加简单 ws/gRPC 协议" msgstr "ajout du protocole simple ws/grpc déjà ignoré" #: install.sh:528 install.sh:550 install.sh:631 install.sh:648 install.sh:664 #: install.sh:681 install.sh:696 install.sh:815 install.sh:836 install.sh:877 msgid "是否需要自定义" msgstr "a-t-on besoin d'une personnalisation " #: install.sh:532 install.sh:554 msgid "请勿与其他端口相同" msgstr "veuillez ne pas utiliser le même port que les autres" #: install.sh:571 file_manager.sh:114 msgid "是否需要设置防火墙" msgstr "doit-on configurer un pare-feu " #: install.sh:611 install.sh:615 file_manager.sh:128 file_manager.sh:132 #: file_manager.sh:136 msgid "防火墙" msgstr "pare-feu" #: install.sh:611 install.sh:615 install.sh:2215 install.sh:2218 #: install.sh:3012 install.sh:3014 install.sh:4227 fail2ban_manager.sh:231 #: fail2ban_manager.sh:432 msgid "重启" msgstr "redémarrer" #: install.sh:617 msgid "开放防火墙相关端口" msgstr "ouvrir les ports du pare-feu correspondants" #: install.sh:618 msgid "若修改配置, 请注意关闭防火墙相关端口" msgstr "si vous modifiez la configuration, veuillez veiller à désactiver les ports associés au pare-feu" #: install.sh:619 install.sh:3877 install.sh:3892 install.sh:3893 #: install.sh:4216 install.sh:4236 fail2ban_manager.sh:161 msgid "配置" msgstr "configuration" #: install.sh:622 file_manager.sh:140 msgid "跳过防火墙设置" msgstr "passer la configuration du pare-feu" #: install.sh:631 install.sh:635 install.sh:636 install.sh:640 install.sh:648 #: install.sh:664 install.sh:668 install.sh:669 install.sh:673 install.sh:681 #: install.sh:1101 msgid "伪装路径" msgstr "chemin de camouflage" #: install.sh:635 install.sh:668 msgid "不需要" msgstr "pas besoin" #: install.sh:696 install.sh:706 install.sh:3172 msgid "用户名" msgstr "nom d'utilisateur" #: install.sh:700 msgid "请输入正确的 email" msgstr "veuillez saisir une adresse e-mail correcte" #: install.sh:713 msgid "是否需要自定义字符串映射" msgstr "a-t-on besoin d'une correspondance de chaînes personnalisée " #: install.sh:717 msgid "请输入自定义字符串" msgstr "veuillez saisir une chaîne personnalisée" #: install.sh:717 msgid "最多30字符" msgstr "maximum 30 caractères" #: install.sh:719 msgid "自定义字符串" msgstr "chaîne personnalisée" #: install.sh:726 install.sh:2836 install.sh:3895 install.sh:4211 #: install.sh:4314 msgid "映射字符串" msgstr "chaîne de mappage" #: install.sh:737 msgid "检测到 target 域名已配置, 是否保留" msgstr "cible détectée, domaine déjà configuré, souhaitez-vous le conserver " #: install.sh:757 msgid "请输入一个域名" msgstr "veuillez saisir un nom de domaine" #: install.sh:758 msgid "域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用" msgstr "le nom de domaine doit prendre en charge tlsv1.3, x25519 et h2, et ne pas être utilisé pour les redirections" #: install.sh:759 msgid "确认域名符合要求后请输入" msgstr "après avoir confirmé que le nom de domaine est conforme aux exigences, veuillez entrer" #: install.sh:760 msgid "正在检测域名请等待" msgstr "vérification du nom de domaine en cours, veuillez patienter" #: install.sh:767 install.sh:772 install.sh:777 msgid "该域名不支持" msgstr "ce nom de domaine n'est pas pris en charge" #: install.sh:782 msgid "该域名发生了跳转" msgstr "ce nom de domaine a subi une redirection" #: install.sh:789 msgid "该域名可能不满足所有要求" msgstr "ce nom de domaine pourrait ne pas répondre à toutes les exigences" #: install.sh:790 msgid "是否仍要设置此域名" msgstr "voulez-vous toujours configurer ce nom de domaine " #: install.sh:802 install.sh:807 install.sh:1619 msgid "域名" msgstr "nom de domaine" #: install.sh:802 msgid "满足所有要求" msgstr "satisfaire toutes les exigences" #: install.sh:815 msgid "域名的" msgstr "du nom de domaine" #: install.sh:816 msgid "默认为" msgstr "par défaut pour" #: install.sh:816 msgid "域名本身" msgstr "le nom de domaine lui-même" #: install.sh:817 install.sh:912 install.sh:952 msgid "如不清楚具体用途, 请勿继续" msgstr "si l'utilisation spécifique n'est pas claire, veuillez ne pas continuer" #: install.sh:898 msgid "本地文件 file_manager.sh 不存在, 正在下载" msgstr "le fichier local file_manager.sh n'existe pas, téléchargement en cours" #: install.sh:900 install.sh:2330 fail2ban_manager.sh:500 file_manager.sh:248 msgid "下载失败, 请手动下载并安装新版本" msgstr "échec du téléchargement, veuillez télécharger manuellement et installer la nouvelle version" #: install.sh:911 install.sh:951 msgid "是否变更" msgstr "est-ce que cela change" #: install.sh:911 msgid "负载均衡" msgstr "équilibrage de charge" #: install.sh:917 msgid "请选择协议为 ws 或 gRPC" msgstr "veuillez sélectionner le protocole ws ou grpc" #: install.sh:920 fail2ban_manager.sh:213 fail2ban_manager.sh:232 #: fail2ban_manager.sh:325 fail2ban_manager.sh:357 msgid "返回" msgstr "retour" #: install.sh:930 file_manager.sh:220 msgid "无效选项, 请重试" msgstr "option invalide, veuillez réessayer" #: install.sh:940 install.sh:964 install.sh:2266 install.sh:2304 #: install.sh:2320 msgid "当前模式不支持此操作" msgstr "le mode actuel ne prend pas en charge cette opération" #: install.sh:953 msgid "配置用途可以参考文章" msgstr "pour la configuration d'utilisation, vous pouvez consulter l'article" #: install.sh:980 install.sh:991 install.sh:995 install.sh:999 install.sh:1011 #: install.sh:1016 install.sh:1020 install.sh:1025 install.sh:1045 #: install.sh:1051 install.sh:1101 install.sh:1120 install.sh:3893 #: install.sh:4177 msgid "修改" msgstr "modifier" #: install.sh:1053 install.sh:2816 install.sh:2818 install.sh:2820 #: install.sh:2821 install.sh:2824 install.sh:2828 install.sh:2830 #: install.sh:2832 install.sh:2833 install.sh:2861 install.sh:2864 #: install.sh:2867 install.sh:2869 install.sh:3049 msgid "端口" msgstr "port" #: install.sh:1103 msgid "不支持" msgstr "ne prend pas en charge" #: install.sh:1110 msgid "用户名修改" msgstr "modification du nom d'utilisateur" #: install.sh:1113 install.sh:1123 msgid "请先删除多余的用户" msgstr "veuillez d'abord supprimer les utilisateurs en trop" #: install.sh:1131 install.sh:1139 install.sh:1146 install.sh:1990 #: install.sh:2061 install.sh:2146 install.sh:2154 install.sh:2163 #: install.sh:2186 msgid "配置修改" msgstr "modification de la configuration" #: install.sh:1151 msgid "检测到 Xray 的权限控制, 启动修改程序" msgstr "contrôle d'autorisation xray détecté, lancement du programme de modification" #: install.sh:1156 msgid "修改完成" msgstr "modification terminée" #: install.sh:1176 msgid "若更新无效, 建议直接卸载再安装" msgstr "si la mise à jour n'est pas effective, il est recommandé de désinstaller puis réinstaller directement" #: install.sh:1177 msgid "部分新功能需要重新安装才可生效" msgstr "certaines nouvelles fonctionnalités nécessitent une réinstallation pour entrer en vigueur" #: install.sh:1182 msgid "检测到存在最新版" msgstr "dernière version détectée" #: install.sh:1183 msgid "脚本可能未兼容此版本" msgstr "le script pourrait ne pas être compatible avec cette version" #: install.sh:1184 msgid "是否更新" msgstr "mettre à jour ou non" #: install.sh:1188 install.sh:1213 install.sh:1532 install.sh:3886 #: install.sh:3898 install.sh:4195 install.sh:4196 install.sh:4197 #: install.sh:4233 msgid "更新" msgstr "mise à jour" #: install.sh:1192 install.sh:1494 msgid "启动失败" msgstr "départ échoué" #: install.sh:1193 install.sh:1497 msgid "是否回滚到之前的版本" msgstr "revenir à la version précédente " #: install.sh:1197 install.sh:1507 msgid "未执行回滚操作" msgstr "opération de rollback non effectuée" #: install.sh:1201 install.sh:1511 msgid "正在回滚" msgstr "en train de revenir en arrière" #: install.sh:1205 install.sh:1518 msgid "已成功回滚到之前的" msgstr "rétrogradé avec succès à l'ancien" #: install.sh:1205 install.sh:1518 install.sh:4214 install.sh:4329 msgid "版本" msgstr "version" #: install.sh:1207 install.sh:1228 install.sh:1524 msgid "回滚失败" msgstr "échec du retour en arrière" #: install.sh:1234 install.sh:1238 msgid "重装" msgstr "réinstallation" #: install.sh:1248 install.sh:1249 msgid "更新失败" msgstr "mise à jour échouée" #: install.sh:1257 msgid "是否添加 Reality 负载均衡" msgstr "ajouter ou non la charge de réalité" #: install.sh:1258 msgid "使用此功能前,建议先阅读作者教程" msgstr "avant d'utiliser cette fonction, il est recommandé de lire le tutoriel de l'auteur" #: install.sh:1264 fail2ban_manager.sh:93 fail2ban_manager.sh:103 #: fail2ban_manager.sh:128 fail2ban_manager.sh:154 fail2ban_manager.sh:347 msgid "已启用" msgstr "déjà activé" #: install.sh:1268 msgid "已跳过" msgstr "déjà sauté" #: install.sh:1277 msgid "Reality 协议有流量偷跑的风险" msgstr "le protocole reality présente un risque de fuite de trafic" #: install.sh:1279 install.sh:1306 msgid "是否额外安装 nginx 前置保护" msgstr "installer ou non une protection frontale nginx supplémentaire" #: install.sh:1279 msgid "推荐" msgstr "recommandé" #: install.sh:1286 install.sh:1321 msgid "检测到已安装" msgstr "détecté comme déjà installé" #: install.sh:1289 install.sh:1324 msgid "已跳过安装" msgstr "installation ignorée" #: install.sh:1303 msgid "检测到已开启 Reality 负载均衡" msgstr "réalité de charge équilibrée détectée active" #: install.sh:1304 msgid "如用作 Reality 负载均衡主服务器必须安装" msgstr "si utilisé comme serveur principal de chargement équilibré reality, il doit être installé" #: install.sh:1305 msgid "如用作 Reality 负载均衡二级服务器则无需安装" msgstr "s'il est utilisé comme serveur secondaire de chargement du répartiteur de charge reality, aucune installation n'est nécessaire" #: install.sh:1349 msgid "已存在, 跳过编译安装过程" msgstr "déjà existant, sauter le processus de compilation et d'installation" #: install.sh:1351 msgid "检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装" msgstr "un nginx installé par un autre paquet a été détecté. la poursuite de l'installation entraînera des conflits. veuillez résoudre ce problème avant d'installer" #: install.sh:1364 msgid "即将下载已编译的" msgstr "téléchargement imminent du compilé" #: install.sh:1374 msgid "不支持的系统架构" msgstr "architecture système non prise en charge" #: install.sh:1383 msgid "下载失败" msgstr "échec du téléchargement" #: install.sh:1387 msgid "下载成功" msgstr "téléchargement réussi" #: install.sh:1390 msgid "解压失败" msgstr "échec du décompression" #: install.sh:1438 install.sh:1439 install.sh:1446 install.sh:1447 msgid "配置不完整, 退出更新" msgstr "configuration incomplète, quittez la mise à jour" #: install.sh:1451 install.sh:1452 msgid "当前安装模式不需要" msgstr "le mode d'installation actuel n'est pas nécessaire" #: install.sh:1456 install.sh:1457 msgid "配置不存在, 退出更新" msgstr "la configuration n’existe pas, quittez la mise à jour" #: install.sh:1463 msgid "备份旧版" msgstr "sauvegarder l'ancienne version" #: install.sh:1464 msgid "删除旧版" msgstr "supprimer l'ancienne version" #: install.sh:1468 msgid "是否保留原 Nginx 配置文件" msgstr "conserver le fichier de configuration nginx original " #: install.sh:1476 install.sh:1809 msgid "原配置文件已删除" msgstr "le fichier de configuration d'origine a été supprimé" #: install.sh:1480 msgid "原配置文件已保留" msgstr "le fichier de configuration d'origine a été conservé" #: install.sh:1534 install.sh:4220 msgid "删除" msgstr "supprimer" #: install.sh:1534 install.sh:4243 msgid "备份" msgstr "sauvegarde" #: install.sh:1537 msgid "已为最新版" msgstr "déjà à la dernière version" #: install.sh:1553 msgid "设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)" msgstr "configurer un programme de mise à jour automatique en arrière-plan (incluant : script/xray/nginx)" #: install.sh:1554 msgid "可能自动更新后有兼容问题, 谨慎启用" msgstr "il peut y avoir des problèmes de compatibilité après une mise à jour automatique ; activez avec prudence" #: install.sh:1555 fail2ban_manager.sh:120 fail2ban_manager.sh:146 msgid "是否启用" msgstr "activer ou non" #: install.sh:1561 install.sh:3878 msgid "设置自动更新" msgstr "configurer la mise à jour automatique" #: install.sh:1566 msgid "已设置自动更新" msgstr "mise à jour automatique configurée" #: install.sh:1567 msgid "是否关闭" msgstr "fermer ou non" #: install.sh:1573 msgid "删除自动更新" msgstr "supprimer la mise à jour automatique" #: install.sh:1582 msgid "安装 SSL 证书生成脚本依赖" msgstr "installer les dépendances du script de génération de certificat ssl" #: install.sh:1584 msgid "安装 SSL 证书生成脚本" msgstr "installer le script de génération de certificat ssl" #: install.sh:1590 msgid "检测到原域名配置存在, 是否跳过域名设置" msgstr "la configuration du domaine d'origine a été détectée. voulez-vous ignorer la configuration du domaine " #: install.sh:1605 install.sh:1642 install.sh:1693 install.sh:1726 msgid "无法获取公网IP地址" msgstr "impossible d'obtenir une adresse ip publique" #: install.sh:1605 install.sh:1642 install.sh:1665 install.sh:1693 #: install.sh:1726 msgid "安装终止" msgstr "installation terminée" #: install.sh:1608 msgid "已跳过域名设置" msgstr "configuration du domaine ignorée" #: install.sh:1614 msgid "确定域名信息" msgstr "déterminer les informations du domaine" #: install.sh:1615 msgid "请输入你的域名信息" msgstr "veuillez saisir les informations de votre domaine" #: install.sh:1616 msgid "请选择公网IP(IPv4/IPv6)或手动输入域名" msgstr "veuillez sélectionner une adresse ip publique (ipv4/ipv6) ou saisir manuellement un nom de domaine" #: install.sh:1622 install.sh:1711 msgid "正在获取公网IP信息, 请耐心等待" msgstr "obtention des informations sur l'adresse ip publique, veuillez patienter" #: install.sh:1632 msgid "此选项用于服务器商仅提供域名访问服务器" msgstr "cette option est utilisée lorsque le fournisseur de serveur ne fournit que l'accès au serveur via un nom de domaine" #: install.sh:1633 msgid "注意服务器商域名添加 CNAME 记录" msgstr "veuillez noter que le fournisseur de serveur doit ajouter un enregistrement cname au nom de domaine" #: install.sh:1645 msgid "域名DNS解析IP" msgstr "résolution dns de nom de domaine vers ip" #: install.sh:1646 install.sh:1729 msgid "公网IP/域名" msgstr "adresse ip publique/domaine" #: install.sh:1648 msgid "域名DNS解析IP与公网IP匹配" msgstr "le dns du nom de domaine résout l'ip correspondant à l'adresse ip publique" #: install.sh:1650 msgid "请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray" msgstr "veuillez vous assurer que les enregistrements a/aaaa corrects ont été ajoutés au domaine, sinon xray ne pourra pas fonctionner normalement" #: install.sh:1651 msgid "域名DNS解析IP与公网IP不匹配, 请选择" msgstr "l'adresse ip obtenue par la résolution dns du nom de domaine ne correspond pas à l'adresse ip publique, veuillez sélectionner" #: install.sh:1652 install.sh:1659 msgid "继续安装" msgstr "continuer l'installation" #: install.sh:1653 msgid "重新输入" msgstr "saisir à nouveau" #: install.sh:1654 msgid "终止安装" msgstr "arrêter l'installation" #: install.sh:1676 msgid "检测到原IP配置存在, 是否跳过IP设置" msgstr "configuration ip originale détectée, souhaitez-vous ignorer la configuration ip " #: install.sh:1697 msgid "已跳过IP设置" msgstr "paramètres ip ignorés" #: install.sh:1703 msgid "确定公网IP信息" msgstr "déterminer les informations sur l'adresse ip publique" #: install.sh:1704 msgid "请选择公网IP为IPv4或IPv6" msgstr "veuillez sélectionner une adresse ip publique en ipv4 ou ipv6" #: install.sh:1707 msgid "手动输入" msgstr "saisie manuelle" #: install.sh:1734 msgid "端口未被占用" msgstr "le port n'est pas occupé" #: install.sh:1736 msgid "检测到" msgstr "détecté" #: install.sh:1736 msgid "端口被占用" msgstr "le port est occupé" #: install.sh:1736 msgid "以下为" msgstr "voici" #: install.sh:1736 msgid "端口占用信息" msgstr "informations sur l'utilisation du port" #: install.sh:1738 msgid "尝试终止占用的进程" msgstr "essayez de terminer le processus occupé" #: install.sh:1749 msgid "证书测试签发成功, 开始正式签发" msgstr "test de certificat émis avec succès, début de la délivrance officielle" #: install.sh:1752 msgid "证书测试签发失败" msgstr "échec de la signature du certificat de test" #: install.sh:1759 msgid "证书生成成功" msgstr "génération de certificat réussie" #: install.sh:1765 msgid "证书配置成功" msgstr "configuration du certificat réussie" #: install.sh:1769 msgid "证书生成失败" msgstr "échec de la génération du certificat" #: install.sh:1801 msgid "检测到 Xray 配置过多用户" msgstr "détection d'un nombre excessif d'utilisateurs configurés pour xray" #: install.sh:1802 msgid "是否保留原 Xray 配置文件" msgstr "conserver le fichier de configuration xray original " #: install.sh:1822 msgid "添加简单 ws/gRPC 协议" msgstr "ajouter le protocole simple ws/grpc" #: install.sh:1837 msgid "检测到配置文件, 是否读取配置文件" msgstr "fichier de configuration détecté, souhaitez-vous lire le fichier de configuration " #: install.sh:1842 install.sh:1863 install.sh:1961 install.sh:3430 msgid "已删除配置文件" msgstr "profil supprimé" #: install.sh:1845 install.sh:1858 install.sh:1956 install.sh:3426 msgid "已保留配置文件" msgstr "profil déjà réservé" #: install.sh:1852 msgid "检测到当前安装模式与配置文件的安装模式不一致" msgstr "le mode d'installation actuel est détecté comme étant incompatible avec le mode d'installation du profil" #: install.sh:1853 msgid "是否保留配置文件 (强烈不建议)" msgstr "conserver le fichier de configuration (fortement déconseillé)" #: install.sh:1857 msgid "请务必确保配置文件正确" msgstr "veuillez vous assurer que le fichier de configuration est correct" #: install.sh:1951 msgid "检测到配置文件不完整, 是否保留配置文件" msgstr "fichier de configuration détecté incomplet, souhaitez-vous conserver le fichier de configuration " #: install.sh:2170 msgid "配置删除" msgstr "configuration supprimée" #: install.sh:2191 msgid "设置 Nginx 开机自启" msgstr "configurer le démarrage automatique de nginx" #: install.sh:2194 install.sh:4234 install.sh:4237 install.sh:4238 #: install.sh:4239 fail2ban_manager.sh:10 msgid "设置" msgstr "configurer" #: install.sh:2194 install.sh:2202 msgid "开机自启" msgstr "démarrage automatique" #: install.sh:2199 msgid "关闭 Nginx 开机自启" msgstr "désactiver le démarrage automatique de nginx" #: install.sh:2202 msgid "关闭" msgstr "fermer" #: install.sh:2209 install.sh:2231 install.sh:2234 install.sh:2294 #: install.sh:4229 fail2ban_manager.sh:230 msgid "停止" msgstr "arrêter" #: install.sh:2223 install.sh:2226 install.sh:2761 install.sh:4228 #: fail2ban_manager.sh:229 fail2ban_manager.sh:398 msgid "启动" msgstr "démarrer" #: install.sh:2247 install.sh:2263 msgid "新版本已自动设置证书自动更新" msgstr "la nouvelle version a automatiquement configuré la mise à jour automatique des certificats" #: install.sh:2248 msgid "老版本请及时删除 废弃的 改版证书自动更新" msgstr "veuillez supprimer rapidement les anciennes versions. les certificats obsolètes seront automatiquement mis à jour" #: install.sh:2249 msgid "已设置改版证书自动更新" msgstr "la mise à jour automatique du certificat de révision est déjà configurée" #: install.sh:2250 msgid "是否需要删除改版证书自动更新 (请删除)" msgstr "doit-on supprimer la mise à jour automatique du certificat de révision (veuillez supprimer) " #: install.sh:2257 msgid "删除改版证书自动更新" msgstr "supprimer la mise à jour automatique du certificat révisé" #: install.sh:2281 msgid "已过期" msgstr "dépassé" #: install.sh:2283 msgid "证书生成日期" msgstr "date de génération du certificat" #: install.sh:2284 msgid "证书生成天数" msgstr "nombre de jours pour la génération du certificat" #: install.sh:2285 msgid "证书剩余天数" msgstr "nombre de jours restants du certificat" #: install.sh:2289 msgid "是否立即更新证书" msgstr "mettre à jour immédiatement le certificat " #: install.sh:2301 install.sh:2313 msgid "证书签发工具不存在, 请确认是否证书为脚本签发" msgstr "l'outil de génération des certificats n'existe pas, veuillez vérifier si le certificat a été généré par un script" #: install.sh:2317 msgid "证书更新" msgstr "mise à jour du certificat" #: install.sh:2327 msgid "本地文件 fail2ban_manager.sh 不存在, 正在下载" msgstr "le fichier local fail2ban_manager.sh n'existe pas, téléchargement en cours" #: install.sh:2342 msgid "是否需要设置自动清理日志" msgstr "doit-on configurer la suppression automatique des journaux " #: install.sh:2346 msgid "已跳过设置自动清理日志" msgstr "la configuration de l’effacement automatique des journaux a été ignorée" #: install.sh:2349 msgid "将在 每周三 04:00 自动清空日志" msgstr "les journaux seront automatiquement vidés tous les mercredis à 04h00" #: install.sh:2354 msgid "已设置自动清理日志任务" msgstr "la tâche de nettoyage automatique des journaux a été configurée" #: install.sh:2355 msgid "是否需要删除现有自动清理日志任务" msgstr "doit-on supprimer la tâche existante de nettoyage automatique des journaux " #: install.sh:2360 msgid "删除自动清理日志任务" msgstr "supprimer la tâche de nettoyage automatique des journaux" #: install.sh:2363 msgid "保留现有自动清理日志任务" msgstr "conserver la tâche existante de nettoyage automatique des journaux" #: install.sh:2378 msgid "设置自动清理日志" msgstr "configurer la suppression automatique des journaux" #: install.sh:2385 msgid "检测到日志文件大小如下:" msgstr "taille du fichier journal détectée comme suit " #: install.sh:2387 msgid "即将清除" msgstr "bientôt effacé" #: install.sh:2389 msgid "日志清理" msgstr "nettoyage des journaux" #: install.sh:2663 msgid "链接分享" msgstr "partage de lien" #: install.sh:2665 install.sh:2671 install.sh:2676 install.sh:2681 #: install.sh:2685 install.sh:3183 msgid "分享链接" msgstr "partager le lien" #: install.sh:2666 install.sh:2672 install.sh:2677 install.sh:2682 #: install.sh:2686 msgid "二维码" msgstr "code qr" #: install.sh:2692 install.sh:2693 msgid "配置分享" msgstr "partage de configuration" #: install.sh:2707 msgid "生成分享链接" msgstr "générer un lien de partage" #: install.sh:2735 install.sh:2746 install.sh:3038 install.sh:3108 #: install.sh:3132 install.sh:3198 install.sh:3246 install.sh:3300 #: install.sh:3352 msgid "请先安装" msgstr "veuillez installer d'abord" #: install.sh:2753 msgid "无法获取网卡, 将监控所有网卡" msgstr "impossible d’obtenir la carte réseau ; toutes les cartes réseaux seront surveillées" #: install.sh:2755 msgid "监控网卡" msgstr "surveiller la carte réseau" #: install.sh:2758 msgid "监控端口" msgstr "port de surveillance" #: install.sh:2760 msgid "按 q 键退出 iftop" msgstr "appuyez sur la touche q pour quitter iftop" #: install.sh:2776 install.sh:2779 install.sh:2782 install.sh:2785 #: install.sh:2788 install.sh:2791 install.sh:2794 install.sh:2797 #: install.sh:2800 install.sh:2803 install.sh:2806 msgid "安装成功" msgstr "installation réussie" #: install.sh:2810 msgid "目前分享链接规范为实验阶段, 请自行判断是否适用" msgstr "la norme de partage des liens est actuellement en phase expérimentale ; veuillez déterminer vous-même si elle s'applique" #: install.sh:2812 install.sh:4224 msgid "配置信息" msgstr "informations de configuration" #: install.sh:2813 msgid "主机" msgstr "hôte" #: install.sh:2837 msgid "用户id" msgstr "identifiant d'utilisateur" #: install.sh:2839 msgid "加密" msgstr "chiffrement" #: install.sh:2840 msgid "传输协议" msgstr "protocole de transmission" #: install.sh:2841 msgid "底层传输安全" msgstr "sécurité de la couche de transport" #: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868 msgid "路径" msgstr "chemin" #: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868 msgid "不要落下" msgstr "ne pas laisser tomber" #: install.sh:2846 install.sh:2849 install.sh:2865 install.sh:2870 msgid "不需要加" msgstr "pas besoin d'ajouter" #: install.sh:2852 msgid "流控" msgstr "contrôle de flux" #: install.sh:2885 msgid "即将申请证书, 支持使用自定义证书" msgstr "vais demander un certificat, supporte l'utilisation de certificats personnalisés" #: install.sh:2886 msgid "如需使用自定义证书, 请按如下步骤:" msgstr "si vous souhaitez utiliser un certificat personnalisé, veuillez suivre les étapes ci-dessous " #: install.sh:2887 msgid "1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)" msgstr "1. renommer le fichier de certificat : clé privée (xray.key), certificat (xray.crt)" #: install.sh:2888 msgid "2. 将重命名后的证书文件放入" msgstr "2. placez le fichier de certificat renommé dans" #: install.sh:2888 msgid "目录后再运行脚本" msgstr "exécuter le script après la table des matières" #: install.sh:2889 msgid "3. 重新运行脚本" msgstr "3. exécuter à nouveau le script" #: install.sh:2890 install.sh:3334 msgid "是否继续" msgstr "continuer ou non" #: install.sh:2898 msgid "所有证书文件均已存在, 是否保留" msgstr "tous les fichiers de certificat existent déjà, souhaitez-vous les conserver " #: install.sh:2904 install.sh:2919 install.sh:2935 file_manager.sh:176 msgid "已删除" msgstr "supprimé" #: install.sh:2910 install.sh:2925 install.sh:2942 msgid "证书应用" msgstr "application de certificat" #: install.sh:2914 msgid "证书文件已存在, 是否保留" msgstr "le fichier de certificat existe déjà, souhaitez-vous le conserver " #: install.sh:2930 msgid "证书签发残留文件已存在, 是否保留" msgstr "le fichier résiduel de la signature du certificat existe déjà, souhaitez-vous le conserver " #: install.sh:2972 install.sh:4219 msgid "添加" msgstr "ajouter" #: install.sh:2980 msgid "请选择支持的 TLS 版本" msgstr "veuillez sélectionner la version tls prise en charge" #: install.sh:2981 msgid "建议选择 TLSv1.3 only (安全模式)" msgstr "il est recommandé de sélectionner tlsv1.3 uniquement (mode sécurisé)" #: install.sh:2982 install.sh:2998 msgid "兼容模式" msgstr "mode de compatibilité" #: install.sh:2983 msgid "安全模式" msgstr "mode sécurisé" #: install.sh:2987 msgid "由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)" msgstr "étant donné que h3 ne prend en charge que tlsv1.3, seul tlsv1.3 est pris en charge (mode sécurisé)" #: install.sh:2991 install.sh:3003 install.sh:3006 msgid "已切换至" msgstr "déjà basculé vers" #: install.sh:2995 msgid "请选择 TLS 版本" msgstr "veuillez sélectionner la version tls" #: install.sh:2996 msgid "建议选择 TLSv1.3 (安全模式)" msgstr "il est recommandé de choisir tlsv1.3 (mode sécurisé)" #: install.sh:3009 msgid "当前模式不支持" msgstr "le mode actuel n’est pas pris en charge" #: install.sh:3016 msgid "Nginx配置文件不存在 或 当前模式不支持" msgstr "le fichier de configuration nginx n’existe pas ou le mode actuel n’est pas pris en charge" #: install.sh:3130 msgid "此模式不支持修改" msgstr "ce mode ne supporte pas la modification" #: install.sh:3139 msgid "即将显示用户, 一次仅能显示一个" msgstr "affichage des utilisateurs à venir, un seul utilisateur peut être affiché à la fois" #: install.sh:3141 msgid "请选择显示用户使用的协议" msgstr "veuillez sélectionner le protocole utilisé par l'utilisateur à afficher" #: install.sh:3151 msgid "请选择要显示的用户编号" msgstr "veuillez sélectionner le numéro d'utilisateur à afficher" #: install.sh:3156 install.sh:3166 install.sh:3270 install.sh:3292 msgid "选择错误" msgstr "erreur de sélection" #: install.sh:3159 msgid "请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户" msgstr "veuillez sélectionner directement [afficher les informations de configuration xray] dans le menu principal pour afficher l'utilisateur principal" #: install.sh:3169 install.sh:3295 msgid "请先检测 Xray 是否正确安装" msgstr "veuillez d'abord vérifier que xray est correctement installé" #: install.sh:3187 msgid "是否继续显示用户" msgstr "continuer à afficher l'utilisateur" #: install.sh:3196 install.sh:3298 msgid "此模式不支持删除用户" msgstr "ce mode ne prend pas en charge la suppression d'utilisateurs" #: install.sh:3206 msgid "即将添加用户, 一次仅能添加一个" msgstr "ajout d'utilisateur en cours, un seul utilisateur peut être ajouté à la fois" #: install.sh:3208 msgid "请选择添加用户使用的协议" msgstr "veuillez sélectionner le protocole utilisé pour ajouter l'utilisateur" #: install.sh:3230 msgid "添加用户" msgstr "ajouter un utilisateur" #: install.sh:3235 msgid "是否继续添加用户" msgstr "voulez-vous continuer à ajouter des utilisateurs " #: install.sh:3244 msgid "此模式不支持添加用户" msgstr "ce mode ne prend pas en charge l'ajout d'utilisateurs" #: install.sh:3253 msgid "即将删除用户, 一次仅能删除一个" msgstr "l'utilisateur sera supprimé, une seule suppression à la fois" #: install.sh:3255 msgid "请选择删除用户使用的协议" msgstr "veuillez sélectionner le protocole utilisé par l'utilisateur à supprimer" #: install.sh:3265 msgid "请选择要删除的用户编号" msgstr "veuillez sélectionner le numéro d'utilisateur à supprimer" #: install.sh:3274 msgid "主用户无法删除" msgstr "l'utilisateur principal ne peut pas être supprimé" #: install.sh:3280 msgid "删除用户" msgstr "supprimer l'utilisateur" #: install.sh:3283 msgid "是否继续删除用户" msgstr "voulez-vous continuer à supprimer l'utilisateur " #: install.sh:3305 install.sh:3309 msgid "文件不存在" msgstr "le fichier n'existe pas" #: install.sh:3316 msgid "已配置 Xray 流量统计" msgstr "statistiques de trafic xray déjà configurées" #: install.sh:3317 msgid "是否需要关闭此功能" msgstr "doit-on désactiver cette fonctionnalité " #: install.sh:3323 msgid "关闭 Xray 流量统计" msgstr "fermer la statistique du trafic xray" #: install.sh:3332 msgid "流量统计需要使用" msgstr "la statistique du trafic doit être utilisée" #: install.sh:3333 msgid "可能会影响 Xray 性能" msgstr "cela pourrait affecter les performances de l'analyseur xray" #: install.sh:3344 msgid "设置 Xray 流量统计" msgstr "configurer la statistique du trafic xray" #: install.sh:3374 install.sh:3394 msgid "已卸载" msgstr "déjà désinstallé" #: install.sh:3378 msgid "是否卸载" msgstr "est-ce que je désinstalle " #: install.sh:3382 msgid "已取消卸载" msgstr "désinstallation annulée" #: install.sh:3405 msgid "是否删除所有脚本文件" msgstr "supprimer tous les fichiers de script " #: install.sh:3412 msgid "已删除所有文件" msgstr "tous les fichiers ont été supprimés" #: install.sh:3413 msgid "ヾ( ̄▽ ̄) 拜拜~" msgstr "( ̄▽ ̄) ヾ salut~" #: install.sh:3418 msgid "已保留脚本文件 (包含 SSL 证书等)" msgstr "fichier de script déjà conservé (contenant certificat ssl, etc.)" #: install.sh:3422 msgid "是否保留配置文件" msgstr "conserver le fichier de configuration " #: install.sh:3439 msgid "已清空证书遗留文件" msgstr "les fichiers résiduels du certificat ont été effacés" #: install.sh:3469 msgid "秒后" msgstr "seconde(s) après" #: install.sh:3669 msgid "检测最新版本失败" msgstr "échec de la vérification de la dernière version" #: install.sh:3677 install.sh:3917 msgid "新版本" msgstr "nouvelle version" #: install.sh:3677 install.sh:3917 msgid "更新内容" msgstr "contenu de la mise à jour" #: install.sh:3681 msgid "存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新" msgstr "une nouvelle version est disponible, mais les changements sont importants, il pourrait y avoir des incompatibilités. voulez-vous mettre à jour " #: install.sh:3684 msgid "存在新版本, 是否更新" msgstr "une nouvelle version est disponible, souhaitez-vous la mettre à jour " #: install.sh:3688 msgid "检测 脚本 最新版本失败" msgstr "échec de la vérification de la dernière version du script" #: install.sh:3689 msgid "脚本 版本差别过大, 跳过更新" msgstr "la différence de version du script est trop grande, mise à jour ignorée" #: install.sh:3697 install.sh:3698 msgid "脚本更新失败" msgstr "mise à jour du script échouée" #: install.sh:3704 msgid "更新完成" msgstr "mise à jour terminée" #: install.sh:3705 install.sh:3929 msgid "脚本版本变化较大, 若服务无法正常运行请卸载后重装" msgstr "la version du script a beaucoup changé. si le service ne fonctionne pas correctement, veuillez le désinstaller puis le réinstaller" #: install.sh:3714 msgid "当前版本为最新版本" msgstr "la version actuelle est la dernière version" #: install.sh:3727 install.sh:3912 install.sh:3927 install.sh:3940 msgid "下载最新脚本" msgstr "télécharger le script le plus récent" #: install.sh:3741 msgid "该选项暂时无法使用" msgstr "cette option n'est pas disponible pour le moment" #: install.sh:3760 install.sh:4286 msgid "此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装" msgstr "ce mode est recommandé pour l'équilibrage de charge, il n'est généralement pas recommandé d'utiliser, souhaitez-vous installer " #: install.sh:3773 install.sh:4300 msgid "此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装" msgstr "ce mode est uniquement utilisé pour le transit du trafic et n’est pas recommandé pour d’autres utilisations. voulez-vous l’installer " #: install.sh:3876 install.sh:3877 install.sh:3887 install.sh:3891 #: install.sh:3895 install.sh:4211 install.sh:4212 install.sh:4213 #: install.sh:4214 install.sh:4215 install.sh:4216 install.sh:4314 #: install.sh:4319 install.sh:4324 install.sh:4329 msgid "变更" msgstr "changement" #: install.sh:3876 install.sh:4215 msgid "负载均衡配置" msgstr "configuration d'équilibrage de charge" #: install.sh:3879 msgid "清除日志文件" msgstr "effacer les fichiers journaux" #: install.sh:3880 msgid "查看证书状态" msgstr "vérifier l'état du certificat" #: install.sh:3881 msgid "更新证书有效期" msgstr "mettre à jour la validité du certificat" #: install.sh:3882 msgid "设置证书自动更新" msgstr "configurer la mise à jour automatique des certificats" #: install.sh:3883 msgid "设置 Fail2ban 防暴力破解" msgstr "configurer fail2ban pour prévenir les attaques par force brute" #: install.sh:3884 msgid "显示帮助" msgstr "afficher l'aide" #: install.sh:3885 msgid "修改语言" msgstr "modifier la langue" #: install.sh:3888 install.sh:4218 install.sh:4222 install.sh:4223 #: install.sh:4224 install.sh:4225 install.sh:4230 install.sh:4232 #: fail2ban_manager.sh:15 msgid "查看" msgstr "voir" #: install.sh:3888 install.sh:4225 msgid "实时流量" msgstr "trafic en temps réel" #: install.sh:3889 msgid "脚本卸载" msgstr "désinstallation de script" #: install.sh:3890 msgid "显示安装信息" msgstr "afficher les informations d'installation" #: install.sh:3892 install.sh:4237 msgid "加速" msgstr "accélérer" #: install.sh:3894 msgid "更新脚本" msgstr "mettre à jour le script" #: install.sh:3896 install.sh:3897 msgid "显示" msgstr "afficher" #: install.sh:3896 msgid "访问信息" msgstr "informations de visite" #: install.sh:3897 msgid "错误信息" msgstr "message d'erreur" #: install.sh:3921 msgid "脚本版本变化较大, 可能存在不兼容情况, 是否继续使用" msgstr "la version du script a beaucoup changé, il pourrait y avoir des incompatibilités. voulez-vous continuer à l'utiliser " #: install.sh:3948 msgid "检测失败" msgstr "échec de la détection" #: install.sh:3952 install.sh:3962 install.sh:3971 msgid "有新版" msgstr "il y a une nouvelle version" #: install.sh:3955 install.sh:3964 install.sh:3974 msgid "最新版" msgstr "dernière version" #: install.sh:3969 msgid "版本未知" msgstr "version inconnue" #: install.sh:3989 install.sh:3996 msgid "运行中" msgstr "en cours d'exécution" #: install.sh:3991 install.sh:4014 install.sh:4016 msgid "无需测试" msgstr "pas besoin de tester" #: install.sh:3993 install.sh:3998 msgid "未运行" msgstr "non exécuté" #: install.sh:4008 msgid "无法连通" msgstr "impossible de se connecter" #: install.sh:4010 install.sh:4011 install.sh:4012 msgid "本地正常" msgstr "normal localement" #: install.sh:4027 msgid "脚本维护中.. 请稍后再试" msgstr "script en cours de maintenance... veuillez réessayer plus tard" #: install.sh:4034 msgid "无法检测所需依赖的在线版本, 请稍后再试" msgstr "impossible de détecter la version en ligne des dépendances requises, veuillez réessayer plus tard" #: install.sh:4051 msgid "请输入数字" msgstr "veuillez entrer un chiffre" #: install.sh:4051 msgid "请输入 1 到 6 之间的有效数字" msgstr "veuillez saisir un chiffre valide entre 1 et 6" #: install.sh:4081 msgid "无效的选择" msgstr "choix invalide" #: install.sh:4122 msgid "请输入备份名称" msgstr "veuillez saisir le nom de la sauvegarde" #: install.sh:4122 msgid "不需要后缀" msgstr "pas besoin de suffixe" #: install.sh:4131 msgid "报错信息" msgstr "message d'erreur" #: install.sh:4133 msgid "备份完整性可能受到影响, 请检查上述错误信息" msgstr "l'intégrité de la sauvegarde pourrait être affectée, veuillez vérifier les informations d'erreur ci-dessus" #: install.sh:4137 msgid "备份失败" msgstr "échec de la sauvegarde" #: install.sh:4139 msgid "备份成功" msgstr "sauvegarde réussie" #: install.sh:4144 msgid "请确保备份文件在目录" msgstr "veuillez vous assurer que le fichier de sauvegarde se trouve dans le répertoire" #: install.sh:4148 msgid "没有找到备份文件" msgstr "aucun fichier de sauvegarde n'a été trouvé" #: install.sh:4153 msgid "发现多个备份文件" msgstr "découverte de plusieurs fichiers de sauvegarde" #: install.sh:4153 msgid "将使用最新的文件进行恢复" msgstr "la restauration sera effectuée à partir du fichier le plus récent" #: install.sh:4157 msgid "找到最新备份文件" msgstr "trouver le fichier de sauvegarde le plus récent" #: install.sh:4159 msgid "恢复备份" msgstr "restaurer la sauvegarde" #: install.sh:4163 msgid "恢复成功" msgstr "restauration réussie" #: install.sh:4164 install.sh:4166 msgid "记得安装" msgstr "rappelez-vous d'installer" #: install.sh:4169 msgid "恢复失败" msgstr "échec de la restauration" #: install.sh:4175 msgid "安装管理脚本" msgstr "installer le script de gestion" #: install.sh:4176 msgid "作者" msgstr "auteur" #: install.sh:4180 msgid "当前模式" msgstr "mode actuel" #: install.sh:4181 msgid "当前语言" msgstr "langue actuelle" #: install.sh:4184 msgid "可以使用" msgstr "peut être utilisé" #: install.sh:4184 msgid "命令管理脚本" msgstr "script de gestion des commandes" #: install.sh:4186 msgid "版本检测" msgstr "détection de version" #: install.sh:4187 install.sh:4195 install.sh:4246 msgid "脚本" msgstr "script" #: install.sh:4190 msgid "运行状态" msgstr "état de fonctionnement" #: install.sh:4193 msgid "连通性" msgstr "connectivité" #: install.sh:4194 msgid "更新向导" msgstr "assistant de mise à jour" #: install.sh:4205 msgid "安装向导" msgstr "assistant d'installation" #: install.sh:4210 msgid "配置变更" msgstr "changement de configuration" #: install.sh:4217 msgid "用户管理" msgstr "gestion des utilisateurs" #: install.sh:4218 install.sh:4219 install.sh:4220 msgid "用户" msgstr "utilisateur" #: install.sh:4221 msgid "查看信息" msgstr "afficher les informations" #: install.sh:4222 msgid "实时访问日志" msgstr "journal d'accès en temps réel" #: install.sh:4223 msgid "实时错误日志" msgstr "journal des erreurs en temps réel" #: install.sh:4226 msgid "服务相关" msgstr "service lié" #: install.sh:4227 install.sh:4228 install.sh:4229 install.sh:4230 msgid "所有服务" msgstr "tous les services" #: install.sh:4231 msgid "证书相关" msgstr "relatif aux certificats" #: install.sh:4232 msgid "证书状态" msgstr "état du certificat" #: install.sh:4233 msgid "证书有效期" msgstr "durée de validité du certificat" #: install.sh:4234 msgid "证书自动更新" msgstr "mise à jour automatique des certificats" #: install.sh:4235 msgid "其他选项" msgstr "autres options" #: install.sh:4236 msgid "自动更新" msgstr "mise à jour automatique" #: install.sh:4238 msgid "防暴力破解" msgstr "protection contre les attaques par force brute" #: install.sh:4239 msgid "流量统计" msgstr "statistiques de trafic" #: install.sh:4240 msgid "清除" msgstr "effacer" #: install.sh:4240 msgid "日志文件" msgstr "fichier de journal" #: install.sh:4241 msgid "测试" msgstr "test" #: install.sh:4241 msgid "服务器网速" msgstr "vitesse de connexion du serveur" #: install.sh:4242 msgid "备份恢复" msgstr "sauvegarde et restauration" #: install.sh:4243 install.sh:4244 msgid "全部文件" msgstr "tous les fichiers" #: install.sh:4244 msgid "恢复" msgstr "récupération" #: install.sh:4245 msgid "卸载向导" msgstr "assistant de désinstallation" #: install.sh:4246 fail2ban_manager.sh:14 fail2ban_manager.sh:415 msgid "卸载" msgstr "désinstaller" #: install.sh:4247 msgid "清空" msgstr "vider" #: install.sh:4247 msgid "证书文件" msgstr "fichier de certificat" #: install.sh:4248 fail2ban_manager.sh:16 file_manager.sh:208 msgid "退出" msgstr "quitter" #: install.sh:4251 msgid "请输入选项" msgstr "veuillez saisir une option" #: install.sh:4259 install.sh:4268 install.sh:4334 install.sh:4340 #: install.sh:4385 install.sh:4391 install.sh:4397 install.sh:4426 #: install.sh:4467 install.sh:4474 install.sh:4479 fail2ban_manager.sh:416 msgid "清空屏幕" msgstr "effacer l'écran" #: install.sh:4265 msgid "不建议" msgstr "déconseillé" #: install.sh:4265 msgid "频繁更新 Nginx, 请确认 Nginx 有更新的必要" msgstr "mettez nginx à jour fréquemment et vérifiez qu’il est nécessaire de le mettre à jour" #: install.sh:4266 msgid "开始更新" msgstr "commencer la mise à jour" #: install.sh:4346 install.sh:4353 install.sh:4360 install.sh:4410 #: install.sh:4415 install.sh:4420 install.sh:4442 msgid "回到菜单" msgstr "retour au menu" #: fail2ban_manager.sh:10 msgid "用于防止暴力破解" msgstr "utilisé pour prévenir les attaques par force brute" #: fail2ban_manager.sh:11 file_manager.sh:203 msgid "主菜单" msgstr "menu principal" #: fail2ban_manager.sh:13 msgid "管理" msgstr "gestion" #: fail2ban_manager.sh:15 fail2ban_manager.sh:339 msgid "状态" msgstr "état" #: fail2ban_manager.sh:18 file_manager.sh:210 msgid "请选择一个选项" msgstr "veuillez sélectionner une option" #: fail2ban_manager.sh:27 fail2ban_manager.sh:250 fail2ban_manager.sh:258 #: fail2ban_manager.sh:363 msgid "无效的选择, 请重试" msgstr "option invalide, veuillez réessayer" #: fail2ban_manager.sh:35 msgid "已经安装, 跳过安装步骤" msgstr "déjà installé, sauter l'étape d'installation" #: fail2ban_manager.sh:68 msgid "systemd 无法读取 SSH 日志" msgstr "systemd ne peut pas lire les journaux ssh" #: fail2ban_manager.sh:69 msgid "跳过启用" msgstr "passer l'activation" #: fail2ban_manager.sh:69 fail2ban_manager.sh:93 fail2ban_manager.sh:103 #: fail2ban_manager.sh:120 fail2ban_manager.sh:125 fail2ban_manager.sh:128 #: fail2ban_manager.sh:146 fail2ban_manager.sh:151 fail2ban_manager.sh:154 msgid "规则" msgstr "règle" #: fail2ban_manager.sh:77 fail2ban_manager.sh:203 fail2ban_manager.sh:440 msgid "未安装, 请先安装" msgstr "non installé, veuillez installer d'abord" #: fail2ban_manager.sh:125 fail2ban_manager.sh:151 fail2ban_manager.sh:349 msgid "已禁用" msgstr "désactivé" #: fail2ban_manager.sh:209 msgid "请选择" msgstr "veuillez sélectionner" #: fail2ban_manager.sh:209 msgid "操作" msgstr "opération" #: fail2ban_manager.sh:210 msgid "管理模块" msgstr "module de gestion" #: fail2ban_manager.sh:211 msgid "添加自定义规则" msgstr "ajouter une règle personnalisée" #: fail2ban_manager.sh:212 fail2ban_manager.sh:228 msgid "服务管理" msgstr "gestion des services" #: fail2ban_manager.sh:271 msgid "请输入新的" msgstr "veuillez entrer le nouveau" #: fail2ban_manager.sh:271 fail2ban_manager.sh:272 msgid "名称" msgstr "nom" #: fail2ban_manager.sh:273 msgid "请输入日志路径" msgstr "veuillez saisir le chemin du journal" #: fail2ban_manager.sh:274 msgid "请输入最大重试次数" msgstr "veuillez saisir le nombre maximum de tentatives" #: fail2ban_manager.sh:274 msgid "最大重试次数必须在 1 到 99 之间" msgstr "le nombre maximum de tentatives doit être compris entre 1 et 99" #: fail2ban_manager.sh:275 msgid "请输入封禁时间" msgstr "veuillez saisir le temps de blocage" #: fail2ban_manager.sh:275 msgid "秒" msgstr "seconde" #: fail2ban_manager.sh:275 msgid "封禁时间必须在 1 到 8640000 秒之间" msgstr "la durée de blocage doit être comprise entre 1 et 8640000 secondes" #: fail2ban_manager.sh:285 msgid "自定义规则添加成功" msgstr "règle personnalisée ajoutée avec succès" #: fail2ban_manager.sh:289 msgid "重启以应用新规则" msgstr "redémarrez pour appliquer les nouvelles règles" #: fail2ban_manager.sh:294 msgid "管理 Fail2ban 模块" msgstr "gérer le module fail2ban" #: fail2ban_manager.sh:311 msgid "未找到任何模块化配置文件" msgstr "aucun fichier de configuration modulaire n’a été trouvé" #: fail2ban_manager.sh:319 fail2ban_manager.sh:339 msgid "模块名称" msgstr "nom du module" #: fail2ban_manager.sh:339 file_manager.sh:59 msgid "序号" msgstr "numéro de série" #: fail2ban_manager.sh:363 msgid "请选择要管理的模块" msgstr "veuillez sélectionner le module à gérer" #: fail2ban_manager.sh:375 msgid "启用" msgstr "activer" #: fail2ban_manager.sh:375 msgid "禁用" msgstr "désactiver" #: fail2ban_manager.sh:378 msgid "是否" msgstr "est-ce que…" #: fail2ban_manager.sh:378 fail2ban_manager.sh:386 msgid "模块" msgstr "module" #: fail2ban_manager.sh:388 msgid "操作已取消" msgstr "l’opération a été annulée" #: fail2ban_manager.sh:424 msgid "停止成功" msgstr "arrêt réussi" #: fail2ban_manager.sh:444 msgid "总体状态" msgstr "état général" #: fail2ban_manager.sh:448 msgid "默认启用的 Jail 状态" msgstr "état jail activé par défaut" #: fail2ban_manager.sh:452 fail2ban_manager.sh:458 msgid "封锁情况" msgstr "situation de blocus" #: fail2ban_manager.sh:453 fail2ban_manager.sh:459 fail2ban_manager.sh:462 #: fail2ban_manager.sh:466 fail2ban_manager.sh:469 msgid "未启用或配置异常" msgstr "non activé ou configuration anormale" #: fail2ban_manager.sh:484 file_manager.sh:232 msgid "新版本可用" msgstr "nouvelle version disponible" #: fail2ban_manager.sh:484 file_manager.sh:232 msgid "当前版本" msgstr "version actuelle" #: fail2ban_manager.sh:485 file_manager.sh:233 msgid "请访问" msgstr "veuillez visiter" #: fail2ban_manager.sh:485 file_manager.sh:233 msgid "查看更新说明" msgstr "voir les notes de mise à jour" #: fail2ban_manager.sh:487 file_manager.sh:235 msgid "是否下载并安装新版本" msgstr "télécharger et installer la nouvelle version " #: fail2ban_manager.sh:491 file_manager.sh:239 msgid "正在下载新版本" msgstr "téléchargement de la nouvelle version en cours" #: fail2ban_manager.sh:496 file_manager.sh:244 msgid "下载完成, 请重新运行脚本" msgstr "téléchargement terminé, veuillez relancer le script" #: fail2ban_manager.sh:504 file_manager.sh:252 msgid "跳过更新" msgstr "ignorer la mise à jour" #: fail2ban_manager.sh:508 file_manager.sh:256 msgid "当前已经是最新版本" msgstr "c'est déjà la version la plus récente" #: file_manager.sh:7 msgid "用法" msgstr "utilisation" #: file_manager.sh:7 msgid "文件扩展名" msgstr "extension de fichier" #: file_manager.sh:7 msgid "目录路径" msgstr "chemin du répertoire" #: file_manager.sh:16 msgid "目录" msgstr "table des matières" #: file_manager.sh:16 msgid "不存在, 请检查路径" msgstr "inexistant, veuillez vérifier le chemin" #: file_manager.sh:26 file_manager.sh:204 msgid "列出所有" msgstr "énumérer tout" #: file_manager.sh:26 file_manager.sh:35 file_manager.sh:88 file_manager.sh:111 #: file_manager.sh:160 file_manager.sh:176 file_manager.sh:204 #: file_manager.sh:205 file_manager.sh:206 file_manager.sh:207 msgid "文件" msgstr "fichier" #: file_manager.sh:53 msgid "文件名" msgstr "nom du fichier" #: file_manager.sh:79 msgid "请输入网址 (例如 hey.run)" msgstr "veuillez saisir l'adresse url (par exemple hey.run)" #: file_manager.sh:80 msgid "不要包含 http:// 或 https:// 开头" msgstr "ne pas inclure http:// ou https:// au début" #: file_manager.sh:84 msgid "网址不能包含 http:// 或 https:// 前缀" msgstr "l’adresse url ne peut pas contenir le préfixe http:// ou https://" #: file_manager.sh:88 file_manager.sh:111 msgid "已创建" msgstr "déjà créé" #: file_manager.sh:99 msgid "请输入主机" msgstr "veuillez entrer l'hôte" #: file_manager.sh:107 msgid "请输入权重" msgstr "veuillez entrer le poids" #: file_manager.sh:128 msgid "追加完成" msgstr "ajout complété" #: file_manager.sh:132 file_manager.sh:136 msgid "重启完成" msgstr "redémarrage terminé" #: file_manager.sh:151 msgid "请输入要编辑的文件编号" msgstr "veuillez saisir le numéro du fichier à éditer" #: file_manager.sh:156 msgid "未安装, 正在尝试安装" msgstr "non installé, en cours d'installation" #: file_manager.sh:160 msgid "已编辑" msgstr "déjà édité" #: file_manager.sh:171 msgid "请输入要删除的文件编号" msgstr "veuillez saisir le numéro du fichier à supprimer" #: file_manager.sh:194 msgid "不支持的文件扩展名" msgstr "extension de fichier non prise en charge" #: file_manager.sh:205 msgid "创建一个新的" msgstr "créer un nouveau" #: file_manager.sh:206 msgid "编辑一个已存在的" msgstr "modifier un existant" #: file_manager.sh:207 msgid "删除一个已存在的" msgstr "supprimer un existant" #: file_manager.sh:265 msgid "重启成功" msgstr "redémarrage réussi" #: file_manager.sh:268 msgid "重启失败" msgstr "redémarrage échoué" #: file_manager.sh:268 msgid "请检查配置文件是否有误" msgstr "veuillez vérifier si le fichier de configuration contient des erreurs" ================================================ FILE: po/ko.po ================================================ # Korean translations for xray_install package. # Copyright (C) 2026 yunshu # This file is distributed under the same license as the xray_install package. # Automatically generated, 2026. # msgid "" msgstr "" "Project-Id-Version: xray_install 1.0\n" "Report-Msgid-Bugs-To: https://github.com/hello-yunshu/Xray_bash_onekey/" "issues\n" "POT-Creation-Date: 2026-04-24 09:47+0000\n" "PO-Revision-Date: 2026-04-24 09:47+0000\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: install.sh:32 msgid "信息" msgstr "정보" #: install.sh:34 msgid "错误" msgstr "오류" #: install.sh:35 msgid "警告" msgstr "경고" #: install.sh:38 install.sh:1540 install.sh:3960 install.sh:3977 #: install.sh:3980 install.sh:3981 install.sh:4019 msgid "未安装" msgstr "미설치" #: install.sh:99 msgid "日志文件归档失败" msgstr "로그 파일 보관 실패" #: install.sh:104 msgid "日志文件清空失败" msgstr "로그 파일 비우기 실패" #: install.sh:108 msgid "日志文件已轮转并归档为" msgstr "로그 파일이 회전되어 다음과 같이 보관되었습니다" #: install.sh:134 install.sh:138 install.sh:142 install.sh:152 msgid "当前系统为" msgstr "현재 시스템은" #: install.sh:152 msgid "不在支持的系统列表内, 安装中断" msgstr "지원되지 않는 시스템 목록에 포함되어 있어 설치가 중단되었습니다" #: install.sh:159 msgid "当前用户是 root 用户, 开始安装" msgstr "현재 사용자는 root 사용자입니다. 설치를 시작합니다" #: install.sh:161 msgid "当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本" msgstr "현재 사용자는 root 사용자가 아닙니다. root 사용자로 전환한 후 스크립트를 다시 실행해 주세요" #: install.sh:187 msgid "无法获取远程语言文件信息" msgstr "원격 언어 파일 정보를 가져올 수 없습니다" #: install.sh:205 msgid "正在更新语言文件" msgstr "언어 파일을 업데이트 중입니다" #: install.sh:208 install.sh:291 msgid "语言文件更新失败" msgstr "언어 파일 업데이트 실패" #: install.sh:213 msgid "语言文件无效" msgstr "언어 파일이 유효하지 않습니다" #: install.sh:219 msgid "版本文件更新失败" msgstr "버전 파일 업데이트 실패" #: install.sh:226 msgid "语言文件更新完成" msgstr "언어 파일 업데이트 완료" #: install.sh:231 install.sh:2725 msgid "正在安装" msgstr "설치 중" #: install.sh:234 msgid "安装失败" msgstr "설치 실패" #: install.sh:234 install.sh:258 install.sh:281 install.sh:291 msgid "将使用默认语言" msgstr "기본 언어를 사용합니다" #: install.sh:258 file_manager.sh:35 msgid "未找到" msgstr "찾을 수 없음" #: install.sh:281 msgid "不支持的语言" msgstr "지원하지 않는 언어" #: install.sh:297 msgid "发现语言文件更新" msgstr "언어 파일 업데이트를 발견했습니다" #: install.sh:312 install.sh:1740 msgid "完成" msgstr "완성" #: install.sh:315 msgid "失败" msgstr "실패" #: install.sh:322 msgid "在线版本检测失败, 请稍后再试" msgstr "온라인 버전 검사에 실패했습니다. 잠시 후 다시 시도해 주세요" #: install.sh:344 install.sh:352 install.sh:1162 install.sh:3872 #: install.sh:3873 install.sh:3874 install.sh:3875 install.sh:4206 #: install.sh:4207 install.sh:4208 install.sh:4209 fail2ban_manager.sh:12 #: fail2ban_manager.sh:39 msgid "安装" msgstr "설치" #: install.sh:346 install.sh:354 install.sh:1169 install.sh:2729 #: install.sh:3969 msgid "已安装" msgstr "설치됨" #: install.sh:371 install.sh:375 msgid "自启动配置" msgstr "자동 실행 설정" #: install.sh:384 msgid "链接库安装" msgstr "링크 라이브러리 설치" #: install.sh:389 msgid "值为空或超出范围, 请重新输入" msgstr "값이 비어 있거나 범위를 초과했습니다. 다시 입력해 주십시오" #: install.sh:398 msgid "值为空, 请重新输入" msgstr "값이 비어 있습니다. 다시 입력해 주세요" #: install.sh:440 msgid "确定端口" msgstr "포트 확인" #: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:104 msgid "请输入端口" msgstr "포트를 입력하세요" #: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:107 msgid "默认值" msgstr "기본값" #: install.sh:441 install.sh:444 install.sh:532 install.sh:554 install.sh:3055 #: install.sh:3060 install.sh:3065 install.sh:3066 install.sh:3081 #: install.sh:3086 install.sh:3091 install.sh:3092 msgid "请输入 0-65535 之间的值" msgstr "0-65535 사이의 값을 입력하세요" #: install.sh:443 msgid "端口不允许使用, 请重新输入" msgstr "포트를 사용할 수 없습니다. 다시 입력해 주세요" #: install.sh:452 msgid "请选择安装协议" msgstr "설치 계약서를 선택해 주십시오" #: install.sh:453 install.sh:1617 install.sh:1654 install.sh:1705 #: install.sh:2997 install.sh:3142 install.sh:3209 install.sh:3256 #: fail2ban_manager.sh:274 fail2ban_manager.sh:275 msgid "默认" msgstr "기본" #: install.sh:457 install.sh:532 install.sh:554 install.sh:635 install.sh:668 #: install.sh:821 install.sh:840 install.sh:881 install.sh:922 install.sh:1621 #: install.sh:1634 install.sh:1656 install.sh:1709 install.sh:1719 #: install.sh:2985 install.sh:3000 install.sh:3055 install.sh:3060 #: install.sh:3065 install.sh:3066 install.sh:3081 install.sh:3086 #: install.sh:3091 install.sh:3092 install.sh:3145 install.sh:3154 #: install.sh:3212 install.sh:3259 install.sh:3268 fail2ban_manager.sh:215 #: fail2ban_manager.sh:234 fail2ban_manager.sh:272 file_manager.sh:81 msgid "请输入" msgstr "입력하세요" #: install.sh:457 install.sh:922 install.sh:1621 install.sh:1656 #: install.sh:1709 install.sh:2985 install.sh:3000 install.sh:3145 #: install.sh:3212 install.sh:3259 install.sh:4251 install.sh:4489 msgid "请输入有效的数字" msgstr "유효한 숫자를 입력하세요" #: install.sh:478 msgid "是否添加简单 ws/gRPC 协议 用于负载均衡" msgstr "단순한 ws/grpc 프로토콜을 로드 밸런싱에 추가할 것인지" #: install.sh:479 install.sh:1259 msgid "如不清楚具体用途, 请勿选择" msgstr "구체적인 용도가 명확하지 않은 경우 선택하지 마십시오" #: install.sh:499 msgid "已跳过添加简单 ws/gRPC 协议" msgstr "간단한 ws/grpc 프로토콜 추가를 건너뛰었습니다" #: install.sh:528 install.sh:550 install.sh:631 install.sh:648 install.sh:664 #: install.sh:681 install.sh:696 install.sh:815 install.sh:836 install.sh:877 msgid "是否需要自定义" msgstr "맞춤형이 필요한가요" #: install.sh:532 install.sh:554 msgid "请勿与其他端口相同" msgstr "다른 포트와 동일하지 마십시오" #: install.sh:571 file_manager.sh:114 msgid "是否需要设置防火墙" msgstr "방화벽을 설정해야 하나요" #: install.sh:611 install.sh:615 file_manager.sh:128 file_manager.sh:132 #: file_manager.sh:136 msgid "防火墙" msgstr "방화벽" #: install.sh:611 install.sh:615 install.sh:2215 install.sh:2218 #: install.sh:3012 install.sh:3014 install.sh:4227 fail2ban_manager.sh:231 #: fail2ban_manager.sh:432 msgid "重启" msgstr "재부팅" #: install.sh:617 msgid "开放防火墙相关端口" msgstr "방화벽 관련 포트 개방" #: install.sh:618 msgid "若修改配置, 请注意关闭防火墙相关端口" msgstr "구성을 수정할 경우 방화벽 관련 포트를 닫는 것을 유의하십시오" #: install.sh:619 install.sh:3877 install.sh:3892 install.sh:3893 #: install.sh:4216 install.sh:4236 fail2ban_manager.sh:161 msgid "配置" msgstr "구성" #: install.sh:622 file_manager.sh:140 msgid "跳过防火墙设置" msgstr "방화벽 설정 건너뛰기" #: install.sh:631 install.sh:635 install.sh:636 install.sh:640 install.sh:648 #: install.sh:664 install.sh:668 install.sh:669 install.sh:673 install.sh:681 #: install.sh:1101 msgid "伪装路径" msgstr "위장 경로" #: install.sh:635 install.sh:668 msgid "不需要" msgstr "필요하지 않다" #: install.sh:696 install.sh:706 install.sh:3172 msgid "用户名" msgstr "사용자 이름" #: install.sh:700 msgid "请输入正确的 email" msgstr "올바른 이메일을 입력하세요" #: install.sh:713 msgid "是否需要自定义字符串映射" msgstr "사용자 정의 문자열 매핑이 필요한가요" #: install.sh:717 msgid "请输入自定义字符串" msgstr "사용자 정의 문자열을 입력하세요" #: install.sh:717 msgid "最多30字符" msgstr "최대 30자" #: install.sh:719 msgid "自定义字符串" msgstr "사용자 정의 문자열" #: install.sh:726 install.sh:2836 install.sh:3895 install.sh:4211 #: install.sh:4314 msgid "映射字符串" msgstr "문자열 매핑" #: install.sh:737 msgid "检测到 target 域名已配置, 是否保留" msgstr "타겟 도메인이 이미 구성된 것을 감지했습니다. 유지하시겠습니까" #: install.sh:757 msgid "请输入一个域名" msgstr "도메인 이름을 입력하세요" #: install.sh:758 msgid "域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用" msgstr "도메인은 tlsv1.3, x25519 및 h2를 지원해야 하며 도메인 리디렉션을 사용하지 않아야 합니다" #: install.sh:759 msgid "确认域名符合要求后请输入" msgstr "도메인 이름이 요구 사항을 충족하는지 확인한 후 입력해 주십시오" #: install.sh:760 msgid "正在检测域名请等待" msgstr "도메인을 검사 중입니다. 잠시 기다려 주십시오" #: install.sh:767 install.sh:772 install.sh:777 msgid "该域名不支持" msgstr "해당 도메인은 지원하지 않습니다" #: install.sh:782 msgid "该域名发生了跳转" msgstr "해당 도메인이 리디렉션되었습니다" #: install.sh:789 msgid "该域名可能不满足所有要求" msgstr "해당 도메인명이 모든 요구 사항을 충족하지 않을 수 있습니다" #: install.sh:790 msgid "是否仍要设置此域名" msgstr "이 도메인 이름을 여전히 설정하시겠습니까" #: install.sh:802 install.sh:807 install.sh:1619 msgid "域名" msgstr "도메인 이름" #: install.sh:802 msgid "满足所有要求" msgstr "모든 요구 사항을 충족하다" #: install.sh:815 msgid "域名的" msgstr "도메인의" #: install.sh:816 msgid "默认为" msgstr "기본값은" #: install.sh:816 msgid "域名本身" msgstr "도메인 자체" #: install.sh:817 install.sh:912 install.sh:952 msgid "如不清楚具体用途, 请勿继续" msgstr "구체적인 용도가 명확하지 않은 경우 계속 사용하지 마십시오" #: install.sh:898 msgid "本地文件 file_manager.sh 不存在, 正在下载" msgstr "로컬 파일 file_manager.sh가 존재하지 않아 다운로드 중입니다" #: install.sh:900 install.sh:2330 fail2ban_manager.sh:500 file_manager.sh:248 msgid "下载失败, 请手动下载并安装新版本" msgstr "다운로드에 실패했습니다. 수동으로 새 버전을 다운로드하여 설치해 주세요" #: install.sh:911 install.sh:951 msgid "是否变更" msgstr "변경 여부" #: install.sh:911 msgid "负载均衡" msgstr "로드 밸런싱" #: install.sh:917 msgid "请选择协议为 ws 或 gRPC" msgstr "프로토콜을 ws 또는 grpc로 선택하세요" #: install.sh:920 fail2ban_manager.sh:213 fail2ban_manager.sh:232 #: fail2ban_manager.sh:325 fail2ban_manager.sh:357 msgid "返回" msgstr "돌아가기" #: install.sh:930 file_manager.sh:220 msgid "无效选项, 请重试" msgstr "잘못된 옵션입니다. 다시 시도해 주세요" #: install.sh:940 install.sh:964 install.sh:2266 install.sh:2304 #: install.sh:2320 msgid "当前模式不支持此操作" msgstr "현재 모드는 이 작업을 지원하지 않습니다" #: install.sh:953 msgid "配置用途可以参考文章" msgstr "사용 용도는 문서를 참고하십시오" #: install.sh:980 install.sh:991 install.sh:995 install.sh:999 install.sh:1011 #: install.sh:1016 install.sh:1020 install.sh:1025 install.sh:1045 #: install.sh:1051 install.sh:1101 install.sh:1120 install.sh:3893 #: install.sh:4177 msgid "修改" msgstr "수정" #: install.sh:1053 install.sh:2816 install.sh:2818 install.sh:2820 #: install.sh:2821 install.sh:2824 install.sh:2828 install.sh:2830 #: install.sh:2832 install.sh:2833 install.sh:2861 install.sh:2864 #: install.sh:2867 install.sh:2869 install.sh:3049 msgid "端口" msgstr "포트" #: install.sh:1103 msgid "不支持" msgstr "지원하지 않음" #: install.sh:1110 msgid "用户名修改" msgstr "사용자 이름 수정" #: install.sh:1113 install.sh:1123 msgid "请先删除多余的用户" msgstr "먼저 중복된 사용자를 삭제해 주십시오" #: install.sh:1131 install.sh:1139 install.sh:1146 install.sh:1990 #: install.sh:2061 install.sh:2146 install.sh:2154 install.sh:2163 #: install.sh:2186 msgid "配置修改" msgstr "구성 수정" #: install.sh:1151 msgid "检测到 Xray 的权限控制, 启动修改程序" msgstr "xray의 권한 제어를 감지하여 수정 프로그램을 시작합니다" #: install.sh:1156 msgid "修改完成" msgstr "수정 완료" #: install.sh:1176 msgid "若更新无效, 建议直接卸载再安装" msgstr "업데이트가 적용되지 않는 경우, 직접 삭제 후 다시 설치하는 것을 권장합니다" #: install.sh:1177 msgid "部分新功能需要重新安装才可生效" msgstr "일부 새로운 기능은 다시 설치해야 적용됩니다" #: install.sh:1182 msgid "检测到存在最新版" msgstr "최신 버전이 존재하는 것으로 감지됨" #: install.sh:1183 msgid "脚本可能未兼容此版本" msgstr "스크립트가 이 버전과 호환되지 않을 수 있습니다" #: install.sh:1184 msgid "是否更新" msgstr "업데이트 여부" #: install.sh:1188 install.sh:1213 install.sh:1532 install.sh:3886 #: install.sh:3898 install.sh:4195 install.sh:4196 install.sh:4197 #: install.sh:4233 msgid "更新" msgstr "업데이트" #: install.sh:1192 install.sh:1494 msgid "启动失败" msgstr "시작 실패" #: install.sh:1193 install.sh:1497 msgid "是否回滚到之前的版本" msgstr "이전 버전으로 롤백할까요" #: install.sh:1197 install.sh:1507 msgid "未执行回滚操作" msgstr "롤백 작업이 실행되지 않았습니다" #: install.sh:1201 install.sh:1511 msgid "正在回滚" msgstr "롤백 중입니다" #: install.sh:1205 install.sh:1518 msgid "已成功回滚到之前的" msgstr "이전 버전으로 성공적으로 롤백되었습니다" #: install.sh:1205 install.sh:1518 install.sh:4214 install.sh:4329 msgid "版本" msgstr "버전" #: install.sh:1207 install.sh:1228 install.sh:1524 msgid "回滚失败" msgstr "롤백 실패" #: install.sh:1234 install.sh:1238 msgid "重装" msgstr "중장" #: install.sh:1248 install.sh:1249 msgid "更新失败" msgstr "업데이트 실패" #: install.sh:1257 msgid "是否添加 Reality 负载均衡" msgstr "리얼리티 로드 밸런싱을 추가할지 여부" #: install.sh:1258 msgid "使用此功能前,建议先阅读作者教程" msgstr "이 기능을 사용하기 전에 먼저 작성자의 튜토리얼을 읽는 것을 권장합니다" #: install.sh:1264 fail2ban_manager.sh:93 fail2ban_manager.sh:103 #: fail2ban_manager.sh:128 fail2ban_manager.sh:154 fail2ban_manager.sh:347 msgid "已启用" msgstr "활성화됨" #: install.sh:1268 msgid "已跳过" msgstr "건너뛰었습니다" #: install.sh:1277 msgid "Reality 协议有流量偷跑的风险" msgstr "reality 프로토콜은 트래픽 유출의 위험이 있다" #: install.sh:1279 install.sh:1306 msgid "是否额外安装 nginx 前置保护" msgstr "nginx 프런트엔드 보호를 추가로 설치할 것인지 여부" #: install.sh:1279 msgid "推荐" msgstr "추천" #: install.sh:1286 install.sh:1321 msgid "检测到已安装" msgstr "설치된 것을 감지했습니다" #: install.sh:1289 install.sh:1324 msgid "已跳过安装" msgstr "설치를 건너뛰었습니다" #: install.sh:1303 msgid "检测到已开启 Reality 负载均衡" msgstr "reality 로드 밸런싱이 이미 활성화된 것을 감지했습니다" #: install.sh:1304 msgid "如用作 Reality 负载均衡主服务器必须安装" msgstr "reality 부하 분산 주 서버로 사용할 경우 반드시 설치해야 합니다" #: install.sh:1305 msgid "如用作 Reality 负载均衡二级服务器则无需安装" msgstr "reality 로드 밸런싱 2차 서버로 사용할 경우 설치할 필요가 없습니다" #: install.sh:1349 msgid "已存在, 跳过编译安装过程" msgstr "이미 존재합니다. 컴파일 설치 과정을 건너뜁니다" #: install.sh:1351 msgid "检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装" msgstr "다른 패키지가 설치한 nginx를 감지했습니다. 계속 설치하면 충돌이 발생할 수 있으니 처리 후 설치해 주십시오" #: install.sh:1364 msgid "即将下载已编译的" msgstr "곧 컴파일된 것을 다운로드할 예정입니다" #: install.sh:1374 msgid "不支持的系统架构" msgstr "지원되지 않는 시스템 아키텍처" #: install.sh:1383 msgid "下载失败" msgstr "다운로드 실패" #: install.sh:1387 msgid "下载成功" msgstr "다운로드 성공" #: install.sh:1390 msgid "解压失败" msgstr "압축 풀기 실패" #: install.sh:1438 install.sh:1439 install.sh:1446 install.sh:1447 msgid "配置不完整, 退出更新" msgstr "구성이 완전하지 않습니다. 업데이트를 종료합니다" #: install.sh:1451 install.sh:1452 msgid "当前安装模式不需要" msgstr "현재 설치 모드는 필요하지 않습니다" #: install.sh:1456 install.sh:1457 msgid "配置不存在, 退出更新" msgstr "구성이 존재하지 않습니다. 업데이트를 종료합니다" #: install.sh:1463 msgid "备份旧版" msgstr "이전 버전 백업" #: install.sh:1464 msgid "删除旧版" msgstr "이전 버전 삭제" #: install.sh:1468 msgid "是否保留原 Nginx 配置文件" msgstr "기존 nginx 구성 파일을 유지할까요" #: install.sh:1476 install.sh:1809 msgid "原配置文件已删除" msgstr "원래 구성 파일이 삭제되었습니다" #: install.sh:1480 msgid "原配置文件已保留" msgstr "원래 구성 파일이 보존되었습니다" #: install.sh:1534 install.sh:4220 msgid "删除" msgstr "삭제" #: install.sh:1534 install.sh:4243 msgid "备份" msgstr "백업" #: install.sh:1537 msgid "已为最新版" msgstr "최신 버전으로 업데이트되었습니다" #: install.sh:1553 msgid "设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)" msgstr "백그라운드에서 자동 업데이트 프로그램 설정 (포함: 스크립트/xray/nginx)" #: install.sh:1554 msgid "可能自动更新后有兼容问题, 谨慎启用" msgstr "자동 업데이트 후 호환성 문제가 발생할 수 있으니 신중히 활성화하세요" #: install.sh:1555 fail2ban_manager.sh:120 fail2ban_manager.sh:146 msgid "是否启用" msgstr "활성화 여부" #: install.sh:1561 install.sh:3878 msgid "设置自动更新" msgstr "자동 업데이트 설정" #: install.sh:1566 msgid "已设置自动更新" msgstr "자동 업데이트가 설정되었습니다" #: install.sh:1567 msgid "是否关闭" msgstr "종료할까요" #: install.sh:1573 msgid "删除自动更新" msgstr "자동 업데이트 삭제" #: install.sh:1582 msgid "安装 SSL 证书生成脚本依赖" msgstr "ssl 인증서 생성 스크립트 의존성 설치" #: install.sh:1584 msgid "安装 SSL 证书生成脚本" msgstr "ssl 인증서 생성 스크립트 설치" #: install.sh:1590 msgid "检测到原域名配置存在, 是否跳过域名设置" msgstr "기존 도메인 구성이 존재하는 것을 감지했습니다. 도메인 설정을 건너뛸까요" #: install.sh:1605 install.sh:1642 install.sh:1693 install.sh:1726 msgid "无法获取公网IP地址" msgstr "공용 ip 주소를 가져올 수 없습니다" #: install.sh:1605 install.sh:1642 install.sh:1665 install.sh:1693 #: install.sh:1726 msgid "安装终止" msgstr "설치 종료" #: install.sh:1608 msgid "已跳过域名设置" msgstr "도메인 설정을 건너뛰었습니다" #: install.sh:1614 msgid "确定域名信息" msgstr "도메인 정보 확인" #: install.sh:1615 msgid "请输入你的域名信息" msgstr "도메인 정보를 입력해 주세요" #: install.sh:1616 msgid "请选择公网IP(IPv4/IPv6)或手动输入域名" msgstr "공용 ip(ipv4/ipv6)를 선택하거나 도메인을 수동으로 입력하세요" #: install.sh:1622 install.sh:1711 msgid "正在获取公网IP信息, 请耐心等待" msgstr "공인 ip 정보를 가져오는 중입니다. 잠시 기다려 주십시오" #: install.sh:1632 msgid "此选项用于服务器商仅提供域名访问服务器" msgstr "이 옵션은 서버 제공업체가 도메인만으로 서버에 접근할 수 있도록 하는 경우에 사용됩니다" #: install.sh:1633 msgid "注意服务器商域名添加 CNAME 记录" msgstr "서버 업체의 도메인에 cname 레코드를 추가하는 것을 주의하세요" #: install.sh:1645 msgid "域名DNS解析IP" msgstr "도메인 네임 dns 해석 ip" #: install.sh:1646 install.sh:1729 msgid "公网IP/域名" msgstr "공용 ip/도메인 이름" #: install.sh:1648 msgid "域名DNS解析IP与公网IP匹配" msgstr "도메인 네임의 dns 해석 ip와 공용 ip가 일치합니다" #: install.sh:1650 msgid "请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray" msgstr "도메인에 올바른 a/aaaa 레코드가 추가되었는지 확인해 주세요. 그렇지 않으면 xray를 정상적으로 사용할 수 없습니다" #: install.sh:1651 msgid "域名DNS解析IP与公网IP不匹配, 请选择" msgstr "도메인 네임의 dns 해석 ip가 공용 ip와 일치하지 않습니다. 선택해 주십시오" #: install.sh:1652 install.sh:1659 msgid "继续安装" msgstr "계속 설치" #: install.sh:1653 msgid "重新输入" msgstr "다시 입력" #: install.sh:1654 msgid "终止安装" msgstr "설치 중단" #: install.sh:1676 msgid "检测到原IP配置存在, 是否跳过IP设置" msgstr "기존 ip 설정이 존재하는 것을 감지했습니다. ip 설정을 건너뛸까요" #: install.sh:1697 msgid "已跳过IP设置" msgstr "ip 설정을 건너뛰었습니다" #: install.sh:1703 msgid "确定公网IP信息" msgstr "공용 ip 정보 확인" #: install.sh:1704 msgid "请选择公网IP为IPv4或IPv6" msgstr "공용 ip를 ipv4 또는 ipv6로 선택하세요" #: install.sh:1707 msgid "手动输入" msgstr "수동 입력" #: install.sh:1734 msgid "端口未被占用" msgstr "포트가 사용 중이 아닙니다" #: install.sh:1736 msgid "检测到" msgstr "검출됨" #: install.sh:1736 msgid "端口被占用" msgstr "포트가 점유되었습니다" #: install.sh:1736 msgid "以下为" msgstr "다음은" #: install.sh:1736 msgid "端口占用信息" msgstr "포트 점유 정보" #: install.sh:1738 msgid "尝试终止占用的进程" msgstr "점유된 프로세스를 종료해 보십시오" #: install.sh:1749 msgid "证书测试签发成功, 开始正式签发" msgstr "인증서 테스트 발급 성공, 정식 발급 시작" #: install.sh:1752 msgid "证书测试签发失败" msgstr "인증서 테스트 발급 실패" #: install.sh:1759 msgid "证书生成成功" msgstr "인증서 생성 성공" #: install.sh:1765 msgid "证书配置成功" msgstr "인증서 설정 성공" #: install.sh:1769 msgid "证书生成失败" msgstr "인증서 생성 실패" #: install.sh:1801 msgid "检测到 Xray 配置过多用户" msgstr "xray가 너무 많은 사용자를 구성한 것을 감지했습니다" #: install.sh:1802 msgid "是否保留原 Xray 配置文件" msgstr "기존 xray 구성 파일을 유지할까요" #: install.sh:1822 msgid "添加简单 ws/gRPC 协议" msgstr "간단한 ws/grpc 프로토콜 추가" #: install.sh:1837 msgid "检测到配置文件, 是否读取配置文件" msgstr "구성 파일을 감지했습니다. 구성 파일을 읽으시겠습니까" #: install.sh:1842 install.sh:1863 install.sh:1961 install.sh:3430 msgid "已删除配置文件" msgstr "구성 프로파일이 삭제되었습니다" #: install.sh:1845 install.sh:1858 install.sh:1956 install.sh:3426 msgid "已保留配置文件" msgstr "구성 파일이 보존되었습니다" #: install.sh:1852 msgid "检测到当前安装模式与配置文件的安装模式不一致" msgstr "현재 설치 모드가 구성 파일의 설치 모드와 일치하지 않는 것으로 감지되었습니다" #: install.sh:1853 msgid "是否保留配置文件 (强烈不建议)" msgstr "구성 파일을 유지할지 여부 (강력히 권장하지 않음)" #: install.sh:1857 msgid "请务必确保配置文件正确" msgstr "구성 파일이 정확한지 꼭 확인해 주십시오" #: install.sh:1951 msgid "检测到配置文件不完整, 是否保留配置文件" msgstr "구성 파일이 불완전한 것으로 감지되었습니다. 구성 파일을 유지하시겠습니까" #: install.sh:2170 msgid "配置删除" msgstr "설정 삭제" #: install.sh:2191 msgid "设置 Nginx 开机自启" msgstr "nginx 자동 시작 설정" #: install.sh:2194 install.sh:4234 install.sh:4237 install.sh:4238 #: install.sh:4239 fail2ban_manager.sh:10 msgid "设置" msgstr "설정" #: install.sh:2194 install.sh:2202 msgid "开机自启" msgstr "부팅 자동 실행" #: install.sh:2199 msgid "关闭 Nginx 开机自启" msgstr "nginx 자동 실행 비활성화" #: install.sh:2202 msgid "关闭" msgstr "닫기" #: install.sh:2209 install.sh:2231 install.sh:2234 install.sh:2294 #: install.sh:4229 fail2ban_manager.sh:230 msgid "停止" msgstr "정지" #: install.sh:2223 install.sh:2226 install.sh:2761 install.sh:4228 #: fail2ban_manager.sh:229 fail2ban_manager.sh:398 msgid "启动" msgstr "시작" #: install.sh:2247 install.sh:2263 msgid "新版本已自动设置证书自动更新" msgstr "새 버전에서 인증서 자동 갱신이 이미 자동으로 설정되었습니다" #: install.sh:2248 msgid "老版本请及时删除 废弃的 改版证书自动更新" msgstr "구버전은 즉시 삭제하시고, 폐기된 개정 인증서는 자동으로 업데이트됩니다" #: install.sh:2249 msgid "已设置改版证书自动更新" msgstr "버전 변경 인증서 자동 업데이트가 설정되었습니다" #: install.sh:2250 msgid "是否需要删除改版证书自动更新 (请删除)" msgstr "개편된 인증서 자동 업데이트를 삭제할 필요가 있습니까 (삭제해 주십시오)" #: install.sh:2257 msgid "删除改版证书自动更新" msgstr "개정된 인증서 자동 업데이트 삭제" #: install.sh:2281 msgid "已过期" msgstr "만료됨" #: install.sh:2283 msgid "证书生成日期" msgstr "인증서 생성일" #: install.sh:2284 msgid "证书生成天数" msgstr "인증서 생성 일수" #: install.sh:2285 msgid "证书剩余天数" msgstr "인증서 남은 일수" #: install.sh:2289 msgid "是否立即更新证书" msgstr "인증서를 즉시 업데이트할까요" #: install.sh:2301 install.sh:2313 msgid "证书签发工具不存在, 请确认是否证书为脚本签发" msgstr "인증서 발급 도구가 존재하지 않습니다. 스크립트로 인증서를 발급했는지 확인해 주십시오" #: install.sh:2317 msgid "证书更新" msgstr "증명서 업데이트" #: install.sh:2327 msgid "本地文件 fail2ban_manager.sh 不存在, 正在下载" msgstr "로컬 파일 fail2ban_manager.sh가 존재하지 않으므로 다운로드 중입니다" #: install.sh:2342 msgid "是否需要设置自动清理日志" msgstr "로그 자동 정리 설정이 필요합니까" #: install.sh:2346 msgid "已跳过设置自动清理日志" msgstr "로그 자동 정리를 설정하는 단계를 건너뛰었습니다" #: install.sh:2349 msgid "将在 每周三 04:00 自动清空日志" msgstr "매주 수요일 04:00에 로그가 자동으로 비워집니다" #: install.sh:2354 msgid "已设置自动清理日志任务" msgstr "로그 자동 정리 작업이 설정되었습니다" #: install.sh:2355 msgid "是否需要删除现有自动清理日志任务" msgstr "기존 자동 로그 정리 작업을 삭제할 필요가 있습니까" #: install.sh:2360 msgid "删除自动清理日志任务" msgstr "자동 정리 로그 작업 삭제" #: install.sh:2363 msgid "保留现有自动清理日志任务" msgstr "기존 자동 로그 정리 작업 유지" #: install.sh:2378 msgid "设置自动清理日志" msgstr "로그 자동 정리 설정" #: install.sh:2385 msgid "检测到日志文件大小如下:" msgstr "로그 파일 크기가 다음과 같이 감지되었습니다" #: install.sh:2387 msgid "即将清除" msgstr "곧 삭제됩니다" #: install.sh:2389 msgid "日志清理" msgstr "로그 정리" #: install.sh:2663 msgid "链接分享" msgstr "링크 공유" #: install.sh:2665 install.sh:2671 install.sh:2676 install.sh:2681 #: install.sh:2685 install.sh:3183 msgid "分享链接" msgstr "링크 공유" #: install.sh:2666 install.sh:2672 install.sh:2677 install.sh:2682 #: install.sh:2686 msgid "二维码" msgstr "qr 코드" #: install.sh:2692 install.sh:2693 msgid "配置分享" msgstr "구성 공유" #: install.sh:2707 msgid "生成分享链接" msgstr "공유 링크 생성" #: install.sh:2735 install.sh:2746 install.sh:3038 install.sh:3108 #: install.sh:3132 install.sh:3198 install.sh:3246 install.sh:3300 #: install.sh:3352 msgid "请先安装" msgstr "먼저 설치해 주세요" #: install.sh:2753 msgid "无法获取网卡, 将监控所有网卡" msgstr "네트워크 카드를 가져올 수 없습니다. 모든 네트워크 카드를 모니터링합니다" #: install.sh:2755 msgid "监控网卡" msgstr "네트워크 카드 모니터링" #: install.sh:2758 msgid "监控端口" msgstr "모니터링 포트" #: install.sh:2760 msgid "按 q 键退出 iftop" msgstr "q 키를 눌러 iftop을 종료하세요" #: install.sh:2776 install.sh:2779 install.sh:2782 install.sh:2785 #: install.sh:2788 install.sh:2791 install.sh:2794 install.sh:2797 #: install.sh:2800 install.sh:2803 install.sh:2806 msgid "安装成功" msgstr "설치 성공" #: install.sh:2810 msgid "目前分享链接规范为实验阶段, 请自行判断是否适用" msgstr "현재 공유 링크 규칙은 실험 단계이므로, 직접 적용 가능한지 판단해 주십시오" #: install.sh:2812 install.sh:4224 msgid "配置信息" msgstr "설정 정보" #: install.sh:2813 msgid "主机" msgstr "호스트" #: install.sh:2837 msgid "用户id" msgstr "사용자 id" #: install.sh:2839 msgid "加密" msgstr "암호화" #: install.sh:2840 msgid "传输协议" msgstr "전송 프로토콜" #: install.sh:2841 msgid "底层传输安全" msgstr "기저 전송 보안" #: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868 msgid "路径" msgstr "경로" #: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868 msgid "不要落下" msgstr "놓치지 마세요" #: install.sh:2846 install.sh:2849 install.sh:2865 install.sh:2870 msgid "不需要加" msgstr "추가할 필요가 없습니다" #: install.sh:2852 msgid "流控" msgstr "유량 제어" #: install.sh:2885 msgid "即将申请证书, 支持使用自定义证书" msgstr "인증서를 곧 신청할 예정이며, 사용자 정의 인증서를 지원합니다" #: install.sh:2886 msgid "如需使用自定义证书, 请按如下步骤:" msgstr "사용자 정의 인증서를 사용하려면 다음 단계를 따르십시오" #: install.sh:2887 msgid "1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)" msgstr "1. 인증서 파일의 이름을 변경합니다: 개인 키(xray.key), 인증서(xray.crt)" #: install.sh:2888 msgid "2. 将重命名后的证书文件放入" msgstr "2. 이름이 변경된 인증서 파일을 넣으십시오" #: install.sh:2888 msgid "目录后再运行脚本" msgstr "목록 뒤에 스크립트를 실행합니다" #: install.sh:2889 msgid "3. 重新运行脚本" msgstr "3. 스크립트를 다시 실행합니다" #: install.sh:2890 install.sh:3334 msgid "是否继续" msgstr "계속할 것인지" #: install.sh:2898 msgid "所有证书文件均已存在, 是否保留" msgstr "모든 인증서 파일이 이미 존재합니다. 유지하시겠습니까" #: install.sh:2904 install.sh:2919 install.sh:2935 file_manager.sh:176 msgid "已删除" msgstr "삭제됨" #: install.sh:2910 install.sh:2925 install.sh:2942 msgid "证书应用" msgstr "인증서 응용" #: install.sh:2914 msgid "证书文件已存在, 是否保留" msgstr "인증서 파일이 이미 존재합니다. 유지하시겠습니까" #: install.sh:2930 msgid "证书签发残留文件已存在, 是否保留" msgstr "인증서 발급 잔류 파일이 이미 존재합니다. 유지하시겠습니까" #: install.sh:2972 install.sh:4219 msgid "添加" msgstr "추가" #: install.sh:2980 msgid "请选择支持的 TLS 版本" msgstr "지원되는 tls 버전을 선택하세요" #: install.sh:2981 msgid "建议选择 TLSv1.3 only (安全模式)" msgstr "tlsv1.3 전용(보안 모드)을 선택하는 것을 권장합니다" #: install.sh:2982 install.sh:2998 msgid "兼容模式" msgstr "호환 모드" #: install.sh:2983 msgid "安全模式" msgstr "안전 모드" #: install.sh:2987 msgid "由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)" msgstr "h3는 tlsv1.3만 지원하므로 tlsv1.3 전용(보안 모드)만 지원합니다" #: install.sh:2991 install.sh:3003 install.sh:3006 msgid "已切换至" msgstr "이미 전환됨" #: install.sh:2995 msgid "请选择 TLS 版本" msgstr "tls 버전을 선택하세요" #: install.sh:2996 msgid "建议选择 TLSv1.3 (安全模式)" msgstr "tlsv1.3(보안 모드)를 선택하는 것을 권장합니다" #: install.sh:3009 msgid "当前模式不支持" msgstr "현재 모드는 지원되지 않습니다" #: install.sh:3016 msgid "Nginx配置文件不存在 或 当前模式不支持" msgstr "nginx 구성 파일이 존재하지 않거나 현재 모드가 지원되지 않습니다" #: install.sh:3130 msgid "此模式不支持修改" msgstr "이 모드는 수정을 지원하지 않습니다" #: install.sh:3139 msgid "即将显示用户, 一次仅能显示一个" msgstr "사용자가 곧 표시됩니다. 한 번에 하나만 표시할 수 있습니다" #: install.sh:3141 msgid "请选择显示用户使用的协议" msgstr "사용자가 사용한 프로토콜을 선택해 주세요" #: install.sh:3151 msgid "请选择要显示的用户编号" msgstr "표시할 사용자 번호를 선택하세요" #: install.sh:3156 install.sh:3166 install.sh:3270 install.sh:3292 msgid "选择错误" msgstr "선택 오류" #: install.sh:3159 msgid "请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户" msgstr "메인 메뉴에서 [xray 구성 정보 보기]를 직접 선택하여 메인 사용자를 표시하십시오" #: install.sh:3169 install.sh:3295 msgid "请先检测 Xray 是否正确安装" msgstr "먼저 xray가 올바르게 설치되었는지 확인해 주십시오" #: install.sh:3187 msgid "是否继续显示用户" msgstr "사용자를 계속 표시할지 여부" #: install.sh:3196 install.sh:3298 msgid "此模式不支持删除用户" msgstr "이 모드는 사용자 삭제를 지원하지 않습니다" #: install.sh:3206 msgid "即将添加用户, 一次仅能添加一个" msgstr "사용자를 추가할 예정이며, 한 번에 하나씩만 추가할 수 있습니다" #: install.sh:3208 msgid "请选择添加用户使用的协议" msgstr "사용자 추가 시 사용할 프로토콜을 선택하세요" #: install.sh:3230 msgid "添加用户" msgstr "사용자 추가" #: install.sh:3235 msgid "是否继续添加用户" msgstr "사용자를 계속 추가하시겠습니까" #: install.sh:3244 msgid "此模式不支持添加用户" msgstr "이 모드는 사용자 추가를 지원하지 않습니다" #: install.sh:3253 msgid "即将删除用户, 一次仅能删除一个" msgstr "사용자를 삭제할 예정이며, 한 번에 하나만 삭제할 수 있습니다" #: install.sh:3255 msgid "请选择删除用户使用的协议" msgstr "사용자 삭제에 사용할 프로토콜을 선택하세요" #: install.sh:3265 msgid "请选择要删除的用户编号" msgstr "삭제할 사용자 번호를 선택해 주세요" #: install.sh:3274 msgid "主用户无法删除" msgstr "주 사용자는 삭제할 수 없습니다" #: install.sh:3280 msgid "删除用户" msgstr "사용자 삭제" #: install.sh:3283 msgid "是否继续删除用户" msgstr "사용자를 계속 삭제하시겠습니까" #: install.sh:3305 install.sh:3309 msgid "文件不存在" msgstr "파일이 존재하지 않습니다" #: install.sh:3316 msgid "已配置 Xray 流量统计" msgstr "xray 트래픽 통계가 이미 구성되었습니다" #: install.sh:3317 msgid "是否需要关闭此功能" msgstr "이 기능을 종료할 필요가 있습니까" #: install.sh:3323 msgid "关闭 Xray 流量统计" msgstr "xray 트래픽 통계 끄기" #: install.sh:3332 msgid "流量统计需要使用" msgstr "트래픽 통계 사용 필요" #: install.sh:3333 msgid "可能会影响 Xray 性能" msgstr "x레이 성능에 영향을 줄 수 있습니다" #: install.sh:3344 msgid "设置 Xray 流量统计" msgstr "xray 트래픽 통계 설정" #: install.sh:3374 install.sh:3394 msgid "已卸载" msgstr "제거됨" #: install.sh:3378 msgid "是否卸载" msgstr "제거할까요" #: install.sh:3382 msgid "已取消卸载" msgstr "설치 제거가 취소되었습니다" #: install.sh:3405 msgid "是否删除所有脚本文件" msgstr "모든 스크립트 파일을 삭제하시겠습니까" #: install.sh:3412 msgid "已删除所有文件" msgstr "모든 파일을 삭제했습니다" #: install.sh:3413 msgid "ヾ( ̄▽ ̄) 拜拜~" msgstr "( ̄▽ ̄) 안녕~" #: install.sh:3418 msgid "已保留脚本文件 (包含 SSL 证书等)" msgstr "스크립트 파일(ssl 인증서 등 포함)이 보존되었습니다" #: install.sh:3422 msgid "是否保留配置文件" msgstr "구성 파일을 유지할까요" #: install.sh:3439 msgid "已清空证书遗留文件" msgstr "인증서 잔여 파일을 이미 삭제했습니다" #: install.sh:3469 msgid "秒后" msgstr "초 후" #: install.sh:3669 msgid "检测最新版本失败" msgstr "최신 버전 검사 실패" #: install.sh:3677 install.sh:3917 msgid "新版本" msgstr "새 버전" #: install.sh:3677 install.sh:3917 msgid "更新内容" msgstr "업데이트 내용" #: install.sh:3681 msgid "存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新" msgstr "새로운 버전이 존재하지만, 버전 간의 차이가 크므로 호환되지 않을 가능성이 있습니다. 업데이트하시겠습니까" #: install.sh:3684 msgid "存在新版本, 是否更新" msgstr "새 버전이 존재합니다. 업데이트하시겠습니까" #: install.sh:3688 msgid "检测 脚本 最新版本失败" msgstr "스크립트 최신 버전 검사 실패" #: install.sh:3689 msgid "脚本 版本差别过大, 跳过更新" msgstr "스크립트 버전 차이가 너무 커서 업데이트를 건너뜁니다" #: install.sh:3697 install.sh:3698 msgid "脚本更新失败" msgstr "스크립트 업데이트 실패" #: install.sh:3704 msgid "更新完成" msgstr "업데이트 완료" #: install.sh:3705 install.sh:3929 msgid "脚本版本变化较大, 若服务无法正常运行请卸载后重装" msgstr "스크립트 버전이 크게 변경되었으니, 서비스가 정상적으로 작동하지 않을 경우 삭제 후 다시 설치해 주십시오" #: install.sh:3714 msgid "当前版本为最新版本" msgstr "현재 버전은 최신 버전입니다" #: install.sh:3727 install.sh:3912 install.sh:3927 install.sh:3940 msgid "下载最新脚本" msgstr "최신 스크립트 다운로드" #: install.sh:3741 msgid "该选项暂时无法使用" msgstr "해당 옵션은 일시적으로 사용할 수 없습니다" #: install.sh:3760 install.sh:4286 msgid "此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装" msgstr "이 모드는 로드 밸런싱에 권장되며, 일반적으로 사용하지 않는 것이 좋습니다. 설치하시겠습니까" #: install.sh:3773 install.sh:4300 msgid "此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装" msgstr "이 모드는 트래픽 중계에만 사용되며, 다른 상황에서는 사용하지 않는 것이 좋습니다. 설치하시겠습니까" #: install.sh:3876 install.sh:3877 install.sh:3887 install.sh:3891 #: install.sh:3895 install.sh:4211 install.sh:4212 install.sh:4213 #: install.sh:4214 install.sh:4215 install.sh:4216 install.sh:4314 #: install.sh:4319 install.sh:4324 install.sh:4329 msgid "变更" msgstr "변경" #: install.sh:3876 install.sh:4215 msgid "负载均衡配置" msgstr "로드 밸런싱 구성" #: install.sh:3879 msgid "清除日志文件" msgstr "로그 파일 삭제" #: install.sh:3880 msgid "查看证书状态" msgstr "인증서 상태 보기" #: install.sh:3881 msgid "更新证书有效期" msgstr "인증서 유효기간 갱신" #: install.sh:3882 msgid "设置证书自动更新" msgstr "인증서 자동 갱신 설정" #: install.sh:3883 msgid "设置 Fail2ban 防暴力破解" msgstr "fail2ban 폭력적 해킹 공격 방지 설정" #: install.sh:3884 msgid "显示帮助" msgstr "도움 표시" #: install.sh:3885 msgid "修改语言" msgstr "언어 수정" #: install.sh:3888 install.sh:4218 install.sh:4222 install.sh:4223 #: install.sh:4224 install.sh:4225 install.sh:4230 install.sh:4232 #: fail2ban_manager.sh:15 msgid "查看" msgstr "보기" #: install.sh:3888 install.sh:4225 msgid "实时流量" msgstr "실시간 트래픽" #: install.sh:3889 msgid "脚本卸载" msgstr "스크립트 제거" #: install.sh:3890 msgid "显示安装信息" msgstr "설치 정보 표시" #: install.sh:3892 install.sh:4237 msgid "加速" msgstr "가속" #: install.sh:3894 msgid "更新脚本" msgstr "스크립트 업데이트" #: install.sh:3896 install.sh:3897 msgid "显示" msgstr "표시" #: install.sh:3896 msgid "访问信息" msgstr "정보 방문" #: install.sh:3897 msgid "错误信息" msgstr "오류 정보" #: install.sh:3921 msgid "脚本版本变化较大, 可能存在不兼容情况, 是否继续使用" msgstr "스크립트 버전이 크게 변경되어 호환되지 않을 가능성이 있습니다. 계속 사용하시겠습니까" #: install.sh:3948 msgid "检测失败" msgstr "검사 실패" #: install.sh:3952 install.sh:3962 install.sh:3971 msgid "有新版" msgstr "새 버전이 있습니다" #: install.sh:3955 install.sh:3964 install.sh:3974 msgid "最新版" msgstr "최신 버전" #: install.sh:3969 msgid "版本未知" msgstr "버전 알 수 없음" #: install.sh:3989 install.sh:3996 msgid "运行中" msgstr "실행 중" #: install.sh:3991 install.sh:4014 install.sh:4016 msgid "无需测试" msgstr "테스트할 필요 없음" #: install.sh:3993 install.sh:3998 msgid "未运行" msgstr "실행되지 않음" #: install.sh:4008 msgid "无法连通" msgstr "연결할 수 없음" #: install.sh:4010 install.sh:4011 install.sh:4012 msgid "本地正常" msgstr "현지 정상" #: install.sh:4027 msgid "脚本维护中.. 请稍后再试" msgstr "스크립트를 유지 보수 중입니다. 잠시 후 다시 시도해 주세요" #: install.sh:4034 msgid "无法检测所需依赖的在线版本, 请稍后再试" msgstr "필요한 종속 항목의 온라인 버전을 검출할 수 없습니다. 잠시 후 다시 시도해 주십시오" #: install.sh:4051 msgid "请输入数字" msgstr "숫자를 입력하세요" #: install.sh:4051 msgid "请输入 1 到 6 之间的有效数字" msgstr "1에서 6 사이의 유효한 숫자를 입력하세요" #: install.sh:4081 msgid "无效的选择" msgstr "무효한 선택" #: install.sh:4122 msgid "请输入备份名称" msgstr "백업 이름을 입력하세요" #: install.sh:4122 msgid "不需要后缀" msgstr "접미사가 필요하지 않다" #: install.sh:4131 msgid "报错信息" msgstr "오류 정보" #: install.sh:4133 msgid "备份完整性可能受到影响, 请检查上述错误信息" msgstr "백업의 완전성이 영향을 받을 수 있으니, 위의 오류 메시지를 확인해 주십시오" #: install.sh:4137 msgid "备份失败" msgstr "백업 실패" #: install.sh:4139 msgid "备份成功" msgstr "백업 성공" #: install.sh:4144 msgid "请确保备份文件在目录" msgstr "백업 파일이 디렉토리에 있는지 확인해 주십시오" #: install.sh:4148 msgid "没有找到备份文件" msgstr "백업 파일을 찾지 못했습니다" #: install.sh:4153 msgid "发现多个备份文件" msgstr "여러 개의 백업 파일을 발견했습니다" #: install.sh:4153 msgid "将使用最新的文件进行恢复" msgstr "최신 파일을 사용하여 복구합니다" #: install.sh:4157 msgid "找到最新备份文件" msgstr "최신 백업 파일 찾기" #: install.sh:4159 msgid "恢复备份" msgstr "백업 복구" #: install.sh:4163 msgid "恢复成功" msgstr "복구 성공" #: install.sh:4164 install.sh:4166 msgid "记得安装" msgstr "설치 기억하기" #: install.sh:4169 msgid "恢复失败" msgstr "복구 실패" #: install.sh:4175 msgid "安装管理脚本" msgstr "관리 스크립트 설치" #: install.sh:4176 msgid "作者" msgstr "저자" #: install.sh:4180 msgid "当前模式" msgstr "현재 모드" #: install.sh:4181 msgid "当前语言" msgstr "현재 언어" #: install.sh:4184 msgid "可以使用" msgstr "사용할 수 있습니다" #: install.sh:4184 msgid "命令管理脚本" msgstr "명령 관리 스크립트" #: install.sh:4186 msgid "版本检测" msgstr "버전 검사" #: install.sh:4187 install.sh:4195 install.sh:4246 msgid "脚本" msgstr "스크립트" #: install.sh:4190 msgid "运行状态" msgstr "운영 상태" #: install.sh:4193 msgid "连通性" msgstr "연결성" #: install.sh:4194 msgid "更新向导" msgstr "업데이트 마법사" #: install.sh:4205 msgid "安装向导" msgstr "설치 마법사" #: install.sh:4210 msgid "配置变更" msgstr "구성 변경" #: install.sh:4217 msgid "用户管理" msgstr "사용자 관리" #: install.sh:4218 install.sh:4219 install.sh:4220 msgid "用户" msgstr "사용자" #: install.sh:4221 msgid "查看信息" msgstr "정보 보기" #: install.sh:4222 msgid "实时访问日志" msgstr "실시간 접근 로그" #: install.sh:4223 msgid "实时错误日志" msgstr "실시간 오류 로그" #: install.sh:4226 msgid "服务相关" msgstr "서비스 관련" #: install.sh:4227 install.sh:4228 install.sh:4229 install.sh:4230 msgid "所有服务" msgstr "모든 서비스" #: install.sh:4231 msgid "证书相关" msgstr "증명서 관련" #: install.sh:4232 msgid "证书状态" msgstr "인증서 상태" #: install.sh:4233 msgid "证书有效期" msgstr "인증서 유효기간" #: install.sh:4234 msgid "证书自动更新" msgstr "인증서 자동 갱신" #: install.sh:4235 msgid "其他选项" msgstr "기타 옵션" #: install.sh:4236 msgid "自动更新" msgstr "자동 업데이트" #: install.sh:4238 msgid "防暴力破解" msgstr "폭력적 해킹 방지" #: install.sh:4239 msgid "流量统计" msgstr "트래픽 통계" #: install.sh:4240 msgid "清除" msgstr "제거" #: install.sh:4240 msgid "日志文件" msgstr "로그 파일" #: install.sh:4241 msgid "测试" msgstr "테스트" #: install.sh:4241 msgid "服务器网速" msgstr "서버 속도" #: install.sh:4242 msgid "备份恢复" msgstr "백업 복구" #: install.sh:4243 install.sh:4244 msgid "全部文件" msgstr "전체 파일" #: install.sh:4244 msgid "恢复" msgstr "복구" #: install.sh:4245 msgid "卸载向导" msgstr "제거 마법사" #: install.sh:4246 fail2ban_manager.sh:14 fail2ban_manager.sh:415 msgid "卸载" msgstr "제거" #: install.sh:4247 msgid "清空" msgstr "비우다" #: install.sh:4247 msgid "证书文件" msgstr "인증서 파일" #: install.sh:4248 fail2ban_manager.sh:16 file_manager.sh:208 msgid "退出" msgstr "퇴출" #: install.sh:4251 msgid "请输入选项" msgstr "옵션을 입력하세요" #: install.sh:4259 install.sh:4268 install.sh:4334 install.sh:4340 #: install.sh:4385 install.sh:4391 install.sh:4397 install.sh:4426 #: install.sh:4467 install.sh:4474 install.sh:4479 fail2ban_manager.sh:416 msgid "清空屏幕" msgstr "화면을 비우다" #: install.sh:4265 msgid "不建议" msgstr "추천하지 않음" #: install.sh:4265 msgid "频繁更新 Nginx, 请确认 Nginx 有更新的必要" msgstr "nginx를 자주 업데이트하십시오. nginx에 업데이트가 필요한지 확인해 주세요" #: install.sh:4266 msgid "开始更新" msgstr "업데이트를 시작합니다" #: install.sh:4346 install.sh:4353 install.sh:4360 install.sh:4410 #: install.sh:4415 install.sh:4420 install.sh:4442 msgid "回到菜单" msgstr "메뉴로 돌아가기" #: fail2ban_manager.sh:10 msgid "用于防止暴力破解" msgstr "폭력적 해킹을 방지하기 위해" #: fail2ban_manager.sh:11 file_manager.sh:203 msgid "主菜单" msgstr "메인 메뉴" #: fail2ban_manager.sh:13 msgid "管理" msgstr "관리" #: fail2ban_manager.sh:15 fail2ban_manager.sh:339 msgid "状态" msgstr "상태" #: fail2ban_manager.sh:18 file_manager.sh:210 msgid "请选择一个选项" msgstr "옵션 하나를 선택하세요" #: fail2ban_manager.sh:27 fail2ban_manager.sh:250 fail2ban_manager.sh:258 #: fail2ban_manager.sh:363 msgid "无效的选择, 请重试" msgstr "유효하지 않은 선택입니다. 다시 시도해 주세요" #: fail2ban_manager.sh:35 msgid "已经安装, 跳过安装步骤" msgstr "이미 설치되어 있습니다. 설치 단계를 건너뜁니다" #: fail2ban_manager.sh:68 msgid "systemd 无法读取 SSH 日志" msgstr "systemd가 ssh 로그를 읽을 수 없습니다" #: fail2ban_manager.sh:69 msgid "跳过启用" msgstr "활성화 건너뛰기" #: fail2ban_manager.sh:69 fail2ban_manager.sh:93 fail2ban_manager.sh:103 #: fail2ban_manager.sh:120 fail2ban_manager.sh:125 fail2ban_manager.sh:128 #: fail2ban_manager.sh:146 fail2ban_manager.sh:151 fail2ban_manager.sh:154 msgid "规则" msgstr "규칙" #: fail2ban_manager.sh:77 fail2ban_manager.sh:203 fail2ban_manager.sh:440 msgid "未安装, 请先安装" msgstr "설치되지 않았습니다. 먼저 설치해 주세요" #: fail2ban_manager.sh:125 fail2ban_manager.sh:151 fail2ban_manager.sh:349 msgid "已禁用" msgstr "비활성화됨" #: fail2ban_manager.sh:209 msgid "请选择" msgstr "선택하세요" #: fail2ban_manager.sh:209 msgid "操作" msgstr "작업" #: fail2ban_manager.sh:210 msgid "管理模块" msgstr "관리 모듈" #: fail2ban_manager.sh:211 msgid "添加自定义规则" msgstr "사용자 정의 규칙 추가" #: fail2ban_manager.sh:212 fail2ban_manager.sh:228 msgid "服务管理" msgstr "서비스 관리" #: fail2ban_manager.sh:271 msgid "请输入新的" msgstr "새로운 것을 입력하세요" #: fail2ban_manager.sh:271 fail2ban_manager.sh:272 msgid "名称" msgstr "이름" #: fail2ban_manager.sh:273 msgid "请输入日志路径" msgstr "로그 경로를 입력하세요" #: fail2ban_manager.sh:274 msgid "请输入最大重试次数" msgstr "최대 재시도 횟수를 입력하세요" #: fail2ban_manager.sh:274 msgid "最大重试次数必须在 1 到 99 之间" msgstr "최대 재시도 횟수는 1에서 99 사이여야 합니다" #: fail2ban_manager.sh:275 msgid "请输入封禁时间" msgstr "금지 시간을 입력하세요" #: fail2ban_manager.sh:275 msgid "秒" msgstr "초" #: fail2ban_manager.sh:275 msgid "封禁时间必须在 1 到 8640000 秒之间" msgstr "봉쇄 시간은 1초에서 8640000초 사이여야 합니다" #: fail2ban_manager.sh:285 msgid "自定义规则添加成功" msgstr "사용자 정의 규칙 추가 성공" #: fail2ban_manager.sh:289 msgid "重启以应用新规则" msgstr "새로운 규칙을 적용하려면 다시 시작하세요" #: fail2ban_manager.sh:294 msgid "管理 Fail2ban 模块" msgstr "fail2ban 모듈 관리하기" #: fail2ban_manager.sh:311 msgid "未找到任何模块化配置文件" msgstr "모듈형 구성 파일을 찾을 수 없습니다" #: fail2ban_manager.sh:319 fail2ban_manager.sh:339 msgid "模块名称" msgstr "모듈 이름" #: fail2ban_manager.sh:339 file_manager.sh:59 msgid "序号" msgstr "순번" #: fail2ban_manager.sh:363 msgid "请选择要管理的模块" msgstr "관리할 모듈을 선택하세요" #: fail2ban_manager.sh:375 msgid "启用" msgstr "활성화" #: fail2ban_manager.sh:375 msgid "禁用" msgstr "비활성화" #: fail2ban_manager.sh:378 msgid "是否" msgstr "그것이…" #: fail2ban_manager.sh:378 fail2ban_manager.sh:386 msgid "模块" msgstr "모듈" #: fail2ban_manager.sh:388 msgid "操作已取消" msgstr "작업이 취소되었습니다" #: fail2ban_manager.sh:424 msgid "停止成功" msgstr "정지 성공" #: fail2ban_manager.sh:444 msgid "总体状态" msgstr "전체 상태" #: fail2ban_manager.sh:448 msgid "默认启用的 Jail 状态" msgstr "기본적으로 활성화된 jail 상태" #: fail2ban_manager.sh:452 fail2ban_manager.sh:458 msgid "封锁情况" msgstr "봉쇄 상황" #: fail2ban_manager.sh:453 fail2ban_manager.sh:459 fail2ban_manager.sh:462 #: fail2ban_manager.sh:466 fail2ban_manager.sh:469 msgid "未启用或配置异常" msgstr "미사용 또는 구성 이상" #: fail2ban_manager.sh:484 file_manager.sh:232 msgid "新版本可用" msgstr "새 버전 사용 가능" #: fail2ban_manager.sh:484 file_manager.sh:232 msgid "当前版本" msgstr "현재 버전" #: fail2ban_manager.sh:485 file_manager.sh:233 msgid "请访问" msgstr "방문해 주세요" #: fail2ban_manager.sh:485 file_manager.sh:233 msgid "查看更新说明" msgstr "업데이트 설명 보기" #: fail2ban_manager.sh:487 file_manager.sh:235 msgid "是否下载并安装新版本" msgstr "새 버전을 다운로드하고 설치하시겠습니까" #: fail2ban_manager.sh:491 file_manager.sh:239 msgid "正在下载新版本" msgstr "새 버전을 다운로드 중입니다" #: fail2ban_manager.sh:496 file_manager.sh:244 msgid "下载完成, 请重新运行脚本" msgstr "다운로드가 완료되었습니다. 스크립트를 다시 실행해 주세요" #: fail2ban_manager.sh:504 file_manager.sh:252 msgid "跳过更新" msgstr "업데이트 건너뛰기" #: fail2ban_manager.sh:508 file_manager.sh:256 msgid "当前已经是最新版本" msgstr "현재 이미 최신 버전입니다" #: file_manager.sh:7 msgid "用法" msgstr "사용법" #: file_manager.sh:7 msgid "文件扩展名" msgstr "파일 확장명" #: file_manager.sh:7 msgid "目录路径" msgstr "디렉토리 경로" #: file_manager.sh:16 msgid "目录" msgstr "목차" #: file_manager.sh:16 msgid "不存在, 请检查路径" msgstr "존재하지 않습니다. 경로를 확인해 주십시오" #: file_manager.sh:26 file_manager.sh:204 msgid "列出所有" msgstr "모두 나열하기" #: file_manager.sh:26 file_manager.sh:35 file_manager.sh:88 file_manager.sh:111 #: file_manager.sh:160 file_manager.sh:176 file_manager.sh:204 #: file_manager.sh:205 file_manager.sh:206 file_manager.sh:207 msgid "文件" msgstr "파일" #: file_manager.sh:53 msgid "文件名" msgstr "파일명" #: file_manager.sh:79 msgid "请输入网址 (例如 hey.run)" msgstr "url을 입력하세요 (예: hey.run)" #: file_manager.sh:80 msgid "不要包含 http:// 或 https:// 开头" msgstr "http:// 또는 https://로 시작하지 않도록 하세요" #: file_manager.sh:84 msgid "网址不能包含 http:// 或 https:// 前缀" msgstr "웹주소에는 http:// 또는 https:// 접두어를 포함할 수 없습니다" #: file_manager.sh:88 file_manager.sh:111 msgid "已创建" msgstr "생성됨" #: file_manager.sh:99 msgid "请输入主机" msgstr "호스트를 입력하세요" #: file_manager.sh:107 msgid "请输入权重" msgstr "가중치를 입력하세요" #: file_manager.sh:128 msgid "追加完成" msgstr "추가 완료" #: file_manager.sh:132 file_manager.sh:136 msgid "重启完成" msgstr "재부팅 완료" #: file_manager.sh:151 msgid "请输入要编辑的文件编号" msgstr "편집할 파일 번호를 입력하세요" #: file_manager.sh:156 msgid "未安装, 正在尝试安装" msgstr "설치되지 않음, 설치 중" #: file_manager.sh:160 msgid "已编辑" msgstr "편집 완료" #: file_manager.sh:171 msgid "请输入要删除的文件编号" msgstr "삭제할 파일 번호를 입력하세요" #: file_manager.sh:194 msgid "不支持的文件扩展名" msgstr "지원되지 않는 파일 확장자" #: file_manager.sh:205 msgid "创建一个新的" msgstr "새로운 것을 생성하다" #: file_manager.sh:206 msgid "编辑一个已存在的" msgstr "기존의 것을 편집하다" #: file_manager.sh:207 msgid "删除一个已存在的" msgstr "기존의 것을 삭제합니다" #: file_manager.sh:265 msgid "重启成功" msgstr "재부팅 성공" #: file_manager.sh:268 msgid "重启失败" msgstr "재부팅 실패" #: file_manager.sh:268 msgid "请检查配置文件是否有误" msgstr "구성 파일에 오류가 없는지 확인해 주십시오" ================================================ FILE: po/ru.po ================================================ # Russian translations for xray_install package. # Copyright (C) 2026 yunshu # This file is distributed under the same license as the xray_install package. # Automatically generated, 2026. # msgid "" msgstr "" "Project-Id-Version: xray_install 1.0\n" "Report-Msgid-Bugs-To: https://github.com/hello-yunshu/Xray_bash_onekey/" "issues\n" "POT-Creation-Date: 2026-04-24 09:47+0000\n" "PO-Revision-Date: 2026-04-24 09:47+0000\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: install.sh:32 msgid "信息" msgstr "информация" #: install.sh:34 msgid "错误" msgstr "ошибка" #: install.sh:35 msgid "警告" msgstr "предупреждение" #: install.sh:38 install.sh:1540 install.sh:3960 install.sh:3977 #: install.sh:3980 install.sh:3981 install.sh:4019 msgid "未安装" msgstr "не установлен" #: install.sh:99 msgid "日志文件归档失败" msgstr "не удалось архивировать файл журнала" #: install.sh:104 msgid "日志文件清空失败" msgstr "не удалось очистить файл журнала" #: install.sh:108 msgid "日志文件已轮转并归档为" msgstr "файл журнала был переключен и архивирован как" #: install.sh:134 install.sh:138 install.sh:142 install.sh:152 msgid "当前系统为" msgstr "текущая система —" #: install.sh:152 msgid "不在支持的系统列表内, 安装中断" msgstr "не входит в список поддерживаемых систем, установка прервана" #: install.sh:159 msgid "当前用户是 root 用户, 开始安装" msgstr "текущий пользователь — root, начать установку" #: install.sh:161 msgid "当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本" msgstr "текущий пользователь не является пользователем root. переключитесь на пользователя root и запустите скрипт снова" #: install.sh:187 msgid "无法获取远程语言文件信息" msgstr "не удалось получить информацию о языковых файлах удаленного сервера" #: install.sh:205 msgid "正在更新语言文件" msgstr "обновляется файл языка" #: install.sh:208 install.sh:291 msgid "语言文件更新失败" msgstr "сбой обновления языкового файла" #: install.sh:213 msgid "语言文件无效" msgstr "файл языка недействителен" #: install.sh:219 msgid "版本文件更新失败" msgstr "сбой обновления файла версии" #: install.sh:226 msgid "语言文件更新完成" msgstr "обновление языкового файла завершено" #: install.sh:231 install.sh:2725 msgid "正在安装" msgstr "устанавливается" #: install.sh:234 msgid "安装失败" msgstr "установка не удалась" #: install.sh:234 install.sh:258 install.sh:281 install.sh:291 msgid "将使用默认语言" msgstr "будет использован язык по умолчанию" #: install.sh:258 file_manager.sh:35 msgid "未找到" msgstr "не найдено" #: install.sh:281 msgid "不支持的语言" msgstr "язык, который не поддерживается" #: install.sh:297 msgid "发现语言文件更新" msgstr "обнаружено обновление языкового файла" #: install.sh:312 install.sh:1740 msgid "完成" msgstr "завершить" #: install.sh:315 msgid "失败" msgstr "неудача" #: install.sh:322 msgid "在线版本检测失败, 请稍后再试" msgstr "не удалось проверить онлайн-версию, попробуйте позже" #: install.sh:344 install.sh:352 install.sh:1162 install.sh:3872 #: install.sh:3873 install.sh:3874 install.sh:3875 install.sh:4206 #: install.sh:4207 install.sh:4208 install.sh:4209 fail2ban_manager.sh:12 #: fail2ban_manager.sh:39 msgid "安装" msgstr "установка" #: install.sh:346 install.sh:354 install.sh:1169 install.sh:2729 #: install.sh:3969 msgid "已安装" msgstr "установлено" #: install.sh:371 install.sh:375 msgid "自启动配置" msgstr "конфигурация автозапуска" #: install.sh:384 msgid "链接库安装" msgstr "установка библиотеки ссылок" #: install.sh:389 msgid "值为空或超出范围, 请重新输入" msgstr "значение пустое или выходит за пределы допустимого диапазона, введите снова" #: install.sh:398 msgid "值为空, 请重新输入" msgstr "значение пустое, введите заново" #: install.sh:440 msgid "确定端口" msgstr "определить порт" #: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:104 msgid "请输入端口" msgstr "пожалуйста, введите порт" #: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:107 msgid "默认值" msgstr "значение по умолчанию" #: install.sh:441 install.sh:444 install.sh:532 install.sh:554 install.sh:3055 #: install.sh:3060 install.sh:3065 install.sh:3066 install.sh:3081 #: install.sh:3086 install.sh:3091 install.sh:3092 msgid "请输入 0-65535 之间的值" msgstr "пожалуйста, введите значение от 0 до 65535" #: install.sh:443 msgid "端口不允许使用, 请重新输入" msgstr "порт недоступен, введите снова" #: install.sh:452 msgid "请选择安装协议" msgstr "пожалуйста, выберите соглашение об установке" #: install.sh:453 install.sh:1617 install.sh:1654 install.sh:1705 #: install.sh:2997 install.sh:3142 install.sh:3209 install.sh:3256 #: fail2ban_manager.sh:274 fail2ban_manager.sh:275 msgid "默认" msgstr "по умолчанию" #: install.sh:457 install.sh:532 install.sh:554 install.sh:635 install.sh:668 #: install.sh:821 install.sh:840 install.sh:881 install.sh:922 install.sh:1621 #: install.sh:1634 install.sh:1656 install.sh:1709 install.sh:1719 #: install.sh:2985 install.sh:3000 install.sh:3055 install.sh:3060 #: install.sh:3065 install.sh:3066 install.sh:3081 install.sh:3086 #: install.sh:3091 install.sh:3092 install.sh:3145 install.sh:3154 #: install.sh:3212 install.sh:3259 install.sh:3268 fail2ban_manager.sh:215 #: fail2ban_manager.sh:234 fail2ban_manager.sh:272 file_manager.sh:81 msgid "请输入" msgstr "пожалуйста, введите" #: install.sh:457 install.sh:922 install.sh:1621 install.sh:1656 #: install.sh:1709 install.sh:2985 install.sh:3000 install.sh:3145 #: install.sh:3212 install.sh:3259 install.sh:4251 install.sh:4489 msgid "请输入有效的数字" msgstr "пожалуйста, введите действительное число" #: install.sh:478 msgid "是否添加简单 ws/gRPC 协议 用于负载均衡" msgstr "добавить ли простой протокол ws/grpc для балансировки нагрузки" #: install.sh:479 install.sh:1259 msgid "如不清楚具体用途, 请勿选择" msgstr "если неясно конкретное назначение, пожалуйста, не выбирайте" #: install.sh:499 msgid "已跳过添加简单 ws/gRPC 协议" msgstr "пропущено добавление простых протоколов ws/grpc" #: install.sh:528 install.sh:550 install.sh:631 install.sh:648 install.sh:664 #: install.sh:681 install.sh:696 install.sh:815 install.sh:836 install.sh:877 msgid "是否需要自定义" msgstr "требуется ли настройка" #: install.sh:532 install.sh:554 msgid "请勿与其他端口相同" msgstr "не используйте тот же порт, что и другие" #: install.sh:571 file_manager.sh:114 msgid "是否需要设置防火墙" msgstr "нужно ли устанавливать брандмауэр" #: install.sh:611 install.sh:615 file_manager.sh:128 file_manager.sh:132 #: file_manager.sh:136 msgid "防火墙" msgstr "брандмауэр" #: install.sh:611 install.sh:615 install.sh:2215 install.sh:2218 #: install.sh:3012 install.sh:3014 install.sh:4227 fail2ban_manager.sh:231 #: fail2ban_manager.sh:432 msgid "重启" msgstr "перезапуск" #: install.sh:617 msgid "开放防火墙相关端口" msgstr "открыть соответствующие порты брандмауэра" #: install.sh:618 msgid "若修改配置, 请注意关闭防火墙相关端口" msgstr "если изменяете настройки, обратите внимание на закрытие соответствующих портов брандмауэра" #: install.sh:619 install.sh:3877 install.sh:3892 install.sh:3893 #: install.sh:4216 install.sh:4236 fail2ban_manager.sh:161 msgid "配置" msgstr "конфигурация" #: install.sh:622 file_manager.sh:140 msgid "跳过防火墙设置" msgstr "пропустить настройку брандмауэра" #: install.sh:631 install.sh:635 install.sh:636 install.sh:640 install.sh:648 #: install.sh:664 install.sh:668 install.sh:669 install.sh:673 install.sh:681 #: install.sh:1101 msgid "伪装路径" msgstr "путь маскировки" #: install.sh:635 install.sh:668 msgid "不需要" msgstr "не нужно" #: install.sh:696 install.sh:706 install.sh:3172 msgid "用户名" msgstr "имя пользователя" #: install.sh:700 msgid "请输入正确的 email" msgstr "пожалуйста, введите правильный адрес электронной почты" #: install.sh:713 msgid "是否需要自定义字符串映射" msgstr "требуется ли пользовательское сопоставление строк" #: install.sh:717 msgid "请输入自定义字符串" msgstr "пожалуйста, введите пользовательскую строку" #: install.sh:717 msgid "最多30字符" msgstr "максимум 30 символов" #: install.sh:719 msgid "自定义字符串" msgstr "пользовательская строка" #: install.sh:726 install.sh:2836 install.sh:3895 install.sh:4211 #: install.sh:4314 msgid "映射字符串" msgstr "сопоставление строки" #: install.sh:737 msgid "检测到 target 域名已配置, 是否保留" msgstr "обнаружено, что домен target уже настроен. сохранить" #: install.sh:757 msgid "请输入一个域名" msgstr "пожалуйста, введите доменное имя" #: install.sh:758 msgid "域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用" msgstr "доменное имя должно поддерживать tlsv1.3, x25519 и h2, а также не использовать перенаправления" #: install.sh:759 msgid "确认域名符合要求后请输入" msgstr "после подтверждения соответствия доменного имени требованиям, введите" #: install.sh:760 msgid "正在检测域名请等待" msgstr "проверка домена, пожалуйста, подождите" #: install.sh:767 install.sh:772 install.sh:777 msgid "该域名不支持" msgstr "данный домен не поддерживается" #: install.sh:782 msgid "该域名发生了跳转" msgstr "это доменное имя перенаправляется" #: install.sh:789 msgid "该域名可能不满足所有要求" msgstr "данный домен может не соответствовать всем требованиям" #: install.sh:790 msgid "是否仍要设置此域名" msgstr "нужно ли все еще настраивать это доменное имя" #: install.sh:802 install.sh:807 install.sh:1619 msgid "域名" msgstr "доменное имя" #: install.sh:802 msgid "满足所有要求" msgstr "удовлетворить все требования" #: install.sh:815 msgid "域名的" msgstr "домена" #: install.sh:816 msgid "默认为" msgstr "по умолчанию" #: install.sh:816 msgid "域名本身" msgstr "само доменное имя" #: install.sh:817 install.sh:912 install.sh:952 msgid "如不清楚具体用途, 请勿继续" msgstr "если неясно конкретное назначение, не продолжайте" #: install.sh:898 msgid "本地文件 file_manager.sh 不存在, 正在下载" msgstr "локальный файл file_manager.sh не существует, идёт загрузка" #: install.sh:900 install.sh:2330 fail2ban_manager.sh:500 file_manager.sh:248 msgid "下载失败, 请手动下载并安装新版本" msgstr "скачивание не удалось, пожалуйста, скачайте и установите новую версию вручную" #: install.sh:911 install.sh:951 msgid "是否变更" msgstr "изменить ли" #: install.sh:911 msgid "负载均衡" msgstr "балансировка нагрузки" #: install.sh:917 msgid "请选择协议为 ws 或 gRPC" msgstr "выберите протокол ws или grpc" #: install.sh:920 fail2ban_manager.sh:213 fail2ban_manager.sh:232 #: fail2ban_manager.sh:325 fail2ban_manager.sh:357 msgid "返回" msgstr "вернуться" #: install.sh:930 file_manager.sh:220 msgid "无效选项, 请重试" msgstr "недопустимый вариант, повторите попытку" #: install.sh:940 install.sh:964 install.sh:2266 install.sh:2304 #: install.sh:2320 msgid "当前模式不支持此操作" msgstr "текущий режим не поддерживает эту операцию" #: install.sh:953 msgid "配置用途可以参考文章" msgstr "конфигурацию использования можно найти в статье" #: install.sh:980 install.sh:991 install.sh:995 install.sh:999 install.sh:1011 #: install.sh:1016 install.sh:1020 install.sh:1025 install.sh:1045 #: install.sh:1051 install.sh:1101 install.sh:1120 install.sh:3893 #: install.sh:4177 msgid "修改" msgstr "изменить" #: install.sh:1053 install.sh:2816 install.sh:2818 install.sh:2820 #: install.sh:2821 install.sh:2824 install.sh:2828 install.sh:2830 #: install.sh:2832 install.sh:2833 install.sh:2861 install.sh:2864 #: install.sh:2867 install.sh:2869 install.sh:3049 msgid "端口" msgstr "порт" #: install.sh:1103 msgid "不支持" msgstr "не поддерживается" #: install.sh:1110 msgid "用户名修改" msgstr "изменение имени пользователя" #: install.sh:1113 install.sh:1123 msgid "请先删除多余的用户" msgstr "пожалуйста, сначала удалите лишних пользователей" #: install.sh:1131 install.sh:1139 install.sh:1146 install.sh:1990 #: install.sh:2061 install.sh:2146 install.sh:2154 install.sh:2163 #: install.sh:2186 msgid "配置修改" msgstr "изменение конфигурации" #: install.sh:1151 msgid "检测到 Xray 的权限控制, 启动修改程序" msgstr "обнаружено управление доступом xray, запуск программы модификации" #: install.sh:1156 msgid "修改完成" msgstr "изменение завершено" #: install.sh:1176 msgid "若更新无效, 建议直接卸载再安装" msgstr "если обновление неэффективно, рекомендуется полностью удалить приложение, а затем установить заново" #: install.sh:1177 msgid "部分新功能需要重新安装才可生效" msgstr "некоторые новые функции вступают в силу только после повторной установки" #: install.sh:1182 msgid "检测到存在最新版" msgstr "обнаружена новейшая версия" #: install.sh:1183 msgid "脚本可能未兼容此版本" msgstr "скрипт может быть несовместим с этой версией" #: install.sh:1184 msgid "是否更新" msgstr "обновить ли" #: install.sh:1188 install.sh:1213 install.sh:1532 install.sh:3886 #: install.sh:3898 install.sh:4195 install.sh:4196 install.sh:4197 #: install.sh:4233 msgid "更新" msgstr "обновление" #: install.sh:1192 install.sh:1494 msgid "启动失败" msgstr "запуск не удался" #: install.sh:1193 install.sh:1497 msgid "是否回滚到之前的版本" msgstr "вернуться ли к предыдущей версии" #: install.sh:1197 install.sh:1507 msgid "未执行回滚操作" msgstr "операция отката не выполнена" #: install.sh:1201 install.sh:1511 msgid "正在回滚" msgstr "возвращается к исходному состоянию" #: install.sh:1205 install.sh:1518 msgid "已成功回滚到之前的" msgstr "успешно отменено до предыдущего" #: install.sh:1205 install.sh:1518 install.sh:4214 install.sh:4329 msgid "版本" msgstr "версия" #: install.sh:1207 install.sh:1228 install.sh:1524 msgid "回滚失败" msgstr "откат не удался" #: install.sh:1234 install.sh:1238 msgid "重装" msgstr "переустановить" #: install.sh:1248 install.sh:1249 msgid "更新失败" msgstr "ошибка обновления" #: install.sh:1257 msgid "是否添加 Reality 负载均衡" msgstr "добавить ли балансировку нагрузки reality" #: install.sh:1258 msgid "使用此功能前,建议先阅读作者教程" msgstr "перед использованием этой функции рекомендуется сначала ознакомиться с учебным материалом автора" #: install.sh:1264 fail2ban_manager.sh:93 fail2ban_manager.sh:103 #: fail2ban_manager.sh:128 fail2ban_manager.sh:154 fail2ban_manager.sh:347 msgid "已启用" msgstr "уже включено" #: install.sh:1268 msgid "已跳过" msgstr "пропущено" #: install.sh:1277 msgid "Reality 协议有流量偷跑的风险" msgstr "протокол reality имеет риск утечки трафика" #: install.sh:1279 install.sh:1306 msgid "是否额外安装 nginx 前置保护" msgstr "устанавливать ли дополнительный защитный прокси nginx" #: install.sh:1279 msgid "推荐" msgstr "рекомендовать" #: install.sh:1286 install.sh:1321 msgid "检测到已安装" msgstr "обнаружено установленное" #: install.sh:1289 install.sh:1324 msgid "已跳过安装" msgstr "установка пропущена" #: install.sh:1303 msgid "检测到已开启 Reality 负载均衡" msgstr "обнаружено, что включен балансировщик нагрузки reality" #: install.sh:1304 msgid "如用作 Reality 负载均衡主服务器必须安装" msgstr "если используется в качестве основного сервера балансировки нагрузки reality, необходимо установить" #: install.sh:1305 msgid "如用作 Reality 负载均衡二级服务器则无需安装" msgstr "если используется в качестве вторичного сервера балансировки нагрузки reality, то установка не требуется" #: install.sh:1349 msgid "已存在, 跳过编译安装过程" msgstr "существует, пропустить процесс компиляции и установки" #: install.sh:1351 msgid "检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装" msgstr "обнаружен nginx, установленный другим пакетом. продолжение установки приведёт к конфликту. пожалуйста, устраните проблему перед установкой" #: install.sh:1364 msgid "即将下载已编译的" msgstr "готовится к загрузке скомпилированный" #: install.sh:1374 msgid "不支持的系统架构" msgstr "неподдерживаемая архитектура системы" #: install.sh:1383 msgid "下载失败" msgstr "скачивание не удалось" #: install.sh:1387 msgid "下载成功" msgstr "загрузка завершена успешно" #: install.sh:1390 msgid "解压失败" msgstr "распаковка не удалась" #: install.sh:1438 install.sh:1439 install.sh:1446 install.sh:1447 msgid "配置不完整, 退出更新" msgstr "конфигурация неполная, выйти из обновления" #: install.sh:1451 install.sh:1452 msgid "当前安装模式不需要" msgstr "текущий режим установки не требуется" #: install.sh:1456 install.sh:1457 msgid "配置不存在, 退出更新" msgstr "конфигурация не существует, выходим из обновления" #: install.sh:1463 msgid "备份旧版" msgstr "резервная копия старой версии" #: install.sh:1464 msgid "删除旧版" msgstr "удалить старую версию" #: install.sh:1468 msgid "是否保留原 Nginx 配置文件" msgstr "сохранить ли исходный файл конфигурации nginx" #: install.sh:1476 install.sh:1809 msgid "原配置文件已删除" msgstr "исходный файл конфигурации удален" #: install.sh:1480 msgid "原配置文件已保留" msgstr "исходный конфигурационный файл сохранен" #: install.sh:1534 install.sh:4220 msgid "删除" msgstr "удалить" #: install.sh:1534 install.sh:4243 msgid "备份" msgstr "резервная копия" #: install.sh:1537 msgid "已为最新版" msgstr "уже для последней версии" #: install.sh:1553 msgid "设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)" msgstr "настройка фоновой автоматической программы обновления (включая: скрипт/xray/nginx)" #: install.sh:1554 msgid "可能自动更新后有兼容问题, 谨慎启用" msgstr "после автоматического обновления могут возникнуть проблемы с совместимостью, поэтому включайте с осторожностью" #: install.sh:1555 fail2ban_manager.sh:120 fail2ban_manager.sh:146 msgid "是否启用" msgstr "включить или нет" #: install.sh:1561 install.sh:3878 msgid "设置自动更新" msgstr "настроить автоматическое обновление" #: install.sh:1566 msgid "已设置自动更新" msgstr "автоматическое обновление установлено" #: install.sh:1567 msgid "是否关闭" msgstr "закрыть ли" #: install.sh:1573 msgid "删除自动更新" msgstr "удалить автоматическое обновление" #: install.sh:1582 msgid "安装 SSL 证书生成脚本依赖" msgstr "установить зависимости для скрипта генерации ssl-сертификата" #: install.sh:1584 msgid "安装 SSL 证书生成脚本" msgstr "установить скрипт для создания ssl-сертификата" #: install.sh:1590 msgid "检测到原域名配置存在, 是否跳过域名设置" msgstr "обнаружено существующее конфигурирование исходного домена, пропустить ли настройку домена" #: install.sh:1605 install.sh:1642 install.sh:1693 install.sh:1726 msgid "无法获取公网IP地址" msgstr "невозможно получить публичный ip-адрес" #: install.sh:1605 install.sh:1642 install.sh:1665 install.sh:1693 #: install.sh:1726 msgid "安装终止" msgstr "установка завершена" #: install.sh:1608 msgid "已跳过域名设置" msgstr "настройка домена пропущена" #: install.sh:1614 msgid "确定域名信息" msgstr "подтвердить информацию о домене" #: install.sh:1615 msgid "请输入你的域名信息" msgstr "пожалуйста, введите информацию о вашем домене" #: install.sh:1616 msgid "请选择公网IP(IPv4/IPv6)或手动输入域名" msgstr "выберите ip-адрес (ipv4/ipv6) или вручную введите доменное имя" #: install.sh:1622 install.sh:1711 msgid "正在获取公网IP信息, 请耐心等待" msgstr "получение информации о публичном ip-адресе, пожалуйста, подождите" #: install.sh:1632 msgid "此选项用于服务器商仅提供域名访问服务器" msgstr "этот вариант используется, когда серверный провайдер предоставляет доступ к серверу только по доменному имени" #: install.sh:1633 msgid "注意服务器商域名添加 CNAME 记录" msgstr "обратите внимание, что хостинг-провайдеру необходимо добавить запись cname для домена" #: install.sh:1645 msgid "域名DNS解析IP" msgstr "dns-разрешение доменного имени в ip" #: install.sh:1646 install.sh:1729 msgid "公网IP/域名" msgstr "общедоступный ip/доменное имя" #: install.sh:1648 msgid "域名DNS解析IP与公网IP匹配" msgstr "dns-разрешение доменного имени на ip-адрес совпадает с публичным ip-адресом" #: install.sh:1650 msgid "请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray" msgstr "пожалуйста, убедитесь, что доменное имя имеет правильные записи a/aaaa, иначе xray не будет работать корректно" #: install.sh:1651 msgid "域名DNS解析IP与公网IP不匹配, 请选择" msgstr "dns-разрешение доменного имени на ip-адрес не совпадает с публичным ip-адресом, выберите" #: install.sh:1652 install.sh:1659 msgid "继续安装" msgstr "продолжить установку" #: install.sh:1653 msgid "重新输入" msgstr "повторно ввести" #: install.sh:1654 msgid "终止安装" msgstr "прервать установку" #: install.sh:1676 msgid "检测到原IP配置存在, 是否跳过IP设置" msgstr "обнаружено существующее исходное ip-конфигурация, пропустить настройку ip" #: install.sh:1697 msgid "已跳过IP设置" msgstr "настройка ip пропущена" #: install.sh:1703 msgid "确定公网IP信息" msgstr "определить информацию о публичном ip-адресе" #: install.sh:1704 msgid "请选择公网IP为IPv4或IPv6" msgstr "выберите публичный ip-адрес в формате ipv4 или ipv6" #: install.sh:1707 msgid "手动输入" msgstr "ручной ввод" #: install.sh:1734 msgid "端口未被占用" msgstr "порт не занят" #: install.sh:1736 msgid "检测到" msgstr "обнаружено" #: install.sh:1736 msgid "端口被占用" msgstr "порт занят" #: install.sh:1736 msgid "以下为" msgstr "ниже представлено" #: install.sh:1736 msgid "端口占用信息" msgstr "информация об занятости портов" #: install.sh:1738 msgid "尝试终止占用的进程" msgstr "попытаться завершить занятый процесс" #: install.sh:1749 msgid "证书测试签发成功, 开始正式签发" msgstr "сертификат успешно протестирован, начинается официальная выдача" #: install.sh:1752 msgid "证书测试签发失败" msgstr "сертификат не удалось выпустить для тестирования" #: install.sh:1759 msgid "证书生成成功" msgstr "сертификат успешно создан" #: install.sh:1765 msgid "证书配置成功" msgstr "конфигурация сертификата выполнена успешно" #: install.sh:1769 msgid "证书生成失败" msgstr "сертификат не удалось сгенерировать" #: install.sh:1801 msgid "检测到 Xray 配置过多用户" msgstr "обнаружено, что в конфигурации xray слишком много пользователей" #: install.sh:1802 msgid "是否保留原 Xray 配置文件" msgstr "сохранить ли исходный файл конфигурации xray" #: install.sh:1822 msgid "添加简单 ws/gRPC 协议" msgstr "добавить простой протокол ws/grpc" #: install.sh:1837 msgid "检测到配置文件, 是否读取配置文件" msgstr "обнаружен файл конфигурации, считать ли файл конфигурации" #: install.sh:1842 install.sh:1863 install.sh:1961 install.sh:3430 msgid "已删除配置文件" msgstr "файл конфигурации удален" #: install.sh:1845 install.sh:1858 install.sh:1956 install.sh:3426 msgid "已保留配置文件" msgstr "конфигурационный файл сохранен" #: install.sh:1852 msgid "检测到当前安装模式与配置文件的安装模式不一致" msgstr "обнаружено несоответствие текущего режима установки с режимом установки в конфигурационном файле" #: install.sh:1853 msgid "是否保留配置文件 (强烈不建议)" msgstr "сохранить файл конфигурации (сильно не рекомендуется)" #: install.sh:1857 msgid "请务必确保配置文件正确" msgstr "пожалуйста, обязательно убедитесь, что конфигурационный файл правильный" #: install.sh:1951 msgid "检测到配置文件不完整, 是否保留配置文件" msgstr "обнаружено, что файл конфигурации неполный. сохранить файл конфигурации" #: install.sh:2170 msgid "配置删除" msgstr "удаление конфигурации" #: install.sh:2191 msgid "设置 Nginx 开机自启" msgstr "настройка автозапуска nginx при включении компьютера" #: install.sh:2194 install.sh:4234 install.sh:4237 install.sh:4238 #: install.sh:4239 fail2ban_manager.sh:10 msgid "设置" msgstr "настройка" #: install.sh:2194 install.sh:2202 msgid "开机自启" msgstr "автозапуск при включении" #: install.sh:2199 msgid "关闭 Nginx 开机自启" msgstr "отключить автозапуск nginx при включении" #: install.sh:2202 msgid "关闭" msgstr "закрыть" #: install.sh:2209 install.sh:2231 install.sh:2234 install.sh:2294 #: install.sh:4229 fail2ban_manager.sh:230 msgid "停止" msgstr "остановить" #: install.sh:2223 install.sh:2226 install.sh:2761 install.sh:4228 #: fail2ban_manager.sh:229 fail2ban_manager.sh:398 msgid "启动" msgstr "запуск" #: install.sh:2247 install.sh:2263 msgid "新版本已自动设置证书自动更新" msgstr "новая версия автоматически настроена для автоматического обновления сертификатов" #: install.sh:2248 msgid "老版本请及时删除 废弃的 改版证书自动更新" msgstr "старые версии следует своевременно удалить. устаревшие сертификаты автоматически обновляются при изменении версии" #: install.sh:2249 msgid "已设置改版证书自动更新" msgstr "автоматическое обновление сертификата изменений уже настроено" #: install.sh:2250 msgid "是否需要删除改版证书自动更新 (请删除)" msgstr "нужно ли удалить автоматическое обновление сертификата измененной версии (пожалуйста, удалите)" #: install.sh:2257 msgid "删除改版证书自动更新" msgstr "удалить обновление сертификата автоматически" #: install.sh:2281 msgid "已过期" msgstr "истекло" #: install.sh:2283 msgid "证书生成日期" msgstr "дата создания сертификата" #: install.sh:2284 msgid "证书生成天数" msgstr "количество дней для генерации сертификата" #: install.sh:2285 msgid "证书剩余天数" msgstr "оставшиеся дни сертификата" #: install.sh:2289 msgid "是否立即更新证书" msgstr "обновить сертификат немедленно" #: install.sh:2301 install.sh:2313 msgid "证书签发工具不存在, 请确认是否证书为脚本签发" msgstr "инструмент для выдачи сертификатов не существует, пожалуйста, убедитесь, был ли сертификат выдан с помощью скрипта" #: install.sh:2317 msgid "证书更新" msgstr "обновление сертификата" #: install.sh:2327 msgid "本地文件 fail2ban_manager.sh 不存在, 正在下载" msgstr "файл fail2ban_manager.sh отсутствует, загрузка" #: install.sh:2342 msgid "是否需要设置自动清理日志" msgstr "нужно ли настроить автоматическую очистку журнала" #: install.sh:2346 msgid "已跳过设置自动清理日志" msgstr "настройка автоматической очистки журналов пропущена" #: install.sh:2349 msgid "将在 每周三 04:00 自动清空日志" msgstr "журнал будет автоматически очищаться каждую среду в 04:00" #: install.sh:2354 msgid "已设置自动清理日志任务" msgstr "автоматическая задача очистки журнала уже настроена" #: install.sh:2355 msgid "是否需要删除现有自动清理日志任务" msgstr "нужно ли удалить существующую задачу автоматической очистки журнала" #: install.sh:2360 msgid "删除自动清理日志任务" msgstr "удалить задачу автоматической очистки журнала" #: install.sh:2363 msgid "保留现有自动清理日志任务" msgstr "сохранить существующую задачу автоматической очистки журнала" #: install.sh:2378 msgid "设置自动清理日志" msgstr "настроить автоматическую очистку журнала" #: install.sh:2385 msgid "检测到日志文件大小如下:" msgstr "обнаружено, что размер файла журнала следующий" #: install.sh:2387 msgid "即将清除" msgstr "скоро очистить" #: install.sh:2389 msgid "日志清理" msgstr "очистка журнала" #: install.sh:2663 msgid "链接分享" msgstr "поделиться ссылкой" #: install.sh:2665 install.sh:2671 install.sh:2676 install.sh:2681 #: install.sh:2685 install.sh:3183 msgid "分享链接" msgstr "поделиться ссылкой" #: install.sh:2666 install.sh:2672 install.sh:2677 install.sh:2682 #: install.sh:2686 msgid "二维码" msgstr "qr-код" #: install.sh:2692 install.sh:2693 msgid "配置分享" msgstr "настройка и обмен" #: install.sh:2707 msgid "生成分享链接" msgstr "создать ссылку для обмена" #: install.sh:2735 install.sh:2746 install.sh:3038 install.sh:3108 #: install.sh:3132 install.sh:3198 install.sh:3246 install.sh:3300 #: install.sh:3352 msgid "请先安装" msgstr "пожалуйста, сначала установите" #: install.sh:2753 msgid "无法获取网卡, 将监控所有网卡" msgstr "не удалось получить сетевую карту, будет вестись мониторинг всех сетевых карт" #: install.sh:2755 msgid "监控网卡" msgstr "мониторинг сетевой карты" #: install.sh:2758 msgid "监控端口" msgstr "мониторинговый порт" #: install.sh:2760 msgid "按 q 键退出 iftop" msgstr "нажмите клавишу q, чтобы выйти из iftop" #: install.sh:2776 install.sh:2779 install.sh:2782 install.sh:2785 #: install.sh:2788 install.sh:2791 install.sh:2794 install.sh:2797 #: install.sh:2800 install.sh:2803 install.sh:2806 msgid "安装成功" msgstr "установка выполнена успешно" #: install.sh:2810 msgid "目前分享链接规范为实验阶段, 请自行判断是否适用" msgstr "в настоящее время формат ссылки для совместного использования находится на экспериментальной стадии, пожалуйста, самостоятельно определите, применим ли он" #: install.sh:2812 install.sh:4224 msgid "配置信息" msgstr "информация о настройках" #: install.sh:2813 msgid "主机" msgstr "хост" #: install.sh:2837 msgid "用户id" msgstr "идентификатор пользователя" #: install.sh:2839 msgid "加密" msgstr "шифрование" #: install.sh:2840 msgid "传输协议" msgstr "протокол передачи" #: install.sh:2841 msgid "底层传输安全" msgstr "безопасность нижнего уровня передачи" #: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868 msgid "路径" msgstr "путь" #: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868 msgid "不要落下" msgstr "не отставать" #: install.sh:2846 install.sh:2849 install.sh:2865 install.sh:2870 msgid "不需要加" msgstr "не нужно добавлять" #: install.sh:2852 msgid "流控" msgstr "контроль потока" #: install.sh:2885 msgid "即将申请证书, 支持使用自定义证书" msgstr "планируется подача заявки на сертификат, поддерживается использование пользовательского сертификата" #: install.sh:2886 msgid "如需使用自定义证书, 请按如下步骤:" msgstr "если требуется использовать пользовательский сертификат, выполните следующие шаги" #: install.sh:2887 msgid "1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)" msgstr "1. переименуйте файлы сертификатов: приватный ключ (xray.key), сертификат (xray.crt)" #: install.sh:2888 msgid "2. 将重命名后的证书文件放入" msgstr "2. разместите переименованный файл сертификата в" #: install.sh:2888 msgid "目录后再运行脚本" msgstr "запустить скрипт после каталога" #: install.sh:2889 msgid "3. 重新运行脚本" msgstr "3. запустить скрипт заново" #: install.sh:2890 install.sh:3334 msgid "是否继续" msgstr "продолжить ли" #: install.sh:2898 msgid "所有证书文件均已存在, 是否保留" msgstr "все файлы сертификатов уже существуют, сохранить" #: install.sh:2904 install.sh:2919 install.sh:2935 file_manager.sh:176 msgid "已删除" msgstr "удалено" #: install.sh:2910 install.sh:2925 install.sh:2942 msgid "证书应用" msgstr "применение сертификата" #: install.sh:2914 msgid "证书文件已存在, 是否保留" msgstr "файл сертификата уже существует, сохранить" #: install.sh:2930 msgid "证书签发残留文件已存在, 是否保留" msgstr "оставшиеся файлы выдачи сертификата уже существуют, сохранить" #: install.sh:2972 install.sh:4219 msgid "添加" msgstr "добавить" #: install.sh:2980 msgid "请选择支持的 TLS 版本" msgstr "выберите поддерживаемую версию tls" #: install.sh:2981 msgid "建议选择 TLSv1.3 only (安全模式)" msgstr "рекомендуется выбрать только tlsv1.3 (безопасный режим)" #: install.sh:2982 install.sh:2998 msgid "兼容模式" msgstr "режим совместимости" #: install.sh:2983 msgid "安全模式" msgstr "безопасный режим" #: install.sh:2987 msgid "由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)" msgstr "поскольку h3 поддерживает только tlsv1.3, поддерживается только tlsv1.3 (безопасный режим)" #: install.sh:2991 install.sh:3003 install.sh:3006 msgid "已切换至" msgstr "уже переключено на" #: install.sh:2995 msgid "请选择 TLS 版本" msgstr "выберите версию tls" #: install.sh:2996 msgid "建议选择 TLSv1.3 (安全模式)" msgstr "рекомендуется выбрать tlsv1.3 (безопасный режим)" #: install.sh:3009 msgid "当前模式不支持" msgstr "текущий режим не поддерживается" #: install.sh:3016 msgid "Nginx配置文件不存在 或 当前模式不支持" msgstr "файл конфигурации nginx отсутствует или текущий режим не поддерживается" #: install.sh:3130 msgid "此模式不支持修改" msgstr "этот режим не поддерживает изменение" #: install.sh:3139 msgid "即将显示用户, 一次仅能显示一个" msgstr "пользователь будет показан в ближайшее время, одновременно может быть показан только один пользователь" #: install.sh:3141 msgid "请选择显示用户使用的协议" msgstr "выберите протокол, используемый пользователем для отображения" #: install.sh:3151 msgid "请选择要显示的用户编号" msgstr "выберите номер пользователя, который хотите отобразить" #: install.sh:3156 install.sh:3166 install.sh:3270 install.sh:3292 msgid "选择错误" msgstr "выбор неверный" #: install.sh:3159 msgid "请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户" msgstr "пожалуйста, выберите напрямую в главном меню [просмотр информации о конфигурации xray], чтобы отобразить основного пользователя" #: install.sh:3169 install.sh:3295 msgid "请先检测 Xray 是否正确安装" msgstr "пожалуйста, сначала проверьте, правильно ли установлен xray" #: install.sh:3187 msgid "是否继续显示用户" msgstr "продолжать ли показывать пользователя" #: install.sh:3196 install.sh:3298 msgid "此模式不支持删除用户" msgstr "этот режим не поддерживает удаление пользователей" #: install.sh:3206 msgid "即将添加用户, 一次仅能添加一个" msgstr "пользователь будет добавлен в ближайшее время, можно добавить только одного за раз" #: install.sh:3208 msgid "请选择添加用户使用的协议" msgstr "выберите протокол, используемый для добавления пользователя" #: install.sh:3230 msgid "添加用户" msgstr "добавить пользователя" #: install.sh:3235 msgid "是否继续添加用户" msgstr "продолжить добавление пользователя" #: install.sh:3244 msgid "此模式不支持添加用户" msgstr "этот режим не поддерживает добавление пользователей" #: install.sh:3253 msgid "即将删除用户, 一次仅能删除一个" msgstr "пользователь будет удален, можно удалить только одного за раз" #: install.sh:3255 msgid "请选择删除用户使用的协议" msgstr "пожалуйста, выберите протокол, используемый для удаления пользователя" #: install.sh:3265 msgid "请选择要删除的用户编号" msgstr "выберите номер пользователя, которого хотите удалить" #: install.sh:3274 msgid "主用户无法删除" msgstr "основной пользователь не может быть удален" #: install.sh:3280 msgid "删除用户" msgstr "удалить пользователя" #: install.sh:3283 msgid "是否继续删除用户" msgstr "продолжить удаление пользователя" #: install.sh:3305 install.sh:3309 msgid "文件不存在" msgstr "файл не существует" #: install.sh:3316 msgid "已配置 Xray 流量统计" msgstr "статистика трафика xray уже настроена" #: install.sh:3317 msgid "是否需要关闭此功能" msgstr "нужно ли отключить эту функцию" #: install.sh:3323 msgid "关闭 Xray 流量统计" msgstr "закрыть статистику трафика xray" #: install.sh:3332 msgid "流量统计需要使用" msgstr "для статистики трафика необходимо использовать" #: install.sh:3333 msgid "可能会影响 Xray 性能" msgstr "может повлиять на производительность рентгеновского аппарата" #: install.sh:3344 msgid "设置 Xray 流量统计" msgstr "настройка статистики трафика xray" #: install.sh:3374 install.sh:3394 msgid "已卸载" msgstr "удалено" #: install.sh:3378 msgid "是否卸载" msgstr "удалить ли" #: install.sh:3382 msgid "已取消卸载" msgstr "установка отменена" #: install.sh:3405 msgid "是否删除所有脚本文件" msgstr "удалить все файлы скриптов" #: install.sh:3412 msgid "已删除所有文件" msgstr "все файлы удалены" #: install.sh:3413 msgid "ヾ( ̄▽ ̄) 拜拜~" msgstr "( ̄▽ ̄) привет" #: install.sh:3418 msgid "已保留脚本文件 (包含 SSL 证书等)" msgstr "скрипт-файл сохранён (включая ssl-сертификат и т.д.)" #: install.sh:3422 msgid "是否保留配置文件" msgstr "сохранить файл конфигурации" #: install.sh:3439 msgid "已清空证书遗留文件" msgstr "файлы, оставшиеся от сертификата, уже удалены" #: install.sh:3469 msgid "秒后" msgstr "секунду спустя" #: install.sh:3669 msgid "检测最新版本失败" msgstr "не удалось проверить последнюю версию" #: install.sh:3677 install.sh:3917 msgid "新版本" msgstr "новая версия" #: install.sh:3677 install.sh:3917 msgid "更新内容" msgstr "содержание обновления" #: install.sh:3681 msgid "存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新" msgstr "доступна новая версия, но изменения в ней значительные, возможны несовместимости. обновить" #: install.sh:3684 msgid "存在新版本, 是否更新" msgstr "доступна новая версия, обновить" #: install.sh:3688 msgid "检测 脚本 最新版本失败" msgstr "не удалось проверить последнюю версию скрипта" #: install.sh:3689 msgid "脚本 版本差别过大, 跳过更新" msgstr "версии скрипта слишком сильно различаются, пропускаем обновление" #: install.sh:3697 install.sh:3698 msgid "脚本更新失败" msgstr "ошибка обновления скрипта" #: install.sh:3704 msgid "更新完成" msgstr "обновление завершено" #: install.sh:3705 install.sh:3929 msgid "脚本版本变化较大, 若服务无法正常运行请卸载后重装" msgstr "версия скрипта сильно изменилась, если служба не работает нормально, пожалуйста, удалите её и установите заново" #: install.sh:3714 msgid "当前版本为最新版本" msgstr "текущая версия является последней" #: install.sh:3727 install.sh:3912 install.sh:3927 install.sh:3940 msgid "下载最新脚本" msgstr "скачать последний скрипт" #: install.sh:3741 msgid "该选项暂时无法使用" msgstr "этот вариант временно недоступен" #: install.sh:3760 install.sh:4286 msgid "此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装" msgstr "этот режим рекомендуется для балансировки нагрузки, обычно не рекомендуется к использованию, установить" #: install.sh:3773 install.sh:4300 msgid "此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装" msgstr "этот режим предназначен только для переадресации трафика; не рекомендуется использовать его в других случаях. установить" #: install.sh:3876 install.sh:3877 install.sh:3887 install.sh:3891 #: install.sh:3895 install.sh:4211 install.sh:4212 install.sh:4213 #: install.sh:4214 install.sh:4215 install.sh:4216 install.sh:4314 #: install.sh:4319 install.sh:4324 install.sh:4329 msgid "变更" msgstr "изменение" #: install.sh:3876 install.sh:4215 msgid "负载均衡配置" msgstr "конфигурация балансировки нагрузки" #: install.sh:3879 msgid "清除日志文件" msgstr "очистить файлы журнала" #: install.sh:3880 msgid "查看证书状态" msgstr "просмотреть статус сертификата" #: install.sh:3881 msgid "更新证书有效期" msgstr "обновить срок действия сертификата" #: install.sh:3882 msgid "设置证书自动更新" msgstr "настроить автоматическое обновление сертификата" #: install.sh:3883 msgid "设置 Fail2ban 防暴力破解" msgstr "настройка fail2ban для защиты от brute-force атак" #: install.sh:3884 msgid "显示帮助" msgstr "показать справку" #: install.sh:3885 msgid "修改语言" msgstr "изменить язык" #: install.sh:3888 install.sh:4218 install.sh:4222 install.sh:4223 #: install.sh:4224 install.sh:4225 install.sh:4230 install.sh:4232 #: fail2ban_manager.sh:15 msgid "查看" msgstr "просмотреть" #: install.sh:3888 install.sh:4225 msgid "实时流量" msgstr "поток в реальном времени" #: install.sh:3889 msgid "脚本卸载" msgstr "удаление скрипта" #: install.sh:3890 msgid "显示安装信息" msgstr "отобразить информацию об установке" #: install.sh:3892 install.sh:4237 msgid "加速" msgstr "ускорение" #: install.sh:3894 msgid "更新脚本" msgstr "обновить скрипт" #: install.sh:3896 install.sh:3897 msgid "显示" msgstr "показать" #: install.sh:3896 msgid "访问信息" msgstr "информация о посещении" #: install.sh:3897 msgid "错误信息" msgstr "сообщение об ошибке" #: install.sh:3921 msgid "脚本版本变化较大, 可能存在不兼容情况, 是否继续使用" msgstr "версия скрипта сильно изменилась, возможно, существуют несовместимости. продолжить использование" #: install.sh:3948 msgid "检测失败" msgstr "ошибка проверки" #: install.sh:3952 install.sh:3962 install.sh:3971 msgid "有新版" msgstr "есть новая версия" #: install.sh:3955 install.sh:3964 install.sh:3974 msgid "最新版" msgstr "последняя версия" #: install.sh:3969 msgid "版本未知" msgstr "версия неизвестна" #: install.sh:3989 install.sh:3996 msgid "运行中" msgstr "в процессе выполнения" #: install.sh:3991 install.sh:4014 install.sh:4016 msgid "无需测试" msgstr "не требуется тестирование" #: install.sh:3993 install.sh:3998 msgid "未运行" msgstr "не запущено" #: install.sh:4008 msgid "无法连通" msgstr "невозможно подключиться" #: install.sh:4010 install.sh:4011 install.sh:4012 msgid "本地正常" msgstr "локально нормально" #: install.sh:4027 msgid "脚本维护中.. 请稍后再试" msgstr "скрипт находится на обслуживании. пожалуйста, попробуйте позже" #: install.sh:4034 msgid "无法检测所需依赖的在线版本, 请稍后再试" msgstr "невозможно обнаружить онлайн-версию необходимой зависимости, попробуйте позже" #: install.sh:4051 msgid "请输入数字" msgstr "пожалуйста, введите цифры" #: install.sh:4051 msgid "请输入 1 到 6 之间的有效数字" msgstr "пожалуйста, введите действительное число от 1 до 6" #: install.sh:4081 msgid "无效的选择" msgstr "недопустимый выбор" #: install.sh:4122 msgid "请输入备份名称" msgstr "введите имя резервной копии" #: install.sh:4122 msgid "不需要后缀" msgstr "не требуется суффикс" #: install.sh:4131 msgid "报错信息" msgstr "сообщение об ошибке" #: install.sh:4133 msgid "备份完整性可能受到影响, 请检查上述错误信息" msgstr "целостность резервной копии может быть нарушена, пожалуйста, проверьте приведённые выше сообщения об ошибках" #: install.sh:4137 msgid "备份失败" msgstr "сбой резервного копирования" #: install.sh:4139 msgid "备份成功" msgstr "резервное копирование успешно выполнено" #: install.sh:4144 msgid "请确保备份文件在目录" msgstr "пожалуйста, убедитесь, что файлы резервных копий находятся в каталоге" #: install.sh:4148 msgid "没有找到备份文件" msgstr "резервная файл не найдена" #: install.sh:4153 msgid "发现多个备份文件" msgstr "обнаружено несколько файлов резервных копий" #: install.sh:4153 msgid "将使用最新的文件进行恢复" msgstr "будет использован последний файл для восстановления" #: install.sh:4157 msgid "找到最新备份文件" msgstr "найти последний файл резервной копии" #: install.sh:4159 msgid "恢复备份" msgstr "восстановить резервную копию" #: install.sh:4163 msgid "恢复成功" msgstr "восстановление успешно" #: install.sh:4164 install.sh:4166 msgid "记得安装" msgstr "помните установить" #: install.sh:4169 msgid "恢复失败" msgstr "восстановление не удалось" #: install.sh:4175 msgid "安装管理脚本" msgstr "установить скрипт управления" #: install.sh:4176 msgid "作者" msgstr "автор" #: install.sh:4180 msgid "当前模式" msgstr "текущий режим" #: install.sh:4181 msgid "当前语言" msgstr "текущий язык" #: install.sh:4184 msgid "可以使用" msgstr "можно использовать" #: install.sh:4184 msgid "命令管理脚本" msgstr "скрипт управления командами" #: install.sh:4186 msgid "版本检测" msgstr "проверка версии" #: install.sh:4187 install.sh:4195 install.sh:4246 msgid "脚本" msgstr "сценарий" #: install.sh:4190 msgid "运行状态" msgstr "рабочее состояние" #: install.sh:4193 msgid "连通性" msgstr "связность" #: install.sh:4194 msgid "更新向导" msgstr "мастер обновления" #: install.sh:4205 msgid "安装向导" msgstr "мастер установки" #: install.sh:4210 msgid "配置变更" msgstr "изменение конфигурации" #: install.sh:4217 msgid "用户管理" msgstr "управление пользователями" #: install.sh:4218 install.sh:4219 install.sh:4220 msgid "用户" msgstr "пользователь" #: install.sh:4221 msgid "查看信息" msgstr "просмотр информации" #: install.sh:4222 msgid "实时访问日志" msgstr "журнал доступа в реальном времени" #: install.sh:4223 msgid "实时错误日志" msgstr "журнал ошибок в реальном времени" #: install.sh:4226 msgid "服务相关" msgstr "сервисный связанный" #: install.sh:4227 install.sh:4228 install.sh:4229 install.sh:4230 msgid "所有服务" msgstr "все услуги" #: install.sh:4231 msgid "证书相关" msgstr "сертификаты, связанные" #: install.sh:4232 msgid "证书状态" msgstr "статус сертификата" #: install.sh:4233 msgid "证书有效期" msgstr "срок действия сертификата" #: install.sh:4234 msgid "证书自动更新" msgstr "автоматическое обновление сертификата" #: install.sh:4235 msgid "其他选项" msgstr "другие варианты" #: install.sh:4236 msgid "自动更新" msgstr "автоматическое обновление" #: install.sh:4238 msgid "防暴力破解" msgstr "антивизионное растрескивание" #: install.sh:4239 msgid "流量统计" msgstr "статистика трафика" #: install.sh:4240 msgid "清除" msgstr "очистить" #: install.sh:4240 msgid "日志文件" msgstr "журнал файлов" #: install.sh:4241 msgid "测试" msgstr "тест" #: install.sh:4241 msgid "服务器网速" msgstr "скорость интернета на сервере" #: install.sh:4242 msgid "备份恢复" msgstr "резервное восстановление" #: install.sh:4243 install.sh:4244 msgid "全部文件" msgstr "все файлы" #: install.sh:4244 msgid "恢复" msgstr "восстановление" #: install.sh:4245 msgid "卸载向导" msgstr "мастер удаления" #: install.sh:4246 fail2ban_manager.sh:14 fail2ban_manager.sh:415 msgid "卸载" msgstr "удалить" #: install.sh:4247 msgid "清空" msgstr "очистить" #: install.sh:4247 msgid "证书文件" msgstr "файл сертификата" #: install.sh:4248 fail2ban_manager.sh:16 file_manager.sh:208 msgid "退出" msgstr "выйти" #: install.sh:4251 msgid "请输入选项" msgstr "пожалуйста, введите вариант" #: install.sh:4259 install.sh:4268 install.sh:4334 install.sh:4340 #: install.sh:4385 install.sh:4391 install.sh:4397 install.sh:4426 #: install.sh:4467 install.sh:4474 install.sh:4479 fail2ban_manager.sh:416 msgid "清空屏幕" msgstr "очистить экран" #: install.sh:4265 msgid "不建议" msgstr "не рекомендуется" #: install.sh:4265 msgid "频繁更新 Nginx, 请确认 Nginx 有更新的必要" msgstr "часто обновляйте nginx; убедитесь, что обновление nginx действительно необходимо" #: install.sh:4266 msgid "开始更新" msgstr "начать обновление" #: install.sh:4346 install.sh:4353 install.sh:4360 install.sh:4410 #: install.sh:4415 install.sh:4420 install.sh:4442 msgid "回到菜单" msgstr "вернуться к меню" #: fail2ban_manager.sh:10 msgid "用于防止暴力破解" msgstr "для предотвращения атак методом перебора" #: fail2ban_manager.sh:11 file_manager.sh:203 msgid "主菜单" msgstr "главное меню" #: fail2ban_manager.sh:13 msgid "管理" msgstr "управление" #: fail2ban_manager.sh:15 fail2ban_manager.sh:339 msgid "状态" msgstr "состояние" #: fail2ban_manager.sh:18 file_manager.sh:210 msgid "请选择一个选项" msgstr "выберите один из вариантов" #: fail2ban_manager.sh:27 fail2ban_manager.sh:250 fail2ban_manager.sh:258 #: fail2ban_manager.sh:363 msgid "无效的选择, 请重试" msgstr "недопустимый выбор, попробуйте еще раз" #: fail2ban_manager.sh:35 msgid "已经安装, 跳过安装步骤" msgstr "уже установлено, пропустить шаг установки" #: fail2ban_manager.sh:68 msgid "systemd 无法读取 SSH 日志" msgstr "systemd не может прочитать ssh-журналы" #: fail2ban_manager.sh:69 msgid "跳过启用" msgstr "пропустить включение" #: fail2ban_manager.sh:69 fail2ban_manager.sh:93 fail2ban_manager.sh:103 #: fail2ban_manager.sh:120 fail2ban_manager.sh:125 fail2ban_manager.sh:128 #: fail2ban_manager.sh:146 fail2ban_manager.sh:151 fail2ban_manager.sh:154 msgid "规则" msgstr "правило" #: fail2ban_manager.sh:77 fail2ban_manager.sh:203 fail2ban_manager.sh:440 msgid "未安装, 请先安装" msgstr "не установлено, сначала установите" #: fail2ban_manager.sh:125 fail2ban_manager.sh:151 fail2ban_manager.sh:349 msgid "已禁用" msgstr "отключено" #: fail2ban_manager.sh:209 msgid "请选择" msgstr "пожалуйста, выберите" #: fail2ban_manager.sh:209 msgid "操作" msgstr "операция" #: fail2ban_manager.sh:210 msgid "管理模块" msgstr "модуль управления" #: fail2ban_manager.sh:211 msgid "添加自定义规则" msgstr "добавить пользовательское правило" #: fail2ban_manager.sh:212 fail2ban_manager.sh:228 msgid "服务管理" msgstr "управление услугами" #: fail2ban_manager.sh:271 msgid "请输入新的" msgstr "пожалуйста, введите новое" #: fail2ban_manager.sh:271 fail2ban_manager.sh:272 msgid "名称" msgstr "название" #: fail2ban_manager.sh:273 msgid "请输入日志路径" msgstr "пожалуйста, введите путь к журналу" #: fail2ban_manager.sh:274 msgid "请输入最大重试次数" msgstr "пожалуйста, введите максимальное количество попыток" #: fail2ban_manager.sh:274 msgid "最大重试次数必须在 1 到 99 之间" msgstr "максимальное количество попыток должно быть в диапазоне от 1 до 99" #: fail2ban_manager.sh:275 msgid "请输入封禁时间" msgstr "пожалуйста, введите время блокировки" #: fail2ban_manager.sh:275 msgid "秒" msgstr "секунда" #: fail2ban_manager.sh:275 msgid "封禁时间必须在 1 到 8640000 秒之间" msgstr "время блокировки должно быть от 1 до 8640000 секунд" #: fail2ban_manager.sh:285 msgid "自定义规则添加成功" msgstr "правило успешно добавлено" #: fail2ban_manager.sh:289 msgid "重启以应用新规则" msgstr "перезагрузите для применения новых правил" #: fail2ban_manager.sh:294 msgid "管理 Fail2ban 模块" msgstr "управление модулем fail2ban" #: fail2ban_manager.sh:311 msgid "未找到任何模块化配置文件" msgstr "не найден ни один модульный конфигурационный файл" #: fail2ban_manager.sh:319 fail2ban_manager.sh:339 msgid "模块名称" msgstr "название модуля" #: fail2ban_manager.sh:339 file_manager.sh:59 msgid "序号" msgstr "порядковый номер" #: fail2ban_manager.sh:363 msgid "请选择要管理的模块" msgstr "пожалуйста, выберите модуль для управления" #: fail2ban_manager.sh:375 msgid "启用" msgstr "включить" #: fail2ban_manager.sh:375 msgid "禁用" msgstr "отключить" #: fail2ban_manager.sh:378 msgid "是否" msgstr "является ли" #: fail2ban_manager.sh:378 fail2ban_manager.sh:386 msgid "模块" msgstr "модуль" #: fail2ban_manager.sh:388 msgid "操作已取消" msgstr "операция отменена" #: fail2ban_manager.sh:424 msgid "停止成功" msgstr "остановка успешно выполнена" #: fail2ban_manager.sh:444 msgid "总体状态" msgstr "общее состояние" #: fail2ban_manager.sh:448 msgid "默认启用的 Jail 状态" msgstr "статус тюрьмы включено по умолчанию" #: fail2ban_manager.sh:452 fail2ban_manager.sh:458 msgid "封锁情况" msgstr "ситуация с блокировкой" #: fail2ban_manager.sh:453 fail2ban_manager.sh:459 fail2ban_manager.sh:462 #: fail2ban_manager.sh:466 fail2ban_manager.sh:469 msgid "未启用或配置异常" msgstr "не активировано или возникла ошибка конфигурации" #: fail2ban_manager.sh:484 file_manager.sh:232 msgid "新版本可用" msgstr "доступна новая версия" #: fail2ban_manager.sh:484 file_manager.sh:232 msgid "当前版本" msgstr "текущая версия" #: fail2ban_manager.sh:485 file_manager.sh:233 msgid "请访问" msgstr "пожалуйста, посетите" #: fail2ban_manager.sh:485 file_manager.sh:233 msgid "查看更新说明" msgstr "просмотреть описание обновлений" #: fail2ban_manager.sh:487 file_manager.sh:235 msgid "是否下载并安装新版本" msgstr "скачать и установить новую версию" #: fail2ban_manager.sh:491 file_manager.sh:239 msgid "正在下载新版本" msgstr "загружается новая версия" #: fail2ban_manager.sh:496 file_manager.sh:244 msgid "下载完成, 请重新运行脚本" msgstr "загрузка завершена, пожалуйста, запустите скрипт заново" #: fail2ban_manager.sh:504 file_manager.sh:252 msgid "跳过更新" msgstr "пропустить обновление" #: fail2ban_manager.sh:508 file_manager.sh:256 msgid "当前已经是最新版本" msgstr "в настоящее время уже установлена последняя версия" #: file_manager.sh:7 msgid "用法" msgstr "применение" #: file_manager.sh:7 msgid "文件扩展名" msgstr "расширение файла" #: file_manager.sh:7 msgid "目录路径" msgstr "путь к каталогу" #: file_manager.sh:16 msgid "目录" msgstr "оглавление" #: file_manager.sh:16 msgid "不存在, 请检查路径" msgstr "не существует, проверьте путь" #: file_manager.sh:26 file_manager.sh:204 msgid "列出所有" msgstr "перечислить все" #: file_manager.sh:26 file_manager.sh:35 file_manager.sh:88 file_manager.sh:111 #: file_manager.sh:160 file_manager.sh:176 file_manager.sh:204 #: file_manager.sh:205 file_manager.sh:206 file_manager.sh:207 msgid "文件" msgstr "файл" #: file_manager.sh:53 msgid "文件名" msgstr "имя файла" #: file_manager.sh:79 msgid "请输入网址 (例如 hey.run)" msgstr "пожалуйста, введите адрес сайта (например, hey.run)" #: file_manager.sh:80 msgid "不要包含 http:// 或 https:// 开头" msgstr "не включать строки, начинающиеся с http:// или https://" #: file_manager.sh:84 msgid "网址不能包含 http:// 或 https:// 前缀" msgstr "url не может содержать префиксы http:// или https://" #: file_manager.sh:88 file_manager.sh:111 msgid "已创建" msgstr "создано" #: file_manager.sh:99 msgid "请输入主机" msgstr "пожалуйста, введите хост" #: file_manager.sh:107 msgid "请输入权重" msgstr "пожалуйста, введите вес" #: file_manager.sh:128 msgid "追加完成" msgstr "дополнительное завершение" #: file_manager.sh:132 file_manager.sh:136 msgid "重启完成" msgstr "перезагрузка завершена" #: file_manager.sh:151 msgid "请输入要编辑的文件编号" msgstr "введите номер файла, который хотите отредактировать" #: file_manager.sh:156 msgid "未安装, 正在尝试安装" msgstr "не установлено, пытается установить" #: file_manager.sh:160 msgid "已编辑" msgstr "изменено" #: file_manager.sh:171 msgid "请输入要删除的文件编号" msgstr "введите номер файла, который хотите удалить" #: file_manager.sh:194 msgid "不支持的文件扩展名" msgstr "неподдерживаемое расширение файла" #: file_manager.sh:205 msgid "创建一个新的" msgstr "создать новое" #: file_manager.sh:206 msgid "编辑一个已存在的" msgstr "редактировать существующий" #: file_manager.sh:207 msgid "删除一个已存在的" msgstr "удалить существующий" #: file_manager.sh:265 msgid "重启成功" msgstr "перезапуск успешен" #: file_manager.sh:268 msgid "重启失败" msgstr "перезапуск не удался" #: file_manager.sh:268 msgid "请检查配置文件是否有误" msgstr "пожалуйста, проверьте, нет ли ошибок в конфигурационном файле" ================================================ FILE: po/xray_install.pot ================================================ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR yunshu # This file is distributed under the same license as the xray_install package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: xray_install 1.0\n" "Report-Msgid-Bugs-To: https://github.com/hello-yunshu/Xray_bash_onekey/" "issues\n" "POT-Creation-Date: 2026-04-24 09:47+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: install.sh:32 msgid "信息" msgstr "" #: install.sh:34 msgid "错误" msgstr "" #: install.sh:35 msgid "警告" msgstr "" #: install.sh:38 install.sh:1540 install.sh:3960 install.sh:3977 #: install.sh:3980 install.sh:3981 install.sh:4019 msgid "未安装" msgstr "" #: install.sh:99 msgid "日志文件归档失败" msgstr "" #: install.sh:104 msgid "日志文件清空失败" msgstr "" #: install.sh:108 msgid "日志文件已轮转并归档为" msgstr "" #: install.sh:134 install.sh:138 install.sh:142 install.sh:152 msgid "当前系统为" msgstr "" #: install.sh:152 msgid "不在支持的系统列表内, 安装中断" msgstr "" #: install.sh:159 msgid "当前用户是 root 用户, 开始安装" msgstr "" #: install.sh:161 msgid "当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本" msgstr "" #: install.sh:187 msgid "无法获取远程语言文件信息" msgstr "" #: install.sh:205 msgid "正在更新语言文件" msgstr "" #: install.sh:208 install.sh:291 msgid "语言文件更新失败" msgstr "" #: install.sh:213 msgid "语言文件无效" msgstr "" #: install.sh:219 msgid "版本文件更新失败" msgstr "" #: install.sh:226 msgid "语言文件更新完成" msgstr "" #: install.sh:231 install.sh:2725 msgid "正在安装" msgstr "" #: install.sh:234 msgid "安装失败" msgstr "" #: install.sh:234 install.sh:258 install.sh:281 install.sh:291 msgid "将使用默认语言" msgstr "" #: install.sh:258 file_manager.sh:35 msgid "未找到" msgstr "" #: install.sh:281 msgid "不支持的语言" msgstr "" #: install.sh:297 msgid "发现语言文件更新" msgstr "" #: install.sh:312 install.sh:1740 msgid "完成" msgstr "" #: install.sh:315 msgid "失败" msgstr "" #: install.sh:322 msgid "在线版本检测失败, 请稍后再试" msgstr "" #: install.sh:344 install.sh:352 install.sh:1162 install.sh:3872 #: install.sh:3873 install.sh:3874 install.sh:3875 install.sh:4206 #: install.sh:4207 install.sh:4208 install.sh:4209 fail2ban_manager.sh:12 #: fail2ban_manager.sh:39 msgid "安装" msgstr "" #: install.sh:346 install.sh:354 install.sh:1169 install.sh:2729 #: install.sh:3969 msgid "已安装" msgstr "" #: install.sh:371 install.sh:375 msgid "自启动配置" msgstr "" #: install.sh:384 msgid "链接库安装" msgstr "" #: install.sh:389 msgid "值为空或超出范围, 请重新输入" msgstr "" #: install.sh:398 msgid "值为空, 请重新输入" msgstr "" #: install.sh:440 msgid "确定端口" msgstr "" #: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:104 msgid "请输入端口" msgstr "" #: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:107 msgid "默认值" msgstr "" #: install.sh:441 install.sh:444 install.sh:532 install.sh:554 install.sh:3055 #: install.sh:3060 install.sh:3065 install.sh:3066 install.sh:3081 #: install.sh:3086 install.sh:3091 install.sh:3092 msgid "请输入 0-65535 之间的值" msgstr "" #: install.sh:443 msgid "端口不允许使用, 请重新输入" msgstr "" #: install.sh:452 msgid "请选择安装协议" msgstr "" #: install.sh:453 install.sh:1617 install.sh:1654 install.sh:1705 #: install.sh:2997 install.sh:3142 install.sh:3209 install.sh:3256 #: fail2ban_manager.sh:274 fail2ban_manager.sh:275 msgid "默认" msgstr "" #: install.sh:457 install.sh:532 install.sh:554 install.sh:635 install.sh:668 #: install.sh:821 install.sh:840 install.sh:881 install.sh:922 install.sh:1621 #: install.sh:1634 install.sh:1656 install.sh:1709 install.sh:1719 #: install.sh:2985 install.sh:3000 install.sh:3055 install.sh:3060 #: install.sh:3065 install.sh:3066 install.sh:3081 install.sh:3086 #: install.sh:3091 install.sh:3092 install.sh:3145 install.sh:3154 #: install.sh:3212 install.sh:3259 install.sh:3268 fail2ban_manager.sh:215 #: fail2ban_manager.sh:234 fail2ban_manager.sh:272 file_manager.sh:81 msgid "请输入" msgstr "" #: install.sh:457 install.sh:922 install.sh:1621 install.sh:1656 #: install.sh:1709 install.sh:2985 install.sh:3000 install.sh:3145 #: install.sh:3212 install.sh:3259 install.sh:4251 install.sh:4489 msgid "请输入有效的数字" msgstr "" #: install.sh:478 msgid "是否添加简单 ws/gRPC 协议 用于负载均衡" msgstr "" #: install.sh:479 install.sh:1259 msgid "如不清楚具体用途, 请勿选择" msgstr "" #: install.sh:499 msgid "已跳过添加简单 ws/gRPC 协议" msgstr "" #: install.sh:528 install.sh:550 install.sh:631 install.sh:648 install.sh:664 #: install.sh:681 install.sh:696 install.sh:815 install.sh:836 install.sh:877 msgid "是否需要自定义" msgstr "" #: install.sh:532 install.sh:554 msgid "请勿与其他端口相同" msgstr "" #: install.sh:571 file_manager.sh:114 msgid "是否需要设置防火墙" msgstr "" #: install.sh:611 install.sh:615 file_manager.sh:128 file_manager.sh:132 #: file_manager.sh:136 msgid "防火墙" msgstr "" #: install.sh:611 install.sh:615 install.sh:2215 install.sh:2218 #: install.sh:3012 install.sh:3014 install.sh:4227 fail2ban_manager.sh:231 #: fail2ban_manager.sh:432 msgid "重启" msgstr "" #: install.sh:617 msgid "开放防火墙相关端口" msgstr "" #: install.sh:618 msgid "若修改配置, 请注意关闭防火墙相关端口" msgstr "" #: install.sh:619 install.sh:3877 install.sh:3892 install.sh:3893 #: install.sh:4216 install.sh:4236 fail2ban_manager.sh:161 msgid "配置" msgstr "" #: install.sh:622 file_manager.sh:140 msgid "跳过防火墙设置" msgstr "" #: install.sh:631 install.sh:635 install.sh:636 install.sh:640 install.sh:648 #: install.sh:664 install.sh:668 install.sh:669 install.sh:673 install.sh:681 #: install.sh:1101 msgid "伪装路径" msgstr "" #: install.sh:635 install.sh:668 msgid "不需要" msgstr "" #: install.sh:696 install.sh:706 install.sh:3172 msgid "用户名" msgstr "" #: install.sh:700 msgid "请输入正确的 email" msgstr "" #: install.sh:713 msgid "是否需要自定义字符串映射" msgstr "" #: install.sh:717 msgid "请输入自定义字符串" msgstr "" #: install.sh:717 msgid "最多30字符" msgstr "" #: install.sh:719 msgid "自定义字符串" msgstr "" #: install.sh:726 install.sh:2836 install.sh:3895 install.sh:4211 #: install.sh:4314 msgid "映射字符串" msgstr "" #: install.sh:737 msgid "检测到 target 域名已配置, 是否保留" msgstr "" #: install.sh:757 msgid "请输入一个域名" msgstr "" #: install.sh:758 msgid "域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用" msgstr "" #: install.sh:759 msgid "确认域名符合要求后请输入" msgstr "" #: install.sh:760 msgid "正在检测域名请等待" msgstr "" #: install.sh:767 install.sh:772 install.sh:777 msgid "该域名不支持" msgstr "" #: install.sh:782 msgid "该域名发生了跳转" msgstr "" #: install.sh:789 msgid "该域名可能不满足所有要求" msgstr "" #: install.sh:790 msgid "是否仍要设置此域名" msgstr "" #: install.sh:802 install.sh:807 install.sh:1619 msgid "域名" msgstr "" #: install.sh:802 msgid "满足所有要求" msgstr "" #: install.sh:815 msgid "域名的" msgstr "" #: install.sh:816 msgid "默认为" msgstr "" #: install.sh:816 msgid "域名本身" msgstr "" #: install.sh:817 install.sh:912 install.sh:952 msgid "如不清楚具体用途, 请勿继续" msgstr "" #: install.sh:898 msgid "本地文件 file_manager.sh 不存在, 正在下载" msgstr "" #: install.sh:900 install.sh:2330 fail2ban_manager.sh:500 file_manager.sh:248 msgid "下载失败, 请手动下载并安装新版本" msgstr "" #: install.sh:911 install.sh:951 msgid "是否变更" msgstr "" #: install.sh:911 msgid "负载均衡" msgstr "" #: install.sh:917 msgid "请选择协议为 ws 或 gRPC" msgstr "" #: install.sh:920 fail2ban_manager.sh:213 fail2ban_manager.sh:232 #: fail2ban_manager.sh:325 fail2ban_manager.sh:357 msgid "返回" msgstr "" #: install.sh:930 file_manager.sh:220 msgid "无效选项, 请重试" msgstr "" #: install.sh:940 install.sh:964 install.sh:2266 install.sh:2304 #: install.sh:2320 msgid "当前模式不支持此操作" msgstr "" #: install.sh:953 msgid "配置用途可以参考文章" msgstr "" #: install.sh:980 install.sh:991 install.sh:995 install.sh:999 install.sh:1011 #: install.sh:1016 install.sh:1020 install.sh:1025 install.sh:1045 #: install.sh:1051 install.sh:1101 install.sh:1120 install.sh:3893 #: install.sh:4177 msgid "修改" msgstr "" #: install.sh:1053 install.sh:2816 install.sh:2818 install.sh:2820 #: install.sh:2821 install.sh:2824 install.sh:2828 install.sh:2830 #: install.sh:2832 install.sh:2833 install.sh:2861 install.sh:2864 #: install.sh:2867 install.sh:2869 install.sh:3049 msgid "端口" msgstr "" #: install.sh:1103 msgid "不支持" msgstr "" #: install.sh:1110 msgid "用户名修改" msgstr "" #: install.sh:1113 install.sh:1123 msgid "请先删除多余的用户" msgstr "" #: install.sh:1131 install.sh:1139 install.sh:1146 install.sh:1990 #: install.sh:2061 install.sh:2146 install.sh:2154 install.sh:2163 #: install.sh:2186 msgid "配置修改" msgstr "" #: install.sh:1151 msgid "检测到 Xray 的权限控制, 启动修改程序" msgstr "" #: install.sh:1156 msgid "修改完成" msgstr "" #: install.sh:1176 msgid "若更新无效, 建议直接卸载再安装" msgstr "" #: install.sh:1177 msgid "部分新功能需要重新安装才可生效" msgstr "" #: install.sh:1182 msgid "检测到存在最新版" msgstr "" #: install.sh:1183 msgid "脚本可能未兼容此版本" msgstr "" #: install.sh:1184 msgid "是否更新" msgstr "" #: install.sh:1188 install.sh:1213 install.sh:1532 install.sh:3886 #: install.sh:3898 install.sh:4195 install.sh:4196 install.sh:4197 #: install.sh:4233 msgid "更新" msgstr "" #: install.sh:1192 install.sh:1494 msgid "启动失败" msgstr "" #: install.sh:1193 install.sh:1497 msgid "是否回滚到之前的版本" msgstr "" #: install.sh:1197 install.sh:1507 msgid "未执行回滚操作" msgstr "" #: install.sh:1201 install.sh:1511 msgid "正在回滚" msgstr "" #: install.sh:1205 install.sh:1518 msgid "已成功回滚到之前的" msgstr "" #: install.sh:1205 install.sh:1518 install.sh:4214 install.sh:4329 msgid "版本" msgstr "" #: install.sh:1207 install.sh:1228 install.sh:1524 msgid "回滚失败" msgstr "" #: install.sh:1234 install.sh:1238 msgid "重装" msgstr "" #: install.sh:1248 install.sh:1249 msgid "更新失败" msgstr "" #: install.sh:1257 msgid "是否添加 Reality 负载均衡" msgstr "" #: install.sh:1258 msgid "使用此功能前,建议先阅读作者教程" msgstr "" #: install.sh:1264 fail2ban_manager.sh:93 fail2ban_manager.sh:103 #: fail2ban_manager.sh:128 fail2ban_manager.sh:154 fail2ban_manager.sh:347 msgid "已启用" msgstr "" #: install.sh:1268 msgid "已跳过" msgstr "" #: install.sh:1277 msgid "Reality 协议有流量偷跑的风险" msgstr "" #: install.sh:1279 install.sh:1306 msgid "是否额外安装 nginx 前置保护" msgstr "" #: install.sh:1279 msgid "推荐" msgstr "" #: install.sh:1286 install.sh:1321 msgid "检测到已安装" msgstr "" #: install.sh:1289 install.sh:1324 msgid "已跳过安装" msgstr "" #: install.sh:1303 msgid "检测到已开启 Reality 负载均衡" msgstr "" #: install.sh:1304 msgid "如用作 Reality 负载均衡主服务器必须安装" msgstr "" #: install.sh:1305 msgid "如用作 Reality 负载均衡二级服务器则无需安装" msgstr "" #: install.sh:1349 msgid "已存在, 跳过编译安装过程" msgstr "" #: install.sh:1351 msgid "检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装" msgstr "" #: install.sh:1364 msgid "即将下载已编译的" msgstr "" #: install.sh:1374 msgid "不支持的系统架构" msgstr "" #: install.sh:1383 msgid "下载失败" msgstr "" #: install.sh:1387 msgid "下载成功" msgstr "" #: install.sh:1390 msgid "解压失败" msgstr "" #: install.sh:1438 install.sh:1439 install.sh:1446 install.sh:1447 msgid "配置不完整, 退出更新" msgstr "" #: install.sh:1451 install.sh:1452 msgid "当前安装模式不需要" msgstr "" #: install.sh:1456 install.sh:1457 msgid "配置不存在, 退出更新" msgstr "" #: install.sh:1463 msgid "备份旧版" msgstr "" #: install.sh:1464 msgid "删除旧版" msgstr "" #: install.sh:1468 msgid "是否保留原 Nginx 配置文件" msgstr "" #: install.sh:1476 install.sh:1809 msgid "原配置文件已删除" msgstr "" #: install.sh:1480 msgid "原配置文件已保留" msgstr "" #: install.sh:1534 install.sh:4220 msgid "删除" msgstr "" #: install.sh:1534 install.sh:4243 msgid "备份" msgstr "" #: install.sh:1537 msgid "已为最新版" msgstr "" #: install.sh:1553 msgid "设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)" msgstr "" #: install.sh:1554 msgid "可能自动更新后有兼容问题, 谨慎启用" msgstr "" #: install.sh:1555 fail2ban_manager.sh:120 fail2ban_manager.sh:146 msgid "是否启用" msgstr "" #: install.sh:1561 install.sh:3878 msgid "设置自动更新" msgstr "" #: install.sh:1566 msgid "已设置自动更新" msgstr "" #: install.sh:1567 msgid "是否关闭" msgstr "" #: install.sh:1573 msgid "删除自动更新" msgstr "" #: install.sh:1582 msgid "安装 SSL 证书生成脚本依赖" msgstr "" #: install.sh:1584 msgid "安装 SSL 证书生成脚本" msgstr "" #: install.sh:1590 msgid "检测到原域名配置存在, 是否跳过域名设置" msgstr "" #: install.sh:1605 install.sh:1642 install.sh:1693 install.sh:1726 msgid "无法获取公网IP地址" msgstr "" #: install.sh:1605 install.sh:1642 install.sh:1665 install.sh:1693 #: install.sh:1726 msgid "安装终止" msgstr "" #: install.sh:1608 msgid "已跳过域名设置" msgstr "" #: install.sh:1614 msgid "确定域名信息" msgstr "" #: install.sh:1615 msgid "请输入你的域名信息" msgstr "" #: install.sh:1616 msgid "请选择公网IP(IPv4/IPv6)或手动输入域名" msgstr "" #: install.sh:1622 install.sh:1711 msgid "正在获取公网IP信息, 请耐心等待" msgstr "" #: install.sh:1632 msgid "此选项用于服务器商仅提供域名访问服务器" msgstr "" #: install.sh:1633 msgid "注意服务器商域名添加 CNAME 记录" msgstr "" #: install.sh:1645 msgid "域名DNS解析IP" msgstr "" #: install.sh:1646 install.sh:1729 msgid "公网IP/域名" msgstr "" #: install.sh:1648 msgid "域名DNS解析IP与公网IP匹配" msgstr "" #: install.sh:1650 msgid "请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray" msgstr "" #: install.sh:1651 msgid "域名DNS解析IP与公网IP不匹配, 请选择" msgstr "" #: install.sh:1652 install.sh:1659 msgid "继续安装" msgstr "" #: install.sh:1653 msgid "重新输入" msgstr "" #: install.sh:1654 msgid "终止安装" msgstr "" #: install.sh:1676 msgid "检测到原IP配置存在, 是否跳过IP设置" msgstr "" #: install.sh:1697 msgid "已跳过IP设置" msgstr "" #: install.sh:1703 msgid "确定公网IP信息" msgstr "" #: install.sh:1704 msgid "请选择公网IP为IPv4或IPv6" msgstr "" #: install.sh:1707 msgid "手动输入" msgstr "" #: install.sh:1734 msgid "端口未被占用" msgstr "" #: install.sh:1736 msgid "检测到" msgstr "" #: install.sh:1736 msgid "端口被占用" msgstr "" #: install.sh:1736 msgid "以下为" msgstr "" #: install.sh:1736 msgid "端口占用信息" msgstr "" #: install.sh:1738 msgid "尝试终止占用的进程" msgstr "" #: install.sh:1749 msgid "证书测试签发成功, 开始正式签发" msgstr "" #: install.sh:1752 msgid "证书测试签发失败" msgstr "" #: install.sh:1759 msgid "证书生成成功" msgstr "" #: install.sh:1765 msgid "证书配置成功" msgstr "" #: install.sh:1769 msgid "证书生成失败" msgstr "" #: install.sh:1801 msgid "检测到 Xray 配置过多用户" msgstr "" #: install.sh:1802 msgid "是否保留原 Xray 配置文件" msgstr "" #: install.sh:1822 msgid "添加简单 ws/gRPC 协议" msgstr "" #: install.sh:1837 msgid "检测到配置文件, 是否读取配置文件" msgstr "" #: install.sh:1842 install.sh:1863 install.sh:1961 install.sh:3430 msgid "已删除配置文件" msgstr "" #: install.sh:1845 install.sh:1858 install.sh:1956 install.sh:3426 msgid "已保留配置文件" msgstr "" #: install.sh:1852 msgid "检测到当前安装模式与配置文件的安装模式不一致" msgstr "" #: install.sh:1853 msgid "是否保留配置文件 (强烈不建议)" msgstr "" #: install.sh:1857 msgid "请务必确保配置文件正确" msgstr "" #: install.sh:1951 msgid "检测到配置文件不完整, 是否保留配置文件" msgstr "" #: install.sh:2170 msgid "配置删除" msgstr "" #: install.sh:2191 msgid "设置 Nginx 开机自启" msgstr "" #: install.sh:2194 install.sh:4234 install.sh:4237 install.sh:4238 #: install.sh:4239 fail2ban_manager.sh:10 msgid "设置" msgstr "" #: install.sh:2194 install.sh:2202 msgid "开机自启" msgstr "" #: install.sh:2199 msgid "关闭 Nginx 开机自启" msgstr "" #: install.sh:2202 msgid "关闭" msgstr "" #: install.sh:2209 install.sh:2231 install.sh:2234 install.sh:2294 #: install.sh:4229 fail2ban_manager.sh:230 msgid "停止" msgstr "" #: install.sh:2223 install.sh:2226 install.sh:2761 install.sh:4228 #: fail2ban_manager.sh:229 fail2ban_manager.sh:398 msgid "启动" msgstr "" #: install.sh:2247 install.sh:2263 msgid "新版本已自动设置证书自动更新" msgstr "" #: install.sh:2248 msgid "老版本请及时删除 废弃的 改版证书自动更新" msgstr "" #: install.sh:2249 msgid "已设置改版证书自动更新" msgstr "" #: install.sh:2250 msgid "是否需要删除改版证书自动更新 (请删除)" msgstr "" #: install.sh:2257 msgid "删除改版证书自动更新" msgstr "" #: install.sh:2281 msgid "已过期" msgstr "" #: install.sh:2283 msgid "证书生成日期" msgstr "" #: install.sh:2284 msgid "证书生成天数" msgstr "" #: install.sh:2285 msgid "证书剩余天数" msgstr "" #: install.sh:2289 msgid "是否立即更新证书" msgstr "" #: install.sh:2301 install.sh:2313 msgid "证书签发工具不存在, 请确认是否证书为脚本签发" msgstr "" #: install.sh:2317 msgid "证书更新" msgstr "" #: install.sh:2327 msgid "本地文件 fail2ban_manager.sh 不存在, 正在下载" msgstr "" #: install.sh:2342 msgid "是否需要设置自动清理日志" msgstr "" #: install.sh:2346 msgid "已跳过设置自动清理日志" msgstr "" #: install.sh:2349 msgid "将在 每周三 04:00 自动清空日志" msgstr "" #: install.sh:2354 msgid "已设置自动清理日志任务" msgstr "" #: install.sh:2355 msgid "是否需要删除现有自动清理日志任务" msgstr "" #: install.sh:2360 msgid "删除自动清理日志任务" msgstr "" #: install.sh:2363 msgid "保留现有自动清理日志任务" msgstr "" #: install.sh:2378 msgid "设置自动清理日志" msgstr "" #: install.sh:2385 msgid "检测到日志文件大小如下:" msgstr "" #: install.sh:2387 msgid "即将清除" msgstr "" #: install.sh:2389 msgid "日志清理" msgstr "" #: install.sh:2663 msgid "链接分享" msgstr "" #: install.sh:2665 install.sh:2671 install.sh:2676 install.sh:2681 #: install.sh:2685 install.sh:3183 msgid "分享链接" msgstr "" #: install.sh:2666 install.sh:2672 install.sh:2677 install.sh:2682 #: install.sh:2686 msgid "二维码" msgstr "" #: install.sh:2692 install.sh:2693 msgid "配置分享" msgstr "" #: install.sh:2707 msgid "生成分享链接" msgstr "" #: install.sh:2735 install.sh:2746 install.sh:3038 install.sh:3108 #: install.sh:3132 install.sh:3198 install.sh:3246 install.sh:3300 #: install.sh:3352 msgid "请先安装" msgstr "" #: install.sh:2753 msgid "无法获取网卡, 将监控所有网卡" msgstr "" #: install.sh:2755 msgid "监控网卡" msgstr "" #: install.sh:2758 msgid "监控端口" msgstr "" #: install.sh:2760 msgid "按 q 键退出 iftop" msgstr "" #: install.sh:2776 install.sh:2779 install.sh:2782 install.sh:2785 #: install.sh:2788 install.sh:2791 install.sh:2794 install.sh:2797 #: install.sh:2800 install.sh:2803 install.sh:2806 msgid "安装成功" msgstr "" #: install.sh:2810 msgid "目前分享链接规范为实验阶段, 请自行判断是否适用" msgstr "" #: install.sh:2812 install.sh:4224 msgid "配置信息" msgstr "" #: install.sh:2813 msgid "主机" msgstr "" #: install.sh:2837 msgid "用户id" msgstr "" #: install.sh:2839 msgid "加密" msgstr "" #: install.sh:2840 msgid "传输协议" msgstr "" #: install.sh:2841 msgid "底层传输安全" msgstr "" #: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868 msgid "路径" msgstr "" #: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868 msgid "不要落下" msgstr "" #: install.sh:2846 install.sh:2849 install.sh:2865 install.sh:2870 msgid "不需要加" msgstr "" #: install.sh:2852 msgid "流控" msgstr "" #: install.sh:2885 msgid "即将申请证书, 支持使用自定义证书" msgstr "" #: install.sh:2886 msgid "如需使用自定义证书, 请按如下步骤:" msgstr "" #: install.sh:2887 msgid "1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)" msgstr "" #: install.sh:2888 msgid "2. 将重命名后的证书文件放入" msgstr "" #: install.sh:2888 msgid "目录后再运行脚本" msgstr "" #: install.sh:2889 msgid "3. 重新运行脚本" msgstr "" #: install.sh:2890 install.sh:3334 msgid "是否继续" msgstr "" #: install.sh:2898 msgid "所有证书文件均已存在, 是否保留" msgstr "" #: install.sh:2904 install.sh:2919 install.sh:2935 file_manager.sh:176 msgid "已删除" msgstr "" #: install.sh:2910 install.sh:2925 install.sh:2942 msgid "证书应用" msgstr "" #: install.sh:2914 msgid "证书文件已存在, 是否保留" msgstr "" #: install.sh:2930 msgid "证书签发残留文件已存在, 是否保留" msgstr "" #: install.sh:2972 install.sh:4219 msgid "添加" msgstr "" #: install.sh:2980 msgid "请选择支持的 TLS 版本" msgstr "" #: install.sh:2981 msgid "建议选择 TLSv1.3 only (安全模式)" msgstr "" #: install.sh:2982 install.sh:2998 msgid "兼容模式" msgstr "" #: install.sh:2983 msgid "安全模式" msgstr "" #: install.sh:2987 msgid "由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)" msgstr "" #: install.sh:2991 install.sh:3003 install.sh:3006 msgid "已切换至" msgstr "" #: install.sh:2995 msgid "请选择 TLS 版本" msgstr "" #: install.sh:2996 msgid "建议选择 TLSv1.3 (安全模式)" msgstr "" #: install.sh:3009 msgid "当前模式不支持" msgstr "" #: install.sh:3016 msgid "Nginx配置文件不存在 或 当前模式不支持" msgstr "" #: install.sh:3130 msgid "此模式不支持修改" msgstr "" #: install.sh:3139 msgid "即将显示用户, 一次仅能显示一个" msgstr "" #: install.sh:3141 msgid "请选择显示用户使用的协议" msgstr "" #: install.sh:3151 msgid "请选择要显示的用户编号" msgstr "" #: install.sh:3156 install.sh:3166 install.sh:3270 install.sh:3292 msgid "选择错误" msgstr "" #: install.sh:3159 msgid "请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户" msgstr "" #: install.sh:3169 install.sh:3295 msgid "请先检测 Xray 是否正确安装" msgstr "" #: install.sh:3187 msgid "是否继续显示用户" msgstr "" #: install.sh:3196 install.sh:3298 msgid "此模式不支持删除用户" msgstr "" #: install.sh:3206 msgid "即将添加用户, 一次仅能添加一个" msgstr "" #: install.sh:3208 msgid "请选择添加用户使用的协议" msgstr "" #: install.sh:3230 msgid "添加用户" msgstr "" #: install.sh:3235 msgid "是否继续添加用户" msgstr "" #: install.sh:3244 msgid "此模式不支持添加用户" msgstr "" #: install.sh:3253 msgid "即将删除用户, 一次仅能删除一个" msgstr "" #: install.sh:3255 msgid "请选择删除用户使用的协议" msgstr "" #: install.sh:3265 msgid "请选择要删除的用户编号" msgstr "" #: install.sh:3274 msgid "主用户无法删除" msgstr "" #: install.sh:3280 msgid "删除用户" msgstr "" #: install.sh:3283 msgid "是否继续删除用户" msgstr "" #: install.sh:3305 install.sh:3309 msgid "文件不存在" msgstr "" #: install.sh:3316 msgid "已配置 Xray 流量统计" msgstr "" #: install.sh:3317 msgid "是否需要关闭此功能" msgstr "" #: install.sh:3323 msgid "关闭 Xray 流量统计" msgstr "" #: install.sh:3332 msgid "流量统计需要使用" msgstr "" #: install.sh:3333 msgid "可能会影响 Xray 性能" msgstr "" #: install.sh:3344 msgid "设置 Xray 流量统计" msgstr "" #: install.sh:3374 install.sh:3394 msgid "已卸载" msgstr "" #: install.sh:3378 msgid "是否卸载" msgstr "" #: install.sh:3382 msgid "已取消卸载" msgstr "" #: install.sh:3405 msgid "是否删除所有脚本文件" msgstr "" #: install.sh:3412 msgid "已删除所有文件" msgstr "" #: install.sh:3413 msgid "ヾ( ̄▽ ̄) 拜拜~" msgstr "" #: install.sh:3418 msgid "已保留脚本文件 (包含 SSL 证书等)" msgstr "" #: install.sh:3422 msgid "是否保留配置文件" msgstr "" #: install.sh:3439 msgid "已清空证书遗留文件" msgstr "" #: install.sh:3469 msgid "秒后" msgstr "" #: install.sh:3669 msgid "检测最新版本失败" msgstr "" #: install.sh:3677 install.sh:3917 msgid "新版本" msgstr "" #: install.sh:3677 install.sh:3917 msgid "更新内容" msgstr "" #: install.sh:3681 msgid "存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新" msgstr "" #: install.sh:3684 msgid "存在新版本, 是否更新" msgstr "" #: install.sh:3688 msgid "检测 脚本 最新版本失败" msgstr "" #: install.sh:3689 msgid "脚本 版本差别过大, 跳过更新" msgstr "" #: install.sh:3697 install.sh:3698 msgid "脚本更新失败" msgstr "" #: install.sh:3704 msgid "更新完成" msgstr "" #: install.sh:3705 install.sh:3929 msgid "脚本版本变化较大, 若服务无法正常运行请卸载后重装" msgstr "" #: install.sh:3714 msgid "当前版本为最新版本" msgstr "" #: install.sh:3727 install.sh:3912 install.sh:3927 install.sh:3940 msgid "下载最新脚本" msgstr "" #: install.sh:3741 msgid "该选项暂时无法使用" msgstr "" #: install.sh:3760 install.sh:4286 msgid "此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装" msgstr "" #: install.sh:3773 install.sh:4300 msgid "此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装" msgstr "" #: install.sh:3876 install.sh:3877 install.sh:3887 install.sh:3891 #: install.sh:3895 install.sh:4211 install.sh:4212 install.sh:4213 #: install.sh:4214 install.sh:4215 install.sh:4216 install.sh:4314 #: install.sh:4319 install.sh:4324 install.sh:4329 msgid "变更" msgstr "" #: install.sh:3876 install.sh:4215 msgid "负载均衡配置" msgstr "" #: install.sh:3879 msgid "清除日志文件" msgstr "" #: install.sh:3880 msgid "查看证书状态" msgstr "" #: install.sh:3881 msgid "更新证书有效期" msgstr "" #: install.sh:3882 msgid "设置证书自动更新" msgstr "" #: install.sh:3883 msgid "设置 Fail2ban 防暴力破解" msgstr "" #: install.sh:3884 msgid "显示帮助" msgstr "" #: install.sh:3885 msgid "修改语言" msgstr "" #: install.sh:3888 install.sh:4218 install.sh:4222 install.sh:4223 #: install.sh:4224 install.sh:4225 install.sh:4230 install.sh:4232 #: fail2ban_manager.sh:15 msgid "查看" msgstr "" #: install.sh:3888 install.sh:4225 msgid "实时流量" msgstr "" #: install.sh:3889 msgid "脚本卸载" msgstr "" #: install.sh:3890 msgid "显示安装信息" msgstr "" #: install.sh:3892 install.sh:4237 msgid "加速" msgstr "" #: install.sh:3894 msgid "更新脚本" msgstr "" #: install.sh:3896 install.sh:3897 msgid "显示" msgstr "" #: install.sh:3896 msgid "访问信息" msgstr "" #: install.sh:3897 msgid "错误信息" msgstr "" #: install.sh:3921 msgid "脚本版本变化较大, 可能存在不兼容情况, 是否继续使用" msgstr "" #: install.sh:3948 msgid "检测失败" msgstr "" #: install.sh:3952 install.sh:3962 install.sh:3971 msgid "有新版" msgstr "" #: install.sh:3955 install.sh:3964 install.sh:3974 msgid "最新版" msgstr "" #: install.sh:3969 msgid "版本未知" msgstr "" #: install.sh:3989 install.sh:3996 msgid "运行中" msgstr "" #: install.sh:3991 install.sh:4014 install.sh:4016 msgid "无需测试" msgstr "" #: install.sh:3993 install.sh:3998 msgid "未运行" msgstr "" #: install.sh:4008 msgid "无法连通" msgstr "" #: install.sh:4010 install.sh:4011 install.sh:4012 msgid "本地正常" msgstr "" #: install.sh:4027 msgid "脚本维护中.. 请稍后再试" msgstr "" #: install.sh:4034 msgid "无法检测所需依赖的在线版本, 请稍后再试" msgstr "" #: install.sh:4051 msgid "请输入数字" msgstr "" #: install.sh:4051 msgid "请输入 1 到 6 之间的有效数字" msgstr "" #: install.sh:4081 msgid "无效的选择" msgstr "" #: install.sh:4122 msgid "请输入备份名称" msgstr "" #: install.sh:4122 msgid "不需要后缀" msgstr "" #: install.sh:4131 msgid "报错信息" msgstr "" #: install.sh:4133 msgid "备份完整性可能受到影响, 请检查上述错误信息" msgstr "" #: install.sh:4137 msgid "备份失败" msgstr "" #: install.sh:4139 msgid "备份成功" msgstr "" #: install.sh:4144 msgid "请确保备份文件在目录" msgstr "" #: install.sh:4148 msgid "没有找到备份文件" msgstr "" #: install.sh:4153 msgid "发现多个备份文件" msgstr "" #: install.sh:4153 msgid "将使用最新的文件进行恢复" msgstr "" #: install.sh:4157 msgid "找到最新备份文件" msgstr "" #: install.sh:4159 msgid "恢复备份" msgstr "" #: install.sh:4163 msgid "恢复成功" msgstr "" #: install.sh:4164 install.sh:4166 msgid "记得安装" msgstr "" #: install.sh:4169 msgid "恢复失败" msgstr "" #: install.sh:4175 msgid "安装管理脚本" msgstr "" #: install.sh:4176 msgid "作者" msgstr "" #: install.sh:4180 msgid "当前模式" msgstr "" #: install.sh:4181 msgid "当前语言" msgstr "" #: install.sh:4184 msgid "可以使用" msgstr "" #: install.sh:4184 msgid "命令管理脚本" msgstr "" #: install.sh:4186 msgid "版本检测" msgstr "" #: install.sh:4187 install.sh:4195 install.sh:4246 msgid "脚本" msgstr "" #: install.sh:4190 msgid "运行状态" msgstr "" #: install.sh:4193 msgid "连通性" msgstr "" #: install.sh:4194 msgid "更新向导" msgstr "" #: install.sh:4205 msgid "安装向导" msgstr "" #: install.sh:4210 msgid "配置变更" msgstr "" #: install.sh:4217 msgid "用户管理" msgstr "" #: install.sh:4218 install.sh:4219 install.sh:4220 msgid "用户" msgstr "" #: install.sh:4221 msgid "查看信息" msgstr "" #: install.sh:4222 msgid "实时访问日志" msgstr "" #: install.sh:4223 msgid "实时错误日志" msgstr "" #: install.sh:4226 msgid "服务相关" msgstr "" #: install.sh:4227 install.sh:4228 install.sh:4229 install.sh:4230 msgid "所有服务" msgstr "" #: install.sh:4231 msgid "证书相关" msgstr "" #: install.sh:4232 msgid "证书状态" msgstr "" #: install.sh:4233 msgid "证书有效期" msgstr "" #: install.sh:4234 msgid "证书自动更新" msgstr "" #: install.sh:4235 msgid "其他选项" msgstr "" #: install.sh:4236 msgid "自动更新" msgstr "" #: install.sh:4238 msgid "防暴力破解" msgstr "" #: install.sh:4239 msgid "流量统计" msgstr "" #: install.sh:4240 msgid "清除" msgstr "" #: install.sh:4240 msgid "日志文件" msgstr "" #: install.sh:4241 msgid "测试" msgstr "" #: install.sh:4241 msgid "服务器网速" msgstr "" #: install.sh:4242 msgid "备份恢复" msgstr "" #: install.sh:4243 install.sh:4244 msgid "全部文件" msgstr "" #: install.sh:4244 msgid "恢复" msgstr "" #: install.sh:4245 msgid "卸载向导" msgstr "" #: install.sh:4246 fail2ban_manager.sh:14 fail2ban_manager.sh:415 msgid "卸载" msgstr "" #: install.sh:4247 msgid "清空" msgstr "" #: install.sh:4247 msgid "证书文件" msgstr "" #: install.sh:4248 fail2ban_manager.sh:16 file_manager.sh:208 msgid "退出" msgstr "" #: install.sh:4251 msgid "请输入选项" msgstr "" #: install.sh:4259 install.sh:4268 install.sh:4334 install.sh:4340 #: install.sh:4385 install.sh:4391 install.sh:4397 install.sh:4426 #: install.sh:4467 install.sh:4474 install.sh:4479 fail2ban_manager.sh:416 msgid "清空屏幕" msgstr "" #: install.sh:4265 msgid "不建议" msgstr "" #: install.sh:4265 msgid "频繁更新 Nginx, 请确认 Nginx 有更新的必要" msgstr "" #: install.sh:4266 msgid "开始更新" msgstr "" #: install.sh:4346 install.sh:4353 install.sh:4360 install.sh:4410 #: install.sh:4415 install.sh:4420 install.sh:4442 msgid "回到菜单" msgstr "" #: fail2ban_manager.sh:10 msgid "用于防止暴力破解" msgstr "" #: fail2ban_manager.sh:11 file_manager.sh:203 msgid "主菜单" msgstr "" #: fail2ban_manager.sh:13 msgid "管理" msgstr "" #: fail2ban_manager.sh:15 fail2ban_manager.sh:339 msgid "状态" msgstr "" #: fail2ban_manager.sh:18 file_manager.sh:210 msgid "请选择一个选项" msgstr "" #: fail2ban_manager.sh:27 fail2ban_manager.sh:250 fail2ban_manager.sh:258 #: fail2ban_manager.sh:363 msgid "无效的选择, 请重试" msgstr "" #: fail2ban_manager.sh:35 msgid "已经安装, 跳过安装步骤" msgstr "" #: fail2ban_manager.sh:68 msgid "systemd 无法读取 SSH 日志" msgstr "" #: fail2ban_manager.sh:69 msgid "跳过启用" msgstr "" #: fail2ban_manager.sh:69 fail2ban_manager.sh:93 fail2ban_manager.sh:103 #: fail2ban_manager.sh:120 fail2ban_manager.sh:125 fail2ban_manager.sh:128 #: fail2ban_manager.sh:146 fail2ban_manager.sh:151 fail2ban_manager.sh:154 msgid "规则" msgstr "" #: fail2ban_manager.sh:77 fail2ban_manager.sh:203 fail2ban_manager.sh:440 msgid "未安装, 请先安装" msgstr "" #: fail2ban_manager.sh:125 fail2ban_manager.sh:151 fail2ban_manager.sh:349 msgid "已禁用" msgstr "" #: fail2ban_manager.sh:209 msgid "请选择" msgstr "" #: fail2ban_manager.sh:209 msgid "操作" msgstr "" #: fail2ban_manager.sh:210 msgid "管理模块" msgstr "" #: fail2ban_manager.sh:211 msgid "添加自定义规则" msgstr "" #: fail2ban_manager.sh:212 fail2ban_manager.sh:228 msgid "服务管理" msgstr "" #: fail2ban_manager.sh:271 msgid "请输入新的" msgstr "" #: fail2ban_manager.sh:271 fail2ban_manager.sh:272 msgid "名称" msgstr "" #: fail2ban_manager.sh:273 msgid "请输入日志路径" msgstr "" #: fail2ban_manager.sh:274 msgid "请输入最大重试次数" msgstr "" #: fail2ban_manager.sh:274 msgid "最大重试次数必须在 1 到 99 之间" msgstr "" #: fail2ban_manager.sh:275 msgid "请输入封禁时间" msgstr "" #: fail2ban_manager.sh:275 msgid "秒" msgstr "" #: fail2ban_manager.sh:275 msgid "封禁时间必须在 1 到 8640000 秒之间" msgstr "" #: fail2ban_manager.sh:285 msgid "自定义规则添加成功" msgstr "" #: fail2ban_manager.sh:289 msgid "重启以应用新规则" msgstr "" #: fail2ban_manager.sh:294 msgid "管理 Fail2ban 模块" msgstr "" #: fail2ban_manager.sh:311 msgid "未找到任何模块化配置文件" msgstr "" #: fail2ban_manager.sh:319 fail2ban_manager.sh:339 msgid "模块名称" msgstr "" #: fail2ban_manager.sh:339 file_manager.sh:59 msgid "序号" msgstr "" #: fail2ban_manager.sh:363 msgid "请选择要管理的模块" msgstr "" #: fail2ban_manager.sh:375 msgid "启用" msgstr "" #: fail2ban_manager.sh:375 msgid "禁用" msgstr "" #: fail2ban_manager.sh:378 msgid "是否" msgstr "" #: fail2ban_manager.sh:378 fail2ban_manager.sh:386 msgid "模块" msgstr "" #: fail2ban_manager.sh:388 msgid "操作已取消" msgstr "" #: fail2ban_manager.sh:424 msgid "停止成功" msgstr "" #: fail2ban_manager.sh:444 msgid "总体状态" msgstr "" #: fail2ban_manager.sh:448 msgid "默认启用的 Jail 状态" msgstr "" #: fail2ban_manager.sh:452 fail2ban_manager.sh:458 msgid "封锁情况" msgstr "" #: fail2ban_manager.sh:453 fail2ban_manager.sh:459 fail2ban_manager.sh:462 #: fail2ban_manager.sh:466 fail2ban_manager.sh:469 msgid "未启用或配置异常" msgstr "" #: fail2ban_manager.sh:484 file_manager.sh:232 msgid "新版本可用" msgstr "" #: fail2ban_manager.sh:484 file_manager.sh:232 msgid "当前版本" msgstr "" #: fail2ban_manager.sh:485 file_manager.sh:233 msgid "请访问" msgstr "" #: fail2ban_manager.sh:485 file_manager.sh:233 msgid "查看更新说明" msgstr "" #: fail2ban_manager.sh:487 file_manager.sh:235 msgid "是否下载并安装新版本" msgstr "" #: fail2ban_manager.sh:491 file_manager.sh:239 msgid "正在下载新版本" msgstr "" #: fail2ban_manager.sh:496 file_manager.sh:244 msgid "下载完成, 请重新运行脚本" msgstr "" #: fail2ban_manager.sh:504 file_manager.sh:252 msgid "跳过更新" msgstr "" #: fail2ban_manager.sh:508 file_manager.sh:256 msgid "当前已经是最新版本" msgstr "" #: file_manager.sh:7 msgid "用法" msgstr "" #: file_manager.sh:7 msgid "文件扩展名" msgstr "" #: file_manager.sh:7 msgid "目录路径" msgstr "" #: file_manager.sh:16 msgid "目录" msgstr "" #: file_manager.sh:16 msgid "不存在, 请检查路径" msgstr "" #: file_manager.sh:26 file_manager.sh:204 msgid "列出所有" msgstr "" #: file_manager.sh:26 file_manager.sh:35 file_manager.sh:88 file_manager.sh:111 #: file_manager.sh:160 file_manager.sh:176 file_manager.sh:204 #: file_manager.sh:205 file_manager.sh:206 file_manager.sh:207 msgid "文件" msgstr "" #: file_manager.sh:53 msgid "文件名" msgstr "" #: file_manager.sh:79 msgid "请输入网址 (例如 hey.run)" msgstr "" #: file_manager.sh:80 msgid "不要包含 http:// 或 https:// 开头" msgstr "" #: file_manager.sh:84 msgid "网址不能包含 http:// 或 https:// 前缀" msgstr "" #: file_manager.sh:88 file_manager.sh:111 msgid "已创建" msgstr "" #: file_manager.sh:99 msgid "请输入主机" msgstr "" #: file_manager.sh:107 msgid "请输入权重" msgstr "" #: file_manager.sh:128 msgid "追加完成" msgstr "" #: file_manager.sh:132 file_manager.sh:136 msgid "重启完成" msgstr "" #: file_manager.sh:151 msgid "请输入要编辑的文件编号" msgstr "" #: file_manager.sh:156 msgid "未安装, 正在尝试安装" msgstr "" #: file_manager.sh:160 msgid "已编辑" msgstr "" #: file_manager.sh:171 msgid "请输入要删除的文件编号" msgstr "" #: file_manager.sh:194 msgid "不支持的文件扩展名" msgstr "" #: file_manager.sh:205 msgid "创建一个新的" msgstr "" #: file_manager.sh:206 msgid "编辑一个已存在的" msgstr "" #: file_manager.sh:207 msgid "删除一个已存在的" msgstr "" #: file_manager.sh:265 msgid "重启成功" msgstr "" #: file_manager.sh:268 msgid "重启失败" msgstr "" #: file_manager.sh:268 msgid "请检查配置文件是否有误" msgstr "" ================================================ FILE: po/zh_CN.po ================================================ # Chinese translations for xray_install package. # Copyright (C) 2026 yunshu # This file is distributed under the same license as the xray_install package. # Automatically generated, 2026. # msgid "" msgstr "" "Project-Id-Version: xray_install 1.0\n" "Report-Msgid-Bugs-To: https://github.com/hello-yunshu/Xray_bash_onekey/" "issues\n" "POT-Creation-Date: 2026-04-24 09:47+0000\n" "PO-Revision-Date: 2026-04-24 09:47+0000\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: install.sh:32 msgid "信息" msgstr "" #: install.sh:34 msgid "错误" msgstr "" #: install.sh:35 msgid "警告" msgstr "" #: install.sh:38 install.sh:1540 install.sh:3960 install.sh:3977 #: install.sh:3980 install.sh:3981 install.sh:4019 msgid "未安装" msgstr "" #: install.sh:99 msgid "日志文件归档失败" msgstr "" #: install.sh:104 msgid "日志文件清空失败" msgstr "" #: install.sh:108 msgid "日志文件已轮转并归档为" msgstr "" #: install.sh:134 install.sh:138 install.sh:142 install.sh:152 msgid "当前系统为" msgstr "" #: install.sh:152 msgid "不在支持的系统列表内, 安装中断" msgstr "" #: install.sh:159 msgid "当前用户是 root 用户, 开始安装" msgstr "" #: install.sh:161 msgid "当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本" msgstr "" #: install.sh:187 msgid "无法获取远程语言文件信息" msgstr "" #: install.sh:205 msgid "正在更新语言文件" msgstr "" #: install.sh:208 install.sh:291 msgid "语言文件更新失败" msgstr "" #: install.sh:213 msgid "语言文件无效" msgstr "" #: install.sh:219 msgid "版本文件更新失败" msgstr "" #: install.sh:226 msgid "语言文件更新完成" msgstr "" #: install.sh:231 install.sh:2725 msgid "正在安装" msgstr "" #: install.sh:234 msgid "安装失败" msgstr "" #: install.sh:234 install.sh:258 install.sh:281 install.sh:291 msgid "将使用默认语言" msgstr "" #: install.sh:258 file_manager.sh:35 msgid "未找到" msgstr "" #: install.sh:281 msgid "不支持的语言" msgstr "" #: install.sh:297 msgid "发现语言文件更新" msgstr "" #: install.sh:312 install.sh:1740 msgid "完成" msgstr "" #: install.sh:315 msgid "失败" msgstr "" #: install.sh:322 msgid "在线版本检测失败, 请稍后再试" msgstr "" #: install.sh:344 install.sh:352 install.sh:1162 install.sh:3872 #: install.sh:3873 install.sh:3874 install.sh:3875 install.sh:4206 #: install.sh:4207 install.sh:4208 install.sh:4209 fail2ban_manager.sh:12 #: fail2ban_manager.sh:39 msgid "安装" msgstr "" #: install.sh:346 install.sh:354 install.sh:1169 install.sh:2729 #: install.sh:3969 msgid "已安装" msgstr "" #: install.sh:371 install.sh:375 msgid "自启动配置" msgstr "" #: install.sh:384 msgid "链接库安装" msgstr "" #: install.sh:389 msgid "值为空或超出范围, 请重新输入" msgstr "" #: install.sh:398 msgid "值为空, 请重新输入" msgstr "" #: install.sh:440 msgid "确定端口" msgstr "" #: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:104 msgid "请输入端口" msgstr "" #: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:107 msgid "默认值" msgstr "" #: install.sh:441 install.sh:444 install.sh:532 install.sh:554 install.sh:3055 #: install.sh:3060 install.sh:3065 install.sh:3066 install.sh:3081 #: install.sh:3086 install.sh:3091 install.sh:3092 msgid "请输入 0-65535 之间的值" msgstr "" #: install.sh:443 msgid "端口不允许使用, 请重新输入" msgstr "" #: install.sh:452 msgid "请选择安装协议" msgstr "" #: install.sh:453 install.sh:1617 install.sh:1654 install.sh:1705 #: install.sh:2997 install.sh:3142 install.sh:3209 install.sh:3256 #: fail2ban_manager.sh:274 fail2ban_manager.sh:275 msgid "默认" msgstr "" #: install.sh:457 install.sh:532 install.sh:554 install.sh:635 install.sh:668 #: install.sh:821 install.sh:840 install.sh:881 install.sh:922 install.sh:1621 #: install.sh:1634 install.sh:1656 install.sh:1709 install.sh:1719 #: install.sh:2985 install.sh:3000 install.sh:3055 install.sh:3060 #: install.sh:3065 install.sh:3066 install.sh:3081 install.sh:3086 #: install.sh:3091 install.sh:3092 install.sh:3145 install.sh:3154 #: install.sh:3212 install.sh:3259 install.sh:3268 fail2ban_manager.sh:215 #: fail2ban_manager.sh:234 fail2ban_manager.sh:272 file_manager.sh:81 msgid "请输入" msgstr "" #: install.sh:457 install.sh:922 install.sh:1621 install.sh:1656 #: install.sh:1709 install.sh:2985 install.sh:3000 install.sh:3145 #: install.sh:3212 install.sh:3259 install.sh:4251 install.sh:4489 msgid "请输入有效的数字" msgstr "" #: install.sh:478 msgid "是否添加简单 ws/gRPC 协议 用于负载均衡" msgstr "" #: install.sh:479 install.sh:1259 msgid "如不清楚具体用途, 请勿选择" msgstr "" #: install.sh:499 msgid "已跳过添加简单 ws/gRPC 协议" msgstr "" #: install.sh:528 install.sh:550 install.sh:631 install.sh:648 install.sh:664 #: install.sh:681 install.sh:696 install.sh:815 install.sh:836 install.sh:877 msgid "是否需要自定义" msgstr "" #: install.sh:532 install.sh:554 msgid "请勿与其他端口相同" msgstr "" #: install.sh:571 file_manager.sh:114 msgid "是否需要设置防火墙" msgstr "" #: install.sh:611 install.sh:615 file_manager.sh:128 file_manager.sh:132 #: file_manager.sh:136 msgid "防火墙" msgstr "" #: install.sh:611 install.sh:615 install.sh:2215 install.sh:2218 #: install.sh:3012 install.sh:3014 install.sh:4227 fail2ban_manager.sh:231 #: fail2ban_manager.sh:432 msgid "重启" msgstr "" #: install.sh:617 msgid "开放防火墙相关端口" msgstr "" #: install.sh:618 msgid "若修改配置, 请注意关闭防火墙相关端口" msgstr "" #: install.sh:619 install.sh:3877 install.sh:3892 install.sh:3893 #: install.sh:4216 install.sh:4236 fail2ban_manager.sh:161 msgid "配置" msgstr "" #: install.sh:622 file_manager.sh:140 msgid "跳过防火墙设置" msgstr "" #: install.sh:631 install.sh:635 install.sh:636 install.sh:640 install.sh:648 #: install.sh:664 install.sh:668 install.sh:669 install.sh:673 install.sh:681 #: install.sh:1101 msgid "伪装路径" msgstr "" #: install.sh:635 install.sh:668 msgid "不需要" msgstr "" #: install.sh:696 install.sh:706 install.sh:3172 msgid "用户名" msgstr "" #: install.sh:700 msgid "请输入正确的 email" msgstr "" #: install.sh:713 msgid "是否需要自定义字符串映射" msgstr "" #: install.sh:717 msgid "请输入自定义字符串" msgstr "" #: install.sh:717 msgid "最多30字符" msgstr "" #: install.sh:719 msgid "自定义字符串" msgstr "" #: install.sh:726 install.sh:2836 install.sh:3895 install.sh:4211 #: install.sh:4314 msgid "映射字符串" msgstr "" #: install.sh:737 msgid "检测到 target 域名已配置, 是否保留" msgstr "" #: install.sh:757 msgid "请输入一个域名" msgstr "" #: install.sh:758 msgid "域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用" msgstr "" #: install.sh:759 msgid "确认域名符合要求后请输入" msgstr "" #: install.sh:760 msgid "正在检测域名请等待" msgstr "" #: install.sh:767 install.sh:772 install.sh:777 msgid "该域名不支持" msgstr "" #: install.sh:782 msgid "该域名发生了跳转" msgstr "" #: install.sh:789 msgid "该域名可能不满足所有要求" msgstr "" #: install.sh:790 msgid "是否仍要设置此域名" msgstr "" #: install.sh:802 install.sh:807 install.sh:1619 msgid "域名" msgstr "" #: install.sh:802 msgid "满足所有要求" msgstr "" #: install.sh:815 msgid "域名的" msgstr "" #: install.sh:816 msgid "默认为" msgstr "" #: install.sh:816 msgid "域名本身" msgstr "" #: install.sh:817 install.sh:912 install.sh:952 msgid "如不清楚具体用途, 请勿继续" msgstr "" #: install.sh:898 msgid "本地文件 file_manager.sh 不存在, 正在下载" msgstr "" #: install.sh:900 install.sh:2330 fail2ban_manager.sh:500 file_manager.sh:248 msgid "下载失败, 请手动下载并安装新版本" msgstr "" #: install.sh:911 install.sh:951 msgid "是否变更" msgstr "" #: install.sh:911 msgid "负载均衡" msgstr "" #: install.sh:917 msgid "请选择协议为 ws 或 gRPC" msgstr "" #: install.sh:920 fail2ban_manager.sh:213 fail2ban_manager.sh:232 #: fail2ban_manager.sh:325 fail2ban_manager.sh:357 msgid "返回" msgstr "" #: install.sh:930 file_manager.sh:220 msgid "无效选项, 请重试" msgstr "" #: install.sh:940 install.sh:964 install.sh:2266 install.sh:2304 #: install.sh:2320 msgid "当前模式不支持此操作" msgstr "" #: install.sh:953 msgid "配置用途可以参考文章" msgstr "" #: install.sh:980 install.sh:991 install.sh:995 install.sh:999 install.sh:1011 #: install.sh:1016 install.sh:1020 install.sh:1025 install.sh:1045 #: install.sh:1051 install.sh:1101 install.sh:1120 install.sh:3893 #: install.sh:4177 msgid "修改" msgstr "" #: install.sh:1053 install.sh:2816 install.sh:2818 install.sh:2820 #: install.sh:2821 install.sh:2824 install.sh:2828 install.sh:2830 #: install.sh:2832 install.sh:2833 install.sh:2861 install.sh:2864 #: install.sh:2867 install.sh:2869 install.sh:3049 msgid "端口" msgstr "" #: install.sh:1103 msgid "不支持" msgstr "" #: install.sh:1110 msgid "用户名修改" msgstr "" #: install.sh:1113 install.sh:1123 msgid "请先删除多余的用户" msgstr "" #: install.sh:1131 install.sh:1139 install.sh:1146 install.sh:1990 #: install.sh:2061 install.sh:2146 install.sh:2154 install.sh:2163 #: install.sh:2186 msgid "配置修改" msgstr "" #: install.sh:1151 msgid "检测到 Xray 的权限控制, 启动修改程序" msgstr "" #: install.sh:1156 msgid "修改完成" msgstr "" #: install.sh:1176 msgid "若更新无效, 建议直接卸载再安装" msgstr "" #: install.sh:1177 msgid "部分新功能需要重新安装才可生效" msgstr "" #: install.sh:1182 msgid "检测到存在最新版" msgstr "" #: install.sh:1183 msgid "脚本可能未兼容此版本" msgstr "" #: install.sh:1184 msgid "是否更新" msgstr "" #: install.sh:1188 install.sh:1213 install.sh:1532 install.sh:3886 #: install.sh:3898 install.sh:4195 install.sh:4196 install.sh:4197 #: install.sh:4233 msgid "更新" msgstr "" #: install.sh:1192 install.sh:1494 msgid "启动失败" msgstr "" #: install.sh:1193 install.sh:1497 msgid "是否回滚到之前的版本" msgstr "" #: install.sh:1197 install.sh:1507 msgid "未执行回滚操作" msgstr "" #: install.sh:1201 install.sh:1511 msgid "正在回滚" msgstr "" #: install.sh:1205 install.sh:1518 msgid "已成功回滚到之前的" msgstr "" #: install.sh:1205 install.sh:1518 install.sh:4214 install.sh:4329 msgid "版本" msgstr "" #: install.sh:1207 install.sh:1228 install.sh:1524 msgid "回滚失败" msgstr "" #: install.sh:1234 install.sh:1238 msgid "重装" msgstr "" #: install.sh:1248 install.sh:1249 msgid "更新失败" msgstr "" #: install.sh:1257 msgid "是否添加 Reality 负载均衡" msgstr "" #: install.sh:1258 msgid "使用此功能前,建议先阅读作者教程" msgstr "" #: install.sh:1264 fail2ban_manager.sh:93 fail2ban_manager.sh:103 #: fail2ban_manager.sh:128 fail2ban_manager.sh:154 fail2ban_manager.sh:347 msgid "已启用" msgstr "" #: install.sh:1268 msgid "已跳过" msgstr "" #: install.sh:1277 msgid "Reality 协议有流量偷跑的风险" msgstr "" #: install.sh:1279 install.sh:1306 msgid "是否额外安装 nginx 前置保护" msgstr "" #: install.sh:1279 msgid "推荐" msgstr "" #: install.sh:1286 install.sh:1321 msgid "检测到已安装" msgstr "" #: install.sh:1289 install.sh:1324 msgid "已跳过安装" msgstr "" #: install.sh:1303 msgid "检测到已开启 Reality 负载均衡" msgstr "" #: install.sh:1304 msgid "如用作 Reality 负载均衡主服务器必须安装" msgstr "" #: install.sh:1305 msgid "如用作 Reality 负载均衡二级服务器则无需安装" msgstr "" #: install.sh:1349 msgid "已存在, 跳过编译安装过程" msgstr "" #: install.sh:1351 msgid "检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装" msgstr "" #: install.sh:1364 msgid "即将下载已编译的" msgstr "" #: install.sh:1374 msgid "不支持的系统架构" msgstr "" #: install.sh:1383 msgid "下载失败" msgstr "" #: install.sh:1387 msgid "下载成功" msgstr "" #: install.sh:1390 msgid "解压失败" msgstr "" #: install.sh:1438 install.sh:1439 install.sh:1446 install.sh:1447 msgid "配置不完整, 退出更新" msgstr "" #: install.sh:1451 install.sh:1452 msgid "当前安装模式不需要" msgstr "" #: install.sh:1456 install.sh:1457 msgid "配置不存在, 退出更新" msgstr "" #: install.sh:1463 msgid "备份旧版" msgstr "" #: install.sh:1464 msgid "删除旧版" msgstr "" #: install.sh:1468 msgid "是否保留原 Nginx 配置文件" msgstr "" #: install.sh:1476 install.sh:1809 msgid "原配置文件已删除" msgstr "" #: install.sh:1480 msgid "原配置文件已保留" msgstr "" #: install.sh:1534 install.sh:4220 msgid "删除" msgstr "" #: install.sh:1534 install.sh:4243 msgid "备份" msgstr "" #: install.sh:1537 msgid "已为最新版" msgstr "" #: install.sh:1553 msgid "设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)" msgstr "" #: install.sh:1554 msgid "可能自动更新后有兼容问题, 谨慎启用" msgstr "" #: install.sh:1555 fail2ban_manager.sh:120 fail2ban_manager.sh:146 msgid "是否启用" msgstr "" #: install.sh:1561 install.sh:3878 msgid "设置自动更新" msgstr "" #: install.sh:1566 msgid "已设置自动更新" msgstr "" #: install.sh:1567 msgid "是否关闭" msgstr "" #: install.sh:1573 msgid "删除自动更新" msgstr "" #: install.sh:1582 msgid "安装 SSL 证书生成脚本依赖" msgstr "" #: install.sh:1584 msgid "安装 SSL 证书生成脚本" msgstr "" #: install.sh:1590 msgid "检测到原域名配置存在, 是否跳过域名设置" msgstr "" #: install.sh:1605 install.sh:1642 install.sh:1693 install.sh:1726 msgid "无法获取公网IP地址" msgstr "" #: install.sh:1605 install.sh:1642 install.sh:1665 install.sh:1693 #: install.sh:1726 msgid "安装终止" msgstr "" #: install.sh:1608 msgid "已跳过域名设置" msgstr "" #: install.sh:1614 msgid "确定域名信息" msgstr "" #: install.sh:1615 msgid "请输入你的域名信息" msgstr "" #: install.sh:1616 msgid "请选择公网IP(IPv4/IPv6)或手动输入域名" msgstr "" #: install.sh:1622 install.sh:1711 msgid "正在获取公网IP信息, 请耐心等待" msgstr "" #: install.sh:1632 msgid "此选项用于服务器商仅提供域名访问服务器" msgstr "" #: install.sh:1633 msgid "注意服务器商域名添加 CNAME 记录" msgstr "" #: install.sh:1645 msgid "域名DNS解析IP" msgstr "" #: install.sh:1646 install.sh:1729 msgid "公网IP/域名" msgstr "" #: install.sh:1648 msgid "域名DNS解析IP与公网IP匹配" msgstr "" #: install.sh:1650 msgid "请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray" msgstr "" #: install.sh:1651 msgid "域名DNS解析IP与公网IP不匹配, 请选择" msgstr "" #: install.sh:1652 install.sh:1659 msgid "继续安装" msgstr "" #: install.sh:1653 msgid "重新输入" msgstr "" #: install.sh:1654 msgid "终止安装" msgstr "" #: install.sh:1676 msgid "检测到原IP配置存在, 是否跳过IP设置" msgstr "" #: install.sh:1697 msgid "已跳过IP设置" msgstr "" #: install.sh:1703 msgid "确定公网IP信息" msgstr "" #: install.sh:1704 msgid "请选择公网IP为IPv4或IPv6" msgstr "" #: install.sh:1707 msgid "手动输入" msgstr "" #: install.sh:1734 msgid "端口未被占用" msgstr "" #: install.sh:1736 msgid "检测到" msgstr "" #: install.sh:1736 msgid "端口被占用" msgstr "" #: install.sh:1736 msgid "以下为" msgstr "" #: install.sh:1736 msgid "端口占用信息" msgstr "" #: install.sh:1738 msgid "尝试终止占用的进程" msgstr "" #: install.sh:1749 msgid "证书测试签发成功, 开始正式签发" msgstr "" #: install.sh:1752 msgid "证书测试签发失败" msgstr "" #: install.sh:1759 msgid "证书生成成功" msgstr "" #: install.sh:1765 msgid "证书配置成功" msgstr "" #: install.sh:1769 msgid "证书生成失败" msgstr "" #: install.sh:1801 msgid "检测到 Xray 配置过多用户" msgstr "" #: install.sh:1802 msgid "是否保留原 Xray 配置文件" msgstr "" #: install.sh:1822 msgid "添加简单 ws/gRPC 协议" msgstr "" #: install.sh:1837 msgid "检测到配置文件, 是否读取配置文件" msgstr "" #: install.sh:1842 install.sh:1863 install.sh:1961 install.sh:3430 msgid "已删除配置文件" msgstr "" #: install.sh:1845 install.sh:1858 install.sh:1956 install.sh:3426 msgid "已保留配置文件" msgstr "" #: install.sh:1852 msgid "检测到当前安装模式与配置文件的安装模式不一致" msgstr "" #: install.sh:1853 msgid "是否保留配置文件 (强烈不建议)" msgstr "" #: install.sh:1857 msgid "请务必确保配置文件正确" msgstr "" #: install.sh:1951 msgid "检测到配置文件不完整, 是否保留配置文件" msgstr "" #: install.sh:2170 msgid "配置删除" msgstr "" #: install.sh:2191 msgid "设置 Nginx 开机自启" msgstr "" #: install.sh:2194 install.sh:4234 install.sh:4237 install.sh:4238 #: install.sh:4239 fail2ban_manager.sh:10 msgid "设置" msgstr "" #: install.sh:2194 install.sh:2202 msgid "开机自启" msgstr "" #: install.sh:2199 msgid "关闭 Nginx 开机自启" msgstr "" #: install.sh:2202 msgid "关闭" msgstr "" #: install.sh:2209 install.sh:2231 install.sh:2234 install.sh:2294 #: install.sh:4229 fail2ban_manager.sh:230 msgid "停止" msgstr "" #: install.sh:2223 install.sh:2226 install.sh:2761 install.sh:4228 #: fail2ban_manager.sh:229 fail2ban_manager.sh:398 msgid "启动" msgstr "" #: install.sh:2247 install.sh:2263 msgid "新版本已自动设置证书自动更新" msgstr "" #: install.sh:2248 msgid "老版本请及时删除 废弃的 改版证书自动更新" msgstr "" #: install.sh:2249 msgid "已设置改版证书自动更新" msgstr "" #: install.sh:2250 msgid "是否需要删除改版证书自动更新 (请删除)" msgstr "" #: install.sh:2257 msgid "删除改版证书自动更新" msgstr "" #: install.sh:2281 msgid "已过期" msgstr "" #: install.sh:2283 msgid "证书生成日期" msgstr "" #: install.sh:2284 msgid "证书生成天数" msgstr "" #: install.sh:2285 msgid "证书剩余天数" msgstr "" #: install.sh:2289 msgid "是否立即更新证书" msgstr "" #: install.sh:2301 install.sh:2313 msgid "证书签发工具不存在, 请确认是否证书为脚本签发" msgstr "" #: install.sh:2317 msgid "证书更新" msgstr "" #: install.sh:2327 msgid "本地文件 fail2ban_manager.sh 不存在, 正在下载" msgstr "" #: install.sh:2342 msgid "是否需要设置自动清理日志" msgstr "" #: install.sh:2346 msgid "已跳过设置自动清理日志" msgstr "" #: install.sh:2349 msgid "将在 每周三 04:00 自动清空日志" msgstr "" #: install.sh:2354 msgid "已设置自动清理日志任务" msgstr "" #: install.sh:2355 msgid "是否需要删除现有自动清理日志任务" msgstr "" #: install.sh:2360 msgid "删除自动清理日志任务" msgstr "" #: install.sh:2363 msgid "保留现有自动清理日志任务" msgstr "" #: install.sh:2378 msgid "设置自动清理日志" msgstr "" #: install.sh:2385 msgid "检测到日志文件大小如下:" msgstr "" #: install.sh:2387 msgid "即将清除" msgstr "" #: install.sh:2389 msgid "日志清理" msgstr "" #: install.sh:2663 msgid "链接分享" msgstr "" #: install.sh:2665 install.sh:2671 install.sh:2676 install.sh:2681 #: install.sh:2685 install.sh:3183 msgid "分享链接" msgstr "" #: install.sh:2666 install.sh:2672 install.sh:2677 install.sh:2682 #: install.sh:2686 msgid "二维码" msgstr "" #: install.sh:2692 install.sh:2693 msgid "配置分享" msgstr "" #: install.sh:2707 msgid "生成分享链接" msgstr "" #: install.sh:2735 install.sh:2746 install.sh:3038 install.sh:3108 #: install.sh:3132 install.sh:3198 install.sh:3246 install.sh:3300 #: install.sh:3352 msgid "请先安装" msgstr "" #: install.sh:2753 msgid "无法获取网卡, 将监控所有网卡" msgstr "" #: install.sh:2755 msgid "监控网卡" msgstr "" #: install.sh:2758 msgid "监控端口" msgstr "" #: install.sh:2760 msgid "按 q 键退出 iftop" msgstr "" #: install.sh:2776 install.sh:2779 install.sh:2782 install.sh:2785 #: install.sh:2788 install.sh:2791 install.sh:2794 install.sh:2797 #: install.sh:2800 install.sh:2803 install.sh:2806 msgid "安装成功" msgstr "" #: install.sh:2810 msgid "目前分享链接规范为实验阶段, 请自行判断是否适用" msgstr "" #: install.sh:2812 install.sh:4224 msgid "配置信息" msgstr "" #: install.sh:2813 msgid "主机" msgstr "" #: install.sh:2837 msgid "用户id" msgstr "" #: install.sh:2839 msgid "加密" msgstr "" #: install.sh:2840 msgid "传输协议" msgstr "" #: install.sh:2841 msgid "底层传输安全" msgstr "" #: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868 msgid "路径" msgstr "" #: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868 msgid "不要落下" msgstr "" #: install.sh:2846 install.sh:2849 install.sh:2865 install.sh:2870 msgid "不需要加" msgstr "" #: install.sh:2852 msgid "流控" msgstr "" #: install.sh:2885 msgid "即将申请证书, 支持使用自定义证书" msgstr "" #: install.sh:2886 msgid "如需使用自定义证书, 请按如下步骤:" msgstr "" #: install.sh:2887 msgid "1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)" msgstr "" #: install.sh:2888 msgid "2. 将重命名后的证书文件放入" msgstr "" #: install.sh:2888 msgid "目录后再运行脚本" msgstr "" #: install.sh:2889 msgid "3. 重新运行脚本" msgstr "" #: install.sh:2890 install.sh:3334 msgid "是否继续" msgstr "" #: install.sh:2898 msgid "所有证书文件均已存在, 是否保留" msgstr "" #: install.sh:2904 install.sh:2919 install.sh:2935 file_manager.sh:176 msgid "已删除" msgstr "" #: install.sh:2910 install.sh:2925 install.sh:2942 msgid "证书应用" msgstr "" #: install.sh:2914 msgid "证书文件已存在, 是否保留" msgstr "" #: install.sh:2930 msgid "证书签发残留文件已存在, 是否保留" msgstr "" #: install.sh:2972 install.sh:4219 msgid "添加" msgstr "" #: install.sh:2980 msgid "请选择支持的 TLS 版本" msgstr "" #: install.sh:2981 msgid "建议选择 TLSv1.3 only (安全模式)" msgstr "" #: install.sh:2982 install.sh:2998 msgid "兼容模式" msgstr "" #: install.sh:2983 msgid "安全模式" msgstr "" #: install.sh:2987 msgid "由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)" msgstr "" #: install.sh:2991 install.sh:3003 install.sh:3006 msgid "已切换至" msgstr "" #: install.sh:2995 msgid "请选择 TLS 版本" msgstr "" #: install.sh:2996 msgid "建议选择 TLSv1.3 (安全模式)" msgstr "" #: install.sh:3009 msgid "当前模式不支持" msgstr "" #: install.sh:3016 msgid "Nginx配置文件不存在 或 当前模式不支持" msgstr "" #: install.sh:3130 msgid "此模式不支持修改" msgstr "" #: install.sh:3139 msgid "即将显示用户, 一次仅能显示一个" msgstr "" #: install.sh:3141 msgid "请选择显示用户使用的协议" msgstr "" #: install.sh:3151 msgid "请选择要显示的用户编号" msgstr "" #: install.sh:3156 install.sh:3166 install.sh:3270 install.sh:3292 msgid "选择错误" msgstr "" #: install.sh:3159 msgid "请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户" msgstr "" #: install.sh:3169 install.sh:3295 msgid "请先检测 Xray 是否正确安装" msgstr "" #: install.sh:3187 msgid "是否继续显示用户" msgstr "" #: install.sh:3196 install.sh:3298 msgid "此模式不支持删除用户" msgstr "" #: install.sh:3206 msgid "即将添加用户, 一次仅能添加一个" msgstr "" #: install.sh:3208 msgid "请选择添加用户使用的协议" msgstr "" #: install.sh:3230 msgid "添加用户" msgstr "" #: install.sh:3235 msgid "是否继续添加用户" msgstr "" #: install.sh:3244 msgid "此模式不支持添加用户" msgstr "" #: install.sh:3253 msgid "即将删除用户, 一次仅能删除一个" msgstr "" #: install.sh:3255 msgid "请选择删除用户使用的协议" msgstr "" #: install.sh:3265 msgid "请选择要删除的用户编号" msgstr "" #: install.sh:3274 msgid "主用户无法删除" msgstr "" #: install.sh:3280 msgid "删除用户" msgstr "" #: install.sh:3283 msgid "是否继续删除用户" msgstr "" #: install.sh:3305 install.sh:3309 msgid "文件不存在" msgstr "" #: install.sh:3316 msgid "已配置 Xray 流量统计" msgstr "" #: install.sh:3317 msgid "是否需要关闭此功能" msgstr "" #: install.sh:3323 msgid "关闭 Xray 流量统计" msgstr "" #: install.sh:3332 msgid "流量统计需要使用" msgstr "" #: install.sh:3333 msgid "可能会影响 Xray 性能" msgstr "" #: install.sh:3344 msgid "设置 Xray 流量统计" msgstr "" #: install.sh:3374 install.sh:3394 msgid "已卸载" msgstr "" #: install.sh:3378 msgid "是否卸载" msgstr "" #: install.sh:3382 msgid "已取消卸载" msgstr "" #: install.sh:3405 msgid "是否删除所有脚本文件" msgstr "" #: install.sh:3412 msgid "已删除所有文件" msgstr "" #: install.sh:3413 msgid "ヾ( ̄▽ ̄) 拜拜~" msgstr "" #: install.sh:3418 msgid "已保留脚本文件 (包含 SSL 证书等)" msgstr "" #: install.sh:3422 msgid "是否保留配置文件" msgstr "" #: install.sh:3439 msgid "已清空证书遗留文件" msgstr "" #: install.sh:3469 msgid "秒后" msgstr "" #: install.sh:3669 msgid "检测最新版本失败" msgstr "" #: install.sh:3677 install.sh:3917 msgid "新版本" msgstr "" #: install.sh:3677 install.sh:3917 msgid "更新内容" msgstr "" #: install.sh:3681 msgid "存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新" msgstr "" #: install.sh:3684 msgid "存在新版本, 是否更新" msgstr "" #: install.sh:3688 msgid "检测 脚本 最新版本失败" msgstr "" #: install.sh:3689 msgid "脚本 版本差别过大, 跳过更新" msgstr "" #: install.sh:3697 install.sh:3698 msgid "脚本更新失败" msgstr "" #: install.sh:3704 msgid "更新完成" msgstr "" #: install.sh:3705 install.sh:3929 msgid "脚本版本变化较大, 若服务无法正常运行请卸载后重装" msgstr "" #: install.sh:3714 msgid "当前版本为最新版本" msgstr "" #: install.sh:3727 install.sh:3912 install.sh:3927 install.sh:3940 msgid "下载最新脚本" msgstr "" #: install.sh:3741 msgid "该选项暂时无法使用" msgstr "" #: install.sh:3760 install.sh:4286 msgid "此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装" msgstr "" #: install.sh:3773 install.sh:4300 msgid "此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装" msgstr "" #: install.sh:3876 install.sh:3877 install.sh:3887 install.sh:3891 #: install.sh:3895 install.sh:4211 install.sh:4212 install.sh:4213 #: install.sh:4214 install.sh:4215 install.sh:4216 install.sh:4314 #: install.sh:4319 install.sh:4324 install.sh:4329 msgid "变更" msgstr "" #: install.sh:3876 install.sh:4215 msgid "负载均衡配置" msgstr "" #: install.sh:3879 msgid "清除日志文件" msgstr "" #: install.sh:3880 msgid "查看证书状态" msgstr "" #: install.sh:3881 msgid "更新证书有效期" msgstr "" #: install.sh:3882 msgid "设置证书自动更新" msgstr "" #: install.sh:3883 msgid "设置 Fail2ban 防暴力破解" msgstr "" #: install.sh:3884 msgid "显示帮助" msgstr "" #: install.sh:3885 msgid "修改语言" msgstr "" #: install.sh:3888 install.sh:4218 install.sh:4222 install.sh:4223 #: install.sh:4224 install.sh:4225 install.sh:4230 install.sh:4232 #: fail2ban_manager.sh:15 msgid "查看" msgstr "" #: install.sh:3888 install.sh:4225 msgid "实时流量" msgstr "" #: install.sh:3889 msgid "脚本卸载" msgstr "" #: install.sh:3890 msgid "显示安装信息" msgstr "" #: install.sh:3892 install.sh:4237 msgid "加速" msgstr "" #: install.sh:3894 msgid "更新脚本" msgstr "" #: install.sh:3896 install.sh:3897 msgid "显示" msgstr "" #: install.sh:3896 msgid "访问信息" msgstr "" #: install.sh:3897 msgid "错误信息" msgstr "" #: install.sh:3921 msgid "脚本版本变化较大, 可能存在不兼容情况, 是否继续使用" msgstr "" #: install.sh:3948 msgid "检测失败" msgstr "" #: install.sh:3952 install.sh:3962 install.sh:3971 msgid "有新版" msgstr "" #: install.sh:3955 install.sh:3964 install.sh:3974 msgid "最新版" msgstr "" #: install.sh:3969 msgid "版本未知" msgstr "" #: install.sh:3989 install.sh:3996 msgid "运行中" msgstr "" #: install.sh:3991 install.sh:4014 install.sh:4016 msgid "无需测试" msgstr "" #: install.sh:3993 install.sh:3998 msgid "未运行" msgstr "" #: install.sh:4008 msgid "无法连通" msgstr "" #: install.sh:4010 install.sh:4011 install.sh:4012 msgid "本地正常" msgstr "" #: install.sh:4027 msgid "脚本维护中.. 请稍后再试" msgstr "" #: install.sh:4034 msgid "无法检测所需依赖的在线版本, 请稍后再试" msgstr "" #: install.sh:4051 msgid "请输入数字" msgstr "" #: install.sh:4051 msgid "请输入 1 到 6 之间的有效数字" msgstr "" #: install.sh:4081 msgid "无效的选择" msgstr "" #: install.sh:4122 msgid "请输入备份名称" msgstr "" #: install.sh:4122 msgid "不需要后缀" msgstr "" #: install.sh:4131 msgid "报错信息" msgstr "" #: install.sh:4133 msgid "备份完整性可能受到影响, 请检查上述错误信息" msgstr "" #: install.sh:4137 msgid "备份失败" msgstr "" #: install.sh:4139 msgid "备份成功" msgstr "" #: install.sh:4144 msgid "请确保备份文件在目录" msgstr "" #: install.sh:4148 msgid "没有找到备份文件" msgstr "" #: install.sh:4153 msgid "发现多个备份文件" msgstr "" #: install.sh:4153 msgid "将使用最新的文件进行恢复" msgstr "" #: install.sh:4157 msgid "找到最新备份文件" msgstr "" #: install.sh:4159 msgid "恢复备份" msgstr "" #: install.sh:4163 msgid "恢复成功" msgstr "" #: install.sh:4164 install.sh:4166 msgid "记得安装" msgstr "" #: install.sh:4169 msgid "恢复失败" msgstr "" #: install.sh:4175 msgid "安装管理脚本" msgstr "" #: install.sh:4176 msgid "作者" msgstr "" #: install.sh:4180 msgid "当前模式" msgstr "" #: install.sh:4181 msgid "当前语言" msgstr "" #: install.sh:4184 msgid "可以使用" msgstr "" #: install.sh:4184 msgid "命令管理脚本" msgstr "" #: install.sh:4186 msgid "版本检测" msgstr "" #: install.sh:4187 install.sh:4195 install.sh:4246 msgid "脚本" msgstr "" #: install.sh:4190 msgid "运行状态" msgstr "" #: install.sh:4193 msgid "连通性" msgstr "" #: install.sh:4194 msgid "更新向导" msgstr "" #: install.sh:4205 msgid "安装向导" msgstr "" #: install.sh:4210 msgid "配置变更" msgstr "" #: install.sh:4217 msgid "用户管理" msgstr "" #: install.sh:4218 install.sh:4219 install.sh:4220 msgid "用户" msgstr "" #: install.sh:4221 msgid "查看信息" msgstr "" #: install.sh:4222 msgid "实时访问日志" msgstr "" #: install.sh:4223 msgid "实时错误日志" msgstr "" #: install.sh:4226 msgid "服务相关" msgstr "" #: install.sh:4227 install.sh:4228 install.sh:4229 install.sh:4230 msgid "所有服务" msgstr "" #: install.sh:4231 msgid "证书相关" msgstr "" #: install.sh:4232 msgid "证书状态" msgstr "" #: install.sh:4233 msgid "证书有效期" msgstr "" #: install.sh:4234 msgid "证书自动更新" msgstr "" #: install.sh:4235 msgid "其他选项" msgstr "" #: install.sh:4236 msgid "自动更新" msgstr "" #: install.sh:4238 msgid "防暴力破解" msgstr "" #: install.sh:4239 msgid "流量统计" msgstr "" #: install.sh:4240 msgid "清除" msgstr "" #: install.sh:4240 msgid "日志文件" msgstr "" #: install.sh:4241 msgid "测试" msgstr "" #: install.sh:4241 msgid "服务器网速" msgstr "" #: install.sh:4242 msgid "备份恢复" msgstr "" #: install.sh:4243 install.sh:4244 msgid "全部文件" msgstr "" #: install.sh:4244 msgid "恢复" msgstr "" #: install.sh:4245 msgid "卸载向导" msgstr "" #: install.sh:4246 fail2ban_manager.sh:14 fail2ban_manager.sh:415 msgid "卸载" msgstr "" #: install.sh:4247 msgid "清空" msgstr "" #: install.sh:4247 msgid "证书文件" msgstr "" #: install.sh:4248 fail2ban_manager.sh:16 file_manager.sh:208 msgid "退出" msgstr "" #: install.sh:4251 msgid "请输入选项" msgstr "" #: install.sh:4259 install.sh:4268 install.sh:4334 install.sh:4340 #: install.sh:4385 install.sh:4391 install.sh:4397 install.sh:4426 #: install.sh:4467 install.sh:4474 install.sh:4479 fail2ban_manager.sh:416 msgid "清空屏幕" msgstr "" #: install.sh:4265 msgid "不建议" msgstr "" #: install.sh:4265 msgid "频繁更新 Nginx, 请确认 Nginx 有更新的必要" msgstr "" #: install.sh:4266 msgid "开始更新" msgstr "" #: install.sh:4346 install.sh:4353 install.sh:4360 install.sh:4410 #: install.sh:4415 install.sh:4420 install.sh:4442 msgid "回到菜单" msgstr "" #: fail2ban_manager.sh:10 msgid "用于防止暴力破解" msgstr "" #: fail2ban_manager.sh:11 file_manager.sh:203 msgid "主菜单" msgstr "" #: fail2ban_manager.sh:13 msgid "管理" msgstr "" #: fail2ban_manager.sh:15 fail2ban_manager.sh:339 msgid "状态" msgstr "" #: fail2ban_manager.sh:18 file_manager.sh:210 msgid "请选择一个选项" msgstr "" #: fail2ban_manager.sh:27 fail2ban_manager.sh:250 fail2ban_manager.sh:258 #: fail2ban_manager.sh:363 msgid "无效的选择, 请重试" msgstr "" #: fail2ban_manager.sh:35 msgid "已经安装, 跳过安装步骤" msgstr "" #: fail2ban_manager.sh:68 msgid "systemd 无法读取 SSH 日志" msgstr "" #: fail2ban_manager.sh:69 msgid "跳过启用" msgstr "" #: fail2ban_manager.sh:69 fail2ban_manager.sh:93 fail2ban_manager.sh:103 #: fail2ban_manager.sh:120 fail2ban_manager.sh:125 fail2ban_manager.sh:128 #: fail2ban_manager.sh:146 fail2ban_manager.sh:151 fail2ban_manager.sh:154 msgid "规则" msgstr "" #: fail2ban_manager.sh:77 fail2ban_manager.sh:203 fail2ban_manager.sh:440 msgid "未安装, 请先安装" msgstr "" #: fail2ban_manager.sh:125 fail2ban_manager.sh:151 fail2ban_manager.sh:349 msgid "已禁用" msgstr "" #: fail2ban_manager.sh:209 msgid "请选择" msgstr "" #: fail2ban_manager.sh:209 msgid "操作" msgstr "" #: fail2ban_manager.sh:210 msgid "管理模块" msgstr "" #: fail2ban_manager.sh:211 msgid "添加自定义规则" msgstr "" #: fail2ban_manager.sh:212 fail2ban_manager.sh:228 msgid "服务管理" msgstr "" #: fail2ban_manager.sh:271 msgid "请输入新的" msgstr "" #: fail2ban_manager.sh:271 fail2ban_manager.sh:272 msgid "名称" msgstr "" #: fail2ban_manager.sh:273 msgid "请输入日志路径" msgstr "" #: fail2ban_manager.sh:274 msgid "请输入最大重试次数" msgstr "" #: fail2ban_manager.sh:274 msgid "最大重试次数必须在 1 到 99 之间" msgstr "" #: fail2ban_manager.sh:275 msgid "请输入封禁时间" msgstr "" #: fail2ban_manager.sh:275 msgid "秒" msgstr "" #: fail2ban_manager.sh:275 msgid "封禁时间必须在 1 到 8640000 秒之间" msgstr "" #: fail2ban_manager.sh:285 msgid "自定义规则添加成功" msgstr "" #: fail2ban_manager.sh:289 msgid "重启以应用新规则" msgstr "" #: fail2ban_manager.sh:294 msgid "管理 Fail2ban 模块" msgstr "" #: fail2ban_manager.sh:311 msgid "未找到任何模块化配置文件" msgstr "" #: fail2ban_manager.sh:319 fail2ban_manager.sh:339 msgid "模块名称" msgstr "" #: fail2ban_manager.sh:339 file_manager.sh:59 msgid "序号" msgstr "" #: fail2ban_manager.sh:363 msgid "请选择要管理的模块" msgstr "" #: fail2ban_manager.sh:375 msgid "启用" msgstr "" #: fail2ban_manager.sh:375 msgid "禁用" msgstr "" #: fail2ban_manager.sh:378 msgid "是否" msgstr "" #: fail2ban_manager.sh:378 fail2ban_manager.sh:386 msgid "模块" msgstr "" #: fail2ban_manager.sh:388 msgid "操作已取消" msgstr "" #: fail2ban_manager.sh:424 msgid "停止成功" msgstr "" #: fail2ban_manager.sh:444 msgid "总体状态" msgstr "" #: fail2ban_manager.sh:448 msgid "默认启用的 Jail 状态" msgstr "" #: fail2ban_manager.sh:452 fail2ban_manager.sh:458 msgid "封锁情况" msgstr "" #: fail2ban_manager.sh:453 fail2ban_manager.sh:459 fail2ban_manager.sh:462 #: fail2ban_manager.sh:466 fail2ban_manager.sh:469 msgid "未启用或配置异常" msgstr "" #: fail2ban_manager.sh:484 file_manager.sh:232 msgid "新版本可用" msgstr "" #: fail2ban_manager.sh:484 file_manager.sh:232 msgid "当前版本" msgstr "" #: fail2ban_manager.sh:485 file_manager.sh:233 msgid "请访问" msgstr "" #: fail2ban_manager.sh:485 file_manager.sh:233 msgid "查看更新说明" msgstr "" #: fail2ban_manager.sh:487 file_manager.sh:235 msgid "是否下载并安装新版本" msgstr "" #: fail2ban_manager.sh:491 file_manager.sh:239 msgid "正在下载新版本" msgstr "" #: fail2ban_manager.sh:496 file_manager.sh:244 msgid "下载完成, 请重新运行脚本" msgstr "" #: fail2ban_manager.sh:504 file_manager.sh:252 msgid "跳过更新" msgstr "" #: fail2ban_manager.sh:508 file_manager.sh:256 msgid "当前已经是最新版本" msgstr "" #: file_manager.sh:7 msgid "用法" msgstr "" #: file_manager.sh:7 msgid "文件扩展名" msgstr "" #: file_manager.sh:7 msgid "目录路径" msgstr "" #: file_manager.sh:16 msgid "目录" msgstr "" #: file_manager.sh:16 msgid "不存在, 请检查路径" msgstr "" #: file_manager.sh:26 file_manager.sh:204 msgid "列出所有" msgstr "" #: file_manager.sh:26 file_manager.sh:35 file_manager.sh:88 file_manager.sh:111 #: file_manager.sh:160 file_manager.sh:176 file_manager.sh:204 #: file_manager.sh:205 file_manager.sh:206 file_manager.sh:207 msgid "文件" msgstr "" #: file_manager.sh:53 msgid "文件名" msgstr "" #: file_manager.sh:79 msgid "请输入网址 (例如 hey.run)" msgstr "" #: file_manager.sh:80 msgid "不要包含 http:// 或 https:// 开头" msgstr "" #: file_manager.sh:84 msgid "网址不能包含 http:// 或 https:// 前缀" msgstr "" #: file_manager.sh:88 file_manager.sh:111 msgid "已创建" msgstr "" #: file_manager.sh:99 msgid "请输入主机" msgstr "" #: file_manager.sh:107 msgid "请输入权重" msgstr "" #: file_manager.sh:128 msgid "追加完成" msgstr "" #: file_manager.sh:132 file_manager.sh:136 msgid "重启完成" msgstr "" #: file_manager.sh:151 msgid "请输入要编辑的文件编号" msgstr "" #: file_manager.sh:156 msgid "未安装, 正在尝试安装" msgstr "" #: file_manager.sh:160 msgid "已编辑" msgstr "" #: file_manager.sh:171 msgid "请输入要删除的文件编号" msgstr "" #: file_manager.sh:194 msgid "不支持的文件扩展名" msgstr "" #: file_manager.sh:205 msgid "创建一个新的" msgstr "" #: file_manager.sh:206 msgid "编辑一个已存在的" msgstr "" #: file_manager.sh:207 msgid "删除一个已存在的" msgstr "" #: file_manager.sh:265 msgid "重启成功" msgstr "" #: file_manager.sh:268 msgid "重启失败" msgstr "" #: file_manager.sh:268 msgid "请检查配置文件是否有误" msgstr "" ================================================ FILE: ssl_update.sh ================================================ #!/usr/bin/env bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH cert_group="nobody" idleleo_dir="/etc/idleleo" nginx_systemd_file="/etc/systemd/system/nginx.service" ssl_chainpath="${idleleo_dir}/cert" xray_qr_config_file="${idleleo_dir}/info/vless_qr.json" host=$(jq -r '.host' ${xray_qr_config_file}) [[ -f ${nginx_systemd_file} ]] && systemctl stop nginx &> /dev/null wait "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" &> /dev/null "/root/.acme.sh"/acme.sh --installcert -d ${host} --fullchainpath ${ssl_chainpath}/xray.crt --keypath ${ssl_chainpath}/xray.key --ecc &> /dev/null wait [[ $(grep "^nogroup:" /etc/group) ]] && cert_group="nogroup" chmod -f a+rw ${ssl_chainpath}/xray.crt chmod -f a+rw ${ssl_chainpath}/xray.key chown -fR nobody:${cert_group} ${ssl_chainpath}/* wait [[ -f ${nginx_systemd_file} ]] && systemctl start nginx &> /dev/null ================================================ FILE: status_config.json ================================================ { "api": { "tag": "api", "services": [ "StatsService" ] }, "stats": {}, "policy": { "levels": { "0": { "handshake": 4, "connIdle": 300, "uplinkOnly": 2, "downlinkOnly": 5, "statsUserUplink": false, "statsUserDownlink": false } }, "system": { "statsInboundUplink": true, "statsInboundDownlink": true } } } ================================================ FILE: translate.py ================================================ import re import time import json import os from openai import OpenAI from googletrans import Translator from langdetect import detect, DetectorFactory # 设置种子以确保结果一致 DetectorFactory.seed = 0 def load_translation_cache(cache_file): if os.path.exists(cache_file): with open(cache_file, 'r', encoding='utf-8') as f: translations = json.load(f) # 将缓存中的所有翻译结果首字母转为小写并去除末尾标点 for key in translations: translations[key] = clean_translation(translations[key]) return translations return {} def save_translation_cache(cache_file, translations): # 在保存缓存前确保所有翻译结果首字母转为小写并去除末尾标点 for key in translations: translations[key] = clean_translation(translations[key]) with open(cache_file, 'w', encoding='utf-8') as f: json.dump(translations, f, ensure_ascii=False, indent=2) def get_version(version_file): if os.path.exists(version_file): with open(version_file, 'r', encoding='utf-8') as f: return f.read().strip() return None def update_version(version_file): timestamp = str(int(time.time())) with open(version_file, 'w', encoding='utf-8') as f: f.write(timestamp) return timestamp def contains_chinese(text): return any('\u4e00' <= char <= '\u9fff' for char in text) # def contains_target_language_characters(text, target_lang): # try: # detected_lang = detect(text) # return detected_lang == target_lang # except Exception as e: # print(f"Language detection failed: {e}") # return False def translate_text_qwen_mt(text, target_lang): api_key = os.getenv("AI_API_KEY") if not api_key: raise ValueError("AI_API_KEY environment variable is not set.") client = OpenAI( api_key=api_key, base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", ) messages = [ {'role': 'user', 'content': text} ] translation_options = { "source_lang": "zh", # 指定源语言为中文 "target_lang": target_lang } try: completion = client.chat.completions.create( model="qwen-mt-plus", messages=messages, extra_body={ "translation_options": translation_options } ) translated_text = completion.choices[0].message.content return translated_text.lower().rstrip('.,!?;:') except Exception as e: print(f"Qwen-MT-Plus translation failed: {e}") return "" def translate_text_google(text, target_lang): try: translator = Translator(service_urls=['translate.google.com']) translation = translator.translate(text, src='zh-cn', dest=target_lang) # 指定源语言为中文 translated_text = translation.text return translated_text.lower().rstrip('.,!?;:') except Exception as e: print(f"Google Translate failed: {e}") return "" def needs_fallback_translation(translated_text): return '\n' in translated_text or '"' in translated_text def clean_translation(text): return text.replace('\n', '').replace('"', '') def translate_po_file(input_file, output_file, target_lang_code, target_lang_name): # 获取目标语言目录 lang_dir = os.path.dirname(output_file) # 构建 LC_MESSAGES 目录路径 lc_messages_dir = os.path.join('languages', target_lang_code, 'LC_MESSAGES') # 确保 LC_MESSAGES 目录存在 if not os.path.exists(lc_messages_dir): os.makedirs(lc_messages_dir) # 构建缓存文件和版本文件的路径 cache_file = os.path.join(lang_dir, f'cache_{target_lang_name}.json') version_file = os.path.join(lc_messages_dir, 'version') translations = load_translation_cache(cache_file) current_version = get_version(version_file) with open(input_file, 'r', encoding='utf-8') as f: content = f.read() # 匹配msgid和空msgstr pattern = r'msgid "(.+?)"\s*\nmsgstr "(.*?)"' matches = re.finditer(pattern, content) updated = False used_translations = set() # 用于跟踪已使用的翻译 for match in matches: msgid_text = match.group(1) # 检查缓存 if msgid_text in translations: translated_text = translations[msgid_text] # 清理缓存中的翻译结果 translated_text = clean_translation(translated_text) # 直接使用缓存的翻译,不再检查目标语言 if translated_text == "": updated = True print(f"Cached translation is empty for: {msgid_text}. Re-translating...") else: print(f"Using cached translation: {msgid_text} -> {translated_text}") # 更新content以反映翻译结果 content = re.sub( rf'msgid "{re.escape(msgid_text)}"\s*\nmsgstr ".*?"', rf'msgid "{msgid_text}"\nmsgstr "{translated_text}"', content ) used_translations.add(msgid_text) # 标记为已使用 continue # 跳过翻译步骤 # 进行翻译 try: # 增加重试机制 max_retries = 3 for attempt in range(max_retries): try: time.sleep(0.1) # 增加延迟以避免请求过快 translated_text = translate_text_qwen_mt(msgid_text, target_lang_code) # 检查翻译结果是否仍包含中文或需要回退翻译 if (contains_chinese(translated_text) or needs_fallback_translation(translated_text)): print(f"Translation does not meet criteria using Qwen-MT-Plus. Using Google Translate...") translated_text = translate_text_google(msgid_text, target_lang_code) # 清理Google翻译结果 translated_text = clean_translation(translated_text) # 检查翻译是否有变更 if msgid_text in translations and translations[msgid_text] != translated_text: print(f"Translation changed for: {msgid_text} -> {translated_text}") updated = True # 更新缓存 translations[msgid_text] = translated_text # 存储翻译到缓存 print(f"New translation [{target_lang_code}]: {msgid_text} -> {translated_text}") used_translations.add(msgid_text) # 标记为已使用 break # 成功翻译后跳出重试循环 except Exception as e: if attempt == max_retries - 1: raise e print(f"Retry {attempt + 1}/{max_retries} for: {msgid_text}") time.sleep(0.1) # 重试前等待更长时间 except Exception as e: print(f"Translation failed for: {msgid_text}") print(f"Error: {e}") # 处理翻译失败的情况,删除该条目 if msgid_text in translations: del translations[msgid_text] # 从缓存中删除该条目 content = re.sub(rf'msgid "{re.escape(msgid_text)}"\nmsgstr ".*?"\n?', '', content) updated = True # 标记为已更新 continue # 继续处理下一个条目 # 更新content以反映翻译结果 if translated_text: # 确保翻译成功 content = re.sub( rf'msgid "{re.escape(msgid_text)}"\s*\nmsgstr ".*?"', rf'msgid "{msgid_text}"\nmsgstr "{translated_text}"', content ) updated = True used_translations.add(msgid_text) # 标记为已使用 # 删除未使用的缓存项 for key in list(translations.keys()): if key not in used_translations: print(f"Removing unused cache entry: {key}") del translations[key] updated = True if updated: save_translation_cache(cache_file, translations) new_version = update_version(version_file) print(f"Updated version from {current_version} to {new_version}") else: print("No updates.") # 创建一个额外的文件来指示没有更新 no_update_file = os.path.join(os.path.dirname(output_file), f'{os.path.basename(output_file)}.no-update') with open(no_update_file, 'w', encoding='utf-8') as f: f.write("# No updates.\n") # 确保每个 msgid 和 msgstr 之间没有多余的空格或换行符 content = re.sub(r'\n\s*msgstr', '\nmsgstr', content) with open(output_file, 'w', encoding='utf-8') as f: f.write(content) if __name__ == '__main__': for lang_code, lang_name in [('en', 'English'), ('fa', 'Persian'), ('ru', 'Russian'), ('ko', 'Korean'), ('fr', 'French')]: print(f"\nTranslating to {lang_name} ({lang_code})...") input_file = f'po/{lang_code}.po' output_file = f'po/{lang_code}.po' translate_po_file(input_file, output_file, lang_code, lang_name) ================================================ FILE: translate_readme.py ================================================ import os import json import re import markdown from bs4 import BeautifulSoup from googletrans import Translator import logging # 设置日志 logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') def load_translation_cache(cache_file): if os.path.exists(cache_file): with open(cache_file, 'r', encoding='utf-8') as f: return json.load(f) return {} def save_translation_cache(cache_file, translations): with open(cache_file, 'w', encoding='utf-8') as f: json.dump(translations, f, ensure_ascii=False, indent=4) def get_cache_key(text, target_lang): """生成缓存键,将文本和目标语言合并为一个字符串""" return f"{target_lang}::{text}" def translate_text(text, target_lang, translator, translations): cache_key = get_cache_key(text, target_lang) if cache_key in translations: logging.info(f"从缓存中获取翻译: '{text}' -> '{translations[cache_key]}'") return translations[cache_key] try: translation = translator.translate(text, dest=target_lang) translations[cache_key] = translation.text logging.info(f"翻译成功: '{text}' -> '{translation.text}'") return translation.text except Exception as e: logging.error(f"翻译失败: {text}\n错误: {e}") return text # 返回原始文本以防翻译失败 def should_translate(segment): """判断是否需要翻译该段落""" # 定义需要跳过翻译的模式 skip_patterns = [ r'\[简体中文\]\(README\.md\)', # 只要匹配到[简体中文](README.md),就跳过该段落 r'\[.*?\]\(.*?\)' # 跳过所有包含 markdown 链接的段落 ] for pattern in skip_patterns: if re.search(pattern, segment): logging.info(f"跳过翻译的段落: {segment}") return False return True def extract_text_segments(content): """ 使用 Markdown 解析库提取非代码块的文本段落。 """ html = markdown.markdown(content) soup = BeautifulSoup(html, 'html.parser') # 移除所有代码块 for code in soup.find_all(['code', 'pre']): code.extract() # 获取纯文本 text = soup.get_text() # 按段落分割 segments = text.split('\n\n') # 清理段落 segments = [segment.strip() for segment in segments if segment.strip()] logging.info(f"提取到 {len(segments)} 个文本段落进行翻译。") return segments def replace_translation(original_content, translated_segments): """ 将翻译后的文本段落重新插入到原始内容中,保持代码块不变。 """ pattern = re.compile(r'```[\s\S]*?```', re.MULTILINE) parts = pattern.findall(original_content) result = "" translated_iter = iter(translated_segments) splitted = pattern.split(original_content) for i, part in enumerate(splitted): translated_text = next(translated_iter, "") result += translated_text + "\n\n" if i < len(parts): result += parts[i] + "\n\n" return result.strip() def translate_readme(input_file, output_dir): # 创建翻译缓存并加载 cache_file = 'translation_cache.json' translations = load_translation_cache(cache_file) logging.info(f"缓存文件 '{cache_file}' 加载完成,共有 {len(translations)} 条缓存记录。") # 初始化翻译器 translator = Translator(service_urls=['translate.google.com']) logging.info("翻译器初始化完成。") # 读取 README.md 内容 with open(input_file, 'r', encoding='utf-8') as f: content = f.read() logging.info(f"读取 '{input_file}' 完成,共 {len(content)} 个字符。") # 提取非代码块的文本段落 text_segments = extract_text_segments(content) logging.info(f"提取到 {len(text_segments)} 个文本段落。") # 定义目标语言 languages = { 'en': 'english', 'ru': 'russian', 'fa': 'persian' } # 获取源文件名 source_filename = os.path.basename(input_file) for lang_code, lang_name in languages.items(): logging.info(f"开始翻译到 {lang_name} ({lang_code})") translated_segments = [] for idx, segment in enumerate(text_segments, 1): # 判断是否需要翻译 if should_translate(segment) and re.search(r'[\u4e00-\u9fff]', segment): translated = translate_text(segment, lang_code, translator, translations) translated_segments.append(translated) logging.debug(f"段落 {idx} 翻译为 {lang_name}:{translated}") else: translated_segments.append(segment) logging.debug(f"段落 {idx} 不需要翻译,保持原样。") # 重新组合内容,保留代码块 translated_content = replace_translation(content, translated_segments) logging.info(f"{lang_name} 翻译内容重新组合完成。") # 定义目标语言的目录 lang_dir = os.path.join(output_dir, 'languages', lang_code) os.makedirs(lang_dir, exist_ok=True) # 定义输出文件路径,保持与源文件名一致 output_file = os.path.join(lang_dir, source_filename) with open(output_file, 'w', encoding='utf-8') as f: f.write(translated_content) logging.info(f"{lang_name} 翻译完成,文件保存至: {output_file}") # 保存翻译缓存 save_translation_cache(cache_file, translations) logging.info("所有翻译完成,并已保存缓存。") if __name__ == "__main__": input_readme = 'README.md' # 源文件路径 output_directory = '.' # 输出目录,可以根据需要修改 translate_readme(input_readme, output_directory)