perf: Support watermark customization

pull/15352/head^2
wangruidong 2025-04-28 16:05:58 +08:00 committed by w940853815
parent e2830ecdd6
commit 5577e39f21
7 changed files with 188 additions and 83 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: 2025-05-07 15:06+0800\n" "POT-Creation-Date: 2025-05-07 16:40+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"
@ -136,6 +136,8 @@ msgstr ">>> 开始执行测试网关账号可连接性任务"
#: users/templates/users/_msg_user_created.html:13 #: users/templates/users/_msg_user_created.html:13
#: users/templates/users/user_password_verify.html:18 #: users/templates/users/user_password_verify.html:18
#: xpack/plugins/cloud/serializers/account_attrs.py:27 #: xpack/plugins/cloud/serializers/account_attrs.py:27
#: xpack/plugins/cloud/serializers/account_attrs.py:89
#: xpack/plugins/cloud/serializers/account_attrs.py:96
msgid "Password" msgid "Password"
msgstr "密码" msgstr "密码"
@ -746,7 +748,7 @@ msgstr "状态"
#: accounts/serializers/account/account.py:278 #: accounts/serializers/account/account.py:278
#: accounts/templates/accounts/change_secret_failed_info.html:13 #: accounts/templates/accounts/change_secret_failed_info.html:13
#: assets/const/automation.py:9 #: assets/const/automation.py:9
#: authentication/templates/authentication/passkey.html:173 #: authentication/templates/authentication/passkey.html:174
#: authentication/views/base.py:42 authentication/views/base.py:43 #: authentication/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:67 #: authentication/views/base.py:44 common/const/choices.py:67
#: settings/templates/ldap/_msg_import_ldap_user.html:26 #: settings/templates/ldap/_msg_import_ldap_user.html:26
@ -855,6 +857,8 @@ msgstr "重复密码"
#: users/serializers/profile.py:186 #: users/serializers/profile.py:186
#: users/templates/users/_msg_user_created.html:12 #: users/templates/users/_msg_user_created.html:12
#: xpack/plugins/cloud/serializers/account_attrs.py:25 #: xpack/plugins/cloud/serializers/account_attrs.py:25
#: xpack/plugins/cloud/serializers/account_attrs.py:87
#: xpack/plugins/cloud/serializers/account_attrs.py:94
msgid "Username" msgid "Username"
msgstr "用户名" msgstr "用户名"
@ -1905,8 +1909,8 @@ msgid ""
"10.1.1.1-10.1.1.20, 2001:db8:2de::e13, 2001:db8:1a:1110::/64 (Domain name " "10.1.1.1-10.1.1.20, 2001:db8:2de::e13, 2001:db8:1a:1110::/64 (Domain name "
"support)" "support)"
msgstr "" msgstr ""
"* 表示匹配所有。例如: 192.168.10.1, 192.168.1.0/24, 10.1.1.1-10.1.1.20, 2001:" "* 表示匹配所有。例如: 192.168.10.1, 192.168.1.0/24, 10.1.1.1-10.1.1.20, "
"db8:2de::e13, 2001:db8:1a:1110::/64 (支持网域)" "2001:db8:2de::e13, 2001:db8:1a:1110::/64 (支持网域)"
#: acls/serializers/base.py:41 assets/serializers/asset/host.py:19 #: acls/serializers/base.py:41 assets/serializers/asset/host.py:19
msgid "IP/Host" msgid "IP/Host"
@ -1934,8 +1938,8 @@ msgid ""
"With * indicating a match all. Such as: 192.168.10.1, 192.168.1.0/24, " "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 " "10.1.1.1-10.1.1.20, 2001:db8:2de::e13, 2001:db8:1a:1110::/64 "
msgstr "" msgstr ""
"* 表示匹配所有。例如: 192.168.10.1, 192.168.1.0/24, 10.1.1.1-10.1.1.20, 2001:" "* 表示匹配所有。例如: 192.168.10.1, 192.168.1.0/24, 10.1.1.1-10.1.1.20, "
"db8:2de::e13, 2001:db8:1a:1110::/64" "2001:db8:2de::e13, 2001:db8:1a:1110::/64"
#: acls/serializers/rules/rules.py:33 #: acls/serializers/rules/rules.py:33
#: authentication/templates/authentication/_msg_oauth_bind.html:12 #: authentication/templates/authentication/_msg_oauth_bind.html:12
@ -2183,7 +2187,8 @@ msgstr "云服务"
msgid "Web" msgid "Web"
msgstr "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" msgid "Custom type"
msgstr "自定义类型" msgstr "自定义类型"
@ -2290,7 +2295,7 @@ msgid "Any"
msgstr "任意" msgstr "任意"
#: assets/const/protocol.py:88 rbac/tree.py:62 #: assets/const/protocol.py:88 rbac/tree.py:62
#: settings/serializers/security.py:245 #: settings/serializers/security.py:266
msgid "Security" msgid "Security"
msgstr "安全" msgstr "安全"
@ -2888,7 +2893,7 @@ msgstr "端口超出范围 (0-65535)"
msgid "Protocol is required: {}" msgid "Protocol is required: {}"
msgstr "协议是必填的: {}" msgstr "协议是必填的: {}"
#: assets/serializers/asset/common.py:353 #: assets/serializers/asset/common.py:353 labels/api.py:107
msgid "Invalid data" msgid "Invalid data"
msgstr "无效的数据" msgstr "无效的数据"
@ -3557,29 +3562,29 @@ msgid "Auth Token"
msgstr "认证令牌" msgstr "认证令牌"
#: audits/signal_handlers/login_log.py:37 authentication/notifications.py:73 #: audits/signal_handlers/login_log.py:37 authentication/notifications.py:73
#: authentication/views/login.py:79 notifications/backends/__init__.py:11 #: authentication/utils.py:114 notifications/backends/__init__.py:11
#: settings/serializers/auth/wecom.py:11 settings/serializers/auth/wecom.py:16 #: settings/serializers/auth/wecom.py:11 settings/serializers/auth/wecom.py:16
#: users/models/user/__init__.py:130 users/models/user/_source.py:19 #: users/models/user/__init__.py:130 users/models/user/_source.py:19
msgid "WeCom" msgid "WeCom"
msgstr "企业微信" msgstr "企业微信"
#: audits/signal_handlers/login_log.py:38 authentication/views/feishu.py:97 #: audits/signal_handlers/login_log.py:38 authentication/utils.py:126
#: authentication/views/login.py:91 notifications/backends/__init__.py:14 #: authentication/views/feishu.py:97 notifications/backends/__init__.py:14
#: settings/serializers/auth/feishu.py:12 #: settings/serializers/auth/feishu.py:12
#: settings/serializers/auth/feishu.py:14 users/models/user/__init__.py:136 #: settings/serializers/auth/feishu.py:14 users/models/user/__init__.py:136
#: users/models/user/_source.py:21 #: users/models/user/_source.py:21
msgid "FeiShu" msgid "FeiShu"
msgstr "飞书" msgstr "飞书"
#: audits/signal_handlers/login_log.py:40 authentication/views/login.py:103 #: audits/signal_handlers/login_log.py:40 authentication/utils.py:138
#: authentication/views/slack.py:79 notifications/backends/__init__.py:16 #: authentication/views/slack.py:79 notifications/backends/__init__.py:16
#: settings/serializers/auth/slack.py:11 settings/serializers/auth/slack.py:13 #: settings/serializers/auth/slack.py:11 settings/serializers/auth/slack.py:13
#: users/models/user/__init__.py:142 users/models/user/_source.py:23 #: users/models/user/__init__.py:142 users/models/user/_source.py:23
msgid "Slack" msgid "Slack"
msgstr "Slack" msgstr "Slack"
#: audits/signal_handlers/login_log.py:41 authentication/views/dingtalk.py:151 #: audits/signal_handlers/login_log.py:41 authentication/utils.py:120
#: authentication/views/login.py:85 notifications/backends/__init__.py:12 #: authentication/views/dingtalk.py:151 notifications/backends/__init__.py:12
#: settings/serializers/auth/dingtalk.py:11 users/models/user/__init__.py:133 #: settings/serializers/auth/dingtalk.py:11 users/models/user/__init__.py:133
#: users/models/user/_source.py:20 #: users/models/user/_source.py:20
msgid "DingTalk" msgid "DingTalk"
@ -3590,8 +3595,8 @@ msgstr "钉钉"
msgid "Temporary token" msgid "Temporary token"
msgstr "临时密码" msgstr "临时密码"
#: audits/signal_handlers/login_log.py:43 authentication/views/login.py:109 #: audits/signal_handlers/login_log.py:43 authentication/const.py:37
#: settings/serializers/auth/passkey.py:8 #: authentication/utils.py:144 settings/serializers/auth/passkey.py:8
#: settings/serializers/auth/passkey.py:11 #: settings/serializers/auth/passkey.py:11
msgid "Passkey" msgid "Passkey"
msgstr "Passkey" msgstr "Passkey"
@ -3675,8 +3680,8 @@ msgstr "ACL 动作是人脸在线"
msgid "No available face feature" msgid "No available face feature"
msgstr "没有可用的人脸特征" msgstr "没有可用的人脸特征"
#: authentication/api/face.py:100 authentication/mfa/face.py:21 #: authentication/api/face.py:100 authentication/mfa/face.py:22
#: authentication/mfa/face.py:23 users/views/profile/face.py:72 #: authentication/mfa/face.py:24 users/views/profile/face.py:72
msgid "Facial comparison failed" msgid "Facial comparison failed"
msgstr "人脸比对失败" msgstr "人脸比对失败"
@ -3743,11 +3748,11 @@ msgstr "OpenID 错误"
msgid "Please check if a user with the same username or email already exists" msgid "Please check if a user with the same username or email already exists"
msgstr "请检查是否已经存在相同用户名或邮箱的用户" msgstr "请检查是否已经存在相同用户名或邮箱的用户"
#: authentication/backends/passkey/api.py:37 #: authentication/backends/passkey/api.py:40
msgid "Only register passkey for local user" msgid "Only register passkey for local user"
msgstr "仅为本地用户注册密钥" msgstr "仅为本地用户注册密钥"
#: authentication/backends/passkey/api.py:65 #: authentication/backends/passkey/api.py:71
msgid "Auth failed" msgid "Auth failed"
msgstr "认证失败" msgstr "认证失败"
@ -3797,7 +3802,7 @@ msgstr "人脸识别"
msgid "Radius" msgid "Radius"
msgstr "Radius" msgstr "Radius"
#: authentication/const.py:37 #: authentication/const.py:38
msgid "Custom" msgid "Custom"
msgstr "自定义" msgstr "自定义"
@ -3997,7 +4002,7 @@ msgstr "动态码"
msgid "Please input security code" msgid "Please input security code"
msgstr "请输入动态安全码" msgstr "请输入动态安全码"
#: authentication/mfa/base.py:27 #: authentication/mfa/base.py:28
msgid "" msgid ""
"The two-factor code you entered has either already been used or has expired. " "The two-factor code you entered has either already been used or has expired. "
"Please request a new one." "Please request a new one."
@ -4023,11 +4028,11 @@ msgstr "邮件验证码校验失败"
msgid "Email verification code" msgid "Email verification code"
msgstr "邮件验证码" msgstr "邮件验证码"
#: authentication/mfa/face.py:55 #: authentication/mfa/face.py:56
msgid "Bind face to enable" msgid "Bind face to enable"
msgstr "绑定人脸特征以启用" msgstr "绑定人脸特征以启用"
#: authentication/mfa/face.py:59 #: authentication/mfa/face.py:60
msgid "Unbind face to disable" msgid "Unbind face to disable"
msgstr "解绑人脸特征以禁用" msgstr "解绑人脸特征以禁用"
@ -4043,6 +4048,10 @@ msgstr "虚拟 MFA 验证码"
msgid "Virtual OTP based MFA" msgid "Virtual OTP based MFA"
msgstr "虚拟 MFA(OTP)" msgstr "虚拟 MFA(OTP)"
#: authentication/mfa/passkey.py:42 authentication/mfa/passkey.py:46
msgid "Using passkey as MFA"
msgstr ""
#: authentication/mfa/radius.py:8 #: authentication/mfa/radius.py:8
msgid "Radius verify code invalid" msgid "Radius verify code invalid"
msgstr "Radius 校验失败" msgstr "Radius 校验失败"
@ -4541,17 +4550,17 @@ msgstr "返回"
msgid "Copy success" msgid "Copy success"
msgstr "复制成功" msgstr "复制成功"
#: authentication/templates/authentication/passkey.html:162 #: authentication/templates/authentication/passkey.html:163
msgid "" msgid ""
"This page is not served over HTTPS. Please use HTTPS to ensure security of " "This page is not served over HTTPS. Please use HTTPS to ensure security of "
"your credentials." "your credentials."
msgstr "本页面未使用 HTTPS 协议,请使用 HTTPS 协议以确保您的凭据安全。" msgstr "本页面未使用 HTTPS 协议,请使用 HTTPS 协议以确保您的凭据安全。"
#: authentication/templates/authentication/passkey.html:173 #: authentication/templates/authentication/passkey.html:174
msgid "Do you want to retry ?" msgid "Do you want to retry ?"
msgstr "是否重试 " msgstr "是否重试 "
#: authentication/utils.py:24 common/utils/ip/geoip/utils.py:24 #: authentication/utils.py:27 common/utils/ip/geoip/utils.py:24
#: xpack/plugins/cloud/const.py:33 #: xpack/plugins/cloud/const.py:33
msgid "LAN" msgid "LAN"
msgstr "局域网" msgstr "局域网"
@ -4636,23 +4645,23 @@ msgstr "Lark 已经绑定"
msgid "Failed to get user from Lark" msgid "Failed to get user from Lark"
msgstr "从 Lark 获取用户失败" msgstr "从 Lark 获取用户失败"
#: authentication/views/login.py:219 #: authentication/views/login.py:163
msgid "Redirecting" msgid "Redirecting"
msgstr "跳转中" msgstr "跳转中"
#: authentication/views/login.py:220 #: authentication/views/login.py:164
msgid "Redirecting to {} authentication" msgid "Redirecting to {} authentication"
msgstr "正在跳转到 {} 认证" msgstr "正在跳转到 {} 认证"
#: authentication/views/login.py:247 #: authentication/views/login.py:191
msgid "Login timeout, please try again." msgid "Login timeout, please try again."
msgstr "登录超时,请重新登录" msgstr "登录超时,请重新登录"
#: authentication/views/login.py:292 #: authentication/views/login.py:236
msgid "User email already exists ({})" msgid "User email already exists ({})"
msgstr "用户邮箱已存在 ({})" msgstr "用户邮箱已存在 ({})"
#: authentication/views/login.py:370 #: authentication/views/login.py:314
msgid "" msgid ""
"Wait for <b>{}</b> confirm, You also can copy link to her/him <br/>\n" "Wait for <b>{}</b> confirm, You also can copy link to her/him <br/>\n"
" Don't close this page" " Don't close this page"
@ -4660,15 +4669,15 @@ msgstr ""
"等待 <b>{}</b> 确认, 你也可以复制链接发给他/她 <br/>\n" "等待 <b>{}</b> 确认, 你也可以复制链接发给他/她 <br/>\n"
" 不要关闭本页面" " 不要关闭本页面"
#: authentication/views/login.py:375 #: authentication/views/login.py:319
msgid "No ticket found" msgid "No ticket found"
msgstr "没有发现工单" msgstr "没有发现工单"
#: authentication/views/login.py:411 #: authentication/views/login.py:355
msgid "Logout success" msgid "Logout success"
msgstr "退出登录成功" msgstr "退出登录成功"
#: authentication/views/login.py:412 #: authentication/views/login.py:356
msgid "Logout success, return login page" msgid "Logout success, return login page"
msgstr "退出登录成功,返回到登录页面" msgstr "退出登录成功,返回到登录页面"
@ -4763,7 +4772,7 @@ msgstr "企业专业版"
msgid "Ultimate edition" msgid "Ultimate edition"
msgstr "企业旗舰版" msgstr "企业旗舰版"
#: common/const/common.py:5 xpack/plugins/cloud/manager.py:454 #: common/const/common.py:5 xpack/plugins/cloud/manager.py:450
#, python-format #, python-format
msgid "%(name)s was created successfully" msgid "%(name)s was created successfully"
msgstr "%(name)s 创建成功" msgstr "%(name)s 创建成功"
@ -5037,6 +5046,10 @@ msgstr "自定义短信文件无效"
msgid "SMS sending failed[%s]: %s" msgid "SMS sending failed[%s]: %s"
msgstr "短信发送失败[%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 #: common/sdk/sms/endpoint.py:16
msgid "Alibaba cloud" msgid "Alibaba cloud"
msgstr "阿里云" msgstr "阿里云"
@ -5081,10 +5094,6 @@ msgstr "请在 {} 秒后发送"
msgid "Children" msgid "Children"
msgstr "节点" msgstr "节点"
#: common/serializers/common.py:98
msgid "File"
msgstr "文件"
#: common/serializers/fields.py:139 #: common/serializers/fields.py:139
msgid "Invalid data type" msgid "Invalid data type"
msgstr "无效的数据" msgstr "无效的数据"
@ -5206,6 +5215,10 @@ msgstr "你的账号已创建成功"
msgid "JumpServer - An open-source PAM" msgid "JumpServer - An open-source PAM"
msgstr "JumpServer 开源堡垒机" msgstr "JumpServer 开源堡垒机"
#: jumpserver/context_processor.py:28
msgid "FIT2CLOUD"
msgstr ""
#: jumpserver/views/celery_flower.py:22 #: jumpserver/views/celery_flower.py:22
msgid "<h1>Flower service unavailable, check it</h1>" msgid "<h1>Flower service unavailable, check it</h1>"
msgstr "Flower 服务不可用,请检查" msgstr "Flower 服务不可用,请检查"
@ -5237,7 +5250,7 @@ msgstr ""
msgid "App Labels" msgid "App Labels"
msgstr "标签管理" msgstr "标签管理"
#: labels/models.py:15 #: labels/models.py:15 settings/serializers/security.py:205
msgid "Color" msgid "Color"
msgstr "颜色" msgstr "颜色"
@ -7211,7 +7224,7 @@ msgstr "租户 ID"
#: settings/serializers/feature.py:110 terminal/serializers/storage.py:68 #: settings/serializers/feature.py:110 terminal/serializers/storage.py:68
#: xpack/plugins/cloud/manager.py:119 xpack/plugins/cloud/manager.py:124 #: xpack/plugins/cloud/manager.py:119 xpack/plugins/cloud/manager.py:124
#: xpack/plugins/cloud/models.py:292 #: xpack/plugins/cloud/manager.py:161 xpack/plugins/cloud/models.py:292
msgid "Region" msgid "Region"
msgstr "地域" msgstr "地域"
@ -7622,63 +7635,88 @@ msgstr "每天检测一次,超过预设时间的用户自动禁用"
msgid "Watermark" msgid "Watermark"
msgstr "开启水印" msgstr "开启水印"
#: settings/serializers/security.py:200 #: settings/serializers/security.py:199
msgid "Watermark session content"
msgstr "会话水印自定义内容"
#: settings/serializers/security.py:202
msgid "Watermark console content"
msgstr "管理页面水印自定义内容"
#: settings/serializers/security.py:208
msgid "Watermark font size"
msgstr "字体字号"
#: settings/serializers/security.py:211
msgid "Watermark height"
msgstr "单个水印高度"
#: settings/serializers/security.py:214
msgid "Watermark width"
msgstr "单个水印宽度"
#: settings/serializers/security.py:217
msgid "Watermark rotate"
msgstr "水印旋转角度"
#: settings/serializers/security.py:221
msgid "Max idle time (minute)" msgid "Max idle time (minute)"
msgstr "连接最大空闲时间 (分)" msgstr "连接最大空闲时间 (分)"
#: settings/serializers/security.py:201 #: settings/serializers/security.py:222
msgid "If idle time more than it, disconnect connection." msgid "If idle time more than it, disconnect connection."
msgstr "提示:如果超过该配置没有操作,连接会被断开" msgstr "提示:如果超过该配置没有操作,连接会被断开"
#: settings/serializers/security.py:204 #: settings/serializers/security.py:225
msgid "Session expire at browser closed" msgid "Session expire at browser closed"
msgstr "会话在浏览器关闭时过期" msgstr "会话在浏览器关闭时过期"
#: settings/serializers/security.py:205 #: settings/serializers/security.py:226
msgid "Whether to expire the session when the user closes their browser." msgid "Whether to expire the session when the user closes their browser."
msgstr "当用户关闭浏览器时是否使会话过期。" msgstr "当用户关闭浏览器时是否使会话过期。"
#: settings/serializers/security.py:210 #: settings/serializers/security.py:231
msgid "Allow users to view asset session information" msgid "Allow users to view asset session information"
msgstr "允许用户查看资产在线会话信息" msgstr "允许用户查看资产在线会话信息"
#: settings/serializers/security.py:212 #: settings/serializers/security.py:233
msgid "" msgid ""
"When a user connects to an asset, the account selection popup displays the " "When a user connects to an asset, the account selection popup displays the "
"number of active sessions for the current asset (RDP protocol only)." "number of active sessions for the current asset (RDP protocol only)."
msgstr "" msgstr ""
"当用户连接资产时,账号选择弹窗中显示当前资产的在线会话数量(仅 rdp 协议)" "当用户连接资产时,账号选择弹窗中显示当前资产的在线会话数量(仅 rdp 协议)"
#: settings/serializers/security.py:218 #: settings/serializers/security.py:239
msgid "Max online time (hour)" msgid "Max online time (hour)"
msgstr "会话连接最大时间 (时)" msgstr "会话连接最大时间 (时)"
#: settings/serializers/security.py:219 #: settings/serializers/security.py:240
msgid "If session connection time more than it, disconnect connection." msgid "If session connection time more than it, disconnect connection."
msgstr "提示:如果会话连接超过该配置,连接会被断开" msgstr "提示:如果会话连接超过该配置,连接会被断开"
#: settings/serializers/security.py:222 #: settings/serializers/security.py:243
msgid "Remember manual auth" msgid "Remember manual auth"
msgstr "保存手动输入密码" msgstr "保存手动输入密码"
#: settings/serializers/security.py:225 #: settings/serializers/security.py:246
#: terminal/templates/terminal/_msg_session_sharing.html:10 #: terminal/templates/terminal/_msg_session_sharing.html:10
msgid "Session share" msgid "Session share"
msgstr "会话分享" msgstr "会话分享"
#: settings/serializers/security.py:226 #: settings/serializers/security.py:247
msgid "Enabled, Allows user active session to be shared with other users" msgid "Enabled, Allows user active session to be shared with other users"
msgstr "开启后允许用户分享已连接的资产会话给他人,协同工作" msgstr "开启后允许用户分享已连接的资产会话给他人,协同工作"
#: settings/serializers/security.py:232 #: settings/serializers/security.py:253
msgid "Insecure command alert" msgid "Insecure command alert"
msgstr "危险命令告警" msgstr "危险命令告警"
#: settings/serializers/security.py:235 #: settings/serializers/security.py:256
msgid "Email recipient" msgid "Email recipient"
msgstr "邮件收件人" msgstr "邮件收件人"
#: settings/serializers/security.py:236 #: settings/serializers/security.py:257
msgid "Multiple user using , split" msgid "Multiple user using , split"
msgstr "多个用户,使用 , 分割" msgstr "多个用户,使用 , 分割"
@ -8043,17 +8081,17 @@ msgstr ""
"您的SSH密钥没有设置或已失效请点击 <a href=\"%(user_pubkey_update)s\"> 链接 " "您的SSH密钥没有设置或已失效请点击 <a href=\"%(user_pubkey_update)s\"> 链接 "
"</a> 更新" "</a> 更新"
#: templates/_mfa_login_field.html:31 #: templates/_mfa_login_field.html:29
#: users/templates/users/forgot_password.html:101 #: users/templates/users/forgot_password.html:101
msgid "Send" msgid "Send"
msgstr "发送" msgstr "发送"
#: templates/_mfa_login_field.html:110 #: templates/_mfa_login_field.html:108
#: users/templates/users/forgot_password.html:176 #: users/templates/users/forgot_password.html:176
msgid "Wait: " msgid "Wait: "
msgstr "等待:" msgstr "等待:"
#: templates/_mfa_login_field.html:120 #: templates/_mfa_login_field.html:118
#: users/templates/users/forgot_password.html:192 #: users/templates/users/forgot_password.html:192
msgid "The verification code has been sent" msgid "The verification code has been sent"
msgstr "验证码已发送" msgstr "验证码已发送"
@ -8166,7 +8204,7 @@ msgstr "会话不存在: {}"
msgid "Session is finished or the protocol not supported" msgid "Session is finished or the protocol not supported"
msgstr "会话已经完成或协议不支持" msgstr "会话已经完成或协议不支持"
#: terminal/api/session/session.py:345 #: terminal/api/session/session.py:345 tickets/api/ticket.py:140
msgid "User does not have permission" msgid "User does not have permission"
msgstr "用户没有权限" msgstr "用户没有权限"
@ -8714,9 +8752,9 @@ msgid ""
"days. <a href=\"https://learn.microsoft.com/en-us/windows-server/remote/" "days. <a href=\"https://learn.microsoft.com/en-us/windows-server/remote/"
"remote-desktop-services/rds-client-access-license\">Detail</a>" "remote-desktop-services/rds-client-access-license\">Detail</a>"
msgstr "" msgstr ""
"如果不存在RDS 将处于试用模式,试用期为 120 天。<a href='https://learn." "如果不存在RDS 将处于试用模式,试用期为 120 天。<a href='https://"
"microsoft.com/en-us/windows-server/remote/remote-desktop-services/rds-client-" "learn.microsoft.com/en-us/windows-server/remote/remote-desktop-services/rds-"
"access-license'>详情</a>" "client-access-license'>详情</a>"
#: terminal/serializers/applet_host.py:55 #: terminal/serializers/applet_host.py:55
msgid "RDS License Server" msgid "RDS License Server"
@ -8934,8 +8972,8 @@ msgid ""
"If there are multiple hosts, use a comma (,) to separate them. <br>(For " "If there are multiple hosts, use a comma (,) to separate them. <br>(For "
"example: http://www.jumpserver.a.com:9100, http://www.jumpserver.b.com:9100)" "example: http://www.jumpserver.a.com:9100, http://www.jumpserver.b.com:9100)"
msgstr "" msgstr ""
"如果有多个主机,请用逗号 (,) 分隔它们。<br>例如http://www.jumpserver.a." "如果有多个主机,请用逗号 (,) 分隔它们。<br>例如http://"
"com:9100http://www.jumpserver.b.com:9100" "www.jumpserver.a.com:9100http://www.jumpserver.b.com:9100"
#: terminal/serializers/storage.py:199 #: terminal/serializers/storage.py:199
msgid "Index by date" msgid "Index by date"
@ -10533,59 +10571,63 @@ msgstr "同步地区"
msgid "Get instances of region \"%s\" error, error: %s" msgid "Get instances of region \"%s\" error, error: %s"
msgstr "获取区域 \"%s\" 的实例错误,错误:%s" msgstr "获取区域 \"%s\" 的实例错误,错误:%s"
#: xpack/plugins/cloud/manager.py:161 xpack/plugins/cloud/models.py:289
msgid "Instance"
msgstr "实例"
#: xpack/plugins/cloud/manager.py:187 #: xpack/plugins/cloud/manager.py:187
#, python-format #, python-format
msgid "Failed to synchronize the instance \"%s\"" msgid "Failed to synchronize the instance \"%s\""
msgstr "无法同步实例 %s" msgstr "无法同步实例 %s"
#: xpack/plugins/cloud/manager.py:379 #: xpack/plugins/cloud/manager.py:378
#, python-format #, python-format
msgid "" msgid ""
"The updated platform of asset \"%s\" is inconsistent with the original " "The updated platform of asset \"%s\" is inconsistent with the original "
"platform type. Skip platform and protocol updates" "platform type. Skip platform and protocol updates"
msgstr "资产 \"%s\" 的更新平台与原平台类型不一致。跳过平台和协议更新" msgstr "资产 \"%s\" 的更新平台与原平台类型不一致。跳过平台和协议更新"
#: xpack/plugins/cloud/manager.py:436 #: xpack/plugins/cloud/manager.py:432
#, python-format #, python-format
msgid "The asset \"%s\" already exists" msgid "The asset \"%s\" already exists"
msgstr "资产 \"%s\" 已存在" msgstr "资产 \"%s\" 已存在"
#: xpack/plugins/cloud/manager.py:438 #: xpack/plugins/cloud/manager.py:434
#, python-format #, python-format
msgid "Update asset \"%s\"" msgid "Update asset \"%s\""
msgstr "更新资产 \"%s\"" msgstr "更新资产 \"%s\""
#: xpack/plugins/cloud/manager.py:441 #: xpack/plugins/cloud/manager.py:437
#, python-format #, python-format
msgid "Asset \"%s\" has been updated" msgid "Asset \"%s\" has been updated"
msgstr "资产 \"%s\" 已更新" msgstr "资产 \"%s\" 已更新"
#: xpack/plugins/cloud/manager.py:450 #: xpack/plugins/cloud/manager.py:446
#, python-format #, python-format
msgid "Prepare to create asset \"%s\"" msgid "Prepare to create asset \"%s\""
msgstr "准备创建资产 %s" msgstr "准备创建资产 %s"
#: xpack/plugins/cloud/manager.py:471 #: xpack/plugins/cloud/manager.py:467
#, python-format #, python-format
msgid "Set nodes \"%s\"" msgid "Set nodes \"%s\""
msgstr "设置节点: \"%s\"" msgstr "设置节点: \"%s\""
#: xpack/plugins/cloud/manager.py:497 #: xpack/plugins/cloud/manager.py:493
#, python-format #, python-format
msgid "Set accounts \"%s\"" msgid "Set accounts \"%s\""
msgstr "设置账号: %s" msgstr "设置账号: %s"
#: xpack/plugins/cloud/manager.py:513 #: xpack/plugins/cloud/manager.py:509
#, python-format #, python-format
msgid "Set protocols \"%s\"" msgid "Set protocols \"%s\""
msgstr "设置协议 \"%s\"" msgstr "设置协议 \"%s\""
#: xpack/plugins/cloud/manager.py:521 #: xpack/plugins/cloud/manager.py:517
#, python-format #, python-format
msgid "Set labels \"%s\"" msgid "Set labels \"%s\""
msgstr "设置标签: \"%s\"" msgstr "设置标签: \"%s\""
#: xpack/plugins/cloud/manager.py:535 xpack/plugins/cloud/tasks.py:31 #: xpack/plugins/cloud/manager.py:531 xpack/plugins/cloud/tasks.py:31
msgid "Run sync instance task" msgid "Run sync instance task"
msgstr "执行同步实例任务" msgstr "执行同步实例任务"
@ -10675,10 +10717,6 @@ msgstr "同步任务"
msgid "Sync instance task history" msgid "Sync instance task history"
msgstr "同步实例任务历史" msgstr "同步实例任务历史"
#: xpack/plugins/cloud/models.py:289
msgid "Instance"
msgstr "实例"
#: xpack/plugins/cloud/models.py:306 #: xpack/plugins/cloud/models.py:306
msgid "Sync instance detail" msgid "Sync instance detail"
msgstr "同步实例详情" msgstr "同步实例详情"
@ -10983,6 +11021,12 @@ msgstr "订阅 ID"
msgid "Auto node classification" msgid "Auto node classification"
msgstr "自动节点分类" msgstr "自动节点分类"
#: xpack/plugins/cloud/serializers/account_attrs.py:92
#, fuzzy
#| msgid "Domain name"
msgid "domain_name"
msgstr "域名称"
#: xpack/plugins/cloud/serializers/account_attrs.py:98 #: xpack/plugins/cloud/serializers/account_attrs.py:98
#: xpack/plugins/cloud/serializers/account_attrs.py:102 #: xpack/plugins/cloud/serializers/account_attrs.py:102
#: xpack/plugins/cloud/serializers/account_attrs.py:126 #: xpack/plugins/cloud/serializers/account_attrs.py:126

