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')
 | 
			
		||||
 | 
			
		||||
        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