perf: 优化用户创建邮件信息,支持部分标签

pull/7139/head
ibuler 2021-11-03 11:17:18 +08:00 committed by Jiangjie.Bai
parent d57f52ee24
commit bbe2678df3
3 changed files with 79 additions and 63 deletions

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: JumpServer 0.3.3\n" "Project-Id-Version: JumpServer 0.3.3\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-10-26 17:16+0800\n" "POT-Creation-Date: 2021-11-03 11:14+0800\n"
"PO-Revision-Date: 2021-05-20 10:54+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n"
"Last-Translator: ibuler <ibuler@qq.com>\n" "Last-Translator: ibuler <ibuler@qq.com>\n"
"Language-Team: JumpServer team<ibuler@qq.com>\n" "Language-Team: JumpServer team<ibuler@qq.com>\n"
@ -66,20 +66,20 @@ msgstr "激活中"
msgid "Comment" msgid "Comment"
msgstr "备注" msgstr "备注"
#: acls/models/login_acl.py:19 tickets/const.py:38 #: acls/models/login_acl.py:18 tickets/const.py:38
msgid "Reject" msgid "Reject"
msgstr "拒绝" msgstr "拒绝"
#: acls/models/login_acl.py:20 assets/models/cmd_filter.py:48 #: acls/models/login_acl.py:19 assets/models/cmd_filter.py:48
msgid "Allow" msgid "Allow"
msgstr "允许" msgstr "允许"
#: acls/models/login_acl.py:21 acls/models/login_acl.py:114 #: acls/models/login_acl.py:20 acls/models/login_acl.py:117
#: acls/models/login_asset_acl.py:17 tickets/const.py:9 #: acls/models/login_asset_acl.py:17 tickets/const.py:9
msgid "Login confirm" msgid "Login confirm"
msgstr "登录复核" msgstr "登录复核"
#: acls/models/login_acl.py:25 acls/models/login_asset_acl.py:20 #: acls/models/login_acl.py:24 acls/models/login_asset_acl.py:20
#: assets/models/label.py:15 audits/models.py:36 audits/models.py:56 #: assets/models/label.py:15 audits/models.py:36 audits/models.py:56
#: audits/models.py:74 audits/serializers.py:94 authentication/models.py:47 #: audits/models.py:74 audits/serializers.py:94 authentication/models.py:47
#: orgs/models.py:19 orgs/models.py:433 perms/models/base.py:45 #: orgs/models.py:19 orgs/models.py:433 perms/models/base.py:45
@ -96,12 +96,12 @@ msgstr "登录复核"
msgid "User" msgid "User"
msgstr "用户" msgstr "用户"
#: acls/models/login_acl.py:29 #: acls/models/login_acl.py:28
msgid "Rule" msgid "Rule"
msgstr "规则" msgstr "规则"
#: acls/models/login_acl.py:32 acls/models/login_asset_acl.py:26 #: acls/models/login_acl.py:31 acls/models/login_asset_acl.py:26
#: acls/serializers/login_acl.py:16 acls/serializers/login_asset_acl.py:75 #: acls/serializers/login_acl.py:17 acls/serializers/login_asset_acl.py:75
#: assets/models/cmd_filter.py:57 audits/models.py:57 #: assets/models/cmd_filter.py:57 audits/models.py:57
#: authentication/templates/authentication/_access_key_modal.html:34 #: authentication/templates/authentication/_access_key_modal.html:34
#: users/templates/users/_granted_assets.html:29 #: users/templates/users/_granted_assets.html:29
@ -111,12 +111,12 @@ msgstr "规则"
msgid "Action" msgid "Action"
msgstr "动作" msgstr "动作"
#: acls/models/login_acl.py:36 acls/models/login_asset_acl.py:32 #: acls/models/login_acl.py:35 acls/models/login_asset_acl.py:32
#: acls/serializers/login_acl.py:15 assets/models/cmd_filter.py:62 #: acls/serializers/login_acl.py:16 assets/models/cmd_filter.py:62
msgid "Reviewers" msgid "Reviewers"
msgstr "审批人" msgstr "审批人"
#: acls/models/login_acl.py:43 #: acls/models/login_acl.py:42
msgid "Login acl" msgid "Login acl"
msgstr "登录访问控制" msgstr "登录访问控制"
@ -149,11 +149,11 @@ msgstr "登录资产访问控制"
msgid "Login asset confirm" msgid "Login asset confirm"
msgstr "登录资产复核" msgstr "登录资产复核"
#: acls/serializers/login_acl.py:10 acls/serializers/login_asset_acl.py:12 #: acls/serializers/login_acl.py:11 acls/serializers/login_asset_acl.py:12
msgid "Format for comma-delimited string, with * indicating a match all. " msgid "Format for comma-delimited string, with * indicating a match all. "
msgstr "格式为逗号分隔的字符串, * 表示匹配所有. " msgstr "格式为逗号分隔的字符串, * 表示匹配所有. "
#: acls/serializers/login_acl.py:14 acls/serializers/login_asset_acl.py:17 #: acls/serializers/login_acl.py:15 acls/serializers/login_asset_acl.py:17
#: acls/serializers/login_asset_acl.py:51 #: acls/serializers/login_asset_acl.py:51
#: applications/serializers/attrs/application_type/chrome.py:20 #: applications/serializers/attrs/application_type/chrome.py:20
#: applications/serializers/attrs/application_type/custom.py:21 #: applications/serializers/attrs/application_type/custom.py:21
@ -1813,7 +1813,8 @@ msgid "Need MFA for view auth"
msgstr "需要多因子认证来查看账号信息" msgstr "需要多因子认证来查看账号信息"
#: authentication/templates/authentication/_mfa_confirm_modal.html:20 #: authentication/templates/authentication/_mfa_confirm_modal.html:20
#: templates/_modal.html:23 users/templates/users/user_password_verify.html:20 #: templates/_modal.html:23 templates/flash_message_standalone.html:34
#: users/templates/users/user_password_verify.html:20
msgid "Confirm" msgid "Confirm"
msgstr "确认" msgstr "确认"
@ -2606,7 +2607,7 @@ msgstr "组织 ({}) 的应用授权"
#: perms/serializers/application/permission.py:18 #: perms/serializers/application/permission.py:18
#: perms/serializers/application/permission.py:38 #: perms/serializers/application/permission.py:38
#: perms/serializers/asset/permission.py:42 #: perms/serializers/asset/permission.py:42
#: perms/serializers/asset/permission.py:68 users/serializers/user.py:78 #: perms/serializers/asset/permission.py:68 users/serializers/user.py:79
msgid "Is valid" msgid "Is valid"
msgstr "账户是否有效" msgstr "账户是否有效"
@ -2614,7 +2615,7 @@ msgstr "账户是否有效"
#: perms/serializers/application/permission.py:37 #: perms/serializers/application/permission.py:37
#: perms/serializers/asset/permission.py:43 #: perms/serializers/asset/permission.py:43
#: perms/serializers/asset/permission.py:67 users/serializers/user.py:28 #: perms/serializers/asset/permission.py:67 users/serializers/user.py:28
#: users/serializers/user.py:79 #: users/serializers/user.py:80
msgid "Is expired" msgid "Is expired"
msgstr "已过期" msgstr "已过期"
@ -3144,8 +3145,11 @@ msgid "Create user email content"
msgstr "邮件的内容" msgstr "邮件的内容"
#: settings/serializers/email.py:60 #: settings/serializers/email.py:60
msgid "Tips:When creating a user, send the content of the email" #, python-brace-format
msgstr "提示: 创建用户时,发送设置密码邮件的内容" msgid ""
"Tips: When creating a user, send the content of the email, support "
"{username} {name} {email} label"
msgstr "提示: 创建用户时,发送设置密码邮件的内容, 支持 {username} {name} {email} 标签"
#: settings/serializers/email.py:64 #: settings/serializers/email.py:64
msgid "Tips: Email signature (eg:jumpserver)" msgid "Tips: Email signature (eg:jumpserver)"
@ -3864,10 +3868,6 @@ msgstr "您确定删除吗?"
msgid "Cancel" msgid "Cancel"
msgstr "取消" msgstr "取消"
#: templates/flash_message_standalone.html:34
msgid "Go"
msgstr "立即"
#: templates/index.html:11 #: templates/index.html:11
msgid "Total users" msgid "Total users"
msgstr "用户总数" msgstr "用户总数"
@ -4014,22 +4014,28 @@ msgstr "前"
msgid "Login in " msgid "Login in "
msgstr "登录了" msgstr "登录了"
#: templates/resource_download.html:15 templates/resource_download.html:21 #: templates/resource_download.html:18 templates/resource_download.html:24
#: templates/resource_download.html:22 templates/resource_download.html:27 #: templates/resource_download.html:25 templates/resource_download.html:30
msgid "Client" msgid "Client"
msgstr "客户端" msgstr "客户端"
#: templates/resource_download.html:17 #: templates/resource_download.html:20
msgid "" msgid ""
"JumpServer Client, currently used to launch the client, now only support " "JumpServer Client, currently used to launch the client, now only support "
"launch RDP client, The SSH client will next" "launch RDP client, The SSH client will next"
msgstr "JumpServer 客户端,目前用来唤起 特定客户端程序 连接资产, 目前仅支持 RDP 客户端SSH、Telnet 会在未来支持" msgstr ""
"JumpServer 客户端,目前用来唤起 特定客户端程序 连接资产, 目前仅支持 RDP 客户"
"端SSH、Telnet 会在未来支持"
#: templates/resource_download.html:27 #: templates/resource_download.html:30
msgid "Microsoft"
msgstr ""
#: templates/resource_download.html:30
msgid "Official" msgid "Official"
msgstr "官方" msgstr "官方"
#: templates/resource_download.html:29 #: templates/resource_download.html:32
msgid "" msgid ""
"macOS needs to download the client to connect RDP asset, which comes with " "macOS needs to download the client to connect RDP asset, which comes with "
"Windows" "Windows"
@ -4704,8 +4710,8 @@ msgstr "批准的系统用户名称"
msgid "Permission named `{}` already exists" msgid "Permission named `{}` already exists"
msgstr "授权名称 `{}` 已存在" msgstr "授权名称 `{}` 已存在"
#: tickets/serializers/ticket/meta/ticket_type/apply_application.py:89 #: tickets/serializers/ticket/meta/ticket_type/apply_application.py:88
#: tickets/serializers/ticket/meta/ticket_type/apply_asset.py:72 #: tickets/serializers/ticket/meta/ticket_type/apply_asset.py:71
msgid "The expiration date should be greater than the start date" msgid "The expiration date should be greater than the start date"
msgstr "过期时间要大于开始时间" msgstr "过期时间要大于开始时间"
@ -4950,30 +4956,30 @@ msgstr "管理员"
msgid "Administrator is the super user of system" msgid "Administrator is the super user of system"
msgstr "Administrator是初始的超级管理员" msgstr "Administrator是初始的超级管理员"
#: users/notifications.py:48 #: users/notifications.py:55
#: users/templates/users/_msg_password_expire_reminder.html:17 #: users/templates/users/_msg_password_expire_reminder.html:17
#: users/templates/users/reset_password.html:5 #: users/templates/users/reset_password.html:5
#: users/templates/users/reset_password.html:6 #: users/templates/users/reset_password.html:6
msgid "Reset password" msgid "Reset password"
msgstr "重置密码" msgstr "重置密码"
#: users/notifications.py:78 users/views/profile/reset.py:127 #: users/notifications.py:85 users/views/profile/reset.py:127
msgid "Reset password success" msgid "Reset password success"
msgstr "重置密码成功" msgstr "重置密码成功"
#: users/notifications.py:104 #: users/notifications.py:111
msgid "Password is about expire" msgid "Password is about expire"
msgstr "密码即将过期" msgstr "密码即将过期"
#: users/notifications.py:132 #: users/notifications.py:139
msgid "Account is about expire" msgid "Account is about expire"
msgstr "账号即将过期" msgstr "账号即将过期"
#: users/notifications.py:154 #: users/notifications.py:161
msgid "Reset SSH Key" msgid "Reset SSH Key"
msgstr "重置 SSH 密钥" msgstr "重置 SSH 密钥"
#: users/notifications.py:175 #: users/notifications.py:182
msgid "Reset MFA" msgid "Reset MFA"
msgstr "重置 MFA" msgstr "重置 MFA"
@ -4981,7 +4987,7 @@ msgstr "重置 MFA"
msgid "The old password is incorrect" msgid "The old password is incorrect"
msgstr "旧密码错误" msgstr "旧密码错误"
#: users/serializers/profile.py:36 users/serializers/user.py:141 #: users/serializers/profile.py:36 users/serializers/user.py:142
msgid "Password does not match security rules" msgid "Password does not match security rules"
msgstr "密码不满足安全规则" msgstr "密码不满足安全规则"
@ -4993,7 +4999,7 @@ msgstr "新密码不能是最近 {} 次的密码"
msgid "The newly set password is inconsistent" msgid "The newly set password is inconsistent"
msgstr "两次密码不一致" msgstr "两次密码不一致"
#: users/serializers/profile.py:121 users/serializers/user.py:77 #: users/serializers/profile.py:121 users/serializers/user.py:78
msgid "Is first login" msgid "Is first login"
msgstr "首次登录" msgstr "首次登录"
@ -5031,51 +5037,51 @@ msgstr "是否可删除"
msgid "Can public key authentication" msgid "Can public key authentication"
msgstr "能否公钥认证" msgstr "能否公钥认证"
#: users/serializers/user.py:34 users/serializers/user.py:84 #: users/serializers/user.py:34 users/serializers/user.py:85
msgid "Organization role name" msgid "Organization role name"
msgstr "组织角色名称" msgstr "组织角色名称"
#: users/serializers/user.py:80 #: users/serializers/user.py:81
msgid "Avatar url" msgid "Avatar url"
msgstr "头像路径" msgstr "头像路径"
#: users/serializers/user.py:82 #: users/serializers/user.py:83
msgid "Groups name" msgid "Groups name"
msgstr "用户组名" msgstr "用户组名"
#: users/serializers/user.py:83 #: users/serializers/user.py:84
msgid "Source name" msgid "Source name"
msgstr "用户来源名" msgstr "用户来源名"
#: users/serializers/user.py:85 #: users/serializers/user.py:86
msgid "Super role name" msgid "Super role name"
msgstr "超级角色名称" msgstr "超级角色名称"
#: users/serializers/user.py:86 #: users/serializers/user.py:87
msgid "Total role name" msgid "Total role name"
msgstr "汇总角色名称" msgstr "汇总角色名称"
#: users/serializers/user.py:88 #: users/serializers/user.py:89
msgid "Is wecom bound" msgid "Is wecom bound"
msgstr "是否绑定了企业微信" msgstr "是否绑定了企业微信"
#: users/serializers/user.py:89 #: users/serializers/user.py:90
msgid "Is dingtalk bound" msgid "Is dingtalk bound"
msgstr "是否绑定了钉钉" msgstr "是否绑定了钉钉"
#: users/serializers/user.py:90 #: users/serializers/user.py:91
msgid "Is feishu bound" msgid "Is feishu bound"
msgstr "是否绑定了飞书" msgstr "是否绑定了飞书"
#: users/serializers/user.py:91 #: users/serializers/user.py:92
msgid "Is OTP bound" msgid "Is OTP bound"
msgstr "是否绑定了虚拟MFA" msgstr "是否绑定了虚拟MFA"
#: users/serializers/user.py:115 #: users/serializers/user.py:116
msgid "Role limit to {}" msgid "Role limit to {}"
msgstr "角色只能为 {}" msgstr "角色只能为 {}"
#: users/serializers/user.py:227 #: users/serializers/user.py:228
msgid "name not unique" msgid "name not unique"
msgstr "名称重复" msgstr "名称重复"
@ -5398,8 +5404,8 @@ msgstr "* 新密码不能是最近 {} 次的密码"
msgid "Reset password success, return to login page" msgid "Reset password success, return to login page"
msgstr "重置密码成功,返回到登录页面" msgstr "重置密码成功,返回到登录页面"
#: xpack/plugins/change_auth_plan/api/app.py:114 #: xpack/plugins/change_auth_plan/api/app.py:113
#: xpack/plugins/change_auth_plan/api/asset.py:101 #: xpack/plugins/change_auth_plan/api/asset.py:100
msgid "The parameter 'action' must be [{}]" msgid "The parameter 'action' must be [{}]"
msgstr "参数 'action' 必须是 [{}]" msgstr "参数 'action' 必须是 [{}]"
@ -5530,15 +5536,15 @@ msgstr "* 请输入正确的密码长度"
msgid "* Password length range 6-30 bits" msgid "* Password length range 6-30 bits"
msgstr "* 密码长度范围 6-30 位" msgstr "* 密码长度范围 6-30 位"
#: xpack/plugins/change_auth_plan/task_handlers/base/handler.py:249 #: xpack/plugins/change_auth_plan/task_handlers/base/handler.py:248
msgid "Invalid/incorrect password" msgid "Invalid/incorrect password"
msgstr "无效/错误 密码" msgstr "无效/错误 密码"
#: xpack/plugins/change_auth_plan/task_handlers/base/handler.py:251 #: xpack/plugins/change_auth_plan/task_handlers/base/handler.py:250
msgid "Failed to connect to the host" msgid "Failed to connect to the host"
msgstr "连接主机失败" msgstr "连接主机失败"
#: xpack/plugins/change_auth_plan/task_handlers/base/handler.py:253 #: xpack/plugins/change_auth_plan/task_handlers/base/handler.py:252
msgid "Data could not be sent to remote" msgid "Data could not be sent to remote"
msgstr "无法将数据发送到远程" msgstr "无法将数据发送到远程"
@ -5896,7 +5902,7 @@ msgstr "执行次数"
msgid "Instance count" msgid "Instance count"
msgstr "实例个数" msgstr "实例个数"
#: xpack/plugins/cloud/utils.py:68 #: xpack/plugins/cloud/utils.py:65
msgid "Account unavailable" msgid "Account unavailable"
msgstr "账户无效" msgstr "账户无效"
@ -5984,6 +5990,9 @@ msgstr "旗舰版"
msgid "Community edition" msgid "Community edition"
msgstr "社区版" msgstr "社区版"
#~ msgid "Go"
#~ msgstr "立即"
#, python-brace-format #, python-brace-format
#~ msgid "Hello {name}" #~ msgid "Hello {name}"
#~ msgstr "你好 {name}" #~ msgstr "你好 {name}"