View File

@ -1536,5 +1536,13 @@
"disallowSelfUpdateFields": "Not allowed to modify the current fields yourself", "disallowSelfUpdateFields": "Not allowed to modify the current fields yourself",
"forceEnableMFAHelpText": "If force enable, user can not disable by themselves", "forceEnableMFAHelpText": "If force enable, user can not disable by themselves",
"removeWarningMsg": "Are you sure you want to remove", "removeWarningMsg": "Are you sure you want to remove",
"setVariable": "Set variable" "setVariable": "Set variable",
"WatermarkVariableHelpText": "You can use ${key} to read built-in variables in watermark content",
"isConsoleCanUse": "is Console page can use",
"userId": "User ID",
"userName": "User name",
"currentTime": "Current time",
"assetId": "Asset ID",
"assetName": "Asset name",
"assetAddress": "Asset address"
} }

View File

@ -1538,5 +1538,15 @@
"disallowSelfUpdateFields": "不允许自己修改当前字段", "disallowSelfUpdateFields": "不允许自己修改当前字段",
"forceEnableMFAHelpText": "如果强制启用,用户无法自行禁用", "forceEnableMFAHelpText": "如果强制启用,用户无法自行禁用",
"removeWarningMsg": "你确定要移除", "removeWarningMsg": "你确定要移除",
"setVariable": "设置参数" "setVariable": "设置参数",
"Watermark": "水印",
"WatermarkVariableHelpText": "您可以在自定义水印内容中使用 ${key} 读取内置变量",
"isConsoleCanUse": "管理页面是否可用",
"userId": "用户ID",
"name": "用户名称",
"userName": "用户名",
"currentTime": "当前时间",
"assetId": "资产 ID",
"assetName": "资产名称",
"assetAddress": "资产地址"
} }

