diff --git a/apps/i18n/core/zh/LC_MESSAGES/django.po b/apps/i18n/core/zh/LC_MESSAGES/django.po index 7f721a60c..b0b32dfc1 100644 --- a/apps/i18n/core/zh/LC_MESSAGES/django.po +++ b/apps/i18n/core/zh/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: JumpServer 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-12 15:12+0800\n" +"POT-Creation-Date: 2026-01-21 16:49+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -17,13 +17,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.4.3\n" -#: accounts/api/account/account.py:143 +#: accounts/api/account/account.py:193 #: accounts/serializers/account/account.py:181 -#: accounts/serializers/account/account.py:362 +#: accounts/serializers/account/account.py:358 msgid "Account already exists" msgstr "账号已存在" -#: accounts/api/account/account.py:208 +#: accounts/api/account/account.py:258 msgid "No valid assets found for account creation." msgstr "未找到可用于创建账户的有效资产。" @@ -33,6 +33,7 @@ msgid "Account not found" msgstr "账号未找到" #: accounts/api/automations/base.py:88 tickets/api/ticket.py:132 +#, python-brace-format msgid "The parameter 'action' must be [{}]" msgstr "参数 'action' 必须是 [{}]" @@ -115,10 +116,12 @@ msgid "Success: %s, Failed: %s, Total: %s" msgstr "成功: %s, 失败: %s, 总数: %s" #: accounts/automations/check_account/manager.py:277 +#, python-brace-format msgid "Check account report of {}" msgstr "风险检测报告 {}" #: accounts/automations/check_account/manager.py:283 +#, python-brace-format msgid "" "---\n" "Summary: \n" @@ -144,7 +147,7 @@ msgstr ">>> 开始执行测试网关账号可连接性任务" #: authentication/forms.py:28 #: authentication/templates/authentication/login.html:368 #: authentication/templates/authentication/login.html:414 -#: reports/api/users/user.py:101 settings/models.py:250 +#: reports/api/users/user.py:101 settings/models.py:246 #: settings/serializers/auth/ldap.py:27 settings/serializers/auth/ldap.py:53 #: settings/serializers/auth/ldap_ha.py:35 settings/serializers/msg.py:37 #: settings/serializers/terminal.py:32 terminal/serializers/storage.py:123 @@ -153,6 +156,8 @@ msgstr ">>> 开始执行测试网关账号可连接性任务" #: users/templates/users/_msg_user_created.html:13 #: users/templates/users/user_password_verify.html:18 #: xpack/plugins/cloud/serializers/account_attrs.py:43 +#: xpack/plugins/cloud/serializers/account_attrs.py:105 +#: xpack/plugins/cloud/serializers/account_attrs.py:112 msgid "Password" msgstr "密码" @@ -404,11 +409,11 @@ msgstr "默认表空间" msgid "Role" msgstr "角色" -#: accounts/const/automation.py:136 accounts/models/base.py:68 -msgid "Privileged" -msgstr "特权账号" +#: accounts/const/automation.py:136 users/serializers/profile.py:195 +msgid "Perms" +msgstr "权限" -#: accounts/const/automation.py:137 perms/serializers/permission.py:55 +#: accounts/const/automation.py:137 perms/serializers/permission.py:56 #: users/serializers/user.py:245 msgid "Groups" msgstr "用户组" @@ -462,7 +467,7 @@ msgstr "Vault 操作失败,请重试,或者检查 Vault 上的账号信息 #: accounts/templates/accounts/gather_account_report.html:117 #: accounts/templates/accounts/push_account_report.html:78 #: accounts/templates/accounts/push_account_report.html:118 -#: acls/notifications.py:70 acls/serializers/base.py:111 +#: acls/notifications.py:70 acls/serializers/base.py:110 #: assets/models/asset/common.py:102 assets/models/asset/common.py:427 #: assets/models/cmd_filter.py:36 audits/models.py:59 audits/models.py:336 #: audits/serializers.py:245 authentication/models/connection_token.py:42 @@ -529,7 +534,7 @@ msgstr "改密状态" #: accounts/serializers/account/service.py:13 #: accounts/serializers/automations/change_secret.py:117 #: accounts/serializers/automations/change_secret.py:148 -#: acls/serializers/base.py:112 +#: acls/serializers/base.py:111 #: acls/templates/acls/asset_login_reminder.html:11 #: assets/serializers/gateway.py:33 audits/models.py:60 audits/models.py:337 #: audits/serializers.py:246 authentication/api/connection_token.py:475 @@ -622,7 +627,7 @@ msgstr "图标" #: accounts/models/application.py:20 accounts/models/base.py:39 #: accounts/models/mixins/vault.py:49 -#: accounts/serializers/account/account.py:499 +#: accounts/serializers/account/account.py:495 #: accounts/serializers/account/base.py:20 #: authentication/models/temp_token.py:11 #: authentication/templates/authentication/_access_key_modal.html:31 @@ -633,7 +638,7 @@ msgstr "密文" #: accounts/models/application.py:21 acls/models/base.py:98 #: assets/models/automations/base.py:22 assets/models/cmd_filter.py:38 #: assets/serializers/asset/common.py:148 -#: assets/serializers/asset/common.py:424 perms/serializers/permission.py:66 +#: assets/serializers/asset/common.py:424 perms/serializers/permission.py:67 #: perms/serializers/user_permission.py:87 rbac/tree.py:36 rbac/tree.py:51 msgid "Accounts" msgstr "账号" @@ -902,6 +907,8 @@ msgstr "重复密码" #: users/notifications.py:20 users/serializers/profile.py:190 #: users/templates/users/_msg_user_created.html:12 #: xpack/plugins/cloud/serializers/account_attrs.py:41 +#: xpack/plugins/cloud/serializers/account_attrs.py:103 +#: xpack/plugins/cloud/serializers/account_attrs.py:110 msgid "Username" msgstr "用户名" @@ -1016,7 +1023,7 @@ msgid "Verify asset account" msgstr "账号验证" #: accounts/models/base.py:37 accounts/models/base.py:66 -#: accounts/serializers/account/account.py:498 +#: accounts/serializers/account/account.py:494 #: accounts/serializers/account/base.py:17 #: accounts/serializers/automations/change_secret.py:50 #: authentication/serializers/connect_token_secret.py:42 @@ -1035,6 +1042,10 @@ msgstr "密文策略" msgid "Password rules" msgstr "密码规则" +#: accounts/models/base.py:68 +msgid "Privileged" +msgstr "特权账号" + #: accounts/models/base.py:69 assets/models/automations/base.py:28 #: assets/models/cmd_filter.py:39 assets/models/label.py:22 #: authentication/serializers/connect_token_secret.py:129 @@ -1103,12 +1114,14 @@ msgid "Notification of account backup route task results" msgstr "账号备份任务结果通知" #: accounts/notifications.py:23 accounts/notifications.py:48 +#, python-brace-format msgid "" "{} - The account backup passage task has been completed. See the attachment " "for details" msgstr "{} - 账号备份任务已完成, 详情见附件" #: accounts/notifications.py:26 +#, python-brace-format msgid "" "{} - The account backup passage task has been completed: the encryption " "password has not been set - please go to personal information -> Basic file " @@ -1122,12 +1135,14 @@ msgid "Notification of implementation result of encryption change plan" msgstr "改密计划任务结果通知" #: accounts/notifications.py:69 +#, python-brace-format msgid "" "{} - The encryption change task has been completed. See the attachment for " "details" msgstr "{} - 改密任务已完成, 详情见附件" #: accounts/notifications.py:73 +#, python-brace-format msgid "" "{} - The encryption change task has been completed: the encryption password " "has not been set - please go to personal information -> set encryption " @@ -1181,6 +1196,7 @@ msgid "Change password and Add" msgstr "改密并添加" #: accounts/risk_handlers.py:127 +#, python-brace-format msgid "Execution failed: {}" msgstr "执行失败:{}" @@ -1255,38 +1271,38 @@ msgstr "状态" msgid "Changed" msgstr "已修改" -#: accounts/serializers/account/account.py:410 +#: accounts/serializers/account/account.py:406 #, python-format msgid "Asset does not support this secret type: %s" msgstr "资产不支持账号类型: %s" -#: accounts/serializers/account/account.py:443 +#: accounts/serializers/account/account.py:439 msgid "Account has exist" msgstr "账号已存在" -#: accounts/serializers/account/account.py:468 -#: accounts/serializers/account/account.py:469 +#: accounts/serializers/account/account.py:464 +#: accounts/serializers/account/account.py:465 msgid "At least one asset or node must be specified" msgstr "必须指定至少一个资产或节点" -#: accounts/serializers/account/account.py:482 -#: accounts/serializers/account/account.py:489 +#: accounts/serializers/account/account.py:478 +#: accounts/serializers/account/account.py:485 #: accounts/serializers/account/base.py:73 #: accounts/serializers/account/base.py:88 #: assets/serializers/asset/common.py:425 msgid "Spec info" msgstr "特殊信息" -#: accounts/serializers/account/account.py:500 +#: accounts/serializers/account/account.py:496 #: authentication/serializers/connect_token_secret.py:173 #: authentication/templates/authentication/_access_key_modal.html:30 -#: perms/models/perm_node.py:21 settings/models.py:249 +#: perms/models/perm_node.py:21 settings/models.py:245 #: users/serializers/group.py:33 msgid "ID" msgstr "ID" -#: accounts/serializers/account/account.py:510 acls/notifications.py:18 -#: acls/notifications.py:68 acls/serializers/base.py:104 +#: accounts/serializers/account/account.py:506 acls/notifications.py:18 +#: acls/notifications.py:68 acls/serializers/base.py:103 #: acls/templates/acls/asset_login_reminder.html:8 #: acls/templates/acls/user_login_reminder.html:8 #: assets/models/cmd_filter.py:24 assets/models/label.py:16 audits/models.py:55 @@ -1309,7 +1325,7 @@ msgstr "ID" msgid "User" msgstr "用户" -#: accounts/serializers/account/account.py:511 +#: accounts/serializers/account/account.py:507 #: authentication/templates/authentication/_access_key_modal.html:33 #: terminal/notifications.py:165 terminal/notifications.py:225 msgid "Date" @@ -1715,7 +1731,7 @@ msgstr "类型数" #: accounts/templates/accounts/gather_account_report.html:31 #: accounts/templates/accounts/push_account_report.html:32 #: assets/serializers/domain.py:23 assets/serializers/platform.py:183 -#: orgs/serializers.py:13 perms/serializers/permission.py:61 +#: orgs/serializers.py:13 perms/serializers/permission.py:62 msgid "Assets amount" msgstr "资产数量" @@ -1850,7 +1866,7 @@ msgstr "优先级可选范围为 1-100 (数值越小越优先)" #: assets/models/cmd_filter.py:81 audits/models.py:99 audits/serializers.py:107 #: authentication/serializers/connect_token_secret.py:131 #: authentication/templates/authentication/_access_key_modal.html:34 -#: perms/serializers/permission.py:63 perms/serializers/permission.py:85 +#: perms/serializers/permission.py:64 perms/serializers/permission.py:86 #: terminal/backends/command/models.py:24 #: tickets/serializers/ticket/ticket.py:21 msgid "Action" @@ -1861,7 +1877,7 @@ msgstr "动作" msgid "Reviewers" msgstr "审批人" -#: acls/models/base.py:81 perms/serializers/permission.py:53 +#: acls/models/base.py:81 perms/serializers/permission.py:54 #: tickets/models/flow.py:23 users/models/preference.py:16 #: users/serializers/group.py:21 users/serializers/user.py:424 msgid "Users" @@ -1873,7 +1889,7 @@ msgstr "用户" #: assets/serializers/platform.py:182 assets/serializers/platform.py:214 #: authentication/api/connection_token.py:474 ops/models/base.py:17 #: ops/models/job.py:157 ops/serializers/job.py:21 -#: perms/serializers/permission.py:57 +#: perms/serializers/permission.py:58 #: terminal/templates/terminal/_msg_command_execute_alert.html:16 #: xpack/plugins/cloud/manager.py:103 msgid "Assets" @@ -1916,6 +1932,7 @@ msgid "Command group" msgstr "命令组" #: acls/models/command_acl.py:86 +#, python-brace-format msgid "The generated regular expression is incorrect: {}" msgstr "生成的正则表达式有误: {}" @@ -2054,31 +2071,35 @@ msgid "" "10.1.1.1-10.1.1.20, 2001:db8:2de::e13, 2001:db8:1a:1110::/64 (Domain name " "support)" msgstr "" -"* 表示匹配所有。例如: 192.168.10.1, 192.168.1.0/24, 10.1.1.1-10.1.1.20, 2001:" -"db8:2de::e13, 2001:db8:1a:1110::/64 (支持网域)" +"* 表示匹配所有。例如: 192.168.10.1, 192.168.1.0/24, 10.1.1.1-10.1.1.20, " +"2001:db8:2de::e13, 2001:db8:1a:1110::/64 (支持网域)" #: acls/serializers/base.py:41 assets/serializers/asset/host.py:19 msgid "IP/Host" msgstr "IP/主机" -#: acls/serializers/base.py:100 +#: acls/serializers/base.py:99 msgid "Recipients" msgstr "接收人" -#: acls/serializers/base.py:126 tickets/serializers/ticket/ticket.py:79 +#: acls/serializers/base.py:125 tickets/serializers/ticket/ticket.py:79 +#, python-brace-format msgid "The organization `{}` does not exist" msgstr "组织 `{}` 不存在" -#: acls/serializers/base.py:132 +#: acls/serializers/base.py:131 +#, python-brace-format msgid "None of the reviewers belong to Organization `{}`" msgstr "所有复核人都不属于组织 `{}`" #: acls/serializers/rules/rules.py:22 #: xpack/plugins/cloud/serializers/task.py:163 +#, python-brace-format msgid "IP address invalid: `{}`" msgstr "IP 地址无效: `{}`" #: acls/serializers/rules/rules.py:35 +#, python-brace-format msgid "address invalid: `{}`" msgstr "地址无效: `{}`" @@ -2087,8 +2108,8 @@ msgid "" "With * indicating a match all. Such as: 192.168.10.1, 192.168.1.0/24, " "10.1.1.1-10.1.1.20, 2001:db8:2de::e13, 2001:db8:1a:1110::/64 " msgstr "" -"* 表示匹配所有。例如: 192.168.10.1, 192.168.1.0/24, 10.1.1.1-10.1.1.20, 2001:" -"db8:2de::e13, 2001:db8:1a:1110::/64" +"* 表示匹配所有。例如: 192.168.10.1, 192.168.1.0/24, 10.1.1.1-10.1.1.20, " +"2001:db8:2de::e13, 2001:db8:1a:1110::/64" #: acls/serializers/rules/rules.py:48 #: authentication/templates/authentication/_msg_oauth_bind.html:12 @@ -2168,6 +2189,7 @@ msgid "You can't update the root node name" msgstr "不能修改根节点名称" #: assets/api/node.py:65 +#, python-brace-format msgid "You can't delete the root node ({})" msgstr "不能删除根节点 ({})" @@ -2188,10 +2210,12 @@ msgid "App Assets" msgstr "资产管理" #: assets/automations/base/manager.py:139 +#, python-brace-format msgid "Task: {} finished" msgstr "任务:{} 完成" #: assets/automations/base/manager.py:340 +#, python-brace-format msgid " - Platform {} ansible disabled" msgstr " - 平台 {} Ansible 已禁用, 无法执行任务" @@ -2223,6 +2247,7 @@ msgid "No account" msgstr "没有账号" #: assets/automations/ping_gateway/manager.py:36 +#, python-brace-format msgid "Asset, {}, using account {}" msgstr "资产, {}, 使用账号 {}" @@ -2336,7 +2361,8 @@ msgstr "云服务" msgid "Web" msgstr "Web" -#: assets/const/category.py:16 common/sdk/sms/endpoint.py:20 +#: assets/const/category.py:16 common/sdk/sms/custom_file.py:47 +#: common/sdk/sms/endpoint.py:20 msgid "Custom type" msgstr "自定义类型" @@ -2624,7 +2650,7 @@ msgstr "网域" #: assets/models/asset/common.py:176 assets/serializers/asset/common.py:177 #: assets/serializers/automations/base.py:21 ops/serializers/job.py:22 -#: perms/serializers/permission.py:58 +#: perms/serializers/permission.py:59 msgid "Nodes" msgstr "节点" @@ -3030,7 +3056,7 @@ msgstr "节点路径,格式为 [\"/组织/节点名\"], 如果节点不存在 #: assets/serializers/asset/common.py:147 assets/serializers/platform.py:175 #: authentication/serializers/connect_token_secret.py:30 #: authentication/serializers/connect_token_secret.py:77 -#: perms/models/asset_permission.py:76 perms/serializers/permission.py:67 +#: perms/models/asset_permission.py:76 perms/serializers/permission.py:68 #: perms/serializers/user_permission.py:86 xpack/plugins/cloud/models.py:402 #: xpack/plugins/cloud/serializers/task.py:36 msgid "Protocols" @@ -3057,10 +3083,11 @@ msgid "port out of range (0-65535)" msgstr "端口超出范围 (0-65535)" #: assets/serializers/asset/common.py:315 +#, python-brace-format msgid "Protocol is required: {}" msgstr "协议是必填的: {}" -#: assets/serializers/asset/common.py:354 +#: assets/serializers/asset/common.py:354 labels/api.py:107 msgid "Invalid data" msgstr "无效的数据" @@ -3395,14 +3422,17 @@ msgid "" msgstr "当在网域详情-网关-测试连接时执行该任务" #: assets/tasks/utils.py:16 +#, python-brace-format msgid "Asset has been disabled, skipped: {}" msgstr "资产已经被禁用, 跳过: {}" #: assets/tasks/utils.py:20 +#, python-brace-format msgid "Asset may not be support ansible, skipped: {}" msgstr "资产或许不支持ansible, 跳过: {}" #: assets/tasks/utils.py:38 +#, python-brace-format msgid "For security, do not push user {}" msgstr "为了安全,禁止推送用户 {}" @@ -3833,6 +3863,7 @@ msgid "Permission expired" msgstr "授权已过期" #: authentication/api/connection_token.py:499 +#, python-brace-format msgid "ACL action is reject: {}({})" msgstr "ACL 动作是拒绝: {}({})" @@ -3862,11 +3893,13 @@ msgid "Facial comparison failed" msgstr "人脸比对失败" #: authentication/api/mfa.py:61 +#, python-brace-format msgid "Current user not support mfa type: {}" msgstr "当前用户不支持 MFA 类型: {}" #: authentication/api/password.py:34 terminal/api/session/session.py:343 #: users/views/profile/reset.py:63 +#, python-brace-format msgid "User does not exist: {}" msgstr "用户不存在: {}" @@ -3875,6 +3908,7 @@ msgid "No user matched" msgstr "没有匹配到用户" #: authentication/api/password.py:38 +#, python-brace-format msgid "" "The user is from {}, please go to the corresponding system to change the " "password" @@ -3890,6 +3924,7 @@ msgid "Forgot password" msgstr "忘记密码" #: authentication/api/password.py:70 authentication/mfa/email.py:42 +#, python-brace-format msgid "The validity period of the verification code is {} minute" msgstr "验证码有效期为 {} 分钟" @@ -3961,6 +3996,7 @@ msgid "Authentication failed password incorrect" msgstr "认证失败 (用户名或密码不正确)" #: authentication/confirm/relogin.py:11 +#, python-brace-format msgid "Login time has exceeded {} minutes, please login again" msgstr "登录时长已超过 {} 分钟,请重新登录" @@ -4049,12 +4085,14 @@ msgstr "" "被临时 锁定 {block_time} 分钟)" #: authentication/errors/const.py:47 authentication/errors/const.py:55 +#, python-brace-format msgid "" "The account has been locked (please contact admin to unlock it or try again " "after {} minutes)" msgstr "账号已被锁定 (请联系管理员解锁或{}分钟后重试)" #: authentication/errors/const.py:51 +#, python-brace-format msgid "" "The address has been locked (please contact admin to unlock it or try again " "after {} minutes)" @@ -4085,6 +4123,7 @@ msgid "Wait login confirm ticket for accept" msgstr "等待登录复核处理" #: authentication/errors/const.py:67 +#, python-brace-format msgid "Login confirm ticket was {}" msgstr "登录复核: {}" @@ -4213,11 +4252,11 @@ msgstr "邮件验证码校验失败" msgid "Email verification code" msgstr "邮件验证码" -#: authentication/mfa/face.py:56 +#: authentication/mfa/face.py:55 msgid "Bind face to enable" msgstr "绑定人脸特征以启用" -#: authentication/mfa/face.py:60 +#: authentication/mfa/face.py:59 msgid "Unbind face to disable" msgstr "解绑人脸特征以禁用" @@ -4266,6 +4305,7 @@ msgid "Clear phone number to disable" msgstr "清空手机号码禁用" #: authentication/middleware.py:96 settings/utils/ldap.py:714 +#, python-brace-format msgid "Authentication failed (before login check failed): {}" msgstr "认证失败 (登录前检查失败): {}" @@ -4282,6 +4322,7 @@ msgid "User is invalid" msgstr "无效的用户" #: authentication/mixins.py:195 +#, python-brace-format msgid "" " The administrator has enabled 'Only allow login from user source'. \n" " The current user source is {}. Please contact the " @@ -4289,6 +4330,7 @@ msgid "" msgstr "管理员已开启'仅允许从用户来源登录',当前用户来源为 {},请联系管理员。" #: authentication/mixins.py:376 +#, python-brace-format msgid "The MFA type ({}) is not enabled" msgstr "该 MFA ({}) 方式没有启用" @@ -4357,6 +4399,7 @@ msgid "Connection token inactive" msgstr "连接令牌未激活" #: authentication/models/connection_token.py:174 +#, python-brace-format msgid "Connection token expired at: {}" msgstr "连接令牌过期: {}" @@ -4481,7 +4524,7 @@ msgid "Actions" msgstr "动作" #: authentication/serializers/connection_token.py:46 -#: perms/serializers/permission.py:65 perms/serializers/permission.py:86 +#: perms/serializers/permission.py:66 perms/serializers/permission.py:87 #: users/serializers/user.py:127 users/serializers/user.py:261 msgid "Is expired" msgstr "已过期" @@ -4493,6 +4536,7 @@ msgstr "组织名称" #: authentication/serializers/password_mfa.py:29 #: users/templates/users/forgot_password.html:153 +#, python-brace-format msgid "The {} cannot be empty" msgstr "{} 不能为空" @@ -4519,8 +4563,8 @@ msgstr "创建完成后请下载私钥,每个私钥只有一次下载机会" msgid "Not a valid ssh public key" msgstr "SSH密钥不合法" -#: authentication/serializers/token.py:93 perms/serializers/permission.py:64 -#: perms/serializers/permission.py:87 users/serializers/user.py:128 +#: authentication/serializers/token.py:93 perms/serializers/permission.py:65 +#: perms/serializers/permission.py:88 users/serializers/user.py:128 #: users/serializers/user.py:258 msgid "Is valid" msgstr "是否有效" @@ -4556,8 +4600,8 @@ msgid "" "Retention Period" msgstr "" "系统在连接资产或创建临时密码时,会生成相应的连接 Token 或临时密码记录。为了保" -"障系统安全并控制数据存储量,系统会根据“安全设置 > 密码安全 > Token 保留时" -"长”中的配置,每天凌晨 2 点自动清理所有已过期的 Token 记录" +"障系统安全并控制数据存储量,系统会根据“安全设置 > 密码安全 > Token 保留时长”" +"中的配置,每天凌晨 2 点自动清理所有已过期的 Token 记录" #: authentication/templates/authentication/_access_key_modal.html:6 msgid "API key list" @@ -4608,7 +4652,7 @@ msgstr "需要 MFA 认证来查看账号信息" #: authentication/templates/authentication/_mfa_confirm_modal.html:20 #: authentication/templates/authentication/auth_fail_flash_message_standalone.html:37 #: templates/_modal.html:23 templates/flash_message_standalone.html:37 -#: templates/redirect_confirm.html:60 +#: templates/redirect_confirm.html:48 #: users/templates/users/user_password_verify.html:20 msgid "Confirm" msgstr "确认" @@ -4622,7 +4666,7 @@ msgstr "代码错误" #: authentication/templates/authentication/_msg_oauth_bind.html:3 #: authentication/templates/authentication/_msg_reset_password.html:3 #: authentication/templates/authentication/_msg_reset_password_code.html:9 -#: jumpserver/conf.py:542 +#: jumpserver/conf.py:546 #: perms/templates/perms/_msg_item_permissions_expire.html:3 #: tickets/templates/tickets/approve_check_password.html:32 #: users/templates/users/_msg_account_expire_reminder.html:4 @@ -4868,6 +4912,7 @@ msgid "Redirecting" msgstr "跳转中" #: authentication/views/login.py:173 +#, python-brace-format msgid "Redirecting to {} authentication" msgstr "正在跳转到 {} 认证" @@ -4876,10 +4921,12 @@ msgid "Login timeout, please try again." msgstr "登录超时,请重新登录" #: authentication/views/login.py:245 +#, python-brace-format msgid "User email already exists ({})" msgstr "用户邮箱已存在 ({})" #: authentication/views/login.py:338 +#, python-brace-format msgid "" "Wait for {} confirm, You also can copy link to her/him
\n" " Don't close this page" @@ -5077,6 +5124,7 @@ msgid "Updated by" msgstr "最后更新者" #: common/db/validators.py:9 +#, python-brace-format msgid "Invalid port range, should be like and within {}-{}" msgstr "无效的端口范围,应该在 {}-{} 之内" @@ -5089,10 +5137,12 @@ msgid "Org ID" msgstr "组织 ID" #: common/drf/parsers/base.py:21 +#, python-brace-format msgid "The file content overflowed (The maximum length `{}` bytes)" msgstr "文件内容太大 (最大长度 `{}` 字节)" #: common/drf/parsers/base.py:207 +#, python-brace-format msgid "Parse file error: {}" msgstr "解析文件错误: {}" @@ -5105,6 +5155,7 @@ msgid "Yes/No" msgstr "是/否" #: common/drf/renders/base.py:143 +#, python-brace-format msgid "Text, max length {}" msgstr "文本,最大长度 {}" @@ -5113,20 +5164,24 @@ msgid "Long text, no length limit" msgstr "长文本,无长度限制" #: common/drf/renders/base.py:147 +#, python-brace-format msgid "Number, min {} max {}" msgstr "数字,最小 {} 最大 {}" #: common/drf/renders/base.py:150 +#, python-brace-format msgid "Datetime format {}" msgstr "日期时间格式 {}" #: common/drf/renders/base.py:156 +#, python-brace-format msgid "" "Choices, format name(value), name is optional for human read, value is " "requisite, options {}" msgstr "选项,格式: 名称(值),名称是可选的,方便阅读,值是必填的,可选项有 {}" #: common/drf/renders/base.py:159 +#, python-brace-format msgid "Choices, options {}" msgstr "选项,可选项有 {}" @@ -5164,6 +5219,7 @@ msgid "Objects, format [\"id\", ...]" msgstr "多关联项,格式是 [\"id\", ...]" #: common/drf/renders/base.py:276 +#, python-brace-format msgid "" "{} - The encryption password has not been set - please go to personal " "information -> file encryption password to set the encryption password" @@ -5249,6 +5305,7 @@ msgid "sp_id is 6 bits" msgstr "SP_id 为6位" #: common/sdk/sms/cmpp2.py:214 +#, python-brace-format msgid "Failed to connect to the CMPP gateway server, err: {}" msgstr "连接网关服务器错误,错误:{}" @@ -5261,6 +5318,10 @@ msgstr "自定义短信文件无效" msgid "SMS sending failed[%s]: %s" msgstr "短信发送失败[%s]: %s" +#: common/sdk/sms/custom_file.py:47 common/serializers/common.py:98 +msgid "File" +msgstr "文件" + #: common/sdk/sms/endpoint.py:16 msgid "Alibaba cloud" msgstr "阿里云" @@ -5282,6 +5343,7 @@ msgid "Custom type (File)" msgstr "自定义 (文件)" #: common/sdk/sms/endpoint.py:32 +#, python-brace-format msgid "SMS provider not support: {}" msgstr "短信服务商不支持:{}" @@ -5298,6 +5360,7 @@ msgid "The verification code is incorrect" msgstr "验证码错误" #: common/sdk/sms/exceptions.py:18 +#, python-brace-format msgid "Please wait {} seconds before sending" msgstr "请在 {} 秒后发送" @@ -5305,10 +5368,6 @@ msgstr "请在 {} 秒后发送" msgid "Children" msgstr "节点" -#: common/serializers/common.py:98 -msgid "File" -msgstr "文件" - #: common/serializers/fields.py:139 msgid "Invalid data type" msgstr "无效的数据" @@ -5330,6 +5389,7 @@ msgstr "错误的数据类型,应该是列表" #: common/serializers/fields.py:353 #: xpack/plugins/cloud/serializers/account.py:121 #: xpack/plugins/cloud/serializers/task.py:122 +#, python-brace-format msgid "Invalid choice: {}" msgstr "无效选项: {}" @@ -5414,16 +5474,16 @@ msgstr "未找到 Code" msgid "The message code provided is invalid or has expired" msgstr "提供的消息代码无效或已过期" -#: jumpserver/conf.py:536 +#: jumpserver/conf.py:540 #, python-brace-format msgid "The verification code is: {code}" msgstr "验证码为: {code}" -#: jumpserver/conf.py:541 +#: jumpserver/conf.py:545 msgid "Create account successfully" msgstr "创建账号成功" -#: jumpserver/conf.py:543 +#: jumpserver/conf.py:547 msgid "Your account has been created successfully" msgstr "你的账号已创建成功" @@ -5431,6 +5491,10 @@ msgstr "你的账号已创建成功" msgid "JumpServer - An open-source PAM" msgstr "JumpServer 开源堡垒机" +#: jumpserver/context_processor.py:28 +msgid "FIT2CLOUD" +msgstr "" + #: jumpserver/views/celery_flower.py:22 msgid "