View File

@ -57,7 +57,7 @@ class EmailContentSettingSerializer(serializers.Serializer):
EMAIL_CUSTOM_USER_CREATED_BODY = serializers.CharField( EMAIL_CUSTOM_USER_CREATED_BODY = serializers.CharField(
max_length=4096, allow_blank=True, required=False, max_length=4096, allow_blank=True, required=False,
label=_('Create user email content'), label=_('Create user email content'),
help_text=_('Tips:When creating a user, send the content of the email') help_text=_('Tips: When creating a user, send the content of the email, support {username} {name} {email} label')
) )
EMAIL_CUSTOM_USER_CREATED_SIGNATURE = serializers.CharField( EMAIL_CUSTOM_USER_CREATED_SIGNATURE = serializers.CharField(
max_length=512, allow_blank=True, required=False, label=_('Signature'), max_length=512, allow_blank=True, required=False, label=_('Signature'),

View File

@ -1,4 +1,5 @@
from urllib.parse import urljoin from urllib.parse import urljoin
from collections import defaultdict
from django.utils import timezone from django.utils import timezone
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
@ -13,13 +14,19 @@ class UserCreatedMsg(UserMessage):
def get_html_msg(self) -> dict: def get_html_msg(self) -> dict:
user = self.user user = self.user
subject = str(settings.EMAIL_CUSTOM_USER_CREATED_SUBJECT) mail_context = {
honorific = str(settings.EMAIL_CUSTOM_USER_CREATED_HONORIFIC) 'subject': str(settings.EMAIL_CUSTOM_USER_CREATED_SUBJECT),
content = str(settings.EMAIL_CUSTOM_USER_CREATED_BODY) 'honorific': str(settings.EMAIL_CUSTOM_USER_CREATED_HONORIFIC),
'content': str(settings.EMAIL_CUSTOM_USER_CREATED_BODY)
}
user_info = {'username': user.username, 'name': user.name, 'email': user.email}
# 转换成 defaultdict否则 format 时会报 KeyError
user_info = defaultdict(str, **user_info)
mail_context = {k: v.format_map(user_info) for k, v in mail_context.items()}
context = { context = {
'honorific': honorific, **mail_context,
'content': content,
'user': user, 'user': user,
'rest_password_url': reverse('authentication:reset-password', external=True), 'rest_password_url': reverse('authentication:reset-password', external=True),
'rest_password_token': user.generate_reset_token(), 'rest_password_token': user.generate_reset_token(),
@ -28,7 +35,7 @@ class UserCreatedMsg(UserMessage):
} }
message = render_to_string('users/_msg_user_created.html', context) message = render_to_string('users/_msg_user_created.html', context)
return { return {
'subject': subject, 'subject': mail_context['subject'],
'message': message 'message': message
} }