diff --git a/scripts/lang/chs/2_settings.lang b/scripts/lang/chs/2_settings.lang index 935679a6..29a724f4 100644 --- a/scripts/lang/chs/2_settings.lang +++ b/scripts/lang/chs/2_settings.lang @@ -131,3 +131,33 @@ ADV_TABLE_INPUT="请输入路由表编号(不清楚请勿修改,建议 102-1 # ================================================= IPV6_REDIR="IPv6透明路由(劫持IPv6流量)" IPV6_DNS="IPv6-DNS解析(是否返回IPv6地址)" +SET_YES="是" +SET_NO_BACK="否,返回上级菜单" +SET_SKIP_CERT_NOW="当前" +SET_ENABLED="已启用" +SET_DISABLED="已禁用" +SET_SKIP_CERT_ENABLE_Q="跳过本地证书验证,是否确认启用?" +SET_SKIP_CERT_DISABLE_Q="跳过本地证书验证,是否确认禁用?" +SET_SNIFFER_NOW="当前" +SET_SNIFFER_ENABLE_Q="域名嗅探,是否确认启用?" +SET_SNIFFER_DISABLE_Q="域名嗅探,是否确认禁用?" +SET_LANG_ZH="简体中文" +SET_LANG_EN="English" +SET_SWITCH_RERUN="切换成功!请重新运行脚本!" +SET_SWITCH_OK="切换成功!" +SET_MODE_SUFFIX="模式" +SET_SET_TO="设为" +SET_BYPASS_TCP="TCP旁路转发" +SET_BYPASS_TU="T&U旁路转发" +SET_BYPASS_TCP_DESC="仅转发TCP流量至旁路由" +SET_BYPASS_TU_DESC="转发TCP&UDP流量至旁路由" +SET_FW_AREA_CURRENT="当前路由劫持范围:" +SET_WARN="注意:" +SET_DESC="说明:" +SET_BYPASS_WARN_1="此功能存在多种风险如无网络基础请勿尝试!" +SET_BYPASS_WARN_2="如需代理UDP,请确保旁路由运行了支持UDP代理的模式!" +SET_BYPASS_WARN_3="如使用systemd方式启动,内核依然会空载运行,建议使用保守模式!" +SET_BYPASS_DESC_1="此功能不启动内核仅配置防火墙转发,且子设备无需额外设置网关DNS" +SET_BYPASS_DESC_2="支持防火墙分流及设备过滤,支持部分定时任务,但不支持ipv6" +SET_INPUT_BYPASS_IPV4="请直接输入旁路由IPV4地址" +SET_TIPS_ENTER_BACK="Tips:直接回车确认可返回上级菜单" diff --git a/scripts/lang/chs/5_task.lang b/scripts/lang/chs/5_task.lang index 250e06db..4bc90172 100644 --- a/scripts/lang/chs/5_task.lang +++ b/scripts/lang/chs/5_task.lang @@ -4,3 +4,97 @@ TASK_RECOM_TITLE="是否启用以下推荐的自动任务配置:" TASK_RECOM_ITEM_1="运行时每10分钟自动保存面板配置" TASK_RECOM_ITEM_2="服务启动后自动同步 NTP 时间" TASK_RECOM_ITEM_3="在每日的3点0分重启服务" +TASK5_RUN_TASK="执行任务:" +TASK5_CONFIRM_ADD_CRON="是否确认添加定时任务?" +TASK5_YES="是" +TASK5_NO="否" +TASK5_TASK_PREFIX="任务【" +TASK5_TASK_ADDED="】\033[32m已添加!\033[0m" +TASK5_USER_ADD_HINT1="命令可包含空格,请确保命令可执行!" +TASK5_USER_ADD_HINT2="请勿附带执行条件,执行条件请在命令添加完成后再返回设置!" +TASK5_USER_ADD_HINT3="亦可手动编辑" +TASK5_USER_ADD_HINT4="以添加命令" +TASK5_INPUT_CMD="请直接输入命令语句" +TASK5_OR_BACK="或输入 0 返回上级菜单" +TASK5_INPUT="请输入" +TASK5_CHECK_INPUT="请检查输入:" +TASK5_INPUT_REMARK="请输入任务备注" +TASK5_CUSTOM_TASK="自定义任务" +TASK5_CUSTOM_ADDED="自定义任务已添加!" +TASK5_INPUT_ERROR="输入错误,请重新输入!" +TASK5_USER_DEL_HINT1="请输入对应ID移除对应自定义任务(不会影响内置任务)" +TASK5_USER_DEL_HINT2="也可以手动编辑" +TASK5_NO_CUSTOM_TASK="你暂未添加任何自定义任务" +TASK5_SELECT_ADD="请选择需要添加的任务:" +TASK5_SELECT_COND="请选择任务" +TASK5_SELECT_COND2="执行条件:" +TASK5_COND_1="定时任务\033[32m每周执行\033[0m" +TASK5_COND_2="定时任务\033[32m每日执行\033[0m" +TASK5_COND_3="定时任务\033[32m每小时执行\033[0m" +TASK5_COND_4="定时任务\033[32m每分钟执行\033[0m" +TASK5_WARN_LINE1=" - - - - - - - - -\033[31m注意\033[0m- - - - - - - - -" +TASK5_WARN_LINE2=" 逻辑水平不及格的请勿使用下方触发条件!" +TASK5_WARN_LINE3=" - - - - - - - - - - - - - - - - - - - -" +TASK5_COND_5="服务\033[33m启动前执行\033[0m" +TASK5_COND_6="服务\033[33m启动后执行\033[0m" +TASK5_COND_7="服务\033[33m运行时每分钟执行\033[0m" +TASK5_COND_8="防火墙服务\033[33m重启后执行\033[0m" +TASK5_WEEK_HINT1="输入 1~7 对应\033[33m每周的指定某天\033[0m运行(7=周日)" +TASK5_WEEK_HINT2="输入 1,4,0 代表\033[36m每周一、周四、周日\033[0m运行" +TASK5_WEEK_HINT3="输入 1~5 代表\033[36m周一至周五\033[0m运行" +TASK5_WEEK_INPUT="在每周哪天执行?" +TASK5_HOUR_INPUT1="想在该日的具体哪个小时执行?(0~23)" +TASK5_CRON_WEEK="在每周" +TASK5_CRON_WEEK2="的" +TASK5_OCLOCK="点整" +TASK5_DAY_HINT1="输入 1,7,15 代表\033[36m每到1,7,15点\033[0m运行" +TASK5_DAY_HINT2="输入 6~18 代表\033[36m早6点至晚18点间每小时\033[0m运行" +TASK5_HOUR_INPUT2="想在每日的具体哪个小时执行?(0~23)" +TASK5_MIN_INPUT="想在具体哪分钟执行?(0~59的整数)" +TASK5_CRON_DAY="在每日的" +TASK5_POINT="点" +TASK5_MINUTE="分" +TASK5_EVERY_HOUR_INPUT="想每隔多少小时执行一次?(1~23的整数)" +TASK5_EVERY="每隔" +TASK5_HOUR="小时" +TASK5_EVERY_MIN_INPUT="想每隔多少分钟执行一次?(1~59的整数)" +TASK5_MIN="分钟" +TASK5_BFSTART="服务启动前" +TASK5_AFSTART="服务启动后" +TASK5_RUNNING_HINT1="输入10即每隔10分钟运行一次,1440即每隔24小时运行一次" +TASK5_RUNNING_HINT2="大于60分钟的数值将按小时取整,且按当前时区记时" +TASK5_RUNNING_INPUT="想每隔多少分钟执行一次?(1~1440的整数)" +TASK5_RUNNING_PREFIX="运行时每" +TASK5_AFFW_HINT="该功能会将相关启动代码注入到/etc/init.d/firewall中" +TASK5_CONFIRM_CONTINUE="是否确认继续?" +TASK5_AFFW_PREFIX="防火墙重启后" +TASK5_GUARD_WORD="守护" +TASK5_OLD_PREFIX="旧版任务-" +TASK5_NONE_TO_MANAGE="当前没有可供管理的任务!" +TASK5_ADDED_TASKS="已添加的任务:" +TASK5_CLEAR_OLD="清空旧版任务" +TASK5_CLEAR_ALL="清空任务列表" +TASK5_OLD_CLEARED="旧版任务已清空!" +TASK5_ALL_CLEARED="全部任务已清空!" +TASK5_OLD_NOT_SUPPORT="旧版任务不支持管理,是否移除?" +TASK5_NO_BACK="否,返回上级菜单" +TASK5_CURRENT_TASK="当前任务为:" +TASK5_EDIT_TASK="\033[33m修改\033[0m当前任务" +TASK5_DEL_TASK="\033[31m删除\033[0m当前任务" +TASK5_RUN_ONCE="\033[32m立即执行\033[0m一次" +TASK5_VIEW_RECORD="查看\033[33m执行记录\033[0m" +TASK5_RUN_OK="执行成功!" +TASK5_RUN_FAIL="执行失败!" +TASK5_RECORD_NOT_FOUND="未找到相关执行记录!" +TASK5_USER_FILE_HEADER="#任务ID(必须>200并顺序排列)#任务命令#任务说明(#号隔开,任务命令和说明中都不允许包含#号)" +TASK5_MENU_TITLE="自动任务菜单" +TASK5_MENU_1="添加\033[32m自动任务\033[0m" +TASK5_MENU_2="管理\033[33m任务列表\033[0m" +TASK5_MENU_3="查看\033[36m任务日志\033[0m" +TASK5_MENU_4="配置\033[36m日志推送\033[0m" +TASK5_MENU_5="添加\033[33m自定义任务\033[0m" +TASK5_MENU_6="删除\033[33m自定义任务\033[0m" +TASK5_MENU_7="使用\033[32m推荐设置\033[0m" +TASK5_TASK_GREP="任务【" +TASK5_LOG_NOT_FOUND="未找到任务相关执行日志!" +TASK5_PUSH_HINT="请在日志工具中配置相关推送通道及推送开关" diff --git a/scripts/lang/chs/6_core_config.lang b/scripts/lang/chs/6_core_config.lang new file mode 100644 index 00000000..119c5154 --- /dev/null +++ b/scripts/lang/chs/6_core_config.lang @@ -0,0 +1,67 @@ +CORECFG_TITLE="配置文件管理" +CORECFG_HINT_SELECT_PROVIDER="输入数字可管理对应提供者" +CORECFG_MENU_A="\033[32m添加提供者\033[0m(支持订阅/分享链接及本地文件)" +CORECFG_MENU_B="\033[36m本地生成配置文件\033[0m" +CORECFG_MENU_C="\033[33m在线生成配置文件\033[0m" +CORECFG_MENU_D="\033[31m清空提供者列表\033[0m" +CORECFG_MENU_E="\033[36m自定义配置文件\033[0m" +CORECFG_CORE_ONLY="仅限Mihomo/singboxr内核使用,请更换内核!" +CORECFG_ADD_PROVIDER_FIRST="请先添加提供者!" +CORECFG_CLEAR_WARN="警告:这将删除所有提供者且无法还原!" +CORECFG_CLEAR_CONFIRM="是否确认清空提供者列表:" +CORECFG_YES="是" +CORECFG_NO="否" +CORECFG_NO_BACK="否,返回上级菜单" +CORECFG_INPUT_ALNUM="请输入对应字母或数字" +CORECFG_INPUT="请输入" +CORECFG_FILL_REQUIRED="请先完成必填选项!" +CORECFG_START_APPLY="是否启动服务以使配置文件生效:" +CORECFG_PROVIDER_SUPPORT="支持添加订阅链接/分享链接/本地文件作为提供者" +CORECFG_SET_NAME="设置\033[36m名称或代号\033[0m\t" +CORECFG_SET_LINK="设置\033[32m链接或路径\033[0m:\t" +CORECFG_SET_OVERRIDE="设置\033[33m本地生成覆写\033[0m" +CORECFG_SAVE_PROVIDER="\033[36m保存此提供者\033[0m" +CORECFG_DEL_PROVIDER="\033[31m删除此提供者\033[0m" +CORECFG_MORE_CONFIG_HINT="以下方式的详细配置请前往对应功能页面进行设置!" +CORECFG_GEN_LOCAL_ONE="\033[32m本地生成\033[0m仅包含此提供者的配置文件" +CORECFG_GEN_ONLINE_ONE="\033[33m在线生成\033[0m仅包含此提供者的配置文件" +CORECFG_GET_ONLINE_DIRECT="在线获取此配置文件(不使用订阅转换)" +CORECFG_USE_DIRECT="直接使用此文件作为配置文件(不使用本地生成)" +CORECFG_NAME_HINT="注意:\n名称或代号不可重复,不支持纯数字,且不要超过4个汉字!" +CORECFG_INPUT_NAME="请直接输入具体名称或代号" +CORECFG_OR_BACK="或输入 0 返回上级菜单" +CORECFG_LINK_HINT1="\033[33m订阅链接\033[0m:\nhttps/http开头的clash配置文件订阅链接" +CORECFG_LINK_HINT2="\033[36m分享链接\033[0m:" +CORECFG_LINK_HINT3="\033[33m本地文件\033[0m:\n必须放在" +CORECFG_LINK_HINT4="目录下" +CORECFG_LINK_HINT5="\033[36mBase64 \033[0m:\n请直接写入本地文件" +CORECFG_INPUT0_BACK="输入 0 返回上级菜单" +CORECFG_SELECT_FILE_OR_LINK="请选择对应文件或输入具体链接" +CORECFG_INPUT_LINK="请直接输入具体链接" +CORECFG_DANGER1="注意:\n此功能不兼容“跳过证书验证”功能" +CORECFG_DANGER2="请确认你完全理解自己在做什么" +CORECFG_DANGER_CONFIRM="我确认遇到问题可以自行解决" +CORECFG_INTERVAL1="设置\033[33m健康检查间隔\033[0m:\t" +CORECFG_INTERVAL2="设置\033[36m自动更新间隔\033[0m:\t" +CORECFG_MIN="分钟" +CORECFG_HOUR="小时" +CORECFG_SET_UA="设置\033[33m虚拟浏览器UA\033[0m:\t" +CORECFG_SET_EXCLUDE="设置\033[31m排除节点正则\033[0m:\t" +CORECFG_SET_INCLUDE="设置\033[32m包含节点正则\033[0m:\t" +CORECFG_CUR_INTERVAL="当前健康检查间隔:" +CORECFG_INPUT_INTERVAL1="请直接健康检查间隔(单位:分钟)" +CORECFG_RESET_INTERVAL1="或输入 r 重置健康检查间隔为默认值(3 分钟)" +CORECFG_INPUT_INTERVAL2="请直接输入自动更新间隔(单位:小时)" +CORECFG_RESET_INTERVAL2="或输入 r 重置自动更新间隔为默认值(12 小时)" +CORECFG_CUR_UA_NONE="当前浏览器UA:无" +CORECFG_CUR_UA="当前浏览器UA:" +CORECFG_INPUT_UA="请直接输入浏览器UA" +CORECFG_RESET_UA="或输入 r 重置浏览器UA为默认值(clash.meta)" +CORECFG_CUR_EXCLUDE_NONE="当前排除规则:无" +CORECFG_CUR_EXCLUDE="当前排除规则:" +CORECFG_INPUT_EXCLUDE="请直接输入需要排除的节点关键字(支持正则,不支持空格)" +CORECFG_CLEAR_EXCLUDE="或输入 c 清空排除规则" +CORECFG_CUR_INCLUDE_NONE="当前包含规则:无" +CORECFG_CUR_INCLUDE="当前包含规则:" +CORECFG_INPUT_INCLUDE="请直接输入需要包含的节点关键字(支持正则,不支持空格)" +CORECFG_CLEAR_INCLUDE="或输入 c 清空包含规则" diff --git a/scripts/lang/chs/7_gateway.lang b/scripts/lang/chs/7_gateway.lang new file mode 100644 index 00000000..b8027ade --- /dev/null +++ b/scripts/lang/chs/7_gateway.lang @@ -0,0 +1,16 @@ +GW_TITLE="访问与控制菜单" +GW_WARN="注意:" +GW_FW_VPS_HINT="如在vps运行,还需在vps安全策略对相关端口同时放行" +GW_FW_PORT_LIMIT="最多支持设置放行10个端口,请先减少一些!" +GW_INPUT_ALLOW_PORT="请输入要放行的端口号" +GW_OK="操作成功" +GW_CORE_UNSUPPORTED="内核暂不支持此功能,请先更换内核!" +GW_TG_DONE_PREFIX="已完成Telegram机器人设置!请使用" +GW_TG_DONE_SUFFIX="呼出功能菜单!" +GW_SET="已设置" +GW_BOUND="已绑定" +GW_INPUT_PORT_DEL0="请输入端口号(输入0删除)" +GW_INPUT_WSPATH="请输入ws-path路径(输入0删除)" +GW_INPUT_UUID="请输入UUID(输入0删除)" +GW_INPUT_HOST="请输入本机公网IP(4/6)或域名" +GW_SHARE_LINK_HINT="你的分享链接是(请勿随意分享给他人):" diff --git a/scripts/lang/chs/8_tools.lang b/scripts/lang/chs/8_tools.lang new file mode 100644 index 00000000..f455c3a6 --- /dev/null +++ b/scripts/lang/chs/8_tools.lang @@ -0,0 +1,11 @@ +TOOLS_TITLE="工具与优化" +TOOLS_SSH_DISABLE="禁止" +TOOLS_SSH_ENABLE="开启" +TOOLS_ERR_PORT="输入错误!请输入正确的数值(1000-65535)!" +TOOLS_ERR_PORT_OCCUPIED="当前端口已被其他进程占用,请重新输入!" +TOOLS_SSH_SET_OK="设置成功,请重新开启外网访问SSH功能!" +TOOLS_SSH_ENABLED="已开启外网访问SSH功能!" +TOOLS_SSH_DISABLED="已禁止外网访问SSH!" +TOOLS_DISABLE="禁用" +TOOLS_ENABLE="启用" +TOOLS_CONFIGURED="已配置" diff --git a/scripts/lang/chs/9_upgrade.lang b/scripts/lang/chs/9_upgrade.lang new file mode 100644 index 00000000..de0e17ce --- /dev/null +++ b/scripts/lang/chs/9_upgrade.lang @@ -0,0 +1,49 @@ +UPG_ERR_TRY_OTHER_SOURCE="请尝试切换至其他安装源后重新下载!" +UPG_ERR_LOCAL_INSTALL="或者参考 \033[32;4mhttps://juewuy.github.io/bdaz\033[0m 进行本地安装!" +UPG_TITLE="更新与支持" +UPG_CUR_DIR_SPACE="当前目录" +UPG_LOW_SPACE_HINT="当前目录剩余空间较低,建议开启小闪存模式!" +UPG_MENU_SCRIPT="更新" +UPG_MENU_SCRIPT_NAME="管理脚本" +UPG_MENU_CORE="切换/更新" +UPG_MENU_CORE_NAME="内核文件" +UPG_MENU_GEO="安装/更新本地" +UPG_MENU_GEO_NAME="数据库文件" +UPG_MENU_DB="安装/更新本地" +UPG_MENU_DB_NAME="Dashboard面板" +UPG_MENU_CRT="安装/更新本地" +UPG_MENU_CRT_NAME="根证书文件" +UPG_MENU_PAC="自动代理查看" +UPG_MENU_SOURCE="切换" +UPG_MENU_SOURCE_NAME="安装源及版本分支" +UPG_MENU_UNINSTALL="卸载ShellCrash" +UPG_MENU_THANKS="感谢列表!" +UPG_PAC_LINK="PAC配置链接为:" +UPG_PAC_GUIDE="PAC的使用教程请参考:" +UPG_THANKS_TITLE="感谢以下项目及其开发者们的无私奉献!" +UPG_THANKS_SPECIAL="特别感谢:\033[36m所有帮助及赞助过此项目的同仁们!\033[0m" +UPG_CHECKING="正在检查更新......" +UPG_CHECK_OK="检查更新成功" +UPG_CHECK_FAIL="检查更新失败!请尝试切换其他安装源!" +UPG_DOWNLOAD_FAIL="文件下载失败!" +UPG_EXTRACTING="开始解压文件......" +UPG_EXTRACT_FAIL="文件解压失败!" +UPG_SCRIPT_OK="脚本更新成功!" +UPG_SCRIPT_WARN="注意:更新时会停止服务!" +UPG_SCRIPT_CUR_VER="当前脚本版本为:" +UPG_SCRIPT_NEW_VER="最新脚本版本为:" +UPG_UPDATE_NOW="立即更新" +UPG_SCRIPT_MGR_OK="管理脚本更新成功!" +UPG_CPUCORE_HINT1="仅适合脚本无法正确识别核心或核心无法正常运行时使用!" +UPG_CPUCORE_HINT2="不知道如何获取核心版本?" +UPG_CPUCORE_HINT3="请参考:" +UPG_CPUCORE_LIST="当前可供在线下载的处理器架构为:" +UPG_CPUCORE_ERR="请输入正确的处理器架构!" +UPG_CORETYPE_CONFIRM="请确认该自定义内核的类型:" +UPG_CORE_SWITCH_PREFIX="已从" +UPG_CORE_SWITCH_MID="内核切换至" +UPG_CORE_SWITCH_SUFFIX="内核" +UPG_CORE_SWITCH_WARN="二者Geo数据库及yaml/json配置文件不通用" +UPG_CORE_SWITCH_KEEP="是否保留相关数据库文件?" +UPG_KEEP="保留" +UPG_NOT_KEEP="不保留" diff --git a/scripts/lang/chs/dns.lang b/scripts/lang/chs/dns.lang index b37f6c6d..6e05e673 100644 --- a/scripts/lang/chs/dns.lang +++ b/scripts/lang/chs/dns.lang @@ -50,3 +50,34 @@ DNS_IPV6_NOT_SUPPORT="该选项暂不支持IPv6加密DNS!" DNS_ENCRYPT_OK="已设置加密DNS,如遇DNS解析问题,请重置DNS配置!" DNS_CORE_REQUIRE="请使用Mihomo或SingBox内核" +DNS_SET_TO="设为" +DNS_PROTECT_NOW="当前" +DNS_HOSTS_NOW="当前" +DNS_ENABLED="已启用" +DNS_DISABLED="已禁用" +DNS_PROTECT_DISABLE_Q="DNS防泄漏,是否确认禁用?" +DNS_PROTECT_ENABLE_Q="DNS防泄漏,是否确认启用?" +DNS_HOSTS_DISABLE_Q="Hosts优化,是否确认禁用?" +DNS_HOSTS_ENABLE_Q="Hosts优化,是否确认启用?" +DNS_YES="是" +DNS_RESET_DEFAULT="重置为默认值" +DNS_NO_BACK="否,返回上级菜单" +DNS_REMOVE_OK="移除成功" +DNS_REMOVE_FAIL="移除失败" +DNS_INPUT_REDIR_PORT="请直接输入旁路由IPV4地址" +DNS_INPUT_REDIR_RESET="或输入 r 重置DNS劫持端口" +DNS_INPUT_REDIR_BACK="或输入 0 返回上级菜单" +DNS_INPUT="请输入" +DNS_CONFIRM_ADD="请确认需要添加的地址:" +DNS_CONFIRM_OK="确认无误" +DNS_ADD_OK="添加成功" +DNS_ADD_FAIL="添加失败" +DNS_DIRECT_NOW="当前DIRECT-DNS:" +DNS_PROXY_NOW="当前PROXY-DNS:" +DNS_DEFAULT_NOW="当前DEFAULT-DNS:" +DNS_INPUT_DIRECT_NEW="请直接输入新的DIRECT-DNS地址" +DNS_INPUT_DIRECT_RESET="或输入 r 重置DIRECT-DNS地址" +DNS_INPUT_PROXY_NEW="请直接输入新的PROXY-DNS地址" +DNS_INPUT_PROXY_RESET="或输入 r 重置PROXY-DNS地址" +DNS_INPUT_DEFAULT_NEW="请直接输入新的DEFAULT-DNS地址" +DNS_INPUT_DEFAULT_RESET="或输入 r 重置DEFAULT-DNS地址" diff --git a/scripts/lang/chs/setboot.lang b/scripts/lang/chs/setboot.lang new file mode 100644 index 00000000..58c5034c --- /dev/null +++ b/scripts/lang/chs/setboot.lang @@ -0,0 +1,52 @@ +SETBOOT_NOT_SET="未设置" +SETBOOT_SECOND="秒" +SETBOOT_TITLE="启动设置菜单" +SETBOOT_ITEM_AUTO="开机自启动:" +SETBOOT_ITEM_OLD="使用保守模式:" +SETBOOT_ITEM_OLD_DESC="———基于定时任务(每分钟检测)" +SETBOOT_ITEM_DELAY="设置自启延时:" +SETBOOT_ITEM_DELAY_DESC="———用于解决自启后服务受限" +SETBOOT_ITEM_MINI="启用小闪存模式:" +SETBOOT_ITEM_MINI_DESC="———用于闪存空间不足的设备" +SETBOOT_ITEM_MINI_DIR="设置小闪存目录:" +SETBOOT_ITEM_NETCHK="自启网络检查:" +SETBOOT_ITEM_NETCHK_DESC="———禁用则跳过自启时网络检查" +SETBOOT_VIEW_LOG="查看启动日志" +SETBOOT_AUTO_OFF="已禁止ShellCrash开机自启动!" +SETBOOT_AUTO_ON="已设置ShellCrash开机自启动!" +SETBOOT_CRON_INIT="ShellCrash初始化" +SETBOOT_OLDMODE_ON="改为使用保守模式启动服务!" +SETBOOT_OLDMODE_OFF="改为使用系统守护进程启动服务!" +SETBOOT_MODE_UNSUPPORTED="当前设备不支持以其他模式启动!" +SETBOOT_DELAY_HINT1="如果你的设备启动后可以正常使用,则无需设置!" +SETBOOT_DELAY_HINT2="推荐设置为30~120秒之间,请根据设备问题自行试验" +SETBOOT_DELAY_INPUT="请输入启动延迟时间(0~300秒)" +SETBOOT_SET_OK="设置成功!" +SETBOOT_DELAY_INVALID="输入有误,或超过300秒,请重新输入!" +SETBOOT_MINI_NEEDED_NO="您的设备空间充足(>20M),无需开启!" +SETBOOT_SYSTEMD_WARN="不支持systemd启动模式,请先启用保守模式!" +SETBOOT_MINI_ENABLED="已经启用小闪存功能!" +SETBOOT_MINI_DIR_HINT="如需更换目录,请使用【设置小闪存目录】功能" +SETBOOT_MINI_DISABLE_WARN="您的设备剩余空间不足8M,停用后可能无法正常运行!" +SETBOOT_MINI_DISABLE_CONFIRM="是否确认停用此功能?" +SETBOOT_YES="是" +SETBOOT_NO_BACK="否,返回上级菜单" +SETBOOT_MINI_DISABLED="已经停用小闪存功能!" +SETBOOT_BINDIR_HINT1="如设置到内存,则每次开机后都自动重新下载相关文件" +SETBOOT_BINDIR_HINT2="请确保安装源可用裸连,否则会导致启动失败" +SETBOOT_BINDIR_TMP="使用内存(/tmp)" +SETBOOT_BINDIR_USB="选择U盘目录" +SETBOOT_BINDIR_CUSTOM="自定义目录" +SETBOOT_SELECT_INSTALL_DIR="请选择安装目录:" +SETBOOT_SPACE_USED="已占用的储存空间:" +SETBOOT_INPUT_ERROR="输入错误!请重新设置!" +SETBOOT_INPUT_CMD="请直接输入命令语句" +SETBOOT_INPUT_OR_BACK="或输入 0 返回上级菜单" +SETBOOT_INPUT="请输入" +SETBOOT_NETCHK_HINT1="如果你的设备启动后可以正常使用,则无需变更设置!" +SETBOOT_NETCHK_HINT2="禁用时,如果使用了小闪存模式或者rule-set等在线规则,则可能会因无法联网而导致启动失败!" +SETBOOT_NETCHK_HINT3="启用时,会导致部分性能较差或者拨号较慢的设备可能会因查询超时导致启动失败!" +SETBOOT_NETCHK_OFF_CONFIRM="当前\033[33m已禁用\033[0m自启网络检查,是否确认启用?" +SETBOOT_NETCHK_ON_CONFIRM="当前\033[33m已启用\033[0m自启网络检查,是否确认禁用?" +SETBOOT_TASK_WORD="任务" +SETBOOT_LOG_NOT_FOUND="未找到相关日志!" diff --git a/scripts/lang/chs/userguide.lang b/scripts/lang/chs/userguide.lang index 4e98c3e9..4a8d255d 100644 --- a/scripts/lang/chs/userguide.lang +++ b/scripts/lang/chs/userguide.lang @@ -12,3 +12,6 @@ UG_IMPORT_CONFIG="这是运行前的最后一步" UG_CONFIG_TIP="你必须拥有一份配置文件才能运行服务!" UG_CONFIG_RES="是否立即导入配置文件?" UG_FINAL_TIP="很好!现在只需要执行启动就可以愉快的使用了!" + +UG_IMPORT_NOW="立即导入" +UG_IMPORT_LATER="暂不导入" diff --git a/scripts/lang/en/2_settings.lang b/scripts/lang/en/2_settings.lang index 46c2a751..5fcb929a 100644 --- a/scripts/lang/en/2_settings.lang +++ b/scripts/lang/en/2_settings.lang @@ -126,3 +126,33 @@ ADV_TABLE_INPUT="Please enter the routing table ID (do not modify unless necessa # ================================================= IPV6_REDIR="IPv6 Transparent Routing (Hijack IPv6 Traffic)" IPV6_DNS="IPv6 DNS Resolution (Return IPv6 addresses)" +SET_YES="Yes" +SET_NO_BACK="No, back" +SET_SKIP_CERT_NOW="Current status: " +SET_ENABLED="enabled" +SET_DISABLED="disabled" +SET_SKIP_CERT_ENABLE_Q=" skip local certificate verification. Enable now?" +SET_SKIP_CERT_DISABLE_Q=" skip local certificate verification. Disable now?" +SET_SNIFFER_NOW="Current status: " +SET_SNIFFER_ENABLE_Q=" domain sniffer. Enable now?" +SET_SNIFFER_DISABLE_Q=" domain sniffer. Disable now?" +SET_LANG_ZH="简体中文" +SET_LANG_EN="English" +SET_SWITCH_RERUN="Switched successfully! Please re-run the script!" +SET_SWITCH_OK="Switched successfully!" +SET_MODE_SUFFIX="mode" +SET_SET_TO="Set to " +SET_BYPASS_TCP="TCP bypass forwarding" +SET_BYPASS_TU="TCP&UDP bypass forwarding" +SET_BYPASS_TCP_DESC="forward TCP traffic only to bypass router" +SET_BYPASS_TU_DESC="forward TCP&UDP traffic to bypass router" +SET_FW_AREA_CURRENT="Current hijack scope: " +SET_WARN="Notice:" +SET_DESC="Description:" +SET_BYPASS_WARN_1="This feature has risks. Do not use without network knowledge!" +SET_BYPASS_WARN_2="For UDP proxy, ensure bypass router runs a UDP-capable mode!" +SET_BYPASS_WARN_3="With systemd startup, core still runs idle. Conservative mode is recommended!" +SET_BYPASS_DESC_1="This mode does not start core; it only configures firewall forwarding and downstream devices need no extra gateway/DNS setup" +SET_BYPASS_DESC_2="Supports firewall routing split and device filtering, supports some cron tasks, but not IPv6" +SET_INPUT_BYPASS_IPV4="Please enter bypass-router IPv4 address" +SET_TIPS_ENTER_BACK="Tip: press Enter directly to return" diff --git a/scripts/lang/en/5_task.lang b/scripts/lang/en/5_task.lang index bb612a45..556cbff9 100644 --- a/scripts/lang/en/5_task.lang +++ b/scripts/lang/en/5_task.lang @@ -4,3 +4,97 @@ TASK_RECOM_TITLE="Enable the following recommended automatic tasks?" TASK_RECOM_ITEM_1="Save Dashboard select every 10 minutes" TASK_RECOM_ITEM_2="Synchronize NTP after service startup" TASK_RECOM_ITEM_3="Daily service restart at 03:00" +TASK5_RUN_TASK=" run task: " +TASK5_CONFIRM_ADD_CRON="Confirm adding scheduled task?" +TASK5_YES="Yes" +TASK5_NO="No" +TASK5_TASK_PREFIX="Task [" +TASK5_TASK_ADDED="] \033[32madded!\033[0m" +TASK5_USER_ADD_HINT1="Command may contain spaces, please ensure it is executable!" +TASK5_USER_ADD_HINT2="Do not append conditions. Set conditions after adding command." +TASK5_USER_ADD_HINT3="You can also edit " +TASK5_USER_ADD_HINT4=" manually to add commands" +TASK5_INPUT_CMD="Please input command directly" +TASK5_OR_BACK="Or input 0 to return" +TASK5_INPUT="Please enter" +TASK5_CHECK_INPUT="Please check input: " +TASK5_INPUT_REMARK="Please enter task remark" +TASK5_CUSTOM_TASK="custom_task_" +TASK5_CUSTOM_ADDED="Custom task added!" +TASK5_INPUT_ERROR="Invalid input, please retry!" +TASK5_USER_DEL_HINT1="Input ID to remove custom task (built-in tasks won't be affected)" +TASK5_USER_DEL_HINT2="You may also edit " +TASK5_NO_CUSTOM_TASK="No custom task has been added yet" +TASK5_SELECT_ADD="Please select task to add:" +TASK5_SELECT_COND="Select execution condition for task " +TASK5_SELECT_COND2=":" +TASK5_COND_1="Scheduled task \033[32mweekly\033[0m" +TASK5_COND_2="Scheduled task \033[32mdaily\033[0m" +TASK5_COND_3="Scheduled task \033[32mhourly\033[0m" +TASK5_COND_4="Scheduled task \033[32mminutely\033[0m" +TASK5_WARN_LINE1=" --------- \033[31mWARNING\033[0m ---------" +TASK5_WARN_LINE2=" Do not use advanced triggers unless you know what you are doing!" +TASK5_WARN_LINE3=" ----------------------------------------" +TASK5_COND_5="Service \033[33mbefore start\033[0m" +TASK5_COND_6="Service \033[33mafter start\033[0m" +TASK5_COND_7="Service \033[33mrun every minute\033[0m" +TASK5_COND_8="After firewall service \033[33mrestart\033[0m" +TASK5_WEEK_HINT1="Input 1~7 for day of week (7=Sunday)" +TASK5_WEEK_HINT2="Input like 1,4,0 for Monday/Thursday/Sunday" +TASK5_WEEK_HINT3="Input 1~5 for Monday to Friday" +TASK5_WEEK_INPUT="Run on which weekday" +TASK5_HOUR_INPUT1="Run at which hour of that day (0~23)" +TASK5_CRON_WEEK="Weekly " +TASK5_CRON_WEEK2=" @ " +TASK5_OCLOCK=":00" +TASK5_DAY_HINT1="Input 1,7,15 for run at 1/7/15 o'clock" +TASK5_DAY_HINT2="Input 6~18 for every hour between 6 and 18" +TASK5_HOUR_INPUT2="Run at which hour daily (0~23)" +TASK5_MIN_INPUT="Run at which minute (0~59)" +TASK5_CRON_DAY="Daily " +TASK5_POINT=":" +TASK5_MINUTE="" +TASK5_EVERY_HOUR_INPUT="Run every how many hours (1~23)" +TASK5_EVERY="Every " +TASK5_HOUR=" hour(s)" +TASK5_EVERY_MIN_INPUT="Run every how many minutes (1~59)" +TASK5_MIN=" minute(s)" +TASK5_BFSTART="Before service start " +TASK5_AFSTART="After service start " +TASK5_RUNNING_HINT1="Input 10 for every 10 mins, 1440 for every 24 hrs" +TASK5_RUNNING_HINT2="Values >60 mins will be rounded by hour under current timezone" +TASK5_RUNNING_INPUT="Run every how many minutes (1~1440)" +TASK5_RUNNING_PREFIX="During runtime every " +TASK5_AFFW_HINT="This will inject startup code into /etc/init.d/firewall" +TASK5_CONFIRM_CONTINUE="Continue?" +TASK5_AFFW_PREFIX="After firewall restart " +TASK5_GUARD_WORD="guard" +TASK5_OLD_PREFIX="legacy-" +TASK5_NONE_TO_MANAGE="No task available to manage!" +TASK5_ADDED_TASKS="Added tasks:" +TASK5_CLEAR_OLD="Clear legacy tasks" +TASK5_CLEAR_ALL="Clear task list" +TASK5_OLD_CLEARED="Legacy tasks cleared!" +TASK5_ALL_CLEARED="All tasks cleared!" +TASK5_OLD_NOT_SUPPORT="Legacy tasks cannot be managed, remove them?" +TASK5_NO_BACK="No, return" +TASK5_CURRENT_TASK="Current task: " +TASK5_EDIT_TASK="\033[33mEdit\033[0m current task" +TASK5_DEL_TASK="\033[31mDelete\033[0m current task" +TASK5_RUN_ONCE="\033[32mRun once\033[0m now" +TASK5_VIEW_RECORD="View \033[33mexecution record\033[0m" +TASK5_RUN_OK="success!" +TASK5_RUN_FAIL="failed!" +TASK5_RECORD_NOT_FOUND="No execution record found!" +TASK5_USER_FILE_HEADER="#task_id(>200 in order)#task_command#task_desc(no # in cmd or desc)" +TASK5_MENU_TITLE="Scheduled Tasks" +TASK5_MENU_1="Add \033[32mautomatic task\033[0m" +TASK5_MENU_2="Manage \033[33mtask list\033[0m" +TASK5_MENU_3="View \033[36mtask logs\033[0m" +TASK5_MENU_4="Configure \033[36mlog push\033[0m" +TASK5_MENU_5="Add \033[33mcustom task\033[0m" +TASK5_MENU_6="Delete \033[33mcustom task\033[0m" +TASK5_MENU_7="Use \033[32mrecommended settings\033[0m" +TASK5_TASK_GREP="Task [" +TASK5_LOG_NOT_FOUND="No task-related log found!" +TASK5_PUSH_HINT="Please configure push channel and switch in log tools" diff --git a/scripts/lang/en/6_core_config.lang b/scripts/lang/en/6_core_config.lang new file mode 100644 index 00000000..ddb83ebe --- /dev/null +++ b/scripts/lang/en/6_core_config.lang @@ -0,0 +1,67 @@ +CORECFG_TITLE="Configuration Management" +CORECFG_HINT_SELECT_PROVIDER="Input a number to manage corresponding provider" +CORECFG_MENU_A="\033[32mAdd provider\033[0m (subscription/share link/local file)" +CORECFG_MENU_B="\033[36mGenerate local config\033[0m" +CORECFG_MENU_C="\033[33mGenerate online config\033[0m" +CORECFG_MENU_D="\033[31mClear provider list\033[0m" +CORECFG_MENU_E="\033[36mCustom config file\033[0m" +CORECFG_CORE_ONLY="Only for Mihomo/singboxr core, please switch core!" +CORECFG_ADD_PROVIDER_FIRST="Please add provider first!" +CORECFG_CLEAR_WARN="Warning: this will delete all providers and cannot be undone!" +CORECFG_CLEAR_CONFIRM="Confirm clearing provider list:" +CORECFG_YES="Yes" +CORECFG_NO="No" +CORECFG_NO_BACK="No, return" +CORECFG_INPUT_ALNUM="Please input letter or number" +CORECFG_INPUT="Please enter" +CORECFG_FILL_REQUIRED="Please complete required fields first!" +CORECFG_START_APPLY="Start service to apply config now?" +CORECFG_PROVIDER_SUPPORT="Supports adding subscription/share link/local file as provider" +CORECFG_SET_NAME="Set \033[36mname/alias\033[0m\t" +CORECFG_SET_LINK="Set \033[32mlink/path\033[0m:\t" +CORECFG_SET_OVERRIDE="Set \033[33mlocal generation override\033[0m" +CORECFG_SAVE_PROVIDER="\033[36mSave this provider\033[0m" +CORECFG_DEL_PROVIDER="\033[31mDelete this provider\033[0m" +CORECFG_MORE_CONFIG_HINT="For detailed settings below, go to corresponding feature page." +CORECFG_GEN_LOCAL_ONE="\033[32mLocal generate\033[0m config with this provider only" +CORECFG_GEN_ONLINE_ONE="\033[33mOnline generate\033[0m config with this provider only" +CORECFG_GET_ONLINE_DIRECT="Fetch this config online directly (without conversion)" +CORECFG_USE_DIRECT="Use this file directly as config (without local generation)" +CORECFG_NAME_HINT="Note:\nName/alias cannot duplicate, cannot be pure digits, and should not be too long!" +CORECFG_INPUT_NAME="Please input name/alias" +CORECFG_OR_BACK="or input 0 to return" +CORECFG_LINK_HINT1="\033[33mSubscription link\033[0m:\nClash config subscription URL starting with https/http" +CORECFG_LINK_HINT2="\033[36mShare link\033[0m:" +CORECFG_LINK_HINT3="\033[33mLocal file\033[0m:\nMust be placed under " +CORECFG_LINK_HINT4="" +CORECFG_LINK_HINT5="\033[36mBase64 \033[0m:\nPlease write to local file directly" +CORECFG_INPUT0_BACK="Input 0 to return" +CORECFG_SELECT_FILE_OR_LINK="Select file or input link" +CORECFG_INPUT_LINK="Please input link directly" +CORECFG_DANGER1="Warning:\nThis feature is incompatible with skip certificate verification" +CORECFG_DANGER2="Please make sure you fully understand what you are doing" +CORECFG_DANGER_CONFIRM="I confirm I can troubleshoot by myself" +CORECFG_INTERVAL1="Set \033[33mhealth-check interval\033[0m:\t" +CORECFG_INTERVAL2="Set \033[36mauto-update interval\033[0m:\t" +CORECFG_MIN="min" +CORECFG_HOUR="hour" +CORECFG_SET_UA="Set \033[33mbrowser UA\033[0m:\t" +CORECFG_SET_EXCLUDE="Set \033[31mexclude regex\033[0m:\t" +CORECFG_SET_INCLUDE="Set \033[32minclude regex\033[0m:\t" +CORECFG_CUR_INTERVAL="Current health-check interval:" +CORECFG_INPUT_INTERVAL1="Input health-check interval (minutes)" +CORECFG_RESET_INTERVAL1="or input r to reset to default (3 min)" +CORECFG_INPUT_INTERVAL2="Input auto-update interval (hours)" +CORECFG_RESET_INTERVAL2="or input r to reset to default (12 hours)" +CORECFG_CUR_UA_NONE="Current browser UA: none" +CORECFG_CUR_UA="Current browser UA: " +CORECFG_INPUT_UA="Input browser UA" +CORECFG_RESET_UA="or input r to reset UA to default (clash.meta)" +CORECFG_CUR_EXCLUDE_NONE="Current exclude rule: none" +CORECFG_CUR_EXCLUDE="Current exclude rule: " +CORECFG_INPUT_EXCLUDE="Input exclude keyword(s) (regex supported, no spaces)" +CORECFG_CLEAR_EXCLUDE="or input c to clear exclude rule" +CORECFG_CUR_INCLUDE_NONE="Current include rule: none" +CORECFG_CUR_INCLUDE="Current include rule: " +CORECFG_INPUT_INCLUDE="Input include keyword(s) (regex supported, no spaces)" +CORECFG_CLEAR_INCLUDE="or input c to clear include rule" diff --git a/scripts/lang/en/7_gateway.lang b/scripts/lang/en/7_gateway.lang new file mode 100644 index 00000000..1dbc59fe --- /dev/null +++ b/scripts/lang/en/7_gateway.lang @@ -0,0 +1,16 @@ +GW_TITLE="Access & Control Menu" +GW_WARN="Notice: " +GW_FW_VPS_HINT="If running on a VPS, also allow related ports in your VPS security policy." +GW_FW_PORT_LIMIT="Up to 10 allowed ports are supported. Please remove some first." +GW_INPUT_ALLOW_PORT="Enter the port to allow" +GW_OK="Done" +GW_CORE_UNSUPPORTED=" core does not support this feature yet, please switch core first!" +GW_TG_DONE_PREFIX="Telegram bot setup completed! Use" +GW_TG_DONE_SUFFIX="to open the function menu!" +GW_SET="Configured" +GW_BOUND="Bound" +GW_INPUT_PORT_DEL0="Enter port (0 to delete)" +GW_INPUT_WSPATH="Enter ws-path (0 to delete)" +GW_INPUT_UUID="Enter UUID (0 to delete)" +GW_INPUT_HOST="Enter your public IP (v4/v6) or domain" +GW_SHARE_LINK_HINT="Your share link (do not share casually):" diff --git a/scripts/lang/en/8_tools.lang b/scripts/lang/en/8_tools.lang new file mode 100644 index 00000000..a2df1dc8 --- /dev/null +++ b/scripts/lang/en/8_tools.lang @@ -0,0 +1,11 @@ +TOOLS_TITLE="Tools & Optimization" +TOOLS_SSH_DISABLE="Disable" +TOOLS_SSH_ENABLE="Enable" +TOOLS_ERR_PORT="Invalid input! Please enter a valid number (1000-65535)!" +TOOLS_ERR_PORT_OCCUPIED="This port is occupied by another process, please try another one!" +TOOLS_SSH_SET_OK="Set successfully, please re-enable WAN SSH access!" +TOOLS_SSH_ENABLED="WAN SSH access enabled!" +TOOLS_SSH_DISABLED="WAN SSH access disabled!" +TOOLS_DISABLE="Disable" +TOOLS_ENABLE="Enable" +TOOLS_CONFIGURED="Configured" diff --git a/scripts/lang/en/9_upgrade.lang b/scripts/lang/en/9_upgrade.lang new file mode 100644 index 00000000..fab88b26 --- /dev/null +++ b/scripts/lang/en/9_upgrade.lang @@ -0,0 +1,49 @@ +UPG_ERR_TRY_OTHER_SOURCE="Please switch to another source and try downloading again!" +UPG_ERR_LOCAL_INSTALL="Or refer to \033[32;4mhttps://juewuy.github.io/bdaz\033[0m for local installation!" +UPG_TITLE="Update & Support" +UPG_CUR_DIR_SPACE="Current directory" +UPG_LOW_SPACE_HINT="Low free space in current directory, consider enabling low-flash mode!" +UPG_MENU_SCRIPT="Update " +UPG_MENU_SCRIPT_NAME="script" +UPG_MENU_CORE="Switch/Update " +UPG_MENU_CORE_NAME="core" +UPG_MENU_GEO="Install/Update local " +UPG_MENU_GEO_NAME="database files" +UPG_MENU_DB="Install/Update local " +UPG_MENU_DB_NAME="Dashboard" +UPG_MENU_CRT="Install/Update local " +UPG_MENU_CRT_NAME="certificates" +UPG_MENU_PAC=" proxy view" +UPG_MENU_SOURCE="Switch " +UPG_MENU_SOURCE_NAME="source and branch" +UPG_MENU_UNINSTALL="Uninstall ShellCrash" +UPG_MENU_THANKS="Thanks list" +UPG_PAC_LINK="PAC URL: " +UPG_PAC_GUIDE="PAC guide: " +UPG_THANKS_TITLE="Thanks to the following projects and developers!" +UPG_THANKS_SPECIAL="Special thanks: \033[36mall contributors and sponsors!\033[0m" +UPG_CHECKING="Checking updates..." +UPG_CHECK_OK="Update check succeeded" +UPG_CHECK_FAIL="Update check failed! Please switch source and retry!" +UPG_DOWNLOAD_FAIL="Download failed!" +UPG_EXTRACTING="Extracting files..." +UPG_EXTRACT_FAIL="Extraction failed!" +UPG_SCRIPT_OK="Script update succeeded!" +UPG_SCRIPT_WARN="Note: service will be stopped during update!" +UPG_SCRIPT_CUR_VER="Current script version: " +UPG_SCRIPT_NEW_VER="Latest script version: " +UPG_UPDATE_NOW="Update now" +UPG_SCRIPT_MGR_OK="Manager script updated successfully!" +UPG_CPUCORE_HINT1="Use only when CPU architecture detection fails or core cannot run!" +UPG_CPUCORE_HINT2="Not sure how to get core arch?" +UPG_CPUCORE_HINT3="Refer to: " +UPG_CPUCORE_LIST="Available online CPU architectures:" +UPG_CPUCORE_ERR="Please enter a valid CPU architecture!" +UPG_CORETYPE_CONFIRM="Please confirm custom core type:" +UPG_CORE_SWITCH_PREFIX="Switched from " +UPG_CORE_SWITCH_MID=" to " +UPG_CORE_SWITCH_SUFFIX=" core" +UPG_CORE_SWITCH_WARN="Geo DB and yaml/json configs are not compatible between the two cores" +UPG_CORE_SWITCH_KEEP="Keep related database files?" +UPG_KEEP="Keep" +UPG_NOT_KEEP="Do not keep" diff --git a/scripts/lang/en/dns.lang b/scripts/lang/en/dns.lang index 146c20ce..d2578ec5 100644 --- a/scripts/lang/en/dns.lang +++ b/scripts/lang/en/dns.lang @@ -52,3 +52,34 @@ DNS_IPV6_NOT_SUPPORT="This option does not support IPv6 encrypted DNS!" DNS_ENCRYPT_OK="Encrypted DNS has been configured. If DNS issues occur, please reset DNS settings." DNS_CORE_REQUIRE="Please use the Mihomo or SingBox core" +DNS_SET_TO="Set to" +DNS_PROTECT_NOW="Current status: " +DNS_HOSTS_NOW="Current status: " +DNS_ENABLED="enabled" +DNS_DISABLED="disabled" +DNS_PROTECT_DISABLE_Q=" DNS leak protection. Disable now?" +DNS_PROTECT_ENABLE_Q=" DNS leak protection. Enable now?" +DNS_HOSTS_DISABLE_Q=" Hosts optimization. Disable now?" +DNS_HOSTS_ENABLE_Q=" Hosts optimization. Enable now?" +DNS_YES="Yes" +DNS_RESET_DEFAULT="Reset to defaults" +DNS_NO_BACK="No, back" +DNS_REMOVE_OK="Removed successfully" +DNS_REMOVE_FAIL="Remove failed" +DNS_INPUT_REDIR_PORT="Please input bypass-router IPv4 address" +DNS_INPUT_REDIR_RESET="or input r to reset DNS redirect port" +DNS_INPUT_REDIR_BACK="or input 0 to go back" +DNS_INPUT="Please enter" +DNS_CONFIRM_ADD="Please confirm the address to add: " +DNS_CONFIRM_OK="Confirm" +DNS_ADD_OK="Added successfully" +DNS_ADD_FAIL="Add failed" +DNS_DIRECT_NOW="Current DIRECT-DNS: " +DNS_PROXY_NOW="Current PROXY-DNS: " +DNS_DEFAULT_NOW="Current DEFAULT-DNS: " +DNS_INPUT_DIRECT_NEW="Please input new DIRECT-DNS" +DNS_INPUT_DIRECT_RESET="or input r to reset DIRECT-DNS" +DNS_INPUT_PROXY_NEW="Please input new PROXY-DNS" +DNS_INPUT_PROXY_RESET="or input r to reset PROXY-DNS" +DNS_INPUT_DEFAULT_NEW="Please input new DEFAULT-DNS" +DNS_INPUT_DEFAULT_RESET="or input r to reset DEFAULT-DNS" diff --git a/scripts/lang/en/setboot.lang b/scripts/lang/en/setboot.lang new file mode 100644 index 00000000..1ca36e37 --- /dev/null +++ b/scripts/lang/en/setboot.lang @@ -0,0 +1,52 @@ +SETBOOT_NOT_SET="Not set" +SETBOOT_SECOND="s" +SETBOOT_TITLE="Startup Settings" +SETBOOT_ITEM_AUTO="Autostart:" +SETBOOT_ITEM_OLD="Conservative mode:" +SETBOOT_ITEM_OLD_DESC="--- cron based check (every minute)" +SETBOOT_ITEM_DELAY="Startup delay:" +SETBOOT_ITEM_DELAY_DESC="--- helps when service is restricted right after boot" +SETBOOT_ITEM_MINI="Low-flash mode:" +SETBOOT_ITEM_MINI_DESC="--- for devices with limited flash space" +SETBOOT_ITEM_MINI_DIR="Low-flash directory:" +SETBOOT_ITEM_NETCHK="Startup network check:" +SETBOOT_ITEM_NETCHK_DESC="--- disable to skip network check on startup" +SETBOOT_VIEW_LOG="View startup logs" +SETBOOT_AUTO_OFF="ShellCrash autostart disabled!" +SETBOOT_AUTO_ON="ShellCrash autostart enabled!" +SETBOOT_CRON_INIT="ShellCrash initialization" +SETBOOT_OLDMODE_ON="Switched to conservative startup mode!" +SETBOOT_OLDMODE_OFF="Switched to system daemon startup mode!" +SETBOOT_MODE_UNSUPPORTED="Current device does not support other startup modes!" +SETBOOT_DELAY_HINT1="If your device runs normally after boot, no need to configure this." +SETBOOT_DELAY_HINT2="Recommended between 30~120 seconds, tune according to your device issue." +SETBOOT_DELAY_INPUT="Please enter startup delay (0~300s)" +SETBOOT_SET_OK="Set successfully!" +SETBOOT_DELAY_INVALID="Invalid input or over 300s, please retry!" +SETBOOT_MINI_NEEDED_NO="Your device has enough space (>20M), no need to enable!" +SETBOOT_SYSTEMD_WARN="systemd startup is unsupported here, enable conservative mode first!" +SETBOOT_MINI_ENABLED="Low-flash mode has been enabled!" +SETBOOT_MINI_DIR_HINT="To change directory, use [Set low-flash directory]." +SETBOOT_MINI_DISABLE_WARN="Remaining space is below 8M; disabling may break runtime!" +SETBOOT_MINI_DISABLE_CONFIRM="Confirm disabling this feature?" +SETBOOT_YES="Yes" +SETBOOT_NO_BACK="No, return" +SETBOOT_MINI_DISABLED="Low-flash mode has been disabled!" +SETBOOT_BINDIR_HINT1="If set to memory, related files will be re-downloaded after each boot." +SETBOOT_BINDIR_HINT2="Ensure install source is directly reachable, or startup may fail." +SETBOOT_BINDIR_TMP="Use memory (/tmp)" +SETBOOT_BINDIR_USB="Select USB directory" +SETBOOT_BINDIR_CUSTOM="Custom directory" +SETBOOT_SELECT_INSTALL_DIR="Please select install directory:" +SETBOOT_SPACE_USED="Used storage:" +SETBOOT_INPUT_ERROR="Invalid input, please retry!" +SETBOOT_INPUT_CMD="Please input command/path directly" +SETBOOT_INPUT_OR_BACK="Or input 0 to return" +SETBOOT_INPUT="Please enter" +SETBOOT_NETCHK_HINT1="If your device can run normally after boot, no need to change this." +SETBOOT_NETCHK_HINT2="When disabled, low-flash or online rules (e.g. rule-set) may fail due to no network." +SETBOOT_NETCHK_HINT3="When enabled, low-performance/slow-dial devices may timeout and fail startup." +SETBOOT_NETCHK_OFF_CONFIRM="Network check is \033[33mdisabled\033[0m. Enable it?" +SETBOOT_NETCHK_ON_CONFIRM="Network check is \033[33menabled\033[0m. Disable it?" +SETBOOT_TASK_WORD="Task" +SETBOOT_LOG_NOT_FOUND="Related log not found!" diff --git a/scripts/lang/en/userguide.lang b/scripts/lang/en/userguide.lang index 34814a7c..26569b02 100644 --- a/scripts/lang/en/userguide.lang +++ b/scripts/lang/en/userguide.lang @@ -12,3 +12,6 @@ UG_IMPORT_CONFIG="Import configuration file? (Last step before running)" UG_CONFIG_TIP="You must have a configuration file to run the service!" UG_CONFIG_RES="Importing now? " UG_FINAL_TIP="Great! Now just start the service to enjoy!" + +UG_IMPORT_NOW="Import now" +UG_IMPORT_LATER="Not now" diff --git a/scripts/menus/2_settings.sh b/scripts/menus/2_settings.sh index e378df18..5d44bd46 100644 --- a/scripts/menus/2_settings.sh +++ b/scripts/menus/2_settings.sh @@ -41,8 +41,8 @@ settings() { 1) if [ "$USER" != root ] && [ "$USER" != admin ]; then comp_box "$SET_WARN_NONROOT" - btm_box "1) 是" \ - "0) 否,返回上级菜单" + btm_box "1) $SET_YES" \ + "0) $SET_NO_BACK" read -r -p "$COMMON_INPUT> " res if [ "$res" = 1 ]; then set_redir_mod @@ -63,13 +63,13 @@ settings() { line_break separator_line "=" if [ "$skip_cert" = "OFF" ]; then - content_line "当前\033[33m已禁用\033[0m跳过本地证书验证,是否确认启用?" + content_line "$SET_SKIP_CERT_NOW\033[33m$SET_DISABLED\033[0m$SET_SKIP_CERT_ENABLE_Q" else - content_line "当前\033[33m已启用\033[0m跳过本地证书验证,是否确认禁用?" + content_line "$SET_SKIP_CERT_NOW\033[33m$SET_ENABLED\033[0m$SET_SKIP_CERT_DISABLE_Q" fi separator_line "=" - btm_box "1) 是" \ - "0) 否,返回上级菜单" + btm_box "1) $SET_YES" \ + "0) $SET_NO_BACK" read -r -p "$COMMON_INPUT> " num if [ "$num" = 1 ]; then if [ "$skip_cert" = OFF ]; then @@ -86,9 +86,9 @@ settings() { ;; 5) if [ "$sniffer" = "OFF" ]; then - comp_box "当前\033[33m已禁用\033[0m域名嗅探,是否确认启用?" - btm_box "1) 是" \ - "0) 否,返回上级菜单" + comp_box "$SET_SNIFFER_NOW\033[33m$SET_DISABLED\033[0m$SET_SNIFFER_ENABLE_Q" + btm_box "1) $SET_YES" \ + "0) $SET_NO_BACK" read -r -p "$COMMON_INPUT> " num if [ "$num" = 1 ]; then line_break @@ -108,9 +108,9 @@ settings() { msg_alert "\033[31m$SET_SNIFFER_LOCKED\033[0m" continue else - comp_box "当前\033[33m已启用\033[0m域名嗅探,是否确认禁用?" - btm_box "1) 是" \ - "0) 否,返回上级菜单" + comp_box "$SET_SNIFFER_NOW\033[33m$SET_ENABLED\033[0m$SET_SNIFFER_DISABLE_Q" + btm_box "1) $SET_YES" \ + "0) $SET_NO_BACK" read -r -p "$COMMON_INPUT> " num if [ "$num" = 1 ]; then sniffer=OFF @@ -121,15 +121,15 @@ settings() { fi fi setconfig sniffer "$sniffer" - btm_box "\033[32m操作成功\033[0m" + btm_box "\033[32m$COMMON_SUCCESS\033[0m" sleep 1 ;; 6) if pidof CrashCore >/dev/null; then comp_box "\033[33m$SET_CORE_RUNNING\033[0m" \ "$SET_CORE_STOP_CONFIRM" - btm_box "1) 是" \ - "0) 否,返回上级菜单" + btm_box "1) $SET_YES" \ + "0) $SET_NO_BACK" read -r -p "$COMMON_INPUT> " res if [ "$res" = 1 ]; then "$CRASHDIR/start.sh" stop && set_adv_config @@ -203,8 +203,8 @@ settings() { exit 0 ;; b) - comp_box "1) 简体中文" \ - "2) English" \ + comp_box "1) $SET_LANG_ZH" \ + "2) $SET_LANG_EN" \ "" \ "0) $COMMON_BACK" read -r -p "$COMMON_INPUT> " num @@ -214,7 +214,7 @@ settings() { ;; 1) echo chs >"$CRASHDIR"/configs/i18n.cfg - msg_alert "\033[32m切换成功!请重新运行脚本!\033[0m" + msg_alert "\033[32m$SET_SWITCH_RERUN\033[0m" ;; 2) echo en >"$CRASHDIR"/configs/i18n.cfg @@ -243,7 +243,7 @@ settings() { . "$CRASHDIR"/menus/tui_lite.sh ;; esac - msg_alert "\033[32m切换成功!\033[0m" + msg_alert "\033[32m$SET_SWITCH_OK\033[0m" ;; *) errornum @@ -255,7 +255,7 @@ settings() { set_redir_config() { setconfig redir_mod "$redir_mod" setconfig dns_mod "$dns_mod" - msg_alert "\033[36m$SET_REDIR_APPLIED $redir_mod 模式\033[0m" + msg_alert "\033[36m$SET_REDIR_APPLIED $redir_mod $SET_MODE_SUFFIX\033[0m" } # 路由模式设置 @@ -269,15 +269,15 @@ set_redir_mod() { comp_box "\033[33m$SET_REDIR_RESTART_HINT\033[0m" \ "$SET_REDIR_CURRENT\033[47;30m$redir_mod$MENU_MOD\033[0m; $SET_CORE_CURRENT\033[47;30m$crashcore\033[0m" [ "$firewall_area" -le 3 ] && { - content_line "1) 设为\033[32m$SET_REDIR_REDIR\033[0m:\t$SET_REDIR_REDIRDES" - content_line "2) 设为\033[36m$SET_REDIR_MIX\033[0m:\t$SET_REDIR_MIXDES" - content_line "3) 设为\033[32m$SET_REDIR_TPROXY\033[0m:\t$SET_REDIR_TPROXYDES" - content_line "4) 设为\033[33m$SET_REDIR_TUN\033[0m:\t$SET_REDIR_TUNDES" + content_line "1) $SET_SET_TO\033[32m$SET_REDIR_REDIR\033[0m:\t$SET_REDIR_REDIRDES" + content_line "2) $SET_SET_TO\033[36m$SET_REDIR_MIX\033[0m:\t$SET_REDIR_MIXDES" + content_line "3) $SET_SET_TO\033[32m$SET_REDIR_TPROXY\033[0m:\t$SET_REDIR_TPROXYDES" + content_line "4) $SET_SET_TO\033[33m$SET_REDIR_TUN\033[0m:\t$SET_REDIR_TUNDES" content_line "" } [ "$firewall_area" = 5 ] && { - content_line "5) \033[32mTCP旁路转发\033[0m: 仅转发TCP流量至旁路由" - content_line "6) \033[36mT&U旁路转发\033[0m: 转发TCP&UDP流量至旁路由" + content_line "5) \033[32m$SET_BYPASS_TCP\033[0m: $SET_BYPASS_TCP_DESC" + content_line "6) \033[36m$SET_BYPASS_TU\033[0m: $SET_BYPASS_TU_DESC" content_line "" } btm_box "7) $SET_FW_AREA:\t\033[47;30m$firewall_area_dsc\033[0m" \ @@ -338,11 +338,11 @@ set_redir_mod() { fi ;; 5) - redir_mod='TCP旁路转发' + redir_mod='$SET_BYPASS_TCP' set_redir_config ;; 6) - redir_mod='T&U旁路转发' + redir_mod='$SET_BYPASS_TU' set_redir_config ;; 7) @@ -541,7 +541,7 @@ set_firewall_area() { comp_box "\033[33m$FW_AREA_NOTE_1\033[0m" \ "\033[33m$FW_AREA_NOTE_2\033[0m" \ "" \ - "当前路由劫持范围:$firewall_area_dsc" + "$SET_FW_AREA_CURRENT$firewall_area_dsc" btm_box "1) \033[32m$FW_AREA_LAN\033[0m" \ "2) \033[36m$FW_AREA_LOCAL\033[0m" \ "3) \033[32m$FW_AREA_BOTH\033[0m" \ @@ -573,19 +573,19 @@ set_firewall_area() { common_success ;; 5) - comp_box "\033[31m注意:\033[0m" \ - "此功能存在多种风险如无网络基础请勿尝试!" \ - "如需代理UDP,请确保旁路由运行了支持UDP代理的模式!" \ - "如使用systemd方式启动,内核依然会空载运行,建议使用保守模式!" \ - "\033[33m说明:\033[0m" \ - "此功能不启动内核仅配置防火墙转发,且子设备无需额外设置网关DNS" \ - "支持防火墙分流及设备过滤,支持部分定时任务,但不支持ipv6" - read -r -p "请直接输入旁路由IPV4地址> " bypass_host + comp_box "\033[31m$SET_WARN\033[0m" \ + "$SET_BYPASS_WARN_1" \ + "$SET_BYPASS_WARN_2" \ + "$SET_BYPASS_WARN_3" \ + "\033[33m$SET_DESC\033[0m" \ + "$SET_BYPASS_DESC_1" \ + "$SET_BYPASS_DESC_2" + read -r -p "$SET_INPUT_BYPASS_IPV4> " bypass_host [ -n "$bypass_host" ] && { firewall_area=$num setconfig firewall_area "$firewall_area" setconfig bypass_host "$bypass_host" - redir_mod=TCP旁路转发 + redir_mod=$SET_BYPASS_TCP setconfig redir_mod $redir_mod } ;; @@ -619,7 +619,7 @@ set_firewall_vm() { comp_box "$VM_INPUT_DESC_1" \ "$VM_INPUT_DESC_2 \033[32m10.88.0.0/16 172.17.0.0/16\033[0m" \ "" \ - "Tips:直接回车确认可返回上级菜单" + "$SET_TIPS_ENTER_BACK" read -r -p "$VM_INPUT_NET> " text [ -n "$text" ] && vm_ipv4="$text" && vm_redir=ON ;; diff --git a/scripts/menus/4_setboot.sh b/scripts/menus/4_setboot.sh index 9116ec76..ec8a5721 100644 --- a/scripts/menus/4_setboot.sh +++ b/scripts/menus/4_setboot.sh @@ -4,6 +4,8 @@ [ -n "$__IS_MODULE_4_SETBOOT_LOADED" ] && return __IS_MODULE_4_SETBOOT_LOADED=1 +load_lang setboot + allow_autostart() { if [ -f /etc/rc.common ] && [ "$(cat /proc/1/comm)" = "procd" ]; then /etc/init.d/shellcrash enable @@ -29,25 +31,25 @@ setboot() { [ -z "$start_old" ] && start_old=OFF if [ -z "$start_delay" ] || [ "$start_delay" = 0 ]; then - delay=未设置 + delay="$SETBOOT_NOT_SET" else - delay="${start_delay}秒" + delay="${start_delay}$SETBOOT_SECOND" fi check_autostart && auto_set="ON" || auto_set="OFF" [ "${BINDIR}" = "$CRASHDIR" ] && mini_clash=OFF || mini_clash=ON [ -z "$network_check" ] && network_check=ON - comp_box "\033[30;47m启动设置菜单\033[0m" - content_line "1) 开机自启动: \033[36m$(printf '%-4s' "$auto_set")\033[0m" - content_line "2) 使用保守模式: \033[36m$(printf '%-4s' "$start_old")\033[0m ———基于定时任务(每分钟检测)" - content_line "3) 设置自启延时: \033[36m$(printf '%-7s' "$delay")\033[0m ———用于解决自启后服务受限" - content_line "4) 启用小闪存模式: \033[36m$(printf '%-4s' "$mini_clash")\033[0m ———用于闪存空间不足的设备" - [ "${BINDIR}" != "$CRASHDIR" ] && content_line "5) 设置小闪存目录: \033[36m${BINDIR}\033[0m" - btm_box "6) 自启网络检查: \033[36m$(printf '%-4s' "$network_check")\033[0m ———禁用则跳过自启时网络检查" \ - "7) 查看启动日志" \ + comp_box "\033[30;47m$SETBOOT_TITLE\033[0m" + content_line "1) $SETBOOT_ITEM_AUTO \033[36m$(printf '%-4s' "$auto_set")\033[0m" + content_line "2) $SETBOOT_ITEM_OLD \033[36m$(printf '%-4s' "$start_old")\033[0m $SETBOOT_ITEM_OLD_DESC" + content_line "3) $SETBOOT_ITEM_DELAY \033[36m$(printf '%-7s' "$delay")\033[0m $SETBOOT_ITEM_DELAY_DESC" + content_line "4) $SETBOOT_ITEM_MINI \033[36m$(printf '%-4s' "$mini_clash")\033[0m $SETBOOT_ITEM_MINI_DESC" + [ "${BINDIR}" != "$CRASHDIR" ] && content_line "5) $SETBOOT_ITEM_MINI_DIR \033[36m${BINDIR}\033[0m" + btm_box "6) $SETBOOT_ITEM_NETCHK \033[36m$(printf '%-4s' "$network_check")\033[0m $SETBOOT_ITEM_NETCHK_DESC" \ + "7) $SETBOOT_VIEW_LOG" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break @@ -57,11 +59,11 @@ setboot() { if check_autostart; then # 禁止自启动:删除各系统的启动项 disable_autostart - msg_alert "\033[33m已禁止ShellCrash开机自启动!\033[0m" + msg_alert "\033[33m$SETBOOT_AUTO_OFF\033[0m" else # 允许自启动:配置各系统的启动项 allow_autostart - msg_alert "\033[32m已设置ShellCrash开机自启动!\033[0m" + msg_alert "\033[32m$SETBOOT_AUTO_ON\033[0m" fi ;; 2) @@ -70,31 +72,31 @@ setboot() { start_old=ON setconfig start_old "$start_old" "$CRASHDIR"/start.sh stop - msg_alert "\033[33m改为使用保守模式启动服务!\033[0m" + msg_alert "\033[33m$SETBOOT_OLDMODE_ON\033[0m" else if grep -qE 'procd|systemd|s6' /proc/1/comm || rc-status -r >/dev/null 2>&1; then - "$CRASHDIR"/start.sh cronset "ShellCrash初始化" + "$CRASHDIR"/start.sh cronset "$SETBOOT_CRON_INIT" start_old=OFF setconfig start_old "$start_old" "$CRASHDIR"/start.sh stop - msg_alert "\033[32m改为使用系统守护进程启动服务!\033[0m" + msg_alert "\033[32m$SETBOOT_OLDMODE_OFF\033[0m" else - msg_alert "\033[31m当前设备不支持以其他模式启动!\033[0m" + msg_alert "\033[31m$SETBOOT_MODE_UNSUPPORTED\033[0m" fi fi ;; 3) - comp_box "\033[33m如果你的设备启动后可以正常使用,则无需设置!\033[0m" \ - "\033[36m推荐设置为30~120秒之间,请根据设备问题自行试验\033[0m" - read -r -p "请输入启动延迟时间(0~300秒)> " sec + comp_box "\033[33m$SETBOOT_DELAY_HINT1\033[0m" \ + "\033[36m$SETBOOT_DELAY_HINT2\033[0m" + read -r -p "$SETBOOT_DELAY_INPUT> " sec case "$sec" in [0-9] | [0-9][0-9] | [0-2][0-9][0-9] | 300) start_delay=$sec setconfig start_delay "$sec" - msg_alert "\033[32m设置成功!\033[0m" + msg_alert "\033[32m$SETBOOT_SET_OK\033[0m" ;; *) - msg_alert "\033[31m输入有误,或超过300秒,请重新输入!\033[0m" + msg_alert "\033[31m$SETBOOT_DELAY_INVALID\033[0m" ;; esac ;; @@ -102,31 +104,31 @@ setboot() { dir_size=$(df "$CRASHDIR" | awk '{ for(i=1;i<=NF;i++){ if(NR==1){ arr[i]=$i; }else{ arr[i]=arr[i]" "$i; } } } END{ for(i=1;i<=NF;i++){ print arr[i]; } }' | grep Ava | awk '{print $2}') if [ "$mini_clash" = "OFF" ]; then if [ "$dir_size" -gt 20480 ]; then - msg_alert "\033[33m您的设备空间充足(>20M),无需开启!\033[0m" + msg_alert "\033[33m$SETBOOT_MINI_NEEDED_NO\033[0m" elif [ "$start_old" != 'ON' ] && [ "$(cat /proc/1/comm)" = "systemd" ]; then - msg_alert "\033[33m不支持systemd启动模式,请先启用保守模式!\033[0m" + msg_alert "\033[33m$SETBOOT_SYSTEMD_WARN\033[0m" else [ "$BINDIR" = "$CRASHDIR" ] && BINDIR="$TMPDIR" - msg_alert "\033[32m已经启用小闪存功能!\033[0m" \ - "如需更换目录,请使用【设置小闪存目录】功能\033[0m" + msg_alert "\033[32m$SETBOOT_MINI_ENABLED\033[0m" \ + "$SETBOOT_MINI_DIR_HINT\033[0m" fi else if [ "$dir_size" -lt 8192 ]; then - comp_box "\033[31m您的设备剩余空间不足8M,停用后可能无法正常运行!\033[0m" \ - "是否确认停用此功能?" - btm_box "1) 是" \ - "0) 否,返回上级菜单" - read -r -p "请输入对应标号> " res + comp_box "\033[31m$SETBOOT_MINI_DISABLE_WARN\033[0m" \ + "$SETBOOT_MINI_DISABLE_CONFIRM" + btm_box "1) $SETBOOT_YES" \ + "0) $SETBOOT_NO_BACK" + read -r -p "$COMMON_INPUT> " res if [ "$res" = 1 ]; then BINDIR="$CRASHDIR" - msg_alert "\033[33m已经停用小闪存功能!\033[0m" + msg_alert "\033[33m$SETBOOT_MINI_DISABLED\033[0m" else continue fi else rm -rf /tmp/ShellCrash BINDIR="$CRASHDIR" - msg_alert "\033[33m已经停用小闪存功能!\033[0m" + msg_alert "\033[33m$SETBOOT_MINI_DISABLED\033[0m" fi fi sed -i "s#BINDIR=.*#BINDIR=$BINDIR#" "$CRASHDIR"/configs/command.env @@ -134,14 +136,14 @@ setboot() { ;; 5) while true; do - comp_box "\033[33m如设置到内存,则每次开机后都自动重新下载相关文件\033[0m" \ - "\033[33m请确保安装源可用裸连,否则会导致启动失败\033[0m" - btm_box "1) 使用内存(/tmp)" \ - "2) 选择U盘目录" \ - "3) 自定义目录" \ + comp_box "\033[33m$SETBOOT_BINDIR_HINT1\033[0m" \ + "\033[33m$SETBOOT_BINDIR_HINT2\033[0m" + btm_box "1) $SETBOOT_BINDIR_TMP" \ + "2) $SETBOOT_BINDIR_USB" \ + "3) $SETBOOT_BINDIR_CUSTOM" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break @@ -152,21 +154,21 @@ setboot() { 2) set_usb_dir() { while true; do - comp_box "请选择安装目录:" + comp_box "$SETBOOT_SELECT_INSTALL_DIR" du -hL /mnt | - awk '{print NR") "$2" (已占用的储存空间:"$1")"}' | + awk '{print NR") "$2" ($SETBOOT_SPACE_USED$1")"}' | while IFS= read -r line; do content_line "$line" done content_line "" - content_line "0) 返回上级菜单" + content_line "0) $COMMON_BACK" separator_line "=" - read -r -p "请输入对应标号> " num + read -r -p "$COMMON_INPUT> " num BINDIR=$(du -hL /mnt | awk '{print $2}' | sed -n "$num"p) if [ "$num" = 0 ]; then return 1 elif [ -z "$BINDIR" ]; then - msg_alert "\033[31m输入错误!请重新设置!\033[0m" + msg_alert "\033[31m$SETBOOT_INPUT_ERROR\033[0m" else return 0 fi @@ -180,13 +182,13 @@ setboot() { 3) input_dir() { while true; do - comp_box "\033[36m请直接输入命令语句\033[0m" \ - "或输入 0 返回上级菜单" - read -r -p "请输入> " BINDIR + comp_box "\033[36m$SETBOOT_INPUT_CMD\033[0m" \ + "$SETBOOT_INPUT_OR_BACK" + read -r -p "$SETBOOT_INPUT> " BINDIR if [ "$BINDIR" = 0 ]; then return 1 elif [ ! -d "$BINDIR" ]; then - msg_alert "\033[31m输入错误!请重新设置!\033[0m" + msg_alert "\033[31m$SETBOOT_INPUT_ERROR\033[0m" fi return 0 done @@ -206,19 +208,19 @@ setboot() { done ;; 6) - comp_box "\033[33m如果你的设备启动后可以正常使用,则无需变更设置!\033[0m" \ - "\033[36m禁用时,如果使用了小闪存模式或者rule-set等在线规则,则可能会因无法联网而导致启动失败!\033[0m" \ - "\033[32m启用时,会导致部分性能较差或者拨号较慢的设备可能会因查询超时导致启动失败!\033[0m" + comp_box "\033[33m$SETBOOT_NETCHK_HINT1\033[0m" \ + "\033[36m$SETBOOT_NETCHK_HINT2\033[0m" \ + "\033[32m$SETBOOT_NETCHK_HINT3\033[0m" if [ "$network_check" = "OFF" ]; then - content_line "当前\033[33m已禁用\033[0m自启网络检查,是否确认启用?" + content_line "$SETBOOT_NETCHK_OFF_CONFIRM" else - content_line "当前\033[33m已启用\033[0m自启网络检查,是否确认禁用?" + content_line "$SETBOOT_NETCHK_ON_CONFIRM" fi separator_line "-" - btm_box "1) 是" \ - "0) 否,返回上级菜单" - read -r -p "请输入对应标号> " res + btm_box "1) $SETBOOT_YES" \ + "0) $SETBOOT_NO_BACK" + read -r -p "$COMMON_INPUT> " res if [ "$res" = '1' ]; then if [ "$network_check" = "OFF" ]; then network_check=ON @@ -236,12 +238,12 @@ setboot() { if [ -s "$TMPDIR"/ShellCrash.log ]; then line_break echo "===========================================================" - grep -v '任务' "$TMPDIR"/ShellCrash.log + grep -v "$SETBOOT_TASK_WORD" "$TMPDIR"/ShellCrash.log echo "===========================================================" line_break exit else - msg_alert "\033[31m未找到相关日志!\033[0m" + msg_alert "\033[31m$SETBOOT_LOG_NOT_FOUND\033[0m" fi ;; *) diff --git a/scripts/menus/5_task.sh b/scripts/menus/5_task.sh index ae0be460..a7b0958f 100644 --- a/scripts/menus/5_task.sh +++ b/scripts/menus/5_task.sh @@ -15,16 +15,16 @@ set_cron() { [ -z "$week" ] && week=* [ -z "$hour" ] && hour=* [ -z "$min" ] && min=0 - comp_box "\033[33m$cron_time\033[0m执行任务:\033[36m$task_name\033[0m" \ + comp_box "\033[33m$cron_time\033[0m$TASK5_RUN_TASK\033[36m$task_name\033[0m" \ "" \ - "是否确认添加定时任务?" - btm_box "1) 是" \ - "0) 否" - read -r -p "请输入对应标号> " res + "$TASK5_CONFIRM_ADD_CRON" + btm_box "1) $TASK5_YES" \ + "0) $TASK5_NO" + read -r -p "$COMMON_INPUT> " res if [ "$res" = '1' ]; then task_txt="$min $hour * * $week $CRASHDIR/task/task.sh $task_id $cron_time$task_name" cronset "$cron_time$task_name" "$task_txt" - msg_alert -t 0 "任务【$cron_time$task_name】\033[32m已添加!\033[0m" + msg_alert -t 0 "$TASK5_TASK_PREFIX$cron_time$task_name$TASK5_TASK_ADDED" fi unset week hour min sleep 1 @@ -51,28 +51,28 @@ set_service() { # 自定义命令添加 task_user_add() { while true; do - comp_box "\033[33m命令可包含空格,请确保命令可执行!\033[0m" \ - "\033[36m请勿附带执行条件,执行条件请在命令添加完成后再返回设置!\033[0m" \ - "亦可手动编辑\033[32m${CRASHDIR}/task/task.user\033[0m以添加命令" - btm_box "\033[36m请直接输入命令语句\033[0m" \ - "或输入 0 返回上级菜单" - read -r -p "请输入> " script + comp_box "\033[33m$TASK5_USER_ADD_HINT1\033[0m" \ + "\033[36m$TASK5_USER_ADD_HINT2\033[0m" \ + "$TASK5_USER_ADD_HINT3\033[32m${CRASHDIR}/task/task.user\033[0m$TASK5_USER_ADD_HINT4" + btm_box "\033[36m$TASK5_INPUT_CMD\033[0m" \ + "$TASK5_OR_BACK" + read -r -p "$TASK5_INPUT> " script if [ "$script" = 0 ]; then break elif [ -n "$script" ]; then task_command=$script - comp_box "请检查输入:\033[32m$task_command\033[0m" + comp_box "$TASK5_CHECK_INPUT\033[32m$task_command\033[0m" # 获取本任务ID task_max_id=$(awk -F '#' '{print $1}' "$CRASHDIR"/task/task.user 2>/dev/null | sort -n | tail -n 1) [ -z "$task_max_id" ] && task_max_id=200 task_id=$((task_max_id + 1)) - read -r -p "请输入任务备注> " txt - [ -n "$txt" ] && task_name=$txt || task_name=自定义任务$task_id + read -r -p "$TASK5_INPUT_REMARK> " txt + [ -n "$txt" ] && task_name=$txt || task_name="$TASK5_CUSTOM_TASK$task_id" echo "$task_id#$task_command#$task_name" >>"$CRASHDIR"/task/task.user - msg_alert "\033[32m自定义任务已添加!\033[0m" + msg_alert "\033[32m$TASK5_CUSTOM_ADDED\033[0m" break else - msg_alert "\033[31m输入错误,请重新输入!\033[0m" + msg_alert "\033[31m$TASK5_INPUT_ERROR\033[0m" fi done } @@ -81,26 +81,26 @@ task_user_add() { task_user_del() { while true; do if grep -Evq '^#' "$CRASHDIR/task/task.user" 2>/dev/null; then - comp_box "请输入对应ID移除对应自定义任务(不会影响内置任务)" \ - "也可以手动编辑\033[32m${CRASHDIR}/task/task.user\033[0m" + comp_box "$TASK5_USER_DEL_HINT1" \ + "$TASK5_USER_DEL_HINT2\033[32m${CRASHDIR}/task/task.user\033[0m" grep -Ev '^#' "$CRASHDIR/task/task.user" 2>/dev/null | awk -F '#' '{print $1") "$3}' | while IFS= read -r line; do content_line "$line" done btm_box "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num if [ "$num" = 0 ]; then break elif [ -n "$num" ]; then sed -i "/^$num#/d" "$CRASHDIR"/task/task.user 2>/dev/null common_success else - msg_alert "\033[31m输入错误,请重新输入!\033[0m" + msg_alert "\033[31m$TASK5_INPUT_ERROR\033[0m" fi else - msg_alert "\033[33m你暂未添加任何自定义任务\033[0m" + msg_alert "\033[33m$TASK5_NO_CUSTOM_TASK\033[0m" break fi done @@ -109,13 +109,13 @@ task_user_del() { # 任务添加 task_add() { while true; do - comp_box "\033[36m请选择需要添加的任务:\033[0m" + comp_box "\033[36m$TASK5_SELECT_ADD\033[0m" # 输出任务列表 list=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | awk -F '#' '{print $3}') list_box "$list" btm_box "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in 0) break @@ -151,87 +151,87 @@ task_del() { # 任务条件选择菜单 task_type() { - comp_box "请选择任务\033[36m【$task_name】\033[0m执行条件:" - btm_box "1) 定时任务\033[32m每周执行\033[0m" \ - "2) 定时任务\033[32m每日执行\033[0m" \ - "3) 定时任务\033[32m每小时执行\033[0m" \ - "4) 定时任务\033[32m每分钟执行\033[0m" \ - " - - - - - - - - -\033[31m注意\033[0m- - - - - - - - -" \ - " 逻辑水平不及格的请勿使用下方触发条件!" \ - " - - - - - - - - - - - - - - - - - - - -" \ - "5) 服务\033[33m启动前执行\033[0m" \ - "6) 服务\033[33m启动后执行\033[0m" \ - "7) 服务\033[33m运行时每分钟执行\033[0m" \ - "8) 防火墙服务\033[33m重启后执行\033[0m" \ + comp_box "$TASK5_SELECT_COND\033[36m【$task_name】\033[0m$TASK5_SELECT_COND2" + btm_box "1) $TASK5_COND_1" \ + "2) $TASK5_COND_2" \ + "3) $TASK5_COND_3" \ + "4) $TASK5_COND_4" \ + "$TASK5_WARN_LINE1" \ + "$TASK5_WARN_LINE2" \ + "$TASK5_WARN_LINE3" \ + "5) $TASK5_COND_5" \ + "6) $TASK5_COND_6" \ + "7) $TASK5_COND_7" \ + "8) $TASK5_COND_8" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in 0) return 1 ;; 1) - comp_box "输入 1~7 对应\033[33m每周的指定某天\033[0m运行(7=周日)" \ - "输入 1,4,0 代表\033[36m每周一、周四、周日\033[0m运行" \ - "输入 1~5 代表\033[36m周一至周五\033[0m运行" - read -r -p "在每周哪天执行?> " week + comp_box "$TASK5_WEEK_HINT1" \ + "$TASK5_WEEK_HINT2" \ + "$TASK5_WEEK_HINT3" + read -r -p "$TASK5_WEEK_INPUT> " week # week=`echo ${week/7/0}` # 把7换成0 - read -r -p "想在该日的具体哪个小时执行?(0~23)> " hour - cron_time="在每周$week的$hour点整" + read -r -p "$TASK5_HOUR_INPUT1> " hour + cron_time="$TASK5_CRON_WEEK$week$TASK5_CRON_WEEK2$hour$TASK5_OCLOCK" # cron_time=`echo ${cron_time/周0/周日}` # 把0换成日 [ -n "$week" ] && [ -n "$hour" ] && set_cron ;; 2) - comp_box "输入 1,7,15 代表\033[36m每到1,7,15点\033[0m运行" \ - "输入 6~18 代表\033[36m早6点至晚18点间每小时\033[0m运行" - read -r -p "想在每日的具体哪个小时执行?(0~23)> " hour - read -r -p "想在具体哪分钟执行?(0~59的整数)> " min - cron_time="在每日的$hour点$min分" + comp_box "$TASK5_DAY_HINT1" \ + "$TASK5_DAY_HINT2" + read -r -p "$TASK5_HOUR_INPUT2> " hour + read -r -p "$TASK5_MIN_INPUT> " min + cron_time="$TASK5_CRON_DAY$hour$TASK5_POINT$min$TASK5_MINUTE" [ -n "$min" ] && [ -n "$hour" ] && set_cron ;; 3) line_break - read -r -p "想每隔多少小时执行一次?(1~23的整数)> " num + read -r -p "$TASK5_EVERY_HOUR_INPUT> " num hour="*/$num" - cron_time="每隔$num小时" + cron_time="$TASK5_EVERY$num$TASK5_HOUR" [ -n "$hour" ] && set_cron ;; 4) line_break - read -r -p "想每隔多少分钟执行一次?(1~59的整数)> " num + read -r -p "$TASK5_EVERY_MIN_INPUT> " num min="*/$num" - cron_time="每隔$num分钟" + cron_time="$TASK5_EVERY$num$TASK5_MIN" [ -n "$min" ] && set_cron ;; 5) - set_service bfstart "$task_id" "服务启动前$task_name" + set_service bfstart "$task_id" "$TASK5_BFSTART$task_name" ;; 6) - set_service afstart "$task_id" "服务启动后$task_name" + set_service afstart "$task_id" "$TASK5_AFSTART$task_name" ;; 7) - comp_box "输入10即每隔10分钟运行一次,1440即每隔24小时运行一次" \ - "大于60分钟的数值将按小时取整,且按当前时区记时" - read -r -p "想每隔多少分钟执行一次?(1~1440的整数)> " num + comp_box "$TASK5_RUNNING_HINT1" \ + "$TASK5_RUNNING_HINT2" + read -r -p "$TASK5_RUNNING_INPUT> " num if [ "$num" -lt 60 ]; then min="$num" cron_time="*/$min * * * *" - time_des="$min分钟" + time_des="$min$TASK5_MIN" else hour="$((num / 60))" cron_time="0 */$hour * * *" - time_des="$hour小时" + time_des="$hour$TASK5_HOUR" fi - [ -n "$cron_time" ] && set_service running "$task_id" "运行时每$time_des$task_name" "$cron_time" + [ -n "$cron_time" ] && set_service running "$task_id" "$TASK5_RUNNING_PREFIX$time_des$task_name" "$cron_time" ;; 8) - comp_box "该功能会将相关启动代码注入到/etc/init.d/firewall中" - "是否确认继续?" - btm_box "1) 是" \ - "0) 否" - read -r -p "请输入对应标号> " res - [ "$res" = 1 ] && set_service affirewall "$task_id" "防火墙重启后$task_name" + comp_box "$TASK5_AFFW_HINT" + "$TASK5_CONFIRM_CONTINUE" + btm_box "1) $TASK5_YES" \ + "0) $TASK5_NO" + read -r -p "$COMMON_INPUT> " res + [ "$res" = 1 ] && set_service affirewall "$task_id" "$TASK5_AFFW_PREFIX$task_name" ;; *) errornum @@ -246,43 +246,43 @@ task_manager() { cronload >"$TMPDIR"/task_cronlist cat "$TMPDIR"/task_cronlist "$CRASHDIR"/task/running 2>/dev/null | sort -u | grep -oE "task/task.sh .*" | cut -d ' ' -f 2- >"$TMPDIR"/task_list cat "$CRASHDIR"/task/bfstart "$CRASHDIR"/task/afstart "$CRASHDIR"/task/affirewall 2>/dev/null | cut -d ' ' -f 2- >>"$TMPDIR"/task_list - cat "$TMPDIR"/task_cronlist 2>/dev/null | sort -u | grep -oE " #.*" | grep -v "守护" | awk -F '#' '{print "0 旧版任务-"$2}' >>"$TMPDIR"/task_list + cat "$TMPDIR"/task_cronlist 2>/dev/null | sort -u | grep -oE " #.*" | grep -v "$TASK5_GUARD_WORD" | awk -F '#' '{print "0 '$TASK5_OLD_PREFIX'"$2}' >>"$TMPDIR"/task_list sed -i '/^ *$/d' "$TMPDIR"/task_list rm -rf "$TMPDIR"/task_cronlist # 判断为空则返回 if [ ! -s "$TMPDIR"/task_list ]; then - msg_alert "\033[31m当前没有可供管理的任务!\033[36m" + msg_alert "\033[31m$TASK5_NONE_TO_MANAGE\033[36m" break else - comp_box "\033[33m已添加的任务:\033[0m" + comp_box "\033[33m$TASK5_ADDED_TASKS\033[0m" list_box "$(cat "$TMPDIR"/task_list)" separator_line "-" - btm_box "a) 清空旧版任务" \ - "d) 清空任务列表" \ + btm_box "a) $TASK5_CLEAR_OLD" \ + "d) $TASK5_CLEAR_ALL" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break ;; a) task_del "#" - msg_alert "\033[31m旧版任务已清空!\033[36m" + msg_alert "\033[31m$TASK5_OLD_CLEARED\033[36m" ;; d) task_del "task.sh" - msg_alert "\033[31m全部任务已清空!\033[36m" + msg_alert "\033[31m$TASK5_ALL_CLEARED\033[36m" ;; [1-9] | [1-9][0-9]) task_txt=$(sed -n "$num p" "$TMPDIR"/task_list) task_id=$(echo "$task_txt" | awk '{print $1}') if [ "$task_id" = 0 ]; then - comp_box "旧版任务不支持管理,是否移除?" - btm_box "1) 是" \ - "0) 否,返回上级菜单" - read -r -p "请输入对应标号> " res + comp_box "$TASK5_OLD_NOT_SUPPORT" + btm_box "1) $TASK5_YES" \ + "0) $TASK5_NO_BACK" + read -r -p "$COMMON_INPUT> " res if [ "$res" = 1 ]; then cronname=$(echo "$task_txt" | awk -F '-' '{print $2}') cronset "$cronname" @@ -293,14 +293,14 @@ task_manager() { else task_des=$(echo "$task_txt" | awk '{print $2}') task_name=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $3}') - comp_box "当前任务为:\033[36m$task_des\033[0m" - btm_box "1) \033[33m修改\033[0m当前任务" \ - "2) \033[31m删除\033[0m当前任务" \ - "3) \033[32m立即执行\033[0m一次" \ - "4) 查看\033[33m执行记录\033[0m" \ + comp_box "$TASK5_CURRENT_TASK\033[36m$task_des\033[0m" + btm_box "1) $TASK5_EDIT_TASK" \ + "2) $TASK5_DEL_TASK" \ + "3) $TASK5_RUN_ONCE" \ + "4) $TASK5_VIEW_RECORD" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) continue @@ -314,8 +314,8 @@ task_manager() { ;; 3) task_command=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $2}') - eval "$task_command" && task_res='执行成功!' || task_res='执行失败!' - msg_alert "\033[33m任务【$task_des】$task_res\033[0m" + eval "$task_command" && task_res="$TASK5_RUN_OK" || task_res="$TASK5_RUN_FAIL" + msg_alert "\033[33m$TASK5_TASK_PREFIX$task_des】$task_res\033[0m" ;; 4) if cat "$TMPDIR"/ShellCrash.log | grep -q "$task_name"; then @@ -324,7 +324,7 @@ task_manager() { cat "$TMPDIR"/ShellCrash.log | grep "$task_name" echo "===========================================================" else - msg_alert "\033[31m未找到相关执行记录!\033[0m" + msg_alert "\033[31m$TASK5_RECORD_NOT_FOUND\033[0m" fi ;; *) @@ -348,8 +348,8 @@ task_recom() { "$TASK_RECOM_ITEM_1" \ "$TASK_RECOM_ITEM_2" \ "$TASK_RECOM_ITEM_3" - btm_box "1) 是" \ - "0) 否" + btm_box "1) $TASK5_YES" \ + "0) $TASK5_NO" read -r -p "$COMMON_INPUT>" res [ "$res" = 1 ] && { @@ -367,18 +367,18 @@ task_recom() { task_menu() { while true; do # 检测并创建自定义任务文件 - [ -f "$CRASHDIR"/task/task.user ] || echo '#任务ID(必须>200并顺序排列)#任务命令#任务说明(#号隔开,任务命令和说明中都不允许包含#号)' >"$CRASHDIR"/task/task.user - comp_box "\033[30;47m自动任务菜单\033[0m" - btm_box "1) 添加\033[32m自动任务\033[0m" \ - "2) 管理\033[33m任务列表\033[0m" \ - "3) 查看\033[36m任务日志\033[0m" \ - "4) 配置\033[36m日志推送\033[0m" \ - "5) 添加\033[33m自定义任务\033[0m" \ - "6) 删除\033[33m自定义任务\033[0m" \ - "7) 使用\033[32m推荐设置\033[0m" \ + [ -f "$CRASHDIR"/task/task.user ] || echo "$TASK5_USER_FILE_HEADER" >"$CRASHDIR"/task/task.user + comp_box "\033[30;47m$TASK5_MENU_TITLE\033[0m" + btm_box "1) $TASK5_MENU_1" \ + "2) $TASK5_MENU_2" \ + "3) $TASK5_MENU_3" \ + "4) $TASK5_MENU_4" \ + "5) $TASK5_MENU_5" \ + "6) $TASK5_MENU_6" \ + "7) $TASK5_MENU_7" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break @@ -391,17 +391,17 @@ task_menu() { rm -rf "$TMPDIR"/task_list ;; 3) - if cat "$TMPDIR"/ShellCrash.log | grep -q '任务【'; then + if cat "$TMPDIR"/ShellCrash.log | grep -q "$TASK5_TASK_GREP"; then line_break echo "===========================================================" - cat "$TMPDIR"/ShellCrash.log | grep '任务【' + cat "$TMPDIR"/ShellCrash.log | grep "$TASK5_TASK_GREP" echo "===========================================================" else - msg_alert "\033[31m未找到任务相关执行日志!\033[0m" + msg_alert "\033[31m$TASK5_LOG_NOT_FOUND\033[0m" fi ;; 4) - msg_alert "\033[36m请在日志工具中配置相关推送通道及推送开关\033[0m" + msg_alert "\033[36m$TASK5_PUSH_HINT\033[0m" . "$CRASHDIR"/menus/8_tools.sh && log_pusher ;; 5) diff --git a/scripts/menus/6_core_config.sh b/scripts/menus/6_core_config.sh index ba45ca85..c084c1cb 100644 --- a/scripts/menus/6_core_config.sh +++ b/scripts/menus/6_core_config.sh @@ -4,6 +4,8 @@ [ -n "$__IS_MODULE_6_CORECONFIG_LOADED" ] && return __IS_MODULE_6_CORECONFIG_LOADED=1 +load_lang 6_core_config + if echo "$crashcore" | grep -q 'singbox'; then CONFIG_PATH="$CRASHDIR"/jsons/config.json CORE_TYPE=singbox @@ -27,18 +29,18 @@ set_core_config() { f2 = substr(f2, 1, 30) "..." printf "%-7s \t%-28s\n", f1, f2 }') - comp_box "\033[30;47m配置文件管理\033[0m" + comp_box "\033[30;47m$CORECFG_TITLE\033[0m" [ -n "$list" ] && { - content_line "\033[36m输入数字可管理对应提供者\033[0m" + content_line "\033[36m$CORECFG_HINT_SELECT_PROVIDER\033[0m" content_line "" list_box "$list" separator_line "-" } - btm_box "a) \033[32m添加提供者\033[0m(支持订阅/分享链接及本地文件)" \ - "b) \033[36m本地生成配置文件\033[0m" \ - "c) \033[33m在线生成配置文件\033[0m" \ - "d) \033[31m清空提供者列表\033[0m" \ - "e) \033[36m自定义配置文件\033[0m" \ + btm_box "a) $CORECFG_MENU_A" \ + "b) $CORECFG_MENU_B" \ + "c) $CORECFG_MENU_C" \ + "d) $CORECFG_MENU_D" \ + "e) $CORECFG_MENU_E" \ "" \ "0) $COMMON_BACK" read -r -p "$COMMON_INPUT_L> " num @@ -59,10 +61,10 @@ set_core_config() { . "$CRASHDIR"/menus/providers.sh providers else - msg_alert "\033[33m仅限Mihomo/singboxr内核使用,请更换内核!\033[0m" + msg_alert "\033[33m$CORECFG_CORE_ONLY\033[0m" fi else - msg_alert "请先添加提供者!" + msg_alert "$CORECFG_ADD_PROVIDER_FIRST" fi ;; c) @@ -70,15 +72,15 @@ set_core_config() { . "$CRASHDIR"/menus/subconverter.sh subconverter else - msg_alert "请先添加提供者!" + msg_alert "$CORECFG_ADD_PROVIDER_FIRST" fi ;; d) - comp_box "\033[33m警告:这将删除所有提供者且无法还原!\033[0m" \ + comp_box "\033[33m$CORECFG_CLEAR_WARN\033[0m" \ "" \ - "是否确认清空提供者列表:" - btm_box "1) 是" \ - "0) 否,返回上级菜单" + "$CORECFG_CLEAR_CONFIRM" + btm_box "1) $CORECFG_YES" \ + "0) $CORECFG_NO_BACK" read -r -p "$COMMON_INPUT> " res [ "$res" = 1 ] && { rm -f "$CRASHDIR"/configs/providers.cfg @@ -130,38 +132,38 @@ setproviders() { while true; do link_info=$(echo "$link$link_uri" | cut -c 1-30) - comp_box "\033[36m支持添加订阅链接/分享链接/本地文件作为提供者\033[0m" + comp_box "\033[36m$CORECFG_PROVIDER_SUPPORT\033[0m" - content_line "1) 设置\033[36m名称或代号\033[0m \033[32m$name\033[0m" - content_line "2) 设置\033[32m链接或路径\033[0m: \033[36m$link_info\033[0m" + content_line "1) $CORECFG_SET_NAME \033[32m$name\033[0m" + content_line "2) $CORECFG_SET_LINK \033[36m$link_info\033[0m" [ -n "$link" ] && - content_line "3) 设置\033[33m本地生成覆写\033[0m" + content_line "3) $CORECFG_SET_OVERRIDE" content_line "" - content_line "a) \033[36m保存此提供者\033[0m" - content_line "d) \033[31m删除此提供者\033[0m" + content_line "a) $CORECFG_SAVE_PROVIDER" + content_line "d) $CORECFG_DEL_PROVIDER" content_line "" - content_line "\033[36m以下方式的详细配置请前往对应功能页面进行设置!\033[0m" + content_line "\033[36m$CORECFG_MORE_CONFIG_HINT\033[0m" [ -n "$link" ] && - content_line "b) \033[32m本地生成\033[0m仅包含此提供者的配置文件" + content_line "b) $CORECFG_GEN_LOCAL_ONE" echo "$link$link_uri" | grep -q '://' && - content_line "c) \033[33m在线生成\033[0m仅包含此提供者的配置文件" + content_line "c) $CORECFG_GEN_ONLINE_ONE" echo "$link" | grep -q '^http' && - content_line "e) 在线获取此配置文件(不使用订阅转换)" + content_line "e) $CORECFG_GET_ONLINE_DIRECT" echo "$link" | grep -q '^./providers' && - content_line "e) 直接使用此文件作为配置文件(不使用本地生成)" + content_line "e) $CORECFG_USE_DIRECT" btm_box "" \ "0) $COMMON_BACK" - read -r -p "请输入对应字母或数字> " input + read -r -p "$CORECFG_INPUT_ALNUM> " input case "$input" in "" | 0) break ;; 1) while true; do - comp_box "\033[33m注意:\n名称或代号不可重复,不支持纯数字,且不要超过4个汉字!\033[0m" - btm_box "\033[36m请直接输入具体名称或代号\033[0m" \ - "或输入 0 返回上级菜单" - read -r -p "请输入> " text + comp_box "\033[33m$CORECFG_NAME_HINT\033[0m" + btm_box "\033[36m$CORECFG_INPUT_NAME\033[0m" \ + "$CORECFG_OR_BACK" + read -r -p "$CORECFG_INPUT> " text text=$(printf "%.12s" "$text" | sed 's/ //g') # 截断12字符+去空格 if [ "$text" = 0 ]; then break @@ -176,13 +178,13 @@ setproviders() { ;; 2) while true; do - comp_box "\033[33m订阅链接\033[0m:\nhttps/http开头的clash配置文件订阅链接" \ + comp_box "$CORECFG_LINK_HINT1" \ "" \ - "\033[36m分享链接\033[0m:\n$URI_EXP" \ + "$CORECFG_LINK_HINT2\n$URI_EXP" \ "" \ - "\033[33m本地文件\033[0m:\n必须放在\033[32m$CRASHDIR/providers\033[0m目录下" \ + "$CORECFG_LINK_HINT3\033[32m$CRASHDIR/providers\033[0m$CORECFG_LINK_HINT4" \ "" \ - "\033[36mBase64 \033[0m:\n请直接写入本地文件" + "$CORECFG_LINK_HINT5" list=$( for f in "$CRASHDIR"/providers/*; do [ "$f" = "$CRASHDIR"/providers/uri_group ] && continue @@ -193,12 +195,12 @@ setproviders() { if [ -n "$list" ]; then list_box "$list" btm_box "" \ - "输入 0 返回上级菜单" - read -r -p "请选择对应文件或输入具体链接> " text + "$CORECFG_INPUT0_BACK" + read -r -p "$CORECFG_SELECT_FILE_OR_LINK> " text else - btm_box "\033[36m请直接输入具体链接\033[0m" \ - "或输入 0 返回上级菜单" - read -r -p "请输入> " text + btm_box "\033[36m$CORECFG_INPUT_LINK\033[0m" \ + "$CORECFG_OR_BACK" + read -r -p "$CORECFG_INPUT> " text fi text=$(echo "$text" | sed 's/ //g') # 去空格 case "$text" in @@ -254,7 +256,7 @@ setproviders() { . "$CRASHDIR/menus/providers_$CORE_TYPE.sh" gen_providers "$name" "$link" "$interval" "$interval2" "$ua" "#$exclude_w" "#$include_w" else - msg_alert "\033[31m$请先完成必填选项!\033[0m" + msg_alert "\033[31m$CORECFG_FILL_REQUIRED\033[0m" fi ;; c) @@ -268,7 +270,7 @@ setproviders() { # 获取在线文件 jump_core_config else - msg_alert "\033[31m请先完成必填选项!\033[0m" + msg_alert "\033[31m$CORECFG_FILL_REQUIRED\033[0m" fi ;; d) @@ -283,10 +285,10 @@ setproviders() { ;; e) if [ -n "$link" ]; then - comp_box "\033[31m注意:\n此功能不兼容“跳过证书验证”功能\033[0m" \ - "\033[31m请确认你完全理解自己在做什么\033[0m" - btm_box "1) 我确认遇到问题可以自行解决" \ - "0) 返回上级菜单" + comp_box "\033[31m$CORECFG_DANGER1\033[0m" \ + "\033[31m$CORECFG_DANGER2\033[0m" + btm_box "1) $CORECFG_DANGER_CONFIRM" \ + "0) $COMMON_BACK" read -r -p "$COMMON_INPUT> " res [ "$res" = "1" ] && { file=$(echo "$CRASHDIR/$link" | sed 's|\./||') @@ -305,11 +307,11 @@ setproviders() { jump_core_config break else - msg_alert "\033[31m请先完成必填选项!\033[0m" + msg_alert "\033[31m$CORECFG_FILL_REQUIRED\033[0m" fi } else - msg_alert "\033[31m请先完成必填选项!\033[0m" + msg_alert "\033[31m$CORECFG_FILL_REQUIRED\033[0m" fi ;; *) @@ -332,7 +334,7 @@ saveproviders() { echo "$name $link_uri" >>"$CRASHDIR"/configs/providers_uri.cfg return 0 else - msg_alert "\033[31m请先完成必填选项!\033[0m" + msg_alert "\033[31m$CORECFG_FILL_REQUIRED\033[0m" return 1 fi } @@ -340,26 +342,26 @@ saveproviders() { # 本地生成覆写 custproviders() { while true; do - top_box "1) 设置\033[33m健康检查间隔\033[0m:\t\033[47;30m$interval\033[0m 分钟" \ - "2) 设置\033[36m自动更新间隔\033[0m:\t\033[47;30m$interval2\033[0m 小时" + top_box "1) $CORECFG_INTERVAL1\033[47;30m$interval\033[0m $CORECFG_MIN" \ + "2) $CORECFG_INTERVAL2\033[47;30m$interval2\033[0m $CORECFG_HOUR" echo "$link" | grep -q '^http' && - content_line "3) 设置\033[33m虚拟浏览器UA\033[0m:\t\033[47;30m$ua\033[0m" - btm_box "4) 设置\033[31m排除节点正则\033[0m:\t\033[47;30m$exclude_w\033[0m" \ - "5) 设置\033[32m包含节点正则\033[0m:\t\033[47;30m$include_w\033[0m" \ + content_line "3) $CORECFG_SET_UA\033[47;30m$ua\033[0m" + btm_box "4) $CORECFG_SET_EXCLUDE\033[47;30m$exclude_w\033[0m" \ + "5) $CORECFG_SET_INCLUDE\033[47;30m$include_w\033[0m" \ "" \ "0) $COMMON_BACK" - read -r -p "请输入对应数字> " num + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break ;; 1) while true; do - comp_box "当前健康检查间隔:$interval 分钟" - btm_box "\033[36m请直接健康检查间隔(单位:分钟)\033[0m" \ - "或输入 r 重置健康检查间隔为默认值(3 分钟)" \ - "或输入 0 返回上级菜单" - read -r -p "请输入> " num + comp_box "$CORECFG_CUR_INTERVAL$interval $CORECFG_MIN" + btm_box "\033[36m$CORECFG_INPUT_INTERVAL1\033[0m" \ + "$CORECFG_RESET_INTERVAL1" \ + "$CORECFG_OR_BACK" + read -r -p "$CORECFG_INPUT> " num if [ "$num" = "r" ]; then interval=3 elif [ -n "$num" ] && [ "$num" -eq "$num" ] 2>/dev/null; then @@ -374,11 +376,11 @@ custproviders() { ;; 2) while true; do - comp_box "当前健康检查间隔:$interval 分钟" - btm_box "\033[36m请直接输入自动更新间隔(单位:小时)\033[0m" \ - "或输入 r 重置自动更新间隔为默认值(12 小时)" \ - "或输入 0 返回上级菜单" - read -r -p "请输入> " num + comp_box "$CORECFG_CUR_INTERVAL$interval $CORECFG_MIN" + btm_box "\033[36m$CORECFG_INPUT_INTERVAL2\033[0m" \ + "$CORECFG_RESET_INTERVAL2" \ + "$CORECFG_OR_BACK" + read -r -p "$CORECFG_INPUT> " num if [ "$num" = "r" ]; then interval2=12 elif [ -n "$num" ] && [ "$num" -eq "$num" ] 2>/dev/null; then @@ -393,14 +395,14 @@ custproviders() { ;; 3) if [ -z "$ua" ]; then - comp_box "当前浏览器UA:无" + comp_box "$CORECFG_CUR_UA_NONE" else - comp_box "当前浏览器UA:$ua" + comp_box "$CORECFG_CUR_UA$ua" fi - btm_box "\033[36m请直接输入浏览器UA\033[0m" \ - "或输入 r 重置浏览器UA为默认值(clash.meta)" \ - "或输入 0 返回上级菜单" - read -r -p "请输入> " text + btm_box "\033[36m$CORECFG_INPUT_UA\033[0m" \ + "$CORECFG_RESET_UA" \ + "$CORECFG_OR_BACK" + read -r -p "$CORECFG_INPUT> " text case "$text" in 0) continue @@ -416,15 +418,15 @@ custproviders() { ;; 4) if [ -z "$exclude_w" ]; then - comp_box "当前排除规则:无" + comp_box "$CORECFG_CUR_EXCLUDE_NONE" else - comp_box "当前排除规则:$exclude_w" + comp_box "$CORECFG_CUR_EXCLUDE$exclude_w" fi - btm_box "\033[36m请直接输入需要排除的节点关键字(支持正则,不支持空格)\033[0m" \ - "或输入 c 清空排除规则" \ - "或输入 0 返回上级菜单" - read -r -p "请输入> " text + btm_box "\033[36m$CORECFG_INPUT_EXCLUDE\033[0m" \ + "$CORECFG_CLEAR_EXCLUDE" \ + "$CORECFG_OR_BACK" + read -r -p "$CORECFG_INPUT> " text text=$(echo "$text" | sed 's/ //g') # 去空格 case "$text" in 0) @@ -441,14 +443,14 @@ custproviders() { ;; 5) if [ -z "$include_w" ]; then - comp_box "当前包含规则:无" + comp_box "$CORECFG_CUR_INCLUDE_NONE" else - comp_box "当前包含规则:$include_w" + comp_box "$CORECFG_CUR_INCLUDE$include_w" fi - btm_box "\033[36m请直接输入需要包含的节点关键字(支持正则,不支持空格)\033[0m" \ - "或输入 c 清空包含规则" \ - "或输入 0 返回上级菜单" - read -r -p "请输入> " text + btm_box "\033[36m$CORECFG_INPUT_INCLUDE\033[0m" \ + "$CORECFG_CLEAR_INCLUDE" \ + "$CORECFG_OR_BACK" + read -r -p "$CORECFG_INPUT> " text text=$(echo "$text" | sed 's/ //g') # 去空格 case "$text" in 0) @@ -475,9 +477,9 @@ jump_core_config() { . "$CRASHDIR"/starts/core_config.sh && get_core_config if [ "$?" = 0 ]; then if [ "$inuserguide" != 1 ]; then - comp_box "是否启动服务以使配置文件生效:" - btm_box "1) 是" \ - "0) 否" + comp_box "$CORECFG_START_APPLY" + btm_box "1) $CORECFG_YES" \ + "0) $CORECFG_NO" read -r -p "$COMMON_INPUT> " res if [ "$res" = 1 ]; then start_core diff --git a/scripts/menus/7_gateway.sh b/scripts/menus/7_gateway.sh index b1653dd5..ab127aa9 100644 --- a/scripts/menus/7_gateway.sh +++ b/scripts/menus/7_gateway.sh @@ -7,6 +7,7 @@ __IS_MODULE_7_GATEWAY_LOADED=1 . "$GT_CFG_PATH" . "$CRASHDIR"/menus/check_port.sh . "$CRASHDIR"/libs/gen_base64.sh +load_lang 7_gateway # 访问与控制主菜单 gateway() { @@ -22,8 +23,8 @@ gateway() { content_line "7) 配置\033[36mWireguard客户端\033[0m(限Singbox) \033[32m$wg_service\033[0m" } btm_box "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break @@ -95,8 +96,8 @@ set_fw_wan() { "3) 移除指定手动放行端口" \ "4) 清空全部手动放行端口" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case $num in "" | 0) break @@ -124,7 +125,7 @@ set_fw_wan() { msg_alert "\033[31m最多支持设置放行10个端口,请先减少一些!\033[0m" else line_break - read -r -p "请输入要放行的端口号> " port + read -r -p "$GW_INPUT_ALLOW_PORT> " port if echo ",$fw_wan_ports," | grep -q ",$port,"; then msg_alert "\033[31m输入错误!请勿重复添加!\033[0m" elif [ "$port" -lt 1 ] || [ "$port" -gt 65535 ]; then @@ -188,7 +189,7 @@ set_bot_tg_config() { } EOF ) - TEXT="已完成Telegram机器人设置!请使用 /$my_alias 呼出功能菜单!" + TEXT="$GW_TG_DONE_PREFIX /$my_alias $GW_TG_DONE_SUFFIX" . "$CRASHDIR"/libs/web_json.sh bot_api="https://api.telegram.org/bot$TOKEN" web_json_post "$bot_api/setMyCommands" "$JSON" @@ -221,15 +222,15 @@ set_bot_tg_service() { set_bot_tg() { while true; do - [ -n "$ts_auth_key" ] && ts_auth_key_info='已设置' - [ -n "$TG_CHATID" ] && TG_CHATID_info='已绑定' + [ -n "$ts_auth_key" ] && ts_auth_key_info="$GW_SET" + [ -n "$TG_CHATID" ] && TG_CHATID_info="$GW_BOUND" comp_box "\033[31m注意:\033[0m由于网络环境原因,此机器人仅限服务启动时运行!" btm_box "1) 启用/关闭TG-BOT服务 \033[32m$bot_tg_service\033[0m" \ "2) TG-BOT绑定设置 \033[32m$TG_CHATID_info\033[0m" \ "3) 启动时推送菜单 \033[32m$TG_menupush\033[0m" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break @@ -289,8 +290,8 @@ set_vmess() { content_line "6) 设置\033[36m混淆host(可选)\033[0m: \033[33m$vms_host\033[0m" btm_box "7) 一键生成\033[32m分享链接\033[0m" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break @@ -310,7 +311,7 @@ set_vmess() { ;; 2) line_break - read -r -p "请输入端口号(输入0删除)> " text + read -r -p "$GW_INPUT_PORT_DEL0> " text if [ "$text" = 0 ]; then vms_port='' setconfig vms_port "" "$GT_CFG_PATH" @@ -323,7 +324,7 @@ set_vmess() { ;; 3) line_break - read -r -p "请输入ws-path路径(输入0删除)> " text + read -r -p "$GW_INPUT_WSPATH> " text if [ "$text" = 0 ]; then vms_ws_path='' setconfig vms_ws_path "" "$GT_CFG_PATH" @@ -336,7 +337,7 @@ set_vmess() { ;; 4) line_break - read -r -p "请输入UUID(输入0删除)> " text + read -r -p "$GW_INPUT_UUID> " text if [ "$text" = 0 ]; then vms_uuid='' setconfig vms_uuid "" "$GT_CFG_PATH" @@ -412,8 +413,8 @@ set_shadowsocks() { gen_base64 1 >/dev/null 2>&1 && content_line "5) 一键生成分享链接" btm_box "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break @@ -433,7 +434,7 @@ set_shadowsocks() { ;; 2) line_break - read -r -p "请输入端口号(输入0删除)> " text + read -r -p "$GW_INPUT_PORT_DEL0> " text if [ "$text" = 0 ]; then sss_port='' setconfig sss_port "" "$GT_CFG_PATH" @@ -459,8 +460,8 @@ set_shadowsocks() { content_line "7) \033[32m2022-blake3-aes-256-gcm\033[0m" } btm_box "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in 0) ;; 1) @@ -510,7 +511,7 @@ set_shadowsocks() { ;; 5) line_break - read -r -p "请输入本机公网IP(4/6)或域名> " text + read -r -p "$GW_INPUT_HOST> " text if [ -n "$text" ] && [ -n "$sss_port" ] && [ -n "$sss_cipher" ] && [ -n "$sss_pwd" ]; then ss_link="ss://$(gen_base64 "$sss_cipher":"$sss_pwd")@${text}:${sss_port}#ShellCrash_ss_in" line_break @@ -541,8 +542,8 @@ set_tailscale() { "4) 通告路由\033[31m全部流量\033[0m(EXIT-NODE) \033[36m$ts_exit_node\033[0m" \ "5) 设置\033[36m设备名称\033[0m(可选) $ts_hostname" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break @@ -621,8 +622,8 @@ set_wireguard() { "7) 设置\033[33m组网IPV4地址\033[0m: \033[33m$wg_ipv4\033[0m" \ "8) 可选\033[33m组网IPV6地址\033[0m: \033[33m$wg_ipv6\033[0m" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break diff --git a/scripts/menus/8_tools.sh b/scripts/menus/8_tools.sh index 7174d951..d98f029c 100644 --- a/scripts/menus/8_tools.sh +++ b/scripts/menus/8_tools.sh @@ -6,6 +6,7 @@ __IS_MODULE_8_TOOLS_LOADED=1 . "$CRASHDIR"/libs/logger.sh . "$CRASHDIR"/libs/web_get_bin.sh +load_lang 8_tools stop_iptables() { iptables -w -t nat -D PREROUTING -p tcp -m multiport --dports "$ssh_port" -j REDIRECT --to-ports 22 >/dev/null 2>&1 @@ -14,7 +15,7 @@ stop_iptables() { ssh_tools() { while true; do - [ -n "$(cat /etc/firewall.user 2>&1 | grep '启用外网访问SSH服务')" ] && ssh_ol=禁止 || ssh_ol=开启 + [ -n "$(cat /etc/firewall.user 2>&1 | grep '启用外网访问SSH服务')" ] && ssh_ol=$TOOLS_SSH_DISABLE || ssh_ol=$TOOLS_SSH_ENABLE [ -z "$ssh_port" ] && ssh_port=10022 comp_box "\033[33m此功能仅针对使用Openwrt系统的设备生效,且不依赖服务\033[0m" \ "\033[31m本功能不支持红米AX6S等镜像化系统设备,请勿尝试!\033[0m" @@ -23,7 +24,7 @@ ssh_tools() { "3) \033[33m$ssh_ol\033[0m外网访问SSH" \ "" \ "0) 返回上级菜单 \033[0m" - read -r -p "请输入对应标号> " num + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break @@ -34,16 +35,16 @@ ssh_tools() { if [ -z "$num" ]; then errornum elif [ "$num" -gt 65535 ] || [ "$num" -le 999 ]; then - msg_alert "\033[31m输入错误!请输入正确的数值(1000-65535)!\033[0m" + msg_alert "\033[31m$TOOLS_ERR_PORT\033[0m" elif [ -n "$(netstat -ntul | grep :$num)" ]; then - msg_alert "\033[31m当前端口已被其他进程占用,请重新输入!\033[0m" + msg_alert "\033[31m$TOOLS_ERR_PORT_OCCUPIED\033[0m" else ssh_port=$num setconfig ssh_port "$ssh_port" sed -i "/启用外网访问SSH服务/d" /etc/firewall.user stop_iptables - msg_alert "\033[32m设置成功,请重新开启外网访问SSH功能!" + msg_alert "\033[32m$TOOLS_SSH_SET_OK" fi ;; 2) @@ -56,11 +57,11 @@ ssh_tools() { [ -n "$(ckcmd ip6tables)" ] && ip6tables -w -t nat -A PREROUTING -p tcp -m multiport --dports "$ssh_port" -j REDIRECT --to-ports 22 echo "iptables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22 #启用外网访问SSH服务" >>/etc/firewall.user [ -n "$(ckcmd ip6tables)" ] && echo "ip6tables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22 #启用外网访问SSH服务" >>/etc/firewall.user - comp_box "已开启外网访问SSH功能!" + comp_box "$TOOLS_SSH_ENABLED" else sed -i "/启用外网访问SSH服务/d" /etc/firewall.user stop_iptables - comp_box "已禁止外网访问SSH!" + comp_box "$TOOLS_SSH_DISABLED" fi break ;; @@ -75,10 +76,10 @@ ssh_tools() { tools() { while true; do # 获取设置默认显示 - grep -qE "^\s*[^#].*otapredownload" /etc/crontabs/root >/dev/null 2>&1 && mi_update=禁用 || mi_update=启用 - [ "$mi_mi_autoSSH" = "已配置" ] && mi_mi_autoSSH_type=32m已配置 || mi_mi_autoSSH_type=31m未配置 + grep -qE "^\s*[^#].*otapredownload" /etc/crontabs/root >/dev/null 2>&1 && mi_update=$TOOLS_DISABLE || mi_update=$TOOLS_ENABLE + [ "$mi_mi_autoSSH" = "$TOOLS_CONFIGURED" ] && mi_mi_autoSSH_type=32m$TOOLS_CONFIGURED || mi_mi_autoSSH_type=31m$COMMON_UNSET [ -f "$CRASHDIR"/tools/tun.ko ] && mi_tunfix=32mON || mi_tunfix=31mOFF - comp_box "\033[30;47m工具与优化\033[0m" \ + comp_box "\033[30;47m$TOOLS_TITLE\033[0m" \ "" \ "\033[33m本页工具可能无法兼容全部Linux设备,请酌情使用!\033[0m" \ "磁盘占用/所在目录:" \ @@ -91,8 +92,8 @@ tools() { [ "$systype" = "mi_snapshot" ] && content_line "6) 小米设备软固化SSH ———— \033[$mi_mi_autoSSH_type \033[0m" [ "$systype" = "mi_snapshot" ] && content_line "8) 小米设备Tun模块修复 ———— \033[$mi_tunfix \033[0m" btm_box "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break @@ -164,7 +165,7 @@ tools() { comp_box "\033[33m本功能需要修改系统文件,不保证没有任何风险!\033[0m" \ "\033[33m本功能采集的Tun模块并不一定适用于你的设备!\033[0m" btm_box "1) 我已知晓,出现问题会自行承担!" \ - "0) 返回上级菜单" + "0) $COMMON_BACK" read -r -p "请输入对应标号> " res if [ "$res" = 1 ]; then line_break @@ -199,7 +200,7 @@ mi_autoSSH() { btm_box "请输入需要还原的SSH密码(不影响当前密码)" \ "(回车可跳过)" read -r -p "请输入> " mi_mi_autoSSH_pwd - mi_mi_autoSSH=已配置 + mi_mi_autoSSH=$TOOLS_CONFIGURED cp -f /etc/dropbear/dropbear_rsa_host_key "$CRASHDIR"/configs/dropbear_rsa_host_key 2>/dev/null cp -f /etc/dropbear/authorized_keys "$CRASHDIR"/configs/authorized_keys 2>/dev/null ckcmd nvram && { @@ -211,7 +212,7 @@ mi_autoSSH() { } setconfig mi_mi_autoSSH $mi_mi_autoSSH setconfig mi_mi_autoSSH_pwd "$mi_mi_autoSSH_pwd" - msg_alert "\033[32m设置成功!\033[0m" + msg_alert "\033[32m$COMMON_SUCCESS\033[0m" } # 日志菜单 @@ -239,8 +240,8 @@ log_pusher() { "c) 设置设备名称 ——\033[$device_s\033[0m" \ "d) 清空日志文件" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break @@ -266,8 +267,8 @@ log_pusher() { comp_box "1) 使用公共机器人 ——不依赖内核服务" \ "2) 使用私人机器人 ——需要额外申请" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in 0) return 0 @@ -378,7 +379,7 @@ log_pusher() { elif [ -n "$key" ]; then comp_box "\033[33m请检查注册邮箱,完成账户验证\033[0m" btm_box "1) 我已经验证完成" \ - "0) 返回上级菜单" + "0) $COMMON_BACK" read -r -p "我已经验证完成(1/0)> " res if [ "$res" = 1 ]; then comp_box "请通过 \033[32;4mhttps://pushover.net/apps/build\033[0m 生成\033[36mAPI Token\033[0m" @@ -542,8 +543,8 @@ testcommand() { "5) 查看内核配置文件前40行" \ "6) 测试代理服务器连通性(google.tw)" \ "" \ - "0) 返回上级目录" - read -r -p "请输入对应数字> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in 0) break @@ -661,8 +662,8 @@ debug() { content_line "8) 后台运行完整启动流程,输出执行错误并查找上下文,之后关闭进程" [ -s "$TMPDIR"/jsons/inbounds.json ] && content_line "9) 将\033[32m$config_tmp\033[0m下json文件合并为$TMPDIR/debug.json" btm_box "" \ - "0) 返回上级目录" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in 0) ;; 1) diff --git a/scripts/menus/9_upgrade.sh b/scripts/menus/9_upgrade.sh index 90761210..96a4db88 100644 --- a/scripts/menus/9_upgrade.sh +++ b/scripts/menus/9_upgrade.sh @@ -7,10 +7,11 @@ __IS_MODULE_9_UPGRADE_LOADED=1 . "$CRASHDIR"/libs/check_dir_avail.sh . "$CRASHDIR"/libs/check_cpucore.sh . "$CRASHDIR"/libs/web_get_bin.sh +load_lang 9_upgrade error_down() { - btm_box "\033[33m请尝试切换至其他安装源后重新下载!\033[0m" \ - "或者参考 \033[32;4mhttps://juewuy.github.io/bdaz\033[0m 进行本地安装!" + btm_box "\033[33m$UPG_ERR_TRY_OTHER_SOURCE\033[0m" \ + "$UPG_ERR_LOCAL_INSTALL" sleep 1 } @@ -22,25 +23,25 @@ upgrade() { fi [ -z "$core_v" ] && core_v=$crashcore core_v_new=$(eval echo \$"$crashcore"_v) - top_box "\033[30;47m更新与支持\033[0m" \ + top_box "\033[30;47m$UPG_TITLE\033[0m" \ "" \ - "当前目录(\033[32m$CRASHDIR\033[0m)剩余空间:\033[36m$(dir_avail "$CRASHDIR" -h)\033[0m" + "$UPG_CUR_DIR_SPACE(\033[32m$CRASHDIR\033[0m):\033[36m$(dir_avail "$CRASHDIR" -h)\033[0m" [ "$(dir_avail "$CRASHDIR")" -le 5120 ] && [ "$CRASHDIR" = "$BINDIR" ] && { - content_line "\033[33m当前目录剩余空间较低,建议开启小闪存模式!\033[0m" + content_line "\033[33m$UPG_LOW_SPACE_HINT\033[0m" } separator_line "=" - btm_box "1) 更新\033[36m管理脚本\t\033[33m$versionsh_l\033[0m > \033[32m$version_new \033[36m$release_type\033[0m" \ - "2) 切换/更新\033[33m内核文件\t\033[33m$core_v\033[0m > \033[32m$core_v_new\033[0m" \ - "3) 安装/更新本地\033[32m数据库文件\033[0m" \ - "4) 安装/更新本地\033[35mDashboard面板\033[0m" \ - "5) 安装/更新本地\033[33m根证书文件\033[0m" \ - "6) \033[32mPAC\033[0m自动代理查看" \ - "7) 切换\033[36m安装源及版本分支\033[0m" \ - "8) \033[31m卸载ShellCrash\033[0m" \ - "9) \033[36m感谢列表!\033[0m" \ + btm_box "1) $UPG_MENU_SCRIPT\033[36m$UPG_MENU_SCRIPT_NAME\t\033[33m$versionsh_l\033[0m > \033[32m$version_new \033[36m$release_type\033[0m" \ + "2) $UPG_MENU_CORE\033[33m$UPG_MENU_CORE_NAME\t\033[33m$core_v\033[0m > \033[32m$core_v_new\033[0m" \ + "3) $UPG_MENU_GEO\033[32m$UPG_MENU_GEO_NAME\033[0m" \ + "4) $UPG_MENU_DB\033[35m$UPG_MENU_DB_NAME\033[0m" \ + "5) $UPG_MENU_CRT\033[33m$UPG_MENU_CRT_NAME\033[0m" \ + "6) \033[32mPAC\033[0m$UPG_MENU_PAC" \ + "7) $UPG_MENU_SOURCE\033[36m$UPG_MENU_SOURCE_NAME\033[0m" \ + "8) \033[31m$UPG_MENU_UNINSTALL\033[0m" \ + "9) \033[36m$UPG_MENU_THANKS\033[0m" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应数字> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break @@ -61,8 +62,8 @@ upgrade() { setcrt ;; 6) - msg_alert -t 2 "PAC配置链接为:\033[30;47m http://$host:$db_port/ui/pac \033[0m" \ - "PAC的使用教程请参考:\033[4;32mhttps://juewuy.github.io/ehRUeewcv\033[0m" + msg_alert -t 2 "$UPG_PAC_LINK\033[30;47m http://$host:$db_port/ui/pac \033[0m" \ + "$UPG_PAC_GUIDE\033[4;32mhttps://juewuy.github.io/ehRUeewcv\033[0m" ;; 7) setserver @@ -71,7 +72,7 @@ upgrade() { . "$CRASHDIR"/menus/uninstall.sh && uninstall ;; 9) - comp_box "感谢以下项目及其开发者们的无私奉献!" + comp_box "$UPG_THANKS_TITLE" btm_box "\033[32mClash \033[0m开发:\033[36mDreamacro\033[0m" \ "" \ "\033[32msing-box \033[0m开发:\033[36mSagerNet\033[0m" \ @@ -95,7 +96,7 @@ upgrade() { "\033[32mDustinWin \033[0m开发:\033[36mDustinWin\033[0m" \ "开发者地址:\033[32mhttps://github.com/DustinWin\033[0m" \ "" - btm_box "特别感谢:\033[36m所有帮助及赞助过此项目的同仁们!\033[0m" + btm_box "$UPG_THANKS_SPECIAL" sleep 2 ;; *) @@ -109,18 +110,18 @@ upgrade() { checkupdate() { line_break separator_line "=" - content_line "\033[32m正在检查更新......\033[0m" + content_line "\033[32m$UPG_CHECKING\033[0m" get_bin "$TMPDIR"/version_new version echooff [ "$?" = "0" ] && { version_new=$(cat "$TMPDIR"/version_new) get_bin "$TMPDIR"/version_new bin/version echooff - content_line "\033[32m检查更新成功\033[0m" + content_line "\033[32m$UPG_CHECK_OK\033[0m" separator_line "=" } if [ "$?" = "0" ]; then . "$TMPDIR"/version_new 2>/dev/null else - content_line "\033[31m检查更新失败!请尝试切换其他安装源!\033[0m" + content_line "\033[31m$UPG_CHECK_FAIL\033[0m" separator_line "=" setserver if [ "$checkupdate" != false ]; then @@ -137,21 +138,21 @@ getscripts() { get_bin "$TMPDIR"/ShellCrash.tar.gz ShellCrash.tar.gz if [ "$?" != "0" ]; then - content_line "\033[33m文件下载失败!\033[0m" + content_line "\033[33m$UPG_DOWNLOAD_FAIL\033[0m" error_down else "$CRASHDIR"/start.sh stop 2>/dev/null # 解压 - content_line "开始解压文件......" + content_line "$UPG_EXTRACTING" mkdir -p "$CRASHDIR" >/dev/null tar -zxf "$TMPDIR/ShellCrash.tar.gz" ${tar_para} -C "$CRASHDIR"/ if [ $? -ne 0 ]; then - content_line "\033[33m文件解压失败!\033[0m" + content_line "\033[33m$UPG_EXTRACT_FAIL\033[0m" error_down else . "$CRASHDIR"/init.sh >/dev/null echo "$release_type" | grep -qE '^[0-9]' && setconfig userguide #回退时重新新手引导 - content_line "\033[32m脚本更新成功!\033[0m" + content_line "\033[32m$UPG_SCRIPT_OK\033[0m" separator_line "=" fi fi @@ -161,13 +162,13 @@ getscripts() { setscripts() { while true; do - comp_box "\033[33m注意:更新时会停止服务!\033[0m" \ + comp_box "\033[33m$UPG_SCRIPT_WARN\033[0m" \ "" \ - "当前脚本版本为:\033[36m$versionsh_l\033[0m" \ - "最新脚本版本为:\033[32m$version_new\033[0m" - btm_box "1) 立即更新" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " res + "$UPG_SCRIPT_CUR_VER\033[36m$versionsh_l\033[0m" \ + "$UPG_SCRIPT_NEW_VER\033[32m$version_new\033[0m" + btm_box "1) $UPG_UPDATE_NOW" \ + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " res case "$res" in "" | 0) break @@ -176,7 +177,7 @@ setscripts() { # 下载更新 getscripts # 提示 - msg_alert "\033[32m管理脚本更新成功!\033[0m" + msg_alert "\033[32m$UPG_SCRIPT_MGR_OK\033[0m" line_break exit 0 ;; @@ -192,10 +193,10 @@ setscripts() { setcpucore() { cpucore_list="armv5 armv7 arm64 386 amd64 mipsle-softfloat mipsle-hardfloat mips-softfloat" - comp_box "\033[31m仅适合脚本无法正确识别核心或核心无法正常运行时使用!\033[0m" \ - "不知道如何获取核心版本?\033[0m" \ - "请参考:\033[36;4mhttps://juewuy.github.io/bdaz\033[0m" - content_line "当前可供在线下载的处理器架构为:" + comp_box "\033[31m$UPG_CPUCORE_HINT1\033[0m" \ + "$UPG_CPUCORE_HINT2" \ + "$UPG_CPUCORE_HINT3\033[36;4mhttps://juewuy.github.io/bdaz\033[0m" + content_line "$UPG_CPUCORE_LIST" separator_line "-" echo "$cpucore_list" | @@ -205,11 +206,11 @@ setcpucore() { done separator_line "=" - read -r -p "请输入对应标号> " num + read -r -p "$COMMON_INPUT> " num [ -n "$num" ] && setcpucore=$(echo "$cpucore_list" | awk '{print $"'"$num"'"}') if [ -z "$setcpucore" ]; then cpucore="" - msg_alert "\033[31m请输入正确的处理器架构!\033[0m" + msg_alert "\033[31m$UPG_CPUCORE_ERR\033[0m" else cpucore=$setcpucore setconfig cpucore "$cpucore" @@ -220,14 +221,14 @@ setcpucore() { setcoretype() { while true; do echo "$crashcore" | grep -q 'singbox' && core_old=singbox || core_old=clash - comp_box "\033[33m请确认该自定义内核的类型:\033[0m" + comp_box "\033[33m$UPG_CORETYPE_CONFIRM\033[0m" btm_box "1) Mihomo(Meta)" \ "2) Singbox-reF1nd" \ "3) Singbox" \ "4) Clash" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) ;; 1) @@ -258,12 +259,12 @@ switch_core() { [ "$core_new" != "$core_old" ] && { [ "$dns_mod" = "redir_host" ] && [ "$core_old" = "clash" ] && setconfig dns_mod mix #singbox自动切换dns [ "$dns_mod" = "mix" ] && [ "$crashcore" = 'clash' -o "$crashcore" = 'clashpre' ] && setconfig dns_mod redir_host #singbox自动切换dns - comp_box "\033[33m已从$core_old内核切换至$core_new内核\033[0m" \ - "\033[33m二者Geo数据库及yaml/json配置文件不通用\033[0m" \ - "是否保留相关数据库文件?" - btm_box "1) 保留" \ - "0) 不保留" - read -r -p "请输入对应标号> " res + comp_box "\033[33m$UPG_CORE_SWITCH_PREFIX$core_old$UPG_CORE_SWITCH_MID$core_new$UPG_CORE_SWITCH_SUFFIX\033[0m" \ + "\033[33m$UPG_CORE_SWITCH_WARN\033[0m" \ + "$UPG_CORE_SWITCH_KEEP" + btm_box "1) $UPG_KEEP" \ + "0) $UPG_NOT_KEEP" + read -r -p "$COMMON_INPUT> " res [ "$res" = '0' ] && { [ "$core_old" = "clash" ] && { geodate='Country.mmdb GeoSite.dat ruleset/*.mrs ruleset/*.yaml ruleset/*.yml' @@ -355,8 +356,8 @@ checkcustcore() { content_line "$line" done btm_box "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in 0) return 0 @@ -408,8 +409,8 @@ setcustcore() { "4) Premium-2023.08.17内核(已停止维护)" \ "9) \033[33m自定义内核链接 \033[0m" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break @@ -469,7 +470,7 @@ setziptype() { sub_content_line "占用可能略高,稳定性自测" content_line "0) 返回上级菜单" separator_line "=" - read -r -p "请输入对应标号> " num + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) ;; 1) @@ -524,8 +525,8 @@ setcore() { "7) \033[32m更新当前内核\033[0m" \ "9) 手动指定处理器架构" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break @@ -654,7 +655,7 @@ checkcustgeo() { content_line "" content_line "0) 返回上级菜单" separator_line "=" - read -r -p "请输入对应标号> " num + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break @@ -712,7 +713,7 @@ setcustgeo() { content_line "" content_line "0) 返回上级菜单" separator_line "=" - read -r -p "请输入对应标号> " num + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break @@ -776,8 +777,8 @@ setgeo() { "8) \033[36m自定义数据库文件\033[0m" \ "9) \033[31m清理数据库文件\033[0m" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break @@ -820,8 +821,8 @@ setgeo() { comp_box "\033[33m这将清理$CRASHDIR目录及/ruleset目录下所有数据库文件!\033[0m" \ "清理后启动服务即可自动下载所需文件" btm_box "1) 确认清理" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " res + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " res case "$res" in "" | 0) break @@ -898,8 +899,8 @@ dbdir() { if [ -f /www/clash/CNAME ] || [ -f "$CRASHDIR"/ui/CNAME ]; then comp_box "\033[33m检测到已经安装过本地面板\033[0m" btm_box "1) 升级/覆盖安装" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " res + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " res if [ "$res" = 1 ]; then rm -rf "$BINDIR"/ui [ -f /www/clash/CNAME ] && rm -rf /www/clash && dbdir=/www/clash @@ -914,8 +915,8 @@ dbdir() { btm_box "1) 在${CRASHDIR}/ui目录安装" \ "2) 在/www/clash目录安装" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) return 0 @@ -958,8 +959,8 @@ setdb() { "6) 安装\033[32mYacd面板\033[0m(约1.1mb)" \ "9) \033[31m卸载本地面板\033[0m" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break @@ -994,8 +995,8 @@ setdb() { while true; do comp_box "是否卸载本地面板?" btm_box "1) 确认卸载" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " res + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " res case "$res" in "" | 0) break @@ -1074,7 +1075,7 @@ setcrt() { fi content_line "0) 返回上级菜单" separator_line "=" - read -r -p "请输入对应标号> " res + read -r -p "$COMMON_INPUT> " res case "$res" in "" | 0) break @@ -1136,8 +1137,8 @@ setserver() { "d) 自定义源地址(用于本地源或自建源)" \ "e) \033[31m版本回退\033[0m" \ "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) checkupdate=false @@ -1179,8 +1180,8 @@ setserver() { content_line "是否依然切换到开发版?" separator_line "-" btm_box "1) 确认切换" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " res + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " res case "$res" in "" | 0) break @@ -1225,8 +1226,8 @@ setserver() { content_line "\033[31m请选择想要回退至的具体版本:\033[0m" list_box "$list" btm_box "" \ - "0) 返回上级菜单" - read -r -p "请输入对应标号> " num + "0) $COMMON_BACK" + read -r -p "$COMMON_INPUT> " num if [ -z "$num" ] || [ "$num" = 0 ]; then continue elif [ "$num" -le $(echo "$list" | awk 'END{print NR}') ]; then diff --git a/scripts/menus/dns.sh b/scripts/menus/dns.sh index 2db97f51..7294fce3 100644 --- a/scripts/menus/dns.sh +++ b/scripts/menus/dns.sh @@ -14,9 +14,9 @@ set_dns_mod() { [ -z "$ecs_subnet" ] && ecs_subnet=OFF comp_box "$DNS_CURRENT_MODE\033[47;30m $dns_mod \033[0m" \ "\033[33m$DNS_RESTART_NOTICE\033[0m" - content_line "1) 设为MIX$COMMON_MOD:\t\033[32m$DNS_MODE_MIX_DESC\033[0m" - content_line "2) 设为Route$COMMON_MOD:\t\033[32m$DNS_MODE_ROUTE_DESC\033[0m" - content_line "3) 设为Redir$COMMON_MOD:\t\033[33m$DNS_MODE_REDIR_DESC\033[0m" + content_line "1) $DNS_SET_TO MIX$COMMON_MOD:\t\033[32m$DNS_MODE_MIX_DESC\033[0m" + content_line "2) $DNS_SET_TO Route$COMMON_MOD:\t\033[32m$DNS_MODE_ROUTE_DESC\033[0m" + content_line "3) $DNS_SET_TO Redir$COMMON_MOD:\t\033[33m$DNS_MODE_REDIR_DESC\033[0m" content_line "" content_line "4) $DNS_MENU_PROTECT:\t \033[36m$dns_protect\033[0m\t$DNS_PROTECT_DESC" content_line "5) $DNS_MENU_HOSTS:\t \033[36m$hosts_opt\033[0m\t$DNS_HOSTS_DESC" @@ -52,14 +52,14 @@ set_dns_mod() { line_break separator_line "=" if [ "$dns_protect" = ON ]; then - content_line "当前\033[33m已启用\033[0mDNS防泄漏,是否确认禁用?" + content_line "$DNS_PROTECT_NOW\033[33m$DNS_ENABLED\033[0m$DNS_PROTECT_DISABLE_Q" else - content_line "当前\033[33m已禁用\033[0mDNS防泄漏,是否确认启用?" + content_line "$DNS_PROTECT_NOW\033[33m$DNS_DISABLED\033[0m$DNS_PROTECT_ENABLE_Q" fi separator_line "=" - btm_box "1) 是" \ - "2) 重置为默认值" \ - "0) 否,返回上级菜单" + btm_box "1) $DNS_YES" \ + "2) $DNS_RESET_DEFAULT" \ + "0) $DNS_NO_BACK" read -r -p "$COMMON_INPUT> " num case "$num" in 0) @@ -89,14 +89,14 @@ set_dns_mod() { line_break separator_line "=" if [ "$hosts_opt" = ON ]; then - content_line "当前\033[33m已启用\033[0mHosts优化,是否确认禁用?" + content_line "$DNS_HOSTS_NOW\033[33m$DNS_ENABLED\033[0m$DNS_HOSTS_DISABLE_Q" else - content_line "当前\033[33m已禁用\033[0mHosts优化,是否确认启用?" + content_line "$DNS_HOSTS_NOW\033[33m$DNS_DISABLED\033[0m$DNS_HOSTS_ENABLE_Q" fi separator_line "=" - btm_box "1) 是" \ - "2) 重置为默认值" \ - "0) 否,返回上级菜单" + btm_box "1) $DNS_YES" \ + "2) $DNS_RESET_DEFAULT" \ + "0) $DNS_NO_BACK" read -r -p "$COMMON_INPUT> " num case "$num" in 0) @@ -127,14 +127,14 @@ set_dns_mod() { line_break separator_line "=" if [ "$ecs_subnet" = ON ]; then - content_line "当前\033[33m已启用\033[0mHosts优化,是否确认禁用?" + content_line "$DNS_HOSTS_NOW\033[33m$DNS_ENABLED\033[0m$DNS_HOSTS_DISABLE_Q" else - content_line "当前\033[33m已禁用\033[0mHosts优化,是否确认启用?" + content_line "$DNS_HOSTS_NOW\033[33m$DNS_DISABLED\033[0m$DNS_HOSTS_ENABLE_Q" fi separator_line "=" - btm_box "1) 是" \ - "2) 重置为默认值" \ - "0) 否,返回上级菜单" + btm_box "1) $DNS_YES" \ + "2) $DNS_RESET_DEFAULT" \ + "0) $DNS_NO_BACK" read -r -p "$COMMON_INPUT> " num case "$num" in 0) @@ -164,10 +164,10 @@ set_dns_mod() { comp_box "\033[31m$DNS_REDIR_WARN\033[0m" \ "\033[33m$DNS_REDIR_HINT 127.0.0.1:$dns_port\033[0m" \ "" \ - "\033[36m请直接输入旁路由IPV4地址\033[0m" \ - "或输入 r 重置DNS劫持端口" \ - "或输入 0 返回上级菜单" - read -r -p "请输入> " num + "\033[36m$DNS_INPUT_REDIR_PORT\033[0m" \ + "$DNS_INPUT_REDIR_RESET" \ + "$DNS_INPUT_REDIR_BACK" + read -r -p "$DNS_INPUT> " num case "$num" in 0) break @@ -224,7 +224,7 @@ fake_ip_filter() { content_line "\033[33m$DNS_FAKEIP_EMPTY\033[0m" fi btm_box "" \ - "0) 返回上级菜单" + "0) $COMMON_BACK" read -r -p "$DNS_FAKEIP_EDIT> " input case "$input" in "" | 0) @@ -233,20 +233,20 @@ fake_ip_filter() { *) if [ "$input" -ge 1 ] 2>/dev/null; then if sed -i "${input}d" "$CRASHDIR/configs/fake_ip_filter"; then - msg_alert "\033[32m移除成功\033[0m" + msg_alert "\033[32m$DNS_REMOVE_OK\033[0m" else - msg_alert "\033[31m移除失败\033[0m" + msg_alert "\033[31m$DNS_REMOVE_FAIL\033[0m" fi else - comp_box "请确认需要添加的地址:\033[32m$input\033[0m" - btm_box "1) 确认无误" \ - "0) 返回上级菜单" + comp_box "$DNS_CONFIRM_ADD\033[32m$input\033[0m" + btm_box "1) $DNS_CONFIRM_OK" \ + "0) $COMMON_BACK" read -r -p "$COMMON_INPUT>" res if [ "$res" = 1 ]; then if echo "$input" >>"$CRASHDIR/configs/fake_ip_filter"; then - msg_alert "\033[32m添加成功\033[0m" + msg_alert "\033[32m$DNS_ADD_OK\033[0m" else - msg_alert "\033[31m添加失败\033[0m" + msg_alert "\033[31m$DNS_ADD_FAIL\033[0m" fi else break @@ -286,11 +286,11 @@ set_dns_adv() { break ;; 1) - comp_box "当前DIRECT-DNS:\033[32m$dns_nameserver\033[0m" - btm_box "\033[36m请直接输入新的DIRECT-DNS地址\033[0m" \ - "或输入 r 重置DIRECT-DNS地址" \ - "或输入 0 返回上级菜单" - read -r -p "请输入> " res + comp_box "$DNS_DIRECT_NOW\033[32m$dns_nameserver\033[0m" + btm_box "\033[36m$DNS_INPUT_DIRECT_NEW\033[0m" \ + "$DNS_INPUT_DIRECT_RESET" \ + "$DNS_INPUT_REDIR_BACK" + read -r -p "$DNS_INPUT> " res case "$res" in 0) continue @@ -312,11 +312,11 @@ set_dns_adv() { esac ;; 2) - comp_box "当前PROXY-DNS:\033[32m$dns_fallback\033[0m" - btm_box "\033[36m请直接输入新的PROXY-DNS地址\033[0m" \ - "或输入 r 重置PROXY-DNS地址" \ - "或输入 0 返回上级菜单" - read -r -p "请输入> " res + comp_box "$DNS_PROXY_NOW\033[32m$dns_fallback\033[0m" + btm_box "\033[36m$DNS_INPUT_PROXY_NEW\033[0m" \ + "$DNS_INPUT_PROXY_RESET" \ + "$DNS_INPUT_REDIR_BACK" + read -r -p "$DNS_INPUT> " res case "$res" in 0) continue @@ -338,12 +338,12 @@ set_dns_adv() { esac ;; 3) - comp_box "当前DEFAULT-DNS:\033[32m$dns_resolver\033[0m" - btm_box "\033[36m请直接输入新的DEFAULT-DNS地址\033[0m" \ - "或输入 r 重置DEFAULT-DNS地址" \ - "或输入 0 返回上级菜单" + comp_box "$DNS_DEFAULT_NOW\033[32m$dns_resolver\033[0m" + btm_box "\033[36m$DNS_INPUT_DEFAULT_NEW\033[0m" \ + "$DNS_INPUT_DEFAULT_RESET" \ + "$DNS_INPUT_REDIR_BACK" separator_line "=" - read -r -p "请输入> " res + read -r -p "$DNS_INPUT> " res case "$res" in 0) continue diff --git a/scripts/menus/userguide.sh b/scripts/menus/userguide.sh index b64c5f1d..fae079a4 100644 --- a/scripts/menus/userguide.sh +++ b/scripts/menus/userguide.sh @@ -111,8 +111,8 @@ userguide() { comp_box "\033[0m$UG_IMPORT_CONFIG\033[0m" \ "\033[32m$UG_CONFIG_TIP\033[0m" \ "$UG_CONFIG_RES" - btm_box "1) 立即导入" \ - "0) 暂不导入" + btm_box "1) $UG_IMPORT_NOW" \ + "0) $UG_IMPORT_LATER" read -r -p "$COMMON_INPUT> " res [ "$res" = 1 ] && inuserguide=1 && { . "$CRASHDIR"/menus/6_core_config.sh && set_core_config