Flower service unavailable, check it

" msgstr "Flower 服务不可用,请检查" @@ -5445,6 +5509,7 @@ msgstr "" "这个页面,证明你访问的不是nginx监听的端口,祝你好运" #: jumpserver/views/other.py:78 +#, python-brace-format msgid "Websocket server run on port: {}, you should proxy it on nginx" msgstr "Websocket 服务运行在端口: {}, 请检查nginx是否代理是否设置" @@ -5503,6 +5568,7 @@ msgid "User message" msgstr "用户消息" #: notifications/models/notification.py:21 +#, python-brace-format msgid "{} subscription" msgstr "{} 订阅" @@ -5539,14 +5605,17 @@ msgid "Waiting task start" msgstr "等待任务开始" #: ops/api/celery.py:269 +#, python-brace-format msgid "Task {} not found" msgstr "任务 {} 不存在" #: ops/api/celery.py:276 +#, python-brace-format msgid "Task {} args or kwargs error" msgstr "任务 {} 执行参数错误" #: ops/api/job.py:65 +#, python-brace-format msgid "Login to asset {}({}) is rejected by login asset ACL ({})" msgstr "登录资产 {}({}) 被拒绝,由登录资产规则 ACL ({}) 限制" @@ -5829,6 +5898,7 @@ msgid "Celery Task Execution" msgstr "Celery 任务执行" #: ops/models/job.py:82 +#, python-brace-format msgid "Module {} is not suitable for this asset" msgstr "模块 {} 不适用于此资产" @@ -6109,6 +6179,7 @@ msgid "Name of the job" msgstr "Job 名称" #: orgs/api.py:60 +#, python-brace-format msgid "The current organization ({}) cannot be deleted" msgstr "当前组织 ({}) 不能被删除" @@ -6119,6 +6190,7 @@ msgid "" msgstr "LDAP 同步设置组织为当前组织,请切换其他组织后再进行删除操作" #: orgs/api.py:75 +#, python-brace-format msgid "The organization have resource ({}) cannot be deleted" msgstr "组织存在资源 ({}) 不能被删除" @@ -6169,7 +6241,7 @@ msgstr "可以查看所有加入的组织" msgid "Can not delete virtual org" msgstr "无法删除虚拟组织" -#: orgs/serializers.py:10 perms/serializers/permission.py:59 +#: orgs/serializers.py:10 perms/serializers/permission.py:60 #: rbac/serializers/role.py:27 users/serializers/group.py:53 msgid "Users amount" msgstr "用户数量" @@ -6178,7 +6250,7 @@ msgstr "用户数量" msgid "User groups amount" msgstr "用户组数量" -#: orgs/serializers.py:14 perms/serializers/permission.py:62 +#: orgs/serializers.py:14 perms/serializers/permission.py:63 msgid "Nodes amount" msgstr "节点数量" @@ -6275,7 +6347,7 @@ msgid "today" msgstr "今天" #: perms/notifications.py:12 perms/notifications.py:44 -#: settings/serializers/feature.py:199 +#: settings/serializers/feature.py:195 msgid "day" msgstr "天" @@ -6292,10 +6364,11 @@ msgid "Asset permissions is about to expire" msgstr "资产授权规则将要过期" #: perms/notifications.py:64 +#, python-brace-format msgid "asset permissions of organization {}" msgstr "组织 ({}) 的资产授权" -#: perms/serializers/permission.py:43 +#: perms/serializers/permission.py:44 msgid "" "Accounts, format [\"@virtual\", \"root\", \"%template_id\"], virtual " "choices: @ALL, @SPEC, @USER, @ANON, @INPUT" @@ -6303,14 +6376,19 @@ msgstr "" "账号,格式 [\"@虚拟账号\", \"root\", \"%模版id\"], 虚拟选项: @ALL, @SPEC, " "@USER, @ANON, @INPUT" -#: perms/serializers/permission.py:49 +#: perms/serializers/permission.py:50 msgid "Protocols, format [\"ssh\", \"rdp\", \"vnc\"] or [\"all\"]" msgstr "协议,格式为 [\"ssh\", \"rdp\", \"vnc\"] 或 [\"all\"]" -#: perms/serializers/permission.py:60 +#: perms/serializers/permission.py:61 msgid "Groups amount" msgstr "用户组数量" +#: perms/serializers/permission.py:135 +msgid "" +"Please ensure that the selected account templates use the same username." +msgstr "请检查是否选择了相同用户名的账号模板" + #: perms/tasks.py:28 msgid "Check asset permission expired" msgstr "校验资产授权规则已过期" @@ -6366,6 +6444,7 @@ msgid "Internal role, can't be update" msgstr "内部角色,不能更新" #: rbac/api/rolebinding.py:45 +#, python-brace-format msgid "{} at least one system role" msgstr "{} 至少有一个系统角色" @@ -6539,7 +6618,7 @@ msgstr "账号改密" msgid "App ops" msgstr "作业中心" -#: rbac/tree.py:60 settings/serializers/feature.py:205 +#: rbac/tree.py:60 settings/serializers/feature.py:201 msgid "Feature" msgstr "功能" @@ -6582,8 +6661,8 @@ msgstr "组织管理" msgid "Ticket comment" msgstr "工单评论" -#: rbac/tree.py:185 settings/serializers/feature.py:186 -#: settings/serializers/feature.py:188 tickets/models/ticket/general.py:310 +#: rbac/tree.py:185 settings/serializers/feature.py:182 +#: settings/serializers/feature.py:184 tickets/models/ticket/general.py:310 msgid "Ticket" msgstr "工单" @@ -6659,13 +6738,14 @@ msgstr "发送邮件成功" msgid "Chat AI is not enabled" msgstr "聊天 AI 没有开启" -#: settings/api/chat.py:95 settings/api/dingtalk.py:31 +#: settings/api/chat.py:91 settings/api/dingtalk.py:31 #: settings/api/feishu.py:39 settings/api/slack.py:34 settings/api/sms.py:160 #: settings/api/vault.py:49 settings/api/wecom.py:37 msgid "Test success" msgstr "测试成功" #: settings/api/email.py:22 +#, python-brace-format msgid "Test mail sent to {}, please check" msgstr "邮件已经发送{}, 请检查" @@ -6694,6 +6774,14 @@ msgstr "系统设置" msgid "Embed" msgstr "嵌入" +#: settings/const.py:22 settings/serializers/feature.py:173 +msgid "Custom gpt model" +msgstr "自定义 GPT 模型" + +#: settings/const.py:43 settings/serializers/feature.py:177 +msgid "Custom DeepSeek model" +msgstr "自定义 DeepSeek 模型" + #: settings/models.py:42 users/models/preference.py:14 msgid "Encrypted" msgstr "加密的" @@ -7532,7 +7620,7 @@ msgstr "租户 ID" #: settings/serializers/feature.py:112 terminal/serializers/storage.py:68 #: xpack/plugins/cloud/manager.py:128 xpack/plugins/cloud/manager.py:132 -#: xpack/plugins/cloud/models.py:293 +#: xpack/plugins/cloud/manager.py:169 xpack/plugins/cloud/models.py:293 msgid "Region" msgstr "地域" @@ -7581,69 +7669,53 @@ msgstr "GPT 模型" msgid "DeepSeek Model" msgstr "DeepSeek 模型" -#: settings/serializers/feature.py:172 -msgid "Custom Model" -msgstr "自定义模型" - -#: settings/serializers/feature.py:173 -msgid "Whether to use a custom model" -msgstr "是否使用自定义模型" - -#: settings/serializers/feature.py:177 -msgid "Custom gpt model" -msgstr "自定义 GPT 模型" - -#: settings/serializers/feature.py:181 -msgid "Custom DeepSeek model" -msgstr "自定义 DeepSeek 模型" - -#: settings/serializers/feature.py:190 +#: settings/serializers/feature.py:186 msgid "Approval without login" msgstr "免登录审批" -#: settings/serializers/feature.py:191 +#: settings/serializers/feature.py:187 msgid "Allow direct approval ticket without login" msgstr "允许无需登录直接批准工单" -#: settings/serializers/feature.py:195 +#: settings/serializers/feature.py:191 msgid "Period" msgstr "时段" -#: settings/serializers/feature.py:196 +#: settings/serializers/feature.py:192 msgid "" "The default authorization time period when applying for assets via a ticket" msgstr "工单申请资产的默认授权时间段" -#: settings/serializers/feature.py:199 +#: settings/serializers/feature.py:195 msgid "hour" msgstr "时" -#: settings/serializers/feature.py:200 +#: settings/serializers/feature.py:196 msgid "Unit" msgstr "单位" -#: settings/serializers/feature.py:200 +#: settings/serializers/feature.py:196 msgid "The unit of period" msgstr "执行周期" -#: settings/serializers/feature.py:208 +#: settings/serializers/feature.py:204 msgid "Adhoc command" msgstr "批量命令执行" -#: settings/serializers/feature.py:209 +#: settings/serializers/feature.py:205 msgid "" "Allow users to execute batch commands in the Workbench - Job Center - Adhoc" msgstr "允许用户在工作台 - 作业中心 - Adhoc 中执行批量命令" -#: settings/serializers/feature.py:213 +#: settings/serializers/feature.py:209 msgid "Command blacklist" msgstr "作业中心命令黑名单" -#: settings/serializers/feature.py:214 +#: settings/serializers/feature.py:210 msgid "Command blacklist in Adhoc" msgstr "作业中心命令黑名单" -#: settings/serializers/feature.py:220 +#: settings/serializers/feature.py:216 #: terminal/models/virtualapp/provider.py:17 #: terminal/models/virtualapp/virtualapp.py:36 #: terminal/models/virtualapp/virtualapp.py:97 @@ -7651,11 +7723,11 @@ msgstr "作业中心命令黑名单" msgid "Virtual app" msgstr "虚拟应用" -#: settings/serializers/feature.py:223 +#: settings/serializers/feature.py:219 msgid "Virtual App" msgstr "虚拟应用" -#: settings/serializers/feature.py:225 +#: settings/serializers/feature.py:221 msgid "" "Virtual applications, you can use the Linux operating system as an " "application server in remote applications." @@ -8220,19 +8292,23 @@ msgid "ldap:// or ldaps:// protocol is used." msgstr "使用 ldap:// 或 ldaps:// 协议" #: settings/utils/ldap.py:543 +#, python-brace-format msgid "Host or port is disconnected: {}" msgstr "主机或端口不可连接: {}" #: settings/utils/ldap.py:545 +#, python-brace-format msgid "The port is not the port of the LDAP service: {}" msgstr "端口不是LDAP服务端口: {}" #: settings/utils/ldap.py:547 +#, python-brace-format msgid "Please add certificate: {}" msgstr "请添加证书: {}" #: settings/utils/ldap.py:551 settings/utils/ldap.py:578 #: settings/utils/ldap.py:608 settings/utils/ldap.py:636 +#, python-brace-format msgid "Unknown error: {}" msgstr "未知错误: {}" @@ -8241,22 +8317,27 @@ msgid "Bind DN or Password incorrect" msgstr "绑定DN或密码错误" #: settings/utils/ldap.py:572 +#, python-brace-format msgid "Please enter Bind DN: {}" msgstr "请输入绑定DN: {}" #: settings/utils/ldap.py:574 +#, python-brace-format msgid "Please enter Password: {}" msgstr "请输入密码: {}" #: settings/utils/ldap.py:576 +#, python-brace-format msgid "Please enter correct Bind DN and Password: {}" msgstr "请输入正确的绑定DN和密码: {}" #: settings/utils/ldap.py:594 +#, python-brace-format msgid "Invalid User OU or User search filter: {}" msgstr "不合法的用户OU或用户过滤器: {}" #: settings/utils/ldap.py:625 +#, python-brace-format msgid "LDAP User attr map not include: {}" msgstr "LDAP属性映射没有包含: {}" @@ -8269,46 +8350,57 @@ msgid "LDAP authentication is not enabled" msgstr "LDAP认证没有启用" #: settings/utils/ldap.py:669 +#, python-brace-format msgid "Error (Invalid LDAP server): {}" msgstr "错误 (不合法的LDAP服务器地址): {}" #: settings/utils/ldap.py:671 +#, python-brace-format msgid "Error (Invalid Bind DN): {}" msgstr "错误 (不合法的绑定DN): {}" #: settings/utils/ldap.py:673 +#, python-brace-format msgid "Error (Invalid LDAP User attr map): {}" msgstr "错误 (不合法的LDAP属性映射): {}" #: settings/utils/ldap.py:675 +#, python-brace-format msgid "Error (Invalid User OU or User search filter): {}" msgstr "错误 (不合法的用户OU或用户过滤器): {}" #: settings/utils/ldap.py:677 +#, python-brace-format msgid "Error (Not enabled LDAP authentication): {}" msgstr "错误 (没有启用LDAP认证): {}" #: settings/utils/ldap.py:679 +#, python-brace-format msgid "Error (Unknown): {}" msgstr "错误 (未知): {}" #: settings/utils/ldap.py:682 +#, python-brace-format msgid "Succeed: Match {} users" msgstr "成功匹配 {} 个用户" #: settings/utils/ldap.py:712 +#, python-brace-format msgid "Authentication failed (configuration incorrect): {}" msgstr "认证失败 (配置错误): {}" #: settings/utils/ldap.py:716 +#, python-brace-format msgid "Authentication failed (username or password incorrect): {}" msgstr "认证失败 (用户名或密码不正确): {}" #: settings/utils/ldap.py:718 +#, python-brace-format msgid "Authentication failed (Unknown): {}" msgstr "认证失败: (未知): {}" #: settings/utils/ldap.py:721 +#, python-brace-format msgid "Authentication success: {}" msgstr "认证成功: {}" @@ -8317,10 +8409,12 @@ msgid "No LDAP user was found" msgstr "没有获取到 LDAP 用户" #: settings/ws.py:237 +#, python-brace-format msgid "Total {}, success {}, failure {}" msgstr "总共 {},成功 {},失败 {}" #: settings/ws.py:241 +#, python-brace-format msgid ", disabled {}" msgstr ", 禁用 {}" @@ -8453,26 +8547,18 @@ msgstr "验证码已发送" msgid "Home page" msgstr "首页" -#: templates/redirect_confirm.html:42 +#: templates/redirect_confirm.html:30 msgid "You are about to be redirected to an external website." msgstr "您即将跳转到一个外部网站" -#: templates/redirect_confirm.html:45 +#: templates/redirect_confirm.html:33 msgid "Please confirm that you trust this link: " msgstr "请确保你信任以下链接: " -#: templates/redirect_confirm.html:55 +#: templates/redirect_confirm.html:43 msgid "Back" msgstr "返回" -#: templates/redirect_confirm.html:70 -msgid "Redirecting you to the Desktop App ( JumpServer Client )" -msgstr "正在重定向到桌面应用程序 ( JumpServer 客户端 )" - -#: templates/redirect_confirm.html:73 -msgid "You can safely close this window and return to the application." -msgstr "你可以关闭此窗口并返回应用程序" - #: templates/resource_download.html:20 templates/resource_download.html:36 #: users/const.py:84 msgid "Client" @@ -8521,6 +8607,7 @@ msgid "This is enterprise edition applet" msgstr "企业版远程应用,在社区版中不能使用" #: terminal/api/applet/applet.py:91 +#, python-brace-format msgid "Applet not found in path: {}" msgstr "路径中未找到远程应用: {}" @@ -8533,6 +8620,7 @@ msgid "Deleting the default storage is not allowed" msgstr "不允许删除默认存储配置" #: terminal/api/component/storage.py:36 +#, python-brace-format msgid "Cannot delete storage that is being used: {}" msgstr "无法删除正在使用的存储: {}" @@ -8545,6 +8633,7 @@ msgid "Invalid" msgstr "无效" #: terminal/api/component/storage.py:132 terminal/tasks.py:208 +#, python-brace-format msgid "Test failure: {}" msgstr "测试失败: {}" @@ -8571,6 +8660,7 @@ msgid "Session replay" msgstr "会话录像" #: terminal/api/session/session.py:335 +#, python-brace-format msgid "Session does not exist: {}" msgstr "会话不存在: {}" @@ -8578,7 +8668,7 @@ msgstr "会话不存在: {}" msgid "Session is finished or the protocol not supported" msgstr "会话已经完成或协议不支持" -#: terminal/api/session/session.py:351 +#: terminal/api/session/session.py:351 tickets/api/ticket.py:140 msgid "User does not have permission" msgstr "用户没有权限" @@ -8743,10 +8833,12 @@ msgstr "主机" #: terminal/models/applet/applet.py:94 #: terminal/models/virtualapp/virtualapp.py:66 +#, python-brace-format msgid "Applet pkg not valid, Missing file {}" msgstr "Applet pkg 无效,缺少文件 {}" #: terminal/models/applet/applet.py:113 +#, python-brace-format msgid "Load platform.yml failed: {}" msgstr "加载 platform.yml 失败: {}" @@ -9121,9 +9213,9 @@ msgid "" "days. Detail" msgstr "" -"如果不存在,RDS 将处于试用模式,试用期为 120 天。详情" +"如果不存在,RDS 将处于试用模式,试用期为 120 天。详情" #: terminal/serializers/applet_host.py:55 msgid "RDS License Server" @@ -9294,6 +9386,7 @@ msgid "No asset or invalid asset" msgstr "没有资产或资产未激活" #: terminal/serializers/storage.py:23 +#, python-brace-format msgid "Endpoint invalid: remove path `{}`" msgstr "端点无效: 移除路径 `{}`" @@ -9342,8 +9435,8 @@ msgid "" "If there are multiple hosts, use a comma (,) to separate them.
(For " "example: http://www.jumpserver.a.com:9100, http://www.jumpserver.b.com:9100)" msgstr "" -"如果有多个主机,请用逗号 (,) 分隔它们。
(例如:http://www.jumpserver.a." -"com:9100,http://www.jumpserver.b.com:9100)" +"如果有多个主机,请用逗号 (,) 分隔它们。
(例如:http://" +"www.jumpserver.a.com:9100,http://www.jumpserver.b.com:9100)" #: terminal/serializers/storage.py:199 msgid "Index by date" @@ -9678,7 +9771,8 @@ msgstr "有效授权的资产" msgid "Ticket already closed" msgstr "工单已经关闭" -#: tickets/handlers/apply_asset.py:39 +#: tickets/handlers/apply_asset.py:40 +#, python-brace-format msgid "" "Created by the ticket ticket title: {} ticket applicant: {} ticket " "processor: {} ticket ID: {}" @@ -9698,6 +9792,7 @@ msgid "After change" msgstr "变更后" #: tickets/handlers/base.py:96 +#, python-brace-format msgid "{} {} the ticket" msgstr "{} {} 工单" @@ -9837,18 +9932,22 @@ msgid "Ticket applied info" msgstr "工单申请信息" #: tickets/notifications.py:116 +#, python-brace-format msgid "Your has a new ticket, applicant - {}" msgstr "你有一个新的工单, 申请人 - {}" #: tickets/notifications.py:120 +#, python-brace-format msgid "{}: New Ticket - {} ({})" msgstr "{}: 新工单 - {} ({})" #: tickets/notifications.py:168 +#, python-brace-format msgid "Your ticket has been processed, processor - {}" msgstr "你的工单已被处理, 处理人 - {}" #: tickets/notifications.py:172 +#, python-brace-format msgid "Ticket has processed - {} ({})" msgstr "你的工单已被处理, 处理人 - {} ({})" @@ -9878,6 +9977,7 @@ msgstr "申请动作" #: tickets/serializers/ticket/common.py:15 #: tickets/serializers/ticket/common.py:74 +#, python-brace-format msgid "Created by ticket ({}-{})" msgstr "通过工单创建 ({}-{})" @@ -9886,6 +9986,7 @@ msgid "The expiration date should be greater than the start date" msgstr "过期时间要大于开始时间" #: tickets/serializers/ticket/common.py:89 +#, python-brace-format msgid "Permission named `{}` already exists" msgstr "授权名称 `{}` 已存在" @@ -9894,6 +9995,7 @@ msgid "Process map" msgstr "流程图" #: tickets/serializers/ticket/ticket.py:91 +#, python-brace-format msgid "The ticket flow `{}` does not exist" msgstr "工单流程 `{}` 不存在" @@ -9940,14 +10042,18 @@ msgid "This user is not authorized to approve this ticket" msgstr "此用户无权审批此工单" #: users/api/user.py:64 +msgid "You cannot delete yourself. Please disable it instead." +msgstr "不能删除自己。请将其禁用。" + +#: users/api/user.py:66 msgid "Cannot delete the admin user. Please disable it instead." msgstr "无法删除管理员用户。请将其禁用。" -#: users/api/user.py:162 +#: users/api/user.py:164 msgid "Can not invite self" msgstr "不能邀请自己" -#: users/api/user.py:215 +#: users/api/user.py:217 msgid "Could not reset self otp, use profile reset instead" msgstr "不能在该页面重置 MFA 多因子认证, 请去个人信息页面重置" @@ -10360,13 +10466,10 @@ msgid "Password does not match security rules" msgstr "密码不满足安全规则" #: users/serializers/profile.py:33 +#, python-brace-format msgid "The new password cannot be the last {} passwords" msgstr "新密码不能是最近 {} 次的密码" -#: users/serializers/profile.py:195 -msgid "Perms" -msgstr "权限" - #: users/serializers/user.py:51 msgid "System roles" msgstr "系统角色" @@ -10794,6 +10897,7 @@ msgid "Password invalid" msgstr "用户名或密码无效" #: users/views/profile/reset.py:66 +#, python-brace-format msgid "" "Non-local users can log in only from third-party platforms and cannot change " "their passwords: {}" @@ -10804,6 +10908,7 @@ msgid "Token invalid or expired" msgstr "令牌错误或失效" #: users/views/profile/reset.py:204 +#, python-brace-format msgid "User auth from {}, go there change password" msgstr "用户认证源来自 {}, 请去相应系统修改密码" @@ -10812,6 +10917,7 @@ msgid "* Your password does not meet the requirements" msgstr "* 您的密码不符合要求" #: users/views/profile/reset.py:217 +#, python-brace-format msgid "* The new password cannot be the last {} passwords" msgstr "* 新密码不能是最近 {} 次的密码" @@ -10834,10 +10940,12 @@ msgid "Test connection successful" msgstr "测试成功" #: xpack/plugins/cloud/api.py:75 +#, python-brace-format msgid "Test connection failed: {}" msgstr "测试连接失败:{}" #: xpack/plugins/cloud/api.py:203 +#, python-brace-format msgid "User {} deleted the current resource and released the assets" msgstr "用户 {} 删除了当前资源已释放的资产" @@ -11035,6 +11143,10 @@ msgstr "同步地区" msgid "Get instances of region \"%s\" error, error: %s" msgstr "获取区域 \"%s\" 的实例错误,错误:%s" +#: xpack/plugins/cloud/manager.py:169 xpack/plugins/cloud/models.py:290 +msgid "Instance" +msgstr "实例" + #: xpack/plugins/cloud/manager.py:195 #, python-format msgid "Failed to synchronize the instance \"%s\"" @@ -11177,10 +11289,6 @@ msgstr "同步任务" msgid "Sync instance task history" msgstr "同步实例任务历史" -#: xpack/plugins/cloud/models.py:290 -msgid "Instance" -msgstr "实例" - #: xpack/plugins/cloud/models.py:307 msgid "Sync instance detail" msgstr "同步实例详情" @@ -11501,6 +11609,10 @@ msgstr "API 端点" msgid "Auto node classification" msgstr "自动节点分类" +#: xpack/plugins/cloud/serializers/account_attrs.py:108 +msgid "domain_name" +msgstr "域名称" + #: xpack/plugins/cloud/serializers/account_attrs.py:124 msgid "Auth url" msgstr "认证地址" @@ -11534,6 +11646,7 @@ msgid "The file is in JSON format" msgstr "JSON 格式的文件" #: xpack/plugins/cloud/serializers/account_attrs.py:200 +#, python-brace-format msgid "IP address invalid `{}`, {}" msgstr "IP 地址无效: `{}`, {}" @@ -11648,5 +11761,14 @@ msgstr "许可证导入成功" msgid "Invalid license" msgstr "许可证无效" -#~ msgid "domain_name" -#~ msgstr "域名称" +#~ msgid "Custom Model" +#~ msgstr "自定义模型" + +#~ msgid "Whether to use a custom model" +#~ msgstr "是否使用自定义模型" + +#~ msgid "Redirecting you to the Desktop App ( JumpServer Client )" +#~ msgstr "正在重定向到桌面应用程序 ( JumpServer 客户端 )" + +#~ msgid "You can safely close this window and return to the application." +#~ msgstr "你可以关闭此窗口并返回应用程序" diff --git a/apps/i18n/lina/zh.json b/apps/i18n/lina/zh.json index 24d387065..f2f4b107d 100644 --- a/apps/i18n/lina/zh.json +++ b/apps/i18n/lina/zh.json @@ -31,7 +31,7 @@ "AccountDiscoverTask": "账号发现", "AccountDiscoverTaskCreate": "创建发现帐户任务", "AccountDiscoverTaskUpdate": "更新发现帐户任务", - "AccountExportTips": "导出信息中包含账号密文涉及敏感信息,导出的格式为一个加密的zip文件(若没有设置加密密码,请前往右上角 个人设置 → 偏好设置 中进行进行设置)。", + "AccountExportTips": "导出信息中包含账号密文涉及敏感信息,导出的格式为一个加密的zip文件(若没有设置加密密码,请前往右上角 个人设置 → 偏好设置 中进行设置)。", "AccountList": "账号管理", "AccountOverview": "账号概览", "AccountPasswordChangeTrends": "账号改密趋势", diff --git a/apps/users/api/user.py b/apps/users/api/user.py index 8fcf1fa84..c7eb0dfd8 100644 --- a/apps/users/api/user.py +++ b/apps/users/api/user.py @@ -10,7 +10,7 @@ from rest_framework_bulk.generics import BulkModelViewSet from common.api import CommonApiMixin, SuggestionMixin from common.drf.filters import AttrRulesFilterBackend -from common.utils import get_logger, is_uuid +from common.utils import get_logger from orgs.utils import current_org, tmp_to_root_org from rbac.models import Role, RoleBinding from rbac.permissions import RBACPermission @@ -60,6 +60,8 @@ class UserViewSet(CommonApiMixin, UserQuerysetMixin, SuggestionMixin, BulkModelV return True def perform_destroy(self, instance): + if instance.username == self.request.user.username: + raise PermissionDenied(_("You cannot delete yourself. Please disable it instead.")) if instance.username == 'admin': raise PermissionDenied(_("Cannot delete the admin user. Please disable it instead.")) super().perform_destroy(instance)