View File

@ -589,6 +589,13 @@ class Config(dict):
'SECURITY_INSECURE_COMMAND_EMAIL_RECEIVER': '', 'SECURITY_INSECURE_COMMAND_EMAIL_RECEIVER': '',
'SECURITY_LUNA_REMEMBER_AUTH': True, 'SECURITY_LUNA_REMEMBER_AUTH': True,
'SECURITY_WATERMARK_ENABLED': True, 'SECURITY_WATERMARK_ENABLED': True,
'SECURITY_WATERMARK_SESSION_CONTENT': '${name}(${userName})\n${assetName}',
'SECURITY_WATERMARK_CONSOLE_CONTENT': '${userName}(${name})',
'SECURITY_WATERMARK_COLOR': 'rgba(184, 184, 184, 0.8)',
'SECURITY_WATERMARK_FONT_SIZE': 13,
'SECURITY_WATERMARK_HEIGHT': 200,
'SECURITY_WATERMARK_WIDTH': 200,
'SECURITY_WATERMARK_ROTATE': 45,
'SECURITY_MFA_VERIFY_TTL': 3600, 'SECURITY_MFA_VERIFY_TTL': 3600,
'SECURITY_UNCOMMON_USERS_TTL': 999, 'SECURITY_UNCOMMON_USERS_TTL': 999,
'VERIFY_CODE_TTL': 60, 'VERIFY_CODE_TTL': 60,

