[
  {
    "path": ".dockerignore",
    "content": ".github/\n.git/\n.gitignore\n.editorconfig\nLICENSE\npo/\ntranslate.py\ntranslate_readme.py\nDockerfile\ndocker-compose.yml\ndocker-entrypoint.sh\nfake-systemctl\n.dockerignore\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n[*]\nend_of_line = crlf\ninsert_final_newline = true\ncharset = utf-8\n"
  },
  {
    "path": ".github/workflows/cleanup.yml",
    "content": "name: Cleanup Workflow Runs\n\non:\n  workflow_dispatch:\n  schedule:\n    - cron: '0 0 * * *'\n\njobs:\n  del_runs:\n    runs-on: ubuntu-latest\n    permissions:\n      actions: write\n      contents: read\n    steps:\n      - name: Delete workflow runs\n        uses: Mattraks/delete-workflow-runs@main\n        with:\n          token: ${{ github.token }}\n          repository: ${{ github.repository }}\n          retain_days: 14\n          keep_minimum_runs: 10\n          "
  },
  {
    "path": ".github/workflows/i18n.yml",
    "content": "name: Update Translations\n\non:\n  push:\n    paths:\n      - 'install.sh'\n      - 'fail2ban_manager.sh'\n      - 'file_manager.sh'\n      - 'translate.py'\n    branches:\n      - main\n  workflow_dispatch:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  update-translations:\n    runs-on: ubuntu-latest\n    \n    steps:\n      - name: Check running workflows\n        uses: styfle/cancel-workflow-action@main\n        with:\n          access_token: ${{ github.token }}\n      \n      - uses: actions/checkout@main\n        with:\n          persist-credentials: true\n      \n      - name: Restore translation cache\n        id: cache-translations\n        uses: actions/cache@main\n        with:\n          path: po/cache_*.json\n          key: ${{ runner.os }}-translations-${{ hashFiles('po/*.po') }}\n          restore-keys: |\n            ${{ runner.os }}-translations-\n      \n      - name: Install dependencies\n        run: |\n          sudo apt-get update\n          sudo apt-get install -y gettext python3 python3-pip i18nspector\n          pip3 install googletrans-py langdetect openai\n\n      - name: Cache Python dependencies\n        uses: actions/cache@main\n        with:\n          path: ~/.cache/pip\n          key: ${{ runner.os }}-pip-googletrans-py-langdetect-openai\n          restore-keys: |\n            ${{ runner.os }}-pip-\n\n      - name: Setup directories\n        run: |\n          mkdir -p po\n          mkdir -p languages/{en,fa,ru,zh_CN,ko,fr}/LC_MESSAGES\n      \n      - name: Extract strings from specified scripts\n        run: |\n          echo \"install.sh\" > po/POTFILES.in\n          echo \"fail2ban_manager.sh\" >> po/POTFILES.in\n          echo \"file_manager.sh\" >> po/POTFILES.in\n          \n          xgettext \\\n            --files-from=po/POTFILES.in \\\n            --from-code=UTF-8 \\\n            --language=Shell \\\n            --keyword=gettext \\\n            --package-name=xray_install \\\n            --package-version=1.0 \\\n            --msgid-bugs-address=https://github.com/hello-yunshu/Xray_bash_onekey/issues \\\n            --copyright-holder=\"yunshu\" \\\n            --output=po/xray_install.pot\n      \n      - name: Update/Create PO files\n        run: |\n          rm -f po/*.po\n          for lang in zh_CN en fa ru ko fr; do\n            msginit --no-translator --locale=$lang --input=po/xray_install.pot --output=po/$lang.po\n          done\n      \n      - name: Auto translate\n        run: python3 translate.py\n        env:\n          AI_API_KEY: ${{ secrets.AI_API_KEY }}\n      \n      - name: Compile MO files if necessary\n        run: |\n          needs_compile=false\n          for lang in en fa ru ko fr; do\n            if [ ! -f \"po/${lang}.po.no-update\" ]; then\n              needs_compile=true\n              if ! msgfmt --check -v --statistics -o languages/${lang}/LC_MESSAGES/xray_install.mo po/${lang}.po; then\n                echo \"Error in ${lang}.po file:\"\n                cat po/${lang}.po\n              fi\n            fi\n          done\n          if [ \"$needs_compile\" = false ]; then\n            echo \"No translations were updated. Skipping MO file compilation.\"\n          fi\n      \n      - name: Run i18nspector checks on PO files\n        run: |\n          i18nspector check po/\n      \n      - name: Run i18nspector checks on MO files if compiled\n        run: |\n          for lang in en fa ru ko fr; do\n            if [ ! -f \"po/${lang}.po.no-update\" ] && [ -f \"languages/${lang}/LC_MESSAGES/xray_install.mo\" ]; then\n              i18nspector check-binary languages/${lang}/LC_MESSAGES/xray_install.mo\n            fi\n          done\n      \n      - name: Save translation cache\n        if: always()\n        uses: actions/cache@main\n        with:\n          path: po/cache_*.json\n          key: ${{ runner.os }}-translations-${{ hashFiles('po/*.po') }}\n      \n      - name: Pull changes\n        run: |\n          git pull origin main\n      \n      - name: Commit changes if necessary\n        run: |\n          needs_commit=false\n          for lang in en fa ru ko fr; do\n            if [ ! -f \"po/${lang}.po.no-update\" ]; then\n              needs_commit=true\n              break\n            else\n                rm po/${lang}.po.no-update\n            fi\n          done\n          if [ \"$needs_commit\" = true ]; then\n            git config --local user.email \"action@github.com\"\n            git config --local user.name \"GitHub Action\"\n            git add po/ languages/\n            git commit -m \"Update translations for all languages [$(date +%Y-%m-%d)]\" || echo \"No changes to commit\"\n            git push \n          else\n            echo \"No translations were updated. Skipping commit and push.\"\n          fi"
  },
  {
    "path": ".github/workflows/translate_readme.yml",
    "content": "name: Translate README\n\non:\n  push:\n    paths:\n      - 'README.md'\n    branches:\n      - main\n  workflow_dispatch:\n\njobs:\n  translate-readme:\n    runs-on: ubuntu-latest\n    \n    steps:\n      - name: Check running workflows\n        uses: styfle/cancel-workflow-action@main\n        with:\n          access_token: ${{ github.token }}\n      \n      - uses: actions/checkout@main\n        with:\n          persist-credentials: true\n      \n      - name: Set up Python\n        uses: actions/setup-python@main\n        with:\n          python-version: '3.x'\n      \n      - name: Install dependencies\n        run: |\n          sudo apt-get update\n          sudo apt-get install -y gettext\n          pip install --upgrade pip\n          pip install googletrans==4.0.0-rc1 langdetect markdown beautifulsoup4\n        # 确保使用具体版本，避免兼容性问题\n      \n      - name: Cache Python dependencies\n        uses: actions/cache@main\n        with:\n          path: ~/.cache/pip\n          key: ${{ runner.os }}-pip-${{ hashFiles('**/translate_readme.py') }}\n          restore-keys: |\n            ${{ runner.os }}-pip-\n      \n      - name: Translate README\n        run: python3 translate_readme.py README.md languages/\n      \n      - name: Pull changes\n        run: |\n          git pull origin main\n\n      - name: Commit changes\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        run: |\n          git config --local user.email \"action@github.com\"\n          git config --local user.name \"GitHub Action\"\n          git add languages/\n          git commit -m \"Update translations for README [$(date +%Y-%m-%d)]\" || echo \"No changes to commit\"\n          git push https://${GITHUB_ACTOR}:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git HEAD:main "
  },
  {
    "path": "DOCKER.md",
    "content": "# Docker 部署指南\n\n简体中文 | [English](/languages/en/DOCKER.md) | [Français](/languages/fr/DOCKER.md) | [Русский](/languages/ru/DOCKER.md) | [فارسی](/languages/fa/DOCKER.md) | [한국어](/languages/ko/DOCKER.md)\n\n本文档介绍如何使用 Docker 运行 Xray 一键脚本。镜像预装了 Xray 和 Nginx，容器内可直接使用原脚本的所有功能。\n\n## 快速启动\n\n### 1. 克隆仓库并构建\n\n```bash\ngit clone https://github.com/hello-yunshu/Xray_bash_onekey.git\ncd Xray_bash_onekey\ndocker compose up -d\n```\n\n### 2. 进入交互式安装菜单\n\n```bash\ndocker attach xray-onekey\n```\n\n首次运行会自动启动安装脚本，按照提示完成配置即可。退出菜单后容器自动进入守护模式。\n\n### 3. 后续管理\n\n```bash\ndocker exec -it xray-onekey idleleo\n```\n\n## 运行模式\n\n| 模式 | 说明 | 命令 |\n|------|------|------|\n| `idleleo`（默认） | 启动服务并进入管理菜单 | `docker compose up -d` + `docker attach xray-onekey` |\n| `start` | 仅启动服务（守护模式） | 修改 `docker-compose.yml` 中 `command: start` |\n| `shell` | 启动服务并进入 Shell | `docker exec -it xray-onekey bash` |\n\n## 管理操作\n\n所有原脚本命令均可使用：\n\n```bash\ndocker exec -it xray-onekey idleleo          # 管理菜单\ndocker exec -it xray-onekey idleleo -s        # 查看安装信息\ndocker exec -it xray-onekey idleleo -x        # 更新 Xray\ndocker exec -it xray-onekey idleleo -n        # 更新 Nginx\ndocker exec -it xray-onekey idleleo -h        # 查看帮助\n```\n\n## 使用 docker run\n\n```bash\ndocker build -t xray-onekey .\n\ndocker 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\n```\n\n## 数据持久化\n\n| Volume | 容器路径 | 说明 |\n|--------|---------|------|\n| `xray-conf` | `/etc/idleleo/conf` | Xray 和 Nginx 配置文件 |\n| `xray-cert` | `/etc/idleleo/cert` | SSL 证书文件 |\n| `xray-info` | `/etc/idleleo/info` | 连接信息和状态文件 |\n| `xray-logs` | `/var/log/xray` | Xray 日志文件 |\n| `acme-data` | `/root/.acme.sh` | acme.sh 证书签发数据 |\n\n## 网络配置\n\n容器使用 `network_mode: host`，直接使用宿主机网络：\n\n* Reality 模式需要看到真实客户端 IP\n* TLS 模式需要直接绑定 443/80 端口\n* 避免额外的 NAT 转发性能损耗\n\n## 注意事项\n\n* 容器内使用 `fake-systemctl` 替代 systemd，`systemctl` 命令可正常使用\n* 内置看门狗每 30 秒检查服务状态，异常时自动重启\n* 退出管理菜单后容器自动进入守护模式，服务不会中断\n* 防火墙建议在宿主机层面管理\n* 证书自动续签在容器内可正常工作（需确保 80 端口可访问）\n\n## 故障排查\n\n```bash\ndocker logs xray-onekey                    # 查看容器日志\ndocker exec -it xray-onekey bash           # 进入容器\ndocker exec -it xray-onekey idleleo -s     # 查看安装信息\n```\n\n### 完全重置\n\n```bash\ndocker compose down\ndocker volume rm xray-conf xray-cert xray-info xray-logs acme-data\ndocker compose up -d\n```\n"
  },
  {
    "path": "Dockerfile",
    "content": "FROM debian:bookworm-slim\n\nARG XRAY_VERSION=26.3.27\nARG NGINX_BUILD_VERSION=2026.04.14\n\nENV DEBIAN_FRONTEND=noninteractive\n\nRUN apt-get update && apt-get install -y --no-install-recommends \\\n    bc \\\n    ca-certificates \\\n    cron \\\n    curl \\\n    dbus \\\n    fail2ban \\\n    gettext \\\n    git \\\n    gnupg \\\n    gzip \\\n    iftop \\\n    iptables \\\n    iptables-persistent \\\n    jq \\\n    lsof \\\n    netcat-openbsd \\\n    nmap \\\n    openssl \\\n    procps \\\n    psmisc \\\n    python3 \\\n    qrencode \\\n    socat \\\n    sysvinit-utils \\\n    unzip \\\n    vim \\\n    && rm -rf /var/lib/apt/lists/*\n\nRUN groupadd -f nogroup && \\\n    id nobody >/dev/null 2>&1 || useradd -g nogroup -s /usr/sbin/nologin nobody\n\nRUN temp_dir=$(mktemp -d) && cd \"$temp_dir\" && \\\n    nginx_filename=\"xray-nginx-custom-$(dpkg --print-architecture).tar.gz\" && \\\n    curl -L -o \"$nginx_filename\" \"https://github.com/hello-yunshu/Xray_bash_onekey_Nginx/releases/download/v${NGINX_BUILD_VERSION}/$nginx_filename\" && \\\n    tar -xzf \"$nginx_filename\" && \\\n    mv ./nginx /usr/local/nginx && \\\n    cd / && rm -rf \"$temp_dir\"\n\nRUN curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh | bash -s -- install -f --version v${XRAY_VERSION} && \\\n    rm -f /usr/local/etc/xray/config.json\n\nCOPY fake-systemctl /usr/local/bin/systemctl\nRUN chmod +x /usr/local/bin/systemctl\n\nWORKDIR /etc/idleleo\n\nCOPY . /etc/idleleo/\n\nRUN ln -sf /etc/idleleo/install.sh /usr/bin/idleleo && \\\n    ln -sf /etc/idleleo/conf/xray/config.json /usr/local/etc/xray/config.json && \\\n    chmod +x /etc/idleleo/install.sh /etc/idleleo/auto_update.sh \\\n    /etc/idleleo/ssl_update.sh /etc/idleleo/fail2ban_manager.sh \\\n    /etc/idleleo/file_manager.sh && \\\n    mkdir -p /etc/idleleo/conf/xray /etc/idleleo/conf/nginx \\\n    /etc/idleleo/cert /etc/idleleo/info /etc/idleleo/logs \\\n    /etc/idleleo/tmp /var/log/xray /root/.acme.sh\n\nRUN mkdir -p /etc/systemd/system && \\\n    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 && \\\n    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 && \\\n    echo '* soft nofile 65536' >> /etc/security/limits.conf && \\\n    echo '* hard nofile 65536' >> /etc/security/limits.conf\n\nCOPY docker-entrypoint.sh /docker-entrypoint.sh\nRUN chmod +x /docker-entrypoint.sh\n\nEXPOSE 443 80\n\nVOLUME [\"/etc/idleleo/conf\", \"/etc/idleleo/cert\", \"/etc/idleleo/info\", \"/var/log/xray\", \"/root/.acme.sh\"]\n\nENTRYPOINT [\"/docker-entrypoint.sh\"]\nCMD [\"idleleo\"]\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<https://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<https://www.gnu.org/licenses/why-not-lgpl.html>.\n"
  },
  {
    "path": "README.md",
    "content": "# Xray 一键安装脚本 — Reality / VLESS WebSocket/gRPC+TLS + Nginx\n\n简体中文 | [English](/languages/en/README.md) | [Français](/languages/fr/README.md) | [Русский](/languages/ru/README.md) | [فارسی](/languages/fa/README.md) | [한국어](/languages/ko/README.md)\n\n[![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)\n\n> Thanks for non-commercial open source development authorization by JetBrains\n\n## 功能特性\n\n* 输入 `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)）\n* 采用 Qwen-MT-Plus AI 实现多语言精准翻译\n* 支持 Reality 协议，建议搭配 Nginx 前置（脚本内可安装）\n* 内置 fail2ban 防护（脚本内可安装）\n* 采用 [@DuckSoft](https://github.com/DuckSoft) 的分享链接[提案](https://github.com/XTLS/Xray-core/issues/91)（beta），兼容 Qv2ray、V2rayN、V2rayNG\n* 采用 [XTLS](https://github.com/XTLS/Xray-core/issues/158) 提案，遵循 [UUIDv5](https://tools.ietf.org/html/rfc4122#section-4.3) 标准，支持自定义字符串映射至 VLESS UUID\n* 支持 gRPC 协议：[使用 gRPC 协议](https://hey.run/archives/xrayjin-jie-wan-fa---shi-yong-grpcxie-yi)\n* 支持 Reality / ws/gRPC 负载均衡：\n  - [部署 Reality 负载均衡](https://hey.run/archives/bushu-reality-balance)\n  - [搭建后端负载均衡](https://hey.run/archives/xrayjin-jie-wan-fa---da-jian-hou-duan-fu-wu-qi-fu-zai-jun-heng)\n\n## 延伸阅读\n\n* Reality 安装指南：[搭建 Xray Reality 服务器](https://hey.run/archives/da-jian-xray-reality-xie-yi-fu-wu-qi)\n* Reality 协议风险：[Xray Reality 协议的风险](https://hey.run/archives/reality-xie-yi-de-feng-xian)\n* Reality 加速服务器：[利用 Reality 协议\"漏洞\"加速服务器](https://hey.run/archives/use-reality)\n\n## Telegram 群组\n\n* 交流群：[点击加入](https://t.me/+48VSqv7xIIFmZDZl)\n\n## 准备工作\n\n* 一台境外服务器，具备公网 IP\n* 安装 Reality 协议：需准备符合 Xray 要求的目标域名\n* 安装 TLS 版本：需准备域名并添加 A 记录\n* 阅读 [Xray 官方文档](https://xtls.github.io)，了解 Reality、TLS、WebSocket、gRPC 及 Xray 相关概念\n* **确保已安装 curl**：CentOS 用户执行 `yum install -y curl`；Debian/Ubuntu 用户执行 `apt install -y curl`\n\n## 快速安装\n\n```bash\nbash <(curl -Ss https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/install.sh)\n```\n\n## Docker 部署\n\n支持使用 Docker 部署，镜像预装 Xray 和 Nginx，容器内可直接使用原脚本所有功能。详见 [Docker 部署指南](/DOCKER.md)。\n\n```bash\ngit clone https://github.com/hello-yunshu/Xray_bash_onekey.git\ncd Xray_bash_onekey\ndocker compose up -d\ndocker attach xray-onekey\n```\n\n## 注意事项\n\n* 不了解各项设置含义时，除必填项外请使用默认值（全程回车即可）\n* Cloudflare 用户请在安装完成后再开启 CDN\n* 本脚本需要 Linux 基础知识及计算机网络常识\n* 支持 Debian 12+ / Ubuntu 24.04+ / CentOS Stream 8+，部分 CentOS 模板可能存在编译问题，建议遇到问题时更换系统\n* 建议单服务器仅部署单个代理，使用默认 443 端口\n* 自定义字符串映射至 UUIDv5 需要客户端支持\n* 推荐在纯净环境下使用；新手请勿使用 CentOS\n* 本程序依赖 Nginx，已通过 [LNMP](https://lnmp.org) 等脚本安装过 Nginx 的用户请注意潜在冲突\n* 请勿在未验证可用性前将本脚本用于生产环境\n* 作者仅提供有限支持（因为太笨了）\n\n## 鸣谢\n\n* 基于 [wulabing/V2Ray_ws-tls_bash_onekey](https://github.com/wulabing/V2Ray_ws-tls_bash_onekey) 开发\n* TCP 加速脚本引用自 [ylx2016/Linux-NetSpeed](https://github.com/ylx2016/Linux-NetSpeed)\n\n## 证书配置\n\n**自定义证书**：将 crt 和 key 文件分别命名为 `xray.crt` 和 `xray.key`，放入 `/etc/idleleo/cert` 目录（目录不存在则先创建）。请注意证书权限及有效期，自定义证书过期后需自行续签。\n\n**自动证书**：脚本支持自动生成 Let's Encrypt 证书（有效期 3 个月），理论上支持自动续签。\n\n## 查看客户端配置\n\n```bash\ncat /etc/idleleo/info/xray_info.inf\n```\n\n## Xray 简介\n\n* Xray 是一款优秀的开源网络代理工具，支持 Windows、macOS、Android、iOS、Linux 等全平台\n* 本脚本为一键完整配置脚本，所有流程正常完成后，按输出结果设置客户端即可使用\n* **强烈建议**全面了解程序的工作流程及原理\n\n## 服务管理\n\n| 操作 | 命令 |\n|------|------|\n| 启动 Xray | `systemctl start xray` |\n| 停止 Xray | `systemctl stop xray` |\n| 启动 Nginx | `systemctl start nginx` |\n| 停止 Nginx | `systemctl stop nginx` |\n\n## 相关目录\n\n| 内容 | 路径 |\n|------|------|\n| Xray 服务端配置 | `/etc/idleleo/conf/xray/config.json` |\n| Nginx 目录 | `/usr/local/nginx` |\n| 证书文件 | `/etc/idleleo/cert/xray.key`、`/etc/idleleo/cert/xray.crt` |\n| 配置信息等 | `/etc/idleleo` |\n"
  },
  {
    "path": "VLESS_reality/config.json",
    "content": "{\n    \"log\": {\n        \"access\": \"/var/log/xray/access.log\",\n        \"error\": \"/var/log/xray/error.log\",\n        \"loglevel\": \"warning\"\n    },\n    \"inbounds\": [\n        {\n            \"port\": 9443,\n            \"listen\": \"0.0.0.0\",\n            \"protocol\": \"VLESS\",\n            \"tag\": \"VLESS-Reality-in\",\n            \"settings\": {\n                \"clients\": [\n                    {\n                        \"id\": \"UUID\",\n                        \"flow\": \"xtls-rprx-vision\",\n                        \"level\": 0,\n                        \"email\": \"me@hey.run\"\n                    }\n                ],\n                \"decryption\": \"none\"\n            },\n            \"streamSettings\": {\n                \"network\": \"raw\",\n                \"security\": \"reality\",\n                \"realitySettings\": {\n                    \"target\": \"example.com:443\", \n                    \"serverNames\": [\"example.com\"],\n                    \"privateKey\": \"privateKey\",\n                    \"shortIds\": [\"shortIds\"]\n                }\n            }\n        },\n        {\n            \"port\": 10086,\n            \"listen\": \"127.0.0.1\",\n            \"tag\": \"VLESS-ws-in\",\n            \"protocol\": \"VLESS\",\n            \"settings\": {\n                \"clients\": [\n                    {\n                        \"id\": \"UUID\",\n                        \"level\": 0,\n                        \"email\": \"ws@hey.run\"\n                    }\n                ],\n                \"decryption\": \"none\"\n            },\n            \"streamSettings\": {\n                \"network\": \"ws\",\n                \"security\": \"none\",\n                \"wsSettings\": {\n                    \"path\": \"/websocket\"\n                }\n            }\n        },\n        {\n            \"port\": 10087,\n            \"listen\": \"127.0.0.1\",\n            \"tag\": \"VLESS-gRPC-in\",\n            \"protocol\": \"VLESS\",\n            \"settings\": {\n                \"clients\": [\n                    {\n                        \"id\": \"UUID\",\n                        \"level\": 0,\n                        \"email\": \"me@hey.run\"\n                    }\n                ],\n                \"decryption\": \"none\"\n            },\n            \"streamSettings\": {\n                \"network\": \"grpc\",\n                \"security\": \"none\",\n                \"grpcSettings\": {\n                    \"serviceName\": \"grpc\",\n                    \"multiMode\": true,\n                    \"idle_timeout\": 20\n                }\n            }\n        }\n    ],\n    \"outbounds\": [\n        {\n            \"protocol\": \"freedom\",\n            \"settings\": {\n                \"domainStrategy\": \"UseIPv4v6\"\n            },\n            \"tag\": \"direct\"\n        },\n        {\n            \"protocol\": \"blackhole\",\n            \"tag\": \"blocked\"\n        }\n    ],\n    \"dns\": {\n        \"servers\": [\n            \"https+local://dns.google/dns-query\",\n            \"https+local://cloudflare-dns.com/dns-query\",\n            \"https+local://doh.opendns.com/dns-query\",\n            \"208.67.222.222\",\n            \"8.8.8.8\",\n            \"1.1.1.1\",\n            \"localhost\"\n        ],\n        \"disableCache\": false\n    },\n    \"routing\": {\n        \"domainStrategy\": \"AsIs\",\n        \"rules\": [\n            {\n                \"type\": \"field\",\n                \"inboundTag\": [\n                    \"VLESS-Reality-in\",\n                    \"VLESS-ws-in\",\n                    \"VLESS-gRPC-in\"\n                ],\n                \"outboundTag\": \"direct\"\n            }\n        ]\n    }\n}\n"
  },
  {
    "path": "VLESS_tls/config.json",
    "content": "{\n    \"log\": {\n        \"access\": \"/var/log/xray/access.log\",\n        \"error\": \"/var/log/xray/error.log\",\n        \"loglevel\": \"warning\"\n    },\n    \"inbounds\": [\n        {\n            \"port\": 10086,\n            \"listen\": \"127.0.0.1\",\n            \"tag\": \"VLESS-ws-in\",\n            \"protocol\": \"VLESS\",\n            \"settings\": {\n                \"clients\": [\n                    {\n                        \"id\": \"UUID\",\n                        \"level\": 0,\n                        \"email\": \"me@hey.run\"\n                    }\n                ],\n                \"decryption\": \"none\"\n            },\n            \"streamSettings\": {\n                \"network\": \"ws\",\n                \"security\": \"none\",\n                \"wsSettings\": {\n                    \"path\": \"/ray/\"\n                }\n            }\n        },\n        {\n            \"port\": 10087,\n            \"listen\": \"127.0.0.1\",\n            \"tag\": \"VLESS-gRPC-in\",\n            \"protocol\": \"VLESS\",\n            \"settings\": {\n                \"clients\": [\n                    {\n                        \"id\": \"UUID\",\n                        \"level\": 0,\n                        \"email\": \"me@hey.run\"\n                    }\n                ],\n                \"decryption\": \"none\"\n            },\n            \"streamSettings\": {\n                \"network\": \"grpc\",\n                \"security\": \"none\",\n                \"grpcSettings\": {\n                    \"serviceName\": \"grpc\",\n                    \"multiMode\": true,\n                    \"idle_timeout\": 20\n                }\n            }\n        }\n    ],\n    \"outbounds\": [\n        {\n            \"protocol\": \"freedom\",\n            \"settings\": {\n                \"domainStrategy\": \"UseIPv4v6\"\n            },\n            \"tag\": \"direct\"\n        },\n        {\n            \"protocol\": \"blackhole\",\n            \"tag\": \"blocked\"\n        }\n    ],\n    \"dns\": {\n        \"servers\": [\n            \"https+local://dns.google/dns-query\",\n            \"https+local://cloudflare-dns.com/dns-query\",\n            \"https+local://doh.opendns.com/dns-query\",\n            \"208.67.222.222\",\n            \"8.8.8.8\",\n            \"1.1.1.1\",\n            \"localhost\"\n        ],\n        \"disableCache\": false\n    },\n    \"routing\": {\n        \"domainStrategy\": \"AsIs\",\n        \"rules\": [\n            {\n                \"type\": \"field\",\n                \"inboundTag\": [\n                    \"VLESS-ws-in\",\n                    \"VLESS-gRPC-in\"\n                ],\n                \"outboundTag\": \"direct\"\n            }\n        ]\n    }\n}\n"
  },
  {
    "path": "VLESS_xtls/config.json",
    "content": "{\n    \"log\": {\n        \"access\": \"/var/log/xray/access.log\",\n        \"error\": \"/var/log/xray/error.log\",\n        \"loglevel\": \"warning\"\n    },\n    \"inbounds\": [\n        {\n            \"port\": 443,\n            \"listen\": \"0.0.0.0\",\n            \"protocol\": \"VLESS\",\n            \"tag\": \"VLESS-XTLS-in\",\n            \"settings\": {\n                \"clients\": [\n                    {\n                        \"id\": \"UUID\",\n                        \"flow\": \"xtls-rprx-vision\",\n                        \"level\": 0,\n                        \"email\": \"me@hey.run\"\n                    }\n                ],\n                \"decryption\": \"none\",\n                \"fallbacks\": [\n                    {\n                        \"outboundTag\": \"blocked\",\n                        \"xver\": 1\n                    }\n                ]\n            },\n            \"streamSettings\": {\n                \"network\": \"raw\",\n                \"security\": \"none\"\n            }\n        }\n    ],\n    \"outbounds\": [\n        {\n            \"protocol\": \"freedom\",\n            \"settings\": {\n                \"domainStrategy\": \"UseIPv4v6\"\n            },\n            \"tag\": \"direct\"\n        },\n        {\n            \"protocol\": \"blackhole\",\n            \"tag\": \"blocked\"\n        }\n    ],\n    \"dns\": {\n        \"servers\": [\n            \"8.8.8.8\",\n            \"1.1.1.1\",\n            \"localhost\"\n        ],\n        \"disableCache\": false\n    },\n    \"routing\": {\n        \"domainStrategy\": \"AsIs\",\n        \"rules\": [\n            {\n                \"type\": \"field\",\n                \"inboundTag\": [\n                    \"VLESS-XTLS-in\"\n                ],\n                \"outboundTag\": \"direct\"\n            }\n        ]\n    }\n}"
  },
  {
    "path": "auto_update.sh",
    "content": "#!/usr/bin/env bash\nPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin\nexport PATH\n\nVERSION=\"1.0.4\"\n\nidleleo_dir=\"/etc/idleleo\"\nlocal_bin=\"/usr/local\"\nnginx_dir=\"${local_bin}/nginx\"\nxray_conf_dir=\"${idleleo_dir}/conf/xray\"\nxray_conf=\"${xray_conf_dir}/config.json\"\nlog_dir=\"${idleleo_dir}/logs\"\nlog_file=\"${log_dir}/auto_update.log\"\nrunning_file=\"${log_dir}/auto_update.running\"\nxray_qr_config_file=\"${idleleo_dir}/info/vless_qr.json\"\nfailed_update_marker=\"${log_dir}/update_failed.mark\"\n\ncheck_update() {\n    temp_file=\"/tmp/temp_script.sh\"\n    if ! curl -s -o \"$temp_file\" \"https://github.com/hello-yunshu/Xray_bash_onekey/raw/refs/heads/main/auto_update.sh\"; then\n        echo \"Failed to download remote script\" >>${log_file}\n        return 1\n    fi\n\n    remote_version=$(grep \"^VERSION=\" \"$temp_file\" | cut -d'\"' -f2)\n    if [ -z \"$remote_version\" ]; then\n        echo \"Unable to get remote version number\" >>${log_file}\n        return 1\n    fi\n\n    if [ \"$VERSION\" != \"$remote_version\" ]; then\n        echo \"New version found: $remote_version\" >>${log_file}\n        cp \"$temp_file\" \"$0\"\n        chmod +x \"$0\"\n        rm -f \"$temp_file\"\n        exec \"$0\" \"$@\"\n    fi\n\n    rm -f \"$temp_file\"\n    return 0\n}\n\nif [[ -f \"${failed_update_marker}\" ]]; then\n    echo \"Previous update failed, skipping auto update. Remove ${failed_update_marker} or perform manual update to re-enable.\" >>${log_file}\n    exit 0\nfi\n\n[[ ! -d \"${log_dir}\" ]] && mkdir -p ${log_dir}\nif [[ -f \"${running_file}\" ]]; then\n    echo \"Previous auto update process is still running! Checked at: $(date '+%Y-%m-%d %H:%M') Manual troubleshooting recommended!\" >>${log_file}\n    exit 1\nelse\n    touch ${running_file}\nfi\n[[ -f \"${log_file}\" ]] && rm -rf ${log_file}\n\necho \"Update time: $(date '+%Y-%m-%d %H:%M')\" >${log_file}\n\ncheck_update\n\nget_versions_all=$(curl -s https://cdn.jsdelivr.net/gh/hello-yunshu/Xray_bash_onekey_api@main/xray_shell_versions.json)\n\nif [[ ! -f ${xray_qr_config_file} ]]; then\n    echo \"Config file not found, skipping update checks.\" >>${log_file}\n    rm -rf ${running_file}\n    exit 0\nfi\n\ninfo_extraction_all=$(jq -rc . ${xray_qr_config_file})\n\ncheck_online_version() {\n    echo ${get_versions_all} | jq -rc \".$1\"\n    [[ 0 -ne $? ]] && echo \"Online version check failed, please try again later!\" >>${log_file} && exit 1\n}\n\ninfo_extraction() {\n    echo ${info_extraction_all} | jq -r \".$1\"\n}\n\nshell_online_version=\"$(check_online_version shell_online_version)\"\nxray_online_version=\"$(check_online_version xray_online_version)\"\nnginx_online_version=\"$(check_online_version nginx_build_version)\"\n\nif [[ -f ${xray_qr_config_file} ]]; then\n    if [[ $(info_extraction shell_version) == null ]] || [[ $(info_extraction shell_version) != ${shell_online_version} ]]; then\n        bash idleleo -u auto_update\n        [[ 0 -ne $? ]] && echo \"Script update failed!\" >>${log_file} && exit 1\n        echo \"Script updated successfully!\" >>${log_file}\n        add_shell_version=$(jq -r \". += {\\\"shell_version\\\": \\\"${shell_online_version}\\\"}\" ${xray_qr_config_file})\n        echo \"${add_shell_version}\" | jq . >${xray_qr_config_file}\n    else\n        echo \"Script is up to date!\" >>${log_file}\n    fi\n    if [[ $(info_extraction nginx_build_version) != null ]] && [[ -f \"${nginx_dir}/sbin/nginx\" ]]; then\n        if [[ ${nginx_online_version} != $(info_extraction nginx_build_version) ]]; then\n            echo \"Updating Nginx...\" >>${log_file}\n            auto_update=YES bash idleleo -n auto_update\n            if [[ $? -ne 0 ]]; then\n                echo \"Nginx update failed!\" >>${log_file}\n                touch ${failed_update_marker}\n            else\n                echo \"Nginx updated successfully!\" >>${log_file}\n            fi\n        else\n            echo \"Nginx is up to date!\" >>${log_file}\n        fi\n    else\n        echo \"Nginx not installed!\" >>${log_file}\n    fi\n    if [[ -f ${xray_qr_config_file} ]] && [[ -f ${xray_conf} ]] && [[ -f /usr/local/bin/xray ]]; then\n        if [[ $(info_extraction xray_version) != null ]]; then\n            if [[ ${xray_online_version} != $(info_extraction xray_version) ]]; then\n                echo \"Updating Xray...\" >>${log_file}\n                auto_update=YES bash idleleo -x auto_update\n                if [[ $? -ne 0 ]]; then\n                    echo \"Xray update failed!\" >>${log_file}\n                    touch ${failed_update_marker}\n                else\n                    echo \"Xray updated successfully!\" >>${log_file}\n                fi\n            else\n                echo \"Xray is up to date!\" >>${log_file}\n            fi\n        else\n            echo \"Xray version unknown, cannot auto update\" >>${log_file}\n        fi\n    else\n        echo \"Xray not installed!\" >>${log_file}\n    fi\nfi\nrm -rf ${running_file}\n"
  },
  {
    "path": "docker-compose.yml",
    "content": "services:\n  xray-onekey:\n    build:\n      context: .\n      dockerfile: Dockerfile\n    container_name: xray-onekey\n    restart: unless-stopped\n    network_mode: host\n    cap_add:\n      - NET_ADMIN\n    environment:\n      - TZ=Asia/Shanghai\n    volumes:\n      - xray-conf:/etc/idleleo/conf\n      - xray-cert:/etc/idleleo/cert\n      - xray-info:/etc/idleleo/info\n      - xray-logs:/var/log/xray\n      - acme-data:/root/.acme.sh\n    stdin_open: true\n    tty: true\n\nvolumes:\n  xray-conf:\n  xray-cert:\n  xray-info:\n  xray-logs:\n  acme-data:\n"
  },
  {
    "path": "docker-entrypoint.sh",
    "content": "#!/bin/bash\nset -e\n\nexport PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin\n\nXRAY_BIN=\"/usr/local/bin/xray\"\nNGINX_BIN=\"/usr/local/nginx/sbin/nginx\"\nXRAY_CONF=\"/etc/idleleo/conf/xray/config.json\"\nNGINX_CONF=\"/usr/local/nginx/conf/nginx.conf\"\n\n_start_cron() {\n    pgrep -f \"cron\" >/dev/null 2>&1 || cron\n}\n\n_start_services() {\n    if [[ -f \"$XRAY_CONF\" ]] && [[ -x \"$XRAY_BIN\" ]]; then\n        echo \"[entrypoint] Starting Xray...\"\n        systemctl start xray\n    fi\n    if [[ -f \"$NGINX_CONF\" ]] && [[ -x \"$NGINX_BIN\" ]]; then\n        echo \"[entrypoint] Starting Nginx...\"\n        systemctl start nginx\n    fi\n}\n\nSTOPPING=0\n\n_stop_services() {\n    if [[ \"$STOPPING\" -eq 1 ]]; then return; fi\n    STOPPING=1\n    echo \"[entrypoint] Stopping services...\"\n    if [[ -f /usr/local/nginx/logs/nginx.pid ]]; then\n        \"$NGINX_BIN\" -s stop 2>/dev/null || true\n    fi\n    pkill -f \"$NGINX_BIN\" 2>/dev/null || true\n    if [[ -f /var/run/xray.pid ]]; then\n        kill \"$(cat /var/run/xray.pid 2>/dev/null)\" 2>/dev/null || true\n    fi\n    pkill -f \"$XRAY_BIN\" 2>/dev/null || true\n    echo \"[entrypoint] Services stopped.\"\n}\n\n_watchdog() {\n    while [[ \"$STOPPING\" -eq 0 ]]; do\n        if [[ -f \"$XRAY_CONF\" ]] && [[ -x \"$XRAY_BIN\" ]]; then\n            if ! systemctl -q is-active xray 2>/dev/null; then\n                echo \"[watchdog] Xray not running, restarting...\"\n                systemctl start xray\n            fi\n        fi\n        if [[ -f \"$NGINX_CONF\" ]] && [[ -x \"$NGINX_BIN\" ]]; then\n            if ! systemctl -q is-active nginx 2>/dev/null; then\n                echo \"[watchdog] Nginx not running, restarting...\"\n                systemctl start nginx\n            fi\n        fi\n        sleep 30\n    done\n}\n\ntrap '_stop_services; exit 0' SIGTERM SIGINT SIGQUIT\n\n_start_cron\n\ncase \"${1:-idleleo}\" in\n    idleleo)\n        if [[ -f \"$XRAY_CONF\" ]] && [[ -x \"$XRAY_BIN\" ]]; then\n            _start_services\n            echo \"[entrypoint] Services started. Launching management script...\"\n            echo \"[entrypoint] Type 'exit' to return to daemon mode.\"\n            bash /etc/idleleo/install.sh\n            echo \"[entrypoint] Entering daemon mode...\"\n            _watchdog\n        else\n            echo \"[entrypoint] No config found. Launching install script...\"\n            bash /etc/idleleo/install.sh\n            if [[ -f \"$XRAY_CONF\" ]]; then\n                _start_services\n                echo \"[entrypoint] Installation complete. Entering daemon mode...\"\n            else\n                echo \"[entrypoint] No config. Entering daemon mode...\"\n            fi\n            _watchdog\n        fi\n        ;;\n    start)\n        _start_services\n        echo \"[entrypoint] Services started. Daemon mode.\"\n        _watchdog\n        ;;\n    shell|bash)\n        _start_services\n        echo \"[entrypoint] Services started. Opening shell...\"\n        /bin/bash\n        echo \"[entrypoint] Entering daemon mode...\"\n        _watchdog\n        ;;\n    *)\n        _start_services\n        exec \"$@\"\n        ;;\nesac\n"
  },
  {
    "path": "fail2ban_manager.sh",
    "content": "#!/bin/bash\n\n# 定义当前版本号\nmf_SCRIPT_VERSION=\"1.2.1\"\n\nmf_main_menu() {\n    check_system\n    while true; do\n        echo\n        log_echo \"${GreenBG} $(gettext \"设置\") Fail2ban $(gettext \"用于防止暴力破解\") ${Font}\"\n        log_echo \"${Green} $(gettext \"主菜单\") ${Font}\"\n        log_echo \"1. ${Green}$(gettext \"安装\") Fail2ban${Font}\"\n        log_echo \"2. ${Green}$(gettext \"管理\") Fail2ban${Font}\"\n        log_echo \"3. ${Green}$(gettext \"卸载\") Fail2ban${Font}\"\n        log_echo \"4. ${Green}$(gettext \"查看\") Fail2ban $(gettext \"状态\")${Font}\"\n        log_echo \"5. ${Green}$(gettext \"退出\")${Font}\"\n        local fail2ban_fq\n        read_optimize \"$(gettext \"请选择一个选项\"):\" fail2ban_fq \"\" 1\n        case $fail2ban_fq in\n            1) mf_install_fail2ban ;;\n            2) mf_manage_fail2ban ;;\n            3) mf_uninstall_fail2ban ;;\n            4) mf_display_fail2ban_status ;;\n            5) source \"${idleleo}\" ;;\n            *)\n                echo\n                log_echo \"${Error} ${RedBG} $(gettext \"无效的选择, 请重试\") ${Font}\"\n                ;;\n        esac\n    done    \n}\n\nmf_install_fail2ban() {\n    if command -v fail2ban-client &> /dev/null; then\n        log_echo \"${OK} ${Green} Fail2ban $(gettext \"已经安装, 跳过安装步骤\") ${Font}\"\n    else\n        pkg_install \"fail2ban\"\n        mf_configure_fail2ban\n        judge \"Fail2ban $(gettext \"安装\")\"\n        source \"${idleleo}\"\n    fi\n}\n\nmf_ensure_sshd_config() {\n    cat > /etc/fail2ban/jail.d/sshd.local << 'EOF'\n[sshd]\nenabled = true\nfilter = sshd\nlogpath = %(sshd_log)s\nbackend = systemd\nmaxretry = 5\nbantime = 604800\nEOF\n}\n\nmf_configure_fail2ban() {\n\n    # 确保 jail.d 目录存在\n    mkdir -p /etc/fail2ban/jail.d\n\n    # 如果 jail.local 不存在，创建它\n    if [[ ! -f \"/etc/fail2ban/jail.local\" ]]; then\n        cp -fp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local\n    fi\n\n    # systemd SSH 日志检查\n    if ! journalctl -u ssh --since \"1 hour ago\" --no-pager -q | head -n 1 >/dev/null 2>&1; then\n        log_echo \"${Warning} ${YellowBG} $(gettext \"systemd 无法读取 SSH 日志\") ${Font}\"\n        log_echo \"${Warning} ${YellowBG} $(gettext \"跳过启用\") SSH $(gettext \"规则\") ${Font}\"\n    else\n        mf_ensure_sshd_config\n    fi\n\n    # 检查 Nginx 是否安装\n    if [[ ${tls_mode} == \"TLS\" || ${reality_add_nginx} == \"on\" ]]; then\n        if [[ ! -f \"${nginx_dir}/sbin/nginx\" ]]; then\n            log_echo \"${Warning} ${YellowBG} Nginx $(gettext \"未安装, 请先安装\") Nginx ${Font}\"\n            return\n        fi\n    fi\n\n    # 配置 Nginx 相关规则\n    if [[ ${tls_mode} == \"TLS\" || ${reality_add_nginx} == \"on\" ]]; then\n        cat > /etc/fail2ban/jail.d/nginx-badbots.local << EOF\n[nginx-badbots]\nenabled  = true\nport     = http,https,8080\nfilter   = apache-badbots\nlogpath  = ${nginx_dir}/logs/access.log\nbantime  = 604800\nmaxretry = 5\nEOF\n        log_echo \"${OK} ${GreenBG} $(gettext \"已启用\") nginx-badbots $(gettext \"规则\") ${Font}\"\n\n        cat > /etc/fail2ban/jail.d/nginx-botsearch.local << EOF\n[nginx-botsearch]\nenabled  = true\nfilter   = nginx-botsearch\nlogpath  = ${nginx_dir}/logs/access.log\n           ${nginx_dir}/logs/error.log\nbantime  = 604800\nEOF\n        log_echo \"${OK} ${GreenBG} $(gettext \"已启用\") nginx-botsearch $(gettext \"规则\") ${Font}\"\n    fi\n\n    # 启用 nginx-no-host 规则\n    if [[ ${reality_add_nginx} == \"on\" ]]; then\n        if [[ ! -f \"/etc/fail2ban/jail.d/nginx-no-host.local\" ]]; then\n            mf_create_nginx_no_host_filter\n            cat > /etc/fail2ban/jail.d/nginx-no-host.local << EOF\n[nginx-no-host]\nenabled  = true\nfilter   = nginx-no-host\nlogpath  = ${nginx_dir}/logs/sni_error.log\nbantime  = 604800\nmaxretry = 5\nfindtime = 120\nEOF\n            \n            log_echo \"${GreenBG} $(gettext \"是否启用\") nginx-no-host $(gettext \"规则\")? [${Red}Y${Font}${GreenBG}/N] ${Font}\"\n            read -r enable_nginx_no_host\n            case $enable_nginx_no_host in\n                [nN][oO] | [nN])\n                    sed -i \"s/enabled\\s*=\\s*true/enabled = false/\" /etc/fail2ban/jail.d/nginx-no-host.local\n                    log_echo \"${OK} ${GreenBG} $(gettext \"已禁用\") nginx-no-host $(gettext \"规则\") ${Font}\"\n                    ;;\n                *)\n                    log_echo \"${OK} ${GreenBG} $(gettext \"已启用\") nginx-no-host $(gettext \"规则\") ${Font}\"\n                    ;;\n            esac\n        fi\n\n        # 启用 nginx-tls-error 规则\n        if [[ ! -f \"/etc/fail2ban/jail.d/nginx-tls-error.local\" ]]; then\n            mf_create_nginx_tls_error_filter\n            cat > /etc/fail2ban/jail.d/nginx-tls-error.local << EOF\n[nginx-tls-error]\nenabled  = true\nfilter   = nginx-tls-error\nlogpath  = ${nginx_dir}/logs/tls_error.log\nbantime  = 43200\nmaxretry = 8\nfindtime = 300\nEOF\n            \n            log_echo \"${GreenBG} $(gettext \"是否启用\") nginx-tls-error $(gettext \"规则\")? [${Red}Y${Font}${GreenBG}/N] ${Font}\"\n            read -r enable_nginx_tls_error\n            case $enable_nginx_tls_error in\n                [nN][oO] | [nN])\n                    sed -i \"s/enabled\\s*=\\s*true/enabled = false/\" /etc/fail2ban/jail.d/nginx-tls-error.local\n                    log_echo \"${OK} ${GreenBG} $(gettext \"已禁用\") nginx-tls-error $(gettext \"规则\") ${Font}\"\n                    ;;\n                *)\n                    log_echo \"${OK} ${GreenBG} $(gettext \"已启用\") nginx-tls-error $(gettext \"规则\") ${Font}\"\n                    ;;\n            esac\n        fi\n    fi\n    systemctl daemon-reload\n    systemctl restart fail2ban\n    judge \"Fail2ban $(gettext \"配置\")\"\n}\n\nmf_create_nginx_no_host_filter() {\n    local filter_file=\"/etc/fail2ban/filter.d/nginx-no-host.conf\"\n    if [[ ! -f \"$filter_file\" ]]; then\n        cat >\"$filter_file\" <<'EOF'\n[Definition]\ndatepattern = ^%%d/%%b/%%Y:%%H:%%M:%%S %%z$\nfailregex = ^<HOST> \\[.*\\] \".*\".*\\d+$\nignoreregex =\nEOF\n    fi\n}\n\nmf_create_nginx_tls_error_filter() {\n    local filter_file=\"/etc/fail2ban/filter.d/nginx-tls-error.conf\"\n    if [[ ! -f \"$filter_file\" ]]; then\n        cat >\"$filter_file\" <<'EOF'\n[Definition]\ndatepattern = ^%%d/%%b/%%Y:%%H:%%M:%%S %%z$\nfailregex = ^<HOST> \\[.*\\] \".*\".*\\d+$\nignoreregex =\nEOF\n    fi\n}\n\n# 检查模块是否启用\nmf_is_module_enabled() {\n    local module_file=\"$1\"\n    local default_status=\"${2:-true}\"\n    \n    if [[ ! -f \"$module_file\" ]]; then\n        return 1\n    fi\n    \n    local enabled_status=$(grep -oP 'enabled\\s*=\\s*\\K\\w+' \"$module_file\" 2>/dev/null || echo \"$default_status\")\n    [[ \"$enabled_status\" == \"true\" ]]\n}\n\nmf_manage_fail2ban() {\n    if ! command -v fail2ban-client &> /dev/null; then\n        log_echo \"${Error} ${RedBG} Fail2ban $(gettext \"未安装, 请先安装\") Fail2ban ${Font}\"\n        return\n    fi\n\n    while true; do\n        echo\n        log_echo \"${Green} $(gettext \"请选择\") Fail2ban $(gettext \"操作\"): ${Font}\"\n        echo \"1. $(gettext \"管理模块\")\"\n        echo \"2. $(gettext \"添加自定义规则\")\"\n        echo \"3. $(gettext \"服务管理\")\"\n        echo \"4. $(gettext \"返回\")\"\n        local mf_action\n        read_optimize \"$(gettext \"请输入\"):\" mf_action 1\n        case $mf_action in\n        1)\n            mf_manage_modules\n            ;;\n        2)\n            mf_add_custom_rule\n            mf_main_menu\n            ;;\n        3)\n            # 服务管理子菜单\n            while true; do\n                echo\n                log_echo \"${Green} $(gettext \"服务管理\"): ${Font}\"\n                echo \"1. $(gettext \"启动\") Fail2ban\"\n                echo \"2. $(gettext \"停止\") Fail2ban\"\n                echo \"3. $(gettext \"重启\") Fail2ban\"\n                echo \"4. $(gettext \"返回\")\"\n                local service_action\n                read_optimize \"$(gettext \"请输入\"):\" service_action 1\n                case $service_action in\n                1)\n                    mf_start_enable_fail2ban\n                    ;;\n                2)\n                    mf_stop_disable_fail2ban\n                    ;;\n                3)\n                    mf_restart_fail2ban\n                    ;;\n                4)\n                    break\n                    ;;\n                *)\n                    echo\n                    log_echo \"${Error} ${RedBG} $(gettext \"无效的选择, 请重试\") ${Font}\"\n                    ;;\n                esac\n            done\n            ;;\n        4) mf_main_menu ;;\n        *)\n            echo\n            log_echo \"${Error} ${RedBG} $(gettext \"无效的选择, 请重试\") ${Font}\"\n            ;;\n        esac\n    done\n}\n\nmf_add_custom_rule() {\n    local jail_name\n    local filter_name\n    local log_path\n    local max_retry\n    local ban_time\n\n    read_optimize \"$(gettext \"请输入新的\") Jail $(gettext \"名称\"):\" \"jail_name\" NULL\n    read_optimize \"$(gettext \"请输入\") Filter $(gettext \"名称\"):\" \"filter_name\" NULL\n    read_optimize \"$(gettext \"请输入日志路径\"):\" \"log_path\" NULL\n    read_optimize \"$(gettext \"请输入最大重试次数\") ($(gettext \"默认\") 5):\" \"max_retry\" 5 1 99 \"$(gettext \"最大重试次数必须在 1 到 99 之间\")\"\n    read_optimize \"$(gettext \"请输入封禁时间\") ($(gettext \"秒\"), $(gettext \"默认\") 604800):\" \"ban_time\" 604800 1 8640000 \"$(gettext \"封禁时间必须在 1 到 8640000 秒之间\")\"\n\n    cat > \"/etc/fail2ban/jail.d/${jail_name}.local\" << EOF\n[$jail_name]\nenabled  = true\nfilter   = $filter_name\nlogpath  = $log_path\nmaxretry = $max_retry\nbantime  = $ban_time\nEOF\n    log_echo \"${OK} ${GreenBG} $(gettext \"自定义规则添加成功\") ${Font}\"\n\n    systemctl daemon-reload\n    systemctl restart fail2ban\n    judge \"Fail2ban $(gettext \"重启以应用新规则\")\"\n}\n\nmf_manage_modules() {\n    echo\n    log_echo \"${Green} $(gettext \"管理 Fail2ban 模块\") ${Font}\"\n    \n    # 列出所有模块化配置文件\n    local module_files=()\n    local module_names=()\n    local index=1\n    \n    # 查找所有 .local 文件\n    for file in /etc/fail2ban/jail.d/*.local; do\n        if [[ -f \"$file\" ]]; then\n            module_files[$index]=\"$file\"\n            module_names[$index]=$(basename \"$file\" .local)\n            index=$((index + 1))\n        fi\n    done\n    \n    if [[ ${#module_files[@]} -eq 0 ]]; then\n        log_echo \"${Warning} ${YellowBG} $(gettext \"未找到任何模块化配置文件\") ${Font}\"\n        return\n    fi\n    \n    # 计算列宽\n    local max_name_length=15\n\n    local compare_strings=()\n    compare_strings+=(\"$(gettext \"模块名称\")\")\n    \n    for ((i=1; i<${#module_files[@]}+1; i++)); do\n        compare_strings+=(\"${module_names[$i]}\")\n    done\n    \n    compare_strings+=(\"$(gettext \"返回\")\")\n    \n    for str in \"${compare_strings[@]}\"; do\n        local length=${#str}\n        if (( length > max_name_length )); then\n            max_name_length=$length\n        fi\n    done\n    \n    # 计算总宽度\n    local total_width=$((max_name_length + 20))\n    \n    # 打印表头\n    printf \"%s\\n\" \"$(printf '%*s' \"$total_width\" | tr ' ' '-')\"\n    printf \"| %-4s | %-${max_name_length}s | %-10s |\\n\" \"$(gettext \"序号\")\" \"$(gettext \"模块名称\")\" \"$(gettext \"状态\")\"\n    printf \"%s\\n\" \"$(printf '%*s' \"$total_width\" | tr ' ' '-')\"\n    \n    for ((i=1; i<${#module_files[@]}+1; i++)); do\n        local module_file=${module_files[$i]}\n        local module_name=${module_names[$i]}\n        \n        if mf_is_module_enabled \"$module_file\"; then\n            local status_text=\"$(gettext \"已启用\")\"\n        else\n            local status_text=\"$(gettext \"已禁用\")\"\n        fi\n        \n        printf \"| %4d | %-${max_name_length}s | %-10s |\\n\" $i \"$module_name\" \"$status_text\"\n    done\n    \n    # 打印表尾\n    printf \"%s\\n\" \"$(printf '%*s' \"$total_width\" | tr ' ' '-')\"\n    printf \"| %4d | %-${max_name_length}s | %-10s |\\n\" 0 \"$(gettext \"返回\")\" \"\"\n    printf \"%s\\n\" \"$(printf '%*s' \"$total_width\" | tr ' ' '-')\"\n\n    \n    # 让用户选择要管理的模块\n    local module_choice\n    read_optimize \"$(gettext \"请选择要管理的模块\"): \" \"module_choice\" 0 0 ${#module_files[@]} \"$(gettext \"无效的选择, 请重试\")\"\n    \n    if [[ $module_choice -eq 0 ]]; then\n        return\n    fi\n    \n    local selected_file=${module_files[$module_choice]}\n    local selected_name=${module_names[$module_choice]}\n    \n    # 获取当前状态\n    local current_status=$(grep -oP 'enabled\\s*=\\s*\\K\\w+' \"$selected_file\" 2>/dev/null || echo \"true\")\n    local new_status=$([[ \"$current_status\" == \"true\" ]] && echo \"false\" || echo \"true\")\n    local status_text=$([[ \"$new_status\" == \"true\" ]] && echo \"$(gettext \"启用\")\" || echo \"$(gettext \"禁用\")\")\n    \n    # 确认操作\n    log_echo \"${GreenBG} $(gettext \"是否\") $status_text $selected_name $(gettext \"模块\") [${Red}Y${Font}${GreenBG}/N]? ${Font}\"\n    read -r confirm\n    \n    if [[ ! $confirm =~ ^[nN]([oO])?$ ]]; then\n        sed -i \"s/enabled\\s*=\\s*\\w*/enabled = $new_status/\" \"$selected_file\"\n\n        mf_restart_fail2ban\n        \n        log_echo \"${OK} ${GreenBG} $selected_name $(gettext \"模块\") $status_text ${Font}\"\n    else\n        log_echo \"${Green} $(gettext \"操作已取消\") ${Font}\"\n    fi\n    \n    mf_manage_modules\n}\n\nmf_start_enable_fail2ban() {\n    systemctl daemon-reload\n    systemctl start fail2ban\n    systemctl enable fail2ban\n    judge \"Fail2ban $(gettext \"启动\")\"\n    # timeout \"$(gettext \"清空屏幕\")!\"\n    # clear\n}\n\nmf_uninstall_fail2ban() {\n    systemctl stop fail2ban\n    systemctl disable fail2ban\n    ${INS} -y remove fail2ban\n    [[ -f \"/etc/fail2ban/jail.local\" ]] && rm -rf /etc/fail2ban/jail.local\n    rm -rf /etc/fail2ban/jail.d/*.local\n    if [[ -f \"/etc/fail2ban/filter.d/nginx-no-host.conf\" ]]; then\n        rm -rf /etc/fail2ban/filter.d/nginx-no-host.conf\n    fi\n    if [[ -f \"/etc/fail2ban/filter.d/nginx-tls-error.conf\" ]]; then\n        rm -rf /etc/fail2ban/filter.d/nginx-tls-error.conf\n    fi\n    judge \"Fail2ban $(gettext \"卸载\")\"\n    timeout \"$(gettext \"清空屏幕\")!\"\n    clear\n    source \"${idleleo}\"\n}\n\nmf_stop_disable_fail2ban() {\n    systemctl stop fail2ban\n    systemctl disable fail2ban\n    log_echo \"${OK} ${GreenBG} Fail2ban $(gettext \"停止成功\") ${Font}\"\n    # timeout \"$(gettext \"清空屏幕\")!\"\n    # clear\n}\n\nmf_restart_fail2ban() {\n    systemctl daemon-reload\n    systemctl restart fail2ban\n    judge \"Fail2ban $(gettext \"重启\")\"\n    # timeout \"$(gettext \"清空屏幕\")!\"\n    # clear\n}\n\nmf_display_fail2ban_status() {\n    echo\n    if ! command -v fail2ban-client &> /dev/null; then\n        log_echo \"${Error} ${RedBG} Fail2ban $(gettext \"未安装, 请先安装\") Fail2ban ${Font}\"\n        return\n    fi\n\n    log_echo \"${GreenBG} Fail2ban $(gettext \"总体状态\"): ${Font}\"\n    fail2ban-client status\n\n    echo\n    log_echo \"${Green} $(gettext \"默认启用的 Jail 状态\"): ${Font}\"\n    echo \"----------------------------------------\"\n    \n    if mf_is_module_enabled \"/etc/fail2ban/jail.d/sshd.local\"; then\n        log_echo \"${Green} SSH $(gettext \"封锁情况\"): ${Font}\"\n        fail2ban-client status sshd 2>/dev/null || log_echo \"${Warning} ${YellowBG} SSH Jail $(gettext \"未启用或配置异常\") ${Font}\"\n    fi\n\n    if [[ ${tls_mode} == \"TLS\" || ${reality_add_nginx} == \"on\" ]]; then\n        if mf_is_module_enabled \"/etc/fail2ban/jail.d/nginx-badbots.local\"; then\n            log_echo \"${Green} Fail2ban Nginx $(gettext \"封锁情况\"): ${Font}\"\n            fail2ban-client status nginx-badbots 2>/dev/null || log_echo \"${Warning} ${YellowBG} nginx-badbots $(gettext \"未启用或配置异常\") ${Font}\"\n        fi\n        if mf_is_module_enabled \"/etc/fail2ban/jail.d/nginx-botsearch.local\"; then\n            fail2ban-client status nginx-botsearch 2>/dev/null || log_echo \"${Warning} ${YellowBG} nginx-botsearch $(gettext \"未启用或配置异常\") ${Font}\"\n        fi\n        if [[ ${reality_add_nginx} == \"on\" ]]; then\n            if mf_is_module_enabled \"/etc/fail2ban/jail.d/nginx-no-host.local\"; then\n                fail2ban-client status nginx-no-host 2>/dev/null || log_echo \"${Warning} ${YellowBG} nginx-no-host $(gettext \"未启用或配置异常\") ${Font}\"\n            fi\n            if mf_is_module_enabled \"/etc/fail2ban/jail.d/nginx-tls-error.local\"; then\n                fail2ban-client status nginx-tls-error 2>/dev/null || log_echo \"${Warning} ${YellowBG} nginx-tls-error $(gettext \"未启用或配置异常\") ${Font}\"\n            fi\n        fi\n    fi\n    echo\n    mf_main_menu\n}\n\nmf_check_for_updates() {\n    local latest_version\n    local update_choice\n\n    # 直接使用 curl 下载远程版本信息\n    latest_version=$(curl -s \"$mf_remote_url\" | grep 'mf_SCRIPT_VERSION=' | head -n 1 | sed 's/mf_SCRIPT_VERSION=\"//; s/\"//')\n    if [ -n \"$latest_version\" ] && [ \"$latest_version\" != \"$mf_SCRIPT_VERSION\" ]; then\n        log_echo \"${Warning} ${YellowBG} $(gettext \"新版本可用\"): $latest_version $(gettext \"当前版本\"): $mf_SCRIPT_VERSION ${Font}\"\n        log_echo \"${Warning} ${YellowBG} $(gettext \"请访问\") https://github.com/hello-yunshu/Xray_bash_onekey $(gettext \"查看更新说明\") ${Font}\"\n\n        log_echo \"${GreenBG} $(gettext \"是否下载并安装新版本\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n        read -r update_choice\n        case $update_choice in\n            [yY][eE][sS] | [yY])\n                log_echo \"${Info} ${Green} $(gettext \"正在下载新版本\")... ${Font}\"\n                curl -sL \"$mf_remote_url\" -o \"${idleleo_dir}/fail2ban_manager.sh\"\n\n                if [ $? -eq 0 ]; then\n                    chmod +x \"${idleleo_dir}/fail2ban_manager.sh\"\n                    log_echo \"${OK} ${GreenBG} $(gettext \"下载完成, 请重新运行脚本\") ${Font}\"\n                    bash \"${idleleo}\"\n                else\n                    echo\n                    log_echo \"${Error} ${RedBG} $(gettext \"下载失败, 请手动下载并安装新版本\") ${Font}\"\n                fi\n                ;;\n            *)\n                log_echo \"${Green} $(gettext \"跳过更新\") ${Font}\"\n                ;;\n        esac\n    else\n        log_echo \"${OK} ${Green} $(gettext \"当前已经是最新版本\"): $mf_SCRIPT_VERSION ${Font}\"\n    fi\n}\n\n# 检查更新\nmf_check_for_updates\n\nmf_main_menu\n"
  },
  {
    "path": "fake-systemctl",
    "content": "#!/bin/bash\n\nXRAY_PID_FILE=\"/var/run/xray.pid\"\nNGINX_PID_FILE=\"/usr/local/nginx/logs/nginx.pid\"\nXRAY_BIN=\"/usr/local/bin/xray\"\nNGINX_BIN=\"/usr/local/nginx/sbin/nginx\"\nXRAY_CONF=\"/etc/idleleo/conf/xray/config.json\"\nNGINX_CONF=\"/usr/local/nginx/conf/nginx.conf\"\n\n_xray_is_running() {\n    if [[ -f \"$XRAY_PID_FILE\" ]]; then\n        local pid=$(cat \"$XRAY_PID_FILE\" 2>/dev/null)\n        [[ -n \"$pid\" ]] && kill -0 \"$pid\" 2>/dev/null && return 0\n    fi\n    pgrep -f \"$XRAY_BIN\" >/dev/null 2>&1\n}\n\n_nginx_is_running() {\n    if [[ -f \"$NGINX_PID_FILE\" ]]; then\n        local pid=$(cat \"$NGINX_PID_FILE\" 2>/dev/null)\n        [[ -n \"$pid\" ]] && kill -0 \"$pid\" 2>/dev/null && return 0\n    fi\n    pgrep -f \"$NGINX_BIN\" >/dev/null 2>&1\n}\n\n_start_xray() {\n    _xray_is_running && return 0\n    if [[ -x \"$XRAY_BIN\" ]] && [[ -f \"$XRAY_CONF\" ]]; then\n        nohup \"$XRAY_BIN\" run -config \"$XRAY_CONF\" \\\n            >/var/log/xray/access.log 2>/var/log/xray/error.log &\n        echo $! > \"$XRAY_PID_FILE\"\n        sleep 1\n        _xray_is_running && return 0\n        rm -f \"$XRAY_PID_FILE\"\n    fi\n    return 1\n}\n\n_stop_xray() {\n    if [[ -f \"$XRAY_PID_FILE\" ]]; then\n        kill \"$(cat \"$XRAY_PID_FILE\" 2>/dev/null)\" 2>/dev/null\n        sleep 1\n        kill -9 \"$(cat \"$XRAY_PID_FILE\" 2>/dev/null)\" 2>/dev/null\n        rm -f \"$XRAY_PID_FILE\"\n    fi\n    pkill -f \"$XRAY_BIN\" 2>/dev/null\n}\n\n_start_nginx() {\n    _nginx_is_running && return 0\n    if [[ -x \"$NGINX_BIN\" ]] && [[ -f \"$NGINX_CONF\" ]]; then\n        \"$NGINX_BIN\" 2>/dev/null\n        sleep 1\n        _nginx_is_running && return 0\n    fi\n    return 1\n}\n\n_stop_nginx() {\n    [[ -x \"$NGINX_BIN\" ]] && \"$NGINX_BIN\" -s stop 2>/dev/null\n    sleep 1\n    pkill -f \"$NGINX_BIN\" 2>/dev/null\n    rm -f \"$NGINX_PID_FILE\"\n}\n\n_reload_nginx() {\n    _nginx_is_running && \"$NGINX_BIN\" -s reload 2>/dev/null\n}\n\n_iptables_restore() {\n    if [[ -f /etc/iptables/rules.v4 ]]; then\n        iptables-restore < /etc/iptables/rules.v4 2>/dev/null\n    fi\n    if [[ -f /etc/iptables/rules.v6 ]]; then\n        ip6tables-restore < /etc/iptables/rules.v6 2>/dev/null\n    fi\n}\n\ncase \"$1\" in\n    start)\n        case \"$2\" in\n            xray)      _start_xray ;;\n            nginx)     _start_nginx ;;\n            crond|cron) cron ;;\n            iptables)  _iptables_restore ;;\n            fail2ban)  fail2ban-client start 2>/dev/null ;;\n            *)         ;;\n        esac\n        ;;\n    stop)\n        case \"$2\" in\n            xray)      _stop_xray ;;\n            nginx)     _stop_nginx ;;\n            iptables)  iptables -F 2>/dev/null; ip6tables -F 2>/dev/null ;;\n            fail2ban)  fail2ban-client stop 2>/dev/null ;;\n            *)         ;;\n        esac\n        ;;\n    restart)\n        case \"$2\" in\n            xray)      _stop_xray; sleep 1; _start_xray ;;\n            nginx)     _stop_nginx; sleep 1; _start_nginx ;;\n            iptables)  iptables -F 2>/dev/null; ip6tables -F 2>/dev/null; _iptables_restore ;;\n            fail2ban)  fail2ban-client restart 2>/dev/null ;;\n            *)         ;;\n        esac\n        ;;\n    reload)\n        case \"$2\" in\n            nginx)  _reload_nginx ;;\n            *)      ;;\n        esac\n        ;;\n    enable|disable|daemon-reload)\n        exit 0\n        ;;\n    is-active)\n        shift\n        if [[ \"$1\" == \"--quiet\" ]] || [[ \"$1\" == \"-q\" ]]; then shift; fi\n        case \"$1\" in\n            xray)      _xray_is_running && echo \"active\" && exit 0 || echo \"inactive\" && exit 3 ;;\n            nginx)     _nginx_is_running && echo \"active\" && exit 0 || echo \"inactive\" && exit 3 ;;\n            fail2ban)  pgrep -f \"fail2ban-server\" >/dev/null && echo \"active\" && exit 0 || echo \"inactive\" && exit 3 ;;\n            *)         echo \"unknown\"; exit 3 ;;\n        esac\n        ;;\n    -q)\n        [[ \"$2\" == \"is-active\" ]] || exit 0\n        case \"$3\" in\n            xray)      _xray_is_running && exit 0 || exit 3 ;;\n            nginx)     _nginx_is_running && exit 0 || exit 3 ;;\n            fail2ban)  pgrep -f \"fail2ban-server\" >/dev/null && exit 0 || exit 3 ;;\n            *)         exit 3 ;;\n        esac\n        ;;\n    is-enabled)\n        exit 0\n        ;;\n    status)\n        case \"$2\" in\n            xray)  _xray_is_running  && echo \"active (running)\" || echo \"inactive (dead)\" ;;\n            nginx) _nginx_is_running && echo \"active (running)\" || echo \"inactive (dead)\" ;;\n            *)     echo \"unknown\" ;;\n        esac\n        ;;\n    *)\n        echo \"Fake systemctl for Docker\" >&2\n        exit 0\n        ;;\nesac\n"
  },
  {
    "path": "file_manager.sh",
    "content": "#!/bin/bash\n\n# 定义当前版本号\nfm_SCRIPT_VERSION=\"1.2.4\"\n\nif [ -z \"$1\" ]; then\n    echo \"$(gettext \"用法\"):\" $0 <$(gettext \"文件扩展名\")> [<$(gettext \"目录路径\")>]\n    exit 1\nfi\n\nfm_EXTENSION=\"$1\"\nfm_WORKDIR=\"${2:-$(pwd)}\"\n\nif [ ! -d \"$fm_WORKDIR\" ]; then\n    echo\n    log_echo \"${Error} ${RedBG} $(gettext \"目录\") $fm_WORKDIR $(gettext \"不存在, 请检查路径\") ${Font}\"\n    exit 1\nfi\n\nfm_original_dir=$(pwd)\n\ncd \"$fm_WORKDIR\"\n\nfm_list_files() {\n    local max_length\n    log_echo \"${GreenBG} $(gettext \"列出所有\") .$fm_EXTENSION $(gettext \"文件\") ${Font}\"\n\n    # 设置 dotglob 选项，使通配符 * 包括以点开头的文件\n    shopt -s dotglob nullglob\n\n    # 使用数组存储匹配到的文件\n    files=(*.$fm_EXTENSION)\n\n    if [ ${#files[@]} -eq 0 ]; then\n        log_echo \"${Warning} ${YellowBG} $(gettext \"未找到\") .$fm_EXTENSION $(gettext \"文件\") ${Font}\"\n        return 1\n    else\n        local max_length=0\n        for file in \"${files[@]}\"; do\n            local length=${#file}\n            if (( length > max_length )); then\n                max_length=$length\n            fi\n        done\n\n        if (( max_length < 10 )); then\n            max_length=10\n        fi\n\n        local total_width=$((max_length + 10))\n        printf \"%-${total_width}s\\n\" \"$(printf '%*s' \"$total_width\" | tr ' ' '-')\"\n\n        local header_text=\"$(gettext \"文件名\")\"\n        local header_length=${#header_text}\n        local padding=$(( (total_width - header_length - 4) / 2 ))\n        local left_padding=$(( padding - 4 ))  # 加上序号列的宽度\n        local right_padding=$(( padding - 4 ))\n\n        printf \"| %-4s | %-${left_padding}s%-${header_length}s%-${right_padding}s |\\n\" \"$(gettext \"序号\")\" \"\" \"$header_text\" \"\"\n\n        printf \"%-${total_width}s\\n\" \"$(printf '%*s' \"$total_width\" | tr ' ' '-')\"\n\n        local index=1\n        for file in \"${files[@]}\"; do\n            printf \"| %4d | %-*s |\\n\" $index $((max_length)) \"$file\"\n            ((index++))\n        done\n\n        printf \"%-${total_width}s\\n\" \"$(printf '%*s' \"$total_width\" | tr ' ' '-')\"\n\n        return 0\n    fi\n}\n\nfm_create_servername_file() {\n    local url\n    fm_list_files\n    echo\n    log_echo \"${Green} $(gettext \"请输入网址 (例如 hey.run)\")\"\n    log_echo \"${Green} $(gettext \"不要包含 http:// 或 https:// 开头\") ${Font}\"\n    read_optimize \"$(gettext \"请输入\"):\" url\n    if [[ $url =~ ^(http|https):// ]]; then\n        echo\n        log_echo \"${Error} ${RedBG} $(gettext \"网址不能包含 http:// 或 https:// 前缀\") ${Font}\"\n        return\n    fi\n    echo \"${url} reality;\" > \"${url}.serverNames\"\n    log_echo \"${OK} ${GreenBG} $(gettext \"文件\") ${url}.serverNames $(gettext \"已创建\") ${Font}\"\n    fm_restart_nginx_and_check_status\n    fm_list_files\n}\n\nfm_create_server_file() {\n    local default_port=\"$1\"\n    local host port weight content firewall_set_fq\n\n    fm_list_files\n\n    read_optimize \"$(gettext \"请输入主机\") (host):\" host\n\n    if [[ -n \"$default_port\" ]]; then\n        read_optimize \"$(gettext \"请输入端口\") (port $(gettext \"默认值\"): ${default_port}):\" port \"${default_port}\" 1 65535\n    else\n        read_optimize \"$(gettext \"请输入端口\") (port):\" port \"\" 1 65535\n    fi\n\n    read_optimize \"$(gettext \"请输入权重\") (0~100 $(gettext \"默认值\") 50):\" weight \"50\" 0 100\n\n    content=\"server ${host}:${port} weight=${weight} max_fails=2 fail_timeout=10;\"\n    echo \"$content\" > \"${host}.${fm_EXTENSION}\"\n    log_echo \"${OK} ${GreenBG} $(gettext \"文件\") ${host}.${fm_EXTENSION} $(gettext \"已创建\") ${Font}\"\n\n    echo\n    log_echo \"${GreenBG} $(gettext \"是否需要设置防火墙\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n    read -r firewall_set_fq\n    case $firewall_set_fq in\n    [yY][eE][sS] | [yY])\n\n        if [[ \"${ID}\" == \"centos\" ]]; then\n            pkg_install \"iptables-services\"\n        else\n            pkg_install \"iptables-persistent\"\n        fi\n        iptables -I INPUT -p tcp --dport ${port} -j ACCEPT\n        iptables -I INPUT -p udp --dport ${port} -j ACCEPT\n        iptables -I OUTPUT -p tcp --sport ${port} -j ACCEPT\n        iptables -I OUTPUT -p udp --sport ${port} -j ACCEPT\n        log_echo \"${OK} ${GreenBG} $(gettext \"防火墙\") $(gettext \"追加完成\") ${Font}\"\n        if [[ \"${ID}\" == \"centos\" && ${VERSION_ID} -ge 7 ]]; then\n            service iptables save\n            service iptables restart\n            log_echo \"${OK} ${GreenBG} $(gettext \"防火墙\") $(gettext \"重启完成\") ${Font}\"\n        else\n            netfilter-persistent save\n            systemctl restart iptables\n            log_echo \"${OK} ${GreenBG} $(gettext \"防火墙\") $(gettext \"重启完成\") ${Font}\"\n        fi\n        ;;\n    *)\n        log_echo \"${OK} ${GreenBG} $(gettext \"跳过防火墙设置\") ${Font}\"\n        ;;\n    esac\n    fm_restart_nginx_and_check_status\n    fm_list_files\n}\n\nfm_edit_file() {\n    fm_list_files\n    local num_files=${#files[@]}\n    local choice\n    read_optimize \"$(gettext \"请输入要编辑的文件编号\") (1-$num_files): \" choice \"\" 1 \"$num_files\"\n\n    local filename=\"${files[$((choice - 1))]}\"\n\n    if ! command -v vim &> /dev/null; then\n        log_echo \"${Warning} ${YellowBG} vim $(gettext \"未安装, 正在尝试安装\") ${Font}\"\n        pkg_install vim\n    fi\n    vim \"$filename\"\n    log_echo \"${OK} ${GreenBG} $(gettext \"文件\") $filename $(gettext \"已编辑\") ${Font}\"\n    fm_restart_nginx_and_check_status\n}\n\nfm_delete_file() {\n    if ! fm_list_files; then\n        return\n    fi\n\n    local num_files=${#files[@]}\n    local choice\n    read_optimize \"$(gettext \"请输入要删除的文件编号\") (1-$num_files): \" choice \"\" 1 \"$num_files\"\n\n    local filename=\"${files[$((choice - 1))]}\"\n\n    rm \"$filename\"\n    log_echo \"${OK} ${GreenBG} $(gettext \"文件\") $filename $(gettext \"已删除\") ${Font}\"\n    fm_restart_nginx_and_check_status\n    fm_list_files\n}\n\nfm_create_file() {\n    case $fm_EXTENSION in\n        serverNames)\n            fm_create_servername_file\n            ;;\n        wsServers|grpcServers)\n             fm_create_server_file \"\"\n             ;;\n        realityServers)\n             fm_create_server_file \"\"\n             ;;\n        *)\n            echo\n            log_echo \"${Error} ${RedBG} $(gettext \"不支持的文件扩展名\") $fm_EXTENSION ${Font}\"\n            ;;\n    esac\n}\n\nfm_main_menu() {\n    fm_list_files\n    while true; do\n        echo\n        log_echo \"${GreenBG} $(gettext \"主菜单\") ${Font}\"\n        log_echo \"1 ${Green}$(gettext \"列出所有\") $fm_EXTENSION $(gettext \"文件\")${Font}\"\n        log_echo \"2 ${Green}$(gettext \"创建一个新的\") $fm_EXTENSION $(gettext \"文件\")${Font}\"\n        log_echo \"3 ${Green}$(gettext \"编辑一个已存在的\") $fm_EXTENSION $(gettext \"文件\")${Font}\"\n        log_echo \"4 ${Green}$(gettext \"删除一个已存在的\") $fm_EXTENSION $(gettext \"文件\")${Font}\"\n        log_echo \"5 ${Green}$(gettext \"退出\")${Font}\"\n        local choice\n        read_optimize \"$(gettext \"请选择一个选项\"):\" choice \"\" 1 5\n\n        case $choice in\n            1) fm_list_files ;;\n            2) fm_create_file ;;\n            3) fm_edit_file ;;\n            4) fm_delete_file ;;\n            5) source \"$idleleo\" ;;\n            *)\n                echo\n                log_echo \"${Error} ${RedBG} $(gettext \"无效选项, 请重试\") ${Font}\"\n                ;;\n        esac\n    done\n}\n\nfm_check_for_updates() {\n    local latest_version\n    local update_choice\n\n    latest_version=$(curl -s \"$fm_remote_url\" | grep 'fm_SCRIPT_VERSION=' | head -n 1 | sed 's/fm_SCRIPT_VERSION=\"//; s/\"//')\n    if [ -n \"$latest_version\" ] && [ \"$latest_version\" != \"$fm_SCRIPT_VERSION\" ]; then\n        log_echo \"${Warning} ${YellowBG} $(gettext \"新版本可用\"): $latest_version $(gettext \"当前版本\"): $fm_SCRIPT_VERSION ${Font}\"\n        log_echo \"${Warning} ${YellowBG} $(gettext \"请访问\") https://github.com/hello-yunshu/Xray_bash_onekey $(gettext \"查看更新说明\") ${Font}\"\n\n        log_echo \"${GreenBG} $(gettext \"是否下载并安装新版本\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n        read -r update_choice\n        case $update_choice in\n            [yY][eE][sS] | [yY])\n                log_echo \"${Info} ${Green} $(gettext \"正在下载新版本\")... ${Font}\"\n                curl -sL \"$fm_remote_url\" -o \"${idleleo_dir}/file_manager.sh\"\n\n                if [ $? -eq 0 ]; then\n                    chmod +x \"${idleleo_dir}/file_manager.sh\"\n                    log_echo \"${OK} ${GreenBG} $(gettext \"下载完成, 请重新运行脚本\") ${Font}\"\n                    bash \"${idleleo}\"\n                else\n                    echo\n                    log_echo \"${Error} ${RedBG} $(gettext \"下载失败, 请手动下载并安装新版本\") ${Font}\"\n                fi\n                ;;\n            *)\n                log_echo \"${OK} ${Green} $(gettext \"跳过更新\") ${Font}\"\n                ;;\n        esac\n    else\n        log_echo \"${OK} ${Green} $(gettext \"当前已经是最新版本\"): $fm_SCRIPT_VERSION ${Font}\"\n    fi\n}\n\nfm_restart_nginx_and_check_status() {\n    if [[ -f ${nginx_systemd_file} ]]; then\n        systemctl restart nginx\n        if systemctl is-active --quiet nginx; then\n            echo\n            log_echo \"${OK} ${GreenBG} Nginx $(gettext \"重启成功\") ${Font}\"\n        else\n            echo\n            log_echo \"${Error} ${RedBG} Nginx $(gettext \"重启失败\"), $(gettext \"请检查配置文件是否有误\") ${Font}\"\n            fm_edit_file\n        fi\n    fi\n}\n\nfm_check_for_updates\nfm_main_menu\n\ncd \"$fm_original_dir\" || exit 1\n"
  },
  {
    "path": "install.sh",
    "content": "#!/bin/bash\n\nPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin\nexport PATH\n#stty erase ^?\n\ncd \"$(\n    cd \"$(dirname \"$0\")\" || exit\n    pwd\n)\" || exit\n\n#=================================================================\n#\tSystem Request: Debian 12+ / Ubuntu 24.04+ / Centos Stream 8+\n#\tAuthor:\tyunyunshu\n#\tDscription: Xray Onekey Management\n#\tVersion: 2.8\n#\tOfficial document: hey.run\n#=================================================================\n\n#fonts color\nGreen=\"\\033[32m\"\nRed=\"\\033[31m\"\nGreenW=\"\\033[1;32m\"\nRedW=\"\\033[1;31m\"\n#Yellow=\"\\033[33m\"\nGreenBG=\"\\033[42;30m\"\nRedBG=\"\\033[41;30m\"\nYellowBG=\"\\033[43;30m\"\nFont=\"\\033[0m\"\n\n#notification information\nInfo=\"${Green}[$(gettext \"信息\")]${Font}\"\nOK=\"${Green}[OK]${Font}\"\nError=\"${RedW}[$(gettext \"错误\")]${Font}\"\nWarning=\"${RedW}[$(gettext \"警告\")]${Font}\"\n\nshell_version=\"2.8.12\"\nshell_mode=\"$(gettext \"未安装\")\"\ntls_mode=\"None\"\nws_grpc_mode=\"None\"\nlocal_bin=\"/usr/local\"\nidleleo_dir=\"/etc/idleleo\"\nidleleo=\"${idleleo_dir}/install.sh\"\nidleleo_conf_dir=\"${idleleo_dir}/conf\"\nlog_dir=\"${idleleo_dir}/logs\"\nxray_bin_dir=\"${local_bin}/bin\"\nxray_conf_dir=\"${idleleo_conf_dir}/xray\"\nnginx_conf_dir=\"${idleleo_conf_dir}/nginx\"\nxray_conf=\"${xray_conf_dir}/config.json\"\nxray_status_conf=\"${xray_conf_dir}/status_config.json\"\nxray_default_conf=\"${local_bin}/etc/xray/config.json\"\nnginx_conf=\"${nginx_conf_dir}/00-xray.conf\"\nnginx_ssl_conf=\"${nginx_conf_dir}/01-xray-80.conf\"\nnginx_upstream_conf=\"${nginx_conf_dir}/02-xray-server.conf\"\nidleleo_commend_file=\"/usr/bin/idleleo\"\nssl_chainpath=\"${idleleo_dir}/cert\"\nnginx_dir=\"${local_bin}/nginx\"\nxray_info_file=\"${idleleo_dir}/info/xray_info.inf\"\nxray_qr_config_file=\"${idleleo_dir}/info/vless_qr.json\"\nnginx_systemd_file=\"/etc/systemd/system/nginx.service\"\nxray_systemd_file=\"/etc/systemd/system/xray.service\"\nxray_access_log=\"/var/log/xray/access.log\"\nxray_error_log=\"/var/log/xray/error.log\"\namce_sh_file=\"/root/.acme.sh/acme.sh\"\nauto_update_file=\"${idleleo_dir}/auto_update.sh\"\nssl_update_file=\"${idleleo_dir}/ssl_update.sh\"\nmyemali=\"my@example.com\"\nshell_version_tmp=\"${idleleo_dir}/tmp/shell_version.tmp\"\nget_versions_all=$(curl -s https://cdn.jsdelivr.net/gh/hello-yunshu/Xray_bash_onekey_api@main/xray_shell_versions.json)\nread_config_status=1\nreality_add_more=\"off\"\nreality_add_nginx=\"off\"\nreality_add_balance=\"off\"\nold_config_status=\"off\"\nold_tls_mode=\"NULL\"\nrandom_num=$((RANDOM % 12 + 4))\n[[ -f \"${xray_qr_config_file}\" ]] && info_extraction_all=$(jq -rc . ${xray_qr_config_file})\n\n[[ ! -d ${log_dir} ]] && mkdir -p ${log_dir}\n[[ ! -f \"${log_dir}/install.log\" ]] && touch ${log_dir}/install.log\nLOG_FILE=\"${log_dir}/install.log\"\nLOG_MAX_SIZE=$((3 * 1024 * 1024))  # 3 MB\nMAX_ARCHIVES=5\n\nlog() {\n    if [ $(stat -c%s \"$LOG_FILE\" 2>/dev/null) -gt $LOG_MAX_SIZE ]; then\n        log_rotate\n    fi\n\n    local message=$(echo -e \"$1\" | sed 's/\\x1B\\[\\([0-9]\\(;[0-9]\\)*\\)*m//g' | tr -d '\\n')\n    echo \"$(date '+%Y-%m-%d %H:%M:%S') - $message\" | tee -a $LOG_FILE >/dev/null\n}\n\nlog_rotate() {\n    local timestamp=$(date +%Y%m%d%H%M%S)\n    local archived_log=\"${LOG_FILE}.${timestamp}.gz\"\n\n    if ! gzip -c \"$LOG_FILE\" > \"$archived_log\"; then\n        log_echo \"${Error} ${RedBG} $(gettext \"日志文件归档失败\") ${Font}\"\n        return 1\n    fi\n\n    if ! :> \"$LOG_FILE\"; then\n        log_echo \"${Error} ${RedBG} $(gettext \"日志文件清空失败\") ${Font}\"\n        return 1\n    fi\n\n    log \"$(gettext \"日志文件已轮转并归档为\") $archived_log\"\n\n    rotate_archives\n}\n\nrotate_archives() {\n    local archives=($(ls ${LOG_FILE}.*.gz 2>/dev/null))\n    while [ ${#archives[@]} -gt $MAX_ARCHIVES ]; do\n        oldest_archive=${archives[0]}\n        rm \"$oldest_archive\"\n        archives=($(ls ${LOG_FILE}.*.gz 2>/dev/null))\n    done\n}\n\nlog_echo() {\n    local message=$(printf \"%b\" \"$@\")\n    echo -e \"$message\"\n    log \"$message\"\n}\n\nsource '/etc/os-release'\n\nVERSION=$(echo \"${VERSION}\" | awk -F \"[()]\" '{print $2}')\n\ncheck_system() {\n    if [[ \"${ID}\" == \"centos\" && ${VERSION_ID} -ge 7 ]]; then\n        log_echo \"${OK} ${GreenBG} $(gettext \"当前系统为\") Centos ${VERSION_ID} ${VERSION} ${Font}\"\n        INS=\"yum\"\n        [[ ! -f \"${xray_qr_config_file}\" ]] && $INS update || true\n    elif [[ \"${ID}\" == \"debian\" && ${VERSION_ID} -ge 8 ]]; then\n        log_echo \"${OK} ${GreenBG} $(gettext \"当前系统为\") Debian ${VERSION_ID} ${VERSION} ${Font}\"\n        INS=\"apt\"\n        [[ ! -f \"${xray_qr_config_file}\" ]] && $INS update || true\n    elif [[ \"${ID}\" == \"ubuntu\" && $(echo \"${VERSION_ID}\" | cut -d '.' -f1) -ge 16 ]]; then\n        log_echo \"${OK} ${GreenBG} $(gettext \"当前系统为\") Ubuntu ${VERSION_ID} ${UBUNTU_CODENAME} ${Font}\"\n        INS=\"apt\"\n        if [[ ! -f \"${xray_qr_config_file}\" ]]; then\n            rm /var/lib/dpkg/lock || true\n            dpkg --configure -a || true\n            rm /var/lib/apt/lists/lock || true\n            rm /var/cache/apt/archives/lock || true\n            $INS update || true\n        fi\n    else\n        log_echo \"${Error} ${RedBG} $(gettext \"当前系统为\") ${ID} ${VERSION_ID} $(gettext \"不在支持的系统列表内, 安装中断\")! ${Font}\"\n        exit 1\n    fi\n}\n\nis_root() {\n    if [[ 0 == $UID ]]; then\n        log_echo \"${OK} ${GreenBG} $(gettext \"当前用户是 root 用户, 开始安装\") ${Font}\"\n    else\n        log_echo \"${Error} ${RedBG} $(gettext \"当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本\")! ${Font}\"\n        exit 1\n    fi\n}\n\ncheck_and_create_user_group() {\n    if ! getent group nogroup > /dev/null; then\n        groupadd nogroup\n    fi\n\n    if ! id nobody > /dev/null 2>&1; then\n        useradd -r -g nogroup -s /sbin/nologin -c \"Unprivileged User\" nobody\n    fi\n}\n\ncheck_language_update() {\n    local lang_code=\"$1\"\n    local local_file=\"${idleleo_dir}/languages/${lang_code}/LC_MESSAGES/xray_install.mo\"\n    local version_file_url=\"https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/languages/${lang_code}/LC_MESSAGES/version\"\n\n    [[ ! -f \"${local_file}\" ]] && return 0\n\n    local remote_version\n    remote_version=$(curl -s \"${version_file_url}\" || echo \"\")\n\n    if [ -z \"$remote_version\" ]; then\n        log_echo \"${Warning} ${YellowBG} $(gettext \"无法获取远程语言文件信息\") ${Font}\"\n        return 1\n    fi\n\n    local local_version\n    local_version=$(cat \"${idleleo_dir}/languages/${lang_code}/LC_MESSAGES/version\" 2>/dev/null || echo \"\")\n\n    [ \"$remote_version\" != \"$local_version\" ]\n}\n\nupdate_language_file() {\n    local lang_code=\"$1\"\n    local mo_file=\"${idleleo_dir}/languages/${lang_code}/LC_MESSAGES/xray_install.mo\"\n    local version_file=\"${idleleo_dir}/languages/${lang_code}/LC_MESSAGES/version\"\n    local github_url=\"https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/languages\"\n\n    mkdir -p \"${idleleo_dir}/languages/${lang_code}/LC_MESSAGES\"\n\n    log_echo \"${Info} ${Green} $(gettext \"正在更新语言文件\")... ${Font}\"\n\n    if ! curl -s -o \"${mo_file}\" \"${github_url}/${lang_code}/LC_MESSAGES/xray_install.mo\"; then\n        log_echo \"${Error} ${RedBG} $(gettext \"语言文件更新失败\") ${Font}\"\n        return 1\n    fi\n\n    if [ ! -s \"${mo_file}\" ]; then\n        log_echo \"${Error} ${RedBG} $(gettext \"语言文件无效\") ${Font}\"\n        rm -f \"${mo_file}\"\n        return 1\n    fi\n\n    if ! curl -s -o \"${version_file}\" \"${github_url}/${lang_code}/LC_MESSAGES/version\"; then\n        log_echo \"${Error} ${RedBG} $(gettext \"版本文件更新失败\") ${Font}\"\n        return 1\n    fi\n\n    find \"${idleleo_dir}/languages\" -type d -exec chmod 755 {} \\;\n    find \"${idleleo_dir}/languages\" -type f -exec chmod 644 {} \\;\n\n    log_echo \"${OK} ${Green} $(gettext \"语言文件更新完成\") ${Font}\"\n}\n\ninit_language() {\n    if ! command -v gettext >/dev/null 2>&1; then\n        log_echo \"${Warning} ${YellowBG} $(gettext \"正在安装\") gettext... ${Font}\"\n        pkg_install \"gettext\"\n        if [ $? -ne 0 ]; then\n            log_echo \"${Error} ${RedBG} gettext $(gettext \"安装失败\"), $(gettext \"将使用默认语言\") ${Font}\"\n            unset LANG\n            unset LC_MESSAGES\n            return 1\n        fi\n    fi\n\n    local gettext_paths=(\n        \"/usr/share/gettext/gettext.sh\"\n        \"/usr/local/share/gettext/gettext.sh\"\n        \"/usr/bin/gettext.sh\"\n        \"/usr/local/bin/gettext.sh\"\n        \"/usr/share/gettext-\"*/gettext.sh\n    )\n\n    local gettext_sh=\"\"\n    for path in \"${gettext_paths[@]}\"; do\n        if [ -f \"$path\" ]; then\n            gettext_sh=\"$path\"\n            break\n        fi\n    done\n\n    if [ -z \"$gettext_sh\" ]; then\n        log_echo \"${Error} ${RedBG} $(gettext \"未找到\") gettext.sh, $(gettext \"将使用默认语言\") ${Font}\"\n        unset LANG\n        unset LC_MESSAGES\n        return 1\n    fi\n\n    [ -d \"${idleleo_dir}/languages\" ] || mkdir \"${idleleo_dir}/languages\"\n    export TEXTDOMAIN=\"xray_install\"\n    export TEXTDOMAINDIR=\"${idleleo_dir}/languages\"\n    . \"$gettext_sh\"\n\n    if [ -f \"${idleleo_dir}/language.conf\" ]; then\n        source \"${idleleo_dir}/language.conf\"\n\n        if [[ \"${LANG%.*}\" != \"zh_CN\" ]]; then\n            local lang_code\n            case \"${LANG%.*}\" in\n                \"en_US\") lang_code=\"en\" ;;\n                \"fa_IR\") lang_code=\"fa\" ;;\n                \"ru_RU\") lang_code=\"ru\" ;;\n                \"ko_KR\") lang_code=\"ko\" ;;\n                \"fr_FR\") lang_code=\"fr\" ;;\n                *)\n                    log_echo \"${Warning} ${YellowBG} $(gettext \"不支持的语言\"):${LANG%.*}, $(gettext \"将使用默认语言\") ${Font}\"\n                    unset LANG\n                    unset LC_MESSAGES\n                    return 0\n                    ;;\n            esac\n\n            local lang_file=\"${TEXTDOMAINDIR}/${lang_code}/LC_MESSAGES/${TEXTDOMAIN}.mo\"\n            if [ ! -f \"$lang_file\" ]; then\n                if ! update_language_file \"$lang_code\"; then\n                    log_echo \"${Warning} ${YellowBG} $(gettext \"语言文件更新失败\"), $(gettext \"将使用默认语言\") ${Font}\"\n                    unset LANG\n                    unset LC_MESSAGES\n                    return 0\n                fi\n            elif check_language_update \"$lang_code\"; then\n                log_echo \"${Info} ${Green} $(gettext \"发现语言文件更新\") ${Font}\"\n                if update_language_file \"$lang_code\"; then\n                    . \"$gettext_sh\"\n                fi\n            fi\n        fi\n    # else\n        # log_echo \"${Info} ${Green} $(gettext \"未找到\") language.conf, $(gettext \"将使用默认语言\") ${Font}\"\n        # unset LANG\n        # unset LC_MESSAGES\n    fi\n}\n\njudge() {\n    if [[ 0 -eq $? ]]; then\n        log_echo \"${OK} ${GreenBG} $1 $(gettext \"完成\") ${Font}\"\n        sleep 0.5\n    else\n        log_echo \"${Error} ${RedBG} $1 $(gettext \"失败\") ${Font}\"\n        exit 1\n    fi\n}\n\ncheck_version() {\n    echo ${get_versions_all} | jq -rc \".$1\"\n    [[ 0 -ne $? ]] && log_echo \"${Error} ${RedBG} $(gettext \"在线版本检测失败, 请稍后再试\")! ${Font}\" && exit 1\n}\n\npkg_install_judge() {\n    if [[ \"${ID}\" == \"centos\" ]]; then\n        yum list installed | grep -iw \"^$1\"\n    else\n        dpkg --get-selections | grep -iw \"^$1\" | grep -ivw \"deinstall\"\n    fi\n}\n\npkg_install() {\n    install_array=(${1//,/ })\n    install_status=1\n    if [[ ${#install_array[@]} -gt 1 ]]; then\n        for install_var in ${install_array[@]}; do\n            if [[ -z $(pkg_install_judge \"${install_var}\") ]]; then\n                ${INS} -y install ${install_var}\n                install_status=0\n            fi\n        done\n        if [[ ${install_status} == 0 ]]; then\n            judge \"$(gettext \"安装\") ${1//,/ }\"\n        else\n            log_echo \"${OK} ${GreenBG} $(gettext \"已安装\") ${1//,/ } ${Font}\"\n            sleep 0.5\n        fi\n    else\n        if [[ -z $(pkg_install_judge \"$1\") ]]; then\n            ${INS} -y install $1\n            judge \"$(gettext \"安装\") $1\"\n        else\n            log_echo \"${OK} ${GreenBG} $(gettext \"已安装\") $1 ${Font}\"\n            sleep 0.5\n        fi\n    fi\n}\n\ndependency_install() {\n    pkg_install \"bc,curl,dbus,git,jq,lsof,python3,qrencode\"\n    if [[ \"${ID}\" == \"centos\" ]]; then\n        pkg_install \"crontabs\"\n    else\n        pkg_install \"cron\"\n    fi\n    if [[ ! -f \"/var/spool/cron/root\" ]] && [[ ! -f \"/var/spool/cron/crontabs/root\" ]]; then\n        if [[ \"${ID}\" == \"centos\" ]]; then\n            touch /var/spool/cron/root && chmod 600 /var/spool/cron/root\n            systemctl start crond && systemctl enable crond >/dev/null 2>&1\n            judge \"crontab $(gettext \"自启动配置\")\"\n        else\n            touch /var/spool/cron/crontabs/root && chmod 600 /var/spool/cron/crontabs/root\n            systemctl start cron && systemctl enable cron >/dev/null 2>&1\n            judge \"crontab $(gettext \"自启动配置\")\"\n        fi\n    fi\n    if [[ ${tls_mode} != \"None\" ]]; then\n        if [[ \"${ID}\" == \"centos\" ]]; then\n            pkg_install \"epel-release,iputils,pcre,pcre-devel,zlib-devel,perl-IPC-Cmd\"\n        else\n            pkg_install \"iputils-ping,libpcre3,libpcre3-dev,zlib1g-dev\"\n        fi\n        judge \"Nginx $(gettext \"链接库安装\")\"\n    fi\n}\n\nread_optimize() {\n    local prompt=\"$1\" var_name=\"$2\" default_value=\"${3:-NULL}\" min_value=\"${4:-}\" max_value=\"${5:-}\" error_msg=\"${6:-$(gettext \"值为空或超出范围, 请重新输入\")!}\"\n    local user_input\n\n    read -rp \"$prompt\" user_input\n\n    if [[ -z $user_input ]]; then\n        if [[ $default_value != \"NULL\" ]]; then\n            user_input=$default_value\n        else\n            log_echo \"${Error} ${RedBG} $(gettext \"值为空, 请重新输入\")! ${Font}\"\n            read_optimize \"$prompt\" \"$var_name\" \"$default_value\" \"$min_value\" \"$max_value\" \"$error_msg\"\n            return\n        fi\n    fi\n\n    printf -v \"$var_name\" \"%s\" \"$user_input\"\n\n    if [[ -n $min_value ]] && [[ -n $max_value ]]; then\n        if (( user_input < min_value )) || (( user_input > max_value )); then\n            log_echo \"${Error} ${RedBG} $error_msg ${Font}\"\n            read_optimize \"$prompt\" \"$var_name\" \"$default_value\" \"$min_value\" \"$max_value\" \"$error_msg\"\n            return\n        fi\n    fi\n}\n\nbasic_optimization() {\n    sed -i '/^\\*\\ *soft\\ *nofile\\ *[[:digit:]]*/d' /etc/security/limits.conf\n    sed -i '/^\\*\\ *hard\\ *nofile\\ *[[:digit:]]*/d' /etc/security/limits.conf\n    echo '* soft nofile 65536' >>/etc/security/limits.conf\n    echo '* hard nofile 65536' >>/etc/security/limits.conf\n\n    if [[ \"${ID}\" == \"centos\" ]]; then\n        sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config\n        setenforce 0\n    fi\n\n}\n\ncreate_directory() {\n    if [[ ${tls_mode} != \"None\" ]]; then\n        [[ ! -d \"${nginx_conf_dir}\" ]] && mkdir -p ${nginx_conf_dir}\n    fi\n    [[ ! -d \"${ssl_chainpath}\" ]] && mkdir -p ${ssl_chainpath}\n    [[ ! -d \"${xray_conf_dir}\" ]] && mkdir -p ${xray_conf_dir}\n    [[ ! -d \"${idleleo_dir}/info\" ]] && mkdir -p ${idleleo_dir}/info\n}\n\nport_set() {\n    if [[ \"on\" != ${old_config_status} ]]; then\n        echo\n        log_echo \"${GreenBG} $(gettext \"确定端口\") ${Font}\"\n        read_optimize \"$(gettext \"请输入端口\") ($(gettext \"默认值\"):443):\" \"port\" 443 0 65535 \"$(gettext \"请输入 0-65535 之间的值\")!\"\n        if [[ ${port} -eq 9443 || ${port} -eq 9403 ]] && [[ ${tls_mode} == \"Reality\" ]]; then\n            echo -e \"${Error} ${RedBG} $(gettext \"端口不允许使用, 请重新输入\")! ${Font}\"\n            read_optimize \"$(gettext \"请输入端口\") ($(gettext \"默认值\"):443):\" \"port\" 443 0 65535 \"$(gettext \"请输入 0-65535 之间的值\")!\"\n        fi\n    fi\n}\n\nws_grpc_choose() {\n    if [[ \"on\" != ${old_config_status} ]]; then\n        echo\n        log_echo \"${GreenBG} $(gettext \"请选择安装协议\") ws/gRPC ${Font}\"\n        echo -e \"${Red}1${Font}: ws ($(gettext \"默认\"))\"\n        echo \"2: gRPC\"\n        echo \"3: ws+gRPC\"\n        local choose_network\n        read_optimize \"$(gettext \"请输入\"): \" \"choose_network\" 1 1 3 \"$(gettext \"请输入有效的数字\")!\"\n        if [[ $choose_network == 2 ]]; then\n            [[ ${shell_mode} == \"Nginx+ws+TLS\" ]] && shell_mode=\"Nginx+gRPC+TLS\"\n            [[ ${shell_mode} == \"Reality\" ]] && shell_mode=\"Reality+gRPC\"\n            [[ ${shell_mode} == \"ws ONLY\" ]] && shell_mode=\"gRPC ONLY\"\n            ws_grpc_mode=\"onlygRPC\"\n        elif [[ $choose_network == 3 ]]; then\n            [[ ${shell_mode} == \"Nginx+ws+TLS\" ]] && shell_mode=\"Nginx+ws+gRPC+TLS\"\n            [[ ${shell_mode} == \"Reality\" ]] && shell_mode=\"Reality+ws+gRPC\"\n            [[ ${shell_mode} == \"ws ONLY\" ]] && shell_mode=\"ws+gRPC ONLY\"\n            ws_grpc_mode=\"all\"\n        else\n            [[ ${shell_mode} == \"Reality\" ]] && shell_mode=\"Reality+ws\"\n            ws_grpc_mode=\"onlyws\"\n        fi\n    fi\n}\n\nxray_reality_add_more_choose() {\n    if [[ \"on\" != ${old_config_status} ]]; then\n        echo\n        log_echo \"${GreenBG} $(gettext \"是否添加简单 ws/gRPC 协议 用于负载均衡\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n        echo -e \"${Warning} ${YellowBG} $(gettext \"如不清楚具体用途, 请勿选择\")! ${Font}\"\n        read -r reality_add_more_fq\n        case $reality_add_more_fq in\n        [yY][eE][sS] | [yY])\n            reality_add_more=\"on\"\n            ws_grpc_choose\n            ws_inbound_port_set\n            grpc_inbound_port_set\n            ws_path_set\n            grpc_path_set\n            port_exist_check \"${xport}\"\n            port_exist_check \"${gport}\"\n            ;;\n        *)\n            reality_add_more=\"off\"\n            ws_grpc_mode=\"None\"\n            ws_inbound_port_set\n            grpc_inbound_port_set\n            ws_path_set\n            grpc_path_set\n            log_echo \"${OK} ${GreenBG} $(gettext \"已跳过添加简单 ws/gRPC 协议\") ${Font}\"\n            ;;\n        esac\n    fi\n}\n\nws_grpc_qr() {\n    artpath=\"None\"\n    artxport=\"None\"\n    artserviceName=\"None\"\n    artgport=\"None\"\n    if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n        artxport=${xport}\n        artpath=${path}\n    elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n        artgport=${gport}\n        artserviceName=${serviceName}\n    elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n        artxport=${xport}\n        artpath=${path}\n        artgport=${gport}\n        artserviceName=${serviceName}\n    fi\n}\n\nws_inbound_port_set() {\n    if [[ \"on\" != ${old_config_status} ]]; then\n        if [[ ${ws_grpc_mode} == \"onlyws\" || ${ws_grpc_mode} == \"all\" ]] || [[ ${reality_add_more} == \"on\" ]]; then\n            echo\n            log_echo \"${GreenBG} $(gettext \"是否需要自定义\") ws inbound_port [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n            read -r inbound_port_modify_fq\n            case $inbound_port_modify_fq in\n            [yY][eE][sS] | [yY])\n                read_optimize \"$(gettext \"请输入\") ws inbound_port ($(gettext \"请勿与其他端口相同\")!): \" \"xport\" \"NULL\" 0 65535 \"$(gettext \"请输入 0-65535 之间的值\")!\"\n                log_echo \"${Green} ws inbound_port: ${xport} ${Font}\"\n                ;;\n            *)\n                xport=$((RANDOM % 1000 + 10000))\n                log_echo \"${Green} ws inbound_port: ${xport} ${Font}\"\n                ;;\n            esac\n        else\n            xport=$((RANDOM % 1000 + 20000))\n        fi\n    fi\n}\n\ngrpc_inbound_port_set() {\n    if [[ \"on\" != ${old_config_status} ]]; then\n        if [[ ${ws_grpc_mode} == \"onlygRPC\" || ${ws_grpc_mode} == \"all\" ]] || [[ ${reality_add_more} == \"on\" ]]; then\n            echo\n            log_echo \"${GreenBG} $(gettext \"是否需要自定义\") gRPC inbound_port [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n            read -r inbound_port_modify_fq\n            case $inbound_port_modify_fq in\n            [yY][eE][sS] | [yY])\n                read_optimize \"$(gettext \"请输入\") gRPC inbound_port ($(gettext \"请勿与其他端口相同\")!): \" \"gport\" \"NULL\" 0 65535 \"$(gettext \"请输入 0-65535 之间的值\")!\"\n                log_echo \"${Green} gRPC inbound_port: ${gport} ${Font}\"\n                ;;\n            *)\n                gport=$((RANDOM % 1000 + 10000))\n                while [[ ${gport} == ${xport} ]]; do gport=$((RANDOM % 1000 + 10000)); done\n                log_echo \"${Green} gRPC inbound_port: ${gport} ${Font}\"\n                ;;\n            esac\n        else\n            gport=$((RANDOM % 1000 + 30000))\n        fi\n    fi\n}\n\nfirewall_set() {\n    echo\n    log_echo \"${GreenBG} $(gettext \"是否需要设置防火墙\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n    read -r firewall_set_fq\n    case $firewall_set_fq in\n    [yY][eE][sS] | [yY])\n        if [[ \"${ID}\" == \"centos\" ]]; then\n            pkg_install \"iptables-services\"\n        else\n            pkg_install \"iptables-persistent\"\n        fi\n        iptables -A INPUT -i lo -j ACCEPT\n        iptables -A OUTPUT -o lo -j ACCEPT\n        if [[ ${tls_mode} == \"TLS\" || ${tls_mode} == \"XTLS\" ]]; then\n            iptables -I INPUT -p tcp -m multiport --dport 53,80,${port} -j ACCEPT\n            iptables -I INPUT -p udp -m multiport --dport 53,80,${port} -j ACCEPT\n            iptables -I OUTPUT -p tcp -m multiport --sport 53,80,${port} -j ACCEPT\n            iptables -I OUTPUT -p udp -m multiport --sport 53,80,${port} -j ACCEPT\n            iptables -I INPUT -p udp --dport 1024:65535 -j ACCEPT\n        fi\n        if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n            iptables -I INPUT -p tcp -m multiport --dport 53,${xport} -j ACCEPT\n            iptables -I INPUT -p udp -m multiport --dport 53,${xport} -j ACCEPT\n            iptables -I OUTPUT -p tcp -m multiport --sport 53,${xport} -j ACCEPT\n            iptables -I OUTPUT -p udp -m multiport --sport 53,${xport} -j ACCEPT\n            iptables -I INPUT -p udp --dport 1024:65535 -j ACCEPT\n        elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n            iptables -I INPUT -p tcp -m multiport --dport 53,${gport} -j ACCEPT\n            iptables -I INPUT -p udp -m multiport --dport 53,${gport} -j ACCEPT\n            iptables -I OUTPUT -p tcp -m multiport --sport 53,${gport} -j ACCEPT\n            iptables -I OUTPUT -p udp -m multiport --sport 53,${gport} -j ACCEPT\n            iptables -I INPUT -p udp --dport 1024:65535 -j ACCEPT\n        elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n            iptables -I INPUT -p tcp -m multiport --dport 53,${xport},${gport} -j ACCEPT\n            iptables -I INPUT -p udp -m multiport --dport 53,${xport},${gport} -j ACCEPT\n            iptables -I OUTPUT -p tcp -m multiport --sport 53,${xport},${gport} -j ACCEPT\n            iptables -I OUTPUT -p udp -m multiport --sport 53,${xport},${gport} -j ACCEPT\n            iptables -I INPUT -p udp --dport 1024:65535 -j ACCEPT\n        fi\n        if [[ \"${ID}\" == \"centos\" && ${VERSION_ID} -ge 7 ]]; then\n            service iptables save\n            service iptables restart\n            log_echo \"${OK} ${GreenBG} $(gettext \"防火墙\") $(gettext \"重启\") ${Font}\"\n        else\n            netfilter-persistent save\n            systemctl restart iptables\n            log_echo \"${OK} ${GreenBG} $(gettext \"防火墙\") $(gettext \"重启\") ${Font}\"\n        fi\n        log_echo \"${OK} ${GreenBG} $(gettext \"开放防火墙相关端口\") ${Font}\"\n        log_echo \"${GreenBG} $(gettext \"若修改配置, 请注意关闭防火墙相关端口\") ${Font}\"\n        log_echo \"${OK} ${GreenBG} $(gettext \"配置\") Xray FullCone ${Font}\"\n        ;;\n    *)\n        log_echo \"${OK} ${GreenBG} $(gettext \"跳过防火墙设置\") ${Font}\"\n        ;;\n    esac\n}\n\nws_path_set() {\n    if [[ \"on\" != ${old_config_status} ]] || [[ ${change_ws_path} == \"yes\" ]]; then\n        if [[ ${ws_grpc_mode} == \"onlyws\" || ${ws_grpc_mode} == \"all\" ]] || [[ ${reality_add_more} == \"on\" ]]; then\n            echo\n            log_echo \"${GreenBG} $(gettext \"是否需要自定义\") ws $(gettext \"伪装路径\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n            read -r path_modify_fq\n            case $path_modify_fq in\n            [yY][eE][sS] | [yY])\n                read_optimize \"$(gettext \"请输入\") ws $(gettext \"伪装路径\") ($(gettext \"不需要\")\"/\":)\" \"path\" \"NULL\"\n                log_echo \"${Green} ws $(gettext \"伪装路径\"): ${path} ${Font}\"\n                ;;\n            *)\n                path=\"$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})\"\n                log_echo \"${Green} ws $(gettext \"伪装路径\"): ${path} ${Font}\"\n                ;;\n            esac\n        else\n            path=\"$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})\"\n        fi\n    elif [[ ${ws_grpc_mode} == \"onlyws\" ]] || [[ ${ws_grpc_mode} == \"all\" ]]; then\n        echo\n        log_echo \"${GreenBG} $(gettext \"是否需要自定义\") ws $(gettext \"伪装路径\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n        read -r change_ws_path_fq\n        case $change_ws_path_fq in\n        [yY][eE][sS] | [yY])\n            change_ws_path=\"yes\"\n            ws_path_set\n            ;;\n        *) ;;\n        esac\n    fi\n}\n\ngrpc_path_set() {\n    if [[ \"on\" != ${old_config_status} ]] || [[ ${change_grpc_path} == \"yes\" ]]; then\n        if [[ ${ws_grpc_mode} == \"onlygRPC\" || ${ws_grpc_mode} == \"all\" ]] || [[ ${reality_add_more} == \"on\" ]]; then\n            echo\n            log_echo \"${GreenBG} $(gettext \"是否需要自定义\") gRPC $(gettext \"伪装路径\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n            read -r path_modify_fq\n            case $path_modify_fq in\n            [yY][eE][sS] | [yY])\n                read_optimize \"$(gettext \"请输入\") gRPC $(gettext \"伪装路径\") ($(gettext \"不需要\")\"/\":)\" \"serviceName\" \"NULL\"\n                log_echo \"${Green} gRPC $(gettext \"伪装路径\"): ${serviceName} ${Font}\"\n                ;;\n            *)\n                serviceName=\"$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})\"\n                log_echo \"${Green} gRPC $(gettext \"伪装路径\"): ${serviceName} ${Font}\"\n                ;;\n            esac\n        else\n            serviceName=\"$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})\"\n        fi\n    elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]] || [[ ${ws_grpc_mode} == \"all\" ]]; then\n        echo\n        log_echo \"${GreenBG} $(gettext \"是否需要自定义\") gRPC $(gettext \"伪装路径\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n        read -r change_grpc_path_fq\n        case $change_grpc_path_fq in\n        [yY][eE][sS] | [yY])\n            change_grpc_path=\"yes\"\n            grpc_path_set\n            ;;\n        *) ;;\n        esac\n    fi\n}\n\nemail_set() {\n    if [[ \"on\" != ${old_config_status} ]]; then\n        echo\n        log_echo \"${GreenBG} $(gettext \"是否需要自定义\") Xray $(gettext \"用户名\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n        read -r custom_email_fq\n        case $custom_email_fq in\n        [yY][eE][sS] | [yY])\n            read_optimize \"$(gettext \"请输入正确的 email\") (e.g. me@hey.run): \" \"custom_email\" \"NULL\"\n            ;;\n        *)\n            custom_email=\"$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})@hey.run\"\n            ;;\n        esac\n        log_echo \"${Green} Xray $(gettext \"用户名\") (email): ${custom_email} ${Font}\"\n    fi\n}\n\nUUID_set() {\n    if [[ \"on\" != ${old_config_status} ]]; then\n        echo\n        log_echo \"${GreenBG} $(gettext \"是否需要自定义字符串映射\") (UUIDv5) [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n        read -r need_UUID5\n        case $need_UUID5 in\n        [yY][eE][sS] | [yY])\n            read_optimize \"$(gettext \"请输入自定义字符串\") ($(gettext \"最多30字符\")):\" \"UUID5_char\" \"NULL\"\n            UUID=\"$(UUIDv5_tranc ${UUID5_char})\"\n            log_echo \"${Green} $(gettext \"自定义字符串\"): ${UUID5_char} ${Font}\"\n            log_echo \"${Green} UUIDv5: ${UUID} ${Font}\"\n            echo\n            ;;\n        *)\n            UUID5_char=\"$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})\"\n            UUID=\"$(UUIDv5_tranc ${UUID5_char})\"\n            log_echo \"${Green} UUID $(gettext \"映射字符串\"): ${UUID5_char} ${Font}\"\n            log_echo \"${Green} UUID: ${UUID} ${Font}\"\n            echo\n            ;;\n        esac\n    fi\n}\n\ntarget_set() {\n    if [[ \"on\" == ${old_config_status} ]] && [[ -n $(info_extraction target) ]]; then\n        echo\n        log_echo \"${GreenBG} $(gettext \"检测到 target 域名已配置, 是否保留\") [${Red}Y${Font}${GreenBG}/N]? ${Font}\"\n            read -r old_host_fq\n            case $old_host_fq in\n            [nN][oO] | [nN])\n                target_reset=1\n                nginx_reality_serverNames_del\n                ;;\n            *)\n                target_reset=0\n                ;;\n            esac\n    fi\n    if [[ ${target_reset} == 1 ]] || [[ \"on\" != ${old_config_status} ]]; then\n        local domain\n        local output\n        local curl_output\n        pkg_install \"nmap\"\n\n        while true; do\n            echo\n            log_echo \"${GreenBG} $(gettext \"请输入一个域名\") (e.g. bing.com)${Font}\"\n            log_echo \"${Green}$(gettext \"域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用\")${Font}\"\n            read_optimize \"$(gettext \"确认域名符合要求后请输入\"): \" \"domain\" \"NULL\"\n            log_echo \"${Green}$(gettext \"正在检测域名请等待\")...${Font}\"\n\n            output=$(nmap --script ssl-enum-ciphers -p 443 \"${domain}\")\n            curl_output=$(curl -I -k -m 5 \"https://${domain}\" 2>&1)\n\n            # 检测TLSv1.3支持\n            if ! echo \"$output\" | grep -q \"TLSv1.3\"; then\n                log_echo \"${Warning} ${YellowBG} $(gettext \"该域名不支持\") TLSv1.3 ${YellowBG}${Font}\"\n            fi\n\n            # 检测X25519支持\n            if ! echo \"$output\" | grep -q \"x25519\"; then\n                log_echo \"${Warning} ${YellowBG} $(gettext \"该域名不支持\") X25519 ${YellowBG}${Font}\"\n            fi\n\n            # 检测HTTP/2支持\n            if ! echo \"$curl_output\" | grep -q \"HTTP/2\"; then\n                log_echo \"${Warning} ${YellowBG} $(gettext \"该域名不支持\") HTTP/2 ${YellowBG}${Font}\"\n            fi\n\n            # 检测是否跳转\n            if echo \"$curl_output\" | grep -i -q 'location:'; then\n                log_echo \"${Warning} ${YellowBG} $(gettext \"该域名发生了跳转\") ${YellowBG}${Font}\"\n            fi\n\n            if ! echo \"$output\" | grep -q \"TLSv1.3\" || \\\n               ! echo \"$output\" | grep -q \"x25519\" || \\\n               ! echo \"$curl_output\" | grep -q \"HTTP/2\" || \\\n               echo \"$curl_output\" | grep -i -q 'location:'; then\n                log_echo \"${Warning} ${YellowBG} $(gettext \"该域名可能不满足所有要求\") ${YellowBG}${Font}\"\n                log_echo \"${GreenBG} $(gettext \"是否仍要设置此域名\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n                read -r force_set_fq\n                case $force_set_fq in\n                    [yY][eE][sS] | [yY])\n                        target=$domain\n                        break\n                        ;;\n                    *)\n                        continue\n                        ;;\n                esac\n            else\n                log_echo \"${OK} ${GreenBG} $(gettext \"域名\") ${domain} $(gettext \"满足所有要求\") ${Font}\"\n                target=$domain\n                break\n            fi\n        done\n        log_echo \"${Green} target $(gettext \"域名\"): ${target} ${Font}\"\n    fi\n}\n\nserverNames_set() {\n    if [[ ${target_reset} == 1 ]] || [[ \"on\" != ${old_config_status} ]]; then\n        local custom_serverNames_fq\n        echo\n        log_echo \"${GreenBG} $(gettext \"是否需要自定义\") ${target} $(gettext \"域名的\") serverNames [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n        echo -e \"${Green} $(gettext \"默认为\") ${target} $(gettext \"域名本身\")${Font}\"\n        echo -e \"${Warning} ${YellowBG} $(gettext \"如不清楚具体用途, 请勿继续\")! ${Font}\"\n        read -r custom_serverNames_fq\n        case $custom_serverNames_fq in\n        [yY][eE][sS] | [yY])\n            read_optimize \"$(gettext \"请输入\"): \" \"serverNames\" \"NULL\"\n            ;;\n        *)\n            serverNames=$target\n            ;;\n        esac\n        log_echo \"${Green} serverNames: ${serverNames} ${Font}\"\n        echo\n    fi\n}\n\nkeys_set() {\n    if [[ \"on\" != ${old_config_status} ]]; then\n        local keys custom_keys_fq\n        echo\n        log_echo \"${GreenBG} $(gettext \"是否需要自定义\") privateKey [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n        read -r custom_keys_fq\n        case $custom_keys_fq in\n        [yY][eE][sS] | [yY])\n            read_optimize \"$(gettext \"请输入\") privateKey:\" \"privateKey\" \"NULL\"\n            keys=$(${xray_bin_dir}/xray x25519 -i \"${privateKey}\" | tr '\\n' ' ')\n            ## 兼容之前的xray版本，一个大版本后删除 from: 2.8.9\n            if echo \"${keys}\" | grep -q \"Password (PublicKey): \"; then\n                password=$(echo \"${keys}\" | sed 's/.*Password (PublicKey): //' | awk '{print $1}')\n            elif echo \"${keys}\" | grep -q \"Password: \"; then\n                password=$(echo \"${keys}\" | awk -F\"Password: \" '{print $2}' | awk '{print $1}')\n            elif echo \"${keys}\" | grep -q \"PublicKey: \"; then\n                password=$(echo \"${keys}\" | awk -F\"PublicKey: \" '{print $2}' | awk '{print $1}')\n            fi\n            ## 兼容结束\n            ;;\n        *)\n            keys=$(${xray_bin_dir}/xray x25519 | tr '\\n' ' ')\n            privateKey=$(echo \"${keys}\" | awk -F\"PrivateKey: \" '{print $2}' | awk '{print $1}')\n            ## 兼容之前的xray版本，一个大版本后删除  from: 2.8.9\n            if echo \"${keys}\" | grep -q \"Password (PublicKey): \"; then\n                password=$(echo \"${keys}\" | sed 's/.*Password (PublicKey): //' | awk '{print $1}')\n            elif echo \"${keys}\" | grep -q \"Password: \"; then\n                password=$(echo \"${keys}\" | awk -F\"Password: \" '{print $2}' | awk '{print $1}')\n            elif echo \"${keys}\" | grep -q \"PublicKey: \"; then\n                password=$(echo \"${keys}\" | awk -F\"PublicKey: \" '{print $2}' | awk '{print $1}')\n            fi\n            ## 兼容结束\n            ;;\n        esac\n        log_echo \"${Green} privateKey: ${privateKey} ${Font}\"\n        log_echo \"${Green} Password: ${password} ${Font}\"\n        echo\n    fi\n}\n\n\nshortIds_set() {\n    if [[ \"on\" != ${old_config_status} ]]; then\n        local custom_shortids_fq\n        echo\n        log_echo \"${GreenBG} $(gettext \"是否需要自定义\") shortIds [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n        read -r custom_shortids_fq\n        case $custom_shortids_fq in\n        [yY][eE][sS] | [yY])\n            read_optimize \"$(gettext \"请输入\") shortIds:\" \"shortIds\" \"NULL\"\n            ;;\n        *)\n            pkg_install \"openssl\"\n            shortIds=$(openssl rand -hex 8)\n            ;;\n        esac\n        log_echo \"${Green} shortIds: ${shortIds} ${Font}\"\n        echo\n    fi\n}\n\nensure_file_manager() {\n    local fm_remote_url=\"https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/file_manager.sh\"\n    local fm_local_path=\"${idleleo_dir}/file_manager.sh\"\n\n    if [[ ! -f \"${fm_local_path}\" ]]; then\n        log_echo \"${Info} ${Green} $(gettext \"本地文件 file_manager.sh 不存在, 正在下载\")... ${Font}\"\n        if ! curl -sL \"$fm_remote_url\" -o \"$fm_local_path\"; then\n            log_echo \"${Error} ${RedBG} $(gettext \"下载失败, 请手动下载并安装新版本\") ${Font}\"\n            return 1\n        fi\n        chmod +x \"$fm_local_path\"\n    fi\n    return 0\n}\n\n\nnginx_upstream_server_set() {\n    echo\n    log_echo \"${GreenBG} $(gettext \"是否变更\") Nginx $(gettext \"负载均衡\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n    echo -e \"${Warning} ${YellowBG} $(gettext \"如不清楚具体用途, 请勿继续\")! ${Font}\"\n    read -r nginx_upstream_server_fq\n    case $nginx_upstream_server_fq in\n    [yY][eE][sS] | [yY])\n        if [[ ${tls_mode} == \"TLS\" ]]; then\n            echo -e \"\\n${GreenBG} $(gettext \"请选择协议为 ws 或 gRPC\") ${Font}\"\n            echo \"1: ws\"\n            echo \"2: gRPC\"\n            echo \"3: $(gettext \"返回\")\"\n            local upstream_choose\n            read_optimize \"$(gettext \"请输入\"): \" \"upstream_choose\" \"NULL\" 1 3 \"$(gettext \"请输入有效的数字\")!\"\n\n            if ensure_file_manager; then\n                case $upstream_choose in\n                1) source \"${idleleo_dir}/file_manager.sh\" wsServers ${nginx_conf_dir} ;;\n                2) source \"${idleleo_dir}/file_manager.sh\" grpcServers ${nginx_conf_dir} ;;\n                3) ;;\n                *)\n                    log_echo \"${Error} ${RedBG} $(gettext \"无效选项, 请重试\")! ${Font}\"\n                    nginx_upstream_server_set\n                    ;;\n                esac\n            fi\n        elif [[ ${tls_mode} == \"Reality\" ]] && [[ ${reality_add_balance} == \"on\" ]] && [[ ${reality_add_nginx} == \"on\" ]]; then\n            if ensure_file_manager; then\n                source \"${idleleo_dir}/file_manager.sh\" realityServers ${nginx_conf_dir}\n            fi\n        else\n            log_echo \"${Error} ${RedBG} $(gettext \"当前模式不支持此操作\")! ${Font}\"\n            return 1\n        fi\n        ;;\n    *) ;;\n    esac\n}\n\nnginx_servernames_server_set() {\n    if [[ ${tls_mode} == \"Reality\" ]] && [[ ${reality_add_nginx} == \"on\" ]]; then\n        echo\n        log_echo \"${GreenBG} $(gettext \"是否变更\") Nginx serverNames [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n        echo -e \"${Warning} ${YellowBG} $(gettext \"如不清楚具体用途, 请勿继续\")! ${Font}\"\n        echo -e \"${Info} ${GreenBG} $(gettext \"配置用途可以参考文章\"): https://hey.run/archives/use-reality ${Font}\"\n        read -r nginx_servernames_server_fq\n        case $nginx_servernames_server_fq in\n        [yY][eE][sS] | [yY])\n            if ensure_file_manager; then\n                source \"${idleleo_dir}/file_manager.sh\" serverNames ${nginx_conf_dir}\n            fi\n        ;;\n        *) ;;\n        esac\n    else\n        log_echo \"${Error} ${RedBG} $(gettext \"当前模式不支持此操作\")! ${Font}\"\n    fi\n}\n\nUUIDv5_tranc() {\n    [[ $# = 0 ]] && return\n    python3 -c \"import uuid,sys;UUID_NAMESPACE=uuid.UUID('00000000-0000-0000-0000-000000000000');print(uuid.uuid5(UUID_NAMESPACE,sys.argv[1]))\" \"$1\"\n}\n\nmodify_listen_address() {\n    local modifynum modifynum2\n    if [[ ${tls_mode} == \"Reality\" ]]; then\n        modifynum=1\n        modifynum2=2\n    elif [[ ${tls_mode} == \"XTLS\" ]]; then\n        jq '.inbounds[0].listen = \"0.0.0.0\"' \"${xray_conf}\" > \"${xray_conf}.tmp\"\n        judge \"Xray listen address $(gettext \"修改\")\"\n        mv \"${xray_conf}.tmp\" \"${xray_conf}\"\n        return\n    else\n        modifynum=0\n        modifynum2=1\n    fi\n\n    if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n        jq --argjson modifynum \"$modifynum\" \\\n           '.inbounds[$modifynum].listen = \"0.0.0.0\"' \"${xray_conf}\" > \"${xray_conf}.tmp\"\n        judge \"Xray listen address $(gettext \"修改\")\"\n    elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n        jq --argjson modifynum2 \"$modifynum2\" \\\n           '.inbounds[$modifynum2].listen = \"0.0.0.0\"' \"${xray_conf}\" > \"${xray_conf}.tmp\"\n        judge \"Xray listen address $(gettext \"修改\")\"\n    elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n        jq --argjson modifynum \"$modifynum\" --argjson modifynum2 \"$modifynum2\" \\\n           '.inbounds[$modifynum].listen = \"0.0.0.0\" | .inbounds[$modifynum2].listen = \"0.0.0.0\"' \"${xray_conf}\" > \"${xray_conf}.tmp\"\n        judge \"Xray listen address $(gettext \"修改\")\"\n    fi\n    mv \"${xray_conf}.tmp\" \"${xray_conf}\"\n}\n\nmodify_inbound_port() {\n    if [[ ${tls_mode} == \"Reality\" ]]; then\n        if [[ ${reality_add_nginx} == \"off\" ]]; then\n            jq --argjson port \"${port}\" --argjson xport \"${xport}\" --argjson gport \"${gport}\" \\\n               '.inbounds[0].port = $port |\n                .inbounds[1].port = $xport |\n                .inbounds[2].port = $gport' \"${xray_conf}\" > \"${xray_conf}.tmp\"\n            judge \"Xray inbound port $(gettext \"修改\")\"\n        else\n            jq --argjson xport \"${xport}\" --argjson gport \"${gport}\" \\\n               '.inbounds[1].port = $xport |\n                .inbounds[2].port = $gport' \"${xray_conf}\" > \"${xray_conf}.tmp\"\n            judge \"Xray inbound port $(gettext \"修改\")\"\n        fi\n    elif [[ ${tls_mode} == \"XTLS\" ]]; then\n        jq --argjson port \"${port}\" '.inbounds[0].port = $port' \"${xray_conf}\" > \"${xray_conf}.tmp\"\n        judge \"Xray inbound port $(gettext \"修改\")\"\n    else\n        jq --argjson xport \"${xport}\" --argjson gport \"${gport}\" \\\n           '.inbounds[0].port = $xport |\n            .inbounds[1].port = $gport' \"${xray_conf}\" > \"${xray_conf}.tmp\"\n        judge \"Xray inbound port $(gettext \"修改\")\"\n    fi\n    mv \"${xray_conf}.tmp\" \"${xray_conf}\"\n}\n\nmodify_nginx_origin_conf() {\n    sed -i \"s/worker_processes  1;/worker_processes  auto;/\" ${nginx_dir}/conf/nginx.conf\n    sed -i \"s/^\\( *\\)worker_connections  1024;.*/\\1worker_connections  4096;/\" ${nginx_dir}/conf/nginx.conf\n    if [[ ${tls_mode} == \"TLS\" ]]; then\n        sed -i \"\\$i include ${nginx_conf_dir}/*.conf;\" ${nginx_dir}/conf/nginx.conf\n    elif [[ ${tls_mode} == \"Reality\" ]] && [[ ${reality_add_nginx} == \"on\" ]]; then\n        sed -i \"\\$a include ${nginx_conf_dir}/*.conf;\" ${nginx_dir}/conf/nginx.conf\n    fi\n    sed -i \"/http\\( *\\){/a \\\\\\tserver_tokens off;\" ${nginx_dir}/conf/nginx.conf\n    sed -i \"/error_page.*504/i \\\\\\t\\\\tif (\\$host = '${local_ip}') {\\\\n\\\\t\\\\t\\\\treturn 403;\\\\n\\\\t\\\\t}\" ${nginx_dir}/conf/nginx.conf\n}\n\nmodify_nginx_port() {\n    if [[ ${tls_mode} == \"Reality\" ]] && [[ ${reality_add_nginx} == \"on\" ]]; then\n        sed -i \"s/^\\( *\\)listen.*so_keepalive=on.*/\\1listen ${port} reuseport so_keepalive=on backlog=65535;/\" ${nginx_conf}\n        judge \"Nginx port $(gettext \"修改\")\"\n    elif [[ ${tls_mode} == \"TLS\" ]]; then\n        sed -i \"2s/^\\( *\\).*ssl reuseport;$/\\1listen ${port} ssl reuseport;/\" ${nginx_conf}\n        sed -i \"3s/^\\( *\\).*ssl reuseport;$/\\1listen [::]:${port} ssl reuseport;/\" ${nginx_conf}\n        sed -i \"4s/^\\( *\\).*quic reuseport;$/\\1listen ${port} quic reuseport;/\" ${nginx_conf}\n        sed -i \"5s/^\\( *\\).*quic reuseport;$/\\1listen [::]:${port} quic reuseport;/\" ${nginx_conf}\n        judge \"Xray port $(gettext \"修改\")\"\n    fi\n    [[ \"on\" != ${old_config_status} ]] && log_echo \"${Green} $(gettext \"端口\"): ${port} ${Font}\"\n}\n\nmodify_nginx_ssl_other() {\n    if [[ -f \"${nginx_dir}/conf/nginx.conf\" ]] && [[ $(grep -c \"server_tokens off;\" ${nginx_dir}/conf/nginx.conf) -eq '0' ]] && [[ ${save_originconf} != \"Yes\" ]]; then\n        modify_nginx_origin_conf\n    fi\n    sed -i \"s/^\\( *\\)server_name\\( *\\).*/\\1server_name\\2${domain};/g\" ${nginx_ssl_conf}\n    sed -i \"s/^\\( *\\)return 301.*/\\1return 301 https:\\/\\/${domain}\\$request_uri;/\" ${nginx_ssl_conf}\n}\n\nmodify_nginx_other() {\n    if [[ -f \"${nginx_dir}/conf/nginx.conf\" ]] && [[ $(grep -c \"server_tokens off;\" ${nginx_dir}/conf/nginx.conf) -eq '0' ]] && [[ ${save_originconf} != \"Yes\" ]]; then\n        modify_nginx_origin_conf\n    fi\n    if [[ ${tls_mode} == \"TLS\" ]]; then\n        sed -i \"s/^\\( *\\)server_name\\( *\\).*/\\1server_name\\2${domain};/g\" ${nginx_conf}\n        sed -i \"s/^\\( *\\)location ws$/\\1location \\/${path}/\" ${nginx_conf}\n        sed -i \"s/^\\( *\\)location grpc$/\\1location \\/${serviceName}/\" ${nginx_conf}\n        sed -i \"s/^\\( *\\)return 301.*/\\1return 301 https:\\/\\/${domain}\\$request_uri;/\" ${nginx_conf}\n        if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n            sed -i \"s/^\\( *\\)#proxy_pass\\(.*\\)/\\1proxy_pass\\2/\" ${nginx_conf}\n            sed -i \"s/^\\( *\\)#proxy_redirect default;/\\1proxy_redirect default;/\" ${nginx_conf}\n        elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n            sed -i \"s/^\\( *\\)#grpc_pass\\(.*\\)/\\1grpc_pass\\2/\" ${nginx_conf}\n        elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n            sed -i \"s/^\\( *\\)#proxy_pass\\(.*\\)/\\1proxy_pass\\2/\" ${nginx_conf}\n            sed -i \"s/^\\( *\\)#proxy_redirect default;/\\1proxy_redirect default;/\" ${nginx_conf}\n            sed -i \"s/^\\( *\\)#grpc_pass\\(.*\\)/\\1grpc_pass\\2/\" ${nginx_conf}\n        fi\n    fi\n}\n\nnginx_servers_add() {\n    touch ${nginx_conf_dir}/127.0.0.1.wsServers\n    cat >${nginx_conf_dir}/127.0.0.1.wsServers <<EOF\nserver 127.0.0.1:${xport} weight=50 max_fails=2 fail_timeout=10;\nEOF\n    touch ${nginx_conf_dir}/127.0.0.1.grpcServers\n    cat >${nginx_conf_dir}/127.0.0.1.grpcServers<<EOF\nserver 127.0.0.1:${gport} weight=50 max_fails=2 fail_timeout=10;\nEOF\n}\n\nmodify_path() {\n    sed -i \"s/^\\( *\\)\\\"path\\\".*/\\1\\\"path\\\": \\\"\\/${path}\\\"/\" ${xray_conf}\n    sed -i \"s/^\\( *\\)\\\"serviceName\\\".*/\\1\\\"serviceName\\\": \\\"${serviceName}\\\",/\" ${xray_conf}\n    if [[ ${tls_mode} != \"Reality\" ]] || [[ \"$reality_add_more\" == \"off\" ]]; then\n        judge \"Xray $(gettext \"伪装路径\") $(gettext \"修改\")\"\n    else\n        log_echo \"${Warning} ${YellowBG} Reality $(gettext \"不支持\") path ${Font}\"\n    fi\n}\n\nmodify_email_address() {\n    if [[ $(jq -r '.inbounds[0].settings.clients|length' ${xray_conf}) == 1 ]] && [[ $(jq -r '.inbounds[1].settings.clients|length' ${xray_conf}) == 1 ]]; then\n        sed -i \"s/^\\( *\\)\\\"email\\\".*/\\1\\\"email\\\": \\\"${custom_email}\\\"/g\" ${xray_conf}\n        judge \"Xray $(gettext \"用户名修改\")\"\n    else\n        echo\n        log_echo \"${Warning} ${YellowBG} $(gettext \"请先删除多余的用户\") ${Font}\"\n    fi\n}\n\nmodify_UUID() {\n    if [[ $(jq -r '.inbounds[0].settings.clients|length' ${xray_conf}) == 1 ]] && [[ $(jq -r '.inbounds[1].settings.clients|length' ${xray_conf}) == 1 ]]; then\n        sed -i \"s/^\\( *\\)\\\"id\\\".*/\\1\\\"id\\\": \\\"${UUID}\\\",/g\" ${xray_conf}\n        judge \"Xray UUID $(gettext \"修改\")\"\n    else\n        echo\n        log_echo \"${Warning} ${YellowBG} $(gettext \"请先删除多余的用户\") ${Font}\"\n    fi\n}\n\nmodify_target_serverNames() {\n  jq --arg target \"${target}:443\" --arg serverNames \"${serverNames}\" '\n     .inbounds[0].streamSettings.realitySettings.target = $target |\n     .inbounds[0].streamSettings.realitySettings.serverNames = [$serverNames]' \"${xray_conf}\" > \"${xray_conf}.tmp\"\n  judge \"target serverNames $(gettext \"配置修改\")\"\n  mv \"${xray_conf}.tmp\" \"${xray_conf}\"\n}\n\nmodify_privateKey_shortIds() {\n  jq --arg privateKey \"${privateKey}\" --arg shortIds \"${shortIds}\" '\n     .inbounds[0].streamSettings.realitySettings.privateKey = $privateKey |\n     .inbounds[0].streamSettings.realitySettings.shortIds = [$shortIds]' \"${xray_conf}\" > \"${xray_conf}.tmp\"\n  judge \"privateKey shortIds $(gettext \"配置修改\")\"\n  mv \"${xray_conf}.tmp\" \"${xray_conf}\"\n}\n\nmodify_reality_listen_address () {\n    jq '.inbounds[0].listen = \"127.0.0.1\"' \"${xray_conf}\" > \"${xray_conf}.tmp\"\n    mv \"${xray_conf}.tmp\" \"${xray_conf}\"\n    judge \"Xray reality listen address $(gettext \"配置修改\")\"\n}\n\nxray_privilege_escalation() {\n    if [[ -n \"$(grep \"User=nobody\" ${xray_systemd_file})\" ]]; then\n        log_echo \"${OK} ${GreenBG} $(gettext \"检测到 Xray 的权限控制, 启动修改程序\") ${Font}\"\n        chmod -fR a+rw /var/log/xray/\n        chown -fR nobody:nogroup /var/log/xray/\n        [[ -f \"${ssl_chainpath}/xray.key\" ]] && chown -fR nobody:nogroup ${ssl_chainpath}/*\n    fi\n    log_echo \"${OK} ${GreenBG} Xray $(gettext \"修改完成\") ${Font}\"\n}\n\nxray_install() {\n    if [[ $(xray version) == \"\" ]] || [[ ! -f \"${xray_conf}\" ]]; then\n        bash -c \"$(curl -L https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)\" @ install -f --version v${xray_online_version}\n        judge \"$(gettext \"安装\") Xray\"\n        systemctl daemon-reload\n        xray_privilege_escalation\n        [[ -f \"${xray_default_conf}\" ]] && rm -rf ${xray_default_conf}\n        ln -s ${xray_conf} ${xray_default_conf}\n        xray_version=${xray_online_version}\n    else\n        log_echo \"${OK} ${GreenBG} $(gettext \"已安装\") Xray ${Font}\"\n        xray_version=$(info_extraction xray_version)\n    fi\n}\n\nxray_update() {\n    [[ -f \"/etc/idleleo/logs/update_failed.mark\" ]] && rm -rf \"/etc/idleleo/logs/update_failed.mark\"\n    [[ ! -d \"${local_bin}/etc/xray\" ]] && log_echo \"${GreenBG} $(gettext \"若更新无效, 建议直接卸载再安装\")! ${Font}\"\n    log_echo \"${Warning} ${GreenBG} $(gettext \"部分新功能需要重新安装才可生效\") ${Font}\"\n    ## xray_online_version=$(check_version xray_online_pre_version)\n    ## if [[ $(info_extraction xray_version) != ${xray_online_version} ]] && [[ ${xray_version} != ${xray_online_version} ]]; then\n    if [[ $(info_extraction xray_version) != ${xray_online_version} ]]; then\n        if [[ ${auto_update} != \"YES\" ]]; then\n            log_echo \"${Warning} ${GreenBG} $(gettext \"检测到存在最新版\") ${Font}\"\n            log_echo \"${Warning} ${GreenBG} $(gettext \"脚本可能未兼容此版本\") ${Font}\"\n            log_echo \"${Warning} ${GreenBG} $(gettext \"是否更新\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n            read -r xray_test_fq\n            case $xray_test_fq in\n            [yY][eE][sS] | [yY])\n                log_echo \"${OK} ${GreenBG} $(gettext \"更新\") Xray ! ${Font}\"\n                systemctl stop xray\n                bash -c \"$(curl -L https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)\" @ install -f --version v${xray_online_version}\n                if ! ${xray_bin_dir}/xray -version &> /dev/null; then\n                    log_echo \"${Error} ${RedBG} Xray $(gettext \"启动失败\")! ${Font}\"\n                    log_echo \"${Warning} ${GreenBG} $(gettext \"是否回滚到之前的版本\") [${Red}Y${Font}${GreenBG}/N]? ${Font}\"\n                    read -r rollback_fq\n                    case $rollback_fq in\n                    [nN][oO] | [nN])\n                        log_echo \"${Info} ${YellowBG} $(gettext \"未执行回滚操作\")! ${Font}\"\n                        return 0\n                        ;;\n                    *)\n                        log_echo \"${OK} ${GreenBG} $(gettext \"正在回滚\")... ${Font}\"\n                        xray_version=$(info_extraction xray_version)\n                        bash -c \"$(curl -L https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)\" @ install -f --version v${xray_version}\n                        if ${xray_bin_dir}/xray -version &> /dev/null; then\n                            log_echo \"${OK} ${GreenBG} $(gettext \"已成功回滚到之前的\") Xray $(gettext \"版本\")! ${Font}\"\n                        else\n                            log_echo \"${Error} ${RedBG} Xray $(gettext \"回滚失败\")! ${Font}\"\n                            return 1\n                        fi\n                        ;;\n                    esac\n                else\n                    judge \"Xray $(gettext \"更新\")\"\n                    xray_version=${xray_online_version}\n                fi\n                ;;\n            *)\n                return 0\n                ;;\n            esac\n        else\n            systemctl stop xray\n            bash -c \"$(curl -L https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)\" @ install -f --version v${xray_online_version}\n            if ! ${xray_bin_dir}/xray -version &> /dev/null; then\n                xray_version=$(info_extraction xray_version)\n                bash -c \"$(curl -L https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)\" @ install -f --version v${xray_version}\n                if ! ${xray_bin_dir}/xray -version &> /dev/null; then\n                    echo \"Xray $(gettext \"回滚失败\")!\" >>${log_file}\n                    return 1\n                fi\n            fi\n        fi\n    else\n        timeout \"$(gettext \"重装\") Xray !\"\n        systemctl stop xray\n        xray_version=${xray_online_version}\n        bash -c \"$(curl -L https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)\" @ install -f --version v${xray_online_version}\n        judge \"Xray $(gettext \"重装\")\"\n    fi\n    xray_privilege_escalation\n    [[ -f \"${xray_default_conf}\" ]] && rm -rf ${xray_default_conf}\n    ln -s ${xray_conf} ${xray_default_conf}\n    jq --arg xray_version \"${xray_version}\" '.xray_version = $xray_version' \"${xray_qr_config_file}\" > \"${xray_qr_config_file}.tmp\"\n    mv \"${xray_qr_config_file}.tmp\" \"${xray_qr_config_file}\"\n    systemctl daemon-reload\n    systemctl start xray\n    if ! ${xray_bin_dir}/xray -version &> /dev/null; then\n        [[ ${auto_update} == \"YES\" ]] && echo \"Xray $(gettext \"更新失败\")!\" >>${log_file}\n        [[ ${auto_update} != \"YES\" ]] && log_echo \"${Error} ${RedBG} Xray $(gettext \"更新失败\")! ${Font}\"\n        return 1\n    fi\n    return 0\n}\n\nreality_balance_add_fq() {\n    echo\n    log_echo \"${GreenBG} $(gettext \"是否添加 Reality 负载均衡\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n    echo -e \"${Warning} ${Green} $(gettext \"使用此功能前，建议先阅读作者教程\")! ${Font}\"\n    echo -e \"${Warning} ${YellowBG} $(gettext \"如不清楚具体用途, 请勿选择\")! ${Font}\"\n    read -r reality_balance_add_fq\n    case $reality_balance_add_fq in\n        [yY][eE][sS] | [yY])\n            reality_add_balance=\"on\"\n            log_echo \"${OK} ${GreenBG} $(gettext \"已启用\") ${Font}\"\n        ;;\n        *)\n            reality_add_balance=\"off\"\n            log_echo \"${OK} ${GreenBG} $(gettext \"已跳过\") ${Font}\"\n        ;;\n\n    esac\n}\n\n\nreality_nginx_add_fq() {\n    echo\n    log_echo \"${Warning} ${Green} $(gettext \"Reality 协议有流量偷跑的风险\") ${Font}\"\n    if [[ ${reality_add_balance} == \"off\" ]]; then\n        log_echo \"${GreenBG} $(gettext \"是否额外安装 nginx 前置保护\")($(gettext \"推荐\")) [${Red}Y${Font}${GreenBG}/N]? ${Font}\"\n        read -r reality_nginx_add_fq\n        case $reality_nginx_add_fq in\n            [nN][oO] | [nN])\n                reality_add_nginx=\"off\"\n                if [[ -d \"${nginx_dir}\" ]]; then\n                    echo\n                    log_echo \"${Warning} ${Green} $(gettext \"检测到已安装\") nginx ${Font}\"\n                    uninstall_nginx\n                else\n                    log_echo \"${OK} ${GreenBG} $(gettext \"已跳过安装\") nginx ${Font}\"\n                fi\n            ;;\n            *)\n                reality_add_nginx=\"on\"\n                nginx_exist_check\n                nginx_systemd\n                nginx_reality_conf_add\n                nginx_reality_servers_add\n                nginx_reality_serverNames_add\n            ;;\n\n        esac\n    else\n        log_echo \"${Warning} ${Green} $(gettext \"检测到已开启 Reality 负载均衡\") ${Font}\"\n        log_echo \"${Warning} ${Green} $(gettext \"如用作 Reality 负载均衡主服务器必须安装\") ${Font}\"\n        log_echo \"${Warning} ${Green} $(gettext \"如用作 Reality 负载均衡二级服务器则无需安装\") ${Font}\"\n        log_echo \"${GreenBG} $(gettext \"是否额外安装 nginx 前置保护\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n        read -r reality_nginx_add_fq\n        case $reality_nginx_add_fq in\n            [yY][eE][sS] | [yY])\n                reality_add_nginx=\"on\"\n                nginx_exist_check\n                nginx_systemd\n                nginx_reality_conf_add\n                nginx_reality_servers_add\n                nginx_reality_serverNames_add\n            ;;\n            *)\n                reality_add_nginx=\"off\"\n                if [[ -d \"${nginx_dir}\" ]]; then\n                    echo\n                    log_echo \"${Warning} ${Green} $(gettext \"检测到已安装\") nginx ${Font}\"\n                    uninstall_nginx\n                else\n                    log_echo \"${OK} ${GreenBG} $(gettext \"已跳过安装\") nginx ${Font}\"\n                fi\n            ;;\n        esac\n    fi    \n}\n\nnginx_exist_check() {\n    if [[ -f \"${nginx_dir}/sbin/nginx\" ]] && [[ -n \"$(info_extraction nginx_build_version)\" ]]; then\n        if [[ -d \"${nginx_conf_dir}\" ]]; then\n            rm -rf ${nginx_conf_dir}/*.conf\n            if [[ -f \"${nginx_conf_dir}/nginx.default\" ]]; then\n                cp -fp ${nginx_conf_dir}/nginx.default ${nginx_dir}/conf/nginx.conf\n            elif [[ -f \"${nginx_dir}/conf/nginx.conf.default\" ]]; then\n                cp -fp ${nginx_dir}/conf/nginx.conf.default ${nginx_dir}/conf/nginx.conf\n            else\n                sed -i \"/if \\(.*\\) {$/,+2d\" ${nginx_dir}/conf/nginx.conf\n                sed -i \"/^include.*\\*\\.conf;$/d\" ${nginx_dir}/conf/nginx.conf\n            fi\n        else\n            sed -i \"/if \\(.*\\) {$/,+2d\" ${nginx_dir}/conf/nginx.conf\n            sed -i \"/^include.*\\*\\.conf;$/d\" ${nginx_dir}/conf/nginx.conf\n        fi\n        modify_nginx_origin_conf\n        nginx_build_version=$(info_extraction nginx_build_version)\n        log_echo \"${OK} ${GreenBG} Nginx $(gettext \"已存在, 跳过编译安装过程\") ${Font}\"\n    elif [[ -d \"/etc/nginx\" ]] && [[ -n \"$(info_extraction nginx_version)\" ]]; then\n        log_echo \"${Error} ${RedBG} $(gettext \"检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装\")! ${Font}\"\n        exit 1\n    else\n        nginx_install\n    fi\n}\n\nnginx_install() {\n    local temp_dir=$(mktemp -d)\n    local current_dir=$(pwd)\n\n    cd \"$temp_dir\" || exit\n\n    log_echo \"${OK} ${GreenBG} $(gettext \"即将下载已编译的\") Nginx ${Font}\"\n    local nginx_filename\n    case $(uname -m) in\n        x86_64)\n            nginx_filename=\"xray-nginx-custom-x86.tar.gz\"\n            ;;\n        armv7l|armv8l|aarch64)\n            nginx_filename=\"xray-nginx-custom-arm.tar.gz\"\n            ;;\n        *)\n            log_echo \"${Error} ${RedBG} $(gettext \"不支持的系统架构\"): $(uname -m) ${Font}\"\n            cd \"$current_dir\" && rm -rf \"$temp_dir\"\n            exit 1\n            ;;\n    esac\n\n    local url=\"https://github.com/hello-yunshu/Xray_bash_onekey_Nginx/releases/download/v${nginx_build_version}/${nginx_filename}\"\n\n    if ! curl -L -# -o \"$nginx_filename\" \"$url\"; then\n        log_echo \"${Error} ${RedBG} Nginx $(gettext \"下载失败\") ${Font}\"\n        cd \"$current_dir\" && rm -rf \"$temp_dir\"\n        exit 1\n    fi\n    log_echo \"${OK} ${GreenBG} Nginx $(gettext \"下载成功\") ${Font}\"\n\n    if ! tar -xzf \"$nginx_filename\" -C ./; then\n        log_echo \"${Error} ${RedBG} Nginx $(gettext \"解压失败\") ${Font}\"\n        cd \"$current_dir\" && rm -rf \"$temp_dir\"\n        exit 1\n    fi\n\n    [[ -d ${nginx_dir} ]] && rm -rf \"${nginx_dir}\"\n    mv ./nginx \"${nginx_dir}\"\n\n    cp -fp ${nginx_dir}/conf/nginx.conf ${nginx_conf_dir}/nginx.default\n\n    # 修改基本配置\n    #sed -i 's/#user  nobody;/user  root;/' ${nginx_dir}/conf/nginx.conf\n    modify_nginx_origin_conf\n\n    # 删除临时文件\n    cd \"$current_dir\" && rm -rf \"$temp_dir\"\n    chown -fR nobody:nogroup \"${nginx_dir}\"\n    chmod -fR 755 \"${nginx_dir}\"\n}\n\nnginx_update() {\n    [[ -f \"/etc/idleleo/logs/update_failed.mark\" ]] && rm -rf \"/etc/idleleo/logs/update_failed.mark\"\n    if [[ -f \"${nginx_dir}/sbin/nginx\" ]]; then\n        current_nginx_build_version=$(info_extraction nginx_build_version)\n        if [[ ${nginx_build_version} != ${current_nginx_build_version} ]]; then\n            ip_check\n            if [[ -f \"${xray_qr_config_file}\" ]]; then\n                domain=$(info_extraction host)\n                if [[ ${tls_mode} == \"TLS\" ]]; then\n                    port=$(info_extraction port)\n                    if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n                        xport=$(info_extraction ws_port)\n                        path=$(info_extraction path)\n                        gport=$((RANDOM % 1000 + 30000))\n                        while [[ ${gport} == ${xport} ]]; do gport=$((RANDOM % 1000 + 30000)); done\n                        serviceName=\"$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})\"\n                    elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n                        gport=$(info_extraction grpc_port)\n                        serviceName=$(info_extraction serviceName)\n                        xport=$((RANDOM % 1000 + 20000))\n                        path=\"$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})\"\n                    elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n                        xport=$(info_extraction ws_port)\n                        path=$(info_extraction path)\n                        gport=$(info_extraction grpc_port)\n                        serviceName=$(info_extraction serviceName)\n                    fi\n                    if [[ 0 -eq ${read_config_status} ]]; then\n                        [[ ${auto_update} == \"YES\" ]] && echo \"Nginx $(gettext \"配置不完整, 退出更新\")!\" >>${log_file} && return 1\n                        log_echo \"${Error} ${RedBG} $(gettext \"配置不完整, 退出更新\")! ${Font}\"\n                        return 1\n                    fi\n                elif [[ ${tls_mode} == \"Reality\" ]] && [[ ${reality_add_nginx} == \"on\" ]]; then\n                    port=$(info_extraction port)\n                    serverNames=$(info_extraction serverNames)\n                    if [[ 0 -eq ${read_config_status} ]]; then\n                        [[ ${auto_update} == \"YES\" ]] && echo \"Nginx $(gettext \"配置不完整, 退出更新\")!\" >>${log_file} && return 1\n                        log_echo \"${Error} ${RedBG} $(gettext \"配置不完整, 退出更新\")! ${Font}\"\n                        return 1\n                    fi\n                elif [[ ${tls_mode} == \"None\" ]]; then\n                    [[ ${auto_update} == \"YES\" ]] && echo \"$(gettext \"当前安装模式不需要\") Nginx !\" >>${log_file} && return 1\n                    log_echo \"${Error} ${RedBG} $(gettext \"当前安装模式不需要\") Nginx ! ${Font}\"\n                    return 1\n                fi\n            else\n                [[ ${auto_update} == \"YES\" ]] && echo \"Nginx $(gettext \"配置不存在, 退出更新\")!\" >>${log_file} && return 1\n                log_echo \"${Error} ${RedBG} $(gettext \"配置不存在, 退出更新\")! ${Font}\"\n                return 1\n            fi\n            service_stop\n            backup_nginx_dir=\"${nginx_dir}_backup_${current_nginx_build_version}\"\n            cp -r ${nginx_dir} ${backup_nginx_dir}\n            judge \"$(gettext \"备份旧版\") Nginx\"\n            timeout \"$(gettext \"删除旧版\") Nginx !\"\n            rm -rf ${nginx_dir}\n            if [[ ${auto_update} != \"YES\" ]]; then\n                echo\n                log_echo \"${GreenBG} $(gettext \"是否保留原 Nginx 配置文件\") [${Red}Y${Font}${GreenBG}/N]? ${Font}\"\n                read -r save_originconf_fq\n            else\n                save_originconf_fq=1\n            fi\n            case $save_originconf_fq in\n            [nN][oO] | [nN])\n                rm -rf ${nginx_conf_dir}/*.conf\n                log_echo \"${OK} ${GreenBG} $(gettext \"原配置文件已删除\")! ${Font}\"\n                ;;\n            *)\n                save_originconf=\"Yes\"\n                log_echo \"${OK} ${GreenBG} $(gettext \"原配置文件已保留\")! ${Font}\"\n                ;;\n            esac\n            nginx_install\n            if [[ ${tls_mode} == \"TLS\" ]] && [[ ${save_originconf} != \"Yes\" ]]; then\n                nginx_ssl_conf_add\n                nginx_conf_add\n                nginx_servers_conf_add\n            elif [[ ${tls_mode} == \"Reality\" ]] && [[ ${reality_add_nginx} == \"on\" ]] && [[ ${save_originconf} != \"Yes\" ]]; then\n                nginx_reality_conf_add\n            fi\n            service_start\n            sleep 1\n            if ! systemctl -q is-active nginx; then\n                log_echo \"${Error} ${RedBG} Nginx $(gettext \"启动失败\")! ${Font}\"\n                if [[ ${auto_update} != \"YES\" ]]; then\n                    echo\n                    log_echo \"${GreenBG} $(gettext \"是否回滚到之前的版本\") [${Red}Y${Font}${GreenBG}/N]? ${Font}\"\n                    read -r rollback_fq\n                else\n                    service_stop\n                    rm -rf ${nginx_dir}\n                    mv ${backup_nginx_dir} ${nginx_dir}\n                    service_start\n                fi\n                case $rollback_fq in\n                [nN][oO] | [nN])\n                    log_echo \"${Info} ${YellowBG} $(gettext \"未执行回滚操作\")! ${Font}\"\n                    return 1\n                    ;;\n                *)\n                    log_echo \"${OK} ${GreenBG} $(gettext \"正在回滚\")... ${Font}\"\n                    service_stop\n                    rm -rf ${nginx_dir}\n                    mv ${backup_nginx_dir} ${nginx_dir}\n                    service_start\n                    sleep 1\n                    if systemctl -q is-active nginx; then\n                        log_echo \"${OK} ${GreenBG} $(gettext \"已成功回滚到之前的\") Nginx $(gettext \"版本\")! ${Font}\"\n                        jq --arg nginx_build_version \"${current_nginx_build_version}\" '.nginx_build_version = $nginx_build_version' \"${xray_qr_config_file}\" > \"${xray_qr_config_file}.tmp\"\n                        mv \"${xray_qr_config_file}.tmp\" \"${xray_qr_config_file}\"\n                        rm -rf ${backup_nginx_dir}\n                        return 1\n                    else\n                        log_echo \"${Error} ${RedBG} $(gettext \"回滚失败\")! ${Font}\"\n                        return 1\n                    fi\n                    ;;\n                esac\n            else\n                jq --arg nginx_build_version \"${nginx_build_version}\" '.nginx_build_version = $nginx_build_version' \"${xray_qr_config_file}\" > \"${xray_qr_config_file}.tmp\"\n                mv \"${xray_qr_config_file}.tmp\" \"${xray_qr_config_file}\"\n                judge \"Nginx $(gettext \"更新\")\"\n                rm -rf ${backup_nginx_dir}\n                judge \"$(gettext \"删除\") Nginx $(gettext \"备份\")\"\n            fi\n        else\n            log_echo \"${OK} ${GreenBG} Nginx $(gettext \"已为最新版\") ${Font}\"\n        fi\n    else\n        log_echo \"${Error} ${RedBG} Nginx $(gettext \"未安装\") ${Font}\"\n    fi\n    return 0\n}\n\nauto_update() {\n    if [[ \"${ID}\" == \"centos\" ]]; then\n        crontab_file=\"/var/spool/cron/root\"\n    else\n        crontab_file=\"/var/spool/cron/crontabs/root\"\n    fi\n    if [[ ! -f \"${auto_update_file}\" ]] || [[ $(crontab -l | grep -c \"auto_update.sh\") -lt 1 ]]; then\n        echo\n        log_echo \"${GreenBG} $(gettext \"设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)\") ${Font}\"\n        log_echo \"${Warning} ${YellowBG} $(gettext \"可能自动更新后有兼容问题, 谨慎启用\") ${Font}\"\n        log_echo \"${GreenBG} $(gettext \"是否启用\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n        read -r auto_update_fq\n        case $auto_update_fq in\n        [yY][eE][sS] | [yY])\n            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}\n            echo \"0 1 15 * * bash ${auto_update_file}\" >>${crontab_file}\n            judge \"$(gettext \"设置自动更新\")\"\n            ;;\n        *) ;;\n        esac\n    else\n        log_echo \"${OK} ${GreenBG} $(gettext \"已设置自动更新\") ${Font}\"\n        log_echo \"${GreenBG} $(gettext \"是否关闭\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n        read -r auto_update_close_fq\n        case $auto_update_close_fq in\n        [yY][eE][sS] | [yY])\n            sed -i \"/auto_update.sh/d\" ${crontab_file}\n            rm -rf ${auto_update_file}\n            judge \"$(gettext \"删除自动更新\")\"\n            ;;\n        *) ;;\n        esac\n    fi\n}\n\nssl_install() {\n    pkg_install \"socat\"\n    judge \"$(gettext \"安装 SSL 证书生成脚本依赖\")\"\n    curl https://get.acme.sh | sh -s email=${custom_email}\n    judge \"$(gettext \"安装 SSL 证书生成脚本\")\"\n}\n\ndomain_check() {\n    if [[ \"on\" == ${old_config_status} ]] && [[ -n $(info_extraction host) ]] && [[ -n $(info_extraction ip_version) ]]; then\n        echo\n        log_echo \"${GreenBG} $(gettext \"检测到原域名配置存在, 是否跳过域名设置\") [${Red}Y${Font}${GreenBG}/N]? ${Font}\"\n        read -r old_host_fq\n        case $old_host_fq in\n        [nN][oO] | [nN]) ;;\n        *)\n            domain=$(info_extraction host)\n            ip_version=$(info_extraction ip_version)\n            if [[ ${ip_version} == \"IPv4\" ]]; then\n                local_ip=$(curl -4 ip.me 2>/dev/null || curl -4 ip.im)\n            elif [[ ${ip_version} == \"IPv6\" ]]; then\n                local_ip=$(curl -6 ip.me 2>/dev/null || curl -6 ip.im)\n            else\n                local_ip=${ip_version}\n            fi\n            if [[ -z ${local_ip} ]]; then\n                log_echo \"${Error} ${RedBG} $(gettext \"无法获取公网IP地址\"), $(gettext \"安装终止\")! ${Font}\"\n                return 1\n            fi\n            log_echo \"${OK} ${GreenBG} $(gettext \"已跳过域名设置\") ${Font}\"\n            return 0\n            ;;\n        esac\n    fi\n    echo\n    log_echo \"${GreenBG} $(gettext \"确定域名信息\") ${Font}\"\n    read_optimize \"$(gettext \"请输入你的域名信息\") (e.g. www.hey.run):\" \"domain\" \"NULL\"\n    echo -e \"\\n${GreenBG} $(gettext \"请选择公网IP(IPv4/IPv6)或手动输入域名\") ${Font}\"\n    echo -e \"${Red}1${Font}: IPv4 ($(gettext \"默认\"))\"\n    echo \"2: IPv6\"\n    echo \"3: $(gettext \"域名\")\"\n    local ip_version_fq\n    read_optimize \"$(gettext \"请输入\"): \" \"ip_version_fq\" 1 1 3 \"$(gettext \"请输入有效的数字\")!\"\n    log_echo \"${OK} ${GreenBG} $(gettext \"正在获取公网IP信息, 请耐心等待\") ${Font}\"\n    if [[ ${ip_version_fq} == 1 ]]; then\n        local_ip=$(curl -4 ip.me 2>/dev/null || curl -4 ip.im)\n        domain_ip=$(ping -4 \"${domain}\" -c 1 | sed '1{s/[^(]*(//;s/).*//;q}')\n        ip_version=\"IPv4\"\n    elif [[ ${ip_version_fq} == 2 ]]; then\n        local_ip=$(curl -6 ip.me 2>/dev/null || curl -6 ip.im)\n        domain_ip=$(ping -6 \"${domain}\" -c 1 | sed '2{s/[^(]*(//;s/).*//;q}' | tail -n +2)\n        ip_version=\"IPv6\"\n    elif [[ ${ip_version_fq} == 3 ]]; then\n        log_echo \"${Warning} ${GreenBG} $(gettext \"此选项用于服务器商仅提供域名访问服务器\") ${Font}\"\n        log_echo \"${Warning} ${GreenBG} $(gettext \"注意服务器商域名添加 CNAME 记录\") ${Font}\"\n        read_optimize \"$(gettext \"请输入\"): \" \"local_ip\" \"NULL\"\n        ip_version=${local_ip}\n    else\n        local_ip=$(curl -4 ip.me 2>/dev/null || curl -4 ip.im)\n        domain_ip=$(ping -4 \"${domain}\" -c 1 | sed '1{s/[^(]*(//;s/).*//;q}')\n        ip_version=\"IPv4\"\n    fi\n    if [[ -z ${local_ip} ]]; then\n        log_echo \"${Error} ${RedBG} $(gettext \"无法获取公网IP地址\"), $(gettext \"安装终止\")! ${Font}\"\n        return 1\n    fi\n    log_echo \"$(gettext \"域名DNS解析IP\"): ${domain_ip}\"\n    log_echo \"$(gettext \"公网IP/域名\"): ${local_ip}\"\n    if [[ ${ip_version_fq} != 3 ]] && [[ ${local_ip} == ${domain_ip} ]]; then\n        log_echo \"${OK} ${GreenBG} $(gettext \"域名DNS解析IP与公网IP匹配\") ${Font}\"\n    else\n        log_echo \"${Warning} ${YellowBG} $(gettext \"请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray\") ${Font}\"\n        log_echo \"${Error} ${RedBG} $(gettext \"域名DNS解析IP与公网IP不匹配, 请选择\"): ${Font}\"\n        echo \"1: $(gettext \"继续安装\")\"\n        echo \"2: $(gettext \"重新输入\")\"\n        log_echo \"${Red}3${Font}: $(gettext \"终止安装\") ($(gettext \"默认\"))\"\n        local install\n        read_optimize \"$(gettext \"请输入\"): \" \"install\" 3 1 3 \"$(gettext \"请输入有效的数字\")!\"\n        case $install in\n        1)\n            log_echo \"${OK} ${GreenBG} $(gettext \"继续安装\") ${Font}\"\n            ;;\n        2)\n            domain_check\n            ;;\n        *)\n            log_echo \"${Error} ${RedBG} $(gettext \"安装终止\") ${Font}\"\n            exit 2\n            ;;\n        esac\n    fi\n}\n\nip_check() {\n    if [[ \"on\" == ${old_config_status} || ${auto_update} == \"YES\" ]] && [[ -n $(info_extraction host) ]] && [[ -n $(info_extraction ip_version) ]]; then\n        if [[ ${auto_update} != \"YES\" ]]; then\n            echo\n            log_echo \"${GreenBG} $(gettext \"检测到原IP配置存在, 是否跳过IP设置\") [${Red}Y${Font}${GreenBG}/N]? ${Font}\"\n            read -r old_host_fq\n        else\n            old_host_fq=1\n        fi\n        case $old_host_fq in\n        [nN][oO] | [nN]) ;;\n        *)\n            ip_version=$(info_extraction ip_version)\n            if [[ ${ip_version} == \"IPv4\" ]]; then\n                local_ip=$(curl -4 ip.me 2>/dev/null || curl -4 ip.im)\n            elif [[ ${ip_version} == \"IPv6\" ]]; then\n                local_ip=$(curl -6 ip.me 2>/dev/null || curl -6 ip.im)\n            else\n                local_ip=${ip_version}\n            fi\n            if [[ -z ${local_ip} ]]; then\n                log_echo \"${Error} ${RedBG} $(gettext \"无法获取公网IP地址\"), $(gettext \"安装终止\")! ${Font}\"\n                return 1\n            fi\n            echo\n            log_echo \"${OK} ${GreenBG} $(gettext \"已跳过IP设置\") ${Font}\"\n            return 0\n            ;;\n        esac\n    fi\n    echo\n    log_echo \"${GreenBG} $(gettext \"确定公网IP信息\") ${Font}\"\n    log_echo \"${GreenBG} $(gettext \"请选择公网IP为IPv4或IPv6\") ${Font}\"\n    echo -e \"${Red}1${Font}: IPv4 ($(gettext \"默认\"))\"\n    echo \"2: IPv6\"\n    echo \"3: $(gettext \"手动输入\")\"\n    local ip_version_fq\n    read_optimize \"$(gettext \"请输入\"): \" \"ip_version_fq\" 1 1 3 \"$(gettext \"请输入有效的数字\")!\"\n    [[ -z ${ip_version_fq} ]] && ip_version=1\n    log_echo \"${OK} ${GreenBG} $(gettext \"正在获取公网IP信息, 请耐心等待\") ${Font}\"\n    if [[ ${ip_version_fq} == 1 ]]; then\n        local_ip=$(curl -4 ip.me 2>/dev/null || curl -4 ip.im)\n        ip_version=\"IPv4\"\n    elif [[ ${ip_version_fq} == 2 ]]; then\n        local_ip=$(curl -6 ip.me 2>/dev/null || curl -6 ip.im)\n        ip_version=\"IPv6\"\n    elif [[ ${ip_version_fq} == 3 ]]; then\n        read_optimize \"$(gettext \"请输入\"): \" \"local_ip\" \"NULL\"\n        ip_version=${local_ip}\n    else\n        local_ip=$(curl -4 ip.me 2>/dev/null || curl -4 ip.im)\n        ip_version=\"IPv4\"\n    fi\n    if [[ -z ${local_ip} ]]; then\n        log_echo \"${Error} ${RedBG} $(gettext \"无法获取公网IP地址\"), $(gettext \"安装终止\")! ${Font}\"\n        return 1\n    fi\n    log_echo \"$(gettext \"公网IP/域名\"): ${local_ip}\"\n}\n\nport_exist_check() {\n    if [[ 0 -eq $(lsof -i:\"$1\" | grep -i -c \"listen\") ]]; then\n        log_echo \"${OK} ${GreenBG} $1 $(gettext \"端口未被占用\") ${Font}\"\n    else\n        log_echo \"${Error} ${RedBG} $(gettext \"检测到\") $1 $(gettext \"端口被占用\"), $(gettext \"以下为\") $1 $(gettext \"端口占用信息\") ${Font}\"\n        lsof -i:\"$1\"\n        timeout \"$(gettext \"尝试终止占用的进程\")!\"\n        lsof -i:\"$1\" | awk '{print $2}' | grep -v \"PID\" | xargs kill -9\n        log_echo \"${OK} ${GreenBG} kill $(gettext \"完成\") ${Font}\"\n    fi\n}\n\nacme() {\n    systemctl restart nginx\n    #暂时解决ca问题\n    if \"$HOME\"/.acme.sh/acme.sh --issue -d ${domain} -w ${idleleo_conf_dir} --server letsencrypt --keylength ec-256 --force --test; then\n    #if \"$HOME\"/.acme.sh/acme.sh --issue -d ${domain} -w ${idleleo_conf_dir} --keylength ec-256 --force --test; then\n        log_echo \"${OK} ${GreenBG} SSL $(gettext \"证书测试签发成功, 开始正式签发\") ${Font}\"\n        rm -rf \"$HOME/.acme.sh/${domain}_ecc\"\n    else\n        log_echo \"${Error} ${RedBG} SSL $(gettext \"证书测试签发失败\") ${Font}\"\n        rm -rf \"$HOME/.acme.sh/${domain}_ecc\"\n        exit 1\n    fi\n\n    if \"$HOME\"/.acme.sh/acme.sh --issue -d ${domain} -w ${idleleo_conf_dir} --server letsencrypt --keylength ec-256 --force; then\n    #if \"$HOME\"/.acme.sh/acme.sh --issue -d ${domain} -w ${idleleo_conf_dir} --keylength ec-256 --force; then\n        log_echo \"${OK} ${GreenBG} SSL $(gettext \"证书生成成功\") ${Font}\"\n        mkdir -p ${ssl_chainpath}\n        if \"$HOME\"/.acme.sh/acme.sh --installcert -d ${domain} --fullchainpath ${ssl_chainpath}/xray.crt --keypath ${ssl_chainpath}/xray.key --ecc --force; then\n            chmod -f a+rw ${ssl_chainpath}/xray.crt\n            chmod -f a+rw ${ssl_chainpath}/xray.key\n            chown -fR nobody:nogroup ${ssl_chainpath}/*\n            log_echo \"${OK} ${GreenBG} SSL $(gettext \"证书配置成功\") ${Font}\"\n            systemctl stop nginx\n        fi\n    else\n        log_echo \"${Error} ${RedBG} SSL $(gettext \"证书生成失败\") ${Font}\"\n        rm -rf \"$HOME/.acme.sh/${domain}_ecc\"\n        exit 1\n    fi\n}\n\nxray_conf_add() {\n    if [[ $(info_extraction multi_user) != \"yes\" ]]; then\n        if [[ ${tls_mode} == \"TLS\" ]]; then\n            curl -L -o \"${xray_conf}\" \"https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/VLESS_tls/config.json\"\n            modify_listen_address\n            modify_path\n            modify_inbound_port\n        elif [[ ${tls_mode} == \"Reality\" ]]; then\n            curl -L -o \"${xray_conf}\" \"https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/VLESS_reality/config.json\"\n            modify_target_serverNames\n            modify_privateKey_shortIds\n            xray_reality_add_more\n        elif [[ ${tls_mode} == \"None\" ]]; then\n            curl -L -o \"${xray_conf}\" \"https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/VLESS_tls/config.json\"\n            modify_listen_address\n            modify_path\n            modify_inbound_port\n        elif [[ ${tls_mode} == \"XTLS\" ]]; then\n            curl -L -o \"${xray_conf}\" \"https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/VLESS_xtls/config.json\"\n            modify_listen_address\n            modify_inbound_port\n        fi\n        modify_email_address\n        modify_UUID\n    else\n        echo\n        log_echo \"${Warning} ${GreenBG} $(gettext \"检测到 Xray 配置过多用户\") ${Font}\"\n        log_echo \"${GreenBG} $(gettext \"是否保留原 Xray 配置文件\") [${Red}Y${Font}${GreenBG}/N]? ${Font}\"\n        read -r save_originxray_fq\n        case $save_originxray_fq in\n        [nN][oO] | [nN])\n            rm -rf ${xray_conf}\n            jq 'del(.multi_user)' \"${xray_qr_config_file}\" > \"${xray_qr_config_file}.tmp\"\n            mv \"${xray_qr_config_file}.tmp\" \"${xray_qr_config_file}\"\n            log_echo \"${OK} ${GreenBG} $(gettext \"原配置文件已删除\")! ${Font}\"\n            xray_conf_add\n            ;;\n        *) ;;\n        esac\n    fi\n}\n\nxray_reality_add_more() {\n    if [[ ${reality_add_more} == \"on\" ]]; then\n        modify_path\n        modify_listen_address\n        modify_inbound_port\n        judge \"$(gettext \"添加简单 ws/gRPC 协议\")\"\n    else\n        modify_path\n        modify_inbound_port\n    fi\n\n    if [[ ${reality_add_nginx} == \"on\" ]] && [[ ${reality_add_balance} == \"off\" ]]; then\n        modify_reality_listen_address\n    fi\n}\n\nold_config_exist_check() {\n    if [[ -f \"${xray_qr_config_file}\" ]]; then\n        if [[ ${old_tls_mode} == ${tls_mode} ]]; then\n            echo\n            log_echo \"${GreenBG} $(gettext \"检测到配置文件, 是否读取配置文件\") [${Red}Y${Font}${GreenBG}/N]? ${Font}\"\n            read -r old_config_fq\n            case $old_config_fq in\n            [nN][oO] | [nN])\n                rm -rf ${xray_qr_config_file}\n                log_echo \"${OK} ${GreenBG} $(gettext \"已删除配置文件\") ${Font}\"\n                ;;\n            *)\n                log_echo \"${OK} ${GreenBG} $(gettext \"已保留配置文件\") ${Font}\"\n                old_config_status=\"on\"\n                old_config_input\n                ;;\n            esac\n        else\n            echo\n            log_echo \"${Warning} ${GreenBG} $(gettext \"检测到当前安装模式与配置文件的安装模式不一致\") ${Font}\"\n            log_echo \"${GreenBG} $(gettext \"是否保留配置文件 (强烈不建议)\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n            read -r old_config_fq\n            case $old_config_fq in\n            [yY][eE][sS] | [yY])\n                log_echo \"${Warning} ${GreenBG} $(gettext \"请务必确保配置文件正确\") ${Font}\"\n                log_echo \"${OK} ${GreenBG} $(gettext \"已保留配置文件\") ${Font}\"\n                menu\n                ;;\n            *)\n                rm -rf ${xray_qr_config_file}\n                log_echo \"${OK} ${GreenBG} $(gettext \"已删除配置文件\") ${Font}\"\n                ;;\n            esac\n        fi\n    fi\n}\n\nold_config_input() {\n    info_extraction_all=$(jq -rc . ${xray_qr_config_file})\n    custom_email=$(info_extraction email)\n    UUID5_char=$(info_extraction idc)\n    UUID=$(info_extraction id)\n    if [[ ${tls_mode} == \"TLS\" ]]; then\n        port=$(info_extraction port)\n        if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n            xport=$(info_extraction ws_port)\n            path=$(info_extraction path)\n            gport=$((RANDOM % 1000 + 30000))\n            while [[ ${gport} == ${xport} ]]; do gport=$((RANDOM % 1000 + 30000)); done\n            serviceName=\"$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})\"\n        elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n            gport=$(info_extraction grpc_port)\n            serviceName=$(info_extraction serviceName)\n            xport=$((RANDOM % 1000 + 20000))\n            while [[ ${gport} == ${xport} ]]; do xport=$((RANDOM % 1000 + 20000)); done\n            path=\"$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})\"\n        elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n            xport=$(info_extraction ws_port)\n            path=$(info_extraction path)\n            gport=$(info_extraction grpc_port)\n            serviceName=$(info_extraction serviceName)\n        fi\n    elif [[ ${tls_mode} == \"Reality\" ]]; then\n        port=$(info_extraction port)\n        target=$(info_extraction target)\n        serverNames=$(info_extraction serverNames)\n        privateKey=$(info_extraction privateKey)\n        password=$(info_extraction password)\n        shortIds=$(info_extraction shortIds)\n        if [[ ${reality_add_more} == \"on\" ]]; then\n            if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n                xport=$(info_extraction ws_port)\n                path=$(info_extraction ws_path)\n                gport=$((RANDOM % 1000 + 30000))\n                while [[ ${gport} == ${xport} ]]; do gport=$((RANDOM % 1000 + 30000)); done\n                serviceName=\"$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})\"\n            elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n                gport=$(info_extraction grpc_port)\n                serviceName=$(info_extraction grpc_serviceName)\n                xport=$((RANDOM % 1000 + 20000))\n                while [[ ${gport} == ${xport} ]]; do xport=$((RANDOM % 1000 + 20000)); done\n                path=\"$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})\"\n            elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n                xport=$(info_extraction ws_port)\n                path=$(info_extraction ws_path)\n                gport=$(info_extraction grpc_port)\n                serviceName=$(info_extraction grpc_serviceName)\n            fi\n        else\n            path=\"$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})\"\n            serviceName=\"$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})\"\n            xport=$((RANDOM % 1000 + 20000))\n            gport=$((RANDOM % 1000 + 30000))\n        fi\n    elif [[ ${tls_mode} == \"None\" ]]; then\n        if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n            xport=$(info_extraction ws_port)\n            path=$(info_extraction path)\n            gport=$((RANDOM % 1000 + 30000))\n            while [[ ${gport} == ${xport} ]]; do gport=$((RANDOM % 1000 + 30000)); done\n            serviceName=\"$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})\"\n        elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n            gport=$(info_extraction grpc_port)\n            serviceName=$(info_extraction serviceName)\n            xport=$((RANDOM % 1000 + 20000))\n            while [[ ${gport} == ${xport} ]]; do xport=$((RANDOM % 1000 + 20000)); done\n            path=\"$(head -n 10 /dev/urandom | md5sum | head -c ${random_num})\"\n        elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n            xport=$(info_extraction ws_port)\n            path=$(info_extraction path)\n            gport=$(info_extraction grpc_port)\n            serviceName=$(info_extraction serviceName)\n        fi\n    elif [[ ${tls_mode} == \"XTLS\" ]]; then\n        port=$(info_extraction port)\n    fi\n    if [[ 0 -eq ${read_config_status} ]]; then\n        echo\n        log_echo \"${GreenBG} $(gettext \"检测到配置文件不完整, 是否保留配置文件\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n        read -r old_config_input_fq\n        case $old_config_input_fq in\n        [yY][eE][sS] | [yY])\n            old_config_status=\"off\"\n            log_echo \"${OK} ${GreenBG} $(gettext \"已保留配置文件\") ${Font}\"\n            ;;\n        *)\n            rm -rf ${xray_qr_config_file}\n            old_config_status=\"off\"\n            log_echo \"${OK} ${GreenBG} $(gettext \"已删除配置文件\") ${Font}\"\n            ;;\n        esac\n    fi\n}\n\nnginx_ssl_conf_add() {\n    touch ${nginx_ssl_conf}\n    cat >${nginx_ssl_conf} <<EOF\nserver {\n    listen 80;\n    listen [::]:80;\n    server_name serveraddr.com;\n\n    location ^~ /.well-known/acme-challenge/ {\n        root ${idleleo_dir}/conf;\n        default_type \"text/plain\";\n        allow all;\n    }\n    location = /.well-known/acme-challenge/ {\n        return 404;\n    }\n\n    location / {\n        return 301 https://www.hey.run\\$request_uri;\n    }\n}\nEOF\n    modify_nginx_ssl_other\n    judge \"Nginx SSL $(gettext \"配置修改\")\"\n}\n\nnginx_conf_add() {\n    touch ${nginx_conf}\n    cat >${nginx_conf} <<EOF\nserver {\n    listen 443 ssl reuseport;\n    listen [::]:443 ssl reuseport;\n    listen 443 quic reuseport;\n    listen [::]:443 quic reuseport;\n\n    http2 on;\n    set_real_ip_from      127.0.0.1;\n    real_ip_header        X-Forwarded-For;\n    real_ip_recursive     on;\n    ssl_certificate       ${idleleo_dir}/cert/xray.crt;\n    ssl_certificate_key   ${idleleo_dir}/cert/xray.key;\n    ssl_protocols         TLSv1.3;\n    ssl_ciphers           ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305;\n    ssl_ecdh_curve        X25519:prime256v1:secp384r1;\n    server_name           serveraddr.com;\n    index index.html index.htm;\n    root /403.html;\n    error_page 403 https://hey.run/helloworld;\n    ssl_session_cache shared:SSL:10m;\n    ssl_session_timeout 1d;\n    ssl_session_tickets off;\n    ssl_early_data on;\n    ssl_stapling on;\n    ssl_stapling_verify on;\n    ssl_prefer_server_ciphers on;\n    add_header Strict-Transport-Security \"max-age=31536000\";\n\n    location grpc\n    {\n        #grpc_pass grpc://xray-grpc-server;\n        grpc_connect_timeout 60s;\n        grpc_read_timeout 720m;\n        grpc_send_timeout 720m;\n        client_max_body_size 0;\n        grpc_set_header X-Real-IP \\$remote_addr;\n        grpc_set_header X-Forwarded-For \\$proxy_add_x_forwarded_for;\n        grpc_set_header Early-Data \\$ssl_early_data;\n    }\n\n    location ws\n    {\n        #proxy_pass http://xray-ws-server;\n        proxy_redirect off;\n        proxy_http_version 1.1;\n        proxy_connect_timeout 60s;\n        proxy_send_timeout 720m;\n        proxy_read_timeout 720m;\n        proxy_buffering off;\n        client_max_body_size 0;\n        proxy_set_header X-Real-IP \\$remote_addr;\n        proxy_set_header X-Forwarded-For \\$proxy_add_x_forwarded_for;\n        proxy_set_header Upgrade \\$http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n        proxy_set_header Host \\$http_host;\n    }\n\n    location /\n    {\n        return 403;\n    }\n}\nEOF\n    modify_nginx_port\n    modify_nginx_other\n    judge \"Nginx $(gettext \"配置修改\")\"\n}\n\nnginx_reality_conf_add() {\n    touch ${nginx_conf}\n    cat >${nginx_conf} <<EOF\n\nstream {\n    map \\$ssl_preread_protocol \\$is_valid_protocol {\n        #TLSv1.2    1;\n        TLSv1.3    1;\n        default    0;\n    }\n\n    map \\$ssl_preread_server_name \\$sni_upstream {\n        include ${nginx_conf_dir}/*.serverNames;\n        default deny;\n    }\n\n    map \"\\$sni_upstream:\\$is_valid_protocol\" \\$final_upstream {\n        # 格式：上游名称:协议标记 => 最终上游\n        ~^reality:1\\$     reality;\n        default          deny;\n    }\n\n    map \\$final_upstream \\$is_abnormal {\n        deny    1;\n        default 0;\n    }\n\n    map \"\\$sni_upstream:\\$is_valid_protocol\" \\$error_type {\n        ~^reality:0\\$     \"tls_error\";\n        ~^deny:1\\$        \"sni_error\";\n        ~^deny:0\\$        \"tls_sni_error\";\n        default          \"other_error\";\n    }\n\n    map \\$error_type \\$is_tls_error {\n        \"tls_error\"      1;\n        #\"tls_sni_error\"  1;\n        default          0;\n    }\n\n    map \\$error_type \\$is_sni_error {\n        \"sni_error\"      1;\n        \"tls_sni_error\"  1;\n        default          0;\n    }\n\n    upstream reality {\n        include ${nginx_conf_dir}/*.realityServers;\n    }\n\n    upstream deny {\n        server 127.0.0.1:9403;\n    }\n\n    log_format tls_error_log '\\$remote_addr [\\$time_local] \"\\$ssl_preread_server_name\" ' \n                             '\\$ssl_preread_protocol \\$status';\n\n    log_format sni_error_log '\\$remote_addr [\\$time_local] \"\\$ssl_preread_server_name\" ' \n                             '\\$ssl_preread_protocol \\$status';\n\n    server {\n        listen 443 reuseport so_keepalive=on backlog=65535;\n        proxy_pass \\$final_upstream;\n        ssl_preread on;\n        proxy_connect_timeout 5s;\n        proxy_timeout 300s;\n        access_log ${nginx_dir}/logs/tls_error.log tls_error_log buffer=8k flush=3s if=\\$is_tls_error;\n        access_log ${nginx_dir}/logs/sni_error.log sni_error_log buffer=8k flush=3s if=\\$is_sni_error;\n    }\n\n    server {\n        listen 127.0.0.1:9403 reuseport;\n        #ssl_preread on;\n        ssl_reject_handshake on;\n        return 444;\n        access_log off;\n        error_log /dev/null;\n    }\n}\nEOF\n    modify_nginx_port\n    modify_nginx_other\n    judge \"Nginx $(gettext \"配置修改\")\"\n}\n\nnginx_reality_servers_add () {\n    touch ${nginx_conf_dir}/127.0.0.1.realityServers\n    cat >${nginx_conf_dir}/127.0.0.1.realityServers <<EOF\nserver 127.0.0.1:9443 weight=50 max_fails=2 fail_timeout=10;\nEOF\n    judge \"Nginx servers $(gettext \"配置修改\")\"\n\n}\n\nnginx_reality_serverNames_add () {\n    touch ${nginx_conf_dir}/${serverNames}.serverNames\n    cat >${nginx_conf_dir}/${serverNames}.serverNames <<EOF\n${serverNames} reality;\nEOF\n    judge \"Nginx serverNames $(gettext \"配置修改\")\"\n\n}\n\nnginx_reality_serverNames_del () {\n    [[ -f \"${nginx_conf_dir}/${serverNames}.serverNames\" ]] && rm -f \"${nginx_conf_dir}/${serverNames}.serverNames\"\n    # modify_nginx_reality_serverNames\n    judge \"Nginx serverNames $(gettext \"配置删除\")\"\n\n}\n\nnginx_servers_conf_add() {\n    touch ${nginx_upstream_conf}\n    cat >${nginx_upstream_conf} <<EOF\nupstream xray-ws-server {\n    include ${nginx_conf_dir}/*.wsServers;\n}\n\nupstream xray-grpc-server {\n    include ${nginx_conf_dir}/*.grpcServers;\n}\nEOF\n    nginx_servers_add\n    judge \"Nginx servers $(gettext \"配置修改\")\"\n}\n\nenable_process_systemd() {\n    if [[ ${tls_mode} == \"TLS\" ]] || [[ ${reality_add_nginx} == \"on\" ]]; then\n        [[ -f \"${nginx_systemd_file}\" ]] && systemctl enable nginx && judge \"$(gettext \"设置 Nginx 开机自启\")\"\n    fi\n    systemctl enable xray\n    judge \"$(gettext \"设置\") Xray $(gettext \"开机自启\")\"\n}\n\ndisable_process_systemd() {\n    if [[ ${tls_mode} == \"TLS\" ]] || [[ ${reality_add_nginx} == \"on\" ]]; then\n        [[ -f \"${nginx_systemd_file}\" ]] && systemctl stop nginx && systemctl disable nginx && judge \"$(gettext \"关闭 Nginx 开机自启\")\"\n    fi\n    systemctl disable xray\n    judge \"$(gettext \"关闭\") Xray $(gettext \"开机自启\")\"\n}\n\nstop_service_all() {\n    [[ -f \"${nginx_systemd_file}\" ]] && systemctl stop nginx && systemctl disable nginx\n    systemctl stop xray\n    systemctl disable xray\n    log_echo \"${OK} ${GreenBG} $(gettext \"停止\") ${Font}\"\n}\n\nservice_restart() {\n    systemctl daemon-reload\n    if [[ ${tls_mode} == \"TLS\" ]] || [[ ${reality_add_nginx} == \"on\" ]]; then\n        [[ -f \"${nginx_systemd_file}\" ]] && systemctl restart nginx && judge \"Nginx $(gettext \"重启\")\"\n    fi\n    systemctl restart xray\n    judge \"Xray $(gettext \"重启\")\"\n}\n\nservice_start() {\n    if [[ ${tls_mode} == \"TLS\" ]] || [[ ${reality_add_nginx} == \"on\" ]]; then\n        [[ -f \"${nginx_systemd_file}\" ]] && systemctl start nginx && judge \"Nginx $(gettext \"启动\")\"\n    fi\n    systemctl start xray\n    judge \"Xray $(gettext \"启动\")\"\n}\n\nservice_stop() {\n    if [[ ${tls_mode} == \"TLS\" ]] || [[ ${reality_add_nginx} == \"on\" ]]; then\n        [[ -f \"${nginx_systemd_file}\" ]] && systemctl stop nginx && judge \"Nginx $(gettext \"停止\")\"\n    fi\n    systemctl stop xray\n    judge \"Xray $(gettext \"停止\")\"\n}\n\nacme_cron_update() {\n    if [[ ${tls_mode} == \"TLS\" ]]; then\n        local crontab_file\n        if [[ \"${ID}\" == \"centos\" ]]; then\n            crontab_file=\"/var/spool/cron/root\"\n        else\n            crontab_file=\"/var/spool/cron/crontabs/root\"\n        fi\n        if [[ -f \"${ssl_update_file}\" ]] && [[ $(crontab -l | grep -c \"ssl_update.sh\") == \"1\" ]]; then\n            echo\n            log_echo \"${Warning} ${GreenBG} $(gettext \"新版本已自动设置证书自动更新\") ${Font}\"\n            log_echo \"${Warning} ${GreenBG} $(gettext \"老版本请及时删除 废弃的 改版证书自动更新\")! ${Font}\"\n            log_echo \"${GreenBG} $(gettext \"已设置改版证书自动更新\") ${Font}\"\n            log_echo \"${GreenBG} $(gettext \"是否需要删除改版证书自动更新 (请删除)\") [${Red}Y${Font}${GreenBG}/N]? ${Font}\"\n            read -r remove_acme_cron_update_fq\n            case $remove_acme_cron_update_fq in\n            [nN][oO] | [nN]) ;;\n            *)\n                sed -i \"/ssl_update.sh/d\" ${crontab_file}\n                rm -rf ${ssl_update_file}\n                judge \"$(gettext \"删除改版证书自动更新\")\"\n                ;;\n\n            esac\n        else\n            echo\n            log_echo \"${OK} ${GreenBG} $(gettext \"新版本已自动设置证书自动更新\") ${Font}\"\n        fi\n    else\n        log_echo \"${Error} ${RedBG} $(gettext \"当前模式不支持此操作\")! ${Font}\"\n    fi\n}\n\ncheck_cert_status() {\n    if [[ ${tls_mode} == \"TLS\" ]]; then\n        host=\"$(info_extraction host)\"\n        if [[ -d \"$HOME/.acme.sh/${host}_ecc\" ]] && [[ -f \"$HOME/.acme.sh/${host}_ecc/${host}.key\" ]] && [[ -f \"$HOME/.acme.sh/${host}_ecc/${host}.cer\" ]]; then\n            modifyTime=$(stat \"$HOME/.acme.sh/${host}_ecc/${host}.cer\" | sed -n '7,6p' | awk '{print $2\" \"$3\" \"$4\" \"$5}')\n            modifyTime=$(date +%s -d \"${modifyTime}\")\n            currentTime=$(date +%s)\n            ((stampDiff = currentTime - modifyTime))\n            ((days = stampDiff / 86400))\n            ((remainingDays = 90 - days))\n            tlsStatus=${remainingDays}\n            [[ ${remainingDays} -le 0 ]] && tlsStatus=\"${Red}$(gettext \"已过期\")${Font}\"\n            echo\n            log_echo \"${Green}$(gettext \"证书生成日期\"): $(date -d \"@${modifyTime}\" +\"%F %H:%M:%S\")${Font}\"\n            log_echo \"${Green}$(gettext \"证书生成天数\"): ${days}${Font}\"\n            log_echo \"${Green}$(gettext \"证书剩余天数\"): ${tlsStatus}${Font}\"\n            echo\n            if [[ ${remainingDays} -le 0 ]]; then\n                echo\n                log_echo \"${Warning} ${YellowBG} $(gettext \"是否立即更新证书\") [Y/${Red}N${Font}${YellowBG}]? ${Font}\"\n                read -r cert_update_manuel_fq\n                case $cert_update_manuel_fq in\n                [yY][eE][sS] | [yY])\n                    systemctl stop xray\n                    judge \"Xray $(gettext \"停止\")\"\n                    cert_update_manuel\n                    ;;\n                *) ;;\n                esac\n            fi\n        else\n            log_echo \"${Error} ${RedBG} $(gettext \"证书签发工具不存在, 请确认是否证书为脚本签发\")! ${Font}\"\n        fi\n    else\n        log_echo \"${Error} ${RedBG} $(gettext \"当前模式不支持此操作\")! ${Font}\"\n    fi\n}\n\ncert_update_manuel() {\n    if [[ ${tls_mode} == \"TLS\" ]]; then\n        if [[ -f \"${amce_sh_file}\" ]]; then\n            \"/root/.acme.sh\"/acme.sh --cron --home \"/root/.acme.sh\"\n        else\n            log_echo \"${Error} ${RedBG} $(gettext \"证书签发工具不存在, 请确认是否证书为脚本签发\")! ${Font}\"\n        fi\n        host=\"$(info_extraction host)\"\n        \"$HOME\"/.acme.sh/acme.sh --installcert -d \"${host}\" --fullchainpath ${ssl_chainpath}/xray.crt --keypath ${ssl_chainpath}/xray.key --ecc\n        judge \"$(gettext \"证书更新\")\"\n        service_restart\n    else\n        log_echo \"${Error} ${RedBG} $(gettext \"当前模式不支持此操作\")! ${Font}\"\n    fi\n}\n\nset_fail2ban() {\n    mf_remote_url=\"https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/fail2ban_manager.sh\"\n    if [ ! -f \"${idleleo_dir}/fail2ban_manager.sh\" ]; then\n        log_echo \"${Info} ${Green} $(gettext \"本地文件 fail2ban_manager.sh 不存在, 正在下载\")... ${Font}\"\n        curl -sL \"$mf_remote_url\" -o \"${idleleo_dir}/fail2ban_manager.sh\"\n        if [ $? -ne 0 ]; then\n            log_echo \"${Error} ${RedBG} $(gettext \"下载失败, 请手动下载并安装新版本\") ${Font}\"\n            return 1\n        fi\n        chmod +x \"${idleleo_dir}/fail2ban_manager.sh\"\n    fi\n    source \"${idleleo_dir}/fail2ban_manager.sh\"\n}\n\nsetup_auto_clean_logs() {\n    local logrotate_config\n    echo\n\n    log_echo \"${GreenBG} $(gettext \"是否需要设置自动清理日志\") [${Red}Y${Font}${GreenBG}/N]? ${Font}\"\n    read -r auto_clean_logs_fq\n    case $auto_clean_logs_fq in\n    [nN][oO] | [nN])\n        log_echo \"${OK} ${Green} $(gettext \"已跳过设置自动清理日志\") ${Font}\"\n        ;;\n    *)\n        log_echo \"${OK} ${Green} $(gettext \"将在 每周三 04:00 自动清空日志\") ${Font}\"\n\n        logrotate_config=\"/etc/logrotate.d/xray_log_cleanup\"\n\n        if [[ -f \"$logrotate_config\" ]]; then\n            log_echo \"${Warning} ${YellowBG} $(gettext \"已设置自动清理日志任务\") ${Font}\"\n            log_echo \"${GreenBG} $(gettext \"是否需要删除现有自动清理日志任务\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n            read -r delete_task\n            case $delete_task in\n            [yY][eE][sS] | [yY])\n                rm -f \"$logrotate_config\"\n                judge \"$(gettext \"删除自动清理日志任务\")\"\n                ;;\n            *)\n                log_echo \"${OK} ${Green} $(gettext \"保留现有自动清理日志任务\") ${Font}\"\n                return\n                ;;\n            esac\n        fi\n\n        echo \"/var/log/xray/*.log ${nginx_dir}/logs/*.log {\" > \"$logrotate_config\"\n        echo \"    weekly\" >> \"$logrotate_config\"\n        echo \"    rotate 3\" >> \"$logrotate_config\"\n        echo \"    compress\" >> \"$logrotate_config\"\n        echo \"    missingok\" >> \"$logrotate_config\"\n        echo \"    notifempty\" >> \"$logrotate_config\"\n        echo \"    create 640 nobody nogroup\" >> \"$logrotate_config\"\n        echo \"}\" >> \"$logrotate_config\"\n\n        judge \"$(gettext \"设置自动清理日志\")\"\n        ;;\n    esac\n}\n\nclean_logs() {\n    echo\n    log_echo \"${Green} $(gettext \"检测到日志文件大小如下:\") ${Font}\"\n    log_echo \"${Green}$(du -sh /var/log/xray ${nginx_dir}/logs 2>/dev/null)${Font}\"\n    timeout \"$(gettext \"即将清除\")!\"\n    for i in $(find /var/log/xray/ ${nginx_dir}/logs -name \"*.log\" 2>/dev/null); do cat /dev/null >\"$i\" 2>/dev/null; done\n    judge \"$(gettext \"日志清理\")\"\n    setup_auto_clean_logs\n}\n\nvless_qr_config_tls_ws() {\n    cat >${xray_qr_config_file} <<-EOF\n{\n    \"shell_mode\": \"${shell_mode}\",\n    \"ws_grpc_mode\": \"${ws_grpc_mode}\",\n    \"host\": \"${domain}\",\n    \"ip_version\": \"${ip_version}\",\n    \"port\": ${port},\n    \"ws_port\": \"${artxport}\",\n    \"grpc_port\": \"${artgport}\",\n    \"tls\": \"TLS\",\n    \"email\": \"${custom_email}\",\n    \"idc\": \"${UUID5_char}\",\n    \"id\": \"${UUID}\",\n    \"net\": \"ws/gRPC\",\n    \"path\": \"${artpath}\",\n    \"serviceName\": \"${artserviceName}\",\n    \"shell_version\": \"${shell_version}\",\n    \"xray_version\": \"${xray_version}\",\n    \"nginx_build_version\": \"${nginx_build_version}\"\n}\nEOF\n    info_extraction_all=$(jq -rc . ${xray_qr_config_file})\n}\n\nvless_qr_config_reality() {\n    cat >${xray_qr_config_file} <<-EOF\n{\n    \"shell_mode\": \"${shell_mode}\",\n    \"ws_grpc_mode\": \"${ws_grpc_mode}\",\n    \"host\": \"${local_ip}\",\n    \"ip_version\": \"${ip_version}\",\n    \"port\": ${port},\n    \"email\": \"${custom_email}\",\n    \"idc\": \"${UUID5_char}\",\n    \"id\": \"${UUID}\",\n    \"net\": \"raw\",\n    \"tls\": \"Reality\",\n    \"target\": \"${target}\",\n    \"serverNames\":\"${serverNames}\",\n    \"privateKey\":\"${privateKey}\",\n    \"password\":\"${password}\",\n    \"shortIds\":\"${shortIds}\",\n    \"reality_add_nginx\": \"${reality_add_nginx}\",\n    \"reality_add_balance\": \"${reality_add_balance}\",\n    \"reality_add_more\": \"${reality_add_more}\",\n    \"ws_port\": \"${artxport}\",\n    \"grpc_port\": \"${artgport}\",\n    \"ws_path\": \"${artpath}\",\n    \"grpc_serviceName\": \"${artserviceName}\",\n    \"shell_version\": \"${shell_version}\",\n    \"xray_version\": \"${xray_version}\"\n}\nEOF\n    if [[ ${reality_add_nginx} == \"on\" ]]; then\n        jq --arg nginx_build_version \"${nginx_build_version}\" '. + {\"nginx_build_version\": $nginx_build_version}' \"${xray_qr_config_file}\" > \"${xray_qr_config_file}.tmp\"\n        mv \"${xray_qr_config_file}.tmp\" \"${xray_qr_config_file}\"\n    fi\n    info_extraction_all=$(jq -rc . ${xray_qr_config_file})\n}\n\nvless_qr_config_xtls_only() {\n    if [[ \"on\" == ${old_config_status} ]]; then\n        port=$(info_extraction port)\n    fi\n    cat >${xray_qr_config_file} <<-EOF\n{\n    \"shell_mode\": \"${shell_mode}\",\n    \"host\": \"${local_ip}\",\n    \"ip_version\": \"${ip_version}\",\n    \"port\": \"${port}\",\n    \"tls\": \"XTLS\",\n    \"email\": \"${custom_email}\",\n    \"idc\": \"${UUID5_char}\",\n    \"id\": \"${UUID}\",\n    \"net\": \"raw\",\n    \"security\": \"none\",\n    \"flow\": \"xtls-rprx-vision\",\n    \"shell_version\": \"${shell_version}\",\n    \"xray_version\": \"${xray_version}\"\n}\nEOF\n    info_extraction_all=$(jq -rc . ${xray_qr_config_file})\n}\n\nvless_qr_config_ws_only() {\n    cat >${xray_qr_config_file} <<-EOF\n{\n    \"shell_mode\": \"${shell_mode}\",\n    \"ws_grpc_mode\": \"${ws_grpc_mode}\",\n    \"host\": \"${local_ip}\",\n    \"ip_version\": \"${ip_version}\",\n    \"ws_port\": \"${artxport}\",\n    \"grpc_port\": \"${artgport}\",\n    \"tls\": \"None\",\n    \"email\": \"${custom_email}\",\n    \"idc\": \"${UUID5_char}\",\n    \"id\": \"${UUID}\",\n    \"net\": \"ws/gRPC\",\n    \"path\": \"${artpath}\",\n    \"serviceName\": \"${artserviceName}\",\n    \"shell_version\": \"${shell_version}\",\n    \"xray_version\": \"${xray_version}\"\n}\nEOF\n    info_extraction_all=$(jq -rc . ${xray_qr_config_file})\n}\n\nvless_urlquote() {\n    [[ $# = 0 ]] && return 1\n    python3 -c \"import urllib.request,sys;print(urllib.request.quote(sys.argv[1]))\" \"$1\"\n}\n\nvless_qr_link_image() {\n    if [[ ${tls_mode} == \"TLS\" ]]; then\n        if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n            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\"\n        elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n            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\"\n        elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n            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\"\n            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\"\n        fi\n    elif [[ ${tls_mode} == \"Reality\" ]]; then\n        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\"\n        if [[ ${reality_add_more} == \"on\" ]]; then\n            if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n                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\"\n            elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n                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\"\n            elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n                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\"\n                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\"\n            fi\n        fi\n    elif [[ ${tls_mode} == \"None\" ]]; then\n        if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n            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\"\n        elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n            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\"\n        elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n            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\"\n            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\"\n        fi\n    elif [[ ${tls_mode} == \"XTLS\" ]]; then\n        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\"\n    fi\n\n    # 生成Clash配置\n    generate_clash_config() {\n        local type=$1\n        local port=$2\n        local path=$3\n        local service_name=$4\n        local security=$5\n        local flow=$6\n        local pbk=$7\n        local sni=$8\n        local target=$9\n        local sid=${10}\n        local tls=${11}\n        \n        local clash_name=\"VLESS-$(info_extraction host)-${type}\"\n        local clash_config=\"\"\n        \n        if [[ ${type} == \"ws\" ]]; then\n            clash_config=\"  - name: ${clash_name}\n    type: vless\n    server: $(info_extraction host)\n    port: ${port}\n    uuid: $(info_extraction id)\n    client-fingerprint: chrome\n    tls: ${tls}\n    flow: ${flow}\n    network: ws\n    ws-opts:\n      path: ${path}\n      headers:\n        Host: $(info_extraction host)\n    skip-cert-verify: false\"\n            \n        elif [[ ${type} == \"grpc\" ]]; then\n            clash_config=\"  - name: ${clash_name}\n    type: vless\n    server: $(info_extraction host)\n    port: ${port}\n    uuid: $(info_extraction id)\n    client-fingerprint: chrome\n    tls: ${tls}\n    flow: ${flow}\n    network: grpc\n    grpc-opts:\n      grpc-service-name: ${service_name}\n    skip-cert-verify: false\"\n            \n        elif [[ ${type} == \"tcp\" ]]; then\n            clash_config=\"  - name: ${clash_name}\n    type: vless\n    server: $(info_extraction host)\n    port: ${port}\n    uuid: $(info_extraction id)\n    client-fingerprint: chrome\n    tls: ${tls}\n    flow: ${flow}\n    network: tcp\n    skip-cert-verify: false\"\n        fi\n        \n        # 添加Reality相关配置\n        if [[ ${security} == \"reality\" ]]; then\n            clash_config=\"${clash_config}\n    servername: ${sni}\n    reality-opts:\n      public-key: ${pbk}\n      short-id: ${sid}\"\n        fi\n        \n        echo \"${clash_config}\"\n    }\n\n    # 生成Clash配置内容（仅节点部分）\n    clash_config_content=\"proxies:\"\n    \n    if [[ ${tls_mode} == \"TLS\" ]]; then\n        if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n            clash_config_content=\"${clash_config_content}\n$(generate_clash_config \"ws\" \"$(info_extraction port)\" \"$(info_extraction path)\" \"\" \"tls\" \"\" \"\" \"\" \"\" \"\" \"true\")\"\n        elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n            clash_config_content=\"${clash_config_content}\n$(generate_clash_config \"grpc\" \"$(info_extraction port)\" \"\" \"$(info_extraction serviceName)\" \"tls\" \"\" \"\" \"\" \"\" \"\" \"true\")\"\n        elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n            clash_config_content=\"${clash_config_content}\n$(generate_clash_config \"ws\" \"$(info_extraction port)\" \"$(info_extraction path)\" \"\" \"tls\" \"\" \"\" \"\" \"\" \"\" \"true\")\n$(generate_clash_config \"grpc\" \"$(info_extraction port)\" \"\" \"$(info_extraction serviceName)\" \"tls\" \"\" \"\" \"\" \"\" \"\" \"true\")\"\n        fi\n    elif [[ ${tls_mode} == \"Reality\" ]]; then\n        # Reality模式下的TCP节点\n        clash_config_content=\"${clash_config_content}\n$(generate_clash_config \"tcp\" \"$(info_extraction port)\" \"\" \"\" \"reality\" \"xtls-rprx-vision\" \"$(info_extraction password)\" \"$(info_extraction serverNames)\" \"$(info_extraction target)\" \"$(info_extraction shortIds)\" \"true\")\"\n        \n        # 如果启用了额外配置，则生成ws和grpc节点\n        if [[ ${reality_add_more} == \"on\" ]]; then\n            if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n                clash_config_content=\"${clash_config_content}\n$(generate_clash_config \"ws\" \"$(info_extraction ws_port)\" \"$(info_extraction path)\" \"\" \"none\" \"\" \"\" \"\" \"\" \"\" \"\" \"false\")\"\n            elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n                clash_config_content=\"${clash_config_content}\n$(generate_clash_config \"grpc\" \"$(info_extraction grpc_port)\" \"\" \"$(info_extraction serviceName)\" \"none\" \"\" \"\" \"\" \"\" \"\" \"\" \"false\")\"\n            elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n                clash_config_content=\"${clash_config_content}\n$(generate_clash_config \"ws\" \"$(info_extraction ws_port)\" \"$(info_extraction path)\" \"\" \"none\" \"\" \"\" \"\" \"\" \"\" \"\" \"false\")\n$(generate_clash_config \"grpc\" \"$(info_extraction grpc_port)\" \"\" \"$(info_extraction serviceName)\" \"none\" \"\" \"\" \"\" \"\" \"\" \"\" \"false\")\"\n            fi\n        fi\n    elif [[ ${tls_mode} == \"None\" ]]; then\n        if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n            clash_config_content=\"${clash_config_content}\n$(generate_clash_config \"ws\" \"$(info_extraction ws_port)\" \"$(info_extraction path)\" \"\" \"none\" \"\" \"\" \"\" \"\" \"\" \"\" \"false\")\"\n        elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n            clash_config_content=\"${clash_config_content}\n$(generate_clash_config \"grpc\" \"$(info_extraction grpc_port)\" \"\" \"$(info_extraction serviceName)\" \"none\" \"\" \"\" \"\" \"\" \"\" \"\" \"false\")\"\n        elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n            clash_config_content=\"${clash_config_content}\n$(generate_clash_config \"ws\" \"$(info_extraction ws_port)\" \"$(info_extraction path)\" \"\" \"none\" \"\" \"\" \"\" \"\" \"\" \"\" \"false\")\n$(generate_clash_config \"grpc\" \"$(info_extraction grpc_port)\" \"\" \"$(info_extraction serviceName)\" \"none\" \"\" \"\" \"\" \"\" \"\" \"\" \"false\")\"\n        fi\n    fi\n    \n    {\n        echo\n        log_echo \"${Red} —————————————— Xray $(gettext \"链接分享\") —————————————— ${Font}\"\n        if [[ ${tls_mode} == \"Reality\" ]]; then\n            log_echo \"${Red} URL $(gettext \"分享链接\"):${Font} ${vless_link}\"\n            log_echo \"${Red} $(gettext \"二维码\"): ${Font}\"\n            echo -n \"${vless_link}\" | qrencode -o - -t utf8\n            echo\n        fi\n        if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n            log_echo \"${Red} ws URL $(gettext \"分享链接\"):${Font} ${vless_ws_link}\"\n            log_echo \"${Red} $(gettext \"二维码\"): ${Font}\"\n            echo -n \"${vless_ws_link}\" | qrencode -o - -t utf8\n            echo\n        elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n            log_echo \"${Red} gRPC URL $(gettext \"分享链接\"):${Font} ${vless_grpc_link}\"\n            log_echo \"${Red} $(gettext \"二维码\"): ${Font}\"\n            echo -n \"${vless_grpc_link}\" | qrencode -o - -t utf8\n            echo\n        elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n            log_echo \"${Red} ws URL $(gettext \"分享链接\"):${Font} ${vless_ws_link}\"\n            log_echo \"${Red} $(gettext \"二维码\"): ${Font}\"\n            echo -n \"${vless_ws_link}\" | qrencode -o - -t utf8\n            echo\n            log_echo \"${Red} gRPC URL $(gettext \"分享链接\"):${Font} ${vless_grpc_link}\"\n            log_echo \"${Red} $(gettext \"二维码\"): ${Font}\"\n            echo -n \"${vless_grpc_link}\" | qrencode -o - -t utf8\n            echo\n        fi\n        \n        # 输出Clash配置\n        log_echo \"${Red} —————————————— Clash $(gettext \"配置分享\") —————————————— ${Font}\"\n        log_echo \"${Red} Clash $(gettext \"配置分享\"): ${Font}\"\n        echo \"${clash_config_content}\"\n        echo\n        # 添加结束线\n        log_echo \"${Red} ——————————————————  END  —————————————————— ${Font}\"\n        echo\n    } >>\"${xray_info_file}\"\n    \n    # 保存Clash配置到文件\n    echo \"${clash_config_content}\" > \"${xray_info_file%.*}_clash.yaml\"\n}\n\nvless_link_image_choice() {\n    echo\n    log_echo \"${GreenBG} $(gettext \"生成分享链接\"): ${Font}\"\n    vless_qr_link_image\n}\n\ninfo_extraction() {\n    local result\n    result=$(echo \"${info_extraction_all}\" | jq -r \".$1 // empty\" 2>/dev/null)\n    local jq_exit_code=$?\n\n    echo \"$result\"\n\n    if [[ $jq_exit_code -ne 0 ]]; then\n        read_config_status=0\n    fi\n}\n\ninstall_iftop() {\n    if ! command -v iftop &>/dev/null; then\n        log_echo \"${Info} ${Green} $(gettext \"正在安装\") iftop... ${Font}\"\n        check_system\n        pkg_install \"iftop\"\n    else\n        log_echo \"${OK} ${GreenBG} $(gettext \"已安装\") iftop ${Font}\"\n    fi\n}\n\nmonitor_traffic_with_iftop() {\n    if [[ ! -f \"${xray_qr_config_file}\" ]]; then\n        log_echo \"${Warning} ${YellowBG} $(gettext \"请先安装\") Xray ! ${Font}\"\n        exit 1\n    fi\n\n    install_iftop\n\n    local port\n    local interface\n\n    port=$(info_extraction port)\n    if [[ -z \"${port}\" ]]; then\n        log_echo \"${Warning} ${YellowBG} $(gettext \"请先安装\") Xray ! ${Font}\"\n        exit 1\n    fi\n\n    interface=$(ip route show | awk '/default/ {print $5; exit}')\n    if [[ -z \"${interface}\" ]]; then\n        interface=\"any\"\n        log_echo \"${Warning} ${YellowBG} $(gettext \"无法获取网卡, 将监控所有网卡\") ${Font}\"\n    else\n        log_echo \"${OK} ${GreenBG} $(gettext \"监控网卡\"): ${interface} ${Font}\"\n    fi\n\n    log_echo \"${OK} ${GreenBG} $(gettext \"监控端口\"): ${port} ${Font}\"\n    echo\n    log_echo \"${Info} ${Green} $(gettext \"按 q 键退出 iftop\") ${Font}\"\n    timeout \"$(gettext \"启动\") iftop\"\n    sleep 3\n\n    if [[ \"${interface}\" == \"any\" ]]; then\n        iftop -i any -n -f \"port ${port}\"\n    else\n        iftop -i \"${interface}\" -n -f \"port ${port}\"\n    fi\n}\n\nbasic_information() {\n    {\n        echo\n        case ${shell_mode} in\n        Nginx+ws+TLS)\n            log_echo \"${OK} ${GreenBG} Xray+Nginx+ws+TLS $(gettext \"安装成功\") ${Font}\"\n            ;;\n        Nginx+gRPC+TLS)\n            log_echo \"${OK} ${GreenBG} Xray+Nginx+grpc+TLS $(gettext \"安装成功\") ${Font}\"\n            ;;\n        Nginx+ws+gRPC+TLS)\n            log_echo \"${OK} ${GreenBG} Xray+Nginx+ws+gRPC+TLS $(gettext \"安装成功\") ${Font}\"\n            ;;\n        Reality)\n            log_echo \"${OK} ${GreenBG} Xray+Reality $(gettext \"安装成功\") ${Font}\"\n            ;;\n        Reality+ws)\n            log_echo \"${OK} ${GreenBG} Xray+Reality+ws $(gettext \"安装成功\") ${Font}\"\n            ;;\n        Reality+gRPC)\n            log_echo \"${OK} ${GreenBG} Xray+Reality+gRPC $(gettext \"安装成功\") ${Font}\"\n            ;;\n        Reality+ws+gRPC)\n            log_echo \"${OK} ${GreenBG} Xray+Reality+ws+gRPC $(gettext \"安装成功\") ${Font}\"\n            ;;\n        ws\\ ONLY)\n            log_echo \"${OK} ${GreenBG} ws ONLY $(gettext \"安装成功\") ${Font}\"\n            ;;\n        gRPC\\ ONLY)\n            log_echo \"${OK} ${GreenBG} gRPC ONLY $(gettext \"安装成功\") ${Font}\"\n            ;;\n        ws+gRPC\\ ONLY)\n            log_echo \"${OK} ${GreenBG} ws+gRPC ONLY $(gettext \"安装成功\") ${Font}\"\n            ;;\n        XTLS\\ ONLY)\n            log_echo \"${OK} ${GreenBG} Xray+XTLS $(gettext \"安装成功\") ${Font}\"\n            ;;\n        esac\n        echo\n        log_echo \"${Warning} ${YellowBG} VLESS $(gettext \"目前分享链接规范为实验阶段, 请自行判断是否适用\") ${Font}\"\n        echo\n        log_echo \"${Red} —————————————— Xray $(gettext \"配置信息\") —————————————— ${Font}\"\n        log_echo \"${Red} $(gettext \"主机\") (host):${Font} $(info_extraction host) \"\n        if [[ ${tls_mode} == \"None\" ]]; then\n            if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n                log_echo \"${Red} ws $(gettext \"端口\") (port):${Font} $(info_extraction ws_port) \"\n            elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n                log_echo \"${Red} gRPC $(gettext \"端口\") (port):${Font} $(info_extraction grpc_port) \"\n            elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n                log_echo \"${Red} ws $(gettext \"端口\") (port):${Font} $(info_extraction ws_port) \"\n                log_echo \"${Red} gRPC $(gettext \"端口\") (port):${Font} $(info_extraction grpc_port) \"\n            fi\n        else\n            log_echo \"${Red} $(gettext \"端口\") (port):${Font} $(info_extraction port) \"\n        fi\n        if [[ ${tls_mode} == \"TLS\" ]]; then\n            if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n                log_echo \"${Red} Xray ws $(gettext \"端口\") (inbound_port):${Font} $(info_extraction ws_port) \"\n            elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n                log_echo \"${Red} Xray gRPC $(gettext \"端口\") (inbound_port):${Font} $(info_extraction grpc_port) \"\n            elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n                log_echo \"${Red} Xray ws $(gettext \"端口\") (inbound_port):${Font} $(info_extraction ws_port) \"\n                log_echo \"${Red} Xray gRPC $(gettext \"端口\") (inbound_port):${Font} $(info_extraction grpc_port) \"\n            fi\n        fi\n        log_echo \"${Red} UUIDv5 $(gettext \"映射字符串\"):${Font} $(info_extraction idc)\"\n        log_echo \"${Red} $(gettext \"用户id\") (UUID):${Font} $(info_extraction id)\"\n\n        log_echo \"${Red} $(gettext \"加密\") (encryption):${Font} None \"\n        log_echo \"${Red} $(gettext \"传输协议\") (network):${Font} $(info_extraction net) \"\n        log_echo \"${Red} $(gettext \"底层传输安全\") (tls):${Font} $(info_extraction tls) \"\n        if [[ ${tls_mode} != \"Reality\" && ${tls_mode} != \"XTLS\" ]]; then\n            if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n                log_echo \"${Red} $(gettext \"路径\") (path $(gettext \"不要落下\")/):${Font} /$(info_extraction path) \"\n            elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n                log_echo \"${Red} serviceName ($(gettext \"不需要加\")/):${Font} $(info_extraction serviceName) \"\n            elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n                log_echo \"${Red} $(gettext \"路径\") (path $(gettext \"不要落下\")/):${Font} /$(info_extraction path) \"\n                log_echo \"${Red} serviceName ($(gettext \"不需要加\")/):${Font} $(info_extraction serviceName) \"\n            fi\n        else\n            log_echo \"${Red} $(gettext \"流控\") (flow):${Font} xtls-rprx-vision \"\n            if [[ ${tls_mode} == \"Reality\" ]]; then\n                log_echo \"${Red} target:${Font} $(info_extraction target) \"\n                log_echo \"${Red} serverNames:${Font} $(info_extraction serverNames) \"\n                log_echo \"${Red} privateKey:${Font} $(info_extraction privateKey) \"\n                log_echo \"${Red} Password:${Font} $(info_extraction password) \"\n                log_echo \"${Red} shortIds:${Font} $(info_extraction shortIds) \"\n                if [[ \"$reality_add_more\" == \"on\" ]]; then\n                    if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n                        log_echo \"${Red} ws $(gettext \"端口\") (port):${Font} $(info_extraction ws_port) \"\n                        log_echo \"${Red} ws $(gettext \"路径\") ($(gettext \"不要落下\")/):${Font} /$(info_extraction ws_path) \"\n                    elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n                        log_echo \"${Red} gRPC $(gettext \"端口\") (port):${Font} $(info_extraction grpc_port) \"\n                        log_echo \"${Red} gRPC serviceName ($(gettext \"不需要加\")/):${Font} $(info_extraction grpc_serviceName) \"\n                    elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n                        log_echo \"${Red} ws $(gettext \"端口\") (port):${Font} $(info_extraction ws_port) \"\n                        log_echo \"${Red} ws $(gettext \"路径\") ($(gettext \"不要落下\")/):${Font} /$(info_extraction ws_path) \"\n                        log_echo \"${Red} gRPC $(gettext \"端口\") (port):${Font} $(info_extraction grpc_port) \"\n                        log_echo \"${Red} gRPC serviceName ($(gettext \"不需要加\")/):${Font} $(info_extraction grpc_serviceName) \"\n                    fi\n                fi\n            fi\n        fi\n    } >\"${xray_info_file}\"\n}\n\nshow_information() {\n    cat \"${xray_info_file}\"\n}\n\nssl_judge_and_install() {\n    cd $HOME\n    echo\n    log_echo \"${GreenBG} $(gettext \"即将申请证书, 支持使用自定义证书\") ${Font}\"\n    log_echo \"${Green} $(gettext \"如需使用自定义证书, 请按如下步骤:\") ${Font}\"\n    log_echo \" $(gettext \"1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)\")\"\n    log_echo \" $(gettext \"2. 将重命名后的证书文件放入\") ${ssl_chainpath} $(gettext \"目录后再运行脚本\")\"\n    log_echo \" $(gettext \"3. 重新运行脚本\")\"\n    log_echo \"${GreenBG} $(gettext \"是否继续\") [${Red}Y${Font}${GreenBG}/N]? ${Font}\"\n    read -r ssl_continue\n    case $ssl_continue in\n    [nN][oO] | [nN])\n        exit 0\n        ;;\n    *)\n        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\n            log_echo \"${GreenBG} $(gettext \"所有证书文件均已存在, 是否保留\") [${Red}Y${Font}${GreenBG}/N]? ${Font}\"\n            read -r ssl_delete_1\n            case $ssl_delete_1 in\n            [nN][oO] | [nN])\n                delete_tls_key_and_crt\n                rm -rf ${ssl_chainpath}/*\n                log_echo \"${OK} ${GreenBG} $(gettext \"已删除\") ${Font}\"\n                ssl_install\n                acme\n                ;;\n            *)\n                chown -fR nobody:nogroup ${ssl_chainpath}/*\n                judge \"$(gettext \"证书应用\")\"\n                ;;\n            esac\n        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\n            log_echo \"${GreenBG} $(gettext \"证书文件已存在, 是否保留\") [${Red}Y${Font}${GreenBG}/N]? ${Font}\"\n            read -r ssl_delete_2\n            case $ssl_delete_2 in\n            [nN][oO] | [nN])\n                rm -rf ${ssl_chainpath}/*\n                log_echo \"${OK} ${GreenBG} $(gettext \"已删除\") ${Font}\"\n                ssl_install\n                acme\n                ;;\n            *)\n                chown -fR nobody:nogroup ${ssl_chainpath}/*\n                judge \"$(gettext \"证书应用\")\"\n                ssl_self=\"on\"\n                ;;\n            esac\n        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\n            log_echo \"${GreenBG} $(gettext \"证书签发残留文件已存在, 是否保留\") [${Red}Y${Font}${GreenBG}/N]? ${Font}\"\n            read -r ssl_delete_3\n            case $ssl_delete_3 in\n            [nN][oO] | [nN])\n                delete_tls_key_and_crt\n                log_echo \"${OK} ${GreenBG} $(gettext \"已删除\") ${Font}\"\n                ssl_install\n                acme\n                ;;\n            *)\n                \"$HOME\"/.acme.sh/acme.sh --installcert -d \"${domain}\" --fullchainpath ${ssl_chainpath}/xray.crt --keypath ${ssl_chainpath}/xray.key --ecc\n                chown -fR nobody:nogroup ${ssl_chainpath}/*\n                judge \"$(gettext \"证书应用\")\"\n                ;;\n            esac\n        else\n            ssl_install\n            acme\n        fi\n        ;;\n    esac\n}\n\nnginx_systemd() {\n    cat >${nginx_systemd_file} <<EOF\n[Unit]\nDescription=The NGINX HTTP and reverse proxy server\nAfter=syslog.target network.target remote-fs.target nss-lookup.target\n\n[Service]\nType=forking\nPIDFile=${nginx_dir}/logs/nginx.pid\nExecStartPre=${nginx_dir}/sbin/nginx -t\nExecStart=${nginx_dir}/sbin/nginx -c ${nginx_dir}/conf/nginx.conf\nExecReload=${nginx_dir}/sbin/nginx -s reload\nExecStop=/bin/kill -s QUIT \\$MAINPID\nPrivateTmp=true\n\n[Install]\nWantedBy=multi-user.target\nEOF\n\n    judge \"Nginx systemd ServerFile $(gettext \"添加\")\"\n    systemctl daemon-reload\n}\n\ntls_type() {\n    if [[ -f \"${nginx_conf}\" ]]; then\n        if [[ ${tls_mode} == \"TLS\" ]]; then\n            echo\n            log_echo \"${GreenBG} $(gettext \"请选择支持的 TLS 版本\") (default:2): ${Font}\"\n            log_echo \"${GreenBG} $(gettext \"建议选择 TLSv1.3 only (安全模式)\") ${Font}\"\n            echo -e \"1: TLSv1.2 and TLSv1.3 ($(gettext \"兼容模式\"))\"\n            echo -e \"${Red}2${Font}: TLSv1.3 only ($(gettext \"安全模式\"))\"\n            local choose_tls\n            read_optimize \"$(gettext \"请输入\"): \" \"choose_tls\" 2 1 2 \"$(gettext \"请输入有效的数字\")!\"\n            if [[ ${choose_tls} == 1 ]]; then\n                log_echo \"${Error} ${RedBG} $(gettext \"由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)\")! ${Font}\"\n                tls_type\n            else\n                sed -i \"s/^\\( *\\)ssl_protocols\\( *\\).*/\\1ssl_protocols\\2TLSv1.3;/\" $nginx_conf\n                log_echo \"${OK} ${GreenBG} $(gettext \"已切换至\") TLSv1.3 only ${Font}\"\n            fi\n        elif [[ ${tls_mode} == \"Reality\" && ${reality_add_nginx} == \"on\" ]]; then\n            echo\n            log_echo \"${GreenBG} $(gettext \"请选择 TLS 版本\") (default:1): ${Font}\"\n            log_echo \"${GreenBG} $(gettext \"建议选择 TLSv1.3 (安全模式)\") ${Font}\"\n            echo -e \"${Red}1${Font}: TLSv1.3 ($(gettext \"默认\"))\"\n            echo -e \"2: TLSv1.2+ ($(gettext \"兼容模式\"))\"\n            local tls_version_choice\n            read_optimize \"$(gettext \"请输入\"): \" \"tls_version_choice\" 1 1 2 \"$(gettext \"请输入有效的数字\")!\"\n            if [[ ${tls_version_choice} == 2 ]]; then\n                sed -i \"s/^\\( *\\)#TLSv1.2\\( *\\)1;\\( *\\)$/\\1TLSv1.2\\21;\\3/\" $nginx_conf\n                log_echo \"${OK} ${GreenBG} $(gettext \"已切换至\") TLSv1.2+ ${Font}\"\n            else\n                sed -i \"s/^\\( *\\)TLSv1.2\\( *\\)1;\\( *\\)$/\\1#TLSv1.2\\21;\\3/\" $nginx_conf\n                log_echo \"${OK} ${GreenBG} $(gettext \"已切换至\") TLSv1.3 ${Font}\"\n            fi\n        else\n            log_echo \"${Error} ${RedBG} $(gettext \"当前模式不支持\") ${Font}\"\n            return 1\n        fi\n        [[ -f \"${nginx_systemd_file}\" ]] && systemctl restart nginx && judge \"Nginx $(gettext \"重启\")\"\n        systemctl restart xray\n        judge \"Xray $(gettext \"重启\")\"\n    else\n        log_echo \"${Error} ${RedBG} $(gettext \"Nginx配置文件不存在 或 当前模式不支持\") ${Font}\"\n    fi\n}\n\nreset_vless_qr_config() {\n    [[ -f \"${xray_qr_config_file}\" ]] && info_extraction_all=$(jq -rc . ${xray_qr_config_file})\n    basic_information\n    vless_qr_link_image\n    show_information\n}\n\nreset_UUID() {\n    if [[ -f \"${xray_qr_config_file}\" ]] && [[ -f \"${xray_conf}\" ]]; then\n        UUID_set\n        modify_UUID\n        jq --arg uuid \"${UUID}\" \\\n           --arg uuid5_char \"${UUID5_char}\" \\\n           '.id = $uuid | .idc = $uuid5_char' \"${xray_qr_config_file}\" > \"${xray_qr_config_file}.tmp\"\n        mv \"${xray_qr_config_file}.tmp\" \"${xray_qr_config_file}\"\n        service_restart\n        reset_vless_qr_config\n    else\n        log_echo \"${Warning} ${YellowBG} $(gettext \"请先安装\") Xray ! ${Font}\"\n    fi\n}\n\nreset_port() {\n    if [[ -f \"${xray_qr_config_file}\" ]] && [[ -f \"${xray_conf}\" ]]; then\n        if [[ ${tls_mode} == \"TLS\" ]]; then\n            port_set\n            modify_nginx_port\n            jq --argjson port \"${port}\" '.port = $port' \"${xray_qr_config_file}\" > \"${xray_qr_config_file}.tmp\"\n            mv \"${xray_qr_config_file}.tmp\" \"${xray_qr_config_file}\"\n            log_echo \"${Green} $(gettext \"端口\"): ${port} ${Font}\"\n        elif [[ ${tls_mode} == \"Reality\" ]]; then\n            port_set\n            xport=$((RANDOM % 1000 + 20000))\n            gport=$((RANDOM % 1000 + 30000))\n            if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n                read_optimize \"$(gettext \"请输入\") ws inbound_port:\" \"xport\" \"NULL\" 0 65535 \"$(gettext \"请输入 0-65535 之间的值\")!\"\n                port_exist_check \"${xport}\"\n                gport=$((RANDOM % 1000 + 30000))\n                log_echo \"${Green} ws inbound_port: ${xport} ${Font}\"\n            elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n                read_optimize \"$(gettext \"请输入\") gRPC inbound_port:\" \"gport\" \"NULL\" 0 65535 \"$(gettext \"请输入 0-65535 之间的值\")!\"\n                port_exist_check \"${gport}\"\n                xport=$((RANDOM % 1000 + 20000))\n                log_echo \"${Green} gRPC inbound_port: ${gport} ${Font}\"\n            elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n                read_optimize \"$(gettext \"请输入\") ws inbound_port:\" \"xport\" \"NULL\" 0 65535 \"$(gettext \"请输入 0-65535 之间的值\")!\"\n                read_optimize \"$(gettext \"请输入\") gRPC inbound_port:\" \"gport\" \"NULL\" 0 65535 \"$(gettext \"请输入 0-65535 之间的值\")!\"\n                port_exist_check \"${xport}\"\n                port_exist_check \"${gport}\"\n                log_echo \"${Green} ws inbound_port: ${xport} ${Font}\"\n                log_echo \"${Green} gRPC inbound_port: ${gport} ${Font}\"\n            fi\n            jq --argjson port \"$port\" \\\n               --argjson ws_port \"$xport\" \\\n               --argjson grpc_port \"$gport\" \\\n               '.port = $port | .ws_port = $ws_port | .grpc_port = $grpc_port' \"${xray_qr_config_file}\" > \"${xray_qr_config_file}.tmp\"\n            mv \"${xray_qr_config_file}.tmp\" \"${xray_qr_config_file}\"\n            modify_inbound_port\n            [[ ${reality_add_nginx} == \"on\" ]] && modify_nginx_port\n        elif [[ ${tls_mode} == \"None\" ]]; then\n            if [[ ${ws_grpc_mode} == \"onlyws\" ]]; then\n                read_optimize \"$(gettext \"请输入\") ws inbound_port:\" \"xport\" \"NULL\" 0 65535 \"$(gettext \"请输入 0-65535 之间的值\")!\"\n                port_exist_check \"${xport}\"\n                gport=$((RANDOM % 1000 + 30000))\n                log_echo \"${Green} ws inbound_port: ${xport} ${Font}\"\n            elif [[ ${ws_grpc_mode} == \"onlygRPC\" ]]; then\n                read_optimize \"$(gettext \"请输入\") gRPC inbound_port:\" \"gport\" \"NULL\" 0 65535 \"$(gettext \"请输入 0-65535 之间的值\")!\"\n                port_exist_check \"${gport}\"\n                xport=$((RANDOM % 1000 + 20000))\n                log_echo \"${Green} gRPC inbound_port: ${gport} ${Font}\"\n            elif [[ ${ws_grpc_mode} == \"all\" ]]; then\n                read_optimize \"$(gettext \"请输入\") ws inbound_port:\" \"xport\" \"NULL\" 0 65535 \"$(gettext \"请输入 0-65535 之间的值\")!\"\n                read_optimize \"$(gettext \"请输入\") gRPC inbound_port:\" \"gport\" \"NULL\" 0 65535 \"$(gettext \"请输入 0-65535 之间的值\")!\"\n                port_exist_check \"${xport}\"\n                port_exist_check \"${gport}\"\n                log_echo \"${Green} ws inbound_port: ${xport} ${Font}\"\n                log_echo \"${Green} gRPC inbound_port: ${gport} ${Font}\"\n            fi\n            jq --argjson ws_port \"$xport\" \\\n               --argjson grpc_port \"$gport\" \\\n               '.ws_port = $ws_port | .grpc_port = $grpc_port' \"${xray_qr_config_file}\" > \"${xray_qr_config_file}.tmp\"\n            mv \"${xray_qr_config_file}.tmp\" \"${xray_qr_config_file}\"\n            modify_inbound_port\n        fi\n        firewall_set\n        service_restart\n        reset_vless_qr_config\n    else\n        log_echo \"${Warning} ${YellowBG} $(gettext \"请先安装\") Xray ! ${Font}\"\n    fi\n}\n\nreset_target() {\n    if [[ -f \"${xray_qr_config_file}\" ]] && [[ -f \"${xray_conf}\" ]] && [[ ${tls_mode} == \"Reality\" ]]; then\n        target_reset=1\n        serverNames=$(info_extraction serverNames)\n        nginx_reality_serverNames_del\n        target_set\n        serverNames_set\n        modify_target_serverNames\n        if [[ ${reality_add_nginx} == \"on\" ]]; then\n            nginx_reality_serverNames_add\n        fi\n        jq --arg target \"${target}\" \\\n           --arg serverNames \"${serverNames}\" \\\n           '.target = $target | .serverNames = $serverNames' \"${xray_qr_config_file}\" > \"${xray_qr_config_file}.tmp\"\n        mv \"${xray_qr_config_file}.tmp\" \"${xray_qr_config_file}\"\n        service_restart\n        reset_vless_qr_config\n    elif [[ ${tls_mode} != \"Reality\" ]]; then\n        log_echo \"${Warning} ${YellowBG} $(gettext \"此模式不支持修改\") target ! ${Font}\"\n    else\n        log_echo \"${Warning} ${YellowBG} $(gettext \"请先安装\") Xray ! ${Font}\"\n    fi\n}\n\nshow_user() {\n    if [[ -f \"${xray_qr_config_file}\" ]] && [[ -f \"${xray_conf}\" ]] && [[ ${tls_mode} != \"None\" ]]; then\n        echo\n        log_echo \"${GreenBG} $(gettext \"即将显示用户, 一次仅能显示一个\") ${Font}\"\n        if [[ ${tls_mode} == \"TLS\" ]]; then\n            log_echo \"${GreenBG} $(gettext \"请选择显示用户使用的协议\") ws/gRPC ${Font}\"\n            echo -e \"${Red}1${Font}: ws ($(gettext \"默认\"))\"\n            echo \"2: gRPC\"\n            local choose_user_prot\n            read_optimize \"$(gettext \"请输入\"): \" \"choose_user_prot\" 1 1 2 \"$(gettext \"请输入有效的数字\")!\"\n            choose_user_prot=$((choose_user_prot - 1))\n        elif [[ ${tls_mode} == \"Reality\" ]]; then\n            choose_user_prot=0\n        fi\n        echo\n        log_echo \"${GreenBG} $(gettext \"请选择要显示的用户编号\"): ${Font}\"\n        jq -r -c .inbounds[${choose_user_prot}].settings.clients[].email ${xray_conf} | awk '{print NR\"\"\": \"$0}'\n        local show_user_index\n        read_optimize \"$(gettext \"请输入\"): \" \"show_user_index\" \"NULL\"\n        if [[ $(jq -r '.inbounds['${choose_user_prot}'].settings.clients|length' ${xray_conf}) -lt ${show_user_index} ]] || [[ ${show_user_index} == 0 ]]; then\n            log_echo \"${Error} ${RedBG} $(gettext \"选择错误\")! ${Font}\"\n            show_user\n        elif [[ ${show_user_index} == 1 ]]; then\n            log_echo \"${Error} ${RedBG} $(gettext \"请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户\") ${Font}\"\n            echo\n        elif [[ ${show_user_index} -gt 1 ]]; then\n            show_user_index=$((show_user_index - 1))\n            user_email=$(jq -r -c '.inbounds['${choose_user_prot}'].settings.clients['${show_user_index}'].email' ${xray_conf})\n            user_id=$(jq -r -c '.inbounds['${choose_user_prot}'].settings.clients['${show_user_index}'].id' ${xray_conf})\n        elif [[ ! -z $(echo ${show_user_index} | sed 's/[0-9]//g') ]] || [[ ${show_user_index} == '' ]]; then\n            log_echo \"${Error} ${RedBG} $(gettext \"选择错误\")! ${Font}\"\n            show_user\n        else\n            log_echo \"${Warning} ${YellowBG} $(gettext \"请先检测 Xray 是否正确安装\")! ${Font}\"\n        fi\n        if [[ ! -z ${user_email} ]] && [[ ! -z ${user_id} ]]; then\n            log_echo \"${Green} $(gettext \"用户名\"): ${user_email} ${Font}\"\n            log_echo \"${Green} UUID: ${user_id} ${Font}\"\n            if [[ ${tls_mode} == \"TLS\" ]]; then\n                if [[ ${choose_user_prot} == 0 ]]; then\n                    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\"\n                elif [[ ${choose_user_prot} == 1 ]]; then\n                    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\"\n                fi\n            elif [[ ${tls_mode} == \"Reality\" ]]; then\n                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\"\n            fi\n            log_echo \"${Red} URL $(gettext \"分享链接\"):${Font} ${user_vless_link}\"\n            echo -n \"${user_vless_link}\" | qrencode -o - -t utf8\n        fi\n        echo\n        log_echo \"${GreenBG} $(gettext \"是否继续显示用户\") [Y/${Red}N${Font}${GreenBG}]?  ${Font}\"\n        read -r show_user_continue\n        case $show_user_continue in\n        [yY][eE][sS] | [yY])\n            show_user\n            ;;\n        *) ;;\n        esac\n    elif [[ ${tls_mode} == \"None\" ]]; then\n        log_echo \"${Warning} ${YellowBG} $(gettext \"此模式不支持删除用户\")! ${Font}\"\n    else\n        log_echo \"${Warning} ${YellowBG} $(gettext \"请先安装\") Xray ! ${Font}\"\n    fi\n}\n\nadd_user() {\n    local choose_user_prot reality_user_more\n    if [[ -f \"${xray_qr_config_file}\" ]] && [[ -f \"${xray_conf}\" ]] && [[ ${tls_mode} != \"None\" ]]; then\n        echo\n        log_echo \"${GreenBG} $(gettext \"即将添加用户, 一次仅能添加一个\") ${Font}\"\n        if [[ ${tls_mode} == \"TLS\" ]]; then\n            log_echo \"${GreenBG} $(gettext \"请选择添加用户使用的协议\") ws/gRPC ${Font}\"\n            echo -e \"${Red}1${Font}: ws ($(gettext \"默认\"))\"\n            echo \"2: gRPC\"\n            local choose_user_prot\n            read_optimize \"$(gettext \"请输入\"): \" \"choose_user_prot\" 1 1 2 \"$(gettext \"请输入有效的数字\")!\"\n            choose_user_prot=$((choose_user_prot - 1))\n            reality_user_more=\"{}\"\n        elif [[ ${tls_mode} == \"Reality\" ]]; then\n            choose_user_prot=0\n            reality_user_more='{\"flow\":\"xtls-rprx-vision\"}'\n        fi\n        email_set\n        UUID_set\n        jq --argjson choose_user_prot \"${choose_user_prot}\" \\\n           --arg UUID \"${UUID}\" \\\n           --argjson reality_user_more \"${reality_user_more}\" \\\n           --arg custom_email \"${custom_email}\" \\\n           '.inbounds[$choose_user_prot].settings.clients += [\n               {\"id\": $UUID} +\n               ($reality_user_more // {}) +\n               {\"level\": 0, \"email\": $custom_email}\n           ]' \"${xray_conf}\" > \"${xray_conf}.tmp\"\n        judge \"$(gettext \"添加用户\")\"\n        mv \"${xray_conf}.tmp\" \"${xray_conf}\"\n        jq \". += {\\\"multi_user\\\": \\\"yes\\\"}\" ${xray_qr_config_file} > \"${xray_qr_config_file}.tmp\"\n        mv \"${xray_qr_config_file}.tmp\" \"${xray_qr_config_file}\"\n        echo\n        log_echo \"${GreenBG} $(gettext \"是否继续添加用户\") [Y/${Red}N${Font}${GreenBG}]?  ${Font}\"\n        read -r add_user_continue\n        case $add_user_continue in\n        [yY][eE][sS] | [yY])\n            add_user\n            ;;\n        *) ;;\n        esac\n    elif [[ ${tls_mode} == \"None\" ]]; then\n        log_echo \"${Warning} ${YellowBG} $(gettext \"此模式不支持添加用户\")! ${Font}\"\n    else\n        log_echo \"${Warning} ${YellowBG} $(gettext \"请先安装\") Xray ! ${Font}\"\n    fi\n}\n\nremove_user() {\n    if [[ -f \"${xray_qr_config_file}\" ]] && [[ -f \"${xray_conf}\" ]] && [[ ${tls_mode} != \"None\" ]]; then\n        echo\n        log_echo \"${GreenBG} $(gettext \"即将删除用户, 一次仅能删除一个\") ${Font}\"\n        if [[ ${tls_mode} == \"TLS\" ]]; then\n            log_echo \"${GreenBG} $(gettext \"请选择删除用户使用的协议\") ws/gRPC ${Font}\"\n            echo -e \"${Red}1${Font}: ws ($(gettext \"默认\"))\"\n            echo \"2: gRPC\"\n            local choose_user_prot\n            read_optimize \"$(gettext \"请输入\"): \" \"choose_user_prot\" 1 1 2 \"$(gettext \"请输入有效的数字\")!\"\n            choose_user_prot=$((choose_user_prot - 1))\n        elif [[ ${tls_mode} == \"Reality\" ]]; then\n            choose_user_prot=0\n        fi\n        echo\n        log_echo \"${GreenBG} $(gettext \"请选择要删除的用户编号\") ${Font}\"\n        jq -r -c .inbounds[${choose_user_prot}].settings.clients[].email ${xray_conf} | awk '{print NR\"\"\": \"$0}'\n        local del_user_index\n        read_optimize \"$(gettext \"请输入\"): \" \"del_user_index\" \"NULL\"\n        if [[ $(jq -r '.inbounds['${choose_user_prot}'].settings.clients|length' ${xray_conf}) -lt ${del_user_index} ]] || [[ ${del_user_index} == 0 ]]; then\n            log_echo \"${Error} ${RedBG} $(gettext \"选择错误\")! ${Font}\"\n            remove_user\n        elif [[ ${del_user_index} == 1 ]]; then\n            echo\n            log_echo \"${Error} ${RedBG} $(gettext \"主用户无法删除\")! ${Font}\"\n            echo\n        elif [[ ${del_user_index} -gt 1 ]]; then\n            del_user_index=$((del_user_index - 1))\n            jq --argjson choose_user_prot \"${choose_user_prot}\" --argjson del_user_index \"${del_user_index}\" \\\n               'del(.inbounds[$choose_user_prot].settings.clients[$del_user_index])' ${xray_conf} > \"${xray_conf}.tmp\"\n            judge \"$(gettext \"删除用户\")\"\n            mv \"${xray_conf}.tmp\" \"${xray_conf}\"\n            echo\n            log_echo \"${GreenBG} $(gettext \"是否继续删除用户\") [Y/${Red}N${Font}${GreenBG}]?  ${Font}\"\n            read -r remove_user_continue\n            case $remove_user_continue in\n            [yY][eE][sS] | [yY])\n                remove_user\n                ;;\n            *) ;;\n            esac\n        elif [[ ! -z $(echo ${del_user_index} | sed 's/[0-9]//g') ]] || [[ ${del_user_index} == '' ]]; then\n            log_echo \"${Error} ${RedBG} $(gettext \"选择错误\")! ${Font}\"\n            remove_user\n        else\n            log_echo \"${Warning} ${YellowBG} $(gettext \"请先检测 Xray 是否正确安装\")! ${Font}\"\n        fi\n    elif [[ ${tls_mode} == \"None\" ]]; then\n        log_echo \"${Warning} ${YellowBG} $(gettext \"此模式不支持删除用户\")! ${Font}\"\n    else\n        log_echo \"${Warning} ${YellowBG} $(gettext \"请先安装\") Xray ! ${Font}\"\n    fi\n}\n\nshow_access_log() {\n    [[ -f \"${xray_access_log}\" ]] && tail -f ${xray_access_log} || log_echo \"${Error} ${RedBG} log $(gettext \"文件不存在\")! ${Font}\"\n}\n\nshow_error_log() {\n    [[ -f \"${xray_error_log}\" ]] && tail -f ${xray_error_log} || log_echo \"${Error} ${RedBG} log $(gettext \"文件不存在\")! ${Font}\"\n}\n\nxray_status_add() {\n    if [[ -f \"${xray_conf}\" ]]; then\n        if [[ $(jq -r .stats ${xray_conf}) != \"null\" ]]; then\n            echo\n            log_echo \"${GreenBG} $(gettext \"已配置 Xray 流量统计\") ${Font}\"\n            log_echo \"${GreenBG} $(gettext \"是否需要关闭此功能\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n            read -r xray_status_add_fq\n            case $xray_status_add_fq in\n            [yY][eE][sS] | [yY])\n                service_stop\n                jq \"del(.api)|del(.stats)|del(.policy)\" ${xray_conf} > \"${xray_conf}.tmp\"\n                judge \"$(gettext \"关闭 Xray 流量统计\")\"\n                mv \"${xray_conf}.tmp\" \"${xray_conf}\"\n                service_start\n                [[ -f \"${xray_status_conf}\" ]] && rm -rf ${xray_status_conf}\n                ;;\n            *) ;;\n            esac\n        else\n            echo\n            log_echo \"${GreenBG} Xray $(gettext \"流量统计需要使用\") api ${Font}\"\n            log_echo \"${GreenBG} $(gettext \"可能会影响 Xray 性能\") ${Font}\"\n            log_echo \"${GreenBG} $(gettext \"是否继续\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n            read -r xray_status_add_fq\n            case $xray_status_add_fq in\n            [yY][eE][sS] | [yY])\n                service_stop\n                curl -L -o \"${xray_status_conf}\" \"https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/status_config.json\"\n                local status_config\n                status_config=$(jq -c . \"${xray_status_conf}\")\n                jq --argjson status_config \"${status_config}\" \\\n                    '. += $status_config' \"${xray_conf}\" > \"${xray_conf}.tmp\"\n                judge \"$(gettext \"设置 Xray 流量统计\")\"\n                mv \"${xray_conf}.tmp\" \"${xray_conf}\"\n                service_start\n                ;;\n            *) ;;\n            esac\n        fi\n    else\n        log_echo \"${Warning} ${YellowBG} $(gettext \"请先安装\") Xray ! ${Font}\"\n    fi\n}\n\nbbr_boost_sh() {\n    read -t 0.1 -n 10000 -d '' _ </dev/tty 2>/dev/null || true\n    if [[ -f \"${idleleo_dir}/tcp.sh\" ]]; then\n        cd ${idleleo_dir} && chmod +x ./tcp.sh && ./tcp.sh\n    else\n        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\"\n    fi\n    read -t 0.1 -n 10000 -d '' _ </dev/tty 2>/dev/null || true\n}\n\nuninstall_xray() {\n    systemctl disable xray\n    bash -c \"$(curl -L https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)\" @ remove --purge\n    [[ -d \"${xray_conf_dir}\" ]] && rm -rf ${xray_conf_dir}\n    if [[ -f \"${xray_qr_config_file}\" ]]; then\n        jq -r 'del(.xray_version)' ${xray_qr_config_file} > \"${xray_qr_config_file}.tmp\"\n        mv \"${xray_qr_config_file}.tmp\" \"${xray_qr_config_file}\"\n    fi\n    log_echo \"${OK} ${GreenBG} $(gettext \"已卸载\") Xray ${Font}\"\n}\n\nuninstall_nginx() { \n    log_echo \"${GreenBG} $(gettext \"是否卸载\") Nginx [${Red}Y${Font}${GreenBG}/N]? ${Font}\"\n    read -r uninstall_nginx\n    case $uninstall_nginx in\n    [nN][oO] | [nN]) \n        log_echo \"${OK} ${GreenBG} $(gettext \"已取消卸载\") Nginx ${Font}\"        \n        return\n        ;;\n    *)\n        systemctl disable nginx\n        rm -rf ${nginx_dir}\n        rm -rf ${nginx_conf_dir}/*\n        [[ -f \"${nginx_systemd_file}\" ]] && rm -rf ${nginx_systemd_file}\n        if [[ -f \"${xray_qr_config_file}\" ]]; then\n            jq 'del(.nginx_build_version)' ${xray_qr_config_file} > \"${xray_qr_config_file}.tmp\"\n            mv \"${xray_qr_config_file}.tmp\" \"${xray_qr_config_file}\"\n        fi\n        log_echo \"${OK} ${GreenBG} $(gettext \"已卸载\") Nginx ${Font}\"\n        ;;\n    esac\n}\n\nuninstall_all() {\n    stop_service_all\n    [[ -f \"${xray_bin_dir}/xray\" ]] && uninstall_xray\n    echo\n    [[ -d \"${nginx_dir}\" ]] && uninstall_nginx\n    echo\n    log_echo \"${GreenBG} $(gettext \"是否删除所有脚本文件\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n    read -r remove_all_idleleo_file_fq\n    case $remove_all_idleleo_file_fq in\n    [yY][eE][sS] | [yY])\n        rm -rf ${idleleo_commend_file}\n        rm -rf ${idleleo_dir}\n        systemctl daemon-reload\n        log_echo \"${OK} ${GreenBG} $(gettext \"已删除所有文件\") ${Font}\"\n        log_echo \"${GreenBG} $(gettext \"ヾ(￣▽￣) 拜拜~\") ${Font}\"\n        exit 0\n        ;;\n    *)\n        systemctl daemon-reload\n        log_echo \"${OK} ${GreenBG} $(gettext \"已保留脚本文件 (包含 SSL 证书等)\") ${Font}\"\n        ;;\n    esac\n    if [[ -f \"${xray_qr_config_file}\" ]]; then\n        log_echo \"${GreenBG} $(gettext \"是否保留配置文件\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n        read -r remove_config_fq\n        case $remove_config_fq in\n        [yY][eE][sS] | [yY])\n            log_echo \"${OK} ${GreenBG} $(gettext \"已保留配置文件\") ${Font}\"\n            ;;\n        *)\n            rm -rf ${xray_qr_config_file}\n            log_echo \"${OK} ${GreenBG} $(gettext \"已删除配置文件\") ${Font}\"\n            ;;\n        esac\n    fi\n}\n\ndelete_tls_key_and_crt() {\n    [[ -f \"$HOME/.acme.sh/acme.sh\" ]] && /root/.acme.sh/acme.sh uninstall >/dev/null 2>&1\n    [[ -d \"$HOME/.acme.sh\" ]] && rm -rf \"$HOME/.acme.sh\"\n    log_echo \"${OK} ${GreenBG} $(gettext \"已清空证书遗留文件\") ${Font}\"\n}\n\ntimeout() {\n    timeout=0\n    timeout_str=\"\"\n    while [[ ${timeout} -le 30 ]]; do\n        let timeout++\n        timeout_str+=\"#\"\n    done\n    let timeout=timeout+5\n    while [[ ${timeout} -gt 0 ]]; do\n        let timeout--\n        if [[ ${timeout} -gt 25 ]]; then\n            let timeout_color=32\n            let timeout_bg=42\n            timeout_index=\"3\"\n        elif [[ ${timeout} -gt 15 ]]; then\n            let timeout_color=33\n            let timeout_bg=43\n            timeout_index=\"2\"\n        elif [[ ${timeout} -gt 5 ]]; then\n            let timeout_color=31\n            let timeout_bg=41\n            timeout_index=\"1\"\n        else\n            timeout_index=\"0\"\n        fi\n        printf \"${Warning} ${GreenBG} %d%s%s ${Font} \\033[%d;%dm%-s\\033[0m \\033[%dm%d\\033[0m \\r\" \\\n            \"$timeout_index\" \\\n            \" $(gettext \"秒后\") \" \\\n            \"$1\" \\\n            \"$timeout_color\" \\\n            \"$timeout_bg\" \\\n            \"$timeout_str\" \\\n            \"$timeout_color\" \\\n            \"$timeout_index\"\n        sleep 0.1\n        timeout_str=${timeout_str%?}\n        [[ ${timeout} -eq 0 ]] && printf \"\\n\"\n    done\n}\n\njudge_mode() {\n    local ws_grpc_mode_add\n    if [[ -f \"${xray_qr_config_file}\" ]]; then\n        ws_grpc_mode=$(info_extraction ws_grpc_mode)\n        tls_mode=$(info_extraction tls)\n\n        case ${ws_grpc_mode} in\n            onlyws) ws_grpc_mode_add=\"ws\";;\n            onlygRPC) ws_grpc_mode_add=\"gRPC\";;\n            all) ws_grpc_mode_add=\"ws+gRPC\";;\n            *);;\n        esac\n\n        case ${tls_mode} in\n            TLS)\n                shell_mode=\"Nginx+${ws_grpc_mode_add}+TLS\"\n                ;;\n            Reality)\n                reality_add_more=$(info_extraction reality_add_more)\n                reality_add_nginx=$(info_extraction reality_add_nginx)\n                reality_add_balance=$(info_extraction reality_add_balance)\n                if [[ ${reality_add_more} == \"on\" && ${reality_add_nginx} == \"off\" ]]; then\n                    shell_mode=\"Reality+${ws_grpc_mode_add}\"\n                elif [[ ${reality_add_nginx} == \"on\" && ${reality_add_more} == \"on\" ]]; then\n                    shell_mode=\"Nginx+Reality+${ws_grpc_mode_add}\"\n                elif [[ ${reality_add_nginx} == \"on\" && ${reality_add_more} == \"off\" ]]; then\n                    shell_mode=\"Nginx+Reality\"\n                else\n                    shell_mode=\"Reality\"\n                fi\n                if [[ ${reality_add_balance} == \"on\" ]]; then\n                    shell_mode=${shell_mode}\"+Balance\"\n                fi\n                ;;\n            None)\n                shell_mode=\"${ws_grpc_mode_add} ONLY\"\n                ;;\n            *)\n                ;;\n        esac\n        old_tls_mode=${tls_mode}\n    fi\n}\n\ninstall_xray_ws_tls() {\n    is_root\n    check_and_create_user_group\n    check_system\n    dependency_install\n    basic_optimization\n    create_directory\n    old_config_exist_check\n    domain_check\n    ws_grpc_choose\n    port_set\n    ws_inbound_port_set\n    grpc_inbound_port_set\n    firewall_set\n    ws_path_set\n    grpc_path_set\n    email_set\n    UUID_set\n    ws_grpc_qr\n    vless_qr_config_tls_ws\n    stop_service_all\n    xray_install\n    port_exist_check 80\n    port_exist_check \"${port}\"\n    nginx_exist_check\n    nginx_systemd\n    nginx_ssl_conf_add\n    ssl_judge_and_install\n    nginx_conf_add\n    nginx_servers_conf_add\n    xray_conf_add\n    tls_type\n    basic_information\n    enable_process_systemd\n    acme_cron_update\n    auto_update\n    service_restart\n    setup_auto_clean_logs\n    vless_link_image_choice\n    show_information\n}\n\ninstall_xray_reality() {\n    is_root\n    check_and_create_user_group\n    check_system\n    dependency_install\n    basic_optimization\n    create_directory\n    old_config_exist_check\n    ip_check\n    xray_install\n    port_set\n    email_set\n    UUID_set\n    target_set\n    serverNames_set\n    keys_set\n    shortIds_set\n    xray_reality_add_more_choose\n    ws_grpc_qr\n    firewall_set\n    stop_service_all\n    port_exist_check \"${port}\"\n    reality_balance_add_fq\n    reality_nginx_add_fq\n    xray_conf_add\n    vless_qr_config_reality\n    tls_type\n    basic_information\n    enable_process_systemd\n    auto_update\n    service_restart\n    setup_auto_clean_logs\n    vless_link_image_choice\n    show_information\n}\n\ninstall_xray_xtls_only() {\n    is_root\n    check_and_create_user_group\n    check_system\n    dependency_install\n    basic_optimization\n    create_directory\n    old_config_exist_check\n    ip_check\n    shell_mode=\"XTLS ONLY\"\n    tls_mode=\"XTLS\"\n    port_set\n    firewall_set\n    email_set\n    UUID_set\n    vless_qr_config_xtls_only\n    stop_service_all\n    xray_install\n    port_exist_check \"${port}\"\n    xray_conf_add\n    basic_information\n    enable_process_systemd\n    auto_update\n    service_restart\n    setup_auto_clean_logs\n    vless_link_image_choice\n    show_information\n}\n\ninstall_xray_ws_only() {\n    is_root\n    check_and_create_user_group\n    check_system\n    dependency_install\n    basic_optimization\n    create_directory\n    old_config_exist_check\n    ip_check\n    ws_grpc_choose\n    ws_inbound_port_set\n    grpc_inbound_port_set\n    firewall_set\n    ws_path_set\n    grpc_path_set\n    email_set\n    UUID_set\n    ws_grpc_qr\n    vless_qr_config_ws_only\n    stop_service_all\n    xray_install\n    port_exist_check \"${xport}\"\n    port_exist_check \"${gport}\"\n    xray_conf_add\n    basic_information\n    enable_process_systemd\n    auto_update\n    service_restart\n    setup_auto_clean_logs\n    vless_link_image_choice\n    show_information\n}\n\nupdate_sh() {\n    ol_version=${shell_online_version}\n    echo \"${ol_version}\" >${shell_version_tmp}\n    [[ -z ${ol_version} ]] && log_echo \"${Error} ${RedBG} $(gettext \"检测最新版本失败\")! ${Font}\" && return 1\n    echo \"${shell_version}\" >>${shell_version_tmp}\n    newest_version=$(sort -rV ${shell_version_tmp} | head -1)\n    oldest_version=$(sort -V ${shell_version_tmp} | head -1)\n    version_difference=$(echo \"(${newest_version:0:3}-${oldest_version:0:3})>0\" | bc)\n    if [[ ${shell_version} != ${newest_version} ]]; then\n        if [[ ${auto_update} != \"YES\" ]]; then\n            echo\n            log_echo \"${GreenBG} $(gettext \"新版本\")(${newest_version}) $(gettext \"更新内容\"): ${Font}\"\n            log_echo \"${Green} $(check_version shell_upgrade_details) ${Font}\"\n            if [[ ${version_difference} == 1 ]]; then\n                echo\n                log_echo \"${Warning} ${YellowBG} $(gettext \"存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新\") [Y/${Red}N${Font}${YellowBG}]? ${Font}\"\n            else\n                echo\n                log_echo \"${GreenBG} $(gettext \"存在新版本, 是否更新\") [Y/${Red}N${Font}${GreenBG}]? ${Font}\"\n            fi\n            read -r update_confirm\n        else\n            [[ -z ${ol_version} ]] && echo \"$(gettext \"检测 脚本 最新版本失败\")!\" >>${log_file} && return 1\n            [[ ${version_difference} == 1 ]] && echo \"$(gettext \"脚本 版本差别过大, 跳过更新\")!\" >>${log_file} && return 1\n            update_confirm=\"YES\"\n        fi\n        case $update_confirm in\n        [yY][eE][sS] | [yY])\n            [[ -L \"${idleleo_commend_file}\" ]] && rm -f ${idleleo_commend_file}\n            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\"\n            if [[ $? -ne 0 ]]; then\n                [[ ${auto_update} == \"YES\" ]] && echo \"$(gettext \"脚本更新失败\")!\" >>${log_file}\n                [[ ${auto_update} != \"YES\" ]] && log_echo \"${Error} ${RedBG} $(gettext \"脚本更新失败\")! ${Font}\"\n                return 1\n            fi\n            ln -s ${idleleo} ${idleleo_commend_file}\n            [[ -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}\"\n            clear\n            log_echo \"${OK} ${GreenBG} $(gettext \"更新完成\") ${Font}\"\n            [[ ${version_difference} == 1 ]] && log_echo \"${Warning} ${YellowBG} $(gettext \"脚本版本变化较大, 若服务无法正常运行请卸载后重装\")! ${Font}\"\n            return 0\n            ;;\n        *)\n            return 0\n            ;;\n        esac\n    else\n        clear\n        log_echo \"${OK} ${GreenBG} $(gettext \"当前版本为最新版本\") ${Font}\"\n    fi\n    return 0\n\n}\n\ncheck_file_integrity() {\n    if [[ ! -L \"${idleleo_commend_file}\" ]] && [[ ! -f \"${idleleo}\" ]]; then\n        check_system\n        pkg_install \"bc,jq\"\n        [[ ! -d \"${idleleo_dir}\" ]] && mkdir -p ${idleleo_dir}\n        [[ ! -d \"${idleleo_dir}/tmp\" ]] && mkdir -p ${idleleo_dir}/tmp\n        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\"\n        judge \"$(gettext \"下载最新脚本\")\"\n        ln -s ${idleleo} ${idleleo_commend_file}\n        clear\n        source \"$idleleo\"\n    fi\n}\n\nread_version() {\n    shell_online_version=\"$(check_version shell_online_version)\"\n    xray_online_version=\"$(check_version xray_online_version)\"\n    nginx_build_version=\"$(check_version nginx_build_online_version)\"\n}\n\nmaintain() {\n    log_echo \"${Error} ${RedBG} $(gettext \"该选项暂时无法使用\")! ${Font}\"\n    log_echo \"${Error} ${RedBG} $(gettext \"$1\") ${Font}\"\n    exit 0\n}\n\nlist() {\n    case $1 in\n    '-1' | '--install-tls')\n        shell_mode=\"Nginx+ws+TLS\"\n        tls_mode=\"TLS\"\n        install_xray_ws_tls\n        ;;\n    '-2' | '--install-reality')\n        shell_mode=\"Reality\"\n        tls_mode=\"Reality\"\n        install_xray_reality\n        ;;\n    '-3' | '--install-none')\n        echo\n        log_echo \"${Warning} ${YellowBG} $(gettext \"此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装\") [Y/${Red}N${Font}${YellowBG}]? ${Font}\"\n        read -r wsonly_fq\n        case $wsonly_fq in\n        [yY][eE][sS] | [yY])\n            shell_mode=\"ws ONLY\"\n            tls_mode=\"None\"\n            install_xray_ws_only\n            ;;\n        *) ;;\n        esac\n        ;;\n    '-4' | '--install-xtls')\n        echo\n        log_echo \"${Warning} ${YellowBG} $(gettext \"此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装\") [Y/${Red}N${Font}${YellowBG}]? ${Font}\"\n        read -r xtlsonly_fq\n        case $xtlsonly_fq in\n        [yY][eE][sS] | [yY])\n            shell_mode=\"XTLS ONLY\"\n            tls_mode=\"XTLS\"\n            install_xray_xtls_only\n            ;;\n        *) ;;\n        esac\n        ;;\n    '-5' | '--add-upstream')\n        nginx_upstream_server_set\n        ;;\n    '-6' | '--add-servernames')\n        nginx_servernames_server_set\n        ;;\n    '-au' | '--auto-update')\n        auto_update\n        ;;\n    '-c' | '--clean-logs')\n        clean_logs\n        ;;\n    '-cs' | '--cert-status')\n        check_cert_status\n        ;;\n    '-cu' | '--cert-update')\n        cert_update_manuel\n        ;;\n    '-cau' | '--cert-auto-update')\n        acme_cron_update\n        ;;\n    '-f' | '--set-fail2ban')\n        set_fail2ban\n        ;;\n    '-h' | '--help')\n        show_help\n        ;;\n    '-l' | '--language')\n        set_language\n        ;;\n    '-n' | '--nginx-update')\n        [[ $2 == \"auto_update\" ]] && auto_update=\"YES\" && log_file=\"${log_dir}/auto_update.log\"\n        nginx_update\n        ;;\n    '-p' | '--port-reset')\n        reset_port\n        ;;\n    '-pt' | '--port-traffic')\n        clear\n        monitor_traffic_with_iftop\n        ;;\n    '--purge' | '--uninstall')\n        uninstall_all\n        ;;\n    '-s' | '-show')\n        clear\n        basic_information\n        vless_qr_link_image\n        show_information\n        ;;\n    '-t' | '--target-reset')\n        reset_target\n        ;;\n    '-tcp' | '--tcp')\n        bbr_boost_sh\n        ;;\n    '-tls' | '--tls')\n        tls_type\n        ;;\n    '-u' | '--update')\n        [[ $2 == \"auto_update\" ]] && auto_update=\"YES\" && log_file=\"${log_dir}/auto_update.log\"\n        update_sh\n        ;;\n    '-uu' | '--uuid-reset')\n        reset_UUID\n        ;;\n    '-xa' | '--xray-access')\n        clear\n        show_access_log\n        ;;\n    '-xe' | '--xray-error')\n        clear\n        show_error_log\n        ;;\n    '-x' | '--xray-update')\n        [[ $2 == \"auto_update\" ]] && auto_update=\"YES\" && log_file=\"${log_dir}/auto_update.log\"\n        xray_update\n        ;;\n    *)\n        menu\n        ;;\n    esac\n}\n\nshow_help() {\n    echo \"usage: idleleo [OPTION]\"\n    echo\n    echo \"OPTION:\"\n    echo \"  -1, --install-tls           $(gettext \"安装\") Xray (Nginx+ws/gRPC+TLS)\"\n    echo \"  -2, --install-reality       $(gettext \"安装\") Xray (Nginx+Reality+ws/gRPC)\"\n    echo \"  -3, --install-none          $(gettext \"安装\") Xray (ws/gRPC ONLY)\"\n    echo \"  -4, --install-xtls          $(gettext \"安装\") Xray (XTLS ONLY)\"\n    echo \"  -5, --add-upstream          $(gettext \"变更\") Nginx $(gettext \"负载均衡配置\")\"\n    echo \"  -6, --add-servernames       $(gettext \"变更\") Nginx serverNames $(gettext \"配置\")\"\n    echo \"  -au, --auto-update          $(gettext \"设置自动更新\")\"\n    echo \"  -c, --clean-logs            $(gettext \"清除日志文件\")\"\n    echo \"  -cs, --cert-status          $(gettext \"查看证书状态\")\"\n    echo \"  -cu, --cert-update          $(gettext \"更新证书有效期\")\"\n    echo \"  -cau, --cert-auto-update    $(gettext \"设置证书自动更新\")\"\n    echo \"  -f, --set-fail2ban          $(gettext \"设置 Fail2ban 防暴力破解\")\"\n    echo \"  -h, --help                  $(gettext \"显示帮助\")\"\n    echo \"  -l, --language              $(gettext \"修改语言\")\"\n    echo \"  -n, --nginx-update          $(gettext \"更新\") Nginx\"\n    echo \"  -p, --port-reset            $(gettext \"变更\") port\"\n    echo \"  -pt, --port-traffic         $(gettext \"查看\") port $(gettext \"实时流量\")\"\n    echo \"  --purge, --uninstall        $(gettext \"脚本卸载\")\"\n    echo \"  -s, --show                  $(gettext \"显示安装信息\")\"\n    echo \"  -t, --target-reset          $(gettext \"变更\") target\"\n    echo \"  -tcp, --tcp                 $(gettext \"配置\") TCP $(gettext \"加速\")\"\n    echo \"  -tls, --tls                 $(gettext \"修改\") TLS $(gettext \"配置\")\"\n    echo \"  -u, --update                $(gettext \"更新脚本\")\"\n    echo \"  -uu, --uuid-reset           $(gettext \"变更\") UUIDv5/$(gettext \"映射字符串\")\"\n    echo \"  -xa, --xray-access          $(gettext \"显示\") Xray $(gettext \"访问信息\")\"\n    echo \"  -xe, --xray-error           $(gettext \"显示\") Xray $(gettext \"错误信息\")\"\n    echo \"  -x, --xray-update           $(gettext \"更新\") Xray\"\n    exit 0\n}\n\nidleleo_commend() {\n    if [[ -L \"${idleleo_commend_file}\" ]] || [[ -f \"${idleleo}\" ]]; then\n        [[ ! -L \"${idleleo_commend_file}\" ]] && chmod +x ${idleleo} && ln -s ${idleleo} ${idleleo_commend_file}\n        old_version=$(grep \"shell_version=\" ${idleleo} | head -1 | awk -F '=|\"' '{print $3}')\n        echo \"${old_version}\" >${shell_version_tmp}\n        echo \"${shell_version}\" >>${shell_version_tmp}\n        oldest_version=$(sort -V ${shell_version_tmp} | head -1)\n        version_difference=$(echo \"(${shell_version:0:3}-${oldest_version:0:3})>0\" | bc)\n        if [[ -z ${old_version} ]]; then\n            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\"\n            judge \"$(gettext \"下载最新脚本\")\"\n            clear\n            source \"$idleleo\"\n        elif [[ ${shell_version} != ${oldest_version} ]]; then\n            echo\n            log_echo \"${GreenBG} $(gettext \"新版本\")(${shell_version}) $(gettext \"更新内容\"): ${Font}\"\n            log_echo \"${Green} $(check_version shell_upgrade_details) ${Font}\"\n            if [[ ${version_difference} == 1 ]]; then\n                echo\n                log_echo \"${Warning} ${YellowBG} $(gettext \"脚本版本变化较大, 可能存在不兼容情况, 是否继续使用\") [Y/${Red}N${Font}${YellowBG}]? ${Font}\"\n                read -r update_sh_fq\n                case $update_sh_fq in\n                [yY][eE][sS] | [yY])\n                    rm -rf ${idleleo}\n                    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\"\n                    judge \"$(gettext \"下载最新脚本\")\"\n                    clear\n                    log_echo \"${Warning} ${YellowBG} $(gettext \"脚本版本变化较大, 若服务无法正常运行请卸载后重装\")! ${Font}\"\n                    echo\n                    ;;\n                *)\n                    source \"$idleleo\"\n                    ;;\n                esac\n            else\n                rm -rf ${idleleo}\n                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\"\n                echo\n                judge \"$(gettext \"下载最新脚本\")\"\n                clear\n                echo\n            fi\n            source \"$idleleo\"\n        else\n            ol_version=${shell_online_version}\n            echo \"${ol_version}\" >${shell_version_tmp}\n            [[ -z ${ol_version} ]] && shell_need_update=\"${Red}[$(gettext \"检测失败\")]!${Font}\"\n            echo \"${shell_version}\" >>${shell_version_tmp}\n            newest_version=$(sort -rV ${shell_version_tmp} | head -1)\n            if [[ ${shell_version} != ${newest_version} ]]; then\n                shell_need_update=\"${Red}[$(gettext \"有新版\")!]${Font}\"\n                shell_emoji=\"${Red}>_<${Font}\"\n            else\n                shell_need_update=\"${Green}[$(gettext \"最新版\")]${Font}\"\n                shell_emoji=\"${Green}^O^${Font}\"\n            fi\n            if [[ -f \"${xray_qr_config_file}\" ]]; then\n                if [[ -z \"$(info_extraction nginx_build_version)\" ]] || [[ ! -f \"${nginx_dir}/sbin/nginx\" ]]; then\n                    nginx_need_update=\"${Green}[$(gettext \"未安装\")]${Font}\"\n                elif [[ ${nginx_build_version} != $(info_extraction nginx_build_version) ]]; then\n                    nginx_need_update=\"${Green}[$(gettext \"有新版\")!]${Font}\"\n                else\n                    nginx_need_update=\"${Green}[$(gettext \"最新版\")]${Font}\"\n                fi\n                if [[ -f \"${xray_qr_config_file}\" ]] && [[ -f \"${xray_conf}\" ]] && [[ -f \"${xray_bin_dir}/xray\" ]]; then\n                    ##xray_online_version=$(check_version xray_online_pre_version)\n                    if [[ -z \"$(info_extraction xray_version)\" ]]; then\n                        xray_need_update=\"${Green}[$(gettext \"已安装\")] ($(gettext \"版本未知\"))${Font}\"\n                    elif [[ ${xray_online_version} != $(info_extraction xray_version) ]]; then\n                        xray_need_update=\"${Green}[$(gettext \"有新版\")!]${Font}\"\n                        ### xray_need_update=\"${Red}[$(gettext \"请务必更新\")]!${Font}\"\n                    else\n                        xray_need_update=\"${Green}[$(gettext \"最新版\")]${Font}\"\n                    fi\n                else\n                    xray_need_update=\"${Red}[$(gettext \"未安装\")]${Font}\"\n                fi\n            else\n                nginx_need_update=\"${Green}[$(gettext \"未安装\")]${Font}\"\n                xray_need_update=\"${Red}[$(gettext \"未安装\")]${Font}\"\n            fi\n        fi\n    fi\n}\n\ncheck_program() {\n    if [[ -n $(pgrep nginx) ]]; then\n        nginx_status=\"${Green}$(gettext \"运行中\")..${Font}\"\n    elif [[ ${tls_mode} == \"None\" ]] || [[ ${reality_add_nginx} == \"off\" ]]; then\n        nginx_status=\"${Green}$(gettext \"无需测试\")${Font}\"\n    else\n        nginx_status=\"${Red}$(gettext \"未运行\")${Font}\"\n    fi\n    if [[ -n $(pgrep xray) ]]; then\n        xray_status=\"${Green}$(gettext \"运行中\")..${Font}\"\n    else\n        xray_status=\"${Red}$(gettext \"未运行\")${Font}\"\n    fi\n}\n\ncurl_local_connect() {\n    curl -Is -o /dev/null -w %{http_code} \"https://$1/$2\"\n}\n\ncheck_xray_local_connect() {\n    if [[ -f \"${xray_qr_config_file}\" ]]; then\n        xray_local_connect_status=\"${Red}$(gettext \"无法连通\")${Font}\"\n        if [[ ${tls_mode} == \"TLS\" ]]; then\n            [[ ${ws_grpc_mode} == \"onlyws\" ]] && [[ $(curl_local_connect $(info_extraction host) $(info_extraction path)) == \"400\" ]] && xray_local_connect_status=\"${Green}$(gettext \"本地正常\")${Font}\"\n            [[ ${ws_grpc_mode} == \"onlygRPC\" ]] && [[ $(curl_local_connect $(info_extraction host) $(info_extraction serviceName)) == \"502\" ]] && xray_local_connect_status=\"${Green}$(gettext \"本地正常\")${Font}\"\n            [[ ${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}\"\n        elif [[ ${tls_mode} == \"Reality\" ]]; then\n            xray_local_connect_status=\"${Green}$(gettext \"无需测试\")${Font}\"\n        elif [[ ${tls_mode} == \"None\" ]]; then\n            xray_local_connect_status=\"${Green}$(gettext \"无需测试\")${Font}\"\n        fi\n    else\n        xray_local_connect_status=\"${Red}$(gettext \"未安装\")${Font}\"\n    fi\n}\n\ncheck_online_version_connect() {\n    maintain_file_status=$(curl -s -o /dev/null -w \"%{http_code}\" \"https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/maintain\")\n\n    if [[ ${maintain_file_status} == \"200\" ]]; then\n        log_echo \"${Error} ${RedBG} $(gettext \"脚本维护中.. 请稍后再试\")! ${Font}\"\n        sleep 0.5\n        exit 0\n    fi\n\n    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\")\n    if [[ ${xray_online_version_status} != \"200\" ]]; then\n        log_echo \"${Error} ${RedBG} $(gettext \"无法检测所需依赖的在线版本, 请稍后再试\")! ${Font}\"\n        sleep 0.5\n        exit 0\n    fi\n}\n\nset_language() {\n    echo\n    log_echo \"${GreenBG} 选择语言 / Select Language / انتخاب زبان / Выберите язык ${Font}\"\n    echo -e \"${Green}1.${Font} 中文 (默认)\"\n    echo -e \"${Green}2.${Font} English\"\n    echo -e \"${Green}3.${Font} Français\"\n    echo -e \"${Green}4.${Font} فارسی\"\n    echo -e \"${Green}5.${Font} Русский\"\n    echo -e \"${Green}6.${Font} 한국어\"\n\n    local lang_choice\n    read_optimize \"$(gettext \"请输入数字\"): \" \"lang_choice\" \"NULL\" 1 6 \"$(gettext \"请输入 1 到 6 之间的有效数字\")\"\n\n    case $lang_choice in\n        1)\n            unset LANG\n            unset LC_MESSAGES\n            rm -f \"${idleleo_dir}/language.conf\"\n            rm -rf \"${idleleo_dir}/languages\"\n            ;;\n        2)\n            export LANG=en_US.UTF-8\n            export LC_MESSAGES=en_US.UTF-8\n            ;;\n        3)\n            export LANG=fr_FR.UTF-8\n            export LC_MESSAGES=fr_FR.UTF-8\n            ;;\n        4)\n            export LANG=fa_IR.UTF-8\n            export LC_MESSAGES=fa_IR.UTF-8\n            ;;\n        5)\n            export LANG=ru_RU.UTF-8\n            export LC_MESSAGES=ru_RU.UTF-8\n            ;;\n        6)\n            export LANG=ko_KR.UTF-8\n            export LC_MESSAGES=ko_KR.UTF-8\n            ;;\n        *)\n            log_echo \"${Error} ${RedBG} $(gettext \"无效的选择\") ${Font}\"\n            return 1\n            ;;\n    esac\n\n    if [ \"$lang_choice\" -ne 1 ]; then\n\n        check_system\n\n        echo \"LANG=$LANG\" > \"${idleleo_dir}/language.conf\"\n        echo \"LC_MESSAGES=$LC_MESSAGES\" >> \"${idleleo_dir}/language.conf\"\n\n        case $ID in\n            debian|ubuntu)\n                if ! dpkg -s locales-all >/dev/null 2>&1; then\n                    pkg_install \"locales-all\"\n                fi\n\n                if command -v locale-gen >/dev/null 2>&1; then\n                     locale-gen \"$LANG\" 2>/dev/null || true # 忽略可能的错误\n                fi\n                ;;\n            centos)\n                local ins_lang_code=\"${LANG%%_*}\"\n                if ! rpm -q \"glibc-langpack-$ins_lang_code\" >/dev/null 2>&1; then\n                    pkg_install \"glibc-langpack-$ins_lang_code\"\n                fi\n                # 尝试生成 locale (非必需，但可能有帮助)\n                if command -v localedef >/dev/null 2>&1 && [ -f \"/usr/share/i18n/locales/${LANG%.*}\" ]; then\n                    localedef -c -i \"${LANG%.*}\" -f UTF-8 \"$LANG\" 2>/dev/null || true # 忽略可能的错误\n                fi\n                ;;\n        esac\n    fi\n\n    source \"$idleleo\"\n}\n\nfunction backup_directories() {\n    local timestamp=$(date +\"%Y%m%d%H%M%S\")\n    local backup_name=\"\"\n    read_optimize \"$(gettext \"请输入备份名称\") ($(gettext \"不需要后缀\")): \" \"backup_name\" \"\"\n    local backup_filename=\"xray_bash_${backup_name}_${timestamp}.tar.gz\"\n    local backup_path=\"/etc/idleleo/${backup_filename}\"\n\n    local tar_output\n    tar_output=''\n    tar_output=$(tar --exclude='/etc/idleleo/xray_bash_*.tar.gz' -czf \"${backup_path}\" /etc/idleleo /usr/local/nginx 2>&1)\n\n    if [[ $? -ne 0 ]]; then\n        log_echo \"${Green} tar $(gettext \"报错信息\"): ${Font}\"\n        echo \"${tar_output}\"\n        log_echo \"${Warning} ${YellowBG} $(gettext \"备份完整性可能受到影响, 请检查上述错误信息\") ${Font}\"\n    fi\n\n    if [[ ! -f \"${backup_path}\" ]]; then\n        log_echo \"${Error} ${RedBG} $(gettext \"备份失败\") ${Font}\"\n    else\n        log_echo \"${OK} ${GreenBG} $(gettext \"备份成功\"): ${backup_path} ${Font}\"\n    fi\n}\n\nfunction restore_directories() {\n    log_echo \"${Warning} ${YellowBG} $(gettext \"请确保备份文件在目录\"): /etc/idleleo ${Font}\"\n    local backup_files=($(ls /etc/idleleo/xray_bash_*.tar.gz 2>/dev/null))\n    \n    if [[ ${#backup_files[@]} -eq 0 ]]; then\n        log_echo \"${Error} ${RedBG} $(gettext \"没有找到备份文件\") ${Font}\"\n        return 1\n    fi\n\n    if [[ ${#backup_files[@]} -gt 1 ]]; then\n        log_echo \"${Warning} ${YellowBG} $(gettext \"发现多个备份文件\"), $(gettext \"将使用最新的文件进行恢复\") ${Font}\"\n    fi\n\n    local latest_backup_file=${backup_files[-1]}\n    log_echo \"${Green} $(gettext \"找到最新备份文件\"): ${latest_backup_file} ${Font}\"\n\n    timeout \"$(gettext \"恢复备份\")!\"\n    tar -xzf \"${latest_backup_file}\" -C / &> /dev/null\n\n    if [[ $? -eq 0 ]]; then\n        log_echo \"${OK} ${GreenBG} $(gettext \"恢复成功\") ${Font}\"\n        log_echo \"${Info} ${Green} $(gettext \"记得安装\") xray ${Font}\"\n        if [[ -d \"/usr/local/nginx\" ]]; then\n            log_echo \"${Info} ${Green} $(gettext \"记得安装\") nginx ${Font}\"\n        fi\n    else\n        log_echo \"${Error} ${RedBG} $(gettext \"恢复失败\") ${Font}\"\n    fi\n}\n\nmenu() {\n    echo\n    log_echo \"Xray $(gettext \"安装管理脚本\") ${Red}[${shell_version}]${Font} ${shell_emoji}\"\n    log_echo \"--- $(gettext \"作者\"): hello-yunshu ---\"\n    log_echo \"--- $(gettext \"修改\"): hey.run ---\"\n    log_echo \"--- https://github.com/hello-yunshu ---\"\n    echo\n    log_echo \"$(gettext \"当前模式\"): ${shell_mode}\"\n    log_echo \"$(gettext \"当前语言\"): ${LANG%.*}\"\n    echo\n\n    echo -e \"$(gettext \"可以使用\")${RedW} idleleo ${Font}$(gettext \"命令管理脚本\")${Font}\\n\"\n\n    log_echo \"—————————————— ${GreenW}$(gettext \"版本检测\")${Font} ——————————————\"\n    log_echo \"$(gettext \"脚本\"):  ${shell_need_update}\"\n    log_echo \"Xray:  ${xray_need_update}\"\n    log_echo \"Nginx: ${nginx_need_update}\"\n    log_echo \"—————————————— ${GreenW}$(gettext \"运行状态\")${Font} ——————————————\"\n    log_echo \"Xray:   ${xray_status}\"\n    log_echo \"Nginx:  ${nginx_status}\"\n    log_echo \"$(gettext \"连通性\"): ${xray_local_connect_status}\"\n    echo -e \"—————————————— ${GreenW}$(gettext \"更新向导\")${Font} ——————————————\"\n    echo -e \"${Green}0.${Font}  $(gettext \"更新\") $(gettext \"脚本\")\"\n    echo -e \"${Green}1.${Font}  $(gettext \"更新\") Xray\"\n    echo -e \"${Green}2.${Font}  $(gettext \"更新\") Nginx\"\n    echo -e \"—————————————— ${GreenW}语言 / Language${Font} ———————\"\n    echo -e \"${Green}99.${Font} 中文 (默认)\"\n    echo -e \"    English\"\n    echo -e \"    Français\" \n    echo -e \"    فارسی    \"\n    echo -e \"    Русский\"\n    echo -e \"    한국어\"\n    echo -e \"—————————————— ${GreenW}$(gettext \"安装向导\")${Font} ——————————————\"\n    echo -e \"${Green}3.${Font}  $(gettext \"安装\") Xray (Reality+ws/gRPC+Nginx)\"\n    echo -e \"${Green}4.${Font}  $(gettext \"安装\") Xray (Nginx+ws/gRPC+TLS)\"\n    echo -e \"${Green}5.${Font}  $(gettext \"安装\") Xray (ws/gRPC ONLY)\"\n    echo -e \"${Green}6.${Font}  $(gettext \"安装\") Xray (XTLS ONLY)\"\n    echo -e \"—————————————— ${GreenW}$(gettext \"配置变更\")${Font} ——————————————\"\n    echo -e \"${Green}7.${Font}  $(gettext \"变更\") UUIDv5/$(gettext \"映射字符串\")\"\n    echo -e \"${Green}8.${Font}  $(gettext \"变更\") port\"\n    echo -e \"${Green}9.${Font}  $(gettext \"变更\") target\"\n    echo -e \"${Green}10.${Font} $(gettext \"变更\") TLS $(gettext \"版本\")\"\n    echo -e \"${Green}11.${Font} $(gettext \"变更\") Nginx $(gettext \"负载均衡配置\")\"\n    echo -e \"${Green}12.${Font} $(gettext \"变更\") Nginx serverNames $(gettext \"配置\")\"\n    echo -e \"—————————————— ${GreenW}$(gettext \"用户管理\")${Font} ——————————————\"\n    echo -e \"${Green}13.${Font} $(gettext \"查看\") Xray $(gettext \"用户\")\"\n    echo -e \"${Green}14.${Font} $(gettext \"添加\") Xray $(gettext \"用户\")\"\n    echo -e \"${Green}15.${Font} $(gettext \"删除\") Xray $(gettext \"用户\")\"\n    echo -e \"—————————————— ${GreenW}$(gettext \"查看信息\")${Font} ——————————————\"\n    echo -e \"${Green}16.${Font} $(gettext \"查看\") Xray $(gettext \"实时访问日志\")\"\n    echo -e \"${Green}17.${Font} $(gettext \"查看\") Xray $(gettext \"实时错误日志\")\"\n    echo -e \"${Green}18.${Font} $(gettext \"查看\") Xray $(gettext \"配置信息\")\"\n    echo -e \"${Green}19.${Font} $(gettext \"查看\") port $(gettext \"实时流量\")\"\n    echo -e \"—————————————— ${GreenW}$(gettext \"服务相关\")${Font} ——————————————\"\n    echo -e \"${Green}20.${Font} $(gettext \"重启\") $(gettext \"所有服务\")\"\n    echo -e \"${Green}21.${Font} $(gettext \"启动\") $(gettext \"所有服务\")\"\n    echo -e \"${Green}22.${Font} $(gettext \"停止\") $(gettext \"所有服务\")\"\n    echo -e \"${Green}23.${Font} $(gettext \"查看\") $(gettext \"所有服务\")\"\n    echo -e \"—————————————— ${GreenW}$(gettext \"证书相关\")${Font} ——————————————\"\n    echo -e \"${Green}24.${Font} $(gettext \"查看\") $(gettext \"证书状态\")\"\n    echo -e \"${Green}25.${Font} $(gettext \"更新\") $(gettext \"证书有效期\")\"\n    echo -e \"${Green}26.${Font} $(gettext \"设置\") $(gettext \"证书自动更新\")\"\n    echo -e \"—————————————— ${GreenW}$(gettext \"其他选项\")${Font} ——————————————\"\n    echo -e \"${Green}27.${Font} $(gettext \"配置\") $(gettext \"自动更新\")\"\n    echo -e \"${Green}28.${Font} $(gettext \"设置\") TCP $(gettext \"加速\")\"\n    echo -e \"${Green}29.${Font} $(gettext \"设置\") Fail2ban $(gettext \"防暴力破解\")\"\n    echo -e \"${Green}30.${Font} $(gettext \"设置\") Xray $(gettext \"流量统计\")\"\n    echo -e \"${Green}31.${Font} $(gettext \"清除\") $(gettext \"日志文件\")\"\n    echo -e \"${Green}32.${Font} $(gettext \"测试\") $(gettext \"服务器网速\")\"\n    echo -e \"—————————————— ${GreenW}$(gettext \"备份恢复\")${Font} ——————————————\"\n    echo -e \"${Green}33.${Font} $(gettext \"备份\") $(gettext \"全部文件\")\"\n    echo -e \"${Green}34.${Font} $(gettext \"恢复\") $(gettext \"全部文件\")\"\n    echo -e \"—————————————— ${GreenW}$(gettext \"卸载向导\")${Font} ——————————————\"\n    echo -e \"${Green}35.${Font} $(gettext \"卸载\") $(gettext \"脚本\")\"\n    echo -e \"${Green}36.${Font} $(gettext \"清空\") $(gettext \"证书文件\")\"\n    echo -e \"${Green}37.${Font} $(gettext \"退出\") \\n\"\n\n    local menu_num\n    read_optimize \"$(gettext \"请输入选项\"): \" \"menu_num\" \"NULL\" 0 99 \"$(gettext \"请输入有效的数字\")!\"\n    case $menu_num in\n    0)\n        update_sh\n        source \"$idleleo\"\n        ;;\n    1)\n        xray_update\n        timeout \"$(gettext \"清空屏幕\")!\"\n        clear\n        source \"$idleleo\"\n        ;;\n    2)\n        echo\n        log_echo \"${Red}[$(gettext \"不建议\")]${Font} $(gettext \"频繁更新 Nginx, 请确认 Nginx 有更新的必要\")!\"\n        timeout \"$(gettext \"开始更新\")!\"\n        nginx_update\n        timeout \"$(gettext \"清空屏幕\")!\"\n        clear\n        source \"$idleleo\"\n        ;;\n    3)\n        shell_mode=\"Reality\"\n        tls_mode=\"Reality\"\n        install_xray_reality\n        source \"$idleleo\"\n        ;;\n    4)\n        shell_mode=\"Nginx+ws+TLS\"\n        tls_mode=\"TLS\"\n        install_xray_ws_tls\n        source \"$idleleo\"\n        ;;\n    5)\n        echo\n        log_echo \"${Warning} ${YellowBG} $(gettext \"此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装\") [Y/${Red}N${Font}${YellowBG}]? ${Font}\"\n        read -r wsonly_fq\n        case $wsonly_fq in\n        [yY][eE][sS] | [yY])\n            shell_mode=\"ws ONLY\"\n            tls_mode=\"None\"\n            install_xray_ws_only\n            ;;\n        *) ;;\n        esac\n        source \"$idleleo\"\n        ;;\n    6)\n        echo\n        log_echo \"${Warning} ${YellowBG} $(gettext \"此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装\") [Y/${Red}N${Font}${YellowBG}]? ${Font}\"\n        read -r xtlsonly_fq\n        case $xtlsonly_fq in\n        [yY][eE][sS] | [yY])\n            shell_mode=\"XTLS ONLY\"\n            tls_mode=\"XTLS\"\n            install_xray_xtls_only\n            ;;\n        *) ;;\n        esac\n        source \"$idleleo\"\n        ;;\n    7)\n        reset_UUID\n        judge \"$(gettext \"变更\") UUIDv5/$(gettext \"映射字符串\")\"\n        menu\n        ;;\n    8)\n        reset_port\n        judge \"$(gettext \"变更\") port\"\n        menu\n        ;;\n    9)\n        reset_target\n        judge \"$(gettext \"变更\") target\"\n        menu\n        ;;\n    10)\n        tls_type\n        judge \"$(gettext \"变更\") TLS $(gettext \"版本\")\"\n        menu\n        ;;\n    11)\n        nginx_upstream_server_set\n        timeout \"$(gettext \"清空屏幕\")!\"\n        clear\n        menu\n        ;;\n    12)\n        nginx_servernames_server_set\n        timeout \"$(gettext \"清空屏幕\")!\"\n        clear\n        menu\n        ;;\n    13)\n        show_user\n        timeout \"$(gettext \"回到菜单\")!\"\n        menu\n        ;;\n    14)\n        service_stop\n        add_user\n        service_start\n        timeout \"$(gettext \"回到菜单\")!\"\n        menu\n        ;;\n    15)\n        service_stop\n        remove_user\n        service_start\n        timeout \"$(gettext \"回到菜单\")!\"\n        menu\n        ;;\n    16)\n        clear\n        show_access_log\n        ;;\n    17)\n        clear\n        show_error_log\n        ;;\n    18)\n        clear\n        basic_information\n        vless_qr_link_image\n        show_information\n        menu\n        ;;\n    19)\n        clear\n        monitor_traffic_with_iftop\n        menu\n        ;;\n    20)\n        service_restart\n        timeout \"$(gettext \"清空屏幕\")!\"\n        clear\n        menu\n        ;;\n    21)\n        service_start\n        timeout \"$(gettext \"清空屏幕\")!\"\n        clear\n        source \"$idleleo\"\n        ;;\n    22)\n        service_stop\n        timeout \"$(gettext \"清空屏幕\")!\"\n        clear\n        source \"$idleleo\"\n        ;;\n    23)\n        if [[ ${tls_mode} == \"TLS\" ]] || [[ ${reality_add_nginx} == \"on\" ]]; then\n            systemctl status nginx\n        fi\n        systemctl status xray\n        menu\n        ;;\n    24)\n        check_cert_status\n        timeout \"$(gettext \"回到菜单\")!\"\n        menu\n        ;;\n    25)\n        cert_update_manuel\n        timeout \"$(gettext \"回到菜单\")!\"\n        menu\n        ;;\n    26)\n        acme_cron_update\n        timeout \"$(gettext \"回到菜单\")!\"\n        clear\n        menu\n        ;;\n    27)\n        auto_update\n        timeout \"$(gettext \"清空屏幕\")!\"\n        clear\n        menu\n        ;;\n    28)\n        clear\n        bbr_boost_sh\n        echo\n        menu\n        ;;\n    29)\n        set_fail2ban\n        menu\n        ;;\n    30)\n        xray_status_add\n        timeout \"$(gettext \"回到菜单\")!\"\n        menu\n        ;;\n    31)\n        clean_logs\n        menu\n        ;;\n    32)\n        clear\n        read -t 0.1 -n 10000 -d '' _ </dev/tty 2>/dev/null || true\n        bash <(curl -Lso- https://cdn.jsdelivr.net/gh/hello-yunshu/superspeed@master/superspeed.sh)\n        read -t 0.1 -n 10000 -d '' _ </dev/tty 2>/dev/null || true\n        echo\n        menu\n        ;;\n    33)\n        backup_directories\n        menu\n        ;;\n    34)\n        restore_directories\n        menu\n        ;;\n    35)\n        uninstall_all\n        timeout \"$(gettext \"清空屏幕\")!\"\n        clear\n        source \"$idleleo\"\n        ;;\n    36)\n        delete_tls_key_and_crt\n        rm -rf ${ssl_chainpath}/*\n        timeout \"$(gettext \"清空屏幕\")!\"\n        clear\n        menu\n        ;;\n    37)\n        timeout \"$(gettext \"清空屏幕\")!\"\n        clear\n        exit 0\n        ;;\n    99)\n        set_language\n        bash idleleo\n        ;;\n    *)\n        clear\n        log_echo \"${Error} ${RedBG} $(gettext \"请输入有效的数字\")! ${Font}\"\n        menu\n        ;;\n    esac\n}\n\ncheck_file_integrity\ncheck_online_version_connect\ninit_language\nread_version\njudge_mode\nidleleo_commend\ncheck_program\ncheck_xray_local_connect\nfix_bugs\nlist \"$@\"\n"
  },
  {
    "path": "languages/en/DOCKER.md",
    "content": "# Docker Deployment Guide\n\n[简体中文](/DOCKER.md) | English | [Français](/languages/fr/DOCKER.md) | [Русский](/languages/ru/DOCKER.md) | [فارسی](/languages/fa/DOCKER.md) | [한국어](/languages/ko/DOCKER.md)\n\nThis 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.\n\n## Quick Start\n\n### 1. Clone and Build\n\n```bash\ngit clone https://github.com/hello-yunshu/Xray_bash_onekey.git\ncd Xray_bash_onekey\ndocker compose up -d\n```\n\n### 2. Enter Interactive Installation Menu\n\n```bash\ndocker attach xray-onekey\n```\n\nOn first run, the installation script launches automatically. Follow the prompts to complete the configuration. After exiting the menu, the container enters daemon mode automatically.\n\n### 3. Subsequent Management\n\n```bash\ndocker exec -it xray-onekey idleleo\n```\n\n## Running Modes\n\n| Mode | Description | Command |\n|------|-------------|---------|\n| `idleleo` (default) | Start services and enter management menu | `docker compose up -d` + `docker attach xray-onekey` |\n| `start` | Start services only (daemon mode) | Modify `command: start` in `docker-compose.yml` |\n| `shell` | Start services and enter shell | `docker exec -it xray-onekey bash` |\n\n## Management Operations\n\nAll original script commands are available:\n\n```bash\ndocker exec -it xray-onekey idleleo          # Management menu\ndocker exec -it xray-onekey idleleo -s        # View installation info\ndocker exec -it xray-onekey idleleo -x        # Update Xray\ndocker exec -it xray-onekey idleleo -n        # Update Nginx\ndocker exec -it xray-onekey idleleo -h        # Show help\n```\n\n## Using docker run\n\n```bash\ndocker build -t xray-onekey .\n\ndocker 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\n```\n\n## Data Persistence\n\n| Volume | Container Path | Description |\n|--------|---------------|-------------|\n| `xray-conf` | `/etc/idleleo/conf` | Xray and Nginx configuration files |\n| `xray-cert` | `/etc/idleleo/cert` | SSL certificate files |\n| `xray-info` | `/etc/idleleo/info` | Connection info and status files |\n| `xray-logs` | `/var/log/xray` | Xray log files |\n| `acme-data` | `/root/.acme.sh` | acme.sh certificate issuance data |\n\n## Network Configuration\n\nThe container uses `network_mode: host`, directly using the host network:\n\n* Reality mode requires seeing the real client IP\n* TLS mode requires direct binding to ports 443/80\n* Avoids additional NAT forwarding performance overhead\n\n## Important Notes\n\n* The container uses `fake-systemctl` instead of systemd; `systemctl` commands work normally\n* A built-in watchdog checks service status every 30 seconds and auto-restarts on failure\n* After exiting the management menu, the container enters daemon mode automatically — services keep running\n* Firewall management is recommended at the host level\n* Automatic certificate renewal works inside the container (ensure port 80 is accessible)\n\n## Troubleshooting\n\n```bash\ndocker logs xray-onekey                    # View container logs\ndocker exec -it xray-onekey bash           # Enter container\ndocker exec -it xray-onekey idleleo -s     # View installation info\n```\n\n### Complete Reset\n\n```bash\ndocker compose down\ndocker volume rm xray-conf xray-cert xray-info xray-logs acme-data\ndocker compose up -d\n```\n"
  },
  {
    "path": "languages/en/LC_MESSAGES/version",
    "content": "1777024069"
  },
  {
    "path": "languages/en/README.md",
    "content": "# Xray One-Click Installation Script — Reality / VLESS WebSocket/gRPC+TLS + Nginx\n\n[简体中文](/README.md) | English | [Français](/languages/fr/README.md) | [Русский](/languages/ru/README.md) | [فارسی](/languages/fa/README.md) | [한국어](/languages/ko/README.md)\n\n[![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)\n\n> Thanks for non-commercial open source development authorization by JetBrains\n\n## Features\n\n* 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))\n* Powered by Qwen-MT-Plus AI for accurate multilingual translation\n* Supports Reality protocol with recommended Nginx frontend (installable via script)\n* Built-in fail2ban protection (installable via script)\n* 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\n* 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\n* Supports gRPC protocol: [Using gRPC Protocol](https://hey.run/archives/xrayjin-jie-wan-fa---shi-yong-grpcxie-yi)\n* Supports Reality / ws/gRPC load balancing:\n  - [Deploy Reality Load Balancer](https://hey.run/archives/bushu-reality-balance)\n  - [Build Backend Load Balancer](https://hey.run/archives/xrayjin-jie-wan-fa---da-jian-hou-duan-fu-wu-qi-fu-zai-jun-heng)\n\n## Further Reading\n\n* Reality installation guide: [Setting Up Xray Reality Server](https://hey.run/archives/da-jian-xray-reality-xie-yi-fu-wu-qi)\n* Reality protocol risks: [Risks of Xray Reality Protocol](https://hey.run/archives/reality-xie-yi-de-feng-xian)\n* Accelerating server with Reality: [Accelerate Server Using Reality Protocol \"Vulnerability\"](https://hey.run/archives/use-reality)\n\n## Telegram Group\n\n* Discussion group: [Click to join](https://t.me/+48VSqv7xIIFmZDZl)\n\n## Prerequisites\n\n* An overseas server with a public IP address\n* For Reality protocol: prepare a target domain that meets Xray's requirements\n* For TLS version: prepare a domain and add an A record\n* Read the [Xray official documentation](https://xtls.github.io) to understand Reality, TLS, WebSocket, gRPC, and related Xray concepts\n* **Ensure curl is installed**: CentOS users run `yum install -y curl`; Debian/Ubuntu users run `apt install -y curl`\n\n## Quick Install\n\n```bash\nbash <(curl -Ss https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/install.sh)\n```\n\n## Docker Deployment\n\nDocker 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.\n\n```bash\ngit clone https://github.com/hello-yunshu/Xray_bash_onekey.git\ncd Xray_bash_onekey\ndocker compose up -d\ndocker attach xray-onekey\n```\n\n## Important Notes\n\n* If you are unfamiliar with the settings, use the default values for all non-required fields (just press Enter throughout)\n* Cloudflare users should enable CDN only after installation is complete\n* This script requires basic Linux knowledge and computer networking fundamentals\n* Supports Debian 12+ / Ubuntu 24.04+ / CentOS Stream 8+; some CentOS templates may have compilation issues — consider switching to another OS if problems occur\n* It is recommended to deploy only one proxy per server and use the default port 443\n* Custom string mapping to UUIDv5 requires client-side support\n* Use this script in a clean environment; beginners should avoid CentOS\n* This program depends on Nginx — users who have installed Nginx via [LNMP](https://lnmp.org) or similar scripts should be aware of potential conflicts\n* Do not use this script in production environments before verifying its functionality\n* The author provides limited support (because they're not very smart)\n\n## Acknowledgments\n\n* Based on [wulabing/V2Ray_ws-tls_bash_onekey](https://github.com/wulabing/V2Ray_ws-tls_bash_onekey)\n* TCP acceleration script from [ylx2016/Linux-NetSpeed](https://github.com/ylx2016/Linux-NetSpeed)\n\n## Certificate Configuration\n\n**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.\n\n**Auto Certificate**: The script supports automatic Let's Encrypt certificate generation (valid for 3 months), with theoretical support for auto-renewal.\n\n## View Client Configuration\n\n```bash\ncat /etc/idleleo/info/xray_info.inf\n```\n\n## About Xray\n\n* Xray is an excellent open-source network proxy tool supporting Windows, macOS, Android, iOS, Linux, and more\n* This script provides one-click complete configuration — once all processes finish successfully, simply configure your client using the output\n* **Strongly recommended** to fully understand the program's workflow and principles\n\n## Service Management\n\n| Action | Command |\n|--------|---------|\n| Start Xray | `systemctl start xray` |\n| Stop Xray | `systemctl stop xray` |\n| Start Nginx | `systemctl start nginx` |\n| Stop Nginx | `systemctl stop nginx` |\n\n## Directories\n\n| Item | Path |\n|------|------|\n| Xray server config | `/etc/idleleo/conf/xray/config.json` |\n| Nginx directory | `/usr/local/nginx` |\n| Certificate files | `/etc/idleleo/cert/xray.key`, `/etc/idleleo/cert/xray.crt` |\n| Config info etc. | `/etc/idleleo` |\n"
  },
  {
    "path": "languages/fa/DOCKER.md",
    "content": "# راهنمای استقرار Docker\n\n[简体中文](/DOCKER.md) | [English](/languages/en/DOCKER.md) | [Français](/languages/fr/DOCKER.md) | [Русский](/languages/ru/DOCKER.md) | فارسی | [한국어](/languages/ko/DOCKER.md)\n\nاین راهنما نحوه اجرای اسکریپت نصب خودکار Xray با Docker را توضیح می‌دهد. ایمیج شامل Xray و Nginx پیش‌نصب‌شده است و تمام قابلیت‌های اسکریپت اصلی در کانتینر در دسترس هستند.\n\n## شروع سریع\n\n### ۱. کلون و ساخت\n\n```bash\ngit clone https://github.com/hello-yunshu/Xray_bash_onekey.git\ncd Xray_bash_onekey\ndocker compose up -d\n```\n\n### ۲. ورود به منوی نصب تعاملی\n\n```bash\ndocker attach xray-onekey\n```\n\nدر اولین اجرا، اسکریپت نصب به طور خودکار راه‌اندازی می‌شود. دستورالعمل‌ها را برای تکمیل پیکربندی دنبال کنید. پس از خروج از منو، کانتینر به طور خودکار وارد حالت دیمون می‌شود.\n\n### ۳. مدیریت بعدی\n\n```bash\ndocker exec -it xray-onekey idleleo\n```\n\n## حالت‌های اجرا\n\n| حالت | توضیح | دستور |\n|------|--------|-------|\n| `idleleo` (پیش‌فرض) | راه‌اندازی سرویس‌ها و ورود به منوی مدیریت | `docker compose up -d` + `docker attach xray-onekey` |\n| `start` | فقط راه‌اندازی سرویس‌ها (حالت دیمون) | `command: start` را در `docker-compose.yml` تغییر دهید |\n| `shell` | راه‌اندازی سرویس‌ها و ورود به پوسته | `docker exec -it xray-onekey bash` |\n\n## عملیات مدیریت\n\nتمام دستورات اسکریپت اصلی در دسترس هستند:\n\n```bash\ndocker exec -it xray-onekey idleleo          # منوی مدیریت\ndocker exec -it xray-onekey idleleo -s        # مشاهده اطلاعات نصب\ndocker exec -it xray-onekey idleleo -x        # به‌روزرسانی Xray\ndocker exec -it xray-onekey idleleo -n        # به‌روزرسانی Nginx\ndocker exec -it xray-onekey idleleo -h        # نمایش راهنما\n```\n\n## استفاده از docker run\n\n```bash\ndocker build -t xray-onekey .\n\ndocker 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\n```\n\n## ماندگاری داده‌ها\n\n| حجم | مسیر کانتینر | توضیح |\n|-----|-------------|--------|\n| `xray-conf` | `/etc/idleleo/conf` | فایل‌های پیکربندی Xray و Nginx |\n| `xray-cert` | `/etc/idleleo/cert` | فایل‌های گواهی SSL |\n| `xray-info` | `/etc/idleleo/info` | اطلاعات اتصال و فایل‌های وضعیت |\n| `xray-logs` | `/var/log/xray` | فایل‌های لاگ Xray |\n| `acme-data` | `/root/.acme.sh` | داده‌های صدور گواهی acme.sh |\n\n## پیکربندی شبکه\n\nکانتینر از `network_mode: host` استفاده می‌کند و مستقیماً از شبکه میزبان استفاده می‌کند:\n\n* حالت Reality نیاز به دیدن آی‌پی واقعی کلاینت دارد\n* حالت TLS نیاز به اتصال مستقیم به پورت‌های ۴۴۳/۸۰ دارد\n* از سربار عملکرد ناشی از NAT اضافی جلوگیری می‌کند\n\n## نکات مهم\n\n* کانتینر از `fake-systemctl` به جای systemd استفاده می‌کند؛ دستورات `systemctl` به طور عادی کار می‌کنند\n* یک نگهبان داخلی هر ۳۰ ثانیه وضعیت سرویس‌ها را بررسی کرده و در صورت خرابی به طور خودکار راه‌اندازی مجدد می‌کند\n* پس از خروج از منوی مدیریت، کانتینر به طور خودکار وارد حالت دیمون می‌شود — سرویس‌ها به کار خود ادامه می‌دهند\n* مدیریت فایروال در سطح میزبان توصیه می‌شود\n* تمدید خودکار گواهی در کانتینر کار می‌کند (مطمئن شوید پورت ۸۰ قابل دسترسی است)\n\n## عیب‌یابی\n\n```bash\ndocker logs xray-onekey                    # مشاهده لاگ‌های کانتینر\ndocker exec -it xray-onekey bash           # ورود به کانتینر\ndocker exec -it xray-onekey idleleo -s     # مشاهده اطلاعات نصب\n```\n\n### بازنشانی کامل\n\n```bash\ndocker compose down\ndocker volume rm xray-conf xray-cert xray-info xray-logs acme-data\ndocker compose up -d\n```\n"
  },
  {
    "path": "languages/fa/LC_MESSAGES/version",
    "content": "1777024069"
  },
  {
    "path": "languages/fa/README.md",
    "content": "# اسکریپت نصب خودکار Xray — Reality / VLESS WebSocket/gRPC+TLS + Nginx\n\n[简体中文](/README.md) | [English](/languages/en/README.md) | [Français](/languages/fr/README.md) | [Русский](/languages/ru/README.md) | فارسی | [한국어](/languages/ko/README.md)\n\n[![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)\n\n> سپاس از اجازه توسعه آزاد و غیرتجاری توسط JetBrains\n\n## ویژگی‌ها\n\n* دستور `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))\n* ترجمه دقیق چندزبانه با Qwen-MT-Plus AI\n* پشتیبانی از پروتکل Reality با Nginx پیشگام توصیه‌شده (قابل نصب از طریق اسکریپت)\n* حفاظت داخلی fail2ban (قابل نصب از طریق اسکریپت)\n* استفاده از [پیشنهاد](https://github.com/XTLS/Xray-core/issues/91) لینک اشتراک‌گذاری [@DuckSoft](https://github.com/DuckSoft) (بتا)، سازگار با Qv2ray، V2rayN، V2rayNG\n* استفاده از پیشنهاد پروژه [XTLS](https://github.com/XTLS/Xray-core/issues/158)، پیروی از استاندارد [UUIDv5](https://tools.ietf.org/html/rfc4122#section-4.3)، پشتیبانی از نگاشت رشته‌های سفارشی به UUID VLESS\n* پشتیبانی از پروتکل gRPC: [استفاده از پروتکل gRPC](https://hey.run/archives/xrayjin-jie-wan-fa---shi-yong-grpcxie-yi)\n* پشتیبانی از تعادل بار Reality / ws/gRPC:\n  - [استقرار تعادل بار Reality](https://hey.run/archives/bushu-reality-balance)\n  - [ساخت تعادل بار بک‌اند](https://hey.run/archives/xrayjin-jie-wan-fa---da-jian-hou-duan-fu-wu-qi-fu-zai-jun-heng)\n\n## مطالعه بیشتر\n\n* راهنمای نصب Reality: [راه‌اندازی سرور Xray Reality](https://hey.run/archives/da-jian-xray-reality-xie-yi-fu-wu-qi)\n* خطرات پروتکل Reality: [خطرات پروتکل Xray Reality](https://hey.run/archives/reality-xie-yi-de-feng-xian)\n* تسریع سرور با Reality: [تسریع سرور از طریق «آسیب‌پذیری» پروتکل Reality](https://hey.run/archives/use-reality)\n\n## گروه تلگرام\n\n* گروه بحث: [کلیک برای عضویت](https://t.me/+48VSqv7xIIFmZDZl)\n\n## پیش‌نیازها\n\n* یک سرور خارج از کشور با آدرس آی‌پی عمومی\n* برای پروتکل Reality: یک دامنه هدف مطابق با الزامات Xray آماده کنید\n* برای نسخه TLS: یک دامنه آماده کنید و رکورد A اضافه کنید\n* [مستندات رسمی Xray](https://xtls.github.io) را بخوانید تا با Reality، TLS، WebSocket، gRPC و مفاهیم مرتبط Xray آشنا شوید\n* **اطمینان از نصب curl**: کاربران CentOS دستور `yum install -y curl` را اجرا کنند؛ کاربران Debian/Ubuntu دستور `apt install -y curl` را اجرا کنند\n\n## نصب سریع\n\n```bash\nbash <(curl -Ss https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/install.sh)\n```\n\n## استقرار Docker\n\nاستقرار با Docker پشتیبانی می‌شود. ایمیج شامل Xray و Nginx پیش‌نصب‌شده است و تمام قابلیت‌های اسکریپت اصلی در کانتینر در دسترس هستند. برای جزئیات [راهنمای استقرار Docker](/languages/fa/DOCKER.md) را ببینید.\n\n```bash\ngit clone https://github.com/hello-yunshu/Xray_bash_onekey.git\ncd Xray_bash_onekey\ndocker compose up -d\ndocker attach xray-onekey\n```\n\n## نکات مهم\n\n* اگر با تنظیمات آشنا نیستید، برای فیلدهای غیرضروری از مقادیر پیش‌فرض استفاده کنید (فقط Enter بزنید)\n* کاربران Cloudflare فقط پس از اتمام نصب CDN را فعال کنند\n* این اسکریپت به دانش پایه Linux و شبکه‌های کامپیوتری نیاز دارد\n* پشتیبانی از Debian 12+ / Ubuntu 24.04+ / CentOS Stream 8+؛ برخی قالب‌های CentOS ممکن است مشکل کامپایل داشته باشند — در صورت بروز مشکل، تغییر سیستم‌عامل توصیه می‌شود\n* توصیه می‌شود فقط یک پروکسی در هر سرور مستقر کنید و از پورت پیش‌فرض 443 استفاده کنید\n* نگاشت رشته‌های سفارشی به UUIDv5 نیازمند پشتیبانی سمت کلاینت است\n* از این اسکریپت در محیط تمیز استفاده کنید؛ مبتدیان از CentOS استفاده نکنند\n* این برنامه به Nginx وابسته است — کاربرانی که Nginx را از طریق [LNMP](https://lnmp.org) یا اسکریپت‌های مشابه نصب کرده‌اند، به تداخلات احتمالی توجه کنند\n* قبل از تأیید عملکرد، از این اسکریپت در محیط تولیدی استفاده نکنید\n* نویسنده فقط پشتیبانی محدودی ارائه می‌دهد (چون خیلی باهوش نیست)\n\n## تشکر\n\n* بر اساس [wulabing/V2Ray_ws-tls_bash_onekey](https://github.com/wulabing/V2Ray_ws-tls_bash_onekey)\n* اسکریپت تسریع TCP از [ylx2016/Linux-NetSpeed](https://github.com/ylx2016/Linux-NetSpeed)\n\n## پیکربندی گواهی‌نامه\n\n**گواهی سفارشی**: فایل‌های crt و key را به `xray.crt` و `xray.key` تغییر نام دهید و در مسیر `/etc/idleleo/cert` قرار دهید (در صورت عدم وجود، دایرکتوری را ایجاد کنید). به مجوزها و مدت اعتبار گواهی توجه کنید — گواهی‌های سفارشی پس از انقضا باید به صورت دستی تمدید شوند.\n\n**گواهی خودکار**: اسکریپت از تولید خودکار گواهی Let's Encrypt پشتیبانی می‌کند (اعتبار ۳ ماهه)، با پشتیبانی نظری از تمدید خودکار.\n\n## مشاهده تنظیمات کلاینت\n\n```bash\ncat /etc/idleleo/info/xray_info.inf\n```\n\n## درباره Xray\n\n* Xray یک ابزار پروکسی شبکه متن‌باز عالی است که از Windows، macOS، Android، iOS، Linux و سایر پلتفرم‌ها پشتیبانی می‌کند\n* این اسکریپت یک پیکربندی کامل یک‌کلیکی ارائه می‌دهد — پس از پایان موفقیت‌آمیز تمام فرآیندها، کلاینت خود را بر اساس نتایج خروجی تنظیم کنید\n* **به شدت توصیه می‌شود** فرآیند کار و اصول برنامه را به طور کامل درک کنید\n\n## مدیریت سرویس\n\n| عمل | دستور |\n|-----|-------|\n| راه‌اندازی Xray | `systemctl start xray` |\n| توقف Xray | `systemctl stop xray` |\n| راه‌اندازی Nginx | `systemctl start nginx` |\n| توقف Nginx | `systemctl stop nginx` |\n\n## دایرکتوری‌ها\n\n| مورد | مسیر |\n|------|------|\n| تنظیمات سرور Xray | `/etc/idleleo/conf/xray/config.json` |\n| دایرکتوری Nginx | `/usr/local/nginx` |\n| فایل‌های گواهی | `/etc/idleleo/cert/xray.key`, `/etc/idleleo/cert/xray.crt` |\n| اطلاعات پیکربندی و غیره | `/etc/idleleo` |\n"
  },
  {
    "path": "languages/fr/DOCKER.md",
    "content": "# Guide de déploiement Docker\n\n[简体中文](/DOCKER.md) | [English](/languages/en/DOCKER.md) | Français | [Русский](/languages/ru/DOCKER.md) | [فارسی](/languages/fa/DOCKER.md) | [한국어](/languages/ko/DOCKER.md)\n\nCe 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.\n\n## Démarrage rapide\n\n### 1. Cloner et construire\n\n```bash\ngit clone https://github.com/hello-yunshu/Xray_bash_onekey.git\ncd Xray_bash_onekey\ndocker compose up -d\n```\n\n### 2. Accéder au menu d'installation interactif\n\n```bash\ndocker attach xray-onekey\n```\n\nLors 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.\n\n### 3. Gestion ultérieure\n\n```bash\ndocker exec -it xray-onekey idleleo\n```\n\n## Modes de fonctionnement\n\n| Mode | Description | Commande |\n|------|-------------|----------|\n| `idleleo` (par défaut) | Démarrer les services et accéder au menu de gestion | `docker compose up -d` + `docker attach xray-onekey` |\n| `start` | Démarrer uniquement les services (mode démon) | Modifier `command: start` dans `docker-compose.yml` |\n| `shell` | Démarrer les services et accéder à un shell | `docker exec -it xray-onekey bash` |\n\n## Opérations de gestion\n\nToutes les commandes du script original sont disponibles :\n\n```bash\ndocker exec -it xray-onekey idleleo          # Menu de gestion\ndocker exec -it xray-onekey idleleo -s        # Afficher les informations\ndocker exec -it xray-onekey idleleo -x        # Mettre à jour Xray\ndocker exec -it xray-onekey idleleo -n        # Mettre à jour Nginx\ndocker exec -it xray-onekey idleleo -h        # Afficher l'aide\n```\n\n## Utilisation de docker run\n\n```bash\ndocker build -t xray-onekey .\n\ndocker 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\n```\n\n## Persistance des données\n\n| Volume | Chemin du conteneur | Description |\n|--------|-------------------|-------------|\n| `xray-conf` | `/etc/idleleo/conf` | Fichiers de configuration Xray et Nginx |\n| `xray-cert` | `/etc/idleleo/cert` | Fichiers de certificats SSL |\n| `xray-info` | `/etc/idleleo/info` | Informations de connexion et fichiers d'état |\n| `xray-logs` | `/var/log/xray` | Fichiers de journaux Xray |\n| `acme-data` | `/root/.acme.sh` | Données d'émission de certificats acme.sh |\n\n## Configuration réseau\n\nLe conteneur utilise `network_mode: host`, utilisant directement le réseau de l'hôte :\n\n* Le mode Reality nécessite de voir la véritable IP du client\n* Le mode TLS nécessite une liaison directe aux ports 443/80\n* Évite la surcharge de performance liée au transfert NAT supplémentaire\n\n## Remarques importantes\n\n* Le conteneur utilise `fake-systemctl` au lieu de systemd ; les commandes `systemctl` fonctionnent normalement\n* 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\n* Après avoir quitté le menu de gestion, le conteneur passe automatiquement en mode démon — les services continuent de fonctionner\n* La gestion du pare-feu est recommandée au niveau de l'hôte\n* Le renouvellement automatique des certificats fonctionne dans le conteneur (assurez-vous que le port 80 est accessible)\n\n## Dépannage\n\n```bash\ndocker logs xray-onekey                    # Afficher les journaux du conteneur\ndocker exec -it xray-onekey bash           # Entrer dans le conteneur\ndocker exec -it xray-onekey idleleo -s     # Afficher les informations d'installation\n```\n\n### Réinitialisation complète\n\n```bash\ndocker compose down\ndocker volume rm xray-conf xray-cert xray-info xray-logs acme-data\ndocker compose up -d\n```\n"
  },
  {
    "path": "languages/fr/LC_MESSAGES/version",
    "content": "1777024070"
  },
  {
    "path": "languages/fr/README.md",
    "content": "# Script d'installation automatique Xray — Reality / VLESS WebSocket/gRPC+TLS + Nginx\n\n[简体中文](/README.md) | [English](/languages/en/README.md) | Français | [Русский](/languages/ru/README.md) | [فارسی](/languages/fa/README.md) | [한국어](/languages/ko/README.md)\n\n[![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)\n\n> Merci à JetBrains pour l'autorisation de développement open source non commercial\n\n## Fonctionnalités\n\n* 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))\n* Traduction multilingue précise propulsée par Qwen-MT-Plus AI\n* Prend en charge le protocole Reality avec Nginx en frontal recommandé (installable via le script)\n* Protection fail2ban intégrée (installable via le script)\n* 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\n* 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\n* Prend en charge le protocole gRPC : [Utiliser le protocole gRPC](https://hey.run/archives/xrayjin-jie-wan-fa---shi-yong-grpcxie-yi)\n* Prend en charge l'équilibrage de charge Reality / ws/gRPC :\n  - [Déployer un équilibreur de charge Reality](https://hey.run/archives/bushu-reality-balance)\n  - [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)\n\n## Pour aller plus loin\n\n* Guide d'installation Reality : [Configurer un serveur Xray Reality](https://hey.run/archives/da-jian-xray-reality-xie-yi-fu-wu-qi)\n* Risques du protocole Reality : [Risques du protocole Xray Reality](https://hey.run/archives/reality-xie-yi-de-feng-xian)\n* Accélérer le serveur avec Reality : [Accélérer le serveur via la « faille » du protocole Reality](https://hey.run/archives/use-reality)\n\n## Groupe Telegram\n\n* Groupe de discussion : [Cliquez pour rejoindre](https://t.me/+48VSqv7xIIFmZDZl)\n\n## Prérequis\n\n* Un serveur à l'étranger avec une adresse IP publique\n* Pour le protocole Reality : préparez un domaine cible conforme aux exigences de Xray\n* Pour la version TLS : préparez un domaine et ajoutez un enregistrement A\n* Lisez la [documentation officielle Xray](https://xtls.github.io) pour comprendre Reality, TLS, WebSocket, gRPC et les concepts liés à Xray\n* **Assurez-vous que curl est installé** : utilisateurs CentOS, exécutez `yum install -y curl` ; utilisateurs Debian/Ubuntu, exécutez `apt install -y curl`\n\n## Installation rapide\n\n```bash\nbash <(curl -Ss https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/install.sh)\n```\n\n## Déploiement Docker\n\nLe 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.\n\n```bash\ngit clone https://github.com/hello-yunshu/Xray_bash_onekey.git\ncd Xray_bash_onekey\ndocker compose up -d\ndocker attach xray-onekey\n```\n\n## Remarques importantes\n\n* 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)\n* Les utilisateurs Cloudflare doivent activer le CDN uniquement après l'installation\n* Ce script nécessite des connaissances de base en Linux et en réseaux informatiques\n* 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\n* Il est recommandé de ne déployer qu'un seul proxy par serveur et d'utiliser le port 443 par défaut\n* Le mappage de chaînes personnalisées vers UUIDv5 nécessite la prise en charge du client\n* Utilisez ce script dans un environnement propre ; les débutants doivent éviter CentOS\n* 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* N'utilisez pas ce script en production avant d'avoir vérifié son bon fonctionnement\n* L'auteur fournit un support limité (parce qu'il n'est pas très doué)\n\n## Remerciements\n\n* Basé sur [wulabing/V2Ray_ws-tls_bash_onekey](https://github.com/wulabing/V2Ray_ws-tls_bash_onekey)\n* Script d'accélération TCP de [ylx2016/Linux-NetSpeed](https://github.com/ylx2016/Linux-NetSpeed)\n\n## Configuration des certificats\n\n**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.\n\n**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.\n\n## Afficher la configuration client\n\n```bash\ncat /etc/idleleo/info/xray_info.inf\n```\n\n## À propos de Xray\n\n* Xray est un excellent outil proxy réseau open source prenant en charge Windows, macOS, Android, iOS, Linux et plus encore\n* 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\n* **Il est fortement recommandé** de bien comprendre le fonctionnement et les principes du programme\n\n## Gestion des services\n\n| Action | Commande |\n|--------|----------|\n| Démarrer Xray | `systemctl start xray` |\n| Arrêter Xray | `systemctl stop xray` |\n| Démarrer Nginx | `systemctl start nginx` |\n| Arrêter Nginx | `systemctl stop nginx` |\n\n## Répertoires\n\n| Élément | Chemin |\n|---------|--------|\n| Config serveur Xray | `/etc/idleleo/conf/xray/config.json` |\n| Répertoire Nginx | `/usr/local/nginx` |\n| Fichiers de certificat | `/etc/idleleo/cert/xray.key`, `/etc/idleleo/cert/xray.crt` |\n| Infos de config etc. | `/etc/idleleo` |\n"
  },
  {
    "path": "languages/ko/DOCKER.md",
    "content": "# Docker 배포 가이드\n\n[简体中文](/DOCKER.md) | [English](/languages/en/DOCKER.md) | [Français](/languages/fr/DOCKER.md) | [Русский](/languages/ru/DOCKER.md) | [فارسی](/languages/fa/DOCKER.md) | 한국어\n\n이 가이드에서는 Docker를 사용하여 Xray 원클릭 스크립트를 실행하는 방법을 설명합니다. 이미지에 Xray와 Nginx가 사전 설치되어 있으며, 컨테이너 내에서 원본 스크립트의 모든 기능을 사용할 수 있습니다.\n\n## 빠른 시작\n\n### 1. 클론 및 빌드\n\n```bash\ngit clone https://github.com/hello-yunshu/Xray_bash_onekey.git\ncd Xray_bash_onekey\ndocker compose up -d\n```\n\n### 2. 대화형 설치 메뉴 진입\n\n```bash\ndocker attach xray-onekey\n```\n\n첫 실행 시 설치 스크립트가 자동으로 시작됩니다. 안내에 따라 설정을 완료하세요. 메뉴를 종료하면 컨테이너가 자동으로 데몬 모드로 전환됩니다.\n\n### 3. 이후 관리\n\n```bash\ndocker exec -it xray-onekey idleleo\n```\n\n## 실행 모드\n\n| 모드 | 설명 | 명령어 |\n|------|------|--------|\n| `idleleo` (기본값) | 서비스 시작 및 관리 메뉴 진입 | `docker compose up -d` + `docker attach xray-onekey` |\n| `start` | 서비스만 시작 (데몬 모드) | `docker-compose.yml`에서 `command: start`로 수정 |\n| `shell` | 서비스 시작 및 셸 진입 | `docker exec -it xray-onekey bash` |\n\n## 관리 작업\n\n원본 스크립트의 모든 명령을 사용할 수 있습니다:\n\n```bash\ndocker exec -it xray-onekey idleleo          # 관리 메뉴\ndocker exec -it xray-onekey idleleo -s        # 설치 정보 확인\ndocker exec -it xray-onekey idleleo -x        # Xray 업데이트\ndocker exec -it xray-onekey idleleo -n        # Nginx 업데이트\ndocker exec -it xray-onekey idleleo -h        # 도움말\n```\n\n## docker run 사용\n\n```bash\ndocker build -t xray-onekey .\n\ndocker 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\n```\n\n## 데이터 지속성\n\n| 볼륨 | 컨테이너 경로 | 설명 |\n|------|-------------|------|\n| `xray-conf` | `/etc/idleleo/conf` | Xray 및 Nginx 설정 파일 |\n| `xray-cert` | `/etc/idleleo/cert` | SSL 인증서 파일 |\n| `xray-info` | `/etc/idleleo/info` | 연결 정보 및 상태 파일 |\n| `xray-logs` | `/var/log/xray` | Xray 로그 파일 |\n| `acme-data` | `/root/.acme.sh` | acme.sh 인증서 발급 데이터 |\n\n## 네트워크 설정\n\n컨테이너는 `network_mode: host`를 사용하여 호스트 네트워크를 직접 사용합니다:\n\n* Reality 모드는 실제 클라이언트 IP를 확인해야 합니다\n* TLS 모드는 443/80 포트에 직접 바인딩해야 합니다\n* 추가 NAT 전달로 인한 성능 오버헤드를 방지합니다\n\n## 주의사항\n\n* 컨테이너에서는 systemd 대신 `fake-systemctl`을 사용합니다; `systemctl` 명령어가 정상적으로 작동합니다\n* 내장 와치독이 30초마다 서비스 상태를 확인하고 장애 시 자동으로 재시작합니다\n* 관리 메뉴를 종료하면 컨테이너가 자동으로 데몬 모드로 전환됩니다 — 서비스가 계속 실행됩니다\n* 방화벽 관리는 호스트 수준에서 권장됩니다\n* 자동 인증서 갱신이 컨테이너 내에서 작동합니다 (포트 80에 접근 가능한지 확인)\n\n## 문제 해결\n\n```bash\ndocker logs xray-onekey                    # 컨테이너 로그 확인\ndocker exec -it xray-onekey bash           # 컨테이너 진입\ndocker exec -it xray-onekey idleleo -s     # 설치 정보 확인\n```\n\n### 전체 초기화\n\n```bash\ndocker compose down\ndocker volume rm xray-conf xray-cert xray-info xray-logs acme-data\ndocker compose up -d\n```\n"
  },
  {
    "path": "languages/ko/LC_MESSAGES/version",
    "content": "1777024070"
  },
  {
    "path": "languages/ko/README.md",
    "content": "# Xray 원클릭 설치 스크립트 — Reality / VLESS WebSocket/gRPC+TLS + Nginx\n\n[简体中文](/README.md) | [English](/languages/en/README.md) | [Français](/languages/fr/README.md) | [Русский](/languages/ru/README.md) | [فارسی](/languages/fa/README.md) | 한국어\n\n[![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)\n\n> JetBrains의 비상업 오픈소스 개발 라이선스 지원에 감사드립니다\n\n## 주요 기능\n\n* `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))\n* Qwen-MT-Plus AI 기반 정확한 다국어 번역\n* Reality 프로토콜 지원, Nginx 프론트엔드 권장 (스크립트 내 설치 가능)\n* fail2ban 보호 내장 (스크립트 내 설치 가능)\n* [@DuckSoft](https://github.com/DuckSoft)의 공유 링크 [제안](https://github.com/XTLS/Xray-core/issues/91) (beta) 채택, Qv2ray, V2rayN, V2rayNG 호환\n* [XTLS](https://github.com/XTLS/Xray-core/issues/158) 프로젝트 제안 채택, [UUIDv5](https://tools.ietf.org/html/rfc4122#section-4.3) 표준 준수, 사용자 정의 문자열을 VLESS UUID로 매핑 지원\n* gRPC 프로토콜 지원: [gRPC 프로토콜 사용하기](https://hey.run/archives/xrayjin-jie-wan-fa---shi-yong-grpcxie-yi)\n* Reality / ws/gRPC 로드 밸런싱 지원:\n  - [Reality 로드 밸런서 배포](https://hey.run/archives/bushu-reality-balance)\n  - [백엔드 로드 밸런서 구축](https://hey.run/archives/xrayjin-jie-wan-fa---da-jian-hou-duan-fu-wu-qi-fu-zai-jun-heng)\n\n## 추가 자료\n\n* Reality 설치 가이드: [Xray Reality 서버 구축](https://hey.run/archives/da-jian-xray-reality-xie-yi-fu-wu-qi)\n* Reality 프로토콜 위험: [Xray Reality 프로토콜의 위험](https://hey.run/archives/reality-xie-yi-de-feng-xian)\n* Reality로 서버 가속: [Reality 프로토콜 \"취약점\"으로 서버 가속](https://hey.run/archives/use-reality)\n\n## Telegram 그룹\n\n* 토론 그룹: [클릭하여 참여](https://t.me/+48VSqv7xIIFmZDZl)\n\n## 사전 준비\n\n* 공인 IP를 가진 해외 서버\n* Reality 프로토콜: Xray 요구사항을 충족하는 대상 도메인 준비\n* TLS 버전: 도메인 준비 및 A 레코드 추가\n* [Xray 공식 문서](https://xtls.github.io)를 읽고 Reality, TLS, WebSocket, gRPC 및 Xray 관련 개념 이해\n* **curl 설치 확인**: CentOS 사용자는 `yum install -y curl` 실행; Debian/Ubuntu 사용자는 `apt install -y curl` 실행\n\n## 빠른 설치\n\n```bash\nbash <(curl -Ss https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/install.sh)\n```\n\n## Docker 배포\n\nDocker 배포가 지원됩니다. 이미지에 Xray와 Nginx가 사전 설치되어 있으며, 컨테이너 내에서 원본 스크립트의 모든 기능을 사용할 수 있습니다. 자세한 내용은 [Docker 배포 가이드](/languages/ko/DOCKER.md)를 참조하세요.\n\n```bash\ngit clone https://github.com/hello-yunshu/Xray_bash_onekey.git\ncd Xray_bash_onekey\ndocker compose up -d\ndocker attach xray-onekey\n```\n\n## 주의사항\n\n* 설정의 의미를 모르면 필수 항목 외에는 기본값을 사용하세요 (계속 Enter)\n* Cloudflare 사용자는 설치 완료 후에만 CDN을 활성화하세요\n* 이 스크립트는 Linux 기초 지식과 컴퓨터 네트워크 기본이 필요합니다\n* Debian 12+ / Ubuntu 24.04+ / CentOS Stream 8+ 지원; 일부 CentOS 템플릿에서 컴파일 문제가 발생할 수 있으며, 문제 시 다른 OS로 전환 권장\n* 서버당 하나의 프록시만 배포하고 기본 포트 443 사용을 권장합니다\n* 사용자 정의 문자열을 UUIDv5로 매핑하려면 클라이언트 지원이 필요합니다\n* 깨끗한 환경에서 사용하세요; 초보자는 CentOS를 피하세요\n* 이 프로그램은 Nginx에 의존합니다 — [LNMP](https://lnmp.org) 등으로 Nginx를 설치한 사용자는 잠재적 충돌에 주의하세요\n* 작동을 확인하기 전까지 프로덕션 환경에 사용하지 마세요\n* 작성자는 제한된 지원만 제공합니다 (너무 멍청해서요)\n\n## 감사의 말\n\n* [wulabing/V2Ray_ws-tls_bash_onekey](https://github.com/wulabing/V2Ray_ws-tls_bash_onekey) 기반\n* TCP 가속 스크립트 출처: [ylx2016/Linux-NetSpeed](https://github.com/ylx2016/Linux-NetSpeed)\n\n## 인증서 설정\n\n**사용자 정의 인증서**: crt 및 key 파일을 `xray.crt`와 `xray.key`로 이름을 변경한 후 `/etc/idleleo/cert` 디렉토리에 넣으세요 (디렉토리가 없으면 생성). 인증서 권한 및 유효기간에 주의하세요 — 사용자 정의 인증서는 만료 후 수동으로 갱신해야 합니다.\n\n**자동 인증서**: 스크립트는 Let's Encrypt 인증서 자동 생성을 지원합니다 (유효기간 3개월), 이론적으로 자동 갱신이 지원됩니다.\n\n## 클라이언트 설정 확인\n\n```bash\ncat /etc/idleleo/info/xray_info.inf\n```\n\n## Xray 소개\n\n* Xray는 Windows, macOS, Android, iOS, Linux 등을 지원하는 우수한 오픈소스 네트워크 프록시 도구입니다\n* 이 스크립트는 원클릭 완전 설정 스크립트입니다 — 모든 프로세스가 정상적으로 완료되면 출력 결과에 따라 클라이언트를 설정하기만 하면 됩니다\n* **프로그램의 작동 방식과 원리를 완전히 이해할 것을 강력히 권장합니다**\n\n## 서비스 관리\n\n| 작업 | 명령어 |\n|------|--------|\n| Xray 시작 | `systemctl start xray` |\n| Xray 중지 | `systemctl stop xray` |\n| Nginx 시작 | `systemctl start nginx` |\n| Nginx 중지 | `systemctl stop nginx` |\n\n## 디렉토리\n\n| 항목 | 경로 |\n|------|------|\n| Xray 서버 설정 | `/etc/idleleo/conf/xray/config.json` |\n| Nginx 디렉토리 | `/usr/local/nginx` |\n| 인증서 파일 | `/etc/idleleo/cert/xray.key`, `/etc/idleleo/cert/xray.crt` |\n| 설정 정보 등 | `/etc/idleleo` |\n"
  },
  {
    "path": "languages/ru/DOCKER.md",
    "content": "# Руководство по развёртыванию Docker\n\n[简体中文](/DOCKER.md) | [English](/languages/en/DOCKER.md) | [Français](/languages/fr/DOCKER.md) | Русский | [فارسی](/languages/fa/DOCKER.md) | [한국어](/languages/ko/DOCKER.md)\n\nВ этом руководстве описывается запуск скрипта автоматической установки Xray с использованием Docker. Образ поставляется с предустановленными Xray и Nginx, все функции оригинального скрипта доступны в контейнере.\n\n## Быстрый старт\n\n### 1. Клонирование и сборка\n\n```bash\ngit clone https://github.com/hello-yunshu/Xray_bash_onekey.git\ncd Xray_bash_onekey\ndocker compose up -d\n```\n\n### 2. Вход в интерактивное меню установки\n\n```bash\ndocker attach xray-onekey\n```\n\nПри первом запуске скрипт установки запускается автоматически. Следуйте подсказкам для завершения настройки. После выхода из меню контейнер автоматически переходит в режим демона.\n\n### 3. Последующее управление\n\n```bash\ndocker exec -it xray-onekey idleleo\n```\n\n## Режимы работы\n\n| Режим | Описание | Команда |\n|-------|----------|---------|\n| `idleleo` (по умолчанию) | Запуск служб и вход в меню управления | `docker compose up -d` + `docker attach xray-onekey` |\n| `start` | Только запуск служб (режим демона) | Измените `command: start` в `docker-compose.yml` |\n| `shell` | Запуск служб и вход в оболочку | `docker exec -it xray-onekey bash` |\n\n## Управление\n\nВсе команды оригинального скрипта доступны:\n\n```bash\ndocker exec -it xray-onekey idleleo          # Меню управления\ndocker exec -it xray-onekey idleleo -s        # Просмотр информации об установке\ndocker exec -it xray-onekey idleleo -x        # Обновление Xray\ndocker exec -it xray-onekey idleleo -n        # Обновление Nginx\ndocker exec -it xray-onekey idleleo -h        # Справка\n```\n\n## Использование docker run\n\n```bash\ndocker build -t xray-onekey .\n\ndocker 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\n```\n\n## Сохранение данных\n\n| Том | Путь в контейнере | Описание |\n|-----|-------------------|----------|\n| `xray-conf` | `/etc/idleleo/conf` | Файлы конфигурации Xray и Nginx |\n| `xray-cert` | `/etc/idleleo/cert` | Файлы SSL-сертификатов |\n| `xray-info` | `/etc/idleleo/info` | Информация о подключении и файлы состояния |\n| `xray-logs` | `/var/log/xray` | Файлы журналов Xray |\n| `acme-data` | `/root/.acme.sh` | Данные выпуска сертификатов acme.sh |\n\n## Сетевая конфигурация\n\nКонтейнер использует `network_mode: host`, напрямую используя сеть хоста:\n\n* Режиму Reality необходимо видеть реальный IP клиента\n* Режиму TLS требуется прямая привязка к портам 443/80\n* Избегает дополнительных накладных расходов на трансляцию NAT\n\n## Важные замечания\n\n* В контейнере используется `fake-systemctl` вместо systemd; команды `systemctl` работают нормально\n* Встроенный сторожевой таймер проверяет статус служб каждые 30 секунд и автоматически перезапускает их при сбое\n* После выхода из меню управления контейнер автоматически переходит в режим демона — службы продолжают работать\n* Управление брандмауэром рекомендуется на уровне хоста\n* Автоматическое продление сертификатов работает в контейнере (убедитесь, что порт 80 доступен)\n\n## Устранение неполадок\n\n```bash\ndocker logs xray-onekey                    # Просмотр журналов контейнера\ndocker exec -it xray-onekey bash           # Вход в контейнер\ndocker exec -it xray-onekey idleleo -s     # Просмотр информации об установке\n```\n\n### Полный сброс\n\n```bash\ndocker compose down\ndocker volume rm xray-conf xray-cert xray-info xray-logs acme-data\ndocker compose up -d\n```\n"
  },
  {
    "path": "languages/ru/LC_MESSAGES/version",
    "content": "1777024070"
  },
  {
    "path": "languages/ru/README.md",
    "content": "# Скрипт автоматической установки Xray — Reality / VLESS WebSocket/gRPC+TLS + Nginx\n\n[简体中文](/README.md) | [English](/languages/en/README.md) | [Français](/languages/fr/README.md) | Русский | [فارسی](/languages/fa/README.md) | [한국어](/languages/ko/README.md)\n\n[![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)\n\n> Спасибо за разрешение на некоммерческое развитие открытого исходного кода JetBrains\n\n## Возможности\n\n* Введите `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))\n* Точный многоязычный перевод на базе Qwen-MT-Plus AI\n* Поддержка протокола Reality с рекомендуемым фронтендом Nginx (устанавливается через скрипт)\n* Встроенная защита fail2ban (устанавливается через скрипт)\n* Использует [предложение](https://github.com/XTLS/Xray-core/issues/91) ссылки для обмена от [@DuckSoft](https://github.com/DuckSoft) (beta), совместимое с Qv2ray, V2rayN, V2rayNG\n* Использует предложение проекта [XTLS](https://github.com/XTLS/Xray-core/issues/158), следуя стандарту [UUIDv5](https://tools.ietf.org/html/rfc4122#section-4.3), поддерживая маппинг пользовательских строк в UUID VLESS\n* Поддержка протокола gRPC: [Использование протокола gRPC](https://hey.run/archives/xrayjin-jie-wan-fa---shi-yong-grpcxie-yi)\n* Поддержка балансировки нагрузки Reality / ws/gRPC:\n  - [Развёртывание балансировщика нагрузки Reality](https://hey.run/archives/bushu-reality-balance)\n  - [Создание балансировщика нагрузки бэкенда](https://hey.run/archives/xrayjin-jie-wan-fa---da-jian-hou-duan-fu-wu-qi-fu-zai-jun-heng)\n\n## Дополнительные материалы\n\n* Руководство по установке Reality: [Настройка сервера Xray Reality](https://hey.run/archives/da-jian-xray-reality-xie-yi-fu-wu-qi)\n* Риски протокола Reality: [Риски протокола Xray Reality](https://hey.run/archives/reality-xie-yi-de-feng-xian)\n* Ускорение сервера с помощью Reality: [Ускорение сервера через «уязвимость» протокола Reality](https://hey.run/archives/use-reality)\n\n## Группа Telegram\n\n* Группа обсуждения: [Нажмите, чтобы присоединиться](https://t.me/+48VSqv7xIIFmZDZl)\n\n## Требования\n\n* Заграничный сервер с публичным IP-адресом\n* Для протокола Reality: подготовьте целевой домен, соответствующий требованиям Xray\n* Для версии с TLS: подготовьте домен и добавьте A-запись\n* Прочитайте [официальную документацию Xray](https://xtls.github.io), чтобы понять Reality, TLS, WebSocket, gRPC и связанные концепции Xray\n* **Убедитесь, что установлен curl**: пользователи CentOS выполняют `yum install -y curl`; пользователи Debian/Ubuntu выполняют `apt install -y curl`\n\n## Быстрая установка\n\n```bash\nbash <(curl -Ss https://raw.githubusercontent.com/hello-yunshu/Xray_bash_onekey/main/install.sh)\n```\n\n## Развёртывание Docker\n\nПоддерживается развёртывание через Docker. Образ поставляется с предустановленными Xray и Nginx, все функции оригинального скрипта доступны в контейнере. Подробности см. в [Руководстве по развёртыванию Docker](/languages/ru/DOCKER.md).\n\n```bash\ngit clone https://github.com/hello-yunshu/Xray_bash_onekey.git\ncd Xray_bash_onekey\ndocker compose up -d\ndocker attach xray-onekey\n```\n\n## Важные замечания\n\n* Если вы не знакомы с настройками, используйте значения по умолчанию для необязательных полей (просто нажимайте Enter)\n* Пользователям Cloudflare следует включать CDN только после завершения установки\n* Этот скрипт требует базовых знаний Linux и компьютерных сетей\n* Поддерживаются Debian 12+ / Ubuntu 24.04+ / CentOS Stream 8+; некоторые шаблоны CentOS могут иметь проблемы с компиляцией — при возникновении проблем рекомендуется сменить ОС\n* Рекомендуется развёртывать только один прокси на сервер и использовать порт 443 по умолчанию\n* Маппинг пользовательских строк в UUIDv5 требует поддержки на стороне клиента\n* Используйте этот скрипт в чистой среде; новичкам не рекомендуется использовать CentOS\n* Эта программа зависит от Nginx — пользователи, установившие Nginx через [LNMP](https://lnmp.org) или аналогичные скрипты, должны учитывать возможные конфликты\n* Не используйте этот скрипт в продакшене, не проверив его работоспособность\n* Автор предоставляет ограниченную поддержку (потому что не очень умён)\n\n## Благодарности\n\n* Основано на [wulabing/V2Ray_ws-tls_bash_onekey](https://github.com/wulabing/V2Ray_ws-tls_bash_onekey)\n* Скрипт ускорения TCP из [ylx2016/Linux-NetSpeed](https://github.com/ylx2016/Linux-NetSpeed)\n\n## Настройка сертификатов\n\n**Пользовательский сертификат**: Переименуйте файлы crt и key в `xray.crt` и `xray.key`, затем поместите их в каталог `/etc/idleleo/cert` (создайте его при отсутствии). Обратите внимание на права доступа и срок действия — пользовательские сертификаты необходимо продлевать вручную после истечения срока.\n\n**Автоматический сертификат**: Скрипт поддерживает автоматическую генерацию сертификатов Let's Encrypt (действительны 3 месяца), с теоретической поддержкой автоматического продления.\n\n## Просмотр конфигурации клиента\n\n```bash\ncat /etc/idleleo/info/xray_info.inf\n```\n\n## О Xray\n\n* Xray — отличный инструмент сетевого прокси с открытым исходным кодом, поддерживающий Windows, macOS, Android, iOS, Linux и другие платформы\n* Этот скрипт обеспечивает полную настройку в один клик — после успешного завершения всех процессов просто настройте клиент по результатам вывода\n* **Настоятельно рекомендуется** полностью понять рабочий процесс и принципы программы\n\n## Управление службами\n\n| Действие | Команда |\n|----------|---------|\n| Запустить Xray | `systemctl start xray` |\n| Остановить Xray | `systemctl stop xray` |\n| Запустить Nginx | `systemctl start nginx` |\n| Остановить Nginx | `systemctl stop nginx` |\n\n## Каталоги\n\n| Элемент | Путь |\n|---------|------|\n| Конфигурация сервера Xray | `/etc/idleleo/conf/xray/config.json` |\n| Каталог Nginx | `/usr/local/nginx` |\n| Файлы сертификатов | `/etc/idleleo/cert/xray.key`, `/etc/idleleo/cert/xray.crt` |\n| Информация о конфигурации и т.д. | `/etc/idleleo` |\n"
  },
  {
    "path": "languages/zh_CN/LC_MESSAGES/version",
    "content": "1737125065\n"
  },
  {
    "path": "po/POTFILES.in",
    "content": "install.sh\nfail2ban_manager.sh\nfile_manager.sh\n"
  },
  {
    "path": "po/cache_English.json",
    "content": "{\n  \"错误\": \"error\",\n  \"警告\": \"warning\",\n  \"未安装\": \"not installed\",\n  \"日志文件归档失败\": \"log file archiving failed\",\n  \"日志文件已轮转并归档为\": \"the log file has been rotated and archived as\",\n  \"当前系统为\": \"current system is\",\n  \"不在支持的系统列表内, 安装中断\": \"not in the list of supported systems, installation interrupted\",\n  \"无法获取远程语言文件信息\": \"unable to retrieve remote language file information\",\n  \"正在更新语言文件\": \"updating language files\",\n  \"语言文件更新失败\": \"language file update failed\",\n  \"语言文件无效\": \"invalid language file\",\n  \"版本文件更新失败\": \"failed to update the version file\",\n  \"语言文件更新完成\": \"language file update completed\",\n  \"正在安装\": \"installing\",\n  \"安装失败\": \"installation failed\",\n  \"将使用默认语言\": \"will use the default language\",\n  \"未找到\": \"not found\",\n  \"不支持的语言\": \"unsupported language\",\n  \"发现语言文件更新\": \"language file update detected\",\n  \"完成\": \"complete\",\n  \"失败\": \"failure\",\n  \"在线版本检测失败, 请稍后再试\": \"online version check failed, please try again later\",\n  \"安装\": \"installation\",\n  \"已安装\": \"installed\",\n  \"自启动配置\": \"auto-start configuration\",\n  \"链接库安装\": \"library installation\",\n  \"值为空或超出范围, 请重新输入\": \"the value is empty or out of range, please re-enter\",\n  \"值为空, 请重新输入\": \"the value is empty, please re-enter\",\n  \"确定端口\": \"confirm port\",\n  \"请输入端口\": \"please enter the port\",\n  \"默认值\": \"default value\",\n  \"请输入 0-65535 之间的值\": \"please enter a value between 0 and 65535\",\n  \"端口不允许使用, 请重新输入\": \"the port is not allowed to be used, please re-enter\",\n  \"请选择安装协议\": \"please select the installation agreement\",\n  \"默认\": \"default\",\n  \"请输入\": \"please enter\",\n  \"请输入有效的数字\": \"please enter a valid number\",\n  \"是否添加简单 ws/gRPC 协议 用于负载均衡\": \"whether to add simple ws/grpc protocol for load balancing\",\n  \"如不清楚具体用途, 请勿选择\": \"if the specific purpose is unclear, please do not select\",\n  \"已跳过添加简单 ws/gRPC 协议\": \"skipping adding simple ws/grpc protocol\",\n  \"是否需要自定义\": \"whether customization is needed\",\n  \"请勿与其他端口相同\": \"please do not use the same port as others\",\n  \"是否需要设置防火墙\": \"whether a firewall needs to be set up\",\n  \"防火墙\": \"firewall\",\n  \"重启完成\": \"restart completed\",\n  \"开放防火墙相关端口\": \"open the firewall for related ports\",\n  \"若修改配置, 请注意关闭防火墙相关端口\": \"if modifying the configuration, please remember to close the firewall-related ports\",\n  \"配置\": \"configuration\",\n  \"跳过防火墙设置\": \"skip firewall settings\",\n  \"伪装路径\": \"camouflage path\",\n  \"不需要\": \"not needed\",\n  \"用户名\": \"username\",\n  \"请输入正确的 email\": \"please enter the correct email\",\n  \"是否需要自定义字符串映射\": \"whether custom string mapping is needed\",\n  \"请输入自定义字符串\": \"please enter a custom string\",\n  \"最多30字符\": \"up to 30 characters\",\n  \"自定义字符串\": \"custom string\",\n  \"映射字符串\": \"mapping string\",\n  \"检测到 target 域名已配置, 是否保留\": \"target domain name has been configured, do you want to keep it\",\n  \"请输入一个域名\": \"please enter a domain name\",\n  \"域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用\": \"domain names must support tlsv1.3, x25519, and h2, and should not use redirection\",\n  \"确认域名符合要求后请输入\": \"after confirming that the domain name meets the requirements, please enter\",\n  \"正在检测域名请等待\": \"checking domain name, please wait\",\n  \"该域名不支持\": \"this domain name is not supported\",\n  \"该域名发生了跳转\": \"the domain name has been redirected\",\n  \"该域名可能不满足所有要求\": \"this domain name may not meet all requirements\",\n  \"是否仍要设置此域名\": \"do you still want to set this domain name\",\n  \"域名\": \"domain name\",\n  \"满足所有要求\": \"meet all requirements\",\n  \"域名的\": \"of the domain name\",\n  \"默认为\": \"default is\",\n  \"域名本身\": \"the domain name itself\",\n  \"如不清楚具体用途, 请勿继续\": \"if you are unsure of the specific purpose, please do not proceed\",\n  \"是否变更\": \"whether to change\",\n  \"负载均衡\": \"load balancing\",\n  \"请选择协议为 ws 或 gRPC\": \"please select the protocol as ws or grpc\",\n  \"返回\": \"return\",\n  \"本地文件 file_manager.sh 不存在, 正在下载\": \"the local file file_manager.sh does not exist, downloading now\",\n  \"下载失败, 请手动下载并安装新版本\": \"download failed, please manually download and install the new version\",\n  \"当前模式不支持此操作\": \"the current mode does not support this operation\",\n  \"配置用途可以参考文章\": \"for configuration purposes, please refer to the article\",\n  \"修改\": \"modify\",\n  \"端口\": \"port\",\n  \"不支持\": \"not supported\",\n  \"用户名修改\": \"username modification\",\n  \"请先删除多余的用户\": \"please delete the extra users first\",\n  \"配置修改\": \"configuration modification\",\n  \"检测到 Xray 的权限控制, 启动修改程序\": \"xray permission control detected, starting modification program\",\n  \"修改完成\": \"modification completed\",\n  \"若更新无效, 建议直接卸载再安装\": \"if the update is ineffective, it is recommended to uninstall and then reinstall\",\n  \"部分新功能需要重新安装才可生效\": \"some new features require reinstallation to take effect\",\n  \"检测到存在最新版\": \"a newer version has been detected\",\n  \"脚本可能未兼容此版本\": \"the script may not be compatible with this version\",\n  \"是否更新\": \"whether to update\",\n  \"启动失败\": \"startup failed\",\n  \"是否回滚到之前的版本\": \"whether to roll back to the previous version\",\n  \"未执行回滚操作\": \"rollback operation not executed\",\n  \"正在回滚\": \"rolling back\",\n  \"已成功回滚到之前的\": \"successfully rolled back to the previous\",\n  \"版本\": \"version\",\n  \"回滚失败\": \"rollback failed\",\n  \"重装\": \"reinstall\",\n  \"Reality 协议有流量偷跑的风险\": \"reality protocol has the risk of traffic leakage\",\n  \"已跳过安装\": \"installation skipped\",\n  \"已存在, 跳过编译安装过程\": \"already exists, skip the compilation and installation process\",\n  \"检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装\": \"other nginx packages installed have been detected. continuing the installation will cause conflicts. please resolve this issue before proceeding with the installation\",\n  \"即将下载已编译的\": \"about to download the compiled\",\n  \"不支持的系统架构\": \"unsupported system architecture\",\n  \"当前安装模式不需要\": \"the current installation mode is not required\",\n  \"备份旧版\": \"backup old version\",\n  \"删除旧版\": \"delete old version\",\n  \"是否保留原 Nginx 配置文件\": \"whether to keep the original nginx configuration file\",\n  \"原配置文件已删除\": \"the original configuration file has been deleted\",\n  \"原配置文件已保留\": \"the original configuration file has been retained\",\n  \"删除\": \"delete\",\n  \"备份\": \"backup\",\n  \"已为最新版\": \"already updated to the latest version\",\n  \"设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)\": \"set up a background scheduled automatic update program (including: script/xray/nginx)\",\n  \"设置自动更新\": \"set automatic update\",\n  \"已设置自动更新\": \"auto-update has been set\",\n  \"是否关闭\": \"whether to close\",\n  \"删除自动更新\": \"delete automatic update\",\n  \"安装 SSL 证书生成脚本依赖\": \"install ssl certificate generation script dependencies\",\n  \"安装 SSL 证书生成脚本\": \"install ssl certificate generation script\",\n  \"检测到原域名配置存在, 是否跳过域名设置\": \"detected existing original domain configuration, do you want to skip domain settings\",\n  \"无法获取公网IP地址\": \"unable to obtain public ip address\",\n  \"安装终止\": \"installation terminated\",\n  \"已跳过域名设置\": \"domain setting skipped\",\n  \"确定域名信息\": \"confirm domain name information\",\n  \"请输入你的域名信息\": \"please enter your domain name information\",\n  \"请选择公网IP(IPv4/IPv6)或手动输入域名\": \"please select a public ip (ipv4/ipv6) or manually enter a domain name\",\n  \"正在获取公网IP信息, 请耐心等待\": \"retrieving public ip information, please wait patiently\",\n  \"此选项用于服务器商仅提供域名访问服务器\": \"this option is used when the server provider only provides domain name access to the server\",\n  \"注意服务器商域名添加 CNAME 记录\": \"note: add a cname record for the server provider's domain\",\n  \"域名DNS解析IP\": \"domain name dns resolution ip\",\n  \"公网IP/域名\": \"public ip/domain name\",\n  \"域名DNS解析IP与公网IP匹配\": \"domain name dns resolves ip matches public ip\",\n  \"请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray\": \"please make sure the domain has added the correct a/aaaa record; otherwise, xray will not function properly\",\n  \"域名DNS解析IP与公网IP不匹配, 请选择\": \"the domain name's dns resolution ip does not match the public ip. please select\",\n  \"继续安装\": \"continue installation\",\n  \"重新输入\": \"re-enter\",\n  \"终止安装\": \"cancel installation\",\n  \"检测到原IP配置存在, 是否跳过IP设置\": \"original ip configuration detected. skip ip setting\",\n  \"已跳过IP设置\": \"ip setting skipped\",\n  \"确定公网IP信息\": \"confirm public ip information\",\n  \"请选择公网IP为IPv4或IPv6\": \"please select public ip as ipv4 or ipv6\",\n  \"手动输入\": \"manual input\",\n  \"端口未被占用\": \"the port is not in use\",\n  \"检测到\": \"detected\",\n  \"端口被占用\": \"port is occupied\",\n  \"以下为\": \"the following is\",\n  \"端口占用信息\": \"port occupation information\",\n  \"尝试终止占用的进程\": \"attempt to terminate the occupied process\",\n  \"证书测试签发成功, 开始正式签发\": \"certificate test issuance successful, starting official issuance\",\n  \"证书测试签发失败\": \"certificate test issuance failed\",\n  \"证书生成成功\": \"certificate generated successfully\",\n  \"证书配置成功\": \"certificate configured successfully\",\n  \"证书生成失败\": \"certificate generation failed\",\n  \"检测到 Xray 配置过多用户\": \"detected that xray is configured with too many users\",\n  \"是否保留原 Xray 配置文件\": \"keep the original xray configuration file\",\n  \"添加简单 ws/gRPC 协议\": \"add simple ws/grpc protocol\",\n  \"检测到配置文件, 是否读取配置文件\": \"configuration file detected. do you want to read the configuration file\",\n  \"已删除配置文件\": \"configuration file deleted\",\n  \"已保留配置文件\": \"configuration file has been retained\",\n  \"检测到当前安装模式与配置文件的安装模式不一致\": \"detected that the current installation mode is inconsistent with the installation mode in the configuration file\",\n  \"是否保留配置文件 (强烈不建议)\": \"keep configuration file (strongly not recommended)\",\n  \"请务必确保配置文件正确\": \"please make sure the configuration file is correct\",\n  \"检测到配置文件不完整, 是否保留配置文件\": \"incomplete configuration file detected. do you want to keep the configuration file\",\n  \"配置删除\": \"configuration deletion\",\n  \"设置 Nginx 开机自启\": \"set nginx to start automatically on boot\",\n  \"设置\": \"settings\",\n  \"开机自启\": \"startup on boot\",\n  \"关闭 Nginx 开机自启\": \"disable nginx from starting automatically on boot\",\n  \"关闭\": \"close\",\n  \"重启\": \"restart\",\n  \"启动\": \"start\",\n  \"停止\": \"stop\",\n  \"新版本已自动设置证书自动更新\": \"the new version has automatically set up certificate auto-updating\",\n  \"老版本请及时删除 废弃的 改版证书自动更新\": \"please delete the old version in a timely manner. the obsolete certificate will be automatically updated after the revision\",\n  \"已设置改版证书自动更新\": \"the certificate renewal has been set to update automatically\",\n  \"是否需要删除改版证书自动更新 (请删除)\": \"whether to delete the certificate auto-update for the revised version (please delete)\",\n  \"删除改版证书自动更新\": \"delete version certificate automatic update\",\n  \"已过期\": \"expired\",\n  \"证书生成日期\": \"certificate generation date\",\n  \"证书生成天数\": \"number of days for certificate generation\",\n  \"证书剩余天数\": \"remaining days of certificate\",\n  \"是否立即更新证书\": \"whether to update the certificate immediately\",\n  \"证书签发工具不存在, 请确认是否证书为脚本签发\": \"the certificate issuance tool does not exist. please confirm whether the certificate was issued by a script\",\n  \"证书更新\": \"certificate update\",\n  \"本地文件 fail2ban_manager.sh 不存在, 正在下载\": \"the local file fail2ban_manager.sh does not exist, downloading\",\n  \"检测到日志文件大小如下:\": \"the log file size is detected as follows\",\n  \"即将清除\": \"about to clear\",\n  \"日志清理\": \"log cleanup\",\n  \"保留现有自动清理日志任务\": \"retain the existing automatic log cleanup task\",\n  \"是否需要设置自动清理日志\": \"whether to set automatic log cleanup\",\n  \"清空屏幕\": \"clear the screen\",\n  \"将在 每周三 04:00 自动清空日志\": \"logs will be automatically cleared every wednesday at 04:00\",\n  \"已设置自动清理日志任务\": \"automatic log cleanup task has been set\",\n  \"是否需要删除现有自动清理日志任务\": \"do you need to delete the existing automatic log cleanup task\",\n  \"删除自动清理日志任务\": \"delete automatic log cleanup task\",\n  \"设置自动清理日志\": \"set up automatic log cleanup\",\n  \"配置分享\": \"configuration sharing\",\n  \"分享链接\": \"share link\",\n  \"二维码\": \"qr code\",\n  \"生成分享链接\": \"generate share link\",\n  \"安装成功\": \"installation successful\",\n  \"目前分享链接规范为实验阶段, 请自行判断是否适用\": \"currently, the sharing link specification is in the experimental phase; please determine its applicability on your own\",\n  \"配置信息\": \"configuration information\",\n  \"主机\": \"host\",\n  \"用户id\": \"user id\",\n  \"加密\": \"encryption\",\n  \"传输协议\": \"transmission protocol\",\n  \"底层传输安全\": \"underlying transmission security\",\n  \"路径\": \"path\",\n  \"不要落下\": \"don't fall behind\",\n  \"不需要加\": \"no need to add\",\n  \"流控\": \"flow control\",\n  \"即将申请证书, 支持使用自定义证书\": \"certificate will be applied soon, supporting the use of custom certificates\",\n  \"如需使用自定义证书, 请按如下步骤:\": \"if you need to use a custom certificate, please follow the steps below\",\n  \"1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)\": \"1. rename the certificate files: private key (xray.key), certificate (xray.crt)\",\n  \"2. 将重命名后的证书文件放入\": \"2. place the renamed certificate file into\",\n  \"目录后再运行脚本\": \"run the script after the directory\",\n  \"3. 重新运行脚本\": \"3. re-run the script\",\n  \"是否继续\": \"whether to continue\",\n  \"所有证书文件均已存在, 是否保留\": \"all certificate files already exist, do you want to keep them\",\n  \"已删除\": \"deleted\",\n  \"证书应用\": \"certificate application\",\n  \"证书文件已存在, 是否保留\": \"the certificate file already exists, do you want to keep it\",\n  \"证书签发残留文件已存在, 是否保留\": \"the certificate issuance residual file already exists, do you want to keep it\",\n  \"添加\": \"add\",\n  \"请选择支持的 TLS 版本\": \"please select the supported tls version\",\n  \"兼容模式\": \"compatibility mode\",\n  \"安全模式\": \"safe mode\",\n  \"已切换至\": \"already switched to\",\n  \"请先安装\": \"please install first\",\n  \"此模式不支持修改\": \"this mode does not support modification\",\n  \"即将显示用户, 一次仅能显示一个\": \"users will be displayed soon, only one user can be displayed at a time\",\n  \"请选择显示用户使用的协议\": \"please select the protocol used by the user to display\",\n  \"请选择要显示的用户编号\": \"please select the user number to display\",\n  \"选择错误\": \"selecting incorrectly\",\n  \"请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户\": \"please directly select [view xray configuration information] in the main menu to display the primary user\",\n  \"请先检测 Xray 是否正确安装\": \"please first check if xray is installed correctly\",\n  \"是否继续显示用户\": \"whether to continue displaying the user\",\n  \"此模式不支持删除用户\": \"this mode does not support deleting users\",\n  \"即将添加用户, 一次仅能添加一个\": \"adding users is coming soon, but only one user can be added at a time\",\n  \"请选择添加用户使用的协议\": \"please select the protocol used for adding users\",\n  \"添加用户\": \"add user\",\n  \"是否继续添加用户\": \"whether to continue adding users\",\n  \"此模式不支持添加用户\": \"this mode does not support adding users\",\n  \"即将删除用户, 一次仅能删除一个\": \"deleting user, only one at a time\",\n  \"请选择删除用户使用的协议\": \"please select the agreement used by the deleted user\",\n  \"请选择要删除的用户编号\": \"please select the user number to delete\",\n  \"主用户无法删除\": \"the main user cannot be deleted\",\n  \"删除用户\": \"delete user\",\n  \"是否继续删除用户\": \"whether to continue deleting the user\",\n  \"文件不存在\": \"the file does not exist\",\n  \"已配置 Xray 流量统计\": \"xray traffic statistics have been configured\",\n  \"是否需要关闭此功能\": \"do you need to disable this feature\",\n  \"关闭 Xray 流量统计\": \"disable xray traffic statistics\",\n  \"流量统计需要使用\": \"traffic statistics need to be used\",\n  \"可能会影响 Xray 性能\": \"may affect x-ray performance\",\n  \"设置 Xray 流量统计\": \"set up xray traffic statistics\",\n  \"已卸载\": \"uninstalled\",\n  \"是否卸载\": \"whether to uninstall\",\n  \"是否删除所有脚本文件\": \"delete all script files\",\n  \"已删除所有文件\": \"all files have been deleted\",\n  \"ヾ(￣▽￣) 拜拜~\": \"(￣▽￣)ノ bye bye~\",\n  \"已保留脚本文件 (包含 SSL 证书等)\": \"script file has been retained (including ssl certificate, etc.)\",\n  \"是否保留配置文件\": \"whether to keep the configuration file\",\n  \"已清空证书遗留文件\": \"certificate residual files have been cleared\",\n  \"秒后\": \"seconds later\",\n  \"检测最新版本失败\": \"failed to detect the latest version\",\n  \"新版本\": \"new version\",\n  \"更新内容\": \"update content\",\n  \"存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新\": \"a new version is available, but the version change is significant and may cause compatibility issues. do you want to update\",\n  \"存在新版本, 是否更新\": \"new version exists, update\",\n  \"检测 脚本 最新版本失败\": \"failed to detect the latest version of the script\",\n  \"脚本 版本差别过大, 跳过更新\": \"script version difference is too large, skipping update\",\n  \"更新完成\": \"update completed\",\n  \"脚本版本变化较大, 若服务无法正常运行请卸载后重装\": \"the script version has changed significantly. if the service cannot run properly, please uninstall and reinstall it\",\n  \"当前版本为最新版本\": \"the current version is the latest version\",\n  \"下载最新脚本\": \"download the latest script\",\n  \"该选项暂时无法使用\": \"this option is temporarily unavailable\",\n  \"此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装\": \"this mode is recommended for load balancing; it is generally not recommended for use. do you want to install\",\n  \"变更\": \"change\",\n  \"负载均衡配置\": \"load balancing configuration\",\n  \"清除日志文件\": \"clear log files\",\n  \"查看证书状态\": \"view certificate status\",\n  \"更新证书有效期\": \"update certificate expiration date\",\n  \"设置证书自动更新\": \"set certificate auto-update\",\n  \"设置 Fail2ban 防暴力破解\": \"set up fail2ban to prevent brute-force attacks\",\n  \"显示帮助\": \"show help\",\n  \"更新\": \"update\",\n  \"脚本卸载\": \"script uninstallation\",\n  \"显示安装信息\": \"show installation information\",\n  \"加速\": \"accelerate\",\n  \"显示\": \"display\",\n  \"访问信息\": \"access information\",\n  \"错误信息\": \"error message\",\n  \"脚本版本变化较大, 可能存在不兼容情况, 是否继续使用\": \"the script version has changed significantly, and there may be compatibility issues. do you want to continue using it\",\n  \"检测失败\": \"detection failed\",\n  \"有新版\": \"there is a new version\",\n  \"最新版\": \"latest version\",\n  \"版本未知\": \"version unknown\",\n  \"运行中\": \"running\",\n  \"无需测试\": \"no testing required\",\n  \"未运行\": \"not running\",\n  \"无法连通\": \"unable to connect\",\n  \"本地正常\": \"locally normal\",\n  \"脚本维护中.. 请稍后再试\": \"script is under maintenance. please try again later\",\n  \"无法检测所需依赖的在线版本, 请稍后再试\": \"the required online version of the dependency cannot be detected. please try again later\",\n  \"请输入数字\": \"please enter a number\",\n  \"请输入 1 到 6 之间的有效数字\": \"please enter a valid number between 1 and 6\",\n  \"无效的选择\": \"invalid selection\",\n  \"请输入备份名称\": \"please enter the backup name\",\n  \"不需要后缀\": \"no suffix needed\",\n  \"报错信息\": \"error message\",\n  \"备份完整性可能受到影响, 请检查上述错误信息\": \"backup integrity may be affected. please check the error messages above\",\n  \"备份失败\": \"backup failed\",\n  \"备份成功\": \"backup successful\",\n  \"请确保备份文件在目录\": \"please ensure the backup file is in the directory\",\n  \"没有找到备份文件\": \"backup file not found\",\n  \"发现多个备份文件\": \"found multiple backup files\",\n  \"将使用最新的文件进行恢复\": \"the latest file will be used for recovery\",\n  \"找到最新备份文件\": \"find the latest backup file\",\n  \"恢复备份\": \"restore backup\",\n  \"恢复成功\": \"recovery successful\",\n  \"记得安装\": \"remember to install\",\n  \"恢复失败\": \"recovery failed\",\n  \"安装管理脚本\": \"install management script\",\n  \"作者\": \"author\",\n  \"当前模式\": \"current mode\",\n  \"当前语言\": \"current language\",\n  \"可以使用\": \"can be used\",\n  \"命令管理脚本\": \"command management script\",\n  \"版本检测\": \"version detection\",\n  \"脚本\": \"script\",\n  \"运行状态\": \"running status\",\n  \"连通性\": \"connectivity\",\n  \"安装向导\": \"installation wizard\",\n  \"配置变更\": \"configuration change\",\n  \"用户管理\": \"user management\",\n  \"查看\": \"view\",\n  \"用户\": \"user\",\n  \"查看信息\": \"view information\",\n  \"实时访问日志\": \"real-time access log\",\n  \"实时错误日志\": \"real-time error log\",\n  \"服务相关\": \"service-related\",\n  \"所有服务\": \"all services\",\n  \"证书相关\": \"certificate-related\",\n  \"证书状态\": \"certificate status\",\n  \"证书有效期\": \"certificate validity period\",\n  \"证书自动更新\": \"certificate auto update\",\n  \"其他选项\": \"other options\",\n  \"自动更新\": \"automatic update\",\n  \"防暴力破解\": \"anti-brute force\",\n  \"流量统计\": \"traffic statistics\",\n  \"清除\": \"clear\",\n  \"日志文件\": \"log file\",\n  \"测试\": \"test\",\n  \"服务器网速\": \"server network speed\",\n  \"备份恢复\": \"backup and restore\",\n  \"全部文件\": \"all files\",\n  \"恢复\": \"recovery\",\n  \"卸载向导\": \"uninstall wizard\",\n  \"卸载\": \"uninstall\",\n  \"清空\": \"empty\",\n  \"证书文件\": \"certificate file\",\n  \"退出\": \"exit\",\n  \"请输入选项\": \"please enter an option\",\n  \"不建议\": \"not recommended\",\n  \"回到菜单\": \"back to menu\",\n  \"用于防止暴力破解\": \"used to prevent brute-force attacks\",\n  \"主菜单\": \"main menu\",\n  \"管理\": \"management\",\n  \"状态\": \"status\",\n  \"请选择一个选项\": \"please select an option\",\n  \"已经安装, 跳过安装步骤\": \"already installed, skip the installation step\",\n  \"未安装, 请先安装\": \"not installed, please install first\",\n  \"规则\": \"rule\",\n  \"跳过启用\": \"skip activation\",\n  \"已启用\": \"enabled\",\n  \"请选择\": \"please select\",\n  \"操作\": \"operation\",\n  \"添加自定义规则\": \"add custom rule\",\n  \"请输入新的\": \"please enter the new one\",\n  \"名称\": \"name\",\n  \"请输入日志路径\": \"please enter the log path\",\n  \"请输入最大重试次数\": \"please enter the maximum number of retries\",\n  \"最大重试次数必须在 1 到 99 之间\": \"the maximum number of retries must be between 1 and 99\",\n  \"请输入封禁时间\": \"please enter the ban time\",\n  \"秒\": \"second\",\n  \"封禁时间必须在 1 到 8640000 秒之间\": \"the ban duration must be between 1 and 8,640,000 seconds\",\n  \"自定义规则添加成功\": \"custom rule added successfully\",\n  \"重启以应用新规则\": \"restart to apply new rules\",\n  \"停止成功\": \"stopped successfully\",\n  \"总体状态\": \"overall status\",\n  \"默认启用的 Jail 状态\": \"default enabled jail status\",\n  \"封锁情况\": \"lockdown situation\",\n  \"新版本可用\": \"new version available\",\n  \"当前版本\": \"current version\",\n  \"请访问\": \"please visit\",\n  \"查看更新说明\": \"view update notes\",\n  \"正在下载新版本\": \"downloading the new version\",\n  \"下载完成, 请重新运行脚本\": \"download completed, please run the script again\",\n  \"跳过更新\": \"skip update\",\n  \"当前已经是最新版本\": \"it is already the latest version\",\n  \"用法\": \"usage\",\n  \"文件扩展名\": \"file extension\",\n  \"目录路径\": \"directory path\",\n  \"目录\": \"table of contents\",\n  \"不存在, 请检查路径\": \"does not exist, please check the path\",\n  \"列出所有\": \"list all\",\n  \"文件\": \"file\",\n  \"文件名\": \"file name\",\n  \"序号\": \"serial number\",\n  \"请输入网址 (例如 hey.run)\": \"please enter the url (e.g., hey.run)\",\n  \"不要包含 http:// 或 https:// 开头\": \"do not include http:// or https:// at the beginning\",\n  \"已创建\": \"created\",\n  \"请输入主机\": \"please enter the host\",\n  \"请输入权重\": \"please enter the weight\",\n  \"追加完成\": \"additional completion\",\n  \"请输入要编辑的文件编号\": \"please enter the file number to edit\",\n  \"未安装, 正在尝试安装\": \"not installed, attempting to install\",\n  \"已编辑\": \"edited\",\n  \"请输入要删除的文件编号\": \"please enter the file number to delete\",\n  \"不支持的文件扩展名\": \"unsupported file extension\",\n  \"创建一个新的\": \"create a new\",\n  \"编辑一个已存在的\": \"edit an existing\",\n  \"删除一个已存在的\": \"delete an existing\",\n  \"无效选项, 请重试\": \"invalid option, please try again\",\n  \"重启成功\": \"restart successful\",\n  \"重启失败\": \"restart failed\",\n  \"请检查配置文件是否有误\": \"please check if there is an error in the configuration file\",\n  \"未启用或配置异常\": \"not enabled or configuration exception\",\n  \"是否添加 Reality 负载均衡\": \"whether to add reality load balancing\",\n  \"使用此功能前，建议先阅读作者教程\": \"before using this feature, it is recommended to first read the author's tutorial\",\n  \"已跳过\": \"skipped\",\n  \"如用作 Reality 负载均衡二级服务器则无需安装\": \"if used as a secondary server for reality load balancing, installation is not required\",\n  \"是否额外安装 nginx 前置保护\": \"whether to additionally install nginx as a front-end protection\",\n  \"推荐\": \"recommend\",\n  \"检测到已开启 Reality 负载均衡\": \"reality load balancing has been detected as enabled\",\n  \"如用作 Reality 负载均衡主服务器必须安装\": \"if used as a reality load balancing master server, it must be installed\",\n  \"检测到已安装\": \"installed detected\",\n  \"已取消卸载\": \"uninstallation canceled\",\n  \"下载失败\": \"download failed\",\n  \"下载成功\": \"download successful\",\n  \"解压失败\": \"decompression failed\",\n  \"链接分享\": \"link sharing\",\n  \"修改语言\": \"change language\",\n  \"此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装\": \"this mode is only intended for traffic forwarding and is not recommended for other use cases. do you want to install it\",\n  \"信息\": \"information\",\n  \"配置不完整, 退出更新\": \"configuration is incomplete; exiting update\",\n  \"配置不存在, 退出更新\": \"configuration does not exist; exiting update\",\n  \"无效的选择, 请重试\": \"invalid selection, please try again\",\n  \"systemd 无法读取 SSH 日志\": \"systemd cannot read ssh logs\",\n  \"网址不能包含 http:// 或 https:// 前缀\": \"the url cannot contain the http:// or https:// prefix\",\n  \"日志文件清空失败\": \"failed to clear the log file\",\n  \"当前用户是 root 用户, 开始安装\": \"the current user is the root user. starting installation\",\n  \"当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本\": \"the current user is not the root user. please switch to the root user and then run the script again\",\n  \"已跳过设置自动清理日志\": \"automatic log cleanup has been skipped\",\n  \"脚本更新失败\": \"script update failed\",\n  \"更新失败\": \"update failed\",\n  \"更新脚本\": \"update script\",\n  \"更新向导\": \"update wizard\",\n  \"频繁更新 Nginx, 请确认 Nginx 有更新的必要\": \"nginx is updated frequently. please confirm whether an update is actually necessary\",\n  \"开始更新\": \"starting update\",\n  \"建议选择 TLSv1.3 only (安全模式)\": \"we recommend selecting “tlsv1.3 only (secure mode).”\",\n  \"由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)\": \"since h3 only supports tlsv1.3, it only supports tlsv1.3 (secure mode)\",\n  \"请选择 TLS 版本\": \"please select the tls version\",\n  \"建议选择 TLSv1.3 (安全模式)\": \"we recommend selecting tlsv1.3 (secure mode)\",\n  \"当前模式不支持\": \"current mode not supported\",\n  \"Nginx配置文件不存在 或 当前模式不支持\": \"the nginx configuration file does not exist, or the current mode is not supported\",\n  \"已禁用\": \"disabled\",\n  \"管理模块\": \"management module\",\n  \"服务管理\": \"service management\",\n  \"管理 Fail2ban 模块\": \"manage the fail2ban module\",\n  \"未找到任何模块化配置文件\": \"no modular configuration files were found\",\n  \"模块名称\": \"module name\",\n  \"请选择要管理的模块\": \"please select the module you want to manage\",\n  \"启用\": \"enable\",\n  \"禁用\": \"disable\",\n  \"模块\": \"module\",\n  \"操作已取消\": \"operation canceled\",\n  \"可能自动更新后有兼容问题, 谨慎启用\": \"there may be compatibility issues after an automatic update, so enable it with caution\",\n  \"是否启用\": \"enable or not\",\n  \"是否\": \"whether… or not\",\n  \"是否下载并安装新版本\": \"do you want to download and install the new version\",\n  \"无法获取网卡, 将监控所有网卡\": \"unable to obtain the network adapter; monitoring all network adapters\",\n  \"监控网卡\": \"monitor network card\",\n  \"监控端口\": \"monitoring port\",\n  \"按 q 键退出 iftop\": \"press the q key to exit iftop\",\n  \"实时流量\": \"real-time traffic\"\n}"
  },
  {
    "path": "po/cache_French.json",
    "content": "{\n  \"错误\": \"erreur\",\n  \"警告\": \"avertissement\",\n  \"未安装\": \"non installé\",\n  \"日志文件归档失败\": \"échec de l'archivage du fichier journal\",\n  \"日志文件已轮转并归档为\": \"le fichier journal a été tourné et archivé sous \",\n  \"当前系统为\": \"le système actuel est\",\n  \"不在支持的系统列表内, 安装中断\": \"non inclus dans la liste des systèmes pris en charge, l'installation est interrompue\",\n  \"无法获取远程语言文件信息\": \"impossible d'obtenir les informations sur le fichier de langue distant\",\n  \"正在更新语言文件\": \"mise à jour du fichier de langue en cours\",\n  \"语言文件更新失败\": \"échec de la mise à jour du fichier de langue\",\n  \"语言文件无效\": \"fichier de langue invalide\",\n  \"版本文件更新失败\": \"échec de la mise à jour du fichier de version\",\n  \"语言文件更新完成\": \"mise à jour du fichier de langue terminée\",\n  \"正在安装\": \"en cours d'installation\",\n  \"安装失败\": \"échec de l'installation\",\n  \"将使用默认语言\": \"utilisera la langue par défaut\",\n  \"未找到\": \"non trouvé\",\n  \"不支持的语言\": \"langue non prise en charge\",\n  \"发现语言文件更新\": \"découvrir la mise à jour du fichier de langue\",\n  \"完成\": \"terminé\",\n  \"失败\": \"échec\",\n  \"在线版本检测失败, 请稍后再试\": \"la vérification de la version en ligne a échoué, veuillez réessayer plus tard\",\n  \"安装\": \"installation\",\n  \"已安装\": \"déjà installé\",\n  \"自启动配置\": \"configuration de démarrage automatique\",\n  \"链接库安装\": \"installation de la bibliothèque liée\",\n  \"值为空或超出范围, 请重新输入\": \"la valeur est vide ou hors de la plage, veuillez saisir à nouveau\",\n  \"值为空, 请重新输入\": \"valeur vide, veuillez saisir à nouveau\",\n  \"确定端口\": \"déterminer le port\",\n  \"请输入端口\": \"veuillez entrer le port\",\n  \"默认值\": \"valeur par défaut\",\n  \"请输入 0-65535 之间的值\": \"veuillez saisir une valeur comprise entre 0 et 65535\",\n  \"端口不允许使用, 请重新输入\": \"le port n'est pas autorisé, veuillez entrer à nouveau\",\n  \"请选择安装协议\": \"veuillez sélectionner le contrat d'installation\",\n  \"默认\": \"par défaut\",\n  \"请输入\": \"veuillez entrer\",\n  \"请输入有效的数字\": \"veuillez saisir un nombre valide\",\n  \"是否添加简单 ws/gRPC 协议 用于负载均衡\": \"ajouter ou non le protocole simple ws/grpc pour l'équilibrage de charge\",\n  \"如不清楚具体用途, 请勿选择\": \"si l'utilisation spécifique n'est pas claire, veuillez ne pas choisir\",\n  \"已跳过添加简单 ws/gRPC 协议\": \"ajout du protocole simple ws/grpc déjà ignoré\",\n  \"是否需要自定义\": \"a-t-on besoin d'une personnalisation \",\n  \"请勿与其他端口相同\": \"veuillez ne pas utiliser le même port que les autres\",\n  \"是否需要设置防火墙\": \"doit-on configurer un pare-feu \",\n  \"防火墙\": \"pare-feu\",\n  \"重启完成\": \"redémarrage terminé\",\n  \"开放防火墙相关端口\": \"ouvrir les ports du pare-feu correspondants\",\n  \"若修改配置, 请注意关闭防火墙相关端口\": \"si vous modifiez la configuration, veuillez veiller à désactiver les ports associés au pare-feu\",\n  \"配置\": \"configuration\",\n  \"跳过防火墙设置\": \"passer la configuration du pare-feu\",\n  \"伪装路径\": \"chemin de camouflage\",\n  \"不需要\": \"pas besoin\",\n  \"用户名\": \"nom d'utilisateur\",\n  \"请输入正确的 email\": \"veuillez saisir une adresse e-mail correcte\",\n  \"是否需要自定义字符串映射\": \"a-t-on besoin d'une correspondance de chaînes personnalisée \",\n  \"请输入自定义字符串\": \"veuillez saisir une chaîne personnalisée\",\n  \"最多30字符\": \"maximum 30 caractères\",\n  \"自定义字符串\": \"chaîne personnalisée\",\n  \"映射字符串\": \"chaîne de mappage\",\n  \"检测到 target 域名已配置, 是否保留\": \"cible détectée, domaine déjà configuré, souhaitez-vous le conserver \",\n  \"请输入一个域名\": \"veuillez saisir un nom de domaine\",\n  \"域名要求支持 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\",\n  \"确认域名符合要求后请输入\": \"après avoir confirmé que le nom de domaine est conforme aux exigences, veuillez entrer\",\n  \"正在检测域名请等待\": \"vérification du nom de domaine en cours, veuillez patienter\",\n  \"该域名不支持\": \"ce nom de domaine n'est pas pris en charge\",\n  \"该域名发生了跳转\": \"ce nom de domaine a subi une redirection\",\n  \"该域名可能不满足所有要求\": \"ce nom de domaine pourrait ne pas répondre à toutes les exigences\",\n  \"是否仍要设置此域名\": \"voulez-vous toujours configurer ce nom de domaine \",\n  \"域名\": \"nom de domaine\",\n  \"满足所有要求\": \"satisfaire toutes les exigences\",\n  \"域名的\": \"du nom de domaine\",\n  \"默认为\": \"par défaut pour\",\n  \"域名本身\": \"le nom de domaine lui-même\",\n  \"如不清楚具体用途, 请勿继续\": \"si l'utilisation spécifique n'est pas claire, veuillez ne pas continuer\",\n  \"是否变更\": \"est-ce que cela change\",\n  \"负载均衡\": \"équilibrage de charge\",\n  \"请选择协议为 ws 或 gRPC\": \"veuillez sélectionner le protocole ws ou grpc\",\n  \"返回\": \"retour\",\n  \"本地文件 file_manager.sh 不存在, 正在下载\": \"le fichier local file_manager.sh n'existe pas, téléchargement en cours\",\n  \"下载失败, 请手动下载并安装新版本\": \"échec du téléchargement, veuillez télécharger manuellement et installer la nouvelle version\",\n  \"当前模式不支持此操作\": \"le mode actuel ne prend pas en charge cette opération\",\n  \"配置用途可以参考文章\": \"pour la configuration d'utilisation, vous pouvez consulter l'article\",\n  \"修改\": \"modifier\",\n  \"端口\": \"port\",\n  \"不支持\": \"ne prend pas en charge\",\n  \"用户名修改\": \"modification du nom d'utilisateur\",\n  \"请先删除多余的用户\": \"veuillez d'abord supprimer les utilisateurs en trop\",\n  \"配置修改\": \"modification de la configuration\",\n  \"检测到 Xray 的权限控制, 启动修改程序\": \"contrôle d'autorisation xray détecté, lancement du programme de modification\",\n  \"修改完成\": \"modification terminée\",\n  \"若更新无效, 建议直接卸载再安装\": \"si la mise à jour n'est pas effective, il est recommandé de désinstaller puis réinstaller directement\",\n  \"部分新功能需要重新安装才可生效\": \"certaines nouvelles fonctionnalités nécessitent une réinstallation pour entrer en vigueur\",\n  \"检测到存在最新版\": \"dernière version détectée\",\n  \"脚本可能未兼容此版本\": \"le script pourrait ne pas être compatible avec cette version\",\n  \"是否更新\": \"mettre à jour ou non\",\n  \"启动失败\": \"départ échoué\",\n  \"是否回滚到之前的版本\": \"revenir à la version précédente \",\n  \"未执行回滚操作\": \"opération de rollback non effectuée\",\n  \"正在回滚\": \"en train de revenir en arrière\",\n  \"已成功回滚到之前的\": \"rétrogradé avec succès à l'ancien\",\n  \"版本\": \"version\",\n  \"回滚失败\": \"échec du retour en arrière\",\n  \"重装\": \"réinstallation\",\n  \"Reality 协议有流量偷跑的风险\": \"le protocole reality présente un risque de fuite de trafic\",\n  \"已跳过安装\": \"installation ignorée\",\n  \"已存在, 跳过编译安装过程\": \"déjà existant, sauter le processus de compilation et d'installation\",\n  \"检测到其他套件安装的 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\",\n  \"即将下载已编译的\": \"téléchargement imminent du compilé\",\n  \"不支持的系统架构\": \"architecture système non prise en charge\",\n  \"当前安装模式不需要\": \"le mode d'installation actuel n'est pas nécessaire\",\n  \"备份旧版\": \"sauvegarder l'ancienne version\",\n  \"删除旧版\": \"supprimer l'ancienne version\",\n  \"是否保留原 Nginx 配置文件\": \"conserver le fichier de configuration nginx original \",\n  \"原配置文件已删除\": \"le fichier de configuration d'origine a été supprimé\",\n  \"原配置文件已保留\": \"le fichier de configuration d'origine a été conservé\",\n  \"删除\": \"supprimer\",\n  \"备份\": \"sauvegarde\",\n  \"已为最新版\": \"déjà à la dernière version\",\n  \"设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)\": \"configurer un programme de mise à jour automatique en arrière-plan (incluant : script/xray/nginx)\",\n  \"设置自动更新\": \"configurer la mise à jour automatique\",\n  \"已设置自动更新\": \"mise à jour automatique configurée\",\n  \"是否关闭\": \"fermer ou non\",\n  \"删除自动更新\": \"supprimer la mise à jour automatique\",\n  \"安装 SSL 证书生成脚本依赖\": \"installer les dépendances du script de génération de certificat ssl\",\n  \"安装 SSL 证书生成脚本\": \"installer le script de génération de certificat ssl\",\n  \"检测到原域名配置存在, 是否跳过域名设置\": \"la configuration du domaine d'origine a été détectée. voulez-vous ignorer la configuration du domaine \",\n  \"无法获取公网IP地址\": \"impossible d'obtenir une adresse ip publique\",\n  \"安装终止\": \"installation terminée\",\n  \"已跳过域名设置\": \"configuration du domaine ignorée\",\n  \"确定域名信息\": \"déterminer les informations du domaine\",\n  \"请输入你的域名信息\": \"veuillez saisir les informations de votre domaine\",\n  \"请选择公网IP(IPv4/IPv6)或手动输入域名\": \"veuillez sélectionner une adresse ip publique (ipv4/ipv6) ou saisir manuellement un nom de domaine\",\n  \"正在获取公网IP信息, 请耐心等待\": \"obtention des informations sur l'adresse ip publique, veuillez patienter\",\n  \"此选项用于服务器商仅提供域名访问服务器\": \"cette option est utilisée lorsque le fournisseur de serveur ne fournit que l'accès au serveur via un nom de domaine\",\n  \"注意服务器商域名添加 CNAME 记录\": \"veuillez noter que le fournisseur de serveur doit ajouter un enregistrement cname au nom de domaine\",\n  \"域名DNS解析IP\": \"résolution dns de nom de domaine vers ip\",\n  \"公网IP/域名\": \"adresse ip publique/domaine\",\n  \"域名DNS解析IP与公网IP匹配\": \"le dns du nom de domaine résout l'ip correspondant à l'adresse ip publique\",\n  \"请确保域名添加了正确的 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\",\n  \"域名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\",\n  \"继续安装\": \"continuer l'installation\",\n  \"重新输入\": \"saisir à nouveau\",\n  \"终止安装\": \"arrêter l'installation\",\n  \"检测到原IP配置存在, 是否跳过IP设置\": \"configuration ip originale détectée, souhaitez-vous ignorer la configuration ip \",\n  \"已跳过IP设置\": \"paramètres ip ignorés\",\n  \"确定公网IP信息\": \"déterminer les informations sur l'adresse ip publique\",\n  \"请选择公网IP为IPv4或IPv6\": \"veuillez sélectionner une adresse ip publique en ipv4 ou ipv6\",\n  \"手动输入\": \"saisie manuelle\",\n  \"端口未被占用\": \"le port n'est pas occupé\",\n  \"检测到\": \"détecté\",\n  \"端口被占用\": \"le port est occupé\",\n  \"以下为\": \"voici\",\n  \"端口占用信息\": \"informations sur l'utilisation du port\",\n  \"尝试终止占用的进程\": \"essayez de terminer le processus occupé\",\n  \"证书测试签发成功, 开始正式签发\": \"test de certificat émis avec succès, début de la délivrance officielle\",\n  \"证书测试签发失败\": \"échec de la signature du certificat de test\",\n  \"证书生成成功\": \"génération de certificat réussie\",\n  \"证书配置成功\": \"configuration du certificat réussie\",\n  \"证书生成失败\": \"échec de la génération du certificat\",\n  \"检测到 Xray 配置过多用户\": \"détection d'un nombre excessif d'utilisateurs configurés pour xray\",\n  \"是否保留原 Xray 配置文件\": \"conserver le fichier de configuration xray original \",\n  \"添加简单 ws/gRPC 协议\": \"ajouter le protocole simple ws/grpc\",\n  \"检测到配置文件, 是否读取配置文件\": \"fichier de configuration détecté, souhaitez-vous lire le fichier de configuration \",\n  \"已删除配置文件\": \"profil supprimé\",\n  \"已保留配置文件\": \"profil déjà réservé\",\n  \"检测到当前安装模式与配置文件的安装模式不一致\": \"le mode d'installation actuel est détecté comme étant incompatible avec le mode d'installation du profil\",\n  \"是否保留配置文件 (强烈不建议)\": \"conserver le fichier de configuration (fortement déconseillé)\",\n  \"请务必确保配置文件正确\": \"veuillez vous assurer que le fichier de configuration est correct\",\n  \"检测到配置文件不完整, 是否保留配置文件\": \"fichier de configuration détecté incomplet, souhaitez-vous conserver le fichier de configuration \",\n  \"配置删除\": \"configuration supprimée\",\n  \"设置 Nginx 开机自启\": \"configurer le démarrage automatique de nginx\",\n  \"设置\": \"configurer\",\n  \"开机自启\": \"démarrage automatique\",\n  \"关闭 Nginx 开机自启\": \"désactiver le démarrage automatique de nginx\",\n  \"关闭\": \"fermer\",\n  \"重启\": \"redémarrer\",\n  \"启动\": \"démarrer\",\n  \"停止\": \"arrêter\",\n  \"新版本已自动设置证书自动更新\": \"la nouvelle version a automatiquement configuré la mise à jour automatique des certificats\",\n  \"老版本请及时删除 废弃的 改版证书自动更新\": \"veuillez supprimer rapidement les anciennes versions. les certificats obsolètes seront automatiquement mis à jour\",\n  \"已设置改版证书自动更新\": \"la mise à jour automatique du certificat de révision est déjà configurée\",\n  \"是否需要删除改版证书自动更新 (请删除)\": \"doit-on supprimer la mise à jour automatique du certificat de révision (veuillez supprimer) \",\n  \"删除改版证书自动更新\": \"supprimer la mise à jour automatique du certificat révisé\",\n  \"已过期\": \"dépassé\",\n  \"证书生成日期\": \"date de génération du certificat\",\n  \"证书生成天数\": \"nombre de jours pour la génération du certificat\",\n  \"证书剩余天数\": \"nombre de jours restants du certificat\",\n  \"是否立即更新证书\": \"mettre à jour immédiatement le certificat \",\n  \"证书签发工具不存在, 请确认是否证书为脚本签发\": \"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\",\n  \"证书更新\": \"mise à jour du certificat\",\n  \"本地文件 fail2ban_manager.sh 不存在, 正在下载\": \"le fichier local fail2ban_manager.sh n'existe pas, téléchargement en cours\",\n  \"检测到日志文件大小如下:\": \"taille du fichier journal détectée comme suit \",\n  \"即将清除\": \"bientôt effacé\",\n  \"日志清理\": \"nettoyage des journaux\",\n  \"保留现有自动清理日志任务\": \"conserver la tâche existante de nettoyage automatique des journaux\",\n  \"是否需要设置自动清理日志\": \"doit-on configurer la suppression automatique des journaux \",\n  \"清空屏幕\": \"effacer l'écran\",\n  \"将在 每周三 04:00 自动清空日志\": \"les journaux seront automatiquement vidés tous les mercredis à 04h00\",\n  \"已设置自动清理日志任务\": \"la tâche de nettoyage automatique des journaux a été configurée\",\n  \"是否需要删除现有自动清理日志任务\": \"doit-on supprimer la tâche existante de nettoyage automatique des journaux \",\n  \"删除自动清理日志任务\": \"supprimer la tâche de nettoyage automatique des journaux\",\n  \"设置自动清理日志\": \"configurer la suppression automatique des journaux\",\n  \"配置分享\": \"partage de configuration\",\n  \"分享链接\": \"partager le lien\",\n  \"二维码\": \"code qr\",\n  \"生成分享链接\": \"générer un lien de partage\",\n  \"安装成功\": \"installation réussie\",\n  \"目前分享链接规范为实验阶段, 请自行判断是否适用\": \"la norme de partage des liens est actuellement en phase expérimentale ; veuillez déterminer vous-même si elle s'applique\",\n  \"配置信息\": \"informations de configuration\",\n  \"主机\": \"hôte\",\n  \"用户id\": \"identifiant d'utilisateur\",\n  \"加密\": \"chiffrement\",\n  \"传输协议\": \"protocole de transmission\",\n  \"底层传输安全\": \"sécurité de la couche de transport\",\n  \"路径\": \"chemin\",\n  \"不要落下\": \"ne pas laisser tomber\",\n  \"不需要加\": \"pas besoin d'ajouter\",\n  \"流控\": \"contrôle de flux\",\n  \"即将申请证书, 支持使用自定义证书\": \"vais demander un certificat, supporte l'utilisation de certificats personnalisés\",\n  \"如需使用自定义证书, 请按如下步骤:\": \"si vous souhaitez utiliser un certificat personnalisé, veuillez suivre les étapes ci-dessous \",\n  \"1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)\": \"1. renommer le fichier de certificat : clé privée (xray.key), certificat (xray.crt)\",\n  \"2. 将重命名后的证书文件放入\": \"2. placez le fichier de certificat renommé dans\",\n  \"目录后再运行脚本\": \"exécuter le script après la table des matières\",\n  \"3. 重新运行脚本\": \"3. exécuter à nouveau le script\",\n  \"是否继续\": \"continuer ou non\",\n  \"所有证书文件均已存在, 是否保留\": \"tous les fichiers de certificat existent déjà, souhaitez-vous les conserver \",\n  \"已删除\": \"supprimé\",\n  \"证书应用\": \"application de certificat\",\n  \"证书文件已存在, 是否保留\": \"le fichier de certificat existe déjà, souhaitez-vous le conserver \",\n  \"证书签发残留文件已存在, 是否保留\": \"le fichier résiduel de la signature du certificat existe déjà, souhaitez-vous le conserver \",\n  \"添加\": \"ajouter\",\n  \"请选择支持的 TLS 版本\": \"veuillez sélectionner la version tls prise en charge\",\n  \"兼容模式\": \"mode de compatibilité\",\n  \"安全模式\": \"mode sécurisé\",\n  \"已切换至\": \"déjà basculé vers\",\n  \"请先安装\": \"veuillez installer d'abord\",\n  \"此模式不支持修改\": \"ce mode ne supporte pas la modification\",\n  \"即将显示用户, 一次仅能显示一个\": \"affichage des utilisateurs à venir, un seul utilisateur peut être affiché à la fois\",\n  \"请选择显示用户使用的协议\": \"veuillez sélectionner le protocole utilisé par l'utilisateur à afficher\",\n  \"请选择要显示的用户编号\": \"veuillez sélectionner le numéro d'utilisateur à afficher\",\n  \"选择错误\": \"erreur de sélection\",\n  \"请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户\": \"veuillez sélectionner directement [afficher les informations de configuration xray] dans le menu principal pour afficher l'utilisateur principal\",\n  \"请先检测 Xray 是否正确安装\": \"veuillez d'abord vérifier que xray est correctement installé\",\n  \"是否继续显示用户\": \"continuer à afficher l'utilisateur\",\n  \"此模式不支持删除用户\": \"ce mode ne prend pas en charge la suppression d'utilisateurs\",\n  \"即将添加用户, 一次仅能添加一个\": \"ajout d'utilisateur en cours, un seul utilisateur peut être ajouté à la fois\",\n  \"请选择添加用户使用的协议\": \"veuillez sélectionner le protocole utilisé pour ajouter l'utilisateur\",\n  \"添加用户\": \"ajouter un utilisateur\",\n  \"是否继续添加用户\": \"voulez-vous continuer à ajouter des utilisateurs \",\n  \"此模式不支持添加用户\": \"ce mode ne prend pas en charge l'ajout d'utilisateurs\",\n  \"即将删除用户, 一次仅能删除一个\": \"l'utilisateur sera supprimé, une seule suppression à la fois\",\n  \"请选择删除用户使用的协议\": \"veuillez sélectionner le protocole utilisé par l'utilisateur à supprimer\",\n  \"请选择要删除的用户编号\": \"veuillez sélectionner le numéro d'utilisateur à supprimer\",\n  \"主用户无法删除\": \"l'utilisateur principal ne peut pas être supprimé\",\n  \"删除用户\": \"supprimer l'utilisateur\",\n  \"是否继续删除用户\": \"voulez-vous continuer à supprimer l'utilisateur \",\n  \"文件不存在\": \"le fichier n'existe pas\",\n  \"已配置 Xray 流量统计\": \"statistiques de trafic xray déjà configurées\",\n  \"是否需要关闭此功能\": \"doit-on désactiver cette fonctionnalité \",\n  \"关闭 Xray 流量统计\": \"fermer la statistique du trafic xray\",\n  \"流量统计需要使用\": \"la statistique du trafic doit être utilisée\",\n  \"可能会影响 Xray 性能\": \"cela pourrait affecter les performances de l'analyseur xray\",\n  \"设置 Xray 流量统计\": \"configurer la statistique du trafic xray\",\n  \"已卸载\": \"déjà désinstallé\",\n  \"是否卸载\": \"est-ce que je désinstalle \",\n  \"是否删除所有脚本文件\": \"supprimer tous les fichiers de script \",\n  \"已删除所有文件\": \"tous les fichiers ont été supprimés\",\n  \"ヾ(￣▽￣) 拜拜~\": \"(￣▽￣) ヾ salut~\",\n  \"已保留脚本文件 (包含 SSL 证书等)\": \"fichier de script déjà conservé (contenant certificat ssl, etc.)\",\n  \"是否保留配置文件\": \"conserver le fichier de configuration \",\n  \"已清空证书遗留文件\": \"les fichiers résiduels du certificat ont été effacés\",\n  \"秒后\": \"seconde(s) après\",\n  \"检测最新版本失败\": \"échec de la vérification de la dernière version\",\n  \"新版本\": \"nouvelle version\",\n  \"更新内容\": \"contenu de la mise à jour\",\n  \"存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新\": \"une nouvelle version est disponible, mais les changements sont importants, il pourrait y avoir des incompatibilités. voulez-vous mettre à jour \",\n  \"存在新版本, 是否更新\": \"une nouvelle version est disponible, souhaitez-vous la mettre à jour \",\n  \"检测 脚本 最新版本失败\": \"échec de la vérification de la dernière version du script\",\n  \"脚本 版本差别过大, 跳过更新\": \"la différence de version du script est trop grande, mise à jour ignorée\",\n  \"更新完成\": \"mise à jour terminée\",\n  \"脚本版本变化较大, 若服务无法正常运行请卸载后重装\": \"la version du script a beaucoup changé. si le service ne fonctionne pas correctement, veuillez le désinstaller puis le réinstaller\",\n  \"当前版本为最新版本\": \"la version actuelle est la dernière version\",\n  \"下载最新脚本\": \"télécharger le script le plus récent\",\n  \"该选项暂时无法使用\": \"cette option n'est pas disponible pour le moment\",\n  \"此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装\": \"ce mode est recommandé pour l'équilibrage de charge, il n'est généralement pas recommandé d'utiliser, souhaitez-vous installer \",\n  \"变更\": \"changement\",\n  \"负载均衡配置\": \"configuration d'équilibrage de charge\",\n  \"清除日志文件\": \"effacer les fichiers journaux\",\n  \"查看证书状态\": \"vérifier l'état du certificat\",\n  \"更新证书有效期\": \"mettre à jour la validité du certificat\",\n  \"设置证书自动更新\": \"configurer la mise à jour automatique des certificats\",\n  \"设置 Fail2ban 防暴力破解\": \"configurer fail2ban pour prévenir les attaques par force brute\",\n  \"显示帮助\": \"afficher l'aide\",\n  \"更新\": \"mise à jour\",\n  \"脚本卸载\": \"désinstallation de script\",\n  \"显示安装信息\": \"afficher les informations d'installation\",\n  \"加速\": \"accélérer\",\n  \"显示\": \"afficher\",\n  \"访问信息\": \"informations de visite\",\n  \"错误信息\": \"message d'erreur\",\n  \"脚本版本变化较大, 可能存在不兼容情况, 是否继续使用\": \"la version du script a beaucoup changé, il pourrait y avoir des incompatibilités. voulez-vous continuer à l'utiliser \",\n  \"检测失败\": \"échec de la détection\",\n  \"有新版\": \"il y a une nouvelle version\",\n  \"最新版\": \"dernière version\",\n  \"版本未知\": \"version inconnue\",\n  \"运行中\": \"en cours d'exécution\",\n  \"无需测试\": \"pas besoin de tester\",\n  \"未运行\": \"non exécuté\",\n  \"无法连通\": \"impossible de se connecter\",\n  \"本地正常\": \"normal localement\",\n  \"脚本维护中.. 请稍后再试\": \"script en cours de maintenance... veuillez réessayer plus tard\",\n  \"无法检测所需依赖的在线版本, 请稍后再试\": \"impossible de détecter la version en ligne des dépendances requises, veuillez réessayer plus tard\",\n  \"请输入数字\": \"veuillez entrer un chiffre\",\n  \"请输入 1 到 6 之间的有效数字\": \"veuillez saisir un chiffre valide entre 1 et 6\",\n  \"无效的选择\": \"choix invalide\",\n  \"请输入备份名称\": \"veuillez saisir le nom de la sauvegarde\",\n  \"不需要后缀\": \"pas besoin de suffixe\",\n  \"报错信息\": \"message d'erreur\",\n  \"备份完整性可能受到影响, 请检查上述错误信息\": \"l'intégrité de la sauvegarde pourrait être affectée, veuillez vérifier les informations d'erreur ci-dessus\",\n  \"备份失败\": \"échec de la sauvegarde\",\n  \"备份成功\": \"sauvegarde réussie\",\n  \"请确保备份文件在目录\": \"veuillez vous assurer que le fichier de sauvegarde se trouve dans le répertoire\",\n  \"没有找到备份文件\": \"aucun fichier de sauvegarde n'a été trouvé\",\n  \"发现多个备份文件\": \"découverte de plusieurs fichiers de sauvegarde\",\n  \"将使用最新的文件进行恢复\": \"la restauration sera effectuée à partir du fichier le plus récent\",\n  \"找到最新备份文件\": \"trouver le fichier de sauvegarde le plus récent\",\n  \"恢复备份\": \"restaurer la sauvegarde\",\n  \"恢复成功\": \"restauration réussie\",\n  \"记得安装\": \"rappelez-vous d'installer\",\n  \"恢复失败\": \"échec de la restauration\",\n  \"安装管理脚本\": \"installer le script de gestion\",\n  \"作者\": \"auteur\",\n  \"当前模式\": \"mode actuel\",\n  \"当前语言\": \"langue actuelle\",\n  \"可以使用\": \"peut être utilisé\",\n  \"命令管理脚本\": \"script de gestion des commandes\",\n  \"版本检测\": \"détection de version\",\n  \"脚本\": \"script\",\n  \"运行状态\": \"état de fonctionnement\",\n  \"连通性\": \"connectivité\",\n  \"安装向导\": \"assistant d'installation\",\n  \"配置变更\": \"changement de configuration\",\n  \"用户管理\": \"gestion des utilisateurs\",\n  \"查看\": \"voir\",\n  \"用户\": \"utilisateur\",\n  \"查看信息\": \"afficher les informations\",\n  \"实时访问日志\": \"journal d'accès en temps réel\",\n  \"实时错误日志\": \"journal des erreurs en temps réel\",\n  \"服务相关\": \"service lié\",\n  \"所有服务\": \"tous les services\",\n  \"证书相关\": \"relatif aux certificats\",\n  \"证书状态\": \"état du certificat\",\n  \"证书有效期\": \"durée de validité du certificat\",\n  \"证书自动更新\": \"mise à jour automatique des certificats\",\n  \"其他选项\": \"autres options\",\n  \"自动更新\": \"mise à jour automatique\",\n  \"防暴力破解\": \"protection contre les attaques par force brute\",\n  \"流量统计\": \"statistiques de trafic\",\n  \"清除\": \"effacer\",\n  \"日志文件\": \"fichier de journal\",\n  \"测试\": \"test\",\n  \"服务器网速\": \"vitesse de connexion du serveur\",\n  \"备份恢复\": \"sauvegarde et restauration\",\n  \"全部文件\": \"tous les fichiers\",\n  \"恢复\": \"récupération\",\n  \"卸载向导\": \"assistant de désinstallation\",\n  \"卸载\": \"désinstaller\",\n  \"清空\": \"vider\",\n  \"证书文件\": \"fichier de certificat\",\n  \"退出\": \"quitter\",\n  \"请输入选项\": \"veuillez saisir une option\",\n  \"不建议\": \"déconseillé\",\n  \"回到菜单\": \"retour au menu\",\n  \"用于防止暴力破解\": \"utilisé pour prévenir les attaques par force brute\",\n  \"主菜单\": \"menu principal\",\n  \"管理\": \"gestion\",\n  \"状态\": \"état\",\n  \"请选择一个选项\": \"veuillez sélectionner une option\",\n  \"已经安装, 跳过安装步骤\": \"déjà installé, sauter l'étape d'installation\",\n  \"未安装, 请先安装\": \"non installé, veuillez installer d'abord\",\n  \"规则\": \"règle\",\n  \"跳过启用\": \"passer l'activation\",\n  \"已启用\": \"déjà activé\",\n  \"请选择\": \"veuillez sélectionner\",\n  \"操作\": \"opération\",\n  \"添加自定义规则\": \"ajouter une règle personnalisée\",\n  \"请输入新的\": \"veuillez entrer le nouveau\",\n  \"名称\": \"nom\",\n  \"请输入日志路径\": \"veuillez saisir le chemin du journal\",\n  \"请输入最大重试次数\": \"veuillez saisir le nombre maximum de tentatives\",\n  \"最大重试次数必须在 1 到 99 之间\": \"le nombre maximum de tentatives doit être compris entre 1 et 99\",\n  \"请输入封禁时间\": \"veuillez saisir le temps de blocage\",\n  \"秒\": \"seconde\",\n  \"封禁时间必须在 1 到 8640000 秒之间\": \"la durée de blocage doit être comprise entre 1 et 8640000 secondes\",\n  \"自定义规则添加成功\": \"règle personnalisée ajoutée avec succès\",\n  \"重启以应用新规则\": \"redémarrez pour appliquer les nouvelles règles\",\n  \"停止成功\": \"arrêt réussi\",\n  \"总体状态\": \"état général\",\n  \"默认启用的 Jail 状态\": \"état jail activé par défaut\",\n  \"封锁情况\": \"situation de blocus\",\n  \"新版本可用\": \"nouvelle version disponible\",\n  \"当前版本\": \"version actuelle\",\n  \"请访问\": \"veuillez visiter\",\n  \"查看更新说明\": \"voir les notes de mise à jour\",\n  \"正在下载新版本\": \"téléchargement de la nouvelle version en cours\",\n  \"下载完成, 请重新运行脚本\": \"téléchargement terminé, veuillez relancer le script\",\n  \"跳过更新\": \"ignorer la mise à jour\",\n  \"当前已经是最新版本\": \"c'est déjà la version la plus récente\",\n  \"用法\": \"utilisation\",\n  \"文件扩展名\": \"extension de fichier\",\n  \"目录路径\": \"chemin du répertoire\",\n  \"目录\": \"table des matières\",\n  \"不存在, 请检查路径\": \"inexistant, veuillez vérifier le chemin\",\n  \"列出所有\": \"énumérer tout\",\n  \"文件\": \"fichier\",\n  \"文件名\": \"nom du fichier\",\n  \"序号\": \"numéro de série\",\n  \"请输入网址 (例如 hey.run)\": \"veuillez saisir l'adresse url (par exemple hey.run)\",\n  \"不要包含 http:// 或 https:// 开头\": \"ne pas inclure http:// ou https:// au début\",\n  \"已创建\": \"déjà créé\",\n  \"请输入主机\": \"veuillez entrer l'hôte\",\n  \"请输入权重\": \"veuillez entrer le poids\",\n  \"追加完成\": \"ajout complété\",\n  \"请输入要编辑的文件编号\": \"veuillez saisir le numéro du fichier à éditer\",\n  \"未安装, 正在尝试安装\": \"non installé, en cours d'installation\",\n  \"已编辑\": \"déjà édité\",\n  \"请输入要删除的文件编号\": \"veuillez saisir le numéro du fichier à supprimer\",\n  \"不支持的文件扩展名\": \"extension de fichier non prise en charge\",\n  \"创建一个新的\": \"créer un nouveau\",\n  \"编辑一个已存在的\": \"modifier un existant\",\n  \"删除一个已存在的\": \"supprimer un existant\",\n  \"无效选项, 请重试\": \"option invalide, veuillez réessayer\",\n  \"重启成功\": \"redémarrage réussi\",\n  \"重启失败\": \"redémarrage échoué\",\n  \"请检查配置文件是否有误\": \"veuillez vérifier si le fichier de configuration contient des erreurs\",\n  \"未启用或配置异常\": \"non activé ou configuration anormale\",\n  \"是否添加 Reality 负载均衡\": \"ajouter ou non la charge de réalité\",\n  \"使用此功能前，建议先阅读作者教程\": \"avant d'utiliser cette fonction, il est recommandé de lire le tutoriel de l'auteur\",\n  \"已跳过\": \"déjà sauté\",\n  \"如用作 Reality 负载均衡二级服务器则无需安装\": \"s'il est utilisé comme serveur secondaire de chargement du répartiteur de charge reality, aucune installation n'est nécessaire\",\n  \"是否额外安装 nginx 前置保护\": \"installer ou non une protection frontale nginx supplémentaire\",\n  \"推荐\": \"recommandé\",\n  \"检测到已开启 Reality 负载均衡\": \"réalité de charge équilibrée détectée active\",\n  \"如用作 Reality 负载均衡主服务器必须安装\": \"si utilisé comme serveur principal de chargement équilibré reality, il doit être installé\",\n  \"检测到已安装\": \"détecté comme déjà installé\",\n  \"已取消卸载\": \"désinstallation annulée\",\n  \"下载失败\": \"échec du téléchargement\",\n  \"下载成功\": \"téléchargement réussi\",\n  \"解压失败\": \"échec du décompression\",\n  \"链接分享\": \"partage de lien\",\n  \"修改语言\": \"modifier la langue\",\n  \"此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装\": \"ce mode est uniquement utilisé pour le transit du trafic et n’est pas recommandé pour d’autres utilisations. voulez-vous l’installer \",\n  \"信息\": \"informations\",\n  \"配置不完整, 退出更新\": \"configuration incomplète, quittez la mise à jour\",\n  \"配置不存在, 退出更新\": \"la configuration n’existe pas, quittez la mise à jour\",\n  \"无效的选择, 请重试\": \"option invalide, veuillez réessayer\",\n  \"systemd 无法读取 SSH 日志\": \"systemd ne peut pas lire les journaux ssh\",\n  \"网址不能包含 http:// 或 https:// 前缀\": \"l’adresse url ne peut pas contenir le préfixe http:// ou https://\",\n  \"日志文件清空失败\": \"échec de l’effacement du fichier journal\",\n  \"当前用户是 root 用户, 开始安装\": \"l’utilisateur actuel est l’utilisateur root, commencez l’installation\",\n  \"当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本\": \"l’utilisateur actuel n’est pas l’utilisateur root. veuillez passer à l’utilisateur root et exécuter à nouveau le script\",\n  \"已跳过设置自动清理日志\": \"la configuration de l’effacement automatique des journaux a été ignorée\",\n  \"脚本更新失败\": \"mise à jour du script échouée\",\n  \"更新失败\": \"mise à jour échouée\",\n  \"更新脚本\": \"mettre à jour le script\",\n  \"更新向导\": \"assistant de mise à jour\",\n  \"频繁更新 Nginx, 请确认 Nginx 有更新的必要\": \"mettez nginx à jour fréquemment et vérifiez qu’il est nécessaire de le mettre à jour\",\n  \"开始更新\": \"commencer la mise à jour\",\n  \"建议选择 TLSv1.3 only (安全模式)\": \"il est recommandé de sélectionner tlsv1.3 uniquement (mode sécurisé)\",\n  \"由于 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é)\",\n  \"请选择 TLS 版本\": \"veuillez sélectionner la version tls\",\n  \"建议选择 TLSv1.3 (安全模式)\": \"il est recommandé de choisir tlsv1.3 (mode sécurisé)\",\n  \"当前模式不支持\": \"le mode actuel n’est pas pris en charge\",\n  \"Nginx配置文件不存在 或 当前模式不支持\": \"le fichier de configuration nginx n’existe pas ou le mode actuel n’est pas pris en charge\",\n  \"已禁用\": \"désactivé\",\n  \"管理模块\": \"module de gestion\",\n  \"服务管理\": \"gestion des services\",\n  \"管理 Fail2ban 模块\": \"gérer le module fail2ban\",\n  \"未找到任何模块化配置文件\": \"aucun fichier de configuration modulaire n’a été trouvé\",\n  \"模块名称\": \"nom du module\",\n  \"请选择要管理的模块\": \"veuillez sélectionner le module à gérer\",\n  \"启用\": \"activer\",\n  \"禁用\": \"désactiver\",\n  \"模块\": \"module\",\n  \"操作已取消\": \"l’opération a été annulée\",\n  \"可能自动更新后有兼容问题, 谨慎启用\": \"il peut y avoir des problèmes de compatibilité après une mise à jour automatique ; activez avec prudence\",\n  \"是否启用\": \"activer ou non\",\n  \"是否\": \"est-ce que…\",\n  \"是否下载并安装新版本\": \"télécharger et installer la nouvelle version \",\n  \"无法获取网卡, 将监控所有网卡\": \"impossible d’obtenir la carte réseau ; toutes les cartes réseaux seront surveillées\",\n  \"监控网卡\": \"surveiller la carte réseau\",\n  \"监控端口\": \"port de surveillance\",\n  \"按 q 键退出 iftop\": \"appuyez sur la touche q pour quitter iftop\",\n  \"实时流量\": \"trafic en temps réel\"\n}"
  },
  {
    "path": "po/cache_Korean.json",
    "content": "{\n  \"错误\": \"오류\",\n  \"警告\": \"경고\",\n  \"未安装\": \"미설치\",\n  \"日志文件归档失败\": \"로그 파일 보관 실패\",\n  \"日志文件已轮转并归档为\": \"로그 파일이 회전되어 다음과 같이 보관되었습니다\",\n  \"当前系统为\": \"현재 시스템은\",\n  \"不在支持的系统列表内, 安装中断\": \"지원되지 않는 시스템 목록에 포함되어 있어 설치가 중단되었습니다\",\n  \"无法获取远程语言文件信息\": \"원격 언어 파일 정보를 가져올 수 없습니다\",\n  \"正在更新语言文件\": \"언어 파일을 업데이트 중입니다\",\n  \"语言文件更新失败\": \"언어 파일 업데이트 실패\",\n  \"语言文件无效\": \"언어 파일이 유효하지 않습니다\",\n  \"版本文件更新失败\": \"버전 파일 업데이트 실패\",\n  \"语言文件更新完成\": \"언어 파일 업데이트 완료\",\n  \"正在安装\": \"설치 중\",\n  \"安装失败\": \"설치 실패\",\n  \"将使用默认语言\": \"기본 언어를 사용합니다\",\n  \"未找到\": \"찾을 수 없음\",\n  \"不支持的语言\": \"지원하지 않는 언어\",\n  \"发现语言文件更新\": \"언어 파일 업데이트를 발견했습니다\",\n  \"完成\": \"완성\",\n  \"失败\": \"실패\",\n  \"在线版本检测失败, 请稍后再试\": \"온라인 버전 검사에 실패했습니다. 잠시 후 다시 시도해 주세요\",\n  \"安装\": \"설치\",\n  \"已安装\": \"설치됨\",\n  \"自启动配置\": \"자동 실행 설정\",\n  \"链接库安装\": \"링크 라이브러리 설치\",\n  \"值为空或超出范围, 请重新输入\": \"값이 비어 있거나 범위를 초과했습니다. 다시 입력해 주십시오\",\n  \"值为空, 请重新输入\": \"값이 비어 있습니다. 다시 입력해 주세요\",\n  \"确定端口\": \"포트 확인\",\n  \"请输入端口\": \"포트를 입력하세요\",\n  \"默认值\": \"기본값\",\n  \"请输入 0-65535 之间的值\": \"0-65535 사이의 값을 입력하세요\",\n  \"端口不允许使用, 请重新输入\": \"포트를 사용할 수 없습니다. 다시 입력해 주세요\",\n  \"请选择安装协议\": \"설치 계약서를 선택해 주십시오\",\n  \"默认\": \"기본\",\n  \"请输入\": \"입력하세요\",\n  \"请输入有效的数字\": \"유효한 숫자를 입력하세요\",\n  \"是否添加简单 ws/gRPC 协议 用于负载均衡\": \"단순한 ws/grpc 프로토콜을 로드 밸런싱에 추가할 것인지\",\n  \"如不清楚具体用途, 请勿选择\": \"구체적인 용도가 명확하지 않은 경우 선택하지 마십시오\",\n  \"已跳过添加简单 ws/gRPC 协议\": \"간단한 ws/grpc 프로토콜 추가를 건너뛰었습니다\",\n  \"是否需要自定义\": \"맞춤형이 필요한가요\",\n  \"请勿与其他端口相同\": \"다른 포트와 동일하지 마십시오\",\n  \"是否需要设置防火墙\": \"방화벽을 설정해야 하나요\",\n  \"防火墙\": \"방화벽\",\n  \"重启完成\": \"재부팅 완료\",\n  \"开放防火墙相关端口\": \"방화벽 관련 포트 개방\",\n  \"若修改配置, 请注意关闭防火墙相关端口\": \"구성을 수정할 경우 방화벽 관련 포트를 닫는 것을 유의하십시오\",\n  \"配置\": \"구성\",\n  \"跳过防火墙设置\": \"방화벽 설정 건너뛰기\",\n  \"伪装路径\": \"위장 경로\",\n  \"不需要\": \"필요하지 않다\",\n  \"用户名\": \"사용자 이름\",\n  \"请输入正确的 email\": \"올바른 이메일을 입력하세요\",\n  \"是否需要自定义字符串映射\": \"사용자 정의 문자열 매핑이 필요한가요\",\n  \"请输入自定义字符串\": \"사용자 정의 문자열을 입력하세요\",\n  \"最多30字符\": \"최대 30자\",\n  \"自定义字符串\": \"사용자 정의 문자열\",\n  \"映射字符串\": \"문자열 매핑\",\n  \"检测到 target 域名已配置, 是否保留\": \"타겟 도메인이 이미 구성된 것을 감지했습니다. 유지하시겠습니까\",\n  \"请输入一个域名\": \"도메인 이름을 입력하세요\",\n  \"域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用\": \"도메인은 tlsv1.3, x25519 및 h2를 지원해야 하며 도메인 리디렉션을 사용하지 않아야 합니다\",\n  \"确认域名符合要求后请输入\": \"도메인 이름이 요구 사항을 충족하는지 확인한 후 입력해 주십시오\",\n  \"正在检测域名请等待\": \"도메인을 검사 중입니다. 잠시 기다려 주십시오\",\n  \"该域名不支持\": \"해당 도메인은 지원하지 않습니다\",\n  \"该域名发生了跳转\": \"해당 도메인이 리디렉션되었습니다\",\n  \"该域名可能不满足所有要求\": \"해당 도메인명이 모든 요구 사항을 충족하지 않을 수 있습니다\",\n  \"是否仍要设置此域名\": \"이 도메인 이름을 여전히 설정하시겠습니까\",\n  \"域名\": \"도메인 이름\",\n  \"满足所有要求\": \"모든 요구 사항을 충족하다\",\n  \"域名的\": \"도메인의\",\n  \"默认为\": \"기본값은\",\n  \"域名本身\": \"도메인 자체\",\n  \"如不清楚具体用途, 请勿继续\": \"구체적인 용도가 명확하지 않은 경우 계속 사용하지 마십시오\",\n  \"是否变更\": \"변경 여부\",\n  \"负载均衡\": \"로드 밸런싱\",\n  \"请选择协议为 ws 或 gRPC\": \"프로토콜을 ws 또는 grpc로 선택하세요\",\n  \"返回\": \"돌아가기\",\n  \"本地文件 file_manager.sh 不存在, 正在下载\": \"로컬 파일 file_manager.sh가 존재하지 않아 다운로드 중입니다\",\n  \"下载失败, 请手动下载并安装新版本\": \"다운로드에 실패했습니다. 수동으로 새 버전을 다운로드하여 설치해 주세요\",\n  \"当前模式不支持此操作\": \"현재 모드는 이 작업을 지원하지 않습니다\",\n  \"配置用途可以参考文章\": \"사용 용도는 문서를 참고하십시오\",\n  \"修改\": \"수정\",\n  \"端口\": \"포트\",\n  \"不支持\": \"지원하지 않음\",\n  \"用户名修改\": \"사용자 이름 수정\",\n  \"请先删除多余的用户\": \"먼저 중복된 사용자를 삭제해 주십시오\",\n  \"配置修改\": \"구성 수정\",\n  \"检测到 Xray 的权限控制, 启动修改程序\": \"xray의 권한 제어를 감지하여 수정 프로그램을 시작합니다\",\n  \"修改完成\": \"수정 완료\",\n  \"若更新无效, 建议直接卸载再安装\": \"업데이트가 적용되지 않는 경우, 직접 삭제 후 다시 설치하는 것을 권장합니다\",\n  \"部分新功能需要重新安装才可生效\": \"일부 새로운 기능은 다시 설치해야 적용됩니다\",\n  \"检测到存在最新版\": \"최신 버전이 존재하는 것으로 감지됨\",\n  \"脚本可能未兼容此版本\": \"스크립트가 이 버전과 호환되지 않을 수 있습니다\",\n  \"是否更新\": \"업데이트 여부\",\n  \"启动失败\": \"시작 실패\",\n  \"是否回滚到之前的版本\": \"이전 버전으로 롤백할까요\",\n  \"未执行回滚操作\": \"롤백 작업이 실행되지 않았습니다\",\n  \"正在回滚\": \"롤백 중입니다\",\n  \"已成功回滚到之前的\": \"이전 버전으로 성공적으로 롤백되었습니다\",\n  \"版本\": \"버전\",\n  \"回滚失败\": \"롤백 실패\",\n  \"重装\": \"중장\",\n  \"Reality 协议有流量偷跑的风险\": \"reality 프로토콜은 트래픽 유출의 위험이 있다\",\n  \"已跳过安装\": \"설치를 건너뛰었습니다\",\n  \"已存在, 跳过编译安装过程\": \"이미 존재합니다. 컴파일 설치 과정을 건너뜁니다\",\n  \"检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装\": \"다른 패키지가 설치한 nginx를 감지했습니다. 계속 설치하면 충돌이 발생할 수 있으니 처리 후 설치해 주십시오\",\n  \"即将下载已编译的\": \"곧 컴파일된 것을 다운로드할 예정입니다\",\n  \"不支持的系统架构\": \"지원되지 않는 시스템 아키텍처\",\n  \"当前安装模式不需要\": \"현재 설치 모드는 필요하지 않습니다\",\n  \"备份旧版\": \"이전 버전 백업\",\n  \"删除旧版\": \"이전 버전 삭제\",\n  \"是否保留原 Nginx 配置文件\": \"기존 nginx 구성 파일을 유지할까요\",\n  \"原配置文件已删除\": \"원래 구성 파일이 삭제되었습니다\",\n  \"原配置文件已保留\": \"원래 구성 파일이 보존되었습니다\",\n  \"删除\": \"삭제\",\n  \"备份\": \"백업\",\n  \"已为最新版\": \"최신 버전으로 업데이트되었습니다\",\n  \"设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)\": \"백그라운드에서 자동 업데이트 프로그램 설정 (포함: 스크립트/xray/nginx)\",\n  \"设置自动更新\": \"자동 업데이트 설정\",\n  \"已设置自动更新\": \"자동 업데이트가 설정되었습니다\",\n  \"是否关闭\": \"종료할까요\",\n  \"删除自动更新\": \"자동 업데이트 삭제\",\n  \"安装 SSL 证书生成脚本依赖\": \"ssl 인증서 생성 스크립트 의존성 설치\",\n  \"安装 SSL 证书生成脚本\": \"ssl 인증서 생성 스크립트 설치\",\n  \"检测到原域名配置存在, 是否跳过域名设置\": \"기존 도메인 구성이 존재하는 것을 감지했습니다. 도메인 설정을 건너뛸까요\",\n  \"无法获取公网IP地址\": \"공용 ip 주소를 가져올 수 없습니다\",\n  \"安装终止\": \"설치 종료\",\n  \"已跳过域名设置\": \"도메인 설정을 건너뛰었습니다\",\n  \"确定域名信息\": \"도메인 정보 확인\",\n  \"请输入你的域名信息\": \"도메인 정보를 입력해 주세요\",\n  \"请选择公网IP(IPv4/IPv6)或手动输入域名\": \"공용 ip(ipv4/ipv6)를 선택하거나 도메인을 수동으로 입력하세요\",\n  \"正在获取公网IP信息, 请耐心等待\": \"공인 ip 정보를 가져오는 중입니다. 잠시 기다려 주십시오\",\n  \"此选项用于服务器商仅提供域名访问服务器\": \"이 옵션은 서버 제공업체가 도메인만으로 서버에 접근할 수 있도록 하는 경우에 사용됩니다\",\n  \"注意服务器商域名添加 CNAME 记录\": \"서버 업체의 도메인에 cname 레코드를 추가하는 것을 주의하세요\",\n  \"域名DNS解析IP\": \"도메인 네임 dns 해석 ip\",\n  \"公网IP/域名\": \"공용 ip/도메인 이름\",\n  \"域名DNS解析IP与公网IP匹配\": \"도메인 네임의 dns 해석 ip와 공용 ip가 일치합니다\",\n  \"请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray\": \"도메인에 올바른 a/aaaa 레코드가 추가되었는지 확인해 주세요. 그렇지 않으면 xray를 정상적으로 사용할 수 없습니다\",\n  \"域名DNS解析IP与公网IP不匹配, 请选择\": \"도메인 네임의 dns 해석 ip가 공용 ip와 일치하지 않습니다. 선택해 주십시오\",\n  \"继续安装\": \"계속 설치\",\n  \"重新输入\": \"다시 입력\",\n  \"终止安装\": \"설치 중단\",\n  \"检测到原IP配置存在, 是否跳过IP设置\": \"기존 ip 설정이 존재하는 것을 감지했습니다. ip 설정을 건너뛸까요\",\n  \"已跳过IP设置\": \"ip 설정을 건너뛰었습니다\",\n  \"确定公网IP信息\": \"공용 ip 정보 확인\",\n  \"请选择公网IP为IPv4或IPv6\": \"공용 ip를 ipv4 또는 ipv6로 선택하세요\",\n  \"手动输入\": \"수동 입력\",\n  \"端口未被占用\": \"포트가 사용 중이 아닙니다\",\n  \"检测到\": \"검출됨\",\n  \"端口被占用\": \"포트가 점유되었습니다\",\n  \"以下为\": \"다음은\",\n  \"端口占用信息\": \"포트 점유 정보\",\n  \"尝试终止占用的进程\": \"점유된 프로세스를 종료해 보십시오\",\n  \"证书测试签发成功, 开始正式签发\": \"인증서 테스트 발급 성공, 정식 발급 시작\",\n  \"证书测试签发失败\": \"인증서 테스트 발급 실패\",\n  \"证书生成成功\": \"인증서 생성 성공\",\n  \"证书配置成功\": \"인증서 설정 성공\",\n  \"证书生成失败\": \"인증서 생성 실패\",\n  \"检测到 Xray 配置过多用户\": \"xray가 너무 많은 사용자를 구성한 것을 감지했습니다\",\n  \"是否保留原 Xray 配置文件\": \"기존 xray 구성 파일을 유지할까요\",\n  \"添加简单 ws/gRPC 协议\": \"간단한 ws/grpc 프로토콜 추가\",\n  \"检测到配置文件, 是否读取配置文件\": \"구성 파일을 감지했습니다. 구성 파일을 읽으시겠습니까\",\n  \"已删除配置文件\": \"구성 프로파일이 삭제되었습니다\",\n  \"已保留配置文件\": \"구성 파일이 보존되었습니다\",\n  \"检测到当前安装模式与配置文件的安装模式不一致\": \"현재 설치 모드가 구성 파일의 설치 모드와 일치하지 않는 것으로 감지되었습니다\",\n  \"是否保留配置文件 (强烈不建议)\": \"구성 파일을 유지할지 여부 (강력히 권장하지 않음)\",\n  \"请务必确保配置文件正确\": \"구성 파일이 정확한지 꼭 확인해 주십시오\",\n  \"检测到配置文件不完整, 是否保留配置文件\": \"구성 파일이 불완전한 것으로 감지되었습니다. 구성 파일을 유지하시겠습니까\",\n  \"配置删除\": \"설정 삭제\",\n  \"设置 Nginx 开机自启\": \"nginx 자동 시작 설정\",\n  \"设置\": \"설정\",\n  \"开机自启\": \"부팅 자동 실행\",\n  \"关闭 Nginx 开机自启\": \"nginx 자동 실행 비활성화\",\n  \"关闭\": \"닫기\",\n  \"重启\": \"재부팅\",\n  \"启动\": \"시작\",\n  \"停止\": \"정지\",\n  \"新版本已自动设置证书自动更新\": \"새 버전에서 인증서 자동 갱신이 이미 자동으로 설정되었습니다\",\n  \"老版本请及时删除 废弃的 改版证书自动更新\": \"구버전은 즉시 삭제하시고, 폐기된 개정 인증서는 자동으로 업데이트됩니다\",\n  \"已设置改版证书自动更新\": \"버전 변경 인증서 자동 업데이트가 설정되었습니다\",\n  \"是否需要删除改版证书自动更新 (请删除)\": \"개편된 인증서 자동 업데이트를 삭제할 필요가 있습니까 (삭제해 주십시오)\",\n  \"删除改版证书自动更新\": \"개정된 인증서 자동 업데이트 삭제\",\n  \"已过期\": \"만료됨\",\n  \"证书生成日期\": \"인증서 생성일\",\n  \"证书生成天数\": \"인증서 생성 일수\",\n  \"证书剩余天数\": \"인증서 남은 일수\",\n  \"是否立即更新证书\": \"인증서를 즉시 업데이트할까요\",\n  \"证书签发工具不存在, 请确认是否证书为脚本签发\": \"인증서 발급 도구가 존재하지 않습니다. 스크립트로 인증서를 발급했는지 확인해 주십시오\",\n  \"证书更新\": \"증명서 업데이트\",\n  \"本地文件 fail2ban_manager.sh 不存在, 正在下载\": \"로컬 파일 fail2ban_manager.sh가 존재하지 않으므로 다운로드 중입니다\",\n  \"检测到日志文件大小如下:\": \"로그 파일 크기가 다음과 같이 감지되었습니다\",\n  \"即将清除\": \"곧 삭제됩니다\",\n  \"日志清理\": \"로그 정리\",\n  \"保留现有自动清理日志任务\": \"기존 자동 로그 정리 작업 유지\",\n  \"是否需要设置自动清理日志\": \"로그 자동 정리 설정이 필요합니까\",\n  \"清空屏幕\": \"화면을 비우다\",\n  \"将在 每周三 04:00 自动清空日志\": \"매주 수요일 04:00에 로그가 자동으로 비워집니다\",\n  \"已设置自动清理日志任务\": \"로그 자동 정리 작업이 설정되었습니다\",\n  \"是否需要删除现有自动清理日志任务\": \"기존 자동 로그 정리 작업을 삭제할 필요가 있습니까\",\n  \"删除自动清理日志任务\": \"자동 정리 로그 작업 삭제\",\n  \"设置自动清理日志\": \"로그 자동 정리 설정\",\n  \"配置分享\": \"구성 공유\",\n  \"分享链接\": \"링크 공유\",\n  \"二维码\": \"qr 코드\",\n  \"生成分享链接\": \"공유 링크 생성\",\n  \"安装成功\": \"설치 성공\",\n  \"目前分享链接规范为实验阶段, 请自行判断是否适用\": \"현재 공유 링크 규칙은 실험 단계이므로, 직접 적용 가능한지 판단해 주십시오\",\n  \"配置信息\": \"설정 정보\",\n  \"主机\": \"호스트\",\n  \"用户id\": \"사용자 id\",\n  \"加密\": \"암호화\",\n  \"传输协议\": \"전송 프로토콜\",\n  \"底层传输安全\": \"기저 전송 보안\",\n  \"路径\": \"경로\",\n  \"不要落下\": \"놓치지 마세요\",\n  \"不需要加\": \"추가할 필요가 없습니다\",\n  \"流控\": \"유량 제어\",\n  \"即将申请证书, 支持使用自定义证书\": \"인증서를 곧 신청할 예정이며, 사용자 정의 인증서를 지원합니다\",\n  \"如需使用自定义证书, 请按如下步骤:\": \"사용자 정의 인증서를 사용하려면 다음 단계를 따르십시오\",\n  \"1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)\": \"1. 인증서 파일의 이름을 변경합니다: 개인 키(xray.key), 인증서(xray.crt)\",\n  \"2. 将重命名后的证书文件放入\": \"2. 이름이 변경된 인증서 파일을 넣으십시오\",\n  \"目录后再运行脚本\": \"목록 뒤에 스크립트를 실행합니다\",\n  \"3. 重新运行脚本\": \"3. 스크립트를 다시 실행합니다\",\n  \"是否继续\": \"계속할 것인지\",\n  \"所有证书文件均已存在, 是否保留\": \"모든 인증서 파일이 이미 존재합니다. 유지하시겠습니까\",\n  \"已删除\": \"삭제됨\",\n  \"证书应用\": \"인증서 응용\",\n  \"证书文件已存在, 是否保留\": \"인증서 파일이 이미 존재합니다. 유지하시겠습니까\",\n  \"证书签发残留文件已存在, 是否保留\": \"인증서 발급 잔류 파일이 이미 존재합니다. 유지하시겠습니까\",\n  \"添加\": \"추가\",\n  \"请选择支持的 TLS 版本\": \"지원되는 tls 버전을 선택하세요\",\n  \"兼容模式\": \"호환 모드\",\n  \"安全模式\": \"안전 모드\",\n  \"已切换至\": \"이미 전환됨\",\n  \"请先安装\": \"먼저 설치해 주세요\",\n  \"此模式不支持修改\": \"이 모드는 수정을 지원하지 않습니다\",\n  \"即将显示用户, 一次仅能显示一个\": \"사용자가 곧 표시됩니다. 한 번에 하나만 표시할 수 있습니다\",\n  \"请选择显示用户使用的协议\": \"사용자가 사용한 프로토콜을 선택해 주세요\",\n  \"请选择要显示的用户编号\": \"표시할 사용자 번호를 선택하세요\",\n  \"选择错误\": \"선택 오류\",\n  \"请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户\": \"메인 메뉴에서 [xray 구성 정보 보기]를 직접 선택하여 메인 사용자를 표시하십시오\",\n  \"请先检测 Xray 是否正确安装\": \"먼저 xray가 올바르게 설치되었는지 확인해 주십시오\",\n  \"是否继续显示用户\": \"사용자를 계속 표시할지 여부\",\n  \"此模式不支持删除用户\": \"이 모드는 사용자 삭제를 지원하지 않습니다\",\n  \"即将添加用户, 一次仅能添加一个\": \"사용자를 추가할 예정이며, 한 번에 하나씩만 추가할 수 있습니다\",\n  \"请选择添加用户使用的协议\": \"사용자 추가 시 사용할 프로토콜을 선택하세요\",\n  \"添加用户\": \"사용자 추가\",\n  \"是否继续添加用户\": \"사용자를 계속 추가하시겠습니까\",\n  \"此模式不支持添加用户\": \"이 모드는 사용자 추가를 지원하지 않습니다\",\n  \"即将删除用户, 一次仅能删除一个\": \"사용자를 삭제할 예정이며, 한 번에 하나만 삭제할 수 있습니다\",\n  \"请选择删除用户使用的协议\": \"사용자 삭제에 사용할 프로토콜을 선택하세요\",\n  \"请选择要删除的用户编号\": \"삭제할 사용자 번호를 선택해 주세요\",\n  \"主用户无法删除\": \"주 사용자는 삭제할 수 없습니다\",\n  \"删除用户\": \"사용자 삭제\",\n  \"是否继续删除用户\": \"사용자를 계속 삭제하시겠습니까\",\n  \"文件不存在\": \"파일이 존재하지 않습니다\",\n  \"已配置 Xray 流量统计\": \"xray 트래픽 통계가 이미 구성되었습니다\",\n  \"是否需要关闭此功能\": \"이 기능을 종료할 필요가 있습니까\",\n  \"关闭 Xray 流量统计\": \"xray 트래픽 통계 끄기\",\n  \"流量统计需要使用\": \"트래픽 통계 사용 필요\",\n  \"可能会影响 Xray 性能\": \"x레이 성능에 영향을 줄 수 있습니다\",\n  \"设置 Xray 流量统计\": \"xray 트래픽 통계 설정\",\n  \"已卸载\": \"제거됨\",\n  \"是否卸载\": \"제거할까요\",\n  \"是否删除所有脚本文件\": \"모든 스크립트 파일을 삭제하시겠습니까\",\n  \"已删除所有文件\": \"모든 파일을 삭제했습니다\",\n  \"ヾ(￣▽￣) 拜拜~\": \"(￣▽￣) 안녕~\",\n  \"已保留脚本文件 (包含 SSL 证书等)\": \"스크립트 파일(ssl 인증서 등 포함)이 보존되었습니다\",\n  \"是否保留配置文件\": \"구성 파일을 유지할까요\",\n  \"已清空证书遗留文件\": \"인증서 잔여 파일을 이미 삭제했습니다\",\n  \"秒后\": \"초 후\",\n  \"检测最新版本失败\": \"최신 버전 검사 실패\",\n  \"新版本\": \"새 버전\",\n  \"更新内容\": \"업데이트 내용\",\n  \"存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新\": \"새로운 버전이 존재하지만, 버전 간의 차이가 크므로 호환되지 않을 가능성이 있습니다. 업데이트하시겠습니까\",\n  \"存在新版本, 是否更新\": \"새 버전이 존재합니다. 업데이트하시겠습니까\",\n  \"检测 脚本 最新版本失败\": \"스크립트 최신 버전 검사 실패\",\n  \"脚本 版本差别过大, 跳过更新\": \"스크립트 버전 차이가 너무 커서 업데이트를 건너뜁니다\",\n  \"更新完成\": \"업데이트 완료\",\n  \"脚本版本变化较大, 若服务无法正常运行请卸载后重装\": \"스크립트 버전이 크게 변경되었으니, 서비스가 정상적으로 작동하지 않을 경우 삭제 후 다시 설치해 주십시오\",\n  \"当前版本为最新版本\": \"현재 버전은 최신 버전입니다\",\n  \"下载最新脚本\": \"최신 스크립트 다운로드\",\n  \"该选项暂时无法使用\": \"해당 옵션은 일시적으로 사용할 수 없습니다\",\n  \"此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装\": \"이 모드는 로드 밸런싱에 권장되며, 일반적으로 사용하지 않는 것이 좋습니다. 설치하시겠습니까\",\n  \"变更\": \"변경\",\n  \"负载均衡配置\": \"로드 밸런싱 구성\",\n  \"清除日志文件\": \"로그 파일 삭제\",\n  \"查看证书状态\": \"인증서 상태 보기\",\n  \"更新证书有效期\": \"인증서 유효기간 갱신\",\n  \"设置证书自动更新\": \"인증서 자동 갱신 설정\",\n  \"设置 Fail2ban 防暴力破解\": \"fail2ban 폭력적 해킹 공격 방지 설정\",\n  \"显示帮助\": \"도움 표시\",\n  \"更新\": \"업데이트\",\n  \"脚本卸载\": \"스크립트 제거\",\n  \"显示安装信息\": \"설치 정보 표시\",\n  \"加速\": \"가속\",\n  \"显示\": \"표시\",\n  \"访问信息\": \"정보 방문\",\n  \"错误信息\": \"오류 정보\",\n  \"脚本版本变化较大, 可能存在不兼容情况, 是否继续使用\": \"스크립트 버전이 크게 변경되어 호환되지 않을 가능성이 있습니다. 계속 사용하시겠습니까\",\n  \"检测失败\": \"검사 실패\",\n  \"有新版\": \"새 버전이 있습니다\",\n  \"最新版\": \"최신 버전\",\n  \"版本未知\": \"버전 알 수 없음\",\n  \"运行中\": \"실행 중\",\n  \"无需测试\": \"테스트할 필요 없음\",\n  \"未运行\": \"실행되지 않음\",\n  \"无法连通\": \"연결할 수 없음\",\n  \"本地正常\": \"현지 정상\",\n  \"脚本维护中.. 请稍后再试\": \"스크립트를 유지 보수 중입니다. 잠시 후 다시 시도해 주세요\",\n  \"无法检测所需依赖的在线版本, 请稍后再试\": \"필요한 종속 항목의 온라인 버전을 검출할 수 없습니다. 잠시 후 다시 시도해 주십시오\",\n  \"请输入数字\": \"숫자를 입력하세요\",\n  \"请输入 1 到 6 之间的有效数字\": \"1에서 6 사이의 유효한 숫자를 입력하세요\",\n  \"无效的选择\": \"무효한 선택\",\n  \"请输入备份名称\": \"백업 이름을 입력하세요\",\n  \"不需要后缀\": \"접미사가 필요하지 않다\",\n  \"报错信息\": \"오류 정보\",\n  \"备份完整性可能受到影响, 请检查上述错误信息\": \"백업의 완전성이 영향을 받을 수 있으니, 위의 오류 메시지를 확인해 주십시오\",\n  \"备份失败\": \"백업 실패\",\n  \"备份成功\": \"백업 성공\",\n  \"请确保备份文件在目录\": \"백업 파일이 디렉토리에 있는지 확인해 주십시오\",\n  \"没有找到备份文件\": \"백업 파일을 찾지 못했습니다\",\n  \"发现多个备份文件\": \"여러 개의 백업 파일을 발견했습니다\",\n  \"将使用最新的文件进行恢复\": \"최신 파일을 사용하여 복구합니다\",\n  \"找到最新备份文件\": \"최신 백업 파일 찾기\",\n  \"恢复备份\": \"백업 복구\",\n  \"恢复成功\": \"복구 성공\",\n  \"记得安装\": \"설치 기억하기\",\n  \"恢复失败\": \"복구 실패\",\n  \"安装管理脚本\": \"관리 스크립트 설치\",\n  \"作者\": \"저자\",\n  \"当前模式\": \"현재 모드\",\n  \"当前语言\": \"현재 언어\",\n  \"可以使用\": \"사용할 수 있습니다\",\n  \"命令管理脚本\": \"명령 관리 스크립트\",\n  \"版本检测\": \"버전 검사\",\n  \"脚本\": \"스크립트\",\n  \"运行状态\": \"운영 상태\",\n  \"连通性\": \"연결성\",\n  \"安装向导\": \"설치 마법사\",\n  \"配置变更\": \"구성 변경\",\n  \"用户管理\": \"사용자 관리\",\n  \"查看\": \"보기\",\n  \"用户\": \"사용자\",\n  \"查看信息\": \"정보 보기\",\n  \"实时访问日志\": \"실시간 접근 로그\",\n  \"实时错误日志\": \"실시간 오류 로그\",\n  \"服务相关\": \"서비스 관련\",\n  \"所有服务\": \"모든 서비스\",\n  \"证书相关\": \"증명서 관련\",\n  \"证书状态\": \"인증서 상태\",\n  \"证书有效期\": \"인증서 유효기간\",\n  \"证书自动更新\": \"인증서 자동 갱신\",\n  \"其他选项\": \"기타 옵션\",\n  \"自动更新\": \"자동 업데이트\",\n  \"防暴力破解\": \"폭력적 해킹 방지\",\n  \"流量统计\": \"트래픽 통계\",\n  \"清除\": \"제거\",\n  \"日志文件\": \"로그 파일\",\n  \"测试\": \"테스트\",\n  \"服务器网速\": \"서버 속도\",\n  \"备份恢复\": \"백업 복구\",\n  \"全部文件\": \"전체 파일\",\n  \"恢复\": \"복구\",\n  \"卸载向导\": \"제거 마법사\",\n  \"卸载\": \"제거\",\n  \"清空\": \"비우다\",\n  \"证书文件\": \"인증서 파일\",\n  \"退出\": \"퇴출\",\n  \"请输入选项\": \"옵션을 입력하세요\",\n  \"不建议\": \"추천하지 않음\",\n  \"回到菜单\": \"메뉴로 돌아가기\",\n  \"用于防止暴力破解\": \"폭력적 해킹을 방지하기 위해\",\n  \"主菜单\": \"메인 메뉴\",\n  \"管理\": \"관리\",\n  \"状态\": \"상태\",\n  \"请选择一个选项\": \"옵션 하나를 선택하세요\",\n  \"已经安装, 跳过安装步骤\": \"이미 설치되어 있습니다. 설치 단계를 건너뜁니다\",\n  \"未安装, 请先安装\": \"설치되지 않았습니다. 먼저 설치해 주세요\",\n  \"规则\": \"규칙\",\n  \"跳过启用\": \"활성화 건너뛰기\",\n  \"已启用\": \"활성화됨\",\n  \"请选择\": \"선택하세요\",\n  \"操作\": \"작업\",\n  \"添加自定义规则\": \"사용자 정의 규칙 추가\",\n  \"请输入新的\": \"새로운 것을 입력하세요\",\n  \"名称\": \"이름\",\n  \"请输入日志路径\": \"로그 경로를 입력하세요\",\n  \"请输入最大重试次数\": \"최대 재시도 횟수를 입력하세요\",\n  \"最大重试次数必须在 1 到 99 之间\": \"최대 재시도 횟수는 1에서 99 사이여야 합니다\",\n  \"请输入封禁时间\": \"금지 시간을 입력하세요\",\n  \"秒\": \"초\",\n  \"封禁时间必须在 1 到 8640000 秒之间\": \"봉쇄 시간은 1초에서 8640000초 사이여야 합니다\",\n  \"自定义规则添加成功\": \"사용자 정의 규칙 추가 성공\",\n  \"重启以应用新规则\": \"새로운 규칙을 적용하려면 다시 시작하세요\",\n  \"停止成功\": \"정지 성공\",\n  \"总体状态\": \"전체 상태\",\n  \"默认启用的 Jail 状态\": \"기본적으로 활성화된 jail 상태\",\n  \"封锁情况\": \"봉쇄 상황\",\n  \"新版本可用\": \"새 버전 사용 가능\",\n  \"当前版本\": \"현재 버전\",\n  \"请访问\": \"방문해 주세요\",\n  \"查看更新说明\": \"업데이트 설명 보기\",\n  \"正在下载新版本\": \"새 버전을 다운로드 중입니다\",\n  \"下载完成, 请重新运行脚本\": \"다운로드가 완료되었습니다. 스크립트를 다시 실행해 주세요\",\n  \"跳过更新\": \"업데이트 건너뛰기\",\n  \"当前已经是最新版本\": \"현재 이미 최신 버전입니다\",\n  \"用法\": \"사용법\",\n  \"文件扩展名\": \"파일 확장명\",\n  \"目录路径\": \"디렉토리 경로\",\n  \"目录\": \"목차\",\n  \"不存在, 请检查路径\": \"존재하지 않습니다. 경로를 확인해 주십시오\",\n  \"列出所有\": \"모두 나열하기\",\n  \"文件\": \"파일\",\n  \"文件名\": \"파일명\",\n  \"序号\": \"순번\",\n  \"请输入网址 (例如 hey.run)\": \"url을 입력하세요 (예: hey.run)\",\n  \"不要包含 http:// 或 https:// 开头\": \"http:// 또는 https://로 시작하지 않도록 하세요\",\n  \"已创建\": \"생성됨\",\n  \"请输入主机\": \"호스트를 입력하세요\",\n  \"请输入权重\": \"가중치를 입력하세요\",\n  \"追加完成\": \"추가 완료\",\n  \"请输入要编辑的文件编号\": \"편집할 파일 번호를 입력하세요\",\n  \"未安装, 正在尝试安装\": \"설치되지 않음, 설치 중\",\n  \"已编辑\": \"편집 완료\",\n  \"请输入要删除的文件编号\": \"삭제할 파일 번호를 입력하세요\",\n  \"不支持的文件扩展名\": \"지원되지 않는 파일 확장자\",\n  \"创建一个新的\": \"새로운 것을 생성하다\",\n  \"编辑一个已存在的\": \"기존의 것을 편집하다\",\n  \"删除一个已存在的\": \"기존의 것을 삭제합니다\",\n  \"无效选项, 请重试\": \"잘못된 옵션입니다. 다시 시도해 주세요\",\n  \"重启成功\": \"재부팅 성공\",\n  \"重启失败\": \"재부팅 실패\",\n  \"请检查配置文件是否有误\": \"구성 파일에 오류가 없는지 확인해 주십시오\",\n  \"未启用或配置异常\": \"미사용 또는 구성 이상\",\n  \"是否添加 Reality 负载均衡\": \"리얼리티 로드 밸런싱을 추가할지 여부\",\n  \"使用此功能前，建议先阅读作者教程\": \"이 기능을 사용하기 전에 먼저 작성자의 튜토리얼을 읽는 것을 권장합니다\",\n  \"已跳过\": \"건너뛰었습니다\",\n  \"如用作 Reality 负载均衡二级服务器则无需安装\": \"reality 로드 밸런싱 2차 서버로 사용할 경우 설치할 필요가 없습니다\",\n  \"是否额外安装 nginx 前置保护\": \"nginx 프런트엔드 보호를 추가로 설치할 것인지 여부\",\n  \"推荐\": \"추천\",\n  \"检测到已开启 Reality 负载均衡\": \"reality 로드 밸런싱이 이미 활성화된 것을 감지했습니다\",\n  \"如用作 Reality 负载均衡主服务器必须安装\": \"reality 부하 분산 주 서버로 사용할 경우 반드시 설치해야 합니다\",\n  \"检测到已安装\": \"설치된 것을 감지했습니다\",\n  \"已取消卸载\": \"설치 제거가 취소되었습니다\",\n  \"下载失败\": \"다운로드 실패\",\n  \"下载成功\": \"다운로드 성공\",\n  \"解压失败\": \"압축 풀기 실패\",\n  \"链接分享\": \"링크 공유\",\n  \"修改语言\": \"언어 수정\",\n  \"此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装\": \"이 모드는 트래픽 중계에만 사용되며, 다른 상황에서는 사용하지 않는 것이 좋습니다. 설치하시겠습니까\",\n  \"信息\": \"정보\",\n  \"配置不完整, 退出更新\": \"구성이 완전하지 않습니다. 업데이트를 종료합니다\",\n  \"配置不存在, 退出更新\": \"구성이 존재하지 않습니다. 업데이트를 종료합니다\",\n  \"无效的选择, 请重试\": \"유효하지 않은 선택입니다. 다시 시도해 주세요\",\n  \"systemd 无法读取 SSH 日志\": \"systemd가 ssh 로그를 읽을 수 없습니다\",\n  \"网址不能包含 http:// 或 https:// 前缀\": \"웹주소에는 http:// 또는 https:// 접두어를 포함할 수 없습니다\",\n  \"日志文件清空失败\": \"로그 파일 비우기 실패\",\n  \"当前用户是 root 用户, 开始安装\": \"현재 사용자는 root 사용자입니다. 설치를 시작합니다\",\n  \"当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本\": \"현재 사용자는 root 사용자가 아닙니다. root 사용자로 전환한 후 스크립트를 다시 실행해 주세요\",\n  \"已跳过设置自动清理日志\": \"로그 자동 정리를 설정하는 단계를 건너뛰었습니다\",\n  \"脚本更新失败\": \"스크립트 업데이트 실패\",\n  \"更新失败\": \"업데이트 실패\",\n  \"更新脚本\": \"스크립트 업데이트\",\n  \"更新向导\": \"업데이트 마법사\",\n  \"频繁更新 Nginx, 请确认 Nginx 有更新的必要\": \"nginx를 자주 업데이트하십시오. nginx에 업데이트가 필요한지 확인해 주세요\",\n  \"开始更新\": \"업데이트를 시작합니다\",\n  \"建议选择 TLSv1.3 only (安全模式)\": \"tlsv1.3 전용(보안 모드)을 선택하는 것을 권장합니다\",\n  \"由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)\": \"h3는 tlsv1.3만 지원하므로 tlsv1.3 전용(보안 모드)만 지원합니다\",\n  \"请选择 TLS 版本\": \"tls 버전을 선택하세요\",\n  \"建议选择 TLSv1.3 (安全模式)\": \"tlsv1.3(보안 모드)를 선택하는 것을 권장합니다\",\n  \"当前模式不支持\": \"현재 모드는 지원되지 않습니다\",\n  \"Nginx配置文件不存在 或 当前模式不支持\": \"nginx 구성 파일이 존재하지 않거나 현재 모드가 지원되지 않습니다\",\n  \"已禁用\": \"비활성화됨\",\n  \"管理模块\": \"관리 모듈\",\n  \"服务管理\": \"서비스 관리\",\n  \"管理 Fail2ban 模块\": \"fail2ban 모듈 관리하기\",\n  \"未找到任何模块化配置文件\": \"모듈형 구성 파일을 찾을 수 없습니다\",\n  \"模块名称\": \"모듈 이름\",\n  \"请选择要管理的模块\": \"관리할 모듈을 선택하세요\",\n  \"启用\": \"활성화\",\n  \"禁用\": \"비활성화\",\n  \"模块\": \"모듈\",\n  \"操作已取消\": \"작업이 취소되었습니다\",\n  \"可能自动更新后有兼容问题, 谨慎启用\": \"자동 업데이트 후 호환성 문제가 발생할 수 있으니 신중히 활성화하세요\",\n  \"是否启用\": \"활성화 여부\",\n  \"是否\": \"그것이…\",\n  \"是否下载并安装新版本\": \"새 버전을 다운로드하고 설치하시겠습니까\",\n  \"无法获取网卡, 将监控所有网卡\": \"네트워크 카드를 가져올 수 없습니다. 모든 네트워크 카드를 모니터링합니다\",\n  \"监控网卡\": \"네트워크 카드 모니터링\",\n  \"监控端口\": \"모니터링 포트\",\n  \"按 q 键退出 iftop\": \"q 키를 눌러 iftop을 종료하세요\",\n  \"实时流量\": \"실시간 트래픽\"\n}"
  },
  {
    "path": "po/cache_Persian.json",
    "content": "{\n  \"错误\": \"اشتباه\",\n  \"警告\": \"هشدار\",\n  \"未安装\": \"ننصب نشده است\",\n  \"日志文件归档失败\": \"ارشیو شدن فایل روزنامه با موفقیت انجام نشد\",\n  \"日志文件已轮转并归档为\": \"فایل روزنامه به صورت چرخشی و در فرمت آرشیو ذخیره شده است\",\n  \"当前系统为\": \"سیستم فعلی عبارت است از\",\n  \"不在支持的系统列表内, 安装中断\": \"در لیست سیستم‌های پشتیبانی نیست، نصب متوقف شد\",\n  \"无法获取远程语言文件信息\": \"نمی‌توان اطلاعات فایل زبان ریموت را به دست آورد\",\n  \"正在更新语言文件\": \"در حال به‌روزرسانی فایل‌های زبانی\",\n  \"语言文件更新失败\": \"به‌روزرسانی فایل زبان با موفقیت انجام نشد\",\n  \"语言文件无效\": \"پرونده زبان نامعتبر است\",\n  \"版本文件更新失败\": \"بازرسی فایل نسخه شکست خورد\",\n  \"语言文件更新完成\": \"به‌روزرسانی فایل زبان به پایان رسید\",\n  \"正在安装\": \"در حال نصب\",\n  \"安装失败\": \"ناموفقیت نصب\",\n  \"将使用默认语言\": \"از زبان پیش فرض استفاده خواهد شد\",\n  \"未找到\": \"پیدا نشد\",\n  \"不支持的语言\": \"زبان‌هایی که پشتیبانی نمی‌شوند\",\n  \"发现语言文件更新\": \"به‌روزرسانی فایل زبان کشف شد\",\n  \"完成\": \"کامل شدن\",\n  \"失败\": \"شکست\",\n  \"在线版本检测失败, 请稍后再试\": \"بررسی نسخه آنلاین با شکست مواجه شد، لطفاً بعداً دوباره تلاش کنید\",\n  \"安装\": \"نصب\",\n  \"已安装\": \"نصب شده\",\n  \"自启动配置\": \"پیکربندی خودکار اجرا\",\n  \"链接库安装\": \"نصب کتابخانه لینک\",\n  \"值为空或超出范围, 请重新输入\": \"مقدار خالی یا خارج از محدوده است، لطفاً دوباره وارد کنید\",\n  \"值为空, 请重新输入\": \"مقدار خالی است، لطفاً دوباره وارد کنید\",\n  \"确定端口\": \"پورت را مشخص کنید\",\n  \"请输入端口\": \"لطفاً پورت را وارد کنید\",\n  \"默认值\": \"مقدار پیش فرض\",\n  \"请输入 0-65535 之间的值\": \"لطفاً مقداری بین ۰ تا ۶۵۵۳۵ را وارد کنید\",\n  \"端口不允许使用, 请重新输入\": \"پورت مجاز نیست، لطفاً دوباره وارد کنید\",\n  \"请选择安装协议\": \"لطفاً توافق نامه نصب را انتخاب کنید\",\n  \"默认\": \"پیش فرض\",\n  \"请输入\": \"لطفاً وارد کنید\",\n  \"请输入有效的数字\": \"لطفاً عدد معتبری وارد کنید\",\n  \"是否添加简单 ws/gRPC 协议 用于负载均衡\": \"آیا برای تعادل بار، پروتکل ws/grpc ساده اضافه می‌شود؟\",\n  \"如不清楚具体用途, 请勿选择\": \"اگر کاربرد دقیق آن را نمی‌دانید، لطفاً انتخاب نکنید\",\n  \"已跳过添加简单 ws/gRPC 协议\": \"اضافه کردن پروتکل‌های ساده ws/grpc رد شد\",\n  \"是否需要自定义\": \"آیا نیاز به سفارشی‌سازی دارید؟\",\n  \"请勿与其他端口相同\": \"لطفاً با سایر پورت‌ها یکسان نباشد\",\n  \"是否需要设置防火墙\": \"آیا نیاز به تنظیم فایروال دارید؟\",\n  \"防火墙\": \"دیوار آتش\",\n  \"重启完成\": \"بازنشانی کامل شد\",\n  \"开放防火墙相关端口\": \"پورت‌های مرتبط با فایروال را باز کنید\",\n  \"若修改配置, 请注意关闭防火墙相关端口\": \"اگر تنظیمات را تغییر می‌دهید، لطفاً پورت‌های مربوط به فایروال را ببندید\",\n  \"配置\": \"تنظیم\",\n  \"跳过防火墙设置\": \"پرش از تنظیمات فایروال\",\n  \"伪装路径\": \"مسیر مخفی\",\n  \"不需要\": \"نیاز نیست\",\n  \"用户名\": \"نام کاربر\",\n  \"请输入正确的 email\": \"لطفاً ایمیل صحیح را وارد کنید\",\n  \"是否需要自定义字符串映射\": \"آیا نیاز به تطبیق رشته‌های کاربری دارد؟\",\n  \"请输入自定义字符串\": \"لطفاً رشته کاربری را وارد کنید\",\n  \"最多30字符\": \"حداکثر ۳۰ حرف\",\n  \"自定义字符串\": \"رشته کاربری\",\n  \"映射字符串\": \"رشته متنابه\",\n  \"检测到 target 域名已配置, 是否保留\": \"نام دامنه هدف که قبلاً تنظیم شده را تشخیص داده‌ایم، آیا می‌خواهید حفظ کنید؟\",\n  \"请输入一个域名\": \"لطفاً یک نام دامنه وارد کنید\",\n  \"域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用\": \"نام دامنه باید از tlsv1.3، x25519 و h2 پشتیبانی کند و نباید جابجایی داشته باشد\",\n  \"确认域名符合要求后请输入\": \"بعد از تأیید مطابقت نام دامنه با شرایط، وارد کنید\",\n  \"正在检测域名请等待\": \"در حال بررسی نام دامنه است، لطفاً صبر کنید\",\n  \"该域名不支持\": \"این نام دامنه پشتیبانی نمی‌شود\",\n  \"该域名发生了跳转\": \"این نام دامنه به جایی منتقل شده است\",\n  \"该域名可能不满足所有要求\": \"این نام دامنه ممکن است به تمامی شرایط را برآورده نکند\",\n  \"是否仍要设置此域名\": \"آیا هنوز می‌خواهید این نام دامنه را تنظیم کنید؟\",\n  \"域名\": \"نام دامنه\",\n  \"满足所有要求\": \"همه‌ی شرایط را برآورده کند\",\n  \"域名的\": \"دومین نام\",\n  \"默认为\": \"پیش فرض به\",\n  \"域名本身\": \"خود نام دامنه\",\n  \"如不清楚具体用途, 请勿继续\": \"اگر کاربرد دقیق آن را نمی‌دانید، لطفاً ادامه ندهید\",\n  \"是否变更\": \"آیا تغییر می‌کند\",\n  \"负载均衡\": \"تعادل بار\",\n  \"请选择协议为 ws 或 gRPC\": \"لطفاً پروتکل را به عنوان ws یا grpc انتخاب کنید\",\n  \"返回\": \"بازگشت\",\n  \"本地文件 file_manager.sh 不存在, 正在下载\": \"پرونده محلی file_manager.sh وجود ندارد، در حال دانلود است\",\n  \"下载失败, 请手动下载并安装新版本\": \"دانلود ناموفق بود، لطفاً نسخه جدید را به صورت دستی دانلود و نصب کنید\",\n  \"当前模式不支持此操作\": \"این روش در حالت فعلی پشتیبانی نمی‌شود\",\n  \"配置用途可以参考文章\": \"برای استفاده از تنظیمات می‌توان به مقاله مراجعه کرد\",\n  \"修改\": \"ویرایش کردن\",\n  \"端口\": \"پورت\",\n  \"不支持\": \"پشتیبانی نمی‌شود\",\n  \"用户名修改\": \"تغییر نام کاربر\",\n  \"请先删除多余的用户\": \"لطفاً ابتدا کاربران اضافی را حذف کنید\",\n  \"配置修改\": \"تغییر تنظیمات\",\n  \"检测到 Xray 的权限控制, 启动修改程序\": \"اجازه‌های کنترل xray شناسایی شد، برنامه تغییرات را شروع کنید\",\n  \"修改完成\": \"تغییرات انجام شد\",\n  \"若更新无效, 建议直接卸载再安装\": \"اگر به‌روزرسانی نتیجه‌ای نداشت، پیشنهاد می‌شود مستقیماً از بین ببرید و دوباره نصب کنید\",\n  \"部分新功能需要重新安装才可生效\": \"برخی از ویژگی‌های جدید نیاز به نصب مجدد دارند تا فعال شوند\",\n  \"检测到存在最新版\": \"نسخه جدیدتری شناسایی شده است\",\n  \"脚本可能未兼容此版本\": \"اسکریپت ممکن است با این نسخه سازگار نباشد\",\n  \"是否更新\": \"آیا به‌روزرسانی می‌شود\",\n  \"启动失败\": \"شروع ناموفق\",\n  \"是否回滚到之前的版本\": \"آیا به نسخه قبلی بازگردانده می‌شود؟\",\n  \"未执行回滚操作\": \"عملکرد برگشت انجام نشده است\",\n  \"正在回滚\": \"در حال بازگرداندن\",\n  \"已成功回滚到之前的\": \"به موفقیت به نسخه قبل بازگردانده شد\",\n  \"版本\": \"نسخه\",\n  \"回滚失败\": \"بازگرداندن شکست خورد\",\n  \"重装\": \"بازسازی\",\n  \"Reality 协议有流量偷跑的风险\": \"پروتکل ریالیتی خطر دارد که ترافیک از آن خارج شود\",\n  \"已跳过安装\": \"نصب را رد کرده‌اید\",\n  \"已存在, 跳过编译安装过程\": \"قبلاً وجود دارد، فرآیند کامپایل و نصب را رد کنید\",\n  \"检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装\": \"نگین‌کس نصب شده توسط مجموعه دیگر را تشخیص داده است، ادامه نصب باعث درگیری خواهد شد، لطفاً پس از حل مشکل، نصب کنید\",\n  \"即将下载已编译的\": \"به زودی دانلود شده‌است\",\n  \"不支持的系统架构\": \"ساختار سیستم پشتیبانی نشده است\",\n  \"当前安装模式不需要\": \"حالت فعلی نصب نیاز به آن ندارد\",\n  \"备份旧版\": \"نسخه قدیمی را ذخیره کنید\",\n  \"删除旧版\": \"نسخه قدیم را حذف کنید\",\n  \"是否保留原 Nginx 配置文件\": \"آیا فایل تنظیمات اصلی nginx را حفظ کنید؟\",\n  \"原配置文件已删除\": \"پرونده تنظیمات اصلی حذف شده است\",\n  \"原配置文件已保留\": \"پرونده تنظیمات اصلی نگهداری شده است\",\n  \"删除\": \"حذف کردن\",\n  \"备份\": \"پشتیبان‌گیری\",\n  \"已为最新版\": \"برای نسخه جدیدترین آماده شده است\",\n  \"设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)\": \"تنظیم برنامه‌های خودکار به‌روزرسانی پس‌زمینه (شامل: اسکریپت/xray/nginx)\",\n  \"设置自动更新\": \"تنظیم به‌روزرسانی خودکار\",\n  \"已设置自动更新\": \"به‌روزرسانی خودکار تنظیم شده است\",\n  \"是否关闭\": \"آیا بسته شود\",\n  \"删除自动更新\": \"به‌روزرسانی خودکار را حذف کنید\",\n  \"安装 SSL 证书生成脚本依赖\": \"نصب وابستگی‌های اسکریپت تولید گواهینامه ssl\",\n  \"安装 SSL 证书生成脚本\": \"نصب اسکریپت تولید گواهینامه ssl\",\n  \"检测到原域名配置存在, 是否跳过域名设置\": \"تنظیمات دامنه اصلی قبلی شناسایی شده است، آیا تنظیمات دامنه را رد کنید؟\",\n  \"无法获取公网IP地址\": \"نمی‌توان آدرس ip عمومی را بدست آورد\",\n  \"安装终止\": \"نصب متوقف شد\",\n  \"已跳过域名设置\": \"تنظیمات دامنه رد شد\",\n  \"确定域名信息\": \"اطلاعات دامنه را تأیید کنید\",\n  \"请输入你的域名信息\": \"لطفاً اطلاعات دامنه خود را وارد کنید\",\n  \"请选择公网IP(IPv4/IPv6)或手动输入域名\": \"لطفاً ip عمومی (ipv4/ipv6) را انتخاب کنید یا نام دامنه را به صورت دستی وارد کنید\",\n  \"正在获取公网IP信息, 请耐心等待\": \"دارد اطلاعات آی‌پی عمومی را دریافت می‌کند، لطفاً صبر کنید\",\n  \"此选项用于服务器商仅提供域名访问服务器\": \"این گزینه برای سرویس‌دهندگانی است که تنها دسترسی به سرور با نام دامنه را فراهم می‌کنند\",\n  \"注意服务器商域名添加 CNAME 记录\": \"توجه داشته باشید که شرکت سرور، رکورد cname را به نام دامنه اضافه کند\",\n  \"域名DNS解析IP\": \"dns نام دامنه به آدرس ip تبدیل می‌شود\",\n  \"公网IP/域名\": \"آی‌پی عمومی/نام دامنه\",\n  \"域名DNS解析IP与公网IP匹配\": \"dns نام دامنه با ip عمومی مطابقت دارد\",\n  \"请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray\": \"لطفاً مطمئن شوید که رکورد a/aaaa درست به نام دامنه اضافه شده است، در غیر این صورت xray قابلیت استفاده صحیح نخواهد داشت\",\n  \"域名DNS解析IP与公网IP不匹配, 请选择\": \"dns تحلیل نام دامنه ip با ip عمومی مطابقت ندارد، لطفاً انتخاب کنید\",\n  \"继续安装\": \"نصب را ادامه دهید\",\n  \"重新输入\": \"دوباره وارد کنید\",\n  \"终止安装\": \"نصب را متوقف کنید\",\n  \"检测到原IP配置存在, 是否跳过IP设置\": \"پیکربندی ip اصلی شناسایی شد، آیا می‌خواهید از تنظیمات ip گذشته شوید؟\",\n  \"已跳过IP设置\": \"تنظیمات ip پرشده شد\",\n  \"确定公网IP信息\": \"اطلاعات ip عمومی را مشخص کنید\",\n  \"请选择公网IP为IPv4或IPv6\": \"لطفاً ip عمومی را به عنوان ipv4 یا ipv6 انتخاب کنید\",\n  \"手动输入\": \"ورود دستی\",\n  \"端口未被占用\": \"پورت اشغال نشده است\",\n  \"检测到\": \"شنیده شد\",\n  \"端口被占用\": \"پورت در حال استفاده است\",\n  \"以下为\": \"زیرا در\",\n  \"端口占用信息\": \"اطلاعات استفاده از پورت\",\n  \"尝试终止占用的进程\": \"تلاش برای متوقف کردن فرآیندی که در حال استفاده است\",\n  \"证书测试签发成功, 开始正式签发\": \"ثبت شناسنامه با موفقیت انجام شد، شروع به صدور رسمی\",\n  \"证书测试签发失败\": \"امکان ارسال گواهینامه آزمایشی وجود ندارد\",\n  \"证书生成成功\": \"تصدیق تولید شد\",\n  \"证书配置成功\": \"تنظیمات گواهینامه با موفقیت انجام شد\",\n  \"证书生成失败\": \"ناموفقیت در تولید گواهینامه\",\n  \"检测到 Xray 配置过多用户\": \"کشف شد که تنظیمات xray از تعداد بیش از حد کاربران استفاده می‌کنند\",\n  \"是否保留原 Xray 配置文件\": \"آیا پرونده تنظیمات اصلی xray را حفظ کنید؟\",\n  \"添加简单 ws/gRPC 协议\": \"افزودن پروتکل‌های ساده ws/grpc\",\n  \"检测到配置文件, 是否读取配置文件\": \"پرونده تنظیمات شناسایی شد، آیا می‌خواهید پرونده تنظیمات را بخوانید؟\",\n  \"已删除配置文件\": \"پروفایل حذف شده\",\n  \"已保留配置文件\": \"پروفایل ذخیره شده است\",\n  \"检测到当前安装模式与配置文件的安装模式不一致\": \"مشاهده شد که حالت نصب فعلی با حالت نصب فایل پیکربندی مطابقت ندارد\",\n  \"是否保留配置文件 (强烈不建议)\": \"آیا فایل پیکربندی را حفظ کنید (به شدت توصیه نمی‌شود)\",\n  \"请务必确保配置文件正确\": \"لطفاً حتماً مطمئن شوید که فایل پیکربندی درست است\",\n  \"检测到配置文件不完整, 是否保留配置文件\": \"پرونده تنظیمات ناقص شناسایی شد، آیا می‌خواهید پرونده تنظیمات را حفظ کنید؟\",\n  \"配置删除\": \"پاک کردن تنظیمات\",\n  \"设置 Nginx 开机自启\": \"تنظیم اتوماتیک شروع nginx در هنگام روشن شدن سیستم\",\n  \"设置\": \"تنظیمات\",\n  \"开机自启\": \"روشن شدن خودکار\",\n  \"关闭 Nginx 开机自启\": \"nginx را در زمان روشن شدن خودکار غیرفعال کنید\",\n  \"关闭\": \"بستن\",\n  \"重启\": \"بازنشانی\",\n  \"启动\": \"شروع کردن\",\n  \"停止\": \"متوقف شوید\",\n  \"新版本已自动设置证书自动更新\": \"نسخه جدید به طور خودکار تنظیم شده است تا گواهینامه‌ها را به صورت خودکار به روزرسانی کند\",\n  \"老版本请及时删除 废弃的 改版证书自动更新\": \"نسخه قدیمی را به موقع حذف کنید، گواهینامه‌های منسوخ شده به صورت خودکار به روز می‌شوند\",\n  \"已设置改版证书自动更新\": \"به‌روزرسانی خودکار گواهینامه‌های بازطراحی شده تنظیم شده است\",\n  \"是否需要删除改版证书自动更新 (请删除)\": \"آیا نیاز است که به‌روزرسانی خودکار گواهینامه بازطراحی شده حذف شود (لطفاً حذف کنید)\",\n  \"删除改版证书自动更新\": \"حذف اتوماتیک به روزرسانی گواهینامه بازطراحی شده\",\n  \"已过期\": \"منقضی شده است\",\n  \"证书生成日期\": \"تاریخ تولید گواهینامه\",\n  \"证书生成天数\": \"روزهای تولید گواهینامه\",\n  \"证书剩余天数\": \"روز‌های باقی‌مانده گواهینامه\",\n  \"是否立即更新证书\": \"آیا شناسنامه بلافاصله به روزرسانی می‌شود؟\",\n  \"证书签发工具不存在, 请确认是否证书为脚本签发\": \"ابزار امضا کردن گواهینامه وجود ندارد، لطفاً تأیید کنید که آیا گواهینامه با اسکریپت امضا شده است\",\n  \"证书更新\": \"به‌روزرسانی گواهینامه\",\n  \"本地文件 fail2ban_manager.sh 不存在, 正在下载\": \"پرونده محلی fail2ban_manager.sh وجود ندارد، در حال دانلود است\",\n  \"检测到日志文件大小如下:\": \"اندازه فایل روزنامه به شرح زیر تشخیص داده شد\",\n  \"即将清除\": \"به زودی پاک می‌شود\",\n  \"日志清理\": \"پاکسازی روزنامه\",\n  \"保留现有自动清理日志任务\": \"ماموریت پاکسازی خودکار روزنامه‌ها را حفظ کنید\",\n  \"是否需要设置自动清理日志\": \"آیا نیاز به تنظیم خودکار پاک کردن روزنامه‌ها وجود دارد؟\",\n  \"清空屏幕\": \"صفحه را خالی کنید\",\n  \"将在 每周三 04:00 自动清空日志\": \"روزانه در هر چهارشنبه ساعت 04:00 صبح خودکار روزنامه پاک می‌شود\",\n  \"已设置自动清理日志任务\": \"وظیفه خودکار پاکسازی روزنامه‌ها تنظیم شده است\",\n  \"是否需要删除现有自动清理日志任务\": \"آیا نیاز به حذف وظیفه پاکسازی خودکار روزنامه فعلی وجود دارد؟\",\n  \"删除自动清理日志任务\": \"وظیفه خودکار حذف روزنامه‌ها را حذف کنید\",\n  \"设置自动清理日志\": \"تنظیم خودکار پاک کردن روزنامه‌ها\",\n  \"配置分享\": \"به اشتراک گذاری تنظیمات\",\n  \"分享链接\": \"لینک اشتراک\",\n  \"二维码\": \"کد qr\",\n  \"生成分享链接\": \"لینک اشتراک‌گذاری را تولید کنید\",\n  \"安装成功\": \"نصب موفقیت‌آمیز\",\n  \"目前分享链接规范为实验阶段, 请自行判断是否适用\": \"در حال حاضر، استاندارد لینک اشتراک به عنوان مرحله آزمایشی است و لطفاً خودتان تصمیم بگیرید که آیا مناسب است یا نه\",\n  \"配置信息\": \"اطلاعات تنظیم\",\n  \"主机\": \"سرور\",\n  \"用户id\": \"شناسه کاربر\",\n  \"加密\": \"رمز‌گذاری\",\n  \"传输协议\": \"پروتکل انتقال\",\n  \"底层传输安全\": \"امنیت انتقال لایه پایین\",\n  \"路径\": \"مسیر\",\n  \"不要落下\": \"نگذار از دست بیفتد\",\n  \"不需要加\": \"نیاز به افزودن ندارد\",\n  \"流控\": \"کنترل جریان\",\n  \"即将申请证书, 支持使用自定义证书\": \"در حال درخواست گواهینامه است، از استفاده از گواهینامه‌های سفارشی پشتیبانی می‌کند\",\n  \"如需使用自定义证书, 请按如下步骤:\": \"برای استفاده از گواهینامه سفارشی، لطفاً مراحل زیر را دنبال کنید\",\n  \"1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)\": \"۱. فایل گواهینامه را با نام جدیدی به نام: کلید خصوصی (xray.key)، گواهینامه (xray.crt) تغییر نام دهید\",\n  \"2. 将重命名后的证书文件放入\": \"۲. فایل گواهینامه با نام تغییر یافته را قرار دهید\",\n  \"目录后再运行脚本\": \"پس از فهرست، اسکریپت را اجرا کنید\",\n  \"3. 重新运行脚本\": \"۳. دوباره اسکریپت را اجرا کنید\",\n  \"是否继续\": \"آیا ادامه دادن؟\",\n  \"所有证书文件均已存在, 是否保留\": \"تمام فایل‌های گواهینامه وجود دارد، آیا حفظ شود؟\",\n  \"已删除\": \"حذف شده است\",\n  \"证书应用\": \"کاربرد گواهینامه\",\n  \"证书文件已存在, 是否保留\": \"پرونده گواهینامه وجود دارد، آیا حفظ می‌شود؟\",\n  \"证书签发残留文件已存在, 是否保留\": \"پرونده‌های باقیمانده از صدور گواهینامه وجود دارد، آیا نگهداری می‌شود؟\",\n  \"添加\": \"اضافه کردن\",\n  \"请选择支持的 TLS 版本\": \"لطفاً نسخه tls مورد پشتیبانی را انتخاب کنید\",\n  \"兼容模式\": \"حالت سازگار\",\n  \"安全模式\": \"حالت امن\",\n  \"已切换至\": \"به این تبدیل شده است\",\n  \"请先安装\": \"لطفاً ابتدا نصب کنید\",\n  \"此模式不支持修改\": \"این روش از تغییر پذیرش نمی‌کند\",\n  \"即将显示用户, 一次仅能显示一个\": \"کاربران به زودی نمایش داده می‌شوند، اما فقط یک کاربر در هر بار نمایش داده می‌شود\",\n  \"请选择显示用户使用的协议\": \"لطفاً پروتکل مورد استفاده کاربر را انتخاب کنید\",\n  \"请选择要显示的用户编号\": \"لطفاً شماره کاربر مورد نظر برای نمایش را انتخاب کنید\",\n  \"选择错误\": \"انتخاب اشتباه\",\n  \"请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户\": \"لطفاً مستقیماً در منوی اصلی [اطلاعات پیکربندی xray] را انتخاب کنید تا کاربر اصلی نمایش داده شود\",\n  \"请先检测 Xray 是否正确安装\": \"لطفاً ابتدا بررسی کنید که آیکس ری به درستی نصب شده است یا خیر\",\n  \"是否继续显示用户\": \"آیا نمایش کاربر ادامه یابد\",\n  \"此模式不支持删除用户\": \"این روش از حذف کاربر پشتیبانی نمی‌کند\",\n  \"即将添加用户, 一次仅能添加一个\": \"کاربران به زودی اضافه می‌شوند، اما فقط یک کاربر در هر بار قابل اضافه کردن است\",\n  \"请选择添加用户使用的协议\": \"لطفاً پروتکل استفاده شده برای افزودن کاربر را انتخاب کنید\",\n  \"添加用户\": \"افزودن کاربر\",\n  \"是否继续添加用户\": \"آیا می‌خواهید به افزودن کاربر ادامه دهید؟\",\n  \"此模式不支持添加用户\": \"این روش اضافه کردن کاربر را پشتیبانی نمی‌کند\",\n  \"即将删除用户, 一次仅能删除一个\": \"کاربر قرار است حذف شود، فقط یک نفر در هر بار قابل حذف است\",\n  \"请选择删除用户使用的协议\": \"لطفاً توافقنامه‌ای که توسط کاربر استفاده می‌شود را انتخاب کنید\",\n  \"请选择要删除的用户编号\": \"لطفاً شماره کاربر مورد نظر برای حذف را انتخاب کنید\",\n  \"主用户无法删除\": \"کاربر اصلی نمی‌تواند حذف شود\",\n  \"删除用户\": \"کاربر را حذف کنید\",\n  \"是否继续删除用户\": \"آیا می‌خواهید کاربر را حذف کنید؟\",\n  \"文件不存在\": \"فایل وجود ندارد\",\n  \"已配置 Xray 流量统计\": \"آمار ترافیک xray تنظیم شده است\",\n  \"是否需要关闭此功能\": \"آیا نیاز به غیرفعال کردن این ویژگی است؟\",\n  \"关闭 Xray 流量统计\": \"آمار جریان xray را بستن\",\n  \"流量统计需要使用\": \"برای آمار ترافیک باید استفاده کرد\",\n  \"可能会影响 Xray 性能\": \"ممکن است بر عملکرد ایکس‌ری تأثیر بگذارد\",\n  \"设置 Xray 流量统计\": \"تنظیم آمار جریان xray\",\n  \"已卸载\": \"از نصب خارج شده است\",\n  \"是否卸载\": \"آیا باید حذف شود؟\",\n  \"是否删除所有脚本文件\": \"آیا می‌خواهید تمام فایل‌های اسکریپت را حذف کنید؟\",\n  \"已删除所有文件\": \"تمام فایل‌ها حذف شدند\",\n  \"ヾ(￣▽￣) 拜拜~\": \"(¯▽¯) سلام ~\",\n  \"已保留脚本文件 (包含 SSL 证书等)\": \"فایل‌های اسکریپت (شامل گواهینامه ssl و غیره) ذخیره شده است\",\n  \"是否保留配置文件\": \"آیا فایل پیکربندی را حفظ کنید\",\n  \"已清空证书遗留文件\": \"فایل‌های باقی‌مانده از گواهینامه خالی شده است\",\n  \"秒后\": \"ثانیه بعد\",\n  \"检测最新版本失败\": \"شکست در تشخیص آخرین نسخه\",\n  \"新版本\": \"نسخه جدید\",\n  \"更新内容\": \"محتوای به‌روزرسانی\",\n  \"存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新\": \"نسخه جدیدی وجود دارد، اما تغییرات نسخه‌ها بسیار زیاد است و ممکن است بازهم ناسازگاری وجود داشته باشد. آیا به روزرسانی می‌کنید؟\",\n  \"存在新版本, 是否更新\": \"نسخه جدیدی وجود دارد، آیا می‌خواهید به روزرسانی کنید؟\",\n  \"检测 脚本 最新版本失败\": \"شکست در بررسی آخرین نسخه اسکریپت\",\n  \"脚本 版本差别过大, 跳过更新\": \"نسخه‌ی اسکریپت بسیار متفاوت است، به‌روزرسانی را رد کنید\",\n  \"更新完成\": \"به‌روزرسانی کامل شد\",\n  \"脚本版本变化较大, 若服务无法正常运行请卸载后重装\": \"نسخه‌ی اسکریپت تغییرات قابل توجهی داشته است، لطفاً در صورت عدم عملکرد صحیح خدمات، آن را حذف کرده و دوباره نصب کنید\",\n  \"当前版本为最新版本\": \"نسخه فعلی جدیدترین نسخه است\",\n  \"下载最新脚本\": \"آخرین اسکریپت را دانلود کنید\",\n  \"该选项暂时无法使用\": \"این گزینه در حال حاضر قابل استفاده نیست\",\n  \"此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装\": \"این روش برای توازن بار توصیه می‌شود، در شرایط عادی توصیه نمی‌شود که استفاده شود، آیا نصب می‌کنید\",\n  \"变更\": \"تغییر\",\n  \"负载均衡配置\": \"پیکربندی توازن بار\",\n  \"清除日志文件\": \"پاک کردن فایل‌های روزنامه\",\n  \"查看证书状态\": \"وضعیت گواهینامه را بررسی کنید\",\n  \"更新证书有效期\": \"به روزرسانی مدت اعتبار گواهینامه\",\n  \"设置证书自动更新\": \"تنظیم به‌روزرسانی خودکار گواهینامه\",\n  \"设置 Fail2ban 防暴力破解\": \"تنظیم فایل2بان برای جلوگیری از حملات کلمه‌پسوردی\",\n  \"显示帮助\": \"نمایش کمک\",\n  \"更新\": \"به‌روزرسانی\",\n  \"脚本卸载\": \"اسکریپت‌های خارج شده\",\n  \"显示安装信息\": \"اطلاعات نصب را نشان دهید\",\n  \"加速\": \"سرعت بخشیدن\",\n  \"显示\": \"نمایش\",\n  \"访问信息\": \"اطلاعات بازدید\",\n  \"错误信息\": \"پیام خطا\",\n  \"脚本版本变化较大, 可能存在不兼容情况, 是否继续使用\": \"نسخه‌ی اسکریپت تغییرات زیادی داشته است و ممکن است با نسخه‌های قبلی سازگار نباشد، آیا می‌خواهید ادامه دهید؟\",\n  \"检测失败\": \"عملیات تشخیص با شکست مواجه شد\",\n  \"有新版\": \"نسخه جدیدی وجود دارد\",\n  \"最新版\": \"نسخه جدیدترین\",\n  \"版本未知\": \"نسخه ناشناخته\",\n  \"运行中\": \"در حال اجرا\",\n  \"无需测试\": \"نیاز به آزمایش ندارد\",\n  \"未运行\": \"در حال اجرا نیست\",\n  \"无法连通\": \"نمی‌توان به آن متصل شد\",\n  \"本地正常\": \"وضعیت محلی عادی است\",\n  \"脚本维护中.. 请稍后再试\": \"اسکریپت در حال نگهداری است.. لطفاً بعداً دوباره امتحان کنید\",\n  \"无法检测所需依赖的在线版本, 请稍后再试\": \"نمی‌توان نسخه آنلاین وابستگی مورد نیاز را تشخیص داد، لطفاً بعداً دوباره تلاش کنید\",\n  \"请输入数字\": \"عدد را وارد کنید\",\n  \"请输入 1 到 6 之间的有效数字\": \"لطفاً عدد معتبری بین ۱ تا ۶ وارد کنید\",\n  \"无效的选择\": \"انتخاب نامعتبر\",\n  \"请输入备份名称\": \"لطفاً نام پشتیبان را وارد کنید\",\n  \"不需要后缀\": \"نیاز به پسوند نیست\",\n  \"报错信息\": \"پیام خطا\",\n  \"备份完整性可能受到影响, 请检查上述错误信息\": \"ممکن است کامل بودن پشتیبان‌گیری تحت تأثیر قرار گرفته باشد، لطفاً اطلاعات خطا را بررسی کنید\",\n  \"备份失败\": \"عملیات باک‌آپ ناموفق بود\",\n  \"备份成功\": \"ذخیره‌سازی موفقیت‌آمیز\",\n  \"请确保备份文件在目录\": \"لطفاً مطمئن شوید که فایل‌های پشتیبان در دایرکتوری هستند\",\n  \"没有找到备份文件\": \"پرونده پشتیبان یافت نشد\",\n  \"发现多个备份文件\": \"چندین فایل پشتیبان یافت شد\",\n  \"将使用最新的文件进行恢复\": \"از آخرین فایل‌ها برای بازیابی استفاده خواهد شد\",\n  \"找到最新备份文件\": \"پیدا کردن آخرین فایل پشتیبان\",\n  \"恢复备份\": \"بازیابی پشتیبان\",\n  \"恢复成功\": \"بازیابی موفق\",\n  \"记得安装\": \"یادتان باشد نصب کنید\",\n  \"恢复失败\": \"بازیابی ناموفق\",\n  \"安装管理脚本\": \"نصب اسکریپت مدیریت\",\n  \"作者\": \"نویسنده\",\n  \"当前模式\": \"حالت فعلی\",\n  \"当前语言\": \"زبان فعلی\",\n  \"可以使用\": \"می‌تواند استفاده شود\",\n  \"命令管理脚本\": \"اسکریپت مدیریت دستور\",\n  \"版本检测\": \"تشخیص نسخه\",\n  \"脚本\": \"اسکریپت\",\n  \"运行状态\": \"حالت اجرا\",\n  \"连通性\": \"اتصال\",\n  \"安装向导\": \"راهنمای نصب\",\n  \"配置变更\": \"تغییر تنظیمات\",\n  \"用户管理\": \"مدیریت کاربران\",\n  \"查看\": \"مشاهده کنید\",\n  \"用户\": \"کاربر\",\n  \"查看信息\": \"اطلاعات را ببینید\",\n  \"实时访问日志\": \"روگردان وقوع زمان واقع\",\n  \"实时错误日志\": \"روزنامه خطاها در زمان واقعی\",\n  \"服务相关\": \"خدمات مرتبط\",\n  \"所有服务\": \"تمام خدمات\",\n  \"证书相关\": \"مربوط به گواهینامه\",\n  \"证书状态\": \"وضع گواهینامه\",\n  \"证书有效期\": \"مدت اعتبار گواهینامه\",\n  \"证书自动更新\": \"به‌روزرسانی خودکار گواهینامه\",\n  \"其他选项\": \"گزینه‌های دیگر\",\n  \"自动更新\": \"به‌روزرسانی خودکار\",\n  \"防暴力破解\": \"پاداشت خرابکاری\",\n  \"流量统计\": \"آمار جریان\",\n  \"清除\": \"پاک کردن\",\n  \"日志文件\": \"فایل روزنامه\",\n  \"测试\": \"آزمایش\",\n  \"服务器网速\": \"سرعت اینترنت سرور\",\n  \"备份恢复\": \"بازیابی پشتیبان\",\n  \"全部文件\": \"تمام فایل‌ها\",\n  \"恢复\": \"بازیابی\",\n  \"卸载向导\": \"راهنمای خارج کردن نصب\",\n  \"卸载\": \"حذف کردن\",\n  \"清空\": \"خالی کردن\",\n  \"证书文件\": \"فایل گواهینامه\",\n  \"退出\": \"خروج\",\n  \"请输入选项\": \"لطفاً گزینه را وارد کنید\",\n  \"不建议\": \"توصیه نمی‌شود\",\n  \"回到菜单\": \"برگرد به منو\",\n  \"用于防止暴力破解\": \"برای جلوگیری از حمله به روش کلمه‌پردازی\",\n  \"主菜单\": \"منوی اصل\",\n  \"管理\": \"مدیریت\",\n  \"状态\": \"وضع\",\n  \"请选择一个选项\": \"یک گزینه انتخاب کنید\",\n  \"已经安装, 跳过安装步骤\": \"قبلاً نصب شده است، گام نصب را رد کنید\",\n  \"未安装, 请先安装\": \"نصب نشده است، لطفاً ابتدا نصب کنید\",\n  \"规则\": \"قوانین\",\n  \"跳过启用\": \"پرش از فعال‌سازی\",\n  \"已启用\": \"فعال شده است\",\n  \"请选择\": \"لطفاً انتخاب کنید\",\n  \"操作\": \"عملیات\",\n  \"添加自定义规则\": \"قوانین سفارشی اضافه کنید\",\n  \"请输入新的\": \"لطفاً جدید را وارد کنید\",\n  \"名称\": \"نام\",\n  \"请输入日志路径\": \"مسیر لاگ را وارد کنید\",\n  \"请输入最大重试次数\": \"حداکثر تعداد دفعات تلاش مجدد را وارد کنید\",\n  \"最大重试次数必须在 1 到 99 之间\": \"حداکثر تعداد تلاش‌های مجدد باید بین ۱ تا ۹۹ باشد\",\n  \"请输入封禁时间\": \"مدت زمان ممنوعیت را وارد کنید\",\n  \"秒\": \"ثانیه\",\n  \"封禁时间必须在 1 到 8640000 秒之间\": \"مدت زمان ممنوعیت باید بین ۱ تا ۸۶۴۰۰۰۰ ثانیه باشد\",\n  \"自定义规则添加成功\": \"قوانین سفارشی با موفقیت اضافه شدند\",\n  \"重启以应用新规则\": \"برای اعمال قوانین جدید، بازنشانی کنید\",\n  \"停止成功\": \"موفقیت توقف\",\n  \"总体状态\": \"وضع کلی\",\n  \"默认启用的 Jail 状态\": \"وضع jail به طور پیش فرض فعال شده\",\n  \"封锁情况\": \"وضع مسدود\",\n  \"新版本可用\": \"نسخه جدید در دسترس است\",\n  \"当前版本\": \"نسخه فعلی\",\n  \"请访问\": \"لطفاً به دیدن\",\n  \"查看更新说明\": \"دستورالعمل‌های به‌روزرسانی را مشاهده کنید\",\n  \"正在下载新版本\": \"در حال دانلود نسخه جدید\",\n  \"下载完成, 请重新运行脚本\": \"دانلود کامل شد، لطفاً دوباره اسکریپت را اجرا کنید\",\n  \"跳过更新\": \"به‌روزرسانی را بگذارید\",\n  \"当前已经是最新版本\": \"در حال حاضر، این آخرین نسخه است\",\n  \"用法\": \"استفاده\",\n  \"文件扩展名\": \"نام امتداد فایل\",\n  \"目录路径\": \"مسیر فهرست\",\n  \"目录\": \"فهرست\",\n  \"不存在, 请检查路径\": \"وجود ندارد، لطفاً مسیر را بررسی کنید\",\n  \"列出所有\": \"همه را لیست کنید\",\n  \"文件\": \"فایل\",\n  \"文件名\": \"نام فایل\",\n  \"序号\": \"شماره ترتیب\",\n  \"请输入网址 (例如 hey.run)\": \"لطفاً آدرس وب (مثلاً hey.run) را وارد کنید\",\n  \"不要包含 http:// 或 https:// 开头\": \"نامی که با http:// یا https:// شروع می‌شود را شامل نکنید\",\n  \"已创建\": \"ایجاد شده است\",\n  \"请输入主机\": \"لطفاً میزبان را وارد کنید\",\n  \"请输入权重\": \"لطفاً وزن را وارد کنید\",\n  \"追加完成\": \"اضافه کردن به پایان رسیدن\",\n  \"请输入要编辑的文件编号\": \"لطفاً شماره فایل مورد نظر برای ویرایش را وارد کنید\",\n  \"未安装, 正在尝试安装\": \"نصب نشده، در حال تلاش برای نصب است\",\n  \"已编辑\": \"ویرایش شده\",\n  \"请输入要删除的文件编号\": \"شماره فایل مورد نظر برای حذف را وارد کنید\",\n  \"不支持的文件扩展名\": \"پسوند فایل پشتیبانی نشده است\",\n  \"创建一个新的\": \"یک چیز جدید ایجاد کنید\",\n  \"编辑一个已存在的\": \"ویرایش یک مورد موجود\",\n  \"删除一个已存在的\": \"حذف یک مورد موجود\",\n  \"无效选项, 请重试\": \"گزینه نامعتبر، لطفاً دوباره تلاش کنید\",\n  \"重启成功\": \"با موفقیت راه‌اندازی شد\",\n  \"重启失败\": \"شکست در راه‌اندازی مجدد\",\n  \"请检查配置文件是否有误\": \"لطفاً بررسی کنید که آیا فایل تنظیمات دچار خطا است یا نه\",\n  \"未启用或配置异常\": \"خطا در فعال‌سازی یا تنظیم\",\n  \"是否添加 Reality 负载均衡\": \"آیا بارگیری واقعی اضافه شود\",\n  \"使用此功能前，建议先阅读作者教程\": \"قبل از استفاده از این ویژگی، توصیه می‌شود که آموزش نویسنده را بخوانید\",\n  \"已跳过\": \"پرش شده است\",\n  \"如用作 Reality 负载均衡二级服务器则无需安装\": \"اگر به عنوان سرور دوم بارگیری کننده واقعیت استفاده شود، نصب لازم نیست\",\n  \"是否额外安装 nginx 前置保护\": \"آیا نگهدارنده nginx اضافه می‌شود؟\",\n  \"推荐\": \"توصیه شده\",\n  \"检测到已开启 Reality 负载均衡\": \"تعادل بار realiti فعال شده است\",\n  \"如用作 Reality 负载均衡主服务器必须安装\": \"اگر به عنوان سرور اصلی تعادل بار reality استفاده شود، باید نصب شود\",\n  \"检测到已安装\": \"نرم‌افزار نصب شده شناسایی شد\",\n  \"已取消卸载\": \"لغو شدیدن از نصب\",\n  \"下载失败\": \"دریافت ناموفق است\",\n  \"下载成功\": \"دانلود با موفقیت انجام شد\",\n  \"解压失败\": \"بازکردن فایل ناموفق بود\",\n  \"链接分享\": \"به اشتراک گذاری پیوند\",\n  \"修改语言\": \"زبان را ویرایش کنید\",\n  \"此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装\": \"این روش فقط برای انتقال ترافیک استفاده می‌شود و در سایر موارد توصیه نمی‌شود. آیا می‌خواهید نصب کنید؟\",\n  \"信息\": \"اطلاعات\",\n  \"配置不完整, 退出更新\": \"پیکربندی ناقص است، به‌روزرسانی را ترک کنید\",\n  \"配置不存在, 退出更新\": \"پیکربندی موجود نیست، به‌روزرسانی را ترک کنید\",\n  \"无效的选择, 请重试\": \"انتخاب نامعتبر، لطفاً دوباره تلاش کنید\",\n  \"systemd 无法读取 SSH 日志\": \"systemd نمی‌تواند روزنامه‌های ssh را بخواند\",\n  \"网址不能包含 http:// 或 https:// 前缀\": \"آدرس وب نباید پیشوند http:// یا https:// داشته باشد\",\n  \"日志文件清空失败\": \"پاکسازی فایل روزنامه ناموفق بود\",\n  \"当前用户是 root 用户, 开始安装\": \"کاربر فعلی، کاربر روت است؛ نصب را شروع کنید\",\n  \"当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本\": \"کاربر فعلی روت نیست، لطفاً به کاربر روت تغییر مسیر دهید و سپس اسکریپت را دوباره اجرا کنید\",\n  \"已跳过设置自动清理日志\": \"تنظیمات پاکسازی خودکار روزنامه‌ها نادیده گرفته شده است\",\n  \"脚本更新失败\": \"به‌روزرسانی اسکریپت ناموفق بود\",\n  \"更新失败\": \"به‌روزرسانی ناموفق بود\",\n  \"更新脚本\": \"برنامه‌ی به‌روزرسانی\",\n  \"更新向导\": \"راهنمای به‌روزرسانی\",\n  \"频繁更新 Nginx, 请确认 Nginx 有更新的必要\": \"به‌طور مکرر nginx را به‌روزرسانی کنید، لطفاً مطمئن شوید که nginx نیاز به به‌روزرسانی دارد\",\n  \"开始更新\": \"آغاز به روزرسانی\",\n  \"建议选择 TLSv1.3 only (安全模式)\": \"پیشنهاد می‌شود فقط tlsv1.3 انتخاب شود (حالت امن)\",\n  \"由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)\": \"از آنجا که h3 فقط tlsv1.3 را پشتیبانی می‌کند، فقط tlsv1.3 (حالت امن) پشتیبانی می‌شود\",\n  \"请选择 TLS 版本\": \"tls نسخه را انتخاب کنید\",\n  \"建议选择 TLSv1.3 (安全模式)\": \"پیشنهاد می‌شود tlsv1.3 (حالت امن) انتخاب شود\",\n  \"当前模式不支持\": \"حالت فعلی پشتیبانی نمی‌کند\",\n  \"Nginx配置文件不存在 或 当前模式不支持\": \"فایل تنظیمات nginx موجود نیست یا حالت فعلی پشتیبانی نمی‌کند\",\n  \"已禁用\": \"غیرفعال شده است\",\n  \"管理模块\": \"مدول مدیریت\",\n  \"服务管理\": \"مدیریت خدمات\",\n  \"管理 Fail2ban 模块\": \"مدیریت ماژول fail2ban\",\n  \"未找到任何模块化配置文件\": \"هیچ فایل پیکربندی مدولاری یافت نشد\",\n  \"模块名称\": \"نام مدول\",\n  \"请选择要管理的模块\": \"ماژول مورد نظر برای مدیریت را انتخاب کنید\",\n  \"启用\": \"فعال کردن\",\n  \"禁用\": \"غیرفعال کردن\",\n  \"模块\": \"ماژول\",\n  \"操作已取消\": \"عملیات لغو شد\",\n  \"可能自动更新后有兼容问题, 谨慎启用\": \"ممکن است پس از به‌روزرسانی خودکار مشکلات سازگاری وجود داشته باشد؛ لطفاً با احتیاط فعال کنید\",\n  \"是否启用\": \"فعال‌سازی شود؟\",\n  \"是否\": \"آیا\",\n  \"是否下载并安装新版本\": \"آیا نسخه جدید را دانلود و نصب می‌کنید؟\",\n  \"无法获取网卡, 将监控所有网卡\": \"نمی‌توان کارت شبکه را دریافت کرد، تمام کارتهای شبکه تحت نظارت قرار خواهد گرفت\",\n  \"监控网卡\": \"نگهبانی کارت شبکه\",\n  \"监控端口\": \"پورت نظارتی\",\n  \"按 q 键退出 iftop\": \"برای خروج از iftop، دکمه q را فشار دهید\",\n  \"实时流量\": \"جریان زنده\"\n}"
  },
  {
    "path": "po/cache_Russian.json",
    "content": "{\n  \"错误\": \"ошибка\",\n  \"警告\": \"предупреждение\",\n  \"未安装\": \"не установлен\",\n  \"日志文件归档失败\": \"не удалось архивировать файл журнала\",\n  \"日志文件已轮转并归档为\": \"файл журнала был переключен и архивирован как\",\n  \"当前系统为\": \"текущая система —\",\n  \"不在支持的系统列表内, 安装中断\": \"не входит в список поддерживаемых систем, установка прервана\",\n  \"无法获取远程语言文件信息\": \"не удалось получить информацию о языковых файлах удаленного сервера\",\n  \"正在更新语言文件\": \"обновляется файл языка\",\n  \"语言文件更新失败\": \"сбой обновления языкового файла\",\n  \"语言文件无效\": \"файл языка недействителен\",\n  \"版本文件更新失败\": \"сбой обновления файла версии\",\n  \"语言文件更新完成\": \"обновление языкового файла завершено\",\n  \"正在安装\": \"устанавливается\",\n  \"安装失败\": \"установка не удалась\",\n  \"将使用默认语言\": \"будет использован язык по умолчанию\",\n  \"未找到\": \"не найдено\",\n  \"不支持的语言\": \"язык, который не поддерживается\",\n  \"发现语言文件更新\": \"обнаружено обновление языкового файла\",\n  \"完成\": \"завершить\",\n  \"失败\": \"неудача\",\n  \"在线版本检测失败, 请稍后再试\": \"не удалось проверить онлайн-версию, попробуйте позже\",\n  \"安装\": \"установка\",\n  \"已安装\": \"установлено\",\n  \"自启动配置\": \"конфигурация автозапуска\",\n  \"链接库安装\": \"установка библиотеки ссылок\",\n  \"值为空或超出范围, 请重新输入\": \"значение пустое или выходит за пределы допустимого диапазона, введите снова\",\n  \"值为空, 请重新输入\": \"значение пустое, введите заново\",\n  \"确定端口\": \"определить порт\",\n  \"请输入端口\": \"пожалуйста, введите порт\",\n  \"默认值\": \"значение по умолчанию\",\n  \"请输入 0-65535 之间的值\": \"пожалуйста, введите значение от 0 до 65535\",\n  \"端口不允许使用, 请重新输入\": \"порт недоступен, введите снова\",\n  \"请选择安装协议\": \"пожалуйста, выберите соглашение об установке\",\n  \"默认\": \"по умолчанию\",\n  \"请输入\": \"пожалуйста, введите\",\n  \"请输入有效的数字\": \"пожалуйста, введите действительное число\",\n  \"是否添加简单 ws/gRPC 协议 用于负载均衡\": \"добавить ли простой протокол ws/grpc для балансировки нагрузки\",\n  \"如不清楚具体用途, 请勿选择\": \"если неясно конкретное назначение, пожалуйста, не выбирайте\",\n  \"已跳过添加简单 ws/gRPC 协议\": \"пропущено добавление простых протоколов ws/grpc\",\n  \"是否需要自定义\": \"требуется ли настройка\",\n  \"请勿与其他端口相同\": \"не используйте тот же порт, что и другие\",\n  \"是否需要设置防火墙\": \"нужно ли устанавливать брандмауэр\",\n  \"防火墙\": \"брандмауэр\",\n  \"重启完成\": \"перезагрузка завершена\",\n  \"开放防火墙相关端口\": \"открыть соответствующие порты брандмауэра\",\n  \"若修改配置, 请注意关闭防火墙相关端口\": \"если изменяете настройки, обратите внимание на закрытие соответствующих портов брандмауэра\",\n  \"配置\": \"конфигурация\",\n  \"跳过防火墙设置\": \"пропустить настройку брандмауэра\",\n  \"伪装路径\": \"путь маскировки\",\n  \"不需要\": \"не нужно\",\n  \"用户名\": \"имя пользователя\",\n  \"请输入正确的 email\": \"пожалуйста, введите правильный адрес электронной почты\",\n  \"是否需要自定义字符串映射\": \"требуется ли пользовательское сопоставление строк\",\n  \"请输入自定义字符串\": \"пожалуйста, введите пользовательскую строку\",\n  \"最多30字符\": \"максимум 30 символов\",\n  \"自定义字符串\": \"пользовательская строка\",\n  \"映射字符串\": \"сопоставление строки\",\n  \"检测到 target 域名已配置, 是否保留\": \"обнаружено, что домен target уже настроен. сохранить\",\n  \"请输入一个域名\": \"пожалуйста, введите доменное имя\",\n  \"域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用\": \"доменное имя должно поддерживать tlsv1.3, x25519 и h2, а также не использовать перенаправления\",\n  \"确认域名符合要求后请输入\": \"после подтверждения соответствия доменного имени требованиям, введите\",\n  \"正在检测域名请等待\": \"проверка домена, пожалуйста, подождите\",\n  \"该域名不支持\": \"данный домен не поддерживается\",\n  \"该域名发生了跳转\": \"это доменное имя перенаправляется\",\n  \"该域名可能不满足所有要求\": \"данный домен может не соответствовать всем требованиям\",\n  \"是否仍要设置此域名\": \"нужно ли все еще настраивать это доменное имя\",\n  \"域名\": \"доменное имя\",\n  \"满足所有要求\": \"удовлетворить все требования\",\n  \"域名的\": \"домена\",\n  \"默认为\": \"по умолчанию\",\n  \"域名本身\": \"само доменное имя\",\n  \"如不清楚具体用途, 请勿继续\": \"если неясно конкретное назначение, не продолжайте\",\n  \"是否变更\": \"изменить ли\",\n  \"负载均衡\": \"балансировка нагрузки\",\n  \"请选择协议为 ws 或 gRPC\": \"выберите протокол ws или grpc\",\n  \"返回\": \"вернуться\",\n  \"本地文件 file_manager.sh 不存在, 正在下载\": \"локальный файл file_manager.sh не существует, идёт загрузка\",\n  \"下载失败, 请手动下载并安装新版本\": \"скачивание не удалось, пожалуйста, скачайте и установите новую версию вручную\",\n  \"当前模式不支持此操作\": \"текущий режим не поддерживает эту операцию\",\n  \"配置用途可以参考文章\": \"конфигурацию использования можно найти в статье\",\n  \"修改\": \"изменить\",\n  \"端口\": \"порт\",\n  \"不支持\": \"не поддерживается\",\n  \"用户名修改\": \"изменение имени пользователя\",\n  \"请先删除多余的用户\": \"пожалуйста, сначала удалите лишних пользователей\",\n  \"配置修改\": \"изменение конфигурации\",\n  \"检测到 Xray 的权限控制, 启动修改程序\": \"обнаружено управление доступом xray, запуск программы модификации\",\n  \"修改完成\": \"изменение завершено\",\n  \"若更新无效, 建议直接卸载再安装\": \"если обновление неэффективно, рекомендуется полностью удалить приложение, а затем установить заново\",\n  \"部分新功能需要重新安装才可生效\": \"некоторые новые функции вступают в силу только после повторной установки\",\n  \"检测到存在最新版\": \"обнаружена новейшая версия\",\n  \"脚本可能未兼容此版本\": \"скрипт может быть несовместим с этой версией\",\n  \"是否更新\": \"обновить ли\",\n  \"启动失败\": \"запуск не удался\",\n  \"是否回滚到之前的版本\": \"вернуться ли к предыдущей версии\",\n  \"未执行回滚操作\": \"операция отката не выполнена\",\n  \"正在回滚\": \"возвращается к исходному состоянию\",\n  \"已成功回滚到之前的\": \"успешно отменено до предыдущего\",\n  \"版本\": \"версия\",\n  \"回滚失败\": \"откат не удался\",\n  \"重装\": \"переустановить\",\n  \"Reality 协议有流量偷跑的风险\": \"протокол reality имеет риск утечки трафика\",\n  \"已跳过安装\": \"установка пропущена\",\n  \"已存在, 跳过编译安装过程\": \"существует, пропустить процесс компиляции и установки\",\n  \"检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装\": \"обнаружен nginx, установленный другим пакетом. продолжение установки приведёт к конфликту. пожалуйста, устраните проблему перед установкой\",\n  \"即将下载已编译的\": \"готовится к загрузке скомпилированный\",\n  \"不支持的系统架构\": \"неподдерживаемая архитектура системы\",\n  \"当前安装模式不需要\": \"текущий режим установки не требуется\",\n  \"备份旧版\": \"резервная копия старой версии\",\n  \"删除旧版\": \"удалить старую версию\",\n  \"是否保留原 Nginx 配置文件\": \"сохранить ли исходный файл конфигурации nginx\",\n  \"原配置文件已删除\": \"исходный файл конфигурации удален\",\n  \"原配置文件已保留\": \"исходный конфигурационный файл сохранен\",\n  \"删除\": \"удалить\",\n  \"备份\": \"резервная копия\",\n  \"已为最新版\": \"уже для последней версии\",\n  \"设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)\": \"настройка фоновой автоматической программы обновления (включая: скрипт/xray/nginx)\",\n  \"设置自动更新\": \"настроить автоматическое обновление\",\n  \"已设置自动更新\": \"автоматическое обновление установлено\",\n  \"是否关闭\": \"закрыть ли\",\n  \"删除自动更新\": \"удалить автоматическое обновление\",\n  \"安装 SSL 证书生成脚本依赖\": \"установить зависимости для скрипта генерации ssl-сертификата\",\n  \"安装 SSL 证书生成脚本\": \"установить скрипт для создания ssl-сертификата\",\n  \"检测到原域名配置存在, 是否跳过域名设置\": \"обнаружено существующее конфигурирование исходного домена, пропустить ли настройку домена\",\n  \"无法获取公网IP地址\": \"невозможно получить публичный ip-адрес\",\n  \"安装终止\": \"установка завершена\",\n  \"已跳过域名设置\": \"настройка домена пропущена\",\n  \"确定域名信息\": \"подтвердить информацию о домене\",\n  \"请输入你的域名信息\": \"пожалуйста, введите информацию о вашем домене\",\n  \"请选择公网IP(IPv4/IPv6)或手动输入域名\": \"выберите ip-адрес (ipv4/ipv6) или вручную введите доменное имя\",\n  \"正在获取公网IP信息, 请耐心等待\": \"получение информации о публичном ip-адресе, пожалуйста, подождите\",\n  \"此选项用于服务器商仅提供域名访问服务器\": \"этот вариант используется, когда серверный провайдер предоставляет доступ к серверу только по доменному имени\",\n  \"注意服务器商域名添加 CNAME 记录\": \"обратите внимание, что хостинг-провайдеру необходимо добавить запись cname для домена\",\n  \"域名DNS解析IP\": \"dns-разрешение доменного имени в ip\",\n  \"公网IP/域名\": \"общедоступный ip/доменное имя\",\n  \"域名DNS解析IP与公网IP匹配\": \"dns-разрешение доменного имени на ip-адрес совпадает с публичным ip-адресом\",\n  \"请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray\": \"пожалуйста, убедитесь, что доменное имя имеет правильные записи a/aaaa, иначе xray не будет работать корректно\",\n  \"域名DNS解析IP与公网IP不匹配, 请选择\": \"dns-разрешение доменного имени на ip-адрес не совпадает с публичным ip-адресом, выберите\",\n  \"继续安装\": \"продолжить установку\",\n  \"重新输入\": \"повторно ввести\",\n  \"终止安装\": \"прервать установку\",\n  \"检测到原IP配置存在, 是否跳过IP设置\": \"обнаружено существующее исходное ip-конфигурация, пропустить настройку ip\",\n  \"已跳过IP设置\": \"настройка ip пропущена\",\n  \"确定公网IP信息\": \"определить информацию о публичном ip-адресе\",\n  \"请选择公网IP为IPv4或IPv6\": \"выберите публичный ip-адрес в формате ipv4 или ipv6\",\n  \"手动输入\": \"ручной ввод\",\n  \"端口未被占用\": \"порт не занят\",\n  \"检测到\": \"обнаружено\",\n  \"端口被占用\": \"порт занят\",\n  \"以下为\": \"ниже представлено\",\n  \"端口占用信息\": \"информация об занятости портов\",\n  \"尝试终止占用的进程\": \"попытаться завершить занятый процесс\",\n  \"证书测试签发成功, 开始正式签发\": \"сертификат успешно протестирован, начинается официальная выдача\",\n  \"证书测试签发失败\": \"сертификат не удалось выпустить для тестирования\",\n  \"证书生成成功\": \"сертификат успешно создан\",\n  \"证书配置成功\": \"конфигурация сертификата выполнена успешно\",\n  \"证书生成失败\": \"сертификат не удалось сгенерировать\",\n  \"检测到 Xray 配置过多用户\": \"обнаружено, что в конфигурации xray слишком много пользователей\",\n  \"是否保留原 Xray 配置文件\": \"сохранить ли исходный файл конфигурации xray\",\n  \"添加简单 ws/gRPC 协议\": \"добавить простой протокол ws/grpc\",\n  \"检测到配置文件, 是否读取配置文件\": \"обнаружен файл конфигурации, считать ли файл конфигурации\",\n  \"已删除配置文件\": \"файл конфигурации удален\",\n  \"已保留配置文件\": \"конфигурационный файл сохранен\",\n  \"检测到当前安装模式与配置文件的安装模式不一致\": \"обнаружено несоответствие текущего режима установки с режимом установки в конфигурационном файле\",\n  \"是否保留配置文件 (强烈不建议)\": \"сохранить файл конфигурации (сильно не рекомендуется)\",\n  \"请务必确保配置文件正确\": \"пожалуйста, обязательно убедитесь, что конфигурационный файл правильный\",\n  \"检测到配置文件不完整, 是否保留配置文件\": \"обнаружено, что файл конфигурации неполный. сохранить файл конфигурации\",\n  \"配置删除\": \"удаление конфигурации\",\n  \"设置 Nginx 开机自启\": \"настройка автозапуска nginx при включении компьютера\",\n  \"设置\": \"настройка\",\n  \"开机自启\": \"автозапуск при включении\",\n  \"关闭 Nginx 开机自启\": \"отключить автозапуск nginx при включении\",\n  \"关闭\": \"закрыть\",\n  \"重启\": \"перезапуск\",\n  \"启动\": \"запуск\",\n  \"停止\": \"остановить\",\n  \"新版本已自动设置证书自动更新\": \"новая версия автоматически настроена для автоматического обновления сертификатов\",\n  \"老版本请及时删除 废弃的 改版证书自动更新\": \"старые версии следует своевременно удалить. устаревшие сертификаты автоматически обновляются при изменении версии\",\n  \"已设置改版证书自动更新\": \"автоматическое обновление сертификата изменений уже настроено\",\n  \"是否需要删除改版证书自动更新 (请删除)\": \"нужно ли удалить автоматическое обновление сертификата измененной версии (пожалуйста, удалите)\",\n  \"删除改版证书自动更新\": \"удалить обновление сертификата автоматически\",\n  \"已过期\": \"истекло\",\n  \"证书生成日期\": \"дата создания сертификата\",\n  \"证书生成天数\": \"количество дней для генерации сертификата\",\n  \"证书剩余天数\": \"оставшиеся дни сертификата\",\n  \"是否立即更新证书\": \"обновить сертификат немедленно\",\n  \"证书签发工具不存在, 请确认是否证书为脚本签发\": \"инструмент для выдачи сертификатов не существует, пожалуйста, убедитесь, был ли сертификат выдан с помощью скрипта\",\n  \"证书更新\": \"обновление сертификата\",\n  \"本地文件 fail2ban_manager.sh 不存在, 正在下载\": \"файл fail2ban_manager.sh отсутствует, загрузка\",\n  \"检测到日志文件大小如下:\": \"обнаружено, что размер файла журнала следующий\",\n  \"即将清除\": \"скоро очистить\",\n  \"日志清理\": \"очистка журнала\",\n  \"保留现有自动清理日志任务\": \"сохранить существующую задачу автоматической очистки журнала\",\n  \"是否需要设置自动清理日志\": \"нужно ли настроить автоматическую очистку журнала\",\n  \"清空屏幕\": \"очистить экран\",\n  \"将在 每周三 04:00 自动清空日志\": \"журнал будет автоматически очищаться каждую среду в 04:00\",\n  \"已设置自动清理日志任务\": \"автоматическая задача очистки журнала уже настроена\",\n  \"是否需要删除现有自动清理日志任务\": \"нужно ли удалить существующую задачу автоматической очистки журнала\",\n  \"删除自动清理日志任务\": \"удалить задачу автоматической очистки журнала\",\n  \"设置自动清理日志\": \"настроить автоматическую очистку журнала\",\n  \"配置分享\": \"настройка и обмен\",\n  \"分享链接\": \"поделиться ссылкой\",\n  \"二维码\": \"qr-код\",\n  \"生成分享链接\": \"создать ссылку для обмена\",\n  \"安装成功\": \"установка выполнена успешно\",\n  \"目前分享链接规范为实验阶段, 请自行判断是否适用\": \"в настоящее время формат ссылки для совместного использования находится на экспериментальной стадии, пожалуйста, самостоятельно определите, применим ли он\",\n  \"配置信息\": \"информация о настройках\",\n  \"主机\": \"хост\",\n  \"用户id\": \"идентификатор пользователя\",\n  \"加密\": \"шифрование\",\n  \"传输协议\": \"протокол передачи\",\n  \"底层传输安全\": \"безопасность нижнего уровня передачи\",\n  \"路径\": \"путь\",\n  \"不要落下\": \"не отставать\",\n  \"不需要加\": \"не нужно добавлять\",\n  \"流控\": \"контроль потока\",\n  \"即将申请证书, 支持使用自定义证书\": \"планируется подача заявки на сертификат, поддерживается использование пользовательского сертификата\",\n  \"如需使用自定义证书, 请按如下步骤:\": \"если требуется использовать пользовательский сертификат, выполните следующие шаги\",\n  \"1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)\": \"1. переименуйте файлы сертификатов: приватный ключ (xray.key), сертификат (xray.crt)\",\n  \"2. 将重命名后的证书文件放入\": \"2. разместите переименованный файл сертификата в\",\n  \"目录后再运行脚本\": \"запустить скрипт после каталога\",\n  \"3. 重新运行脚本\": \"3. запустить скрипт заново\",\n  \"是否继续\": \"продолжить ли\",\n  \"所有证书文件均已存在, 是否保留\": \"все файлы сертификатов уже существуют, сохранить\",\n  \"已删除\": \"удалено\",\n  \"证书应用\": \"применение сертификата\",\n  \"证书文件已存在, 是否保留\": \"файл сертификата уже существует, сохранить\",\n  \"证书签发残留文件已存在, 是否保留\": \"оставшиеся файлы выдачи сертификата уже существуют, сохранить\",\n  \"添加\": \"добавить\",\n  \"请选择支持的 TLS 版本\": \"выберите поддерживаемую версию tls\",\n  \"兼容模式\": \"режим совместимости\",\n  \"安全模式\": \"безопасный режим\",\n  \"已切换至\": \"уже переключено на\",\n  \"请先安装\": \"пожалуйста, сначала установите\",\n  \"此模式不支持修改\": \"этот режим не поддерживает изменение\",\n  \"即将显示用户, 一次仅能显示一个\": \"пользователь будет показан в ближайшее время, одновременно может быть показан только один пользователь\",\n  \"请选择显示用户使用的协议\": \"выберите протокол, используемый пользователем для отображения\",\n  \"请选择要显示的用户编号\": \"выберите номер пользователя, который хотите отобразить\",\n  \"选择错误\": \"выбор неверный\",\n  \"请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户\": \"пожалуйста, выберите напрямую в главном меню [просмотр информации о конфигурации xray], чтобы отобразить основного пользователя\",\n  \"请先检测 Xray 是否正确安装\": \"пожалуйста, сначала проверьте, правильно ли установлен xray\",\n  \"是否继续显示用户\": \"продолжать ли показывать пользователя\",\n  \"此模式不支持删除用户\": \"этот режим не поддерживает удаление пользователей\",\n  \"即将添加用户, 一次仅能添加一个\": \"пользователь будет добавлен в ближайшее время, можно добавить только одного за раз\",\n  \"请选择添加用户使用的协议\": \"выберите протокол, используемый для добавления пользователя\",\n  \"添加用户\": \"добавить пользователя\",\n  \"是否继续添加用户\": \"продолжить добавление пользователя\",\n  \"此模式不支持添加用户\": \"этот режим не поддерживает добавление пользователей\",\n  \"即将删除用户, 一次仅能删除一个\": \"пользователь будет удален, можно удалить только одного за раз\",\n  \"请选择删除用户使用的协议\": \"пожалуйста, выберите протокол, используемый для удаления пользователя\",\n  \"请选择要删除的用户编号\": \"выберите номер пользователя, которого хотите удалить\",\n  \"主用户无法删除\": \"основной пользователь не может быть удален\",\n  \"删除用户\": \"удалить пользователя\",\n  \"是否继续删除用户\": \"продолжить удаление пользователя\",\n  \"文件不存在\": \"файл не существует\",\n  \"已配置 Xray 流量统计\": \"статистика трафика xray уже настроена\",\n  \"是否需要关闭此功能\": \"нужно ли отключить эту функцию\",\n  \"关闭 Xray 流量统计\": \"закрыть статистику трафика xray\",\n  \"流量统计需要使用\": \"для статистики трафика необходимо использовать\",\n  \"可能会影响 Xray 性能\": \"может повлиять на производительность рентгеновского аппарата\",\n  \"设置 Xray 流量统计\": \"настройка статистики трафика xray\",\n  \"已卸载\": \"удалено\",\n  \"是否卸载\": \"удалить ли\",\n  \"是否删除所有脚本文件\": \"удалить все файлы скриптов\",\n  \"已删除所有文件\": \"все файлы удалены\",\n  \"ヾ(￣▽￣) 拜拜~\": \"(￣▽￣) привет\",\n  \"已保留脚本文件 (包含 SSL 证书等)\": \"скрипт-файл сохранён (включая ssl-сертификат и т.д.)\",\n  \"是否保留配置文件\": \"сохранить файл конфигурации\",\n  \"已清空证书遗留文件\": \"файлы, оставшиеся от сертификата, уже удалены\",\n  \"秒后\": \"секунду спустя\",\n  \"检测最新版本失败\": \"не удалось проверить последнюю версию\",\n  \"新版本\": \"новая версия\",\n  \"更新内容\": \"содержание обновления\",\n  \"存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新\": \"доступна новая версия, но изменения в ней значительные, возможны несовместимости. обновить\",\n  \"存在新版本, 是否更新\": \"доступна новая версия, обновить\",\n  \"检测 脚本 最新版本失败\": \"не удалось проверить последнюю версию скрипта\",\n  \"脚本 版本差别过大, 跳过更新\": \"версии скрипта слишком сильно различаются, пропускаем обновление\",\n  \"更新完成\": \"обновление завершено\",\n  \"脚本版本变化较大, 若服务无法正常运行请卸载后重装\": \"версия скрипта сильно изменилась, если служба не работает нормально, пожалуйста, удалите её и установите заново\",\n  \"当前版本为最新版本\": \"текущая версия является последней\",\n  \"下载最新脚本\": \"скачать последний скрипт\",\n  \"该选项暂时无法使用\": \"этот вариант временно недоступен\",\n  \"此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装\": \"этот режим рекомендуется для балансировки нагрузки, обычно не рекомендуется к использованию, установить\",\n  \"变更\": \"изменение\",\n  \"负载均衡配置\": \"конфигурация балансировки нагрузки\",\n  \"清除日志文件\": \"очистить файлы журнала\",\n  \"查看证书状态\": \"просмотреть статус сертификата\",\n  \"更新证书有效期\": \"обновить срок действия сертификата\",\n  \"设置证书自动更新\": \"настроить автоматическое обновление сертификата\",\n  \"设置 Fail2ban 防暴力破解\": \"настройка fail2ban для защиты от brute-force атак\",\n  \"显示帮助\": \"показать справку\",\n  \"更新\": \"обновление\",\n  \"脚本卸载\": \"удаление скрипта\",\n  \"显示安装信息\": \"отобразить информацию об установке\",\n  \"加速\": \"ускорение\",\n  \"显示\": \"показать\",\n  \"访问信息\": \"информация о посещении\",\n  \"错误信息\": \"сообщение об ошибке\",\n  \"脚本版本变化较大, 可能存在不兼容情况, 是否继续使用\": \"версия скрипта сильно изменилась, возможно, существуют несовместимости. продолжить использование\",\n  \"检测失败\": \"ошибка проверки\",\n  \"有新版\": \"есть новая версия\",\n  \"最新版\": \"последняя версия\",\n  \"版本未知\": \"версия неизвестна\",\n  \"运行中\": \"в процессе выполнения\",\n  \"无需测试\": \"не требуется тестирование\",\n  \"未运行\": \"не запущено\",\n  \"无法连通\": \"невозможно подключиться\",\n  \"本地正常\": \"локально нормально\",\n  \"脚本维护中.. 请稍后再试\": \"скрипт находится на обслуживании. пожалуйста, попробуйте позже\",\n  \"无法检测所需依赖的在线版本, 请稍后再试\": \"невозможно обнаружить онлайн-версию необходимой зависимости, попробуйте позже\",\n  \"请输入数字\": \"пожалуйста, введите цифры\",\n  \"请输入 1 到 6 之间的有效数字\": \"пожалуйста, введите действительное число от 1 до 6\",\n  \"无效的选择\": \"недопустимый выбор\",\n  \"请输入备份名称\": \"введите имя резервной копии\",\n  \"不需要后缀\": \"не требуется суффикс\",\n  \"报错信息\": \"сообщение об ошибке\",\n  \"备份完整性可能受到影响, 请检查上述错误信息\": \"целостность резервной копии может быть нарушена, пожалуйста, проверьте приведённые выше сообщения об ошибках\",\n  \"备份失败\": \"сбой резервного копирования\",\n  \"备份成功\": \"резервное копирование успешно выполнено\",\n  \"请确保备份文件在目录\": \"пожалуйста, убедитесь, что файлы резервных копий находятся в каталоге\",\n  \"没有找到备份文件\": \"резервная файл не найдена\",\n  \"发现多个备份文件\": \"обнаружено несколько файлов резервных копий\",\n  \"将使用最新的文件进行恢复\": \"будет использован последний файл для восстановления\",\n  \"找到最新备份文件\": \"найти последний файл резервной копии\",\n  \"恢复备份\": \"восстановить резервную копию\",\n  \"恢复成功\": \"восстановление успешно\",\n  \"记得安装\": \"помните установить\",\n  \"恢复失败\": \"восстановление не удалось\",\n  \"安装管理脚本\": \"установить скрипт управления\",\n  \"作者\": \"автор\",\n  \"当前模式\": \"текущий режим\",\n  \"当前语言\": \"текущий язык\",\n  \"可以使用\": \"можно использовать\",\n  \"命令管理脚本\": \"скрипт управления командами\",\n  \"版本检测\": \"проверка версии\",\n  \"脚本\": \"сценарий\",\n  \"运行状态\": \"рабочее состояние\",\n  \"连通性\": \"связность\",\n  \"安装向导\": \"мастер установки\",\n  \"配置变更\": \"изменение конфигурации\",\n  \"用户管理\": \"управление пользователями\",\n  \"查看\": \"просмотреть\",\n  \"用户\": \"пользователь\",\n  \"查看信息\": \"просмотр информации\",\n  \"实时访问日志\": \"журнал доступа в реальном времени\",\n  \"实时错误日志\": \"журнал ошибок в реальном времени\",\n  \"服务相关\": \"сервисный связанный\",\n  \"所有服务\": \"все услуги\",\n  \"证书相关\": \"сертификаты, связанные\",\n  \"证书状态\": \"статус сертификата\",\n  \"证书有效期\": \"срок действия сертификата\",\n  \"证书自动更新\": \"автоматическое обновление сертификата\",\n  \"其他选项\": \"другие варианты\",\n  \"自动更新\": \"автоматическое обновление\",\n  \"防暴力破解\": \"антивизионное растрескивание\",\n  \"流量统计\": \"статистика трафика\",\n  \"清除\": \"очистить\",\n  \"日志文件\": \"журнал файлов\",\n  \"测试\": \"тест\",\n  \"服务器网速\": \"скорость интернета на сервере\",\n  \"备份恢复\": \"резервное восстановление\",\n  \"全部文件\": \"все файлы\",\n  \"恢复\": \"восстановление\",\n  \"卸载向导\": \"мастер удаления\",\n  \"卸载\": \"удалить\",\n  \"清空\": \"очистить\",\n  \"证书文件\": \"файл сертификата\",\n  \"退出\": \"выйти\",\n  \"请输入选项\": \"пожалуйста, введите вариант\",\n  \"不建议\": \"не рекомендуется\",\n  \"回到菜单\": \"вернуться к меню\",\n  \"用于防止暴力破解\": \"для предотвращения атак методом перебора\",\n  \"主菜单\": \"главное меню\",\n  \"管理\": \"управление\",\n  \"状态\": \"состояние\",\n  \"请选择一个选项\": \"выберите один из вариантов\",\n  \"已经安装, 跳过安装步骤\": \"уже установлено, пропустить шаг установки\",\n  \"未安装, 请先安装\": \"не установлено, сначала установите\",\n  \"规则\": \"правило\",\n  \"跳过启用\": \"пропустить включение\",\n  \"已启用\": \"уже включено\",\n  \"请选择\": \"пожалуйста, выберите\",\n  \"操作\": \"операция\",\n  \"添加自定义规则\": \"добавить пользовательское правило\",\n  \"请输入新的\": \"пожалуйста, введите новое\",\n  \"名称\": \"название\",\n  \"请输入日志路径\": \"пожалуйста, введите путь к журналу\",\n  \"请输入最大重试次数\": \"пожалуйста, введите максимальное количество попыток\",\n  \"最大重试次数必须在 1 到 99 之间\": \"максимальное количество попыток должно быть в диапазоне от 1 до 99\",\n  \"请输入封禁时间\": \"пожалуйста, введите время блокировки\",\n  \"秒\": \"секунда\",\n  \"封禁时间必须在 1 到 8640000 秒之间\": \"время блокировки должно быть от 1 до 8640000 секунд\",\n  \"自定义规则添加成功\": \"правило успешно добавлено\",\n  \"重启以应用新规则\": \"перезагрузите для применения новых правил\",\n  \"停止成功\": \"остановка успешно выполнена\",\n  \"总体状态\": \"общее состояние\",\n  \"默认启用的 Jail 状态\": \"статус тюрьмы включено по умолчанию\",\n  \"封锁情况\": \"ситуация с блокировкой\",\n  \"新版本可用\": \"доступна новая версия\",\n  \"当前版本\": \"текущая версия\",\n  \"请访问\": \"пожалуйста, посетите\",\n  \"查看更新说明\": \"просмотреть описание обновлений\",\n  \"正在下载新版本\": \"загружается новая версия\",\n  \"下载完成, 请重新运行脚本\": \"загрузка завершена, пожалуйста, запустите скрипт заново\",\n  \"跳过更新\": \"пропустить обновление\",\n  \"当前已经是最新版本\": \"в настоящее время уже установлена последняя версия\",\n  \"用法\": \"применение\",\n  \"文件扩展名\": \"расширение файла\",\n  \"目录路径\": \"путь к каталогу\",\n  \"目录\": \"оглавление\",\n  \"不存在, 请检查路径\": \"не существует, проверьте путь\",\n  \"列出所有\": \"перечислить все\",\n  \"文件\": \"файл\",\n  \"文件名\": \"имя файла\",\n  \"序号\": \"порядковый номер\",\n  \"请输入网址 (例如 hey.run)\": \"пожалуйста, введите адрес сайта (например, hey.run)\",\n  \"不要包含 http:// 或 https:// 开头\": \"не включать строки, начинающиеся с http:// или https://\",\n  \"已创建\": \"создано\",\n  \"请输入主机\": \"пожалуйста, введите хост\",\n  \"请输入权重\": \"пожалуйста, введите вес\",\n  \"追加完成\": \"дополнительное завершение\",\n  \"请输入要编辑的文件编号\": \"введите номер файла, который хотите отредактировать\",\n  \"未安装, 正在尝试安装\": \"не установлено, пытается установить\",\n  \"已编辑\": \"изменено\",\n  \"请输入要删除的文件编号\": \"введите номер файла, который хотите удалить\",\n  \"不支持的文件扩展名\": \"неподдерживаемое расширение файла\",\n  \"创建一个新的\": \"создать новое\",\n  \"编辑一个已存在的\": \"редактировать существующий\",\n  \"删除一个已存在的\": \"удалить существующий\",\n  \"无效选项, 请重试\": \"недопустимый вариант, повторите попытку\",\n  \"重启成功\": \"перезапуск успешен\",\n  \"重启失败\": \"перезапуск не удался\",\n  \"请检查配置文件是否有误\": \"пожалуйста, проверьте, нет ли ошибок в конфигурационном файле\",\n  \"未启用或配置异常\": \"не активировано или возникла ошибка конфигурации\",\n  \"是否添加 Reality 负载均衡\": \"добавить ли балансировку нагрузки reality\",\n  \"使用此功能前，建议先阅读作者教程\": \"перед использованием этой функции рекомендуется сначала ознакомиться с учебным материалом автора\",\n  \"已跳过\": \"пропущено\",\n  \"如用作 Reality 负载均衡二级服务器则无需安装\": \"если используется в качестве вторичного сервера балансировки нагрузки reality, то установка не требуется\",\n  \"是否额外安装 nginx 前置保护\": \"устанавливать ли дополнительный защитный прокси nginx\",\n  \"推荐\": \"рекомендовать\",\n  \"检测到已开启 Reality 负载均衡\": \"обнаружено, что включен балансировщик нагрузки reality\",\n  \"如用作 Reality 负载均衡主服务器必须安装\": \"если используется в качестве основного сервера балансировки нагрузки reality, необходимо установить\",\n  \"检测到已安装\": \"обнаружено установленное\",\n  \"已取消卸载\": \"установка отменена\",\n  \"下载失败\": \"скачивание не удалось\",\n  \"下载成功\": \"загрузка завершена успешно\",\n  \"解压失败\": \"распаковка не удалась\",\n  \"链接分享\": \"поделиться ссылкой\",\n  \"修改语言\": \"изменить язык\",\n  \"此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装\": \"этот режим предназначен только для переадресации трафика; не рекомендуется использовать его в других случаях. установить\",\n  \"信息\": \"информация\",\n  \"配置不完整, 退出更新\": \"конфигурация неполная, выйти из обновления\",\n  \"配置不存在, 退出更新\": \"конфигурация не существует, выходим из обновления\",\n  \"无效的选择, 请重试\": \"недопустимый выбор, попробуйте еще раз\",\n  \"systemd 无法读取 SSH 日志\": \"systemd не может прочитать ssh-журналы\",\n  \"网址不能包含 http:// 或 https:// 前缀\": \"url не может содержать префиксы http:// или https://\",\n  \"日志文件清空失败\": \"не удалось очистить файл журнала\",\n  \"当前用户是 root 用户, 开始安装\": \"текущий пользователь — root, начать установку\",\n  \"当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本\": \"текущий пользователь не является пользователем root. переключитесь на пользователя root и запустите скрипт снова\",\n  \"已跳过设置自动清理日志\": \"настройка автоматической очистки журналов пропущена\",\n  \"脚本更新失败\": \"ошибка обновления скрипта\",\n  \"更新失败\": \"ошибка обновления\",\n  \"更新脚本\": \"обновить скрипт\",\n  \"更新向导\": \"мастер обновления\",\n  \"频繁更新 Nginx, 请确认 Nginx 有更新的必要\": \"часто обновляйте nginx; убедитесь, что обновление nginx действительно необходимо\",\n  \"开始更新\": \"начать обновление\",\n  \"建议选择 TLSv1.3 only (安全模式)\": \"рекомендуется выбрать только tlsv1.3 (безопасный режим)\",\n  \"由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)\": \"поскольку h3 поддерживает только tlsv1.3, поддерживается только tlsv1.3 (безопасный режим)\",\n  \"请选择 TLS 版本\": \"выберите версию tls\",\n  \"建议选择 TLSv1.3 (安全模式)\": \"рекомендуется выбрать tlsv1.3 (безопасный режим)\",\n  \"当前模式不支持\": \"текущий режим не поддерживается\",\n  \"Nginx配置文件不存在 或 当前模式不支持\": \"файл конфигурации nginx отсутствует или текущий режим не поддерживается\",\n  \"已禁用\": \"отключено\",\n  \"管理模块\": \"модуль управления\",\n  \"服务管理\": \"управление услугами\",\n  \"管理 Fail2ban 模块\": \"управление модулем fail2ban\",\n  \"未找到任何模块化配置文件\": \"не найден ни один модульный конфигурационный файл\",\n  \"模块名称\": \"название модуля\",\n  \"请选择要管理的模块\": \"пожалуйста, выберите модуль для управления\",\n  \"启用\": \"включить\",\n  \"禁用\": \"отключить\",\n  \"模块\": \"модуль\",\n  \"操作已取消\": \"операция отменена\",\n  \"可能自动更新后有兼容问题, 谨慎启用\": \"после автоматического обновления могут возникнуть проблемы с совместимостью, поэтому включайте с осторожностью\",\n  \"是否启用\": \"включить или нет\",\n  \"是否\": \"является ли\",\n  \"是否下载并安装新版本\": \"скачать и установить новую версию\",\n  \"无法获取网卡, 将监控所有网卡\": \"не удалось получить сетевую карту, будет вестись мониторинг всех сетевых карт\",\n  \"监控网卡\": \"мониторинг сетевой карты\",\n  \"监控端口\": \"мониторинговый порт\",\n  \"按 q 键退出 iftop\": \"нажмите клавишу q, чтобы выйти из iftop\",\n  \"实时流量\": \"поток в реальном времени\"\n}"
  },
  {
    "path": "po/en.po",
    "content": "# English translations for xray_install package.\n# Copyright (C) 2026 yunshu\n# This file is distributed under the same license as the xray_install package.\n# Automatically generated, 2026.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: xray_install 1.0\\n\"\n\"Report-Msgid-Bugs-To: https://github.com/hello-yunshu/Xray_bash_onekey/\"\n\"issues\\n\"\n\"POT-Creation-Date: 2026-04-24 09:47+0000\\n\"\n\"PO-Revision-Date: 2026-04-24 09:47+0000\\n\"\n\"Last-Translator: Automatically generated\\n\"\n\"Language-Team: none\\n\"\n\"Language: en\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\n\n#: install.sh:32\nmsgid \"信息\"\nmsgstr \"information\"\n\n#: install.sh:34\nmsgid \"错误\"\nmsgstr \"error\"\n\n#: install.sh:35\nmsgid \"警告\"\nmsgstr \"warning\"\n\n#: install.sh:38 install.sh:1540 install.sh:3960 install.sh:3977\n#: install.sh:3980 install.sh:3981 install.sh:4019\nmsgid \"未安装\"\nmsgstr \"not installed\"\n\n#: install.sh:99\nmsgid \"日志文件归档失败\"\nmsgstr \"log file archiving failed\"\n\n#: install.sh:104\nmsgid \"日志文件清空失败\"\nmsgstr \"failed to clear the log file\"\n\n#: install.sh:108\nmsgid \"日志文件已轮转并归档为\"\nmsgstr \"the log file has been rotated and archived as\"\n\n#: install.sh:134 install.sh:138 install.sh:142 install.sh:152\nmsgid \"当前系统为\"\nmsgstr \"current system is\"\n\n#: install.sh:152\nmsgid \"不在支持的系统列表内, 安装中断\"\nmsgstr \"not in the list of supported systems, installation interrupted\"\n\n#: install.sh:159\nmsgid \"当前用户是 root 用户, 开始安装\"\nmsgstr \"the current user is the root user. starting installation\"\n\n#: install.sh:161\nmsgid \"当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本\"\nmsgstr \"the current user is not the root user. please switch to the root user and then run the script again\"\n\n#: install.sh:187\nmsgid \"无法获取远程语言文件信息\"\nmsgstr \"unable to retrieve remote language file information\"\n\n#: install.sh:205\nmsgid \"正在更新语言文件\"\nmsgstr \"updating language files\"\n\n#: install.sh:208 install.sh:291\nmsgid \"语言文件更新失败\"\nmsgstr \"language file update failed\"\n\n#: install.sh:213\nmsgid \"语言文件无效\"\nmsgstr \"invalid language file\"\n\n#: install.sh:219\nmsgid \"版本文件更新失败\"\nmsgstr \"failed to update the version file\"\n\n#: install.sh:226\nmsgid \"语言文件更新完成\"\nmsgstr \"language file update completed\"\n\n#: install.sh:231 install.sh:2725\nmsgid \"正在安装\"\nmsgstr \"installing\"\n\n#: install.sh:234\nmsgid \"安装失败\"\nmsgstr \"installation failed\"\n\n#: install.sh:234 install.sh:258 install.sh:281 install.sh:291\nmsgid \"将使用默认语言\"\nmsgstr \"will use the default language\"\n\n#: install.sh:258 file_manager.sh:35\nmsgid \"未找到\"\nmsgstr \"not found\"\n\n#: install.sh:281\nmsgid \"不支持的语言\"\nmsgstr \"unsupported language\"\n\n#: install.sh:297\nmsgid \"发现语言文件更新\"\nmsgstr \"language file update detected\"\n\n#: install.sh:312 install.sh:1740\nmsgid \"完成\"\nmsgstr \"complete\"\n\n#: install.sh:315\nmsgid \"失败\"\nmsgstr \"failure\"\n\n#: install.sh:322\nmsgid \"在线版本检测失败, 请稍后再试\"\nmsgstr \"online version check failed, please try again later\"\n\n#: install.sh:344 install.sh:352 install.sh:1162 install.sh:3872\n#: install.sh:3873 install.sh:3874 install.sh:3875 install.sh:4206\n#: install.sh:4207 install.sh:4208 install.sh:4209 fail2ban_manager.sh:12\n#: fail2ban_manager.sh:39\nmsgid \"安装\"\nmsgstr \"installation\"\n\n#: install.sh:346 install.sh:354 install.sh:1169 install.sh:2729\n#: install.sh:3969\nmsgid \"已安装\"\nmsgstr \"installed\"\n\n#: install.sh:371 install.sh:375\nmsgid \"自启动配置\"\nmsgstr \"auto-start configuration\"\n\n#: install.sh:384\nmsgid \"链接库安装\"\nmsgstr \"library installation\"\n\n#: install.sh:389\nmsgid \"值为空或超出范围, 请重新输入\"\nmsgstr \"the value is empty or out of range, please re-enter\"\n\n#: install.sh:398\nmsgid \"值为空, 请重新输入\"\nmsgstr \"the value is empty, please re-enter\"\n\n#: install.sh:440\nmsgid \"确定端口\"\nmsgstr \"confirm port\"\n\n#: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:104\nmsgid \"请输入端口\"\nmsgstr \"please enter the port\"\n\n#: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:107\nmsgid \"默认值\"\nmsgstr \"default value\"\n\n#: install.sh:441 install.sh:444 install.sh:532 install.sh:554 install.sh:3055\n#: install.sh:3060 install.sh:3065 install.sh:3066 install.sh:3081\n#: install.sh:3086 install.sh:3091 install.sh:3092\nmsgid \"请输入 0-65535 之间的值\"\nmsgstr \"please enter a value between 0 and 65535\"\n\n#: install.sh:443\nmsgid \"端口不允许使用, 请重新输入\"\nmsgstr \"the port is not allowed to be used, please re-enter\"\n\n#: install.sh:452\nmsgid \"请选择安装协议\"\nmsgstr \"please select the installation agreement\"\n\n#: install.sh:453 install.sh:1617 install.sh:1654 install.sh:1705\n#: install.sh:2997 install.sh:3142 install.sh:3209 install.sh:3256\n#: fail2ban_manager.sh:274 fail2ban_manager.sh:275\nmsgid \"默认\"\nmsgstr \"default\"\n\n#: install.sh:457 install.sh:532 install.sh:554 install.sh:635 install.sh:668\n#: install.sh:821 install.sh:840 install.sh:881 install.sh:922 install.sh:1621\n#: install.sh:1634 install.sh:1656 install.sh:1709 install.sh:1719\n#: install.sh:2985 install.sh:3000 install.sh:3055 install.sh:3060\n#: install.sh:3065 install.sh:3066 install.sh:3081 install.sh:3086\n#: install.sh:3091 install.sh:3092 install.sh:3145 install.sh:3154\n#: install.sh:3212 install.sh:3259 install.sh:3268 fail2ban_manager.sh:215\n#: fail2ban_manager.sh:234 fail2ban_manager.sh:272 file_manager.sh:81\nmsgid \"请输入\"\nmsgstr \"please enter\"\n\n#: install.sh:457 install.sh:922 install.sh:1621 install.sh:1656\n#: install.sh:1709 install.sh:2985 install.sh:3000 install.sh:3145\n#: install.sh:3212 install.sh:3259 install.sh:4251 install.sh:4489\nmsgid \"请输入有效的数字\"\nmsgstr \"please enter a valid number\"\n\n#: install.sh:478\nmsgid \"是否添加简单 ws/gRPC 协议 用于负载均衡\"\nmsgstr \"whether to add simple ws/grpc protocol for load balancing\"\n\n#: install.sh:479 install.sh:1259\nmsgid \"如不清楚具体用途, 请勿选择\"\nmsgstr \"if the specific purpose is unclear, please do not select\"\n\n#: install.sh:499\nmsgid \"已跳过添加简单 ws/gRPC 协议\"\nmsgstr \"skipping adding simple ws/grpc protocol\"\n\n#: install.sh:528 install.sh:550 install.sh:631 install.sh:648 install.sh:664\n#: install.sh:681 install.sh:696 install.sh:815 install.sh:836 install.sh:877\nmsgid \"是否需要自定义\"\nmsgstr \"whether customization is needed\"\n\n#: install.sh:532 install.sh:554\nmsgid \"请勿与其他端口相同\"\nmsgstr \"please do not use the same port as others\"\n\n#: install.sh:571 file_manager.sh:114\nmsgid \"是否需要设置防火墙\"\nmsgstr \"whether a firewall needs to be set up\"\n\n#: install.sh:611 install.sh:615 file_manager.sh:128 file_manager.sh:132\n#: file_manager.sh:136\nmsgid \"防火墙\"\nmsgstr \"firewall\"\n\n#: install.sh:611 install.sh:615 install.sh:2215 install.sh:2218\n#: install.sh:3012 install.sh:3014 install.sh:4227 fail2ban_manager.sh:231\n#: fail2ban_manager.sh:432\nmsgid \"重启\"\nmsgstr \"restart\"\n\n#: install.sh:617\nmsgid \"开放防火墙相关端口\"\nmsgstr \"open the firewall for related ports\"\n\n#: install.sh:618\nmsgid \"若修改配置, 请注意关闭防火墙相关端口\"\nmsgstr \"if modifying the configuration, please remember to close the firewall-related ports\"\n\n#: install.sh:619 install.sh:3877 install.sh:3892 install.sh:3893\n#: install.sh:4216 install.sh:4236 fail2ban_manager.sh:161\nmsgid \"配置\"\nmsgstr \"configuration\"\n\n#: install.sh:622 file_manager.sh:140\nmsgid \"跳过防火墙设置\"\nmsgstr \"skip firewall settings\"\n\n#: install.sh:631 install.sh:635 install.sh:636 install.sh:640 install.sh:648\n#: install.sh:664 install.sh:668 install.sh:669 install.sh:673 install.sh:681\n#: install.sh:1101\nmsgid \"伪装路径\"\nmsgstr \"camouflage path\"\n\n#: install.sh:635 install.sh:668\nmsgid \"不需要\"\nmsgstr \"not needed\"\n\n#: install.sh:696 install.sh:706 install.sh:3172\nmsgid \"用户名\"\nmsgstr \"username\"\n\n#: install.sh:700\nmsgid \"请输入正确的 email\"\nmsgstr \"please enter the correct email\"\n\n#: install.sh:713\nmsgid \"是否需要自定义字符串映射\"\nmsgstr \"whether custom string mapping is needed\"\n\n#: install.sh:717\nmsgid \"请输入自定义字符串\"\nmsgstr \"please enter a custom string\"\n\n#: install.sh:717\nmsgid \"最多30字符\"\nmsgstr \"up to 30 characters\"\n\n#: install.sh:719\nmsgid \"自定义字符串\"\nmsgstr \"custom string\"\n\n#: install.sh:726 install.sh:2836 install.sh:3895 install.sh:4211\n#: install.sh:4314\nmsgid \"映射字符串\"\nmsgstr \"mapping string\"\n\n#: install.sh:737\nmsgid \"检测到 target 域名已配置, 是否保留\"\nmsgstr \"target domain name has been configured, do you want to keep it\"\n\n#: install.sh:757\nmsgid \"请输入一个域名\"\nmsgstr \"please enter a domain name\"\n\n#: install.sh:758\nmsgid \"域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用\"\nmsgstr \"domain names must support tlsv1.3, x25519, and h2, and should not use redirection\"\n\n#: install.sh:759\nmsgid \"确认域名符合要求后请输入\"\nmsgstr \"after confirming that the domain name meets the requirements, please enter\"\n\n#: install.sh:760\nmsgid \"正在检测域名请等待\"\nmsgstr \"checking domain name, please wait\"\n\n#: install.sh:767 install.sh:772 install.sh:777\nmsgid \"该域名不支持\"\nmsgstr \"this domain name is not supported\"\n\n#: install.sh:782\nmsgid \"该域名发生了跳转\"\nmsgstr \"the domain name has been redirected\"\n\n#: install.sh:789\nmsgid \"该域名可能不满足所有要求\"\nmsgstr \"this domain name may not meet all requirements\"\n\n#: install.sh:790\nmsgid \"是否仍要设置此域名\"\nmsgstr \"do you still want to set this domain name\"\n\n#: install.sh:802 install.sh:807 install.sh:1619\nmsgid \"域名\"\nmsgstr \"domain name\"\n\n#: install.sh:802\nmsgid \"满足所有要求\"\nmsgstr \"meet all requirements\"\n\n#: install.sh:815\nmsgid \"域名的\"\nmsgstr \"of the domain name\"\n\n#: install.sh:816\nmsgid \"默认为\"\nmsgstr \"default is\"\n\n#: install.sh:816\nmsgid \"域名本身\"\nmsgstr \"the domain name itself\"\n\n#: install.sh:817 install.sh:912 install.sh:952\nmsgid \"如不清楚具体用途, 请勿继续\"\nmsgstr \"if you are unsure of the specific purpose, please do not proceed\"\n\n#: install.sh:898\nmsgid \"本地文件 file_manager.sh 不存在, 正在下载\"\nmsgstr \"the local file file_manager.sh does not exist, downloading now\"\n\n#: install.sh:900 install.sh:2330 fail2ban_manager.sh:500 file_manager.sh:248\nmsgid \"下载失败, 请手动下载并安装新版本\"\nmsgstr \"download failed, please manually download and install the new version\"\n\n#: install.sh:911 install.sh:951\nmsgid \"是否变更\"\nmsgstr \"whether to change\"\n\n#: install.sh:911\nmsgid \"负载均衡\"\nmsgstr \"load balancing\"\n\n#: install.sh:917\nmsgid \"请选择协议为 ws 或 gRPC\"\nmsgstr \"please select the protocol as ws or grpc\"\n\n#: install.sh:920 fail2ban_manager.sh:213 fail2ban_manager.sh:232\n#: fail2ban_manager.sh:325 fail2ban_manager.sh:357\nmsgid \"返回\"\nmsgstr \"return\"\n\n#: install.sh:930 file_manager.sh:220\nmsgid \"无效选项, 请重试\"\nmsgstr \"invalid option, please try again\"\n\n#: install.sh:940 install.sh:964 install.sh:2266 install.sh:2304\n#: install.sh:2320\nmsgid \"当前模式不支持此操作\"\nmsgstr \"the current mode does not support this operation\"\n\n#: install.sh:953\nmsgid \"配置用途可以参考文章\"\nmsgstr \"for configuration purposes, please refer to the article\"\n\n#: install.sh:980 install.sh:991 install.sh:995 install.sh:999 install.sh:1011\n#: install.sh:1016 install.sh:1020 install.sh:1025 install.sh:1045\n#: install.sh:1051 install.sh:1101 install.sh:1120 install.sh:3893\n#: install.sh:4177\nmsgid \"修改\"\nmsgstr \"modify\"\n\n#: install.sh:1053 install.sh:2816 install.sh:2818 install.sh:2820\n#: install.sh:2821 install.sh:2824 install.sh:2828 install.sh:2830\n#: install.sh:2832 install.sh:2833 install.sh:2861 install.sh:2864\n#: install.sh:2867 install.sh:2869 install.sh:3049\nmsgid \"端口\"\nmsgstr \"port\"\n\n#: install.sh:1103\nmsgid \"不支持\"\nmsgstr \"not supported\"\n\n#: install.sh:1110\nmsgid \"用户名修改\"\nmsgstr \"username modification\"\n\n#: install.sh:1113 install.sh:1123\nmsgid \"请先删除多余的用户\"\nmsgstr \"please delete the extra users first\"\n\n#: install.sh:1131 install.sh:1139 install.sh:1146 install.sh:1990\n#: install.sh:2061 install.sh:2146 install.sh:2154 install.sh:2163\n#: install.sh:2186\nmsgid \"配置修改\"\nmsgstr \"configuration modification\"\n\n#: install.sh:1151\nmsgid \"检测到 Xray 的权限控制, 启动修改程序\"\nmsgstr \"xray permission control detected, starting modification program\"\n\n#: install.sh:1156\nmsgid \"修改完成\"\nmsgstr \"modification completed\"\n\n#: install.sh:1176\nmsgid \"若更新无效, 建议直接卸载再安装\"\nmsgstr \"if the update is ineffective, it is recommended to uninstall and then reinstall\"\n\n#: install.sh:1177\nmsgid \"部分新功能需要重新安装才可生效\"\nmsgstr \"some new features require reinstallation to take effect\"\n\n#: install.sh:1182\nmsgid \"检测到存在最新版\"\nmsgstr \"a newer version has been detected\"\n\n#: install.sh:1183\nmsgid \"脚本可能未兼容此版本\"\nmsgstr \"the script may not be compatible with this version\"\n\n#: install.sh:1184\nmsgid \"是否更新\"\nmsgstr \"whether to update\"\n\n#: install.sh:1188 install.sh:1213 install.sh:1532 install.sh:3886\n#: install.sh:3898 install.sh:4195 install.sh:4196 install.sh:4197\n#: install.sh:4233\nmsgid \"更新\"\nmsgstr \"update\"\n\n#: install.sh:1192 install.sh:1494\nmsgid \"启动失败\"\nmsgstr \"startup failed\"\n\n#: install.sh:1193 install.sh:1497\nmsgid \"是否回滚到之前的版本\"\nmsgstr \"whether to roll back to the previous version\"\n\n#: install.sh:1197 install.sh:1507\nmsgid \"未执行回滚操作\"\nmsgstr \"rollback operation not executed\"\n\n#: install.sh:1201 install.sh:1511\nmsgid \"正在回滚\"\nmsgstr \"rolling back\"\n\n#: install.sh:1205 install.sh:1518\nmsgid \"已成功回滚到之前的\"\nmsgstr \"successfully rolled back to the previous\"\n\n#: install.sh:1205 install.sh:1518 install.sh:4214 install.sh:4329\nmsgid \"版本\"\nmsgstr \"version\"\n\n#: install.sh:1207 install.sh:1228 install.sh:1524\nmsgid \"回滚失败\"\nmsgstr \"rollback failed\"\n\n#: install.sh:1234 install.sh:1238\nmsgid \"重装\"\nmsgstr \"reinstall\"\n\n#: install.sh:1248 install.sh:1249\nmsgid \"更新失败\"\nmsgstr \"update failed\"\n\n#: install.sh:1257\nmsgid \"是否添加 Reality 负载均衡\"\nmsgstr \"whether to add reality load balancing\"\n\n#: install.sh:1258\nmsgid \"使用此功能前，建议先阅读作者教程\"\nmsgstr \"before using this feature, it is recommended to first read the author's tutorial\"\n\n#: install.sh:1264 fail2ban_manager.sh:93 fail2ban_manager.sh:103\n#: fail2ban_manager.sh:128 fail2ban_manager.sh:154 fail2ban_manager.sh:347\nmsgid \"已启用\"\nmsgstr \"enabled\"\n\n#: install.sh:1268\nmsgid \"已跳过\"\nmsgstr \"skipped\"\n\n#: install.sh:1277\nmsgid \"Reality 协议有流量偷跑的风险\"\nmsgstr \"reality protocol has the risk of traffic leakage\"\n\n#: install.sh:1279 install.sh:1306\nmsgid \"是否额外安装 nginx 前置保护\"\nmsgstr \"whether to additionally install nginx as a front-end protection\"\n\n#: install.sh:1279\nmsgid \"推荐\"\nmsgstr \"recommend\"\n\n#: install.sh:1286 install.sh:1321\nmsgid \"检测到已安装\"\nmsgstr \"installed detected\"\n\n#: install.sh:1289 install.sh:1324\nmsgid \"已跳过安装\"\nmsgstr \"installation skipped\"\n\n#: install.sh:1303\nmsgid \"检测到已开启 Reality 负载均衡\"\nmsgstr \"reality load balancing has been detected as enabled\"\n\n#: install.sh:1304\nmsgid \"如用作 Reality 负载均衡主服务器必须安装\"\nmsgstr \"if used as a reality load balancing master server, it must be installed\"\n\n#: install.sh:1305\nmsgid \"如用作 Reality 负载均衡二级服务器则无需安装\"\nmsgstr \"if used as a secondary server for reality load balancing, installation is not required\"\n\n#: install.sh:1349\nmsgid \"已存在, 跳过编译安装过程\"\nmsgstr \"already exists, skip the compilation and installation process\"\n\n#: install.sh:1351\nmsgid \"检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装\"\nmsgstr \"other nginx packages installed have been detected. continuing the installation will cause conflicts. please resolve this issue before proceeding with the installation\"\n\n#: install.sh:1364\nmsgid \"即将下载已编译的\"\nmsgstr \"about to download the compiled\"\n\n#: install.sh:1374\nmsgid \"不支持的系统架构\"\nmsgstr \"unsupported system architecture\"\n\n#: install.sh:1383\nmsgid \"下载失败\"\nmsgstr \"download failed\"\n\n#: install.sh:1387\nmsgid \"下载成功\"\nmsgstr \"download successful\"\n\n#: install.sh:1390\nmsgid \"解压失败\"\nmsgstr \"decompression failed\"\n\n#: install.sh:1438 install.sh:1439 install.sh:1446 install.sh:1447\nmsgid \"配置不完整, 退出更新\"\nmsgstr \"configuration is incomplete; exiting update\"\n\n#: install.sh:1451 install.sh:1452\nmsgid \"当前安装模式不需要\"\nmsgstr \"the current installation mode is not required\"\n\n#: install.sh:1456 install.sh:1457\nmsgid \"配置不存在, 退出更新\"\nmsgstr \"configuration does not exist; exiting update\"\n\n#: install.sh:1463\nmsgid \"备份旧版\"\nmsgstr \"backup old version\"\n\n#: install.sh:1464\nmsgid \"删除旧版\"\nmsgstr \"delete old version\"\n\n#: install.sh:1468\nmsgid \"是否保留原 Nginx 配置文件\"\nmsgstr \"whether to keep the original nginx configuration file\"\n\n#: install.sh:1476 install.sh:1809\nmsgid \"原配置文件已删除\"\nmsgstr \"the original configuration file has been deleted\"\n\n#: install.sh:1480\nmsgid \"原配置文件已保留\"\nmsgstr \"the original configuration file has been retained\"\n\n#: install.sh:1534 install.sh:4220\nmsgid \"删除\"\nmsgstr \"delete\"\n\n#: install.sh:1534 install.sh:4243\nmsgid \"备份\"\nmsgstr \"backup\"\n\n#: install.sh:1537\nmsgid \"已为最新版\"\nmsgstr \"already updated to the latest version\"\n\n#: install.sh:1553\nmsgid \"设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)\"\nmsgstr \"set up a background scheduled automatic update program (including: script/xray/nginx)\"\n\n#: install.sh:1554\nmsgid \"可能自动更新后有兼容问题, 谨慎启用\"\nmsgstr \"there may be compatibility issues after an automatic update, so enable it with caution\"\n\n#: install.sh:1555 fail2ban_manager.sh:120 fail2ban_manager.sh:146\nmsgid \"是否启用\"\nmsgstr \"enable or not\"\n\n#: install.sh:1561 install.sh:3878\nmsgid \"设置自动更新\"\nmsgstr \"set automatic update\"\n\n#: install.sh:1566\nmsgid \"已设置自动更新\"\nmsgstr \"auto-update has been set\"\n\n#: install.sh:1567\nmsgid \"是否关闭\"\nmsgstr \"whether to close\"\n\n#: install.sh:1573\nmsgid \"删除自动更新\"\nmsgstr \"delete automatic update\"\n\n#: install.sh:1582\nmsgid \"安装 SSL 证书生成脚本依赖\"\nmsgstr \"install ssl certificate generation script dependencies\"\n\n#: install.sh:1584\nmsgid \"安装 SSL 证书生成脚本\"\nmsgstr \"install ssl certificate generation script\"\n\n#: install.sh:1590\nmsgid \"检测到原域名配置存在, 是否跳过域名设置\"\nmsgstr \"detected existing original domain configuration, do you want to skip domain settings\"\n\n#: install.sh:1605 install.sh:1642 install.sh:1693 install.sh:1726\nmsgid \"无法获取公网IP地址\"\nmsgstr \"unable to obtain public ip address\"\n\n#: install.sh:1605 install.sh:1642 install.sh:1665 install.sh:1693\n#: install.sh:1726\nmsgid \"安装终止\"\nmsgstr \"installation terminated\"\n\n#: install.sh:1608\nmsgid \"已跳过域名设置\"\nmsgstr \"domain setting skipped\"\n\n#: install.sh:1614\nmsgid \"确定域名信息\"\nmsgstr \"confirm domain name information\"\n\n#: install.sh:1615\nmsgid \"请输入你的域名信息\"\nmsgstr \"please enter your domain name information\"\n\n#: install.sh:1616\nmsgid \"请选择公网IP(IPv4/IPv6)或手动输入域名\"\nmsgstr \"please select a public ip (ipv4/ipv6) or manually enter a domain name\"\n\n#: install.sh:1622 install.sh:1711\nmsgid \"正在获取公网IP信息, 请耐心等待\"\nmsgstr \"retrieving public ip information, please wait patiently\"\n\n#: install.sh:1632\nmsgid \"此选项用于服务器商仅提供域名访问服务器\"\nmsgstr \"this option is used when the server provider only provides domain name access to the server\"\n\n#: install.sh:1633\nmsgid \"注意服务器商域名添加 CNAME 记录\"\nmsgstr \"note: add a cname record for the server provider's domain\"\n\n#: install.sh:1645\nmsgid \"域名DNS解析IP\"\nmsgstr \"domain name dns resolution ip\"\n\n#: install.sh:1646 install.sh:1729\nmsgid \"公网IP/域名\"\nmsgstr \"public ip/domain name\"\n\n#: install.sh:1648\nmsgid \"域名DNS解析IP与公网IP匹配\"\nmsgstr \"domain name dns resolves ip matches public ip\"\n\n#: install.sh:1650\nmsgid \"请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray\"\nmsgstr \"please make sure the domain has added the correct a/aaaa record; otherwise, xray will not function properly\"\n\n#: install.sh:1651\nmsgid \"域名DNS解析IP与公网IP不匹配, 请选择\"\nmsgstr \"the domain name's dns resolution ip does not match the public ip. please select\"\n\n#: install.sh:1652 install.sh:1659\nmsgid \"继续安装\"\nmsgstr \"continue installation\"\n\n#: install.sh:1653\nmsgid \"重新输入\"\nmsgstr \"re-enter\"\n\n#: install.sh:1654\nmsgid \"终止安装\"\nmsgstr \"cancel installation\"\n\n#: install.sh:1676\nmsgid \"检测到原IP配置存在, 是否跳过IP设置\"\nmsgstr \"original ip configuration detected. skip ip setting\"\n\n#: install.sh:1697\nmsgid \"已跳过IP设置\"\nmsgstr \"ip setting skipped\"\n\n#: install.sh:1703\nmsgid \"确定公网IP信息\"\nmsgstr \"confirm public ip information\"\n\n#: install.sh:1704\nmsgid \"请选择公网IP为IPv4或IPv6\"\nmsgstr \"please select public ip as ipv4 or ipv6\"\n\n#: install.sh:1707\nmsgid \"手动输入\"\nmsgstr \"manual input\"\n\n#: install.sh:1734\nmsgid \"端口未被占用\"\nmsgstr \"the port is not in use\"\n\n#: install.sh:1736\nmsgid \"检测到\"\nmsgstr \"detected\"\n\n#: install.sh:1736\nmsgid \"端口被占用\"\nmsgstr \"port is occupied\"\n\n#: install.sh:1736\nmsgid \"以下为\"\nmsgstr \"the following is\"\n\n#: install.sh:1736\nmsgid \"端口占用信息\"\nmsgstr \"port occupation information\"\n\n#: install.sh:1738\nmsgid \"尝试终止占用的进程\"\nmsgstr \"attempt to terminate the occupied process\"\n\n#: install.sh:1749\nmsgid \"证书测试签发成功, 开始正式签发\"\nmsgstr \"certificate test issuance successful, starting official issuance\"\n\n#: install.sh:1752\nmsgid \"证书测试签发失败\"\nmsgstr \"certificate test issuance failed\"\n\n#: install.sh:1759\nmsgid \"证书生成成功\"\nmsgstr \"certificate generated successfully\"\n\n#: install.sh:1765\nmsgid \"证书配置成功\"\nmsgstr \"certificate configured successfully\"\n\n#: install.sh:1769\nmsgid \"证书生成失败\"\nmsgstr \"certificate generation failed\"\n\n#: install.sh:1801\nmsgid \"检测到 Xray 配置过多用户\"\nmsgstr \"detected that xray is configured with too many users\"\n\n#: install.sh:1802\nmsgid \"是否保留原 Xray 配置文件\"\nmsgstr \"keep the original xray configuration file\"\n\n#: install.sh:1822\nmsgid \"添加简单 ws/gRPC 协议\"\nmsgstr \"add simple ws/grpc protocol\"\n\n#: install.sh:1837\nmsgid \"检测到配置文件, 是否读取配置文件\"\nmsgstr \"configuration file detected. do you want to read the configuration file\"\n\n#: install.sh:1842 install.sh:1863 install.sh:1961 install.sh:3430\nmsgid \"已删除配置文件\"\nmsgstr \"configuration file deleted\"\n\n#: install.sh:1845 install.sh:1858 install.sh:1956 install.sh:3426\nmsgid \"已保留配置文件\"\nmsgstr \"configuration file has been retained\"\n\n#: install.sh:1852\nmsgid \"检测到当前安装模式与配置文件的安装模式不一致\"\nmsgstr \"detected that the current installation mode is inconsistent with the installation mode in the configuration file\"\n\n#: install.sh:1853\nmsgid \"是否保留配置文件 (强烈不建议)\"\nmsgstr \"keep configuration file (strongly not recommended)\"\n\n#: install.sh:1857\nmsgid \"请务必确保配置文件正确\"\nmsgstr \"please make sure the configuration file is correct\"\n\n#: install.sh:1951\nmsgid \"检测到配置文件不完整, 是否保留配置文件\"\nmsgstr \"incomplete configuration file detected. do you want to keep the configuration file\"\n\n#: install.sh:2170\nmsgid \"配置删除\"\nmsgstr \"configuration deletion\"\n\n#: install.sh:2191\nmsgid \"设置 Nginx 开机自启\"\nmsgstr \"set nginx to start automatically on boot\"\n\n#: install.sh:2194 install.sh:4234 install.sh:4237 install.sh:4238\n#: install.sh:4239 fail2ban_manager.sh:10\nmsgid \"设置\"\nmsgstr \"settings\"\n\n#: install.sh:2194 install.sh:2202\nmsgid \"开机自启\"\nmsgstr \"startup on boot\"\n\n#: install.sh:2199\nmsgid \"关闭 Nginx 开机自启\"\nmsgstr \"disable nginx from starting automatically on boot\"\n\n#: install.sh:2202\nmsgid \"关闭\"\nmsgstr \"close\"\n\n#: install.sh:2209 install.sh:2231 install.sh:2234 install.sh:2294\n#: install.sh:4229 fail2ban_manager.sh:230\nmsgid \"停止\"\nmsgstr \"stop\"\n\n#: install.sh:2223 install.sh:2226 install.sh:2761 install.sh:4228\n#: fail2ban_manager.sh:229 fail2ban_manager.sh:398\nmsgid \"启动\"\nmsgstr \"start\"\n\n#: install.sh:2247 install.sh:2263\nmsgid \"新版本已自动设置证书自动更新\"\nmsgstr \"the new version has automatically set up certificate auto-updating\"\n\n#: install.sh:2248\nmsgid \"老版本请及时删除 废弃的 改版证书自动更新\"\nmsgstr \"please delete the old version in a timely manner. the obsolete certificate will be automatically updated after the revision\"\n\n#: install.sh:2249\nmsgid \"已设置改版证书自动更新\"\nmsgstr \"the certificate renewal has been set to update automatically\"\n\n#: install.sh:2250\nmsgid \"是否需要删除改版证书自动更新 (请删除)\"\nmsgstr \"whether to delete the certificate auto-update for the revised version (please delete)\"\n\n#: install.sh:2257\nmsgid \"删除改版证书自动更新\"\nmsgstr \"delete version certificate automatic update\"\n\n#: install.sh:2281\nmsgid \"已过期\"\nmsgstr \"expired\"\n\n#: install.sh:2283\nmsgid \"证书生成日期\"\nmsgstr \"certificate generation date\"\n\n#: install.sh:2284\nmsgid \"证书生成天数\"\nmsgstr \"number of days for certificate generation\"\n\n#: install.sh:2285\nmsgid \"证书剩余天数\"\nmsgstr \"remaining days of certificate\"\n\n#: install.sh:2289\nmsgid \"是否立即更新证书\"\nmsgstr \"whether to update the certificate immediately\"\n\n#: install.sh:2301 install.sh:2313\nmsgid \"证书签发工具不存在, 请确认是否证书为脚本签发\"\nmsgstr \"the certificate issuance tool does not exist. please confirm whether the certificate was issued by a script\"\n\n#: install.sh:2317\nmsgid \"证书更新\"\nmsgstr \"certificate update\"\n\n#: install.sh:2327\nmsgid \"本地文件 fail2ban_manager.sh 不存在, 正在下载\"\nmsgstr \"the local file fail2ban_manager.sh does not exist, downloading\"\n\n#: install.sh:2342\nmsgid \"是否需要设置自动清理日志\"\nmsgstr \"whether to set automatic log cleanup\"\n\n#: install.sh:2346\nmsgid \"已跳过设置自动清理日志\"\nmsgstr \"automatic log cleanup has been skipped\"\n\n#: install.sh:2349\nmsgid \"将在 每周三 04:00 自动清空日志\"\nmsgstr \"logs will be automatically cleared every wednesday at 04:00\"\n\n#: install.sh:2354\nmsgid \"已设置自动清理日志任务\"\nmsgstr \"automatic log cleanup task has been set\"\n\n#: install.sh:2355\nmsgid \"是否需要删除现有自动清理日志任务\"\nmsgstr \"do you need to delete the existing automatic log cleanup task\"\n\n#: install.sh:2360\nmsgid \"删除自动清理日志任务\"\nmsgstr \"delete automatic log cleanup task\"\n\n#: install.sh:2363\nmsgid \"保留现有自动清理日志任务\"\nmsgstr \"retain the existing automatic log cleanup task\"\n\n#: install.sh:2378\nmsgid \"设置自动清理日志\"\nmsgstr \"set up automatic log cleanup\"\n\n#: install.sh:2385\nmsgid \"检测到日志文件大小如下:\"\nmsgstr \"the log file size is detected as follows\"\n\n#: install.sh:2387\nmsgid \"即将清除\"\nmsgstr \"about to clear\"\n\n#: install.sh:2389\nmsgid \"日志清理\"\nmsgstr \"log cleanup\"\n\n#: install.sh:2663\nmsgid \"链接分享\"\nmsgstr \"link sharing\"\n\n#: install.sh:2665 install.sh:2671 install.sh:2676 install.sh:2681\n#: install.sh:2685 install.sh:3183\nmsgid \"分享链接\"\nmsgstr \"share link\"\n\n#: install.sh:2666 install.sh:2672 install.sh:2677 install.sh:2682\n#: install.sh:2686\nmsgid \"二维码\"\nmsgstr \"qr code\"\n\n#: install.sh:2692 install.sh:2693\nmsgid \"配置分享\"\nmsgstr \"configuration sharing\"\n\n#: install.sh:2707\nmsgid \"生成分享链接\"\nmsgstr \"generate share link\"\n\n#: install.sh:2735 install.sh:2746 install.sh:3038 install.sh:3108\n#: install.sh:3132 install.sh:3198 install.sh:3246 install.sh:3300\n#: install.sh:3352\nmsgid \"请先安装\"\nmsgstr \"please install first\"\n\n#: install.sh:2753\nmsgid \"无法获取网卡, 将监控所有网卡\"\nmsgstr \"unable to obtain the network adapter; monitoring all network adapters\"\n\n#: install.sh:2755\nmsgid \"监控网卡\"\nmsgstr \"monitor network card\"\n\n#: install.sh:2758\nmsgid \"监控端口\"\nmsgstr \"monitoring port\"\n\n#: install.sh:2760\nmsgid \"按 q 键退出 iftop\"\nmsgstr \"press the q key to exit iftop\"\n\n#: install.sh:2776 install.sh:2779 install.sh:2782 install.sh:2785\n#: install.sh:2788 install.sh:2791 install.sh:2794 install.sh:2797\n#: install.sh:2800 install.sh:2803 install.sh:2806\nmsgid \"安装成功\"\nmsgstr \"installation successful\"\n\n#: install.sh:2810\nmsgid \"目前分享链接规范为实验阶段, 请自行判断是否适用\"\nmsgstr \"currently, the sharing link specification is in the experimental phase; please determine its applicability on your own\"\n\n#: install.sh:2812 install.sh:4224\nmsgid \"配置信息\"\nmsgstr \"configuration information\"\n\n#: install.sh:2813\nmsgid \"主机\"\nmsgstr \"host\"\n\n#: install.sh:2837\nmsgid \"用户id\"\nmsgstr \"user id\"\n\n#: install.sh:2839\nmsgid \"加密\"\nmsgstr \"encryption\"\n\n#: install.sh:2840\nmsgid \"传输协议\"\nmsgstr \"transmission protocol\"\n\n#: install.sh:2841\nmsgid \"底层传输安全\"\nmsgstr \"underlying transmission security\"\n\n#: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868\nmsgid \"路径\"\nmsgstr \"path\"\n\n#: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868\nmsgid \"不要落下\"\nmsgstr \"don't fall behind\"\n\n#: install.sh:2846 install.sh:2849 install.sh:2865 install.sh:2870\nmsgid \"不需要加\"\nmsgstr \"no need to add\"\n\n#: install.sh:2852\nmsgid \"流控\"\nmsgstr \"flow control\"\n\n#: install.sh:2885\nmsgid \"即将申请证书, 支持使用自定义证书\"\nmsgstr \"certificate will be applied soon, supporting the use of custom certificates\"\n\n#: install.sh:2886\nmsgid \"如需使用自定义证书, 请按如下步骤:\"\nmsgstr \"if you need to use a custom certificate, please follow the steps below\"\n\n#: install.sh:2887\nmsgid \"1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)\"\nmsgstr \"1. rename the certificate files: private key (xray.key), certificate (xray.crt)\"\n\n#: install.sh:2888\nmsgid \"2. 将重命名后的证书文件放入\"\nmsgstr \"2. place the renamed certificate file into\"\n\n#: install.sh:2888\nmsgid \"目录后再运行脚本\"\nmsgstr \"run the script after the directory\"\n\n#: install.sh:2889\nmsgid \"3. 重新运行脚本\"\nmsgstr \"3. re-run the script\"\n\n#: install.sh:2890 install.sh:3334\nmsgid \"是否继续\"\nmsgstr \"whether to continue\"\n\n#: install.sh:2898\nmsgid \"所有证书文件均已存在, 是否保留\"\nmsgstr \"all certificate files already exist, do you want to keep them\"\n\n#: install.sh:2904 install.sh:2919 install.sh:2935 file_manager.sh:176\nmsgid \"已删除\"\nmsgstr \"deleted\"\n\n#: install.sh:2910 install.sh:2925 install.sh:2942\nmsgid \"证书应用\"\nmsgstr \"certificate application\"\n\n#: install.sh:2914\nmsgid \"证书文件已存在, 是否保留\"\nmsgstr \"the certificate file already exists, do you want to keep it\"\n\n#: install.sh:2930\nmsgid \"证书签发残留文件已存在, 是否保留\"\nmsgstr \"the certificate issuance residual file already exists, do you want to keep it\"\n\n#: install.sh:2972 install.sh:4219\nmsgid \"添加\"\nmsgstr \"add\"\n\n#: install.sh:2980\nmsgid \"请选择支持的 TLS 版本\"\nmsgstr \"please select the supported tls version\"\n\n#: install.sh:2981\nmsgid \"建议选择 TLSv1.3 only (安全模式)\"\nmsgstr \"we recommend selecting “tlsv1.3 only (secure mode).”\"\n\n#: install.sh:2982 install.sh:2998\nmsgid \"兼容模式\"\nmsgstr \"compatibility mode\"\n\n#: install.sh:2983\nmsgid \"安全模式\"\nmsgstr \"safe mode\"\n\n#: install.sh:2987\nmsgid \"由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)\"\nmsgstr \"since h3 only supports tlsv1.3, it only supports tlsv1.3 (secure mode)\"\n\n#: install.sh:2991 install.sh:3003 install.sh:3006\nmsgid \"已切换至\"\nmsgstr \"already switched to\"\n\n#: install.sh:2995\nmsgid \"请选择 TLS 版本\"\nmsgstr \"please select the tls version\"\n\n#: install.sh:2996\nmsgid \"建议选择 TLSv1.3 (安全模式)\"\nmsgstr \"we recommend selecting tlsv1.3 (secure mode)\"\n\n#: install.sh:3009\nmsgid \"当前模式不支持\"\nmsgstr \"current mode not supported\"\n\n#: install.sh:3016\nmsgid \"Nginx配置文件不存在 或 当前模式不支持\"\nmsgstr \"the nginx configuration file does not exist, or the current mode is not supported\"\n\n#: install.sh:3130\nmsgid \"此模式不支持修改\"\nmsgstr \"this mode does not support modification\"\n\n#: install.sh:3139\nmsgid \"即将显示用户, 一次仅能显示一个\"\nmsgstr \"users will be displayed soon, only one user can be displayed at a time\"\n\n#: install.sh:3141\nmsgid \"请选择显示用户使用的协议\"\nmsgstr \"please select the protocol used by the user to display\"\n\n#: install.sh:3151\nmsgid \"请选择要显示的用户编号\"\nmsgstr \"please select the user number to display\"\n\n#: install.sh:3156 install.sh:3166 install.sh:3270 install.sh:3292\nmsgid \"选择错误\"\nmsgstr \"selecting incorrectly\"\n\n#: install.sh:3159\nmsgid \"请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户\"\nmsgstr \"please directly select [view xray configuration information] in the main menu to display the primary user\"\n\n#: install.sh:3169 install.sh:3295\nmsgid \"请先检测 Xray 是否正确安装\"\nmsgstr \"please first check if xray is installed correctly\"\n\n#: install.sh:3187\nmsgid \"是否继续显示用户\"\nmsgstr \"whether to continue displaying the user\"\n\n#: install.sh:3196 install.sh:3298\nmsgid \"此模式不支持删除用户\"\nmsgstr \"this mode does not support deleting users\"\n\n#: install.sh:3206\nmsgid \"即将添加用户, 一次仅能添加一个\"\nmsgstr \"adding users is coming soon, but only one user can be added at a time\"\n\n#: install.sh:3208\nmsgid \"请选择添加用户使用的协议\"\nmsgstr \"please select the protocol used for adding users\"\n\n#: install.sh:3230\nmsgid \"添加用户\"\nmsgstr \"add user\"\n\n#: install.sh:3235\nmsgid \"是否继续添加用户\"\nmsgstr \"whether to continue adding users\"\n\n#: install.sh:3244\nmsgid \"此模式不支持添加用户\"\nmsgstr \"this mode does not support adding users\"\n\n#: install.sh:3253\nmsgid \"即将删除用户, 一次仅能删除一个\"\nmsgstr \"deleting user, only one at a time\"\n\n#: install.sh:3255\nmsgid \"请选择删除用户使用的协议\"\nmsgstr \"please select the agreement used by the deleted user\"\n\n#: install.sh:3265\nmsgid \"请选择要删除的用户编号\"\nmsgstr \"please select the user number to delete\"\n\n#: install.sh:3274\nmsgid \"主用户无法删除\"\nmsgstr \"the main user cannot be deleted\"\n\n#: install.sh:3280\nmsgid \"删除用户\"\nmsgstr \"delete user\"\n\n#: install.sh:3283\nmsgid \"是否继续删除用户\"\nmsgstr \"whether to continue deleting the user\"\n\n#: install.sh:3305 install.sh:3309\nmsgid \"文件不存在\"\nmsgstr \"the file does not exist\"\n\n#: install.sh:3316\nmsgid \"已配置 Xray 流量统计\"\nmsgstr \"xray traffic statistics have been configured\"\n\n#: install.sh:3317\nmsgid \"是否需要关闭此功能\"\nmsgstr \"do you need to disable this feature\"\n\n#: install.sh:3323\nmsgid \"关闭 Xray 流量统计\"\nmsgstr \"disable xray traffic statistics\"\n\n#: install.sh:3332\nmsgid \"流量统计需要使用\"\nmsgstr \"traffic statistics need to be used\"\n\n#: install.sh:3333\nmsgid \"可能会影响 Xray 性能\"\nmsgstr \"may affect x-ray performance\"\n\n#: install.sh:3344\nmsgid \"设置 Xray 流量统计\"\nmsgstr \"set up xray traffic statistics\"\n\n#: install.sh:3374 install.sh:3394\nmsgid \"已卸载\"\nmsgstr \"uninstalled\"\n\n#: install.sh:3378\nmsgid \"是否卸载\"\nmsgstr \"whether to uninstall\"\n\n#: install.sh:3382\nmsgid \"已取消卸载\"\nmsgstr \"uninstallation canceled\"\n\n#: install.sh:3405\nmsgid \"是否删除所有脚本文件\"\nmsgstr \"delete all script files\"\n\n#: install.sh:3412\nmsgid \"已删除所有文件\"\nmsgstr \"all files have been deleted\"\n\n#: install.sh:3413\nmsgid \"ヾ(￣▽￣) 拜拜~\"\nmsgstr \"(￣▽￣)ノ bye bye~\"\n\n#: install.sh:3418\nmsgid \"已保留脚本文件 (包含 SSL 证书等)\"\nmsgstr \"script file has been retained (including ssl certificate, etc.)\"\n\n#: install.sh:3422\nmsgid \"是否保留配置文件\"\nmsgstr \"whether to keep the configuration file\"\n\n#: install.sh:3439\nmsgid \"已清空证书遗留文件\"\nmsgstr \"certificate residual files have been cleared\"\n\n#: install.sh:3469\nmsgid \"秒后\"\nmsgstr \"seconds later\"\n\n#: install.sh:3669\nmsgid \"检测最新版本失败\"\nmsgstr \"failed to detect the latest version\"\n\n#: install.sh:3677 install.sh:3917\nmsgid \"新版本\"\nmsgstr \"new version\"\n\n#: install.sh:3677 install.sh:3917\nmsgid \"更新内容\"\nmsgstr \"update content\"\n\n#: install.sh:3681\nmsgid \"存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新\"\nmsgstr \"a new version is available, but the version change is significant and may cause compatibility issues. do you want to update\"\n\n#: install.sh:3684\nmsgid \"存在新版本, 是否更新\"\nmsgstr \"new version exists, update\"\n\n#: install.sh:3688\nmsgid \"检测 脚本 最新版本失败\"\nmsgstr \"failed to detect the latest version of the script\"\n\n#: install.sh:3689\nmsgid \"脚本 版本差别过大, 跳过更新\"\nmsgstr \"script version difference is too large, skipping update\"\n\n#: install.sh:3697 install.sh:3698\nmsgid \"脚本更新失败\"\nmsgstr \"script update failed\"\n\n#: install.sh:3704\nmsgid \"更新完成\"\nmsgstr \"update completed\"\n\n#: install.sh:3705 install.sh:3929\nmsgid \"脚本版本变化较大, 若服务无法正常运行请卸载后重装\"\nmsgstr \"the script version has changed significantly. if the service cannot run properly, please uninstall and reinstall it\"\n\n#: install.sh:3714\nmsgid \"当前版本为最新版本\"\nmsgstr \"the current version is the latest version\"\n\n#: install.sh:3727 install.sh:3912 install.sh:3927 install.sh:3940\nmsgid \"下载最新脚本\"\nmsgstr \"download the latest script\"\n\n#: install.sh:3741\nmsgid \"该选项暂时无法使用\"\nmsgstr \"this option is temporarily unavailable\"\n\n#: install.sh:3760 install.sh:4286\nmsgid \"此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装\"\nmsgstr \"this mode is recommended for load balancing; it is generally not recommended for use. do you want to install\"\n\n#: install.sh:3773 install.sh:4300\nmsgid \"此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装\"\nmsgstr \"this mode is only intended for traffic forwarding and is not recommended for other use cases. do you want to install it\"\n\n#: install.sh:3876 install.sh:3877 install.sh:3887 install.sh:3891\n#: install.sh:3895 install.sh:4211 install.sh:4212 install.sh:4213\n#: install.sh:4214 install.sh:4215 install.sh:4216 install.sh:4314\n#: install.sh:4319 install.sh:4324 install.sh:4329\nmsgid \"变更\"\nmsgstr \"change\"\n\n#: install.sh:3876 install.sh:4215\nmsgid \"负载均衡配置\"\nmsgstr \"load balancing configuration\"\n\n#: install.sh:3879\nmsgid \"清除日志文件\"\nmsgstr \"clear log files\"\n\n#: install.sh:3880\nmsgid \"查看证书状态\"\nmsgstr \"view certificate status\"\n\n#: install.sh:3881\nmsgid \"更新证书有效期\"\nmsgstr \"update certificate expiration date\"\n\n#: install.sh:3882\nmsgid \"设置证书自动更新\"\nmsgstr \"set certificate auto-update\"\n\n#: install.sh:3883\nmsgid \"设置 Fail2ban 防暴力破解\"\nmsgstr \"set up fail2ban to prevent brute-force attacks\"\n\n#: install.sh:3884\nmsgid \"显示帮助\"\nmsgstr \"show help\"\n\n#: install.sh:3885\nmsgid \"修改语言\"\nmsgstr \"change language\"\n\n#: install.sh:3888 install.sh:4218 install.sh:4222 install.sh:4223\n#: install.sh:4224 install.sh:4225 install.sh:4230 install.sh:4232\n#: fail2ban_manager.sh:15\nmsgid \"查看\"\nmsgstr \"view\"\n\n#: install.sh:3888 install.sh:4225\nmsgid \"实时流量\"\nmsgstr \"real-time traffic\"\n\n#: install.sh:3889\nmsgid \"脚本卸载\"\nmsgstr \"script uninstallation\"\n\n#: install.sh:3890\nmsgid \"显示安装信息\"\nmsgstr \"show installation information\"\n\n#: install.sh:3892 install.sh:4237\nmsgid \"加速\"\nmsgstr \"accelerate\"\n\n#: install.sh:3894\nmsgid \"更新脚本\"\nmsgstr \"update script\"\n\n#: install.sh:3896 install.sh:3897\nmsgid \"显示\"\nmsgstr \"display\"\n\n#: install.sh:3896\nmsgid \"访问信息\"\nmsgstr \"access information\"\n\n#: install.sh:3897\nmsgid \"错误信息\"\nmsgstr \"error message\"\n\n#: install.sh:3921\nmsgid \"脚本版本变化较大, 可能存在不兼容情况, 是否继续使用\"\nmsgstr \"the script version has changed significantly, and there may be compatibility issues. do you want to continue using it\"\n\n#: install.sh:3948\nmsgid \"检测失败\"\nmsgstr \"detection failed\"\n\n#: install.sh:3952 install.sh:3962 install.sh:3971\nmsgid \"有新版\"\nmsgstr \"there is a new version\"\n\n#: install.sh:3955 install.sh:3964 install.sh:3974\nmsgid \"最新版\"\nmsgstr \"latest version\"\n\n#: install.sh:3969\nmsgid \"版本未知\"\nmsgstr \"version unknown\"\n\n#: install.sh:3989 install.sh:3996\nmsgid \"运行中\"\nmsgstr \"running\"\n\n#: install.sh:3991 install.sh:4014 install.sh:4016\nmsgid \"无需测试\"\nmsgstr \"no testing required\"\n\n#: install.sh:3993 install.sh:3998\nmsgid \"未运行\"\nmsgstr \"not running\"\n\n#: install.sh:4008\nmsgid \"无法连通\"\nmsgstr \"unable to connect\"\n\n#: install.sh:4010 install.sh:4011 install.sh:4012\nmsgid \"本地正常\"\nmsgstr \"locally normal\"\n\n#: install.sh:4027\nmsgid \"脚本维护中.. 请稍后再试\"\nmsgstr \"script is under maintenance. please try again later\"\n\n#: install.sh:4034\nmsgid \"无法检测所需依赖的在线版本, 请稍后再试\"\nmsgstr \"the required online version of the dependency cannot be detected. please try again later\"\n\n#: install.sh:4051\nmsgid \"请输入数字\"\nmsgstr \"please enter a number\"\n\n#: install.sh:4051\nmsgid \"请输入 1 到 6 之间的有效数字\"\nmsgstr \"please enter a valid number between 1 and 6\"\n\n#: install.sh:4081\nmsgid \"无效的选择\"\nmsgstr \"invalid selection\"\n\n#: install.sh:4122\nmsgid \"请输入备份名称\"\nmsgstr \"please enter the backup name\"\n\n#: install.sh:4122\nmsgid \"不需要后缀\"\nmsgstr \"no suffix needed\"\n\n#: install.sh:4131\nmsgid \"报错信息\"\nmsgstr \"error message\"\n\n#: install.sh:4133\nmsgid \"备份完整性可能受到影响, 请检查上述错误信息\"\nmsgstr \"backup integrity may be affected. please check the error messages above\"\n\n#: install.sh:4137\nmsgid \"备份失败\"\nmsgstr \"backup failed\"\n\n#: install.sh:4139\nmsgid \"备份成功\"\nmsgstr \"backup successful\"\n\n#: install.sh:4144\nmsgid \"请确保备份文件在目录\"\nmsgstr \"please ensure the backup file is in the directory\"\n\n#: install.sh:4148\nmsgid \"没有找到备份文件\"\nmsgstr \"backup file not found\"\n\n#: install.sh:4153\nmsgid \"发现多个备份文件\"\nmsgstr \"found multiple backup files\"\n\n#: install.sh:4153\nmsgid \"将使用最新的文件进行恢复\"\nmsgstr \"the latest file will be used for recovery\"\n\n#: install.sh:4157\nmsgid \"找到最新备份文件\"\nmsgstr \"find the latest backup file\"\n\n#: install.sh:4159\nmsgid \"恢复备份\"\nmsgstr \"restore backup\"\n\n#: install.sh:4163\nmsgid \"恢复成功\"\nmsgstr \"recovery successful\"\n\n#: install.sh:4164 install.sh:4166\nmsgid \"记得安装\"\nmsgstr \"remember to install\"\n\n#: install.sh:4169\nmsgid \"恢复失败\"\nmsgstr \"recovery failed\"\n\n#: install.sh:4175\nmsgid \"安装管理脚本\"\nmsgstr \"install management script\"\n\n#: install.sh:4176\nmsgid \"作者\"\nmsgstr \"author\"\n\n#: install.sh:4180\nmsgid \"当前模式\"\nmsgstr \"current mode\"\n\n#: install.sh:4181\nmsgid \"当前语言\"\nmsgstr \"current language\"\n\n#: install.sh:4184\nmsgid \"可以使用\"\nmsgstr \"can be used\"\n\n#: install.sh:4184\nmsgid \"命令管理脚本\"\nmsgstr \"command management script\"\n\n#: install.sh:4186\nmsgid \"版本检测\"\nmsgstr \"version detection\"\n\n#: install.sh:4187 install.sh:4195 install.sh:4246\nmsgid \"脚本\"\nmsgstr \"script\"\n\n#: install.sh:4190\nmsgid \"运行状态\"\nmsgstr \"running status\"\n\n#: install.sh:4193\nmsgid \"连通性\"\nmsgstr \"connectivity\"\n\n#: install.sh:4194\nmsgid \"更新向导\"\nmsgstr \"update wizard\"\n\n#: install.sh:4205\nmsgid \"安装向导\"\nmsgstr \"installation wizard\"\n\n#: install.sh:4210\nmsgid \"配置变更\"\nmsgstr \"configuration change\"\n\n#: install.sh:4217\nmsgid \"用户管理\"\nmsgstr \"user management\"\n\n#: install.sh:4218 install.sh:4219 install.sh:4220\nmsgid \"用户\"\nmsgstr \"user\"\n\n#: install.sh:4221\nmsgid \"查看信息\"\nmsgstr \"view information\"\n\n#: install.sh:4222\nmsgid \"实时访问日志\"\nmsgstr \"real-time access log\"\n\n#: install.sh:4223\nmsgid \"实时错误日志\"\nmsgstr \"real-time error log\"\n\n#: install.sh:4226\nmsgid \"服务相关\"\nmsgstr \"service-related\"\n\n#: install.sh:4227 install.sh:4228 install.sh:4229 install.sh:4230\nmsgid \"所有服务\"\nmsgstr \"all services\"\n\n#: install.sh:4231\nmsgid \"证书相关\"\nmsgstr \"certificate-related\"\n\n#: install.sh:4232\nmsgid \"证书状态\"\nmsgstr \"certificate status\"\n\n#: install.sh:4233\nmsgid \"证书有效期\"\nmsgstr \"certificate validity period\"\n\n#: install.sh:4234\nmsgid \"证书自动更新\"\nmsgstr \"certificate auto update\"\n\n#: install.sh:4235\nmsgid \"其他选项\"\nmsgstr \"other options\"\n\n#: install.sh:4236\nmsgid \"自动更新\"\nmsgstr \"automatic update\"\n\n#: install.sh:4238\nmsgid \"防暴力破解\"\nmsgstr \"anti-brute force\"\n\n#: install.sh:4239\nmsgid \"流量统计\"\nmsgstr \"traffic statistics\"\n\n#: install.sh:4240\nmsgid \"清除\"\nmsgstr \"clear\"\n\n#: install.sh:4240\nmsgid \"日志文件\"\nmsgstr \"log file\"\n\n#: install.sh:4241\nmsgid \"测试\"\nmsgstr \"test\"\n\n#: install.sh:4241\nmsgid \"服务器网速\"\nmsgstr \"server network speed\"\n\n#: install.sh:4242\nmsgid \"备份恢复\"\nmsgstr \"backup and restore\"\n\n#: install.sh:4243 install.sh:4244\nmsgid \"全部文件\"\nmsgstr \"all files\"\n\n#: install.sh:4244\nmsgid \"恢复\"\nmsgstr \"recovery\"\n\n#: install.sh:4245\nmsgid \"卸载向导\"\nmsgstr \"uninstall wizard\"\n\n#: install.sh:4246 fail2ban_manager.sh:14 fail2ban_manager.sh:415\nmsgid \"卸载\"\nmsgstr \"uninstall\"\n\n#: install.sh:4247\nmsgid \"清空\"\nmsgstr \"empty\"\n\n#: install.sh:4247\nmsgid \"证书文件\"\nmsgstr \"certificate file\"\n\n#: install.sh:4248 fail2ban_manager.sh:16 file_manager.sh:208\nmsgid \"退出\"\nmsgstr \"exit\"\n\n#: install.sh:4251\nmsgid \"请输入选项\"\nmsgstr \"please enter an option\"\n\n#: install.sh:4259 install.sh:4268 install.sh:4334 install.sh:4340\n#: install.sh:4385 install.sh:4391 install.sh:4397 install.sh:4426\n#: install.sh:4467 install.sh:4474 install.sh:4479 fail2ban_manager.sh:416\nmsgid \"清空屏幕\"\nmsgstr \"clear the screen\"\n\n#: install.sh:4265\nmsgid \"不建议\"\nmsgstr \"not recommended\"\n\n#: install.sh:4265\nmsgid \"频繁更新 Nginx, 请确认 Nginx 有更新的必要\"\nmsgstr \"nginx is updated frequently. please confirm whether an update is actually necessary\"\n\n#: install.sh:4266\nmsgid \"开始更新\"\nmsgstr \"starting update\"\n\n#: install.sh:4346 install.sh:4353 install.sh:4360 install.sh:4410\n#: install.sh:4415 install.sh:4420 install.sh:4442\nmsgid \"回到菜单\"\nmsgstr \"back to menu\"\n\n#: fail2ban_manager.sh:10\nmsgid \"用于防止暴力破解\"\nmsgstr \"used to prevent brute-force attacks\"\n\n#: fail2ban_manager.sh:11 file_manager.sh:203\nmsgid \"主菜单\"\nmsgstr \"main menu\"\n\n#: fail2ban_manager.sh:13\nmsgid \"管理\"\nmsgstr \"management\"\n\n#: fail2ban_manager.sh:15 fail2ban_manager.sh:339\nmsgid \"状态\"\nmsgstr \"status\"\n\n#: fail2ban_manager.sh:18 file_manager.sh:210\nmsgid \"请选择一个选项\"\nmsgstr \"please select an option\"\n\n#: fail2ban_manager.sh:27 fail2ban_manager.sh:250 fail2ban_manager.sh:258\n#: fail2ban_manager.sh:363\nmsgid \"无效的选择, 请重试\"\nmsgstr \"invalid selection, please try again\"\n\n#: fail2ban_manager.sh:35\nmsgid \"已经安装, 跳过安装步骤\"\nmsgstr \"already installed, skip the installation step\"\n\n#: fail2ban_manager.sh:68\nmsgid \"systemd 无法读取 SSH 日志\"\nmsgstr \"systemd cannot read ssh logs\"\n\n#: fail2ban_manager.sh:69\nmsgid \"跳过启用\"\nmsgstr \"skip activation\"\n\n#: fail2ban_manager.sh:69 fail2ban_manager.sh:93 fail2ban_manager.sh:103\n#: fail2ban_manager.sh:120 fail2ban_manager.sh:125 fail2ban_manager.sh:128\n#: fail2ban_manager.sh:146 fail2ban_manager.sh:151 fail2ban_manager.sh:154\nmsgid \"规则\"\nmsgstr \"rule\"\n\n#: fail2ban_manager.sh:77 fail2ban_manager.sh:203 fail2ban_manager.sh:440\nmsgid \"未安装, 请先安装\"\nmsgstr \"not installed, please install first\"\n\n#: fail2ban_manager.sh:125 fail2ban_manager.sh:151 fail2ban_manager.sh:349\nmsgid \"已禁用\"\nmsgstr \"disabled\"\n\n#: fail2ban_manager.sh:209\nmsgid \"请选择\"\nmsgstr \"please select\"\n\n#: fail2ban_manager.sh:209\nmsgid \"操作\"\nmsgstr \"operation\"\n\n#: fail2ban_manager.sh:210\nmsgid \"管理模块\"\nmsgstr \"management module\"\n\n#: fail2ban_manager.sh:211\nmsgid \"添加自定义规则\"\nmsgstr \"add custom rule\"\n\n#: fail2ban_manager.sh:212 fail2ban_manager.sh:228\nmsgid \"服务管理\"\nmsgstr \"service management\"\n\n#: fail2ban_manager.sh:271\nmsgid \"请输入新的\"\nmsgstr \"please enter the new one\"\n\n#: fail2ban_manager.sh:271 fail2ban_manager.sh:272\nmsgid \"名称\"\nmsgstr \"name\"\n\n#: fail2ban_manager.sh:273\nmsgid \"请输入日志路径\"\nmsgstr \"please enter the log path\"\n\n#: fail2ban_manager.sh:274\nmsgid \"请输入最大重试次数\"\nmsgstr \"please enter the maximum number of retries\"\n\n#: fail2ban_manager.sh:274\nmsgid \"最大重试次数必须在 1 到 99 之间\"\nmsgstr \"the maximum number of retries must be between 1 and 99\"\n\n#: fail2ban_manager.sh:275\nmsgid \"请输入封禁时间\"\nmsgstr \"please enter the ban time\"\n\n#: fail2ban_manager.sh:275\nmsgid \"秒\"\nmsgstr \"second\"\n\n#: fail2ban_manager.sh:275\nmsgid \"封禁时间必须在 1 到 8640000 秒之间\"\nmsgstr \"the ban duration must be between 1 and 8,640,000 seconds\"\n\n#: fail2ban_manager.sh:285\nmsgid \"自定义规则添加成功\"\nmsgstr \"custom rule added successfully\"\n\n#: fail2ban_manager.sh:289\nmsgid \"重启以应用新规则\"\nmsgstr \"restart to apply new rules\"\n\n#: fail2ban_manager.sh:294\nmsgid \"管理 Fail2ban 模块\"\nmsgstr \"manage the fail2ban module\"\n\n#: fail2ban_manager.sh:311\nmsgid \"未找到任何模块化配置文件\"\nmsgstr \"no modular configuration files were found\"\n\n#: fail2ban_manager.sh:319 fail2ban_manager.sh:339\nmsgid \"模块名称\"\nmsgstr \"module name\"\n\n#: fail2ban_manager.sh:339 file_manager.sh:59\nmsgid \"序号\"\nmsgstr \"serial number\"\n\n#: fail2ban_manager.sh:363\nmsgid \"请选择要管理的模块\"\nmsgstr \"please select the module you want to manage\"\n\n#: fail2ban_manager.sh:375\nmsgid \"启用\"\nmsgstr \"enable\"\n\n#: fail2ban_manager.sh:375\nmsgid \"禁用\"\nmsgstr \"disable\"\n\n#: fail2ban_manager.sh:378\nmsgid \"是否\"\nmsgstr \"whether… or not\"\n\n#: fail2ban_manager.sh:378 fail2ban_manager.sh:386\nmsgid \"模块\"\nmsgstr \"module\"\n\n#: fail2ban_manager.sh:388\nmsgid \"操作已取消\"\nmsgstr \"operation canceled\"\n\n#: fail2ban_manager.sh:424\nmsgid \"停止成功\"\nmsgstr \"stopped successfully\"\n\n#: fail2ban_manager.sh:444\nmsgid \"总体状态\"\nmsgstr \"overall status\"\n\n#: fail2ban_manager.sh:448\nmsgid \"默认启用的 Jail 状态\"\nmsgstr \"default enabled jail status\"\n\n#: fail2ban_manager.sh:452 fail2ban_manager.sh:458\nmsgid \"封锁情况\"\nmsgstr \"lockdown situation\"\n\n#: fail2ban_manager.sh:453 fail2ban_manager.sh:459 fail2ban_manager.sh:462\n#: fail2ban_manager.sh:466 fail2ban_manager.sh:469\nmsgid \"未启用或配置异常\"\nmsgstr \"not enabled or configuration exception\"\n\n#: fail2ban_manager.sh:484 file_manager.sh:232\nmsgid \"新版本可用\"\nmsgstr \"new version available\"\n\n#: fail2ban_manager.sh:484 file_manager.sh:232\nmsgid \"当前版本\"\nmsgstr \"current version\"\n\n#: fail2ban_manager.sh:485 file_manager.sh:233\nmsgid \"请访问\"\nmsgstr \"please visit\"\n\n#: fail2ban_manager.sh:485 file_manager.sh:233\nmsgid \"查看更新说明\"\nmsgstr \"view update notes\"\n\n#: fail2ban_manager.sh:487 file_manager.sh:235\nmsgid \"是否下载并安装新版本\"\nmsgstr \"do you want to download and install the new version\"\n\n#: fail2ban_manager.sh:491 file_manager.sh:239\nmsgid \"正在下载新版本\"\nmsgstr \"downloading the new version\"\n\n#: fail2ban_manager.sh:496 file_manager.sh:244\nmsgid \"下载完成, 请重新运行脚本\"\nmsgstr \"download completed, please run the script again\"\n\n#: fail2ban_manager.sh:504 file_manager.sh:252\nmsgid \"跳过更新\"\nmsgstr \"skip update\"\n\n#: fail2ban_manager.sh:508 file_manager.sh:256\nmsgid \"当前已经是最新版本\"\nmsgstr \"it is already the latest version\"\n\n#: file_manager.sh:7\nmsgid \"用法\"\nmsgstr \"usage\"\n\n#: file_manager.sh:7\nmsgid \"文件扩展名\"\nmsgstr \"file extension\"\n\n#: file_manager.sh:7\nmsgid \"目录路径\"\nmsgstr \"directory path\"\n\n#: file_manager.sh:16\nmsgid \"目录\"\nmsgstr \"table of contents\"\n\n#: file_manager.sh:16\nmsgid \"不存在, 请检查路径\"\nmsgstr \"does not exist, please check the path\"\n\n#: file_manager.sh:26 file_manager.sh:204\nmsgid \"列出所有\"\nmsgstr \"list all\"\n\n#: file_manager.sh:26 file_manager.sh:35 file_manager.sh:88 file_manager.sh:111\n#: file_manager.sh:160 file_manager.sh:176 file_manager.sh:204\n#: file_manager.sh:205 file_manager.sh:206 file_manager.sh:207\nmsgid \"文件\"\nmsgstr \"file\"\n\n#: file_manager.sh:53\nmsgid \"文件名\"\nmsgstr \"file name\"\n\n#: file_manager.sh:79\nmsgid \"请输入网址 (例如 hey.run)\"\nmsgstr \"please enter the url (e.g., hey.run)\"\n\n#: file_manager.sh:80\nmsgid \"不要包含 http:// 或 https:// 开头\"\nmsgstr \"do not include http:// or https:// at the beginning\"\n\n#: file_manager.sh:84\nmsgid \"网址不能包含 http:// 或 https:// 前缀\"\nmsgstr \"the url cannot contain the http:// or https:// prefix\"\n\n#: file_manager.sh:88 file_manager.sh:111\nmsgid \"已创建\"\nmsgstr \"created\"\n\n#: file_manager.sh:99\nmsgid \"请输入主机\"\nmsgstr \"please enter the host\"\n\n#: file_manager.sh:107\nmsgid \"请输入权重\"\nmsgstr \"please enter the weight\"\n\n#: file_manager.sh:128\nmsgid \"追加完成\"\nmsgstr \"additional completion\"\n\n#: file_manager.sh:132 file_manager.sh:136\nmsgid \"重启完成\"\nmsgstr \"restart completed\"\n\n#: file_manager.sh:151\nmsgid \"请输入要编辑的文件编号\"\nmsgstr \"please enter the file number to edit\"\n\n#: file_manager.sh:156\nmsgid \"未安装, 正在尝试安装\"\nmsgstr \"not installed, attempting to install\"\n\n#: file_manager.sh:160\nmsgid \"已编辑\"\nmsgstr \"edited\"\n\n#: file_manager.sh:171\nmsgid \"请输入要删除的文件编号\"\nmsgstr \"please enter the file number to delete\"\n\n#: file_manager.sh:194\nmsgid \"不支持的文件扩展名\"\nmsgstr \"unsupported file extension\"\n\n#: file_manager.sh:205\nmsgid \"创建一个新的\"\nmsgstr \"create a new\"\n\n#: file_manager.sh:206\nmsgid \"编辑一个已存在的\"\nmsgstr \"edit an existing\"\n\n#: file_manager.sh:207\nmsgid \"删除一个已存在的\"\nmsgstr \"delete an existing\"\n\n#: file_manager.sh:265\nmsgid \"重启成功\"\nmsgstr \"restart successful\"\n\n#: file_manager.sh:268\nmsgid \"重启失败\"\nmsgstr \"restart failed\"\n\n#: file_manager.sh:268\nmsgid \"请检查配置文件是否有误\"\nmsgstr \"please check if there is an error in the configuration file\"\n"
  },
  {
    "path": "po/fa.po",
    "content": "# Persian translations for xray_install package.\n# Copyright (C) 2026 yunshu\n# This file is distributed under the same license as the xray_install package.\n# Automatically generated, 2026.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: xray_install 1.0\\n\"\n\"Report-Msgid-Bugs-To: https://github.com/hello-yunshu/Xray_bash_onekey/\"\n\"issues\\n\"\n\"POT-Creation-Date: 2026-04-24 09:47+0000\\n\"\n\"PO-Revision-Date: 2026-04-24 09:47+0000\\n\"\n\"Last-Translator: Automatically generated\\n\"\n\"Language-Team: none\\n\"\n\"Language: fa\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\n#: install.sh:32\nmsgid \"信息\"\nmsgstr \"اطلاعات\"\n\n#: install.sh:34\nmsgid \"错误\"\nmsgstr \"اشتباه\"\n\n#: install.sh:35\nmsgid \"警告\"\nmsgstr \"هشدار\"\n\n#: install.sh:38 install.sh:1540 install.sh:3960 install.sh:3977\n#: install.sh:3980 install.sh:3981 install.sh:4019\nmsgid \"未安装\"\nmsgstr \"ننصب نشده است\"\n\n#: install.sh:99\nmsgid \"日志文件归档失败\"\nmsgstr \"ارشیو شدن فایل روزنامه با موفقیت انجام نشد\"\n\n#: install.sh:104\nmsgid \"日志文件清空失败\"\nmsgstr \"پاکسازی فایل روزنامه ناموفق بود\"\n\n#: install.sh:108\nmsgid \"日志文件已轮转并归档为\"\nmsgstr \"فایل روزنامه به صورت چرخشی و در فرمت آرشیو ذخیره شده است\"\n\n#: install.sh:134 install.sh:138 install.sh:142 install.sh:152\nmsgid \"当前系统为\"\nmsgstr \"سیستم فعلی عبارت است از\"\n\n#: install.sh:152\nmsgid \"不在支持的系统列表内, 安装中断\"\nmsgstr \"در لیست سیستم‌های پشتیبانی نیست، نصب متوقف شد\"\n\n#: install.sh:159\nmsgid \"当前用户是 root 用户, 开始安装\"\nmsgstr \"کاربر فعلی، کاربر روت است؛ نصب را شروع کنید\"\n\n#: install.sh:161\nmsgid \"当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本\"\nmsgstr \"کاربر فعلی روت نیست، لطفاً به کاربر روت تغییر مسیر دهید و سپس اسکریپت را دوباره اجرا کنید\"\n\n#: install.sh:187\nmsgid \"无法获取远程语言文件信息\"\nmsgstr \"نمی‌توان اطلاعات فایل زبان ریموت را به دست آورد\"\n\n#: install.sh:205\nmsgid \"正在更新语言文件\"\nmsgstr \"در حال به‌روزرسانی فایل‌های زبانی\"\n\n#: install.sh:208 install.sh:291\nmsgid \"语言文件更新失败\"\nmsgstr \"به‌روزرسانی فایل زبان با موفقیت انجام نشد\"\n\n#: install.sh:213\nmsgid \"语言文件无效\"\nmsgstr \"پرونده زبان نامعتبر است\"\n\n#: install.sh:219\nmsgid \"版本文件更新失败\"\nmsgstr \"بازرسی فایل نسخه شکست خورد\"\n\n#: install.sh:226\nmsgid \"语言文件更新完成\"\nmsgstr \"به‌روزرسانی فایل زبان به پایان رسید\"\n\n#: install.sh:231 install.sh:2725\nmsgid \"正在安装\"\nmsgstr \"در حال نصب\"\n\n#: install.sh:234\nmsgid \"安装失败\"\nmsgstr \"ناموفقیت نصب\"\n\n#: install.sh:234 install.sh:258 install.sh:281 install.sh:291\nmsgid \"将使用默认语言\"\nmsgstr \"از زبان پیش فرض استفاده خواهد شد\"\n\n#: install.sh:258 file_manager.sh:35\nmsgid \"未找到\"\nmsgstr \"پیدا نشد\"\n\n#: install.sh:281\nmsgid \"不支持的语言\"\nmsgstr \"زبان‌هایی که پشتیبانی نمی‌شوند\"\n\n#: install.sh:297\nmsgid \"发现语言文件更新\"\nmsgstr \"به‌روزرسانی فایل زبان کشف شد\"\n\n#: install.sh:312 install.sh:1740\nmsgid \"完成\"\nmsgstr \"کامل شدن\"\n\n#: install.sh:315\nmsgid \"失败\"\nmsgstr \"شکست\"\n\n#: install.sh:322\nmsgid \"在线版本检测失败, 请稍后再试\"\nmsgstr \"بررسی نسخه آنلاین با شکست مواجه شد، لطفاً بعداً دوباره تلاش کنید\"\n\n#: install.sh:344 install.sh:352 install.sh:1162 install.sh:3872\n#: install.sh:3873 install.sh:3874 install.sh:3875 install.sh:4206\n#: install.sh:4207 install.sh:4208 install.sh:4209 fail2ban_manager.sh:12\n#: fail2ban_manager.sh:39\nmsgid \"安装\"\nmsgstr \"نصب\"\n\n#: install.sh:346 install.sh:354 install.sh:1169 install.sh:2729\n#: install.sh:3969\nmsgid \"已安装\"\nmsgstr \"نصب شده\"\n\n#: install.sh:371 install.sh:375\nmsgid \"自启动配置\"\nmsgstr \"پیکربندی خودکار اجرا\"\n\n#: install.sh:384\nmsgid \"链接库安装\"\nmsgstr \"نصب کتابخانه لینک\"\n\n#: install.sh:389\nmsgid \"值为空或超出范围, 请重新输入\"\nmsgstr \"مقدار خالی یا خارج از محدوده است، لطفاً دوباره وارد کنید\"\n\n#: install.sh:398\nmsgid \"值为空, 请重新输入\"\nmsgstr \"مقدار خالی است، لطفاً دوباره وارد کنید\"\n\n#: install.sh:440\nmsgid \"确定端口\"\nmsgstr \"پورت را مشخص کنید\"\n\n#: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:104\nmsgid \"请输入端口\"\nmsgstr \"لطفاً پورت را وارد کنید\"\n\n#: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:107\nmsgid \"默认值\"\nmsgstr \"مقدار پیش فرض\"\n\n#: install.sh:441 install.sh:444 install.sh:532 install.sh:554 install.sh:3055\n#: install.sh:3060 install.sh:3065 install.sh:3066 install.sh:3081\n#: install.sh:3086 install.sh:3091 install.sh:3092\nmsgid \"请输入 0-65535 之间的值\"\nmsgstr \"لطفاً مقداری بین ۰ تا ۶۵۵۳۵ را وارد کنید\"\n\n#: install.sh:443\nmsgid \"端口不允许使用, 请重新输入\"\nmsgstr \"پورت مجاز نیست، لطفاً دوباره وارد کنید\"\n\n#: install.sh:452\nmsgid \"请选择安装协议\"\nmsgstr \"لطفاً توافق نامه نصب را انتخاب کنید\"\n\n#: install.sh:453 install.sh:1617 install.sh:1654 install.sh:1705\n#: install.sh:2997 install.sh:3142 install.sh:3209 install.sh:3256\n#: fail2ban_manager.sh:274 fail2ban_manager.sh:275\nmsgid \"默认\"\nmsgstr \"پیش فرض\"\n\n#: install.sh:457 install.sh:532 install.sh:554 install.sh:635 install.sh:668\n#: install.sh:821 install.sh:840 install.sh:881 install.sh:922 install.sh:1621\n#: install.sh:1634 install.sh:1656 install.sh:1709 install.sh:1719\n#: install.sh:2985 install.sh:3000 install.sh:3055 install.sh:3060\n#: install.sh:3065 install.sh:3066 install.sh:3081 install.sh:3086\n#: install.sh:3091 install.sh:3092 install.sh:3145 install.sh:3154\n#: install.sh:3212 install.sh:3259 install.sh:3268 fail2ban_manager.sh:215\n#: fail2ban_manager.sh:234 fail2ban_manager.sh:272 file_manager.sh:81\nmsgid \"请输入\"\nmsgstr \"لطفاً وارد کنید\"\n\n#: install.sh:457 install.sh:922 install.sh:1621 install.sh:1656\n#: install.sh:1709 install.sh:2985 install.sh:3000 install.sh:3145\n#: install.sh:3212 install.sh:3259 install.sh:4251 install.sh:4489\nmsgid \"请输入有效的数字\"\nmsgstr \"لطفاً عدد معتبری وارد کنید\"\n\n#: install.sh:478\nmsgid \"是否添加简单 ws/gRPC 协议 用于负载均衡\"\nmsgstr \"آیا برای تعادل بار، پروتکل ws/grpc ساده اضافه می‌شود؟\"\n\n#: install.sh:479 install.sh:1259\nmsgid \"如不清楚具体用途, 请勿选择\"\nmsgstr \"اگر کاربرد دقیق آن را نمی‌دانید، لطفاً انتخاب نکنید\"\n\n#: install.sh:499\nmsgid \"已跳过添加简单 ws/gRPC 协议\"\nmsgstr \"اضافه کردن پروتکل‌های ساده ws/grpc رد شد\"\n\n#: install.sh:528 install.sh:550 install.sh:631 install.sh:648 install.sh:664\n#: install.sh:681 install.sh:696 install.sh:815 install.sh:836 install.sh:877\nmsgid \"是否需要自定义\"\nmsgstr \"آیا نیاز به سفارشی‌سازی دارید؟\"\n\n#: install.sh:532 install.sh:554\nmsgid \"请勿与其他端口相同\"\nmsgstr \"لطفاً با سایر پورت‌ها یکسان نباشد\"\n\n#: install.sh:571 file_manager.sh:114\nmsgid \"是否需要设置防火墙\"\nmsgstr \"آیا نیاز به تنظیم فایروال دارید؟\"\n\n#: install.sh:611 install.sh:615 file_manager.sh:128 file_manager.sh:132\n#: file_manager.sh:136\nmsgid \"防火墙\"\nmsgstr \"دیوار آتش\"\n\n#: install.sh:611 install.sh:615 install.sh:2215 install.sh:2218\n#: install.sh:3012 install.sh:3014 install.sh:4227 fail2ban_manager.sh:231\n#: fail2ban_manager.sh:432\nmsgid \"重启\"\nmsgstr \"بازنشانی\"\n\n#: install.sh:617\nmsgid \"开放防火墙相关端口\"\nmsgstr \"پورت‌های مرتبط با فایروال را باز کنید\"\n\n#: install.sh:618\nmsgid \"若修改配置, 请注意关闭防火墙相关端口\"\nmsgstr \"اگر تنظیمات را تغییر می‌دهید، لطفاً پورت‌های مربوط به فایروال را ببندید\"\n\n#: install.sh:619 install.sh:3877 install.sh:3892 install.sh:3893\n#: install.sh:4216 install.sh:4236 fail2ban_manager.sh:161\nmsgid \"配置\"\nmsgstr \"تنظیم\"\n\n#: install.sh:622 file_manager.sh:140\nmsgid \"跳过防火墙设置\"\nmsgstr \"پرش از تنظیمات فایروال\"\n\n#: install.sh:631 install.sh:635 install.sh:636 install.sh:640 install.sh:648\n#: install.sh:664 install.sh:668 install.sh:669 install.sh:673 install.sh:681\n#: install.sh:1101\nmsgid \"伪装路径\"\nmsgstr \"مسیر مخفی\"\n\n#: install.sh:635 install.sh:668\nmsgid \"不需要\"\nmsgstr \"نیاز نیست\"\n\n#: install.sh:696 install.sh:706 install.sh:3172\nmsgid \"用户名\"\nmsgstr \"نام کاربر\"\n\n#: install.sh:700\nmsgid \"请输入正确的 email\"\nmsgstr \"لطفاً ایمیل صحیح را وارد کنید\"\n\n#: install.sh:713\nmsgid \"是否需要自定义字符串映射\"\nmsgstr \"آیا نیاز به تطبیق رشته‌های کاربری دارد؟\"\n\n#: install.sh:717\nmsgid \"请输入自定义字符串\"\nmsgstr \"لطفاً رشته کاربری را وارد کنید\"\n\n#: install.sh:717\nmsgid \"最多30字符\"\nmsgstr \"حداکثر ۳۰ حرف\"\n\n#: install.sh:719\nmsgid \"自定义字符串\"\nmsgstr \"رشته کاربری\"\n\n#: install.sh:726 install.sh:2836 install.sh:3895 install.sh:4211\n#: install.sh:4314\nmsgid \"映射字符串\"\nmsgstr \"رشته متنابه\"\n\n#: install.sh:737\nmsgid \"检测到 target 域名已配置, 是否保留\"\nmsgstr \"نام دامنه هدف که قبلاً تنظیم شده را تشخیص داده‌ایم، آیا می‌خواهید حفظ کنید؟\"\n\n#: install.sh:757\nmsgid \"请输入一个域名\"\nmsgstr \"لطفاً یک نام دامنه وارد کنید\"\n\n#: install.sh:758\nmsgid \"域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用\"\nmsgstr \"نام دامنه باید از tlsv1.3، x25519 و h2 پشتیبانی کند و نباید جابجایی داشته باشد\"\n\n#: install.sh:759\nmsgid \"确认域名符合要求后请输入\"\nmsgstr \"بعد از تأیید مطابقت نام دامنه با شرایط، وارد کنید\"\n\n#: install.sh:760\nmsgid \"正在检测域名请等待\"\nmsgstr \"در حال بررسی نام دامنه است، لطفاً صبر کنید\"\n\n#: install.sh:767 install.sh:772 install.sh:777\nmsgid \"该域名不支持\"\nmsgstr \"این نام دامنه پشتیبانی نمی‌شود\"\n\n#: install.sh:782\nmsgid \"该域名发生了跳转\"\nmsgstr \"این نام دامنه به جایی منتقل شده است\"\n\n#: install.sh:789\nmsgid \"该域名可能不满足所有要求\"\nmsgstr \"این نام دامنه ممکن است به تمامی شرایط را برآورده نکند\"\n\n#: install.sh:790\nmsgid \"是否仍要设置此域名\"\nmsgstr \"آیا هنوز می‌خواهید این نام دامنه را تنظیم کنید؟\"\n\n#: install.sh:802 install.sh:807 install.sh:1619\nmsgid \"域名\"\nmsgstr \"نام دامنه\"\n\n#: install.sh:802\nmsgid \"满足所有要求\"\nmsgstr \"همه‌ی شرایط را برآورده کند\"\n\n#: install.sh:815\nmsgid \"域名的\"\nmsgstr \"دومین نام\"\n\n#: install.sh:816\nmsgid \"默认为\"\nmsgstr \"پیش فرض به\"\n\n#: install.sh:816\nmsgid \"域名本身\"\nmsgstr \"خود نام دامنه\"\n\n#: install.sh:817 install.sh:912 install.sh:952\nmsgid \"如不清楚具体用途, 请勿继续\"\nmsgstr \"اگر کاربرد دقیق آن را نمی‌دانید، لطفاً ادامه ندهید\"\n\n#: install.sh:898\nmsgid \"本地文件 file_manager.sh 不存在, 正在下载\"\nmsgstr \"پرونده محلی file_manager.sh وجود ندارد، در حال دانلود است\"\n\n#: install.sh:900 install.sh:2330 fail2ban_manager.sh:500 file_manager.sh:248\nmsgid \"下载失败, 请手动下载并安装新版本\"\nmsgstr \"دانلود ناموفق بود، لطفاً نسخه جدید را به صورت دستی دانلود و نصب کنید\"\n\n#: install.sh:911 install.sh:951\nmsgid \"是否变更\"\nmsgstr \"آیا تغییر می‌کند\"\n\n#: install.sh:911\nmsgid \"负载均衡\"\nmsgstr \"تعادل بار\"\n\n#: install.sh:917\nmsgid \"请选择协议为 ws 或 gRPC\"\nmsgstr \"لطفاً پروتکل را به عنوان ws یا grpc انتخاب کنید\"\n\n#: install.sh:920 fail2ban_manager.sh:213 fail2ban_manager.sh:232\n#: fail2ban_manager.sh:325 fail2ban_manager.sh:357\nmsgid \"返回\"\nmsgstr \"بازگشت\"\n\n#: install.sh:930 file_manager.sh:220\nmsgid \"无效选项, 请重试\"\nmsgstr \"گزینه نامعتبر، لطفاً دوباره تلاش کنید\"\n\n#: install.sh:940 install.sh:964 install.sh:2266 install.sh:2304\n#: install.sh:2320\nmsgid \"当前模式不支持此操作\"\nmsgstr \"این روش در حالت فعلی پشتیبانی نمی‌شود\"\n\n#: install.sh:953\nmsgid \"配置用途可以参考文章\"\nmsgstr \"برای استفاده از تنظیمات می‌توان به مقاله مراجعه کرد\"\n\n#: install.sh:980 install.sh:991 install.sh:995 install.sh:999 install.sh:1011\n#: install.sh:1016 install.sh:1020 install.sh:1025 install.sh:1045\n#: install.sh:1051 install.sh:1101 install.sh:1120 install.sh:3893\n#: install.sh:4177\nmsgid \"修改\"\nmsgstr \"ویرایش کردن\"\n\n#: install.sh:1053 install.sh:2816 install.sh:2818 install.sh:2820\n#: install.sh:2821 install.sh:2824 install.sh:2828 install.sh:2830\n#: install.sh:2832 install.sh:2833 install.sh:2861 install.sh:2864\n#: install.sh:2867 install.sh:2869 install.sh:3049\nmsgid \"端口\"\nmsgstr \"پورت\"\n\n#: install.sh:1103\nmsgid \"不支持\"\nmsgstr \"پشتیبانی نمی‌شود\"\n\n#: install.sh:1110\nmsgid \"用户名修改\"\nmsgstr \"تغییر نام کاربر\"\n\n#: install.sh:1113 install.sh:1123\nmsgid \"请先删除多余的用户\"\nmsgstr \"لطفاً ابتدا کاربران اضافی را حذف کنید\"\n\n#: install.sh:1131 install.sh:1139 install.sh:1146 install.sh:1990\n#: install.sh:2061 install.sh:2146 install.sh:2154 install.sh:2163\n#: install.sh:2186\nmsgid \"配置修改\"\nmsgstr \"تغییر تنظیمات\"\n\n#: install.sh:1151\nmsgid \"检测到 Xray 的权限控制, 启动修改程序\"\nmsgstr \"اجازه‌های کنترل xray شناسایی شد، برنامه تغییرات را شروع کنید\"\n\n#: install.sh:1156\nmsgid \"修改完成\"\nmsgstr \"تغییرات انجام شد\"\n\n#: install.sh:1176\nmsgid \"若更新无效, 建议直接卸载再安装\"\nmsgstr \"اگر به‌روزرسانی نتیجه‌ای نداشت، پیشنهاد می‌شود مستقیماً از بین ببرید و دوباره نصب کنید\"\n\n#: install.sh:1177\nmsgid \"部分新功能需要重新安装才可生效\"\nmsgstr \"برخی از ویژگی‌های جدید نیاز به نصب مجدد دارند تا فعال شوند\"\n\n#: install.sh:1182\nmsgid \"检测到存在最新版\"\nmsgstr \"نسخه جدیدتری شناسایی شده است\"\n\n#: install.sh:1183\nmsgid \"脚本可能未兼容此版本\"\nmsgstr \"اسکریپت ممکن است با این نسخه سازگار نباشد\"\n\n#: install.sh:1184\nmsgid \"是否更新\"\nmsgstr \"آیا به‌روزرسانی می‌شود\"\n\n#: install.sh:1188 install.sh:1213 install.sh:1532 install.sh:3886\n#: install.sh:3898 install.sh:4195 install.sh:4196 install.sh:4197\n#: install.sh:4233\nmsgid \"更新\"\nmsgstr \"به‌روزرسانی\"\n\n#: install.sh:1192 install.sh:1494\nmsgid \"启动失败\"\nmsgstr \"شروع ناموفق\"\n\n#: install.sh:1193 install.sh:1497\nmsgid \"是否回滚到之前的版本\"\nmsgstr \"آیا به نسخه قبلی بازگردانده می‌شود؟\"\n\n#: install.sh:1197 install.sh:1507\nmsgid \"未执行回滚操作\"\nmsgstr \"عملکرد برگشت انجام نشده است\"\n\n#: install.sh:1201 install.sh:1511\nmsgid \"正在回滚\"\nmsgstr \"در حال بازگرداندن\"\n\n#: install.sh:1205 install.sh:1518\nmsgid \"已成功回滚到之前的\"\nmsgstr \"به موفقیت به نسخه قبل بازگردانده شد\"\n\n#: install.sh:1205 install.sh:1518 install.sh:4214 install.sh:4329\nmsgid \"版本\"\nmsgstr \"نسخه\"\n\n#: install.sh:1207 install.sh:1228 install.sh:1524\nmsgid \"回滚失败\"\nmsgstr \"بازگرداندن شکست خورد\"\n\n#: install.sh:1234 install.sh:1238\nmsgid \"重装\"\nmsgstr \"بازسازی\"\n\n#: install.sh:1248 install.sh:1249\nmsgid \"更新失败\"\nmsgstr \"به‌روزرسانی ناموفق بود\"\n\n#: install.sh:1257\nmsgid \"是否添加 Reality 负载均衡\"\nmsgstr \"آیا بارگیری واقعی اضافه شود\"\n\n#: install.sh:1258\nmsgid \"使用此功能前，建议先阅读作者教程\"\nmsgstr \"قبل از استفاده از این ویژگی، توصیه می‌شود که آموزش نویسنده را بخوانید\"\n\n#: install.sh:1264 fail2ban_manager.sh:93 fail2ban_manager.sh:103\n#: fail2ban_manager.sh:128 fail2ban_manager.sh:154 fail2ban_manager.sh:347\nmsgid \"已启用\"\nmsgstr \"فعال شده است\"\n\n#: install.sh:1268\nmsgid \"已跳过\"\nmsgstr \"پرش شده است\"\n\n#: install.sh:1277\nmsgid \"Reality 协议有流量偷跑的风险\"\nmsgstr \"پروتکل ریالیتی خطر دارد که ترافیک از آن خارج شود\"\n\n#: install.sh:1279 install.sh:1306\nmsgid \"是否额外安装 nginx 前置保护\"\nmsgstr \"آیا نگهدارنده nginx اضافه می‌شود؟\"\n\n#: install.sh:1279\nmsgid \"推荐\"\nmsgstr \"توصیه شده\"\n\n#: install.sh:1286 install.sh:1321\nmsgid \"检测到已安装\"\nmsgstr \"نرم‌افزار نصب شده شناسایی شد\"\n\n#: install.sh:1289 install.sh:1324\nmsgid \"已跳过安装\"\nmsgstr \"نصب را رد کرده‌اید\"\n\n#: install.sh:1303\nmsgid \"检测到已开启 Reality 负载均衡\"\nmsgstr \"تعادل بار realiti فعال شده است\"\n\n#: install.sh:1304\nmsgid \"如用作 Reality 负载均衡主服务器必须安装\"\nmsgstr \"اگر به عنوان سرور اصلی تعادل بار reality استفاده شود، باید نصب شود\"\n\n#: install.sh:1305\nmsgid \"如用作 Reality 负载均衡二级服务器则无需安装\"\nmsgstr \"اگر به عنوان سرور دوم بارگیری کننده واقعیت استفاده شود، نصب لازم نیست\"\n\n#: install.sh:1349\nmsgid \"已存在, 跳过编译安装过程\"\nmsgstr \"قبلاً وجود دارد، فرآیند کامپایل و نصب را رد کنید\"\n\n#: install.sh:1351\nmsgid \"检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装\"\nmsgstr \"نگین‌کس نصب شده توسط مجموعه دیگر را تشخیص داده است، ادامه نصب باعث درگیری خواهد شد، لطفاً پس از حل مشکل، نصب کنید\"\n\n#: install.sh:1364\nmsgid \"即将下载已编译的\"\nmsgstr \"به زودی دانلود شده‌است\"\n\n#: install.sh:1374\nmsgid \"不支持的系统架构\"\nmsgstr \"ساختار سیستم پشتیبانی نشده است\"\n\n#: install.sh:1383\nmsgid \"下载失败\"\nmsgstr \"دریافت ناموفق است\"\n\n#: install.sh:1387\nmsgid \"下载成功\"\nmsgstr \"دانلود با موفقیت انجام شد\"\n\n#: install.sh:1390\nmsgid \"解压失败\"\nmsgstr \"بازکردن فایل ناموفق بود\"\n\n#: install.sh:1438 install.sh:1439 install.sh:1446 install.sh:1447\nmsgid \"配置不完整, 退出更新\"\nmsgstr \"پیکربندی ناقص است، به‌روزرسانی را ترک کنید\"\n\n#: install.sh:1451 install.sh:1452\nmsgid \"当前安装模式不需要\"\nmsgstr \"حالت فعلی نصب نیاز به آن ندارد\"\n\n#: install.sh:1456 install.sh:1457\nmsgid \"配置不存在, 退出更新\"\nmsgstr \"پیکربندی موجود نیست، به‌روزرسانی را ترک کنید\"\n\n#: install.sh:1463\nmsgid \"备份旧版\"\nmsgstr \"نسخه قدیمی را ذخیره کنید\"\n\n#: install.sh:1464\nmsgid \"删除旧版\"\nmsgstr \"نسخه قدیم را حذف کنید\"\n\n#: install.sh:1468\nmsgid \"是否保留原 Nginx 配置文件\"\nmsgstr \"آیا فایل تنظیمات اصلی nginx را حفظ کنید؟\"\n\n#: install.sh:1476 install.sh:1809\nmsgid \"原配置文件已删除\"\nmsgstr \"پرونده تنظیمات اصلی حذف شده است\"\n\n#: install.sh:1480\nmsgid \"原配置文件已保留\"\nmsgstr \"پرونده تنظیمات اصلی نگهداری شده است\"\n\n#: install.sh:1534 install.sh:4220\nmsgid \"删除\"\nmsgstr \"حذف کردن\"\n\n#: install.sh:1534 install.sh:4243\nmsgid \"备份\"\nmsgstr \"پشتیبان‌گیری\"\n\n#: install.sh:1537\nmsgid \"已为最新版\"\nmsgstr \"برای نسخه جدیدترین آماده شده است\"\n\n#: install.sh:1553\nmsgid \"设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)\"\nmsgstr \"تنظیم برنامه‌های خودکار به‌روزرسانی پس‌زمینه (شامل: اسکریپت/xray/nginx)\"\n\n#: install.sh:1554\nmsgid \"可能自动更新后有兼容问题, 谨慎启用\"\nmsgstr \"ممکن است پس از به‌روزرسانی خودکار مشکلات سازگاری وجود داشته باشد؛ لطفاً با احتیاط فعال کنید\"\n\n#: install.sh:1555 fail2ban_manager.sh:120 fail2ban_manager.sh:146\nmsgid \"是否启用\"\nmsgstr \"فعال‌سازی شود؟\"\n\n#: install.sh:1561 install.sh:3878\nmsgid \"设置自动更新\"\nmsgstr \"تنظیم به‌روزرسانی خودکار\"\n\n#: install.sh:1566\nmsgid \"已设置自动更新\"\nmsgstr \"به‌روزرسانی خودکار تنظیم شده است\"\n\n#: install.sh:1567\nmsgid \"是否关闭\"\nmsgstr \"آیا بسته شود\"\n\n#: install.sh:1573\nmsgid \"删除自动更新\"\nmsgstr \"به‌روزرسانی خودکار را حذف کنید\"\n\n#: install.sh:1582\nmsgid \"安装 SSL 证书生成脚本依赖\"\nmsgstr \"نصب وابستگی‌های اسکریپت تولید گواهینامه ssl\"\n\n#: install.sh:1584\nmsgid \"安装 SSL 证书生成脚本\"\nmsgstr \"نصب اسکریپت تولید گواهینامه ssl\"\n\n#: install.sh:1590\nmsgid \"检测到原域名配置存在, 是否跳过域名设置\"\nmsgstr \"تنظیمات دامنه اصلی قبلی شناسایی شده است، آیا تنظیمات دامنه را رد کنید؟\"\n\n#: install.sh:1605 install.sh:1642 install.sh:1693 install.sh:1726\nmsgid \"无法获取公网IP地址\"\nmsgstr \"نمی‌توان آدرس ip عمومی را بدست آورد\"\n\n#: install.sh:1605 install.sh:1642 install.sh:1665 install.sh:1693\n#: install.sh:1726\nmsgid \"安装终止\"\nmsgstr \"نصب متوقف شد\"\n\n#: install.sh:1608\nmsgid \"已跳过域名设置\"\nmsgstr \"تنظیمات دامنه رد شد\"\n\n#: install.sh:1614\nmsgid \"确定域名信息\"\nmsgstr \"اطلاعات دامنه را تأیید کنید\"\n\n#: install.sh:1615\nmsgid \"请输入你的域名信息\"\nmsgstr \"لطفاً اطلاعات دامنه خود را وارد کنید\"\n\n#: install.sh:1616\nmsgid \"请选择公网IP(IPv4/IPv6)或手动输入域名\"\nmsgstr \"لطفاً ip عمومی (ipv4/ipv6) را انتخاب کنید یا نام دامنه را به صورت دستی وارد کنید\"\n\n#: install.sh:1622 install.sh:1711\nmsgid \"正在获取公网IP信息, 请耐心等待\"\nmsgstr \"دارد اطلاعات آی‌پی عمومی را دریافت می‌کند، لطفاً صبر کنید\"\n\n#: install.sh:1632\nmsgid \"此选项用于服务器商仅提供域名访问服务器\"\nmsgstr \"این گزینه برای سرویس‌دهندگانی است که تنها دسترسی به سرور با نام دامنه را فراهم می‌کنند\"\n\n#: install.sh:1633\nmsgid \"注意服务器商域名添加 CNAME 记录\"\nmsgstr \"توجه داشته باشید که شرکت سرور، رکورد cname را به نام دامنه اضافه کند\"\n\n#: install.sh:1645\nmsgid \"域名DNS解析IP\"\nmsgstr \"dns نام دامنه به آدرس ip تبدیل می‌شود\"\n\n#: install.sh:1646 install.sh:1729\nmsgid \"公网IP/域名\"\nmsgstr \"آی‌پی عمومی/نام دامنه\"\n\n#: install.sh:1648\nmsgid \"域名DNS解析IP与公网IP匹配\"\nmsgstr \"dns نام دامنه با ip عمومی مطابقت دارد\"\n\n#: install.sh:1650\nmsgid \"请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray\"\nmsgstr \"لطفاً مطمئن شوید که رکورد a/aaaa درست به نام دامنه اضافه شده است، در غیر این صورت xray قابلیت استفاده صحیح نخواهد داشت\"\n\n#: install.sh:1651\nmsgid \"域名DNS解析IP与公网IP不匹配, 请选择\"\nmsgstr \"dns تحلیل نام دامنه ip با ip عمومی مطابقت ندارد، لطفاً انتخاب کنید\"\n\n#: install.sh:1652 install.sh:1659\nmsgid \"继续安装\"\nmsgstr \"نصب را ادامه دهید\"\n\n#: install.sh:1653\nmsgid \"重新输入\"\nmsgstr \"دوباره وارد کنید\"\n\n#: install.sh:1654\nmsgid \"终止安装\"\nmsgstr \"نصب را متوقف کنید\"\n\n#: install.sh:1676\nmsgid \"检测到原IP配置存在, 是否跳过IP设置\"\nmsgstr \"پیکربندی ip اصلی شناسایی شد، آیا می‌خواهید از تنظیمات ip گذشته شوید؟\"\n\n#: install.sh:1697\nmsgid \"已跳过IP设置\"\nmsgstr \"تنظیمات ip پرشده شد\"\n\n#: install.sh:1703\nmsgid \"确定公网IP信息\"\nmsgstr \"اطلاعات ip عمومی را مشخص کنید\"\n\n#: install.sh:1704\nmsgid \"请选择公网IP为IPv4或IPv6\"\nmsgstr \"لطفاً ip عمومی را به عنوان ipv4 یا ipv6 انتخاب کنید\"\n\n#: install.sh:1707\nmsgid \"手动输入\"\nmsgstr \"ورود دستی\"\n\n#: install.sh:1734\nmsgid \"端口未被占用\"\nmsgstr \"پورت اشغال نشده است\"\n\n#: install.sh:1736\nmsgid \"检测到\"\nmsgstr \"شنیده شد\"\n\n#: install.sh:1736\nmsgid \"端口被占用\"\nmsgstr \"پورت در حال استفاده است\"\n\n#: install.sh:1736\nmsgid \"以下为\"\nmsgstr \"زیرا در\"\n\n#: install.sh:1736\nmsgid \"端口占用信息\"\nmsgstr \"اطلاعات استفاده از پورت\"\n\n#: install.sh:1738\nmsgid \"尝试终止占用的进程\"\nmsgstr \"تلاش برای متوقف کردن فرآیندی که در حال استفاده است\"\n\n#: install.sh:1749\nmsgid \"证书测试签发成功, 开始正式签发\"\nmsgstr \"ثبت شناسنامه با موفقیت انجام شد، شروع به صدور رسمی\"\n\n#: install.sh:1752\nmsgid \"证书测试签发失败\"\nmsgstr \"امکان ارسال گواهینامه آزمایشی وجود ندارد\"\n\n#: install.sh:1759\nmsgid \"证书生成成功\"\nmsgstr \"تصدیق تولید شد\"\n\n#: install.sh:1765\nmsgid \"证书配置成功\"\nmsgstr \"تنظیمات گواهینامه با موفقیت انجام شد\"\n\n#: install.sh:1769\nmsgid \"证书生成失败\"\nmsgstr \"ناموفقیت در تولید گواهینامه\"\n\n#: install.sh:1801\nmsgid \"检测到 Xray 配置过多用户\"\nmsgstr \"کشف شد که تنظیمات xray از تعداد بیش از حد کاربران استفاده می‌کنند\"\n\n#: install.sh:1802\nmsgid \"是否保留原 Xray 配置文件\"\nmsgstr \"آیا پرونده تنظیمات اصلی xray را حفظ کنید؟\"\n\n#: install.sh:1822\nmsgid \"添加简单 ws/gRPC 协议\"\nmsgstr \"افزودن پروتکل‌های ساده ws/grpc\"\n\n#: install.sh:1837\nmsgid \"检测到配置文件, 是否读取配置文件\"\nmsgstr \"پرونده تنظیمات شناسایی شد، آیا می‌خواهید پرونده تنظیمات را بخوانید؟\"\n\n#: install.sh:1842 install.sh:1863 install.sh:1961 install.sh:3430\nmsgid \"已删除配置文件\"\nmsgstr \"پروفایل حذف شده\"\n\n#: install.sh:1845 install.sh:1858 install.sh:1956 install.sh:3426\nmsgid \"已保留配置文件\"\nmsgstr \"پروفایل ذخیره شده است\"\n\n#: install.sh:1852\nmsgid \"检测到当前安装模式与配置文件的安装模式不一致\"\nmsgstr \"مشاهده شد که حالت نصب فعلی با حالت نصب فایل پیکربندی مطابقت ندارد\"\n\n#: install.sh:1853\nmsgid \"是否保留配置文件 (强烈不建议)\"\nmsgstr \"آیا فایل پیکربندی را حفظ کنید (به شدت توصیه نمی‌شود)\"\n\n#: install.sh:1857\nmsgid \"请务必确保配置文件正确\"\nmsgstr \"لطفاً حتماً مطمئن شوید که فایل پیکربندی درست است\"\n\n#: install.sh:1951\nmsgid \"检测到配置文件不完整, 是否保留配置文件\"\nmsgstr \"پرونده تنظیمات ناقص شناسایی شد، آیا می‌خواهید پرونده تنظیمات را حفظ کنید؟\"\n\n#: install.sh:2170\nmsgid \"配置删除\"\nmsgstr \"پاک کردن تنظیمات\"\n\n#: install.sh:2191\nmsgid \"设置 Nginx 开机自启\"\nmsgstr \"تنظیم اتوماتیک شروع nginx در هنگام روشن شدن سیستم\"\n\n#: install.sh:2194 install.sh:4234 install.sh:4237 install.sh:4238\n#: install.sh:4239 fail2ban_manager.sh:10\nmsgid \"设置\"\nmsgstr \"تنظیمات\"\n\n#: install.sh:2194 install.sh:2202\nmsgid \"开机自启\"\nmsgstr \"روشن شدن خودکار\"\n\n#: install.sh:2199\nmsgid \"关闭 Nginx 开机自启\"\nmsgstr \"nginx را در زمان روشن شدن خودکار غیرفعال کنید\"\n\n#: install.sh:2202\nmsgid \"关闭\"\nmsgstr \"بستن\"\n\n#: install.sh:2209 install.sh:2231 install.sh:2234 install.sh:2294\n#: install.sh:4229 fail2ban_manager.sh:230\nmsgid \"停止\"\nmsgstr \"متوقف شوید\"\n\n#: install.sh:2223 install.sh:2226 install.sh:2761 install.sh:4228\n#: fail2ban_manager.sh:229 fail2ban_manager.sh:398\nmsgid \"启动\"\nmsgstr \"شروع کردن\"\n\n#: install.sh:2247 install.sh:2263\nmsgid \"新版本已自动设置证书自动更新\"\nmsgstr \"نسخه جدید به طور خودکار تنظیم شده است تا گواهینامه‌ها را به صورت خودکار به روزرسانی کند\"\n\n#: install.sh:2248\nmsgid \"老版本请及时删除 废弃的 改版证书自动更新\"\nmsgstr \"نسخه قدیمی را به موقع حذف کنید، گواهینامه‌های منسوخ شده به صورت خودکار به روز می‌شوند\"\n\n#: install.sh:2249\nmsgid \"已设置改版证书自动更新\"\nmsgstr \"به‌روزرسانی خودکار گواهینامه‌های بازطراحی شده تنظیم شده است\"\n\n#: install.sh:2250\nmsgid \"是否需要删除改版证书自动更新 (请删除)\"\nmsgstr \"آیا نیاز است که به‌روزرسانی خودکار گواهینامه بازطراحی شده حذف شود (لطفاً حذف کنید)\"\n\n#: install.sh:2257\nmsgid \"删除改版证书自动更新\"\nmsgstr \"حذف اتوماتیک به روزرسانی گواهینامه بازطراحی شده\"\n\n#: install.sh:2281\nmsgid \"已过期\"\nmsgstr \"منقضی شده است\"\n\n#: install.sh:2283\nmsgid \"证书生成日期\"\nmsgstr \"تاریخ تولید گواهینامه\"\n\n#: install.sh:2284\nmsgid \"证书生成天数\"\nmsgstr \"روزهای تولید گواهینامه\"\n\n#: install.sh:2285\nmsgid \"证书剩余天数\"\nmsgstr \"روز‌های باقی‌مانده گواهینامه\"\n\n#: install.sh:2289\nmsgid \"是否立即更新证书\"\nmsgstr \"آیا شناسنامه بلافاصله به روزرسانی می‌شود؟\"\n\n#: install.sh:2301 install.sh:2313\nmsgid \"证书签发工具不存在, 请确认是否证书为脚本签发\"\nmsgstr \"ابزار امضا کردن گواهینامه وجود ندارد، لطفاً تأیید کنید که آیا گواهینامه با اسکریپت امضا شده است\"\n\n#: install.sh:2317\nmsgid \"证书更新\"\nmsgstr \"به‌روزرسانی گواهینامه\"\n\n#: install.sh:2327\nmsgid \"本地文件 fail2ban_manager.sh 不存在, 正在下载\"\nmsgstr \"پرونده محلی fail2ban_manager.sh وجود ندارد، در حال دانلود است\"\n\n#: install.sh:2342\nmsgid \"是否需要设置自动清理日志\"\nmsgstr \"آیا نیاز به تنظیم خودکار پاک کردن روزنامه‌ها وجود دارد؟\"\n\n#: install.sh:2346\nmsgid \"已跳过设置自动清理日志\"\nmsgstr \"تنظیمات پاکسازی خودکار روزنامه‌ها نادیده گرفته شده است\"\n\n#: install.sh:2349\nmsgid \"将在 每周三 04:00 自动清空日志\"\nmsgstr \"روزانه در هر چهارشنبه ساعت 04:00 صبح خودکار روزنامه پاک می‌شود\"\n\n#: install.sh:2354\nmsgid \"已设置自动清理日志任务\"\nmsgstr \"وظیفه خودکار پاکسازی روزنامه‌ها تنظیم شده است\"\n\n#: install.sh:2355\nmsgid \"是否需要删除现有自动清理日志任务\"\nmsgstr \"آیا نیاز به حذف وظیفه پاکسازی خودکار روزنامه فعلی وجود دارد؟\"\n\n#: install.sh:2360\nmsgid \"删除自动清理日志任务\"\nmsgstr \"وظیفه خودکار حذف روزنامه‌ها را حذف کنید\"\n\n#: install.sh:2363\nmsgid \"保留现有自动清理日志任务\"\nmsgstr \"ماموریت پاکسازی خودکار روزنامه‌ها را حفظ کنید\"\n\n#: install.sh:2378\nmsgid \"设置自动清理日志\"\nmsgstr \"تنظیم خودکار پاک کردن روزنامه‌ها\"\n\n#: install.sh:2385\nmsgid \"检测到日志文件大小如下:\"\nmsgstr \"اندازه فایل روزنامه به شرح زیر تشخیص داده شد\"\n\n#: install.sh:2387\nmsgid \"即将清除\"\nmsgstr \"به زودی پاک می‌شود\"\n\n#: install.sh:2389\nmsgid \"日志清理\"\nmsgstr \"پاکسازی روزنامه\"\n\n#: install.sh:2663\nmsgid \"链接分享\"\nmsgstr \"به اشتراک گذاری پیوند\"\n\n#: install.sh:2665 install.sh:2671 install.sh:2676 install.sh:2681\n#: install.sh:2685 install.sh:3183\nmsgid \"分享链接\"\nmsgstr \"لینک اشتراک\"\n\n#: install.sh:2666 install.sh:2672 install.sh:2677 install.sh:2682\n#: install.sh:2686\nmsgid \"二维码\"\nmsgstr \"کد qr\"\n\n#: install.sh:2692 install.sh:2693\nmsgid \"配置分享\"\nmsgstr \"به اشتراک گذاری تنظیمات\"\n\n#: install.sh:2707\nmsgid \"生成分享链接\"\nmsgstr \"لینک اشتراک‌گذاری را تولید کنید\"\n\n#: install.sh:2735 install.sh:2746 install.sh:3038 install.sh:3108\n#: install.sh:3132 install.sh:3198 install.sh:3246 install.sh:3300\n#: install.sh:3352\nmsgid \"请先安装\"\nmsgstr \"لطفاً ابتدا نصب کنید\"\n\n#: install.sh:2753\nmsgid \"无法获取网卡, 将监控所有网卡\"\nmsgstr \"نمی‌توان کارت شبکه را دریافت کرد، تمام کارتهای شبکه تحت نظارت قرار خواهد گرفت\"\n\n#: install.sh:2755\nmsgid \"监控网卡\"\nmsgstr \"نگهبانی کارت شبکه\"\n\n#: install.sh:2758\nmsgid \"监控端口\"\nmsgstr \"پورت نظارتی\"\n\n#: install.sh:2760\nmsgid \"按 q 键退出 iftop\"\nmsgstr \"برای خروج از iftop، دکمه q را فشار دهید\"\n\n#: install.sh:2776 install.sh:2779 install.sh:2782 install.sh:2785\n#: install.sh:2788 install.sh:2791 install.sh:2794 install.sh:2797\n#: install.sh:2800 install.sh:2803 install.sh:2806\nmsgid \"安装成功\"\nmsgstr \"نصب موفقیت‌آمیز\"\n\n#: install.sh:2810\nmsgid \"目前分享链接规范为实验阶段, 请自行判断是否适用\"\nmsgstr \"در حال حاضر، استاندارد لینک اشتراک به عنوان مرحله آزمایشی است و لطفاً خودتان تصمیم بگیرید که آیا مناسب است یا نه\"\n\n#: install.sh:2812 install.sh:4224\nmsgid \"配置信息\"\nmsgstr \"اطلاعات تنظیم\"\n\n#: install.sh:2813\nmsgid \"主机\"\nmsgstr \"سرور\"\n\n#: install.sh:2837\nmsgid \"用户id\"\nmsgstr \"شناسه کاربر\"\n\n#: install.sh:2839\nmsgid \"加密\"\nmsgstr \"رمز‌گذاری\"\n\n#: install.sh:2840\nmsgid \"传输协议\"\nmsgstr \"پروتکل انتقال\"\n\n#: install.sh:2841\nmsgid \"底层传输安全\"\nmsgstr \"امنیت انتقال لایه پایین\"\n\n#: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868\nmsgid \"路径\"\nmsgstr \"مسیر\"\n\n#: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868\nmsgid \"不要落下\"\nmsgstr \"نگذار از دست بیفتد\"\n\n#: install.sh:2846 install.sh:2849 install.sh:2865 install.sh:2870\nmsgid \"不需要加\"\nmsgstr \"نیاز به افزودن ندارد\"\n\n#: install.sh:2852\nmsgid \"流控\"\nmsgstr \"کنترل جریان\"\n\n#: install.sh:2885\nmsgid \"即将申请证书, 支持使用自定义证书\"\nmsgstr \"در حال درخواست گواهینامه است، از استفاده از گواهینامه‌های سفارشی پشتیبانی می‌کند\"\n\n#: install.sh:2886\nmsgid \"如需使用自定义证书, 请按如下步骤:\"\nmsgstr \"برای استفاده از گواهینامه سفارشی، لطفاً مراحل زیر را دنبال کنید\"\n\n#: install.sh:2887\nmsgid \"1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)\"\nmsgstr \"۱. فایل گواهینامه را با نام جدیدی به نام: کلید خصوصی (xray.key)، گواهینامه (xray.crt) تغییر نام دهید\"\n\n#: install.sh:2888\nmsgid \"2. 将重命名后的证书文件放入\"\nmsgstr \"۲. فایل گواهینامه با نام تغییر یافته را قرار دهید\"\n\n#: install.sh:2888\nmsgid \"目录后再运行脚本\"\nmsgstr \"پس از فهرست، اسکریپت را اجرا کنید\"\n\n#: install.sh:2889\nmsgid \"3. 重新运行脚本\"\nmsgstr \"۳. دوباره اسکریپت را اجرا کنید\"\n\n#: install.sh:2890 install.sh:3334\nmsgid \"是否继续\"\nmsgstr \"آیا ادامه دادن؟\"\n\n#: install.sh:2898\nmsgid \"所有证书文件均已存在, 是否保留\"\nmsgstr \"تمام فایل‌های گواهینامه وجود دارد، آیا حفظ شود؟\"\n\n#: install.sh:2904 install.sh:2919 install.sh:2935 file_manager.sh:176\nmsgid \"已删除\"\nmsgstr \"حذف شده است\"\n\n#: install.sh:2910 install.sh:2925 install.sh:2942\nmsgid \"证书应用\"\nmsgstr \"کاربرد گواهینامه\"\n\n#: install.sh:2914\nmsgid \"证书文件已存在, 是否保留\"\nmsgstr \"پرونده گواهینامه وجود دارد، آیا حفظ می‌شود؟\"\n\n#: install.sh:2930\nmsgid \"证书签发残留文件已存在, 是否保留\"\nmsgstr \"پرونده‌های باقیمانده از صدور گواهینامه وجود دارد، آیا نگهداری می‌شود؟\"\n\n#: install.sh:2972 install.sh:4219\nmsgid \"添加\"\nmsgstr \"اضافه کردن\"\n\n#: install.sh:2980\nmsgid \"请选择支持的 TLS 版本\"\nmsgstr \"لطفاً نسخه tls مورد پشتیبانی را انتخاب کنید\"\n\n#: install.sh:2981\nmsgid \"建议选择 TLSv1.3 only (安全模式)\"\nmsgstr \"پیشنهاد می‌شود فقط tlsv1.3 انتخاب شود (حالت امن)\"\n\n#: install.sh:2982 install.sh:2998\nmsgid \"兼容模式\"\nmsgstr \"حالت سازگار\"\n\n#: install.sh:2983\nmsgid \"安全模式\"\nmsgstr \"حالت امن\"\n\n#: install.sh:2987\nmsgid \"由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)\"\nmsgstr \"از آنجا که h3 فقط tlsv1.3 را پشتیبانی می‌کند، فقط tlsv1.3 (حالت امن) پشتیبانی می‌شود\"\n\n#: install.sh:2991 install.sh:3003 install.sh:3006\nmsgid \"已切换至\"\nmsgstr \"به این تبدیل شده است\"\n\n#: install.sh:2995\nmsgid \"请选择 TLS 版本\"\nmsgstr \"tls نسخه را انتخاب کنید\"\n\n#: install.sh:2996\nmsgid \"建议选择 TLSv1.3 (安全模式)\"\nmsgstr \"پیشنهاد می‌شود tlsv1.3 (حالت امن) انتخاب شود\"\n\n#: install.sh:3009\nmsgid \"当前模式不支持\"\nmsgstr \"حالت فعلی پشتیبانی نمی‌کند\"\n\n#: install.sh:3016\nmsgid \"Nginx配置文件不存在 或 当前模式不支持\"\nmsgstr \"فایل تنظیمات nginx موجود نیست یا حالت فعلی پشتیبانی نمی‌کند\"\n\n#: install.sh:3130\nmsgid \"此模式不支持修改\"\nmsgstr \"این روش از تغییر پذیرش نمی‌کند\"\n\n#: install.sh:3139\nmsgid \"即将显示用户, 一次仅能显示一个\"\nmsgstr \"کاربران به زودی نمایش داده می‌شوند، اما فقط یک کاربر در هر بار نمایش داده می‌شود\"\n\n#: install.sh:3141\nmsgid \"请选择显示用户使用的协议\"\nmsgstr \"لطفاً پروتکل مورد استفاده کاربر را انتخاب کنید\"\n\n#: install.sh:3151\nmsgid \"请选择要显示的用户编号\"\nmsgstr \"لطفاً شماره کاربر مورد نظر برای نمایش را انتخاب کنید\"\n\n#: install.sh:3156 install.sh:3166 install.sh:3270 install.sh:3292\nmsgid \"选择错误\"\nmsgstr \"انتخاب اشتباه\"\n\n#: install.sh:3159\nmsgid \"请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户\"\nmsgstr \"لطفاً مستقیماً در منوی اصلی [اطلاعات پیکربندی xray] را انتخاب کنید تا کاربر اصلی نمایش داده شود\"\n\n#: install.sh:3169 install.sh:3295\nmsgid \"请先检测 Xray 是否正确安装\"\nmsgstr \"لطفاً ابتدا بررسی کنید که آیکس ری به درستی نصب شده است یا خیر\"\n\n#: install.sh:3187\nmsgid \"是否继续显示用户\"\nmsgstr \"آیا نمایش کاربر ادامه یابد\"\n\n#: install.sh:3196 install.sh:3298\nmsgid \"此模式不支持删除用户\"\nmsgstr \"این روش از حذف کاربر پشتیبانی نمی‌کند\"\n\n#: install.sh:3206\nmsgid \"即将添加用户, 一次仅能添加一个\"\nmsgstr \"کاربران به زودی اضافه می‌شوند، اما فقط یک کاربر در هر بار قابل اضافه کردن است\"\n\n#: install.sh:3208\nmsgid \"请选择添加用户使用的协议\"\nmsgstr \"لطفاً پروتکل استفاده شده برای افزودن کاربر را انتخاب کنید\"\n\n#: install.sh:3230\nmsgid \"添加用户\"\nmsgstr \"افزودن کاربر\"\n\n#: install.sh:3235\nmsgid \"是否继续添加用户\"\nmsgstr \"آیا می‌خواهید به افزودن کاربر ادامه دهید؟\"\n\n#: install.sh:3244\nmsgid \"此模式不支持添加用户\"\nmsgstr \"این روش اضافه کردن کاربر را پشتیبانی نمی‌کند\"\n\n#: install.sh:3253\nmsgid \"即将删除用户, 一次仅能删除一个\"\nmsgstr \"کاربر قرار است حذف شود، فقط یک نفر در هر بار قابل حذف است\"\n\n#: install.sh:3255\nmsgid \"请选择删除用户使用的协议\"\nmsgstr \"لطفاً توافقنامه‌ای که توسط کاربر استفاده می‌شود را انتخاب کنید\"\n\n#: install.sh:3265\nmsgid \"请选择要删除的用户编号\"\nmsgstr \"لطفاً شماره کاربر مورد نظر برای حذف را انتخاب کنید\"\n\n#: install.sh:3274\nmsgid \"主用户无法删除\"\nmsgstr \"کاربر اصلی نمی‌تواند حذف شود\"\n\n#: install.sh:3280\nmsgid \"删除用户\"\nmsgstr \"کاربر را حذف کنید\"\n\n#: install.sh:3283\nmsgid \"是否继续删除用户\"\nmsgstr \"آیا می‌خواهید کاربر را حذف کنید؟\"\n\n#: install.sh:3305 install.sh:3309\nmsgid \"文件不存在\"\nmsgstr \"فایل وجود ندارد\"\n\n#: install.sh:3316\nmsgid \"已配置 Xray 流量统计\"\nmsgstr \"آمار ترافیک xray تنظیم شده است\"\n\n#: install.sh:3317\nmsgid \"是否需要关闭此功能\"\nmsgstr \"آیا نیاز به غیرفعال کردن این ویژگی است؟\"\n\n#: install.sh:3323\nmsgid \"关闭 Xray 流量统计\"\nmsgstr \"آمار جریان xray را بستن\"\n\n#: install.sh:3332\nmsgid \"流量统计需要使用\"\nmsgstr \"برای آمار ترافیک باید استفاده کرد\"\n\n#: install.sh:3333\nmsgid \"可能会影响 Xray 性能\"\nmsgstr \"ممکن است بر عملکرد ایکس‌ری تأثیر بگذارد\"\n\n#: install.sh:3344\nmsgid \"设置 Xray 流量统计\"\nmsgstr \"تنظیم آمار جریان xray\"\n\n#: install.sh:3374 install.sh:3394\nmsgid \"已卸载\"\nmsgstr \"از نصب خارج شده است\"\n\n#: install.sh:3378\nmsgid \"是否卸载\"\nmsgstr \"آیا باید حذف شود؟\"\n\n#: install.sh:3382\nmsgid \"已取消卸载\"\nmsgstr \"لغو شدیدن از نصب\"\n\n#: install.sh:3405\nmsgid \"是否删除所有脚本文件\"\nmsgstr \"آیا می‌خواهید تمام فایل‌های اسکریپت را حذف کنید؟\"\n\n#: install.sh:3412\nmsgid \"已删除所有文件\"\nmsgstr \"تمام فایل‌ها حذف شدند\"\n\n#: install.sh:3413\nmsgid \"ヾ(￣▽￣) 拜拜~\"\nmsgstr \"(¯▽¯) سلام ~\"\n\n#: install.sh:3418\nmsgid \"已保留脚本文件 (包含 SSL 证书等)\"\nmsgstr \"فایل‌های اسکریپت (شامل گواهینامه ssl و غیره) ذخیره شده است\"\n\n#: install.sh:3422\nmsgid \"是否保留配置文件\"\nmsgstr \"آیا فایل پیکربندی را حفظ کنید\"\n\n#: install.sh:3439\nmsgid \"已清空证书遗留文件\"\nmsgstr \"فایل‌های باقی‌مانده از گواهینامه خالی شده است\"\n\n#: install.sh:3469\nmsgid \"秒后\"\nmsgstr \"ثانیه بعد\"\n\n#: install.sh:3669\nmsgid \"检测最新版本失败\"\nmsgstr \"شکست در تشخیص آخرین نسخه\"\n\n#: install.sh:3677 install.sh:3917\nmsgid \"新版本\"\nmsgstr \"نسخه جدید\"\n\n#: install.sh:3677 install.sh:3917\nmsgid \"更新内容\"\nmsgstr \"محتوای به‌روزرسانی\"\n\n#: install.sh:3681\nmsgid \"存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新\"\nmsgstr \"نسخه جدیدی وجود دارد، اما تغییرات نسخه‌ها بسیار زیاد است و ممکن است بازهم ناسازگاری وجود داشته باشد. آیا به روزرسانی می‌کنید؟\"\n\n#: install.sh:3684\nmsgid \"存在新版本, 是否更新\"\nmsgstr \"نسخه جدیدی وجود دارد، آیا می‌خواهید به روزرسانی کنید؟\"\n\n#: install.sh:3688\nmsgid \"检测 脚本 最新版本失败\"\nmsgstr \"شکست در بررسی آخرین نسخه اسکریپت\"\n\n#: install.sh:3689\nmsgid \"脚本 版本差别过大, 跳过更新\"\nmsgstr \"نسخه‌ی اسکریپت بسیار متفاوت است، به‌روزرسانی را رد کنید\"\n\n#: install.sh:3697 install.sh:3698\nmsgid \"脚本更新失败\"\nmsgstr \"به‌روزرسانی اسکریپت ناموفق بود\"\n\n#: install.sh:3704\nmsgid \"更新完成\"\nmsgstr \"به‌روزرسانی کامل شد\"\n\n#: install.sh:3705 install.sh:3929\nmsgid \"脚本版本变化较大, 若服务无法正常运行请卸载后重装\"\nmsgstr \"نسخه‌ی اسکریپت تغییرات قابل توجهی داشته است، لطفاً در صورت عدم عملکرد صحیح خدمات، آن را حذف کرده و دوباره نصب کنید\"\n\n#: install.sh:3714\nmsgid \"当前版本为最新版本\"\nmsgstr \"نسخه فعلی جدیدترین نسخه است\"\n\n#: install.sh:3727 install.sh:3912 install.sh:3927 install.sh:3940\nmsgid \"下载最新脚本\"\nmsgstr \"آخرین اسکریپت را دانلود کنید\"\n\n#: install.sh:3741\nmsgid \"该选项暂时无法使用\"\nmsgstr \"این گزینه در حال حاضر قابل استفاده نیست\"\n\n#: install.sh:3760 install.sh:4286\nmsgid \"此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装\"\nmsgstr \"این روش برای توازن بار توصیه می‌شود، در شرایط عادی توصیه نمی‌شود که استفاده شود، آیا نصب می‌کنید\"\n\n#: install.sh:3773 install.sh:4300\nmsgid \"此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装\"\nmsgstr \"این روش فقط برای انتقال ترافیک استفاده می‌شود و در سایر موارد توصیه نمی‌شود. آیا می‌خواهید نصب کنید؟\"\n\n#: install.sh:3876 install.sh:3877 install.sh:3887 install.sh:3891\n#: install.sh:3895 install.sh:4211 install.sh:4212 install.sh:4213\n#: install.sh:4214 install.sh:4215 install.sh:4216 install.sh:4314\n#: install.sh:4319 install.sh:4324 install.sh:4329\nmsgid \"变更\"\nmsgstr \"تغییر\"\n\n#: install.sh:3876 install.sh:4215\nmsgid \"负载均衡配置\"\nmsgstr \"پیکربندی توازن بار\"\n\n#: install.sh:3879\nmsgid \"清除日志文件\"\nmsgstr \"پاک کردن فایل‌های روزنامه\"\n\n#: install.sh:3880\nmsgid \"查看证书状态\"\nmsgstr \"وضعیت گواهینامه را بررسی کنید\"\n\n#: install.sh:3881\nmsgid \"更新证书有效期\"\nmsgstr \"به روزرسانی مدت اعتبار گواهینامه\"\n\n#: install.sh:3882\nmsgid \"设置证书自动更新\"\nmsgstr \"تنظیم به‌روزرسانی خودکار گواهینامه\"\n\n#: install.sh:3883\nmsgid \"设置 Fail2ban 防暴力破解\"\nmsgstr \"تنظیم فایل2بان برای جلوگیری از حملات کلمه‌پسوردی\"\n\n#: install.sh:3884\nmsgid \"显示帮助\"\nmsgstr \"نمایش کمک\"\n\n#: install.sh:3885\nmsgid \"修改语言\"\nmsgstr \"زبان را ویرایش کنید\"\n\n#: install.sh:3888 install.sh:4218 install.sh:4222 install.sh:4223\n#: install.sh:4224 install.sh:4225 install.sh:4230 install.sh:4232\n#: fail2ban_manager.sh:15\nmsgid \"查看\"\nmsgstr \"مشاهده کنید\"\n\n#: install.sh:3888 install.sh:4225\nmsgid \"实时流量\"\nmsgstr \"جریان زنده\"\n\n#: install.sh:3889\nmsgid \"脚本卸载\"\nmsgstr \"اسکریپت‌های خارج شده\"\n\n#: install.sh:3890\nmsgid \"显示安装信息\"\nmsgstr \"اطلاعات نصب را نشان دهید\"\n\n#: install.sh:3892 install.sh:4237\nmsgid \"加速\"\nmsgstr \"سرعت بخشیدن\"\n\n#: install.sh:3894\nmsgid \"更新脚本\"\nmsgstr \"برنامه‌ی به‌روزرسانی\"\n\n#: install.sh:3896 install.sh:3897\nmsgid \"显示\"\nmsgstr \"نمایش\"\n\n#: install.sh:3896\nmsgid \"访问信息\"\nmsgstr \"اطلاعات بازدید\"\n\n#: install.sh:3897\nmsgid \"错误信息\"\nmsgstr \"پیام خطا\"\n\n#: install.sh:3921\nmsgid \"脚本版本变化较大, 可能存在不兼容情况, 是否继续使用\"\nmsgstr \"نسخه‌ی اسکریپت تغییرات زیادی داشته است و ممکن است با نسخه‌های قبلی سازگار نباشد، آیا می‌خواهید ادامه دهید؟\"\n\n#: install.sh:3948\nmsgid \"检测失败\"\nmsgstr \"عملیات تشخیص با شکست مواجه شد\"\n\n#: install.sh:3952 install.sh:3962 install.sh:3971\nmsgid \"有新版\"\nmsgstr \"نسخه جدیدی وجود دارد\"\n\n#: install.sh:3955 install.sh:3964 install.sh:3974\nmsgid \"最新版\"\nmsgstr \"نسخه جدیدترین\"\n\n#: install.sh:3969\nmsgid \"版本未知\"\nmsgstr \"نسخه ناشناخته\"\n\n#: install.sh:3989 install.sh:3996\nmsgid \"运行中\"\nmsgstr \"در حال اجرا\"\n\n#: install.sh:3991 install.sh:4014 install.sh:4016\nmsgid \"无需测试\"\nmsgstr \"نیاز به آزمایش ندارد\"\n\n#: install.sh:3993 install.sh:3998\nmsgid \"未运行\"\nmsgstr \"در حال اجرا نیست\"\n\n#: install.sh:4008\nmsgid \"无法连通\"\nmsgstr \"نمی‌توان به آن متصل شد\"\n\n#: install.sh:4010 install.sh:4011 install.sh:4012\nmsgid \"本地正常\"\nmsgstr \"وضعیت محلی عادی است\"\n\n#: install.sh:4027\nmsgid \"脚本维护中.. 请稍后再试\"\nmsgstr \"اسکریپت در حال نگهداری است.. لطفاً بعداً دوباره امتحان کنید\"\n\n#: install.sh:4034\nmsgid \"无法检测所需依赖的在线版本, 请稍后再试\"\nmsgstr \"نمی‌توان نسخه آنلاین وابستگی مورد نیاز را تشخیص داد، لطفاً بعداً دوباره تلاش کنید\"\n\n#: install.sh:4051\nmsgid \"请输入数字\"\nmsgstr \"عدد را وارد کنید\"\n\n#: install.sh:4051\nmsgid \"请输入 1 到 6 之间的有效数字\"\nmsgstr \"لطفاً عدد معتبری بین ۱ تا ۶ وارد کنید\"\n\n#: install.sh:4081\nmsgid \"无效的选择\"\nmsgstr \"انتخاب نامعتبر\"\n\n#: install.sh:4122\nmsgid \"请输入备份名称\"\nmsgstr \"لطفاً نام پشتیبان را وارد کنید\"\n\n#: install.sh:4122\nmsgid \"不需要后缀\"\nmsgstr \"نیاز به پسوند نیست\"\n\n#: install.sh:4131\nmsgid \"报错信息\"\nmsgstr \"پیام خطا\"\n\n#: install.sh:4133\nmsgid \"备份完整性可能受到影响, 请检查上述错误信息\"\nmsgstr \"ممکن است کامل بودن پشتیبان‌گیری تحت تأثیر قرار گرفته باشد، لطفاً اطلاعات خطا را بررسی کنید\"\n\n#: install.sh:4137\nmsgid \"备份失败\"\nmsgstr \"عملیات باک‌آپ ناموفق بود\"\n\n#: install.sh:4139\nmsgid \"备份成功\"\nmsgstr \"ذخیره‌سازی موفقیت‌آمیز\"\n\n#: install.sh:4144\nmsgid \"请确保备份文件在目录\"\nmsgstr \"لطفاً مطمئن شوید که فایل‌های پشتیبان در دایرکتوری هستند\"\n\n#: install.sh:4148\nmsgid \"没有找到备份文件\"\nmsgstr \"پرونده پشتیبان یافت نشد\"\n\n#: install.sh:4153\nmsgid \"发现多个备份文件\"\nmsgstr \"چندین فایل پشتیبان یافت شد\"\n\n#: install.sh:4153\nmsgid \"将使用最新的文件进行恢复\"\nmsgstr \"از آخرین فایل‌ها برای بازیابی استفاده خواهد شد\"\n\n#: install.sh:4157\nmsgid \"找到最新备份文件\"\nmsgstr \"پیدا کردن آخرین فایل پشتیبان\"\n\n#: install.sh:4159\nmsgid \"恢复备份\"\nmsgstr \"بازیابی پشتیبان\"\n\n#: install.sh:4163\nmsgid \"恢复成功\"\nmsgstr \"بازیابی موفق\"\n\n#: install.sh:4164 install.sh:4166\nmsgid \"记得安装\"\nmsgstr \"یادتان باشد نصب کنید\"\n\n#: install.sh:4169\nmsgid \"恢复失败\"\nmsgstr \"بازیابی ناموفق\"\n\n#: install.sh:4175\nmsgid \"安装管理脚本\"\nmsgstr \"نصب اسکریپت مدیریت\"\n\n#: install.sh:4176\nmsgid \"作者\"\nmsgstr \"نویسنده\"\n\n#: install.sh:4180\nmsgid \"当前模式\"\nmsgstr \"حالت فعلی\"\n\n#: install.sh:4181\nmsgid \"当前语言\"\nmsgstr \"زبان فعلی\"\n\n#: install.sh:4184\nmsgid \"可以使用\"\nmsgstr \"می‌تواند استفاده شود\"\n\n#: install.sh:4184\nmsgid \"命令管理脚本\"\nmsgstr \"اسکریپت مدیریت دستور\"\n\n#: install.sh:4186\nmsgid \"版本检测\"\nmsgstr \"تشخیص نسخه\"\n\n#: install.sh:4187 install.sh:4195 install.sh:4246\nmsgid \"脚本\"\nmsgstr \"اسکریپت\"\n\n#: install.sh:4190\nmsgid \"运行状态\"\nmsgstr \"حالت اجرا\"\n\n#: install.sh:4193\nmsgid \"连通性\"\nmsgstr \"اتصال\"\n\n#: install.sh:4194\nmsgid \"更新向导\"\nmsgstr \"راهنمای به‌روزرسانی\"\n\n#: install.sh:4205\nmsgid \"安装向导\"\nmsgstr \"راهنمای نصب\"\n\n#: install.sh:4210\nmsgid \"配置变更\"\nmsgstr \"تغییر تنظیمات\"\n\n#: install.sh:4217\nmsgid \"用户管理\"\nmsgstr \"مدیریت کاربران\"\n\n#: install.sh:4218 install.sh:4219 install.sh:4220\nmsgid \"用户\"\nmsgstr \"کاربر\"\n\n#: install.sh:4221\nmsgid \"查看信息\"\nmsgstr \"اطلاعات را ببینید\"\n\n#: install.sh:4222\nmsgid \"实时访问日志\"\nmsgstr \"روگردان وقوع زمان واقع\"\n\n#: install.sh:4223\nmsgid \"实时错误日志\"\nmsgstr \"روزنامه خطاها در زمان واقعی\"\n\n#: install.sh:4226\nmsgid \"服务相关\"\nmsgstr \"خدمات مرتبط\"\n\n#: install.sh:4227 install.sh:4228 install.sh:4229 install.sh:4230\nmsgid \"所有服务\"\nmsgstr \"تمام خدمات\"\n\n#: install.sh:4231\nmsgid \"证书相关\"\nmsgstr \"مربوط به گواهینامه\"\n\n#: install.sh:4232\nmsgid \"证书状态\"\nmsgstr \"وضع گواهینامه\"\n\n#: install.sh:4233\nmsgid \"证书有效期\"\nmsgstr \"مدت اعتبار گواهینامه\"\n\n#: install.sh:4234\nmsgid \"证书自动更新\"\nmsgstr \"به‌روزرسانی خودکار گواهینامه\"\n\n#: install.sh:4235\nmsgid \"其他选项\"\nmsgstr \"گزینه‌های دیگر\"\n\n#: install.sh:4236\nmsgid \"自动更新\"\nmsgstr \"به‌روزرسانی خودکار\"\n\n#: install.sh:4238\nmsgid \"防暴力破解\"\nmsgstr \"پاداشت خرابکاری\"\n\n#: install.sh:4239\nmsgid \"流量统计\"\nmsgstr \"آمار جریان\"\n\n#: install.sh:4240\nmsgid \"清除\"\nmsgstr \"پاک کردن\"\n\n#: install.sh:4240\nmsgid \"日志文件\"\nmsgstr \"فایل روزنامه\"\n\n#: install.sh:4241\nmsgid \"测试\"\nmsgstr \"آزمایش\"\n\n#: install.sh:4241\nmsgid \"服务器网速\"\nmsgstr \"سرعت اینترنت سرور\"\n\n#: install.sh:4242\nmsgid \"备份恢复\"\nmsgstr \"بازیابی پشتیبان\"\n\n#: install.sh:4243 install.sh:4244\nmsgid \"全部文件\"\nmsgstr \"تمام فایل‌ها\"\n\n#: install.sh:4244\nmsgid \"恢复\"\nmsgstr \"بازیابی\"\n\n#: install.sh:4245\nmsgid \"卸载向导\"\nmsgstr \"راهنمای خارج کردن نصب\"\n\n#: install.sh:4246 fail2ban_manager.sh:14 fail2ban_manager.sh:415\nmsgid \"卸载\"\nmsgstr \"حذف کردن\"\n\n#: install.sh:4247\nmsgid \"清空\"\nmsgstr \"خالی کردن\"\n\n#: install.sh:4247\nmsgid \"证书文件\"\nmsgstr \"فایل گواهینامه\"\n\n#: install.sh:4248 fail2ban_manager.sh:16 file_manager.sh:208\nmsgid \"退出\"\nmsgstr \"خروج\"\n\n#: install.sh:4251\nmsgid \"请输入选项\"\nmsgstr \"لطفاً گزینه را وارد کنید\"\n\n#: install.sh:4259 install.sh:4268 install.sh:4334 install.sh:4340\n#: install.sh:4385 install.sh:4391 install.sh:4397 install.sh:4426\n#: install.sh:4467 install.sh:4474 install.sh:4479 fail2ban_manager.sh:416\nmsgid \"清空屏幕\"\nmsgstr \"صفحه را خالی کنید\"\n\n#: install.sh:4265\nmsgid \"不建议\"\nmsgstr \"توصیه نمی‌شود\"\n\n#: install.sh:4265\nmsgid \"频繁更新 Nginx, 请确认 Nginx 有更新的必要\"\nmsgstr \"به‌طور مکرر nginx را به‌روزرسانی کنید، لطفاً مطمئن شوید که nginx نیاز به به‌روزرسانی دارد\"\n\n#: install.sh:4266\nmsgid \"开始更新\"\nmsgstr \"آغاز به روزرسانی\"\n\n#: install.sh:4346 install.sh:4353 install.sh:4360 install.sh:4410\n#: install.sh:4415 install.sh:4420 install.sh:4442\nmsgid \"回到菜单\"\nmsgstr \"برگرد به منو\"\n\n#: fail2ban_manager.sh:10\nmsgid \"用于防止暴力破解\"\nmsgstr \"برای جلوگیری از حمله به روش کلمه‌پردازی\"\n\n#: fail2ban_manager.sh:11 file_manager.sh:203\nmsgid \"主菜单\"\nmsgstr \"منوی اصل\"\n\n#: fail2ban_manager.sh:13\nmsgid \"管理\"\nmsgstr \"مدیریت\"\n\n#: fail2ban_manager.sh:15 fail2ban_manager.sh:339\nmsgid \"状态\"\nmsgstr \"وضع\"\n\n#: fail2ban_manager.sh:18 file_manager.sh:210\nmsgid \"请选择一个选项\"\nmsgstr \"یک گزینه انتخاب کنید\"\n\n#: fail2ban_manager.sh:27 fail2ban_manager.sh:250 fail2ban_manager.sh:258\n#: fail2ban_manager.sh:363\nmsgid \"无效的选择, 请重试\"\nmsgstr \"انتخاب نامعتبر، لطفاً دوباره تلاش کنید\"\n\n#: fail2ban_manager.sh:35\nmsgid \"已经安装, 跳过安装步骤\"\nmsgstr \"قبلاً نصب شده است، گام نصب را رد کنید\"\n\n#: fail2ban_manager.sh:68\nmsgid \"systemd 无法读取 SSH 日志\"\nmsgstr \"systemd نمی‌تواند روزنامه‌های ssh را بخواند\"\n\n#: fail2ban_manager.sh:69\nmsgid \"跳过启用\"\nmsgstr \"پرش از فعال‌سازی\"\n\n#: fail2ban_manager.sh:69 fail2ban_manager.sh:93 fail2ban_manager.sh:103\n#: fail2ban_manager.sh:120 fail2ban_manager.sh:125 fail2ban_manager.sh:128\n#: fail2ban_manager.sh:146 fail2ban_manager.sh:151 fail2ban_manager.sh:154\nmsgid \"规则\"\nmsgstr \"قوانین\"\n\n#: fail2ban_manager.sh:77 fail2ban_manager.sh:203 fail2ban_manager.sh:440\nmsgid \"未安装, 请先安装\"\nmsgstr \"نصب نشده است، لطفاً ابتدا نصب کنید\"\n\n#: fail2ban_manager.sh:125 fail2ban_manager.sh:151 fail2ban_manager.sh:349\nmsgid \"已禁用\"\nmsgstr \"غیرفعال شده است\"\n\n#: fail2ban_manager.sh:209\nmsgid \"请选择\"\nmsgstr \"لطفاً انتخاب کنید\"\n\n#: fail2ban_manager.sh:209\nmsgid \"操作\"\nmsgstr \"عملیات\"\n\n#: fail2ban_manager.sh:210\nmsgid \"管理模块\"\nmsgstr \"مدول مدیریت\"\n\n#: fail2ban_manager.sh:211\nmsgid \"添加自定义规则\"\nmsgstr \"قوانین سفارشی اضافه کنید\"\n\n#: fail2ban_manager.sh:212 fail2ban_manager.sh:228\nmsgid \"服务管理\"\nmsgstr \"مدیریت خدمات\"\n\n#: fail2ban_manager.sh:271\nmsgid \"请输入新的\"\nmsgstr \"لطفاً جدید را وارد کنید\"\n\n#: fail2ban_manager.sh:271 fail2ban_manager.sh:272\nmsgid \"名称\"\nmsgstr \"نام\"\n\n#: fail2ban_manager.sh:273\nmsgid \"请输入日志路径\"\nmsgstr \"مسیر لاگ را وارد کنید\"\n\n#: fail2ban_manager.sh:274\nmsgid \"请输入最大重试次数\"\nmsgstr \"حداکثر تعداد دفعات تلاش مجدد را وارد کنید\"\n\n#: fail2ban_manager.sh:274\nmsgid \"最大重试次数必须在 1 到 99 之间\"\nmsgstr \"حداکثر تعداد تلاش‌های مجدد باید بین ۱ تا ۹۹ باشد\"\n\n#: fail2ban_manager.sh:275\nmsgid \"请输入封禁时间\"\nmsgstr \"مدت زمان ممنوعیت را وارد کنید\"\n\n#: fail2ban_manager.sh:275\nmsgid \"秒\"\nmsgstr \"ثانیه\"\n\n#: fail2ban_manager.sh:275\nmsgid \"封禁时间必须在 1 到 8640000 秒之间\"\nmsgstr \"مدت زمان ممنوعیت باید بین ۱ تا ۸۶۴۰۰۰۰ ثانیه باشد\"\n\n#: fail2ban_manager.sh:285\nmsgid \"自定义规则添加成功\"\nmsgstr \"قوانین سفارشی با موفقیت اضافه شدند\"\n\n#: fail2ban_manager.sh:289\nmsgid \"重启以应用新规则\"\nmsgstr \"برای اعمال قوانین جدید، بازنشانی کنید\"\n\n#: fail2ban_manager.sh:294\nmsgid \"管理 Fail2ban 模块\"\nmsgstr \"مدیریت ماژول fail2ban\"\n\n#: fail2ban_manager.sh:311\nmsgid \"未找到任何模块化配置文件\"\nmsgstr \"هیچ فایل پیکربندی مدولاری یافت نشد\"\n\n#: fail2ban_manager.sh:319 fail2ban_manager.sh:339\nmsgid \"模块名称\"\nmsgstr \"نام مدول\"\n\n#: fail2ban_manager.sh:339 file_manager.sh:59\nmsgid \"序号\"\nmsgstr \"شماره ترتیب\"\n\n#: fail2ban_manager.sh:363\nmsgid \"请选择要管理的模块\"\nmsgstr \"ماژول مورد نظر برای مدیریت را انتخاب کنید\"\n\n#: fail2ban_manager.sh:375\nmsgid \"启用\"\nmsgstr \"فعال کردن\"\n\n#: fail2ban_manager.sh:375\nmsgid \"禁用\"\nmsgstr \"غیرفعال کردن\"\n\n#: fail2ban_manager.sh:378\nmsgid \"是否\"\nmsgstr \"آیا\"\n\n#: fail2ban_manager.sh:378 fail2ban_manager.sh:386\nmsgid \"模块\"\nmsgstr \"ماژول\"\n\n#: fail2ban_manager.sh:388\nmsgid \"操作已取消\"\nmsgstr \"عملیات لغو شد\"\n\n#: fail2ban_manager.sh:424\nmsgid \"停止成功\"\nmsgstr \"موفقیت توقف\"\n\n#: fail2ban_manager.sh:444\nmsgid \"总体状态\"\nmsgstr \"وضع کلی\"\n\n#: fail2ban_manager.sh:448\nmsgid \"默认启用的 Jail 状态\"\nmsgstr \"وضع jail به طور پیش فرض فعال شده\"\n\n#: fail2ban_manager.sh:452 fail2ban_manager.sh:458\nmsgid \"封锁情况\"\nmsgstr \"وضع مسدود\"\n\n#: fail2ban_manager.sh:453 fail2ban_manager.sh:459 fail2ban_manager.sh:462\n#: fail2ban_manager.sh:466 fail2ban_manager.sh:469\nmsgid \"未启用或配置异常\"\nmsgstr \"خطا در فعال‌سازی یا تنظیم\"\n\n#: fail2ban_manager.sh:484 file_manager.sh:232\nmsgid \"新版本可用\"\nmsgstr \"نسخه جدید در دسترس است\"\n\n#: fail2ban_manager.sh:484 file_manager.sh:232\nmsgid \"当前版本\"\nmsgstr \"نسخه فعلی\"\n\n#: fail2ban_manager.sh:485 file_manager.sh:233\nmsgid \"请访问\"\nmsgstr \"لطفاً به دیدن\"\n\n#: fail2ban_manager.sh:485 file_manager.sh:233\nmsgid \"查看更新说明\"\nmsgstr \"دستورالعمل‌های به‌روزرسانی را مشاهده کنید\"\n\n#: fail2ban_manager.sh:487 file_manager.sh:235\nmsgid \"是否下载并安装新版本\"\nmsgstr \"آیا نسخه جدید را دانلود و نصب می‌کنید؟\"\n\n#: fail2ban_manager.sh:491 file_manager.sh:239\nmsgid \"正在下载新版本\"\nmsgstr \"در حال دانلود نسخه جدید\"\n\n#: fail2ban_manager.sh:496 file_manager.sh:244\nmsgid \"下载完成, 请重新运行脚本\"\nmsgstr \"دانلود کامل شد، لطفاً دوباره اسکریپت را اجرا کنید\"\n\n#: fail2ban_manager.sh:504 file_manager.sh:252\nmsgid \"跳过更新\"\nmsgstr \"به‌روزرسانی را بگذارید\"\n\n#: fail2ban_manager.sh:508 file_manager.sh:256\nmsgid \"当前已经是最新版本\"\nmsgstr \"در حال حاضر، این آخرین نسخه است\"\n\n#: file_manager.sh:7\nmsgid \"用法\"\nmsgstr \"استفاده\"\n\n#: file_manager.sh:7\nmsgid \"文件扩展名\"\nmsgstr \"نام امتداد فایل\"\n\n#: file_manager.sh:7\nmsgid \"目录路径\"\nmsgstr \"مسیر فهرست\"\n\n#: file_manager.sh:16\nmsgid \"目录\"\nmsgstr \"فهرست\"\n\n#: file_manager.sh:16\nmsgid \"不存在, 请检查路径\"\nmsgstr \"وجود ندارد، لطفاً مسیر را بررسی کنید\"\n\n#: file_manager.sh:26 file_manager.sh:204\nmsgid \"列出所有\"\nmsgstr \"همه را لیست کنید\"\n\n#: file_manager.sh:26 file_manager.sh:35 file_manager.sh:88 file_manager.sh:111\n#: file_manager.sh:160 file_manager.sh:176 file_manager.sh:204\n#: file_manager.sh:205 file_manager.sh:206 file_manager.sh:207\nmsgid \"文件\"\nmsgstr \"فایل\"\n\n#: file_manager.sh:53\nmsgid \"文件名\"\nmsgstr \"نام فایل\"\n\n#: file_manager.sh:79\nmsgid \"请输入网址 (例如 hey.run)\"\nmsgstr \"لطفاً آدرس وب (مثلاً hey.run) را وارد کنید\"\n\n#: file_manager.sh:80\nmsgid \"不要包含 http:// 或 https:// 开头\"\nmsgstr \"نامی که با http:// یا https:// شروع می‌شود را شامل نکنید\"\n\n#: file_manager.sh:84\nmsgid \"网址不能包含 http:// 或 https:// 前缀\"\nmsgstr \"آدرس وب نباید پیشوند http:// یا https:// داشته باشد\"\n\n#: file_manager.sh:88 file_manager.sh:111\nmsgid \"已创建\"\nmsgstr \"ایجاد شده است\"\n\n#: file_manager.sh:99\nmsgid \"请输入主机\"\nmsgstr \"لطفاً میزبان را وارد کنید\"\n\n#: file_manager.sh:107\nmsgid \"请输入权重\"\nmsgstr \"لطفاً وزن را وارد کنید\"\n\n#: file_manager.sh:128\nmsgid \"追加完成\"\nmsgstr \"اضافه کردن به پایان رسیدن\"\n\n#: file_manager.sh:132 file_manager.sh:136\nmsgid \"重启完成\"\nmsgstr \"بازنشانی کامل شد\"\n\n#: file_manager.sh:151\nmsgid \"请输入要编辑的文件编号\"\nmsgstr \"لطفاً شماره فایل مورد نظر برای ویرایش را وارد کنید\"\n\n#: file_manager.sh:156\nmsgid \"未安装, 正在尝试安装\"\nmsgstr \"نصب نشده، در حال تلاش برای نصب است\"\n\n#: file_manager.sh:160\nmsgid \"已编辑\"\nmsgstr \"ویرایش شده\"\n\n#: file_manager.sh:171\nmsgid \"请输入要删除的文件编号\"\nmsgstr \"شماره فایل مورد نظر برای حذف را وارد کنید\"\n\n#: file_manager.sh:194\nmsgid \"不支持的文件扩展名\"\nmsgstr \"پسوند فایل پشتیبانی نشده است\"\n\n#: file_manager.sh:205\nmsgid \"创建一个新的\"\nmsgstr \"یک چیز جدید ایجاد کنید\"\n\n#: file_manager.sh:206\nmsgid \"编辑一个已存在的\"\nmsgstr \"ویرایش یک مورد موجود\"\n\n#: file_manager.sh:207\nmsgid \"删除一个已存在的\"\nmsgstr \"حذف یک مورد موجود\"\n\n#: file_manager.sh:265\nmsgid \"重启成功\"\nmsgstr \"با موفقیت راه‌اندازی شد\"\n\n#: file_manager.sh:268\nmsgid \"重启失败\"\nmsgstr \"شکست در راه‌اندازی مجدد\"\n\n#: file_manager.sh:268\nmsgid \"请检查配置文件是否有误\"\nmsgstr \"لطفاً بررسی کنید که آیا فایل تنظیمات دچار خطا است یا نه\"\n"
  },
  {
    "path": "po/fr.po",
    "content": "# French translations for xray_install package.\n# Copyright (C) 2026 yunshu\n# This file is distributed under the same license as the xray_install package.\n# Automatically generated, 2026.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: xray_install 1.0\\n\"\n\"Report-Msgid-Bugs-To: https://github.com/hello-yunshu/Xray_bash_onekey/\"\n\"issues\\n\"\n\"POT-Creation-Date: 2026-04-24 09:47+0000\\n\"\n\"PO-Revision-Date: 2026-04-24 09:47+0000\\n\"\n\"Last-Translator: Automatically generated\\n\"\n\"Language-Team: none\\n\"\n\"Language: fr\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Plural-Forms: nplurals=2; plural=(n > 1);\\n\"\n\n#: install.sh:32\nmsgid \"信息\"\nmsgstr \"informations\"\n\n#: install.sh:34\nmsgid \"错误\"\nmsgstr \"erreur\"\n\n#: install.sh:35\nmsgid \"警告\"\nmsgstr \"avertissement\"\n\n#: install.sh:38 install.sh:1540 install.sh:3960 install.sh:3977\n#: install.sh:3980 install.sh:3981 install.sh:4019\nmsgid \"未安装\"\nmsgstr \"non installé\"\n\n#: install.sh:99\nmsgid \"日志文件归档失败\"\nmsgstr \"échec de l'archivage du fichier journal\"\n\n#: install.sh:104\nmsgid \"日志文件清空失败\"\nmsgstr \"échec de l’effacement du fichier journal\"\n\n#: install.sh:108\nmsgid \"日志文件已轮转并归档为\"\nmsgstr \"le fichier journal a été tourné et archivé sous \"\n\n#: install.sh:134 install.sh:138 install.sh:142 install.sh:152\nmsgid \"当前系统为\"\nmsgstr \"le système actuel est\"\n\n#: install.sh:152\nmsgid \"不在支持的系统列表内, 安装中断\"\nmsgstr \"non inclus dans la liste des systèmes pris en charge, l'installation est interrompue\"\n\n#: install.sh:159\nmsgid \"当前用户是 root 用户, 开始安装\"\nmsgstr \"l’utilisateur actuel est l’utilisateur root, commencez l’installation\"\n\n#: install.sh:161\nmsgid \"当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本\"\nmsgstr \"l’utilisateur actuel n’est pas l’utilisateur root. veuillez passer à l’utilisateur root et exécuter à nouveau le script\"\n\n#: install.sh:187\nmsgid \"无法获取远程语言文件信息\"\nmsgstr \"impossible d'obtenir les informations sur le fichier de langue distant\"\n\n#: install.sh:205\nmsgid \"正在更新语言文件\"\nmsgstr \"mise à jour du fichier de langue en cours\"\n\n#: install.sh:208 install.sh:291\nmsgid \"语言文件更新失败\"\nmsgstr \"échec de la mise à jour du fichier de langue\"\n\n#: install.sh:213\nmsgid \"语言文件无效\"\nmsgstr \"fichier de langue invalide\"\n\n#: install.sh:219\nmsgid \"版本文件更新失败\"\nmsgstr \"échec de la mise à jour du fichier de version\"\n\n#: install.sh:226\nmsgid \"语言文件更新完成\"\nmsgstr \"mise à jour du fichier de langue terminée\"\n\n#: install.sh:231 install.sh:2725\nmsgid \"正在安装\"\nmsgstr \"en cours d'installation\"\n\n#: install.sh:234\nmsgid \"安装失败\"\nmsgstr \"échec de l'installation\"\n\n#: install.sh:234 install.sh:258 install.sh:281 install.sh:291\nmsgid \"将使用默认语言\"\nmsgstr \"utilisera la langue par défaut\"\n\n#: install.sh:258 file_manager.sh:35\nmsgid \"未找到\"\nmsgstr \"non trouvé\"\n\n#: install.sh:281\nmsgid \"不支持的语言\"\nmsgstr \"langue non prise en charge\"\n\n#: install.sh:297\nmsgid \"发现语言文件更新\"\nmsgstr \"découvrir la mise à jour du fichier de langue\"\n\n#: install.sh:312 install.sh:1740\nmsgid \"完成\"\nmsgstr \"terminé\"\n\n#: install.sh:315\nmsgid \"失败\"\nmsgstr \"échec\"\n\n#: install.sh:322\nmsgid \"在线版本检测失败, 请稍后再试\"\nmsgstr \"la vérification de la version en ligne a échoué, veuillez réessayer plus tard\"\n\n#: install.sh:344 install.sh:352 install.sh:1162 install.sh:3872\n#: install.sh:3873 install.sh:3874 install.sh:3875 install.sh:4206\n#: install.sh:4207 install.sh:4208 install.sh:4209 fail2ban_manager.sh:12\n#: fail2ban_manager.sh:39\nmsgid \"安装\"\nmsgstr \"installation\"\n\n#: install.sh:346 install.sh:354 install.sh:1169 install.sh:2729\n#: install.sh:3969\nmsgid \"已安装\"\nmsgstr \"déjà installé\"\n\n#: install.sh:371 install.sh:375\nmsgid \"自启动配置\"\nmsgstr \"configuration de démarrage automatique\"\n\n#: install.sh:384\nmsgid \"链接库安装\"\nmsgstr \"installation de la bibliothèque liée\"\n\n#: install.sh:389\nmsgid \"值为空或超出范围, 请重新输入\"\nmsgstr \"la valeur est vide ou hors de la plage, veuillez saisir à nouveau\"\n\n#: install.sh:398\nmsgid \"值为空, 请重新输入\"\nmsgstr \"valeur vide, veuillez saisir à nouveau\"\n\n#: install.sh:440\nmsgid \"确定端口\"\nmsgstr \"déterminer le port\"\n\n#: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:104\nmsgid \"请输入端口\"\nmsgstr \"veuillez entrer le port\"\n\n#: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:107\nmsgid \"默认值\"\nmsgstr \"valeur par défaut\"\n\n#: install.sh:441 install.sh:444 install.sh:532 install.sh:554 install.sh:3055\n#: install.sh:3060 install.sh:3065 install.sh:3066 install.sh:3081\n#: install.sh:3086 install.sh:3091 install.sh:3092\nmsgid \"请输入 0-65535 之间的值\"\nmsgstr \"veuillez saisir une valeur comprise entre 0 et 65535\"\n\n#: install.sh:443\nmsgid \"端口不允许使用, 请重新输入\"\nmsgstr \"le port n'est pas autorisé, veuillez entrer à nouveau\"\n\n#: install.sh:452\nmsgid \"请选择安装协议\"\nmsgstr \"veuillez sélectionner le contrat d'installation\"\n\n#: install.sh:453 install.sh:1617 install.sh:1654 install.sh:1705\n#: install.sh:2997 install.sh:3142 install.sh:3209 install.sh:3256\n#: fail2ban_manager.sh:274 fail2ban_manager.sh:275\nmsgid \"默认\"\nmsgstr \"par défaut\"\n\n#: install.sh:457 install.sh:532 install.sh:554 install.sh:635 install.sh:668\n#: install.sh:821 install.sh:840 install.sh:881 install.sh:922 install.sh:1621\n#: install.sh:1634 install.sh:1656 install.sh:1709 install.sh:1719\n#: install.sh:2985 install.sh:3000 install.sh:3055 install.sh:3060\n#: install.sh:3065 install.sh:3066 install.sh:3081 install.sh:3086\n#: install.sh:3091 install.sh:3092 install.sh:3145 install.sh:3154\n#: install.sh:3212 install.sh:3259 install.sh:3268 fail2ban_manager.sh:215\n#: fail2ban_manager.sh:234 fail2ban_manager.sh:272 file_manager.sh:81\nmsgid \"请输入\"\nmsgstr \"veuillez entrer\"\n\n#: install.sh:457 install.sh:922 install.sh:1621 install.sh:1656\n#: install.sh:1709 install.sh:2985 install.sh:3000 install.sh:3145\n#: install.sh:3212 install.sh:3259 install.sh:4251 install.sh:4489\nmsgid \"请输入有效的数字\"\nmsgstr \"veuillez saisir un nombre valide\"\n\n#: install.sh:478\nmsgid \"是否添加简单 ws/gRPC 协议 用于负载均衡\"\nmsgstr \"ajouter ou non le protocole simple ws/grpc pour l'équilibrage de charge\"\n\n#: install.sh:479 install.sh:1259\nmsgid \"如不清楚具体用途, 请勿选择\"\nmsgstr \"si l'utilisation spécifique n'est pas claire, veuillez ne pas choisir\"\n\n#: install.sh:499\nmsgid \"已跳过添加简单 ws/gRPC 协议\"\nmsgstr \"ajout du protocole simple ws/grpc déjà ignoré\"\n\n#: install.sh:528 install.sh:550 install.sh:631 install.sh:648 install.sh:664\n#: install.sh:681 install.sh:696 install.sh:815 install.sh:836 install.sh:877\nmsgid \"是否需要自定义\"\nmsgstr \"a-t-on besoin d'une personnalisation \"\n\n#: install.sh:532 install.sh:554\nmsgid \"请勿与其他端口相同\"\nmsgstr \"veuillez ne pas utiliser le même port que les autres\"\n\n#: install.sh:571 file_manager.sh:114\nmsgid \"是否需要设置防火墙\"\nmsgstr \"doit-on configurer un pare-feu \"\n\n#: install.sh:611 install.sh:615 file_manager.sh:128 file_manager.sh:132\n#: file_manager.sh:136\nmsgid \"防火墙\"\nmsgstr \"pare-feu\"\n\n#: install.sh:611 install.sh:615 install.sh:2215 install.sh:2218\n#: install.sh:3012 install.sh:3014 install.sh:4227 fail2ban_manager.sh:231\n#: fail2ban_manager.sh:432\nmsgid \"重启\"\nmsgstr \"redémarrer\"\n\n#: install.sh:617\nmsgid \"开放防火墙相关端口\"\nmsgstr \"ouvrir les ports du pare-feu correspondants\"\n\n#: install.sh:618\nmsgid \"若修改配置, 请注意关闭防火墙相关端口\"\nmsgstr \"si vous modifiez la configuration, veuillez veiller à désactiver les ports associés au pare-feu\"\n\n#: install.sh:619 install.sh:3877 install.sh:3892 install.sh:3893\n#: install.sh:4216 install.sh:4236 fail2ban_manager.sh:161\nmsgid \"配置\"\nmsgstr \"configuration\"\n\n#: install.sh:622 file_manager.sh:140\nmsgid \"跳过防火墙设置\"\nmsgstr \"passer la configuration du pare-feu\"\n\n#: install.sh:631 install.sh:635 install.sh:636 install.sh:640 install.sh:648\n#: install.sh:664 install.sh:668 install.sh:669 install.sh:673 install.sh:681\n#: install.sh:1101\nmsgid \"伪装路径\"\nmsgstr \"chemin de camouflage\"\n\n#: install.sh:635 install.sh:668\nmsgid \"不需要\"\nmsgstr \"pas besoin\"\n\n#: install.sh:696 install.sh:706 install.sh:3172\nmsgid \"用户名\"\nmsgstr \"nom d'utilisateur\"\n\n#: install.sh:700\nmsgid \"请输入正确的 email\"\nmsgstr \"veuillez saisir une adresse e-mail correcte\"\n\n#: install.sh:713\nmsgid \"是否需要自定义字符串映射\"\nmsgstr \"a-t-on besoin d'une correspondance de chaînes personnalisée \"\n\n#: install.sh:717\nmsgid \"请输入自定义字符串\"\nmsgstr \"veuillez saisir une chaîne personnalisée\"\n\n#: install.sh:717\nmsgid \"最多30字符\"\nmsgstr \"maximum 30 caractères\"\n\n#: install.sh:719\nmsgid \"自定义字符串\"\nmsgstr \"chaîne personnalisée\"\n\n#: install.sh:726 install.sh:2836 install.sh:3895 install.sh:4211\n#: install.sh:4314\nmsgid \"映射字符串\"\nmsgstr \"chaîne de mappage\"\n\n#: install.sh:737\nmsgid \"检测到 target 域名已配置, 是否保留\"\nmsgstr \"cible détectée, domaine déjà configuré, souhaitez-vous le conserver \"\n\n#: install.sh:757\nmsgid \"请输入一个域名\"\nmsgstr \"veuillez saisir un nom de domaine\"\n\n#: install.sh:758\nmsgid \"域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用\"\nmsgstr \"le nom de domaine doit prendre en charge tlsv1.3, x25519 et h2, et ne pas être utilisé pour les redirections\"\n\n#: install.sh:759\nmsgid \"确认域名符合要求后请输入\"\nmsgstr \"après avoir confirmé que le nom de domaine est conforme aux exigences, veuillez entrer\"\n\n#: install.sh:760\nmsgid \"正在检测域名请等待\"\nmsgstr \"vérification du nom de domaine en cours, veuillez patienter\"\n\n#: install.sh:767 install.sh:772 install.sh:777\nmsgid \"该域名不支持\"\nmsgstr \"ce nom de domaine n'est pas pris en charge\"\n\n#: install.sh:782\nmsgid \"该域名发生了跳转\"\nmsgstr \"ce nom de domaine a subi une redirection\"\n\n#: install.sh:789\nmsgid \"该域名可能不满足所有要求\"\nmsgstr \"ce nom de domaine pourrait ne pas répondre à toutes les exigences\"\n\n#: install.sh:790\nmsgid \"是否仍要设置此域名\"\nmsgstr \"voulez-vous toujours configurer ce nom de domaine \"\n\n#: install.sh:802 install.sh:807 install.sh:1619\nmsgid \"域名\"\nmsgstr \"nom de domaine\"\n\n#: install.sh:802\nmsgid \"满足所有要求\"\nmsgstr \"satisfaire toutes les exigences\"\n\n#: install.sh:815\nmsgid \"域名的\"\nmsgstr \"du nom de domaine\"\n\n#: install.sh:816\nmsgid \"默认为\"\nmsgstr \"par défaut pour\"\n\n#: install.sh:816\nmsgid \"域名本身\"\nmsgstr \"le nom de domaine lui-même\"\n\n#: install.sh:817 install.sh:912 install.sh:952\nmsgid \"如不清楚具体用途, 请勿继续\"\nmsgstr \"si l'utilisation spécifique n'est pas claire, veuillez ne pas continuer\"\n\n#: install.sh:898\nmsgid \"本地文件 file_manager.sh 不存在, 正在下载\"\nmsgstr \"le fichier local file_manager.sh n'existe pas, téléchargement en cours\"\n\n#: install.sh:900 install.sh:2330 fail2ban_manager.sh:500 file_manager.sh:248\nmsgid \"下载失败, 请手动下载并安装新版本\"\nmsgstr \"échec du téléchargement, veuillez télécharger manuellement et installer la nouvelle version\"\n\n#: install.sh:911 install.sh:951\nmsgid \"是否变更\"\nmsgstr \"est-ce que cela change\"\n\n#: install.sh:911\nmsgid \"负载均衡\"\nmsgstr \"équilibrage de charge\"\n\n#: install.sh:917\nmsgid \"请选择协议为 ws 或 gRPC\"\nmsgstr \"veuillez sélectionner le protocole ws ou grpc\"\n\n#: install.sh:920 fail2ban_manager.sh:213 fail2ban_manager.sh:232\n#: fail2ban_manager.sh:325 fail2ban_manager.sh:357\nmsgid \"返回\"\nmsgstr \"retour\"\n\n#: install.sh:930 file_manager.sh:220\nmsgid \"无效选项, 请重试\"\nmsgstr \"option invalide, veuillez réessayer\"\n\n#: install.sh:940 install.sh:964 install.sh:2266 install.sh:2304\n#: install.sh:2320\nmsgid \"当前模式不支持此操作\"\nmsgstr \"le mode actuel ne prend pas en charge cette opération\"\n\n#: install.sh:953\nmsgid \"配置用途可以参考文章\"\nmsgstr \"pour la configuration d'utilisation, vous pouvez consulter l'article\"\n\n#: install.sh:980 install.sh:991 install.sh:995 install.sh:999 install.sh:1011\n#: install.sh:1016 install.sh:1020 install.sh:1025 install.sh:1045\n#: install.sh:1051 install.sh:1101 install.sh:1120 install.sh:3893\n#: install.sh:4177\nmsgid \"修改\"\nmsgstr \"modifier\"\n\n#: install.sh:1053 install.sh:2816 install.sh:2818 install.sh:2820\n#: install.sh:2821 install.sh:2824 install.sh:2828 install.sh:2830\n#: install.sh:2832 install.sh:2833 install.sh:2861 install.sh:2864\n#: install.sh:2867 install.sh:2869 install.sh:3049\nmsgid \"端口\"\nmsgstr \"port\"\n\n#: install.sh:1103\nmsgid \"不支持\"\nmsgstr \"ne prend pas en charge\"\n\n#: install.sh:1110\nmsgid \"用户名修改\"\nmsgstr \"modification du nom d'utilisateur\"\n\n#: install.sh:1113 install.sh:1123\nmsgid \"请先删除多余的用户\"\nmsgstr \"veuillez d'abord supprimer les utilisateurs en trop\"\n\n#: install.sh:1131 install.sh:1139 install.sh:1146 install.sh:1990\n#: install.sh:2061 install.sh:2146 install.sh:2154 install.sh:2163\n#: install.sh:2186\nmsgid \"配置修改\"\nmsgstr \"modification de la configuration\"\n\n#: install.sh:1151\nmsgid \"检测到 Xray 的权限控制, 启动修改程序\"\nmsgstr \"contrôle d'autorisation xray détecté, lancement du programme de modification\"\n\n#: install.sh:1156\nmsgid \"修改完成\"\nmsgstr \"modification terminée\"\n\n#: install.sh:1176\nmsgid \"若更新无效, 建议直接卸载再安装\"\nmsgstr \"si la mise à jour n'est pas effective, il est recommandé de désinstaller puis réinstaller directement\"\n\n#: install.sh:1177\nmsgid \"部分新功能需要重新安装才可生效\"\nmsgstr \"certaines nouvelles fonctionnalités nécessitent une réinstallation pour entrer en vigueur\"\n\n#: install.sh:1182\nmsgid \"检测到存在最新版\"\nmsgstr \"dernière version détectée\"\n\n#: install.sh:1183\nmsgid \"脚本可能未兼容此版本\"\nmsgstr \"le script pourrait ne pas être compatible avec cette version\"\n\n#: install.sh:1184\nmsgid \"是否更新\"\nmsgstr \"mettre à jour ou non\"\n\n#: install.sh:1188 install.sh:1213 install.sh:1532 install.sh:3886\n#: install.sh:3898 install.sh:4195 install.sh:4196 install.sh:4197\n#: install.sh:4233\nmsgid \"更新\"\nmsgstr \"mise à jour\"\n\n#: install.sh:1192 install.sh:1494\nmsgid \"启动失败\"\nmsgstr \"départ échoué\"\n\n#: install.sh:1193 install.sh:1497\nmsgid \"是否回滚到之前的版本\"\nmsgstr \"revenir à la version précédente \"\n\n#: install.sh:1197 install.sh:1507\nmsgid \"未执行回滚操作\"\nmsgstr \"opération de rollback non effectuée\"\n\n#: install.sh:1201 install.sh:1511\nmsgid \"正在回滚\"\nmsgstr \"en train de revenir en arrière\"\n\n#: install.sh:1205 install.sh:1518\nmsgid \"已成功回滚到之前的\"\nmsgstr \"rétrogradé avec succès à l'ancien\"\n\n#: install.sh:1205 install.sh:1518 install.sh:4214 install.sh:4329\nmsgid \"版本\"\nmsgstr \"version\"\n\n#: install.sh:1207 install.sh:1228 install.sh:1524\nmsgid \"回滚失败\"\nmsgstr \"échec du retour en arrière\"\n\n#: install.sh:1234 install.sh:1238\nmsgid \"重装\"\nmsgstr \"réinstallation\"\n\n#: install.sh:1248 install.sh:1249\nmsgid \"更新失败\"\nmsgstr \"mise à jour échouée\"\n\n#: install.sh:1257\nmsgid \"是否添加 Reality 负载均衡\"\nmsgstr \"ajouter ou non la charge de réalité\"\n\n#: install.sh:1258\nmsgid \"使用此功能前，建议先阅读作者教程\"\nmsgstr \"avant d'utiliser cette fonction, il est recommandé de lire le tutoriel de l'auteur\"\n\n#: install.sh:1264 fail2ban_manager.sh:93 fail2ban_manager.sh:103\n#: fail2ban_manager.sh:128 fail2ban_manager.sh:154 fail2ban_manager.sh:347\nmsgid \"已启用\"\nmsgstr \"déjà activé\"\n\n#: install.sh:1268\nmsgid \"已跳过\"\nmsgstr \"déjà sauté\"\n\n#: install.sh:1277\nmsgid \"Reality 协议有流量偷跑的风险\"\nmsgstr \"le protocole reality présente un risque de fuite de trafic\"\n\n#: install.sh:1279 install.sh:1306\nmsgid \"是否额外安装 nginx 前置保护\"\nmsgstr \"installer ou non une protection frontale nginx supplémentaire\"\n\n#: install.sh:1279\nmsgid \"推荐\"\nmsgstr \"recommandé\"\n\n#: install.sh:1286 install.sh:1321\nmsgid \"检测到已安装\"\nmsgstr \"détecté comme déjà installé\"\n\n#: install.sh:1289 install.sh:1324\nmsgid \"已跳过安装\"\nmsgstr \"installation ignorée\"\n\n#: install.sh:1303\nmsgid \"检测到已开启 Reality 负载均衡\"\nmsgstr \"réalité de charge équilibrée détectée active\"\n\n#: install.sh:1304\nmsgid \"如用作 Reality 负载均衡主服务器必须安装\"\nmsgstr \"si utilisé comme serveur principal de chargement équilibré reality, il doit être installé\"\n\n#: install.sh:1305\nmsgid \"如用作 Reality 负载均衡二级服务器则无需安装\"\nmsgstr \"s'il est utilisé comme serveur secondaire de chargement du répartiteur de charge reality, aucune installation n'est nécessaire\"\n\n#: install.sh:1349\nmsgid \"已存在, 跳过编译安装过程\"\nmsgstr \"déjà existant, sauter le processus de compilation et d'installation\"\n\n#: install.sh:1351\nmsgid \"检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装\"\nmsgstr \"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\"\n\n#: install.sh:1364\nmsgid \"即将下载已编译的\"\nmsgstr \"téléchargement imminent du compilé\"\n\n#: install.sh:1374\nmsgid \"不支持的系统架构\"\nmsgstr \"architecture système non prise en charge\"\n\n#: install.sh:1383\nmsgid \"下载失败\"\nmsgstr \"échec du téléchargement\"\n\n#: install.sh:1387\nmsgid \"下载成功\"\nmsgstr \"téléchargement réussi\"\n\n#: install.sh:1390\nmsgid \"解压失败\"\nmsgstr \"échec du décompression\"\n\n#: install.sh:1438 install.sh:1439 install.sh:1446 install.sh:1447\nmsgid \"配置不完整, 退出更新\"\nmsgstr \"configuration incomplète, quittez la mise à jour\"\n\n#: install.sh:1451 install.sh:1452\nmsgid \"当前安装模式不需要\"\nmsgstr \"le mode d'installation actuel n'est pas nécessaire\"\n\n#: install.sh:1456 install.sh:1457\nmsgid \"配置不存在, 退出更新\"\nmsgstr \"la configuration n’existe pas, quittez la mise à jour\"\n\n#: install.sh:1463\nmsgid \"备份旧版\"\nmsgstr \"sauvegarder l'ancienne version\"\n\n#: install.sh:1464\nmsgid \"删除旧版\"\nmsgstr \"supprimer l'ancienne version\"\n\n#: install.sh:1468\nmsgid \"是否保留原 Nginx 配置文件\"\nmsgstr \"conserver le fichier de configuration nginx original \"\n\n#: install.sh:1476 install.sh:1809\nmsgid \"原配置文件已删除\"\nmsgstr \"le fichier de configuration d'origine a été supprimé\"\n\n#: install.sh:1480\nmsgid \"原配置文件已保留\"\nmsgstr \"le fichier de configuration d'origine a été conservé\"\n\n#: install.sh:1534 install.sh:4220\nmsgid \"删除\"\nmsgstr \"supprimer\"\n\n#: install.sh:1534 install.sh:4243\nmsgid \"备份\"\nmsgstr \"sauvegarde\"\n\n#: install.sh:1537\nmsgid \"已为最新版\"\nmsgstr \"déjà à la dernière version\"\n\n#: install.sh:1553\nmsgid \"设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)\"\nmsgstr \"configurer un programme de mise à jour automatique en arrière-plan (incluant : script/xray/nginx)\"\n\n#: install.sh:1554\nmsgid \"可能自动更新后有兼容问题, 谨慎启用\"\nmsgstr \"il peut y avoir des problèmes de compatibilité après une mise à jour automatique ; activez avec prudence\"\n\n#: install.sh:1555 fail2ban_manager.sh:120 fail2ban_manager.sh:146\nmsgid \"是否启用\"\nmsgstr \"activer ou non\"\n\n#: install.sh:1561 install.sh:3878\nmsgid \"设置自动更新\"\nmsgstr \"configurer la mise à jour automatique\"\n\n#: install.sh:1566\nmsgid \"已设置自动更新\"\nmsgstr \"mise à jour automatique configurée\"\n\n#: install.sh:1567\nmsgid \"是否关闭\"\nmsgstr \"fermer ou non\"\n\n#: install.sh:1573\nmsgid \"删除自动更新\"\nmsgstr \"supprimer la mise à jour automatique\"\n\n#: install.sh:1582\nmsgid \"安装 SSL 证书生成脚本依赖\"\nmsgstr \"installer les dépendances du script de génération de certificat ssl\"\n\n#: install.sh:1584\nmsgid \"安装 SSL 证书生成脚本\"\nmsgstr \"installer le script de génération de certificat ssl\"\n\n#: install.sh:1590\nmsgid \"检测到原域名配置存在, 是否跳过域名设置\"\nmsgstr \"la configuration du domaine d'origine a été détectée. voulez-vous ignorer la configuration du domaine \"\n\n#: install.sh:1605 install.sh:1642 install.sh:1693 install.sh:1726\nmsgid \"无法获取公网IP地址\"\nmsgstr \"impossible d'obtenir une adresse ip publique\"\n\n#: install.sh:1605 install.sh:1642 install.sh:1665 install.sh:1693\n#: install.sh:1726\nmsgid \"安装终止\"\nmsgstr \"installation terminée\"\n\n#: install.sh:1608\nmsgid \"已跳过域名设置\"\nmsgstr \"configuration du domaine ignorée\"\n\n#: install.sh:1614\nmsgid \"确定域名信息\"\nmsgstr \"déterminer les informations du domaine\"\n\n#: install.sh:1615\nmsgid \"请输入你的域名信息\"\nmsgstr \"veuillez saisir les informations de votre domaine\"\n\n#: install.sh:1616\nmsgid \"请选择公网IP(IPv4/IPv6)或手动输入域名\"\nmsgstr \"veuillez sélectionner une adresse ip publique (ipv4/ipv6) ou saisir manuellement un nom de domaine\"\n\n#: install.sh:1622 install.sh:1711\nmsgid \"正在获取公网IP信息, 请耐心等待\"\nmsgstr \"obtention des informations sur l'adresse ip publique, veuillez patienter\"\n\n#: install.sh:1632\nmsgid \"此选项用于服务器商仅提供域名访问服务器\"\nmsgstr \"cette option est utilisée lorsque le fournisseur de serveur ne fournit que l'accès au serveur via un nom de domaine\"\n\n#: install.sh:1633\nmsgid \"注意服务器商域名添加 CNAME 记录\"\nmsgstr \"veuillez noter que le fournisseur de serveur doit ajouter un enregistrement cname au nom de domaine\"\n\n#: install.sh:1645\nmsgid \"域名DNS解析IP\"\nmsgstr \"résolution dns de nom de domaine vers ip\"\n\n#: install.sh:1646 install.sh:1729\nmsgid \"公网IP/域名\"\nmsgstr \"adresse ip publique/domaine\"\n\n#: install.sh:1648\nmsgid \"域名DNS解析IP与公网IP匹配\"\nmsgstr \"le dns du nom de domaine résout l'ip correspondant à l'adresse ip publique\"\n\n#: install.sh:1650\nmsgid \"请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray\"\nmsgstr \"veuillez vous assurer que les enregistrements a/aaaa corrects ont été ajoutés au domaine, sinon xray ne pourra pas fonctionner normalement\"\n\n#: install.sh:1651\nmsgid \"域名DNS解析IP与公网IP不匹配, 请选择\"\nmsgstr \"l'adresse ip obtenue par la résolution dns du nom de domaine ne correspond pas à l'adresse ip publique, veuillez sélectionner\"\n\n#: install.sh:1652 install.sh:1659\nmsgid \"继续安装\"\nmsgstr \"continuer l'installation\"\n\n#: install.sh:1653\nmsgid \"重新输入\"\nmsgstr \"saisir à nouveau\"\n\n#: install.sh:1654\nmsgid \"终止安装\"\nmsgstr \"arrêter l'installation\"\n\n#: install.sh:1676\nmsgid \"检测到原IP配置存在, 是否跳过IP设置\"\nmsgstr \"configuration ip originale détectée, souhaitez-vous ignorer la configuration ip \"\n\n#: install.sh:1697\nmsgid \"已跳过IP设置\"\nmsgstr \"paramètres ip ignorés\"\n\n#: install.sh:1703\nmsgid \"确定公网IP信息\"\nmsgstr \"déterminer les informations sur l'adresse ip publique\"\n\n#: install.sh:1704\nmsgid \"请选择公网IP为IPv4或IPv6\"\nmsgstr \"veuillez sélectionner une adresse ip publique en ipv4 ou ipv6\"\n\n#: install.sh:1707\nmsgid \"手动输入\"\nmsgstr \"saisie manuelle\"\n\n#: install.sh:1734\nmsgid \"端口未被占用\"\nmsgstr \"le port n'est pas occupé\"\n\n#: install.sh:1736\nmsgid \"检测到\"\nmsgstr \"détecté\"\n\n#: install.sh:1736\nmsgid \"端口被占用\"\nmsgstr \"le port est occupé\"\n\n#: install.sh:1736\nmsgid \"以下为\"\nmsgstr \"voici\"\n\n#: install.sh:1736\nmsgid \"端口占用信息\"\nmsgstr \"informations sur l'utilisation du port\"\n\n#: install.sh:1738\nmsgid \"尝试终止占用的进程\"\nmsgstr \"essayez de terminer le processus occupé\"\n\n#: install.sh:1749\nmsgid \"证书测试签发成功, 开始正式签发\"\nmsgstr \"test de certificat émis avec succès, début de la délivrance officielle\"\n\n#: install.sh:1752\nmsgid \"证书测试签发失败\"\nmsgstr \"échec de la signature du certificat de test\"\n\n#: install.sh:1759\nmsgid \"证书生成成功\"\nmsgstr \"génération de certificat réussie\"\n\n#: install.sh:1765\nmsgid \"证书配置成功\"\nmsgstr \"configuration du certificat réussie\"\n\n#: install.sh:1769\nmsgid \"证书生成失败\"\nmsgstr \"échec de la génération du certificat\"\n\n#: install.sh:1801\nmsgid \"检测到 Xray 配置过多用户\"\nmsgstr \"détection d'un nombre excessif d'utilisateurs configurés pour xray\"\n\n#: install.sh:1802\nmsgid \"是否保留原 Xray 配置文件\"\nmsgstr \"conserver le fichier de configuration xray original \"\n\n#: install.sh:1822\nmsgid \"添加简单 ws/gRPC 协议\"\nmsgstr \"ajouter le protocole simple ws/grpc\"\n\n#: install.sh:1837\nmsgid \"检测到配置文件, 是否读取配置文件\"\nmsgstr \"fichier de configuration détecté, souhaitez-vous lire le fichier de configuration \"\n\n#: install.sh:1842 install.sh:1863 install.sh:1961 install.sh:3430\nmsgid \"已删除配置文件\"\nmsgstr \"profil supprimé\"\n\n#: install.sh:1845 install.sh:1858 install.sh:1956 install.sh:3426\nmsgid \"已保留配置文件\"\nmsgstr \"profil déjà réservé\"\n\n#: install.sh:1852\nmsgid \"检测到当前安装模式与配置文件的安装模式不一致\"\nmsgstr \"le mode d'installation actuel est détecté comme étant incompatible avec le mode d'installation du profil\"\n\n#: install.sh:1853\nmsgid \"是否保留配置文件 (强烈不建议)\"\nmsgstr \"conserver le fichier de configuration (fortement déconseillé)\"\n\n#: install.sh:1857\nmsgid \"请务必确保配置文件正确\"\nmsgstr \"veuillez vous assurer que le fichier de configuration est correct\"\n\n#: install.sh:1951\nmsgid \"检测到配置文件不完整, 是否保留配置文件\"\nmsgstr \"fichier de configuration détecté incomplet, souhaitez-vous conserver le fichier de configuration \"\n\n#: install.sh:2170\nmsgid \"配置删除\"\nmsgstr \"configuration supprimée\"\n\n#: install.sh:2191\nmsgid \"设置 Nginx 开机自启\"\nmsgstr \"configurer le démarrage automatique de nginx\"\n\n#: install.sh:2194 install.sh:4234 install.sh:4237 install.sh:4238\n#: install.sh:4239 fail2ban_manager.sh:10\nmsgid \"设置\"\nmsgstr \"configurer\"\n\n#: install.sh:2194 install.sh:2202\nmsgid \"开机自启\"\nmsgstr \"démarrage automatique\"\n\n#: install.sh:2199\nmsgid \"关闭 Nginx 开机自启\"\nmsgstr \"désactiver le démarrage automatique de nginx\"\n\n#: install.sh:2202\nmsgid \"关闭\"\nmsgstr \"fermer\"\n\n#: install.sh:2209 install.sh:2231 install.sh:2234 install.sh:2294\n#: install.sh:4229 fail2ban_manager.sh:230\nmsgid \"停止\"\nmsgstr \"arrêter\"\n\n#: install.sh:2223 install.sh:2226 install.sh:2761 install.sh:4228\n#: fail2ban_manager.sh:229 fail2ban_manager.sh:398\nmsgid \"启动\"\nmsgstr \"démarrer\"\n\n#: install.sh:2247 install.sh:2263\nmsgid \"新版本已自动设置证书自动更新\"\nmsgstr \"la nouvelle version a automatiquement configuré la mise à jour automatique des certificats\"\n\n#: install.sh:2248\nmsgid \"老版本请及时删除 废弃的 改版证书自动更新\"\nmsgstr \"veuillez supprimer rapidement les anciennes versions. les certificats obsolètes seront automatiquement mis à jour\"\n\n#: install.sh:2249\nmsgid \"已设置改版证书自动更新\"\nmsgstr \"la mise à jour automatique du certificat de révision est déjà configurée\"\n\n#: install.sh:2250\nmsgid \"是否需要删除改版证书自动更新 (请删除)\"\nmsgstr \"doit-on supprimer la mise à jour automatique du certificat de révision (veuillez supprimer) \"\n\n#: install.sh:2257\nmsgid \"删除改版证书自动更新\"\nmsgstr \"supprimer la mise à jour automatique du certificat révisé\"\n\n#: install.sh:2281\nmsgid \"已过期\"\nmsgstr \"dépassé\"\n\n#: install.sh:2283\nmsgid \"证书生成日期\"\nmsgstr \"date de génération du certificat\"\n\n#: install.sh:2284\nmsgid \"证书生成天数\"\nmsgstr \"nombre de jours pour la génération du certificat\"\n\n#: install.sh:2285\nmsgid \"证书剩余天数\"\nmsgstr \"nombre de jours restants du certificat\"\n\n#: install.sh:2289\nmsgid \"是否立即更新证书\"\nmsgstr \"mettre à jour immédiatement le certificat \"\n\n#: install.sh:2301 install.sh:2313\nmsgid \"证书签发工具不存在, 请确认是否证书为脚本签发\"\nmsgstr \"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\"\n\n#: install.sh:2317\nmsgid \"证书更新\"\nmsgstr \"mise à jour du certificat\"\n\n#: install.sh:2327\nmsgid \"本地文件 fail2ban_manager.sh 不存在, 正在下载\"\nmsgstr \"le fichier local fail2ban_manager.sh n'existe pas, téléchargement en cours\"\n\n#: install.sh:2342\nmsgid \"是否需要设置自动清理日志\"\nmsgstr \"doit-on configurer la suppression automatique des journaux \"\n\n#: install.sh:2346\nmsgid \"已跳过设置自动清理日志\"\nmsgstr \"la configuration de l’effacement automatique des journaux a été ignorée\"\n\n#: install.sh:2349\nmsgid \"将在 每周三 04:00 自动清空日志\"\nmsgstr \"les journaux seront automatiquement vidés tous les mercredis à 04h00\"\n\n#: install.sh:2354\nmsgid \"已设置自动清理日志任务\"\nmsgstr \"la tâche de nettoyage automatique des journaux a été configurée\"\n\n#: install.sh:2355\nmsgid \"是否需要删除现有自动清理日志任务\"\nmsgstr \"doit-on supprimer la tâche existante de nettoyage automatique des journaux \"\n\n#: install.sh:2360\nmsgid \"删除自动清理日志任务\"\nmsgstr \"supprimer la tâche de nettoyage automatique des journaux\"\n\n#: install.sh:2363\nmsgid \"保留现有自动清理日志任务\"\nmsgstr \"conserver la tâche existante de nettoyage automatique des journaux\"\n\n#: install.sh:2378\nmsgid \"设置自动清理日志\"\nmsgstr \"configurer la suppression automatique des journaux\"\n\n#: install.sh:2385\nmsgid \"检测到日志文件大小如下:\"\nmsgstr \"taille du fichier journal détectée comme suit \"\n\n#: install.sh:2387\nmsgid \"即将清除\"\nmsgstr \"bientôt effacé\"\n\n#: install.sh:2389\nmsgid \"日志清理\"\nmsgstr \"nettoyage des journaux\"\n\n#: install.sh:2663\nmsgid \"链接分享\"\nmsgstr \"partage de lien\"\n\n#: install.sh:2665 install.sh:2671 install.sh:2676 install.sh:2681\n#: install.sh:2685 install.sh:3183\nmsgid \"分享链接\"\nmsgstr \"partager le lien\"\n\n#: install.sh:2666 install.sh:2672 install.sh:2677 install.sh:2682\n#: install.sh:2686\nmsgid \"二维码\"\nmsgstr \"code qr\"\n\n#: install.sh:2692 install.sh:2693\nmsgid \"配置分享\"\nmsgstr \"partage de configuration\"\n\n#: install.sh:2707\nmsgid \"生成分享链接\"\nmsgstr \"générer un lien de partage\"\n\n#: install.sh:2735 install.sh:2746 install.sh:3038 install.sh:3108\n#: install.sh:3132 install.sh:3198 install.sh:3246 install.sh:3300\n#: install.sh:3352\nmsgid \"请先安装\"\nmsgstr \"veuillez installer d'abord\"\n\n#: install.sh:2753\nmsgid \"无法获取网卡, 将监控所有网卡\"\nmsgstr \"impossible d’obtenir la carte réseau ; toutes les cartes réseaux seront surveillées\"\n\n#: install.sh:2755\nmsgid \"监控网卡\"\nmsgstr \"surveiller la carte réseau\"\n\n#: install.sh:2758\nmsgid \"监控端口\"\nmsgstr \"port de surveillance\"\n\n#: install.sh:2760\nmsgid \"按 q 键退出 iftop\"\nmsgstr \"appuyez sur la touche q pour quitter iftop\"\n\n#: install.sh:2776 install.sh:2779 install.sh:2782 install.sh:2785\n#: install.sh:2788 install.sh:2791 install.sh:2794 install.sh:2797\n#: install.sh:2800 install.sh:2803 install.sh:2806\nmsgid \"安装成功\"\nmsgstr \"installation réussie\"\n\n#: install.sh:2810\nmsgid \"目前分享链接规范为实验阶段, 请自行判断是否适用\"\nmsgstr \"la norme de partage des liens est actuellement en phase expérimentale ; veuillez déterminer vous-même si elle s'applique\"\n\n#: install.sh:2812 install.sh:4224\nmsgid \"配置信息\"\nmsgstr \"informations de configuration\"\n\n#: install.sh:2813\nmsgid \"主机\"\nmsgstr \"hôte\"\n\n#: install.sh:2837\nmsgid \"用户id\"\nmsgstr \"identifiant d'utilisateur\"\n\n#: install.sh:2839\nmsgid \"加密\"\nmsgstr \"chiffrement\"\n\n#: install.sh:2840\nmsgid \"传输协议\"\nmsgstr \"protocole de transmission\"\n\n#: install.sh:2841\nmsgid \"底层传输安全\"\nmsgstr \"sécurité de la couche de transport\"\n\n#: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868\nmsgid \"路径\"\nmsgstr \"chemin\"\n\n#: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868\nmsgid \"不要落下\"\nmsgstr \"ne pas laisser tomber\"\n\n#: install.sh:2846 install.sh:2849 install.sh:2865 install.sh:2870\nmsgid \"不需要加\"\nmsgstr \"pas besoin d'ajouter\"\n\n#: install.sh:2852\nmsgid \"流控\"\nmsgstr \"contrôle de flux\"\n\n#: install.sh:2885\nmsgid \"即将申请证书, 支持使用自定义证书\"\nmsgstr \"vais demander un certificat, supporte l'utilisation de certificats personnalisés\"\n\n#: install.sh:2886\nmsgid \"如需使用自定义证书, 请按如下步骤:\"\nmsgstr \"si vous souhaitez utiliser un certificat personnalisé, veuillez suivre les étapes ci-dessous \"\n\n#: install.sh:2887\nmsgid \"1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)\"\nmsgstr \"1. renommer le fichier de certificat : clé privée (xray.key), certificat (xray.crt)\"\n\n#: install.sh:2888\nmsgid \"2. 将重命名后的证书文件放入\"\nmsgstr \"2. placez le fichier de certificat renommé dans\"\n\n#: install.sh:2888\nmsgid \"目录后再运行脚本\"\nmsgstr \"exécuter le script après la table des matières\"\n\n#: install.sh:2889\nmsgid \"3. 重新运行脚本\"\nmsgstr \"3. exécuter à nouveau le script\"\n\n#: install.sh:2890 install.sh:3334\nmsgid \"是否继续\"\nmsgstr \"continuer ou non\"\n\n#: install.sh:2898\nmsgid \"所有证书文件均已存在, 是否保留\"\nmsgstr \"tous les fichiers de certificat existent déjà, souhaitez-vous les conserver \"\n\n#: install.sh:2904 install.sh:2919 install.sh:2935 file_manager.sh:176\nmsgid \"已删除\"\nmsgstr \"supprimé\"\n\n#: install.sh:2910 install.sh:2925 install.sh:2942\nmsgid \"证书应用\"\nmsgstr \"application de certificat\"\n\n#: install.sh:2914\nmsgid \"证书文件已存在, 是否保留\"\nmsgstr \"le fichier de certificat existe déjà, souhaitez-vous le conserver \"\n\n#: install.sh:2930\nmsgid \"证书签发残留文件已存在, 是否保留\"\nmsgstr \"le fichier résiduel de la signature du certificat existe déjà, souhaitez-vous le conserver \"\n\n#: install.sh:2972 install.sh:4219\nmsgid \"添加\"\nmsgstr \"ajouter\"\n\n#: install.sh:2980\nmsgid \"请选择支持的 TLS 版本\"\nmsgstr \"veuillez sélectionner la version tls prise en charge\"\n\n#: install.sh:2981\nmsgid \"建议选择 TLSv1.3 only (安全模式)\"\nmsgstr \"il est recommandé de sélectionner tlsv1.3 uniquement (mode sécurisé)\"\n\n#: install.sh:2982 install.sh:2998\nmsgid \"兼容模式\"\nmsgstr \"mode de compatibilité\"\n\n#: install.sh:2983\nmsgid \"安全模式\"\nmsgstr \"mode sécurisé\"\n\n#: install.sh:2987\nmsgid \"由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)\"\nmsgstr \"étant donné que h3 ne prend en charge que tlsv1.3, seul tlsv1.3 est pris en charge (mode sécurisé)\"\n\n#: install.sh:2991 install.sh:3003 install.sh:3006\nmsgid \"已切换至\"\nmsgstr \"déjà basculé vers\"\n\n#: install.sh:2995\nmsgid \"请选择 TLS 版本\"\nmsgstr \"veuillez sélectionner la version tls\"\n\n#: install.sh:2996\nmsgid \"建议选择 TLSv1.3 (安全模式)\"\nmsgstr \"il est recommandé de choisir tlsv1.3 (mode sécurisé)\"\n\n#: install.sh:3009\nmsgid \"当前模式不支持\"\nmsgstr \"le mode actuel n’est pas pris en charge\"\n\n#: install.sh:3016\nmsgid \"Nginx配置文件不存在 或 当前模式不支持\"\nmsgstr \"le fichier de configuration nginx n’existe pas ou le mode actuel n’est pas pris en charge\"\n\n#: install.sh:3130\nmsgid \"此模式不支持修改\"\nmsgstr \"ce mode ne supporte pas la modification\"\n\n#: install.sh:3139\nmsgid \"即将显示用户, 一次仅能显示一个\"\nmsgstr \"affichage des utilisateurs à venir, un seul utilisateur peut être affiché à la fois\"\n\n#: install.sh:3141\nmsgid \"请选择显示用户使用的协议\"\nmsgstr \"veuillez sélectionner le protocole utilisé par l'utilisateur à afficher\"\n\n#: install.sh:3151\nmsgid \"请选择要显示的用户编号\"\nmsgstr \"veuillez sélectionner le numéro d'utilisateur à afficher\"\n\n#: install.sh:3156 install.sh:3166 install.sh:3270 install.sh:3292\nmsgid \"选择错误\"\nmsgstr \"erreur de sélection\"\n\n#: install.sh:3159\nmsgid \"请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户\"\nmsgstr \"veuillez sélectionner directement [afficher les informations de configuration xray] dans le menu principal pour afficher l'utilisateur principal\"\n\n#: install.sh:3169 install.sh:3295\nmsgid \"请先检测 Xray 是否正确安装\"\nmsgstr \"veuillez d'abord vérifier que xray est correctement installé\"\n\n#: install.sh:3187\nmsgid \"是否继续显示用户\"\nmsgstr \"continuer à afficher l'utilisateur\"\n\n#: install.sh:3196 install.sh:3298\nmsgid \"此模式不支持删除用户\"\nmsgstr \"ce mode ne prend pas en charge la suppression d'utilisateurs\"\n\n#: install.sh:3206\nmsgid \"即将添加用户, 一次仅能添加一个\"\nmsgstr \"ajout d'utilisateur en cours, un seul utilisateur peut être ajouté à la fois\"\n\n#: install.sh:3208\nmsgid \"请选择添加用户使用的协议\"\nmsgstr \"veuillez sélectionner le protocole utilisé pour ajouter l'utilisateur\"\n\n#: install.sh:3230\nmsgid \"添加用户\"\nmsgstr \"ajouter un utilisateur\"\n\n#: install.sh:3235\nmsgid \"是否继续添加用户\"\nmsgstr \"voulez-vous continuer à ajouter des utilisateurs \"\n\n#: install.sh:3244\nmsgid \"此模式不支持添加用户\"\nmsgstr \"ce mode ne prend pas en charge l'ajout d'utilisateurs\"\n\n#: install.sh:3253\nmsgid \"即将删除用户, 一次仅能删除一个\"\nmsgstr \"l'utilisateur sera supprimé, une seule suppression à la fois\"\n\n#: install.sh:3255\nmsgid \"请选择删除用户使用的协议\"\nmsgstr \"veuillez sélectionner le protocole utilisé par l'utilisateur à supprimer\"\n\n#: install.sh:3265\nmsgid \"请选择要删除的用户编号\"\nmsgstr \"veuillez sélectionner le numéro d'utilisateur à supprimer\"\n\n#: install.sh:3274\nmsgid \"主用户无法删除\"\nmsgstr \"l'utilisateur principal ne peut pas être supprimé\"\n\n#: install.sh:3280\nmsgid \"删除用户\"\nmsgstr \"supprimer l'utilisateur\"\n\n#: install.sh:3283\nmsgid \"是否继续删除用户\"\nmsgstr \"voulez-vous continuer à supprimer l'utilisateur \"\n\n#: install.sh:3305 install.sh:3309\nmsgid \"文件不存在\"\nmsgstr \"le fichier n'existe pas\"\n\n#: install.sh:3316\nmsgid \"已配置 Xray 流量统计\"\nmsgstr \"statistiques de trafic xray déjà configurées\"\n\n#: install.sh:3317\nmsgid \"是否需要关闭此功能\"\nmsgstr \"doit-on désactiver cette fonctionnalité \"\n\n#: install.sh:3323\nmsgid \"关闭 Xray 流量统计\"\nmsgstr \"fermer la statistique du trafic xray\"\n\n#: install.sh:3332\nmsgid \"流量统计需要使用\"\nmsgstr \"la statistique du trafic doit être utilisée\"\n\n#: install.sh:3333\nmsgid \"可能会影响 Xray 性能\"\nmsgstr \"cela pourrait affecter les performances de l'analyseur xray\"\n\n#: install.sh:3344\nmsgid \"设置 Xray 流量统计\"\nmsgstr \"configurer la statistique du trafic xray\"\n\n#: install.sh:3374 install.sh:3394\nmsgid \"已卸载\"\nmsgstr \"déjà désinstallé\"\n\n#: install.sh:3378\nmsgid \"是否卸载\"\nmsgstr \"est-ce que je désinstalle \"\n\n#: install.sh:3382\nmsgid \"已取消卸载\"\nmsgstr \"désinstallation annulée\"\n\n#: install.sh:3405\nmsgid \"是否删除所有脚本文件\"\nmsgstr \"supprimer tous les fichiers de script \"\n\n#: install.sh:3412\nmsgid \"已删除所有文件\"\nmsgstr \"tous les fichiers ont été supprimés\"\n\n#: install.sh:3413\nmsgid \"ヾ(￣▽￣) 拜拜~\"\nmsgstr \"(￣▽￣) ヾ salut~\"\n\n#: install.sh:3418\nmsgid \"已保留脚本文件 (包含 SSL 证书等)\"\nmsgstr \"fichier de script déjà conservé (contenant certificat ssl, etc.)\"\n\n#: install.sh:3422\nmsgid \"是否保留配置文件\"\nmsgstr \"conserver le fichier de configuration \"\n\n#: install.sh:3439\nmsgid \"已清空证书遗留文件\"\nmsgstr \"les fichiers résiduels du certificat ont été effacés\"\n\n#: install.sh:3469\nmsgid \"秒后\"\nmsgstr \"seconde(s) après\"\n\n#: install.sh:3669\nmsgid \"检测最新版本失败\"\nmsgstr \"échec de la vérification de la dernière version\"\n\n#: install.sh:3677 install.sh:3917\nmsgid \"新版本\"\nmsgstr \"nouvelle version\"\n\n#: install.sh:3677 install.sh:3917\nmsgid \"更新内容\"\nmsgstr \"contenu de la mise à jour\"\n\n#: install.sh:3681\nmsgid \"存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新\"\nmsgstr \"une nouvelle version est disponible, mais les changements sont importants, il pourrait y avoir des incompatibilités. voulez-vous mettre à jour \"\n\n#: install.sh:3684\nmsgid \"存在新版本, 是否更新\"\nmsgstr \"une nouvelle version est disponible, souhaitez-vous la mettre à jour \"\n\n#: install.sh:3688\nmsgid \"检测 脚本 最新版本失败\"\nmsgstr \"échec de la vérification de la dernière version du script\"\n\n#: install.sh:3689\nmsgid \"脚本 版本差别过大, 跳过更新\"\nmsgstr \"la différence de version du script est trop grande, mise à jour ignorée\"\n\n#: install.sh:3697 install.sh:3698\nmsgid \"脚本更新失败\"\nmsgstr \"mise à jour du script échouée\"\n\n#: install.sh:3704\nmsgid \"更新完成\"\nmsgstr \"mise à jour terminée\"\n\n#: install.sh:3705 install.sh:3929\nmsgid \"脚本版本变化较大, 若服务无法正常运行请卸载后重装\"\nmsgstr \"la version du script a beaucoup changé. si le service ne fonctionne pas correctement, veuillez le désinstaller puis le réinstaller\"\n\n#: install.sh:3714\nmsgid \"当前版本为最新版本\"\nmsgstr \"la version actuelle est la dernière version\"\n\n#: install.sh:3727 install.sh:3912 install.sh:3927 install.sh:3940\nmsgid \"下载最新脚本\"\nmsgstr \"télécharger le script le plus récent\"\n\n#: install.sh:3741\nmsgid \"该选项暂时无法使用\"\nmsgstr \"cette option n'est pas disponible pour le moment\"\n\n#: install.sh:3760 install.sh:4286\nmsgid \"此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装\"\nmsgstr \"ce mode est recommandé pour l'équilibrage de charge, il n'est généralement pas recommandé d'utiliser, souhaitez-vous installer \"\n\n#: install.sh:3773 install.sh:4300\nmsgid \"此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装\"\nmsgstr \"ce mode est uniquement utilisé pour le transit du trafic et n’est pas recommandé pour d’autres utilisations. voulez-vous l’installer \"\n\n#: install.sh:3876 install.sh:3877 install.sh:3887 install.sh:3891\n#: install.sh:3895 install.sh:4211 install.sh:4212 install.sh:4213\n#: install.sh:4214 install.sh:4215 install.sh:4216 install.sh:4314\n#: install.sh:4319 install.sh:4324 install.sh:4329\nmsgid \"变更\"\nmsgstr \"changement\"\n\n#: install.sh:3876 install.sh:4215\nmsgid \"负载均衡配置\"\nmsgstr \"configuration d'équilibrage de charge\"\n\n#: install.sh:3879\nmsgid \"清除日志文件\"\nmsgstr \"effacer les fichiers journaux\"\n\n#: install.sh:3880\nmsgid \"查看证书状态\"\nmsgstr \"vérifier l'état du certificat\"\n\n#: install.sh:3881\nmsgid \"更新证书有效期\"\nmsgstr \"mettre à jour la validité du certificat\"\n\n#: install.sh:3882\nmsgid \"设置证书自动更新\"\nmsgstr \"configurer la mise à jour automatique des certificats\"\n\n#: install.sh:3883\nmsgid \"设置 Fail2ban 防暴力破解\"\nmsgstr \"configurer fail2ban pour prévenir les attaques par force brute\"\n\n#: install.sh:3884\nmsgid \"显示帮助\"\nmsgstr \"afficher l'aide\"\n\n#: install.sh:3885\nmsgid \"修改语言\"\nmsgstr \"modifier la langue\"\n\n#: install.sh:3888 install.sh:4218 install.sh:4222 install.sh:4223\n#: install.sh:4224 install.sh:4225 install.sh:4230 install.sh:4232\n#: fail2ban_manager.sh:15\nmsgid \"查看\"\nmsgstr \"voir\"\n\n#: install.sh:3888 install.sh:4225\nmsgid \"实时流量\"\nmsgstr \"trafic en temps réel\"\n\n#: install.sh:3889\nmsgid \"脚本卸载\"\nmsgstr \"désinstallation de script\"\n\n#: install.sh:3890\nmsgid \"显示安装信息\"\nmsgstr \"afficher les informations d'installation\"\n\n#: install.sh:3892 install.sh:4237\nmsgid \"加速\"\nmsgstr \"accélérer\"\n\n#: install.sh:3894\nmsgid \"更新脚本\"\nmsgstr \"mettre à jour le script\"\n\n#: install.sh:3896 install.sh:3897\nmsgid \"显示\"\nmsgstr \"afficher\"\n\n#: install.sh:3896\nmsgid \"访问信息\"\nmsgstr \"informations de visite\"\n\n#: install.sh:3897\nmsgid \"错误信息\"\nmsgstr \"message d'erreur\"\n\n#: install.sh:3921\nmsgid \"脚本版本变化较大, 可能存在不兼容情况, 是否继续使用\"\nmsgstr \"la version du script a beaucoup changé, il pourrait y avoir des incompatibilités. voulez-vous continuer à l'utiliser \"\n\n#: install.sh:3948\nmsgid \"检测失败\"\nmsgstr \"échec de la détection\"\n\n#: install.sh:3952 install.sh:3962 install.sh:3971\nmsgid \"有新版\"\nmsgstr \"il y a une nouvelle version\"\n\n#: install.sh:3955 install.sh:3964 install.sh:3974\nmsgid \"最新版\"\nmsgstr \"dernière version\"\n\n#: install.sh:3969\nmsgid \"版本未知\"\nmsgstr \"version inconnue\"\n\n#: install.sh:3989 install.sh:3996\nmsgid \"运行中\"\nmsgstr \"en cours d'exécution\"\n\n#: install.sh:3991 install.sh:4014 install.sh:4016\nmsgid \"无需测试\"\nmsgstr \"pas besoin de tester\"\n\n#: install.sh:3993 install.sh:3998\nmsgid \"未运行\"\nmsgstr \"non exécuté\"\n\n#: install.sh:4008\nmsgid \"无法连通\"\nmsgstr \"impossible de se connecter\"\n\n#: install.sh:4010 install.sh:4011 install.sh:4012\nmsgid \"本地正常\"\nmsgstr \"normal localement\"\n\n#: install.sh:4027\nmsgid \"脚本维护中.. 请稍后再试\"\nmsgstr \"script en cours de maintenance... veuillez réessayer plus tard\"\n\n#: install.sh:4034\nmsgid \"无法检测所需依赖的在线版本, 请稍后再试\"\nmsgstr \"impossible de détecter la version en ligne des dépendances requises, veuillez réessayer plus tard\"\n\n#: install.sh:4051\nmsgid \"请输入数字\"\nmsgstr \"veuillez entrer un chiffre\"\n\n#: install.sh:4051\nmsgid \"请输入 1 到 6 之间的有效数字\"\nmsgstr \"veuillez saisir un chiffre valide entre 1 et 6\"\n\n#: install.sh:4081\nmsgid \"无效的选择\"\nmsgstr \"choix invalide\"\n\n#: install.sh:4122\nmsgid \"请输入备份名称\"\nmsgstr \"veuillez saisir le nom de la sauvegarde\"\n\n#: install.sh:4122\nmsgid \"不需要后缀\"\nmsgstr \"pas besoin de suffixe\"\n\n#: install.sh:4131\nmsgid \"报错信息\"\nmsgstr \"message d'erreur\"\n\n#: install.sh:4133\nmsgid \"备份完整性可能受到影响, 请检查上述错误信息\"\nmsgstr \"l'intégrité de la sauvegarde pourrait être affectée, veuillez vérifier les informations d'erreur ci-dessus\"\n\n#: install.sh:4137\nmsgid \"备份失败\"\nmsgstr \"échec de la sauvegarde\"\n\n#: install.sh:4139\nmsgid \"备份成功\"\nmsgstr \"sauvegarde réussie\"\n\n#: install.sh:4144\nmsgid \"请确保备份文件在目录\"\nmsgstr \"veuillez vous assurer que le fichier de sauvegarde se trouve dans le répertoire\"\n\n#: install.sh:4148\nmsgid \"没有找到备份文件\"\nmsgstr \"aucun fichier de sauvegarde n'a été trouvé\"\n\n#: install.sh:4153\nmsgid \"发现多个备份文件\"\nmsgstr \"découverte de plusieurs fichiers de sauvegarde\"\n\n#: install.sh:4153\nmsgid \"将使用最新的文件进行恢复\"\nmsgstr \"la restauration sera effectuée à partir du fichier le plus récent\"\n\n#: install.sh:4157\nmsgid \"找到最新备份文件\"\nmsgstr \"trouver le fichier de sauvegarde le plus récent\"\n\n#: install.sh:4159\nmsgid \"恢复备份\"\nmsgstr \"restaurer la sauvegarde\"\n\n#: install.sh:4163\nmsgid \"恢复成功\"\nmsgstr \"restauration réussie\"\n\n#: install.sh:4164 install.sh:4166\nmsgid \"记得安装\"\nmsgstr \"rappelez-vous d'installer\"\n\n#: install.sh:4169\nmsgid \"恢复失败\"\nmsgstr \"échec de la restauration\"\n\n#: install.sh:4175\nmsgid \"安装管理脚本\"\nmsgstr \"installer le script de gestion\"\n\n#: install.sh:4176\nmsgid \"作者\"\nmsgstr \"auteur\"\n\n#: install.sh:4180\nmsgid \"当前模式\"\nmsgstr \"mode actuel\"\n\n#: install.sh:4181\nmsgid \"当前语言\"\nmsgstr \"langue actuelle\"\n\n#: install.sh:4184\nmsgid \"可以使用\"\nmsgstr \"peut être utilisé\"\n\n#: install.sh:4184\nmsgid \"命令管理脚本\"\nmsgstr \"script de gestion des commandes\"\n\n#: install.sh:4186\nmsgid \"版本检测\"\nmsgstr \"détection de version\"\n\n#: install.sh:4187 install.sh:4195 install.sh:4246\nmsgid \"脚本\"\nmsgstr \"script\"\n\n#: install.sh:4190\nmsgid \"运行状态\"\nmsgstr \"état de fonctionnement\"\n\n#: install.sh:4193\nmsgid \"连通性\"\nmsgstr \"connectivité\"\n\n#: install.sh:4194\nmsgid \"更新向导\"\nmsgstr \"assistant de mise à jour\"\n\n#: install.sh:4205\nmsgid \"安装向导\"\nmsgstr \"assistant d'installation\"\n\n#: install.sh:4210\nmsgid \"配置变更\"\nmsgstr \"changement de configuration\"\n\n#: install.sh:4217\nmsgid \"用户管理\"\nmsgstr \"gestion des utilisateurs\"\n\n#: install.sh:4218 install.sh:4219 install.sh:4220\nmsgid \"用户\"\nmsgstr \"utilisateur\"\n\n#: install.sh:4221\nmsgid \"查看信息\"\nmsgstr \"afficher les informations\"\n\n#: install.sh:4222\nmsgid \"实时访问日志\"\nmsgstr \"journal d'accès en temps réel\"\n\n#: install.sh:4223\nmsgid \"实时错误日志\"\nmsgstr \"journal des erreurs en temps réel\"\n\n#: install.sh:4226\nmsgid \"服务相关\"\nmsgstr \"service lié\"\n\n#: install.sh:4227 install.sh:4228 install.sh:4229 install.sh:4230\nmsgid \"所有服务\"\nmsgstr \"tous les services\"\n\n#: install.sh:4231\nmsgid \"证书相关\"\nmsgstr \"relatif aux certificats\"\n\n#: install.sh:4232\nmsgid \"证书状态\"\nmsgstr \"état du certificat\"\n\n#: install.sh:4233\nmsgid \"证书有效期\"\nmsgstr \"durée de validité du certificat\"\n\n#: install.sh:4234\nmsgid \"证书自动更新\"\nmsgstr \"mise à jour automatique des certificats\"\n\n#: install.sh:4235\nmsgid \"其他选项\"\nmsgstr \"autres options\"\n\n#: install.sh:4236\nmsgid \"自动更新\"\nmsgstr \"mise à jour automatique\"\n\n#: install.sh:4238\nmsgid \"防暴力破解\"\nmsgstr \"protection contre les attaques par force brute\"\n\n#: install.sh:4239\nmsgid \"流量统计\"\nmsgstr \"statistiques de trafic\"\n\n#: install.sh:4240\nmsgid \"清除\"\nmsgstr \"effacer\"\n\n#: install.sh:4240\nmsgid \"日志文件\"\nmsgstr \"fichier de journal\"\n\n#: install.sh:4241\nmsgid \"测试\"\nmsgstr \"test\"\n\n#: install.sh:4241\nmsgid \"服务器网速\"\nmsgstr \"vitesse de connexion du serveur\"\n\n#: install.sh:4242\nmsgid \"备份恢复\"\nmsgstr \"sauvegarde et restauration\"\n\n#: install.sh:4243 install.sh:4244\nmsgid \"全部文件\"\nmsgstr \"tous les fichiers\"\n\n#: install.sh:4244\nmsgid \"恢复\"\nmsgstr \"récupération\"\n\n#: install.sh:4245\nmsgid \"卸载向导\"\nmsgstr \"assistant de désinstallation\"\n\n#: install.sh:4246 fail2ban_manager.sh:14 fail2ban_manager.sh:415\nmsgid \"卸载\"\nmsgstr \"désinstaller\"\n\n#: install.sh:4247\nmsgid \"清空\"\nmsgstr \"vider\"\n\n#: install.sh:4247\nmsgid \"证书文件\"\nmsgstr \"fichier de certificat\"\n\n#: install.sh:4248 fail2ban_manager.sh:16 file_manager.sh:208\nmsgid \"退出\"\nmsgstr \"quitter\"\n\n#: install.sh:4251\nmsgid \"请输入选项\"\nmsgstr \"veuillez saisir une option\"\n\n#: install.sh:4259 install.sh:4268 install.sh:4334 install.sh:4340\n#: install.sh:4385 install.sh:4391 install.sh:4397 install.sh:4426\n#: install.sh:4467 install.sh:4474 install.sh:4479 fail2ban_manager.sh:416\nmsgid \"清空屏幕\"\nmsgstr \"effacer l'écran\"\n\n#: install.sh:4265\nmsgid \"不建议\"\nmsgstr \"déconseillé\"\n\n#: install.sh:4265\nmsgid \"频繁更新 Nginx, 请确认 Nginx 有更新的必要\"\nmsgstr \"mettez nginx à jour fréquemment et vérifiez qu’il est nécessaire de le mettre à jour\"\n\n#: install.sh:4266\nmsgid \"开始更新\"\nmsgstr \"commencer la mise à jour\"\n\n#: install.sh:4346 install.sh:4353 install.sh:4360 install.sh:4410\n#: install.sh:4415 install.sh:4420 install.sh:4442\nmsgid \"回到菜单\"\nmsgstr \"retour au menu\"\n\n#: fail2ban_manager.sh:10\nmsgid \"用于防止暴力破解\"\nmsgstr \"utilisé pour prévenir les attaques par force brute\"\n\n#: fail2ban_manager.sh:11 file_manager.sh:203\nmsgid \"主菜单\"\nmsgstr \"menu principal\"\n\n#: fail2ban_manager.sh:13\nmsgid \"管理\"\nmsgstr \"gestion\"\n\n#: fail2ban_manager.sh:15 fail2ban_manager.sh:339\nmsgid \"状态\"\nmsgstr \"état\"\n\n#: fail2ban_manager.sh:18 file_manager.sh:210\nmsgid \"请选择一个选项\"\nmsgstr \"veuillez sélectionner une option\"\n\n#: fail2ban_manager.sh:27 fail2ban_manager.sh:250 fail2ban_manager.sh:258\n#: fail2ban_manager.sh:363\nmsgid \"无效的选择, 请重试\"\nmsgstr \"option invalide, veuillez réessayer\"\n\n#: fail2ban_manager.sh:35\nmsgid \"已经安装, 跳过安装步骤\"\nmsgstr \"déjà installé, sauter l'étape d'installation\"\n\n#: fail2ban_manager.sh:68\nmsgid \"systemd 无法读取 SSH 日志\"\nmsgstr \"systemd ne peut pas lire les journaux ssh\"\n\n#: fail2ban_manager.sh:69\nmsgid \"跳过启用\"\nmsgstr \"passer l'activation\"\n\n#: fail2ban_manager.sh:69 fail2ban_manager.sh:93 fail2ban_manager.sh:103\n#: fail2ban_manager.sh:120 fail2ban_manager.sh:125 fail2ban_manager.sh:128\n#: fail2ban_manager.sh:146 fail2ban_manager.sh:151 fail2ban_manager.sh:154\nmsgid \"规则\"\nmsgstr \"règle\"\n\n#: fail2ban_manager.sh:77 fail2ban_manager.sh:203 fail2ban_manager.sh:440\nmsgid \"未安装, 请先安装\"\nmsgstr \"non installé, veuillez installer d'abord\"\n\n#: fail2ban_manager.sh:125 fail2ban_manager.sh:151 fail2ban_manager.sh:349\nmsgid \"已禁用\"\nmsgstr \"désactivé\"\n\n#: fail2ban_manager.sh:209\nmsgid \"请选择\"\nmsgstr \"veuillez sélectionner\"\n\n#: fail2ban_manager.sh:209\nmsgid \"操作\"\nmsgstr \"opération\"\n\n#: fail2ban_manager.sh:210\nmsgid \"管理模块\"\nmsgstr \"module de gestion\"\n\n#: fail2ban_manager.sh:211\nmsgid \"添加自定义规则\"\nmsgstr \"ajouter une règle personnalisée\"\n\n#: fail2ban_manager.sh:212 fail2ban_manager.sh:228\nmsgid \"服务管理\"\nmsgstr \"gestion des services\"\n\n#: fail2ban_manager.sh:271\nmsgid \"请输入新的\"\nmsgstr \"veuillez entrer le nouveau\"\n\n#: fail2ban_manager.sh:271 fail2ban_manager.sh:272\nmsgid \"名称\"\nmsgstr \"nom\"\n\n#: fail2ban_manager.sh:273\nmsgid \"请输入日志路径\"\nmsgstr \"veuillez saisir le chemin du journal\"\n\n#: fail2ban_manager.sh:274\nmsgid \"请输入最大重试次数\"\nmsgstr \"veuillez saisir le nombre maximum de tentatives\"\n\n#: fail2ban_manager.sh:274\nmsgid \"最大重试次数必须在 1 到 99 之间\"\nmsgstr \"le nombre maximum de tentatives doit être compris entre 1 et 99\"\n\n#: fail2ban_manager.sh:275\nmsgid \"请输入封禁时间\"\nmsgstr \"veuillez saisir le temps de blocage\"\n\n#: fail2ban_manager.sh:275\nmsgid \"秒\"\nmsgstr \"seconde\"\n\n#: fail2ban_manager.sh:275\nmsgid \"封禁时间必须在 1 到 8640000 秒之间\"\nmsgstr \"la durée de blocage doit être comprise entre 1 et 8640000 secondes\"\n\n#: fail2ban_manager.sh:285\nmsgid \"自定义规则添加成功\"\nmsgstr \"règle personnalisée ajoutée avec succès\"\n\n#: fail2ban_manager.sh:289\nmsgid \"重启以应用新规则\"\nmsgstr \"redémarrez pour appliquer les nouvelles règles\"\n\n#: fail2ban_manager.sh:294\nmsgid \"管理 Fail2ban 模块\"\nmsgstr \"gérer le module fail2ban\"\n\n#: fail2ban_manager.sh:311\nmsgid \"未找到任何模块化配置文件\"\nmsgstr \"aucun fichier de configuration modulaire n’a été trouvé\"\n\n#: fail2ban_manager.sh:319 fail2ban_manager.sh:339\nmsgid \"模块名称\"\nmsgstr \"nom du module\"\n\n#: fail2ban_manager.sh:339 file_manager.sh:59\nmsgid \"序号\"\nmsgstr \"numéro de série\"\n\n#: fail2ban_manager.sh:363\nmsgid \"请选择要管理的模块\"\nmsgstr \"veuillez sélectionner le module à gérer\"\n\n#: fail2ban_manager.sh:375\nmsgid \"启用\"\nmsgstr \"activer\"\n\n#: fail2ban_manager.sh:375\nmsgid \"禁用\"\nmsgstr \"désactiver\"\n\n#: fail2ban_manager.sh:378\nmsgid \"是否\"\nmsgstr \"est-ce que…\"\n\n#: fail2ban_manager.sh:378 fail2ban_manager.sh:386\nmsgid \"模块\"\nmsgstr \"module\"\n\n#: fail2ban_manager.sh:388\nmsgid \"操作已取消\"\nmsgstr \"l’opération a été annulée\"\n\n#: fail2ban_manager.sh:424\nmsgid \"停止成功\"\nmsgstr \"arrêt réussi\"\n\n#: fail2ban_manager.sh:444\nmsgid \"总体状态\"\nmsgstr \"état général\"\n\n#: fail2ban_manager.sh:448\nmsgid \"默认启用的 Jail 状态\"\nmsgstr \"état jail activé par défaut\"\n\n#: fail2ban_manager.sh:452 fail2ban_manager.sh:458\nmsgid \"封锁情况\"\nmsgstr \"situation de blocus\"\n\n#: fail2ban_manager.sh:453 fail2ban_manager.sh:459 fail2ban_manager.sh:462\n#: fail2ban_manager.sh:466 fail2ban_manager.sh:469\nmsgid \"未启用或配置异常\"\nmsgstr \"non activé ou configuration anormale\"\n\n#: fail2ban_manager.sh:484 file_manager.sh:232\nmsgid \"新版本可用\"\nmsgstr \"nouvelle version disponible\"\n\n#: fail2ban_manager.sh:484 file_manager.sh:232\nmsgid \"当前版本\"\nmsgstr \"version actuelle\"\n\n#: fail2ban_manager.sh:485 file_manager.sh:233\nmsgid \"请访问\"\nmsgstr \"veuillez visiter\"\n\n#: fail2ban_manager.sh:485 file_manager.sh:233\nmsgid \"查看更新说明\"\nmsgstr \"voir les notes de mise à jour\"\n\n#: fail2ban_manager.sh:487 file_manager.sh:235\nmsgid \"是否下载并安装新版本\"\nmsgstr \"télécharger et installer la nouvelle version \"\n\n#: fail2ban_manager.sh:491 file_manager.sh:239\nmsgid \"正在下载新版本\"\nmsgstr \"téléchargement de la nouvelle version en cours\"\n\n#: fail2ban_manager.sh:496 file_manager.sh:244\nmsgid \"下载完成, 请重新运行脚本\"\nmsgstr \"téléchargement terminé, veuillez relancer le script\"\n\n#: fail2ban_manager.sh:504 file_manager.sh:252\nmsgid \"跳过更新\"\nmsgstr \"ignorer la mise à jour\"\n\n#: fail2ban_manager.sh:508 file_manager.sh:256\nmsgid \"当前已经是最新版本\"\nmsgstr \"c'est déjà la version la plus récente\"\n\n#: file_manager.sh:7\nmsgid \"用法\"\nmsgstr \"utilisation\"\n\n#: file_manager.sh:7\nmsgid \"文件扩展名\"\nmsgstr \"extension de fichier\"\n\n#: file_manager.sh:7\nmsgid \"目录路径\"\nmsgstr \"chemin du répertoire\"\n\n#: file_manager.sh:16\nmsgid \"目录\"\nmsgstr \"table des matières\"\n\n#: file_manager.sh:16\nmsgid \"不存在, 请检查路径\"\nmsgstr \"inexistant, veuillez vérifier le chemin\"\n\n#: file_manager.sh:26 file_manager.sh:204\nmsgid \"列出所有\"\nmsgstr \"énumérer tout\"\n\n#: file_manager.sh:26 file_manager.sh:35 file_manager.sh:88 file_manager.sh:111\n#: file_manager.sh:160 file_manager.sh:176 file_manager.sh:204\n#: file_manager.sh:205 file_manager.sh:206 file_manager.sh:207\nmsgid \"文件\"\nmsgstr \"fichier\"\n\n#: file_manager.sh:53\nmsgid \"文件名\"\nmsgstr \"nom du fichier\"\n\n#: file_manager.sh:79\nmsgid \"请输入网址 (例如 hey.run)\"\nmsgstr \"veuillez saisir l'adresse url (par exemple hey.run)\"\n\n#: file_manager.sh:80\nmsgid \"不要包含 http:// 或 https:// 开头\"\nmsgstr \"ne pas inclure http:// ou https:// au début\"\n\n#: file_manager.sh:84\nmsgid \"网址不能包含 http:// 或 https:// 前缀\"\nmsgstr \"l’adresse url ne peut pas contenir le préfixe http:// ou https://\"\n\n#: file_manager.sh:88 file_manager.sh:111\nmsgid \"已创建\"\nmsgstr \"déjà créé\"\n\n#: file_manager.sh:99\nmsgid \"请输入主机\"\nmsgstr \"veuillez entrer l'hôte\"\n\n#: file_manager.sh:107\nmsgid \"请输入权重\"\nmsgstr \"veuillez entrer le poids\"\n\n#: file_manager.sh:128\nmsgid \"追加完成\"\nmsgstr \"ajout complété\"\n\n#: file_manager.sh:132 file_manager.sh:136\nmsgid \"重启完成\"\nmsgstr \"redémarrage terminé\"\n\n#: file_manager.sh:151\nmsgid \"请输入要编辑的文件编号\"\nmsgstr \"veuillez saisir le numéro du fichier à éditer\"\n\n#: file_manager.sh:156\nmsgid \"未安装, 正在尝试安装\"\nmsgstr \"non installé, en cours d'installation\"\n\n#: file_manager.sh:160\nmsgid \"已编辑\"\nmsgstr \"déjà édité\"\n\n#: file_manager.sh:171\nmsgid \"请输入要删除的文件编号\"\nmsgstr \"veuillez saisir le numéro du fichier à supprimer\"\n\n#: file_manager.sh:194\nmsgid \"不支持的文件扩展名\"\nmsgstr \"extension de fichier non prise en charge\"\n\n#: file_manager.sh:205\nmsgid \"创建一个新的\"\nmsgstr \"créer un nouveau\"\n\n#: file_manager.sh:206\nmsgid \"编辑一个已存在的\"\nmsgstr \"modifier un existant\"\n\n#: file_manager.sh:207\nmsgid \"删除一个已存在的\"\nmsgstr \"supprimer un existant\"\n\n#: file_manager.sh:265\nmsgid \"重启成功\"\nmsgstr \"redémarrage réussi\"\n\n#: file_manager.sh:268\nmsgid \"重启失败\"\nmsgstr \"redémarrage échoué\"\n\n#: file_manager.sh:268\nmsgid \"请检查配置文件是否有误\"\nmsgstr \"veuillez vérifier si le fichier de configuration contient des erreurs\"\n"
  },
  {
    "path": "po/ko.po",
    "content": "# Korean translations for xray_install package.\n# Copyright (C) 2026 yunshu\n# This file is distributed under the same license as the xray_install package.\n# Automatically generated, 2026.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: xray_install 1.0\\n\"\n\"Report-Msgid-Bugs-To: https://github.com/hello-yunshu/Xray_bash_onekey/\"\n\"issues\\n\"\n\"POT-Creation-Date: 2026-04-24 09:47+0000\\n\"\n\"PO-Revision-Date: 2026-04-24 09:47+0000\\n\"\n\"Last-Translator: Automatically generated\\n\"\n\"Language-Team: none\\n\"\n\"Language: ko\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\n#: install.sh:32\nmsgid \"信息\"\nmsgstr \"정보\"\n\n#: install.sh:34\nmsgid \"错误\"\nmsgstr \"오류\"\n\n#: install.sh:35\nmsgid \"警告\"\nmsgstr \"경고\"\n\n#: install.sh:38 install.sh:1540 install.sh:3960 install.sh:3977\n#: install.sh:3980 install.sh:3981 install.sh:4019\nmsgid \"未安装\"\nmsgstr \"미설치\"\n\n#: install.sh:99\nmsgid \"日志文件归档失败\"\nmsgstr \"로그 파일 보관 실패\"\n\n#: install.sh:104\nmsgid \"日志文件清空失败\"\nmsgstr \"로그 파일 비우기 실패\"\n\n#: install.sh:108\nmsgid \"日志文件已轮转并归档为\"\nmsgstr \"로그 파일이 회전되어 다음과 같이 보관되었습니다\"\n\n#: install.sh:134 install.sh:138 install.sh:142 install.sh:152\nmsgid \"当前系统为\"\nmsgstr \"현재 시스템은\"\n\n#: install.sh:152\nmsgid \"不在支持的系统列表内, 安装中断\"\nmsgstr \"지원되지 않는 시스템 목록에 포함되어 있어 설치가 중단되었습니다\"\n\n#: install.sh:159\nmsgid \"当前用户是 root 用户, 开始安装\"\nmsgstr \"현재 사용자는 root 사용자입니다. 설치를 시작합니다\"\n\n#: install.sh:161\nmsgid \"当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本\"\nmsgstr \"현재 사용자는 root 사용자가 아닙니다. root 사용자로 전환한 후 스크립트를 다시 실행해 주세요\"\n\n#: install.sh:187\nmsgid \"无法获取远程语言文件信息\"\nmsgstr \"원격 언어 파일 정보를 가져올 수 없습니다\"\n\n#: install.sh:205\nmsgid \"正在更新语言文件\"\nmsgstr \"언어 파일을 업데이트 중입니다\"\n\n#: install.sh:208 install.sh:291\nmsgid \"语言文件更新失败\"\nmsgstr \"언어 파일 업데이트 실패\"\n\n#: install.sh:213\nmsgid \"语言文件无效\"\nmsgstr \"언어 파일이 유효하지 않습니다\"\n\n#: install.sh:219\nmsgid \"版本文件更新失败\"\nmsgstr \"버전 파일 업데이트 실패\"\n\n#: install.sh:226\nmsgid \"语言文件更新完成\"\nmsgstr \"언어 파일 업데이트 완료\"\n\n#: install.sh:231 install.sh:2725\nmsgid \"正在安装\"\nmsgstr \"설치 중\"\n\n#: install.sh:234\nmsgid \"安装失败\"\nmsgstr \"설치 실패\"\n\n#: install.sh:234 install.sh:258 install.sh:281 install.sh:291\nmsgid \"将使用默认语言\"\nmsgstr \"기본 언어를 사용합니다\"\n\n#: install.sh:258 file_manager.sh:35\nmsgid \"未找到\"\nmsgstr \"찾을 수 없음\"\n\n#: install.sh:281\nmsgid \"不支持的语言\"\nmsgstr \"지원하지 않는 언어\"\n\n#: install.sh:297\nmsgid \"发现语言文件更新\"\nmsgstr \"언어 파일 업데이트를 발견했습니다\"\n\n#: install.sh:312 install.sh:1740\nmsgid \"完成\"\nmsgstr \"완성\"\n\n#: install.sh:315\nmsgid \"失败\"\nmsgstr \"실패\"\n\n#: install.sh:322\nmsgid \"在线版本检测失败, 请稍后再试\"\nmsgstr \"온라인 버전 검사에 실패했습니다. 잠시 후 다시 시도해 주세요\"\n\n#: install.sh:344 install.sh:352 install.sh:1162 install.sh:3872\n#: install.sh:3873 install.sh:3874 install.sh:3875 install.sh:4206\n#: install.sh:4207 install.sh:4208 install.sh:4209 fail2ban_manager.sh:12\n#: fail2ban_manager.sh:39\nmsgid \"安装\"\nmsgstr \"설치\"\n\n#: install.sh:346 install.sh:354 install.sh:1169 install.sh:2729\n#: install.sh:3969\nmsgid \"已安装\"\nmsgstr \"설치됨\"\n\n#: install.sh:371 install.sh:375\nmsgid \"自启动配置\"\nmsgstr \"자동 실행 설정\"\n\n#: install.sh:384\nmsgid \"链接库安装\"\nmsgstr \"링크 라이브러리 설치\"\n\n#: install.sh:389\nmsgid \"值为空或超出范围, 请重新输入\"\nmsgstr \"값이 비어 있거나 범위를 초과했습니다. 다시 입력해 주십시오\"\n\n#: install.sh:398\nmsgid \"值为空, 请重新输入\"\nmsgstr \"값이 비어 있습니다. 다시 입력해 주세요\"\n\n#: install.sh:440\nmsgid \"确定端口\"\nmsgstr \"포트 확인\"\n\n#: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:104\nmsgid \"请输入端口\"\nmsgstr \"포트를 입력하세요\"\n\n#: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:107\nmsgid \"默认值\"\nmsgstr \"기본값\"\n\n#: install.sh:441 install.sh:444 install.sh:532 install.sh:554 install.sh:3055\n#: install.sh:3060 install.sh:3065 install.sh:3066 install.sh:3081\n#: install.sh:3086 install.sh:3091 install.sh:3092\nmsgid \"请输入 0-65535 之间的值\"\nmsgstr \"0-65535 사이의 값을 입력하세요\"\n\n#: install.sh:443\nmsgid \"端口不允许使用, 请重新输入\"\nmsgstr \"포트를 사용할 수 없습니다. 다시 입력해 주세요\"\n\n#: install.sh:452\nmsgid \"请选择安装协议\"\nmsgstr \"설치 계약서를 선택해 주십시오\"\n\n#: install.sh:453 install.sh:1617 install.sh:1654 install.sh:1705\n#: install.sh:2997 install.sh:3142 install.sh:3209 install.sh:3256\n#: fail2ban_manager.sh:274 fail2ban_manager.sh:275\nmsgid \"默认\"\nmsgstr \"기본\"\n\n#: install.sh:457 install.sh:532 install.sh:554 install.sh:635 install.sh:668\n#: install.sh:821 install.sh:840 install.sh:881 install.sh:922 install.sh:1621\n#: install.sh:1634 install.sh:1656 install.sh:1709 install.sh:1719\n#: install.sh:2985 install.sh:3000 install.sh:3055 install.sh:3060\n#: install.sh:3065 install.sh:3066 install.sh:3081 install.sh:3086\n#: install.sh:3091 install.sh:3092 install.sh:3145 install.sh:3154\n#: install.sh:3212 install.sh:3259 install.sh:3268 fail2ban_manager.sh:215\n#: fail2ban_manager.sh:234 fail2ban_manager.sh:272 file_manager.sh:81\nmsgid \"请输入\"\nmsgstr \"입력하세요\"\n\n#: install.sh:457 install.sh:922 install.sh:1621 install.sh:1656\n#: install.sh:1709 install.sh:2985 install.sh:3000 install.sh:3145\n#: install.sh:3212 install.sh:3259 install.sh:4251 install.sh:4489\nmsgid \"请输入有效的数字\"\nmsgstr \"유효한 숫자를 입력하세요\"\n\n#: install.sh:478\nmsgid \"是否添加简单 ws/gRPC 协议 用于负载均衡\"\nmsgstr \"단순한 ws/grpc 프로토콜을 로드 밸런싱에 추가할 것인지\"\n\n#: install.sh:479 install.sh:1259\nmsgid \"如不清楚具体用途, 请勿选择\"\nmsgstr \"구체적인 용도가 명확하지 않은 경우 선택하지 마십시오\"\n\n#: install.sh:499\nmsgid \"已跳过添加简单 ws/gRPC 协议\"\nmsgstr \"간단한 ws/grpc 프로토콜 추가를 건너뛰었습니다\"\n\n#: install.sh:528 install.sh:550 install.sh:631 install.sh:648 install.sh:664\n#: install.sh:681 install.sh:696 install.sh:815 install.sh:836 install.sh:877\nmsgid \"是否需要自定义\"\nmsgstr \"맞춤형이 필요한가요\"\n\n#: install.sh:532 install.sh:554\nmsgid \"请勿与其他端口相同\"\nmsgstr \"다른 포트와 동일하지 마십시오\"\n\n#: install.sh:571 file_manager.sh:114\nmsgid \"是否需要设置防火墙\"\nmsgstr \"방화벽을 설정해야 하나요\"\n\n#: install.sh:611 install.sh:615 file_manager.sh:128 file_manager.sh:132\n#: file_manager.sh:136\nmsgid \"防火墙\"\nmsgstr \"방화벽\"\n\n#: install.sh:611 install.sh:615 install.sh:2215 install.sh:2218\n#: install.sh:3012 install.sh:3014 install.sh:4227 fail2ban_manager.sh:231\n#: fail2ban_manager.sh:432\nmsgid \"重启\"\nmsgstr \"재부팅\"\n\n#: install.sh:617\nmsgid \"开放防火墙相关端口\"\nmsgstr \"방화벽 관련 포트 개방\"\n\n#: install.sh:618\nmsgid \"若修改配置, 请注意关闭防火墙相关端口\"\nmsgstr \"구성을 수정할 경우 방화벽 관련 포트를 닫는 것을 유의하십시오\"\n\n#: install.sh:619 install.sh:3877 install.sh:3892 install.sh:3893\n#: install.sh:4216 install.sh:4236 fail2ban_manager.sh:161\nmsgid \"配置\"\nmsgstr \"구성\"\n\n#: install.sh:622 file_manager.sh:140\nmsgid \"跳过防火墙设置\"\nmsgstr \"방화벽 설정 건너뛰기\"\n\n#: install.sh:631 install.sh:635 install.sh:636 install.sh:640 install.sh:648\n#: install.sh:664 install.sh:668 install.sh:669 install.sh:673 install.sh:681\n#: install.sh:1101\nmsgid \"伪装路径\"\nmsgstr \"위장 경로\"\n\n#: install.sh:635 install.sh:668\nmsgid \"不需要\"\nmsgstr \"필요하지 않다\"\n\n#: install.sh:696 install.sh:706 install.sh:3172\nmsgid \"用户名\"\nmsgstr \"사용자 이름\"\n\n#: install.sh:700\nmsgid \"请输入正确的 email\"\nmsgstr \"올바른 이메일을 입력하세요\"\n\n#: install.sh:713\nmsgid \"是否需要自定义字符串映射\"\nmsgstr \"사용자 정의 문자열 매핑이 필요한가요\"\n\n#: install.sh:717\nmsgid \"请输入自定义字符串\"\nmsgstr \"사용자 정의 문자열을 입력하세요\"\n\n#: install.sh:717\nmsgid \"最多30字符\"\nmsgstr \"최대 30자\"\n\n#: install.sh:719\nmsgid \"自定义字符串\"\nmsgstr \"사용자 정의 문자열\"\n\n#: install.sh:726 install.sh:2836 install.sh:3895 install.sh:4211\n#: install.sh:4314\nmsgid \"映射字符串\"\nmsgstr \"문자열 매핑\"\n\n#: install.sh:737\nmsgid \"检测到 target 域名已配置, 是否保留\"\nmsgstr \"타겟 도메인이 이미 구성된 것을 감지했습니다. 유지하시겠습니까\"\n\n#: install.sh:757\nmsgid \"请输入一个域名\"\nmsgstr \"도메인 이름을 입력하세요\"\n\n#: install.sh:758\nmsgid \"域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用\"\nmsgstr \"도메인은 tlsv1.3, x25519 및 h2를 지원해야 하며 도메인 리디렉션을 사용하지 않아야 합니다\"\n\n#: install.sh:759\nmsgid \"确认域名符合要求后请输入\"\nmsgstr \"도메인 이름이 요구 사항을 충족하는지 확인한 후 입력해 주십시오\"\n\n#: install.sh:760\nmsgid \"正在检测域名请等待\"\nmsgstr \"도메인을 검사 중입니다. 잠시 기다려 주십시오\"\n\n#: install.sh:767 install.sh:772 install.sh:777\nmsgid \"该域名不支持\"\nmsgstr \"해당 도메인은 지원하지 않습니다\"\n\n#: install.sh:782\nmsgid \"该域名发生了跳转\"\nmsgstr \"해당 도메인이 리디렉션되었습니다\"\n\n#: install.sh:789\nmsgid \"该域名可能不满足所有要求\"\nmsgstr \"해당 도메인명이 모든 요구 사항을 충족하지 않을 수 있습니다\"\n\n#: install.sh:790\nmsgid \"是否仍要设置此域名\"\nmsgstr \"이 도메인 이름을 여전히 설정하시겠습니까\"\n\n#: install.sh:802 install.sh:807 install.sh:1619\nmsgid \"域名\"\nmsgstr \"도메인 이름\"\n\n#: install.sh:802\nmsgid \"满足所有要求\"\nmsgstr \"모든 요구 사항을 충족하다\"\n\n#: install.sh:815\nmsgid \"域名的\"\nmsgstr \"도메인의\"\n\n#: install.sh:816\nmsgid \"默认为\"\nmsgstr \"기본값은\"\n\n#: install.sh:816\nmsgid \"域名本身\"\nmsgstr \"도메인 자체\"\n\n#: install.sh:817 install.sh:912 install.sh:952\nmsgid \"如不清楚具体用途, 请勿继续\"\nmsgstr \"구체적인 용도가 명확하지 않은 경우 계속 사용하지 마십시오\"\n\n#: install.sh:898\nmsgid \"本地文件 file_manager.sh 不存在, 正在下载\"\nmsgstr \"로컬 파일 file_manager.sh가 존재하지 않아 다운로드 중입니다\"\n\n#: install.sh:900 install.sh:2330 fail2ban_manager.sh:500 file_manager.sh:248\nmsgid \"下载失败, 请手动下载并安装新版本\"\nmsgstr \"다운로드에 실패했습니다. 수동으로 새 버전을 다운로드하여 설치해 주세요\"\n\n#: install.sh:911 install.sh:951\nmsgid \"是否变更\"\nmsgstr \"변경 여부\"\n\n#: install.sh:911\nmsgid \"负载均衡\"\nmsgstr \"로드 밸런싱\"\n\n#: install.sh:917\nmsgid \"请选择协议为 ws 或 gRPC\"\nmsgstr \"프로토콜을 ws 또는 grpc로 선택하세요\"\n\n#: install.sh:920 fail2ban_manager.sh:213 fail2ban_manager.sh:232\n#: fail2ban_manager.sh:325 fail2ban_manager.sh:357\nmsgid \"返回\"\nmsgstr \"돌아가기\"\n\n#: install.sh:930 file_manager.sh:220\nmsgid \"无效选项, 请重试\"\nmsgstr \"잘못된 옵션입니다. 다시 시도해 주세요\"\n\n#: install.sh:940 install.sh:964 install.sh:2266 install.sh:2304\n#: install.sh:2320\nmsgid \"当前模式不支持此操作\"\nmsgstr \"현재 모드는 이 작업을 지원하지 않습니다\"\n\n#: install.sh:953\nmsgid \"配置用途可以参考文章\"\nmsgstr \"사용 용도는 문서를 참고하십시오\"\n\n#: install.sh:980 install.sh:991 install.sh:995 install.sh:999 install.sh:1011\n#: install.sh:1016 install.sh:1020 install.sh:1025 install.sh:1045\n#: install.sh:1051 install.sh:1101 install.sh:1120 install.sh:3893\n#: install.sh:4177\nmsgid \"修改\"\nmsgstr \"수정\"\n\n#: install.sh:1053 install.sh:2816 install.sh:2818 install.sh:2820\n#: install.sh:2821 install.sh:2824 install.sh:2828 install.sh:2830\n#: install.sh:2832 install.sh:2833 install.sh:2861 install.sh:2864\n#: install.sh:2867 install.sh:2869 install.sh:3049\nmsgid \"端口\"\nmsgstr \"포트\"\n\n#: install.sh:1103\nmsgid \"不支持\"\nmsgstr \"지원하지 않음\"\n\n#: install.sh:1110\nmsgid \"用户名修改\"\nmsgstr \"사용자 이름 수정\"\n\n#: install.sh:1113 install.sh:1123\nmsgid \"请先删除多余的用户\"\nmsgstr \"먼저 중복된 사용자를 삭제해 주십시오\"\n\n#: install.sh:1131 install.sh:1139 install.sh:1146 install.sh:1990\n#: install.sh:2061 install.sh:2146 install.sh:2154 install.sh:2163\n#: install.sh:2186\nmsgid \"配置修改\"\nmsgstr \"구성 수정\"\n\n#: install.sh:1151\nmsgid \"检测到 Xray 的权限控制, 启动修改程序\"\nmsgstr \"xray의 권한 제어를 감지하여 수정 프로그램을 시작합니다\"\n\n#: install.sh:1156\nmsgid \"修改完成\"\nmsgstr \"수정 완료\"\n\n#: install.sh:1176\nmsgid \"若更新无效, 建议直接卸载再安装\"\nmsgstr \"업데이트가 적용되지 않는 경우, 직접 삭제 후 다시 설치하는 것을 권장합니다\"\n\n#: install.sh:1177\nmsgid \"部分新功能需要重新安装才可生效\"\nmsgstr \"일부 새로운 기능은 다시 설치해야 적용됩니다\"\n\n#: install.sh:1182\nmsgid \"检测到存在最新版\"\nmsgstr \"최신 버전이 존재하는 것으로 감지됨\"\n\n#: install.sh:1183\nmsgid \"脚本可能未兼容此版本\"\nmsgstr \"스크립트가 이 버전과 호환되지 않을 수 있습니다\"\n\n#: install.sh:1184\nmsgid \"是否更新\"\nmsgstr \"업데이트 여부\"\n\n#: install.sh:1188 install.sh:1213 install.sh:1532 install.sh:3886\n#: install.sh:3898 install.sh:4195 install.sh:4196 install.sh:4197\n#: install.sh:4233\nmsgid \"更新\"\nmsgstr \"업데이트\"\n\n#: install.sh:1192 install.sh:1494\nmsgid \"启动失败\"\nmsgstr \"시작 실패\"\n\n#: install.sh:1193 install.sh:1497\nmsgid \"是否回滚到之前的版本\"\nmsgstr \"이전 버전으로 롤백할까요\"\n\n#: install.sh:1197 install.sh:1507\nmsgid \"未执行回滚操作\"\nmsgstr \"롤백 작업이 실행되지 않았습니다\"\n\n#: install.sh:1201 install.sh:1511\nmsgid \"正在回滚\"\nmsgstr \"롤백 중입니다\"\n\n#: install.sh:1205 install.sh:1518\nmsgid \"已成功回滚到之前的\"\nmsgstr \"이전 버전으로 성공적으로 롤백되었습니다\"\n\n#: install.sh:1205 install.sh:1518 install.sh:4214 install.sh:4329\nmsgid \"版本\"\nmsgstr \"버전\"\n\n#: install.sh:1207 install.sh:1228 install.sh:1524\nmsgid \"回滚失败\"\nmsgstr \"롤백 실패\"\n\n#: install.sh:1234 install.sh:1238\nmsgid \"重装\"\nmsgstr \"중장\"\n\n#: install.sh:1248 install.sh:1249\nmsgid \"更新失败\"\nmsgstr \"업데이트 실패\"\n\n#: install.sh:1257\nmsgid \"是否添加 Reality 负载均衡\"\nmsgstr \"리얼리티 로드 밸런싱을 추가할지 여부\"\n\n#: install.sh:1258\nmsgid \"使用此功能前，建议先阅读作者教程\"\nmsgstr \"이 기능을 사용하기 전에 먼저 작성자의 튜토리얼을 읽는 것을 권장합니다\"\n\n#: install.sh:1264 fail2ban_manager.sh:93 fail2ban_manager.sh:103\n#: fail2ban_manager.sh:128 fail2ban_manager.sh:154 fail2ban_manager.sh:347\nmsgid \"已启用\"\nmsgstr \"활성화됨\"\n\n#: install.sh:1268\nmsgid \"已跳过\"\nmsgstr \"건너뛰었습니다\"\n\n#: install.sh:1277\nmsgid \"Reality 协议有流量偷跑的风险\"\nmsgstr \"reality 프로토콜은 트래픽 유출의 위험이 있다\"\n\n#: install.sh:1279 install.sh:1306\nmsgid \"是否额外安装 nginx 前置保护\"\nmsgstr \"nginx 프런트엔드 보호를 추가로 설치할 것인지 여부\"\n\n#: install.sh:1279\nmsgid \"推荐\"\nmsgstr \"추천\"\n\n#: install.sh:1286 install.sh:1321\nmsgid \"检测到已安装\"\nmsgstr \"설치된 것을 감지했습니다\"\n\n#: install.sh:1289 install.sh:1324\nmsgid \"已跳过安装\"\nmsgstr \"설치를 건너뛰었습니다\"\n\n#: install.sh:1303\nmsgid \"检测到已开启 Reality 负载均衡\"\nmsgstr \"reality 로드 밸런싱이 이미 활성화된 것을 감지했습니다\"\n\n#: install.sh:1304\nmsgid \"如用作 Reality 负载均衡主服务器必须安装\"\nmsgstr \"reality 부하 분산 주 서버로 사용할 경우 반드시 설치해야 합니다\"\n\n#: install.sh:1305\nmsgid \"如用作 Reality 负载均衡二级服务器则无需安装\"\nmsgstr \"reality 로드 밸런싱 2차 서버로 사용할 경우 설치할 필요가 없습니다\"\n\n#: install.sh:1349\nmsgid \"已存在, 跳过编译安装过程\"\nmsgstr \"이미 존재합니다. 컴파일 설치 과정을 건너뜁니다\"\n\n#: install.sh:1351\nmsgid \"检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装\"\nmsgstr \"다른 패키지가 설치한 nginx를 감지했습니다. 계속 설치하면 충돌이 발생할 수 있으니 처리 후 설치해 주십시오\"\n\n#: install.sh:1364\nmsgid \"即将下载已编译的\"\nmsgstr \"곧 컴파일된 것을 다운로드할 예정입니다\"\n\n#: install.sh:1374\nmsgid \"不支持的系统架构\"\nmsgstr \"지원되지 않는 시스템 아키텍처\"\n\n#: install.sh:1383\nmsgid \"下载失败\"\nmsgstr \"다운로드 실패\"\n\n#: install.sh:1387\nmsgid \"下载成功\"\nmsgstr \"다운로드 성공\"\n\n#: install.sh:1390\nmsgid \"解压失败\"\nmsgstr \"압축 풀기 실패\"\n\n#: install.sh:1438 install.sh:1439 install.sh:1446 install.sh:1447\nmsgid \"配置不完整, 退出更新\"\nmsgstr \"구성이 완전하지 않습니다. 업데이트를 종료합니다\"\n\n#: install.sh:1451 install.sh:1452\nmsgid \"当前安装模式不需要\"\nmsgstr \"현재 설치 모드는 필요하지 않습니다\"\n\n#: install.sh:1456 install.sh:1457\nmsgid \"配置不存在, 退出更新\"\nmsgstr \"구성이 존재하지 않습니다. 업데이트를 종료합니다\"\n\n#: install.sh:1463\nmsgid \"备份旧版\"\nmsgstr \"이전 버전 백업\"\n\n#: install.sh:1464\nmsgid \"删除旧版\"\nmsgstr \"이전 버전 삭제\"\n\n#: install.sh:1468\nmsgid \"是否保留原 Nginx 配置文件\"\nmsgstr \"기존 nginx 구성 파일을 유지할까요\"\n\n#: install.sh:1476 install.sh:1809\nmsgid \"原配置文件已删除\"\nmsgstr \"원래 구성 파일이 삭제되었습니다\"\n\n#: install.sh:1480\nmsgid \"原配置文件已保留\"\nmsgstr \"원래 구성 파일이 보존되었습니다\"\n\n#: install.sh:1534 install.sh:4220\nmsgid \"删除\"\nmsgstr \"삭제\"\n\n#: install.sh:1534 install.sh:4243\nmsgid \"备份\"\nmsgstr \"백업\"\n\n#: install.sh:1537\nmsgid \"已为最新版\"\nmsgstr \"최신 버전으로 업데이트되었습니다\"\n\n#: install.sh:1553\nmsgid \"设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)\"\nmsgstr \"백그라운드에서 자동 업데이트 프로그램 설정 (포함: 스크립트/xray/nginx)\"\n\n#: install.sh:1554\nmsgid \"可能自动更新后有兼容问题, 谨慎启用\"\nmsgstr \"자동 업데이트 후 호환성 문제가 발생할 수 있으니 신중히 활성화하세요\"\n\n#: install.sh:1555 fail2ban_manager.sh:120 fail2ban_manager.sh:146\nmsgid \"是否启用\"\nmsgstr \"활성화 여부\"\n\n#: install.sh:1561 install.sh:3878\nmsgid \"设置自动更新\"\nmsgstr \"자동 업데이트 설정\"\n\n#: install.sh:1566\nmsgid \"已设置自动更新\"\nmsgstr \"자동 업데이트가 설정되었습니다\"\n\n#: install.sh:1567\nmsgid \"是否关闭\"\nmsgstr \"종료할까요\"\n\n#: install.sh:1573\nmsgid \"删除自动更新\"\nmsgstr \"자동 업데이트 삭제\"\n\n#: install.sh:1582\nmsgid \"安装 SSL 证书生成脚本依赖\"\nmsgstr \"ssl 인증서 생성 스크립트 의존성 설치\"\n\n#: install.sh:1584\nmsgid \"安装 SSL 证书生成脚本\"\nmsgstr \"ssl 인증서 생성 스크립트 설치\"\n\n#: install.sh:1590\nmsgid \"检测到原域名配置存在, 是否跳过域名设置\"\nmsgstr \"기존 도메인 구성이 존재하는 것을 감지했습니다. 도메인 설정을 건너뛸까요\"\n\n#: install.sh:1605 install.sh:1642 install.sh:1693 install.sh:1726\nmsgid \"无法获取公网IP地址\"\nmsgstr \"공용 ip 주소를 가져올 수 없습니다\"\n\n#: install.sh:1605 install.sh:1642 install.sh:1665 install.sh:1693\n#: install.sh:1726\nmsgid \"安装终止\"\nmsgstr \"설치 종료\"\n\n#: install.sh:1608\nmsgid \"已跳过域名设置\"\nmsgstr \"도메인 설정을 건너뛰었습니다\"\n\n#: install.sh:1614\nmsgid \"确定域名信息\"\nmsgstr \"도메인 정보 확인\"\n\n#: install.sh:1615\nmsgid \"请输入你的域名信息\"\nmsgstr \"도메인 정보를 입력해 주세요\"\n\n#: install.sh:1616\nmsgid \"请选择公网IP(IPv4/IPv6)或手动输入域名\"\nmsgstr \"공용 ip(ipv4/ipv6)를 선택하거나 도메인을 수동으로 입력하세요\"\n\n#: install.sh:1622 install.sh:1711\nmsgid \"正在获取公网IP信息, 请耐心等待\"\nmsgstr \"공인 ip 정보를 가져오는 중입니다. 잠시 기다려 주십시오\"\n\n#: install.sh:1632\nmsgid \"此选项用于服务器商仅提供域名访问服务器\"\nmsgstr \"이 옵션은 서버 제공업체가 도메인만으로 서버에 접근할 수 있도록 하는 경우에 사용됩니다\"\n\n#: install.sh:1633\nmsgid \"注意服务器商域名添加 CNAME 记录\"\nmsgstr \"서버 업체의 도메인에 cname 레코드를 추가하는 것을 주의하세요\"\n\n#: install.sh:1645\nmsgid \"域名DNS解析IP\"\nmsgstr \"도메인 네임 dns 해석 ip\"\n\n#: install.sh:1646 install.sh:1729\nmsgid \"公网IP/域名\"\nmsgstr \"공용 ip/도메인 이름\"\n\n#: install.sh:1648\nmsgid \"域名DNS解析IP与公网IP匹配\"\nmsgstr \"도메인 네임의 dns 해석 ip와 공용 ip가 일치합니다\"\n\n#: install.sh:1650\nmsgid \"请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray\"\nmsgstr \"도메인에 올바른 a/aaaa 레코드가 추가되었는지 확인해 주세요. 그렇지 않으면 xray를 정상적으로 사용할 수 없습니다\"\n\n#: install.sh:1651\nmsgid \"域名DNS解析IP与公网IP不匹配, 请选择\"\nmsgstr \"도메인 네임의 dns 해석 ip가 공용 ip와 일치하지 않습니다. 선택해 주십시오\"\n\n#: install.sh:1652 install.sh:1659\nmsgid \"继续安装\"\nmsgstr \"계속 설치\"\n\n#: install.sh:1653\nmsgid \"重新输入\"\nmsgstr \"다시 입력\"\n\n#: install.sh:1654\nmsgid \"终止安装\"\nmsgstr \"설치 중단\"\n\n#: install.sh:1676\nmsgid \"检测到原IP配置存在, 是否跳过IP设置\"\nmsgstr \"기존 ip 설정이 존재하는 것을 감지했습니다. ip 설정을 건너뛸까요\"\n\n#: install.sh:1697\nmsgid \"已跳过IP设置\"\nmsgstr \"ip 설정을 건너뛰었습니다\"\n\n#: install.sh:1703\nmsgid \"确定公网IP信息\"\nmsgstr \"공용 ip 정보 확인\"\n\n#: install.sh:1704\nmsgid \"请选择公网IP为IPv4或IPv6\"\nmsgstr \"공용 ip를 ipv4 또는 ipv6로 선택하세요\"\n\n#: install.sh:1707\nmsgid \"手动输入\"\nmsgstr \"수동 입력\"\n\n#: install.sh:1734\nmsgid \"端口未被占用\"\nmsgstr \"포트가 사용 중이 아닙니다\"\n\n#: install.sh:1736\nmsgid \"检测到\"\nmsgstr \"검출됨\"\n\n#: install.sh:1736\nmsgid \"端口被占用\"\nmsgstr \"포트가 점유되었습니다\"\n\n#: install.sh:1736\nmsgid \"以下为\"\nmsgstr \"다음은\"\n\n#: install.sh:1736\nmsgid \"端口占用信息\"\nmsgstr \"포트 점유 정보\"\n\n#: install.sh:1738\nmsgid \"尝试终止占用的进程\"\nmsgstr \"점유된 프로세스를 종료해 보십시오\"\n\n#: install.sh:1749\nmsgid \"证书测试签发成功, 开始正式签发\"\nmsgstr \"인증서 테스트 발급 성공, 정식 발급 시작\"\n\n#: install.sh:1752\nmsgid \"证书测试签发失败\"\nmsgstr \"인증서 테스트 발급 실패\"\n\n#: install.sh:1759\nmsgid \"证书生成成功\"\nmsgstr \"인증서 생성 성공\"\n\n#: install.sh:1765\nmsgid \"证书配置成功\"\nmsgstr \"인증서 설정 성공\"\n\n#: install.sh:1769\nmsgid \"证书生成失败\"\nmsgstr \"인증서 생성 실패\"\n\n#: install.sh:1801\nmsgid \"检测到 Xray 配置过多用户\"\nmsgstr \"xray가 너무 많은 사용자를 구성한 것을 감지했습니다\"\n\n#: install.sh:1802\nmsgid \"是否保留原 Xray 配置文件\"\nmsgstr \"기존 xray 구성 파일을 유지할까요\"\n\n#: install.sh:1822\nmsgid \"添加简单 ws/gRPC 协议\"\nmsgstr \"간단한 ws/grpc 프로토콜 추가\"\n\n#: install.sh:1837\nmsgid \"检测到配置文件, 是否读取配置文件\"\nmsgstr \"구성 파일을 감지했습니다. 구성 파일을 읽으시겠습니까\"\n\n#: install.sh:1842 install.sh:1863 install.sh:1961 install.sh:3430\nmsgid \"已删除配置文件\"\nmsgstr \"구성 프로파일이 삭제되었습니다\"\n\n#: install.sh:1845 install.sh:1858 install.sh:1956 install.sh:3426\nmsgid \"已保留配置文件\"\nmsgstr \"구성 파일이 보존되었습니다\"\n\n#: install.sh:1852\nmsgid \"检测到当前安装模式与配置文件的安装模式不一致\"\nmsgstr \"현재 설치 모드가 구성 파일의 설치 모드와 일치하지 않는 것으로 감지되었습니다\"\n\n#: install.sh:1853\nmsgid \"是否保留配置文件 (强烈不建议)\"\nmsgstr \"구성 파일을 유지할지 여부 (강력히 권장하지 않음)\"\n\n#: install.sh:1857\nmsgid \"请务必确保配置文件正确\"\nmsgstr \"구성 파일이 정확한지 꼭 확인해 주십시오\"\n\n#: install.sh:1951\nmsgid \"检测到配置文件不完整, 是否保留配置文件\"\nmsgstr \"구성 파일이 불완전한 것으로 감지되었습니다. 구성 파일을 유지하시겠습니까\"\n\n#: install.sh:2170\nmsgid \"配置删除\"\nmsgstr \"설정 삭제\"\n\n#: install.sh:2191\nmsgid \"设置 Nginx 开机自启\"\nmsgstr \"nginx 자동 시작 설정\"\n\n#: install.sh:2194 install.sh:4234 install.sh:4237 install.sh:4238\n#: install.sh:4239 fail2ban_manager.sh:10\nmsgid \"设置\"\nmsgstr \"설정\"\n\n#: install.sh:2194 install.sh:2202\nmsgid \"开机自启\"\nmsgstr \"부팅 자동 실행\"\n\n#: install.sh:2199\nmsgid \"关闭 Nginx 开机自启\"\nmsgstr \"nginx 자동 실행 비활성화\"\n\n#: install.sh:2202\nmsgid \"关闭\"\nmsgstr \"닫기\"\n\n#: install.sh:2209 install.sh:2231 install.sh:2234 install.sh:2294\n#: install.sh:4229 fail2ban_manager.sh:230\nmsgid \"停止\"\nmsgstr \"정지\"\n\n#: install.sh:2223 install.sh:2226 install.sh:2761 install.sh:4228\n#: fail2ban_manager.sh:229 fail2ban_manager.sh:398\nmsgid \"启动\"\nmsgstr \"시작\"\n\n#: install.sh:2247 install.sh:2263\nmsgid \"新版本已自动设置证书自动更新\"\nmsgstr \"새 버전에서 인증서 자동 갱신이 이미 자동으로 설정되었습니다\"\n\n#: install.sh:2248\nmsgid \"老版本请及时删除 废弃的 改版证书自动更新\"\nmsgstr \"구버전은 즉시 삭제하시고, 폐기된 개정 인증서는 자동으로 업데이트됩니다\"\n\n#: install.sh:2249\nmsgid \"已设置改版证书自动更新\"\nmsgstr \"버전 변경 인증서 자동 업데이트가 설정되었습니다\"\n\n#: install.sh:2250\nmsgid \"是否需要删除改版证书自动更新 (请删除)\"\nmsgstr \"개편된 인증서 자동 업데이트를 삭제할 필요가 있습니까 (삭제해 주십시오)\"\n\n#: install.sh:2257\nmsgid \"删除改版证书自动更新\"\nmsgstr \"개정된 인증서 자동 업데이트 삭제\"\n\n#: install.sh:2281\nmsgid \"已过期\"\nmsgstr \"만료됨\"\n\n#: install.sh:2283\nmsgid \"证书生成日期\"\nmsgstr \"인증서 생성일\"\n\n#: install.sh:2284\nmsgid \"证书生成天数\"\nmsgstr \"인증서 생성 일수\"\n\n#: install.sh:2285\nmsgid \"证书剩余天数\"\nmsgstr \"인증서 남은 일수\"\n\n#: install.sh:2289\nmsgid \"是否立即更新证书\"\nmsgstr \"인증서를 즉시 업데이트할까요\"\n\n#: install.sh:2301 install.sh:2313\nmsgid \"证书签发工具不存在, 请确认是否证书为脚本签发\"\nmsgstr \"인증서 발급 도구가 존재하지 않습니다. 스크립트로 인증서를 발급했는지 확인해 주십시오\"\n\n#: install.sh:2317\nmsgid \"证书更新\"\nmsgstr \"증명서 업데이트\"\n\n#: install.sh:2327\nmsgid \"本地文件 fail2ban_manager.sh 不存在, 正在下载\"\nmsgstr \"로컬 파일 fail2ban_manager.sh가 존재하지 않으므로 다운로드 중입니다\"\n\n#: install.sh:2342\nmsgid \"是否需要设置自动清理日志\"\nmsgstr \"로그 자동 정리 설정이 필요합니까\"\n\n#: install.sh:2346\nmsgid \"已跳过设置自动清理日志\"\nmsgstr \"로그 자동 정리를 설정하는 단계를 건너뛰었습니다\"\n\n#: install.sh:2349\nmsgid \"将在 每周三 04:00 自动清空日志\"\nmsgstr \"매주 수요일 04:00에 로그가 자동으로 비워집니다\"\n\n#: install.sh:2354\nmsgid \"已设置自动清理日志任务\"\nmsgstr \"로그 자동 정리 작업이 설정되었습니다\"\n\n#: install.sh:2355\nmsgid \"是否需要删除现有自动清理日志任务\"\nmsgstr \"기존 자동 로그 정리 작업을 삭제할 필요가 있습니까\"\n\n#: install.sh:2360\nmsgid \"删除自动清理日志任务\"\nmsgstr \"자동 정리 로그 작업 삭제\"\n\n#: install.sh:2363\nmsgid \"保留现有自动清理日志任务\"\nmsgstr \"기존 자동 로그 정리 작업 유지\"\n\n#: install.sh:2378\nmsgid \"设置自动清理日志\"\nmsgstr \"로그 자동 정리 설정\"\n\n#: install.sh:2385\nmsgid \"检测到日志文件大小如下:\"\nmsgstr \"로그 파일 크기가 다음과 같이 감지되었습니다\"\n\n#: install.sh:2387\nmsgid \"即将清除\"\nmsgstr \"곧 삭제됩니다\"\n\n#: install.sh:2389\nmsgid \"日志清理\"\nmsgstr \"로그 정리\"\n\n#: install.sh:2663\nmsgid \"链接分享\"\nmsgstr \"링크 공유\"\n\n#: install.sh:2665 install.sh:2671 install.sh:2676 install.sh:2681\n#: install.sh:2685 install.sh:3183\nmsgid \"分享链接\"\nmsgstr \"링크 공유\"\n\n#: install.sh:2666 install.sh:2672 install.sh:2677 install.sh:2682\n#: install.sh:2686\nmsgid \"二维码\"\nmsgstr \"qr 코드\"\n\n#: install.sh:2692 install.sh:2693\nmsgid \"配置分享\"\nmsgstr \"구성 공유\"\n\n#: install.sh:2707\nmsgid \"生成分享链接\"\nmsgstr \"공유 링크 생성\"\n\n#: install.sh:2735 install.sh:2746 install.sh:3038 install.sh:3108\n#: install.sh:3132 install.sh:3198 install.sh:3246 install.sh:3300\n#: install.sh:3352\nmsgid \"请先安装\"\nmsgstr \"먼저 설치해 주세요\"\n\n#: install.sh:2753\nmsgid \"无法获取网卡, 将监控所有网卡\"\nmsgstr \"네트워크 카드를 가져올 수 없습니다. 모든 네트워크 카드를 모니터링합니다\"\n\n#: install.sh:2755\nmsgid \"监控网卡\"\nmsgstr \"네트워크 카드 모니터링\"\n\n#: install.sh:2758\nmsgid \"监控端口\"\nmsgstr \"모니터링 포트\"\n\n#: install.sh:2760\nmsgid \"按 q 键退出 iftop\"\nmsgstr \"q 키를 눌러 iftop을 종료하세요\"\n\n#: install.sh:2776 install.sh:2779 install.sh:2782 install.sh:2785\n#: install.sh:2788 install.sh:2791 install.sh:2794 install.sh:2797\n#: install.sh:2800 install.sh:2803 install.sh:2806\nmsgid \"安装成功\"\nmsgstr \"설치 성공\"\n\n#: install.sh:2810\nmsgid \"目前分享链接规范为实验阶段, 请自行判断是否适用\"\nmsgstr \"현재 공유 링크 규칙은 실험 단계이므로, 직접 적용 가능한지 판단해 주십시오\"\n\n#: install.sh:2812 install.sh:4224\nmsgid \"配置信息\"\nmsgstr \"설정 정보\"\n\n#: install.sh:2813\nmsgid \"主机\"\nmsgstr \"호스트\"\n\n#: install.sh:2837\nmsgid \"用户id\"\nmsgstr \"사용자 id\"\n\n#: install.sh:2839\nmsgid \"加密\"\nmsgstr \"암호화\"\n\n#: install.sh:2840\nmsgid \"传输协议\"\nmsgstr \"전송 프로토콜\"\n\n#: install.sh:2841\nmsgid \"底层传输安全\"\nmsgstr \"기저 전송 보안\"\n\n#: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868\nmsgid \"路径\"\nmsgstr \"경로\"\n\n#: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868\nmsgid \"不要落下\"\nmsgstr \"놓치지 마세요\"\n\n#: install.sh:2846 install.sh:2849 install.sh:2865 install.sh:2870\nmsgid \"不需要加\"\nmsgstr \"추가할 필요가 없습니다\"\n\n#: install.sh:2852\nmsgid \"流控\"\nmsgstr \"유량 제어\"\n\n#: install.sh:2885\nmsgid \"即将申请证书, 支持使用自定义证书\"\nmsgstr \"인증서를 곧 신청할 예정이며, 사용자 정의 인증서를 지원합니다\"\n\n#: install.sh:2886\nmsgid \"如需使用自定义证书, 请按如下步骤:\"\nmsgstr \"사용자 정의 인증서를 사용하려면 다음 단계를 따르십시오\"\n\n#: install.sh:2887\nmsgid \"1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)\"\nmsgstr \"1. 인증서 파일의 이름을 변경합니다: 개인 키(xray.key), 인증서(xray.crt)\"\n\n#: install.sh:2888\nmsgid \"2. 将重命名后的证书文件放入\"\nmsgstr \"2. 이름이 변경된 인증서 파일을 넣으십시오\"\n\n#: install.sh:2888\nmsgid \"目录后再运行脚本\"\nmsgstr \"목록 뒤에 스크립트를 실행합니다\"\n\n#: install.sh:2889\nmsgid \"3. 重新运行脚本\"\nmsgstr \"3. 스크립트를 다시 실행합니다\"\n\n#: install.sh:2890 install.sh:3334\nmsgid \"是否继续\"\nmsgstr \"계속할 것인지\"\n\n#: install.sh:2898\nmsgid \"所有证书文件均已存在, 是否保留\"\nmsgstr \"모든 인증서 파일이 이미 존재합니다. 유지하시겠습니까\"\n\n#: install.sh:2904 install.sh:2919 install.sh:2935 file_manager.sh:176\nmsgid \"已删除\"\nmsgstr \"삭제됨\"\n\n#: install.sh:2910 install.sh:2925 install.sh:2942\nmsgid \"证书应用\"\nmsgstr \"인증서 응용\"\n\n#: install.sh:2914\nmsgid \"证书文件已存在, 是否保留\"\nmsgstr \"인증서 파일이 이미 존재합니다. 유지하시겠습니까\"\n\n#: install.sh:2930\nmsgid \"证书签发残留文件已存在, 是否保留\"\nmsgstr \"인증서 발급 잔류 파일이 이미 존재합니다. 유지하시겠습니까\"\n\n#: install.sh:2972 install.sh:4219\nmsgid \"添加\"\nmsgstr \"추가\"\n\n#: install.sh:2980\nmsgid \"请选择支持的 TLS 版本\"\nmsgstr \"지원되는 tls 버전을 선택하세요\"\n\n#: install.sh:2981\nmsgid \"建议选择 TLSv1.3 only (安全模式)\"\nmsgstr \"tlsv1.3 전용(보안 모드)을 선택하는 것을 권장합니다\"\n\n#: install.sh:2982 install.sh:2998\nmsgid \"兼容模式\"\nmsgstr \"호환 모드\"\n\n#: install.sh:2983\nmsgid \"安全模式\"\nmsgstr \"안전 모드\"\n\n#: install.sh:2987\nmsgid \"由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)\"\nmsgstr \"h3는 tlsv1.3만 지원하므로 tlsv1.3 전용(보안 모드)만 지원합니다\"\n\n#: install.sh:2991 install.sh:3003 install.sh:3006\nmsgid \"已切换至\"\nmsgstr \"이미 전환됨\"\n\n#: install.sh:2995\nmsgid \"请选择 TLS 版本\"\nmsgstr \"tls 버전을 선택하세요\"\n\n#: install.sh:2996\nmsgid \"建议选择 TLSv1.3 (安全模式)\"\nmsgstr \"tlsv1.3(보안 모드)를 선택하는 것을 권장합니다\"\n\n#: install.sh:3009\nmsgid \"当前模式不支持\"\nmsgstr \"현재 모드는 지원되지 않습니다\"\n\n#: install.sh:3016\nmsgid \"Nginx配置文件不存在 或 当前模式不支持\"\nmsgstr \"nginx 구성 파일이 존재하지 않거나 현재 모드가 지원되지 않습니다\"\n\n#: install.sh:3130\nmsgid \"此模式不支持修改\"\nmsgstr \"이 모드는 수정을 지원하지 않습니다\"\n\n#: install.sh:3139\nmsgid \"即将显示用户, 一次仅能显示一个\"\nmsgstr \"사용자가 곧 표시됩니다. 한 번에 하나만 표시할 수 있습니다\"\n\n#: install.sh:3141\nmsgid \"请选择显示用户使用的协议\"\nmsgstr \"사용자가 사용한 프로토콜을 선택해 주세요\"\n\n#: install.sh:3151\nmsgid \"请选择要显示的用户编号\"\nmsgstr \"표시할 사용자 번호를 선택하세요\"\n\n#: install.sh:3156 install.sh:3166 install.sh:3270 install.sh:3292\nmsgid \"选择错误\"\nmsgstr \"선택 오류\"\n\n#: install.sh:3159\nmsgid \"请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户\"\nmsgstr \"메인 메뉴에서 [xray 구성 정보 보기]를 직접 선택하여 메인 사용자를 표시하십시오\"\n\n#: install.sh:3169 install.sh:3295\nmsgid \"请先检测 Xray 是否正确安装\"\nmsgstr \"먼저 xray가 올바르게 설치되었는지 확인해 주십시오\"\n\n#: install.sh:3187\nmsgid \"是否继续显示用户\"\nmsgstr \"사용자를 계속 표시할지 여부\"\n\n#: install.sh:3196 install.sh:3298\nmsgid \"此模式不支持删除用户\"\nmsgstr \"이 모드는 사용자 삭제를 지원하지 않습니다\"\n\n#: install.sh:3206\nmsgid \"即将添加用户, 一次仅能添加一个\"\nmsgstr \"사용자를 추가할 예정이며, 한 번에 하나씩만 추가할 수 있습니다\"\n\n#: install.sh:3208\nmsgid \"请选择添加用户使用的协议\"\nmsgstr \"사용자 추가 시 사용할 프로토콜을 선택하세요\"\n\n#: install.sh:3230\nmsgid \"添加用户\"\nmsgstr \"사용자 추가\"\n\n#: install.sh:3235\nmsgid \"是否继续添加用户\"\nmsgstr \"사용자를 계속 추가하시겠습니까\"\n\n#: install.sh:3244\nmsgid \"此模式不支持添加用户\"\nmsgstr \"이 모드는 사용자 추가를 지원하지 않습니다\"\n\n#: install.sh:3253\nmsgid \"即将删除用户, 一次仅能删除一个\"\nmsgstr \"사용자를 삭제할 예정이며, 한 번에 하나만 삭제할 수 있습니다\"\n\n#: install.sh:3255\nmsgid \"请选择删除用户使用的协议\"\nmsgstr \"사용자 삭제에 사용할 프로토콜을 선택하세요\"\n\n#: install.sh:3265\nmsgid \"请选择要删除的用户编号\"\nmsgstr \"삭제할 사용자 번호를 선택해 주세요\"\n\n#: install.sh:3274\nmsgid \"主用户无法删除\"\nmsgstr \"주 사용자는 삭제할 수 없습니다\"\n\n#: install.sh:3280\nmsgid \"删除用户\"\nmsgstr \"사용자 삭제\"\n\n#: install.sh:3283\nmsgid \"是否继续删除用户\"\nmsgstr \"사용자를 계속 삭제하시겠습니까\"\n\n#: install.sh:3305 install.sh:3309\nmsgid \"文件不存在\"\nmsgstr \"파일이 존재하지 않습니다\"\n\n#: install.sh:3316\nmsgid \"已配置 Xray 流量统计\"\nmsgstr \"xray 트래픽 통계가 이미 구성되었습니다\"\n\n#: install.sh:3317\nmsgid \"是否需要关闭此功能\"\nmsgstr \"이 기능을 종료할 필요가 있습니까\"\n\n#: install.sh:3323\nmsgid \"关闭 Xray 流量统计\"\nmsgstr \"xray 트래픽 통계 끄기\"\n\n#: install.sh:3332\nmsgid \"流量统计需要使用\"\nmsgstr \"트래픽 통계 사용 필요\"\n\n#: install.sh:3333\nmsgid \"可能会影响 Xray 性能\"\nmsgstr \"x레이 성능에 영향을 줄 수 있습니다\"\n\n#: install.sh:3344\nmsgid \"设置 Xray 流量统计\"\nmsgstr \"xray 트래픽 통계 설정\"\n\n#: install.sh:3374 install.sh:3394\nmsgid \"已卸载\"\nmsgstr \"제거됨\"\n\n#: install.sh:3378\nmsgid \"是否卸载\"\nmsgstr \"제거할까요\"\n\n#: install.sh:3382\nmsgid \"已取消卸载\"\nmsgstr \"설치 제거가 취소되었습니다\"\n\n#: install.sh:3405\nmsgid \"是否删除所有脚本文件\"\nmsgstr \"모든 스크립트 파일을 삭제하시겠습니까\"\n\n#: install.sh:3412\nmsgid \"已删除所有文件\"\nmsgstr \"모든 파일을 삭제했습니다\"\n\n#: install.sh:3413\nmsgid \"ヾ(￣▽￣) 拜拜~\"\nmsgstr \"(￣▽￣) 안녕~\"\n\n#: install.sh:3418\nmsgid \"已保留脚本文件 (包含 SSL 证书等)\"\nmsgstr \"스크립트 파일(ssl 인증서 등 포함)이 보존되었습니다\"\n\n#: install.sh:3422\nmsgid \"是否保留配置文件\"\nmsgstr \"구성 파일을 유지할까요\"\n\n#: install.sh:3439\nmsgid \"已清空证书遗留文件\"\nmsgstr \"인증서 잔여 파일을 이미 삭제했습니다\"\n\n#: install.sh:3469\nmsgid \"秒后\"\nmsgstr \"초 후\"\n\n#: install.sh:3669\nmsgid \"检测最新版本失败\"\nmsgstr \"최신 버전 검사 실패\"\n\n#: install.sh:3677 install.sh:3917\nmsgid \"新版本\"\nmsgstr \"새 버전\"\n\n#: install.sh:3677 install.sh:3917\nmsgid \"更新内容\"\nmsgstr \"업데이트 내용\"\n\n#: install.sh:3681\nmsgid \"存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新\"\nmsgstr \"새로운 버전이 존재하지만, 버전 간의 차이가 크므로 호환되지 않을 가능성이 있습니다. 업데이트하시겠습니까\"\n\n#: install.sh:3684\nmsgid \"存在新版本, 是否更新\"\nmsgstr \"새 버전이 존재합니다. 업데이트하시겠습니까\"\n\n#: install.sh:3688\nmsgid \"检测 脚本 最新版本失败\"\nmsgstr \"스크립트 최신 버전 검사 실패\"\n\n#: install.sh:3689\nmsgid \"脚本 版本差别过大, 跳过更新\"\nmsgstr \"스크립트 버전 차이가 너무 커서 업데이트를 건너뜁니다\"\n\n#: install.sh:3697 install.sh:3698\nmsgid \"脚本更新失败\"\nmsgstr \"스크립트 업데이트 실패\"\n\n#: install.sh:3704\nmsgid \"更新完成\"\nmsgstr \"업데이트 완료\"\n\n#: install.sh:3705 install.sh:3929\nmsgid \"脚本版本变化较大, 若服务无法正常运行请卸载后重装\"\nmsgstr \"스크립트 버전이 크게 변경되었으니, 서비스가 정상적으로 작동하지 않을 경우 삭제 후 다시 설치해 주십시오\"\n\n#: install.sh:3714\nmsgid \"当前版本为最新版本\"\nmsgstr \"현재 버전은 최신 버전입니다\"\n\n#: install.sh:3727 install.sh:3912 install.sh:3927 install.sh:3940\nmsgid \"下载最新脚本\"\nmsgstr \"최신 스크립트 다운로드\"\n\n#: install.sh:3741\nmsgid \"该选项暂时无法使用\"\nmsgstr \"해당 옵션은 일시적으로 사용할 수 없습니다\"\n\n#: install.sh:3760 install.sh:4286\nmsgid \"此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装\"\nmsgstr \"이 모드는 로드 밸런싱에 권장되며, 일반적으로 사용하지 않는 것이 좋습니다. 설치하시겠습니까\"\n\n#: install.sh:3773 install.sh:4300\nmsgid \"此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装\"\nmsgstr \"이 모드는 트래픽 중계에만 사용되며, 다른 상황에서는 사용하지 않는 것이 좋습니다. 설치하시겠습니까\"\n\n#: install.sh:3876 install.sh:3877 install.sh:3887 install.sh:3891\n#: install.sh:3895 install.sh:4211 install.sh:4212 install.sh:4213\n#: install.sh:4214 install.sh:4215 install.sh:4216 install.sh:4314\n#: install.sh:4319 install.sh:4324 install.sh:4329\nmsgid \"变更\"\nmsgstr \"변경\"\n\n#: install.sh:3876 install.sh:4215\nmsgid \"负载均衡配置\"\nmsgstr \"로드 밸런싱 구성\"\n\n#: install.sh:3879\nmsgid \"清除日志文件\"\nmsgstr \"로그 파일 삭제\"\n\n#: install.sh:3880\nmsgid \"查看证书状态\"\nmsgstr \"인증서 상태 보기\"\n\n#: install.sh:3881\nmsgid \"更新证书有效期\"\nmsgstr \"인증서 유효기간 갱신\"\n\n#: install.sh:3882\nmsgid \"设置证书自动更新\"\nmsgstr \"인증서 자동 갱신 설정\"\n\n#: install.sh:3883\nmsgid \"设置 Fail2ban 防暴力破解\"\nmsgstr \"fail2ban 폭력적 해킹 공격 방지 설정\"\n\n#: install.sh:3884\nmsgid \"显示帮助\"\nmsgstr \"도움 표시\"\n\n#: install.sh:3885\nmsgid \"修改语言\"\nmsgstr \"언어 수정\"\n\n#: install.sh:3888 install.sh:4218 install.sh:4222 install.sh:4223\n#: install.sh:4224 install.sh:4225 install.sh:4230 install.sh:4232\n#: fail2ban_manager.sh:15\nmsgid \"查看\"\nmsgstr \"보기\"\n\n#: install.sh:3888 install.sh:4225\nmsgid \"实时流量\"\nmsgstr \"실시간 트래픽\"\n\n#: install.sh:3889\nmsgid \"脚本卸载\"\nmsgstr \"스크립트 제거\"\n\n#: install.sh:3890\nmsgid \"显示安装信息\"\nmsgstr \"설치 정보 표시\"\n\n#: install.sh:3892 install.sh:4237\nmsgid \"加速\"\nmsgstr \"가속\"\n\n#: install.sh:3894\nmsgid \"更新脚本\"\nmsgstr \"스크립트 업데이트\"\n\n#: install.sh:3896 install.sh:3897\nmsgid \"显示\"\nmsgstr \"표시\"\n\n#: install.sh:3896\nmsgid \"访问信息\"\nmsgstr \"정보 방문\"\n\n#: install.sh:3897\nmsgid \"错误信息\"\nmsgstr \"오류 정보\"\n\n#: install.sh:3921\nmsgid \"脚本版本变化较大, 可能存在不兼容情况, 是否继续使用\"\nmsgstr \"스크립트 버전이 크게 변경되어 호환되지 않을 가능성이 있습니다. 계속 사용하시겠습니까\"\n\n#: install.sh:3948\nmsgid \"检测失败\"\nmsgstr \"검사 실패\"\n\n#: install.sh:3952 install.sh:3962 install.sh:3971\nmsgid \"有新版\"\nmsgstr \"새 버전이 있습니다\"\n\n#: install.sh:3955 install.sh:3964 install.sh:3974\nmsgid \"最新版\"\nmsgstr \"최신 버전\"\n\n#: install.sh:3969\nmsgid \"版本未知\"\nmsgstr \"버전 알 수 없음\"\n\n#: install.sh:3989 install.sh:3996\nmsgid \"运行中\"\nmsgstr \"실행 중\"\n\n#: install.sh:3991 install.sh:4014 install.sh:4016\nmsgid \"无需测试\"\nmsgstr \"테스트할 필요 없음\"\n\n#: install.sh:3993 install.sh:3998\nmsgid \"未运行\"\nmsgstr \"실행되지 않음\"\n\n#: install.sh:4008\nmsgid \"无法连通\"\nmsgstr \"연결할 수 없음\"\n\n#: install.sh:4010 install.sh:4011 install.sh:4012\nmsgid \"本地正常\"\nmsgstr \"현지 정상\"\n\n#: install.sh:4027\nmsgid \"脚本维护中.. 请稍后再试\"\nmsgstr \"스크립트를 유지 보수 중입니다. 잠시 후 다시 시도해 주세요\"\n\n#: install.sh:4034\nmsgid \"无法检测所需依赖的在线版本, 请稍后再试\"\nmsgstr \"필요한 종속 항목의 온라인 버전을 검출할 수 없습니다. 잠시 후 다시 시도해 주십시오\"\n\n#: install.sh:4051\nmsgid \"请输入数字\"\nmsgstr \"숫자를 입력하세요\"\n\n#: install.sh:4051\nmsgid \"请输入 1 到 6 之间的有效数字\"\nmsgstr \"1에서 6 사이의 유효한 숫자를 입력하세요\"\n\n#: install.sh:4081\nmsgid \"无效的选择\"\nmsgstr \"무효한 선택\"\n\n#: install.sh:4122\nmsgid \"请输入备份名称\"\nmsgstr \"백업 이름을 입력하세요\"\n\n#: install.sh:4122\nmsgid \"不需要后缀\"\nmsgstr \"접미사가 필요하지 않다\"\n\n#: install.sh:4131\nmsgid \"报错信息\"\nmsgstr \"오류 정보\"\n\n#: install.sh:4133\nmsgid \"备份完整性可能受到影响, 请检查上述错误信息\"\nmsgstr \"백업의 완전성이 영향을 받을 수 있으니, 위의 오류 메시지를 확인해 주십시오\"\n\n#: install.sh:4137\nmsgid \"备份失败\"\nmsgstr \"백업 실패\"\n\n#: install.sh:4139\nmsgid \"备份成功\"\nmsgstr \"백업 성공\"\n\n#: install.sh:4144\nmsgid \"请确保备份文件在目录\"\nmsgstr \"백업 파일이 디렉토리에 있는지 확인해 주십시오\"\n\n#: install.sh:4148\nmsgid \"没有找到备份文件\"\nmsgstr \"백업 파일을 찾지 못했습니다\"\n\n#: install.sh:4153\nmsgid \"发现多个备份文件\"\nmsgstr \"여러 개의 백업 파일을 발견했습니다\"\n\n#: install.sh:4153\nmsgid \"将使用最新的文件进行恢复\"\nmsgstr \"최신 파일을 사용하여 복구합니다\"\n\n#: install.sh:4157\nmsgid \"找到最新备份文件\"\nmsgstr \"최신 백업 파일 찾기\"\n\n#: install.sh:4159\nmsgid \"恢复备份\"\nmsgstr \"백업 복구\"\n\n#: install.sh:4163\nmsgid \"恢复成功\"\nmsgstr \"복구 성공\"\n\n#: install.sh:4164 install.sh:4166\nmsgid \"记得安装\"\nmsgstr \"설치 기억하기\"\n\n#: install.sh:4169\nmsgid \"恢复失败\"\nmsgstr \"복구 실패\"\n\n#: install.sh:4175\nmsgid \"安装管理脚本\"\nmsgstr \"관리 스크립트 설치\"\n\n#: install.sh:4176\nmsgid \"作者\"\nmsgstr \"저자\"\n\n#: install.sh:4180\nmsgid \"当前模式\"\nmsgstr \"현재 모드\"\n\n#: install.sh:4181\nmsgid \"当前语言\"\nmsgstr \"현재 언어\"\n\n#: install.sh:4184\nmsgid \"可以使用\"\nmsgstr \"사용할 수 있습니다\"\n\n#: install.sh:4184\nmsgid \"命令管理脚本\"\nmsgstr \"명령 관리 스크립트\"\n\n#: install.sh:4186\nmsgid \"版本检测\"\nmsgstr \"버전 검사\"\n\n#: install.sh:4187 install.sh:4195 install.sh:4246\nmsgid \"脚本\"\nmsgstr \"스크립트\"\n\n#: install.sh:4190\nmsgid \"运行状态\"\nmsgstr \"운영 상태\"\n\n#: install.sh:4193\nmsgid \"连通性\"\nmsgstr \"연결성\"\n\n#: install.sh:4194\nmsgid \"更新向导\"\nmsgstr \"업데이트 마법사\"\n\n#: install.sh:4205\nmsgid \"安装向导\"\nmsgstr \"설치 마법사\"\n\n#: install.sh:4210\nmsgid \"配置变更\"\nmsgstr \"구성 변경\"\n\n#: install.sh:4217\nmsgid \"用户管理\"\nmsgstr \"사용자 관리\"\n\n#: install.sh:4218 install.sh:4219 install.sh:4220\nmsgid \"用户\"\nmsgstr \"사용자\"\n\n#: install.sh:4221\nmsgid \"查看信息\"\nmsgstr \"정보 보기\"\n\n#: install.sh:4222\nmsgid \"实时访问日志\"\nmsgstr \"실시간 접근 로그\"\n\n#: install.sh:4223\nmsgid \"实时错误日志\"\nmsgstr \"실시간 오류 로그\"\n\n#: install.sh:4226\nmsgid \"服务相关\"\nmsgstr \"서비스 관련\"\n\n#: install.sh:4227 install.sh:4228 install.sh:4229 install.sh:4230\nmsgid \"所有服务\"\nmsgstr \"모든 서비스\"\n\n#: install.sh:4231\nmsgid \"证书相关\"\nmsgstr \"증명서 관련\"\n\n#: install.sh:4232\nmsgid \"证书状态\"\nmsgstr \"인증서 상태\"\n\n#: install.sh:4233\nmsgid \"证书有效期\"\nmsgstr \"인증서 유효기간\"\n\n#: install.sh:4234\nmsgid \"证书自动更新\"\nmsgstr \"인증서 자동 갱신\"\n\n#: install.sh:4235\nmsgid \"其他选项\"\nmsgstr \"기타 옵션\"\n\n#: install.sh:4236\nmsgid \"自动更新\"\nmsgstr \"자동 업데이트\"\n\n#: install.sh:4238\nmsgid \"防暴力破解\"\nmsgstr \"폭력적 해킹 방지\"\n\n#: install.sh:4239\nmsgid \"流量统计\"\nmsgstr \"트래픽 통계\"\n\n#: install.sh:4240\nmsgid \"清除\"\nmsgstr \"제거\"\n\n#: install.sh:4240\nmsgid \"日志文件\"\nmsgstr \"로그 파일\"\n\n#: install.sh:4241\nmsgid \"测试\"\nmsgstr \"테스트\"\n\n#: install.sh:4241\nmsgid \"服务器网速\"\nmsgstr \"서버 속도\"\n\n#: install.sh:4242\nmsgid \"备份恢复\"\nmsgstr \"백업 복구\"\n\n#: install.sh:4243 install.sh:4244\nmsgid \"全部文件\"\nmsgstr \"전체 파일\"\n\n#: install.sh:4244\nmsgid \"恢复\"\nmsgstr \"복구\"\n\n#: install.sh:4245\nmsgid \"卸载向导\"\nmsgstr \"제거 마법사\"\n\n#: install.sh:4246 fail2ban_manager.sh:14 fail2ban_manager.sh:415\nmsgid \"卸载\"\nmsgstr \"제거\"\n\n#: install.sh:4247\nmsgid \"清空\"\nmsgstr \"비우다\"\n\n#: install.sh:4247\nmsgid \"证书文件\"\nmsgstr \"인증서 파일\"\n\n#: install.sh:4248 fail2ban_manager.sh:16 file_manager.sh:208\nmsgid \"退出\"\nmsgstr \"퇴출\"\n\n#: install.sh:4251\nmsgid \"请输入选项\"\nmsgstr \"옵션을 입력하세요\"\n\n#: install.sh:4259 install.sh:4268 install.sh:4334 install.sh:4340\n#: install.sh:4385 install.sh:4391 install.sh:4397 install.sh:4426\n#: install.sh:4467 install.sh:4474 install.sh:4479 fail2ban_manager.sh:416\nmsgid \"清空屏幕\"\nmsgstr \"화면을 비우다\"\n\n#: install.sh:4265\nmsgid \"不建议\"\nmsgstr \"추천하지 않음\"\n\n#: install.sh:4265\nmsgid \"频繁更新 Nginx, 请确认 Nginx 有更新的必要\"\nmsgstr \"nginx를 자주 업데이트하십시오. nginx에 업데이트가 필요한지 확인해 주세요\"\n\n#: install.sh:4266\nmsgid \"开始更新\"\nmsgstr \"업데이트를 시작합니다\"\n\n#: install.sh:4346 install.sh:4353 install.sh:4360 install.sh:4410\n#: install.sh:4415 install.sh:4420 install.sh:4442\nmsgid \"回到菜单\"\nmsgstr \"메뉴로 돌아가기\"\n\n#: fail2ban_manager.sh:10\nmsgid \"用于防止暴力破解\"\nmsgstr \"폭력적 해킹을 방지하기 위해\"\n\n#: fail2ban_manager.sh:11 file_manager.sh:203\nmsgid \"主菜单\"\nmsgstr \"메인 메뉴\"\n\n#: fail2ban_manager.sh:13\nmsgid \"管理\"\nmsgstr \"관리\"\n\n#: fail2ban_manager.sh:15 fail2ban_manager.sh:339\nmsgid \"状态\"\nmsgstr \"상태\"\n\n#: fail2ban_manager.sh:18 file_manager.sh:210\nmsgid \"请选择一个选项\"\nmsgstr \"옵션 하나를 선택하세요\"\n\n#: fail2ban_manager.sh:27 fail2ban_manager.sh:250 fail2ban_manager.sh:258\n#: fail2ban_manager.sh:363\nmsgid \"无效的选择, 请重试\"\nmsgstr \"유효하지 않은 선택입니다. 다시 시도해 주세요\"\n\n#: fail2ban_manager.sh:35\nmsgid \"已经安装, 跳过安装步骤\"\nmsgstr \"이미 설치되어 있습니다. 설치 단계를 건너뜁니다\"\n\n#: fail2ban_manager.sh:68\nmsgid \"systemd 无法读取 SSH 日志\"\nmsgstr \"systemd가 ssh 로그를 읽을 수 없습니다\"\n\n#: fail2ban_manager.sh:69\nmsgid \"跳过启用\"\nmsgstr \"활성화 건너뛰기\"\n\n#: fail2ban_manager.sh:69 fail2ban_manager.sh:93 fail2ban_manager.sh:103\n#: fail2ban_manager.sh:120 fail2ban_manager.sh:125 fail2ban_manager.sh:128\n#: fail2ban_manager.sh:146 fail2ban_manager.sh:151 fail2ban_manager.sh:154\nmsgid \"规则\"\nmsgstr \"규칙\"\n\n#: fail2ban_manager.sh:77 fail2ban_manager.sh:203 fail2ban_manager.sh:440\nmsgid \"未安装, 请先安装\"\nmsgstr \"설치되지 않았습니다. 먼저 설치해 주세요\"\n\n#: fail2ban_manager.sh:125 fail2ban_manager.sh:151 fail2ban_manager.sh:349\nmsgid \"已禁用\"\nmsgstr \"비활성화됨\"\n\n#: fail2ban_manager.sh:209\nmsgid \"请选择\"\nmsgstr \"선택하세요\"\n\n#: fail2ban_manager.sh:209\nmsgid \"操作\"\nmsgstr \"작업\"\n\n#: fail2ban_manager.sh:210\nmsgid \"管理模块\"\nmsgstr \"관리 모듈\"\n\n#: fail2ban_manager.sh:211\nmsgid \"添加自定义规则\"\nmsgstr \"사용자 정의 규칙 추가\"\n\n#: fail2ban_manager.sh:212 fail2ban_manager.sh:228\nmsgid \"服务管理\"\nmsgstr \"서비스 관리\"\n\n#: fail2ban_manager.sh:271\nmsgid \"请输入新的\"\nmsgstr \"새로운 것을 입력하세요\"\n\n#: fail2ban_manager.sh:271 fail2ban_manager.sh:272\nmsgid \"名称\"\nmsgstr \"이름\"\n\n#: fail2ban_manager.sh:273\nmsgid \"请输入日志路径\"\nmsgstr \"로그 경로를 입력하세요\"\n\n#: fail2ban_manager.sh:274\nmsgid \"请输入最大重试次数\"\nmsgstr \"최대 재시도 횟수를 입력하세요\"\n\n#: fail2ban_manager.sh:274\nmsgid \"最大重试次数必须在 1 到 99 之间\"\nmsgstr \"최대 재시도 횟수는 1에서 99 사이여야 합니다\"\n\n#: fail2ban_manager.sh:275\nmsgid \"请输入封禁时间\"\nmsgstr \"금지 시간을 입력하세요\"\n\n#: fail2ban_manager.sh:275\nmsgid \"秒\"\nmsgstr \"초\"\n\n#: fail2ban_manager.sh:275\nmsgid \"封禁时间必须在 1 到 8640000 秒之间\"\nmsgstr \"봉쇄 시간은 1초에서 8640000초 사이여야 합니다\"\n\n#: fail2ban_manager.sh:285\nmsgid \"自定义规则添加成功\"\nmsgstr \"사용자 정의 규칙 추가 성공\"\n\n#: fail2ban_manager.sh:289\nmsgid \"重启以应用新规则\"\nmsgstr \"새로운 규칙을 적용하려면 다시 시작하세요\"\n\n#: fail2ban_manager.sh:294\nmsgid \"管理 Fail2ban 模块\"\nmsgstr \"fail2ban 모듈 관리하기\"\n\n#: fail2ban_manager.sh:311\nmsgid \"未找到任何模块化配置文件\"\nmsgstr \"모듈형 구성 파일을 찾을 수 없습니다\"\n\n#: fail2ban_manager.sh:319 fail2ban_manager.sh:339\nmsgid \"模块名称\"\nmsgstr \"모듈 이름\"\n\n#: fail2ban_manager.sh:339 file_manager.sh:59\nmsgid \"序号\"\nmsgstr \"순번\"\n\n#: fail2ban_manager.sh:363\nmsgid \"请选择要管理的模块\"\nmsgstr \"관리할 모듈을 선택하세요\"\n\n#: fail2ban_manager.sh:375\nmsgid \"启用\"\nmsgstr \"활성화\"\n\n#: fail2ban_manager.sh:375\nmsgid \"禁用\"\nmsgstr \"비활성화\"\n\n#: fail2ban_manager.sh:378\nmsgid \"是否\"\nmsgstr \"그것이…\"\n\n#: fail2ban_manager.sh:378 fail2ban_manager.sh:386\nmsgid \"模块\"\nmsgstr \"모듈\"\n\n#: fail2ban_manager.sh:388\nmsgid \"操作已取消\"\nmsgstr \"작업이 취소되었습니다\"\n\n#: fail2ban_manager.sh:424\nmsgid \"停止成功\"\nmsgstr \"정지 성공\"\n\n#: fail2ban_manager.sh:444\nmsgid \"总体状态\"\nmsgstr \"전체 상태\"\n\n#: fail2ban_manager.sh:448\nmsgid \"默认启用的 Jail 状态\"\nmsgstr \"기본적으로 활성화된 jail 상태\"\n\n#: fail2ban_manager.sh:452 fail2ban_manager.sh:458\nmsgid \"封锁情况\"\nmsgstr \"봉쇄 상황\"\n\n#: fail2ban_manager.sh:453 fail2ban_manager.sh:459 fail2ban_manager.sh:462\n#: fail2ban_manager.sh:466 fail2ban_manager.sh:469\nmsgid \"未启用或配置异常\"\nmsgstr \"미사용 또는 구성 이상\"\n\n#: fail2ban_manager.sh:484 file_manager.sh:232\nmsgid \"新版本可用\"\nmsgstr \"새 버전 사용 가능\"\n\n#: fail2ban_manager.sh:484 file_manager.sh:232\nmsgid \"当前版本\"\nmsgstr \"현재 버전\"\n\n#: fail2ban_manager.sh:485 file_manager.sh:233\nmsgid \"请访问\"\nmsgstr \"방문해 주세요\"\n\n#: fail2ban_manager.sh:485 file_manager.sh:233\nmsgid \"查看更新说明\"\nmsgstr \"업데이트 설명 보기\"\n\n#: fail2ban_manager.sh:487 file_manager.sh:235\nmsgid \"是否下载并安装新版本\"\nmsgstr \"새 버전을 다운로드하고 설치하시겠습니까\"\n\n#: fail2ban_manager.sh:491 file_manager.sh:239\nmsgid \"正在下载新版本\"\nmsgstr \"새 버전을 다운로드 중입니다\"\n\n#: fail2ban_manager.sh:496 file_manager.sh:244\nmsgid \"下载完成, 请重新运行脚本\"\nmsgstr \"다운로드가 완료되었습니다. 스크립트를 다시 실행해 주세요\"\n\n#: fail2ban_manager.sh:504 file_manager.sh:252\nmsgid \"跳过更新\"\nmsgstr \"업데이트 건너뛰기\"\n\n#: fail2ban_manager.sh:508 file_manager.sh:256\nmsgid \"当前已经是最新版本\"\nmsgstr \"현재 이미 최신 버전입니다\"\n\n#: file_manager.sh:7\nmsgid \"用法\"\nmsgstr \"사용법\"\n\n#: file_manager.sh:7\nmsgid \"文件扩展名\"\nmsgstr \"파일 확장명\"\n\n#: file_manager.sh:7\nmsgid \"目录路径\"\nmsgstr \"디렉토리 경로\"\n\n#: file_manager.sh:16\nmsgid \"目录\"\nmsgstr \"목차\"\n\n#: file_manager.sh:16\nmsgid \"不存在, 请检查路径\"\nmsgstr \"존재하지 않습니다. 경로를 확인해 주십시오\"\n\n#: file_manager.sh:26 file_manager.sh:204\nmsgid \"列出所有\"\nmsgstr \"모두 나열하기\"\n\n#: file_manager.sh:26 file_manager.sh:35 file_manager.sh:88 file_manager.sh:111\n#: file_manager.sh:160 file_manager.sh:176 file_manager.sh:204\n#: file_manager.sh:205 file_manager.sh:206 file_manager.sh:207\nmsgid \"文件\"\nmsgstr \"파일\"\n\n#: file_manager.sh:53\nmsgid \"文件名\"\nmsgstr \"파일명\"\n\n#: file_manager.sh:79\nmsgid \"请输入网址 (例如 hey.run)\"\nmsgstr \"url을 입력하세요 (예: hey.run)\"\n\n#: file_manager.sh:80\nmsgid \"不要包含 http:// 或 https:// 开头\"\nmsgstr \"http:// 또는 https://로 시작하지 않도록 하세요\"\n\n#: file_manager.sh:84\nmsgid \"网址不能包含 http:// 或 https:// 前缀\"\nmsgstr \"웹주소에는 http:// 또는 https:// 접두어를 포함할 수 없습니다\"\n\n#: file_manager.sh:88 file_manager.sh:111\nmsgid \"已创建\"\nmsgstr \"생성됨\"\n\n#: file_manager.sh:99\nmsgid \"请输入主机\"\nmsgstr \"호스트를 입력하세요\"\n\n#: file_manager.sh:107\nmsgid \"请输入权重\"\nmsgstr \"가중치를 입력하세요\"\n\n#: file_manager.sh:128\nmsgid \"追加完成\"\nmsgstr \"추가 완료\"\n\n#: file_manager.sh:132 file_manager.sh:136\nmsgid \"重启完成\"\nmsgstr \"재부팅 완료\"\n\n#: file_manager.sh:151\nmsgid \"请输入要编辑的文件编号\"\nmsgstr \"편집할 파일 번호를 입력하세요\"\n\n#: file_manager.sh:156\nmsgid \"未安装, 正在尝试安装\"\nmsgstr \"설치되지 않음, 설치 중\"\n\n#: file_manager.sh:160\nmsgid \"已编辑\"\nmsgstr \"편집 완료\"\n\n#: file_manager.sh:171\nmsgid \"请输入要删除的文件编号\"\nmsgstr \"삭제할 파일 번호를 입력하세요\"\n\n#: file_manager.sh:194\nmsgid \"不支持的文件扩展名\"\nmsgstr \"지원되지 않는 파일 확장자\"\n\n#: file_manager.sh:205\nmsgid \"创建一个新的\"\nmsgstr \"새로운 것을 생성하다\"\n\n#: file_manager.sh:206\nmsgid \"编辑一个已存在的\"\nmsgstr \"기존의 것을 편집하다\"\n\n#: file_manager.sh:207\nmsgid \"删除一个已存在的\"\nmsgstr \"기존의 것을 삭제합니다\"\n\n#: file_manager.sh:265\nmsgid \"重启成功\"\nmsgstr \"재부팅 성공\"\n\n#: file_manager.sh:268\nmsgid \"重启失败\"\nmsgstr \"재부팅 실패\"\n\n#: file_manager.sh:268\nmsgid \"请检查配置文件是否有误\"\nmsgstr \"구성 파일에 오류가 없는지 확인해 주십시오\"\n"
  },
  {
    "path": "po/ru.po",
    "content": "# Russian translations for xray_install package.\n# Copyright (C) 2026 yunshu\n# This file is distributed under the same license as the xray_install package.\n# Automatically generated, 2026.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: xray_install 1.0\\n\"\n\"Report-Msgid-Bugs-To: https://github.com/hello-yunshu/Xray_bash_onekey/\"\n\"issues\\n\"\n\"POT-Creation-Date: 2026-04-24 09:47+0000\\n\"\n\"PO-Revision-Date: 2026-04-24 09:47+0000\\n\"\n\"Last-Translator: Automatically generated\\n\"\n\"Language-Team: none\\n\"\n\"Language: ru\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && \"\n\"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\\n\"\n\n#: install.sh:32\nmsgid \"信息\"\nmsgstr \"информация\"\n\n#: install.sh:34\nmsgid \"错误\"\nmsgstr \"ошибка\"\n\n#: install.sh:35\nmsgid \"警告\"\nmsgstr \"предупреждение\"\n\n#: install.sh:38 install.sh:1540 install.sh:3960 install.sh:3977\n#: install.sh:3980 install.sh:3981 install.sh:4019\nmsgid \"未安装\"\nmsgstr \"не установлен\"\n\n#: install.sh:99\nmsgid \"日志文件归档失败\"\nmsgstr \"не удалось архивировать файл журнала\"\n\n#: install.sh:104\nmsgid \"日志文件清空失败\"\nmsgstr \"не удалось очистить файл журнала\"\n\n#: install.sh:108\nmsgid \"日志文件已轮转并归档为\"\nmsgstr \"файл журнала был переключен и архивирован как\"\n\n#: install.sh:134 install.sh:138 install.sh:142 install.sh:152\nmsgid \"当前系统为\"\nmsgstr \"текущая система —\"\n\n#: install.sh:152\nmsgid \"不在支持的系统列表内, 安装中断\"\nmsgstr \"не входит в список поддерживаемых систем, установка прервана\"\n\n#: install.sh:159\nmsgid \"当前用户是 root 用户, 开始安装\"\nmsgstr \"текущий пользователь — root, начать установку\"\n\n#: install.sh:161\nmsgid \"当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本\"\nmsgstr \"текущий пользователь не является пользователем root. переключитесь на пользователя root и запустите скрипт снова\"\n\n#: install.sh:187\nmsgid \"无法获取远程语言文件信息\"\nmsgstr \"не удалось получить информацию о языковых файлах удаленного сервера\"\n\n#: install.sh:205\nmsgid \"正在更新语言文件\"\nmsgstr \"обновляется файл языка\"\n\n#: install.sh:208 install.sh:291\nmsgid \"语言文件更新失败\"\nmsgstr \"сбой обновления языкового файла\"\n\n#: install.sh:213\nmsgid \"语言文件无效\"\nmsgstr \"файл языка недействителен\"\n\n#: install.sh:219\nmsgid \"版本文件更新失败\"\nmsgstr \"сбой обновления файла версии\"\n\n#: install.sh:226\nmsgid \"语言文件更新完成\"\nmsgstr \"обновление языкового файла завершено\"\n\n#: install.sh:231 install.sh:2725\nmsgid \"正在安装\"\nmsgstr \"устанавливается\"\n\n#: install.sh:234\nmsgid \"安装失败\"\nmsgstr \"установка не удалась\"\n\n#: install.sh:234 install.sh:258 install.sh:281 install.sh:291\nmsgid \"将使用默认语言\"\nmsgstr \"будет использован язык по умолчанию\"\n\n#: install.sh:258 file_manager.sh:35\nmsgid \"未找到\"\nmsgstr \"не найдено\"\n\n#: install.sh:281\nmsgid \"不支持的语言\"\nmsgstr \"язык, который не поддерживается\"\n\n#: install.sh:297\nmsgid \"发现语言文件更新\"\nmsgstr \"обнаружено обновление языкового файла\"\n\n#: install.sh:312 install.sh:1740\nmsgid \"完成\"\nmsgstr \"завершить\"\n\n#: install.sh:315\nmsgid \"失败\"\nmsgstr \"неудача\"\n\n#: install.sh:322\nmsgid \"在线版本检测失败, 请稍后再试\"\nmsgstr \"не удалось проверить онлайн-версию, попробуйте позже\"\n\n#: install.sh:344 install.sh:352 install.sh:1162 install.sh:3872\n#: install.sh:3873 install.sh:3874 install.sh:3875 install.sh:4206\n#: install.sh:4207 install.sh:4208 install.sh:4209 fail2ban_manager.sh:12\n#: fail2ban_manager.sh:39\nmsgid \"安装\"\nmsgstr \"установка\"\n\n#: install.sh:346 install.sh:354 install.sh:1169 install.sh:2729\n#: install.sh:3969\nmsgid \"已安装\"\nmsgstr \"установлено\"\n\n#: install.sh:371 install.sh:375\nmsgid \"自启动配置\"\nmsgstr \"конфигурация автозапуска\"\n\n#: install.sh:384\nmsgid \"链接库安装\"\nmsgstr \"установка библиотеки ссылок\"\n\n#: install.sh:389\nmsgid \"值为空或超出范围, 请重新输入\"\nmsgstr \"значение пустое или выходит за пределы допустимого диапазона, введите снова\"\n\n#: install.sh:398\nmsgid \"值为空, 请重新输入\"\nmsgstr \"значение пустое, введите заново\"\n\n#: install.sh:440\nmsgid \"确定端口\"\nmsgstr \"определить порт\"\n\n#: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:104\nmsgid \"请输入端口\"\nmsgstr \"пожалуйста, введите порт\"\n\n#: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:107\nmsgid \"默认值\"\nmsgstr \"значение по умолчанию\"\n\n#: install.sh:441 install.sh:444 install.sh:532 install.sh:554 install.sh:3055\n#: install.sh:3060 install.sh:3065 install.sh:3066 install.sh:3081\n#: install.sh:3086 install.sh:3091 install.sh:3092\nmsgid \"请输入 0-65535 之间的值\"\nmsgstr \"пожалуйста, введите значение от 0 до 65535\"\n\n#: install.sh:443\nmsgid \"端口不允许使用, 请重新输入\"\nmsgstr \"порт недоступен, введите снова\"\n\n#: install.sh:452\nmsgid \"请选择安装协议\"\nmsgstr \"пожалуйста, выберите соглашение об установке\"\n\n#: install.sh:453 install.sh:1617 install.sh:1654 install.sh:1705\n#: install.sh:2997 install.sh:3142 install.sh:3209 install.sh:3256\n#: fail2ban_manager.sh:274 fail2ban_manager.sh:275\nmsgid \"默认\"\nmsgstr \"по умолчанию\"\n\n#: install.sh:457 install.sh:532 install.sh:554 install.sh:635 install.sh:668\n#: install.sh:821 install.sh:840 install.sh:881 install.sh:922 install.sh:1621\n#: install.sh:1634 install.sh:1656 install.sh:1709 install.sh:1719\n#: install.sh:2985 install.sh:3000 install.sh:3055 install.sh:3060\n#: install.sh:3065 install.sh:3066 install.sh:3081 install.sh:3086\n#: install.sh:3091 install.sh:3092 install.sh:3145 install.sh:3154\n#: install.sh:3212 install.sh:3259 install.sh:3268 fail2ban_manager.sh:215\n#: fail2ban_manager.sh:234 fail2ban_manager.sh:272 file_manager.sh:81\nmsgid \"请输入\"\nmsgstr \"пожалуйста, введите\"\n\n#: install.sh:457 install.sh:922 install.sh:1621 install.sh:1656\n#: install.sh:1709 install.sh:2985 install.sh:3000 install.sh:3145\n#: install.sh:3212 install.sh:3259 install.sh:4251 install.sh:4489\nmsgid \"请输入有效的数字\"\nmsgstr \"пожалуйста, введите действительное число\"\n\n#: install.sh:478\nmsgid \"是否添加简单 ws/gRPC 协议 用于负载均衡\"\nmsgstr \"добавить ли простой протокол ws/grpc для балансировки нагрузки\"\n\n#: install.sh:479 install.sh:1259\nmsgid \"如不清楚具体用途, 请勿选择\"\nmsgstr \"если неясно конкретное назначение, пожалуйста, не выбирайте\"\n\n#: install.sh:499\nmsgid \"已跳过添加简单 ws/gRPC 协议\"\nmsgstr \"пропущено добавление простых протоколов ws/grpc\"\n\n#: install.sh:528 install.sh:550 install.sh:631 install.sh:648 install.sh:664\n#: install.sh:681 install.sh:696 install.sh:815 install.sh:836 install.sh:877\nmsgid \"是否需要自定义\"\nmsgstr \"требуется ли настройка\"\n\n#: install.sh:532 install.sh:554\nmsgid \"请勿与其他端口相同\"\nmsgstr \"не используйте тот же порт, что и другие\"\n\n#: install.sh:571 file_manager.sh:114\nmsgid \"是否需要设置防火墙\"\nmsgstr \"нужно ли устанавливать брандмауэр\"\n\n#: install.sh:611 install.sh:615 file_manager.sh:128 file_manager.sh:132\n#: file_manager.sh:136\nmsgid \"防火墙\"\nmsgstr \"брандмауэр\"\n\n#: install.sh:611 install.sh:615 install.sh:2215 install.sh:2218\n#: install.sh:3012 install.sh:3014 install.sh:4227 fail2ban_manager.sh:231\n#: fail2ban_manager.sh:432\nmsgid \"重启\"\nmsgstr \"перезапуск\"\n\n#: install.sh:617\nmsgid \"开放防火墙相关端口\"\nmsgstr \"открыть соответствующие порты брандмауэра\"\n\n#: install.sh:618\nmsgid \"若修改配置, 请注意关闭防火墙相关端口\"\nmsgstr \"если изменяете настройки, обратите внимание на закрытие соответствующих портов брандмауэра\"\n\n#: install.sh:619 install.sh:3877 install.sh:3892 install.sh:3893\n#: install.sh:4216 install.sh:4236 fail2ban_manager.sh:161\nmsgid \"配置\"\nmsgstr \"конфигурация\"\n\n#: install.sh:622 file_manager.sh:140\nmsgid \"跳过防火墙设置\"\nmsgstr \"пропустить настройку брандмауэра\"\n\n#: install.sh:631 install.sh:635 install.sh:636 install.sh:640 install.sh:648\n#: install.sh:664 install.sh:668 install.sh:669 install.sh:673 install.sh:681\n#: install.sh:1101\nmsgid \"伪装路径\"\nmsgstr \"путь маскировки\"\n\n#: install.sh:635 install.sh:668\nmsgid \"不需要\"\nmsgstr \"не нужно\"\n\n#: install.sh:696 install.sh:706 install.sh:3172\nmsgid \"用户名\"\nmsgstr \"имя пользователя\"\n\n#: install.sh:700\nmsgid \"请输入正确的 email\"\nmsgstr \"пожалуйста, введите правильный адрес электронной почты\"\n\n#: install.sh:713\nmsgid \"是否需要自定义字符串映射\"\nmsgstr \"требуется ли пользовательское сопоставление строк\"\n\n#: install.sh:717\nmsgid \"请输入自定义字符串\"\nmsgstr \"пожалуйста, введите пользовательскую строку\"\n\n#: install.sh:717\nmsgid \"最多30字符\"\nmsgstr \"максимум 30 символов\"\n\n#: install.sh:719\nmsgid \"自定义字符串\"\nmsgstr \"пользовательская строка\"\n\n#: install.sh:726 install.sh:2836 install.sh:3895 install.sh:4211\n#: install.sh:4314\nmsgid \"映射字符串\"\nmsgstr \"сопоставление строки\"\n\n#: install.sh:737\nmsgid \"检测到 target 域名已配置, 是否保留\"\nmsgstr \"обнаружено, что домен target уже настроен. сохранить\"\n\n#: install.sh:757\nmsgid \"请输入一个域名\"\nmsgstr \"пожалуйста, введите доменное имя\"\n\n#: install.sh:758\nmsgid \"域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用\"\nmsgstr \"доменное имя должно поддерживать tlsv1.3, x25519 и h2, а также не использовать перенаправления\"\n\n#: install.sh:759\nmsgid \"确认域名符合要求后请输入\"\nmsgstr \"после подтверждения соответствия доменного имени требованиям, введите\"\n\n#: install.sh:760\nmsgid \"正在检测域名请等待\"\nmsgstr \"проверка домена, пожалуйста, подождите\"\n\n#: install.sh:767 install.sh:772 install.sh:777\nmsgid \"该域名不支持\"\nmsgstr \"данный домен не поддерживается\"\n\n#: install.sh:782\nmsgid \"该域名发生了跳转\"\nmsgstr \"это доменное имя перенаправляется\"\n\n#: install.sh:789\nmsgid \"该域名可能不满足所有要求\"\nmsgstr \"данный домен может не соответствовать всем требованиям\"\n\n#: install.sh:790\nmsgid \"是否仍要设置此域名\"\nmsgstr \"нужно ли все еще настраивать это доменное имя\"\n\n#: install.sh:802 install.sh:807 install.sh:1619\nmsgid \"域名\"\nmsgstr \"доменное имя\"\n\n#: install.sh:802\nmsgid \"满足所有要求\"\nmsgstr \"удовлетворить все требования\"\n\n#: install.sh:815\nmsgid \"域名的\"\nmsgstr \"домена\"\n\n#: install.sh:816\nmsgid \"默认为\"\nmsgstr \"по умолчанию\"\n\n#: install.sh:816\nmsgid \"域名本身\"\nmsgstr \"само доменное имя\"\n\n#: install.sh:817 install.sh:912 install.sh:952\nmsgid \"如不清楚具体用途, 请勿继续\"\nmsgstr \"если неясно конкретное назначение, не продолжайте\"\n\n#: install.sh:898\nmsgid \"本地文件 file_manager.sh 不存在, 正在下载\"\nmsgstr \"локальный файл file_manager.sh не существует, идёт загрузка\"\n\n#: install.sh:900 install.sh:2330 fail2ban_manager.sh:500 file_manager.sh:248\nmsgid \"下载失败, 请手动下载并安装新版本\"\nmsgstr \"скачивание не удалось, пожалуйста, скачайте и установите новую версию вручную\"\n\n#: install.sh:911 install.sh:951\nmsgid \"是否变更\"\nmsgstr \"изменить ли\"\n\n#: install.sh:911\nmsgid \"负载均衡\"\nmsgstr \"балансировка нагрузки\"\n\n#: install.sh:917\nmsgid \"请选择协议为 ws 或 gRPC\"\nmsgstr \"выберите протокол ws или grpc\"\n\n#: install.sh:920 fail2ban_manager.sh:213 fail2ban_manager.sh:232\n#: fail2ban_manager.sh:325 fail2ban_manager.sh:357\nmsgid \"返回\"\nmsgstr \"вернуться\"\n\n#: install.sh:930 file_manager.sh:220\nmsgid \"无效选项, 请重试\"\nmsgstr \"недопустимый вариант, повторите попытку\"\n\n#: install.sh:940 install.sh:964 install.sh:2266 install.sh:2304\n#: install.sh:2320\nmsgid \"当前模式不支持此操作\"\nmsgstr \"текущий режим не поддерживает эту операцию\"\n\n#: install.sh:953\nmsgid \"配置用途可以参考文章\"\nmsgstr \"конфигурацию использования можно найти в статье\"\n\n#: install.sh:980 install.sh:991 install.sh:995 install.sh:999 install.sh:1011\n#: install.sh:1016 install.sh:1020 install.sh:1025 install.sh:1045\n#: install.sh:1051 install.sh:1101 install.sh:1120 install.sh:3893\n#: install.sh:4177\nmsgid \"修改\"\nmsgstr \"изменить\"\n\n#: install.sh:1053 install.sh:2816 install.sh:2818 install.sh:2820\n#: install.sh:2821 install.sh:2824 install.sh:2828 install.sh:2830\n#: install.sh:2832 install.sh:2833 install.sh:2861 install.sh:2864\n#: install.sh:2867 install.sh:2869 install.sh:3049\nmsgid \"端口\"\nmsgstr \"порт\"\n\n#: install.sh:1103\nmsgid \"不支持\"\nmsgstr \"не поддерживается\"\n\n#: install.sh:1110\nmsgid \"用户名修改\"\nmsgstr \"изменение имени пользователя\"\n\n#: install.sh:1113 install.sh:1123\nmsgid \"请先删除多余的用户\"\nmsgstr \"пожалуйста, сначала удалите лишних пользователей\"\n\n#: install.sh:1131 install.sh:1139 install.sh:1146 install.sh:1990\n#: install.sh:2061 install.sh:2146 install.sh:2154 install.sh:2163\n#: install.sh:2186\nmsgid \"配置修改\"\nmsgstr \"изменение конфигурации\"\n\n#: install.sh:1151\nmsgid \"检测到 Xray 的权限控制, 启动修改程序\"\nmsgstr \"обнаружено управление доступом xray, запуск программы модификации\"\n\n#: install.sh:1156\nmsgid \"修改完成\"\nmsgstr \"изменение завершено\"\n\n#: install.sh:1176\nmsgid \"若更新无效, 建议直接卸载再安装\"\nmsgstr \"если обновление неэффективно, рекомендуется полностью удалить приложение, а затем установить заново\"\n\n#: install.sh:1177\nmsgid \"部分新功能需要重新安装才可生效\"\nmsgstr \"некоторые новые функции вступают в силу только после повторной установки\"\n\n#: install.sh:1182\nmsgid \"检测到存在最新版\"\nmsgstr \"обнаружена новейшая версия\"\n\n#: install.sh:1183\nmsgid \"脚本可能未兼容此版本\"\nmsgstr \"скрипт может быть несовместим с этой версией\"\n\n#: install.sh:1184\nmsgid \"是否更新\"\nmsgstr \"обновить ли\"\n\n#: install.sh:1188 install.sh:1213 install.sh:1532 install.sh:3886\n#: install.sh:3898 install.sh:4195 install.sh:4196 install.sh:4197\n#: install.sh:4233\nmsgid \"更新\"\nmsgstr \"обновление\"\n\n#: install.sh:1192 install.sh:1494\nmsgid \"启动失败\"\nmsgstr \"запуск не удался\"\n\n#: install.sh:1193 install.sh:1497\nmsgid \"是否回滚到之前的版本\"\nmsgstr \"вернуться ли к предыдущей версии\"\n\n#: install.sh:1197 install.sh:1507\nmsgid \"未执行回滚操作\"\nmsgstr \"операция отката не выполнена\"\n\n#: install.sh:1201 install.sh:1511\nmsgid \"正在回滚\"\nmsgstr \"возвращается к исходному состоянию\"\n\n#: install.sh:1205 install.sh:1518\nmsgid \"已成功回滚到之前的\"\nmsgstr \"успешно отменено до предыдущего\"\n\n#: install.sh:1205 install.sh:1518 install.sh:4214 install.sh:4329\nmsgid \"版本\"\nmsgstr \"версия\"\n\n#: install.sh:1207 install.sh:1228 install.sh:1524\nmsgid \"回滚失败\"\nmsgstr \"откат не удался\"\n\n#: install.sh:1234 install.sh:1238\nmsgid \"重装\"\nmsgstr \"переустановить\"\n\n#: install.sh:1248 install.sh:1249\nmsgid \"更新失败\"\nmsgstr \"ошибка обновления\"\n\n#: install.sh:1257\nmsgid \"是否添加 Reality 负载均衡\"\nmsgstr \"добавить ли балансировку нагрузки reality\"\n\n#: install.sh:1258\nmsgid \"使用此功能前，建议先阅读作者教程\"\nmsgstr \"перед использованием этой функции рекомендуется сначала ознакомиться с учебным материалом автора\"\n\n#: install.sh:1264 fail2ban_manager.sh:93 fail2ban_manager.sh:103\n#: fail2ban_manager.sh:128 fail2ban_manager.sh:154 fail2ban_manager.sh:347\nmsgid \"已启用\"\nmsgstr \"уже включено\"\n\n#: install.sh:1268\nmsgid \"已跳过\"\nmsgstr \"пропущено\"\n\n#: install.sh:1277\nmsgid \"Reality 协议有流量偷跑的风险\"\nmsgstr \"протокол reality имеет риск утечки трафика\"\n\n#: install.sh:1279 install.sh:1306\nmsgid \"是否额外安装 nginx 前置保护\"\nmsgstr \"устанавливать ли дополнительный защитный прокси nginx\"\n\n#: install.sh:1279\nmsgid \"推荐\"\nmsgstr \"рекомендовать\"\n\n#: install.sh:1286 install.sh:1321\nmsgid \"检测到已安装\"\nmsgstr \"обнаружено установленное\"\n\n#: install.sh:1289 install.sh:1324\nmsgid \"已跳过安装\"\nmsgstr \"установка пропущена\"\n\n#: install.sh:1303\nmsgid \"检测到已开启 Reality 负载均衡\"\nmsgstr \"обнаружено, что включен балансировщик нагрузки reality\"\n\n#: install.sh:1304\nmsgid \"如用作 Reality 负载均衡主服务器必须安装\"\nmsgstr \"если используется в качестве основного сервера балансировки нагрузки reality, необходимо установить\"\n\n#: install.sh:1305\nmsgid \"如用作 Reality 负载均衡二级服务器则无需安装\"\nmsgstr \"если используется в качестве вторичного сервера балансировки нагрузки reality, то установка не требуется\"\n\n#: install.sh:1349\nmsgid \"已存在, 跳过编译安装过程\"\nmsgstr \"существует, пропустить процесс компиляции и установки\"\n\n#: install.sh:1351\nmsgid \"检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装\"\nmsgstr \"обнаружен nginx, установленный другим пакетом. продолжение установки приведёт к конфликту. пожалуйста, устраните проблему перед установкой\"\n\n#: install.sh:1364\nmsgid \"即将下载已编译的\"\nmsgstr \"готовится к загрузке скомпилированный\"\n\n#: install.sh:1374\nmsgid \"不支持的系统架构\"\nmsgstr \"неподдерживаемая архитектура системы\"\n\n#: install.sh:1383\nmsgid \"下载失败\"\nmsgstr \"скачивание не удалось\"\n\n#: install.sh:1387\nmsgid \"下载成功\"\nmsgstr \"загрузка завершена успешно\"\n\n#: install.sh:1390\nmsgid \"解压失败\"\nmsgstr \"распаковка не удалась\"\n\n#: install.sh:1438 install.sh:1439 install.sh:1446 install.sh:1447\nmsgid \"配置不完整, 退出更新\"\nmsgstr \"конфигурация неполная, выйти из обновления\"\n\n#: install.sh:1451 install.sh:1452\nmsgid \"当前安装模式不需要\"\nmsgstr \"текущий режим установки не требуется\"\n\n#: install.sh:1456 install.sh:1457\nmsgid \"配置不存在, 退出更新\"\nmsgstr \"конфигурация не существует, выходим из обновления\"\n\n#: install.sh:1463\nmsgid \"备份旧版\"\nmsgstr \"резервная копия старой версии\"\n\n#: install.sh:1464\nmsgid \"删除旧版\"\nmsgstr \"удалить старую версию\"\n\n#: install.sh:1468\nmsgid \"是否保留原 Nginx 配置文件\"\nmsgstr \"сохранить ли исходный файл конфигурации nginx\"\n\n#: install.sh:1476 install.sh:1809\nmsgid \"原配置文件已删除\"\nmsgstr \"исходный файл конфигурации удален\"\n\n#: install.sh:1480\nmsgid \"原配置文件已保留\"\nmsgstr \"исходный конфигурационный файл сохранен\"\n\n#: install.sh:1534 install.sh:4220\nmsgid \"删除\"\nmsgstr \"удалить\"\n\n#: install.sh:1534 install.sh:4243\nmsgid \"备份\"\nmsgstr \"резервная копия\"\n\n#: install.sh:1537\nmsgid \"已为最新版\"\nmsgstr \"уже для последней версии\"\n\n#: install.sh:1553\nmsgid \"设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)\"\nmsgstr \"настройка фоновой автоматической программы обновления (включая: скрипт/xray/nginx)\"\n\n#: install.sh:1554\nmsgid \"可能自动更新后有兼容问题, 谨慎启用\"\nmsgstr \"после автоматического обновления могут возникнуть проблемы с совместимостью, поэтому включайте с осторожностью\"\n\n#: install.sh:1555 fail2ban_manager.sh:120 fail2ban_manager.sh:146\nmsgid \"是否启用\"\nmsgstr \"включить или нет\"\n\n#: install.sh:1561 install.sh:3878\nmsgid \"设置自动更新\"\nmsgstr \"настроить автоматическое обновление\"\n\n#: install.sh:1566\nmsgid \"已设置自动更新\"\nmsgstr \"автоматическое обновление установлено\"\n\n#: install.sh:1567\nmsgid \"是否关闭\"\nmsgstr \"закрыть ли\"\n\n#: install.sh:1573\nmsgid \"删除自动更新\"\nmsgstr \"удалить автоматическое обновление\"\n\n#: install.sh:1582\nmsgid \"安装 SSL 证书生成脚本依赖\"\nmsgstr \"установить зависимости для скрипта генерации ssl-сертификата\"\n\n#: install.sh:1584\nmsgid \"安装 SSL 证书生成脚本\"\nmsgstr \"установить скрипт для создания ssl-сертификата\"\n\n#: install.sh:1590\nmsgid \"检测到原域名配置存在, 是否跳过域名设置\"\nmsgstr \"обнаружено существующее конфигурирование исходного домена, пропустить ли настройку домена\"\n\n#: install.sh:1605 install.sh:1642 install.sh:1693 install.sh:1726\nmsgid \"无法获取公网IP地址\"\nmsgstr \"невозможно получить публичный ip-адрес\"\n\n#: install.sh:1605 install.sh:1642 install.sh:1665 install.sh:1693\n#: install.sh:1726\nmsgid \"安装终止\"\nmsgstr \"установка завершена\"\n\n#: install.sh:1608\nmsgid \"已跳过域名设置\"\nmsgstr \"настройка домена пропущена\"\n\n#: install.sh:1614\nmsgid \"确定域名信息\"\nmsgstr \"подтвердить информацию о домене\"\n\n#: install.sh:1615\nmsgid \"请输入你的域名信息\"\nmsgstr \"пожалуйста, введите информацию о вашем домене\"\n\n#: install.sh:1616\nmsgid \"请选择公网IP(IPv4/IPv6)或手动输入域名\"\nmsgstr \"выберите ip-адрес (ipv4/ipv6) или вручную введите доменное имя\"\n\n#: install.sh:1622 install.sh:1711\nmsgid \"正在获取公网IP信息, 请耐心等待\"\nmsgstr \"получение информации о публичном ip-адресе, пожалуйста, подождите\"\n\n#: install.sh:1632\nmsgid \"此选项用于服务器商仅提供域名访问服务器\"\nmsgstr \"этот вариант используется, когда серверный провайдер предоставляет доступ к серверу только по доменному имени\"\n\n#: install.sh:1633\nmsgid \"注意服务器商域名添加 CNAME 记录\"\nmsgstr \"обратите внимание, что хостинг-провайдеру необходимо добавить запись cname для домена\"\n\n#: install.sh:1645\nmsgid \"域名DNS解析IP\"\nmsgstr \"dns-разрешение доменного имени в ip\"\n\n#: install.sh:1646 install.sh:1729\nmsgid \"公网IP/域名\"\nmsgstr \"общедоступный ip/доменное имя\"\n\n#: install.sh:1648\nmsgid \"域名DNS解析IP与公网IP匹配\"\nmsgstr \"dns-разрешение доменного имени на ip-адрес совпадает с публичным ip-адресом\"\n\n#: install.sh:1650\nmsgid \"请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray\"\nmsgstr \"пожалуйста, убедитесь, что доменное имя имеет правильные записи a/aaaa, иначе xray не будет работать корректно\"\n\n#: install.sh:1651\nmsgid \"域名DNS解析IP与公网IP不匹配, 请选择\"\nmsgstr \"dns-разрешение доменного имени на ip-адрес не совпадает с публичным ip-адресом, выберите\"\n\n#: install.sh:1652 install.sh:1659\nmsgid \"继续安装\"\nmsgstr \"продолжить установку\"\n\n#: install.sh:1653\nmsgid \"重新输入\"\nmsgstr \"повторно ввести\"\n\n#: install.sh:1654\nmsgid \"终止安装\"\nmsgstr \"прервать установку\"\n\n#: install.sh:1676\nmsgid \"检测到原IP配置存在, 是否跳过IP设置\"\nmsgstr \"обнаружено существующее исходное ip-конфигурация, пропустить настройку ip\"\n\n#: install.sh:1697\nmsgid \"已跳过IP设置\"\nmsgstr \"настройка ip пропущена\"\n\n#: install.sh:1703\nmsgid \"确定公网IP信息\"\nmsgstr \"определить информацию о публичном ip-адресе\"\n\n#: install.sh:1704\nmsgid \"请选择公网IP为IPv4或IPv6\"\nmsgstr \"выберите публичный ip-адрес в формате ipv4 или ipv6\"\n\n#: install.sh:1707\nmsgid \"手动输入\"\nmsgstr \"ручной ввод\"\n\n#: install.sh:1734\nmsgid \"端口未被占用\"\nmsgstr \"порт не занят\"\n\n#: install.sh:1736\nmsgid \"检测到\"\nmsgstr \"обнаружено\"\n\n#: install.sh:1736\nmsgid \"端口被占用\"\nmsgstr \"порт занят\"\n\n#: install.sh:1736\nmsgid \"以下为\"\nmsgstr \"ниже представлено\"\n\n#: install.sh:1736\nmsgid \"端口占用信息\"\nmsgstr \"информация об занятости портов\"\n\n#: install.sh:1738\nmsgid \"尝试终止占用的进程\"\nmsgstr \"попытаться завершить занятый процесс\"\n\n#: install.sh:1749\nmsgid \"证书测试签发成功, 开始正式签发\"\nmsgstr \"сертификат успешно протестирован, начинается официальная выдача\"\n\n#: install.sh:1752\nmsgid \"证书测试签发失败\"\nmsgstr \"сертификат не удалось выпустить для тестирования\"\n\n#: install.sh:1759\nmsgid \"证书生成成功\"\nmsgstr \"сертификат успешно создан\"\n\n#: install.sh:1765\nmsgid \"证书配置成功\"\nmsgstr \"конфигурация сертификата выполнена успешно\"\n\n#: install.sh:1769\nmsgid \"证书生成失败\"\nmsgstr \"сертификат не удалось сгенерировать\"\n\n#: install.sh:1801\nmsgid \"检测到 Xray 配置过多用户\"\nmsgstr \"обнаружено, что в конфигурации xray слишком много пользователей\"\n\n#: install.sh:1802\nmsgid \"是否保留原 Xray 配置文件\"\nmsgstr \"сохранить ли исходный файл конфигурации xray\"\n\n#: install.sh:1822\nmsgid \"添加简单 ws/gRPC 协议\"\nmsgstr \"добавить простой протокол ws/grpc\"\n\n#: install.sh:1837\nmsgid \"检测到配置文件, 是否读取配置文件\"\nmsgstr \"обнаружен файл конфигурации, считать ли файл конфигурации\"\n\n#: install.sh:1842 install.sh:1863 install.sh:1961 install.sh:3430\nmsgid \"已删除配置文件\"\nmsgstr \"файл конфигурации удален\"\n\n#: install.sh:1845 install.sh:1858 install.sh:1956 install.sh:3426\nmsgid \"已保留配置文件\"\nmsgstr \"конфигурационный файл сохранен\"\n\n#: install.sh:1852\nmsgid \"检测到当前安装模式与配置文件的安装模式不一致\"\nmsgstr \"обнаружено несоответствие текущего режима установки с режимом установки в конфигурационном файле\"\n\n#: install.sh:1853\nmsgid \"是否保留配置文件 (强烈不建议)\"\nmsgstr \"сохранить файл конфигурации (сильно не рекомендуется)\"\n\n#: install.sh:1857\nmsgid \"请务必确保配置文件正确\"\nmsgstr \"пожалуйста, обязательно убедитесь, что конфигурационный файл правильный\"\n\n#: install.sh:1951\nmsgid \"检测到配置文件不完整, 是否保留配置文件\"\nmsgstr \"обнаружено, что файл конфигурации неполный. сохранить файл конфигурации\"\n\n#: install.sh:2170\nmsgid \"配置删除\"\nmsgstr \"удаление конфигурации\"\n\n#: install.sh:2191\nmsgid \"设置 Nginx 开机自启\"\nmsgstr \"настройка автозапуска nginx при включении компьютера\"\n\n#: install.sh:2194 install.sh:4234 install.sh:4237 install.sh:4238\n#: install.sh:4239 fail2ban_manager.sh:10\nmsgid \"设置\"\nmsgstr \"настройка\"\n\n#: install.sh:2194 install.sh:2202\nmsgid \"开机自启\"\nmsgstr \"автозапуск при включении\"\n\n#: install.sh:2199\nmsgid \"关闭 Nginx 开机自启\"\nmsgstr \"отключить автозапуск nginx при включении\"\n\n#: install.sh:2202\nmsgid \"关闭\"\nmsgstr \"закрыть\"\n\n#: install.sh:2209 install.sh:2231 install.sh:2234 install.sh:2294\n#: install.sh:4229 fail2ban_manager.sh:230\nmsgid \"停止\"\nmsgstr \"остановить\"\n\n#: install.sh:2223 install.sh:2226 install.sh:2761 install.sh:4228\n#: fail2ban_manager.sh:229 fail2ban_manager.sh:398\nmsgid \"启动\"\nmsgstr \"запуск\"\n\n#: install.sh:2247 install.sh:2263\nmsgid \"新版本已自动设置证书自动更新\"\nmsgstr \"новая версия автоматически настроена для автоматического обновления сертификатов\"\n\n#: install.sh:2248\nmsgid \"老版本请及时删除 废弃的 改版证书自动更新\"\nmsgstr \"старые версии следует своевременно удалить. устаревшие сертификаты автоматически обновляются при изменении версии\"\n\n#: install.sh:2249\nmsgid \"已设置改版证书自动更新\"\nmsgstr \"автоматическое обновление сертификата изменений уже настроено\"\n\n#: install.sh:2250\nmsgid \"是否需要删除改版证书自动更新 (请删除)\"\nmsgstr \"нужно ли удалить автоматическое обновление сертификата измененной версии (пожалуйста, удалите)\"\n\n#: install.sh:2257\nmsgid \"删除改版证书自动更新\"\nmsgstr \"удалить обновление сертификата автоматически\"\n\n#: install.sh:2281\nmsgid \"已过期\"\nmsgstr \"истекло\"\n\n#: install.sh:2283\nmsgid \"证书生成日期\"\nmsgstr \"дата создания сертификата\"\n\n#: install.sh:2284\nmsgid \"证书生成天数\"\nmsgstr \"количество дней для генерации сертификата\"\n\n#: install.sh:2285\nmsgid \"证书剩余天数\"\nmsgstr \"оставшиеся дни сертификата\"\n\n#: install.sh:2289\nmsgid \"是否立即更新证书\"\nmsgstr \"обновить сертификат немедленно\"\n\n#: install.sh:2301 install.sh:2313\nmsgid \"证书签发工具不存在, 请确认是否证书为脚本签发\"\nmsgstr \"инструмент для выдачи сертификатов не существует, пожалуйста, убедитесь, был ли сертификат выдан с помощью скрипта\"\n\n#: install.sh:2317\nmsgid \"证书更新\"\nmsgstr \"обновление сертификата\"\n\n#: install.sh:2327\nmsgid \"本地文件 fail2ban_manager.sh 不存在, 正在下载\"\nmsgstr \"файл fail2ban_manager.sh отсутствует, загрузка\"\n\n#: install.sh:2342\nmsgid \"是否需要设置自动清理日志\"\nmsgstr \"нужно ли настроить автоматическую очистку журнала\"\n\n#: install.sh:2346\nmsgid \"已跳过设置自动清理日志\"\nmsgstr \"настройка автоматической очистки журналов пропущена\"\n\n#: install.sh:2349\nmsgid \"将在 每周三 04:00 自动清空日志\"\nmsgstr \"журнал будет автоматически очищаться каждую среду в 04:00\"\n\n#: install.sh:2354\nmsgid \"已设置自动清理日志任务\"\nmsgstr \"автоматическая задача очистки журнала уже настроена\"\n\n#: install.sh:2355\nmsgid \"是否需要删除现有自动清理日志任务\"\nmsgstr \"нужно ли удалить существующую задачу автоматической очистки журнала\"\n\n#: install.sh:2360\nmsgid \"删除自动清理日志任务\"\nmsgstr \"удалить задачу автоматической очистки журнала\"\n\n#: install.sh:2363\nmsgid \"保留现有自动清理日志任务\"\nmsgstr \"сохранить существующую задачу автоматической очистки журнала\"\n\n#: install.sh:2378\nmsgid \"设置自动清理日志\"\nmsgstr \"настроить автоматическую очистку журнала\"\n\n#: install.sh:2385\nmsgid \"检测到日志文件大小如下:\"\nmsgstr \"обнаружено, что размер файла журнала следующий\"\n\n#: install.sh:2387\nmsgid \"即将清除\"\nmsgstr \"скоро очистить\"\n\n#: install.sh:2389\nmsgid \"日志清理\"\nmsgstr \"очистка журнала\"\n\n#: install.sh:2663\nmsgid \"链接分享\"\nmsgstr \"поделиться ссылкой\"\n\n#: install.sh:2665 install.sh:2671 install.sh:2676 install.sh:2681\n#: install.sh:2685 install.sh:3183\nmsgid \"分享链接\"\nmsgstr \"поделиться ссылкой\"\n\n#: install.sh:2666 install.sh:2672 install.sh:2677 install.sh:2682\n#: install.sh:2686\nmsgid \"二维码\"\nmsgstr \"qr-код\"\n\n#: install.sh:2692 install.sh:2693\nmsgid \"配置分享\"\nmsgstr \"настройка и обмен\"\n\n#: install.sh:2707\nmsgid \"生成分享链接\"\nmsgstr \"создать ссылку для обмена\"\n\n#: install.sh:2735 install.sh:2746 install.sh:3038 install.sh:3108\n#: install.sh:3132 install.sh:3198 install.sh:3246 install.sh:3300\n#: install.sh:3352\nmsgid \"请先安装\"\nmsgstr \"пожалуйста, сначала установите\"\n\n#: install.sh:2753\nmsgid \"无法获取网卡, 将监控所有网卡\"\nmsgstr \"не удалось получить сетевую карту, будет вестись мониторинг всех сетевых карт\"\n\n#: install.sh:2755\nmsgid \"监控网卡\"\nmsgstr \"мониторинг сетевой карты\"\n\n#: install.sh:2758\nmsgid \"监控端口\"\nmsgstr \"мониторинговый порт\"\n\n#: install.sh:2760\nmsgid \"按 q 键退出 iftop\"\nmsgstr \"нажмите клавишу q, чтобы выйти из iftop\"\n\n#: install.sh:2776 install.sh:2779 install.sh:2782 install.sh:2785\n#: install.sh:2788 install.sh:2791 install.sh:2794 install.sh:2797\n#: install.sh:2800 install.sh:2803 install.sh:2806\nmsgid \"安装成功\"\nmsgstr \"установка выполнена успешно\"\n\n#: install.sh:2810\nmsgid \"目前分享链接规范为实验阶段, 请自行判断是否适用\"\nmsgstr \"в настоящее время формат ссылки для совместного использования находится на экспериментальной стадии, пожалуйста, самостоятельно определите, применим ли он\"\n\n#: install.sh:2812 install.sh:4224\nmsgid \"配置信息\"\nmsgstr \"информация о настройках\"\n\n#: install.sh:2813\nmsgid \"主机\"\nmsgstr \"хост\"\n\n#: install.sh:2837\nmsgid \"用户id\"\nmsgstr \"идентификатор пользователя\"\n\n#: install.sh:2839\nmsgid \"加密\"\nmsgstr \"шифрование\"\n\n#: install.sh:2840\nmsgid \"传输协议\"\nmsgstr \"протокол передачи\"\n\n#: install.sh:2841\nmsgid \"底层传输安全\"\nmsgstr \"безопасность нижнего уровня передачи\"\n\n#: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868\nmsgid \"路径\"\nmsgstr \"путь\"\n\n#: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868\nmsgid \"不要落下\"\nmsgstr \"не отставать\"\n\n#: install.sh:2846 install.sh:2849 install.sh:2865 install.sh:2870\nmsgid \"不需要加\"\nmsgstr \"не нужно добавлять\"\n\n#: install.sh:2852\nmsgid \"流控\"\nmsgstr \"контроль потока\"\n\n#: install.sh:2885\nmsgid \"即将申请证书, 支持使用自定义证书\"\nmsgstr \"планируется подача заявки на сертификат, поддерживается использование пользовательского сертификата\"\n\n#: install.sh:2886\nmsgid \"如需使用自定义证书, 请按如下步骤:\"\nmsgstr \"если требуется использовать пользовательский сертификат, выполните следующие шаги\"\n\n#: install.sh:2887\nmsgid \"1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)\"\nmsgstr \"1. переименуйте файлы сертификатов: приватный ключ (xray.key), сертификат (xray.crt)\"\n\n#: install.sh:2888\nmsgid \"2. 将重命名后的证书文件放入\"\nmsgstr \"2. разместите переименованный файл сертификата в\"\n\n#: install.sh:2888\nmsgid \"目录后再运行脚本\"\nmsgstr \"запустить скрипт после каталога\"\n\n#: install.sh:2889\nmsgid \"3. 重新运行脚本\"\nmsgstr \"3. запустить скрипт заново\"\n\n#: install.sh:2890 install.sh:3334\nmsgid \"是否继续\"\nmsgstr \"продолжить ли\"\n\n#: install.sh:2898\nmsgid \"所有证书文件均已存在, 是否保留\"\nmsgstr \"все файлы сертификатов уже существуют, сохранить\"\n\n#: install.sh:2904 install.sh:2919 install.sh:2935 file_manager.sh:176\nmsgid \"已删除\"\nmsgstr \"удалено\"\n\n#: install.sh:2910 install.sh:2925 install.sh:2942\nmsgid \"证书应用\"\nmsgstr \"применение сертификата\"\n\n#: install.sh:2914\nmsgid \"证书文件已存在, 是否保留\"\nmsgstr \"файл сертификата уже существует, сохранить\"\n\n#: install.sh:2930\nmsgid \"证书签发残留文件已存在, 是否保留\"\nmsgstr \"оставшиеся файлы выдачи сертификата уже существуют, сохранить\"\n\n#: install.sh:2972 install.sh:4219\nmsgid \"添加\"\nmsgstr \"добавить\"\n\n#: install.sh:2980\nmsgid \"请选择支持的 TLS 版本\"\nmsgstr \"выберите поддерживаемую версию tls\"\n\n#: install.sh:2981\nmsgid \"建议选择 TLSv1.3 only (安全模式)\"\nmsgstr \"рекомендуется выбрать только tlsv1.3 (безопасный режим)\"\n\n#: install.sh:2982 install.sh:2998\nmsgid \"兼容模式\"\nmsgstr \"режим совместимости\"\n\n#: install.sh:2983\nmsgid \"安全模式\"\nmsgstr \"безопасный режим\"\n\n#: install.sh:2987\nmsgid \"由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)\"\nmsgstr \"поскольку h3 поддерживает только tlsv1.3, поддерживается только tlsv1.3 (безопасный режим)\"\n\n#: install.sh:2991 install.sh:3003 install.sh:3006\nmsgid \"已切换至\"\nmsgstr \"уже переключено на\"\n\n#: install.sh:2995\nmsgid \"请选择 TLS 版本\"\nmsgstr \"выберите версию tls\"\n\n#: install.sh:2996\nmsgid \"建议选择 TLSv1.3 (安全模式)\"\nmsgstr \"рекомендуется выбрать tlsv1.3 (безопасный режим)\"\n\n#: install.sh:3009\nmsgid \"当前模式不支持\"\nmsgstr \"текущий режим не поддерживается\"\n\n#: install.sh:3016\nmsgid \"Nginx配置文件不存在 或 当前模式不支持\"\nmsgstr \"файл конфигурации nginx отсутствует или текущий режим не поддерживается\"\n\n#: install.sh:3130\nmsgid \"此模式不支持修改\"\nmsgstr \"этот режим не поддерживает изменение\"\n\n#: install.sh:3139\nmsgid \"即将显示用户, 一次仅能显示一个\"\nmsgstr \"пользователь будет показан в ближайшее время, одновременно может быть показан только один пользователь\"\n\n#: install.sh:3141\nmsgid \"请选择显示用户使用的协议\"\nmsgstr \"выберите протокол, используемый пользователем для отображения\"\n\n#: install.sh:3151\nmsgid \"请选择要显示的用户编号\"\nmsgstr \"выберите номер пользователя, который хотите отобразить\"\n\n#: install.sh:3156 install.sh:3166 install.sh:3270 install.sh:3292\nmsgid \"选择错误\"\nmsgstr \"выбор неверный\"\n\n#: install.sh:3159\nmsgid \"请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户\"\nmsgstr \"пожалуйста, выберите напрямую в главном меню [просмотр информации о конфигурации xray], чтобы отобразить основного пользователя\"\n\n#: install.sh:3169 install.sh:3295\nmsgid \"请先检测 Xray 是否正确安装\"\nmsgstr \"пожалуйста, сначала проверьте, правильно ли установлен xray\"\n\n#: install.sh:3187\nmsgid \"是否继续显示用户\"\nmsgstr \"продолжать ли показывать пользователя\"\n\n#: install.sh:3196 install.sh:3298\nmsgid \"此模式不支持删除用户\"\nmsgstr \"этот режим не поддерживает удаление пользователей\"\n\n#: install.sh:3206\nmsgid \"即将添加用户, 一次仅能添加一个\"\nmsgstr \"пользователь будет добавлен в ближайшее время, можно добавить только одного за раз\"\n\n#: install.sh:3208\nmsgid \"请选择添加用户使用的协议\"\nmsgstr \"выберите протокол, используемый для добавления пользователя\"\n\n#: install.sh:3230\nmsgid \"添加用户\"\nmsgstr \"добавить пользователя\"\n\n#: install.sh:3235\nmsgid \"是否继续添加用户\"\nmsgstr \"продолжить добавление пользователя\"\n\n#: install.sh:3244\nmsgid \"此模式不支持添加用户\"\nmsgstr \"этот режим не поддерживает добавление пользователей\"\n\n#: install.sh:3253\nmsgid \"即将删除用户, 一次仅能删除一个\"\nmsgstr \"пользователь будет удален, можно удалить только одного за раз\"\n\n#: install.sh:3255\nmsgid \"请选择删除用户使用的协议\"\nmsgstr \"пожалуйста, выберите протокол, используемый для удаления пользователя\"\n\n#: install.sh:3265\nmsgid \"请选择要删除的用户编号\"\nmsgstr \"выберите номер пользователя, которого хотите удалить\"\n\n#: install.sh:3274\nmsgid \"主用户无法删除\"\nmsgstr \"основной пользователь не может быть удален\"\n\n#: install.sh:3280\nmsgid \"删除用户\"\nmsgstr \"удалить пользователя\"\n\n#: install.sh:3283\nmsgid \"是否继续删除用户\"\nmsgstr \"продолжить удаление пользователя\"\n\n#: install.sh:3305 install.sh:3309\nmsgid \"文件不存在\"\nmsgstr \"файл не существует\"\n\n#: install.sh:3316\nmsgid \"已配置 Xray 流量统计\"\nmsgstr \"статистика трафика xray уже настроена\"\n\n#: install.sh:3317\nmsgid \"是否需要关闭此功能\"\nmsgstr \"нужно ли отключить эту функцию\"\n\n#: install.sh:3323\nmsgid \"关闭 Xray 流量统计\"\nmsgstr \"закрыть статистику трафика xray\"\n\n#: install.sh:3332\nmsgid \"流量统计需要使用\"\nmsgstr \"для статистики трафика необходимо использовать\"\n\n#: install.sh:3333\nmsgid \"可能会影响 Xray 性能\"\nmsgstr \"может повлиять на производительность рентгеновского аппарата\"\n\n#: install.sh:3344\nmsgid \"设置 Xray 流量统计\"\nmsgstr \"настройка статистики трафика xray\"\n\n#: install.sh:3374 install.sh:3394\nmsgid \"已卸载\"\nmsgstr \"удалено\"\n\n#: install.sh:3378\nmsgid \"是否卸载\"\nmsgstr \"удалить ли\"\n\n#: install.sh:3382\nmsgid \"已取消卸载\"\nmsgstr \"установка отменена\"\n\n#: install.sh:3405\nmsgid \"是否删除所有脚本文件\"\nmsgstr \"удалить все файлы скриптов\"\n\n#: install.sh:3412\nmsgid \"已删除所有文件\"\nmsgstr \"все файлы удалены\"\n\n#: install.sh:3413\nmsgid \"ヾ(￣▽￣) 拜拜~\"\nmsgstr \"(￣▽￣) привет\"\n\n#: install.sh:3418\nmsgid \"已保留脚本文件 (包含 SSL 证书等)\"\nmsgstr \"скрипт-файл сохранён (включая ssl-сертификат и т.д.)\"\n\n#: install.sh:3422\nmsgid \"是否保留配置文件\"\nmsgstr \"сохранить файл конфигурации\"\n\n#: install.sh:3439\nmsgid \"已清空证书遗留文件\"\nmsgstr \"файлы, оставшиеся от сертификата, уже удалены\"\n\n#: install.sh:3469\nmsgid \"秒后\"\nmsgstr \"секунду спустя\"\n\n#: install.sh:3669\nmsgid \"检测最新版本失败\"\nmsgstr \"не удалось проверить последнюю версию\"\n\n#: install.sh:3677 install.sh:3917\nmsgid \"新版本\"\nmsgstr \"новая версия\"\n\n#: install.sh:3677 install.sh:3917\nmsgid \"更新内容\"\nmsgstr \"содержание обновления\"\n\n#: install.sh:3681\nmsgid \"存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新\"\nmsgstr \"доступна новая версия, но изменения в ней значительные, возможны несовместимости. обновить\"\n\n#: install.sh:3684\nmsgid \"存在新版本, 是否更新\"\nmsgstr \"доступна новая версия, обновить\"\n\n#: install.sh:3688\nmsgid \"检测 脚本 最新版本失败\"\nmsgstr \"не удалось проверить последнюю версию скрипта\"\n\n#: install.sh:3689\nmsgid \"脚本 版本差别过大, 跳过更新\"\nmsgstr \"версии скрипта слишком сильно различаются, пропускаем обновление\"\n\n#: install.sh:3697 install.sh:3698\nmsgid \"脚本更新失败\"\nmsgstr \"ошибка обновления скрипта\"\n\n#: install.sh:3704\nmsgid \"更新完成\"\nmsgstr \"обновление завершено\"\n\n#: install.sh:3705 install.sh:3929\nmsgid \"脚本版本变化较大, 若服务无法正常运行请卸载后重装\"\nmsgstr \"версия скрипта сильно изменилась, если служба не работает нормально, пожалуйста, удалите её и установите заново\"\n\n#: install.sh:3714\nmsgid \"当前版本为最新版本\"\nmsgstr \"текущая версия является последней\"\n\n#: install.sh:3727 install.sh:3912 install.sh:3927 install.sh:3940\nmsgid \"下载最新脚本\"\nmsgstr \"скачать последний скрипт\"\n\n#: install.sh:3741\nmsgid \"该选项暂时无法使用\"\nmsgstr \"этот вариант временно недоступен\"\n\n#: install.sh:3760 install.sh:4286\nmsgid \"此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装\"\nmsgstr \"этот режим рекомендуется для балансировки нагрузки, обычно не рекомендуется к использованию, установить\"\n\n#: install.sh:3773 install.sh:4300\nmsgid \"此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装\"\nmsgstr \"этот режим предназначен только для переадресации трафика; не рекомендуется использовать его в других случаях. установить\"\n\n#: install.sh:3876 install.sh:3877 install.sh:3887 install.sh:3891\n#: install.sh:3895 install.sh:4211 install.sh:4212 install.sh:4213\n#: install.sh:4214 install.sh:4215 install.sh:4216 install.sh:4314\n#: install.sh:4319 install.sh:4324 install.sh:4329\nmsgid \"变更\"\nmsgstr \"изменение\"\n\n#: install.sh:3876 install.sh:4215\nmsgid \"负载均衡配置\"\nmsgstr \"конфигурация балансировки нагрузки\"\n\n#: install.sh:3879\nmsgid \"清除日志文件\"\nmsgstr \"очистить файлы журнала\"\n\n#: install.sh:3880\nmsgid \"查看证书状态\"\nmsgstr \"просмотреть статус сертификата\"\n\n#: install.sh:3881\nmsgid \"更新证书有效期\"\nmsgstr \"обновить срок действия сертификата\"\n\n#: install.sh:3882\nmsgid \"设置证书自动更新\"\nmsgstr \"настроить автоматическое обновление сертификата\"\n\n#: install.sh:3883\nmsgid \"设置 Fail2ban 防暴力破解\"\nmsgstr \"настройка fail2ban для защиты от brute-force атак\"\n\n#: install.sh:3884\nmsgid \"显示帮助\"\nmsgstr \"показать справку\"\n\n#: install.sh:3885\nmsgid \"修改语言\"\nmsgstr \"изменить язык\"\n\n#: install.sh:3888 install.sh:4218 install.sh:4222 install.sh:4223\n#: install.sh:4224 install.sh:4225 install.sh:4230 install.sh:4232\n#: fail2ban_manager.sh:15\nmsgid \"查看\"\nmsgstr \"просмотреть\"\n\n#: install.sh:3888 install.sh:4225\nmsgid \"实时流量\"\nmsgstr \"поток в реальном времени\"\n\n#: install.sh:3889\nmsgid \"脚本卸载\"\nmsgstr \"удаление скрипта\"\n\n#: install.sh:3890\nmsgid \"显示安装信息\"\nmsgstr \"отобразить информацию об установке\"\n\n#: install.sh:3892 install.sh:4237\nmsgid \"加速\"\nmsgstr \"ускорение\"\n\n#: install.sh:3894\nmsgid \"更新脚本\"\nmsgstr \"обновить скрипт\"\n\n#: install.sh:3896 install.sh:3897\nmsgid \"显示\"\nmsgstr \"показать\"\n\n#: install.sh:3896\nmsgid \"访问信息\"\nmsgstr \"информация о посещении\"\n\n#: install.sh:3897\nmsgid \"错误信息\"\nmsgstr \"сообщение об ошибке\"\n\n#: install.sh:3921\nmsgid \"脚本版本变化较大, 可能存在不兼容情况, 是否继续使用\"\nmsgstr \"версия скрипта сильно изменилась, возможно, существуют несовместимости. продолжить использование\"\n\n#: install.sh:3948\nmsgid \"检测失败\"\nmsgstr \"ошибка проверки\"\n\n#: install.sh:3952 install.sh:3962 install.sh:3971\nmsgid \"有新版\"\nmsgstr \"есть новая версия\"\n\n#: install.sh:3955 install.sh:3964 install.sh:3974\nmsgid \"最新版\"\nmsgstr \"последняя версия\"\n\n#: install.sh:3969\nmsgid \"版本未知\"\nmsgstr \"версия неизвестна\"\n\n#: install.sh:3989 install.sh:3996\nmsgid \"运行中\"\nmsgstr \"в процессе выполнения\"\n\n#: install.sh:3991 install.sh:4014 install.sh:4016\nmsgid \"无需测试\"\nmsgstr \"не требуется тестирование\"\n\n#: install.sh:3993 install.sh:3998\nmsgid \"未运行\"\nmsgstr \"не запущено\"\n\n#: install.sh:4008\nmsgid \"无法连通\"\nmsgstr \"невозможно подключиться\"\n\n#: install.sh:4010 install.sh:4011 install.sh:4012\nmsgid \"本地正常\"\nmsgstr \"локально нормально\"\n\n#: install.sh:4027\nmsgid \"脚本维护中.. 请稍后再试\"\nmsgstr \"скрипт находится на обслуживании. пожалуйста, попробуйте позже\"\n\n#: install.sh:4034\nmsgid \"无法检测所需依赖的在线版本, 请稍后再试\"\nmsgstr \"невозможно обнаружить онлайн-версию необходимой зависимости, попробуйте позже\"\n\n#: install.sh:4051\nmsgid \"请输入数字\"\nmsgstr \"пожалуйста, введите цифры\"\n\n#: install.sh:4051\nmsgid \"请输入 1 到 6 之间的有效数字\"\nmsgstr \"пожалуйста, введите действительное число от 1 до 6\"\n\n#: install.sh:4081\nmsgid \"无效的选择\"\nmsgstr \"недопустимый выбор\"\n\n#: install.sh:4122\nmsgid \"请输入备份名称\"\nmsgstr \"введите имя резервной копии\"\n\n#: install.sh:4122\nmsgid \"不需要后缀\"\nmsgstr \"не требуется суффикс\"\n\n#: install.sh:4131\nmsgid \"报错信息\"\nmsgstr \"сообщение об ошибке\"\n\n#: install.sh:4133\nmsgid \"备份完整性可能受到影响, 请检查上述错误信息\"\nmsgstr \"целостность резервной копии может быть нарушена, пожалуйста, проверьте приведённые выше сообщения об ошибках\"\n\n#: install.sh:4137\nmsgid \"备份失败\"\nmsgstr \"сбой резервного копирования\"\n\n#: install.sh:4139\nmsgid \"备份成功\"\nmsgstr \"резервное копирование успешно выполнено\"\n\n#: install.sh:4144\nmsgid \"请确保备份文件在目录\"\nmsgstr \"пожалуйста, убедитесь, что файлы резервных копий находятся в каталоге\"\n\n#: install.sh:4148\nmsgid \"没有找到备份文件\"\nmsgstr \"резервная файл не найдена\"\n\n#: install.sh:4153\nmsgid \"发现多个备份文件\"\nmsgstr \"обнаружено несколько файлов резервных копий\"\n\n#: install.sh:4153\nmsgid \"将使用最新的文件进行恢复\"\nmsgstr \"будет использован последний файл для восстановления\"\n\n#: install.sh:4157\nmsgid \"找到最新备份文件\"\nmsgstr \"найти последний файл резервной копии\"\n\n#: install.sh:4159\nmsgid \"恢复备份\"\nmsgstr \"восстановить резервную копию\"\n\n#: install.sh:4163\nmsgid \"恢复成功\"\nmsgstr \"восстановление успешно\"\n\n#: install.sh:4164 install.sh:4166\nmsgid \"记得安装\"\nmsgstr \"помните установить\"\n\n#: install.sh:4169\nmsgid \"恢复失败\"\nmsgstr \"восстановление не удалось\"\n\n#: install.sh:4175\nmsgid \"安装管理脚本\"\nmsgstr \"установить скрипт управления\"\n\n#: install.sh:4176\nmsgid \"作者\"\nmsgstr \"автор\"\n\n#: install.sh:4180\nmsgid \"当前模式\"\nmsgstr \"текущий режим\"\n\n#: install.sh:4181\nmsgid \"当前语言\"\nmsgstr \"текущий язык\"\n\n#: install.sh:4184\nmsgid \"可以使用\"\nmsgstr \"можно использовать\"\n\n#: install.sh:4184\nmsgid \"命令管理脚本\"\nmsgstr \"скрипт управления командами\"\n\n#: install.sh:4186\nmsgid \"版本检测\"\nmsgstr \"проверка версии\"\n\n#: install.sh:4187 install.sh:4195 install.sh:4246\nmsgid \"脚本\"\nmsgstr \"сценарий\"\n\n#: install.sh:4190\nmsgid \"运行状态\"\nmsgstr \"рабочее состояние\"\n\n#: install.sh:4193\nmsgid \"连通性\"\nmsgstr \"связность\"\n\n#: install.sh:4194\nmsgid \"更新向导\"\nmsgstr \"мастер обновления\"\n\n#: install.sh:4205\nmsgid \"安装向导\"\nmsgstr \"мастер установки\"\n\n#: install.sh:4210\nmsgid \"配置变更\"\nmsgstr \"изменение конфигурации\"\n\n#: install.sh:4217\nmsgid \"用户管理\"\nmsgstr \"управление пользователями\"\n\n#: install.sh:4218 install.sh:4219 install.sh:4220\nmsgid \"用户\"\nmsgstr \"пользователь\"\n\n#: install.sh:4221\nmsgid \"查看信息\"\nmsgstr \"просмотр информации\"\n\n#: install.sh:4222\nmsgid \"实时访问日志\"\nmsgstr \"журнал доступа в реальном времени\"\n\n#: install.sh:4223\nmsgid \"实时错误日志\"\nmsgstr \"журнал ошибок в реальном времени\"\n\n#: install.sh:4226\nmsgid \"服务相关\"\nmsgstr \"сервисный связанный\"\n\n#: install.sh:4227 install.sh:4228 install.sh:4229 install.sh:4230\nmsgid \"所有服务\"\nmsgstr \"все услуги\"\n\n#: install.sh:4231\nmsgid \"证书相关\"\nmsgstr \"сертификаты, связанные\"\n\n#: install.sh:4232\nmsgid \"证书状态\"\nmsgstr \"статус сертификата\"\n\n#: install.sh:4233\nmsgid \"证书有效期\"\nmsgstr \"срок действия сертификата\"\n\n#: install.sh:4234\nmsgid \"证书自动更新\"\nmsgstr \"автоматическое обновление сертификата\"\n\n#: install.sh:4235\nmsgid \"其他选项\"\nmsgstr \"другие варианты\"\n\n#: install.sh:4236\nmsgid \"自动更新\"\nmsgstr \"автоматическое обновление\"\n\n#: install.sh:4238\nmsgid \"防暴力破解\"\nmsgstr \"антивизионное растрескивание\"\n\n#: install.sh:4239\nmsgid \"流量统计\"\nmsgstr \"статистика трафика\"\n\n#: install.sh:4240\nmsgid \"清除\"\nmsgstr \"очистить\"\n\n#: install.sh:4240\nmsgid \"日志文件\"\nmsgstr \"журнал файлов\"\n\n#: install.sh:4241\nmsgid \"测试\"\nmsgstr \"тест\"\n\n#: install.sh:4241\nmsgid \"服务器网速\"\nmsgstr \"скорость интернета на сервере\"\n\n#: install.sh:4242\nmsgid \"备份恢复\"\nmsgstr \"резервное восстановление\"\n\n#: install.sh:4243 install.sh:4244\nmsgid \"全部文件\"\nmsgstr \"все файлы\"\n\n#: install.sh:4244\nmsgid \"恢复\"\nmsgstr \"восстановление\"\n\n#: install.sh:4245\nmsgid \"卸载向导\"\nmsgstr \"мастер удаления\"\n\n#: install.sh:4246 fail2ban_manager.sh:14 fail2ban_manager.sh:415\nmsgid \"卸载\"\nmsgstr \"удалить\"\n\n#: install.sh:4247\nmsgid \"清空\"\nmsgstr \"очистить\"\n\n#: install.sh:4247\nmsgid \"证书文件\"\nmsgstr \"файл сертификата\"\n\n#: install.sh:4248 fail2ban_manager.sh:16 file_manager.sh:208\nmsgid \"退出\"\nmsgstr \"выйти\"\n\n#: install.sh:4251\nmsgid \"请输入选项\"\nmsgstr \"пожалуйста, введите вариант\"\n\n#: install.sh:4259 install.sh:4268 install.sh:4334 install.sh:4340\n#: install.sh:4385 install.sh:4391 install.sh:4397 install.sh:4426\n#: install.sh:4467 install.sh:4474 install.sh:4479 fail2ban_manager.sh:416\nmsgid \"清空屏幕\"\nmsgstr \"очистить экран\"\n\n#: install.sh:4265\nmsgid \"不建议\"\nmsgstr \"не рекомендуется\"\n\n#: install.sh:4265\nmsgid \"频繁更新 Nginx, 请确认 Nginx 有更新的必要\"\nmsgstr \"часто обновляйте nginx; убедитесь, что обновление nginx действительно необходимо\"\n\n#: install.sh:4266\nmsgid \"开始更新\"\nmsgstr \"начать обновление\"\n\n#: install.sh:4346 install.sh:4353 install.sh:4360 install.sh:4410\n#: install.sh:4415 install.sh:4420 install.sh:4442\nmsgid \"回到菜单\"\nmsgstr \"вернуться к меню\"\n\n#: fail2ban_manager.sh:10\nmsgid \"用于防止暴力破解\"\nmsgstr \"для предотвращения атак методом перебора\"\n\n#: fail2ban_manager.sh:11 file_manager.sh:203\nmsgid \"主菜单\"\nmsgstr \"главное меню\"\n\n#: fail2ban_manager.sh:13\nmsgid \"管理\"\nmsgstr \"управление\"\n\n#: fail2ban_manager.sh:15 fail2ban_manager.sh:339\nmsgid \"状态\"\nmsgstr \"состояние\"\n\n#: fail2ban_manager.sh:18 file_manager.sh:210\nmsgid \"请选择一个选项\"\nmsgstr \"выберите один из вариантов\"\n\n#: fail2ban_manager.sh:27 fail2ban_manager.sh:250 fail2ban_manager.sh:258\n#: fail2ban_manager.sh:363\nmsgid \"无效的选择, 请重试\"\nmsgstr \"недопустимый выбор, попробуйте еще раз\"\n\n#: fail2ban_manager.sh:35\nmsgid \"已经安装, 跳过安装步骤\"\nmsgstr \"уже установлено, пропустить шаг установки\"\n\n#: fail2ban_manager.sh:68\nmsgid \"systemd 无法读取 SSH 日志\"\nmsgstr \"systemd не может прочитать ssh-журналы\"\n\n#: fail2ban_manager.sh:69\nmsgid \"跳过启用\"\nmsgstr \"пропустить включение\"\n\n#: fail2ban_manager.sh:69 fail2ban_manager.sh:93 fail2ban_manager.sh:103\n#: fail2ban_manager.sh:120 fail2ban_manager.sh:125 fail2ban_manager.sh:128\n#: fail2ban_manager.sh:146 fail2ban_manager.sh:151 fail2ban_manager.sh:154\nmsgid \"规则\"\nmsgstr \"правило\"\n\n#: fail2ban_manager.sh:77 fail2ban_manager.sh:203 fail2ban_manager.sh:440\nmsgid \"未安装, 请先安装\"\nmsgstr \"не установлено, сначала установите\"\n\n#: fail2ban_manager.sh:125 fail2ban_manager.sh:151 fail2ban_manager.sh:349\nmsgid \"已禁用\"\nmsgstr \"отключено\"\n\n#: fail2ban_manager.sh:209\nmsgid \"请选择\"\nmsgstr \"пожалуйста, выберите\"\n\n#: fail2ban_manager.sh:209\nmsgid \"操作\"\nmsgstr \"операция\"\n\n#: fail2ban_manager.sh:210\nmsgid \"管理模块\"\nmsgstr \"модуль управления\"\n\n#: fail2ban_manager.sh:211\nmsgid \"添加自定义规则\"\nmsgstr \"добавить пользовательское правило\"\n\n#: fail2ban_manager.sh:212 fail2ban_manager.sh:228\nmsgid \"服务管理\"\nmsgstr \"управление услугами\"\n\n#: fail2ban_manager.sh:271\nmsgid \"请输入新的\"\nmsgstr \"пожалуйста, введите новое\"\n\n#: fail2ban_manager.sh:271 fail2ban_manager.sh:272\nmsgid \"名称\"\nmsgstr \"название\"\n\n#: fail2ban_manager.sh:273\nmsgid \"请输入日志路径\"\nmsgstr \"пожалуйста, введите путь к журналу\"\n\n#: fail2ban_manager.sh:274\nmsgid \"请输入最大重试次数\"\nmsgstr \"пожалуйста, введите максимальное количество попыток\"\n\n#: fail2ban_manager.sh:274\nmsgid \"最大重试次数必须在 1 到 99 之间\"\nmsgstr \"максимальное количество попыток должно быть в диапазоне от 1 до 99\"\n\n#: fail2ban_manager.sh:275\nmsgid \"请输入封禁时间\"\nmsgstr \"пожалуйста, введите время блокировки\"\n\n#: fail2ban_manager.sh:275\nmsgid \"秒\"\nmsgstr \"секунда\"\n\n#: fail2ban_manager.sh:275\nmsgid \"封禁时间必须在 1 到 8640000 秒之间\"\nmsgstr \"время блокировки должно быть от 1 до 8640000 секунд\"\n\n#: fail2ban_manager.sh:285\nmsgid \"自定义规则添加成功\"\nmsgstr \"правило успешно добавлено\"\n\n#: fail2ban_manager.sh:289\nmsgid \"重启以应用新规则\"\nmsgstr \"перезагрузите для применения новых правил\"\n\n#: fail2ban_manager.sh:294\nmsgid \"管理 Fail2ban 模块\"\nmsgstr \"управление модулем fail2ban\"\n\n#: fail2ban_manager.sh:311\nmsgid \"未找到任何模块化配置文件\"\nmsgstr \"не найден ни один модульный конфигурационный файл\"\n\n#: fail2ban_manager.sh:319 fail2ban_manager.sh:339\nmsgid \"模块名称\"\nmsgstr \"название модуля\"\n\n#: fail2ban_manager.sh:339 file_manager.sh:59\nmsgid \"序号\"\nmsgstr \"порядковый номер\"\n\n#: fail2ban_manager.sh:363\nmsgid \"请选择要管理的模块\"\nmsgstr \"пожалуйста, выберите модуль для управления\"\n\n#: fail2ban_manager.sh:375\nmsgid \"启用\"\nmsgstr \"включить\"\n\n#: fail2ban_manager.sh:375\nmsgid \"禁用\"\nmsgstr \"отключить\"\n\n#: fail2ban_manager.sh:378\nmsgid \"是否\"\nmsgstr \"является ли\"\n\n#: fail2ban_manager.sh:378 fail2ban_manager.sh:386\nmsgid \"模块\"\nmsgstr \"модуль\"\n\n#: fail2ban_manager.sh:388\nmsgid \"操作已取消\"\nmsgstr \"операция отменена\"\n\n#: fail2ban_manager.sh:424\nmsgid \"停止成功\"\nmsgstr \"остановка успешно выполнена\"\n\n#: fail2ban_manager.sh:444\nmsgid \"总体状态\"\nmsgstr \"общее состояние\"\n\n#: fail2ban_manager.sh:448\nmsgid \"默认启用的 Jail 状态\"\nmsgstr \"статус тюрьмы включено по умолчанию\"\n\n#: fail2ban_manager.sh:452 fail2ban_manager.sh:458\nmsgid \"封锁情况\"\nmsgstr \"ситуация с блокировкой\"\n\n#: fail2ban_manager.sh:453 fail2ban_manager.sh:459 fail2ban_manager.sh:462\n#: fail2ban_manager.sh:466 fail2ban_manager.sh:469\nmsgid \"未启用或配置异常\"\nmsgstr \"не активировано или возникла ошибка конфигурации\"\n\n#: fail2ban_manager.sh:484 file_manager.sh:232\nmsgid \"新版本可用\"\nmsgstr \"доступна новая версия\"\n\n#: fail2ban_manager.sh:484 file_manager.sh:232\nmsgid \"当前版本\"\nmsgstr \"текущая версия\"\n\n#: fail2ban_manager.sh:485 file_manager.sh:233\nmsgid \"请访问\"\nmsgstr \"пожалуйста, посетите\"\n\n#: fail2ban_manager.sh:485 file_manager.sh:233\nmsgid \"查看更新说明\"\nmsgstr \"просмотреть описание обновлений\"\n\n#: fail2ban_manager.sh:487 file_manager.sh:235\nmsgid \"是否下载并安装新版本\"\nmsgstr \"скачать и установить новую версию\"\n\n#: fail2ban_manager.sh:491 file_manager.sh:239\nmsgid \"正在下载新版本\"\nmsgstr \"загружается новая версия\"\n\n#: fail2ban_manager.sh:496 file_manager.sh:244\nmsgid \"下载完成, 请重新运行脚本\"\nmsgstr \"загрузка завершена, пожалуйста, запустите скрипт заново\"\n\n#: fail2ban_manager.sh:504 file_manager.sh:252\nmsgid \"跳过更新\"\nmsgstr \"пропустить обновление\"\n\n#: fail2ban_manager.sh:508 file_manager.sh:256\nmsgid \"当前已经是最新版本\"\nmsgstr \"в настоящее время уже установлена последняя версия\"\n\n#: file_manager.sh:7\nmsgid \"用法\"\nmsgstr \"применение\"\n\n#: file_manager.sh:7\nmsgid \"文件扩展名\"\nmsgstr \"расширение файла\"\n\n#: file_manager.sh:7\nmsgid \"目录路径\"\nmsgstr \"путь к каталогу\"\n\n#: file_manager.sh:16\nmsgid \"目录\"\nmsgstr \"оглавление\"\n\n#: file_manager.sh:16\nmsgid \"不存在, 请检查路径\"\nmsgstr \"не существует, проверьте путь\"\n\n#: file_manager.sh:26 file_manager.sh:204\nmsgid \"列出所有\"\nmsgstr \"перечислить все\"\n\n#: file_manager.sh:26 file_manager.sh:35 file_manager.sh:88 file_manager.sh:111\n#: file_manager.sh:160 file_manager.sh:176 file_manager.sh:204\n#: file_manager.sh:205 file_manager.sh:206 file_manager.sh:207\nmsgid \"文件\"\nmsgstr \"файл\"\n\n#: file_manager.sh:53\nmsgid \"文件名\"\nmsgstr \"имя файла\"\n\n#: file_manager.sh:79\nmsgid \"请输入网址 (例如 hey.run)\"\nmsgstr \"пожалуйста, введите адрес сайта (например, hey.run)\"\n\n#: file_manager.sh:80\nmsgid \"不要包含 http:// 或 https:// 开头\"\nmsgstr \"не включать строки, начинающиеся с http:// или https://\"\n\n#: file_manager.sh:84\nmsgid \"网址不能包含 http:// 或 https:// 前缀\"\nmsgstr \"url не может содержать префиксы http:// или https://\"\n\n#: file_manager.sh:88 file_manager.sh:111\nmsgid \"已创建\"\nmsgstr \"создано\"\n\n#: file_manager.sh:99\nmsgid \"请输入主机\"\nmsgstr \"пожалуйста, введите хост\"\n\n#: file_manager.sh:107\nmsgid \"请输入权重\"\nmsgstr \"пожалуйста, введите вес\"\n\n#: file_manager.sh:128\nmsgid \"追加完成\"\nmsgstr \"дополнительное завершение\"\n\n#: file_manager.sh:132 file_manager.sh:136\nmsgid \"重启完成\"\nmsgstr \"перезагрузка завершена\"\n\n#: file_manager.sh:151\nmsgid \"请输入要编辑的文件编号\"\nmsgstr \"введите номер файла, который хотите отредактировать\"\n\n#: file_manager.sh:156\nmsgid \"未安装, 正在尝试安装\"\nmsgstr \"не установлено, пытается установить\"\n\n#: file_manager.sh:160\nmsgid \"已编辑\"\nmsgstr \"изменено\"\n\n#: file_manager.sh:171\nmsgid \"请输入要删除的文件编号\"\nmsgstr \"введите номер файла, который хотите удалить\"\n\n#: file_manager.sh:194\nmsgid \"不支持的文件扩展名\"\nmsgstr \"неподдерживаемое расширение файла\"\n\n#: file_manager.sh:205\nmsgid \"创建一个新的\"\nmsgstr \"создать новое\"\n\n#: file_manager.sh:206\nmsgid \"编辑一个已存在的\"\nmsgstr \"редактировать существующий\"\n\n#: file_manager.sh:207\nmsgid \"删除一个已存在的\"\nmsgstr \"удалить существующий\"\n\n#: file_manager.sh:265\nmsgid \"重启成功\"\nmsgstr \"перезапуск успешен\"\n\n#: file_manager.sh:268\nmsgid \"重启失败\"\nmsgstr \"перезапуск не удался\"\n\n#: file_manager.sh:268\nmsgid \"请检查配置文件是否有误\"\nmsgstr \"пожалуйста, проверьте, нет ли ошибок в конфигурационном файле\"\n"
  },
  {
    "path": "po/xray_install.pot",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR yunshu\n# This file is distributed under the same license as the xray_install package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: xray_install 1.0\\n\"\n\"Report-Msgid-Bugs-To: https://github.com/hello-yunshu/Xray_bash_onekey/\"\n\"issues\\n\"\n\"POT-Creation-Date: 2026-04-24 09:47+0000\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"Language: \\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\n#: install.sh:32\nmsgid \"信息\"\nmsgstr \"\"\n\n#: install.sh:34\nmsgid \"错误\"\nmsgstr \"\"\n\n#: install.sh:35\nmsgid \"警告\"\nmsgstr \"\"\n\n#: install.sh:38 install.sh:1540 install.sh:3960 install.sh:3977\n#: install.sh:3980 install.sh:3981 install.sh:4019\nmsgid \"未安装\"\nmsgstr \"\"\n\n#: install.sh:99\nmsgid \"日志文件归档失败\"\nmsgstr \"\"\n\n#: install.sh:104\nmsgid \"日志文件清空失败\"\nmsgstr \"\"\n\n#: install.sh:108\nmsgid \"日志文件已轮转并归档为\"\nmsgstr \"\"\n\n#: install.sh:134 install.sh:138 install.sh:142 install.sh:152\nmsgid \"当前系统为\"\nmsgstr \"\"\n\n#: install.sh:152\nmsgid \"不在支持的系统列表内, 安装中断\"\nmsgstr \"\"\n\n#: install.sh:159\nmsgid \"当前用户是 root 用户, 开始安装\"\nmsgstr \"\"\n\n#: install.sh:161\nmsgid \"当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本\"\nmsgstr \"\"\n\n#: install.sh:187\nmsgid \"无法获取远程语言文件信息\"\nmsgstr \"\"\n\n#: install.sh:205\nmsgid \"正在更新语言文件\"\nmsgstr \"\"\n\n#: install.sh:208 install.sh:291\nmsgid \"语言文件更新失败\"\nmsgstr \"\"\n\n#: install.sh:213\nmsgid \"语言文件无效\"\nmsgstr \"\"\n\n#: install.sh:219\nmsgid \"版本文件更新失败\"\nmsgstr \"\"\n\n#: install.sh:226\nmsgid \"语言文件更新完成\"\nmsgstr \"\"\n\n#: install.sh:231 install.sh:2725\nmsgid \"正在安装\"\nmsgstr \"\"\n\n#: install.sh:234\nmsgid \"安装失败\"\nmsgstr \"\"\n\n#: install.sh:234 install.sh:258 install.sh:281 install.sh:291\nmsgid \"将使用默认语言\"\nmsgstr \"\"\n\n#: install.sh:258 file_manager.sh:35\nmsgid \"未找到\"\nmsgstr \"\"\n\n#: install.sh:281\nmsgid \"不支持的语言\"\nmsgstr \"\"\n\n#: install.sh:297\nmsgid \"发现语言文件更新\"\nmsgstr \"\"\n\n#: install.sh:312 install.sh:1740\nmsgid \"完成\"\nmsgstr \"\"\n\n#: install.sh:315\nmsgid \"失败\"\nmsgstr \"\"\n\n#: install.sh:322\nmsgid \"在线版本检测失败, 请稍后再试\"\nmsgstr \"\"\n\n#: install.sh:344 install.sh:352 install.sh:1162 install.sh:3872\n#: install.sh:3873 install.sh:3874 install.sh:3875 install.sh:4206\n#: install.sh:4207 install.sh:4208 install.sh:4209 fail2ban_manager.sh:12\n#: fail2ban_manager.sh:39\nmsgid \"安装\"\nmsgstr \"\"\n\n#: install.sh:346 install.sh:354 install.sh:1169 install.sh:2729\n#: install.sh:3969\nmsgid \"已安装\"\nmsgstr \"\"\n\n#: install.sh:371 install.sh:375\nmsgid \"自启动配置\"\nmsgstr \"\"\n\n#: install.sh:384\nmsgid \"链接库安装\"\nmsgstr \"\"\n\n#: install.sh:389\nmsgid \"值为空或超出范围, 请重新输入\"\nmsgstr \"\"\n\n#: install.sh:398\nmsgid \"值为空, 请重新输入\"\nmsgstr \"\"\n\n#: install.sh:440\nmsgid \"确定端口\"\nmsgstr \"\"\n\n#: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:104\nmsgid \"请输入端口\"\nmsgstr \"\"\n\n#: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:107\nmsgid \"默认值\"\nmsgstr \"\"\n\n#: install.sh:441 install.sh:444 install.sh:532 install.sh:554 install.sh:3055\n#: install.sh:3060 install.sh:3065 install.sh:3066 install.sh:3081\n#: install.sh:3086 install.sh:3091 install.sh:3092\nmsgid \"请输入 0-65535 之间的值\"\nmsgstr \"\"\n\n#: install.sh:443\nmsgid \"端口不允许使用, 请重新输入\"\nmsgstr \"\"\n\n#: install.sh:452\nmsgid \"请选择安装协议\"\nmsgstr \"\"\n\n#: install.sh:453 install.sh:1617 install.sh:1654 install.sh:1705\n#: install.sh:2997 install.sh:3142 install.sh:3209 install.sh:3256\n#: fail2ban_manager.sh:274 fail2ban_manager.sh:275\nmsgid \"默认\"\nmsgstr \"\"\n\n#: install.sh:457 install.sh:532 install.sh:554 install.sh:635 install.sh:668\n#: install.sh:821 install.sh:840 install.sh:881 install.sh:922 install.sh:1621\n#: install.sh:1634 install.sh:1656 install.sh:1709 install.sh:1719\n#: install.sh:2985 install.sh:3000 install.sh:3055 install.sh:3060\n#: install.sh:3065 install.sh:3066 install.sh:3081 install.sh:3086\n#: install.sh:3091 install.sh:3092 install.sh:3145 install.sh:3154\n#: install.sh:3212 install.sh:3259 install.sh:3268 fail2ban_manager.sh:215\n#: fail2ban_manager.sh:234 fail2ban_manager.sh:272 file_manager.sh:81\nmsgid \"请输入\"\nmsgstr \"\"\n\n#: install.sh:457 install.sh:922 install.sh:1621 install.sh:1656\n#: install.sh:1709 install.sh:2985 install.sh:3000 install.sh:3145\n#: install.sh:3212 install.sh:3259 install.sh:4251 install.sh:4489\nmsgid \"请输入有效的数字\"\nmsgstr \"\"\n\n#: install.sh:478\nmsgid \"是否添加简单 ws/gRPC 协议 用于负载均衡\"\nmsgstr \"\"\n\n#: install.sh:479 install.sh:1259\nmsgid \"如不清楚具体用途, 请勿选择\"\nmsgstr \"\"\n\n#: install.sh:499\nmsgid \"已跳过添加简单 ws/gRPC 协议\"\nmsgstr \"\"\n\n#: install.sh:528 install.sh:550 install.sh:631 install.sh:648 install.sh:664\n#: install.sh:681 install.sh:696 install.sh:815 install.sh:836 install.sh:877\nmsgid \"是否需要自定义\"\nmsgstr \"\"\n\n#: install.sh:532 install.sh:554\nmsgid \"请勿与其他端口相同\"\nmsgstr \"\"\n\n#: install.sh:571 file_manager.sh:114\nmsgid \"是否需要设置防火墙\"\nmsgstr \"\"\n\n#: install.sh:611 install.sh:615 file_manager.sh:128 file_manager.sh:132\n#: file_manager.sh:136\nmsgid \"防火墙\"\nmsgstr \"\"\n\n#: install.sh:611 install.sh:615 install.sh:2215 install.sh:2218\n#: install.sh:3012 install.sh:3014 install.sh:4227 fail2ban_manager.sh:231\n#: fail2ban_manager.sh:432\nmsgid \"重启\"\nmsgstr \"\"\n\n#: install.sh:617\nmsgid \"开放防火墙相关端口\"\nmsgstr \"\"\n\n#: install.sh:618\nmsgid \"若修改配置, 请注意关闭防火墙相关端口\"\nmsgstr \"\"\n\n#: install.sh:619 install.sh:3877 install.sh:3892 install.sh:3893\n#: install.sh:4216 install.sh:4236 fail2ban_manager.sh:161\nmsgid \"配置\"\nmsgstr \"\"\n\n#: install.sh:622 file_manager.sh:140\nmsgid \"跳过防火墙设置\"\nmsgstr \"\"\n\n#: install.sh:631 install.sh:635 install.sh:636 install.sh:640 install.sh:648\n#: install.sh:664 install.sh:668 install.sh:669 install.sh:673 install.sh:681\n#: install.sh:1101\nmsgid \"伪装路径\"\nmsgstr \"\"\n\n#: install.sh:635 install.sh:668\nmsgid \"不需要\"\nmsgstr \"\"\n\n#: install.sh:696 install.sh:706 install.sh:3172\nmsgid \"用户名\"\nmsgstr \"\"\n\n#: install.sh:700\nmsgid \"请输入正确的 email\"\nmsgstr \"\"\n\n#: install.sh:713\nmsgid \"是否需要自定义字符串映射\"\nmsgstr \"\"\n\n#: install.sh:717\nmsgid \"请输入自定义字符串\"\nmsgstr \"\"\n\n#: install.sh:717\nmsgid \"最多30字符\"\nmsgstr \"\"\n\n#: install.sh:719\nmsgid \"自定义字符串\"\nmsgstr \"\"\n\n#: install.sh:726 install.sh:2836 install.sh:3895 install.sh:4211\n#: install.sh:4314\nmsgid \"映射字符串\"\nmsgstr \"\"\n\n#: install.sh:737\nmsgid \"检测到 target 域名已配置, 是否保留\"\nmsgstr \"\"\n\n#: install.sh:757\nmsgid \"请输入一个域名\"\nmsgstr \"\"\n\n#: install.sh:758\nmsgid \"域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用\"\nmsgstr \"\"\n\n#: install.sh:759\nmsgid \"确认域名符合要求后请输入\"\nmsgstr \"\"\n\n#: install.sh:760\nmsgid \"正在检测域名请等待\"\nmsgstr \"\"\n\n#: install.sh:767 install.sh:772 install.sh:777\nmsgid \"该域名不支持\"\nmsgstr \"\"\n\n#: install.sh:782\nmsgid \"该域名发生了跳转\"\nmsgstr \"\"\n\n#: install.sh:789\nmsgid \"该域名可能不满足所有要求\"\nmsgstr \"\"\n\n#: install.sh:790\nmsgid \"是否仍要设置此域名\"\nmsgstr \"\"\n\n#: install.sh:802 install.sh:807 install.sh:1619\nmsgid \"域名\"\nmsgstr \"\"\n\n#: install.sh:802\nmsgid \"满足所有要求\"\nmsgstr \"\"\n\n#: install.sh:815\nmsgid \"域名的\"\nmsgstr \"\"\n\n#: install.sh:816\nmsgid \"默认为\"\nmsgstr \"\"\n\n#: install.sh:816\nmsgid \"域名本身\"\nmsgstr \"\"\n\n#: install.sh:817 install.sh:912 install.sh:952\nmsgid \"如不清楚具体用途, 请勿继续\"\nmsgstr \"\"\n\n#: install.sh:898\nmsgid \"本地文件 file_manager.sh 不存在, 正在下载\"\nmsgstr \"\"\n\n#: install.sh:900 install.sh:2330 fail2ban_manager.sh:500 file_manager.sh:248\nmsgid \"下载失败, 请手动下载并安装新版本\"\nmsgstr \"\"\n\n#: install.sh:911 install.sh:951\nmsgid \"是否变更\"\nmsgstr \"\"\n\n#: install.sh:911\nmsgid \"负载均衡\"\nmsgstr \"\"\n\n#: install.sh:917\nmsgid \"请选择协议为 ws 或 gRPC\"\nmsgstr \"\"\n\n#: install.sh:920 fail2ban_manager.sh:213 fail2ban_manager.sh:232\n#: fail2ban_manager.sh:325 fail2ban_manager.sh:357\nmsgid \"返回\"\nmsgstr \"\"\n\n#: install.sh:930 file_manager.sh:220\nmsgid \"无效选项, 请重试\"\nmsgstr \"\"\n\n#: install.sh:940 install.sh:964 install.sh:2266 install.sh:2304\n#: install.sh:2320\nmsgid \"当前模式不支持此操作\"\nmsgstr \"\"\n\n#: install.sh:953\nmsgid \"配置用途可以参考文章\"\nmsgstr \"\"\n\n#: install.sh:980 install.sh:991 install.sh:995 install.sh:999 install.sh:1011\n#: install.sh:1016 install.sh:1020 install.sh:1025 install.sh:1045\n#: install.sh:1051 install.sh:1101 install.sh:1120 install.sh:3893\n#: install.sh:4177\nmsgid \"修改\"\nmsgstr \"\"\n\n#: install.sh:1053 install.sh:2816 install.sh:2818 install.sh:2820\n#: install.sh:2821 install.sh:2824 install.sh:2828 install.sh:2830\n#: install.sh:2832 install.sh:2833 install.sh:2861 install.sh:2864\n#: install.sh:2867 install.sh:2869 install.sh:3049\nmsgid \"端口\"\nmsgstr \"\"\n\n#: install.sh:1103\nmsgid \"不支持\"\nmsgstr \"\"\n\n#: install.sh:1110\nmsgid \"用户名修改\"\nmsgstr \"\"\n\n#: install.sh:1113 install.sh:1123\nmsgid \"请先删除多余的用户\"\nmsgstr \"\"\n\n#: install.sh:1131 install.sh:1139 install.sh:1146 install.sh:1990\n#: install.sh:2061 install.sh:2146 install.sh:2154 install.sh:2163\n#: install.sh:2186\nmsgid \"配置修改\"\nmsgstr \"\"\n\n#: install.sh:1151\nmsgid \"检测到 Xray 的权限控制, 启动修改程序\"\nmsgstr \"\"\n\n#: install.sh:1156\nmsgid \"修改完成\"\nmsgstr \"\"\n\n#: install.sh:1176\nmsgid \"若更新无效, 建议直接卸载再安装\"\nmsgstr \"\"\n\n#: install.sh:1177\nmsgid \"部分新功能需要重新安装才可生效\"\nmsgstr \"\"\n\n#: install.sh:1182\nmsgid \"检测到存在最新版\"\nmsgstr \"\"\n\n#: install.sh:1183\nmsgid \"脚本可能未兼容此版本\"\nmsgstr \"\"\n\n#: install.sh:1184\nmsgid \"是否更新\"\nmsgstr \"\"\n\n#: install.sh:1188 install.sh:1213 install.sh:1532 install.sh:3886\n#: install.sh:3898 install.sh:4195 install.sh:4196 install.sh:4197\n#: install.sh:4233\nmsgid \"更新\"\nmsgstr \"\"\n\n#: install.sh:1192 install.sh:1494\nmsgid \"启动失败\"\nmsgstr \"\"\n\n#: install.sh:1193 install.sh:1497\nmsgid \"是否回滚到之前的版本\"\nmsgstr \"\"\n\n#: install.sh:1197 install.sh:1507\nmsgid \"未执行回滚操作\"\nmsgstr \"\"\n\n#: install.sh:1201 install.sh:1511\nmsgid \"正在回滚\"\nmsgstr \"\"\n\n#: install.sh:1205 install.sh:1518\nmsgid \"已成功回滚到之前的\"\nmsgstr \"\"\n\n#: install.sh:1205 install.sh:1518 install.sh:4214 install.sh:4329\nmsgid \"版本\"\nmsgstr \"\"\n\n#: install.sh:1207 install.sh:1228 install.sh:1524\nmsgid \"回滚失败\"\nmsgstr \"\"\n\n#: install.sh:1234 install.sh:1238\nmsgid \"重装\"\nmsgstr \"\"\n\n#: install.sh:1248 install.sh:1249\nmsgid \"更新失败\"\nmsgstr \"\"\n\n#: install.sh:1257\nmsgid \"是否添加 Reality 负载均衡\"\nmsgstr \"\"\n\n#: install.sh:1258\nmsgid \"使用此功能前，建议先阅读作者教程\"\nmsgstr \"\"\n\n#: install.sh:1264 fail2ban_manager.sh:93 fail2ban_manager.sh:103\n#: fail2ban_manager.sh:128 fail2ban_manager.sh:154 fail2ban_manager.sh:347\nmsgid \"已启用\"\nmsgstr \"\"\n\n#: install.sh:1268\nmsgid \"已跳过\"\nmsgstr \"\"\n\n#: install.sh:1277\nmsgid \"Reality 协议有流量偷跑的风险\"\nmsgstr \"\"\n\n#: install.sh:1279 install.sh:1306\nmsgid \"是否额外安装 nginx 前置保护\"\nmsgstr \"\"\n\n#: install.sh:1279\nmsgid \"推荐\"\nmsgstr \"\"\n\n#: install.sh:1286 install.sh:1321\nmsgid \"检测到已安装\"\nmsgstr \"\"\n\n#: install.sh:1289 install.sh:1324\nmsgid \"已跳过安装\"\nmsgstr \"\"\n\n#: install.sh:1303\nmsgid \"检测到已开启 Reality 负载均衡\"\nmsgstr \"\"\n\n#: install.sh:1304\nmsgid \"如用作 Reality 负载均衡主服务器必须安装\"\nmsgstr \"\"\n\n#: install.sh:1305\nmsgid \"如用作 Reality 负载均衡二级服务器则无需安装\"\nmsgstr \"\"\n\n#: install.sh:1349\nmsgid \"已存在, 跳过编译安装过程\"\nmsgstr \"\"\n\n#: install.sh:1351\nmsgid \"检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装\"\nmsgstr \"\"\n\n#: install.sh:1364\nmsgid \"即将下载已编译的\"\nmsgstr \"\"\n\n#: install.sh:1374\nmsgid \"不支持的系统架构\"\nmsgstr \"\"\n\n#: install.sh:1383\nmsgid \"下载失败\"\nmsgstr \"\"\n\n#: install.sh:1387\nmsgid \"下载成功\"\nmsgstr \"\"\n\n#: install.sh:1390\nmsgid \"解压失败\"\nmsgstr \"\"\n\n#: install.sh:1438 install.sh:1439 install.sh:1446 install.sh:1447\nmsgid \"配置不完整, 退出更新\"\nmsgstr \"\"\n\n#: install.sh:1451 install.sh:1452\nmsgid \"当前安装模式不需要\"\nmsgstr \"\"\n\n#: install.sh:1456 install.sh:1457\nmsgid \"配置不存在, 退出更新\"\nmsgstr \"\"\n\n#: install.sh:1463\nmsgid \"备份旧版\"\nmsgstr \"\"\n\n#: install.sh:1464\nmsgid \"删除旧版\"\nmsgstr \"\"\n\n#: install.sh:1468\nmsgid \"是否保留原 Nginx 配置文件\"\nmsgstr \"\"\n\n#: install.sh:1476 install.sh:1809\nmsgid \"原配置文件已删除\"\nmsgstr \"\"\n\n#: install.sh:1480\nmsgid \"原配置文件已保留\"\nmsgstr \"\"\n\n#: install.sh:1534 install.sh:4220\nmsgid \"删除\"\nmsgstr \"\"\n\n#: install.sh:1534 install.sh:4243\nmsgid \"备份\"\nmsgstr \"\"\n\n#: install.sh:1537\nmsgid \"已为最新版\"\nmsgstr \"\"\n\n#: install.sh:1553\nmsgid \"设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)\"\nmsgstr \"\"\n\n#: install.sh:1554\nmsgid \"可能自动更新后有兼容问题, 谨慎启用\"\nmsgstr \"\"\n\n#: install.sh:1555 fail2ban_manager.sh:120 fail2ban_manager.sh:146\nmsgid \"是否启用\"\nmsgstr \"\"\n\n#: install.sh:1561 install.sh:3878\nmsgid \"设置自动更新\"\nmsgstr \"\"\n\n#: install.sh:1566\nmsgid \"已设置自动更新\"\nmsgstr \"\"\n\n#: install.sh:1567\nmsgid \"是否关闭\"\nmsgstr \"\"\n\n#: install.sh:1573\nmsgid \"删除自动更新\"\nmsgstr \"\"\n\n#: install.sh:1582\nmsgid \"安装 SSL 证书生成脚本依赖\"\nmsgstr \"\"\n\n#: install.sh:1584\nmsgid \"安装 SSL 证书生成脚本\"\nmsgstr \"\"\n\n#: install.sh:1590\nmsgid \"检测到原域名配置存在, 是否跳过域名设置\"\nmsgstr \"\"\n\n#: install.sh:1605 install.sh:1642 install.sh:1693 install.sh:1726\nmsgid \"无法获取公网IP地址\"\nmsgstr \"\"\n\n#: install.sh:1605 install.sh:1642 install.sh:1665 install.sh:1693\n#: install.sh:1726\nmsgid \"安装终止\"\nmsgstr \"\"\n\n#: install.sh:1608\nmsgid \"已跳过域名设置\"\nmsgstr \"\"\n\n#: install.sh:1614\nmsgid \"确定域名信息\"\nmsgstr \"\"\n\n#: install.sh:1615\nmsgid \"请输入你的域名信息\"\nmsgstr \"\"\n\n#: install.sh:1616\nmsgid \"请选择公网IP(IPv4/IPv6)或手动输入域名\"\nmsgstr \"\"\n\n#: install.sh:1622 install.sh:1711\nmsgid \"正在获取公网IP信息, 请耐心等待\"\nmsgstr \"\"\n\n#: install.sh:1632\nmsgid \"此选项用于服务器商仅提供域名访问服务器\"\nmsgstr \"\"\n\n#: install.sh:1633\nmsgid \"注意服务器商域名添加 CNAME 记录\"\nmsgstr \"\"\n\n#: install.sh:1645\nmsgid \"域名DNS解析IP\"\nmsgstr \"\"\n\n#: install.sh:1646 install.sh:1729\nmsgid \"公网IP/域名\"\nmsgstr \"\"\n\n#: install.sh:1648\nmsgid \"域名DNS解析IP与公网IP匹配\"\nmsgstr \"\"\n\n#: install.sh:1650\nmsgid \"请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray\"\nmsgstr \"\"\n\n#: install.sh:1651\nmsgid \"域名DNS解析IP与公网IP不匹配, 请选择\"\nmsgstr \"\"\n\n#: install.sh:1652 install.sh:1659\nmsgid \"继续安装\"\nmsgstr \"\"\n\n#: install.sh:1653\nmsgid \"重新输入\"\nmsgstr \"\"\n\n#: install.sh:1654\nmsgid \"终止安装\"\nmsgstr \"\"\n\n#: install.sh:1676\nmsgid \"检测到原IP配置存在, 是否跳过IP设置\"\nmsgstr \"\"\n\n#: install.sh:1697\nmsgid \"已跳过IP设置\"\nmsgstr \"\"\n\n#: install.sh:1703\nmsgid \"确定公网IP信息\"\nmsgstr \"\"\n\n#: install.sh:1704\nmsgid \"请选择公网IP为IPv4或IPv6\"\nmsgstr \"\"\n\n#: install.sh:1707\nmsgid \"手动输入\"\nmsgstr \"\"\n\n#: install.sh:1734\nmsgid \"端口未被占用\"\nmsgstr \"\"\n\n#: install.sh:1736\nmsgid \"检测到\"\nmsgstr \"\"\n\n#: install.sh:1736\nmsgid \"端口被占用\"\nmsgstr \"\"\n\n#: install.sh:1736\nmsgid \"以下为\"\nmsgstr \"\"\n\n#: install.sh:1736\nmsgid \"端口占用信息\"\nmsgstr \"\"\n\n#: install.sh:1738\nmsgid \"尝试终止占用的进程\"\nmsgstr \"\"\n\n#: install.sh:1749\nmsgid \"证书测试签发成功, 开始正式签发\"\nmsgstr \"\"\n\n#: install.sh:1752\nmsgid \"证书测试签发失败\"\nmsgstr \"\"\n\n#: install.sh:1759\nmsgid \"证书生成成功\"\nmsgstr \"\"\n\n#: install.sh:1765\nmsgid \"证书配置成功\"\nmsgstr \"\"\n\n#: install.sh:1769\nmsgid \"证书生成失败\"\nmsgstr \"\"\n\n#: install.sh:1801\nmsgid \"检测到 Xray 配置过多用户\"\nmsgstr \"\"\n\n#: install.sh:1802\nmsgid \"是否保留原 Xray 配置文件\"\nmsgstr \"\"\n\n#: install.sh:1822\nmsgid \"添加简单 ws/gRPC 协议\"\nmsgstr \"\"\n\n#: install.sh:1837\nmsgid \"检测到配置文件, 是否读取配置文件\"\nmsgstr \"\"\n\n#: install.sh:1842 install.sh:1863 install.sh:1961 install.sh:3430\nmsgid \"已删除配置文件\"\nmsgstr \"\"\n\n#: install.sh:1845 install.sh:1858 install.sh:1956 install.sh:3426\nmsgid \"已保留配置文件\"\nmsgstr \"\"\n\n#: install.sh:1852\nmsgid \"检测到当前安装模式与配置文件的安装模式不一致\"\nmsgstr \"\"\n\n#: install.sh:1853\nmsgid \"是否保留配置文件 (强烈不建议)\"\nmsgstr \"\"\n\n#: install.sh:1857\nmsgid \"请务必确保配置文件正确\"\nmsgstr \"\"\n\n#: install.sh:1951\nmsgid \"检测到配置文件不完整, 是否保留配置文件\"\nmsgstr \"\"\n\n#: install.sh:2170\nmsgid \"配置删除\"\nmsgstr \"\"\n\n#: install.sh:2191\nmsgid \"设置 Nginx 开机自启\"\nmsgstr \"\"\n\n#: install.sh:2194 install.sh:4234 install.sh:4237 install.sh:4238\n#: install.sh:4239 fail2ban_manager.sh:10\nmsgid \"设置\"\nmsgstr \"\"\n\n#: install.sh:2194 install.sh:2202\nmsgid \"开机自启\"\nmsgstr \"\"\n\n#: install.sh:2199\nmsgid \"关闭 Nginx 开机自启\"\nmsgstr \"\"\n\n#: install.sh:2202\nmsgid \"关闭\"\nmsgstr \"\"\n\n#: install.sh:2209 install.sh:2231 install.sh:2234 install.sh:2294\n#: install.sh:4229 fail2ban_manager.sh:230\nmsgid \"停止\"\nmsgstr \"\"\n\n#: install.sh:2223 install.sh:2226 install.sh:2761 install.sh:4228\n#: fail2ban_manager.sh:229 fail2ban_manager.sh:398\nmsgid \"启动\"\nmsgstr \"\"\n\n#: install.sh:2247 install.sh:2263\nmsgid \"新版本已自动设置证书自动更新\"\nmsgstr \"\"\n\n#: install.sh:2248\nmsgid \"老版本请及时删除 废弃的 改版证书自动更新\"\nmsgstr \"\"\n\n#: install.sh:2249\nmsgid \"已设置改版证书自动更新\"\nmsgstr \"\"\n\n#: install.sh:2250\nmsgid \"是否需要删除改版证书自动更新 (请删除)\"\nmsgstr \"\"\n\n#: install.sh:2257\nmsgid \"删除改版证书自动更新\"\nmsgstr \"\"\n\n#: install.sh:2281\nmsgid \"已过期\"\nmsgstr \"\"\n\n#: install.sh:2283\nmsgid \"证书生成日期\"\nmsgstr \"\"\n\n#: install.sh:2284\nmsgid \"证书生成天数\"\nmsgstr \"\"\n\n#: install.sh:2285\nmsgid \"证书剩余天数\"\nmsgstr \"\"\n\n#: install.sh:2289\nmsgid \"是否立即更新证书\"\nmsgstr \"\"\n\n#: install.sh:2301 install.sh:2313\nmsgid \"证书签发工具不存在, 请确认是否证书为脚本签发\"\nmsgstr \"\"\n\n#: install.sh:2317\nmsgid \"证书更新\"\nmsgstr \"\"\n\n#: install.sh:2327\nmsgid \"本地文件 fail2ban_manager.sh 不存在, 正在下载\"\nmsgstr \"\"\n\n#: install.sh:2342\nmsgid \"是否需要设置自动清理日志\"\nmsgstr \"\"\n\n#: install.sh:2346\nmsgid \"已跳过设置自动清理日志\"\nmsgstr \"\"\n\n#: install.sh:2349\nmsgid \"将在 每周三 04:00 自动清空日志\"\nmsgstr \"\"\n\n#: install.sh:2354\nmsgid \"已设置自动清理日志任务\"\nmsgstr \"\"\n\n#: install.sh:2355\nmsgid \"是否需要删除现有自动清理日志任务\"\nmsgstr \"\"\n\n#: install.sh:2360\nmsgid \"删除自动清理日志任务\"\nmsgstr \"\"\n\n#: install.sh:2363\nmsgid \"保留现有自动清理日志任务\"\nmsgstr \"\"\n\n#: install.sh:2378\nmsgid \"设置自动清理日志\"\nmsgstr \"\"\n\n#: install.sh:2385\nmsgid \"检测到日志文件大小如下:\"\nmsgstr \"\"\n\n#: install.sh:2387\nmsgid \"即将清除\"\nmsgstr \"\"\n\n#: install.sh:2389\nmsgid \"日志清理\"\nmsgstr \"\"\n\n#: install.sh:2663\nmsgid \"链接分享\"\nmsgstr \"\"\n\n#: install.sh:2665 install.sh:2671 install.sh:2676 install.sh:2681\n#: install.sh:2685 install.sh:3183\nmsgid \"分享链接\"\nmsgstr \"\"\n\n#: install.sh:2666 install.sh:2672 install.sh:2677 install.sh:2682\n#: install.sh:2686\nmsgid \"二维码\"\nmsgstr \"\"\n\n#: install.sh:2692 install.sh:2693\nmsgid \"配置分享\"\nmsgstr \"\"\n\n#: install.sh:2707\nmsgid \"生成分享链接\"\nmsgstr \"\"\n\n#: install.sh:2735 install.sh:2746 install.sh:3038 install.sh:3108\n#: install.sh:3132 install.sh:3198 install.sh:3246 install.sh:3300\n#: install.sh:3352\nmsgid \"请先安装\"\nmsgstr \"\"\n\n#: install.sh:2753\nmsgid \"无法获取网卡, 将监控所有网卡\"\nmsgstr \"\"\n\n#: install.sh:2755\nmsgid \"监控网卡\"\nmsgstr \"\"\n\n#: install.sh:2758\nmsgid \"监控端口\"\nmsgstr \"\"\n\n#: install.sh:2760\nmsgid \"按 q 键退出 iftop\"\nmsgstr \"\"\n\n#: install.sh:2776 install.sh:2779 install.sh:2782 install.sh:2785\n#: install.sh:2788 install.sh:2791 install.sh:2794 install.sh:2797\n#: install.sh:2800 install.sh:2803 install.sh:2806\nmsgid \"安装成功\"\nmsgstr \"\"\n\n#: install.sh:2810\nmsgid \"目前分享链接规范为实验阶段, 请自行判断是否适用\"\nmsgstr \"\"\n\n#: install.sh:2812 install.sh:4224\nmsgid \"配置信息\"\nmsgstr \"\"\n\n#: install.sh:2813\nmsgid \"主机\"\nmsgstr \"\"\n\n#: install.sh:2837\nmsgid \"用户id\"\nmsgstr \"\"\n\n#: install.sh:2839\nmsgid \"加密\"\nmsgstr \"\"\n\n#: install.sh:2840\nmsgid \"传输协议\"\nmsgstr \"\"\n\n#: install.sh:2841\nmsgid \"底层传输安全\"\nmsgstr \"\"\n\n#: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868\nmsgid \"路径\"\nmsgstr \"\"\n\n#: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868\nmsgid \"不要落下\"\nmsgstr \"\"\n\n#: install.sh:2846 install.sh:2849 install.sh:2865 install.sh:2870\nmsgid \"不需要加\"\nmsgstr \"\"\n\n#: install.sh:2852\nmsgid \"流控\"\nmsgstr \"\"\n\n#: install.sh:2885\nmsgid \"即将申请证书, 支持使用自定义证书\"\nmsgstr \"\"\n\n#: install.sh:2886\nmsgid \"如需使用自定义证书, 请按如下步骤:\"\nmsgstr \"\"\n\n#: install.sh:2887\nmsgid \"1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)\"\nmsgstr \"\"\n\n#: install.sh:2888\nmsgid \"2. 将重命名后的证书文件放入\"\nmsgstr \"\"\n\n#: install.sh:2888\nmsgid \"目录后再运行脚本\"\nmsgstr \"\"\n\n#: install.sh:2889\nmsgid \"3. 重新运行脚本\"\nmsgstr \"\"\n\n#: install.sh:2890 install.sh:3334\nmsgid \"是否继续\"\nmsgstr \"\"\n\n#: install.sh:2898\nmsgid \"所有证书文件均已存在, 是否保留\"\nmsgstr \"\"\n\n#: install.sh:2904 install.sh:2919 install.sh:2935 file_manager.sh:176\nmsgid \"已删除\"\nmsgstr \"\"\n\n#: install.sh:2910 install.sh:2925 install.sh:2942\nmsgid \"证书应用\"\nmsgstr \"\"\n\n#: install.sh:2914\nmsgid \"证书文件已存在, 是否保留\"\nmsgstr \"\"\n\n#: install.sh:2930\nmsgid \"证书签发残留文件已存在, 是否保留\"\nmsgstr \"\"\n\n#: install.sh:2972 install.sh:4219\nmsgid \"添加\"\nmsgstr \"\"\n\n#: install.sh:2980\nmsgid \"请选择支持的 TLS 版本\"\nmsgstr \"\"\n\n#: install.sh:2981\nmsgid \"建议选择 TLSv1.3 only (安全模式)\"\nmsgstr \"\"\n\n#: install.sh:2982 install.sh:2998\nmsgid \"兼容模式\"\nmsgstr \"\"\n\n#: install.sh:2983\nmsgid \"安全模式\"\nmsgstr \"\"\n\n#: install.sh:2987\nmsgid \"由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)\"\nmsgstr \"\"\n\n#: install.sh:2991 install.sh:3003 install.sh:3006\nmsgid \"已切换至\"\nmsgstr \"\"\n\n#: install.sh:2995\nmsgid \"请选择 TLS 版本\"\nmsgstr \"\"\n\n#: install.sh:2996\nmsgid \"建议选择 TLSv1.3 (安全模式)\"\nmsgstr \"\"\n\n#: install.sh:3009\nmsgid \"当前模式不支持\"\nmsgstr \"\"\n\n#: install.sh:3016\nmsgid \"Nginx配置文件不存在 或 当前模式不支持\"\nmsgstr \"\"\n\n#: install.sh:3130\nmsgid \"此模式不支持修改\"\nmsgstr \"\"\n\n#: install.sh:3139\nmsgid \"即将显示用户, 一次仅能显示一个\"\nmsgstr \"\"\n\n#: install.sh:3141\nmsgid \"请选择显示用户使用的协议\"\nmsgstr \"\"\n\n#: install.sh:3151\nmsgid \"请选择要显示的用户编号\"\nmsgstr \"\"\n\n#: install.sh:3156 install.sh:3166 install.sh:3270 install.sh:3292\nmsgid \"选择错误\"\nmsgstr \"\"\n\n#: install.sh:3159\nmsgid \"请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户\"\nmsgstr \"\"\n\n#: install.sh:3169 install.sh:3295\nmsgid \"请先检测 Xray 是否正确安装\"\nmsgstr \"\"\n\n#: install.sh:3187\nmsgid \"是否继续显示用户\"\nmsgstr \"\"\n\n#: install.sh:3196 install.sh:3298\nmsgid \"此模式不支持删除用户\"\nmsgstr \"\"\n\n#: install.sh:3206\nmsgid \"即将添加用户, 一次仅能添加一个\"\nmsgstr \"\"\n\n#: install.sh:3208\nmsgid \"请选择添加用户使用的协议\"\nmsgstr \"\"\n\n#: install.sh:3230\nmsgid \"添加用户\"\nmsgstr \"\"\n\n#: install.sh:3235\nmsgid \"是否继续添加用户\"\nmsgstr \"\"\n\n#: install.sh:3244\nmsgid \"此模式不支持添加用户\"\nmsgstr \"\"\n\n#: install.sh:3253\nmsgid \"即将删除用户, 一次仅能删除一个\"\nmsgstr \"\"\n\n#: install.sh:3255\nmsgid \"请选择删除用户使用的协议\"\nmsgstr \"\"\n\n#: install.sh:3265\nmsgid \"请选择要删除的用户编号\"\nmsgstr \"\"\n\n#: install.sh:3274\nmsgid \"主用户无法删除\"\nmsgstr \"\"\n\n#: install.sh:3280\nmsgid \"删除用户\"\nmsgstr \"\"\n\n#: install.sh:3283\nmsgid \"是否继续删除用户\"\nmsgstr \"\"\n\n#: install.sh:3305 install.sh:3309\nmsgid \"文件不存在\"\nmsgstr \"\"\n\n#: install.sh:3316\nmsgid \"已配置 Xray 流量统计\"\nmsgstr \"\"\n\n#: install.sh:3317\nmsgid \"是否需要关闭此功能\"\nmsgstr \"\"\n\n#: install.sh:3323\nmsgid \"关闭 Xray 流量统计\"\nmsgstr \"\"\n\n#: install.sh:3332\nmsgid \"流量统计需要使用\"\nmsgstr \"\"\n\n#: install.sh:3333\nmsgid \"可能会影响 Xray 性能\"\nmsgstr \"\"\n\n#: install.sh:3344\nmsgid \"设置 Xray 流量统计\"\nmsgstr \"\"\n\n#: install.sh:3374 install.sh:3394\nmsgid \"已卸载\"\nmsgstr \"\"\n\n#: install.sh:3378\nmsgid \"是否卸载\"\nmsgstr \"\"\n\n#: install.sh:3382\nmsgid \"已取消卸载\"\nmsgstr \"\"\n\n#: install.sh:3405\nmsgid \"是否删除所有脚本文件\"\nmsgstr \"\"\n\n#: install.sh:3412\nmsgid \"已删除所有文件\"\nmsgstr \"\"\n\n#: install.sh:3413\nmsgid \"ヾ(￣▽￣) 拜拜~\"\nmsgstr \"\"\n\n#: install.sh:3418\nmsgid \"已保留脚本文件 (包含 SSL 证书等)\"\nmsgstr \"\"\n\n#: install.sh:3422\nmsgid \"是否保留配置文件\"\nmsgstr \"\"\n\n#: install.sh:3439\nmsgid \"已清空证书遗留文件\"\nmsgstr \"\"\n\n#: install.sh:3469\nmsgid \"秒后\"\nmsgstr \"\"\n\n#: install.sh:3669\nmsgid \"检测最新版本失败\"\nmsgstr \"\"\n\n#: install.sh:3677 install.sh:3917\nmsgid \"新版本\"\nmsgstr \"\"\n\n#: install.sh:3677 install.sh:3917\nmsgid \"更新内容\"\nmsgstr \"\"\n\n#: install.sh:3681\nmsgid \"存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新\"\nmsgstr \"\"\n\n#: install.sh:3684\nmsgid \"存在新版本, 是否更新\"\nmsgstr \"\"\n\n#: install.sh:3688\nmsgid \"检测 脚本 最新版本失败\"\nmsgstr \"\"\n\n#: install.sh:3689\nmsgid \"脚本 版本差别过大, 跳过更新\"\nmsgstr \"\"\n\n#: install.sh:3697 install.sh:3698\nmsgid \"脚本更新失败\"\nmsgstr \"\"\n\n#: install.sh:3704\nmsgid \"更新完成\"\nmsgstr \"\"\n\n#: install.sh:3705 install.sh:3929\nmsgid \"脚本版本变化较大, 若服务无法正常运行请卸载后重装\"\nmsgstr \"\"\n\n#: install.sh:3714\nmsgid \"当前版本为最新版本\"\nmsgstr \"\"\n\n#: install.sh:3727 install.sh:3912 install.sh:3927 install.sh:3940\nmsgid \"下载最新脚本\"\nmsgstr \"\"\n\n#: install.sh:3741\nmsgid \"该选项暂时无法使用\"\nmsgstr \"\"\n\n#: install.sh:3760 install.sh:4286\nmsgid \"此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装\"\nmsgstr \"\"\n\n#: install.sh:3773 install.sh:4300\nmsgid \"此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装\"\nmsgstr \"\"\n\n#: install.sh:3876 install.sh:3877 install.sh:3887 install.sh:3891\n#: install.sh:3895 install.sh:4211 install.sh:4212 install.sh:4213\n#: install.sh:4214 install.sh:4215 install.sh:4216 install.sh:4314\n#: install.sh:4319 install.sh:4324 install.sh:4329\nmsgid \"变更\"\nmsgstr \"\"\n\n#: install.sh:3876 install.sh:4215\nmsgid \"负载均衡配置\"\nmsgstr \"\"\n\n#: install.sh:3879\nmsgid \"清除日志文件\"\nmsgstr \"\"\n\n#: install.sh:3880\nmsgid \"查看证书状态\"\nmsgstr \"\"\n\n#: install.sh:3881\nmsgid \"更新证书有效期\"\nmsgstr \"\"\n\n#: install.sh:3882\nmsgid \"设置证书自动更新\"\nmsgstr \"\"\n\n#: install.sh:3883\nmsgid \"设置 Fail2ban 防暴力破解\"\nmsgstr \"\"\n\n#: install.sh:3884\nmsgid \"显示帮助\"\nmsgstr \"\"\n\n#: install.sh:3885\nmsgid \"修改语言\"\nmsgstr \"\"\n\n#: install.sh:3888 install.sh:4218 install.sh:4222 install.sh:4223\n#: install.sh:4224 install.sh:4225 install.sh:4230 install.sh:4232\n#: fail2ban_manager.sh:15\nmsgid \"查看\"\nmsgstr \"\"\n\n#: install.sh:3888 install.sh:4225\nmsgid \"实时流量\"\nmsgstr \"\"\n\n#: install.sh:3889\nmsgid \"脚本卸载\"\nmsgstr \"\"\n\n#: install.sh:3890\nmsgid \"显示安装信息\"\nmsgstr \"\"\n\n#: install.sh:3892 install.sh:4237\nmsgid \"加速\"\nmsgstr \"\"\n\n#: install.sh:3894\nmsgid \"更新脚本\"\nmsgstr \"\"\n\n#: install.sh:3896 install.sh:3897\nmsgid \"显示\"\nmsgstr \"\"\n\n#: install.sh:3896\nmsgid \"访问信息\"\nmsgstr \"\"\n\n#: install.sh:3897\nmsgid \"错误信息\"\nmsgstr \"\"\n\n#: install.sh:3921\nmsgid \"脚本版本变化较大, 可能存在不兼容情况, 是否继续使用\"\nmsgstr \"\"\n\n#: install.sh:3948\nmsgid \"检测失败\"\nmsgstr \"\"\n\n#: install.sh:3952 install.sh:3962 install.sh:3971\nmsgid \"有新版\"\nmsgstr \"\"\n\n#: install.sh:3955 install.sh:3964 install.sh:3974\nmsgid \"最新版\"\nmsgstr \"\"\n\n#: install.sh:3969\nmsgid \"版本未知\"\nmsgstr \"\"\n\n#: install.sh:3989 install.sh:3996\nmsgid \"运行中\"\nmsgstr \"\"\n\n#: install.sh:3991 install.sh:4014 install.sh:4016\nmsgid \"无需测试\"\nmsgstr \"\"\n\n#: install.sh:3993 install.sh:3998\nmsgid \"未运行\"\nmsgstr \"\"\n\n#: install.sh:4008\nmsgid \"无法连通\"\nmsgstr \"\"\n\n#: install.sh:4010 install.sh:4011 install.sh:4012\nmsgid \"本地正常\"\nmsgstr \"\"\n\n#: install.sh:4027\nmsgid \"脚本维护中.. 请稍后再试\"\nmsgstr \"\"\n\n#: install.sh:4034\nmsgid \"无法检测所需依赖的在线版本, 请稍后再试\"\nmsgstr \"\"\n\n#: install.sh:4051\nmsgid \"请输入数字\"\nmsgstr \"\"\n\n#: install.sh:4051\nmsgid \"请输入 1 到 6 之间的有效数字\"\nmsgstr \"\"\n\n#: install.sh:4081\nmsgid \"无效的选择\"\nmsgstr \"\"\n\n#: install.sh:4122\nmsgid \"请输入备份名称\"\nmsgstr \"\"\n\n#: install.sh:4122\nmsgid \"不需要后缀\"\nmsgstr \"\"\n\n#: install.sh:4131\nmsgid \"报错信息\"\nmsgstr \"\"\n\n#: install.sh:4133\nmsgid \"备份完整性可能受到影响, 请检查上述错误信息\"\nmsgstr \"\"\n\n#: install.sh:4137\nmsgid \"备份失败\"\nmsgstr \"\"\n\n#: install.sh:4139\nmsgid \"备份成功\"\nmsgstr \"\"\n\n#: install.sh:4144\nmsgid \"请确保备份文件在目录\"\nmsgstr \"\"\n\n#: install.sh:4148\nmsgid \"没有找到备份文件\"\nmsgstr \"\"\n\n#: install.sh:4153\nmsgid \"发现多个备份文件\"\nmsgstr \"\"\n\n#: install.sh:4153\nmsgid \"将使用最新的文件进行恢复\"\nmsgstr \"\"\n\n#: install.sh:4157\nmsgid \"找到最新备份文件\"\nmsgstr \"\"\n\n#: install.sh:4159\nmsgid \"恢复备份\"\nmsgstr \"\"\n\n#: install.sh:4163\nmsgid \"恢复成功\"\nmsgstr \"\"\n\n#: install.sh:4164 install.sh:4166\nmsgid \"记得安装\"\nmsgstr \"\"\n\n#: install.sh:4169\nmsgid \"恢复失败\"\nmsgstr \"\"\n\n#: install.sh:4175\nmsgid \"安装管理脚本\"\nmsgstr \"\"\n\n#: install.sh:4176\nmsgid \"作者\"\nmsgstr \"\"\n\n#: install.sh:4180\nmsgid \"当前模式\"\nmsgstr \"\"\n\n#: install.sh:4181\nmsgid \"当前语言\"\nmsgstr \"\"\n\n#: install.sh:4184\nmsgid \"可以使用\"\nmsgstr \"\"\n\n#: install.sh:4184\nmsgid \"命令管理脚本\"\nmsgstr \"\"\n\n#: install.sh:4186\nmsgid \"版本检测\"\nmsgstr \"\"\n\n#: install.sh:4187 install.sh:4195 install.sh:4246\nmsgid \"脚本\"\nmsgstr \"\"\n\n#: install.sh:4190\nmsgid \"运行状态\"\nmsgstr \"\"\n\n#: install.sh:4193\nmsgid \"连通性\"\nmsgstr \"\"\n\n#: install.sh:4194\nmsgid \"更新向导\"\nmsgstr \"\"\n\n#: install.sh:4205\nmsgid \"安装向导\"\nmsgstr \"\"\n\n#: install.sh:4210\nmsgid \"配置变更\"\nmsgstr \"\"\n\n#: install.sh:4217\nmsgid \"用户管理\"\nmsgstr \"\"\n\n#: install.sh:4218 install.sh:4219 install.sh:4220\nmsgid \"用户\"\nmsgstr \"\"\n\n#: install.sh:4221\nmsgid \"查看信息\"\nmsgstr \"\"\n\n#: install.sh:4222\nmsgid \"实时访问日志\"\nmsgstr \"\"\n\n#: install.sh:4223\nmsgid \"实时错误日志\"\nmsgstr \"\"\n\n#: install.sh:4226\nmsgid \"服务相关\"\nmsgstr \"\"\n\n#: install.sh:4227 install.sh:4228 install.sh:4229 install.sh:4230\nmsgid \"所有服务\"\nmsgstr \"\"\n\n#: install.sh:4231\nmsgid \"证书相关\"\nmsgstr \"\"\n\n#: install.sh:4232\nmsgid \"证书状态\"\nmsgstr \"\"\n\n#: install.sh:4233\nmsgid \"证书有效期\"\nmsgstr \"\"\n\n#: install.sh:4234\nmsgid \"证书自动更新\"\nmsgstr \"\"\n\n#: install.sh:4235\nmsgid \"其他选项\"\nmsgstr \"\"\n\n#: install.sh:4236\nmsgid \"自动更新\"\nmsgstr \"\"\n\n#: install.sh:4238\nmsgid \"防暴力破解\"\nmsgstr \"\"\n\n#: install.sh:4239\nmsgid \"流量统计\"\nmsgstr \"\"\n\n#: install.sh:4240\nmsgid \"清除\"\nmsgstr \"\"\n\n#: install.sh:4240\nmsgid \"日志文件\"\nmsgstr \"\"\n\n#: install.sh:4241\nmsgid \"测试\"\nmsgstr \"\"\n\n#: install.sh:4241\nmsgid \"服务器网速\"\nmsgstr \"\"\n\n#: install.sh:4242\nmsgid \"备份恢复\"\nmsgstr \"\"\n\n#: install.sh:4243 install.sh:4244\nmsgid \"全部文件\"\nmsgstr \"\"\n\n#: install.sh:4244\nmsgid \"恢复\"\nmsgstr \"\"\n\n#: install.sh:4245\nmsgid \"卸载向导\"\nmsgstr \"\"\n\n#: install.sh:4246 fail2ban_manager.sh:14 fail2ban_manager.sh:415\nmsgid \"卸载\"\nmsgstr \"\"\n\n#: install.sh:4247\nmsgid \"清空\"\nmsgstr \"\"\n\n#: install.sh:4247\nmsgid \"证书文件\"\nmsgstr \"\"\n\n#: install.sh:4248 fail2ban_manager.sh:16 file_manager.sh:208\nmsgid \"退出\"\nmsgstr \"\"\n\n#: install.sh:4251\nmsgid \"请输入选项\"\nmsgstr \"\"\n\n#: install.sh:4259 install.sh:4268 install.sh:4334 install.sh:4340\n#: install.sh:4385 install.sh:4391 install.sh:4397 install.sh:4426\n#: install.sh:4467 install.sh:4474 install.sh:4479 fail2ban_manager.sh:416\nmsgid \"清空屏幕\"\nmsgstr \"\"\n\n#: install.sh:4265\nmsgid \"不建议\"\nmsgstr \"\"\n\n#: install.sh:4265\nmsgid \"频繁更新 Nginx, 请确认 Nginx 有更新的必要\"\nmsgstr \"\"\n\n#: install.sh:4266\nmsgid \"开始更新\"\nmsgstr \"\"\n\n#: install.sh:4346 install.sh:4353 install.sh:4360 install.sh:4410\n#: install.sh:4415 install.sh:4420 install.sh:4442\nmsgid \"回到菜单\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:10\nmsgid \"用于防止暴力破解\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:11 file_manager.sh:203\nmsgid \"主菜单\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:13\nmsgid \"管理\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:15 fail2ban_manager.sh:339\nmsgid \"状态\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:18 file_manager.sh:210\nmsgid \"请选择一个选项\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:27 fail2ban_manager.sh:250 fail2ban_manager.sh:258\n#: fail2ban_manager.sh:363\nmsgid \"无效的选择, 请重试\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:35\nmsgid \"已经安装, 跳过安装步骤\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:68\nmsgid \"systemd 无法读取 SSH 日志\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:69\nmsgid \"跳过启用\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:69 fail2ban_manager.sh:93 fail2ban_manager.sh:103\n#: fail2ban_manager.sh:120 fail2ban_manager.sh:125 fail2ban_manager.sh:128\n#: fail2ban_manager.sh:146 fail2ban_manager.sh:151 fail2ban_manager.sh:154\nmsgid \"规则\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:77 fail2ban_manager.sh:203 fail2ban_manager.sh:440\nmsgid \"未安装, 请先安装\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:125 fail2ban_manager.sh:151 fail2ban_manager.sh:349\nmsgid \"已禁用\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:209\nmsgid \"请选择\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:209\nmsgid \"操作\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:210\nmsgid \"管理模块\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:211\nmsgid \"添加自定义规则\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:212 fail2ban_manager.sh:228\nmsgid \"服务管理\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:271\nmsgid \"请输入新的\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:271 fail2ban_manager.sh:272\nmsgid \"名称\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:273\nmsgid \"请输入日志路径\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:274\nmsgid \"请输入最大重试次数\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:274\nmsgid \"最大重试次数必须在 1 到 99 之间\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:275\nmsgid \"请输入封禁时间\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:275\nmsgid \"秒\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:275\nmsgid \"封禁时间必须在 1 到 8640000 秒之间\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:285\nmsgid \"自定义规则添加成功\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:289\nmsgid \"重启以应用新规则\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:294\nmsgid \"管理 Fail2ban 模块\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:311\nmsgid \"未找到任何模块化配置文件\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:319 fail2ban_manager.sh:339\nmsgid \"模块名称\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:339 file_manager.sh:59\nmsgid \"序号\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:363\nmsgid \"请选择要管理的模块\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:375\nmsgid \"启用\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:375\nmsgid \"禁用\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:378\nmsgid \"是否\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:378 fail2ban_manager.sh:386\nmsgid \"模块\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:388\nmsgid \"操作已取消\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:424\nmsgid \"停止成功\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:444\nmsgid \"总体状态\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:448\nmsgid \"默认启用的 Jail 状态\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:452 fail2ban_manager.sh:458\nmsgid \"封锁情况\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:453 fail2ban_manager.sh:459 fail2ban_manager.sh:462\n#: fail2ban_manager.sh:466 fail2ban_manager.sh:469\nmsgid \"未启用或配置异常\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:484 file_manager.sh:232\nmsgid \"新版本可用\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:484 file_manager.sh:232\nmsgid \"当前版本\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:485 file_manager.sh:233\nmsgid \"请访问\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:485 file_manager.sh:233\nmsgid \"查看更新说明\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:487 file_manager.sh:235\nmsgid \"是否下载并安装新版本\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:491 file_manager.sh:239\nmsgid \"正在下载新版本\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:496 file_manager.sh:244\nmsgid \"下载完成, 请重新运行脚本\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:504 file_manager.sh:252\nmsgid \"跳过更新\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:508 file_manager.sh:256\nmsgid \"当前已经是最新版本\"\nmsgstr \"\"\n\n#: file_manager.sh:7\nmsgid \"用法\"\nmsgstr \"\"\n\n#: file_manager.sh:7\nmsgid \"文件扩展名\"\nmsgstr \"\"\n\n#: file_manager.sh:7\nmsgid \"目录路径\"\nmsgstr \"\"\n\n#: file_manager.sh:16\nmsgid \"目录\"\nmsgstr \"\"\n\n#: file_manager.sh:16\nmsgid \"不存在, 请检查路径\"\nmsgstr \"\"\n\n#: file_manager.sh:26 file_manager.sh:204\nmsgid \"列出所有\"\nmsgstr \"\"\n\n#: file_manager.sh:26 file_manager.sh:35 file_manager.sh:88 file_manager.sh:111\n#: file_manager.sh:160 file_manager.sh:176 file_manager.sh:204\n#: file_manager.sh:205 file_manager.sh:206 file_manager.sh:207\nmsgid \"文件\"\nmsgstr \"\"\n\n#: file_manager.sh:53\nmsgid \"文件名\"\nmsgstr \"\"\n\n#: file_manager.sh:79\nmsgid \"请输入网址 (例如 hey.run)\"\nmsgstr \"\"\n\n#: file_manager.sh:80\nmsgid \"不要包含 http:// 或 https:// 开头\"\nmsgstr \"\"\n\n#: file_manager.sh:84\nmsgid \"网址不能包含 http:// 或 https:// 前缀\"\nmsgstr \"\"\n\n#: file_manager.sh:88 file_manager.sh:111\nmsgid \"已创建\"\nmsgstr \"\"\n\n#: file_manager.sh:99\nmsgid \"请输入主机\"\nmsgstr \"\"\n\n#: file_manager.sh:107\nmsgid \"请输入权重\"\nmsgstr \"\"\n\n#: file_manager.sh:128\nmsgid \"追加完成\"\nmsgstr \"\"\n\n#: file_manager.sh:132 file_manager.sh:136\nmsgid \"重启完成\"\nmsgstr \"\"\n\n#: file_manager.sh:151\nmsgid \"请输入要编辑的文件编号\"\nmsgstr \"\"\n\n#: file_manager.sh:156\nmsgid \"未安装, 正在尝试安装\"\nmsgstr \"\"\n\n#: file_manager.sh:160\nmsgid \"已编辑\"\nmsgstr \"\"\n\n#: file_manager.sh:171\nmsgid \"请输入要删除的文件编号\"\nmsgstr \"\"\n\n#: file_manager.sh:194\nmsgid \"不支持的文件扩展名\"\nmsgstr \"\"\n\n#: file_manager.sh:205\nmsgid \"创建一个新的\"\nmsgstr \"\"\n\n#: file_manager.sh:206\nmsgid \"编辑一个已存在的\"\nmsgstr \"\"\n\n#: file_manager.sh:207\nmsgid \"删除一个已存在的\"\nmsgstr \"\"\n\n#: file_manager.sh:265\nmsgid \"重启成功\"\nmsgstr \"\"\n\n#: file_manager.sh:268\nmsgid \"重启失败\"\nmsgstr \"\"\n\n#: file_manager.sh:268\nmsgid \"请检查配置文件是否有误\"\nmsgstr \"\"\n"
  },
  {
    "path": "po/zh_CN.po",
    "content": "# Chinese translations for xray_install package.\n# Copyright (C) 2026 yunshu\n# This file is distributed under the same license as the xray_install package.\n# Automatically generated, 2026.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: xray_install 1.0\\n\"\n\"Report-Msgid-Bugs-To: https://github.com/hello-yunshu/Xray_bash_onekey/\"\n\"issues\\n\"\n\"POT-Creation-Date: 2026-04-24 09:47+0000\\n\"\n\"PO-Revision-Date: 2026-04-24 09:47+0000\\n\"\n\"Last-Translator: Automatically generated\\n\"\n\"Language-Team: none\\n\"\n\"Language: zh_CN\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\n#: install.sh:32\nmsgid \"信息\"\nmsgstr \"\"\n\n#: install.sh:34\nmsgid \"错误\"\nmsgstr \"\"\n\n#: install.sh:35\nmsgid \"警告\"\nmsgstr \"\"\n\n#: install.sh:38 install.sh:1540 install.sh:3960 install.sh:3977\n#: install.sh:3980 install.sh:3981 install.sh:4019\nmsgid \"未安装\"\nmsgstr \"\"\n\n#: install.sh:99\nmsgid \"日志文件归档失败\"\nmsgstr \"\"\n\n#: install.sh:104\nmsgid \"日志文件清空失败\"\nmsgstr \"\"\n\n#: install.sh:108\nmsgid \"日志文件已轮转并归档为\"\nmsgstr \"\"\n\n#: install.sh:134 install.sh:138 install.sh:142 install.sh:152\nmsgid \"当前系统为\"\nmsgstr \"\"\n\n#: install.sh:152\nmsgid \"不在支持的系统列表内, 安装中断\"\nmsgstr \"\"\n\n#: install.sh:159\nmsgid \"当前用户是 root 用户, 开始安装\"\nmsgstr \"\"\n\n#: install.sh:161\nmsgid \"当前用户不是 root 用户, 请切换到 root 用户后重新运行脚本\"\nmsgstr \"\"\n\n#: install.sh:187\nmsgid \"无法获取远程语言文件信息\"\nmsgstr \"\"\n\n#: install.sh:205\nmsgid \"正在更新语言文件\"\nmsgstr \"\"\n\n#: install.sh:208 install.sh:291\nmsgid \"语言文件更新失败\"\nmsgstr \"\"\n\n#: install.sh:213\nmsgid \"语言文件无效\"\nmsgstr \"\"\n\n#: install.sh:219\nmsgid \"版本文件更新失败\"\nmsgstr \"\"\n\n#: install.sh:226\nmsgid \"语言文件更新完成\"\nmsgstr \"\"\n\n#: install.sh:231 install.sh:2725\nmsgid \"正在安装\"\nmsgstr \"\"\n\n#: install.sh:234\nmsgid \"安装失败\"\nmsgstr \"\"\n\n#: install.sh:234 install.sh:258 install.sh:281 install.sh:291\nmsgid \"将使用默认语言\"\nmsgstr \"\"\n\n#: install.sh:258 file_manager.sh:35\nmsgid \"未找到\"\nmsgstr \"\"\n\n#: install.sh:281\nmsgid \"不支持的语言\"\nmsgstr \"\"\n\n#: install.sh:297\nmsgid \"发现语言文件更新\"\nmsgstr \"\"\n\n#: install.sh:312 install.sh:1740\nmsgid \"完成\"\nmsgstr \"\"\n\n#: install.sh:315\nmsgid \"失败\"\nmsgstr \"\"\n\n#: install.sh:322\nmsgid \"在线版本检测失败, 请稍后再试\"\nmsgstr \"\"\n\n#: install.sh:344 install.sh:352 install.sh:1162 install.sh:3872\n#: install.sh:3873 install.sh:3874 install.sh:3875 install.sh:4206\n#: install.sh:4207 install.sh:4208 install.sh:4209 fail2ban_manager.sh:12\n#: fail2ban_manager.sh:39\nmsgid \"安装\"\nmsgstr \"\"\n\n#: install.sh:346 install.sh:354 install.sh:1169 install.sh:2729\n#: install.sh:3969\nmsgid \"已安装\"\nmsgstr \"\"\n\n#: install.sh:371 install.sh:375\nmsgid \"自启动配置\"\nmsgstr \"\"\n\n#: install.sh:384\nmsgid \"链接库安装\"\nmsgstr \"\"\n\n#: install.sh:389\nmsgid \"值为空或超出范围, 请重新输入\"\nmsgstr \"\"\n\n#: install.sh:398\nmsgid \"值为空, 请重新输入\"\nmsgstr \"\"\n\n#: install.sh:440\nmsgid \"确定端口\"\nmsgstr \"\"\n\n#: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:104\nmsgid \"请输入端口\"\nmsgstr \"\"\n\n#: install.sh:441 install.sh:444 file_manager.sh:102 file_manager.sh:107\nmsgid \"默认值\"\nmsgstr \"\"\n\n#: install.sh:441 install.sh:444 install.sh:532 install.sh:554 install.sh:3055\n#: install.sh:3060 install.sh:3065 install.sh:3066 install.sh:3081\n#: install.sh:3086 install.sh:3091 install.sh:3092\nmsgid \"请输入 0-65535 之间的值\"\nmsgstr \"\"\n\n#: install.sh:443\nmsgid \"端口不允许使用, 请重新输入\"\nmsgstr \"\"\n\n#: install.sh:452\nmsgid \"请选择安装协议\"\nmsgstr \"\"\n\n#: install.sh:453 install.sh:1617 install.sh:1654 install.sh:1705\n#: install.sh:2997 install.sh:3142 install.sh:3209 install.sh:3256\n#: fail2ban_manager.sh:274 fail2ban_manager.sh:275\nmsgid \"默认\"\nmsgstr \"\"\n\n#: install.sh:457 install.sh:532 install.sh:554 install.sh:635 install.sh:668\n#: install.sh:821 install.sh:840 install.sh:881 install.sh:922 install.sh:1621\n#: install.sh:1634 install.sh:1656 install.sh:1709 install.sh:1719\n#: install.sh:2985 install.sh:3000 install.sh:3055 install.sh:3060\n#: install.sh:3065 install.sh:3066 install.sh:3081 install.sh:3086\n#: install.sh:3091 install.sh:3092 install.sh:3145 install.sh:3154\n#: install.sh:3212 install.sh:3259 install.sh:3268 fail2ban_manager.sh:215\n#: fail2ban_manager.sh:234 fail2ban_manager.sh:272 file_manager.sh:81\nmsgid \"请输入\"\nmsgstr \"\"\n\n#: install.sh:457 install.sh:922 install.sh:1621 install.sh:1656\n#: install.sh:1709 install.sh:2985 install.sh:3000 install.sh:3145\n#: install.sh:3212 install.sh:3259 install.sh:4251 install.sh:4489\nmsgid \"请输入有效的数字\"\nmsgstr \"\"\n\n#: install.sh:478\nmsgid \"是否添加简单 ws/gRPC 协议 用于负载均衡\"\nmsgstr \"\"\n\n#: install.sh:479 install.sh:1259\nmsgid \"如不清楚具体用途, 请勿选择\"\nmsgstr \"\"\n\n#: install.sh:499\nmsgid \"已跳过添加简单 ws/gRPC 协议\"\nmsgstr \"\"\n\n#: install.sh:528 install.sh:550 install.sh:631 install.sh:648 install.sh:664\n#: install.sh:681 install.sh:696 install.sh:815 install.sh:836 install.sh:877\nmsgid \"是否需要自定义\"\nmsgstr \"\"\n\n#: install.sh:532 install.sh:554\nmsgid \"请勿与其他端口相同\"\nmsgstr \"\"\n\n#: install.sh:571 file_manager.sh:114\nmsgid \"是否需要设置防火墙\"\nmsgstr \"\"\n\n#: install.sh:611 install.sh:615 file_manager.sh:128 file_manager.sh:132\n#: file_manager.sh:136\nmsgid \"防火墙\"\nmsgstr \"\"\n\n#: install.sh:611 install.sh:615 install.sh:2215 install.sh:2218\n#: install.sh:3012 install.sh:3014 install.sh:4227 fail2ban_manager.sh:231\n#: fail2ban_manager.sh:432\nmsgid \"重启\"\nmsgstr \"\"\n\n#: install.sh:617\nmsgid \"开放防火墙相关端口\"\nmsgstr \"\"\n\n#: install.sh:618\nmsgid \"若修改配置, 请注意关闭防火墙相关端口\"\nmsgstr \"\"\n\n#: install.sh:619 install.sh:3877 install.sh:3892 install.sh:3893\n#: install.sh:4216 install.sh:4236 fail2ban_manager.sh:161\nmsgid \"配置\"\nmsgstr \"\"\n\n#: install.sh:622 file_manager.sh:140\nmsgid \"跳过防火墙设置\"\nmsgstr \"\"\n\n#: install.sh:631 install.sh:635 install.sh:636 install.sh:640 install.sh:648\n#: install.sh:664 install.sh:668 install.sh:669 install.sh:673 install.sh:681\n#: install.sh:1101\nmsgid \"伪装路径\"\nmsgstr \"\"\n\n#: install.sh:635 install.sh:668\nmsgid \"不需要\"\nmsgstr \"\"\n\n#: install.sh:696 install.sh:706 install.sh:3172\nmsgid \"用户名\"\nmsgstr \"\"\n\n#: install.sh:700\nmsgid \"请输入正确的 email\"\nmsgstr \"\"\n\n#: install.sh:713\nmsgid \"是否需要自定义字符串映射\"\nmsgstr \"\"\n\n#: install.sh:717\nmsgid \"请输入自定义字符串\"\nmsgstr \"\"\n\n#: install.sh:717\nmsgid \"最多30字符\"\nmsgstr \"\"\n\n#: install.sh:719\nmsgid \"自定义字符串\"\nmsgstr \"\"\n\n#: install.sh:726 install.sh:2836 install.sh:3895 install.sh:4211\n#: install.sh:4314\nmsgid \"映射字符串\"\nmsgstr \"\"\n\n#: install.sh:737\nmsgid \"检测到 target 域名已配置, 是否保留\"\nmsgstr \"\"\n\n#: install.sh:757\nmsgid \"请输入一个域名\"\nmsgstr \"\"\n\n#: install.sh:758\nmsgid \"域名要求支持 TLSv1.3、X25519 与 H2 以及域名非跳转用\"\nmsgstr \"\"\n\n#: install.sh:759\nmsgid \"确认域名符合要求后请输入\"\nmsgstr \"\"\n\n#: install.sh:760\nmsgid \"正在检测域名请等待\"\nmsgstr \"\"\n\n#: install.sh:767 install.sh:772 install.sh:777\nmsgid \"该域名不支持\"\nmsgstr \"\"\n\n#: install.sh:782\nmsgid \"该域名发生了跳转\"\nmsgstr \"\"\n\n#: install.sh:789\nmsgid \"该域名可能不满足所有要求\"\nmsgstr \"\"\n\n#: install.sh:790\nmsgid \"是否仍要设置此域名\"\nmsgstr \"\"\n\n#: install.sh:802 install.sh:807 install.sh:1619\nmsgid \"域名\"\nmsgstr \"\"\n\n#: install.sh:802\nmsgid \"满足所有要求\"\nmsgstr \"\"\n\n#: install.sh:815\nmsgid \"域名的\"\nmsgstr \"\"\n\n#: install.sh:816\nmsgid \"默认为\"\nmsgstr \"\"\n\n#: install.sh:816\nmsgid \"域名本身\"\nmsgstr \"\"\n\n#: install.sh:817 install.sh:912 install.sh:952\nmsgid \"如不清楚具体用途, 请勿继续\"\nmsgstr \"\"\n\n#: install.sh:898\nmsgid \"本地文件 file_manager.sh 不存在, 正在下载\"\nmsgstr \"\"\n\n#: install.sh:900 install.sh:2330 fail2ban_manager.sh:500 file_manager.sh:248\nmsgid \"下载失败, 请手动下载并安装新版本\"\nmsgstr \"\"\n\n#: install.sh:911 install.sh:951\nmsgid \"是否变更\"\nmsgstr \"\"\n\n#: install.sh:911\nmsgid \"负载均衡\"\nmsgstr \"\"\n\n#: install.sh:917\nmsgid \"请选择协议为 ws 或 gRPC\"\nmsgstr \"\"\n\n#: install.sh:920 fail2ban_manager.sh:213 fail2ban_manager.sh:232\n#: fail2ban_manager.sh:325 fail2ban_manager.sh:357\nmsgid \"返回\"\nmsgstr \"\"\n\n#: install.sh:930 file_manager.sh:220\nmsgid \"无效选项, 请重试\"\nmsgstr \"\"\n\n#: install.sh:940 install.sh:964 install.sh:2266 install.sh:2304\n#: install.sh:2320\nmsgid \"当前模式不支持此操作\"\nmsgstr \"\"\n\n#: install.sh:953\nmsgid \"配置用途可以参考文章\"\nmsgstr \"\"\n\n#: install.sh:980 install.sh:991 install.sh:995 install.sh:999 install.sh:1011\n#: install.sh:1016 install.sh:1020 install.sh:1025 install.sh:1045\n#: install.sh:1051 install.sh:1101 install.sh:1120 install.sh:3893\n#: install.sh:4177\nmsgid \"修改\"\nmsgstr \"\"\n\n#: install.sh:1053 install.sh:2816 install.sh:2818 install.sh:2820\n#: install.sh:2821 install.sh:2824 install.sh:2828 install.sh:2830\n#: install.sh:2832 install.sh:2833 install.sh:2861 install.sh:2864\n#: install.sh:2867 install.sh:2869 install.sh:3049\nmsgid \"端口\"\nmsgstr \"\"\n\n#: install.sh:1103\nmsgid \"不支持\"\nmsgstr \"\"\n\n#: install.sh:1110\nmsgid \"用户名修改\"\nmsgstr \"\"\n\n#: install.sh:1113 install.sh:1123\nmsgid \"请先删除多余的用户\"\nmsgstr \"\"\n\n#: install.sh:1131 install.sh:1139 install.sh:1146 install.sh:1990\n#: install.sh:2061 install.sh:2146 install.sh:2154 install.sh:2163\n#: install.sh:2186\nmsgid \"配置修改\"\nmsgstr \"\"\n\n#: install.sh:1151\nmsgid \"检测到 Xray 的权限控制, 启动修改程序\"\nmsgstr \"\"\n\n#: install.sh:1156\nmsgid \"修改完成\"\nmsgstr \"\"\n\n#: install.sh:1176\nmsgid \"若更新无效, 建议直接卸载再安装\"\nmsgstr \"\"\n\n#: install.sh:1177\nmsgid \"部分新功能需要重新安装才可生效\"\nmsgstr \"\"\n\n#: install.sh:1182\nmsgid \"检测到存在最新版\"\nmsgstr \"\"\n\n#: install.sh:1183\nmsgid \"脚本可能未兼容此版本\"\nmsgstr \"\"\n\n#: install.sh:1184\nmsgid \"是否更新\"\nmsgstr \"\"\n\n#: install.sh:1188 install.sh:1213 install.sh:1532 install.sh:3886\n#: install.sh:3898 install.sh:4195 install.sh:4196 install.sh:4197\n#: install.sh:4233\nmsgid \"更新\"\nmsgstr \"\"\n\n#: install.sh:1192 install.sh:1494\nmsgid \"启动失败\"\nmsgstr \"\"\n\n#: install.sh:1193 install.sh:1497\nmsgid \"是否回滚到之前的版本\"\nmsgstr \"\"\n\n#: install.sh:1197 install.sh:1507\nmsgid \"未执行回滚操作\"\nmsgstr \"\"\n\n#: install.sh:1201 install.sh:1511\nmsgid \"正在回滚\"\nmsgstr \"\"\n\n#: install.sh:1205 install.sh:1518\nmsgid \"已成功回滚到之前的\"\nmsgstr \"\"\n\n#: install.sh:1205 install.sh:1518 install.sh:4214 install.sh:4329\nmsgid \"版本\"\nmsgstr \"\"\n\n#: install.sh:1207 install.sh:1228 install.sh:1524\nmsgid \"回滚失败\"\nmsgstr \"\"\n\n#: install.sh:1234 install.sh:1238\nmsgid \"重装\"\nmsgstr \"\"\n\n#: install.sh:1248 install.sh:1249\nmsgid \"更新失败\"\nmsgstr \"\"\n\n#: install.sh:1257\nmsgid \"是否添加 Reality 负载均衡\"\nmsgstr \"\"\n\n#: install.sh:1258\nmsgid \"使用此功能前，建议先阅读作者教程\"\nmsgstr \"\"\n\n#: install.sh:1264 fail2ban_manager.sh:93 fail2ban_manager.sh:103\n#: fail2ban_manager.sh:128 fail2ban_manager.sh:154 fail2ban_manager.sh:347\nmsgid \"已启用\"\nmsgstr \"\"\n\n#: install.sh:1268\nmsgid \"已跳过\"\nmsgstr \"\"\n\n#: install.sh:1277\nmsgid \"Reality 协议有流量偷跑的风险\"\nmsgstr \"\"\n\n#: install.sh:1279 install.sh:1306\nmsgid \"是否额外安装 nginx 前置保护\"\nmsgstr \"\"\n\n#: install.sh:1279\nmsgid \"推荐\"\nmsgstr \"\"\n\n#: install.sh:1286 install.sh:1321\nmsgid \"检测到已安装\"\nmsgstr \"\"\n\n#: install.sh:1289 install.sh:1324\nmsgid \"已跳过安装\"\nmsgstr \"\"\n\n#: install.sh:1303\nmsgid \"检测到已开启 Reality 负载均衡\"\nmsgstr \"\"\n\n#: install.sh:1304\nmsgid \"如用作 Reality 负载均衡主服务器必须安装\"\nmsgstr \"\"\n\n#: install.sh:1305\nmsgid \"如用作 Reality 负载均衡二级服务器则无需安装\"\nmsgstr \"\"\n\n#: install.sh:1349\nmsgid \"已存在, 跳过编译安装过程\"\nmsgstr \"\"\n\n#: install.sh:1351\nmsgid \"检测到其他套件安装的 Nginx, 继续安装会造成冲突, 请处理后安装\"\nmsgstr \"\"\n\n#: install.sh:1364\nmsgid \"即将下载已编译的\"\nmsgstr \"\"\n\n#: install.sh:1374\nmsgid \"不支持的系统架构\"\nmsgstr \"\"\n\n#: install.sh:1383\nmsgid \"下载失败\"\nmsgstr \"\"\n\n#: install.sh:1387\nmsgid \"下载成功\"\nmsgstr \"\"\n\n#: install.sh:1390\nmsgid \"解压失败\"\nmsgstr \"\"\n\n#: install.sh:1438 install.sh:1439 install.sh:1446 install.sh:1447\nmsgid \"配置不完整, 退出更新\"\nmsgstr \"\"\n\n#: install.sh:1451 install.sh:1452\nmsgid \"当前安装模式不需要\"\nmsgstr \"\"\n\n#: install.sh:1456 install.sh:1457\nmsgid \"配置不存在, 退出更新\"\nmsgstr \"\"\n\n#: install.sh:1463\nmsgid \"备份旧版\"\nmsgstr \"\"\n\n#: install.sh:1464\nmsgid \"删除旧版\"\nmsgstr \"\"\n\n#: install.sh:1468\nmsgid \"是否保留原 Nginx 配置文件\"\nmsgstr \"\"\n\n#: install.sh:1476 install.sh:1809\nmsgid \"原配置文件已删除\"\nmsgstr \"\"\n\n#: install.sh:1480\nmsgid \"原配置文件已保留\"\nmsgstr \"\"\n\n#: install.sh:1534 install.sh:4220\nmsgid \"删除\"\nmsgstr \"\"\n\n#: install.sh:1534 install.sh:4243\nmsgid \"备份\"\nmsgstr \"\"\n\n#: install.sh:1537\nmsgid \"已为最新版\"\nmsgstr \"\"\n\n#: install.sh:1553\nmsgid \"设置后台定时自动更新程序 (包含: 脚本/Xray/Nginx)\"\nmsgstr \"\"\n\n#: install.sh:1554\nmsgid \"可能自动更新后有兼容问题, 谨慎启用\"\nmsgstr \"\"\n\n#: install.sh:1555 fail2ban_manager.sh:120 fail2ban_manager.sh:146\nmsgid \"是否启用\"\nmsgstr \"\"\n\n#: install.sh:1561 install.sh:3878\nmsgid \"设置自动更新\"\nmsgstr \"\"\n\n#: install.sh:1566\nmsgid \"已设置自动更新\"\nmsgstr \"\"\n\n#: install.sh:1567\nmsgid \"是否关闭\"\nmsgstr \"\"\n\n#: install.sh:1573\nmsgid \"删除自动更新\"\nmsgstr \"\"\n\n#: install.sh:1582\nmsgid \"安装 SSL 证书生成脚本依赖\"\nmsgstr \"\"\n\n#: install.sh:1584\nmsgid \"安装 SSL 证书生成脚本\"\nmsgstr \"\"\n\n#: install.sh:1590\nmsgid \"检测到原域名配置存在, 是否跳过域名设置\"\nmsgstr \"\"\n\n#: install.sh:1605 install.sh:1642 install.sh:1693 install.sh:1726\nmsgid \"无法获取公网IP地址\"\nmsgstr \"\"\n\n#: install.sh:1605 install.sh:1642 install.sh:1665 install.sh:1693\n#: install.sh:1726\nmsgid \"安装终止\"\nmsgstr \"\"\n\n#: install.sh:1608\nmsgid \"已跳过域名设置\"\nmsgstr \"\"\n\n#: install.sh:1614\nmsgid \"确定域名信息\"\nmsgstr \"\"\n\n#: install.sh:1615\nmsgid \"请输入你的域名信息\"\nmsgstr \"\"\n\n#: install.sh:1616\nmsgid \"请选择公网IP(IPv4/IPv6)或手动输入域名\"\nmsgstr \"\"\n\n#: install.sh:1622 install.sh:1711\nmsgid \"正在获取公网IP信息, 请耐心等待\"\nmsgstr \"\"\n\n#: install.sh:1632\nmsgid \"此选项用于服务器商仅提供域名访问服务器\"\nmsgstr \"\"\n\n#: install.sh:1633\nmsgid \"注意服务器商域名添加 CNAME 记录\"\nmsgstr \"\"\n\n#: install.sh:1645\nmsgid \"域名DNS解析IP\"\nmsgstr \"\"\n\n#: install.sh:1646 install.sh:1729\nmsgid \"公网IP/域名\"\nmsgstr \"\"\n\n#: install.sh:1648\nmsgid \"域名DNS解析IP与公网IP匹配\"\nmsgstr \"\"\n\n#: install.sh:1650\nmsgid \"请确保域名添加了正确的 A/AAAA 记录, 否则将无法正常使用 Xray\"\nmsgstr \"\"\n\n#: install.sh:1651\nmsgid \"域名DNS解析IP与公网IP不匹配, 请选择\"\nmsgstr \"\"\n\n#: install.sh:1652 install.sh:1659\nmsgid \"继续安装\"\nmsgstr \"\"\n\n#: install.sh:1653\nmsgid \"重新输入\"\nmsgstr \"\"\n\n#: install.sh:1654\nmsgid \"终止安装\"\nmsgstr \"\"\n\n#: install.sh:1676\nmsgid \"检测到原IP配置存在, 是否跳过IP设置\"\nmsgstr \"\"\n\n#: install.sh:1697\nmsgid \"已跳过IP设置\"\nmsgstr \"\"\n\n#: install.sh:1703\nmsgid \"确定公网IP信息\"\nmsgstr \"\"\n\n#: install.sh:1704\nmsgid \"请选择公网IP为IPv4或IPv6\"\nmsgstr \"\"\n\n#: install.sh:1707\nmsgid \"手动输入\"\nmsgstr \"\"\n\n#: install.sh:1734\nmsgid \"端口未被占用\"\nmsgstr \"\"\n\n#: install.sh:1736\nmsgid \"检测到\"\nmsgstr \"\"\n\n#: install.sh:1736\nmsgid \"端口被占用\"\nmsgstr \"\"\n\n#: install.sh:1736\nmsgid \"以下为\"\nmsgstr \"\"\n\n#: install.sh:1736\nmsgid \"端口占用信息\"\nmsgstr \"\"\n\n#: install.sh:1738\nmsgid \"尝试终止占用的进程\"\nmsgstr \"\"\n\n#: install.sh:1749\nmsgid \"证书测试签发成功, 开始正式签发\"\nmsgstr \"\"\n\n#: install.sh:1752\nmsgid \"证书测试签发失败\"\nmsgstr \"\"\n\n#: install.sh:1759\nmsgid \"证书生成成功\"\nmsgstr \"\"\n\n#: install.sh:1765\nmsgid \"证书配置成功\"\nmsgstr \"\"\n\n#: install.sh:1769\nmsgid \"证书生成失败\"\nmsgstr \"\"\n\n#: install.sh:1801\nmsgid \"检测到 Xray 配置过多用户\"\nmsgstr \"\"\n\n#: install.sh:1802\nmsgid \"是否保留原 Xray 配置文件\"\nmsgstr \"\"\n\n#: install.sh:1822\nmsgid \"添加简单 ws/gRPC 协议\"\nmsgstr \"\"\n\n#: install.sh:1837\nmsgid \"检测到配置文件, 是否读取配置文件\"\nmsgstr \"\"\n\n#: install.sh:1842 install.sh:1863 install.sh:1961 install.sh:3430\nmsgid \"已删除配置文件\"\nmsgstr \"\"\n\n#: install.sh:1845 install.sh:1858 install.sh:1956 install.sh:3426\nmsgid \"已保留配置文件\"\nmsgstr \"\"\n\n#: install.sh:1852\nmsgid \"检测到当前安装模式与配置文件的安装模式不一致\"\nmsgstr \"\"\n\n#: install.sh:1853\nmsgid \"是否保留配置文件 (强烈不建议)\"\nmsgstr \"\"\n\n#: install.sh:1857\nmsgid \"请务必确保配置文件正确\"\nmsgstr \"\"\n\n#: install.sh:1951\nmsgid \"检测到配置文件不完整, 是否保留配置文件\"\nmsgstr \"\"\n\n#: install.sh:2170\nmsgid \"配置删除\"\nmsgstr \"\"\n\n#: install.sh:2191\nmsgid \"设置 Nginx 开机自启\"\nmsgstr \"\"\n\n#: install.sh:2194 install.sh:4234 install.sh:4237 install.sh:4238\n#: install.sh:4239 fail2ban_manager.sh:10\nmsgid \"设置\"\nmsgstr \"\"\n\n#: install.sh:2194 install.sh:2202\nmsgid \"开机自启\"\nmsgstr \"\"\n\n#: install.sh:2199\nmsgid \"关闭 Nginx 开机自启\"\nmsgstr \"\"\n\n#: install.sh:2202\nmsgid \"关闭\"\nmsgstr \"\"\n\n#: install.sh:2209 install.sh:2231 install.sh:2234 install.sh:2294\n#: install.sh:4229 fail2ban_manager.sh:230\nmsgid \"停止\"\nmsgstr \"\"\n\n#: install.sh:2223 install.sh:2226 install.sh:2761 install.sh:4228\n#: fail2ban_manager.sh:229 fail2ban_manager.sh:398\nmsgid \"启动\"\nmsgstr \"\"\n\n#: install.sh:2247 install.sh:2263\nmsgid \"新版本已自动设置证书自动更新\"\nmsgstr \"\"\n\n#: install.sh:2248\nmsgid \"老版本请及时删除 废弃的 改版证书自动更新\"\nmsgstr \"\"\n\n#: install.sh:2249\nmsgid \"已设置改版证书自动更新\"\nmsgstr \"\"\n\n#: install.sh:2250\nmsgid \"是否需要删除改版证书自动更新 (请删除)\"\nmsgstr \"\"\n\n#: install.sh:2257\nmsgid \"删除改版证书自动更新\"\nmsgstr \"\"\n\n#: install.sh:2281\nmsgid \"已过期\"\nmsgstr \"\"\n\n#: install.sh:2283\nmsgid \"证书生成日期\"\nmsgstr \"\"\n\n#: install.sh:2284\nmsgid \"证书生成天数\"\nmsgstr \"\"\n\n#: install.sh:2285\nmsgid \"证书剩余天数\"\nmsgstr \"\"\n\n#: install.sh:2289\nmsgid \"是否立即更新证书\"\nmsgstr \"\"\n\n#: install.sh:2301 install.sh:2313\nmsgid \"证书签发工具不存在, 请确认是否证书为脚本签发\"\nmsgstr \"\"\n\n#: install.sh:2317\nmsgid \"证书更新\"\nmsgstr \"\"\n\n#: install.sh:2327\nmsgid \"本地文件 fail2ban_manager.sh 不存在, 正在下载\"\nmsgstr \"\"\n\n#: install.sh:2342\nmsgid \"是否需要设置自动清理日志\"\nmsgstr \"\"\n\n#: install.sh:2346\nmsgid \"已跳过设置自动清理日志\"\nmsgstr \"\"\n\n#: install.sh:2349\nmsgid \"将在 每周三 04:00 自动清空日志\"\nmsgstr \"\"\n\n#: install.sh:2354\nmsgid \"已设置自动清理日志任务\"\nmsgstr \"\"\n\n#: install.sh:2355\nmsgid \"是否需要删除现有自动清理日志任务\"\nmsgstr \"\"\n\n#: install.sh:2360\nmsgid \"删除自动清理日志任务\"\nmsgstr \"\"\n\n#: install.sh:2363\nmsgid \"保留现有自动清理日志任务\"\nmsgstr \"\"\n\n#: install.sh:2378\nmsgid \"设置自动清理日志\"\nmsgstr \"\"\n\n#: install.sh:2385\nmsgid \"检测到日志文件大小如下:\"\nmsgstr \"\"\n\n#: install.sh:2387\nmsgid \"即将清除\"\nmsgstr \"\"\n\n#: install.sh:2389\nmsgid \"日志清理\"\nmsgstr \"\"\n\n#: install.sh:2663\nmsgid \"链接分享\"\nmsgstr \"\"\n\n#: install.sh:2665 install.sh:2671 install.sh:2676 install.sh:2681\n#: install.sh:2685 install.sh:3183\nmsgid \"分享链接\"\nmsgstr \"\"\n\n#: install.sh:2666 install.sh:2672 install.sh:2677 install.sh:2682\n#: install.sh:2686\nmsgid \"二维码\"\nmsgstr \"\"\n\n#: install.sh:2692 install.sh:2693\nmsgid \"配置分享\"\nmsgstr \"\"\n\n#: install.sh:2707\nmsgid \"生成分享链接\"\nmsgstr \"\"\n\n#: install.sh:2735 install.sh:2746 install.sh:3038 install.sh:3108\n#: install.sh:3132 install.sh:3198 install.sh:3246 install.sh:3300\n#: install.sh:3352\nmsgid \"请先安装\"\nmsgstr \"\"\n\n#: install.sh:2753\nmsgid \"无法获取网卡, 将监控所有网卡\"\nmsgstr \"\"\n\n#: install.sh:2755\nmsgid \"监控网卡\"\nmsgstr \"\"\n\n#: install.sh:2758\nmsgid \"监控端口\"\nmsgstr \"\"\n\n#: install.sh:2760\nmsgid \"按 q 键退出 iftop\"\nmsgstr \"\"\n\n#: install.sh:2776 install.sh:2779 install.sh:2782 install.sh:2785\n#: install.sh:2788 install.sh:2791 install.sh:2794 install.sh:2797\n#: install.sh:2800 install.sh:2803 install.sh:2806\nmsgid \"安装成功\"\nmsgstr \"\"\n\n#: install.sh:2810\nmsgid \"目前分享链接规范为实验阶段, 请自行判断是否适用\"\nmsgstr \"\"\n\n#: install.sh:2812 install.sh:4224\nmsgid \"配置信息\"\nmsgstr \"\"\n\n#: install.sh:2813\nmsgid \"主机\"\nmsgstr \"\"\n\n#: install.sh:2837\nmsgid \"用户id\"\nmsgstr \"\"\n\n#: install.sh:2839\nmsgid \"加密\"\nmsgstr \"\"\n\n#: install.sh:2840\nmsgid \"传输协议\"\nmsgstr \"\"\n\n#: install.sh:2841\nmsgid \"底层传输安全\"\nmsgstr \"\"\n\n#: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868\nmsgid \"路径\"\nmsgstr \"\"\n\n#: install.sh:2844 install.sh:2848 install.sh:2862 install.sh:2868\nmsgid \"不要落下\"\nmsgstr \"\"\n\n#: install.sh:2846 install.sh:2849 install.sh:2865 install.sh:2870\nmsgid \"不需要加\"\nmsgstr \"\"\n\n#: install.sh:2852\nmsgid \"流控\"\nmsgstr \"\"\n\n#: install.sh:2885\nmsgid \"即将申请证书, 支持使用自定义证书\"\nmsgstr \"\"\n\n#: install.sh:2886\nmsgid \"如需使用自定义证书, 请按如下步骤:\"\nmsgstr \"\"\n\n#: install.sh:2887\nmsgid \"1. 将证书文件重命名: 私钥(xray.key)、证书(xray.crt)\"\nmsgstr \"\"\n\n#: install.sh:2888\nmsgid \"2. 将重命名后的证书文件放入\"\nmsgstr \"\"\n\n#: install.sh:2888\nmsgid \"目录后再运行脚本\"\nmsgstr \"\"\n\n#: install.sh:2889\nmsgid \"3. 重新运行脚本\"\nmsgstr \"\"\n\n#: install.sh:2890 install.sh:3334\nmsgid \"是否继续\"\nmsgstr \"\"\n\n#: install.sh:2898\nmsgid \"所有证书文件均已存在, 是否保留\"\nmsgstr \"\"\n\n#: install.sh:2904 install.sh:2919 install.sh:2935 file_manager.sh:176\nmsgid \"已删除\"\nmsgstr \"\"\n\n#: install.sh:2910 install.sh:2925 install.sh:2942\nmsgid \"证书应用\"\nmsgstr \"\"\n\n#: install.sh:2914\nmsgid \"证书文件已存在, 是否保留\"\nmsgstr \"\"\n\n#: install.sh:2930\nmsgid \"证书签发残留文件已存在, 是否保留\"\nmsgstr \"\"\n\n#: install.sh:2972 install.sh:4219\nmsgid \"添加\"\nmsgstr \"\"\n\n#: install.sh:2980\nmsgid \"请选择支持的 TLS 版本\"\nmsgstr \"\"\n\n#: install.sh:2981\nmsgid \"建议选择 TLSv1.3 only (安全模式)\"\nmsgstr \"\"\n\n#: install.sh:2982 install.sh:2998\nmsgid \"兼容模式\"\nmsgstr \"\"\n\n#: install.sh:2983\nmsgid \"安全模式\"\nmsgstr \"\"\n\n#: install.sh:2987\nmsgid \"由于 h3 仅支持 TLSv1.3, 只支持 TLSv1.3 only (安全模式)\"\nmsgstr \"\"\n\n#: install.sh:2991 install.sh:3003 install.sh:3006\nmsgid \"已切换至\"\nmsgstr \"\"\n\n#: install.sh:2995\nmsgid \"请选择 TLS 版本\"\nmsgstr \"\"\n\n#: install.sh:2996\nmsgid \"建议选择 TLSv1.3 (安全模式)\"\nmsgstr \"\"\n\n#: install.sh:3009\nmsgid \"当前模式不支持\"\nmsgstr \"\"\n\n#: install.sh:3016\nmsgid \"Nginx配置文件不存在 或 当前模式不支持\"\nmsgstr \"\"\n\n#: install.sh:3130\nmsgid \"此模式不支持修改\"\nmsgstr \"\"\n\n#: install.sh:3139\nmsgid \"即将显示用户, 一次仅能显示一个\"\nmsgstr \"\"\n\n#: install.sh:3141\nmsgid \"请选择显示用户使用的协议\"\nmsgstr \"\"\n\n#: install.sh:3151\nmsgid \"请选择要显示的用户编号\"\nmsgstr \"\"\n\n#: install.sh:3156 install.sh:3166 install.sh:3270 install.sh:3292\nmsgid \"选择错误\"\nmsgstr \"\"\n\n#: install.sh:3159\nmsgid \"请直接在主菜单选择 [查看 Xray 配置信息] 显示主用户\"\nmsgstr \"\"\n\n#: install.sh:3169 install.sh:3295\nmsgid \"请先检测 Xray 是否正确安装\"\nmsgstr \"\"\n\n#: install.sh:3187\nmsgid \"是否继续显示用户\"\nmsgstr \"\"\n\n#: install.sh:3196 install.sh:3298\nmsgid \"此模式不支持删除用户\"\nmsgstr \"\"\n\n#: install.sh:3206\nmsgid \"即将添加用户, 一次仅能添加一个\"\nmsgstr \"\"\n\n#: install.sh:3208\nmsgid \"请选择添加用户使用的协议\"\nmsgstr \"\"\n\n#: install.sh:3230\nmsgid \"添加用户\"\nmsgstr \"\"\n\n#: install.sh:3235\nmsgid \"是否继续添加用户\"\nmsgstr \"\"\n\n#: install.sh:3244\nmsgid \"此模式不支持添加用户\"\nmsgstr \"\"\n\n#: install.sh:3253\nmsgid \"即将删除用户, 一次仅能删除一个\"\nmsgstr \"\"\n\n#: install.sh:3255\nmsgid \"请选择删除用户使用的协议\"\nmsgstr \"\"\n\n#: install.sh:3265\nmsgid \"请选择要删除的用户编号\"\nmsgstr \"\"\n\n#: install.sh:3274\nmsgid \"主用户无法删除\"\nmsgstr \"\"\n\n#: install.sh:3280\nmsgid \"删除用户\"\nmsgstr \"\"\n\n#: install.sh:3283\nmsgid \"是否继续删除用户\"\nmsgstr \"\"\n\n#: install.sh:3305 install.sh:3309\nmsgid \"文件不存在\"\nmsgstr \"\"\n\n#: install.sh:3316\nmsgid \"已配置 Xray 流量统计\"\nmsgstr \"\"\n\n#: install.sh:3317\nmsgid \"是否需要关闭此功能\"\nmsgstr \"\"\n\n#: install.sh:3323\nmsgid \"关闭 Xray 流量统计\"\nmsgstr \"\"\n\n#: install.sh:3332\nmsgid \"流量统计需要使用\"\nmsgstr \"\"\n\n#: install.sh:3333\nmsgid \"可能会影响 Xray 性能\"\nmsgstr \"\"\n\n#: install.sh:3344\nmsgid \"设置 Xray 流量统计\"\nmsgstr \"\"\n\n#: install.sh:3374 install.sh:3394\nmsgid \"已卸载\"\nmsgstr \"\"\n\n#: install.sh:3378\nmsgid \"是否卸载\"\nmsgstr \"\"\n\n#: install.sh:3382\nmsgid \"已取消卸载\"\nmsgstr \"\"\n\n#: install.sh:3405\nmsgid \"是否删除所有脚本文件\"\nmsgstr \"\"\n\n#: install.sh:3412\nmsgid \"已删除所有文件\"\nmsgstr \"\"\n\n#: install.sh:3413\nmsgid \"ヾ(￣▽￣) 拜拜~\"\nmsgstr \"\"\n\n#: install.sh:3418\nmsgid \"已保留脚本文件 (包含 SSL 证书等)\"\nmsgstr \"\"\n\n#: install.sh:3422\nmsgid \"是否保留配置文件\"\nmsgstr \"\"\n\n#: install.sh:3439\nmsgid \"已清空证书遗留文件\"\nmsgstr \"\"\n\n#: install.sh:3469\nmsgid \"秒后\"\nmsgstr \"\"\n\n#: install.sh:3669\nmsgid \"检测最新版本失败\"\nmsgstr \"\"\n\n#: install.sh:3677 install.sh:3917\nmsgid \"新版本\"\nmsgstr \"\"\n\n#: install.sh:3677 install.sh:3917\nmsgid \"更新内容\"\nmsgstr \"\"\n\n#: install.sh:3681\nmsgid \"存在新版本, 但版本变化较大, 可能存在不兼容情况, 是否更新\"\nmsgstr \"\"\n\n#: install.sh:3684\nmsgid \"存在新版本, 是否更新\"\nmsgstr \"\"\n\n#: install.sh:3688\nmsgid \"检测 脚本 最新版本失败\"\nmsgstr \"\"\n\n#: install.sh:3689\nmsgid \"脚本 版本差别过大, 跳过更新\"\nmsgstr \"\"\n\n#: install.sh:3697 install.sh:3698\nmsgid \"脚本更新失败\"\nmsgstr \"\"\n\n#: install.sh:3704\nmsgid \"更新完成\"\nmsgstr \"\"\n\n#: install.sh:3705 install.sh:3929\nmsgid \"脚本版本变化较大, 若服务无法正常运行请卸载后重装\"\nmsgstr \"\"\n\n#: install.sh:3714\nmsgid \"当前版本为最新版本\"\nmsgstr \"\"\n\n#: install.sh:3727 install.sh:3912 install.sh:3927 install.sh:3940\nmsgid \"下载最新脚本\"\nmsgstr \"\"\n\n#: install.sh:3741\nmsgid \"该选项暂时无法使用\"\nmsgstr \"\"\n\n#: install.sh:3760 install.sh:4286\nmsgid \"此模式推荐用于负载均衡, 一般情况不推荐使用, 是否安装\"\nmsgstr \"\"\n\n#: install.sh:3773 install.sh:4300\nmsgid \"此模式仅用于流量中转, 不建议在其他情况下使用, 是否安装\"\nmsgstr \"\"\n\n#: install.sh:3876 install.sh:3877 install.sh:3887 install.sh:3891\n#: install.sh:3895 install.sh:4211 install.sh:4212 install.sh:4213\n#: install.sh:4214 install.sh:4215 install.sh:4216 install.sh:4314\n#: install.sh:4319 install.sh:4324 install.sh:4329\nmsgid \"变更\"\nmsgstr \"\"\n\n#: install.sh:3876 install.sh:4215\nmsgid \"负载均衡配置\"\nmsgstr \"\"\n\n#: install.sh:3879\nmsgid \"清除日志文件\"\nmsgstr \"\"\n\n#: install.sh:3880\nmsgid \"查看证书状态\"\nmsgstr \"\"\n\n#: install.sh:3881\nmsgid \"更新证书有效期\"\nmsgstr \"\"\n\n#: install.sh:3882\nmsgid \"设置证书自动更新\"\nmsgstr \"\"\n\n#: install.sh:3883\nmsgid \"设置 Fail2ban 防暴力破解\"\nmsgstr \"\"\n\n#: install.sh:3884\nmsgid \"显示帮助\"\nmsgstr \"\"\n\n#: install.sh:3885\nmsgid \"修改语言\"\nmsgstr \"\"\n\n#: install.sh:3888 install.sh:4218 install.sh:4222 install.sh:4223\n#: install.sh:4224 install.sh:4225 install.sh:4230 install.sh:4232\n#: fail2ban_manager.sh:15\nmsgid \"查看\"\nmsgstr \"\"\n\n#: install.sh:3888 install.sh:4225\nmsgid \"实时流量\"\nmsgstr \"\"\n\n#: install.sh:3889\nmsgid \"脚本卸载\"\nmsgstr \"\"\n\n#: install.sh:3890\nmsgid \"显示安装信息\"\nmsgstr \"\"\n\n#: install.sh:3892 install.sh:4237\nmsgid \"加速\"\nmsgstr \"\"\n\n#: install.sh:3894\nmsgid \"更新脚本\"\nmsgstr \"\"\n\n#: install.sh:3896 install.sh:3897\nmsgid \"显示\"\nmsgstr \"\"\n\n#: install.sh:3896\nmsgid \"访问信息\"\nmsgstr \"\"\n\n#: install.sh:3897\nmsgid \"错误信息\"\nmsgstr \"\"\n\n#: install.sh:3921\nmsgid \"脚本版本变化较大, 可能存在不兼容情况, 是否继续使用\"\nmsgstr \"\"\n\n#: install.sh:3948\nmsgid \"检测失败\"\nmsgstr \"\"\n\n#: install.sh:3952 install.sh:3962 install.sh:3971\nmsgid \"有新版\"\nmsgstr \"\"\n\n#: install.sh:3955 install.sh:3964 install.sh:3974\nmsgid \"最新版\"\nmsgstr \"\"\n\n#: install.sh:3969\nmsgid \"版本未知\"\nmsgstr \"\"\n\n#: install.sh:3989 install.sh:3996\nmsgid \"运行中\"\nmsgstr \"\"\n\n#: install.sh:3991 install.sh:4014 install.sh:4016\nmsgid \"无需测试\"\nmsgstr \"\"\n\n#: install.sh:3993 install.sh:3998\nmsgid \"未运行\"\nmsgstr \"\"\n\n#: install.sh:4008\nmsgid \"无法连通\"\nmsgstr \"\"\n\n#: install.sh:4010 install.sh:4011 install.sh:4012\nmsgid \"本地正常\"\nmsgstr \"\"\n\n#: install.sh:4027\nmsgid \"脚本维护中.. 请稍后再试\"\nmsgstr \"\"\n\n#: install.sh:4034\nmsgid \"无法检测所需依赖的在线版本, 请稍后再试\"\nmsgstr \"\"\n\n#: install.sh:4051\nmsgid \"请输入数字\"\nmsgstr \"\"\n\n#: install.sh:4051\nmsgid \"请输入 1 到 6 之间的有效数字\"\nmsgstr \"\"\n\n#: install.sh:4081\nmsgid \"无效的选择\"\nmsgstr \"\"\n\n#: install.sh:4122\nmsgid \"请输入备份名称\"\nmsgstr \"\"\n\n#: install.sh:4122\nmsgid \"不需要后缀\"\nmsgstr \"\"\n\n#: install.sh:4131\nmsgid \"报错信息\"\nmsgstr \"\"\n\n#: install.sh:4133\nmsgid \"备份完整性可能受到影响, 请检查上述错误信息\"\nmsgstr \"\"\n\n#: install.sh:4137\nmsgid \"备份失败\"\nmsgstr \"\"\n\n#: install.sh:4139\nmsgid \"备份成功\"\nmsgstr \"\"\n\n#: install.sh:4144\nmsgid \"请确保备份文件在目录\"\nmsgstr \"\"\n\n#: install.sh:4148\nmsgid \"没有找到备份文件\"\nmsgstr \"\"\n\n#: install.sh:4153\nmsgid \"发现多个备份文件\"\nmsgstr \"\"\n\n#: install.sh:4153\nmsgid \"将使用最新的文件进行恢复\"\nmsgstr \"\"\n\n#: install.sh:4157\nmsgid \"找到最新备份文件\"\nmsgstr \"\"\n\n#: install.sh:4159\nmsgid \"恢复备份\"\nmsgstr \"\"\n\n#: install.sh:4163\nmsgid \"恢复成功\"\nmsgstr \"\"\n\n#: install.sh:4164 install.sh:4166\nmsgid \"记得安装\"\nmsgstr \"\"\n\n#: install.sh:4169\nmsgid \"恢复失败\"\nmsgstr \"\"\n\n#: install.sh:4175\nmsgid \"安装管理脚本\"\nmsgstr \"\"\n\n#: install.sh:4176\nmsgid \"作者\"\nmsgstr \"\"\n\n#: install.sh:4180\nmsgid \"当前模式\"\nmsgstr \"\"\n\n#: install.sh:4181\nmsgid \"当前语言\"\nmsgstr \"\"\n\n#: install.sh:4184\nmsgid \"可以使用\"\nmsgstr \"\"\n\n#: install.sh:4184\nmsgid \"命令管理脚本\"\nmsgstr \"\"\n\n#: install.sh:4186\nmsgid \"版本检测\"\nmsgstr \"\"\n\n#: install.sh:4187 install.sh:4195 install.sh:4246\nmsgid \"脚本\"\nmsgstr \"\"\n\n#: install.sh:4190\nmsgid \"运行状态\"\nmsgstr \"\"\n\n#: install.sh:4193\nmsgid \"连通性\"\nmsgstr \"\"\n\n#: install.sh:4194\nmsgid \"更新向导\"\nmsgstr \"\"\n\n#: install.sh:4205\nmsgid \"安装向导\"\nmsgstr \"\"\n\n#: install.sh:4210\nmsgid \"配置变更\"\nmsgstr \"\"\n\n#: install.sh:4217\nmsgid \"用户管理\"\nmsgstr \"\"\n\n#: install.sh:4218 install.sh:4219 install.sh:4220\nmsgid \"用户\"\nmsgstr \"\"\n\n#: install.sh:4221\nmsgid \"查看信息\"\nmsgstr \"\"\n\n#: install.sh:4222\nmsgid \"实时访问日志\"\nmsgstr \"\"\n\n#: install.sh:4223\nmsgid \"实时错误日志\"\nmsgstr \"\"\n\n#: install.sh:4226\nmsgid \"服务相关\"\nmsgstr \"\"\n\n#: install.sh:4227 install.sh:4228 install.sh:4229 install.sh:4230\nmsgid \"所有服务\"\nmsgstr \"\"\n\n#: install.sh:4231\nmsgid \"证书相关\"\nmsgstr \"\"\n\n#: install.sh:4232\nmsgid \"证书状态\"\nmsgstr \"\"\n\n#: install.sh:4233\nmsgid \"证书有效期\"\nmsgstr \"\"\n\n#: install.sh:4234\nmsgid \"证书自动更新\"\nmsgstr \"\"\n\n#: install.sh:4235\nmsgid \"其他选项\"\nmsgstr \"\"\n\n#: install.sh:4236\nmsgid \"自动更新\"\nmsgstr \"\"\n\n#: install.sh:4238\nmsgid \"防暴力破解\"\nmsgstr \"\"\n\n#: install.sh:4239\nmsgid \"流量统计\"\nmsgstr \"\"\n\n#: install.sh:4240\nmsgid \"清除\"\nmsgstr \"\"\n\n#: install.sh:4240\nmsgid \"日志文件\"\nmsgstr \"\"\n\n#: install.sh:4241\nmsgid \"测试\"\nmsgstr \"\"\n\n#: install.sh:4241\nmsgid \"服务器网速\"\nmsgstr \"\"\n\n#: install.sh:4242\nmsgid \"备份恢复\"\nmsgstr \"\"\n\n#: install.sh:4243 install.sh:4244\nmsgid \"全部文件\"\nmsgstr \"\"\n\n#: install.sh:4244\nmsgid \"恢复\"\nmsgstr \"\"\n\n#: install.sh:4245\nmsgid \"卸载向导\"\nmsgstr \"\"\n\n#: install.sh:4246 fail2ban_manager.sh:14 fail2ban_manager.sh:415\nmsgid \"卸载\"\nmsgstr \"\"\n\n#: install.sh:4247\nmsgid \"清空\"\nmsgstr \"\"\n\n#: install.sh:4247\nmsgid \"证书文件\"\nmsgstr \"\"\n\n#: install.sh:4248 fail2ban_manager.sh:16 file_manager.sh:208\nmsgid \"退出\"\nmsgstr \"\"\n\n#: install.sh:4251\nmsgid \"请输入选项\"\nmsgstr \"\"\n\n#: install.sh:4259 install.sh:4268 install.sh:4334 install.sh:4340\n#: install.sh:4385 install.sh:4391 install.sh:4397 install.sh:4426\n#: install.sh:4467 install.sh:4474 install.sh:4479 fail2ban_manager.sh:416\nmsgid \"清空屏幕\"\nmsgstr \"\"\n\n#: install.sh:4265\nmsgid \"不建议\"\nmsgstr \"\"\n\n#: install.sh:4265\nmsgid \"频繁更新 Nginx, 请确认 Nginx 有更新的必要\"\nmsgstr \"\"\n\n#: install.sh:4266\nmsgid \"开始更新\"\nmsgstr \"\"\n\n#: install.sh:4346 install.sh:4353 install.sh:4360 install.sh:4410\n#: install.sh:4415 install.sh:4420 install.sh:4442\nmsgid \"回到菜单\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:10\nmsgid \"用于防止暴力破解\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:11 file_manager.sh:203\nmsgid \"主菜单\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:13\nmsgid \"管理\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:15 fail2ban_manager.sh:339\nmsgid \"状态\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:18 file_manager.sh:210\nmsgid \"请选择一个选项\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:27 fail2ban_manager.sh:250 fail2ban_manager.sh:258\n#: fail2ban_manager.sh:363\nmsgid \"无效的选择, 请重试\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:35\nmsgid \"已经安装, 跳过安装步骤\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:68\nmsgid \"systemd 无法读取 SSH 日志\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:69\nmsgid \"跳过启用\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:69 fail2ban_manager.sh:93 fail2ban_manager.sh:103\n#: fail2ban_manager.sh:120 fail2ban_manager.sh:125 fail2ban_manager.sh:128\n#: fail2ban_manager.sh:146 fail2ban_manager.sh:151 fail2ban_manager.sh:154\nmsgid \"规则\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:77 fail2ban_manager.sh:203 fail2ban_manager.sh:440\nmsgid \"未安装, 请先安装\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:125 fail2ban_manager.sh:151 fail2ban_manager.sh:349\nmsgid \"已禁用\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:209\nmsgid \"请选择\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:209\nmsgid \"操作\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:210\nmsgid \"管理模块\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:211\nmsgid \"添加自定义规则\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:212 fail2ban_manager.sh:228\nmsgid \"服务管理\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:271\nmsgid \"请输入新的\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:271 fail2ban_manager.sh:272\nmsgid \"名称\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:273\nmsgid \"请输入日志路径\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:274\nmsgid \"请输入最大重试次数\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:274\nmsgid \"最大重试次数必须在 1 到 99 之间\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:275\nmsgid \"请输入封禁时间\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:275\nmsgid \"秒\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:275\nmsgid \"封禁时间必须在 1 到 8640000 秒之间\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:285\nmsgid \"自定义规则添加成功\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:289\nmsgid \"重启以应用新规则\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:294\nmsgid \"管理 Fail2ban 模块\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:311\nmsgid \"未找到任何模块化配置文件\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:319 fail2ban_manager.sh:339\nmsgid \"模块名称\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:339 file_manager.sh:59\nmsgid \"序号\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:363\nmsgid \"请选择要管理的模块\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:375\nmsgid \"启用\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:375\nmsgid \"禁用\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:378\nmsgid \"是否\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:378 fail2ban_manager.sh:386\nmsgid \"模块\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:388\nmsgid \"操作已取消\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:424\nmsgid \"停止成功\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:444\nmsgid \"总体状态\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:448\nmsgid \"默认启用的 Jail 状态\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:452 fail2ban_manager.sh:458\nmsgid \"封锁情况\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:453 fail2ban_manager.sh:459 fail2ban_manager.sh:462\n#: fail2ban_manager.sh:466 fail2ban_manager.sh:469\nmsgid \"未启用或配置异常\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:484 file_manager.sh:232\nmsgid \"新版本可用\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:484 file_manager.sh:232\nmsgid \"当前版本\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:485 file_manager.sh:233\nmsgid \"请访问\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:485 file_manager.sh:233\nmsgid \"查看更新说明\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:487 file_manager.sh:235\nmsgid \"是否下载并安装新版本\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:491 file_manager.sh:239\nmsgid \"正在下载新版本\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:496 file_manager.sh:244\nmsgid \"下载完成, 请重新运行脚本\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:504 file_manager.sh:252\nmsgid \"跳过更新\"\nmsgstr \"\"\n\n#: fail2ban_manager.sh:508 file_manager.sh:256\nmsgid \"当前已经是最新版本\"\nmsgstr \"\"\n\n#: file_manager.sh:7\nmsgid \"用法\"\nmsgstr \"\"\n\n#: file_manager.sh:7\nmsgid \"文件扩展名\"\nmsgstr \"\"\n\n#: file_manager.sh:7\nmsgid \"目录路径\"\nmsgstr \"\"\n\n#: file_manager.sh:16\nmsgid \"目录\"\nmsgstr \"\"\n\n#: file_manager.sh:16\nmsgid \"不存在, 请检查路径\"\nmsgstr \"\"\n\n#: file_manager.sh:26 file_manager.sh:204\nmsgid \"列出所有\"\nmsgstr \"\"\n\n#: file_manager.sh:26 file_manager.sh:35 file_manager.sh:88 file_manager.sh:111\n#: file_manager.sh:160 file_manager.sh:176 file_manager.sh:204\n#: file_manager.sh:205 file_manager.sh:206 file_manager.sh:207\nmsgid \"文件\"\nmsgstr \"\"\n\n#: file_manager.sh:53\nmsgid \"文件名\"\nmsgstr \"\"\n\n#: file_manager.sh:79\nmsgid \"请输入网址 (例如 hey.run)\"\nmsgstr \"\"\n\n#: file_manager.sh:80\nmsgid \"不要包含 http:// 或 https:// 开头\"\nmsgstr \"\"\n\n#: file_manager.sh:84\nmsgid \"网址不能包含 http:// 或 https:// 前缀\"\nmsgstr \"\"\n\n#: file_manager.sh:88 file_manager.sh:111\nmsgid \"已创建\"\nmsgstr \"\"\n\n#: file_manager.sh:99\nmsgid \"请输入主机\"\nmsgstr \"\"\n\n#: file_manager.sh:107\nmsgid \"请输入权重\"\nmsgstr \"\"\n\n#: file_manager.sh:128\nmsgid \"追加完成\"\nmsgstr \"\"\n\n#: file_manager.sh:132 file_manager.sh:136\nmsgid \"重启完成\"\nmsgstr \"\"\n\n#: file_manager.sh:151\nmsgid \"请输入要编辑的文件编号\"\nmsgstr \"\"\n\n#: file_manager.sh:156\nmsgid \"未安装, 正在尝试安装\"\nmsgstr \"\"\n\n#: file_manager.sh:160\nmsgid \"已编辑\"\nmsgstr \"\"\n\n#: file_manager.sh:171\nmsgid \"请输入要删除的文件编号\"\nmsgstr \"\"\n\n#: file_manager.sh:194\nmsgid \"不支持的文件扩展名\"\nmsgstr \"\"\n\n#: file_manager.sh:205\nmsgid \"创建一个新的\"\nmsgstr \"\"\n\n#: file_manager.sh:206\nmsgid \"编辑一个已存在的\"\nmsgstr \"\"\n\n#: file_manager.sh:207\nmsgid \"删除一个已存在的\"\nmsgstr \"\"\n\n#: file_manager.sh:265\nmsgid \"重启成功\"\nmsgstr \"\"\n\n#: file_manager.sh:268\nmsgid \"重启失败\"\nmsgstr \"\"\n\n#: file_manager.sh:268\nmsgid \"请检查配置文件是否有误\"\nmsgstr \"\"\n"
  },
  {
    "path": "ssl_update.sh",
    "content": "#!/usr/bin/env bash\nPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin\nexport PATH\n\ncert_group=\"nobody\"\nidleleo_dir=\"/etc/idleleo\"\nnginx_systemd_file=\"/etc/systemd/system/nginx.service\"\nssl_chainpath=\"${idleleo_dir}/cert\"\nxray_qr_config_file=\"${idleleo_dir}/info/vless_qr.json\"\nhost=$(jq -r '.host' ${xray_qr_config_file})\n\n[[ -f ${nginx_systemd_file} ]] && systemctl stop nginx &> /dev/null\nwait\n\"/root/.acme.sh\"/acme.sh --cron --home \"/root/.acme.sh\" &> /dev/null\n\"/root/.acme.sh\"/acme.sh --installcert -d ${host} --fullchainpath ${ssl_chainpath}/xray.crt --keypath ${ssl_chainpath}/xray.key --ecc &> /dev/null\nwait\n\n[[ $(grep \"^nogroup:\" /etc/group) ]] && cert_group=\"nogroup\"\nchmod -f a+rw ${ssl_chainpath}/xray.crt\nchmod -f a+rw ${ssl_chainpath}/xray.key\nchown -fR nobody:${cert_group} ${ssl_chainpath}/*\nwait\n[[ -f ${nginx_systemd_file} ]] && systemctl start nginx &> /dev/null\n"
  },
  {
    "path": "status_config.json",
    "content": "{\n    \"api\": {\n        \"tag\": \"api\",\n        \"services\": [\n            \"StatsService\"\n        ]\n    },\n    \"stats\": {},\n    \"policy\": {\n        \"levels\": {\n            \"0\": {\n                \"handshake\": 4,\n                \"connIdle\": 300,\n                \"uplinkOnly\": 2,\n                \"downlinkOnly\": 5,\n                \"statsUserUplink\": false,\n                \"statsUserDownlink\": false\n            }\n        },\n        \"system\": {\n            \"statsInboundUplink\": true,\n            \"statsInboundDownlink\": true\n        }\n    }\n}\n"
  },
  {
    "path": "translate.py",
    "content": "import re\nimport time\nimport json\nimport os\nfrom openai import OpenAI\nfrom googletrans import Translator\nfrom langdetect import detect, DetectorFactory\n\n# 设置种子以确保结果一致\nDetectorFactory.seed = 0\n\ndef load_translation_cache(cache_file):\n    if os.path.exists(cache_file):\n        with open(cache_file, 'r', encoding='utf-8') as f:\n            translations = json.load(f)\n        \n        # 将缓存中的所有翻译结果首字母转为小写并去除末尾标点\n        for key in translations:\n            translations[key] = clean_translation(translations[key])\n        \n        return translations\n    return {}\n\ndef save_translation_cache(cache_file, translations):\n    # 在保存缓存前确保所有翻译结果首字母转为小写并去除末尾标点\n    for key in translations:\n        translations[key] = clean_translation(translations[key])\n    \n    with open(cache_file, 'w', encoding='utf-8') as f:\n        json.dump(translations, f, ensure_ascii=False, indent=2)\n\ndef get_version(version_file):\n    if os.path.exists(version_file):\n        with open(version_file, 'r', encoding='utf-8') as f:\n            return f.read().strip()\n    return None\n\ndef update_version(version_file):\n    timestamp = str(int(time.time()))\n    with open(version_file, 'w', encoding='utf-8') as f:\n        f.write(timestamp)\n    return timestamp\n\ndef contains_chinese(text):\n    return any('\\u4e00' <= char <= '\\u9fff' for char in text)\n\n# def contains_target_language_characters(text, target_lang):\n#     try:\n#         detected_lang = detect(text)\n#         return detected_lang == target_lang\n#     except Exception as e:\n#         print(f\"Language detection failed: {e}\")\n#         return False\n\ndef translate_text_qwen_mt(text, target_lang):\n    api_key = os.getenv(\"AI_API_KEY\")\n    if not api_key:\n        raise ValueError(\"AI_API_KEY environment variable is not set.\")\n    \n    client = OpenAI(\n        api_key=api_key,\n        base_url=\"https://dashscope.aliyuncs.com/compatible-mode/v1\",\n    )\n    messages = [\n        {'role': 'user', 'content': text}\n    ]\n    translation_options = {\n        \"source_lang\": \"zh\",  # 指定源语言为中文\n        \"target_lang\": target_lang\n    }\n    try:\n        completion = client.chat.completions.create(\n            model=\"qwen-mt-plus\",\n            messages=messages,\n            extra_body={\n                \"translation_options\": translation_options\n            }\n        )\n        translated_text = completion.choices[0].message.content\n        return translated_text.lower().rstrip('.,!?;:')\n    except Exception as e:\n        print(f\"Qwen-MT-Plus translation failed: {e}\")\n        return \"\"\n\ndef translate_text_google(text, target_lang):\n    try:\n        translator = Translator(service_urls=['translate.google.com'])\n        translation = translator.translate(text, src='zh-cn', dest=target_lang)  # 指定源语言为中文\n        translated_text = translation.text\n        return translated_text.lower().rstrip('.,!?;:')\n    except Exception as e:\n        print(f\"Google Translate failed: {e}\")\n        return \"\"\n\ndef needs_fallback_translation(translated_text):\n    return '\\n' in translated_text or '\"' in translated_text\n\ndef clean_translation(text):\n    return text.replace('\\n', '').replace('\"', '')\n\ndef translate_po_file(input_file, output_file, target_lang_code, target_lang_name):\n    # 获取目标语言目录\n    lang_dir = os.path.dirname(output_file)\n    \n    # 构建 LC_MESSAGES 目录路径\n    lc_messages_dir = os.path.join('languages', target_lang_code, 'LC_MESSAGES')\n    \n    # 确保 LC_MESSAGES 目录存在\n    if not os.path.exists(lc_messages_dir):\n        os.makedirs(lc_messages_dir)\n    \n    # 构建缓存文件和版本文件的路径\n    cache_file = os.path.join(lang_dir, f'cache_{target_lang_name}.json')\n    version_file = os.path.join(lc_messages_dir, 'version')\n    \n    translations = load_translation_cache(cache_file)\n    current_version = get_version(version_file)\n    \n    with open(input_file, 'r', encoding='utf-8') as f:\n        content = f.read()\n    \n    # 匹配msgid和空msgstr\n    pattern = r'msgid \"(.+?)\"\\s*\\nmsgstr \"(.*?)\"'\n    matches = re.finditer(pattern, content)\n\n    updated = False\n    used_translations = set()  # 用于跟踪已使用的翻译\n\n    for match in matches:\n        msgid_text = match.group(1)\n\n        # 检查缓存\n        if msgid_text in translations:\n            translated_text = translations[msgid_text]\n            # 清理缓存中的翻译结果\n            translated_text = clean_translation(translated_text)\n            # 直接使用缓存的翻译，不再检查目标语言\n            if translated_text == \"\":\n                updated = True\n                print(f\"Cached translation is empty for: {msgid_text}. Re-translating...\")\n            else:\n                print(f\"Using cached translation: {msgid_text} -> {translated_text}\")\n                # 更新content以反映翻译结果\n                content = re.sub(\n                    rf'msgid \"{re.escape(msgid_text)}\"\\s*\\nmsgstr \".*?\"',\n                    rf'msgid \"{msgid_text}\"\\nmsgstr \"{translated_text}\"',\n                    content\n                )\n                used_translations.add(msgid_text)  # 标记为已使用\n                continue  # 跳过翻译步骤\n\n        # 进行翻译\n        try:\n            # 增加重试机制\n            max_retries = 3\n            for attempt in range(max_retries):\n                try:\n                    time.sleep(0.1)  # 增加延迟以避免请求过快\n                    translated_text = translate_text_qwen_mt(msgid_text, target_lang_code)\n                    \n                    # 检查翻译结果是否仍包含中文或需要回退翻译\n                    if (contains_chinese(translated_text) or \n                        needs_fallback_translation(translated_text)):\n                        print(f\"Translation does not meet criteria using Qwen-MT-Plus. Using Google Translate...\")\n                        translated_text = translate_text_google(msgid_text, target_lang_code)\n                    \n                    # 清理Google翻译结果\n                    translated_text = clean_translation(translated_text)\n                    \n                    # 检查翻译是否有变更\n                    if msgid_text in translations and translations[msgid_text] != translated_text:\n                        print(f\"Translation changed for: {msgid_text} -> {translated_text}\")\n                        updated = True\n                    \n                    # 更新缓存\n                    translations[msgid_text] = translated_text  # 存储翻译到缓存\n                    print(f\"New translation [{target_lang_code}]: {msgid_text} -> {translated_text}\")\n                    used_translations.add(msgid_text)  # 标记为已使用\n                    break  # 成功翻译后跳出重试循环\n                except Exception as e:\n                    if attempt == max_retries - 1:\n                        raise e\n                    print(f\"Retry {attempt + 1}/{max_retries} for: {msgid_text}\")\n                    time.sleep(0.1)  # 重试前等待更长时间\n        except Exception as e:\n            print(f\"Translation failed for: {msgid_text}\")\n            print(f\"Error: {e}\")\n            # 处理翻译失败的情况，删除该条目\n            if msgid_text in translations:\n                del translations[msgid_text]  # 从缓存中删除该条目\n                content = re.sub(rf'msgid \"{re.escape(msgid_text)}\"\\nmsgstr \".*?\"\\n?', '', content)\n                updated = True  # 标记为已更新\n                continue  # 继续处理下一个条目\n\n        # 更新content以反映翻译结果\n        if translated_text:  # 确保翻译成功\n            content = re.sub(\n                rf'msgid \"{re.escape(msgid_text)}\"\\s*\\nmsgstr \".*?\"',\n                rf'msgid \"{msgid_text}\"\\nmsgstr \"{translated_text}\"',\n                content\n            )\n            updated = True\n            used_translations.add(msgid_text)  # 标记为已使用\n\n    # 删除未使用的缓存项\n    for key in list(translations.keys()):\n        if key not in used_translations:\n            print(f\"Removing unused cache entry: {key}\")\n            del translations[key]\n            updated = True\n\n    if updated:\n        save_translation_cache(cache_file, translations)\n        new_version = update_version(version_file)\n        print(f\"Updated version from {current_version} to {new_version}\")\n    else:\n        print(\"No updates.\")\n        # 创建一个额外的文件来指示没有更新\n        no_update_file = os.path.join(os.path.dirname(output_file), f'{os.path.basename(output_file)}.no-update')\n        with open(no_update_file, 'w', encoding='utf-8') as f:\n            f.write(\"# No updates.\\n\")\n\n    # 确保每个 msgid 和 msgstr 之间没有多余的空格或换行符\n    content = re.sub(r'\\n\\s*msgstr', '\\nmsgstr', content)\n    \n    with open(output_file, 'w', encoding='utf-8') as f:\n        f.write(content)\n\nif __name__ == '__main__':\n    for lang_code, lang_name in [('en', 'English'), ('fa', 'Persian'), ('ru', 'Russian'), ('ko', 'Korean'), ('fr', 'French')]:\n        print(f\"\\nTranslating to {lang_name} ({lang_code})...\")\n        input_file = f'po/{lang_code}.po'\n        output_file = f'po/{lang_code}.po'\n        translate_po_file(input_file, output_file, lang_code, lang_name)"
  },
  {
    "path": "translate_readme.py",
    "content": "import os\nimport json\nimport re\nimport markdown\nfrom bs4 import BeautifulSoup\nfrom googletrans import Translator\nimport logging\n\n# 设置日志\nlogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')\n\ndef load_translation_cache(cache_file):\n    if os.path.exists(cache_file):\n        with open(cache_file, 'r', encoding='utf-8') as f:\n            return json.load(f)\n    return {}\n\ndef save_translation_cache(cache_file, translations):\n    with open(cache_file, 'w', encoding='utf-8') as f:\n        json.dump(translations, f, ensure_ascii=False, indent=4)\n\ndef get_cache_key(text, target_lang):\n    \"\"\"生成缓存键，将文本和目标语言合并为一个字符串\"\"\"\n    return f\"{target_lang}::{text}\"\n\ndef translate_text(text, target_lang, translator, translations):\n    cache_key = get_cache_key(text, target_lang)\n    if cache_key in translations:\n        logging.info(f\"从缓存中获取翻译: '{text}' -> '{translations[cache_key]}'\")\n        return translations[cache_key]\n    \n    try:\n        translation = translator.translate(text, dest=target_lang)\n        translations[cache_key] = translation.text\n        logging.info(f\"翻译成功: '{text}' -> '{translation.text}'\")\n        return translation.text\n    except Exception as e:\n        logging.error(f\"翻译失败: {text}\\n错误: {e}\")\n        return text  # 返回原始文本以防翻译失败\n\ndef should_translate(segment):\n    \"\"\"判断是否需要翻译该段落\"\"\"\n    # 定义需要跳过翻译的模式\n    skip_patterns = [\n        r'\\[简体中文\\]\\(README\\.md\\)',  # 只要匹配到[简体中文](README.md)，就跳过该段落\n        r'\\[.*?\\]\\(.*?\\)'  # 跳过所有包含 markdown 链接的段落\n    ]\n    for pattern in skip_patterns:\n        if re.search(pattern, segment):\n            logging.info(f\"跳过翻译的段落: {segment}\")\n            return False\n    return True\n\ndef extract_text_segments(content):\n    \"\"\"\n    使用 Markdown 解析库提取非代码块的文本段落。\n    \"\"\"\n    html = markdown.markdown(content)\n    soup = BeautifulSoup(html, 'html.parser')\n    # 移除所有代码块\n    for code in soup.find_all(['code', 'pre']):\n        code.extract()\n    # 获取纯文本\n    text = soup.get_text()\n    # 按段落分割\n    segments = text.split('\\n\\n')\n    # 清理段落\n    segments = [segment.strip() for segment in segments if segment.strip()]\n    logging.info(f\"提取到 {len(segments)} 个文本段落进行翻译。\")\n    return segments\n\ndef replace_translation(original_content, translated_segments):\n    \"\"\"\n    将翻译后的文本段落重新插入到原始内容中，保持代码块不变。\n    \"\"\"\n    pattern = re.compile(r'```[\\s\\S]*?```', re.MULTILINE)\n    parts = pattern.findall(original_content)\n    result = \"\"\n    translated_iter = iter(translated_segments)\n    \n    splitted = pattern.split(original_content)\n    for i, part in enumerate(splitted):\n        translated_text = next(translated_iter, \"\")\n        result += translated_text + \"\\n\\n\"\n        if i < len(parts):\n            result += parts[i] + \"\\n\\n\"\n    return result.strip()\n\ndef translate_readme(input_file, output_dir):\n    # 创建翻译缓存并加载\n    cache_file = 'translation_cache.json'\n    translations = load_translation_cache(cache_file)\n    logging.info(f\"缓存文件 '{cache_file}' 加载完成，共有 {len(translations)} 条缓存记录。\")\n\n    # 初始化翻译器\n    translator = Translator(service_urls=['translate.google.com'])\n    logging.info(\"翻译器初始化完成。\")\n\n    # 读取 README.md 内容\n    with open(input_file, 'r', encoding='utf-8') as f:\n        content = f.read()\n    logging.info(f\"读取 '{input_file}' 完成，共 {len(content)} 个字符。\")\n\n    # 提取非代码块的文本段落\n    text_segments = extract_text_segments(content)\n    logging.info(f\"提取到 {len(text_segments)} 个文本段落。\")\n\n    # 定义目标语言\n    languages = {\n        'en': 'english',\n        'ru': 'russian',\n        'fa': 'persian'\n    }\n\n    # 获取源文件名\n    source_filename = os.path.basename(input_file)\n\n    for lang_code, lang_name in languages.items():\n        logging.info(f\"开始翻译到 {lang_name} ({lang_code})\")\n        translated_segments = []\n        for idx, segment in enumerate(text_segments, 1):\n            # 判断是否需要翻译\n            if should_translate(segment) and re.search(r'[\\u4e00-\\u9fff]', segment):\n                translated = translate_text(segment, lang_code, translator, translations)\n                translated_segments.append(translated)\n                logging.debug(f\"段落 {idx} 翻译为 {lang_name}：{translated}\")\n            else:\n                translated_segments.append(segment)\n                logging.debug(f\"段落 {idx} 不需要翻译，保持原样。\")\n        \n        # 重新组合内容，保留代码块\n        translated_content = replace_translation(content, translated_segments)\n        logging.info(f\"{lang_name} 翻译内容重新组合完成。\")\n\n        # 定义目标语言的目录\n        lang_dir = os.path.join(output_dir, 'languages', lang_code)\n        os.makedirs(lang_dir, exist_ok=True)\n\n        # 定义输出文件路径，保持与源文件名一致\n        output_file = os.path.join(lang_dir, source_filename)\n        with open(output_file, 'w', encoding='utf-8') as f:\n            f.write(translated_content)\n        logging.info(f\"{lang_name} 翻译完成，文件保存至: {output_file}\")\n\n    # 保存翻译缓存\n    save_translation_cache(cache_file, translations)\n    logging.info(\"所有翻译完成，并已保存缓存。\")\n\nif __name__ == \"__main__\":\n    input_readme = 'README.md'  # 源文件路径\n    output_directory = '.'      # 输出目录，可以根据需要修改\n    translate_readme(input_readme, output_directory) \n"
  }
]