diff --git a/static/assets/plugins/custom/flatpickr/l10n/zh.js b/static/assets/plugins/custom/flatpickr/l10n/zh.js
new file mode 100644
index 00000000..4c5c7fc7
--- /dev/null
+++ b/static/assets/plugins/custom/flatpickr/l10n/zh.js
@@ -0,0 +1,68 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.zh = {}));
+}(this, (function (exports) { 'use strict';
+
+ var fp = typeof window !== "undefined" && window.flatpickr !== undefined
+ ? window.flatpickr
+ : {
+ l10ns: {},
+ };
+ var Mandarin = {
+ weekdays: {
+ shorthand: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
+ longhand: [
+ "星期日",
+ "星期一",
+ "星期二",
+ "星期三",
+ "星期四",
+ "星期五",
+ "星期六",
+ ],
+ },
+ months: {
+ shorthand: [
+ "一月",
+ "二月",
+ "三月",
+ "四月",
+ "五月",
+ "六月",
+ "七月",
+ "八月",
+ "九月",
+ "十月",
+ "十一月",
+ "十二月",
+ ],
+ longhand: [
+ "一月",
+ "二月",
+ "三月",
+ "四月",
+ "五月",
+ "六月",
+ "七月",
+ "八月",
+ "九月",
+ "十月",
+ "十一月",
+ "十二月",
+ ],
+ },
+ rangeSeparator: " 至 ",
+ weekAbbreviation: "周",
+ scrollTitle: "滚动切换",
+ toggleTitle: "点击切换 12/24 小时时制",
+ };
+ fp.l10ns.zh = Mandarin;
+ var zh = fp.l10ns;
+
+ exports.Mandarin = Mandarin;
+ exports.default = zh;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
diff --git a/static/locales/zh-CN/translation.json b/static/locales/zh-CN/translation.json
new file mode 100644
index 00000000..08e0e4e8
--- /dev/null
+++ b/static/locales/zh-CN/translation.json
@@ -0,0 +1,1140 @@
+{
+ "title": {
+ "setup": "初始设置",
+ "login": "登录",
+ "share_login": "分享登录",
+ "profile": "个人资料",
+ "change_password": "修改密码",
+ "files": "文件",
+ "shares": "分享",
+ "add_share": "添加分享",
+ "update_share": "更新分享",
+ "two_factor_auth": "两步验证",
+ "two_factor_auth_short": "两步验证",
+ "edit_file": "编辑文件",
+ "view_file": "查看文件",
+ "recovery_password": "密码恢复",
+ "reset_password": "密码重置",
+ "shared_files": "分享的文件",
+ "upload_to_share": "上传以分享",
+ "download_shared_file": "下载共享文件",
+ "share_access_error": "无法访问共享",
+ "invalid_auth_request": "认证请求无效",
+ "error400": "错误请求",
+ "error403": "禁止访问",
+ "error404": "未找到",
+ "error416": "请求的范围不可满足",
+ "error429": "请求次数过多",
+ "error500": "服务器内部错误",
+ "errorPDF": "无法显示 PDF 文件",
+ "error_editor": "无法打开文件编辑器",
+ "users": "用户",
+ "groups": "组",
+ "folders": "虚拟文件夹",
+ "connections": "活动连接",
+ "event_manager": "事件管理器",
+ "event_rules": "规则",
+ "event_actions": "操作",
+ "ip_manager": "IP 管理器",
+ "ip_lists": "IP 列表",
+ "defender": "自动屏蔽列表",
+ "admins": "管理员",
+ "roles": "角色",
+ "server_manager": "服务器管理",
+ "configs": "配置",
+ "logs": "日志",
+ "maintenance": "维护",
+ "status": "状态",
+ "add_user": "添加用户",
+ "update_user": "更新用户",
+ "template_user": "用户模板",
+ "template_admin": "管理模板",
+ "add_group": "添加组",
+ "update_group": "更新组",
+ "add_folder": "添加虚拟文件夹",
+ "update_folder": "更新虚拟文件夹",
+ "template_folder": "虚拟文件夹录模板",
+ "oauth2_error": "无法完成 OAuth2 流程",
+ "oauth2_success": "OAuth2 流程完成",
+ "add_role": "添加角色",
+ "update_role": "更新角色",
+ "add_admin": "添加管理员",
+ "update_admin": "更新管理员",
+ "add_ip_list": "添加 IP 列表项",
+ "update_ip_list": "更新 IP 列表项",
+ "add_action": "添加动作",
+ "update_action": "更新动作",
+ "add_rule": "添加规则",
+ "update_rule": "更新规则"
+ },
+ "setup": {
+ "desc": "要开始使用 SFTPGo,您需要创建管理员用户",
+ "submit": "创建管理员并登录",
+ "install_code_mismatch": "安装代码不匹配",
+ "help_text": "商业支持"
+ },
+ "login": {
+ "username": "用户名",
+ "password": "密码",
+ "your_username": "您的用户名",
+ "forgot_password": "忘记密码?",
+ "forgot_password_msg": "请在下面输入您的帐户用户名,您将收到一封电子邮件密码重置代码。",
+ "send_reset_code": "发送重置码",
+ "signin": "登录",
+ "signin_openid": "使用 OpenID 登录",
+ "signout": "注销",
+ "auth_code": "验证码",
+ "two_factor_help": "在您的设备上打开双因素认证应用程序,以查看您的认证代码并验证您的身份。",
+ "two_factor_msg": "输入双因素认证恢复密钥",
+ "recovery_code": "恢复代码",
+ "recovery_code_msg": "如果您无法访问您的移动设备,您可以输入一个恢复码。",
+ "reset_password": "重置密码",
+ "reset_pwd_msg": "检查您邮箱中的确认码",
+ "reset_submit": "更新密码并登录",
+ "confirm_code": "确认码",
+ "reset_pwd_forbidden": "您无权重置密码",
+ "reset_pwd_no_email": "您的账户没有电子邮件地址,无法通过发送电子邮件验证码重置您的密码",
+ "reset_pwd_send_email_err": "无法通过电子邮件发送确认码",
+ "reset_pwd_err_generic": "重置密码时发生意外错误",
+ "reset_ok_login_error": "密码重置成功完成,但在登录时发生异常错误",
+ "ip_not_allowed": "此 IP 地址不允许登录",
+ "two_factor_required": "设置双因素认证,它是以下协议所必需的:{{val}}。",
+ "two_factor_required_generic": "设置双因素认证,这是您帐户的强制要求",
+ "link": "跳转 {{link}}"
+ },
+ "theme": {
+ "light": "明亮",
+ "dark": "暗黑",
+ "system": "自动"
+ },
+ "general": {
+ "invalid_auth_request": "身份验证请求不符合安全要求",
+ "invalid_input": "无效的输入。斜线(/ ), 冒号 (:), 控制字符和保留系统名称是不允许的",
+ "error400": "收到的请求无效",
+ "error403": "您没有所需的权限。",
+ "error404": "请求的资源不存在",
+ "error416": "无法返回请求的文件片段",
+ "error429": "已超过速率限制",
+ "error500": "服务器无法满足您的请求",
+ "errorPDF": "此文件看起来不是一个 PDF",
+ "error_edit_dir": "无法编辑目录",
+ "error_edit_size": "文件大小超过允许的最大尺寸",
+ "invalid_form": "无效的表单",
+ "invalid_credentials": "无效的凭据,请重试",
+ "invalid_csrf": "表单令牌无效",
+ "invalid_token": "无效权限",
+ "confirm_logout": "您确定要退出吗?",
+ "wait": "请稍候...",
+ "ok": "确定",
+ "failed": "失败",
+ "cancel": "不,返回",
+ "submit": "保存",
+ "back": "返回",
+ "add": "添加",
+ "enable": "启用",
+ "disable": "停用",
+ "disable_confirm_btn": "是的,禁用",
+ "close": "关闭",
+ "search": "搜索",
+ "configuration": "配置",
+ "config_saved": "配置已保存",
+ "rename": "重命名",
+ "confirm": "是,继续",
+ "edit": "编辑",
+ "delete": "删除",
+ "delete_confirm_btn": "是,删除",
+ "delete_confirm": "您想删除 \"{{- name}}\"吗? 此操作不可逆转",
+ "delete_confirm_generic": "您想要删除所选项目吗?此操作是不可逆的",
+ "delete_multi_confirm": "您想要删除选定的项目吗?此操作是不可逆的",
+ "delete_error_generic": "无法删除选中的项目",
+ "delete_error_403": "$t(general.delete_error_generic). $t(general.error403)",
+ "delete_error_404": "$t(general.delete_error_generic). $t(general.error404)",
+ "loading": "加载中…",
+ "name": "名称",
+ "size": "大小",
+ "last_modified": "最近修改",
+ "info": "信息",
+ "datetime": "{{- val, datetime}}",
+ "selected_items_one": "已选择 {{count}} 个项目",
+ "selected_items_other": "已选择 {{count}} 个项目",
+ "selected_with_placeholder": "已选择 %d 项",
+ "name_required": "名称是必填的",
+ "name_different": "新名称必须不同于当前名称",
+ "html5_media_not_supported": "您的浏览器不支持 HTML5 音频/视频。",
+ "choose_target_folder": "选择目标文件夹",
+ "source_name": "源名称",
+ "target_folder": "目标文件夹",
+ "dest_name": "目标名称",
+ "my_profile": "我的资料",
+ "description": "描述",
+ "email": "邮箱",
+ "api_key_auth": "API 密钥认证",
+ "api_key_auth_help": "允许使用一个 API 密钥模拟访问",
+ "pub_keys": "公钥",
+ "pub_key_placeholder": "在此粘贴公钥",
+ "pub_keys_help": "公钥可以用于 SFTP 认证",
+ "verify": "验证",
+ "problems": "遇到问题?",
+ "allowed_ip_mask": "允许的 IP/掩码",
+ "denied_ip_mask": "拒绝的 IP/掩码",
+ "ip_mask_help": "CIDR 格式的 IP 地址,用逗号分隔,例如:\"192.168.1.0/24, 10.8.0.100/32\"",
+ "allowed_ip_mask_invalid": "无效的允许 IP/掩码",
+ "username_required": "必须输入用户名",
+ "password_required": "密码为必填项",
+ "foldername_required": "文件夹名称为必填项",
+ "err_user": "无法验证您的用户",
+ "err_protocol_forbidden": "您的帐号不允许使用 HTTP 协议",
+ "pwd_login_forbidden": "您的用户不允许使用密码登录",
+ "ip_forbidden": "此 IP 地址不允许登录",
+ "email_invalid": "邮件地址无效",
+ "err_password_complexity": "提供的密码不符合复杂性要求",
+ "no_oidc_feature": "如果您使用 OpenID 登录,此功能不可用",
+ "connection_forbidden": "您不被允许连接",
+ "no_permissions": "您无权修改任何内容",
+ "path_invalid": "非法路径",
+ "err_quota_read": "由于配额限制,读取被拒绝",
+ "profile_updated": "你的个人信息更新成功",
+ "share_ok": "分享访问成功,您现在可以使用您的链接",
+ "qr_code": "二维码",
+ "copy_link": "复制链接",
+ "copied": "已复制",
+ "active": "活跃",
+ "inactive": "非活动",
+ "colvis": "列可见性",
+ "actions": "操作",
+ "template": "用作模板",
+ "quota_scan": "配额扫描",
+ "quota_scan_started": "配额扫描开始。它可能需要一段时间,取决于文件的数量",
+ "quota_scan_conflit": "另一个扫描正在进行中",
+ "quota_scan_error": "无法开始配额扫描",
+ "role": "角色",
+ "role_placeholder": "选择角色",
+ "group_placeholder": "选择一个组",
+ "folder_placeholder": "选择文件夹",
+ "blank_default_help": "留空以使用默认值",
+ "skip_tls_verify": "跳过 TLS 验证。这只能用于测试",
+ "advanced_settings": "高级设置",
+ "default": "默认值",
+ "private_key": "私钥",
+ "acls": "访问控制列表",
+ "quota_limits": "磁盘配额和带宽限制",
+ "expiration": "过期",
+ "expiration_help": "选择过期日期",
+ "additional_info": "附加信息",
+ "permissions": "权限",
+ "visible": "可见",
+ "hidden": "隐藏",
+ "allowed": "已允许",
+ "denied": "已拒绝",
+ "zero_no_limit_help": "0 表示没有限制",
+ "global_settings": "全局设置",
+ "mandatory_encryption": "强制加密",
+ "name_invalid": "指定名称无效,允许以下字符:a-zA-Z0-9-。~",
+ "associations": "关联",
+ "template_placeholders": "支持以下占位符",
+ "duplicated_username": "该用户名已被使用",
+ "duplicated_name": "指定名称已存在",
+ "permissions_required": "需要权限",
+ "configs_saved": "配置已成功更新",
+ "protocol": "协议",
+ "refresh": "刷新",
+ "members": "成员",
+ "members_summary": "用户:{{users}}. 管理员:{{admins}}",
+ "status": "状态",
+ "last_login": "上次登录",
+ "previous": "返回",
+ "next": "下一页",
+ "type": "类型",
+ "issuer": "发行人",
+ "data_provider": "数据库",
+ "driver": "驱动",
+ "mode": "模式",
+ "port": "端口",
+ "domain": "域名",
+ "test": "测试",
+ "get": "获取",
+ "export": "导出",
+ "value": "值",
+ "method": "方法",
+ "timeout": "超时",
+ "env_vars": "环境变量",
+ "hours": "小时",
+ "paths": "路径",
+ "hour": "小时",
+ "day_of_week": "星期几",
+ "day_of_month": "一个月中的某天",
+ "month": "月",
+ "options": "选项",
+ "expired": "过期",
+ "unsupported": "不再支持功能",
+ "start": "开始 (HH:MM)",
+ "end": "结束 (HH:MM)",
+ "monday": "星期一",
+ "tuesday": "星期二",
+ "wednesday": "星期三",
+ "thursday": "星期四",
+ "friday": "星期五",
+ "saturday": "星期六",
+ "sunday": "星期日",
+ "expired_session": "会话已过期,请重新登录。"
+ },
+ "fs": {
+ "view_file": "查看文件 \"{{- path}}\"",
+ "edit_file": "编辑文件 \"{{- path}}\"",
+ "new_folder": "新文件夹",
+ "select_across_pages": "跨页选择",
+ "download": "下载",
+ "download_ready": "您的下载已准备好",
+ "upload_queue_not_ready": "上传队列仍在加载中,请稍后再试。",
+ "upload_no_files": "未选择文件。请选择或拖动文件以上传",
+ "move_copy": "移动或复制",
+ "share": "分享",
+ "home": "首页",
+ "create_folder_msg": "文件夹名",
+ "no_more_subfolders": "这里没有更多子文件夹",
+ "no_files_folders": "没有文件或文件夹",
+ "invalid_name": "文件或文件夹名称不能包含 \"/\"",
+ "folder_name_required": "文件夹名称是必填项",
+ "deleting": "删除 {{idx}}/{{total}}",
+ "copying": "复制 {{idx}}/{{total}}",
+ "moving": "移动 {{idx}}/{{total}}",
+ "uploading": "上传 {{idx}}/{{total}}",
+ "err_403": "权限被拒绝",
+ "err_429": "过多的并发请求",
+ "err_generic": "无法访问请求的资源",
+ "err_validation": "文件系统配置无效",
+ "err_exists": "目标已经存在",
+ "dir_list": {
+ "err_generic": "获取目录列表失败",
+ "err_403": "$t(fs.dir_list.err_generic). $t(fs.err_403)",
+ "err_429": "$t(fs.dir_list.err_generic). $t(fs.err_429)",
+ "err_user": "$t(fs.dir_list.err_generic). $t(general.err_user)"
+ },
+ "create_dir": {
+ "err_generic": "创建文件夹出现错误",
+ "err_403": "$t(fs.create_dir.err_generic). $t(fs.err_403)",
+ "err_429": "$t(fs.create_dir.err_generic). $t(fs.err_429)"
+ },
+ "save": {
+ "err_generic": "保存文件时出错",
+ "err_403": "$t(fs.create_dir.err_generic). $t(fs.err_403)",
+ "err_429": "$t(fs.create_dir.err_generic). $t(fs.err_429)"
+ },
+ "delete": {
+ "err_generic": "无法删除 \"{{- name}}\"",
+ "err_403": "$t(fs.delete.err_generic). $t(fs.err_403)",
+ "err_429": "$t(fs.delete.err_generic). $t(fs.err_429)"
+ },
+ "delete_multi": {
+ "err_generic_partial": "并非所有选中项目都已删除,请重新加载页面",
+ "err_generic": "无法删除选中的项目",
+ "err_403_partial": "$t(fs.delete_multi.err_generic_partial). $t(fs.err_403)",
+ "err_429_partial": "$t(fs.delete_multi.err_generic_partial). $t(fs.err_429)",
+ "err_403": "$t(fs.delete_multi.err_generic). $t(fs.err_403)",
+ "err_429": "$t(fs.delete_multi.err_generic). $t(fs.err_429)"
+ },
+ "copy": {
+ "msg": "复制",
+ "err_generic": "复制文件/目录时出错",
+ "err_403": "$t(fs.copy.err_generic). $t(fs.err_403)",
+ "err_429": "$t(fs.copy.err_generic). $t(fs.err_429)",
+ "err_exists": "$t(fs.copy.err_generic). $t(fs.err_exists)"
+ },
+ "move": {
+ "msg": "移动",
+ "err_generic": "复制文件/目录时出错",
+ "err_403": "$t(fs.move.err_generic). $t(fs.err_403)",
+ "err_429": "$t(fs.move.err_generic). $t(fs.err_429)",
+ "err_exists": "$t(fs.move.err_generic). $t(fs.err_exists)",
+ "err_unsupported": "不支持:如果您想移动一个目录,请确保它是空的"
+ },
+ "rename": {
+ "title": "重命名 \"{{- name}}\"",
+ "new_name": "新名称",
+ "err_generic": "无法重命名 \"{{- name}}\"",
+ "err_403": "$t(fs.rename.err_generic). $t(fs.err_403)",
+ "err_429": "$t(fs.rename.err_generic). $t(fs.err_429)",
+ "err_exists": "$t(fs.rename.err_generic). $t(fs.err_exists)",
+ "err_unsupported": "不支持:如果您想要重命名一个目录,请确保它为空"
+ },
+ "upload": {
+ "text": "上传文件",
+ "success": "文件上传成功",
+ "message": "拖曳文件到此处或单击上传",
+ "message_empty": "目录为空. $t(fs.upload.message)",
+ "err_generic": "上传文件错误",
+ "err_403": "$t(fs.upload.err_generic). $t(fs.err_403)",
+ "err_429": "$t(fs.upload.err_generic). $t(fs.err_429)",
+ "err_dir_overwrite": "$t(fs.upload.err_generic). 存在与文件同名的目录:{{- val}}",
+ "overwrite_text": "检测到冲突,你要覆盖以下文件或目录吗?"
+ },
+ "quota_usage": {
+ "title": "配额使用量",
+ "disk": "磁盘配额",
+ "size": "大小: {{- val}}",
+ "size_percentage": "大小: {{- val}} ({{percentage}}%)",
+ "files": "文件: {{- val}}",
+ "files_percentage": "文件: {{- val}} ({{percentage}}%)",
+ "transfer": "转让额度",
+ "total": "总共: {{- val}}",
+ "total_percentage": "总共: {{- val}} ({{percentage}}%)",
+ "uploads": "上传: {{- val}}",
+ "uploads_percentage": "上传: {{- val}} ({{percentage}}%)",
+ "downloads": "下载: {{- val}}",
+ "downloads_percentage": "下载: {{- val}} ({{percentage}}%)"
+ }
+ },
+ "datatable": {
+ "info": "Showing _START_ to _END_ of _TOTAL_ records",
+ "info_empty": "无记录显示",
+ "info_filtered": "(从 _MAX_ 条总记录中筛选)",
+ "processing": "处理中...",
+ "no_records": "没有找到记录"
+ },
+ "editor": {
+ "keybinding": "编辑器按键绑定",
+ "search": "打开搜索面板",
+ "goto": "跳转到指定行",
+ "indent_more": "更多缩进",
+ "indent_less": "减少缩进"
+ },
+ "2fa": {
+ "title": "使用身份验证器应用程序进行双因素认证。",
+ "msg_enabled": "已启用双因素验证",
+ "msg_disabled": "保护您的帐户",
+ "msg_info": "双因素认证为您的帐户增加了一层额外的安全保护。登录时,您需要提供额外的认证代码。",
+ "require": "此帐户需要启用双因素认证",
+ "require_for": "需要双因素验证",
+ "generate": "生成一个新密钥",
+ "recovery_codes": "恢复代码",
+ "new_recovery_codes": "新恢复代码",
+ "recovery_codes_msg1": "恢复代码是当您无法访问身份验证应用时用于登录的一次性备用代码。如果您丢失了手机,可以使用它们访问您的帐户并管理双重身份验证设置。",
+ "recovery_codes_msg2": "为了保持账户安全,请不要分享或分发您的恢复码。我们建议用一个安全的密码管理器保存它们。",
+ "recovery_codes_msg3": "如果你生成新的恢复码,旧的将自动失效.",
+ "info_title": "了解双因素认证",
+ "info1": "如果客户端使用键盘交互认证,SSH 协议(SFTP/SCP/SSH 命令)将要求输入密码。",
+ "info2": "HTTP 协议指的是 Web UI 和 REST API。Web UI 会通过特定页面要求输入密码。对于 REST API,您需要通过 HTTP 头部添加密码。",
+ "info3": "FTP 没有支持双因素认证的标准方法。如果您启用了 FTP 支持,您必须在密码后添加 TOTP 密码。 例如,如果您的密码是 \"password\",一次性密码是 \"123456\",您必须使用 “password123456\" 作为密码。",
+ "info4": "由于每个请求都必须经过身份验证,而密码无法重复使用,因此不支持 WebDAV。",
+ "setup_title": "设置双因素认证",
+ "setup_msg": "使用您首选的身份验证应用程序(例如 Microsoft Authenticator、Google Authenticator、Authy、1Password 等)扫描二维码。它将生成一个身份验证代码供您输入。",
+ "setup_help": "如果您使用二维码有问题,请在应用上选择手动输入,然后输入代码:",
+ "disable_msg": "关闭双因素验证",
+ "disable_confirm": "您是否要为选定的用户禁用双因素认证?此操作通常仅在用户失去第二个认证因素的访问权限时才需要执行。",
+ "disable_question": "您确定要关闭双因素认证吗?",
+ "generate_question": "您想要生成一个新的密钥并使前一个密钥失效吗?任何注册的身份验证器应用都将停止工作",
+ "disabled": "已禁用双因素认证",
+ "recovery_codes_gen_err": "生成新恢复码失败",
+ "recovery_codes_get_err": "无法获取恢复代码",
+ "auth_code_invalid": "验证提供的认证码失败",
+ "auth_secret_gen_err": "无法生成身份验证密钥",
+ "save_err": "保存双因素认证配置失败",
+ "auth_code_required": "需要授权码。",
+ "no_protocol": "请至少选择一个协议",
+ "required_protocols": "你帐户的安全策略配置需要您给以下协议开启双因素认证: {{val}}",
+ "recovery_codes_generate": "生成新的恢复代码",
+ "recovery_codes_view": "查看恢复代码"
+ },
+ "share": {
+ "scope": "范围",
+ "scope_read": "读取",
+ "scope_write": "写入",
+ "scope_read_write": "读/写",
+ "scope_help": "对于 \"写入\" 和 \"读/写\" 范围,您必须定义一个单一的路径,并且该路径必须是一个目录。",
+ "path_help": "文件或目录路径,例如 /dir 或 /dir/file.txt",
+ "password_help": "如果设置,共享将受密码保护",
+ "max_tokens": "最大令牌数",
+ "max_tokens_help": "可以访问此分享的最大次数。0 表示没有限制",
+ "view_manage": "查看和管理分享",
+ "no_share": "没有共享",
+ "password_protected": "密码保护.",
+ "expiration_date": "过期: {{- val, datetime}}. ",
+ "last_use": "上次使用: {{- val, datetime}}. ",
+ "usage": "使用量: {{used}}/{{total}}. ",
+ "used_tokens": "令牌使用次数: {{used}}. ",
+ "scope_invalid": "无效范围",
+ "max_tokens_invalid": "无效的最大令牌",
+ "expiration_invalid": "无效过期时间",
+ "err_no_password": "您无权共享没有密码的文件/文件夹",
+ "expiration_out_of_range": "设置一个过期时间,并且确保它小于或等于 {{- val, datetime}}",
+ "generic": "保存分享时发生意外错误",
+ "path_required": "至少需要一个路径",
+ "path_write_scope": "写入范围只需要一个路径",
+ "nested_paths": "路径不能嵌套",
+ "expiration_past": "到期日必须在未来",
+ "usage_exceed": "超过最大共享使用量",
+ "expired": "分享已过期",
+ "browsable_multiple_paths": "带有多个路径的分享不可浏览",
+ "browsable_non_dir": "分享不是目录,所以它不能浏览",
+ "go": "转到共享",
+ "access_links_title": "共享访问链接",
+ "link_single_title": "单个压缩文件",
+ "link_single_desc": "您可以将共享内容下载为单个压缩文件",
+ "link_dir_title": "单个目录",
+ "link_dir_desc": "如果共享包含一个目录,您可以浏览和下载文件",
+ "link_uncompressed_title": "未压缩的文件",
+ "link_uncompressed_desc": "如果共享包含单个文件,它也可以不压缩下载",
+ "upload_desc": "您可以上传一个或多个文件到共享目录",
+ "expired_desc": "由于这个分享已过期,无法再访问",
+ "invalid_path": "共享目录丢失或不可访问"
+ },
+ "select2": {
+ "no_results": "未找到结果",
+ "searching": "正在搜索...",
+ "removeall": "删除所有项目",
+ "remove": "删除项目"
+ },
+ "change_pwd": {
+ "info": "出于安全考虑,请先输入您当前的密码,然后两次输入新密码,以验证您输入正确。更改密码后,您将被注销。",
+ "current": "当前密码",
+ "new": "新密码",
+ "confirm": "确认密码",
+ "save": "修改密码",
+ "required_fields": "请输入当前密码和新密码(两次),以确保密码正确。",
+ "no_match": "两次输入密码不一致",
+ "no_different": "新密码不能与当前密码相同",
+ "current_no_match": "当前密码不匹配",
+ "generic": "更改密码时发生意外错误",
+ "required": "需要更改密码。设置新密码以继续使用您的帐户"
+ },
+ "user": {
+ "view_manage": "查看和管理用户",
+ "username_reserved": "指定的用户名被保留",
+ "username_invalid": "指定名称无效,允许以下字符:a-zA-Z0-9 - _ . ~",
+ "home_required": "主目录是必填项",
+ "home_invalid": "主目录必须是绝对路径",
+ "pub_key_invalid": "无效公钥",
+ "priv_key_invalid": "无效的私钥",
+ "key_invalid_size": "无效的 RSA 公钥:支持的最小长度是 2048",
+ "key_insecure": "不允许使用不安全的公钥格式",
+ "err_primary_group": "只允许一个主要组",
+ "err_duplicate_group": "检测到重复的组",
+ "no_permissions": "目录权限是必填项",
+ "no_root_permissions": "主目录权限是必需的",
+ "err_permissions_generic": "无效的权限:请确保使用有效的绝对路径。",
+ "2fa_invalid": "双因素认证配置无效",
+ "recovery_codes_invalid": "无效的恢复代码",
+ "folder_path_required": "虚拟文件夹挂载路径是必需的",
+ "folder_duplicated": "检测到重复的虚拟文件夹",
+ "folder_overlapped": "检测到的虚拟文件夹重叠",
+ "folder_quota_size_invalid": "虚拟文件夹的容量大小配额必须大于或等于 -1",
+ "folder_quota_file_invalid": "虚拟文件夹的文件个数配额必须大于或等于 -1",
+ "folder_quota_invalid": "虚拟文件夹的大小和文件数量必须是 -1 或大于或等于 0",
+ "ip_filters_invalid": "无效的 IP 过滤器,请确保它们遵循 CIDR 表示法,例如 192.168.1.0/24。",
+ "src_bw_limits_invalid": "无效的单源带宽速度限制",
+ "share_expiration_invalid": "分享的过期时间必须大于或等于定义的默认值",
+ "file_pattern_path_invalid": "文件名模式过滤路径必须是绝对路径。",
+ "file_pattern_duplicated": "检测到重复的文件名模式过滤器",
+ "file_pattern_invalid": "无效的文件名模式过滤器",
+ "disable_active_2fa": "不能禁用具有活动配置的用户的双因素认证",
+ "pwd_change_conflict": "无法请求更改密码,同时防止密码被更改",
+ "two_factor_conflict": "您不能同时要求启用双因素认证并阻止其设置。",
+ "role_help": "具有角色的用户可以由具有相同角色的全球管理员和管理员管理",
+ "require_pwd_change": "需要修改密码",
+ "require_pwd_change_help": "用户需要更改 Web 客户端的密码才能激活帐户",
+ "groups_help": "组成员可以发布群组设置,但只是组成员除外。",
+ "primary_group": "主要组",
+ "secondary_groups": "次要组",
+ "membership_groups": "成员组",
+ "template_help": "每个用户设置用户名和至少一个密码和公钥",
+ "virtual_folders_help": "配额大小/文件数,-1 表示包含在用户配额内,0 表示无限制。不要为共享文件夹设置 -1。可以使用 MB/GB/TB 后缀。如果没有后缀,则默认为字节。",
+ "disconnect": "更新后断开用户",
+ "disconnect_help": "这种方式您强制用户重新登录,如果连接,则使用新的配置",
+ "invalid_quota_size": "无效的容量大小配额",
+ "expires_in": "有效期",
+ "expires_in_help": "帐户从创建起的天数过期。0 表示没有过期",
+ "additional_emails": "其它电子邮件",
+ "tls_certs": "TLS 证书",
+ "tls_certs_help": "TLS 证书可以用于 FTP 或 WebDAV 身份验证",
+ "tls_cert_help": "在此处粘贴一个PEM 编码的TLS证书",
+ "tls_cert_invalid": "TLS 证书无效",
+ "template_title": "从此模板创建一个或多个新用户",
+ "template_username_placeholder": "由指定用户名替换",
+ "template_password_placeholder": "由指定的密码替换",
+ "template_help1": "占位符将在已配置的存储后端的路径和凭据中被替换。",
+ "template_help2": "生成的用户可以保存或导出。导出的用户可以从此 SFTPGo 实例的 “维护” 部分或其他部分导入。",
+ "template_no_user": "未定义有效的用户,无法完成请求的操作",
+ "time_of_day_invalid": "日期时间无效。支持的格式 HH:MM",
+ "time_of_day_conflict": "无效的时间。结束时间不能早于开始时间"
+ },
+ "group": {
+ "view_manage": "查看和管理群组",
+ "err_delete_referenced": "不能删除带有关联用户的群组,请先删除关联",
+ "help": "%username% 占位符将被替换为相关用户的用户名,%role% 将被替换为他们的角色。"
+ },
+ "virtual_folders": {
+ "view_manage": "查看并管理虚拟文件夹",
+ "mount_path": "挂载路径,如 /vfolder",
+ "quota_size": "容量大小配额",
+ "quota_size_help": "0 表示没有限制。您可以使用 MB/GB/TB 后缀",
+ "quota_files": "文件个数配额",
+ "associations_summary": "用户:{{users}}. 群组:{{groups}}",
+ "template_title": "从此模板创建一个或多个新的虚拟文件夹",
+ "template_name_placeholder": "替换为指定虚拟文件夹的名称",
+ "template_help": "生成的虚拟文件夹可以保存或导出。导出的文件夹可以从此 SFTPGo 实例的 “维护” 部分或其他部分导入。",
+ "name": "虚拟文件夹名称",
+ "template_no_folder": "未定义有效的虚拟文件夹,无法完成请求的操作"
+ },
+ "storage": {
+ "title": "文件系统",
+ "label": "存储",
+ "local": "本地磁盘",
+ "s3": "S3 (兼容)",
+ "gcs": "GCS",
+ "azblob": "Azure Blob",
+ "encrypted": "加密的本地磁盘",
+ "sftp": "SFTP",
+ "http": "HTTP",
+ "home_dir": "根目录",
+ "home_dir_placeholder": "本地磁盘上目录的绝对路径",
+ "home_dir_help1": "留空为适当的默认值",
+ "home_dir_help2": "将该字段留空,并将存储设置为“本地磁盘”,以避免覆盖根目录。",
+ "home_dir_help3": "对于本地磁盘存储提供商,必须指定此文件夹。对于其他存储提供商,此文件夹将用于临时文件,您可以将其留空,系统将使用适当的默认值。",
+ "home_dir_invalid": "无效的根目录,请确保它是一个绝对路径",
+ "sftp_home_dir": "SFTP 根目录",
+ "sftp_home_help": "限制访问此 SFTP 路径。例如:“/somedir/subdir”",
+ "os_read_buffer": "下载缓存(MB)",
+ "os_buffer_help": "0 表示没有缓冲区",
+ "os_write_buffer": "上传缓存(MB)",
+ "bucket": "桶",
+ "region": "区域",
+ "access_key": "访问键",
+ "access_secret": "访问密钥",
+ "sse_customer_key": "服务器端加密密钥",
+ "sse_customer_key_help": "您可以用此密钥存储您的数据,但如果丢失或更改此密钥,您将丢失所有加密的文件。 未加密或使用不同密钥加密的文件将无法访问",
+ "endpoint": "端点",
+ "endpoint_help": "对于AWS S3,请留空以使用指定区域的默认端点",
+ "sftp_endpoint_help": "端点作为主机:端口。端口总是必需的",
+ "ul_part_size": "上传部分大小 (MB)",
+ "part_size_help": "0 表示默认值(5 MB),最小值为5",
+ "gcs_part_size_help": "0 表示默认 (16 MB)",
+ "ul_concurrency": "上传并发",
+ "ul_concurrency_help": "并行上传的部分数。0 表示默认值 (5)",
+ "dl_part_size": "下载部分大小 (MB)",
+ "dl_concurrency": "下载并发",
+ "dl_concurrency_help": "同时下载多少个部分。 0 表示默认值 (5)",
+ "ul_part_timeout": "上传部分超时",
+ "ul_part_timeout_help": "最大时间限制,以秒为单位上传单个零件。0 表示无限制",
+ "gcs_ul_part_timeout_help": "最大时间限制,以秒为单位上传单个零件。0 表示默认值(32)",
+ "dl_part_timeout": "上传部分超时",
+ "dl_part_timeout_help": "最大时间限制,以秒为单位下载单个部分。0 表示无限制",
+ "key_prefix": "密钥前缀",
+ "key_prefix_help": "限制对具有指定前缀的密钥的访问。例如:\"somedir/subdir/\"。",
+ "class": "存储类别",
+ "acl": "访问控制列表",
+ "role_arn": "角色 ARN",
+ "role_arn_help": "可选的 IAM ARN 角色",
+ "s3_path_style": "使用 path 风格地址,即 \"endpoint/BUCKET/KEY\"",
+ "credentials_file": "凭据文件",
+ "credentials_file_help": "从 JSON 文件添加或更新凭据",
+ "auto_credentials": "自动凭据",
+ "auto_credentials_help": "使用默认应用凭据或来自环境变量的凭据。",
+ "container": "容器",
+ "account_name": "账号名称",
+ "account_key": "帐户密钥",
+ "sas_url": "SAS URL",
+ "sas_url_help": "共享访问签名(SAS)URL可以替代账户名/密钥使用。",
+ "emulator": "使用仿真器",
+ "passphrase": "密码",
+ "passphrase_help": "用于计算每个对象加密密钥的密码",
+ "passphrase_key_help": "用于保护您的私钥的密码短语(如果有的话)",
+ "fingerprints": "指纹",
+ "fingerprints_help": "SHA256 指纹用于连接到外部 SFTP 服务器时验证主机密钥,每行一个。如果为空,将会接受任何主机密钥:这是个安全风险!",
+ "sftp_buffer": "缓冲区大小 (MB)",
+ "sftp_buffer_help": "缓冲区大小大于 0 可以同时传输",
+ "sftp_concurrent_reads": "禁用并行读取",
+ "relaxed_equality_check": "宽松的平等检查",
+ "relaxed_equality_check_help": "启用后只考虑端点来确定不同配置是否指向同一服务器,默认情况下,端点和用户名都必须匹配",
+ "api_key": "API 密钥",
+ "fs_error": "文件系统配置错误",
+ "bucket_required": "$t(storage.fs_error):需要存储桶",
+ "region_required": "$t(storage.fs_error): 需要区域",
+ "key_prefix_invalid": "$t(storage.fs_error): 无效的密钥前缀,不能以 “/” 开头",
+ "ul_part_size_invalid": "$t(storage.fs_error): 无效的上传部分尺寸",
+ "ul_concurrency_invalid": "$t(storage.fs_error): 并行上传无效",
+ "dl_part_size_invalid": "$t(storage.fs_error): 无效下载部分大小",
+ "dl_concurrency_invalid": "$t(storage.fs_error): 并行下载无效",
+ "access_key_required": "$t(storage.fs_error):需要访问密钥",
+ "access_secret_required": "$t(storage.fs_error):需要访问密码",
+ "credentials_required": "$t(storage.fs_error):需要认证",
+ "container_required": "$t(storage.fs_error):需要容器",
+ "account_name_required": "$t(storage.fs_error):需要帐户名",
+ "sas_url_invalid": "$t(storage.fs_error): 无效 SAS 链接",
+ "passphrase_required": "$t(storage.fs_error):需要密码",
+ "endpoint_invalid": "$t(storage.fs_error): 端点无效",
+ "endpoint_required": "$t(storage.fs_error): 需要端点",
+ "username_required": "$t(storage.fs_error):需要用户名"
+ },
+ "oidc": {
+ "token_expired": "您的 OpenID 令牌已过期,请重新登录",
+ "token_invalid_webadmin": "您的 OpenID 令牌对 WebAdmin UI 无效。请退出您的 OpenID 服务器并登录 WebAdmin",
+ "token_invalid_webclient": "您的 OpenID 令牌对 WebClient UI 无效。请退出您的 OpenID 服务器并登录 WebClient",
+ "token_exchange_err": "无法交换 OpenID 令牌",
+ "token_invalid": "无效的 OpenID 令牌",
+ "role_admin_err": "OpenID 角色不正确,登录用户不是管理员",
+ "role_user_err": "OpenID 角色不正确,登录用户是管理员",
+ "get_user_err": "无法获取与 OpenID 令牌关联的用户"
+ },
+ "oauth2": {
+ "auth_verify_error": "无法验证 OAuth2 代码",
+ "auth_validation_error": "无法验证 OAuth2 代码",
+ "auth_invalid": "无效的 OAuth2 代码",
+ "token_exchange_err": "无法从验证码中获取 OAuth2 令牌",
+ "no_refresh_token": "OAuth2 提供商返回了一个空的令牌。一些提供商只在用户首次授权时返回令牌。 如果您在过去已经与该用户注册过 SFTPGo,撤销访问权限并再试一次。这样您就会使之前的令牌无效 ",
+ "success": "将以下字符串复制到 SMTP OAuth2 Token 配置字段:",
+ "client_id_required": "需要客户端 ID",
+ "client_secret_required": "需要客户端密钥",
+ "refresh_token_required": "需要刷新令牌"
+ },
+ "filters": {
+ "password_strength": "密码强度",
+ "password_strength_help": "建议常用情况下使用50-70范围内的值。0 表示禁用,将接受任何密码",
+ "password_expiration": "密码失效",
+ "password_expiration_help": "密码过期天数。0 表示不过期",
+ "default_shares_expiration": "默认共享过期",
+ "default_shares_expiration_help": "新分享的默认到期天数",
+ "max_shares_expiration": "最大共享过期时间",
+ "max_shares_expiration_help": "当用户创建或更新共享时允许的最大到期天数",
+ "directory_permissions": "单目录权限",
+ "directory_permissions_help": "通道支持通配符,例如 “/incoming/*” 匹配 “/incoming” 中的任何目录",
+ "directory_path_help": "目录路径,例如:'/dir'",
+ "directory_patterns": "目录名称模式限制",
+ "directory_patterns_help": "以逗号分隔的被拒绝或允许的文件/目录,基于 shell 模式。匹配是不区分大小写的。",
+ "max_sessions": "最大会话",
+ "max_sessions_help": "最大并行会话数。0 表示没有限制",
+ "denied_protocols": "被拒绝的协议",
+ "denied_login_methods": "被拒绝的登录方法",
+ "denied_login_methods_help": "\"password\" 对所有支持的协议有效,而 \"password-over-SSH\" 仅对 SSH/SFTP/SCP 协议有效。",
+ "web_client_options": "Web 客户端/REST API",
+ "max_upload_size": "最大上传大小",
+ "max_upload_size_help": "单个文件的最大上传大小。0 表示没有限制。您可以使用 MB/GB/TB 后缀",
+ "max_upload_size_invalid": "无效的最大上传文件大小",
+ "upload_bandwidth": "带宽上传(KB/s)",
+ "download_bandwidth": "带宽下载 (KB/s)",
+ "upload_bandwidth_help": "上传 (KB/s). 0 表示没有限制",
+ "download_bandwidth_help": "下载 (KB/s). 0 表示没有限制",
+ "src_bandwidth_limit": "每个源带宽速度限制",
+ "upload_data_transfer": "上传数据传输(MB)",
+ "upload_data_transfer_help": "允许上传的最大数据传输。0 表示没有限制",
+ "download_data_transfer": "下载数据传输(MB)",
+ "download_data_transfer_help": "允许下载的最大数据传输。0 表示没有限制",
+ "total_data_transfer": "总数据传输(MB)",
+ "total_data_transfer_help": "允许上传的最大数据传输量 + 下载。替换单个限制。0 表示没有限制",
+ "start_directory": "初始目录",
+ "start_directory_help": "用于替代 \"/\" 的初始目录。适用于 SFTP/FTP/HTTP。",
+ "tls_username": "TLS 用户名",
+ "tls_username_help": "定义要用作用户名的 TLS 证书字段。如果禁用了互相的 TLS 则忽略",
+ "ftp_security": "FTP 安全",
+ "ftp_security_help": "如果已经为所有FTP用户全局要求TLS,则此设置将被忽略。",
+ "hooks": "钩子",
+ "hook_ext_auth_disabled": "外部认证已禁用",
+ "hook_pre_login_disabled": "登录前已禁用",
+ "hook_check_password_disabled": "检查密码已禁用",
+ "is_anonymous": "匿名用户",
+ "is_anonymous_help": "匿名用户支持 FTP 和 WebDAV 协议,并且拥有只读访问权限",
+ "disable_fs_checks": "禁用文件系统检查",
+ "disable_fs_checks_help": "禁止检查是否存在并自动创建主目录和虚拟文件夹",
+ "api_key_auth_help": "允许在REST API中用API密钥模拟用户",
+ "external_auth_cache_time": "外部认证缓存时间",
+ "external_auth_cache_time_help": "缓存时间,以秒为单位的用户使用外部认证连接。0 表示没有缓存",
+ "access_time": "访问时间限制",
+ "access_time_help": "没有限制意味着始终允许访问,时间必须以 HH:MM 格式设置。"
+ },
+ "admin": {
+ "role_permissions": "管理员角色不能拥有“*”权限",
+ "view_manage": "查看和管理管理员",
+ "self_delete": "不能删除自己",
+ "self_permissions": "您无法更改您的权限",
+ "self_disable": "您不能禁用自己",
+ "self_role": "您不能添加/更改您的角色",
+ "password_help": "如果留空,当前密码将不会被更改",
+ "role_help": "将角色限制为仅允许管理员管理具有相同角色的用户。具有角色的管理员不能是超级管理员。",
+ "users_groups": "用户的组",
+ "users_groups_help": "此管理员自动为新用户选择组。管理员仍然可以选择不同的组。 这些设置仅用于此管理员界面,它们将在REST API/钩子中被忽略",
+ "group_membership": "添加为成员",
+ "group_primary": "添加为主要的",
+ "group_secondary": "添加为次要项",
+ "user_page_pref": "用户页首选项",
+ "user_page_pref_help": "您可以从用户页面隐藏某些部分。这些并不是安全设置,服务器端不会强制执行它们。它们仅用于简化添加/更新用户页面。",
+ "hide_sections": "隐藏版块",
+ "default_users_expiration": "默认用户过期",
+ "default_users_expiration_help": "新用户的默认到期天数",
+ "require_pwd_change_help": "下次登录需要更改密码"
+ },
+ "connections": {
+ "view_manage": "查看和管理连接",
+ "started": "已开始",
+ "remote_address": "远程地址",
+ "last_activity": "最后活动",
+ "disconnect_confirm_btn": "是,断开连接",
+ "disconnect_confirm": "您想要删除所选项目吗?此操作是不可逆的",
+ "disconnect_ko": "无法断开选中的连接",
+ "upload": "上传: \"{{- path}}\"",
+ "download": "下载: \"{{- path}}\"",
+ "upload_info": "$t(connections.upload). 大小: {{- size}}. 速度: {{- speed}}",
+ "download_info": "$t(connections.download). 大小: {{- size}}. 速度: {{- speed}}",
+ "client": "客户端: {{- val}}"
+ },
+ "role": {
+ "view_manage": "查看和管理角色",
+ "err_delete_referenced": "不能删除与关联管理员关联的角色,请先删除关联"
+ },
+ "ip_list": {
+ "view_manage": "查看和管理 IP 列表",
+ "defender_list": "守护者",
+ "allow_list": "允许列表",
+ "ratelimiters_safe_list": "速率限制安全列表",
+ "ip_net": "IP/网络",
+ "protocols": "协议",
+ "any": "任何",
+ "allow": "允许",
+ "deny": "拒绝",
+ "ip_net_help": "CIDR 格式的 IP 地址或网络,例如:\"192.168.1.1 或 10.8.0.100/32 或 2001:db8:1234:/48\"",
+ "ip_invalid": "IP 地址无效",
+ "net_invalid": "无效的网络",
+ "duplicated": "指定的 IP /网络已存在",
+ "search": "IP/网络或初始部分",
+ "defender_disabled": "在您的配置中禁用了守护程序",
+ "allow_list_disabled": "允许列表在您的配置中被禁用",
+ "ratelimiters_disabled": "在您的配置中禁用速率限制"
+ },
+ "defender": {
+ "view_manage": "查看和管理自动阻止列表",
+ "ip": "IP 地址",
+ "ban_time": "屏蔽直到",
+ "score": "分数"
+ },
+ "status": {
+ "desc": "服务器状态",
+ "ssh": "SSH/SFTP 服务器",
+ "active": "状态:活跃",
+ "disabled": "状态:禁止",
+ "error": "状态:错误",
+ "proxy_on": "PROXY 协议已启用",
+ "address": "地址",
+ "ssh_auths": "身份验证方法",
+ "ssh_commands": "接受的命令",
+ "host_key": "主机密钥",
+ "fingeprint": "指纹",
+ "algorithms": "算法",
+ "algorithm": "算法",
+ "ssh_pub_key_algo": "公钥验证算法",
+ "ssh_mac_algo": "消息验证码 (MAC) 算法",
+ "ssh_kex_algo": "密钥交换算法 (KEX)",
+ "ssh_cipher_algo": "加密方法",
+ "ftp": "FTP 服务器",
+ "ftp_passive_range": "被动模式端口范围",
+ "ftp_passive_ip": "被动 IP",
+ "tls": "TLS",
+ "tls_disabled": "停用",
+ "tls_explicit": "需要明确模式 (FTPES)",
+ "tls_implicit": "隐式模式 (FTPS),废弃,推荐FTPES",
+ "tls_mixed": "普通和显式(FTPES) 模式",
+ "webdav": "WebDAV 服务器",
+ "rate_limiters": "速率限制"
+ },
+ "maintenance": {
+ "backup": "备份",
+ "backup_do": "备份您的数据",
+ "backup_ok": "已成功恢复备份",
+ "backup_invalid_file": "无效的备份文件,请确保它是一个有效内容的 JSON 文件",
+ "restore_error": "无法恢复您的备份,请检查服务器日志获取更多详细信息",
+ "restore": "恢复",
+ "backup_file": "备份文件",
+ "backup_file_help": "从 JSON 备份文件导入数据",
+ "restore_mode0": "添加和更新",
+ "restore_mode1": "只添加",
+ "restore_mode2": "添加、更新和断开",
+ "after_restore": "恢复后",
+ "quota_mode0": "无配额更新",
+ "quota_mode1": "更新配额信息",
+ "quota_mode2": "更新配额限制的用户"
+ },
+ "acme": {
+ "title": "ACME",
+ "generic_error": "无法获取 TLS 证书,请检查服务器日志获取更多详细信息",
+ "help": "您可在此使用 ACME 协议和 HTTP-01 挑战类型为您的 SFTPGo 服务请求免费的 TLS 证书。您必须在您拥有的自定义域下创建一个 DNS 记录,该记录解析为您的 SFTPGo 公共 IP 地址,并且端口 80 必须是公开可访问的。您可以在此处设置最常见用例和单节点配置的配置选项,对于高级配置,请参阅 SFTPGo 文档。应用更改需要重启服务。",
+ "domain_help": "可以指定多个域名,使用逗号或空格分隔。这些域名将包含在同一个证书中。",
+ "email_help": "用于注册和恢复联系人的电子邮件",
+ "port_help": "如果不是80,您必须配置反向代理",
+ "protocols_help": "使用获得的证书用于指定的协议"
+ },
+ "smtp": {
+ "title": "SMTP",
+ "err_required_fields": "发件人地址和用户名不能同时为空",
+ "help": "如果有,请设置 SMTP 配置,使用 env vars 或配置文件替换定义的配置",
+ "host": "服务器名称",
+ "host_help": "如果空白,配置被禁用",
+ "auth": "认证",
+ "encryption": "加密",
+ "sender": "发送方",
+ "debug": "调试日志",
+ "domain_help": "HELO 域名。留空则使用服务器主机名",
+ "test_recipient": "发送测试邮件的地址",
+ "oauth2_provider": "OAuth2 提供程序",
+ "oauth2_provider_help": "用户身份验证后重定向到的 URI",
+ "oauth2_tenant": "OAuth2 租户",
+ "oauth2_tenant_help": "Azure 租户。典型值包括 \"common\"、\"organizations\"、\"consumers\" 或租户标识符。",
+ "oauth2_client_id": "OAuth2 客户端 ID",
+ "oauth2_client_secret": "OAuth2 客户端密钥",
+ "oauth2_token": "OAuth2 令牌",
+ "recipient_required": "指定要发送测试邮件的收件人",
+ "test_error": "无法发送测试电子邮件,请检查服务器日志获取更多详细信息",
+ "test_ok": "发送测试邮件时没有报告错误。请检查您的收件箱以确认",
+ "oauth2_flow_error": "无法获取 URI 来启动 OAuth2 流程",
+ "oauth2_question": "您是否要开始 OAuth2 流程以获取令牌?"
+ },
+ "sftp": {
+ "help": "您可在此启用默认禁用的算法。您无需设置已通过环境变量或配置文件定义的值。应用更改后需要重新启动服务。",
+ "host_key_algos": "主机密钥算法"
+ },
+ "branding": {
+ "title": "品牌",
+ "help": "您可以在此自定义 SFTPGo 以适合您的品牌,并在登录页面添加免责声明。",
+ "short_name": "简称",
+ "logo": "徽标",
+ "logo_help": "PNG 图像,最大接受尺寸为 512x512,默认徽标尺寸为 256x256。",
+ "favicon": "收藏夹图标",
+ "disclaimer_name": "免责标题",
+ "disclaimer_url": "免责声明 URL",
+ "invalid_png": "无效的 PNG 图像",
+ "invalid_png_size": "无效的 PNG 图像尺寸",
+ "invalid_disclaimer_url": "免责声明 URL 必须是 http 或 https 链接"
+ },
+ "events": {
+ "search": "搜索日志",
+ "fs_events": "文件系统事件",
+ "provider_events": "提供者事件",
+ "other_events": "其他事件",
+ "quota_exceeded": "已超过配额",
+ "date_range": "日期范围",
+ "upload": "上传",
+ "download": "下载",
+ "mkdir": "创建目录",
+ "rmdir": "删除目录",
+ "rename": "重命名",
+ "delete": "移除",
+ "copy": "复制",
+ "first_upload": "首次上传",
+ "first_download": "首次下载",
+ "ssh_cmd": "SSH命令",
+ "add": "添加项",
+ "update": "更新",
+ "login_failed": "登录失败",
+ "login_ok": "登录成功",
+ "login_missing_user": "使用不存在的用户登录",
+ "no_login_tried": "未尝试登录",
+ "algo_negotiation_failed": "算法协商失败",
+ "datetime": "日期和时间",
+ "action": "操作",
+ "path": "路径",
+ "object": "对象",
+ "event": "事件"
+ },
+ "provider_objects": {
+ "user": "用户",
+ "folder": "文件夹",
+ "group": "组",
+ "admin": "管理",
+ "api_key": "API 密钥",
+ "share": "分享",
+ "event_action": "操作",
+ "event_rule": "规则",
+ "role": "角色",
+ "ip_list_entry": "IP 列表项",
+ "configs": "配置"
+ },
+ "actions": {
+ "view_manage": "查看和管理事件的规则操作",
+ "err_delete_referenced": "无法删除带有关联规则的操作,请先删除关联",
+ "http_url": "服务器 URL",
+ "http_url_help": "例如:`https://host:port/path`。URL 路径中支持使用占位符。",
+ "http_url_required": "必须填写 URL",
+ "http_url_invalid": "URL 无效,仅支持 http 和 https 协议。",
+ "http_part_name_required": "需要提供 HTTP 部件名称",
+ "http_part_body_required": "如果未提供文件路径,则需要提供 HTTP 部件正文",
+ "http_multipart_body_error": "多部分请求不需要正文。请求正文将根据指定的部件构建。",
+ "http_multipart_ctype_error": "对于多部分请求,Content-Type 会自动设置。",
+ "path_duplicated": "路径重复",
+ "command_required": "命令是必需的",
+ "command_invalid": "命令无效,它必须是绝对路径",
+ "email_recipient_required": "至少需要一个电子邮件收件人",
+ "email_subject_required": "邮件主题为必填项",
+ "email_body_required": "电子邮件正文是必填项",
+ "retention_directory_required": "至少有一个需要检查的目录",
+ "path_required": "至少需要一个路径",
+ "source_dest_different": "来源和目标路径必须是不同的",
+ "root_not_allowed": "不允许使用根路径(/)",
+ "archive_name_required": "压缩归档名称是必需的",
+ "idp_template_required": "需要一个用户或管理员模板",
+ "threshold": "阈值",
+ "threshold_help": "当用户的密码在剩余天数小于或等于此阈值时,将生成电子邮件通知。",
+ "disable_threshold": "禁用阈值",
+ "disable_threshold_help": "自上次登录或创建后几天内停留在禁用用户",
+ "delete_threshold": "删除阈值",
+ "delete_threshold_help": "自上次登录或创建后几天内不活动即可删除用户",
+ "inactivity_threshold_required": "必须定义至少一个非活动阈值",
+ "inactivity_thresholds_invalid": "删除阈值必须大于停用阈值",
+ "idp_mode_add_update": "创建或更新",
+ "idp_mode_add": "如果不存在则创建",
+ "template_user_help": "JSON 格式的 SFTPGo 用户模板。支持占位符。",
+ "template_admin_help": "JSON 格式的 SFTPGo 管理员模板。支持占位符",
+ "placeholders_help": "支持占位符",
+ "http_headers": "HTTP 标头",
+ "query_parameters": "查询字符串参数",
+ "http_timeout_help": "对于以文件作为附件的多部分请求,此项会被忽略。",
+ "body": "主体",
+ "http_body_help": "支持占位符。对于 HTTP GET 请求将被忽略。对于多部分请求,请保持为空。",
+ "multipart_body": "多主体",
+ "multipart_body_help": "HTTP 多部分请求允许将一个或多个数据集组合成一个请求正文。对于每个部分,您可以设置文件路径或将正文作为文本。文件路径、正文和头部值中均支持占位符。",
+ "http_part_name": "部件名称",
+ "http_part_file": "文件路径",
+ "http_part_headers": "额外的部件头信息,每行一个,格式为 \"key: value\"。",
+ "command_help": "要执行命令的绝对路径",
+ "command_args": "参数",
+ "command_args_help": "逗号分隔的命令参数。支持占位符。",
+ "command_env_vars_help": "值支持占位符。将值设置为不带引号的“$”意味着从环境中检索键,但不包括以SFTPGO_开头的键",
+ "email_recipients": "至",
+ "email_recipients_help": "逗号分隔的收件人。支持占位符",
+ "email_bcc": "密件抄送",
+ "email_bcc_help": "逗号分隔的密件抄送地址。支持占位符",
+ "email_subject": "主题",
+ "content_type": "内容类型",
+ "attachments": "附件",
+ "attachments_help": "以逗号分隔的路径列表,支持占位符。总大小限制为 10 MB。",
+ "data_retention": "数据保留",
+ "data_retention_help": "为每个路径设置数据保留时间(以小时为单位)。保留规则将递归应用。将保留时间设置为 0 表示排除指定路径。",
+ "delete_empty_dirs": "删除空目录",
+ "fs_action": "文件系统操作",
+ "paths_src_dst_help": "SFTPGo 用户看到的路径。支持占位符。所需的权限被自动授予。",
+ "source_path": "来源",
+ "target_path": "目标",
+ "paths_help": "SFTPGo 用户可以看到的以逗号分隔的路径。支持占位符。所需的权限将自动授予。",
+ "archive_path": "归档路径",
+ "archive_path_help": "SFTPGo 用户可以看到的完整路径,用于创建 zip 存档。支持占位符。如果指定的文件已存在,它将被覆盖。",
+ "placeholders_modal_title": "支持的占位符",
+ "update_mod_times": "更新时间戳",
+ "types": {
+ "http": "HTTP",
+ "email": "邮箱",
+ "backup": "备份",
+ "user_quota_reset": "用户配额重置",
+ "folder_quota_reset": "文件夹配额重置",
+ "transfer_quota_reset": "转账配额重置",
+ "data_retention_check": "数据保留检查",
+ "filesystem": "文件系统",
+ "password_expiration_check": "密码过期检查",
+ "user_expiration_check": "用户过期检查",
+ "user_inactivity_check": "用户不活跃检查",
+ "idp_check": "身份提供者帐户检查",
+ "rotate_logs": "轮换日志文件",
+ "command": "命令"
+ },
+ "fs_types": {
+ "rename": "重命名",
+ "delete": "删除",
+ "path_exists": "路径已存在",
+ "compress": "压缩",
+ "copy": "复制",
+ "create_dirs": "创建目录"
+ },
+ "placeholders_modal": {
+ "name": "用户名、虚拟文件夹名称、提供商事件的管理员用户名、TLS证书事件的域名",
+ "event": "事件名称,例如 \"upload\"(上传)、\"download\"(下载)用于文件系统事件,或 \"add\"(添加)、\"update\"(更新)用于提供程序事件。",
+ "status": "文件系统事件的状态。1 表示没有错误,2 表示发生了一个通用错误,3 表示超过配额错误。",
+ "status_string": "作为字符串的状态。可能的值 \"OK\", \"KO\"",
+ "error_string": "错误详细信息。如果没有发生错误,则替换为空字符串",
+ "virtual_path": "SFTPGo 用户看到的路径,例如 \"/adir/afile.txt\"。",
+ "escaped_virtual_path": "HTTP 请求字符串编码路径,例如 “%2Fadir%2Fafile.txt”。",
+ "virtual_dir_path": "\"VirtualPath\" 的父目录,例如,如果 \"VirtualPath\" 是 \"/adir/afile.txt\",那么 \"VirtualDirPath\" 就是 \"/adir\"。",
+ "fs_path": "完整的文件系统路径,例如 \"/user/homedir/adir/afile.txt\" 或者在 Windows 上的 \"C:/data/user/homedir/adir/afile.txt\"。",
+ "ext": "文件扩展名,例如 \".txt\" 如果文件名是 \"afile.txt\"",
+ "object_name": "文件/目录名,例如 \"afile.txt\" 或提供者对象名称",
+ "object_basename": "无需文件拓展名;例如:文件名是\"afile.txt\",仅需\"afile\" ;",
+ "object_type": "提供者事件的对象类型:如 \"user\"(用户)、\"group\"(组)、\"admin\"(管理员)等。",
+ "virtual_target_path": "重命名和复制操作的虚拟目标路径",
+ "virtual_target_dir_path": "\"虚拟目标路径\" 的父目录",
+ "target_name": "重命名和复制操作的目标对象名称",
+ "fs_target_path": "重命名和复制操作的完整文件系统目标路径",
+ "file_size": "文件大小 (字节)",
+ "elapsed": "文件系统事件已用毫秒时间",
+ "protocol": "协议,例如,\"SFTP\", \"FTP\"",
+ "ip": "客户端 IP 地址",
+ "role": "用户或管理员角色",
+ "timestamp": "自纪元以来的纳秒事件时间戳",
+ "datetime": "事件时间戳格式为 YYYY-MM-DDTHH:MM:SS.ZZZ",
+ "year": "事件年份格式为四位数",
+ "month": "事件月份格式化为两位数",
+ "day": "事件天数格式为两位数",
+ "hour": "事件小时数格式为两位数",
+ "minute": "事件分钟数格式为两位数",
+ "email": "对于文件系统事件,这是执行操作的用户关联的电子邮件。对于提供者事件,这是与受影响的用户或管理员关联的电子邮件。在其他情况下为空。",
+ "object_data": "提供者对象数据已序列化为 JSON,并删除了敏感字段",
+ "object_data_string": "提供者对象数据已转义为 JSON 字符串,并删除了敏感字段",
+ "retention_reports": "数据保留报告以 ZIP 压缩的 CSV 文件形式提供。支持作为电子邮件附件、多部分 HTTP 请求的文件路径以及 HTTP 请求主体的单个参数。",
+ "idp_field": "包含字符串的身份提供者自定义字段",
+ "metadata": "已下载文件的云存储元数据序列化为 JSON",
+ "metadata_string": "已下载文件的 JSON 云存储元数据已跳过字符串",
+ "uid": "唯一 ID"
+ }
+ },
+ "rules": {
+ "view_manage": "查看和管理事件规则",
+ "trigger": "触发器",
+ "run_confirm": "您想要执行选定的规则吗?",
+ "run_confirm_btn": "是的,运行",
+ "run_error_generic": "无法运行选中的规则",
+ "run_ok": "规则动作已启动",
+ "run": "运行",
+ "invalid_fs_min_size": "无效的最小值",
+ "invalid_fs_max_size": "无效的最大值",
+ "action_required": "至少需要一个操作",
+ "fs_event_required": "至少需要一个文件系统事件",
+ "provider_event_required": "至少需要一个提供者事件",
+ "schedule_required": "至少需要一个计划",
+ "schedule_invalid": "无效的计划",
+ "duplicate_actions": "检测到重复操作",
+ "sync_failure_actions": "故障操作不支持同步执行",
+ "sync_unsupported": "仅某些文件系统事件和身份提供者登录支持同步执行",
+ "sync_unsupported_fs_event": "同步执行仅支持上传(upload)和前置(pre-*)文件系统事件。",
+ "only_failure_actions": "至少需要一个非失败的操作",
+ "sync_action_required": "事件 “{{val}}” 至少需要一个同步操作",
+ "scheduler_help": "小时:0-23。星期几:0-6(星期日-星期六)。日期:1-31。月份:1-12。星号(*)表示匹配字段的所有值,例如每天、每月等。",
+ "concurrent_run": "允许多个实例的并行执行",
+ "protocol_filters": "协议过滤器",
+ "status_filters": "状态筛选器",
+ "object_filters": "对象过滤器",
+ "name_filters": "名称过滤器",
+ "name_filters_help": "类似于 Shell 的模式过滤器,用于用户名、文件夹名称。例如,\"user*\" 将匹配以 \"user\" 开头的名称。对于提供者事件,此过滤器应用于执行事件的管理员的用户名。",
+ "inverse_match": "反向匹配",
+ "group_name_filters": "组名过滤器",
+ "group_name_filters_help": "用于组名的类 shell 模式过滤器。例如,\"group*\" 将匹配以 \"group\" 开头的组名。",
+ "role_name_filters": "角色名过滤器",
+ "role_name_filters_help": "用于角色名的类 shell 模式过滤器。例如,\"role*\" 将匹配以 \"role\" 开头的角色名。",
+ "path_filters": "路径过滤器",
+ "path_filters_help": "类似于 Shell 的模式过滤器,应用于文件系统事件路径。例如,\"/adir/*.txt\" 将匹配 \"/adir\" 目录中以 \".txt\" 结尾的路径。支持双星号(`**`),例如 \"/**/*.txt\" 将匹配任何以 \".txt\" 结尾的文件。\"/mydir/**\" 将匹配 \"/mydir\" 中的任何条目。",
+ "file_size_limits": "文件大小限制",
+ "file_size_limits_help": "0 表示没有限制。您可以使用 MB/GB 后缀",
+ "min_size": "最小",
+ "max_size": "最大",
+ "actions_help": "一个或多个要执行的操作。对于“上传”事件,“执行同步”选项是支持的,并且对于“pre-*”事件以及如果操作检查账户的身份提供者登录事件是必需的。",
+ "option_failure_action": "故障操作",
+ "option_stop_on_failure": "失败时停止",
+ "option_execute_sync": "同步执行",
+ "no_filter": "如果没有设置过滤器,那么所有的事件都会被触发",
+ "action_placeholder": "选择一个操作",
+ "triggers": {
+ "fs_event": "文件系统事件",
+ "provider_event": "提供者事件",
+ "ip_blocked": "IP 已屏蔽",
+ "certificate_renewal": "证书续期",
+ "on_demand": "按需发送",
+ "idp_login": "身份提供商登录",
+ "schedule": "定时任务"
+ },
+ "idp_logins": {
+ "user": "用户登录",
+ "admin": "管理员登录"
+ }
+ }
+}
diff --git a/templates/common/base.html b/templates/common/base.html
index 6adb4dce..bfb97e06 100644
--- a/templates/common/base.html
+++ b/templates/common/base.html
@@ -190,6 +190,8 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
lngs.de = { nativeName: 'Deutsch' };
//{{- else if eq . "fr" }}
lngs.fr = { nativeName: 'Français' };
+ //{{- else if eq . "zh-CN" }}
+ lngs["zh-CN"] = { nativeName: '简体中文' };
//{{- end}}
//{{- end}}
if (Object.keys(lngs).length == 0){
@@ -214,7 +216,6 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
debug: false,
supportedLngs: Object.keys(lngs),
fallbackLng: Object.keys(lngs)[0],
- load: 'languageOnly',
backend: {
backends: [
i18nextLocalStorageBackend,
@@ -275,6 +276,22 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
el.localize(options);
}
+ function flatpickrLocale() {
+ const currentLang = i18next.resolvedLanguage;
+ if (currentLang === 'zh-CN') {
+ return 'zh';
+ }
+ return currentLang;
+ }
+
+ function humanizeDurationLocale() {
+ const currentLang = i18next.resolvedLanguage;
+ if (currentLang === 'zh-CN') {
+ return 'zh_CN';
+ }
+ return currentLang;
+ }
+
function handlePasswordInputVisibility(el) {
let pwdVisibility = $(el.querySelector('[data-password-control="visibility"]'));
let passwordInput = el.querySelector('[data-password-control="input"]');
diff --git a/templates/webadmin/events.html b/templates/webadmin/events.html
index c366d61c..d874f5d6 100644
--- a/templates/webadmin/events.html
+++ b/templates/webadmin/events.html
@@ -154,6 +154,7 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
+
+
+