View File

@ -160,9 +160,17 @@ HEALTH_CHECK_TOKEN = CONFIG.HEALTH_CHECK_TOKEN
TERMINAL_RDP_ADDR = CONFIG.TERMINAL_RDP_ADDR TERMINAL_RDP_ADDR = CONFIG.TERMINAL_RDP_ADDR
SECURITY_LUNA_REMEMBER_AUTH = CONFIG.SECURITY_LUNA_REMEMBER_AUTH SECURITY_LUNA_REMEMBER_AUTH = CONFIG.SECURITY_LUNA_REMEMBER_AUTH
# 水印
SECURITY_WATERMARK_ENABLED = CONFIG.SECURITY_WATERMARK_ENABLED SECURITY_WATERMARK_ENABLED = CONFIG.SECURITY_WATERMARK_ENABLED
SECURITY_SESSION_SHARE = CONFIG.SECURITY_SESSION_SHARE SECURITY_WATERMARK_SESSION_CONTENT = CONFIG.SECURITY_WATERMARK_SESSION_CONTENT
SECURITY_WATERMARK_COLOR = CONFIG.SECURITY_WATERMARK_COLOR
SECURITY_WATERMARK_FONT_SIZE = CONFIG.SECURITY_WATERMARK_FONT_SIZE
SECURITY_WATERMARK_HEIGHT = CONFIG.SECURITY_WATERMARK_HEIGHT
SECURITY_WATERMARK_WIDTH = CONFIG.SECURITY_WATERMARK_WIDTH
SECURITY_WATERMARK_ROTATE = CONFIG.SECURITY_WATERMARK_ROTATE
SECURITY_WATERMARK_CONSOLE_CONTENT = CONFIG.SECURITY_WATERMARK_CONSOLE_CONTENT
SECURITY_SESSION_SHARE = CONFIG.SECURITY_SESSION_SHARE
LOGIN_REDIRECT_TO_BACKEND = CONFIG.LOGIN_REDIRECT_TO_BACKEND LOGIN_REDIRECT_TO_BACKEND = CONFIG.LOGIN_REDIRECT_TO_BACKEND
LOGIN_REDIRECT_MSG_ENABLED = CONFIG.LOGIN_REDIRECT_MSG_ENABLED LOGIN_REDIRECT_MSG_ENABLED = CONFIG.LOGIN_REDIRECT_MSG_ENABLED

