mirror of https://github.com/jumpserver/jumpserver
perf: 修改优化结构 (#12554)
* perf: 修改优化结构 * perf: 修改结构 --------- Co-authored-by: ibuler <ibuler@qq.com>pull/12557/head
parent
1cec27ed70
commit
9968617758
|
@ -4,6 +4,7 @@ from django.apps import AppConfig
|
|||
class AccountsConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'accounts'
|
||||
verbose_name = 'App Accounts'
|
||||
|
||||
def ready(self):
|
||||
from . import signal_handlers # noqa
|
||||
|
|
|
@ -4,4 +4,4 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
class AclsConfig(AppConfig):
|
||||
name = 'acls'
|
||||
verbose_name = _('Acls')
|
||||
verbose_name = _('App Acls')
|
||||
|
|
|
@ -6,7 +6,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
class ApplicationsConfig(AppConfig):
|
||||
name = 'applications'
|
||||
verbose_name = _('Applications')
|
||||
verbose_name = _('App Applications')
|
||||
|
||||
def ready(self):
|
||||
super().ready()
|
||||
|
|
|
@ -6,7 +6,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
class AssetsConfig(AppConfig):
|
||||
name = 'assets'
|
||||
verbose_name = _('App assets')
|
||||
verbose_name = _('App Assets')
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
|
|
@ -6,7 +6,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
class AuditsConfig(AppConfig):
|
||||
name = 'audits'
|
||||
verbose_name = _('Audits')
|
||||
verbose_name = _('App Audits')
|
||||
|
||||
def ready(self):
|
||||
from . import signal_handlers # noqa
|
||||
|
|
|
@ -4,7 +4,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
class AuthenticationConfig(AppConfig):
|
||||
name = 'authentication'
|
||||
verbose_name = _('Authentication')
|
||||
verbose_name = _('App Authentication')
|
||||
|
||||
def ready(self):
|
||||
from . import signal_handlers # noqa
|
||||
|
|
|
@ -3,14 +3,15 @@ import os
|
|||
|
||||
from tqdm import tqdm
|
||||
|
||||
from apps.locale.translate import RED, GREEN, RESET
|
||||
from .const import RED, GREEN, RESET
|
||||
|
||||
|
||||
class BaseTranslateManager:
|
||||
bulk_size = 30
|
||||
SEPARATOR = "<SEP>"
|
||||
LANG_MAPPER = {
|
||||
'ja': 'Japanese',
|
||||
# 'ja': 'Japanese',
|
||||
'en': 'English',
|
||||
}
|
||||
|
||||
def __init__(self, dir_path, oai_trans_instance):
|
|
@ -2,8 +2,8 @@ import os
|
|||
|
||||
import polib
|
||||
|
||||
from apps.locale.translate import RED, MAGENTA, GREEN
|
||||
from .base import BaseTranslateManager
|
||||
from .const import RED, GREEN
|
||||
|
||||
|
||||
class CoreTranslateManager(BaseTranslateManager):
|
|
@ -1,8 +1,8 @@
|
|||
import json
|
||||
import os
|
||||
|
||||
from apps.locale.translate import RED, GREEN
|
||||
from .base import BaseTranslateManager
|
||||
from .const import RED, GREEN
|
||||
|
||||
|
||||
class OtherTranslateManager(BaseTranslateManager):
|
|
@ -16,7 +16,10 @@ class OpenAITranslate:
|
|||
f"I provided you and translate it into {target_lang}. "
|
||||
f"Please do not use a translation accent when translating, "
|
||||
f"but translate naturally, smoothly and authentically, "
|
||||
f"using beautiful and elegant words. way of expression.",
|
||||
f"using beautiful and elegant words. way of expression,"
|
||||
f"If you found word '动作' please translate it to 'Action', because it's short,"
|
||||
f"If you found word '管理' in menu, you can not translate it, because management is too long in menu"
|
||||
,
|
||||
},
|
||||
{
|
||||
"role": "user",
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: JumpServer 0.3.3\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-01-03 11:23+0800\n"
|
||||
"POT-Creation-Date: 2024-01-16 18:16+0800\n"
|
||||
"PO-Revision-Date: 2021-05-20 10:54+0800\n"
|
||||
"Last-Translator: ibuler <ibuler@qq.com>\n"
|
||||
"Language-Team: JumpServer team<ibuler@qq.com>\n"
|
||||
|
@ -28,8 +28,9 @@ msgstr "参数 'action' 必须是 [{}]"
|
|||
#: authentication/confirm/password.py:26 authentication/forms.py:32
|
||||
#: authentication/templates/authentication/login.html:330
|
||||
#: settings/serializers/auth/ldap.py:25 settings/serializers/auth/ldap.py:47
|
||||
#: terminal/serializers/storage.py:123 terminal/serializers/storage.py:142
|
||||
#: users/forms/profile.py:22 users/serializers/user.py:104
|
||||
#: settings/serializers/msg.py:35 terminal/serializers/storage.py:123
|
||||
#: terminal/serializers/storage.py:142 users/forms/profile.py:22
|
||||
#: users/serializers/user.py:104
|
||||
#: users/templates/users/_msg_user_created.html:13
|
||||
#: users/templates/users/user_password_verify.html:18
|
||||
#: xpack/plugins/cloud/serializers/account_attrs.py:28
|
||||
|
@ -199,10 +200,10 @@ msgstr "仅创建"
|
|||
#: authentication/serializers/password_mfa.py:16
|
||||
#: authentication/serializers/password_mfa.py:24
|
||||
#: notifications/backends/__init__.py:10 settings/serializers/msg.py:22
|
||||
#: settings/serializers/msg.py:57 users/forms/profile.py:102
|
||||
#: settings/serializers/msg.py:64 users/forms/profile.py:102
|
||||
#: users/forms/profile.py:109 users/models/user.py:802
|
||||
#: users/templates/users/forgot_password.html:117
|
||||
#: users/views/profile/reset.py:92
|
||||
#: users/views/profile/reset.py:93
|
||||
msgid "Email"
|
||||
msgstr "邮箱"
|
||||
|
||||
|
@ -286,11 +287,11 @@ msgstr "来源 ID"
|
|||
#: accounts/serializers/automations/change_secret.py:107
|
||||
#: accounts/serializers/automations/change_secret.py:127
|
||||
#: acls/serializers/base.py:124 acls/templates/acls/asset_login_reminder.html:7
|
||||
#: assets/serializers/asset/common.py:125 assets/serializers/gateway.py:28
|
||||
#: assets/serializers/asset/common.py:128 assets/serializers/gateway.py:28
|
||||
#: audits/models.py:59 authentication/api/connection_token.py:405
|
||||
#: ops/models/base.py:18 perms/models/asset_permission.py:75
|
||||
#: perms/serializers/permission.py:41 terminal/backends/command/models.py:18
|
||||
#: terminal/models/session/session.py:33
|
||||
#: perms/serializers/permission.py:41 settings/serializers/msg.py:33
|
||||
#: terminal/backends/command/models.py:18 terminal/models/session/session.py:33
|
||||
#: terminal/templates/terminal/_msg_command_warning.html:8
|
||||
#: terminal/templates/terminal/_msg_session_sharing.html:8
|
||||
#: tickets/models/ticket/command_confirm.py:13 xpack/plugins/cloud/models.py:89
|
||||
|
@ -592,8 +593,8 @@ msgstr "密码规则"
|
|||
#: assets/models/asset/common.py:159 assets/models/cmd_filter.py:21
|
||||
#: assets/models/domain.py:19 assets/models/group.py:17
|
||||
#: assets/models/label.py:18 assets/models/platform.py:16
|
||||
#: assets/models/platform.py:95 assets/serializers/asset/common.py:146
|
||||
#: assets/serializers/platform.py:118 assets/serializers/platform.py:235
|
||||
#: assets/models/platform.py:95 assets/serializers/asset/common.py:149
|
||||
#: assets/serializers/platform.py:118 assets/serializers/platform.py:229
|
||||
#: authentication/backends/passkey/models.py:10
|
||||
#: authentication/serializers/connect_token_secret.py:113
|
||||
#: authentication/serializers/connect_token_secret.py:168 labels/models.py:11
|
||||
|
@ -601,7 +602,7 @@ msgstr "密码规则"
|
|||
#: ops/models/celery.py:57 ops/models/job.py:136 ops/models/playbook.py:28
|
||||
#: ops/serializers/job.py:18 orgs/models.py:82
|
||||
#: perms/models/asset_permission.py:61 rbac/models/role.py:29
|
||||
#: settings/models.py:33 settings/models.py:181 settings/serializers/msg.py:82
|
||||
#: settings/models.py:33 settings/models.py:181 settings/serializers/msg.py:89
|
||||
#: terminal/models/applet/applet.py:33 terminal/models/component/endpoint.py:12
|
||||
#: terminal/models/component/endpoint.py:95
|
||||
#: terminal/models/component/storage.py:26 terminal/models/component/task.py:13
|
||||
|
@ -625,7 +626,7 @@ msgstr "特权账号"
|
|||
#: authentication/serializers/connect_token_secret.py:117
|
||||
#: terminal/models/applet/applet.py:40
|
||||
#: terminal/models/component/endpoint.py:106
|
||||
#: terminal/models/virtualapp/virtualapp.py:23 users/serializers/user.py:167
|
||||
#: terminal/models/virtualapp/virtualapp.py:23 users/serializers/user.py:170
|
||||
msgid "Is active"
|
||||
msgstr "激活"
|
||||
|
||||
|
@ -736,8 +737,8 @@ msgstr "账号存在策略"
|
|||
|
||||
#: accounts/serializers/account/account.py:193 applications/models.py:11
|
||||
#: assets/models/label.py:21 assets/models/platform.py:96
|
||||
#: assets/serializers/asset/common.py:122 assets/serializers/cagegory.py:12
|
||||
#: assets/serializers/platform.py:140 assets/serializers/platform.py:236
|
||||
#: assets/serializers/asset/common.py:125 assets/serializers/cagegory.py:12
|
||||
#: assets/serializers/platform.py:140 assets/serializers/platform.py:230
|
||||
#: perms/serializers/user_permission.py:26 settings/models.py:35
|
||||
#: tickets/models/ticket/apply_application.py:13 users/models/preference.py:12
|
||||
msgid "Category"
|
||||
|
@ -748,7 +749,7 @@ msgstr "类别"
|
|||
#: acls/serializers/command_acl.py:19 applications/models.py:14
|
||||
#: assets/models/_user.py:50 assets/models/automations/base.py:20
|
||||
#: assets/models/cmd_filter.py:74 assets/models/platform.py:97
|
||||
#: assets/serializers/asset/common.py:123 assets/serializers/platform.py:120
|
||||
#: assets/serializers/asset/common.py:126 assets/serializers/platform.py:120
|
||||
#: assets/serializers/platform.py:139 audits/serializers.py:53
|
||||
#: audits/serializers.py:170
|
||||
#: authentication/serializers/connect_token_secret.py:126 ops/models/job.py:144
|
||||
|
@ -866,7 +867,7 @@ msgid "Key password"
|
|||
msgstr "密钥密码"
|
||||
|
||||
#: accounts/serializers/account/base.py:78
|
||||
#: assets/serializers/asset/common.py:379
|
||||
#: assets/serializers/asset/common.py:381
|
||||
msgid "Spec info"
|
||||
msgstr "特殊信息"
|
||||
|
||||
|
@ -1059,7 +1060,9 @@ msgid "private key invalid or passphrase error"
|
|||
msgstr "密钥不合法或密钥密码错误"
|
||||
|
||||
#: acls/apps.py:7
|
||||
msgid "Acls"
|
||||
#, fuzzy
|
||||
#| msgid "Acls"
|
||||
msgid "App Acls"
|
||||
msgstr "访问控制"
|
||||
|
||||
#: acls/const.py:6 audits/const.py:36 terminal/const.py:11 tickets/const.py:45
|
||||
|
@ -1079,7 +1082,7 @@ msgstr "审批"
|
|||
msgid "Warning"
|
||||
msgstr "告警"
|
||||
|
||||
#: acls/const.py:10 audits/const.py:35 notifications/apps.py:7
|
||||
#: acls/const.py:10 audits/const.py:35
|
||||
msgid "Notifications"
|
||||
msgstr "通知"
|
||||
|
||||
|
@ -1108,13 +1111,14 @@ msgstr "审批人"
|
|||
msgid "Active"
|
||||
msgstr "激活中"
|
||||
|
||||
#: acls/models/base.py:81 users/apps.py:9 users/models/preference.py:16
|
||||
#: acls/models/base.py:81 rbac/serializers/role.py:27
|
||||
#: users/models/preference.py:16
|
||||
msgid "Users"
|
||||
msgstr "用户管理"
|
||||
|
||||
#: acls/models/base.py:98 assets/models/automations/base.py:17
|
||||
#: assets/models/cmd_filter.py:38 assets/serializers/asset/common.py:378
|
||||
#: perms/serializers/user_permission.py:75 rbac/tree.py:35
|
||||
#: assets/models/cmd_filter.py:38 perms/serializers/user_permission.py:75
|
||||
#: rbac/tree.py:35
|
||||
msgid "Accounts"
|
||||
msgstr "账号管理"
|
||||
|
||||
|
@ -1298,8 +1302,10 @@ msgstr ""
|
|||
"问,请立即采取适当的措施。"
|
||||
|
||||
#: applications/apps.py:9
|
||||
msgid "Applications"
|
||||
msgstr "应用管理"
|
||||
#, fuzzy
|
||||
#| msgid "Apply applications"
|
||||
msgid "App Applications"
|
||||
msgstr "申请应用"
|
||||
|
||||
#: applications/models.py:16 xpack/plugins/cloud/models.py:37
|
||||
#: xpack/plugins/cloud/serializers/account.py:67
|
||||
|
@ -1339,7 +1345,9 @@ msgid "The same level node name cannot be the same"
|
|||
msgstr "同级别节点名字不能重复"
|
||||
|
||||
#: assets/apps.py:9
|
||||
msgid "App assets"
|
||||
#, fuzzy
|
||||
#| msgid "App assets"
|
||||
msgid "App Assets"
|
||||
msgstr "资产管理"
|
||||
|
||||
#: assets/automations/base/manager.py:188
|
||||
|
@ -1415,8 +1423,8 @@ msgstr "脚本"
|
|||
|
||||
#: assets/const/category.py:10 assets/models/asset/host.py:8
|
||||
#: settings/serializers/auth/radius.py:16 settings/serializers/auth/sms.py:71
|
||||
#: settings/serializers/feature.py:49 terminal/models/component/endpoint.py:13
|
||||
#: terminal/serializers/applet.py:17
|
||||
#: settings/serializers/feature.py:49 settings/serializers/msg.py:31
|
||||
#: terminal/models/component/endpoint.py:13 terminal/serializers/applet.py:17
|
||||
#: xpack/plugins/cloud/serializers/account_attrs.py:72
|
||||
msgid "Host"
|
||||
msgstr "主机"
|
||||
|
@ -1539,7 +1547,7 @@ msgid "We will consider login success when we see this prompt"
|
|||
msgstr "当我们看到这个提示时,我们将认为登录成功"
|
||||
|
||||
#: assets/const/protocol.py:119 assets/models/asset/database.py:10
|
||||
#: settings/serializers/msg.py:40
|
||||
#: settings/serializers/msg.py:47
|
||||
msgid "Use SSL"
|
||||
msgstr "使用 SSL"
|
||||
|
||||
|
@ -1655,7 +1663,7 @@ msgstr "用户名与用户相同"
|
|||
|
||||
#: assets/models/_user.py:52 authentication/models/connection_token.py:41
|
||||
#: authentication/serializers/connect_token_secret.py:114
|
||||
#: terminal/models/applet/applet.py:42
|
||||
#: settings/serializers/msg.py:29 terminal/models/applet/applet.py:42
|
||||
#: terminal/models/virtualapp/virtualapp.py:24
|
||||
#: terminal/serializers/session.py:19 terminal/serializers/session.py:45
|
||||
#: terminal/serializers/storage.py:71
|
||||
|
@ -1708,12 +1716,12 @@ msgstr "云服务"
|
|||
|
||||
#: assets/models/asset/common.py:94 assets/models/platform.py:17
|
||||
#: settings/serializers/auth/radius.py:17 settings/serializers/auth/sms.py:72
|
||||
#: terminal/serializers/storage.py:133
|
||||
#: settings/serializers/msg.py:32 terminal/serializers/storage.py:133
|
||||
#: xpack/plugins/cloud/serializers/account_attrs.py:73
|
||||
msgid "Port"
|
||||
msgstr "端口"
|
||||
|
||||
#: assets/models/asset/common.py:160 assets/serializers/asset/common.py:147
|
||||
#: assets/models/asset/common.py:160 assets/serializers/asset/common.py:150
|
||||
msgid "Address"
|
||||
msgstr "地址"
|
||||
|
||||
|
@ -1737,7 +1745,7 @@ msgstr "网域"
|
|||
msgid "Node"
|
||||
msgstr "节点"
|
||||
|
||||
#: assets/models/asset/common.py:167 assets/serializers/asset/common.py:380
|
||||
#: assets/models/asset/common.py:167 assets/serializers/asset/common.py:382
|
||||
#: assets/serializers/asset/host.py:11
|
||||
msgid "Gathered info"
|
||||
msgstr "收集资产硬件信息"
|
||||
|
@ -1886,7 +1894,7 @@ msgstr "值"
|
|||
#: assets/serializers/platform.py:119
|
||||
#: authentication/serializers/connect_token_secret.py:124
|
||||
#: common/serializers/common.py:85 labels/models.py:17 labels/models.py:33
|
||||
#: labels/serializers.py:45 settings/serializers/msg.py:83
|
||||
#: labels/serializers.py:45 settings/serializers/msg.py:90
|
||||
msgid "Label"
|
||||
msgstr "标签"
|
||||
|
||||
|
@ -2055,7 +2063,7 @@ msgid ""
|
|||
"type"
|
||||
msgstr "资产中批量更新平台,不符合平台类型跳过的资产"
|
||||
|
||||
#: assets/serializers/asset/common.py:124 assets/serializers/platform.py:141
|
||||
#: assets/serializers/asset/common.py:127 assets/serializers/platform.py:141
|
||||
#: authentication/serializers/connect_token_secret.py:30
|
||||
#: authentication/serializers/connect_token_secret.py:75
|
||||
#: perms/models/asset_permission.py:76 perms/serializers/permission.py:42
|
||||
|
@ -2064,29 +2072,29 @@ msgstr "资产中批量更新平台,不符合平台类型跳过的资产"
|
|||
msgid "Protocols"
|
||||
msgstr "协议组"
|
||||
|
||||
#: assets/serializers/asset/common.py:126
|
||||
#: assets/serializers/asset/common.py:148
|
||||
#: assets/serializers/asset/common.py:129
|
||||
#: assets/serializers/asset/common.py:151
|
||||
msgid "Node path"
|
||||
msgstr "节点路径"
|
||||
|
||||
#: assets/serializers/asset/common.py:145
|
||||
#: assets/serializers/asset/common.py:381
|
||||
#: assets/serializers/asset/common.py:148
|
||||
#: assets/serializers/asset/common.py:383
|
||||
msgid "Auto info"
|
||||
msgstr "自动化信息"
|
||||
|
||||
#: assets/serializers/asset/common.py:239
|
||||
#: assets/serializers/asset/common.py:242
|
||||
msgid "Platform not exist"
|
||||
msgstr "平台不存在"
|
||||
|
||||
#: assets/serializers/asset/common.py:275
|
||||
#: assets/serializers/asset/common.py:278
|
||||
msgid "port out of range (0-65535)"
|
||||
msgstr "端口超出范围 (0-65535)"
|
||||
|
||||
#: assets/serializers/asset/common.py:282
|
||||
#: assets/serializers/asset/common.py:285
|
||||
msgid "Protocol is required: {}"
|
||||
msgstr "协议是必填的: {}"
|
||||
|
||||
#: assets/serializers/asset/common.py:310
|
||||
#: assets/serializers/asset/common.py:313
|
||||
msgid "Invalid data"
|
||||
msgstr "无效的数据"
|
||||
|
||||
|
@ -2236,7 +2244,7 @@ msgstr "默认网域"
|
|||
msgid "type is required"
|
||||
msgstr "类型 该字段是必填项。"
|
||||
|
||||
#: assets/serializers/platform.py:211
|
||||
#: assets/serializers/platform.py:205
|
||||
msgid "Protocols is required"
|
||||
msgstr "协议是必填的"
|
||||
|
||||
|
@ -2307,7 +2315,9 @@ msgid "No assets matched, stop task"
|
|||
msgstr "没有匹配到资产,结束任务"
|
||||
|
||||
#: audits/apps.py:9
|
||||
msgid "Audits"
|
||||
#, fuzzy
|
||||
#| msgid "Audits"
|
||||
msgid "App Audits"
|
||||
msgstr "日志审计"
|
||||
|
||||
#: audits/backends/db.py:16
|
||||
|
@ -2675,22 +2685,22 @@ msgstr "ACL 动作是复核"
|
|||
msgid "Current user not support mfa type: {}"
|
||||
msgstr "当前用户不支持 MFA 类型: {}"
|
||||
|
||||
#: authentication/api/password.py:34 terminal/api/session/session.py:305
|
||||
#: users/views/profile/reset.py:61
|
||||
#: authentication/api/password.py:33 terminal/api/session/session.py:305
|
||||
#: users/views/profile/reset.py:62
|
||||
msgid "User does not exist: {}"
|
||||
msgstr "用户不存在: {}"
|
||||
|
||||
#: authentication/api/password.py:34 users/views/profile/reset.py:163
|
||||
#: authentication/api/password.py:33 users/views/profile/reset.py:163
|
||||
msgid "No user matched"
|
||||
msgstr "没有匹配到用户"
|
||||
|
||||
#: authentication/api/password.py:38
|
||||
#: authentication/api/password.py:37
|
||||
msgid ""
|
||||
"The user is from {}, please go to the corresponding system to change the "
|
||||
"password"
|
||||
msgstr "用户来自 {} 请去相应系统修改密码"
|
||||
|
||||
#: authentication/api/password.py:67
|
||||
#: authentication/api/password.py:65
|
||||
#: authentication/templates/authentication/login.html:361
|
||||
#: users/templates/users/forgot_password.html:27
|
||||
#: users/templates/users/forgot_password.html:28
|
||||
|
@ -2699,8 +2709,10 @@ msgstr "用户来自 {} 请去相应系统修改密码"
|
|||
msgid "Forgot password"
|
||||
msgstr "忘记密码"
|
||||
|
||||
#: authentication/apps.py:7 settings/serializers/auth/base.py:10
|
||||
msgid "Authentication"
|
||||
#: authentication/apps.py:7
|
||||
#, fuzzy
|
||||
#| msgid "Authentication"
|
||||
msgid "App Authentication"
|
||||
msgstr "认证"
|
||||
|
||||
#: authentication/backends/custom.py:59
|
||||
|
@ -3001,7 +3013,7 @@ msgstr "短信验证码校验失败"
|
|||
#: authentication/serializers/password_mfa.py:24
|
||||
#: settings/serializers/auth/sms.py:32 users/forms/profile.py:104
|
||||
#: users/forms/profile.py:109 users/templates/users/forgot_password.html:112
|
||||
#: users/views/profile/reset.py:98
|
||||
#: users/views/profile/reset.py:99
|
||||
msgid "SMS"
|
||||
msgstr "短信"
|
||||
|
||||
|
@ -3192,7 +3204,7 @@ msgstr "动作"
|
|||
|
||||
#: authentication/serializers/connection_token.py:42
|
||||
#: perms/serializers/permission.py:40 perms/serializers/permission.py:60
|
||||
#: users/serializers/user.py:97 users/serializers/user.py:171
|
||||
#: users/serializers/user.py:97 users/serializers/user.py:174
|
||||
msgid "Is expired"
|
||||
msgstr "已过期"
|
||||
|
||||
|
@ -3207,7 +3219,7 @@ msgstr "IP 白名单"
|
|||
|
||||
#: authentication/serializers/token.py:92 perms/serializers/permission.py:39
|
||||
#: perms/serializers/permission.py:61 users/serializers/user.py:98
|
||||
#: users/serializers/user.py:168
|
||||
#: users/serializers/user.py:171
|
||||
msgid "Is valid"
|
||||
msgstr "是否有效"
|
||||
|
||||
|
@ -3277,7 +3289,7 @@ msgstr "代码错误"
|
|||
#: authentication/templates/authentication/_msg_reset_password_code.html:9
|
||||
#: authentication/templates/authentication/_msg_rest_password_success.html:2
|
||||
#: authentication/templates/authentication/_msg_rest_public_key_success.html:2
|
||||
#: jumpserver/conf.py:457
|
||||
#: jumpserver/conf.py:459
|
||||
#: perms/templates/perms/_msg_item_permissions_expire.html:3
|
||||
#: perms/templates/perms/_msg_permed_items_expire.html:3
|
||||
#: tickets/templates/tickets/approve_check_password.html:32
|
||||
|
@ -3437,7 +3449,7 @@ msgstr "本页面未使用 HTTPS 协议,请使用 HTTPS 协议以确保您的
|
|||
msgid "Do you want to retry ?"
|
||||
msgstr "是否重试 ?"
|
||||
|
||||
#: authentication/utils.py:23 common/utils/ip/geoip/utils.py:24
|
||||
#: authentication/utils.py:24 common/utils/ip/geoip/utils.py:24
|
||||
#: xpack/plugins/cloud/const.py:32
|
||||
msgid "LAN"
|
||||
msgstr "局域网"
|
||||
|
@ -3772,7 +3784,7 @@ msgstr "不支持 Elasticsearch8"
|
|||
msgid "Network error, please contact system administrator"
|
||||
msgstr "网络错误,请联系系统管理员"
|
||||
|
||||
#: common/sdk/im/slack/__init__.py:79
|
||||
#: common/sdk/im/slack/__init__.py:77
|
||||
msgid "Unknown error occur"
|
||||
msgstr "发生未知错误"
|
||||
|
||||
|
@ -3863,21 +3875,19 @@ msgstr "错误的数据类型,应该是列表"
|
|||
msgid "Invalid choice: {}"
|
||||
msgstr "无效选项: {}"
|
||||
|
||||
#: common/serializers/mixin.py:397 labels/apps.py:8
|
||||
#: common/serializers/mixin.py:397
|
||||
msgid "Labels"
|
||||
msgstr "标签管理"
|
||||
msgstr "标签"
|
||||
|
||||
# msgid "Labels"
|
||||
# msgstr "标签管理"
|
||||
#: common/tasks.py:21 common/utils/verify_code.py:16
|
||||
#: common/tasks.py:31 common/utils/verify_code.py:16
|
||||
msgid "Send email"
|
||||
msgstr "发件邮件"
|
||||
|
||||
#: common/tasks.py:48
|
||||
#: common/tasks.py:58
|
||||
msgid "Send email attachment"
|
||||
msgstr "发送邮件附件"
|
||||
|
||||
#: common/tasks.py:69 terminal/tasks.py:62
|
||||
#: common/tasks.py:80 terminal/tasks.py:62
|
||||
msgid "Upload session replay to external storage"
|
||||
msgstr "上传会话录像到外部存储"
|
||||
|
||||
|
@ -3906,16 +3916,16 @@ msgstr "不能包含特殊字符"
|
|||
msgid "The mobile phone number format is incorrect"
|
||||
msgstr "手机号格式不正确"
|
||||
|
||||
#: jumpserver/conf.py:452
|
||||
#: jumpserver/conf.py:453
|
||||
#, python-brace-format
|
||||
msgid "The verification code is: {code}"
|
||||
msgstr "验证码为: {code}"
|
||||
|
||||
#: jumpserver/conf.py:456
|
||||
#: jumpserver/conf.py:458
|
||||
msgid "Create account successfully"
|
||||
msgstr "创建账号成功"
|
||||
|
||||
#: jumpserver/conf.py:458
|
||||
#: jumpserver/conf.py:460
|
||||
msgid "Your account has been created successfully"
|
||||
msgstr "你的账号已创建成功"
|
||||
|
||||
|
@ -3950,6 +3960,12 @@ msgstr ""
|
|||
"div><div>如果你看到了这个页面,证明你访问的不是nginx监听的端口,祝你好运</"
|
||||
"div>"
|
||||
|
||||
#: labels/apps.py:8
|
||||
#, fuzzy
|
||||
#| msgid "Labels"
|
||||
msgid "App Labels"
|
||||
msgstr "标签"
|
||||
|
||||
#: labels/models.py:36
|
||||
msgid "Resource ID"
|
||||
msgstr "资源 ID"
|
||||
|
@ -3970,6 +3986,12 @@ msgstr "不能包含\":,\""
|
|||
msgid "Resource type"
|
||||
msgstr "资源类型"
|
||||
|
||||
#: notifications/apps.py:7
|
||||
#, fuzzy
|
||||
#| msgid "Notifications"
|
||||
msgid "App Notifications"
|
||||
msgstr "通知"
|
||||
|
||||
#: notifications/backends/__init__.py:13
|
||||
msgid "Site message"
|
||||
msgstr "站内信"
|
||||
|
@ -4056,8 +4078,10 @@ msgstr "文件密钥该字段是必填项。"
|
|||
msgid "This file can not be delete"
|
||||
msgstr "无法删除此文件"
|
||||
|
||||
#: ops/apps.py:9 ops/notifications.py:17 rbac/tree.py:57
|
||||
msgid "App ops"
|
||||
#: ops/apps.py:9
|
||||
#, fuzzy
|
||||
#| msgid "App ops"
|
||||
msgid "App Ops"
|
||||
msgstr "作业中心"
|
||||
|
||||
#: ops/const.py:6
|
||||
|
@ -4290,6 +4314,10 @@ msgstr "创建方式"
|
|||
msgid "VCS URL"
|
||||
msgstr "VCS URL"
|
||||
|
||||
#: ops/notifications.py:17 rbac/tree.py:57
|
||||
msgid "App ops"
|
||||
msgstr "作业中心"
|
||||
|
||||
#: ops/notifications.py:18
|
||||
msgid "Server performance"
|
||||
msgstr "监控告警"
|
||||
|
@ -4420,8 +4448,10 @@ msgstr "LDAP 同步设置组织为当前组织,请切换其他组织后再进
|
|||
msgid "The organization have resource ({}) cannot be deleted"
|
||||
msgstr "组织存在资源 ({}) 不能被删除"
|
||||
|
||||
#: orgs/apps.py:7 rbac/tree.py:128
|
||||
msgid "App organizations"
|
||||
#: orgs/apps.py:7
|
||||
#, fuzzy
|
||||
#| msgid "App organizations"
|
||||
msgid "App Organizations"
|
||||
msgstr "组织管理"
|
||||
|
||||
#: orgs/mixins/models.py:57 orgs/mixins/serializers.py:25 orgs/models.py:91
|
||||
|
@ -4471,7 +4501,9 @@ msgid "Refresh organization cache"
|
|||
msgstr "刷新组织缓存"
|
||||
|
||||
#: perms/apps.py:9
|
||||
msgid "App permissions"
|
||||
#, fuzzy
|
||||
#| msgid "App permissions"
|
||||
msgid "App Permissions"
|
||||
msgstr "授权管理"
|
||||
|
||||
#: perms/const.py:12
|
||||
|
@ -4567,8 +4599,8 @@ msgstr "资产授权规则将要过期"
|
|||
msgid "asset permissions of organization {}"
|
||||
msgstr "组织 ({}) 的资产授权"
|
||||
|
||||
#: perms/serializers/permission.py:186 rbac/serializers/role.py:27
|
||||
#: users/serializers/group.py:54 users/serializers/group.py:60
|
||||
#: perms/serializers/permission.py:186 users/serializers/group.py:54
|
||||
#: users/serializers/group.py:60
|
||||
msgid "Users amount"
|
||||
msgstr "用户数量"
|
||||
|
||||
|
@ -4617,7 +4649,9 @@ msgid "{} at least one system role"
|
|||
msgstr "{} 至少有一个系统角色"
|
||||
|
||||
#: rbac/apps.py:7
|
||||
msgid "RBAC"
|
||||
#, fuzzy
|
||||
#| msgid "RBAC"
|
||||
msgid "App RBAC"
|
||||
msgstr "RBAC"
|
||||
|
||||
#: rbac/builtin.py:115
|
||||
|
@ -4787,6 +4821,10 @@ msgstr "我的资产"
|
|||
msgid "Applet"
|
||||
msgstr "远程应用"
|
||||
|
||||
#: rbac/tree.py:128
|
||||
msgid "App organizations"
|
||||
msgstr "组织管理"
|
||||
|
||||
#: rbac/tree.py:129
|
||||
msgid "Ticket comment"
|
||||
msgstr "工单评论"
|
||||
|
@ -4814,7 +4852,7 @@ msgstr "聊天 AI 没有开启"
|
|||
msgid "Test success"
|
||||
msgstr "测试成功"
|
||||
|
||||
#: settings/api/email.py:21
|
||||
#: settings/api/email.py:22
|
||||
msgid "Test mail sent to {}, please check"
|
||||
msgstr "邮件已经发送{}, 请检查"
|
||||
|
||||
|
@ -4840,7 +4878,9 @@ msgid "test_phone is required"
|
|||
msgstr "测试手机号 该字段是必填项。"
|
||||
|
||||
#: settings/apps.py:7
|
||||
msgid "Settings"
|
||||
#, fuzzy
|
||||
#| msgid "Settings"
|
||||
msgid "App Settings"
|
||||
msgstr "系统设置"
|
||||
|
||||
#: settings/models.py:36 users/models/preference.py:14
|
||||
|
@ -4915,6 +4955,10 @@ msgstr "其它设置"
|
|||
msgid "Chat prompt"
|
||||
msgstr "聊天提示"
|
||||
|
||||
#: settings/serializers/auth/base.py:10
|
||||
msgid "Authentication"
|
||||
msgstr "认证"
|
||||
|
||||
#: settings/serializers/auth/base.py:12
|
||||
msgid "LDAP Auth"
|
||||
msgstr "LDAP 认证"
|
||||
|
@ -5286,7 +5330,7 @@ msgstr "验证码长度"
|
|||
|
||||
#: settings/serializers/auth/sms.py:27 settings/serializers/auth/sms.py:49
|
||||
#: settings/serializers/auth/sms.py:57 settings/serializers/auth/sms.py:66
|
||||
#: settings/serializers/auth/sms.py:77 settings/serializers/msg.py:76
|
||||
#: settings/serializers/auth/sms.py:77 settings/serializers/msg.py:83
|
||||
msgid "Signature"
|
||||
msgstr "签名"
|
||||
|
||||
|
@ -5568,90 +5612,84 @@ msgstr "虚拟应用"
|
|||
msgid "Enable virtual app"
|
||||
msgstr "启用虚拟应用"
|
||||
|
||||
#: settings/serializers/msg.py:24
|
||||
msgid "SMTP host"
|
||||
#: settings/serializers/msg.py:25
|
||||
#, fuzzy
|
||||
#| msgid "SMTP host"
|
||||
msgid "SMTP"
|
||||
msgstr "SMTP 主机"
|
||||
|
||||
#: settings/serializers/msg.py:25
|
||||
msgid "SMTP port"
|
||||
msgstr "SMTP 端口"
|
||||
|
||||
#: settings/serializers/msg.py:26
|
||||
msgid "SMTP account"
|
||||
msgstr "SMTP 账号"
|
||||
msgid "EXCHANGE"
|
||||
msgstr ""
|
||||
|
||||
#: settings/serializers/msg.py:28
|
||||
msgid "SMTP password"
|
||||
msgstr "SMTP 密码"
|
||||
|
||||
#: settings/serializers/msg.py:29
|
||||
#: settings/serializers/msg.py:36
|
||||
msgid "Tips: Some provider use token except password"
|
||||
msgstr "提示:一些邮件提供商需要输入的是授权码"
|
||||
|
||||
#: settings/serializers/msg.py:32
|
||||
#: settings/serializers/msg.py:39
|
||||
msgid "Send user"
|
||||
msgstr "发件人"
|
||||
|
||||
#: settings/serializers/msg.py:33
|
||||
#: settings/serializers/msg.py:40
|
||||
msgid "Tips: Send mail account, default SMTP account as the send account"
|
||||
msgstr "提示:发送邮件账号,默认使用 SMTP 账号作为发送账号"
|
||||
|
||||
#: settings/serializers/msg.py:36
|
||||
#: settings/serializers/msg.py:43
|
||||
msgid "Test recipient"
|
||||
msgstr "测试收件人"
|
||||
|
||||
#: settings/serializers/msg.py:37
|
||||
#: settings/serializers/msg.py:44
|
||||
msgid "Tips: Used only as a test mail recipient"
|
||||
msgstr "提示:仅用来作为测试邮件收件人"
|
||||
|
||||
#: settings/serializers/msg.py:41
|
||||
#: settings/serializers/msg.py:48
|
||||
msgid "If SMTP port is 465, may be select"
|
||||
msgstr "如果SMTP端口是465,通常需要启用 SSL"
|
||||
|
||||
#: settings/serializers/msg.py:44
|
||||
#: settings/serializers/msg.py:51
|
||||
msgid "Use TLS"
|
||||
msgstr "使用 TLS"
|
||||
|
||||
#: settings/serializers/msg.py:45
|
||||
#: settings/serializers/msg.py:52
|
||||
msgid "If SMTP port is 587, may be select"
|
||||
msgstr "如果SMTP端口是587,通常需要启用 TLS"
|
||||
|
||||
#: settings/serializers/msg.py:48
|
||||
#: settings/serializers/msg.py:55
|
||||
msgid "Subject prefix"
|
||||
msgstr "主题前缀"
|
||||
|
||||
#: settings/serializers/msg.py:51
|
||||
#: settings/serializers/msg.py:58
|
||||
msgid "Email suffix"
|
||||
msgstr "邮件后缀"
|
||||
|
||||
#: settings/serializers/msg.py:52
|
||||
#: settings/serializers/msg.py:59
|
||||
msgid ""
|
||||
"This is used by default if no email is returned during SSO authentication"
|
||||
msgstr "SSO认证时,如果没有返回邮件地址,将使用该后缀"
|
||||
|
||||
#: settings/serializers/msg.py:61
|
||||
#: settings/serializers/msg.py:68
|
||||
msgid "Create user email subject"
|
||||
msgstr "邮件主题"
|
||||
|
||||
#: settings/serializers/msg.py:62
|
||||
#: settings/serializers/msg.py:69
|
||||
msgid ""
|
||||
"Tips: When creating a user, send the subject of the email (eg:Create account "
|
||||
"successfully)"
|
||||
msgstr "提示: 创建用户时,发送设置密码邮件的主题 (例如: 创建用户成功)"
|
||||
|
||||
#: settings/serializers/msg.py:66
|
||||
#: settings/serializers/msg.py:73
|
||||
msgid "Create user honorific"
|
||||
msgstr "邮件问候语"
|
||||
|
||||
#: settings/serializers/msg.py:67
|
||||
#: settings/serializers/msg.py:74
|
||||
msgid "Tips: When creating a user, send the honorific of the email (eg:Hello)"
|
||||
msgstr "提示: 创建用户时,发送设置密码邮件的敬语 (例如: 你好)"
|
||||
|
||||
#: settings/serializers/msg.py:71
|
||||
#: settings/serializers/msg.py:78
|
||||
msgid "Create user email content"
|
||||
msgstr "邮件的内容"
|
||||
|
||||
#: settings/serializers/msg.py:73
|
||||
#: settings/serializers/msg.py:80
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Tips: When creating a user, send the content of the email, support "
|
||||
|
@ -5659,7 +5697,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"提示: 创建用户时,发送设置密码邮件的内容, 支持 {username} {name} {email} 标签"
|
||||
|
||||
#: settings/serializers/msg.py:77
|
||||
#: settings/serializers/msg.py:84
|
||||
msgid "Tips: Email signature (eg:jumpserver)"
|
||||
msgstr "邮件署名 (如:jumpserver)"
|
||||
|
||||
|
@ -6370,7 +6408,9 @@ msgid "Secure session sharing settings is disabled"
|
|||
msgstr "未开启会话共享"
|
||||
|
||||
#: terminal/apps.py:9
|
||||
msgid "Terminals"
|
||||
#, fuzzy
|
||||
#| msgid "Terminals"
|
||||
msgid "App Terminals"
|
||||
msgstr "终端管理"
|
||||
|
||||
#: terminal/backends/command/models.py:19
|
||||
|
@ -7212,7 +7252,9 @@ msgid "Applicant"
|
|||
msgstr "申请人"
|
||||
|
||||
#: tickets/apps.py:7
|
||||
msgid "Tickets"
|
||||
#, fuzzy
|
||||
#| msgid "Tickets"
|
||||
msgid "App Tickets"
|
||||
msgstr "工单管理"
|
||||
|
||||
#: tickets/const.py:9
|
||||
|
@ -7552,6 +7594,12 @@ msgstr "不能邀请自己"
|
|||
msgid "Could not reset self otp, use profile reset instead"
|
||||
msgstr "不能在该页面重置 MFA 多因子认证, 请去个人信息页面重置"
|
||||
|
||||
#: users/apps.py:9
|
||||
#, fuzzy
|
||||
#| msgid "App assets"
|
||||
msgid "App Users"
|
||||
msgstr "资产管理"
|
||||
|
||||
#: users/const.py:10
|
||||
msgid "System administrator"
|
||||
msgstr "系统管理员"
|
||||
|
@ -7696,7 +7744,7 @@ msgstr "用户设置"
|
|||
msgid "Force enable"
|
||||
msgstr "强制启用"
|
||||
|
||||
#: users/models/user.py:812 users/serializers/user.py:169
|
||||
#: users/models/user.py:812 users/serializers/user.py:172
|
||||
msgid "Is service account"
|
||||
msgstr "服务账号"
|
||||
|
||||
|
@ -7719,7 +7767,7 @@ msgstr "OTP 密钥"
|
|||
# msgid "Private key"
|
||||
# msgstr "ssh私钥"
|
||||
#: users/models/user.py:838 users/serializers/profile.py:128
|
||||
#: users/serializers/user.py:166
|
||||
#: users/serializers/user.py:169
|
||||
msgid "Is first login"
|
||||
msgstr "首次登录"
|
||||
|
||||
|
@ -7909,7 +7957,7 @@ msgstr "强制 MFA"
|
|||
msgid "Login blocked"
|
||||
msgstr "登录被锁定"
|
||||
|
||||
#: users/serializers/user.py:99 users/serializers/user.py:175
|
||||
#: users/serializers/user.py:99 users/serializers/user.py:178
|
||||
msgid "Is OTP bound"
|
||||
msgstr "是否绑定了虚拟 MFA"
|
||||
|
||||
|
@ -7917,27 +7965,31 @@ msgstr "是否绑定了虚拟 MFA"
|
|||
msgid "Can public key authentication"
|
||||
msgstr "可以使用公钥认证"
|
||||
|
||||
#: users/serializers/user.py:170
|
||||
#: users/serializers/user.py:166
|
||||
msgid "Groups"
|
||||
msgstr ""
|
||||
|
||||
#: users/serializers/user.py:173
|
||||
msgid "Is org admin"
|
||||
msgstr "组织管理员"
|
||||
|
||||
#: users/serializers/user.py:172
|
||||
#: users/serializers/user.py:175
|
||||
msgid "Avatar url"
|
||||
msgstr "头像路径"
|
||||
|
||||
#: users/serializers/user.py:176
|
||||
#: users/serializers/user.py:179
|
||||
msgid "MFA level"
|
||||
msgstr "MFA 级别"
|
||||
|
||||
#: users/serializers/user.py:287
|
||||
#: users/serializers/user.py:290
|
||||
msgid "Select users"
|
||||
msgstr "选择用户"
|
||||
|
||||
#: users/serializers/user.py:288
|
||||
#: users/serializers/user.py:291
|
||||
msgid "For security, only list several users"
|
||||
msgstr "为了安全,仅列出几个用户"
|
||||
|
||||
#: users/serializers/user.py:321
|
||||
#: users/serializers/user.py:324
|
||||
msgid "name not unique"
|
||||
msgstr "名称重复"
|
||||
|
||||
|
@ -8193,7 +8245,7 @@ msgstr "MFA(OTP) 禁用成功,返回登录页面"
|
|||
msgid "Password invalid"
|
||||
msgstr "用户名或密码无效"
|
||||
|
||||
#: users/views/profile/reset.py:64
|
||||
#: users/views/profile/reset.py:65
|
||||
msgid ""
|
||||
"Non-local users can log in only from third-party platforms and cannot change "
|
||||
"their passwords: {}"
|
||||
|
@ -8915,6 +8967,18 @@ msgstr "企业专业版"
|
|||
msgid "Ultimate edition"
|
||||
msgstr "企业旗舰版"
|
||||
|
||||
#~ msgid "Applications"
|
||||
#~ msgstr "应用管理"
|
||||
|
||||
#~ msgid "SMTP port"
|
||||
#~ msgstr "SMTP 端口"
|
||||
|
||||
#~ msgid "SMTP account"
|
||||
#~ msgstr "SMTP 账号"
|
||||
|
||||
#~ msgid "SMTP password"
|
||||
#~ msgstr "SMTP 密码"
|
||||
|
||||
#~ msgid "Password can not contains `{{` or `}}`"
|
||||
#~ msgstr "密码不能包含 `{{` 或 `}}` 字符"
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -45,7 +45,7 @@
|
|||
"Action": "动作",
|
||||
"ActionCount": "动作数量",
|
||||
"ActionSetting": "动作设置",
|
||||
"Actions": "权限",
|
||||
"Actions": "动作",
|
||||
"ActionsTips": "各个权限作用协议不尽相同,点击权限后面的图标查看",
|
||||
"Activate": "激活",
|
||||
"ActivateSuccessMsg": "激活成功",
|
|
@ -22,6 +22,7 @@
|
|||
"CLI": "CLI",
|
||||
"CLI font size": "CLI font size",
|
||||
"Cancel": "Cancel",
|
||||
"Charset": "Character Set",
|
||||
"Checkbox": "Checkbox",
|
||||
"Choose a User": "Choose a User",
|
||||
"Click to copy": "Click to copy",
|
||||
|
@ -47,6 +48,7 @@
|
|||
"Current online": "Current online",
|
||||
"Current session": "Current session",
|
||||
"Database": "Database",
|
||||
"Database connect info": "Database Connection Information",
|
||||
"Database disabled": "This type of connection is not supported, please contact an administrator.",
|
||||
"Database info": "Database info",
|
||||
"Database token help text": "The database type token that the client connects to will be cached by the component for 5 minutes, which means that the token will not be invalidated immediately after it is used, but five minutes after the client disconnects",
|
||||
|
@ -66,8 +68,11 @@
|
|||
"Expand all": "Expand all",
|
||||
"Expand all asset": "Expand all assets under the current node",
|
||||
"Expire time": "Expire time",
|
||||
"Failed to open address": "Failed to Open Address",
|
||||
"Favorite": "Favorite",
|
||||
"File Manager": "File Manager",
|
||||
"Fold": "Collapse",
|
||||
"Fold all": "Collapse All",
|
||||
"Force refresh": "Force refresh",
|
||||
"Found": "Found",
|
||||
"French keyboard layout": "French (Azerty)",
|
||||
|
@ -127,6 +132,7 @@
|
|||
"RDP Client": "RDP Client",
|
||||
"RDP File": "RDP File",
|
||||
"RDP client options": "RDP client options",
|
||||
"RDP color quality": "RDP Color Quality",
|
||||
"RDP resolution": "RDP resolution",
|
||||
"RDP smart size": "RDP smart size",
|
||||
"Re-use for a long time after opening": "Re-use for a long time after opening",
|
||||
|
@ -161,12 +167,14 @@
|
|||
"Split connect number": "One session can support up to three split screen connection",
|
||||
"Split vertically": "Split vertically",
|
||||
"Start Time: ": "Start time: {{value}}",
|
||||
"Stop": "Stop",
|
||||
"Support": "Support",
|
||||
"Swiss French keyboard layout": "Swiss French (Qwertz)",
|
||||
"Switch to input command": "Switch to input command",
|
||||
"Switch to quick command": "Switch to quick command",
|
||||
"Tab List": "Tab List",
|
||||
"The connection method is invalid, please refresh the page": "The connection method is invalid, please refresh the page",
|
||||
"Ticket review approved for login asset": " The login audit has been approved, connect to the asset?",
|
||||
"Ticket review closed for login asset": "This login review has been closed, and the asset cannot be connected",
|
||||
"Ticket review pending for login asset": "The login asset has been submitted, waiting for review by the assignee, you can also copy the link and send it to he",
|
||||
"Ticket review rejected for login asset": "This login review has been rejected, and the asset cannot be connected",
|
||||
|
@ -177,6 +185,7 @@
|
|||
"Type tree": "Type tree",
|
||||
"UK English keyboard layout": "UK English (Qwerty)",
|
||||
"US English keyboard layout": "US English (Qwerty)",
|
||||
"User": "User",
|
||||
"User: ": "User: {{value}}",
|
||||
"Username": "Username",
|
||||
"Username@Domain": "Username@Domain",
|
|
@ -1,9 +1,10 @@
|
|||
import asyncio
|
||||
import os
|
||||
|
||||
from apps.locale.translate import LOCALE_DIR, RED
|
||||
from apps.locale.translate.manager import OtherTranslateManager, CoreTranslateManager
|
||||
from apps.locale.translate.utils import OpenAITranslate
|
||||
from _translator.const import LOCALE_DIR, RED
|
||||
from _translator.core import CoreTranslateManager
|
||||
from _translator.other import OtherTranslateManager
|
||||
from _translator.utils import OpenAITranslate
|
||||
|
||||
|
||||
class Translate:
|
||||
|
@ -22,6 +23,7 @@ class Translate:
|
|||
return dir_names
|
||||
|
||||
async def core_trans(self, dir_name):
|
||||
return
|
||||
_dir = os.path.join(LOCALE_DIR, dir_name)
|
||||
zh_file = os.path.join(_dir, 'zh', 'LC_MESSAGES', 'django.po')
|
||||
if not os.path.exists(zh_file):
|
||||
|
@ -45,6 +47,8 @@ class Translate:
|
|||
return
|
||||
|
||||
for dir_name in dir_names:
|
||||
if dir_name.startswith('_'):
|
||||
continue
|
||||
if hasattr(self, f'{dir_name}_trans'):
|
||||
await getattr(self, f'{dir_name}_trans')(dir_name)
|
||||
else:
|
|
@ -298,7 +298,7 @@ USE_TZ = True
|
|||
|
||||
# I18N translation
|
||||
LOCALE_PATHS = [
|
||||
os.path.join(BASE_DIR, 'locale', 'core'),
|
||||
os.path.join(BASE_DIR, 'i18n', 'core'),
|
||||
]
|
||||
|
||||
# Static files (CSS, JavaScript, Images)
|
||||
|
|
|
@ -5,4 +5,4 @@ from django.utils.translation import gettext_lazy as _
|
|||
class LabelsConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'labels'
|
||||
verbose_name = _('Labels')
|
||||
verbose_name = _('App Labels')
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,208 +0,0 @@
|
|||
{
|
||||
"ACL reject login asset": "このログインはアクセス制御ポリシーの制限により拒否されました",
|
||||
"Account info": "アカウント情報",
|
||||
"Account not found": "アカウントが見つかりません",
|
||||
"Account: ": "アカウント: {{value}}",
|
||||
"Action: ": "操作:",
|
||||
"Advanced option": "高度なオプション",
|
||||
"All sessions": "全セッション",
|
||||
"Applet": "リモートアプリケーション",
|
||||
"Applet connect method": "リモートアプリケーションの接続方法",
|
||||
"Are you sure to reconnect it?(RDP not support)": "再接続しますか?(RDPは暫定的にサポートしていません)",
|
||||
"Asset disabled": "この資産は無効化されています、管理者に連絡してください",
|
||||
"Asset not found or You have no permission to access it, please refresh asset tree": "資産が見つからないか、あなたがアクセスする権限がない、資産ツリーをリフレッシュしてください",
|
||||
"Asset tree loading method": "資産ツリーの読み込み方法を設定",
|
||||
"Asset: ": "資産: {{value}}",
|
||||
"Assignees": "受付人",
|
||||
"Automatic login next": "次回は自動ログイン(アセットリンクを右クリックすると再選択できます)",
|
||||
"Backspace as Ctrl+H": "バックスペースキーをCtrl+Hとして使用",
|
||||
"Batch actions": "一括操作",
|
||||
"Batch connect": "一括接続",
|
||||
"Belgian French keyboard layout": "Belgian French(Azerty)",
|
||||
"CLI": "コマンドライン",
|
||||
"CLI font size": "キャラクターターミナルのフォントサイズ",
|
||||
"Cancel": "キャンセル",
|
||||
"Charset": "文字セット",
|
||||
"Checkbox": "複数選択 ",
|
||||
"Choose a User": "ユーザーを選択",
|
||||
"Click to copy": "クリックしてコピー",
|
||||
"Client": "クライアント",
|
||||
"Clone Connect": "ウィンドウをコピー",
|
||||
"Close": "閉じる",
|
||||
"Close All Tabs": "全て閉じる",
|
||||
"Close Current Tab": "現在のウィンドウを閉じる",
|
||||
"Close Left Tabs": "左側を閉じる",
|
||||
"Close Other Tabs": "それ以外を閉じる",
|
||||
"Close Right Tabs": "右側を閉じる",
|
||||
"Close split connect": "分割画面を閉じる",
|
||||
"Command Line": "コマンドライン",
|
||||
"Command line": "コマンドラインに接続",
|
||||
"Confirm": "確認",
|
||||
"Connect": "接続",
|
||||
"Connect Method": "接続方法",
|
||||
"Connect checked": "選択した接続",
|
||||
"Connect command line": "コマンドラインへの接続",
|
||||
"Copied": "コピー済み",
|
||||
"Copy link": "リンクをコピー",
|
||||
"Current online": "現在オンライン",
|
||||
"Current session": "現在のセッション",
|
||||
"Database": "データベース",
|
||||
"Database connect info": "データベース接続情報",
|
||||
"Database disabled": "この種類の接続はサポートされていません, 管理者に連絡してください",
|
||||
"Database info": "データベース情報",
|
||||
"Database token help text": "データベース型のトークンは5分間キャッシュされます。つまり、トークンを使用してから、すぐには無効にならず、クライアントが切断されてから5分後に、このトークンは完全に無効になります。",
|
||||
"Databases": "データベース",
|
||||
"Directly": "ユーザー名は、指定された資産とアカウントに接続します",
|
||||
"Disable auto completion": "オートコンプリートを無効にする",
|
||||
"Disconnect": "接続を切断",
|
||||
"Disfavor": "お気に入り解除",
|
||||
"Do not close this page": "このページを閉じないでください",
|
||||
"Document": "文書",
|
||||
"Don't prompt again": "次回から表示しない",
|
||||
"Download": "ダウンロード",
|
||||
"Download the latest client": "最新のクライアントをダウンロード",
|
||||
"Driver redirect": "ディスクのマウント",
|
||||
"Expand": "展開",
|
||||
"Expand all": "全て展開",
|
||||
"Expand all asset": "全ての資産を展開",
|
||||
"Expire time": "有効期限",
|
||||
"Failed to open address": "アドレスの開封に失敗",
|
||||
"Favorite": "お気に入り",
|
||||
"File Manager": "ファイル管理",
|
||||
"Fold": "折りたたむ",
|
||||
"Fold all": "全て折りたたむ",
|
||||
"Force refresh": "強制的に更新",
|
||||
"Found": "発見",
|
||||
"French keyboard layout": "フレンチ(アゼルティ)",
|
||||
"Full Screen": "全画面表示",
|
||||
"Full screen": "フルスクリーン",
|
||||
"GUI": "視覚化",
|
||||
"General": "基本設定",
|
||||
"Help": "ヘルプ",
|
||||
"Help or download": "メニューヘルプ → ダウンロード",
|
||||
"Help text": "説明",
|
||||
"Hide left manager": "左のサイドバーを隠す",
|
||||
"Host": "ホスト",
|
||||
"Info": "ヒント",
|
||||
"InstallClientMsg": "JumpServerクライアントがインストールされていません、今すぐダウンロードしてインストールしますか?",
|
||||
"Japanese keyboard layout": "日本語 (Qwerty)",
|
||||
"Keyboard keys": "Option + Left / Option + Right",
|
||||
"Keyboard layout": "キーボードレイアウト",
|
||||
"Keyboard switch session": "会話を切り替え → ショートカット",
|
||||
"Kubernetes": "Kubernetes",
|
||||
"Language": "言語",
|
||||
"Last login": "前回のログイン",
|
||||
"Launch Program": "プログラムを開始",
|
||||
"LeftInfo": "コマンドレコードをクリックすると、録画を素早く見つけられます",
|
||||
"Load tree async": "非同期でアセットツリーを読み込む",
|
||||
"Loading": "読み込み中",
|
||||
"Log out": "ログアウト",
|
||||
"Login reminder": "ログインリマインダー",
|
||||
"Login review approved": "ログイン審査が通過しました, 資産へ接続中...",
|
||||
"LoginExpireMsg": "ログインが期限切れです。再度ログインしてください。",
|
||||
"Manual accounts": "手動アカウント",
|
||||
"Module": "モジュール",
|
||||
"Multi Screen": "マルチスクリーン表示",
|
||||
"My applications": "マイアプリ",
|
||||
"My assets": "私の資産",
|
||||
"Name": "名前",
|
||||
"Native": "クライアント",
|
||||
"Need review for login asset": "今回のログインは人間によるオーディットが必要です、続行しますか?",
|
||||
"Need to use": "使用が必要",
|
||||
"No": "否",
|
||||
"No account available": "使用可能なアカウントがありません",
|
||||
"No available connect method": "利用可能な接続方法がありません",
|
||||
"No matching found": "該当する項目はありません",
|
||||
"No permission": "権限がありません",
|
||||
"No protocol available": "利用可能なプロトコルがありません",
|
||||
"Not quick command": "ショートカットコマンドはありません",
|
||||
"Open in new window": "新しいウィンドウで開く",
|
||||
"Password": "パスワード",
|
||||
"Password is token password on the table": "パスワードは表のトークンパスワードです",
|
||||
"Password is your password login to system": "パスワードはあなたのログインシステムのパスワードです",
|
||||
"Pause": "一時停止",
|
||||
"Pause task has been send": "一時停止タスクは送信されました",
|
||||
"Please choose an account": "ユーザーを選択してください",
|
||||
"Please input password": "パスワードを入力してください",
|
||||
"Port": "ポート",
|
||||
"Protocol": "規約",
|
||||
"Protocol: ": "プロトコル: {{value}}",
|
||||
"RDP Client": "RDPクライアント",
|
||||
"RDP File": "RDPファイル",
|
||||
"RDP client options": "RDPクライアントオプション",
|
||||
"RDP color quality": "RDP色品質",
|
||||
"RDP resolution": "RDP解像度",
|
||||
"RDP smart size": "RDPスマートサイズ",
|
||||
"Re-use for a long time after opening": "有効にした後、この接続情報を長期間、何度でも使用できます",
|
||||
"Reconnect": "再接続",
|
||||
"Refresh": "更新",
|
||||
"Remember password": "パスワードを保持",
|
||||
"Remember select": "選択を記憶",
|
||||
"Remote apps": "リモートアプリケーション",
|
||||
"Reselect connection method": "接続方法を再選択可能",
|
||||
"Resume": "回復",
|
||||
"Resume task has been send": "復旧タスクが送信されました",
|
||||
"Right click asset": "資産を右クリック → 接続",
|
||||
"Right click node": "ノードを右クリック→全て展開",
|
||||
"Right mouse quick paste": "右クリックで速やかにペースト",
|
||||
"Run it by client": "クライアントで実行",
|
||||
"SQL Client": "SQLクライアント",
|
||||
"Save command": "コマンドを保存",
|
||||
"Save success": "保存が成功しました",
|
||||
"Search": "検索",
|
||||
"Select account": "アカウントを選択",
|
||||
"Send command": "コマンドを送信",
|
||||
"Send text to all ssh terminals": "全てのssh端末にテキストを送信",
|
||||
"Set reusable": "再利用を開始",
|
||||
"Setting": "設定",
|
||||
"Settings or basic settings": "メニュー設定 → 基本設定",
|
||||
"Show left manager": "左側のバーを表示",
|
||||
"Skip": "スキップ",
|
||||
"Skip manual password": "手動パスワードウィンドウをスキップ",
|
||||
"Special accounts": "特別なアカウント",
|
||||
"Speed": "速度",
|
||||
"Split connect": "スプリット画面で接続",
|
||||
"Split connect number": "1セッションに最大3つの分割接続が可能",
|
||||
"Split vertically": "垂直分割スクリーン",
|
||||
"Start Time: ": "開始時間:{{value}}",
|
||||
"Stop": "停止",
|
||||
"Support": "サポート",
|
||||
"Swiss French keyboard layout": "スイスフレンチ(Qwertz)",
|
||||
"Switch to input command": "コマンド入力に切り替え",
|
||||
"Switch to quick command": "ショートカットコマンドに切り替え",
|
||||
"Tab List": "ウィンドウリスト",
|
||||
"The connection method is invalid, please refresh the page": "接続方法が無効になりました、ページを更新してください",
|
||||
"Ticket review approved for login asset": "このログイン審査は通過しました, 資産に接続しますか?",
|
||||
"Ticket review closed for login asset": "このログイン監査は閉じられ、リソースに接続できません",
|
||||
"Ticket review pending for login asset": "ログイン申請が提出され、審査者の審査を待っています。リンクをコピーして彼に送ることもできます",
|
||||
"Ticket review rejected for login asset": "今回のログイン審査は拒否され、資産に接続できません",
|
||||
"Tips": "ヒント",
|
||||
"Token expired": "トークンの有効期限が切れました、再接続してください",
|
||||
"Tool download": "ツールのダウンロード",
|
||||
"Turkey keyboard layout": "Turkish-Q(Qwerty)",
|
||||
"Type tree": "タイプツリー",
|
||||
"UK English keyboard layout": "イギリス英語 (Qwerty)",
|
||||
"US English keyboard layout": "US English (Qwerty)",
|
||||
"User": "ユーザー",
|
||||
"User: ": "ユーザー: {{value}}",
|
||||
"Username": "ユーザー名",
|
||||
"Username@Domain": "ユーザ名@ADドメイン",
|
||||
"Users": "ユーザー",
|
||||
"Using token": "トークンを使用",
|
||||
"View": "ビュー",
|
||||
"VirtualApp": "仮想アプリケーション",
|
||||
"Web Terminal": "Web端末",
|
||||
"Website": "公式ウェブサイト",
|
||||
"With secret accounts": "ホストアカウント",
|
||||
"Yes": "はい",
|
||||
"asset": "アセット",
|
||||
"cols": "列数",
|
||||
"confirm": "確認",
|
||||
"connect info": "接続情報",
|
||||
"download": "ダウンロード",
|
||||
"rows": "行数",
|
||||
"start time": "開始時間",
|
||||
"success": "成功",
|
||||
"system user": "システムユーザー",
|
||||
"user": "ユーザー"
|
||||
}
|
|
@ -1,2 +0,0 @@
|
|||
from .core import *
|
||||
from .other import *
|
|
@ -4,7 +4,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
class NotificationsConfig(AppConfig):
|
||||
name = 'notifications'
|
||||
verbose_name = _('Notifications')
|
||||
verbose_name = _('App Notifications')
|
||||
|
||||
def ready(self):
|
||||
from . import signal_handlers # noqa
|
||||
|
|
|
@ -6,7 +6,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
class OpsConfig(AppConfig):
|
||||
name = 'ops'
|
||||
verbose_name = _('App ops')
|
||||
verbose_name = _('App Ops')
|
||||
|
||||
def ready(self):
|
||||
from orgs.models import Organization
|
||||
|
|
|
@ -4,7 +4,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
class OrgsConfig(AppConfig):
|
||||
name = 'orgs'
|
||||
verbose_name = _('App organizations')
|
||||
verbose_name = _('App Organizations')
|
||||
|
||||
def ready(self):
|
||||
from . import signal_handlers # noqa
|
||||
|
|
|
@ -6,7 +6,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
class PermsConfig(AppConfig):
|
||||
name = 'perms'
|
||||
verbose_name = _('App permissions')
|
||||
verbose_name = _('App Permissions')
|
||||
|
||||
def ready(self):
|
||||
from . import signal_handlers # noqa
|
||||
|
|
|
@ -4,7 +4,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
class RBACConfig(AppConfig):
|
||||
name = 'rbac'
|
||||
verbose_name = _('RBAC')
|
||||
verbose_name = _('App RBAC')
|
||||
|
||||
def ready(self):
|
||||
from . import signal_handlers # noqa
|
||||
|
|
|
@ -14,9 +14,13 @@ class ComponentI18nApi(RetrieveAPIView):
|
|||
|
||||
def retrieve(self, request, *args, **kwargs):
|
||||
name = kwargs.get('name')
|
||||
component_dir = safe_join(settings.APPS_DIR, 'locale', name)
|
||||
component_dir = safe_join(settings.APPS_DIR, 'i18n', name)
|
||||
lang = request.query_params.get('lang')
|
||||
files = os.listdir(component_dir)
|
||||
|
||||
if os.path.exists(component_dir):
|
||||
files = os.listdir(component_dir)
|
||||
else:
|
||||
files = []
|
||||
data = {}
|
||||
for file in files:
|
||||
if not file.endswith('.json'):
|
||||
|
|
|
@ -4,7 +4,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
class SettingsConfig(AppConfig):
|
||||
name = 'settings'
|
||||
verbose_name = _('Settings')
|
||||
verbose_name = _('App Settings')
|
||||
|
||||
def ready(self):
|
||||
from . import signal_handlers # noqa
|
||||
|
|
|
@ -6,7 +6,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
class TerminalConfig(AppConfig):
|
||||
name = 'terminal'
|
||||
verbose_name = _('Terminals')
|
||||
verbose_name = _('App Terminals')
|
||||
|
||||
def ready(self):
|
||||
from . import signal_handlers # noqa
|
||||
|
|
|
@ -4,7 +4,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
class TicketsConfig(AppConfig):
|
||||
name = 'tickets'
|
||||
verbose_name = _('Tickets')
|
||||
verbose_name = _('App Tickets')
|
||||
|
||||
def ready(self):
|
||||
from . import signal_handlers # noqa
|
||||
|
|
|
@ -6,7 +6,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
class UsersConfig(AppConfig):
|
||||
name = 'users'
|
||||
verbose_name = _('Users')
|
||||
verbose_name = _('App Users')
|
||||
|
||||
def ready(self):
|
||||
from . import signal_handlers # noqa
|
||||
|
|
2
jms
2
jms
|
@ -101,7 +101,7 @@ def collect_static():
|
|||
|
||||
|
||||
def compile_i18n_file():
|
||||
django_mo_file = os.path.join(BASE_DIR, 'apps', 'locale', 'zh', 'LC_MESSAGES', 'django.mo')
|
||||
django_mo_file = os.path.join(BASE_DIR, 'apps', 'core', 'locale', 'zh', 'LC_MESSAGES', 'django.mo')
|
||||
if os.path.exists(django_mo_file):
|
||||
return
|
||||
os.chdir(os.path.join(BASE_DIR, 'apps'))
|
||||
|
|
Loading…
Reference in New Issue