From 39e618c12760995175c456dbb6124921a6b15d06 Mon Sep 17 00:00:00 2001 From: fit2bot <68588906+fit2bot@users.noreply.github.com> Date: Sun, 19 Mar 2023 23:55:16 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E8=B5=84=E4=BA=A7=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=B9=B3=E5=8F=B0=20(#10013)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: feng <1304903146@qq.com> --- apps/assets/api/asset/asset.py | 32 ++++- apps/assets/notifications.py | 25 ++++ apps/locale/ja/LC_MESSAGES/django.mo | 4 +- apps/locale/ja/LC_MESSAGES/django.po | 207 ++++++++++++++------------- apps/locale/zh/LC_MESSAGES/django.mo | 4 +- apps/locale/zh/LC_MESSAGES/django.po | 205 +++++++++++++------------- 6 files changed, 273 insertions(+), 204 deletions(-) create mode 100644 apps/assets/notifications.py diff --git a/apps/assets/api/asset/asset.py b/apps/assets/api/asset/asset.py index c917e09d9..1e887e572 100644 --- a/apps/assets/api/asset/asset.py +++ b/apps/assets/api/asset/asset.py @@ -2,15 +2,17 @@ # import django_filters from django.db.models import Q +from django.shortcuts import get_object_or_404 from django.utils.translation import gettext as _ from rest_framework.decorators import action from rest_framework.response import Response +from rest_framework.status import HTTP_200_OK from accounts.tasks import push_accounts_to_assets_task, verify_accounts_connectivity_task from assets import serializers from assets.exceptions import NotSupportedTemporarilyError from assets.filters import IpInFilterBackend, LabelFilterBackend, NodeFilterBackend -from assets.models import Asset, Gateway +from assets.models import Asset, Gateway, Platform from assets.tasks import test_assets_connectivity_manual, update_assets_hardware_info_manual from common.api import SuggestionMixin from common.drf.filters import BaseFilterSet @@ -18,6 +20,7 @@ from common.utils import get_logger, is_uuid from orgs.mixins import generics from orgs.mixins.api import OrgBulkModelViewSet from ..mixin import NodeFilterMixin +from ...notifications import BulkUpdatePlatformSkipAssetUserMsg logger = get_logger(__file__) __all__ = [ @@ -109,6 +112,7 @@ class AssetViewSet(SuggestionMixin, NodeFilterMixin, OrgBulkModelViewSet): ("info", "assets.view_asset"), ) extra_filter_backends = [LabelFilterBackend, IpInFilterBackend, NodeFilterBackend] + skip_assets = [] def get_serializer_class(self): cls = super().get_serializer_class() @@ -144,6 +148,30 @@ class AssetViewSet(SuggestionMixin, NodeFilterMixin, OrgBulkModelViewSet): return Response({'error': error}, status=400) return super().create(request, *args, **kwargs) + def filter_bulk_update_data(self): + bulk_data = [] + for data in self.request.data: + pk = data.get('id') + platform = data.get('platform') + if not platform: + bulk_data.append(data) + continue + asset = get_object_or_404(Asset, pk=pk) + platform = get_object_or_404(Platform, **platform) + if platform.type == asset.type: + bulk_data.append(data) + continue + self.skip_assets.append(asset) + return bulk_data + def bulk_update(self, request, *args, **kwargs): + bulk_data = self.filter_bulk_update_data() + request._full_data = bulk_data + response = super().bulk_update(request, *args, **kwargs) + if response.status_code == HTTP_200_OK and self.skip_assets: + user = request.user + BulkUpdatePlatformSkipAssetUserMsg(user, self.skip_assets).publish() + return response + class AssetsTaskMixin: def perform_assets_task(self, serializer): @@ -155,7 +183,7 @@ class AssetsTaskMixin: else: asset = assets[0] if not asset.auto_info['ansible_enabled'] or \ - not asset.auto_info['ping_enabled']: + not asset.auto_info['ping_enabled']: raise NotSupportedTemporarilyError() task = test_assets_connectivity_manual(assets) return task diff --git a/apps/assets/notifications.py b/apps/assets/notifications.py new file mode 100644 index 000000000..14e84768e --- /dev/null +++ b/apps/assets/notifications.py @@ -0,0 +1,25 @@ +from django.utils.translation import ugettext as _ + +from notifications.notifications import UserMessage + + +class BulkUpdatePlatformSkipAssetUserMsg(UserMessage): + def __init__(self, user, assets): + super().__init__(user) + self.assets = assets + + def get_html_msg(self) -> dict: + subject = _("Batch update platform in assets, skipping assets that do not meet platform type") + message = f'
    {"".join([f"
  1. {asset}
  2. " for asset in self.assets])}
' + return { + 'subject': subject, + 'message': message + } + + @classmethod + def gen_test_msg(cls): + from users.models import User + from assets.models import Asset + user = User.objects.first() + assets = Asset.objects.all()[:10] + return cls(user, assets) \ No newline at end of file diff --git a/apps/locale/ja/LC_MESSAGES/django.mo b/apps/locale/ja/LC_MESSAGES/django.mo index 472b329b3..64397eca5 100644 --- a/apps/locale/ja/LC_MESSAGES/django.mo +++ b/apps/locale/ja/LC_MESSAGES/django.mo @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6fa80b59b9b5f95a9cfcad8ec47eacd519bb962d139ab90463795a7b306a0a72 -size 137935 +oid sha256:03f75000def71efcfb08e7c1ee8122f6997b1f82be6cb747b52c33aa8b75a7bf +size 138164 diff --git a/apps/locale/ja/LC_MESSAGES/django.po b/apps/locale/ja/LC_MESSAGES/django.po index d4b4ecc20..3abb73d5a 100644 --- a/apps/locale/ja/LC_MESSAGES/django.po +++ b/apps/locale/ja/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-14 17:34+0800\n" +"POT-Creation-Date: 2023-03-19 23:52+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -169,7 +169,7 @@ msgstr "作成のみ" #: assets/models/cmd_filter.py:36 assets/serializers/domain.py:19 #: assets/serializers/label.py:27 audits/models.py:48 #: authentication/models/connection_token.py:33 -#: perms/models/asset_permission.py:64 perms/serializers/permission.py:35 +#: perms/models/asset_permission.py:64 perms/serializers/permission.py:34 #: terminal/backends/command/models.py:20 terminal/models/session/session.py:32 #: terminal/notifications.py:95 terminal/serializers/command.py:17 #: tickets/models/ticket/apply_asset.py:16 xpack/plugins/cloud/models.py:212 @@ -197,7 +197,7 @@ msgstr "ソース" #: acls/models/base.py:102 acls/serializers/base.py:57 #: assets/serializers/asset/common.py:131 assets/serializers/gateway.py:28 #: audits/models.py:49 ops/models/base.py:18 -#: perms/models/asset_permission.py:70 perms/serializers/permission.py:40 +#: perms/models/asset_permission.py:70 perms/serializers/permission.py:39 #: terminal/backends/command/models.py:21 terminal/models/session/session.py:34 #: tickets/models/ticket/command_confirm.py:13 xpack/plugins/cloud/models.py:85 msgid "Account" @@ -447,7 +447,7 @@ msgstr "アカウントの確認" #: assets/models/group.py:20 assets/models/label.py:18 #: assets/models/platform.py:21 assets/models/platform.py:76 #: assets/serializers/asset/common.py:74 assets/serializers/asset/common.py:151 -#: assets/serializers/platform.py:133 +#: assets/serializers/platform.py:132 #: authentication/serializers/connect_token_secret.py:103 ops/mixin.py:21 #: ops/models/adhoc.py:21 ops/models/celery.py:15 ops/models/celery.py:57 #: ops/models/job.py:91 ops/models/playbook.py:23 ops/serializers/job.py:19 @@ -533,7 +533,7 @@ msgstr "エスクローされたパスワード" #: accounts/serializers/account/account.py:75 applications/models.py:11 #: assets/models/label.py:21 assets/models/platform.py:77 #: assets/serializers/asset/common.py:127 assets/serializers/cagegory.py:8 -#: assets/serializers/platform.py:94 assets/serializers/platform.py:134 +#: assets/serializers/platform.py:93 assets/serializers/platform.py:133 #: perms/serializers/user_permission.py:26 settings/models.py:35 #: tickets/models/ticket/apply_application.py:13 msgid "Category" @@ -544,7 +544,7 @@ msgstr "カテゴリ" #: acls/serializers/command_acl.py:18 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:78 -#: assets/serializers/asset/common.py:128 assets/serializers/platform.py:93 +#: assets/serializers/asset/common.py:128 assets/serializers/platform.py:92 #: audits/serializers.py:48 #: authentication/serializers/connect_token_secret.py:116 ops/models/job.py:102 #: perms/serializers/user_permission.py:27 terminal/models/applet/applet.py:31 @@ -562,6 +562,30 @@ msgstr "タイプ" msgid "Asset not found" msgstr "資産が存在しません" +#: accounts/serializers/account/account.py:144 acls/models/base.py:98 +#: acls/models/login_acl.py:13 acls/serializers/base.py:55 +#: acls/serializers/login_acl.py:21 assets/models/cmd_filter.py:24 +#: assets/models/label.py:16 audits/models.py:44 audits/models.py:63 +#: audits/models.py:141 authentication/models/connection_token.py:29 +#: authentication/models/sso_token.py:16 +#: notifications/models/notification.py:12 +#: perms/api/user_permission/mixin.py:55 perms/models/asset_permission.py:58 +#: perms/serializers/permission.py:30 rbac/builtin.py:122 +#: rbac/models/rolebinding.py:49 terminal/backends/command/models.py:19 +#: terminal/models/session/session.py:30 terminal/models/session/sharing.py:32 +#: terminal/notifications.py:96 terminal/notifications.py:144 +#: terminal/serializers/command.py:16 tickets/models/comment.py:21 +#: users/const.py:14 users/models/user.py:911 users/models/user.py:942 +#: users/serializers/group.py:18 +msgid "User" +msgstr "ユーザー" + +#: accounts/serializers/account/account.py:145 +#: authentication/templates/authentication/_access_key_modal.html:33 +#: terminal/notifications.py:98 terminal/notifications.py:146 +msgid "Date" +msgstr "日付" + #: accounts/serializers/account/backup.py:31 #: accounts/serializers/automations/base.py:36 #: assets/serializers/automations/base.py:34 ops/mixin.py:23 ops/mixin.py:103 @@ -592,7 +616,7 @@ msgid "Key password" msgstr "キーパスワード" #: accounts/serializers/account/base.py:81 -#: assets/serializers/asset/common.py:301 +#: assets/serializers/asset/common.py:303 msgid "Spec info" msgstr "特別情報" @@ -733,24 +757,6 @@ msgstr "レビュー担当者" msgid "Active" msgstr "アクティブ" -#: acls/models/base.py:98 acls/models/login_acl.py:13 -#: acls/serializers/base.py:55 acls/serializers/login_acl.py:21 -#: assets/models/cmd_filter.py:24 assets/models/label.py:16 audits/models.py:44 -#: audits/models.py:63 audits/models.py:141 -#: authentication/models/connection_token.py:29 -#: authentication/models/sso_token.py:16 -#: notifications/models/notification.py:12 -#: perms/api/user_permission/mixin.py:55 perms/models/asset_permission.py:58 -#: perms/serializers/permission.py:31 rbac/builtin.py:122 -#: rbac/models/rolebinding.py:49 terminal/backends/command/models.py:19 -#: terminal/models/session/session.py:30 terminal/models/session/sharing.py:32 -#: terminal/notifications.py:96 terminal/notifications.py:144 -#: terminal/serializers/command.py:16 tickets/models/comment.py:21 -#: users/const.py:14 users/models/user.py:911 users/models/user.py:942 -#: users/serializers/group.py:18 -msgid "User" -msgstr "ユーザー" - #: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60 #: ops/serializers/job.py:65 terminal/const.py:67 #: terminal/models/session/session.py:43 terminal/serializers/command.py:18 @@ -764,7 +770,7 @@ msgid "Regex" msgstr "正規情報" #: acls/models/command_acl.py:26 assets/models/cmd_filter.py:79 -#: settings/serializers/basic.py:10 xpack/plugins/license/models.py:29 +#: settings/serializers/basic.py:10 xpack/plugins/license/models.py:30 msgid "Content" msgstr "コンテンツ" @@ -883,7 +889,7 @@ msgstr "" #: authentication/templates/authentication/_msg_oauth_bind.html:12 #: authentication/templates/authentication/_msg_rest_password_success.html:8 #: authentication/templates/authentication/_msg_rest_public_key_success.html:8 -#: settings/serializers/terminal.py:10 terminal/serializers/endpoint.py:61 +#: settings/serializers/terminal.py:10 terminal/serializers/endpoint.py:62 msgid "IP" msgstr "IP" @@ -908,7 +914,7 @@ msgstr "アプリケーション" msgid "Can match application" msgstr "アプリケーションを一致させることができます" -#: assets/api/asset/asset.py:143 +#: assets/api/asset/asset.py:147 msgid "Cannot create asset directly, you should create a host or other" msgstr "" "資産を直接作成することはできません。ホストまたはその他を作成する必要がありま" @@ -1060,7 +1066,7 @@ msgid "Basic" msgstr "基本" #: assets/const/web.py:61 assets/models/asset/web.py:13 -#: assets/serializers/asset/common.py:123 assets/serializers/platform.py:40 +#: assets/serializers/asset/common.py:123 assets/serializers/platform.py:39 msgid "Script" msgstr "脚本" @@ -1196,7 +1202,7 @@ msgstr "アドレス" #: assets/models/asset/common.py:104 assets/models/platform.py:112 #: authentication/serializers/connect_token_secret.py:108 #: perms/serializers/user_permission.py:24 -#: xpack/plugins/cloud/serializers/account_attrs.py:187 +#: xpack/plugins/cloud/serializers/account_attrs.py:197 msgid "Platform" msgstr "プラットフォーム" @@ -1210,6 +1216,10 @@ msgstr "ドメイン" msgid "Labels" msgstr "ラベル" +#: assets/models/asset/common.py:111 assets/serializers/asset/host.py:27 +msgid "Info" +msgstr "情報" + #: assets/models/asset/common.py:283 msgid "Can refresh asset hardware info" msgstr "資産ハードウェア情報を更新できます" @@ -1247,27 +1257,27 @@ msgstr "クライアントキー" msgid "Allow invalid cert" msgstr "証明書チェックを無視" -#: assets/models/asset/web.py:9 assets/serializers/platform.py:30 +#: assets/models/asset/web.py:9 assets/serializers/platform.py:29 msgid "Autofill" msgstr "自動充填" #: assets/models/asset/web.py:10 assets/serializers/asset/common.py:120 -#: assets/serializers/platform.py:32 +#: assets/serializers/platform.py:31 msgid "Username selector" msgstr "ユーザー名ピッカー" #: assets/models/asset/web.py:11 assets/serializers/asset/common.py:121 -#: assets/serializers/platform.py:35 +#: assets/serializers/platform.py:34 msgid "Password selector" msgstr "パスワードセレクター" #: assets/models/asset/web.py:12 assets/serializers/asset/common.py:122 -#: assets/serializers/platform.py:38 +#: assets/serializers/platform.py:37 msgid "Submit selector" msgstr "ボタンセレクターを確認する" #: assets/models/automations/base.py:17 assets/models/cmd_filter.py:38 -#: assets/serializers/asset/common.py:300 rbac/tree.py:35 +#: assets/serializers/asset/common.py:302 rbac/tree.py:35 msgid "Accounts" msgstr "アカウント" @@ -1307,7 +1317,7 @@ msgid "Date verified" msgstr "確認済みの日付" #: assets/models/cmd_filter.py:28 perms/models/asset_permission.py:61 -#: perms/serializers/permission.py:33 users/models/group.py:25 +#: perms/serializers/permission.py:32 users/models/group.py:25 #: users/models/user.py:723 msgid "User group" msgstr "ユーザーグループ" @@ -1396,7 +1406,7 @@ msgstr "フルバリュー" msgid "Parent key" msgstr "親キー" -#: assets/models/node.py:558 perms/serializers/permission.py:36 +#: assets/models/node.py:558 perms/serializers/permission.py:35 #: tickets/models/ticket/apply_asset.py:14 xpack/plugins/cloud/models.py:96 msgid "Node" msgstr "ノード" @@ -1423,45 +1433,45 @@ msgstr "有効化" msgid "Ansible config" msgstr "Ansible 構成" -#: assets/models/platform.py:44 assets/serializers/platform.py:61 +#: assets/models/platform.py:44 assets/serializers/platform.py:60 msgid "Ping enabled" msgstr "アセット ディスカバリを有効にする" -#: assets/models/platform.py:45 assets/serializers/platform.py:62 +#: assets/models/platform.py:45 assets/serializers/platform.py:61 msgid "Ping method" msgstr "資産検出方法" #: assets/models/platform.py:46 assets/models/platform.py:59 -#: assets/serializers/platform.py:63 +#: assets/serializers/platform.py:62 msgid "Gather facts enabled" msgstr "資産情報の収集を有効にする" #: assets/models/platform.py:47 assets/models/platform.py:61 -#: assets/serializers/platform.py:64 +#: assets/serializers/platform.py:63 msgid "Gather facts method" msgstr "情報収集の方法" -#: assets/models/platform.py:48 assets/serializers/platform.py:67 +#: assets/models/platform.py:48 assets/serializers/platform.py:66 msgid "Change secret enabled" msgstr "パスワードの変更が有効" -#: assets/models/platform.py:50 assets/serializers/platform.py:68 +#: assets/models/platform.py:50 assets/serializers/platform.py:67 msgid "Change secret method" msgstr "パスワード変更モード" -#: assets/models/platform.py:52 assets/serializers/platform.py:69 +#: assets/models/platform.py:52 assets/serializers/platform.py:68 msgid "Push account enabled" msgstr "アカウントのプッシュを有効にする" -#: assets/models/platform.py:54 assets/serializers/platform.py:70 +#: assets/models/platform.py:54 assets/serializers/platform.py:69 msgid "Push account method" msgstr "アカウントプッシュ方式" -#: assets/models/platform.py:56 assets/serializers/platform.py:65 +#: assets/models/platform.py:56 assets/serializers/platform.py:64 msgid "Verify account enabled" msgstr "アカウントの確認をオンにする" -#: assets/models/platform.py:58 assets/serializers/platform.py:66 +#: assets/models/platform.py:58 assets/serializers/platform.py:65 msgid "Verify account method" msgstr "アカウント認証方法" @@ -1473,23 +1483,23 @@ msgstr "メタ" msgid "Internal" msgstr "ビルトイン" -#: assets/models/platform.py:83 assets/serializers/platform.py:91 +#: assets/models/platform.py:83 assets/serializers/platform.py:90 msgid "Charset" msgstr "シャーセット" -#: assets/models/platform.py:85 assets/serializers/platform.py:119 +#: assets/models/platform.py:85 assets/serializers/platform.py:118 msgid "Domain enabled" msgstr "ドメインを有効にする" -#: assets/models/platform.py:87 assets/serializers/platform.py:118 +#: assets/models/platform.py:87 assets/serializers/platform.py:117 msgid "Su enabled" msgstr "アカウントの切り替えを有効にする" -#: assets/models/platform.py:88 assets/serializers/platform.py:101 +#: assets/models/platform.py:88 assets/serializers/platform.py:100 msgid "Su method" msgstr "アカウントの切り替え方法" -#: assets/models/platform.py:90 assets/serializers/platform.py:98 +#: assets/models/platform.py:90 assets/serializers/platform.py:97 msgid "Automation" msgstr "オートメーション" @@ -1498,11 +1508,19 @@ msgstr "オートメーション" msgid "%(value)s is not an even number" msgstr "%(value)s は偶数ではありません" +#: assets/notifications.py:12 +msgid "" +"Batch update platform in assets, skipping assets that do not meet platform " +"type" +msgstr "" +"プラットフォームタイプがスキップされた資産に合致しない、資産内の一括更新プ" +"ラットフォーム" + #: assets/serializers/asset/common.py:119 msgid "Auto fill" msgstr "自動充填" -#: assets/serializers/asset/common.py:130 assets/serializers/platform.py:96 +#: assets/serializers/asset/common.py:130 assets/serializers/platform.py:95 #: authentication/serializers/connect_token_secret.py:28 #: authentication/serializers/connect_token_secret.py:66 #: perms/serializers/user_permission.py:25 xpack/plugins/cloud/models.py:99 @@ -1515,19 +1533,19 @@ msgid "Node path" msgstr "ノードパスです" #: assets/serializers/asset/common.py:150 -#: assets/serializers/asset/common.py:302 +#: assets/serializers/asset/common.py:304 msgid "Auto info" msgstr "自動情報" -#: assets/serializers/asset/common.py:226 +#: assets/serializers/asset/common.py:228 msgid "Platform not exist" msgstr "プラットフォームが存在しません" -#: assets/serializers/asset/common.py:261 +#: assets/serializers/asset/common.py:263 msgid "port out of range (1-65535)" msgstr "ポート番号が範囲外です (1-65535)" -#: assets/serializers/asset/common.py:268 +#: assets/serializers/asset/common.py:270 msgid "Protocol is required: {}" msgstr "プロトコルが必要です: {}" @@ -1588,10 +1606,6 @@ msgstr "システムバージョン" msgid "OS arch" msgstr "システムアーキテクチャ" -#: assets/serializers/asset/host.py:27 -msgid "Info" -msgstr "情報" - #: assets/serializers/cagegory.py:9 msgid "Constraints" msgstr "制約" @@ -1620,31 +1634,31 @@ msgstr "含まれない:/" msgid "The same level node name cannot be the same" msgstr "同じレベルのノード名を同じにすることはできません。" -#: assets/serializers/platform.py:26 +#: assets/serializers/platform.py:25 msgid "SFTP enabled" msgstr "SFTP が有効" -#: assets/serializers/platform.py:27 +#: assets/serializers/platform.py:26 msgid "SFTP home" msgstr "SFTP ルート パス" -#: assets/serializers/platform.py:43 +#: assets/serializers/platform.py:42 msgid "Auth with username" msgstr "ユーザー名で認証する" -#: assets/serializers/platform.py:71 +#: assets/serializers/platform.py:70 msgid "Gather accounts enabled" msgstr "アカウント収集を有効にする" -#: assets/serializers/platform.py:72 +#: assets/serializers/platform.py:71 msgid "Gather accounts method" msgstr "アカウントの収集方法" -#: assets/serializers/platform.py:78 +#: assets/serializers/platform.py:77 msgid "Primary" msgstr "主要" -#: assets/serializers/platform.py:120 +#: assets/serializers/platform.py:119 msgid "Default Domain" msgstr "デフォルト ドメイン" @@ -2494,15 +2508,15 @@ msgid "Ticket info" msgstr "作業指示情報" #: authentication/serializers/connection_token.py:20 -#: perms/models/asset_permission.py:71 perms/serializers/permission.py:37 -#: perms/serializers/permission.py:70 +#: perms/models/asset_permission.py:71 perms/serializers/permission.py:36 +#: perms/serializers/permission.py:69 #: tickets/models/ticket/apply_application.py:28 #: tickets/models/ticket/apply_asset.py:18 msgid "Actions" msgstr "アクション" #: authentication/serializers/connection_token.py:41 -#: perms/serializers/permission.py:39 perms/serializers/permission.py:71 +#: perms/serializers/permission.py:38 perms/serializers/permission.py:70 #: users/serializers/user.py:93 users/serializers/user.py:165 msgid "Is expired" msgstr "期限切れです" @@ -2522,8 +2536,8 @@ msgstr "メール" msgid "The {} cannot be empty" msgstr "{} 空にしてはならない" -#: authentication/serializers/token.py:79 perms/serializers/permission.py:38 -#: perms/serializers/permission.py:72 users/serializers/user.py:94 +#: authentication/serializers/token.py:79 perms/serializers/permission.py:37 +#: perms/serializers/permission.py:71 users/serializers/user.py:94 #: users/serializers/user.py:163 msgid "Is valid" msgstr "有効です" @@ -2544,11 +2558,6 @@ msgstr "APIキー記号APIヘッダーを使用すると、すべてのリクエ msgid "docs" msgstr "ドキュメント" -#: authentication/templates/authentication/_access_key_modal.html:33 -#: terminal/notifications.py:98 terminal/notifications.py:146 -msgid "Date" -msgstr "日付" - #: authentication/templates/authentication/_access_key_modal.html:48 msgid "Show" msgstr "表示" @@ -2991,7 +3000,7 @@ msgstr "組織 ID" msgid "The file content overflowed (The maximum length `{}` bytes)" msgstr "ファイルの内容がオーバーフローしました (最大長 '{}' バイト)" -#: common/drf/parsers/base.py:189 +#: common/drf/parsers/base.py:193 msgid "Parse file error: {}" msgstr "解析ファイルエラー: {}" @@ -3242,11 +3251,11 @@ msgstr "投稿サイトニュース" msgid "No account available" msgstr "利用可能なアカウントがありません" -#: ops/ansible/inventory.py:189 +#: ops/ansible/inventory.py:196 msgid "Ansible disabled" msgstr "Ansible 無効" -#: ops/ansible/inventory.py:205 +#: ops/ansible/inventory.py:212 msgid "Skip hosts below:" msgstr "次のホストをスキップします: " @@ -4443,7 +4452,7 @@ msgid "SSO auth key TTL" msgstr "Token有効期間" #: settings/serializers/auth/sso.py:17 -#: xpack/plugins/cloud/serializers/account_attrs.py:184 +#: xpack/plugins/cloud/serializers/account_attrs.py:194 msgid "Unit: second" msgstr "単位: 秒" @@ -5547,7 +5556,7 @@ msgid "Redis port" msgstr "Redis ポート" #: terminal/models/component/endpoint.py:29 -#: terminal/models/component/endpoint.py:98 terminal/serializers/endpoint.py:64 +#: terminal/models/component/endpoint.py:98 terminal/serializers/endpoint.py:66 #: terminal/serializers/storage.py:38 terminal/serializers/storage.py:50 #: terminal/serializers/storage.py:80 terminal/serializers/storage.py:90 #: terminal/serializers/storage.py:98 @@ -5811,15 +5820,15 @@ msgstr "アカウント" msgid "Timestamp" msgstr "タイムスタンプ" -#: terminal/serializers/endpoint.py:14 +#: terminal/serializers/endpoint.py:15 msgid "Oracle port" msgstr "Oracle ポート" -#: terminal/serializers/endpoint.py:17 +#: terminal/serializers/endpoint.py:18 msgid "Oracle port range" msgstr "Oracle がリッスンするポート範囲" -#: terminal/serializers/endpoint.py:19 +#: terminal/serializers/endpoint.py:20 msgid "" "Oracle proxy server listen port is dynamic, Each additional Oracle database " "instance adds a port listener" @@ -5827,13 +5836,13 @@ msgstr "" "Oracle プロキシサーバーがリッスンするポートは動的です。追加の Oracle データ" "ベースインスタンスはポートリスナーを追加します" -#: terminal/serializers/endpoint.py:35 +#: terminal/serializers/endpoint.py:36 msgid "Visit IP/Host, if empty, use the current request instead" msgstr "" "IP/ホストにアクセスします。空の場合は、代わりに現在のリクエストのアドレスを使" "用します" -#: terminal/serializers/endpoint.py:58 +#: terminal/serializers/endpoint.py:59 msgid "" "If asset IP addresses under different endpoints conflict, use asset labels" msgstr "" @@ -7320,13 +7329,13 @@ msgstr "ファイルはJSON形式です。" msgid "IP address invalid `{}`, {}" msgstr "IPアドレスが無効: '{}', {}" -#: xpack/plugins/cloud/serializers/account_attrs.py:162 +#: xpack/plugins/cloud/serializers/account_attrs.py:172 msgid "" "Format for comma-delimited string,Such as: 192.168.1.0/24, " "10.0.0.0-10.0.0.255" msgstr "形式はコンマ区切りの文字列です,例:192.168.1.0/24,10.0.0.0-10.0.0.255" -#: xpack/plugins/cloud/serializers/account_attrs.py:166 +#: xpack/plugins/cloud/serializers/account_attrs.py:176 msgid "" "The port is used to detect the validity of the IP address. When the " "synchronization task is executed, only the valid IP address will be " @@ -7336,19 +7345,19 @@ msgstr "" "実行されると、有効な IP アドレスのみが同期されます。
ポートが0の場合、す" "べてのIPアドレスが有効です。" -#: xpack/plugins/cloud/serializers/account_attrs.py:174 +#: xpack/plugins/cloud/serializers/account_attrs.py:184 msgid "Hostname prefix" msgstr "ホスト名プレフィックス" -#: xpack/plugins/cloud/serializers/account_attrs.py:177 +#: xpack/plugins/cloud/serializers/account_attrs.py:187 msgid "IP segment" msgstr "IP セグメント" -#: xpack/plugins/cloud/serializers/account_attrs.py:181 +#: xpack/plugins/cloud/serializers/account_attrs.py:191 msgid "Test port" msgstr "テストポート" -#: xpack/plugins/cloud/serializers/account_attrs.py:184 +#: xpack/plugins/cloud/serializers/account_attrs.py:194 msgid "Test timeout" msgstr "テストタイムアウト" @@ -7430,22 +7439,22 @@ msgstr "ライセンスのインポートに成功" msgid "License is invalid" msgstr "ライセンスが無効です" -#: xpack/plugins/license/meta.py:11 xpack/plugins/license/models.py:135 +#: xpack/plugins/license/meta.py:11 xpack/plugins/license/models.py:138 msgid "License" msgstr "ライセンス" -#: xpack/plugins/license/models.py:79 +#: xpack/plugins/license/models.py:80 msgid "Standard edition" msgstr "標準版" -#: xpack/plugins/license/models.py:81 +#: xpack/plugins/license/models.py:82 msgid "Enterprise edition" msgstr "エンタープライズ版" -#: xpack/plugins/license/models.py:83 +#: xpack/plugins/license/models.py:84 msgid "Ultimate edition" msgstr "究極のエディション" -#: xpack/plugins/license/models.py:85 +#: xpack/plugins/license/models.py:86 msgid "Community edition" msgstr "コミュニティ版" diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 360ae7c4b..176ff7f89 100644 --- a/apps/locale/zh/LC_MESSAGES/django.mo +++ b/apps/locale/zh/LC_MESSAGES/django.mo @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9819889a6d8b2934b06c5b242e3f63f404997f30851919247a405f542e8a03bc -size 113244 +oid sha256:fffd0032a105eb0c991f4eed7aca4fb344d9e8ab834f7fd2451b164532f198d7 +size 113407 diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index ba0a34c84..500e514c9 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/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: 2023-03-14 17:34+0800\n" +"POT-Creation-Date: 2023-03-19 23:52+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -168,7 +168,7 @@ msgstr "仅创建" #: assets/models/cmd_filter.py:36 assets/serializers/domain.py:19 #: assets/serializers/label.py:27 audits/models.py:48 #: authentication/models/connection_token.py:33 -#: perms/models/asset_permission.py:64 perms/serializers/permission.py:35 +#: perms/models/asset_permission.py:64 perms/serializers/permission.py:34 #: terminal/backends/command/models.py:20 terminal/models/session/session.py:32 #: terminal/notifications.py:95 terminal/serializers/command.py:17 #: tickets/models/ticket/apply_asset.py:16 xpack/plugins/cloud/models.py:212 @@ -196,7 +196,7 @@ msgstr "来源" #: acls/models/base.py:102 acls/serializers/base.py:57 #: assets/serializers/asset/common.py:131 assets/serializers/gateway.py:28 #: audits/models.py:49 ops/models/base.py:18 -#: perms/models/asset_permission.py:70 perms/serializers/permission.py:40 +#: perms/models/asset_permission.py:70 perms/serializers/permission.py:39 #: terminal/backends/command/models.py:21 terminal/models/session/session.py:34 #: tickets/models/ticket/command_confirm.py:13 xpack/plugins/cloud/models.py:85 msgid "Account" @@ -446,7 +446,7 @@ msgstr "账号验证" #: assets/models/group.py:20 assets/models/label.py:18 #: assets/models/platform.py:21 assets/models/platform.py:76 #: assets/serializers/asset/common.py:74 assets/serializers/asset/common.py:151 -#: assets/serializers/platform.py:133 +#: assets/serializers/platform.py:132 #: authentication/serializers/connect_token_secret.py:103 ops/mixin.py:21 #: ops/models/adhoc.py:21 ops/models/celery.py:15 ops/models/celery.py:57 #: ops/models/job.py:91 ops/models/playbook.py:23 ops/serializers/job.py:19 @@ -529,7 +529,7 @@ msgstr "已托管密码" #: accounts/serializers/account/account.py:75 applications/models.py:11 #: assets/models/label.py:21 assets/models/platform.py:77 #: assets/serializers/asset/common.py:127 assets/serializers/cagegory.py:8 -#: assets/serializers/platform.py:94 assets/serializers/platform.py:134 +#: assets/serializers/platform.py:93 assets/serializers/platform.py:133 #: perms/serializers/user_permission.py:26 settings/models.py:35 #: tickets/models/ticket/apply_application.py:13 msgid "Category" @@ -540,7 +540,7 @@ msgstr "类别" #: acls/serializers/command_acl.py:18 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:78 -#: assets/serializers/asset/common.py:128 assets/serializers/platform.py:93 +#: assets/serializers/asset/common.py:128 assets/serializers/platform.py:92 #: audits/serializers.py:48 #: authentication/serializers/connect_token_secret.py:116 ops/models/job.py:102 #: perms/serializers/user_permission.py:27 terminal/models/applet/applet.py:31 @@ -558,6 +558,30 @@ msgstr "类型" msgid "Asset not found" msgstr "资产不存在" +#: accounts/serializers/account/account.py:144 acls/models/base.py:98 +#: acls/models/login_acl.py:13 acls/serializers/base.py:55 +#: acls/serializers/login_acl.py:21 assets/models/cmd_filter.py:24 +#: assets/models/label.py:16 audits/models.py:44 audits/models.py:63 +#: audits/models.py:141 authentication/models/connection_token.py:29 +#: authentication/models/sso_token.py:16 +#: notifications/models/notification.py:12 +#: perms/api/user_permission/mixin.py:55 perms/models/asset_permission.py:58 +#: perms/serializers/permission.py:30 rbac/builtin.py:122 +#: rbac/models/rolebinding.py:49 terminal/backends/command/models.py:19 +#: terminal/models/session/session.py:30 terminal/models/session/sharing.py:32 +#: terminal/notifications.py:96 terminal/notifications.py:144 +#: terminal/serializers/command.py:16 tickets/models/comment.py:21 +#: users/const.py:14 users/models/user.py:911 users/models/user.py:942 +#: users/serializers/group.py:18 +msgid "User" +msgstr "用户" + +#: accounts/serializers/account/account.py:145 +#: authentication/templates/authentication/_access_key_modal.html:33 +#: terminal/notifications.py:98 terminal/notifications.py:146 +msgid "Date" +msgstr "日期" + #: accounts/serializers/account/backup.py:31 #: accounts/serializers/automations/base.py:36 #: assets/serializers/automations/base.py:34 ops/mixin.py:23 ops/mixin.py:103 @@ -588,7 +612,7 @@ msgid "Key password" msgstr "密钥密码" #: accounts/serializers/account/base.py:81 -#: assets/serializers/asset/common.py:301 +#: assets/serializers/asset/common.py:303 msgid "Spec info" msgstr "特殊信息" @@ -729,24 +753,6 @@ msgstr "审批人" msgid "Active" msgstr "激活中" -#: acls/models/base.py:98 acls/models/login_acl.py:13 -#: acls/serializers/base.py:55 acls/serializers/login_acl.py:21 -#: assets/models/cmd_filter.py:24 assets/models/label.py:16 audits/models.py:44 -#: audits/models.py:63 audits/models.py:141 -#: authentication/models/connection_token.py:29 -#: authentication/models/sso_token.py:16 -#: notifications/models/notification.py:12 -#: perms/api/user_permission/mixin.py:55 perms/models/asset_permission.py:58 -#: perms/serializers/permission.py:31 rbac/builtin.py:122 -#: rbac/models/rolebinding.py:49 terminal/backends/command/models.py:19 -#: terminal/models/session/session.py:30 terminal/models/session/sharing.py:32 -#: terminal/notifications.py:96 terminal/notifications.py:144 -#: terminal/serializers/command.py:16 tickets/models/comment.py:21 -#: users/const.py:14 users/models/user.py:911 users/models/user.py:942 -#: users/serializers/group.py:18 -msgid "User" -msgstr "用户" - #: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60 #: ops/serializers/job.py:65 terminal/const.py:67 #: terminal/models/session/session.py:43 terminal/serializers/command.py:18 @@ -760,7 +766,7 @@ msgid "Regex" msgstr "正则表达式" #: acls/models/command_acl.py:26 assets/models/cmd_filter.py:79 -#: settings/serializers/basic.py:10 xpack/plugins/license/models.py:29 +#: settings/serializers/basic.py:10 xpack/plugins/license/models.py:30 msgid "Content" msgstr "内容" @@ -877,7 +883,7 @@ msgstr "" #: authentication/templates/authentication/_msg_oauth_bind.html:12 #: authentication/templates/authentication/_msg_rest_password_success.html:8 #: authentication/templates/authentication/_msg_rest_public_key_success.html:8 -#: settings/serializers/terminal.py:10 terminal/serializers/endpoint.py:61 +#: settings/serializers/terminal.py:10 terminal/serializers/endpoint.py:62 msgid "IP" msgstr "IP" @@ -902,7 +908,7 @@ msgstr "应用程序" msgid "Can match application" msgstr "匹配应用" -#: assets/api/asset/asset.py:143 +#: assets/api/asset/asset.py:147 msgid "Cannot create asset directly, you should create a host or other" msgstr "不能直接创建资产, 你应该创建主机或其他资产" @@ -1052,7 +1058,7 @@ msgid "Basic" msgstr "基本" #: assets/const/web.py:61 assets/models/asset/web.py:13 -#: assets/serializers/asset/common.py:123 assets/serializers/platform.py:40 +#: assets/serializers/asset/common.py:123 assets/serializers/platform.py:39 msgid "Script" msgstr "脚本" @@ -1188,7 +1194,7 @@ msgstr "地址" #: assets/models/asset/common.py:104 assets/models/platform.py:112 #: authentication/serializers/connect_token_secret.py:108 #: perms/serializers/user_permission.py:24 -#: xpack/plugins/cloud/serializers/account_attrs.py:187 +#: xpack/plugins/cloud/serializers/account_attrs.py:197 msgid "Platform" msgstr "系统平台" @@ -1202,6 +1208,10 @@ msgstr "网域" msgid "Labels" msgstr "标签管理" +#: assets/models/asset/common.py:111 assets/serializers/asset/host.py:27 +msgid "Info" +msgstr "信息" + #: assets/models/asset/common.py:283 msgid "Can refresh asset hardware info" msgstr "可以更新资产硬件信息" @@ -1239,27 +1249,27 @@ msgstr "客户端密钥" msgid "Allow invalid cert" msgstr "忽略证书校验" -#: assets/models/asset/web.py:9 assets/serializers/platform.py:30 +#: assets/models/asset/web.py:9 assets/serializers/platform.py:29 msgid "Autofill" msgstr "自动代填" #: assets/models/asset/web.py:10 assets/serializers/asset/common.py:120 -#: assets/serializers/platform.py:32 +#: assets/serializers/platform.py:31 msgid "Username selector" msgstr "用户名选择器" #: assets/models/asset/web.py:11 assets/serializers/asset/common.py:121 -#: assets/serializers/platform.py:35 +#: assets/serializers/platform.py:34 msgid "Password selector" msgstr "密码选择器" #: assets/models/asset/web.py:12 assets/serializers/asset/common.py:122 -#: assets/serializers/platform.py:38 +#: assets/serializers/platform.py:37 msgid "Submit selector" msgstr "确认按钮选择器" #: assets/models/automations/base.py:17 assets/models/cmd_filter.py:38 -#: assets/serializers/asset/common.py:300 rbac/tree.py:35 +#: assets/serializers/asset/common.py:302 rbac/tree.py:35 msgid "Accounts" msgstr "账号管理" @@ -1299,7 +1309,7 @@ msgid "Date verified" msgstr "校验日期" #: assets/models/cmd_filter.py:28 perms/models/asset_permission.py:61 -#: perms/serializers/permission.py:33 users/models/group.py:25 +#: perms/serializers/permission.py:32 users/models/group.py:25 #: users/models/user.py:723 msgid "User group" msgstr "用户组" @@ -1388,7 +1398,7 @@ msgstr "全称" msgid "Parent key" msgstr "ssh私钥" -#: assets/models/node.py:558 perms/serializers/permission.py:36 +#: assets/models/node.py:558 perms/serializers/permission.py:35 #: tickets/models/ticket/apply_asset.py:14 xpack/plugins/cloud/models.py:96 msgid "Node" msgstr "节点" @@ -1415,45 +1425,45 @@ msgstr "启用" msgid "Ansible config" msgstr "Ansible 配置" -#: assets/models/platform.py:44 assets/serializers/platform.py:61 +#: assets/models/platform.py:44 assets/serializers/platform.py:60 msgid "Ping enabled" msgstr "启用资产探活" -#: assets/models/platform.py:45 assets/serializers/platform.py:62 +#: assets/models/platform.py:45 assets/serializers/platform.py:61 msgid "Ping method" msgstr "资产探活方式" #: assets/models/platform.py:46 assets/models/platform.py:59 -#: assets/serializers/platform.py:63 +#: assets/serializers/platform.py:62 msgid "Gather facts enabled" msgstr "启用收集资产信息" #: assets/models/platform.py:47 assets/models/platform.py:61 -#: assets/serializers/platform.py:64 +#: assets/serializers/platform.py:63 msgid "Gather facts method" msgstr "收集信息方式" -#: assets/models/platform.py:48 assets/serializers/platform.py:67 +#: assets/models/platform.py:48 assets/serializers/platform.py:66 msgid "Change secret enabled" msgstr "启用改密" -#: assets/models/platform.py:50 assets/serializers/platform.py:68 +#: assets/models/platform.py:50 assets/serializers/platform.py:67 msgid "Change secret method" msgstr "改密方式" -#: assets/models/platform.py:52 assets/serializers/platform.py:69 +#: assets/models/platform.py:52 assets/serializers/platform.py:68 msgid "Push account enabled" msgstr "启用账号推送" -#: assets/models/platform.py:54 assets/serializers/platform.py:70 +#: assets/models/platform.py:54 assets/serializers/platform.py:69 msgid "Push account method" msgstr "账号推送方式" -#: assets/models/platform.py:56 assets/serializers/platform.py:65 +#: assets/models/platform.py:56 assets/serializers/platform.py:64 msgid "Verify account enabled" msgstr "开启账号验证" -#: assets/models/platform.py:58 assets/serializers/platform.py:66 +#: assets/models/platform.py:58 assets/serializers/platform.py:65 msgid "Verify account method" msgstr "账号验证方式" @@ -1465,23 +1475,23 @@ msgstr "元数据" msgid "Internal" msgstr "内置" -#: assets/models/platform.py:83 assets/serializers/platform.py:91 +#: assets/models/platform.py:83 assets/serializers/platform.py:90 msgid "Charset" msgstr "编码" -#: assets/models/platform.py:85 assets/serializers/platform.py:119 +#: assets/models/platform.py:85 assets/serializers/platform.py:118 msgid "Domain enabled" msgstr "启用网域" -#: assets/models/platform.py:87 assets/serializers/platform.py:118 +#: assets/models/platform.py:87 assets/serializers/platform.py:117 msgid "Su enabled" msgstr "启用账号切换" -#: assets/models/platform.py:88 assets/serializers/platform.py:101 +#: assets/models/platform.py:88 assets/serializers/platform.py:100 msgid "Su method" msgstr "账号切换方式" -#: assets/models/platform.py:90 assets/serializers/platform.py:98 +#: assets/models/platform.py:90 assets/serializers/platform.py:97 msgid "Automation" msgstr "自动化" @@ -1490,11 +1500,17 @@ msgstr "自动化" msgid "%(value)s is not an even number" msgstr "%(value)s is not an even number" +#: assets/notifications.py:12 +msgid "" +"Batch update platform in assets, skipping assets that do not meet platform " +"type" +msgstr "资产中批量更新平台,不符合平台类型跳过的资产" + #: assets/serializers/asset/common.py:119 msgid "Auto fill" msgstr "自动代填" -#: assets/serializers/asset/common.py:130 assets/serializers/platform.py:96 +#: assets/serializers/asset/common.py:130 assets/serializers/platform.py:95 #: authentication/serializers/connect_token_secret.py:28 #: authentication/serializers/connect_token_secret.py:66 #: perms/serializers/user_permission.py:25 xpack/plugins/cloud/models.py:99 @@ -1507,19 +1523,19 @@ msgid "Node path" msgstr "节点路径" #: assets/serializers/asset/common.py:150 -#: assets/serializers/asset/common.py:302 +#: assets/serializers/asset/common.py:304 msgid "Auto info" msgstr "自动化信息" -#: assets/serializers/asset/common.py:226 +#: assets/serializers/asset/common.py:228 msgid "Platform not exist" msgstr "平台不存在" -#: assets/serializers/asset/common.py:261 +#: assets/serializers/asset/common.py:263 msgid "port out of range (1-65535)" msgstr "端口超出范围 (1-65535)" -#: assets/serializers/asset/common.py:268 +#: assets/serializers/asset/common.py:270 msgid "Protocol is required: {}" msgstr "协议是必填的: {}" @@ -1580,10 +1596,6 @@ msgstr "系统版本" msgid "OS arch" msgstr "系统架构" -#: assets/serializers/asset/host.py:27 -msgid "Info" -msgstr "信息" - #: assets/serializers/cagegory.py:9 msgid "Constraints" msgstr "约束" @@ -1612,31 +1624,31 @@ msgstr "不能包含: /" msgid "The same level node name cannot be the same" msgstr "同级别节点名字不能重复" -#: assets/serializers/platform.py:26 +#: assets/serializers/platform.py:25 msgid "SFTP enabled" msgstr "SFTP 已启用" -#: assets/serializers/platform.py:27 +#: assets/serializers/platform.py:26 msgid "SFTP home" msgstr "SFTP 根路径" -#: assets/serializers/platform.py:43 +#: assets/serializers/platform.py:42 msgid "Auth with username" msgstr "使用用户名认证" -#: assets/serializers/platform.py:71 +#: assets/serializers/platform.py:70 msgid "Gather accounts enabled" msgstr "启用账号收集" -#: assets/serializers/platform.py:72 +#: assets/serializers/platform.py:71 msgid "Gather accounts method" msgstr "收集账号方式" -#: assets/serializers/platform.py:78 +#: assets/serializers/platform.py:77 msgid "Primary" msgstr "主要的" -#: assets/serializers/platform.py:120 +#: assets/serializers/platform.py:119 msgid "Default Domain" msgstr "默认网域" @@ -2472,15 +2484,15 @@ msgid "Ticket info" msgstr "工单信息" #: authentication/serializers/connection_token.py:20 -#: perms/models/asset_permission.py:71 perms/serializers/permission.py:37 -#: perms/serializers/permission.py:70 +#: perms/models/asset_permission.py:71 perms/serializers/permission.py:36 +#: perms/serializers/permission.py:69 #: tickets/models/ticket/apply_application.py:28 #: tickets/models/ticket/apply_asset.py:18 msgid "Actions" msgstr "动作" #: authentication/serializers/connection_token.py:41 -#: perms/serializers/permission.py:39 perms/serializers/permission.py:71 +#: perms/serializers/permission.py:38 perms/serializers/permission.py:70 #: users/serializers/user.py:93 users/serializers/user.py:165 msgid "Is expired" msgstr "已过期" @@ -2500,8 +2512,8 @@ msgstr "邮箱" msgid "The {} cannot be empty" msgstr "{} 不能为空" -#: authentication/serializers/token.py:79 perms/serializers/permission.py:38 -#: perms/serializers/permission.py:72 users/serializers/user.py:94 +#: authentication/serializers/token.py:79 perms/serializers/permission.py:37 +#: perms/serializers/permission.py:71 users/serializers/user.py:94 #: users/serializers/user.py:163 msgid "Is valid" msgstr "是否有效" @@ -2522,11 +2534,6 @@ msgstr "使用api key签名请求头,每个请求的头部是不一样的" msgid "docs" msgstr "文档" -#: authentication/templates/authentication/_access_key_modal.html:33 -#: terminal/notifications.py:98 terminal/notifications.py:146 -msgid "Date" -msgstr "日期" - #: authentication/templates/authentication/_access_key_modal.html:48 msgid "Show" msgstr "显示" @@ -2961,7 +2968,7 @@ msgstr "组织 ID" msgid "The file content overflowed (The maximum length `{}` bytes)" msgstr "文件内容太大 (最大长度 `{}` 字节)" -#: common/drf/parsers/base.py:189 +#: common/drf/parsers/base.py:193 msgid "Parse file error: {}" msgstr "解析文件错误: {}" @@ -3207,11 +3214,11 @@ msgstr "发布站内消息" msgid "No account available" msgstr "无可用账号" -#: ops/ansible/inventory.py:189 +#: ops/ansible/inventory.py:196 msgid "Ansible disabled" msgstr "Ansible 已禁用" -#: ops/ansible/inventory.py:205 +#: ops/ansible/inventory.py:212 msgid "Skip hosts below:" msgstr "跳过以下主机: " @@ -4404,7 +4411,7 @@ msgid "SSO auth key TTL" msgstr "令牌有效期" #: settings/serializers/auth/sso.py:17 -#: xpack/plugins/cloud/serializers/account_attrs.py:184 +#: xpack/plugins/cloud/serializers/account_attrs.py:194 msgid "Unit: second" msgstr "单位: 秒" @@ -5475,7 +5482,7 @@ msgid "Redis port" msgstr "Redis 端口" #: terminal/models/component/endpoint.py:29 -#: terminal/models/component/endpoint.py:98 terminal/serializers/endpoint.py:64 +#: terminal/models/component/endpoint.py:98 terminal/serializers/endpoint.py:66 #: terminal/serializers/storage.py:38 terminal/serializers/storage.py:50 #: terminal/serializers/storage.py:80 terminal/serializers/storage.py:90 #: terminal/serializers/storage.py:98 @@ -5737,15 +5744,15 @@ msgstr "账号" msgid "Timestamp" msgstr "时间戳" -#: terminal/serializers/endpoint.py:14 +#: terminal/serializers/endpoint.py:15 msgid "Oracle port" msgstr "Oracle 端口" -#: terminal/serializers/endpoint.py:17 +#: terminal/serializers/endpoint.py:18 msgid "Oracle port range" msgstr "Oracle 端口范围" -#: terminal/serializers/endpoint.py:19 +#: terminal/serializers/endpoint.py:20 msgid "" "Oracle proxy server listen port is dynamic, Each additional Oracle database " "instance adds a port listener" @@ -5753,11 +5760,11 @@ msgstr "" "Oracle 代理服务器监听端口是动态的,每增加一个 Oracle 数据库实例,就会增加一个" "端口监听" -#: terminal/serializers/endpoint.py:35 +#: terminal/serializers/endpoint.py:36 msgid "Visit IP/Host, if empty, use the current request instead" msgstr "访问IP/Host,如果为空,则使用当前请求的地址代替" -#: terminal/serializers/endpoint.py:58 +#: terminal/serializers/endpoint.py:59 msgid "" "If asset IP addresses under different endpoints conflict, use asset labels" msgstr "如果不同端点下的资产 IP 有冲突,使用资产标签实现" @@ -7224,13 +7231,13 @@ msgstr "JSON 格式的文件" msgid "IP address invalid `{}`, {}" msgstr "IP 地址无效: `{}`, {}" -#: xpack/plugins/cloud/serializers/account_attrs.py:162 +#: xpack/plugins/cloud/serializers/account_attrs.py:172 msgid "" "Format for comma-delimited string,Such as: 192.168.1.0/24, " "10.0.0.0-10.0.0.255" msgstr "格式为逗号分隔的字符串,如:192.168.1.0/24,10.0.0.0-10.0.0.255" -#: xpack/plugins/cloud/serializers/account_attrs.py:166 +#: xpack/plugins/cloud/serializers/account_attrs.py:176 msgid "" "The port is used to detect the validity of the IP address. When the " "synchronization task is executed, only the valid IP address will be " @@ -7239,19 +7246,19 @@ msgstr "" "端口用来检测 IP 地址的有效性,在同步任务执行时,只会同步有效的 IP 地址。
" "如果端口为 0,则表示所有 IP 地址均有效。" -#: xpack/plugins/cloud/serializers/account_attrs.py:174 +#: xpack/plugins/cloud/serializers/account_attrs.py:184 msgid "Hostname prefix" msgstr "主机名前缀" -#: xpack/plugins/cloud/serializers/account_attrs.py:177 +#: xpack/plugins/cloud/serializers/account_attrs.py:187 msgid "IP segment" msgstr "IP 网段" -#: xpack/plugins/cloud/serializers/account_attrs.py:181 +#: xpack/plugins/cloud/serializers/account_attrs.py:191 msgid "Test port" msgstr "测试端口" -#: xpack/plugins/cloud/serializers/account_attrs.py:184 +#: xpack/plugins/cloud/serializers/account_attrs.py:194 msgid "Test timeout" msgstr "测试超时时间" @@ -7331,23 +7338,23 @@ msgstr "许可证导入成功" msgid "License is invalid" msgstr "无效的许可证" -#: xpack/plugins/license/meta.py:11 xpack/plugins/license/models.py:135 +#: xpack/plugins/license/meta.py:11 xpack/plugins/license/models.py:138 msgid "License" msgstr "许可证" -#: xpack/plugins/license/models.py:79 +#: xpack/plugins/license/models.py:80 msgid "Standard edition" msgstr "标准版" -#: xpack/plugins/license/models.py:81 +#: xpack/plugins/license/models.py:82 msgid "Enterprise edition" msgstr "企业版" -#: xpack/plugins/license/models.py:83 +#: xpack/plugins/license/models.py:84 msgid "Ultimate edition" msgstr "旗舰版" -#: xpack/plugins/license/models.py:85 +#: xpack/plugins/license/models.py:86 msgid "Community edition" msgstr "社区版"