View File

@ -29,6 +29,13 @@ class PrivateSettingSerializer(PublicSettingSerializer):
SECURITY_PASSWORD_EXPIRATION_TIME = serializers.IntegerField() SECURITY_PASSWORD_EXPIRATION_TIME = serializers.IntegerField()
SECURITY_LUNA_REMEMBER_AUTH = serializers.BooleanField() SECURITY_LUNA_REMEMBER_AUTH = serializers.BooleanField()
SECURITY_WATERMARK_ENABLED = serializers.BooleanField() SECURITY_WATERMARK_ENABLED = serializers.BooleanField()
SECURITY_WATERMARK_SESSION_CONTENT = serializers.CharField()
SECURITY_WATERMARK_CONSOLE_CONTENT = serializers.CharField()
SECURITY_WATERMARK_COLOR = serializers.CharField()
SECURITY_WATERMARK_FONT_SIZE = serializers.IntegerField()
SECURITY_WATERMARK_HEIGHT = serializers.IntegerField()
SECURITY_WATERMARK_WIDTH = serializers.IntegerField()
SECURITY_WATERMARK_ROTATE = serializers.IntegerField()
SESSION_EXPIRE_AT_BROWSER_CLOSE = serializers.BooleanField() SESSION_EXPIRE_AT_BROWSER_CLOSE = serializers.BooleanField()
VIEW_ASSET_ONLINE_SESSION_INFO = serializers.BooleanField() VIEW_ASSET_ONLINE_SESSION_INFO = serializers.BooleanField()
PASSWORD_RULE = serializers.DictField() PASSWORD_RULE = serializers.DictField()

