diff --git a/plugin/think-library/src/lang/en-us.php b/plugin/think-library/src/lang/en-us.php index 438717f0d..196897924 100644 --- a/plugin/think-library/src/lang/en-us.php +++ b/plugin/think-library/src/lang/en-us.php @@ -14,130 +14,138 @@ // | github 仓库地址 :https://github.com/zoujingli/ThinkLibrary // +---------------------------------------------------------------------- -declare (strict_types=1); +declare(strict_types=1); use think\admin\Library; use think\admin\model\SystemBase; -// 动态读取英文数据字典 -if (count($langs = Library::$sapp->cache->get('lang-en-us', [])) < 1) { +/** + * 动态加载英文数据字典 + * 从系统数据字典中读取英文翻译,并缓存以提高性能 + */ +$cacheKey = 'lang-en-us'; +$langs = Library::$sapp->cache->get($cacheKey, []); + +if (empty($langs)) { + // 从数据字典读取英文翻译 $langs = array_column(SystemBase::items('英文字典'), 'name', 'code'); - $menus = array_column(SystemBase::items('英文菜单'), 'name', 'code'); - foreach ($menus as $key => $name) $langs["menus_{$key}"] = $name; - Library::$sapp->cache->set('lang-en-us', $langs, 360); + + // 读取英文菜单并合并到语言包中(使用 menus_ 前缀) + $menuItems = array_column(SystemBase::items('英文菜单'), 'name', 'code'); + foreach ($menuItems as $key => $name) { + $langs["menus_{$key}"] = $name; + } + + // 缓存语言包数据,有效期 360 秒 + Library::$sapp->cache->set($cacheKey, $langs, 360); } -// 定义菜单专用语言包,使用固定前缀 `menus_` 开头 -// 数据字典菜单语言包类型为:英文菜单,配置与 英文字典 相同 -// PS. 使用前缀是方便后缀追加配置,另外历史版本未开启语言分组 -// PS. 该文件仅在英文模式下才会加载,系统默认使用 `中文` 模式 +/** + * 静态菜单语言包定义 + * 使用固定前缀 `menus_` 开头,便于后续扩展和维护 + * 注意:该文件仅在英文模式下才会加载,系统默认使用中文模式 + */ $menus = [ -// // 系统管理菜单 -// 'menus_系统管理' => 'System', -// 'menus_系统配置' => 'Configuration', -// 'menus_系统参数配置' => 'Parameter', -// 'menus_系统任务管理' => 'Tasks', -// 'menus_系统日志管理' => 'Oplog', -// 'menus_数据字典管理' => 'Dictionary', -// 'menus_系统文件管理' => 'File', -// 'menus_系统菜单管理' => 'Menu', -// 'menus_权限管理' => 'Permission', -// 'menus_访问权限管理' => 'Role', -// 'menus_系统用户管理' => 'User', -// // 微信管理菜单 -// 'menus_微信管理' => 'WeChat', -// 'menus_微信接口配置' => 'Configuration', -// 'menus_微信支付配置' => 'Pay parameters', -// 'menus_微信粉丝管理' => 'Fan User', -// 'menus_微信定制' => 'Custom ', -// 'menus_微信图文管理' => 'News', -// 'menus_微信菜单配置' => 'Menu', -// 'menus_回复规则管理' => 'Reply Rule', -// 'menus_关注自动回复' => 'Auto Reply', -// 'menus_微信支付' => 'Payment', -// 'menus_支付行为管理' => 'Action Record', -// 'menus_支付退款管理' => 'Refund Record', -// // 插件中心菜单 -// 'menus_插件中心' => 'Plugins' + // 系统管理菜单 + 'menus_系统管理' => 'System', + 'menus_系统配置' => 'Config', + 'menus_系统参数配置' => 'Params', + 'menus_系统任务管理' => 'Tasks', + 'menus_系统日志管理' => 'Logs', + 'menus_数据字典管理' => 'Dict', + 'menus_系统文件管理' => 'Files', + 'menus_系统菜单管理' => 'Menus', + 'menus_权限管理' => 'Perms', + 'menus_访问权限管理' => 'Roles', + 'menus_系统用户管理' => 'Users', + + // 微信管理菜单 + 'menus_微信管理' => 'WeChat', + 'menus_微信接口配置' => 'Config', + 'menus_微信支付配置' => 'Pay Config', + 'menus_微信粉丝管理' => 'Fans', + 'menus_微信定制' => 'Custom', + 'menus_微信图文管理' => 'News', + 'menus_微信菜单配置' => 'Menus', + 'menus_回复规则管理' => 'Rules', + 'menus_关注自动回复' => 'Auto Reply', + 'menus_微信支付' => 'Payment', + 'menus_支付行为管理' => 'Actions', + 'menus_支付退款管理' => 'Refunds', + + // 插件中心菜单 + 'menus_插件中心' => 'Plugins', ]; -$extra = []; -$extra['Y年m月d日 H:i:s'] = 'Y/m/d H:i:s'; -$extra['请重新登录!'] = 'Invalid login authorization, Please login again.'; -$extra['共 %s 条记录,每页显示 %s 条,共 %s 页当前显示第 %s 页。'] = 'Total %s records, display %s per page, total %s page current display %s page.'; +/** + * 额外语言包配置 + * 包含日期格式、登录提示、分页信息等特殊翻译 + */ +$extra = [ + 'Y年m月d日 H:i:s' => 'Y/m/d H:i:s', + '请重新登录!' => 'Invalid authorization, please login again.', + '共 %s 条记录,每页显示 %s 条,共 %s 页当前显示第 %s 页。' => 'Total %s records, %s per page, page %s of %s.', +]; -return array_merge([ - // 常规操作翻译 -// '全部' => 'All', -// '添 加' => 'Add', -// '编 辑' => 'Edit', -// '删 除' => 'Delete', -// '搜 索' => 'Search', -// '导 出' => 'Export', -// '已禁用' => 'Disabled', -// '已激活' => 'Activated', -// '排序权重' => 'Sort', -// '回 收 站' => 'Recycle', -// '保存数据' => 'Submit', -// '取消编辑' => 'Cancel', -// '操作面板' => 'Panel', -// '使用状态' => 'Status', -// '条件搜索' => 'Search', -// '清空数据' => 'Clears Data', -// '创建时间' => 'Create Time', -// '批量删除' => 'Remove Selected', -// '批量禁用' => 'Forbid Selected', -// '批量恢复' => 'Resume Selected', -// '已禁用记录' => 'Disabled Records', -// '已激活记录' => 'Activated Records', +/** + * 基础语言包定义 + * 包含接口提示、存储引擎、日志记录、模块管理等翻译 + */ +$base = [ // 接口提示内容 - '数据删除成功!' => 'Successfully deleted.', - '数据删除失败!' => 'Sorry, Delete failed.', - '数据保存成功!' => 'Successfully saved.', - '数据保存失败!' => 'Sorry, Save failed.', - '数据排序成功!' => 'Successfully Sorted.', - '列表排序失败!' => 'Sorry, Sorting failed.', - '请求响应异常!' => 'Sorry, Request response exception.', - '请求响应成功!' => 'Sorry, Request response successful.', - '未授权禁止访问!' => 'Sorry, Unauthorized access prohibited.', - '会话无效或已失效!' => 'The session is invalid or has expired.', - '表单令牌验证失败!' => 'The Form token is validation failed.', - '接口账号验证失败!' => 'Interface account verification failed.', - '接口请求时差过大!' => 'Interface request time difference too large.', - '接口签名验证失败!' => 'Interface signature verification failed.', - '非JWT访问!' => 'Please use JWT to access.', - '请求参数 %s 不能为空!' => 'Request parameter %s cannot be empty.', - '接口请求响应格式异常!' => 'Abnormal format of interface request response.', - '耗时 %.4f 秒' => 'Time taken %.4f seconds', - '创建任务失败,%s' => 'Failed to create task, %s', - '已创建请等待处理完成!' => 'Task has been created, please wait for processing to complete.', - '删除%s[%s]及授权配置' => 'Delete %s[%s] and authorization configuration', - '暂无轨迹信息~' => 'No trajectory information currently available', + '数据删除成功!' => 'Deleted successfully.', + '数据删除失败!' => 'Delete failed.', + '数据保存成功!' => 'Saved successfully.', + '数据保存失败!' => 'Save failed.', + '数据排序成功!' => 'Sorted successfully.', + '列表排序失败!' => 'Sort failed.', + '请求响应异常!' => 'Request exception.', + '请求响应成功!' => 'Request successful.', + '未授权禁止访问!' => 'Unauthorized access.', + '会话无效或已失效!' => 'Session invalid or expired.', + '表单令牌验证失败!' => 'Form token validation failed.', + '接口账号验证失败!' => 'Account verification failed.', + '接口请求时差过大!' => 'Request time difference too large.', + '接口签名验证失败!' => 'Signature verification failed.', + '非JWT访问!' => 'JWT access required.', + '请求参数 %s 不能为空!' => 'Parameter %s cannot be empty.', + '接口请求响应格式异常!' => 'Invalid response format.', + '耗时 %.4f 秒' => 'Time: %.4f s', + '创建任务失败,%s' => 'Failed to create task: %s', + '已创建请等待处理完成!' => 'Task created, please wait.', + '删除%s[%s]及授权配置' => 'Delete %s[%s] and authorization', + '暂无轨迹信息~' => 'No trajectory info.', + // 存储引擎翻译 - '本地服务器存储' => 'Local server storage', - '自建Alist存储' => 'Self built Alist storage', - '又拍云USS存储' => 'Upyun Cloud USS storage', - '阿里云OSS存储' => 'Aliyun Cloud OSS storage', - '腾讯云COS存储' => 'Tencent Cloud COS Storage', - '七牛云对象存储' => 'Qiniu Cloud Object storage', - '未配置又拍云域名' => 'Unconfigured Upyun Cloud domain', - '未配置阿里云域名' => 'Unconfigured Aliyun Cloud domain', - '未配置七牛云域名' => 'Unconfigured Qiniu Cloud domain', - '未配置腾讯云域名' => 'Unconfigured Tencent Cloud domain', - '未配置Alist域名' => 'Unconfigured Alist Server domain', + '本地服务器存储' => 'Local Storage', + '自建Alist存储' => 'Alist Storage', + '又拍云USS存储' => 'Upyun USS', + '阿里云OSS存储' => 'Aliyun OSS', + '腾讯云COS存储' => 'Tencent COS', + '七牛云对象存储' => 'Qiniu OSS', + '未配置又拍云域名' => 'Upyun domain not configured', + '未配置阿里云域名' => 'Aliyun domain not configured', + '未配置七牛云域名' => 'Qiniu domain not configured', + '未配置腾讯云域名' => 'Tencent domain not configured', + '未配置Alist域名' => 'Alist domain not configured', + // 默认日志翻译 - '增加%s[%s]成功' => 'Added: %s [ %s ]', - '修改%s[%s]状态' => 'Modify: %s [ %s ]', - '更新%s[%s]记录' => 'Update: %s [ %s ]', - '删除%s[%s]成功' => 'Remove: %s [ %s ]', + '增加%s[%s]成功' => 'Added: %s[%s]', + '修改%s[%s]状态' => 'Modified: %s[%s]', + '更新%s[%s]记录' => 'Updated: %s[%s]', + '删除%s[%s]成功' => 'Deleted: %s[%s]', + // 模块管理翻译 -// '系统任务管理' => 'System Task Management', -// '系统菜单管理' => 'System Menu Management', -// '系统文件管理' => 'System File Management', -// '系统用户管理' => 'System User Management', -// '系统日志管理' => 'System Oplog Management', -// '系统参数配置' => 'System Parameter Management', -// '系统权限管理' => 'System Permission Management', -// '数据字典管理' => 'System Dictionary Management', -// '系统运维管理' => 'System Maintenance Management', -], $extra, $menus, $langs); \ No newline at end of file + '系统任务管理' => 'Task Management', + '系统菜单管理' => 'Menu Management', + '系统文件管理' => 'File Management', + '系统用户管理' => 'User Management', + '系统日志管理' => 'Logs Management', + '系统参数配置' => 'Parameter Management', + '访问权限管理' => 'Permission Management', + '数据字典管理' => 'Dictionary Management', + '系统运维管理' => 'Maintenance Management', +]; + +// 合并所有语言包:基础翻译 -> 额外配置 -> 静态菜单 -> 动态字典 +return array_merge($base, $extra, $menus, $langs); \ No newline at end of file diff --git a/plugin/think-library/src/lang/zh-tw.php b/plugin/think-library/src/lang/zh-tw.php index 6c72da55e..6f85558d2 100644 --- a/plugin/think-library/src/lang/zh-tw.php +++ b/plugin/think-library/src/lang/zh-tw.php @@ -14,26 +14,48 @@ // | github 仓库地址 :https://github.com/zoujingli/ThinkLibrary // +---------------------------------------------------------------------- -declare (strict_types=1); +declare(strict_types=1); use think\admin\Library; use think\admin\model\SystemBase; -// 动态读取繁体数据字典 -if (count($langs = Library::$sapp->cache->get('lang-zh-tw', [])) < 1) { +/** + * 動態加載繁體中文數據字典 + * 從系統數據字典中讀取繁體中文翻譯,並緩存以提高性能 + */ +$cacheKey = 'lang-zh-tw'; +$langs = Library::$sapp->cache->get($cacheKey, []); + +if (empty($langs)) { + // 從數據字典讀取繁體中文翻譯 $langs = array_column(SystemBase::items('繁体中文'), 'name', 'code'); - $menus = array_column(SystemBase::items('繁体菜单'), 'name', 'code'); - foreach ($menus as $key => $name) $langs["menus_{$key}"] = $name; - Library::$sapp->cache->set('lang-zh-tw', $langs, 360); + + // 讀取繁體菜單並合併到語言包中(使用 menus_ 前綴) + $menuItems = array_column(SystemBase::items('繁体菜单'), 'name', 'code'); + foreach ($menuItems as $key => $name) { + $langs["menus_{$key}"] = $name; + } + + // 緩存語言包數據,有效期 360 秒 + Library::$sapp->cache->set($cacheKey, $langs, 360); } -$extra = []; -$extra['Y年m月d日 H:i:s'] = 'Y年m月d日 H:i:s'; -$extra['请重新登录!'] = '登錄授權無效,請重新登錄!'; -$extra['共 %s 条记录,每页显示 %s 条,共 %s 页当前显示第 %s 页。'] = '共 %s 條記錄,每頁顯示 %s 條,共 %s 頁當前顯示第 %s 頁。'; +/** + * 額外語言包配置 + * 包含日期格式、登錄提示、分頁信息等特殊翻譯 + */ +$extra = [ + 'Y年m月d日 H:i:s' => 'Y年m月d日 H:i:s', + '请重新登录!' => '登錄授權無效,請重新登錄!', + '共 %s 条记录,每页显示 %s 条,共 %s 页当前显示第 %s 页。' => '共 %s 條記錄,每頁顯示 %s 條,共 %s 頁當前顯示第 %s 頁。', +]; -return array_merge([ - // 接口提示内容 +/** + * 基礎語言包定義 + * 包含接口提示、存儲引擎、日誌記錄、模塊管理等翻譯 + */ +$base = [ + // 接口提示內容 '数据删除成功!' => '數據刪除成功!', '数据删除失败!' => '數據刪除失敗!', '数据保存成功!' => '數據保存成功!', @@ -45,7 +67,7 @@ return array_merge([ '未授权禁止访问!' => '未授權禁止訪問!', '会话无效或已失效!' => '會話無效或已失效!', '表单令牌验证失败!' => '表單令牌驗證失敗!', - '接口账号验证失败!' => '接口账号验证失败!', + '接口账号验证失败!' => '接口賬號驗證失敗!', '接口请求时差过大!' => '接口請求時差過大!', '接口签名验证失败!' => '接口簽名驗證失敗!', '非JWT访问!' => '請使用 JWT 方式訪問!', @@ -56,21 +78,37 @@ return array_merge([ '已创建请等待处理完成!' => '已創建請等待處理完成!', '删除%s[%s]及授权配置' => '刪除%s[%s]及授權配置', '暂无轨迹信息~' => '暫無軌迹信息~', - // 存储引擎翻译 + + // 存儲引擎翻譯 '本地服务器存储' => '本地服務器存儲', '自建Alist存储' => '自建Alist存儲', - '七牛云对象存储' => '七牛雲對象存儲', '又拍云USS存储' => '又拍雲USS存儲', '阿里云OSS存储' => '阿裏雲OSS存儲', '腾讯云COS存储' => '騰訊雲COS存儲', + '七牛云对象存储' => '七牛雲對象存儲', '未配置又拍云域名' => '未配置又拍雲域名', '未配置阿里云域名' => '未配置阿裏雲域名', '未配置七牛云域名' => '未配置七牛雲域名', - '未配置腾讯云域名' => '未配置腾讯云域名', + '未配置腾讯云域名' => '未配置騰訊雲域名', '未配置Alist域名' => '未配置Alist域名', - // 默认日志翻译 + + // 默認日誌翻譯 '增加%s[%s]成功' => '增加%s[%s]成功', '修改%s[%s]状态' => '修改%s[%s]狀態', '更新%s[%s]记录' => '更新%s[%s]記錄', '删除%s[%s]成功' => '刪除%s[%s]成功', -], $extra, $langs); \ No newline at end of file + + // 模塊管理翻譯 + '系统任务管理' => '系統任務管理', + '系统菜单管理' => '系統菜單管理', + '系统文件管理' => '系統文件管理', + '系统用户管理' => '系統用戶管理', + '系统日志管理' => '系統日誌管理', + '系统参数配置' => '系統參數配置', + '访问权限管理' => '訪問權限管理', + '数据字典管理' => '數據字典管理', + '系统运维管理' => '系統運維管理', +]; + +// 合併所有語言包:基礎翻譯 -> 額外配置 -> 動態字典 +return array_merge($base, $extra, $langs); \ No newline at end of file diff --git a/plugin/think-plugs-account/src/lang/en-us.php b/plugin/think-plugs-account/src/lang/en-us.php new file mode 100644 index 000000000..d3ace6370 --- /dev/null +++ b/plugin/think-plugs-account/src/lang/en-us.php @@ -0,0 +1,101 @@ + 'User Management', + '回 收 站' => 'Recycle Bin', + '排序权重' => 'Sort Weight', + '头像' => 'Avatar', + '账号状态' => 'Account Status', + '操作面板' => 'Actions', + '已激活' => 'Activated', + '已禁用' => 'Disabled', + '已启用' => 'Enabled', + '已冻结的用户' => 'Frozen Users', + '已激活的用户' => 'Activated Users', + '删 除' => 'Delete', + '保存数据' => 'Save Data', + '取消编辑' => 'Cancel Edit', + '保存配置' => 'Save Configuration', + '取消修改' => 'Cancel Modification', + '确定要取消编辑吗?' => 'Are you sure you want to cancel editing?', + '确定要取消修改吗?' => 'Are you sure you want to cancel the modification?', + '确定要永久删除此账号吗?' => 'Are you sure you want to permanently delete this account?', + '全部' => 'All', + '搜 索' => 'Search', + '导 出' => 'Export', + + // 设备管理 + '账号接口配置' => 'Account Interface Configuration', + '账号配置' => 'Account Configuration', + '终端类型' => 'Device Type', + '绑定手机' => 'Bound Mobile', + '用户姓名' => 'User Name', + '用户昵称' => 'User Nickname', + '关联账号' => 'Associated Account', + '使用状态' => 'Status', + '首次登录' => 'First Login', + '请输入绑定手机' => 'Please enter bound mobile', + '请输入用户姓名' => 'Please enter user name', + '请输入用户昵称' => 'Please enter user nickname', + '请选择绑定时间' => 'Please select binding time', + '用户账号数据' => 'User Account Data', + + // 主账号管理 + '用户编号' => 'User Code', + '绑定邮箱' => 'Bound Email', + '绑定时间' => 'Binding Time', + '请输入用户编号' => 'Please enter user code', + '请输入绑定邮箱' => 'Please enter bound email', + + // 消息管理 + '短信配置' => 'SMS Configuration', + '消息编号' => 'Message Code', + '短信类型' => 'SMS Type', + '发送手机' => 'Send Mobile', + '短信内容' => 'SMS Content', + '发送时间' => 'Send Time', + '发送失败' => 'Send Failed', + '发送成功' => 'Send Success', + '请输入消息编号' => 'Please enter message code', + '请输入发送手机' => 'Please enter send mobile', + '请输入短信内容' => 'Please enter SMS content', + '请选择发送时间' => 'Please select send time', + + // 短信配置 + '服务区域' => 'Service Region', + '阿里云账号' => 'Aliyun Account', + '阿里云密钥' => 'Aliyun Secret Key', + '短信签名' => 'SMS Signature', + '短信模板编号' => 'SMS Template Code', + '请输入阿里云账号' => 'Please enter Aliyun account', + '请输入阿里云密钥' => 'Please enter Aliyun secret key', + '请输入短信签名' => 'Please enter SMS signature', + '请输入短信模板编号' => 'Please enter SMS template code', + + // 账号配置 + '认证有效时间' => 'Authentication Expire Time', + '登录自动注册' => 'Auto Register on Login', + '默认昵称前缀' => 'Default Nickname Prefix', + '默认用户头像' => 'Default User Avatar', + '开放接口通道' => 'Open Interface Channels', + '设置为 0 表示永不过期,建议设置有效时间达到系统自动回收令牌。' => 'Set to 0 means never expires. It is recommended to set an expiration time for automatic token recycling.', + '启用自动登录时,通过验证码登录时账号不存在会自动创建!' => 'When auto login is enabled, accounts that do not exist will be automatically created when logging in with verification code!', + '用户绑定账号后会自动使用此前缀与手机号后4位拼接为新默认昵称。' => 'After user binds account, this prefix will be automatically combined with the last 4 digits of mobile number as new default nickname.', + '当用户未设置头像时,自动使用此头像设置的图片链接。' => 'When user has not set avatar, automatically use the image link set in this avatar.', + '请输入默认昵称前缀' => 'Please enter default nickname prefix', +]); + diff --git a/plugin/think-plugs-account/src/view/device/index.html b/plugin/think-plugs-account/src/view/device/index.html index 1ce07fec3..d04592b16 100644 --- a/plugin/think-plugs-account/src/view/device/index.html +++ b/plugin/think-plugs-account/src/view/device/index.html @@ -2,14 +2,14 @@ {block name="button"} - + {/block} {block name="content"}
请选择数据类型,数据创建后不能再次修改哦 ~
+{:lang('请选择数据类型,数据创建后不能再次修改哦 ~')}
请输入新的数据类型,数据创建后不能再次修改哦 ~
+ +{:lang('请输入新的数据类型,数据创建后不能再次修改哦 ~')}
必选,请选择上级菜单或顶级菜单 ( 目前最多支持三级菜单 )
+{:lang('必选')},{:lang('请选择上级菜单或顶级菜单 ( 目前最多支持三级菜单 )')}
必选,请填写菜单名称 ( 如:系统管理 ),建议字符不要太长,一般 4-6 个汉字
+ +{:lang('必选')},{:lang('请填写菜单名称 ( 如:系统管理 ),建议字符不要太长,一般 4-6 个汉字')}
- 必选,请填写链接地址或选择系统节点 ( 如:https://domain.com/admin/user/index.html 或 admin/user/index )
-
当填写链接地址时,以下面的 “权限节点” 来判断菜单自动隐藏或显示,注意未填写 “权限节点” 时将不会隐藏该菜单哦
+ {:lang('必选')},{:lang('请填写链接地址或选择系统节点 ( 如:https://domain.com/admin/user/index.html 或 admin/user/index )')}
+
{:lang('当填写链接地址时,以下面的 "权限节点" 来判断菜单自动隐藏或显示,注意未填写 "权限节点" 时将不会隐藏该菜单哦')}
可选,设置菜单链接的 GET 访问参数 ( 如:name=1&age=3 )
+ +{:lang('可选')},{:lang('设置菜单链接的 GET 访问参数 ( 如:name=1&age=3 )')}
可选,请填写系统权限节点 ( 如:admin/user/index ),未填写时默认解释"菜单链接"判断是否拥有访问权限;
+ +{:lang('可选')},{:lang('请填写系统权限节点 ( 如:admin/user/index ),未填写时默认解释"菜单链接"判断是否拥有访问权限;')}
可选,设置菜单选项前置图标,目前支持 layui 字体图标及 iconfont 定制字体图标。
+{:lang('可选')},{:lang('设置菜单选项前置图标,目前支持 layui 字体图标及 iconfont 定制字体图标。')}