From 96d5c519ecf9d0a33e85f39481f66854039c5916 Mon Sep 17 00:00:00 2001 From: fit2bot <68588906+fit2bot@users.noreply.github.com> Date: Wed, 30 Sep 2020 16:11:03 +0800 Subject: [PATCH] =?UTF-8?q?perf(i18n):=20=E6=B7=BB=E5=8A=A0=E7=BF=BB?= =?UTF-8?q?=E8=AF=91=E4=BF=A1=E6=81=AF=20(#4748)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * perf(i18n): 添加翻译信息 * perf(users): 重置密码成功邮件添加DEBUG信息 * perf(i18n): 修改翻译信息 * perf(i18n): 修改翻译信息 Co-authored-by: Bai --- apps/locale/zh/LC_MESSAGES/django.mo | Bin 57168 -> 59261 bytes apps/locale/zh/LC_MESSAGES/django.po | 679 ++++++++++++++++----------- apps/users/utils.py | 3 + 3 files changed, 397 insertions(+), 285 deletions(-) diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 9435b2b0e1afb9dbf7e0aa6132b2ae82ea64c5e5..ec010369a35867c7460010c64fe990374d8796e1 100644 GIT binary patch delta 19224 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 C(`*m` delta 17243 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\n" "Language-Team: JumpServer team\n" @@ -22,14 +22,14 @@ msgid "Custom" msgstr "自定义" #: applications/models/database_app.py:18 applications/models/k8s_app.py:11 -#: applications/models/remote_app.py:21 assets/models/asset.py:145 +#: applications/models/remote_app.py:21 assets/models/asset.py:149 #: assets/models/base.py:232 assets/models/cluster.py:18 #: assets/models/cmd_filter.py:21 assets/models/domain.py:20 #: assets/models/group.py:20 assets/models/label.py:18 ops/mixin.py:24 -#: orgs/models.py:22 perms/models/base.py:48 settings/models.py:27 -#: terminal/models.py:27 terminal/models.py:344 terminal/models.py:376 -#: terminal/models.py:413 users/forms/profile.py:20 users/models/group.py:15 -#: users/models/user.py:501 users/templates/users/_select_user_modal.html:13 +#: orgs/models.py:23 perms/models/base.py:48 settings/models.py:27 +#: terminal/models.py:27 terminal/models.py:348 terminal/models.py:380 +#: terminal/models.py:417 users/forms/profile.py:20 users/models/group.py:15 +#: users/models/user.py:505 users/templates/users/_select_user_modal.html:13 #: users/templates/users/user_asset_permission.html:37 #: users/templates/users/user_asset_permission.html:154 #: users/templates/users/user_database_app_permission.html:36 @@ -42,12 +42,12 @@ msgstr "自定义" #: users/templates/users/user_profile.html:51 #: users/templates/users/user_pubkey_update.html:57 #: users/templates/users/user_remote_app_permission.html:36 -#: xpack/plugins/cloud/models.py:35 +#: xpack/plugins/cloud/models.py:36 msgid "Name" msgstr "名称" #: applications/models/database_app.py:22 applications/models/k8s_app.py:14 -#: assets/models/cmd_filter.py:52 terminal/models.py:378 terminal/models.py:415 +#: assets/models/cmd_filter.py:52 terminal/models.py:382 terminal/models.py:419 #: tickets/models/ticket.py:40 #: users/templates/users/user_granted_database_app.html:35 msgid "Type" @@ -58,7 +58,7 @@ msgstr "类型" msgid "Host" msgstr "主机" -#: applications/models/database_app.py:27 assets/models/asset.py:191 +#: applications/models/database_app.py:27 assets/models/asset.py:195 #: assets/models/domain.py:51 msgid "Port" msgstr "端口" @@ -71,22 +71,23 @@ msgstr "数据库" # msgid "Date created" # msgstr "创建日期" #: applications/models/database_app.py:33 applications/models/k8s_app.py:18 -#: applications/models/remote_app.py:45 assets/models/asset.py:150 -#: assets/models/asset.py:226 assets/models/base.py:237 +#: applications/models/remote_app.py:45 assets/models/asset.py:154 +#: assets/models/asset.py:230 assets/models/base.py:237 #: assets/models/cluster.py:29 assets/models/cmd_filter.py:23 #: assets/models/cmd_filter.py:57 assets/models/domain.py:21 #: assets/models/domain.py:54 assets/models/group.py:23 -#: assets/models/label.py:23 ops/models/adhoc.py:37 orgs/models.py:25 +#: assets/models/label.py:23 ops/models/adhoc.py:37 orgs/models.py:26 #: perms/models/base.py:56 settings/models.py:32 terminal/models.py:37 -#: terminal/models.py:383 terminal/models.py:420 users/models/group.py:16 -#: users/models/user.py:534 users/templates/users/user_detail.html:115 +#: terminal/models.py:387 terminal/models.py:424 tickets/models/ticket.py:43 +#: users/models/group.py:16 users/models/user.py:538 +#: users/templates/users/user_detail.html:115 #: users/templates/users/user_granted_database_app.html:38 #: users/templates/users/user_granted_remote_app.html:37 #: users/templates/users/user_group_detail.html:62 #: users/templates/users/user_group_list.html:16 #: users/templates/users/user_profile.html:138 -#: xpack/plugins/change_auth_plan/models.py:77 xpack/plugins/cloud/models.py:53 -#: xpack/plugins/cloud/models.py:140 xpack/plugins/gathered_user/models.py:26 +#: xpack/plugins/change_auth_plan/models.py:77 xpack/plugins/cloud/models.py:54 +#: xpack/plugins/cloud/models.py:149 xpack/plugins/gathered_user/models.py:26 msgid "Comment" msgstr "备注" @@ -113,19 +114,19 @@ msgstr "集群" msgid "KubernetesApp" msgstr "Kubernetes应用" -#: applications/models/remote_app.py:23 assets/models/asset.py:352 +#: applications/models/remote_app.py:23 assets/models/asset.py:357 #: assets/models/authbook.py:26 assets/models/gathered_user.py:14 #: assets/serializers/admin_user.py:32 assets/serializers/asset_user.py:47 #: assets/serializers/asset_user.py:84 assets/serializers/system_user.py:46 -#: assets/serializers/system_user.py:179 audits/models.py:38 -#: perms/forms/asset_permission.py:89 perms/models/asset_permission.py:90 +#: assets/serializers/system_user.py:186 audits/models.py:38 +#: perms/forms/asset_permission.py:89 perms/models/asset_permission.py:92 #: templates/index.html:82 terminal/backends/command/models.py:19 #: terminal/backends/command/serializers.py:13 terminal/models.py:188 #: users/templates/users/user_asset_permission.html:40 #: users/templates/users/user_asset_permission.html:70 #: users/templates/users/user_granted_remote_app.html:36 -#: xpack/plugins/change_auth_plan/models.py:283 -#: xpack/plugins/cloud/models.py:266 +#: xpack/plugins/change_auth_plan/models.py:282 +#: xpack/plugins/cloud/models.py:275 msgid "Asset" msgstr "资产" @@ -142,28 +143,28 @@ msgstr "应用路径" msgid "Parameters" msgstr "参数" -#: applications/models/remote_app.py:39 assets/models/asset.py:224 +#: applications/models/remote_app.py:39 assets/models/asset.py:228 #: assets/models/base.py:240 assets/models/cluster.py:28 #: assets/models/cmd_filter.py:26 assets/models/cmd_filter.py:60 #: assets/models/group.py:21 common/db/models.py:67 common/mixins/models.py:49 -#: orgs/models.py:23 orgs/models.py:389 perms/models/base.py:54 -#: users/models/user.py:542 users/serializers/group.py:35 +#: orgs/models.py:24 orgs/models.py:394 perms/models/base.py:54 +#: users/models/user.py:546 users/serializers/group.py:35 #: users/templates/users/user_detail.html:97 -#: xpack/plugins/change_auth_plan/models.py:81 xpack/plugins/cloud/models.py:56 -#: xpack/plugins/cloud/models.py:146 xpack/plugins/gathered_user/models.py:30 +#: xpack/plugins/change_auth_plan/models.py:81 xpack/plugins/cloud/models.py:57 +#: xpack/plugins/cloud/models.py:155 xpack/plugins/gathered_user/models.py:30 msgid "Created by" msgstr "创建者" # msgid "Created by" # msgstr "创建者" -#: applications/models/remote_app.py:42 assets/models/asset.py:225 +#: applications/models/remote_app.py:42 assets/models/asset.py:229 #: assets/models/base.py:238 assets/models/cluster.py:26 #: assets/models/domain.py:23 assets/models/gathered_user.py:19 #: assets/models/group.py:22 assets/models/label.py:25 common/db/models.py:69 #: common/mixins/models.py:50 ops/models/adhoc.py:38 ops/models/command.py:27 -#: orgs/models.py:24 orgs/models.py:387 perms/models/base.py:55 +#: orgs/models.py:25 orgs/models.py:392 perms/models/base.py:55 #: users/models/group.py:18 users/templates/users/user_group_detail.html:58 -#: xpack/plugins/cloud/models.py:59 xpack/plugins/cloud/models.py:149 +#: xpack/plugins/cloud/models.py:60 xpack/plugins/cloud/models.py:158 msgid "Date created" msgstr "创建日期" @@ -180,11 +181,11 @@ msgstr "远程应用" msgid "Deleted failed, There are related assets" msgstr "删除失败,存在关联资产" -#: assets/api/node.py:52 +#: assets/api/node.py:58 msgid "You can't update the root node name" msgstr "不能修改根节点名称" -#: assets/api/node.py:59 +#: assets/api/node.py:65 msgid "Deletion failed and the node contains children or assets" msgstr "删除失败,节点包含子节点或资产" @@ -196,35 +197,35 @@ msgstr "不能移除资产的管理用户账号" msgid "Latest version could not be delete" msgstr "最新版本的不能被删除" -#: assets/models/asset.py:146 xpack/plugins/cloud/providers/base.py:16 +#: assets/models/asset.py:150 xpack/plugins/cloud/providers/base.py:17 msgid "Base" msgstr "基础" -#: assets/models/asset.py:147 +#: assets/models/asset.py:151 msgid "Charset" msgstr "编码" -#: assets/models/asset.py:148 tickets/models/ticket.py:35 +#: assets/models/asset.py:152 tickets/models/ticket.py:35 msgid "Meta" msgstr "元数据" -#: assets/models/asset.py:149 +#: assets/models/asset.py:153 msgid "Internal" msgstr "内部的" -#: assets/models/asset.py:169 assets/models/asset.py:193 +#: assets/models/asset.py:173 assets/models/asset.py:197 #: assets/serializers/asset.py:67 msgid "Platform" msgstr "系统平台" -#: assets/models/asset.py:186 assets/models/domain.py:50 +#: assets/models/asset.py:190 assets/models/domain.py:50 #: assets/serializers/asset_user.py:46 settings/serializers/settings.py:52 #: users/templates/users/_granted_assets.html:26 #: users/templates/users/user_asset_permission.html:156 msgid "IP" msgstr "IP" -#: assets/models/asset.py:187 assets/serializers/asset_user.py:45 +#: assets/models/asset.py:191 assets/serializers/asset_user.py:45 #: assets/serializers/gathered_user.py:20 settings/serializers/settings.py:51 #: tickets/serializers/request_asset_perm.py:25 #: users/templates/users/_granted_assets.html:25 @@ -232,105 +233,105 @@ msgstr "IP" msgid "Hostname" msgstr "主机名" -#: assets/models/asset.py:190 assets/models/domain.py:52 +#: assets/models/asset.py:194 assets/models/domain.py:52 #: assets/models/user.py:117 terminal/serializers/session.py:29 msgid "Protocol" msgstr "协议" -#: assets/models/asset.py:192 assets/serializers/asset.py:69 +#: assets/models/asset.py:196 assets/serializers/asset.py:69 #: perms/serializers/user_permission.py:71 msgid "Protocols" msgstr "协议组" -#: assets/models/asset.py:194 assets/models/domain.py:26 +#: assets/models/asset.py:198 assets/models/domain.py:26 #: assets/models/domain.py:53 msgid "Domain" msgstr "网域" -#: assets/models/asset.py:195 assets/models/user.py:112 -#: perms/models/asset_permission.py:91 +#: assets/models/asset.py:199 assets/models/user.py:112 +#: perms/models/asset_permission.py:93 #: xpack/plugins/change_auth_plan/models.py:56 #: xpack/plugins/gathered_user/models.py:24 msgid "Nodes" msgstr "节点" -#: assets/models/asset.py:196 assets/models/cmd_filter.py:22 +#: assets/models/asset.py:200 assets/models/cmd_filter.py:22 #: assets/models/domain.py:55 assets/models/label.py:22 #: authentication/models.py:48 msgid "Is active" msgstr "激活" -#: assets/models/asset.py:199 assets/models/cluster.py:19 +#: assets/models/asset.py:203 assets/models/cluster.py:19 #: assets/models/user.py:66 templates/_nav.html:44 -#: xpack/plugins/cloud/models.py:133 xpack/plugins/cloud/serializers.py:83 +#: xpack/plugins/cloud/models.py:142 xpack/plugins/cloud/serializers.py:84 msgid "Admin user" msgstr "管理用户" -#: assets/models/asset.py:202 +#: assets/models/asset.py:206 msgid "Public IP" msgstr "公网IP" -#: assets/models/asset.py:203 +#: assets/models/asset.py:207 msgid "Asset number" msgstr "资产编号" -#: assets/models/asset.py:206 +#: assets/models/asset.py:210 msgid "Vendor" msgstr "制造商" -#: assets/models/asset.py:207 +#: assets/models/asset.py:211 msgid "Model" msgstr "型号" -#: assets/models/asset.py:208 +#: assets/models/asset.py:212 msgid "Serial number" msgstr "序列号" -#: assets/models/asset.py:210 +#: assets/models/asset.py:214 msgid "CPU model" msgstr "CPU型号" -#: assets/models/asset.py:211 +#: assets/models/asset.py:215 msgid "CPU count" msgstr "CPU数量" -#: assets/models/asset.py:212 +#: assets/models/asset.py:216 msgid "CPU cores" msgstr "CPU核数" -#: assets/models/asset.py:213 +#: assets/models/asset.py:217 msgid "CPU vcpus" msgstr "CPU总数" -#: assets/models/asset.py:214 +#: assets/models/asset.py:218 msgid "Memory" msgstr "内存" -#: assets/models/asset.py:215 +#: assets/models/asset.py:219 msgid "Disk total" msgstr "硬盘大小" -#: assets/models/asset.py:216 +#: assets/models/asset.py:220 msgid "Disk info" msgstr "硬盘信息" -#: assets/models/asset.py:218 +#: assets/models/asset.py:222 msgid "OS" msgstr "操作系统" -#: assets/models/asset.py:219 +#: assets/models/asset.py:223 msgid "OS version" msgstr "系统版本" -#: assets/models/asset.py:220 +#: assets/models/asset.py:224 msgid "OS arch" msgstr "系统架构" -#: assets/models/asset.py:221 +#: assets/models/asset.py:225 msgid "Hostname raw" msgstr "主机名原始" -#: assets/models/asset.py:223 templates/_nav.html:46 +#: assets/models/asset.py:227 templates/_nav.html:46 msgid "Labels" msgstr "标签管理" @@ -354,13 +355,13 @@ msgstr "" #: audits/models.py:99 authentication/forms.py:11 #: authentication/templates/authentication/login.html:21 #: authentication/templates/authentication/xpack_login.html:101 -#: ops/models/adhoc.py:148 users/forms/profile.py:19 users/models/user.py:499 +#: ops/models/adhoc.py:148 users/forms/profile.py:19 users/models/user.py:503 #: users/templates/users/_select_user_modal.html:14 #: users/templates/users/user_detail.html:53 #: users/templates/users/user_list.html:15 #: users/templates/users/user_profile.html:47 #: xpack/plugins/change_auth_plan/models.py:47 -#: xpack/plugins/change_auth_plan/models.py:279 +#: xpack/plugins/change_auth_plan/models.py:278 msgid "Username" msgstr "用户名" @@ -376,26 +377,26 @@ msgstr "用户名" #: users/templates/users/user_pubkey_update.html:41 #: users/templates/users/user_update.html:20 #: xpack/plugins/change_auth_plan/models.py:68 -#: xpack/plugins/change_auth_plan/models.py:191 -#: xpack/plugins/change_auth_plan/models.py:286 +#: xpack/plugins/change_auth_plan/models.py:190 +#: xpack/plugins/change_auth_plan/models.py:285 msgid "Password" msgstr "密码" #: assets/models/base.py:235 xpack/plugins/change_auth_plan/models.py:72 -#: xpack/plugins/change_auth_plan/models.py:198 -#: xpack/plugins/change_auth_plan/models.py:293 +#: xpack/plugins/change_auth_plan/models.py:197 +#: xpack/plugins/change_auth_plan/models.py:292 msgid "SSH private key" msgstr "SSH密钥" #: assets/models/base.py:236 xpack/plugins/change_auth_plan/models.py:75 -#: xpack/plugins/change_auth_plan/models.py:194 -#: xpack/plugins/change_auth_plan/models.py:289 +#: xpack/plugins/change_auth_plan/models.py:193 +#: xpack/plugins/change_auth_plan/models.py:288 msgid "SSH public key" msgstr "SSH公钥" #: assets/models/base.py:239 assets/models/gathered_user.py:20 #: common/db/models.py:70 common/mixins/models.py:51 ops/models/adhoc.py:39 -#: orgs/models.py:388 +#: orgs/models.py:393 msgid "Date updated" msgstr "更新日期" @@ -407,7 +408,7 @@ msgstr "带宽" msgid "Contact" msgstr "联系人" -#: assets/models/cluster.py:22 users/models/user.py:520 +#: assets/models/cluster.py:22 users/models/user.py:524 #: users/templates/users/user_detail.html:62 msgid "Phone" msgstr "手机" @@ -433,7 +434,7 @@ msgid "Default" msgstr "默认" #: assets/models/cluster.py:36 assets/models/label.py:14 -#: users/models/user.py:667 +#: users/models/user.py:665 msgid "System" msgstr "系统" @@ -497,7 +498,7 @@ msgstr "每行一个命令" #: assets/models/cmd_filter.py:56 audits/models.py:57 #: authentication/templates/authentication/_access_key_modal.html:34 #: perms/forms/asset_permission.py:20 -#: tickets/serializers/request_asset_perm.py:64 +#: tickets/serializers/request_asset_perm.py:65 #: tickets/serializers/ticket.py:30 #: users/templates/users/_granted_assets.html:29 #: users/templates/users/user_asset_permission.html:44 @@ -547,15 +548,16 @@ msgstr "默认资产组" #: assets/models/label.py:15 audits/models.py:36 audits/models.py:56 #: audits/models.py:69 audits/serializers.py:77 authentication/models.py:46 -#: authentication/models.py:90 orgs/models.py:17 orgs/models.py:385 +#: authentication/models.py:90 orgs/models.py:18 orgs/models.py:390 #: perms/forms/asset_permission.py:83 perms/forms/database_app_permission.py:38 -#: perms/forms/remote_app_permission.py:40 perms/models/base.py:49 -#: templates/index.html:78 terminal/backends/command/models.py:18 +#: perms/forms/remote_app_permission.py:40 perms/models/asset_permission.py:216 +#: perms/models/base.py:49 templates/index.html:78 +#: terminal/backends/command/models.py:18 #: terminal/backends/command/serializers.py:12 terminal/models.py:186 -#: tickets/models/ticket.py:30 tickets/models/ticket.py:137 -#: tickets/serializers/request_asset_perm.py:65 +#: tickets/models/ticket.py:30 tickets/models/ticket.py:136 +#: tickets/serializers/request_asset_perm.py:66 #: tickets/serializers/ticket.py:31 users/forms/group.py:15 -#: users/models/user.py:159 users/models/user.py:655 +#: users/models/user.py:159 users/models/user.py:653 #: users/serializers/group.py:20 #: users/templates/users/user_asset_permission.html:38 #: users/templates/users/user_asset_permission.html:64 @@ -569,7 +571,7 @@ msgstr "默认资产组" msgid "User" msgstr "用户" -#: assets/models/label.py:19 assets/models/node.py:515 settings/models.py:28 +#: assets/models/label.py:19 assets/models/node.py:372 settings/models.py:28 msgid "Value" msgstr "值" @@ -577,37 +579,29 @@ msgstr "值" msgid "Category" msgstr "分类" -#: assets/models/node.py:233 +#: assets/models/node.py:129 msgid "New node" msgstr "新节点" -#: assets/models/node.py:397 -msgid "ungrouped" -msgstr "未分组" - -#: assets/models/node.py:399 users/templates/users/_granted_assets.html:130 +#: assets/models/node.py:278 users/templates/users/_granted_assets.html:130 msgid "empty" msgstr "空" -#: assets/models/node.py:401 -msgid "favorite" -msgstr "收藏夹" - -#: assets/models/node.py:514 perms/models/asset_permission.py:179 +#: assets/models/node.py:371 perms/models/asset_permission.py:191 msgid "Key" msgstr "键" -#: assets/models/node.py:518 +#: assets/models/node.py:375 perms/models/asset_permission.py:195 msgid "Parent key" msgstr "ssh私钥" -#: assets/models/node.py:527 assets/serializers/system_user.py:45 -#: assets/serializers/system_user.py:178 perms/forms/asset_permission.py:92 +#: assets/models/node.py:384 assets/serializers/system_user.py:45 +#: assets/serializers/system_user.py:185 perms/forms/asset_permission.py:92 #: perms/forms/asset_permission.py:99 #: users/templates/users/user_asset_permission.html:41 #: users/templates/users/user_asset_permission.html:73 #: users/templates/users/user_asset_permission.html:158 -#: xpack/plugins/cloud/models.py:129 xpack/plugins/cloud/serializers.py:84 +#: xpack/plugins/cloud/models.py:138 xpack/plugins/cloud/serializers.py:85 msgid "Node" msgstr "节点" @@ -672,7 +666,7 @@ msgstr "用户组" #: assets/models/user.py:201 audits/models.py:39 #: perms/forms/asset_permission.py:95 perms/forms/remote_app_permission.py:49 -#: perms/models/asset_permission.py:92 +#: perms/models/asset_permission.py:94 #: perms/models/database_app_permission.py:22 #: perms/models/k8s_app_permission.py:22 #: perms/models/remote_app_permission.py:16 templates/_nav.html:45 @@ -715,11 +709,11 @@ msgstr "协议格式 {}/{}" msgid "Protocol duplicate: {}" msgstr "协议重复: {}" -#: assets/serializers/asset.py:111 +#: assets/serializers/asset.py:110 msgid "Hardware info" msgstr "硬件信息" -#: assets/serializers/asset.py:112 orgs/mixins/serializers.py:26 +#: assets/serializers/asset.py:111 orgs/mixins/serializers.py:26 msgid "Org name" msgstr "组织名称" @@ -737,14 +731,14 @@ msgid "Backend" msgstr "后端" #: assets/serializers/asset_user.py:75 users/forms/profile.py:148 -#: users/models/user.py:531 users/templates/users/user_password_update.html:48 +#: users/models/user.py:535 users/templates/users/user_password_update.html:48 #: users/templates/users/user_profile.html:69 #: users/templates/users/user_profile_update.html:46 #: users/templates/users/user_pubkey_update.html:46 msgid "Public key" msgstr "SSH公钥" -#: assets/serializers/asset_user.py:79 users/models/user.py:528 +#: assets/serializers/asset_user.py:79 users/models/user.py:532 msgid "Private key" msgstr "ssh私钥" @@ -765,7 +759,7 @@ msgstr "值" msgid "The same level node name cannot be the same" msgstr "同级别节点名字不能重复" -#: assets/serializers/system_user.py:47 assets/serializers/system_user.py:180 +#: assets/serializers/system_user.py:47 assets/serializers/system_user.py:187 msgid "Login mode display" msgstr "登录模式显示" @@ -833,25 +827,25 @@ msgstr "更新节点资产硬件信息: {}" msgid "Gather assets users" msgstr "收集资产上的用户" -#: assets/tasks/push_system_user.py:177 +#: assets/tasks/push_system_user.py:178 #: assets/tasks/system_user_connectivity.py:89 msgid "System user is dynamic: {}" msgstr "系统用户是动态的: {}" -#: assets/tasks/push_system_user.py:208 +#: assets/tasks/push_system_user.py:209 msgid "Start push system user for platform: [{}]" msgstr "推送系统用户到平台: [{}]" -#: assets/tasks/push_system_user.py:209 +#: assets/tasks/push_system_user.py:210 #: assets/tasks/system_user_connectivity.py:81 msgid "Hosts count: {}" msgstr "主机数量: {}" -#: assets/tasks/push_system_user.py:251 assets/tasks/push_system_user.py:267 +#: assets/tasks/push_system_user.py:228 assets/tasks/push_system_user.py:244 msgid "Push system users to assets: {}" msgstr "推送系统用户到入资产: {}" -#: assets/tasks/push_system_user.py:259 +#: assets/tasks/push_system_user.py:236 msgid "Push system users to asset: {}({}) => {}" msgstr "推送系统用户到入资产: {}({}) => {}" @@ -951,7 +945,7 @@ msgstr "成功" #: audits/models.py:43 ops/models/command.py:28 perms/models/base.py:52 #: terminal/models.py:200 tickets/serializers/request_asset_perm.py:29 #: xpack/plugins/change_auth_plan/models.py:177 -#: xpack/plugins/change_auth_plan/models.py:308 +#: xpack/plugins/change_auth_plan/models.py:307 #: xpack/plugins/gathered_user/models.py:76 msgid "Date start" msgstr "开始日期" @@ -1006,7 +1000,7 @@ msgstr "启用" msgid "-" msgstr "" -#: audits/models.py:96 xpack/plugins/cloud/models.py:201 +#: audits/models.py:96 xpack/plugins/cloud/models.py:210 msgid "Failed" msgstr "失败" @@ -1029,20 +1023,20 @@ msgstr "Agent" #: audits/models.py:104 #: authentication/templates/authentication/_mfa_confirm_modal.html:14 #: authentication/templates/authentication/login_otp.html:6 -#: users/forms/profile.py:52 users/models/user.py:523 -#: users/serializers/user.py:232 users/templates/users/user_detail.html:77 +#: users/forms/profile.py:52 users/models/user.py:527 +#: users/serializers/user.py:229 users/templates/users/user_detail.html:77 #: users/templates/users/user_profile.html:87 msgid "MFA" msgstr "多因子认证" -#: audits/models.py:105 xpack/plugins/change_auth_plan/models.py:304 -#: xpack/plugins/cloud/models.py:214 +#: audits/models.py:105 xpack/plugins/change_auth_plan/models.py:303 +#: xpack/plugins/cloud/models.py:223 msgid "Reason" msgstr "原因" -#: audits/models.py:106 tickets/serializers/request_asset_perm.py:63 -#: tickets/serializers/ticket.py:29 xpack/plugins/cloud/models.py:211 -#: xpack/plugins/cloud/models.py:269 +#: audits/models.py:106 tickets/serializers/request_asset_perm.py:64 +#: tickets/serializers/ticket.py:29 xpack/plugins/cloud/models.py:220 +#: xpack/plugins/cloud/models.py:278 msgid "Status" msgstr "状态" @@ -1055,7 +1049,7 @@ msgid "Is success" msgstr "是否成功" #: audits/serializers.py:73 ops/models/command.py:24 -#: xpack/plugins/cloud/models.py:209 +#: xpack/plugins/cloud/models.py:218 msgid "Result" msgstr "结果" @@ -1203,13 +1197,13 @@ msgstr "登录复核 {}" msgid "SSO auth closed" msgstr "SSO 认证关闭了" -#: authentication/errors.py:218 authentication/views/login.py:244 +#: authentication/errors.py:218 authentication/views/login.py:246 msgid "Your password is too simple, please change it for security" msgstr "你的密码过于简单,为了安全,请修改" #: authentication/forms.py:26 authentication/forms.py:34 -#: authentication/templates/authentication/login.html:38 -#: authentication/templates/authentication/xpack_login.html:118 +#: authentication/templates/authentication/login.html:39 +#: authentication/templates/authentication/xpack_login.html:119 #: users/forms/user.py:199 msgid "MFA code" msgstr "多因子认证验证码" @@ -1269,7 +1263,7 @@ msgid "Show" msgstr "显示" #: authentication/templates/authentication/_access_key_modal.html:66 -#: users/models/user.py:421 users/serializers/user.py:229 +#: users/models/user.py:425 users/serializers/user.py:226 #: users/templates/users/user_profile.html:94 #: users/templates/users/user_profile.html:163 #: users/templates/users/user_profile.html:166 @@ -1278,7 +1272,7 @@ msgid "Disable" msgstr "禁用" #: authentication/templates/authentication/_access_key_modal.html:67 -#: users/models/user.py:422 users/serializers/user.py:230 +#: users/models/user.py:426 users/serializers/user.py:227 #: users/templates/users/user_profile.html:92 #: users/templates/users/user_profile.html:170 msgid "Enable" @@ -1290,7 +1284,7 @@ msgstr "删除成功" #: authentication/templates/authentication/_access_key_modal.html:155 #: authentication/templates/authentication/_mfa_confirm_modal.html:53 -#: templates/_modal.html:22 tickets/models/ticket.py:67 +#: templates/_modal.html:22 tickets/models/ticket.py:68 msgid "Close" msgstr "关闭" @@ -1319,8 +1313,8 @@ msgid "Code error" msgstr "代码错误" #: authentication/templates/authentication/login.html:6 -#: authentication/templates/authentication/login.html:49 -#: authentication/templates/authentication/xpack_login.html:130 +#: authentication/templates/authentication/login.html:50 +#: authentication/templates/authentication/xpack_login.html:131 #: templates/_base_only_msg_content.html:51 templates/_header_bar.html:83 msgid "Login" msgstr "登录" @@ -1330,21 +1324,28 @@ msgstr "登录" msgid "Captcha invalid" msgstr "验证码错误" -#: authentication/templates/authentication/login.html:60 -#: authentication/templates/authentication/xpack_login.html:134 +#: authentication/templates/authentication/login.html:61 +#: authentication/templates/authentication/xpack_login.html:135 #: users/templates/users/forgot_password.html:7 #: users/templates/users/forgot_password.html:8 msgid "Forgot password" msgstr "忘记密码" -#: authentication/templates/authentication/login.html:67 +#: authentication/templates/authentication/login.html:68 msgid "More login options" msgstr "更多登录方式" -#: authentication/templates/authentication/login.html:71 +#: authentication/templates/authentication/login.html:72 msgid "OpenID" msgstr "OpenID" +#: authentication/templates/authentication/login.html:102 +#: authentication/templates/authentication/xpack_login.html:174 +msgid "" +"You are using another authentication server, please contact your " +"administrator" +msgstr "正在使用其他认证服务器,请联系管理员" + #: authentication/templates/authentication/login_otp.html:17 msgid "One-time password" msgstr "一次性密码" @@ -1386,11 +1387,11 @@ msgstr "复制成功" msgid "Welcome back, please enter username and password to login" msgstr "欢迎回来,请输入用户名和密码登录" -#: authentication/views/login.py:85 +#: authentication/views/login.py:86 msgid "Please enable cookies and try again." msgstr "设置你的浏览器支持cookie" -#: authentication/views/login.py:190 +#: authentication/views/login.py:192 msgid "" "Wait for {} confirm, You also can copy link to her/him
\n" " Don't close this page" @@ -1398,19 +1399,19 @@ msgstr "" "等待 {} 确认, 你也可以复制链接发给他/她
\n" " 不要关闭本页面" -#: authentication/views/login.py:195 +#: authentication/views/login.py:197 msgid "No ticket found" msgstr "没有发现工单" -#: authentication/views/login.py:227 +#: authentication/views/login.py:229 msgid "Logout success" msgstr "退出登录成功" -#: authentication/views/login.py:228 +#: authentication/views/login.py:230 msgid "Logout success, return login page" msgstr "退出登录成功,返回到登录页面" -#: authentication/views/login.py:243 +#: authentication/views/login.py:245 msgid "Please change your password" msgstr "请修改密码" @@ -1446,6 +1447,10 @@ msgstr "其他人正在操作,请等待他人完成" msgid "Your request timeout" msgstr "您的请求超时了" +#: common/exceptions.py:35 +msgid "M2M reverse not allowed" +msgstr "" + #: common/fields/form.py:33 msgid "Not a valid json" msgstr "不是合法json" @@ -1478,7 +1483,7 @@ msgstr "" msgid "Marshal data to text field" msgstr "" -#: common/fields/model.py:157 +#: common/fields/model.py:165 msgid "Encrypt field using Secret Key" msgstr "" @@ -1502,6 +1507,11 @@ msgstr "不能包含特殊字符" msgid "This field must be unique." msgstr "字段必须唯一" +#: jumpserver/conf.py:471 templates/_base_only_msg_content.html:27 +#: xpack/plugins/interface/api.py:18 xpack/plugins/interface/models.py:36 +msgid "Welcome to the JumpServer open source fortress" +msgstr "欢迎使用JumpServer开源堡垒机" + #: jumpserver/views/celery_flower.py:23 msgid "

Flow service unavailable, check it

" msgstr "" @@ -1533,7 +1543,7 @@ msgstr "" msgid "Waiting task start" msgstr "等待任务开始" -#: ops/api/command.py:35 +#: ops/api/command.py:61 msgid "Not has host {} permission" msgstr "没有该主机 {} 权限" @@ -1626,7 +1636,7 @@ msgid "End time" msgstr "完成时间" #: ops/models/adhoc.py:242 xpack/plugins/change_auth_plan/models.py:180 -#: xpack/plugins/change_auth_plan/models.py:311 +#: xpack/plugins/change_auth_plan/models.py:310 #: xpack/plugins/gathered_user/models.py:79 msgid "Time" msgstr "时间" @@ -1688,28 +1698,28 @@ msgstr "更新任务内容: {}" msgid "Disk used more than 80%: {} => {}" msgstr "磁盘使用率超过 80%: {} => {}" -#: orgs/api.py:58 +#: orgs/api.py:62 msgid "Organization contains undeleted resources" msgstr "组织包含未删除的资源" -#: orgs/api.py:62 +#: orgs/api.py:66 msgid "The current organization cannot be deleted" msgstr "当前组织不能被删除" -#: orgs/mixins/models.py:56 orgs/mixins/serializers.py:25 orgs/models.py:40 -#: orgs/models.py:384 +#: orgs/mixins/models.py:56 orgs/mixins/serializers.py:25 orgs/models.py:41 +#: orgs/models.py:389 msgid "Organization" msgstr "组织" -#: orgs/models.py:15 +#: orgs/models.py:16 msgid "Organization administrator" msgstr "组织管理员" -#: orgs/models.py:16 +#: orgs/models.py:17 msgid "Organization auditor" msgstr "组织审计员" -#: orgs/models.py:386 users/forms/user.py:27 users/models/user.py:511 +#: orgs/models.py:391 users/forms/user.py:27 users/models/user.py:515 #: users/templates/users/_select_user_modal.html:15 #: users/templates/users/user_detail.html:73 #: users/templates/users/user_list.html:16 @@ -1725,6 +1735,14 @@ msgstr "未分组" msgid "Empty" msgstr "空" +#: perms/exceptions.py:9 +msgid "The administrator is modifying permissions. Please wait" +msgstr "管理员正在修改授权,请稍等" + +#: perms/exceptions.py:14 +msgid "The authorization cannot be revoked for the time being" +msgstr "该授权暂时不能撤销" + #: perms/forms/asset_permission.py:23 msgid "" "Tips: The RDP protocol does not support separate controls for uploading or " @@ -1734,8 +1752,7 @@ msgstr "提示:RDP 协议不支持单独控制上传或下载文件" #: perms/forms/asset_permission.py:86 perms/forms/database_app_permission.py:41 #: perms/forms/remote_app_permission.py:43 perms/models/base.py:50 #: templates/_nav.html:21 users/forms/user.py:168 users/models/group.py:31 -#: users/models/user.py:507 users/serializers/user.py:48 -#: users/templates/users/_select_user_modal.html:16 +#: users/models/user.py:511 users/templates/users/_select_user_modal.html:16 #: users/templates/users/user_asset_permission.html:39 #: users/templates/users/user_asset_permission.html:67 #: users/templates/users/user_database_app_permission.html:38 @@ -1759,49 +1776,49 @@ msgstr "资产和节点至少选一个" msgid "System users" msgstr "系统用户" -#: perms/models/asset_permission.py:35 settings/serializers/settings.py:56 +#: perms/models/asset_permission.py:37 settings/serializers/settings.py:56 msgid "All" msgstr "全部" -#: perms/models/asset_permission.py:36 +#: perms/models/asset_permission.py:38 msgid "Connect" msgstr "连接" -#: perms/models/asset_permission.py:37 +#: perms/models/asset_permission.py:39 msgid "Upload file" msgstr "上传文件" -#: perms/models/asset_permission.py:38 +#: perms/models/asset_permission.py:40 msgid "Download file" msgstr "下载文件" -#: perms/models/asset_permission.py:39 +#: perms/models/asset_permission.py:41 msgid "Upload download" msgstr "上传下载" -#: perms/models/asset_permission.py:40 -msgid "Clipboard copy" -msgstr "" - -#: perms/models/asset_permission.py:41 -msgid "Clipboard paste" -msgstr "" - #: perms/models/asset_permission.py:42 -msgid "Clipboard copy paste" -msgstr "" +msgid "Clipboard copy" +msgstr "剪贴板复制" -#: perms/models/asset_permission.py:93 +#: perms/models/asset_permission.py:43 +msgid "Clipboard paste" +msgstr "剪贴板粘贴" + +#: perms/models/asset_permission.py:44 +msgid "Clipboard copy paste" +msgstr "剪贴板复制粘贴" + +#: perms/models/asset_permission.py:95 msgid "Actions" msgstr "动作" -#: perms/models/asset_permission.py:97 templates/_nav.html:78 +#: perms/models/asset_permission.py:99 templates/_nav.html:78 #: users/templates/users/_user_detail_nav_header.html:31 msgid "Asset permission" msgstr "资产授权" #: perms/models/base.py:53 tickets/serializers/request_asset_perm.py:31 -#: users/models/user.py:539 users/templates/users/user_detail.html:93 +#: users/models/user.py:543 users/templates/users/user_detail.html:93 #: users/templates/users/user_profile.html:120 msgid "Date expired" msgstr "失效日期" @@ -1820,15 +1837,19 @@ msgstr "Kubernetes应用授权" msgid "RemoteApp permission" msgstr "远程应用授权" -#: settings/api.py:33 +#: perms/utils/user_asset_permission.py:503 +msgid "Please wait while your data is being initialized" +msgstr "数据正在初始化,请稍等" + +#: settings/api.py:34 msgid "Test mail sent to {}, please check" msgstr "邮件已经发送{}, 请检查" -#: settings/api.py:242 +#: settings/api.py:244 msgid "Get ldap users is None" msgstr "获取 LDAP 用户为 None" -#: settings/api.py:249 +#: settings/api.py:251 msgid "Imported {} users successfully" msgstr "导入 {} 个用户成功" @@ -1942,11 +1963,6 @@ msgstr "认证成功: {}" msgid "Search" msgstr "搜索" -#: templates/_base_only_msg_content.html:27 xpack/plugins/interface/api.py:18 -#: xpack/plugins/interface/models.py:36 -msgid "Welcome to the JumpServer open source fortress" -msgstr "欢迎使用JumpServer开源堡垒机" - #: templates/_base_only_msg_content.html:32 msgid "" "The world's first fully open source fortress, using the GNU GPL v2.0 open " @@ -2426,19 +2442,19 @@ msgstr "登录了" msgid "Filters" msgstr "过滤" -#: terminal/api/session.py:190 +#: terminal/api/session.py:191 msgid "Session does not exist: {}" msgstr "会话不存在: {}" -#: terminal/api/session.py:193 +#: terminal/api/session.py:194 msgid "Session is finished or the protocol not supported" msgstr "会话已经完成或协议不支持" -#: terminal/api/session.py:198 +#: terminal/api/session.py:199 msgid "User does not exist: {}" msgstr "用户不存在: {}" -#: terminal/api/session.py:202 +#: terminal/api/session.py:203 msgid "User does not have permission" msgstr "用户没有权限" @@ -2446,15 +2462,19 @@ msgstr "用户没有权限" msgid "Deleting the default storage is not allowed" msgstr "不允许删除默认存储配置" -#: terminal/api/storage.py:54 +#: terminal/api/storage.py:27 +msgid "Cannot delete storage that is being used" +msgstr "不允许删除正在使用的存储配置" + +#: terminal/api/storage.py:57 msgid "Test failure: {}" msgstr "测试失败: {}" -#: terminal/api/storage.py:57 +#: terminal/api/storage.py:60 msgid "Test successful" msgstr "测试成功" -#: terminal/api/storage.py:59 +#: terminal/api/storage.py:62 msgid "Test failure: Account invalid" msgstr "测试失败: 账户无效" @@ -2545,41 +2565,45 @@ msgstr "回放" msgid "Date end" msgstr "结束日期" -#: terminal/models.py:345 +#: terminal/models.py:349 msgid "Args" msgstr "参数" +#: terminal/serializers/terminal.py:38 terminal/serializers/terminal.py:46 +msgid "Not found" +msgstr "没有发现" + #: tickets/api/request_asset_perm.py:48 #, python-format msgid "Ticket has %s" msgstr "工单已%s" -#: tickets/api/request_asset_perm.py:93 +#: tickets/api/request_asset_perm.py:94 msgid "Confirm assets first" msgstr "请先确认资产" -#: tickets/api/request_asset_perm.py:96 +#: tickets/api/request_asset_perm.py:97 msgid "Confirmed assets changed" msgstr "确认的资产变更了" -#: tickets/api/request_asset_perm.py:100 -msgid "Confirm system-user first" +#: tickets/api/request_asset_perm.py:101 +msgid "Confirm system-users first" msgstr "请先确认系统用户" -#: tickets/api/request_asset_perm.py:104 -msgid "Confirmed system-user changed" +#: tickets/api/request_asset_perm.py:105 +msgid "Confirmed system-users changed" msgstr "确认的系统用户变更了" -#: tickets/api/request_asset_perm.py:107 tickets/api/request_asset_perm.py:114 -#: xpack/plugins/cloud/models.py:202 +#: tickets/api/request_asset_perm.py:108 tickets/api/request_asset_perm.py:115 +#: xpack/plugins/cloud/models.py:211 msgid "Succeed" msgstr "成功" -#: tickets/api/request_asset_perm.py:122 +#: tickets/api/request_asset_perm.py:123 msgid "From request ticket: {} {}" msgstr "来自工单申请: {} {}" -#: tickets/api/request_asset_perm.py:124 +#: tickets/api/request_asset_perm.py:125 msgid "{} request assets, approved by {}" msgstr "{} 申请资产,通过人 {}" @@ -2595,7 +2619,7 @@ msgstr "只有审批人可以操作工单" msgid "Ticket can not be operated" msgstr "不能操作该工单" -#: tickets/models/ticket.py:18 tickets/models/ticket.py:69 +#: tickets/models/ticket.py:18 tickets/models/ticket.py:70 msgid "Open" msgstr "待处理" @@ -2619,7 +2643,7 @@ msgstr "同意" msgid "Reject" msgstr "拒绝" -#: tickets/models/ticket.py:31 tickets/models/ticket.py:138 +#: tickets/models/ticket.py:31 tickets/models/ticket.py:137 msgid "User display name" msgstr "用户显示名称" @@ -2627,7 +2651,7 @@ msgstr "用户显示名称" msgid "Title" msgstr "标题" -#: tickets/models/ticket.py:34 tickets/models/ticket.py:139 +#: tickets/models/ticket.py:34 tickets/models/ticket.py:138 msgid "Body" msgstr "内容" @@ -2647,7 +2671,7 @@ msgstr "待处理人" msgid "Assignees display name" msgstr "待处理人名称" -#: tickets/models/ticket.py:70 +#: tickets/models/ticket.py:71 msgid "{} {} this ticket" msgstr "{} {} 这个工单" @@ -2663,19 +2687,19 @@ msgstr "IP组" msgid "Confirmed assets" msgstr "确认的资产" -#: tickets/serializers/request_asset_perm.py:38 +#: tickets/serializers/request_asset_perm.py:39 msgid "Confirmed system user" msgstr "确认的系统用户" -#: tickets/serializers/request_asset_perm.py:87 +#: tickets/serializers/request_asset_perm.py:88 msgid "Invalid `org_id`" msgstr "无效的 `org_id`" -#: tickets/serializers/request_asset_perm.py:96 +#: tickets/serializers/request_asset_perm.py:97 msgid "Field `assignees` must be organization admin or superuser" msgstr "字段 assignees 必须是组织管理员或者超级管理员" -#: tickets/serializers/request_asset_perm.py:146 +#: tickets/serializers/request_asset_perm.py:147 #, python-brace-format msgid "" "\n" @@ -2762,7 +2786,7 @@ msgstr "" " \n" " " -#: users/api/user.py:158 +#: users/api/user.py:156 msgid "Could not reset self otp, use profile reset instead" msgstr "不能在该页面重置多因子认证, 请去个人信息页面重置" @@ -2808,7 +2832,7 @@ msgstr "确认密码" msgid "Password does not match" msgstr "密码不一致" -#: users/forms/profile.py:89 users/models/user.py:503 +#: users/forms/profile.py:89 users/models/user.py:507 #: users/templates/users/user_detail.html:57 #: users/templates/users/user_profile.html:59 msgid "Email" @@ -2844,12 +2868,12 @@ msgid "Public key should not be the same as your old one." msgstr "不能和原来的密钥相同" #: users/forms/profile.py:137 users/forms/user.py:90 -#: users/serializers/user.py:192 users/serializers/user.py:274 -#: users/serializers/user.py:332 +#: users/serializers/user.py:189 users/serializers/user.py:271 +#: users/serializers/user.py:329 msgid "Not a valid ssh public key" msgstr "SSH密钥不合法" -#: users/forms/user.py:31 users/models/user.py:546 +#: users/forms/user.py:31 users/models/user.py:550 #: users/templates/users/user_detail.html:89 #: users/templates/users/user_list.html:18 #: users/templates/users/user_profile.html:102 @@ -2865,7 +2889,7 @@ msgid "Join user groups" msgstr "添加到用户组" #: users/forms/user.py:103 users/views/profile/password.py:59 -#: users/views/profile/reset.py:123 +#: users/views/profile/reset.py:124 msgid "* Your password does not meet the requirements" msgstr "* 您的密码不符合要求" @@ -2895,83 +2919,83 @@ msgstr "系统审计员" msgid "Application" msgstr "应用程序" -#: users/models/user.py:423 users/templates/users/user_profile.html:90 +#: users/models/user.py:427 users/templates/users/user_profile.html:90 msgid "Force enable" msgstr "强制启用" -#: users/models/user.py:490 +#: users/models/user.py:494 msgid "Local" msgstr "数据库" -#: users/models/user.py:514 +#: users/models/user.py:518 msgid "Avatar" msgstr "头像" -#: users/models/user.py:517 users/templates/users/user_detail.html:68 +#: users/models/user.py:521 users/templates/users/user_detail.html:68 msgid "Wechat" msgstr "微信" -#: users/models/user.py:550 +#: users/models/user.py:554 msgid "Date password last updated" msgstr "最后更新密码日期" -#: users/models/user.py:663 +#: users/models/user.py:661 msgid "Administrator" msgstr "管理员" -#: users/models/user.py:666 +#: users/models/user.py:664 msgid "Administrator is the super user of system" msgstr "Administrator是初始的超级管理员" -#: users/serializers/user.py:53 users/serializers/user.py:87 +#: users/serializers/user.py:50 users/serializers/user.py:84 msgid "Organization role name" msgstr "组织角色名称" -#: users/serializers/user.py:78 users/serializers/user.py:245 +#: users/serializers/user.py:75 users/serializers/user.py:242 msgid "Is first login" msgstr "首次登录" -#: users/serializers/user.py:79 +#: users/serializers/user.py:76 msgid "Is valid" msgstr "账户是否有效" -#: users/serializers/user.py:80 +#: users/serializers/user.py:77 msgid "Is expired" msgstr " 是否过期" -#: users/serializers/user.py:81 +#: users/serializers/user.py:78 msgid "Avatar url" msgstr "头像路径" -#: users/serializers/user.py:85 +#: users/serializers/user.py:82 msgid "Groups name" msgstr "用户组名" -#: users/serializers/user.py:86 +#: users/serializers/user.py:83 msgid "Source name" msgstr "用户来源名" -#: users/serializers/user.py:88 +#: users/serializers/user.py:85 msgid "Super role name" msgstr "超级角色名称" -#: users/serializers/user.py:89 +#: users/serializers/user.py:86 msgid "Total role name" msgstr "汇总角色名称" -#: users/serializers/user.py:112 +#: users/serializers/user.py:109 msgid "Role limit to {}" msgstr "角色只能为 {}" -#: users/serializers/user.py:124 users/serializers/user.py:298 +#: users/serializers/user.py:121 users/serializers/user.py:295 msgid "Password does not match security rules" msgstr "密码不满足安全规则" -#: users/serializers/user.py:290 +#: users/serializers/user.py:287 msgid "The old password is incorrect" msgstr "旧密码错误" -#: users/serializers/user.py:304 +#: users/serializers/user.py:301 msgid "The newly set password is inconsistent" msgstr "两次密码不一致" @@ -2985,7 +3009,7 @@ msgstr "安全令牌验证" #: users/templates/users/_base_otp.html:14 users/templates/users/_user.html:13 #: users/templates/users/user_profile_update.html:55 -#: xpack/plugins/cloud/models.py:119 xpack/plugins/cloud/serializers.py:82 +#: xpack/plugins/cloud/models.py:124 xpack/plugins/cloud/serializers.py:83 msgid "Account" msgstr "账户" @@ -3149,7 +3173,7 @@ msgstr "很强" #: users/templates/users/user_database_app_permission.html:41 #: users/templates/users/user_list.html:19 #: users/templates/users/user_remote_app_permission.html:41 -#: xpack/plugins/cloud/models.py:50 +#: xpack/plugins/cloud/models.py:51 msgid "Validity" msgstr "有效" @@ -3479,8 +3503,8 @@ msgstr "新的公钥已设置成功,请下载对应的私钥" msgid "Update user" msgstr "更新用户" -#: users/templates/users/user_update.html:22 users/views/profile/reset.py:49 -#: users/views/profile/reset.py:116 +#: users/templates/users/user_update.html:22 users/views/profile/reset.py:50 +#: users/views/profile/reset.py:117 msgid "User auth from {}, go there change password" msgstr "用户认证源来自 {}, 请去相应系统修改密码" @@ -3592,11 +3616,77 @@ msgstr "" "
\n" " " -#: users/utils.py:116 +#: users/utils.py:117 users/views/profile/reset.py:77 +msgid "Reset password success" +msgstr "重置密码成功" + +#: users/utils.py:119 +msgid "" +"\n" +" \n" +" Hi %(name)s:\n" +"
\n" +" \n" +" \n" +"
\n" +" Your JumpServer password has just been successfully updated.\n" +"
\n" +" \n" +"
\n" +" If the password update was not initiated by you, your account may have " +"security issues. \n" +" It is recommended that you log on to the JumpServer immediately and " +"change your password.\n" +"
\n" +" \n" +"
\n" +" If you have any questions, you can contact the administrator.\n" +"
\n" +"
\n" +" ---\n" +"
\n" +"
\n" +" IP Address: %(ip_address)s\n" +"
\n" +"
\n" +" Browser: %(browser)s\n" +"
\n" +" \n" +" " +msgstr "" +"\n" +" \n" +" Hi %(name)s:\n" +"
\n" +" \n" +" \n" +"
\n" +" 你的 JumpServer 密码刚刚已经成功更新。
\n" +" \n" +"
\n" +" 如果这次密码更新不是由你发起的,那么你的账号可能存在安全问题。\n" +" 建议你立刻登录 JumpServer 更改密码。\n" +"
\n" +" \n" +"
\n" +" 如果你有任何疑问,可以联系管理员。
\n" +"
\n" +" ---\n" +"
\n" +"
\n" +" IP 地址: %(ip_address)s\n" +"
\n" +"
\n" +" 浏览器: %(browser)s\n" +"
\n" +" \n" +" " + +#: users/utils.py:160 msgid "Security notice" msgstr "安全通知" -#: users/utils.py:118 +#: users/utils.py:162 #, python-format msgid "" "\n" @@ -3645,11 +3735,11 @@ msgstr "" "
\n" " " -#: users/utils.py:154 +#: users/utils.py:198 msgid "Expiration notice" msgstr "过期通知" -#: users/utils.py:156 +#: users/utils.py:200 #, python-format msgid "" "\n" @@ -3671,11 +3761,11 @@ msgstr "" "
\n" " " -#: users/utils.py:175 +#: users/utils.py:219 msgid "SSH Key Reset" msgstr "重置SSH密钥" -#: users/utils.py:177 +#: users/utils.py:221 #, python-format msgid "" "\n" @@ -3728,28 +3818,24 @@ msgstr "用户名或密码无效" msgid "Public key update" msgstr "密钥更新" -#: users/views/profile/reset.py:45 +#: users/views/profile/reset.py:46 msgid "Email address invalid, please input again" msgstr "邮箱地址错误,重新输入" -#: users/views/profile/reset.py:62 +#: users/views/profile/reset.py:63 msgid "Send reset password message" msgstr "发送重置密码邮件" -#: users/views/profile/reset.py:63 +#: users/views/profile/reset.py:64 msgid "Send reset password mail success, login your mail box and follow it " msgstr "" "发送重置邮件成功, 请登录邮箱查看, 按照提示操作 (如果没收到,请等待3-5分钟)" -#: users/views/profile/reset.py:76 -msgid "Reset password success" -msgstr "重置密码成功" - -#: users/views/profile/reset.py:77 +#: users/views/profile/reset.py:78 msgid "Reset password success, return to login page" msgstr "重置密码成功,返回到登录页面" -#: users/views/profile/reset.py:101 users/views/profile/reset.py:111 +#: users/views/profile/reset.py:102 users/views/profile/reset.py:112 msgid "Token invalid or expired" msgstr "Token错误或失效" @@ -3775,44 +3861,44 @@ msgstr "所有资产使用不同的随机密码" msgid "Password rules" msgstr "密码规则" -#: xpack/plugins/change_auth_plan/models.py:188 +#: xpack/plugins/change_auth_plan/models.py:187 msgid "Change auth plan snapshot" msgstr "改密计划快照" -#: xpack/plugins/change_auth_plan/models.py:203 -#: xpack/plugins/change_auth_plan/models.py:297 +#: xpack/plugins/change_auth_plan/models.py:202 +#: xpack/plugins/change_auth_plan/models.py:296 msgid "Change auth plan execution" msgstr "改密计划执行" -#: xpack/plugins/change_auth_plan/models.py:270 +#: xpack/plugins/change_auth_plan/models.py:269 msgid "Ready" msgstr "" -#: xpack/plugins/change_auth_plan/models.py:271 +#: xpack/plugins/change_auth_plan/models.py:270 msgid "Preflight check" msgstr "" -#: xpack/plugins/change_auth_plan/models.py:272 +#: xpack/plugins/change_auth_plan/models.py:271 msgid "Change auth" msgstr "" -#: xpack/plugins/change_auth_plan/models.py:273 +#: xpack/plugins/change_auth_plan/models.py:272 msgid "Verify auth" msgstr "" -#: xpack/plugins/change_auth_plan/models.py:274 +#: xpack/plugins/change_auth_plan/models.py:273 msgid "Keep auth" msgstr "" -#: xpack/plugins/change_auth_plan/models.py:275 +#: xpack/plugins/change_auth_plan/models.py:274 msgid "Finished" msgstr "结束" -#: xpack/plugins/change_auth_plan/models.py:301 +#: xpack/plugins/change_auth_plan/models.py:300 msgid "Step" msgstr "步骤" -#: xpack/plugins/change_auth_plan/models.py:318 +#: xpack/plugins/change_auth_plan/models.py:317 msgid "Change auth plan task" msgstr "改密计划任务" @@ -3848,79 +3934,95 @@ msgstr "无法将数据发送到远程" msgid "Cloud center" msgstr "云管中心" -#: xpack/plugins/cloud/models.py:29 +#: xpack/plugins/cloud/models.py:30 msgid "Available" msgstr "有效" -#: xpack/plugins/cloud/models.py:30 +#: xpack/plugins/cloud/models.py:31 msgid "Unavailable" msgstr "无效" -#: xpack/plugins/cloud/models.py:39 +#: xpack/plugins/cloud/models.py:40 msgid "Provider" msgstr "云服务商" -#: xpack/plugins/cloud/models.py:42 +#: xpack/plugins/cloud/models.py:43 msgid "Access key id" msgstr "" -#: xpack/plugins/cloud/models.py:46 +#: xpack/plugins/cloud/models.py:47 msgid "Access key secret" msgstr "" -#: xpack/plugins/cloud/models.py:64 +#: xpack/plugins/cloud/models.py:65 msgid "Cloud account" msgstr "云账号" -#: xpack/plugins/cloud/models.py:122 xpack/plugins/cloud/serializers.py:59 +#: xpack/plugins/cloud/models.py:120 +msgid "Instance name" +msgstr "实例名称" + +#: xpack/plugins/cloud/models.py:121 +msgid "Instance name and Partial IP" +msgstr "实例名称和部分IP" + +#: xpack/plugins/cloud/models.py:127 xpack/plugins/cloud/serializers.py:59 msgid "Regions" msgstr "地域" -#: xpack/plugins/cloud/models.py:125 +#: xpack/plugins/cloud/models.py:130 msgid "Instances" msgstr "实例" -#: xpack/plugins/cloud/models.py:137 xpack/plugins/cloud/serializers.py:86 +#: xpack/plugins/cloud/models.py:134 +msgid "Hostname strategy" +msgstr "主机名策略" + +#: xpack/plugins/cloud/models.py:146 xpack/plugins/cloud/serializers.py:87 msgid "Always update" msgstr "总是更新" -#: xpack/plugins/cloud/models.py:143 +#: xpack/plugins/cloud/models.py:152 msgid "Date last sync" msgstr "最后同步日期" -#: xpack/plugins/cloud/models.py:154 xpack/plugins/cloud/models.py:207 +#: xpack/plugins/cloud/models.py:163 xpack/plugins/cloud/models.py:216 msgid "Sync instance task" msgstr "同步实例任务" -#: xpack/plugins/cloud/models.py:217 xpack/plugins/cloud/models.py:272 +#: xpack/plugins/cloud/models.py:226 xpack/plugins/cloud/models.py:281 msgid "Date sync" msgstr "同步日期" -#: xpack/plugins/cloud/models.py:245 +#: xpack/plugins/cloud/models.py:254 msgid "Unsync" msgstr "未同步" -#: xpack/plugins/cloud/models.py:246 xpack/plugins/cloud/models.py:247 +#: xpack/plugins/cloud/models.py:255 +msgid "New Sync" +msgstr "新同步" + +#: xpack/plugins/cloud/models.py:256 msgid "Synced" msgstr "已同步" -#: xpack/plugins/cloud/models.py:248 +#: xpack/plugins/cloud/models.py:257 msgid "Released" msgstr "已释放" -#: xpack/plugins/cloud/models.py:253 +#: xpack/plugins/cloud/models.py:262 msgid "Sync task" msgstr "同步任务" -#: xpack/plugins/cloud/models.py:257 +#: xpack/plugins/cloud/models.py:266 msgid "Sync instance task history" msgstr "同步实例任务历史" -#: xpack/plugins/cloud/models.py:260 +#: xpack/plugins/cloud/models.py:269 msgid "Instance" msgstr "实例" -#: xpack/plugins/cloud/models.py:263 +#: xpack/plugins/cloud/models.py:272 msgid "Region" msgstr "地域" @@ -4004,7 +4106,7 @@ msgstr "执行次数" msgid "Instance count" msgstr "实例个数" -#: xpack/plugins/cloud/serializers.py:85 +#: xpack/plugins/cloud/serializers.py:86 #: xpack/plugins/gathered_user/serializers.py:20 msgid "Periodic display" msgstr "定时执行" @@ -4069,30 +4171,40 @@ msgstr "管理页面logo" msgid "Logo of logout page" msgstr "退出页面logo" -#: xpack/plugins/license/api.py:46 +#: xpack/plugins/license/api.py:37 msgid "License import successfully" msgstr "许可证导入成功" -#: xpack/plugins/license/api.py:47 +#: xpack/plugins/license/api.py:38 msgid "License is invalid" msgstr "无效的许可证" -#: xpack/plugins/license/meta.py:11 xpack/plugins/license/models.py:94 +#: xpack/plugins/license/meta.py:11 xpack/plugins/license/models.py:124 msgid "License" msgstr "许可证" -#: xpack/plugins/license/models.py:74 +#: xpack/plugins/license/models.py:71 msgid "Standard edition" msgstr "标准版" -#: xpack/plugins/license/models.py:76 +#: xpack/plugins/license/models.py:73 msgid "Enterprise edition" msgstr "企业版" -#: xpack/plugins/license/models.py:78 +#: xpack/plugins/license/models.py:75 msgid "Ultimate edition" msgstr "旗舰版" +#: xpack/plugins/license/models.py:77 +msgid "Community edition" +msgstr "社区版" + +#~ msgid "ungrouped" +#~ msgstr "未分组" + +#~ msgid "favorite" +#~ msgstr "收藏夹" + #~ msgid "Organization User" #~ msgstr "组织用户" @@ -5985,9 +6097,6 @@ msgstr "旗舰版" #~ msgid "selected" #~ msgstr "所选" -#~ msgid "not found" -#~ msgstr "没有发现" - #~ msgid "Log in frequently and try again later" #~ msgstr "登录频繁, 稍后重试" diff --git a/apps/users/utils.py b/apps/users/utils.py index 99bdb5902..be33f25ba 100644 --- a/apps/users/utils.py +++ b/apps/users/utils.py @@ -148,6 +148,9 @@ def send_reset_password_success_mail(request, user): 'ip_address': get_request_ip_or_data(request), 'browser': get_request_user_agent(request), } + if settings.DEBUG: + logger.debug(message) + send_mail_async.delay(subject, message, recipient_list, html_message=message)