View File

@ -195,6 +195,27 @@ class SecuritySessionSerializer(serializers.Serializer):
SECURITY_WATERMARK_ENABLED = serializers.BooleanField( SECURITY_WATERMARK_ENABLED = serializers.BooleanField(
required=True, label=_('Watermark'), required=True, label=_('Watermark'),
) )
SECURITY_WATERMARK_SESSION_CONTENT = serializers.CharField(
required=False, label=_('Watermark session content'),
)
SECURITY_WATERMARK_CONSOLE_CONTENT = serializers.CharField(
required=False, label=_("Watermark console content")
)
SECURITY_WATERMARK_COLOR = serializers.CharField(
max_length=32, default="", label=_("Color")
)
SECURITY_WATERMARK_FONT_SIZE = serializers.IntegerField(
required=False, label=_('Watermark font size'), min_value=1, max_value=100,
)
SECURITY_WATERMARK_HEIGHT = serializers.IntegerField(
required=False, label=_('Watermark height'), default=200
)
SECURITY_WATERMARK_WIDTH = serializers.IntegerField(
required=False, label=_('Watermark width'), default=200
)
SECURITY_WATERMARK_ROTATE = serializers.IntegerField(
required=False, label=_('Watermark rotate'), default=45
)
SECURITY_MAX_IDLE_TIME = serializers.IntegerField( SECURITY_MAX_IDLE_TIME = serializers.IntegerField(
min_value=1, max_value=99999, required=False, min_value=1, max_value=99999, required=False,
label=_('Max idle time (minute)'), label=_('Max idle time (minute)'),