Browse Source

perf: 修改优化结构 (#12554)

* perf: 修改优化结构

* perf: 修改结构

---------

Co-authored-by: ibuler <ibuler@qq.com>
pull/12557/head
fit2bot 10 months ago committed by GitHub
parent
commit
9968617758
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 1
      apps/accounts/apps.py
  2. 2
      apps/acls/apps.py
  3. 2
      apps/applications/apps.py
  4. 2
      apps/assets/apps.py
  5. 2
      apps/audits/apps.py
  6. 2
      apps/authentication/apps.py
  7. 0
      apps/i18n/_translator/__init__.py
  8. 5
      apps/i18n/_translator/base.py
  9. 0
      apps/i18n/_translator/const.py
  10. 2
      apps/i18n/_translator/core.py
  11. 2
      apps/i18n/_translator/other.py
  12. 5
      apps/i18n/_translator/utils.py
  13. 0
      apps/i18n/core/ja/LC_MESSAGES/django.mo
  14. 0
      apps/i18n/core/ja/LC_MESSAGES/django.po
  15. 0
      apps/i18n/core/ja/LC_MESSAGES/djangojs.mo
  16. 0
      apps/i18n/core/ja/LC_MESSAGES/djangojs.po
  17. 0
      apps/i18n/core/zh/LC_MESSAGES/django.mo
  18. 302
      apps/i18n/core/zh/LC_MESSAGES/django.po
  19. 0
      apps/i18n/core/zh/LC_MESSAGES/djangojs.mo
  20. 0
      apps/i18n/core/zh/LC_MESSAGES/djangojs.po
  21. 1846
      apps/i18n/lina/en.json
  22. 2
      apps/i18n/lina/zh.json
  23. 9
      apps/i18n/luna/en.json
  24. 0
      apps/i18n/luna/zh.json
  25. 0
      apps/i18n/sort_json.py
  26. 10
      apps/i18n/translate.py
  27. 2
      apps/jumpserver/settings/base.py
  28. 2
      apps/labels/apps.py
  29. 1870
      apps/locale/lina/en.json
  30. 1846
      apps/locale/lina/ja.json
  31. 208
      apps/locale/luna/ja.json
  32. 2
      apps/locale/translate/manager/__init__.py
  33. 2
      apps/notifications/apps.py
  34. 2
      apps/ops/apps.py
  35. 2
      apps/orgs/apps.py
  36. 2
      apps/perms/apps.py
  37. 2
      apps/rbac/apps.py
  38. 8
      apps/settings/api/i18n.py
  39. 2
      apps/settings/apps.py
  40. 2
      apps/terminal/apps.py
  41. 2
      apps/tickets/apps.py
  42. 2
      apps/users/apps.py
  43. 2
      jms

1
apps/accounts/apps.py

@ -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

2
apps/acls/apps.py

@ -4,4 +4,4 @@ from django.utils.translation import gettext_lazy as _
class AclsConfig(AppConfig):
name = 'acls'
verbose_name = _('Acls')
verbose_name = _('App Acls')

2
apps/applications/apps.py

@ -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()

2
apps/assets/apps.py

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

2
apps/audits/apps.py

@ -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

2
apps/authentication/apps.py

@ -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

0
apps/i18n/_translator/__init__.py

5
apps/locale/translate/manager/base.py → apps/i18n/_translator/base.py

@ -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):

0
apps/locale/translate/__init__.py → apps/i18n/_translator/const.py

2
apps/locale/translate/manager/core.py → apps/i18n/_translator/core.py

@ -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):

2
apps/locale/translate/manager/other.py → apps/i18n/_translator/other.py

@ -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):

5
apps/locale/translate/utils.py → apps/i18n/_translator/utils.py

@ -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",

0
apps/locale/core/ja/LC_MESSAGES/django.mo → apps/i18n/core/ja/LC_MESSAGES/django.mo

0
apps/locale/core/ja/LC_MESSAGES/django.po → apps/i18n/core/ja/LC_MESSAGES/django.po

0
apps/locale/core/ja/LC_MESSAGES/djangojs.mo → apps/i18n/core/ja/LC_MESSAGES/djangojs.mo

0
apps/locale/core/ja/LC_MESSAGES/djangojs.po → apps/i18n/core/ja/LC_MESSAGES/djangojs.po

0
apps/locale/core/zh/LC_MESSAGES/django.mo → apps/i18n/core/zh/LC_MESSAGES/django.mo

302
apps/locale/core/zh/LC_MESSAGES/django.po → apps/i18n/core/zh/LC_MESSAGES/django.po

@ -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"
msgstr "SMTP 主机"
#: settings/serializers/msg.py:25
msgid "SMTP port"
msgstr "SMTP 端口"
#, fuzzy
#| msgid "SMTP host"
msgid "SMTP"
msgstr "SMTP 主机"
#: settings/serializers/msg.py:26
msgid "SMTP account"
msgstr "SMTP 账号"
#: settings/serializers/msg.py:28
msgid "SMTP password"
msgstr "SMTP 密码"
msgid "EXCHANGE"
msgstr ""
#: 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 "密码不能包含 `{{` 或 `}}` 字符"

0
apps/locale/core/zh/LC_MESSAGES/djangojs.mo → apps/i18n/core/zh/LC_MESSAGES/djangojs.mo

0
apps/locale/core/zh/LC_MESSAGES/djangojs.po → apps/i18n/core/zh/LC_MESSAGES/djangojs.po

1846
apps/i18n/lina/en.json

File diff suppressed because it is too large Load Diff

2
apps/locale/lina/zh.json → apps/i18n/lina/zh.json

@ -45,7 +45,7 @@
"Action": "动作",
"ActionCount": "动作数量",
"ActionSetting": "动作设置",
"Actions": "权限",
"Actions": "动作",
"ActionsTips": "各个权限作用协议不尽相同,点击权限后面的图标查看",
"Activate": "激活",
"ActivateSuccessMsg": "激活成功",

9
apps/locale/luna/en.json → apps/i18n/luna/en.json

@ -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",

0
apps/locale/luna/zh.json → apps/i18n/luna/zh.json

0
apps/locale/sort_json.py → apps/i18n/sort_json.py

10
apps/locale/translate/main.py → apps/i18n/translate.py

@ -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:

2
apps/jumpserver/settings/base.py

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

2
apps/labels/apps.py

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

1870
apps/locale/lina/en.json

File diff suppressed because it is too large Load Diff

1846
apps/locale/lina/ja.json

File diff suppressed because it is too large Load Diff

208
apps/locale/luna/ja.json

@ -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": "ユーザー"
}

2
apps/locale/translate/manager/__init__.py

@ -1,2 +0,0 @@
from .core import *
from .other import *

2
apps/notifications/apps.py

@ -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

2
apps/ops/apps.py

@ -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

2
apps/orgs/apps.py

@ -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

2
apps/perms/apps.py

@ -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

2
apps/rbac/apps.py

@ -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

8
apps/settings/api/i18n.py

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

2
apps/settings/apps.py

@ -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

2
apps/terminal/apps.py

@ -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

2
apps/tickets/apps.py

@ -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

2
apps/users/apps.py

@ -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

@ -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…
Cancel
Save