Compare commits

..

9 Commits

Author SHA1 Message Date
老广
4be20515ca Add issue spam configuration file 2025-11-06 18:13:26 +08:00
feng
a1b5eb1cd8 perf: Translate 2025-11-06 15:50:15 +08:00
wangruidong
24ac642c5e fix: Escape percentage signs in gateway password for sshpass command 2025-11-06 14:10:24 +08:00
wangruidong
e4f5e21219 perf: Support batch import of leak passwords 2025-11-06 14:09:09 +08:00
feng
a2aae9db47 perf: Translate 2025-11-05 19:07:48 +08:00
feng
206c43cf75 fix: Fixed the issue of inaccurate calculation of the number of dashboard commands. 2025-11-04 18:14:02 +08:00
feng
019a657ec3 perf: Ssotoken login create operator choose org_id 2025-11-03 17:36:04 +08:00
feng
fad60ee40f perf: Translate 2025-11-03 10:51:22 +08:00
feng
1728412793 perf: Bulk account support node 2025-10-31 17:19:48 +08:00
33 changed files with 1266 additions and 1178 deletions

26
.github/.github/issue-spam-config.json vendored Normal file
View File

@@ -0,0 +1,26 @@
{
"dry_run": false,
"min_account_age_days": 3,
"max_urls_for_spam": 1,
"min_body_len_for_links": 40,
"spam_words": [
"call now",
"zadzwoń",
"zadzwoń teraz",
"kontakt",
"telefon",
"telefone",
"contato",
"suporte",
"infolinii",
"click here",
"buy now",
"subscribe",
"visit"
],
"bracket_max": 6,
"special_char_density_threshold": 0.12,
"phone_regex": "\\+?\\d[\\d\\-\\s\\(\\)\\.]{6,}\\d",
"labels_for_spam": ["spam"],
"labels_for_review": ["needs-triage"]
}

View File

@@ -1,6 +1,7 @@
from django.db import transaction from django.db import transaction
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers as drf_serializers
from rest_framework.decorators import action from rest_framework.decorators import action
from rest_framework.generics import ListAPIView, CreateAPIView from rest_framework.generics import ListAPIView, CreateAPIView
from rest_framework.response import Response from rest_framework.response import Response
@@ -184,12 +185,56 @@ class AssetAccountBulkCreateApi(CreateAPIView):
'POST': 'accounts.add_account', 'POST': 'accounts.add_account',
} }
@staticmethod
def get_all_assets(base_payload: dict):
nodes = base_payload.pop('nodes', [])
asset_ids = base_payload.pop('assets', [])
nodes = Node.objects.filter(id__in=nodes).only('id', 'key')
node_asset_ids = Node.get_nodes_all_assets(*nodes).values_list('id', flat=True)
asset_ids = set(asset_ids + list(node_asset_ids))
return Asset.objects.filter(id__in=asset_ids)
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data) if hasattr(request.data, "copy"):
serializer.is_valid(raise_exception=True) base_payload = request.data.copy()
data = serializer.create(serializer.validated_data) else:
serializer = serializers.AssetAccountBulkSerializerResultSerializer(data, many=True) base_payload = dict(request.data)
return Response(data=serializer.data, status=HTTP_200_OK)
templates = base_payload.pop("template", None)
assets = self.get_all_assets(base_payload)
result = []
errors = []
def handle_one(_payload):
try:
ser = self.get_serializer(data=_payload)
ser.is_valid(raise_exception=True)
data = ser.bulk_create(ser.validated_data, assets)
if isinstance(data, (list, tuple)):
result.extend(data)
else:
result.append(data)
except drf_serializers.ValidationError as e:
errors.extend(list(e.detail))
except Exception as e:
errors.extend([str(e)])
if not templates:
handle_one(base_payload)
else:
if not isinstance(templates, (list, tuple)):
templates = [templates]
for tpl in templates:
payload = dict(base_payload)
payload["template"] = tpl
handle_one(payload)
if errors:
raise drf_serializers.ValidationError(errors)
out_ser = serializers.AssetAccountBulkSerializerResultSerializer(result, many=True)
return Response(data=out_ser.data, status=HTTP_200_OK)
class AccountHistoriesSecretAPI(ExtraFilterFieldsMixin, AccountRecordViewLogMixin, ListAPIView): class AccountHistoriesSecretAPI(ExtraFilterFieldsMixin, AccountRecordViewLogMixin, ListAPIView):

View File

@@ -14,7 +14,7 @@ from accounts.models import Account, AccountTemplate, GatheredAccount
from accounts.tasks import push_accounts_to_assets_task from accounts.tasks import push_accounts_to_assets_task
from assets.const import Category, AllTypes from assets.const import Category, AllTypes
from assets.models import Asset from assets.models import Asset
from common.serializers import SecretReadableMixin from common.serializers import SecretReadableMixin, CommonBulkModelSerializer
from common.serializers.fields import ObjectRelatedField, LabeledChoiceField from common.serializers.fields import ObjectRelatedField, LabeledChoiceField
from common.utils import get_logger from common.utils import get_logger
from .base import BaseAccountSerializer, AuthValidateMixin from .base import BaseAccountSerializer, AuthValidateMixin
@@ -292,27 +292,27 @@ class AccountDetailSerializer(AccountSerializer):
class AssetAccountBulkSerializerResultSerializer(serializers.Serializer): class AssetAccountBulkSerializerResultSerializer(serializers.Serializer):
asset = serializers.CharField(read_only=True, label=_('Asset')) asset = serializers.CharField(read_only=True, label=_('Asset'))
account = serializers.CharField(read_only=True, label=_('Account'))
state = serializers.CharField(read_only=True, label=_('State')) state = serializers.CharField(read_only=True, label=_('State'))
error = serializers.CharField(read_only=True, label=_('Error')) error = serializers.CharField(read_only=True, label=_('Error'))
changed = serializers.BooleanField(read_only=True, label=_('Changed')) changed = serializers.BooleanField(read_only=True, label=_('Changed'))
class AssetAccountBulkSerializer( class AssetAccountBulkSerializer(
AccountCreateUpdateSerializerMixin, AuthValidateMixin, serializers.ModelSerializer AccountCreateUpdateSerializerMixin, AuthValidateMixin, CommonBulkModelSerializer
): ):
su_from_username = serializers.CharField( su_from_username = serializers.CharField(
max_length=128, required=False, write_only=True, allow_null=True, label=_("Su from"), max_length=128, required=False, write_only=True, allow_null=True, label=_("Su from"),
allow_blank=True, allow_blank=True,
) )
assets = serializers.PrimaryKeyRelatedField(queryset=Asset.objects, many=True, label=_('Assets'))
class Meta: class Meta:
model = Account model = Account
fields = [ fields = [
'name', 'username', 'secret', 'secret_type', 'secret_reset', 'name', 'username', 'secret', 'secret_type', 'secret_reset',
'passphrase', 'privileged', 'is_active', 'comment', 'template', 'passphrase', 'privileged', 'is_active', 'comment', 'template',
'on_invalid', 'push_now', 'params', 'assets', 'su_from_username', 'on_invalid', 'push_now', 'params',
'source', 'source_id', 'su_from_username', 'source', 'source_id',
] ]
extra_kwargs = { extra_kwargs = {
'name': {'required': False}, 'name': {'required': False},
@@ -393,8 +393,7 @@ class AssetAccountBulkSerializer(
handler = self._handle_err_create handler = self._handle_err_create
return handler return handler
def perform_bulk_create(self, vd): def perform_bulk_create(self, vd, assets):
assets = vd.pop('assets')
on_invalid = vd.pop('on_invalid', 'skip') on_invalid = vd.pop('on_invalid', 'skip')
secret_type = vd.get('secret_type', 'password') secret_type = vd.get('secret_type', 'password')
@@ -402,8 +401,7 @@ class AssetAccountBulkSerializer(
vd['name'] = vd.get('username') vd['name'] = vd.get('username')
create_handler = self.get_create_handler(on_invalid) create_handler = self.get_create_handler(on_invalid)
asset_ids = [asset.id for asset in assets] secret_type_supports = Asset.get_secret_type_assets(assets, secret_type)
secret_type_supports = Asset.get_secret_type_assets(asset_ids, secret_type)
_results = {} _results = {}
for asset in assets: for asset in assets:
@@ -411,6 +409,7 @@ class AssetAccountBulkSerializer(
_results[asset] = { _results[asset] = {
'error': _('Asset does not support this secret type: %s') % secret_type, 'error': _('Asset does not support this secret type: %s') % secret_type,
'state': 'error', 'state': 'error',
'account': vd['name'],
} }
continue continue
@@ -420,13 +419,13 @@ class AssetAccountBulkSerializer(
self.clean_auth_fields(vd) self.clean_auth_fields(vd)
instance, changed, state = self.perform_create(vd, create_handler) instance, changed, state = self.perform_create(vd, create_handler)
_results[asset] = { _results[asset] = {
'changed': changed, 'instance': instance.id, 'state': state 'changed': changed, 'instance': instance.id, 'state': state, 'account': vd['name']
} }
except serializers.ValidationError as e: except serializers.ValidationError as e:
_results[asset] = {'error': e.detail[0], 'state': 'error'} _results[asset] = {'error': e.detail[0], 'state': 'error', 'account': vd['name']}
except Exception as e: except Exception as e:
logger.exception(e) logger.exception(e)
_results[asset] = {'error': str(e), 'state': 'error'} _results[asset] = {'error': str(e), 'state': 'error', 'account': vd['name']}
results = [{'asset': asset, **result} for asset, result in _results.items()] results = [{'asset': asset, **result} for asset, result in _results.items()]
state_score = {'created': 3, 'updated': 2, 'skipped': 1, 'error': 0} state_score = {'created': 3, 'updated': 2, 'skipped': 1, 'error': 0}
@@ -443,7 +442,8 @@ class AssetAccountBulkSerializer(
errors.append({ errors.append({
'error': _('Account has exist'), 'error': _('Account has exist'),
'state': 'error', 'state': 'error',
'asset': str(result['asset']) 'asset': str(result['asset']),
'account': result.get('account'),
}) })
if errors: if errors:
raise serializers.ValidationError(errors) raise serializers.ValidationError(errors)
@@ -462,10 +462,16 @@ class AssetAccountBulkSerializer(
account_ids = [str(_id) for _id in accounts.values_list('id', flat=True)] account_ids = [str(_id) for _id in accounts.values_list('id', flat=True)]
push_accounts_to_assets_task.delay(account_ids, params) push_accounts_to_assets_task.delay(account_ids, params)
def create(self, validated_data): def bulk_create(self, validated_data, assets):
if not assets:
raise serializers.ValidationError(
{'assets': _('At least one asset or node must be specified')},
{'nodes': _('At least one asset or node must be specified')}
)
params = validated_data.pop('params', None) params = validated_data.pop('params', None)
push_now = validated_data.pop('push_now', False) push_now = validated_data.pop('push_now', False)
results = self.perform_bulk_create(validated_data) results = self.perform_bulk_create(validated_data, assets)
self.push_accounts_if_need(results, push_now, params) self.push_accounts_if_need(results, push_now, params)
for res in results: for res in results:
res['asset'] = str(res['asset']) res['asset'] = str(res['asset'])

View File

@@ -408,8 +408,7 @@ class Asset(NodesRelationMixin, LabeledMixin, AbsConnectivity, JSONFilterMixin,
return tree_node return tree_node
@staticmethod @staticmethod
def get_secret_type_assets(asset_ids, secret_type): def get_secret_type_assets(assets, secret_type):
assets = Asset.objects.filter(id__in=asset_ids)
asset_protocol = assets.prefetch_related('protocols').values_list('id', 'protocols__name') asset_protocol = assets.prefetch_related('protocols').values_list('id', 'protocols__name')
protocol_secret_types_map = const.Protocol.protocol_secret_types() protocol_secret_types_map = const.Protocol.protocol_secret_types()
asset_secret_types_mapp = defaultdict(set) asset_secret_types_mapp = defaultdict(set)

View File

@@ -23,6 +23,8 @@ logger = get_logger(__name__)
class OperatorLogHandler(metaclass=Singleton): class OperatorLogHandler(metaclass=Singleton):
CACHE_KEY = 'OPERATOR_LOG_CACHE_KEY' CACHE_KEY = 'OPERATOR_LOG_CACHE_KEY'
SYSTEM_OBJECTS = frozenset({"Role"})
PREFER_CURRENT_ELSE_USER = frozenset({"SSOToken"})
def __init__(self): def __init__(self):
self.log_client = self.get_storage_client() self.log_client = self.get_storage_client()
@@ -142,13 +144,21 @@ class OperatorLogHandler(metaclass=Singleton):
after = self.__data_processing(after) after = self.__data_processing(after)
return before, after return before, after
@staticmethod def get_org_id(self, user, object_name):
def get_org_id(object_name): if object_name in self.SYSTEM_OBJECTS:
system_obj = ('Role',) return Organization.SYSTEM_ID
org_id = get_current_org_id()
if object_name in system_obj: current = get_current_org_id()
org_id = Organization.SYSTEM_ID current_id = str(current) if current else None
return org_id
if object_name in self.PREFER_CURRENT_ELSE_USER:
if current_id and current_id != Organization.DEFAULT_ID:
return current_id
org = user.orgs.distinct().first()
return str(org.id) if org else Organization.DEFAULT_ID
return current_id or Organization.DEFAULT_ID
def create_or_update_operate_log( def create_or_update_operate_log(
self, action, resource_type, resource=None, resource_display=None, self, action, resource_type, resource=None, resource_display=None,
@@ -168,7 +178,7 @@ class OperatorLogHandler(metaclass=Singleton):
# 前后都没变化,没必要生成日志,除非手动强制保存 # 前后都没变化,没必要生成日志,除非手动强制保存
return return
org_id = self.get_org_id(object_name) org_id = self.get_org_id(user, object_name)
data = { data = {
'id': log_id, "user": str(user), 'action': action, 'id': log_id, "user": str(user), 'action': action,
'resource_type': str(resource_type), 'org_id': org_id, 'resource_type': str(resource_type), 'org_id': org_id,

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-16 14:10+0800\n" "POT-Creation-Date: 2025-11-06 15:37+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,14 +18,14 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: accounts/api/account/account.py:141 #: accounts/api/account/account.py:142
#: accounts/serializers/account/account.py:181 #: accounts/serializers/account/account.py:181
#: accounts/serializers/account/account.py:362 #: accounts/serializers/account/account.py:362
msgid "Account already exists" msgid "Account already exists"
msgstr "" msgstr ""
#: accounts/api/account/application.py:77 #: accounts/api/account/application.py:77
#: authentication/api/connection_token.py:452 #: authentication/api/connection_token.py:453
msgid "Account not found" msgid "Account not found"
msgstr "" msgstr ""
@@ -456,7 +456,7 @@ msgstr ""
#: accounts/templates/accounts/push_account_report.html:78 #: accounts/templates/accounts/push_account_report.html:78
#: accounts/templates/accounts/push_account_report.html:118 #: accounts/templates/accounts/push_account_report.html:118
#: acls/notifications.py:70 acls/serializers/base.py:111 #: acls/notifications.py:70 acls/serializers/base.py:111
#: assets/models/asset/common.py:102 assets/models/asset/common.py:428 #: assets/models/asset/common.py:102 assets/models/asset/common.py:427
#: assets/models/cmd_filter.py:36 audits/models.py:59 audits/models.py:336 #: assets/models/cmd_filter.py:36 audits/models.py:59 audits/models.py:336
#: audits/serializers.py:230 authentication/models/connection_token.py:42 #: audits/serializers.py:230 authentication/models/connection_token.py:42
#: perms/models/asset_permission.py:69 terminal/backends/command/models.py:17 #: perms/models/asset_permission.py:69 terminal/backends/command/models.py:17
@@ -471,7 +471,7 @@ msgstr ""
#: accounts/models/account.py:89 accounts/models/template.py:16 #: accounts/models/account.py:89 accounts/models/template.py:16
#: accounts/serializers/account/account.py:234 #: accounts/serializers/account/account.py:234
#: accounts/serializers/account/account.py:304 #: accounts/serializers/account/account.py:305
#: accounts/serializers/account/template.py:35 #: accounts/serializers/account/template.py:35
#: authentication/serializers/connect_token_secret.py:51 #: authentication/serializers/connect_token_secret.py:51
msgid "Su from" msgid "Su from"
@@ -518,13 +518,14 @@ msgstr ""
#: accounts/models/account.py:107 #: accounts/models/account.py:107
#: accounts/models/automations/check_account.py:64 #: accounts/models/automations/check_account.py:64
#: accounts/serializers/account/account.py:295
#: accounts/serializers/account/service.py:13 #: accounts/serializers/account/service.py:13
#: accounts/serializers/automations/change_secret.py:117 #: accounts/serializers/automations/change_secret.py:117
#: accounts/serializers/automations/change_secret.py:148 #: accounts/serializers/automations/change_secret.py:148
#: acls/serializers/base.py:112 #: acls/serializers/base.py:112
#: acls/templates/acls/asset_login_reminder.html:11 #: acls/templates/acls/asset_login_reminder.html:11
#: assets/serializers/gateway.py:33 audits/models.py:60 audits/models.py:337 #: assets/serializers/gateway.py:33 audits/models.py:60 audits/models.py:337
#: audits/serializers.py:231 authentication/api/connection_token.py:464 #: audits/serializers.py:231 authentication/api/connection_token.py:465
#: ops/models/base.py:18 perms/models/asset_permission.py:75 #: ops/models/base.py:18 perms/models/asset_permission.py:75
#: settings/serializers/msg.py:33 terminal/backends/command/models.py:18 #: settings/serializers/msg.py:33 terminal/backends/command/models.py:18
#: terminal/models/session/session.py:31 terminal/notifications.py:291 #: terminal/models/session/session.py:31 terminal/notifications.py:291
@@ -614,7 +615,7 @@ msgstr ""
#: accounts/models/application.py:20 accounts/models/base.py:39 #: accounts/models/application.py:20 accounts/models/base.py:39
#: accounts/models/mixins/vault.py:49 #: accounts/models/mixins/vault.py:49
#: accounts/serializers/account/account.py:492 #: accounts/serializers/account/account.py:498
#: accounts/serializers/account/base.py:20 #: accounts/serializers/account/base.py:20
#: authentication/models/temp_token.py:11 #: authentication/models/temp_token.py:11
#: authentication/templates/authentication/_access_key_modal.html:31 #: authentication/templates/authentication/_access_key_modal.html:31
@@ -784,7 +785,7 @@ msgid "Status"
msgstr "" msgstr ""
#: accounts/models/automations/change_secret.py:51 #: accounts/models/automations/change_secret.py:51
#: accounts/serializers/account/account.py:296 assets/const/automation.py:9 #: accounts/serializers/account/account.py:297 assets/const/automation.py:9
#: authentication/templates/authentication/passkey.html:177 #: authentication/templates/authentication/passkey.html:177
#: authentication/views/base.py:42 authentication/views/base.py:43 #: authentication/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:67 #: authentication/views/base.py:44 common/const/choices.py:67
@@ -1008,7 +1009,7 @@ msgid "Verify asset account"
msgstr "" msgstr ""
#: accounts/models/base.py:37 accounts/models/base.py:66 #: accounts/models/base.py:37 accounts/models/base.py:66
#: accounts/serializers/account/account.py:491 #: accounts/serializers/account/account.py:497
#: accounts/serializers/account/base.py:17 #: accounts/serializers/account/base.py:17
#: accounts/serializers/automations/change_secret.py:50 #: accounts/serializers/automations/change_secret.py:50
#: authentication/serializers/connect_token_secret.py:42 #: authentication/serializers/connect_token_secret.py:42
@@ -1228,54 +1229,46 @@ msgstr ""
msgid "Has secret" msgid "Has secret"
msgstr "" msgstr ""
#: accounts/serializers/account/account.py:295 ops/models/celery.py:84 #: accounts/serializers/account/account.py:296 ops/models/celery.py:84
#: tickets/models/comment.py:13 tickets/models/ticket/general.py:49 #: tickets/models/comment.py:13 tickets/models/ticket/general.py:49
#: tickets/models/ticket/general.py:280 tickets/serializers/super_ticket.py:14 #: tickets/models/ticket/general.py:280 tickets/serializers/super_ticket.py:14
msgid "State" msgid "State"
msgstr "" msgstr ""
#: accounts/serializers/account/account.py:297 #: accounts/serializers/account/account.py:298
msgid "Changed" msgid "Changed"
msgstr "" msgstr ""
#: accounts/serializers/account/account.py:307 acls/models/base.py:97 #: accounts/serializers/account/account.py:410
#: acls/templates/acls/asset_login_reminder.html:10
#: assets/models/automations/base.py:25
#: assets/serializers/automations/base.py:20 assets/serializers/domain.py:33
#: assets/serializers/platform.py:181 assets/serializers/platform.py:213
#: authentication/api/connection_token.py:463 ops/models/base.py:17
#: ops/models/job.py:157 ops/serializers/job.py:21
#: perms/serializers/permission.py:57
#: terminal/templates/terminal/_msg_command_execute_alert.html:16
#: xpack/plugins/cloud/manager.py:101
msgid "Assets"
msgstr ""
#: accounts/serializers/account/account.py:412
#, python-format #, python-format
msgid "Asset does not support this secret type: %s" msgid "Asset does not support this secret type: %s"
msgstr "" msgstr ""
#: accounts/serializers/account/account.py:444 #: accounts/serializers/account/account.py:443
msgid "Account has exist" msgid "Account has exist"
msgstr "" msgstr ""
#: accounts/serializers/account/account.py:476 #: accounts/serializers/account/account.py:468
#: accounts/serializers/account/account.py:483 #: accounts/serializers/account/account.py:469
msgid "At least one asset or node must be specified"
msgstr ""
#: accounts/serializers/account/account.py:482
#: accounts/serializers/account/account.py:489
#: accounts/serializers/account/base.py:73 #: accounts/serializers/account/base.py:73
#: accounts/serializers/account/base.py:88 #: accounts/serializers/account/base.py:88
#: assets/serializers/asset/common.py:425 #: assets/serializers/asset/common.py:425
msgid "Spec info" msgid "Spec info"
msgstr "" msgstr ""
#: accounts/serializers/account/account.py:493 #: accounts/serializers/account/account.py:499
#: authentication/serializers/connect_token_secret.py:173 #: authentication/serializers/connect_token_secret.py:173
#: authentication/templates/authentication/_access_key_modal.html:30 #: authentication/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:33 #: perms/models/perm_node.py:21 users/serializers/group.py:33
msgid "ID" msgid "ID"
msgstr "" msgstr ""
#: accounts/serializers/account/account.py:503 acls/notifications.py:18 #: accounts/serializers/account/account.py:509 acls/notifications.py:18
#: acls/notifications.py:68 acls/serializers/base.py:104 #: acls/notifications.py:68 acls/serializers/base.py:104
#: acls/templates/acls/asset_login_reminder.html:8 #: acls/templates/acls/asset_login_reminder.html:8
#: acls/templates/acls/user_login_reminder.html:8 #: acls/templates/acls/user_login_reminder.html:8
@@ -1299,7 +1292,7 @@ msgstr ""
msgid "User" msgid "User"
msgstr "" msgstr ""
#: accounts/serializers/account/account.py:504 #: accounts/serializers/account/account.py:510
#: authentication/templates/authentication/_access_key_modal.html:33 #: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:165 terminal/notifications.py:225 #: terminal/notifications.py:165 terminal/notifications.py:225
msgid "Date" msgid "Date"
@@ -1718,7 +1711,7 @@ msgstr ""
#: accounts/templates/accounts/change_secret_report.html:118 #: accounts/templates/accounts/change_secret_report.html:118
#: accounts/templates/accounts/push_account_report.html:77 #: accounts/templates/accounts/push_account_report.html:77
#: accounts/templates/accounts/push_account_report.html:117 #: accounts/templates/accounts/push_account_report.html:117
#: audits/handler.py:128 #: audits/handler.py:130
msgid "No" msgid "No"
msgstr "" msgstr ""
@@ -1839,6 +1832,18 @@ msgstr ""
msgid "Users" msgid "Users"
msgstr "" msgstr ""
#: acls/models/base.py:97 acls/templates/acls/asset_login_reminder.html:10
#: assets/models/automations/base.py:25
#: assets/serializers/automations/base.py:20 assets/serializers/domain.py:33
#: assets/serializers/platform.py:181 assets/serializers/platform.py:213
#: authentication/api/connection_token.py:464 ops/models/base.py:17
#: ops/models/job.py:157 ops/serializers/job.py:21
#: perms/serializers/permission.py:57
#: terminal/templates/terminal/_msg_command_execute_alert.html:16
#: xpack/plugins/cloud/manager.py:101
msgid "Assets"
msgstr ""
#: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60 #: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60
#: ops/serializers/job.py:92 terminal/const.py:88 #: ops/serializers/job.py:92 terminal/const.py:88
#: terminal/models/session/session.py:40 terminal/serializers/command.py:18 #: terminal/models/session/session.py:40 terminal/serializers/command.py:18
@@ -2581,19 +2586,19 @@ msgstr ""
msgid "Custom info" msgid "Custom info"
msgstr "" msgstr ""
#: assets/models/asset/common.py:431 #: assets/models/asset/common.py:430
msgid "Can refresh asset hardware info" msgid "Can refresh asset hardware info"
msgstr "" msgstr ""
#: assets/models/asset/common.py:432 #: assets/models/asset/common.py:431
msgid "Can test asset connectivity" msgid "Can test asset connectivity"
msgstr "" msgstr ""
#: assets/models/asset/common.py:433 #: assets/models/asset/common.py:432
msgid "Can match asset" msgid "Can match asset"
msgstr "" msgstr ""
#: assets/models/asset/common.py:434 #: assets/models/asset/common.py:433
msgid "Can change asset nodes" msgid "Can change asset nodes"
msgstr "" msgstr ""
@@ -3456,7 +3461,7 @@ msgstr ""
msgid "-" msgid "-"
msgstr "" msgstr ""
#: audits/handler.py:128 #: audits/handler.py:130
msgid "Yes" msgid "Yes"
msgstr "" msgstr ""
@@ -3735,35 +3740,35 @@ msgstr ""
msgid "Reusable connection token is not allowed, global setting not enabled" msgid "Reusable connection token is not allowed, global setting not enabled"
msgstr "" msgstr ""
#: authentication/api/connection_token.py:425 #: authentication/api/connection_token.py:426
msgid "Anonymous account is not supported for this asset" msgid "Anonymous account is not supported for this asset"
msgstr "" msgstr ""
#: authentication/api/connection_token.py:455 #: authentication/api/connection_token.py:456
msgid "Permission expired" msgid "Permission expired"
msgstr "" msgstr ""
#: authentication/api/connection_token.py:488 #: authentication/api/connection_token.py:489
msgid "ACL action is reject: {}({})" msgid "ACL action is reject: {}({})"
msgstr "" msgstr ""
#: authentication/api/connection_token.py:492 #: authentication/api/connection_token.py:493
msgid "ACL action is review" msgid "ACL action is review"
msgstr "" msgstr ""
#: authentication/api/connection_token.py:502 #: authentication/api/connection_token.py:503
msgid "ACL action is face verify" msgid "ACL action is face verify"
msgstr "" msgstr ""
#: authentication/api/connection_token.py:507 #: authentication/api/connection_token.py:508
msgid "ACL action not supported for this asset" msgid "ACL action not supported for this asset"
msgstr "" msgstr ""
#: authentication/api/connection_token.py:514 #: authentication/api/connection_token.py:515
msgid "ACL action is face online" msgid "ACL action is face online"
msgstr "" msgstr ""
#: authentication/api/connection_token.py:539 #: authentication/api/connection_token.py:540
msgid "No available face feature" msgid "No available face feature"
msgstr "" msgstr ""
@@ -3837,7 +3842,7 @@ msgstr ""
msgid "Invalid token or cache refreshed." msgid "Invalid token or cache refreshed."
msgstr "" msgstr ""
#: authentication/backends/oidc/views.py:175 #: authentication/backends/oidc/views.py:137
msgid "OpenID Error" msgid "OpenID Error"
msgstr "" msgstr ""
@@ -4056,16 +4061,16 @@ msgstr ""
msgid "Please wait for %s seconds before retry" msgid "Please wait for %s seconds before retry"
msgstr "" msgstr ""
#: authentication/errors/redirect.py:85 authentication/mixins.py:332 #: authentication/errors/redirect.py:85 authentication/mixins.py:365
#: users/views/profile/reset.py:224 #: users/views/profile/reset.py:224
msgid "Your password is too simple, please change it for security" msgid "Your password is too simple, please change it for security"
msgstr "" msgstr ""
#: authentication/errors/redirect.py:93 authentication/mixins.py:341 #: authentication/errors/redirect.py:93 authentication/mixins.py:374
msgid "You should to change your password before login" msgid "You should to change your password before login"
msgstr "" msgstr ""
#: authentication/errors/redirect.py:101 authentication/mixins.py:350 #: authentication/errors/redirect.py:101 authentication/mixins.py:383
msgid "Your password has expired, please reset before logging in" msgid "Your password has expired, please reset before logging in"
msgstr "" msgstr ""
@@ -4182,21 +4187,28 @@ msgstr ""
msgid "Authentication failed (before login check failed): {}" msgid "Authentication failed (before login check failed): {}"
msgstr "" msgstr ""
#: authentication/mixins.py:84 #: authentication/mixins.py:105
msgid ""
"The administrator has enabled \"Only allow existing users to log in\", \n"
" and the current user is not in the user list. Please contact "
"the administrator."
msgstr ""
#: authentication/mixins.py:117
msgid "User is invalid" msgid "User is invalid"
msgstr "" msgstr ""
#: authentication/mixins.py:99 #: authentication/mixins.py:132
msgid "" msgid ""
"The administrator has enabled 'Only allow login from user source'. \n" "The administrator has enabled 'Only allow login from user source'. \n"
" The current user source is {}. Please contact the administrator." " The current user source is {}. Please contact the administrator."
msgstr "" msgstr ""
#: authentication/mixins.py:278 #: authentication/mixins.py:311
msgid "The MFA type ({}) is not enabled" msgid "The MFA type ({}) is not enabled"
msgstr "" msgstr ""
#: authentication/mixins.py:320 #: authentication/mixins.py:353
msgid "Please change your password" msgid "Please change your password"
msgstr "" msgstr ""
@@ -4678,22 +4690,22 @@ msgstr ""
msgid "LAN" msgid "LAN"
msgstr "" msgstr ""
#: authentication/views/base.py:71 #: authentication/views/base.py:70
#: perms/templates/perms/_msg_permed_items_expire.html:18 #: perms/templates/perms/_msg_permed_items_expire.html:18
msgid "If you have any question, please contact the administrator" msgid "If you have any question, please contact the administrator"
msgstr "" msgstr ""
#: authentication/views/base.py:144 #: authentication/views/base.py:143
#, python-format #, python-format
msgid "%s query user failed" msgid "%s query user failed"
msgstr "" msgstr ""
#: authentication/views/base.py:152 #: authentication/views/base.py:151
#, python-format #, python-format
msgid "The %s is already bound to another user" msgid "The %s is already bound to another user"
msgstr "" msgstr ""
#: authentication/views/base.py:159 #: authentication/views/base.py:158
#, python-format #, python-format
msgid "Binding %s successfully" msgid "Binding %s successfully"
msgstr "" msgstr ""
@@ -4830,7 +4842,7 @@ msgstr ""
msgid "Please login with a password and then bind the WeCom" msgid "Please login with a password and then bind the WeCom"
msgstr "" msgstr ""
#: common/api/action.py:68 #: common/api/action.py:80
msgid "Request file format may be wrong" msgid "Request file format may be wrong"
msgstr "" msgstr ""
@@ -5343,7 +5355,7 @@ msgstr ""
msgid "App Labels" msgid "App Labels"
msgstr "Labels" msgstr "Labels"
#: labels/models.py:15 settings/serializers/security.py:211 #: labels/models.py:15
msgid "Color" msgid "Color"
msgstr "" msgstr ""
@@ -7268,39 +7280,39 @@ msgid "Period clean"
msgstr "" msgstr ""
#: settings/serializers/cleaning.py:15 #: settings/serializers/cleaning.py:15
msgid "Login log retention days (day)" msgid "Login log retention days"
msgstr "" msgstr ""
#: settings/serializers/cleaning.py:19 #: settings/serializers/cleaning.py:19
msgid "Task log retention days (day)" msgid "Task log retention days"
msgstr "" msgstr ""
#: settings/serializers/cleaning.py:23 #: settings/serializers/cleaning.py:23
msgid "Operate log retention days (day)" msgid "Operate log retention days"
msgstr "" msgstr ""
#: settings/serializers/cleaning.py:27 #: settings/serializers/cleaning.py:27
msgid "password change log keep days (day)" msgid "Password change log retention days"
msgstr "" msgstr ""
#: settings/serializers/cleaning.py:31 #: settings/serializers/cleaning.py:31
msgid "FTP log retention days (day)" msgid "FTP log retention days"
msgstr "" msgstr ""
#: settings/serializers/cleaning.py:35 #: settings/serializers/cleaning.py:35
msgid "Cloud sync task history retention days (day)" msgid "Cloud sync task history retention days"
msgstr "" msgstr ""
#: settings/serializers/cleaning.py:39 #: settings/serializers/cleaning.py:39
msgid "job execution retention days (day)" msgid "job execution retention days"
msgstr "" msgstr ""
#: settings/serializers/cleaning.py:43 #: settings/serializers/cleaning.py:43
msgid "Activity log retention days (day)" msgid "Activity log retention days"
msgstr "" msgstr ""
#: settings/serializers/cleaning.py:46 #: settings/serializers/cleaning.py:46
msgid "Session log retention days (day)" msgid "Session log retention days"
msgstr "" msgstr ""
#: settings/serializers/cleaning.py:48 #: settings/serializers/cleaning.py:48
@@ -7310,7 +7322,7 @@ msgid ""
msgstr "" msgstr ""
#: settings/serializers/cleaning.py:53 #: settings/serializers/cleaning.py:53
msgid "Change secret and push record retention days (day)" msgid "Change secret and push record retention days"
msgstr "" msgstr ""
#: settings/serializers/feature.py:23 settings/serializers/msg.py:69 #: settings/serializers/feature.py:23 settings/serializers/msg.py:69
@@ -7771,28 +7783,32 @@ msgid "Watermark"
msgstr "" msgstr ""
#: settings/serializers/security.py:205 #: settings/serializers/security.py:205
msgid "Watermark session content" msgid "Session content"
msgstr "" msgstr "Custom content for session"
#: settings/serializers/security.py:208 #: settings/serializers/security.py:208
msgid "Watermark console content" msgid "Console content"
msgstr "" msgstr "Custom content on the management page"
#: settings/serializers/security.py:211
msgid "Font color"
msgstr "Font color"
#: settings/serializers/security.py:214 #: settings/serializers/security.py:214
msgid "Watermark font size" msgid "Font size"
msgstr "" msgstr "Font size (px)"
#: settings/serializers/security.py:217 #: settings/serializers/security.py:217
msgid "Watermark height" msgid "Height"
msgstr "" msgstr "Height (px)"
#: settings/serializers/security.py:220 #: settings/serializers/security.py:220
msgid "Watermark width" msgid "Width"
msgstr "" msgstr "Height (px)"
#: settings/serializers/security.py:223 #: settings/serializers/security.py:223
msgid "Watermark rotate" msgid "Rotate"
msgstr "" msgstr "Rotate (degree)"
#: settings/serializers/security.py:227 #: settings/serializers/security.py:227
msgid "Max idle time (minute)" msgid "Max idle time (minute)"
@@ -8084,15 +8100,15 @@ msgstr ""
msgid "Authentication success: {}" msgid "Authentication success: {}"
msgstr "" msgstr ""
#: settings/ws.py:226 #: settings/ws.py:228
msgid "No LDAP user was found" msgid "No LDAP user was found"
msgstr "" msgstr ""
#: settings/ws.py:235 #: settings/ws.py:237
msgid "Total {}, success {}, failure {}" msgid "Total {}, success {}, failure {}"
msgstr "" msgstr ""
#: settings/ws.py:239 #: settings/ws.py:241
msgid ", disabled {}" msgid ", disabled {}"
msgstr "" msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-16 14:10+0800\n" "POT-Creation-Date: 2025-11-06 15:37+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,14 +18,14 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: accounts/api/account/account.py:141 #: accounts/api/account/account.py:142
#: accounts/serializers/account/account.py:181 #: accounts/serializers/account/account.py:181
#: accounts/serializers/account/account.py:362 #: accounts/serializers/account/account.py:362
msgid "Account already exists" msgid "Account already exists"
msgstr "La cuenta ya existe" msgstr "La cuenta ya existe"
#: accounts/api/account/application.py:77 #: accounts/api/account/application.py:77
#: authentication/api/connection_token.py:452 #: authentication/api/connection_token.py:453
msgid "Account not found" msgid "Account not found"
msgstr "Cuenta no encontrada" msgstr "Cuenta no encontrada"
@@ -484,7 +484,7 @@ msgstr ""
#: accounts/templates/accounts/push_account_report.html:78 #: accounts/templates/accounts/push_account_report.html:78
#: accounts/templates/accounts/push_account_report.html:118 #: accounts/templates/accounts/push_account_report.html:118
#: acls/notifications.py:70 acls/serializers/base.py:111 #: acls/notifications.py:70 acls/serializers/base.py:111
#: assets/models/asset/common.py:102 assets/models/asset/common.py:428 #: assets/models/asset/common.py:102 assets/models/asset/common.py:427
#: assets/models/cmd_filter.py:36 audits/models.py:59 audits/models.py:336 #: assets/models/cmd_filter.py:36 audits/models.py:59 audits/models.py:336
#: audits/serializers.py:230 authentication/models/connection_token.py:42 #: audits/serializers.py:230 authentication/models/connection_token.py:42
#: perms/models/asset_permission.py:69 terminal/backends/command/models.py:17 #: perms/models/asset_permission.py:69 terminal/backends/command/models.py:17
@@ -499,7 +499,7 @@ msgstr "Activos"
#: accounts/models/account.py:89 accounts/models/template.py:16 #: accounts/models/account.py:89 accounts/models/template.py:16
#: accounts/serializers/account/account.py:234 #: accounts/serializers/account/account.py:234
#: accounts/serializers/account/account.py:304 #: accounts/serializers/account/account.py:305
#: accounts/serializers/account/template.py:35 #: accounts/serializers/account/template.py:35
#: authentication/serializers/connect_token_secret.py:51 #: authentication/serializers/connect_token_secret.py:51
msgid "Su from" msgid "Su from"
@@ -546,13 +546,14 @@ msgstr "Estado de cambio de contraseña"
#: accounts/models/account.py:107 #: accounts/models/account.py:107
#: accounts/models/automations/check_account.py:64 #: accounts/models/automations/check_account.py:64
#: accounts/serializers/account/account.py:295
#: accounts/serializers/account/service.py:13 #: accounts/serializers/account/service.py:13
#: accounts/serializers/automations/change_secret.py:117 #: accounts/serializers/automations/change_secret.py:117
#: accounts/serializers/automations/change_secret.py:148 #: accounts/serializers/automations/change_secret.py:148
#: acls/serializers/base.py:112 #: acls/serializers/base.py:112
#: acls/templates/acls/asset_login_reminder.html:11 #: acls/templates/acls/asset_login_reminder.html:11
#: assets/serializers/gateway.py:33 audits/models.py:60 audits/models.py:337 #: assets/serializers/gateway.py:33 audits/models.py:60 audits/models.py:337
#: audits/serializers.py:231 authentication/api/connection_token.py:464 #: audits/serializers.py:231 authentication/api/connection_token.py:465
#: ops/models/base.py:18 perms/models/asset_permission.py:75 #: ops/models/base.py:18 perms/models/asset_permission.py:75
#: settings/serializers/msg.py:33 terminal/backends/command/models.py:18 #: settings/serializers/msg.py:33 terminal/backends/command/models.py:18
#: terminal/models/session/session.py:31 terminal/notifications.py:291 #: terminal/models/session/session.py:31 terminal/notifications.py:291
@@ -645,7 +646,7 @@ msgstr "Ícono"
#: accounts/models/application.py:20 accounts/models/base.py:39 #: accounts/models/application.py:20 accounts/models/base.py:39
#: accounts/models/mixins/vault.py:49 #: accounts/models/mixins/vault.py:49
#: accounts/serializers/account/account.py:492 #: accounts/serializers/account/account.py:498
#: accounts/serializers/account/base.py:20 #: accounts/serializers/account/base.py:20
#: authentication/models/temp_token.py:11 #: authentication/models/temp_token.py:11
#: authentication/templates/authentication/_access_key_modal.html:31 #: authentication/templates/authentication/_access_key_modal.html:31
@@ -818,7 +819,7 @@ msgid "Status"
msgstr "Estado" msgstr "Estado"
#: accounts/models/automations/change_secret.py:51 #: accounts/models/automations/change_secret.py:51
#: accounts/serializers/account/account.py:296 assets/const/automation.py:9 #: accounts/serializers/account/account.py:297 assets/const/automation.py:9
#: authentication/templates/authentication/passkey.html:177 #: authentication/templates/authentication/passkey.html:177
#: authentication/views/base.py:42 authentication/views/base.py:43 #: authentication/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:67 #: authentication/views/base.py:44 common/const/choices.py:67
@@ -1049,7 +1050,7 @@ msgid "Verify asset account"
msgstr "Verificación de cuentas" msgstr "Verificación de cuentas"
#: accounts/models/base.py:37 accounts/models/base.py:66 #: accounts/models/base.py:37 accounts/models/base.py:66
#: accounts/serializers/account/account.py:491 #: accounts/serializers/account/account.py:497
#: accounts/serializers/account/base.py:17 #: accounts/serializers/account/base.py:17
#: accounts/serializers/automations/change_secret.py:50 #: accounts/serializers/automations/change_secret.py:50
#: authentication/serializers/connect_token_secret.py:42 #: authentication/serializers/connect_token_secret.py:42
@@ -1286,54 +1287,46 @@ msgstr "La cuenta ya existe. El campo: {fields} debe ser único."
msgid "Has secret" msgid "Has secret"
msgstr "Contraseña ya gestionada" msgstr "Contraseña ya gestionada"
#: accounts/serializers/account/account.py:295 ops/models/celery.py:84 #: accounts/serializers/account/account.py:296 ops/models/celery.py:84
#: tickets/models/comment.py:13 tickets/models/ticket/general.py:49 #: tickets/models/comment.py:13 tickets/models/ticket/general.py:49
#: tickets/models/ticket/general.py:280 tickets/serializers/super_ticket.py:14 #: tickets/models/ticket/general.py:280 tickets/serializers/super_ticket.py:14
msgid "State" msgid "State"
msgstr "Estado" msgstr "Estado"
#: accounts/serializers/account/account.py:297 #: accounts/serializers/account/account.py:298
msgid "Changed" msgid "Changed"
msgstr "Modificado" msgstr "Modificado"
#: accounts/serializers/account/account.py:307 acls/models/base.py:97 #: accounts/serializers/account/account.py:410
#: acls/templates/acls/asset_login_reminder.html:10
#: assets/models/automations/base.py:25
#: assets/serializers/automations/base.py:20 assets/serializers/domain.py:33
#: assets/serializers/platform.py:181 assets/serializers/platform.py:213
#: authentication/api/connection_token.py:463 ops/models/base.py:17
#: ops/models/job.py:157 ops/serializers/job.py:21
#: perms/serializers/permission.py:57
#: terminal/templates/terminal/_msg_command_execute_alert.html:16
#: xpack/plugins/cloud/manager.py:101
msgid "Assets"
msgstr "Activos"
#: accounts/serializers/account/account.py:412
#, python-format #, python-format
msgid "Asset does not support this secret type: %s" msgid "Asset does not support this secret type: %s"
msgstr "Tipo de cuenta de activos no soportado: %s" msgstr "Tipo de cuenta de activos no soportado: %s"
#: accounts/serializers/account/account.py:444 #: accounts/serializers/account/account.py:443
msgid "Account has exist" msgid "Account has exist"
msgstr "La cuenta ya existe" msgstr "La cuenta ya existe"
#: accounts/serializers/account/account.py:476 #: accounts/serializers/account/account.py:468
#: accounts/serializers/account/account.py:483 #: accounts/serializers/account/account.py:469
msgid "At least one asset or node must be specified"
msgstr "Seleccionar al menos un activo o nodo"
#: accounts/serializers/account/account.py:482
#: accounts/serializers/account/account.py:489
#: accounts/serializers/account/base.py:73 #: accounts/serializers/account/base.py:73
#: accounts/serializers/account/base.py:88 #: accounts/serializers/account/base.py:88
#: assets/serializers/asset/common.py:425 #: assets/serializers/asset/common.py:425
msgid "Spec info" msgid "Spec info"
msgstr "Información especial" msgstr "Información especial"
#: accounts/serializers/account/account.py:493 #: accounts/serializers/account/account.py:499
#: authentication/serializers/connect_token_secret.py:173 #: authentication/serializers/connect_token_secret.py:173
#: authentication/templates/authentication/_access_key_modal.html:30 #: authentication/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:33 #: perms/models/perm_node.py:21 users/serializers/group.py:33
msgid "ID" msgid "ID"
msgstr "ID" msgstr "ID"
#: accounts/serializers/account/account.py:503 acls/notifications.py:18 #: accounts/serializers/account/account.py:509 acls/notifications.py:18
#: acls/notifications.py:68 acls/serializers/base.py:104 #: acls/notifications.py:68 acls/serializers/base.py:104
#: acls/templates/acls/asset_login_reminder.html:8 #: acls/templates/acls/asset_login_reminder.html:8
#: acls/templates/acls/user_login_reminder.html:8 #: acls/templates/acls/user_login_reminder.html:8
@@ -1358,7 +1351,7 @@ msgstr "ID"
msgid "User" msgid "User"
msgstr "Usuario" msgstr "Usuario"
#: accounts/serializers/account/account.py:504 #: accounts/serializers/account/account.py:510
#: authentication/templates/authentication/_access_key_modal.html:33 #: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:165 terminal/notifications.py:225 #: terminal/notifications.py:165 terminal/notifications.py:225
msgid "Date" msgid "Date"
@@ -1824,7 +1817,7 @@ msgstr "Cuenta exitosa"
#: accounts/templates/accounts/change_secret_report.html:118 #: accounts/templates/accounts/change_secret_report.html:118
#: accounts/templates/accounts/push_account_report.html:77 #: accounts/templates/accounts/push_account_report.html:77
#: accounts/templates/accounts/push_account_report.html:117 #: accounts/templates/accounts/push_account_report.html:117
#: audits/handler.py:128 #: audits/handler.py:130
msgid "No" msgid "No"
msgstr "No" msgstr "No"
@@ -1950,6 +1943,18 @@ msgstr "Persona aprobadora"
msgid "Users" msgid "Users"
msgstr "Usuario" msgstr "Usuario"
#: acls/models/base.py:97 acls/templates/acls/asset_login_reminder.html:10
#: assets/models/automations/base.py:25
#: assets/serializers/automations/base.py:20 assets/serializers/domain.py:33
#: assets/serializers/platform.py:181 assets/serializers/platform.py:213
#: authentication/api/connection_token.py:464 ops/models/base.py:17
#: ops/models/job.py:157 ops/serializers/job.py:21
#: perms/serializers/permission.py:57
#: terminal/templates/terminal/_msg_command_execute_alert.html:16
#: xpack/plugins/cloud/manager.py:101
msgid "Assets"
msgstr "Activos"
#: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60 #: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60
#: ops/serializers/job.py:92 terminal/const.py:88 #: ops/serializers/job.py:92 terminal/const.py:88
#: terminal/models/session/session.py:40 terminal/serializers/command.py:18 #: terminal/models/session/session.py:40 terminal/serializers/command.py:18
@@ -2730,19 +2735,19 @@ msgstr "Recopilar información sobre hardware de activos"
msgid "Custom info" msgid "Custom info"
msgstr "Atributos personalizados" msgstr "Atributos personalizados"
#: assets/models/asset/common.py:431 #: assets/models/asset/common.py:430
msgid "Can refresh asset hardware info" msgid "Can refresh asset hardware info"
msgstr "Se puede actualizar la información del hardware de activos" msgstr "Se puede actualizar la información del hardware de activos"
#: assets/models/asset/common.py:432 #: assets/models/asset/common.py:431
msgid "Can test asset connectivity" msgid "Can test asset connectivity"
msgstr "Se puede probar la conectividad de los activos" msgstr "Se puede probar la conectividad de los activos"
#: assets/models/asset/common.py:433 #: assets/models/asset/common.py:432
msgid "Can match asset" msgid "Can match asset"
msgstr "Se pueden emparejar activos" msgstr "Se pueden emparejar activos"
#: assets/models/asset/common.py:434 #: assets/models/asset/common.py:433
msgid "Can change asset nodes" msgid "Can change asset nodes"
msgstr "Se pueden modificar nodos de activos" msgstr "Se pueden modificar nodos de activos"
@@ -3651,7 +3656,7 @@ msgstr "Tarea"
msgid "-" msgid "-"
msgstr "-" msgstr "-"
#: audits/handler.py:128 #: audits/handler.py:130
msgid "Yes" msgid "Yes"
msgstr "Es" msgstr "Es"
@@ -3949,37 +3954,37 @@ msgstr ""
"No se permite el uso de tokens de conexión reutilizables, no se han " "No se permite el uso de tokens de conexión reutilizables, no se han "
"habilitado configuraciones globales." "habilitado configuraciones globales."
#: authentication/api/connection_token.py:425 #: authentication/api/connection_token.py:426
msgid "Anonymous account is not supported for this asset" msgid "Anonymous account is not supported for this asset"
msgstr "Las cuentas anónimas no son compatibles con los activos actuales." msgstr "Las cuentas anónimas no son compatibles con los activos actuales."
#: authentication/api/connection_token.py:455 #: authentication/api/connection_token.py:456
msgid "Permission expired" msgid "Permission expired"
msgstr "La autorización ha expirado." msgstr "La autorización ha expirado."
#: authentication/api/connection_token.py:488 #: authentication/api/connection_token.py:489
msgid "ACL action is reject: {}({})" msgid "ACL action is reject: {}({})"
msgstr "La acción de ACL es rechazar: {}({})" msgstr "La acción de ACL es rechazar: {}({})"
#: authentication/api/connection_token.py:492 #: authentication/api/connection_token.py:493
msgid "ACL action is review" msgid "ACL action is review"
msgstr "La acción de ACL es revisar." msgstr "La acción de ACL es revisar."
#: authentication/api/connection_token.py:502 #: authentication/api/connection_token.py:503
msgid "ACL action is face verify" msgid "ACL action is face verify"
msgstr "La acción de ACL es verificación facial." msgstr "La acción de ACL es verificación facial."
#: authentication/api/connection_token.py:507 #: authentication/api/connection_token.py:508
msgid "ACL action not supported for this asset" msgid "ACL action not supported for this asset"
msgstr "" msgstr ""
"La regla de inicio de sesión del activo no es compatible con los activos " "La regla de inicio de sesión del activo no es compatible con los activos "
"actuales." "actuales."
#: authentication/api/connection_token.py:514 #: authentication/api/connection_token.py:515
msgid "ACL action is face online" msgid "ACL action is face online"
msgstr "La acción de ACL es verificación facial en línea." msgstr "La acción de ACL es verificación facial en línea."
#: authentication/api/connection_token.py:539 #: authentication/api/connection_token.py:540
msgid "No available face feature" msgid "No available face feature"
msgstr "No hay características faciales disponibles." msgstr "No hay características faciales disponibles."
@@ -4061,7 +4066,7 @@ msgstr ""
msgid "Invalid token or cache refreshed." msgid "Invalid token or cache refreshed."
msgstr "El token de actualización o la caché son inválidos." msgstr "El token de actualización o la caché son inválidos."
#: authentication/backends/oidc/views.py:175 #: authentication/backends/oidc/views.py:137
msgid "OpenID Error" msgid "OpenID Error"
msgstr "Error de OpenID" msgstr "Error de OpenID"
@@ -4292,18 +4297,18 @@ msgstr "Tu contraseña es inválida"
msgid "Please wait for %s seconds before retry" msgid "Please wait for %s seconds before retry"
msgstr "Por favor, inténtalo de nuevo en %s segundos" msgstr "Por favor, inténtalo de nuevo en %s segundos"
#: authentication/errors/redirect.py:85 authentication/mixins.py:332 #: authentication/errors/redirect.py:85 authentication/mixins.py:365
#: users/views/profile/reset.py:224 #: users/views/profile/reset.py:224
msgid "Your password is too simple, please change it for security" msgid "Your password is too simple, please change it for security"
msgstr "" msgstr ""
"Tu contraseña es demasiado simple, por razones de seguridad, modifícala" "Tu contraseña es demasiado simple, por razones de seguridad, modifícala"
#: authentication/errors/redirect.py:93 authentication/mixins.py:341 #: authentication/errors/redirect.py:93 authentication/mixins.py:374
msgid "You should to change your password before login" msgid "You should to change your password before login"
msgstr "" msgstr ""
"Antes de completar el inicio de sesión, por favor, modifique su contraseña." "Antes de completar el inicio de sesión, por favor, modifique su contraseña."
#: authentication/errors/redirect.py:101 authentication/mixins.py:350 #: authentication/errors/redirect.py:101 authentication/mixins.py:383
msgid "Your password has expired, please reset before logging in" msgid "Your password has expired, please reset before logging in"
msgstr "Su contraseña ha expirado; modifíquela antes de iniciar sesión." msgstr "Su contraseña ha expirado; modifíquela antes de iniciar sesión."
@@ -4430,11 +4435,20 @@ msgstr ""
"Error de autenticación (fallo en la verificación antes de iniciar sesión): " "Error de autenticación (fallo en la verificación antes de iniciar sesión): "
"{}" "{}"
#: authentication/mixins.py:84 #: authentication/mixins.py:105
msgid ""
"The administrator has enabled \"Only allow existing users to log in\", \n"
" and the current user is not in the user list. Please contact the administrator."
msgstr ""
"El administrador ha habilitado 'solo permitir que los usuarios existentes "
"inicien sesión', el usuario actual no está en la lista, por favor contacta "
"al administrador."
#: authentication/mixins.py:117
msgid "User is invalid" msgid "User is invalid"
msgstr "Usuario no válido" msgstr "Usuario no válido"
#: authentication/mixins.py:99 #: authentication/mixins.py:132
msgid "" msgid ""
"The administrator has enabled 'Only allow login from user source'. \n" "The administrator has enabled 'Only allow login from user source'. \n"
" The current user source is {}. Please contact the administrator." " The current user source is {}. Please contact the administrator."
@@ -4443,11 +4457,11 @@ msgstr ""
"usuario'; la fuente actual del usuario es {}, por favor contacte al " "usuario'; la fuente actual del usuario es {}, por favor contacte al "
"administrador." "administrador."
#: authentication/mixins.py:278 #: authentication/mixins.py:311
msgid "The MFA type ({}) is not enabled" msgid "The MFA type ({}) is not enabled"
msgstr "El método MFA ({}) no está habilitado" msgstr "El método MFA ({}) no está habilitado"
#: authentication/mixins.py:320 #: authentication/mixins.py:353
msgid "Please change your password" msgid "Please change your password"
msgstr "Por favor, modifica la contraseña" msgstr "Por favor, modifica la contraseña"
@@ -4966,24 +4980,24 @@ msgstr "¿Reintentar?"
msgid "LAN" msgid "LAN"
msgstr "Red local" msgstr "Red local"
#: authentication/views/base.py:71 #: authentication/views/base.py:70
#: perms/templates/perms/_msg_permed_items_expire.html:18 #: perms/templates/perms/_msg_permed_items_expire.html:18
msgid "If you have any question, please contact the administrator" msgid "If you have any question, please contact the administrator"
msgstr "" msgstr ""
"Si tienes alguna duda o necesidad, por favor contacta al administrador del " "Si tienes alguna duda o necesidad, por favor contacta al administrador del "
"sistema" "sistema"
#: authentication/views/base.py:144 #: authentication/views/base.py:143
#, python-format #, python-format
msgid "%s query user failed" msgid "%s query user failed"
msgstr "Error al consultar el usuario %s" msgstr "Error al consultar el usuario %s"
#: authentication/views/base.py:152 #: authentication/views/base.py:151
#, python-format #, python-format
msgid "The %s is already bound to another user" msgid "The %s is already bound to another user"
msgstr "%s ya está vinculado a otro usuario" msgstr "%s ya está vinculado a otro usuario"
#: authentication/views/base.py:159 #: authentication/views/base.py:158
#, python-format #, python-format
msgid "Binding %s successfully" msgid "Binding %s successfully"
msgstr "Vinculación de %s exitosa" msgstr "Vinculación de %s exitosa"
@@ -5126,7 +5140,7 @@ msgid "Please login with a password and then bind the WeCom"
msgstr "" msgstr ""
"Por favor inicie sesión con su contraseña y luego vincule WeChat empresarial" "Por favor inicie sesión con su contraseña y luego vincule WeChat empresarial"
#: common/api/action.py:68 #: common/api/action.py:80
msgid "Request file format may be wrong" msgid "Request file format may be wrong"
msgstr "" msgstr ""
"Formato de archivo subido incorrecto o archivo de otro tipo de recurso" "Formato de archivo subido incorrecto o archivo de otro tipo de recurso"
@@ -5690,7 +5704,7 @@ msgstr ""
msgid "App Labels" msgid "App Labels"
msgstr "Gestión de etiquetas" msgstr "Gestión de etiquetas"
#: labels/models.py:15 settings/serializers/security.py:211 #: labels/models.py:15
msgid "Color" msgid "Color"
msgstr "Color" msgstr "Color"
@@ -7816,40 +7830,40 @@ msgid "Period clean"
msgstr "Limpieza programada" msgstr "Limpieza programada"
#: settings/serializers/cleaning.py:15 #: settings/serializers/cleaning.py:15
msgid "Login log retention days (day)" msgid "Login log retention days"
msgstr "Registro de inicio de sesión (días)" msgstr "Días de retención de los registros de inicio de sesión"
#: settings/serializers/cleaning.py:19 #: settings/serializers/cleaning.py:19
msgid "Task log retention days (day)" msgid "Task log retention days"
msgstr "Registro de tareas (días)" msgstr "Días de retención de los registros de tareas"
#: settings/serializers/cleaning.py:23 #: settings/serializers/cleaning.py:23
msgid "Operate log retention days (day)" msgid "Operate log retention days"
msgstr "Registro de acciones (días)" msgstr "Días de retención de los registros de acción"
#: settings/serializers/cleaning.py:27 #: settings/serializers/cleaning.py:27
msgid "password change log keep days (day)" msgid "Password change log retention days"
msgstr "Registro de cambios de contraseña" msgstr "Días de retención de los registros de cambio de contraseña de usuario"
#: settings/serializers/cleaning.py:31 #: settings/serializers/cleaning.py:31
msgid "FTP log retention days (day)" msgid "FTP log retention days"
msgstr "Subidas y descargas (días)" msgstr "Días de retención de los registros de subida y descarga"
#: settings/serializers/cleaning.py:35 #: settings/serializers/cleaning.py:35
msgid "Cloud sync task history retention days (day)" msgid "Cloud sync task history retention days"
msgstr "Sincronización de registros en la nube (días)" msgstr "Días de retención de los registros de sincronización en la nube"
#: settings/serializers/cleaning.py:39 #: settings/serializers/cleaning.py:39
msgid "job execution retention days (day)" msgid "job execution retention days"
msgstr "Historial de ejecución del centro de tareas (días)" msgstr "Días de retención del historial de ejecución de trabajos"
#: settings/serializers/cleaning.py:43 #: settings/serializers/cleaning.py:43
msgid "Activity log retention days (day)" msgid "Activity log retention days"
msgstr "Registro de actividades (días)" msgstr "Días de retención de los registros de actividades"
#: settings/serializers/cleaning.py:46 #: settings/serializers/cleaning.py:46
msgid "Session log retention days (day)" msgid "Session log retention days"
msgstr "Registro de sesiones (días)" msgstr "Días de retención de los registros de sesiones"
#: settings/serializers/cleaning.py:48 #: settings/serializers/cleaning.py:48
msgid "" msgid ""
@@ -7861,8 +7875,10 @@ msgstr ""
"etc.)" "etc.)"
#: settings/serializers/cleaning.py:53 #: settings/serializers/cleaning.py:53
msgid "Change secret and push record retention days (day)" msgid "Change secret and push record retention days"
msgstr "Días de conservación de los registros de cambio de contraseña (días)" msgstr ""
"Días de retención de los registros de notificaciones de cambio de contraseña"
" de cuenta"
#: settings/serializers/feature.py:23 settings/serializers/msg.py:69 #: settings/serializers/feature.py:23 settings/serializers/msg.py:69
msgid "Subject" msgid "Subject"
@@ -8418,29 +8434,32 @@ msgid "Watermark"
msgstr "Activar marca de agua" msgstr "Activar marca de agua"
#: settings/serializers/security.py:205 #: settings/serializers/security.py:205
msgid "Watermark session content" msgid "Session content"
msgstr "Contenido de personalización de la marca de agua de la sesión" msgstr "Contenido personalizado de marca de agua de sesión"
#: settings/serializers/security.py:208 #: settings/serializers/security.py:208
msgid "Watermark console content" msgid "Console content"
msgstr "" msgstr "Contenido personalizado de marca de agua de página de gestión"
"Contenido de personalización de la marca de agua en la página de gestión"
#: settings/serializers/security.py:211
msgid "Font color"
msgstr "Color de fuente"
#: settings/serializers/security.py:214 #: settings/serializers/security.py:214
msgid "Watermark font size" msgid "Font size"
msgstr "Tamaño y tipo de fuente" msgstr "Tamaño de fuente (px)"
#: settings/serializers/security.py:217 #: settings/serializers/security.py:217
msgid "Watermark height" msgid "Height"
msgstr "Altura de la marca de agua individual" msgstr "Altura (px)"
#: settings/serializers/security.py:220 #: settings/serializers/security.py:220
msgid "Watermark width" msgid "Width"
msgstr "Ancho de la marca de agua individual" msgstr "Ancho (px)"
#: settings/serializers/security.py:223 #: settings/serializers/security.py:223
msgid "Watermark rotate" msgid "Rotate"
msgstr "Ángulo de rotación de la marca de agua" msgstr "Rotación (grados)"
#: settings/serializers/security.py:227 #: settings/serializers/security.py:227
msgid "Max idle time (minute)" msgid "Max idle time (minute)"
@@ -8774,15 +8793,15 @@ msgstr "Error de autenticación: (desconocido): {}"
msgid "Authentication success: {}" msgid "Authentication success: {}"
msgstr "Autenticación exitosa: {}" msgstr "Autenticación exitosa: {}"
#: settings/ws.py:226 #: settings/ws.py:228
msgid "No LDAP user was found" msgid "No LDAP user was found"
msgstr "No se obtuvo ningún usuario LDAP" msgstr "No se obtuvo ningún usuario LDAP"
#: settings/ws.py:235 #: settings/ws.py:237
msgid "Total {}, success {}, failure {}" msgid "Total {}, success {}, failure {}"
msgstr "Total: {}, Éxitos: {}, Fracasos: {}" msgstr "Total: {}, Éxitos: {}, Fracasos: {}"
#: settings/ws.py:239 #: settings/ws.py:241
msgid ", disabled {}" msgid ", disabled {}"
msgstr ", deshabilitar {}" msgstr ", deshabilitar {}"
@@ -12231,28 +12250,3 @@ msgstr "Importación de licencia exitosa"
#: xpack/plugins/license/api.py:53 #: xpack/plugins/license/api.py:53
msgid "Invalid license" msgid "Invalid license"
msgstr "Licencia no válida" msgstr "Licencia no válida"
#, fuzzy
#~ msgid "Themes"
#~ msgstr "Tema"
#, fuzzy
#~ msgid "domain_name"
#~ msgstr "Nombre de dominio"
#~ msgid "Task execution id"
#~ msgstr "ID de ejecución de tareas"
#~ msgid "Respectful"
#~ msgstr "Estimado"
#~ msgid ""
#~ "Hello! The following is the failure of changing the password of your assets "
#~ "or pushing the account. Please check and handle it in time."
#~ msgstr ""
#~ "¡Hola! A continuación se presentan las situaciones en las que ha fallado el "
#~ "cambio o envío de la cuenta de activos. Por favor, revise y procese a la "
#~ "brevedad."
#~ msgid "EXCHANGE"
#~ msgstr "Intercambio"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-16 14:10+0800\n" "POT-Creation-Date: 2025-11-06 15:37+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,14 +18,14 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
#: accounts/api/account/account.py:141 #: accounts/api/account/account.py:142
#: accounts/serializers/account/account.py:181 #: accounts/serializers/account/account.py:181
#: accounts/serializers/account/account.py:362 #: accounts/serializers/account/account.py:362
msgid "Account already exists" msgid "Account already exists"
msgstr "アカウントはすでに存在しています" msgstr "アカウントはすでに存在しています"
#: accounts/api/account/application.py:77 #: accounts/api/account/application.py:77
#: authentication/api/connection_token.py:452 #: authentication/api/connection_token.py:453
msgid "Account not found" msgid "Account not found"
msgstr "アカウントが見つかりません" msgstr "アカウントが見つかりません"
@@ -459,7 +459,7 @@ msgstr "Vault 操作に失敗しました。再試行するか、Vault のアカ
#: accounts/templates/accounts/push_account_report.html:78 #: accounts/templates/accounts/push_account_report.html:78
#: accounts/templates/accounts/push_account_report.html:118 #: accounts/templates/accounts/push_account_report.html:118
#: acls/notifications.py:70 acls/serializers/base.py:111 #: acls/notifications.py:70 acls/serializers/base.py:111
#: assets/models/asset/common.py:102 assets/models/asset/common.py:428 #: assets/models/asset/common.py:102 assets/models/asset/common.py:427
#: assets/models/cmd_filter.py:36 audits/models.py:59 audits/models.py:336 #: assets/models/cmd_filter.py:36 audits/models.py:59 audits/models.py:336
#: audits/serializers.py:230 authentication/models/connection_token.py:42 #: audits/serializers.py:230 authentication/models/connection_token.py:42
#: perms/models/asset_permission.py:69 terminal/backends/command/models.py:17 #: perms/models/asset_permission.py:69 terminal/backends/command/models.py:17
@@ -474,7 +474,7 @@ msgstr "資産"
#: accounts/models/account.py:89 accounts/models/template.py:16 #: accounts/models/account.py:89 accounts/models/template.py:16
#: accounts/serializers/account/account.py:234 #: accounts/serializers/account/account.py:234
#: accounts/serializers/account/account.py:304 #: accounts/serializers/account/account.py:305
#: accounts/serializers/account/template.py:35 #: accounts/serializers/account/template.py:35
#: authentication/serializers/connect_token_secret.py:51 #: authentication/serializers/connect_token_secret.py:51
msgid "Su from" msgid "Su from"
@@ -536,13 +536,14 @@ msgstr "変更状態"
#: accounts/models/account.py:107 #: accounts/models/account.py:107
#: accounts/models/automations/check_account.py:64 #: accounts/models/automations/check_account.py:64
#: accounts/serializers/account/account.py:295
#: accounts/serializers/account/service.py:13 #: accounts/serializers/account/service.py:13
#: accounts/serializers/automations/change_secret.py:117 #: accounts/serializers/automations/change_secret.py:117
#: accounts/serializers/automations/change_secret.py:148 #: accounts/serializers/automations/change_secret.py:148
#: acls/serializers/base.py:112 #: acls/serializers/base.py:112
#: acls/templates/acls/asset_login_reminder.html:11 #: acls/templates/acls/asset_login_reminder.html:11
#: assets/serializers/gateway.py:33 audits/models.py:60 audits/models.py:337 #: assets/serializers/gateway.py:33 audits/models.py:60 audits/models.py:337
#: audits/serializers.py:231 authentication/api/connection_token.py:464 #: audits/serializers.py:231 authentication/api/connection_token.py:465
#: ops/models/base.py:18 perms/models/asset_permission.py:75 #: ops/models/base.py:18 perms/models/asset_permission.py:75
#: settings/serializers/msg.py:33 terminal/backends/command/models.py:18 #: settings/serializers/msg.py:33 terminal/backends/command/models.py:18
#: terminal/models/session/session.py:31 terminal/notifications.py:291 #: terminal/models/session/session.py:31 terminal/notifications.py:291
@@ -635,7 +636,7 @@ msgstr "アイコン"
#: accounts/models/application.py:20 accounts/models/base.py:39 #: accounts/models/application.py:20 accounts/models/base.py:39
#: accounts/models/mixins/vault.py:49 #: accounts/models/mixins/vault.py:49
#: accounts/serializers/account/account.py:492 #: accounts/serializers/account/account.py:498
#: accounts/serializers/account/base.py:20 #: accounts/serializers/account/base.py:20
#: authentication/models/temp_token.py:11 #: authentication/models/temp_token.py:11
#: authentication/templates/authentication/_access_key_modal.html:31 #: authentication/templates/authentication/_access_key_modal.html:31
@@ -808,7 +809,7 @@ msgid "Status"
msgstr "ステータス" msgstr "ステータス"
#: accounts/models/automations/change_secret.py:51 #: accounts/models/automations/change_secret.py:51
#: accounts/serializers/account/account.py:296 assets/const/automation.py:9 #: accounts/serializers/account/account.py:297 assets/const/automation.py:9
#: authentication/templates/authentication/passkey.html:177 #: authentication/templates/authentication/passkey.html:177
#: authentication/views/base.py:42 authentication/views/base.py:43 #: authentication/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:67 #: authentication/views/base.py:44 common/const/choices.py:67
@@ -1032,7 +1033,7 @@ msgid "Verify asset account"
msgstr "アカウントの確認" msgstr "アカウントの確認"
#: accounts/models/base.py:37 accounts/models/base.py:66 #: accounts/models/base.py:37 accounts/models/base.py:66
#: accounts/serializers/account/account.py:491 #: accounts/serializers/account/account.py:497
#: accounts/serializers/account/base.py:17 #: accounts/serializers/account/base.py:17
#: accounts/serializers/automations/change_secret.py:50 #: accounts/serializers/automations/change_secret.py:50
#: authentication/serializers/connect_token_secret.py:42 #: authentication/serializers/connect_token_secret.py:42
@@ -1255,54 +1256,46 @@ msgstr "アカウントは既に存在します。フィールド:{fields}は
msgid "Has secret" msgid "Has secret"
msgstr "エスクローされたパスワード" msgstr "エスクローされたパスワード"
#: accounts/serializers/account/account.py:295 ops/models/celery.py:84 #: accounts/serializers/account/account.py:296 ops/models/celery.py:84
#: tickets/models/comment.py:13 tickets/models/ticket/general.py:49 #: tickets/models/comment.py:13 tickets/models/ticket/general.py:49
#: tickets/models/ticket/general.py:280 tickets/serializers/super_ticket.py:14 #: tickets/models/ticket/general.py:280 tickets/serializers/super_ticket.py:14
msgid "State" msgid "State"
msgstr "状態" msgstr "状態"
#: accounts/serializers/account/account.py:297 #: accounts/serializers/account/account.py:298
msgid "Changed" msgid "Changed"
msgstr "編集済み" msgstr "編集済み"
#: accounts/serializers/account/account.py:307 acls/models/base.py:97 #: accounts/serializers/account/account.py:410
#: acls/templates/acls/asset_login_reminder.html:10
#: assets/models/automations/base.py:25
#: assets/serializers/automations/base.py:20 assets/serializers/domain.py:33
#: assets/serializers/platform.py:181 assets/serializers/platform.py:213
#: authentication/api/connection_token.py:463 ops/models/base.py:17
#: ops/models/job.py:157 ops/serializers/job.py:21
#: perms/serializers/permission.py:57
#: terminal/templates/terminal/_msg_command_execute_alert.html:16
#: xpack/plugins/cloud/manager.py:101
msgid "Assets"
msgstr "資産"
#: accounts/serializers/account/account.py:412
#, python-format #, python-format
msgid "Asset does not support this secret type: %s" msgid "Asset does not support this secret type: %s"
msgstr "アセットはアカウント タイプをサポートしていません: %s" msgstr "アセットはアカウント タイプをサポートしていません: %s"
#: accounts/serializers/account/account.py:444 #: accounts/serializers/account/account.py:443
msgid "Account has exist" msgid "Account has exist"
msgstr "アカウントはすでに存在しています" msgstr "アカウントはすでに存在しています"
#: accounts/serializers/account/account.py:476 #: accounts/serializers/account/account.py:468
#: accounts/serializers/account/account.py:483 #: accounts/serializers/account/account.py:469
msgid "At least one asset or node must be specified"
msgstr "少なくとも1つのアセットまたはードを選択します。"
#: accounts/serializers/account/account.py:482
#: accounts/serializers/account/account.py:489
#: accounts/serializers/account/base.py:73 #: accounts/serializers/account/base.py:73
#: accounts/serializers/account/base.py:88 #: accounts/serializers/account/base.py:88
#: assets/serializers/asset/common.py:425 #: assets/serializers/asset/common.py:425
msgid "Spec info" msgid "Spec info"
msgstr "特別情報" msgstr "特別情報"
#: accounts/serializers/account/account.py:493 #: accounts/serializers/account/account.py:499
#: authentication/serializers/connect_token_secret.py:173 #: authentication/serializers/connect_token_secret.py:173
#: authentication/templates/authentication/_access_key_modal.html:30 #: authentication/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:33 #: perms/models/perm_node.py:21 users/serializers/group.py:33
msgid "ID" msgid "ID"
msgstr "ID" msgstr "ID"
#: accounts/serializers/account/account.py:503 acls/notifications.py:18 #: accounts/serializers/account/account.py:509 acls/notifications.py:18
#: acls/notifications.py:68 acls/serializers/base.py:104 #: acls/notifications.py:68 acls/serializers/base.py:104
#: acls/templates/acls/asset_login_reminder.html:8 #: acls/templates/acls/asset_login_reminder.html:8
#: acls/templates/acls/user_login_reminder.html:8 #: acls/templates/acls/user_login_reminder.html:8
@@ -1327,7 +1320,7 @@ msgstr "ID"
msgid "User" msgid "User"
msgstr "ユーザー" msgstr "ユーザー"
#: accounts/serializers/account/account.py:504 #: accounts/serializers/account/account.py:510
#: authentication/templates/authentication/_access_key_modal.html:33 #: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:165 terminal/notifications.py:225 #: terminal/notifications.py:165 terminal/notifications.py:225
msgid "Date" msgid "Date"
@@ -1741,7 +1734,7 @@ msgstr "成功したアカウント"
#: accounts/templates/accounts/change_secret_report.html:118 #: accounts/templates/accounts/change_secret_report.html:118
#: accounts/templates/accounts/push_account_report.html:77 #: accounts/templates/accounts/push_account_report.html:77
#: accounts/templates/accounts/push_account_report.html:117 #: accounts/templates/accounts/push_account_report.html:117
#: audits/handler.py:128 #: audits/handler.py:130
msgid "No" msgid "No"
msgstr "否" msgstr "否"
@@ -1863,6 +1856,18 @@ msgstr "レビュー担当者"
msgid "Users" msgid "Users"
msgstr "ユーザー" msgstr "ユーザー"
#: acls/models/base.py:97 acls/templates/acls/asset_login_reminder.html:10
#: assets/models/automations/base.py:25
#: assets/serializers/automations/base.py:20 assets/serializers/domain.py:33
#: assets/serializers/platform.py:181 assets/serializers/platform.py:213
#: authentication/api/connection_token.py:464 ops/models/base.py:17
#: ops/models/job.py:157 ops/serializers/job.py:21
#: perms/serializers/permission.py:57
#: terminal/templates/terminal/_msg_command_execute_alert.html:16
#: xpack/plugins/cloud/manager.py:101
msgid "Assets"
msgstr "資産"
#: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60 #: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60
#: ops/serializers/job.py:92 terminal/const.py:88 #: ops/serializers/job.py:92 terminal/const.py:88
#: terminal/models/session/session.py:40 terminal/serializers/command.py:18 #: terminal/models/session/session.py:40 terminal/serializers/command.py:18
@@ -2614,19 +2619,19 @@ msgstr "資産ハードウェア情報の収集"
msgid "Custom info" msgid "Custom info"
msgstr "カスタム属性" msgstr "カスタム属性"
#: assets/models/asset/common.py:431 #: assets/models/asset/common.py:430
msgid "Can refresh asset hardware info" msgid "Can refresh asset hardware info"
msgstr "資産ハードウェア情報を更新できます" msgstr "資産ハードウェア情報を更新できます"
#: assets/models/asset/common.py:432 #: assets/models/asset/common.py:431
msgid "Can test asset connectivity" msgid "Can test asset connectivity"
msgstr "資産接続をテストできます" msgstr "資産接続をテストできます"
#: assets/models/asset/common.py:433 #: assets/models/asset/common.py:432
msgid "Can match asset" msgid "Can match asset"
msgstr "アセットを一致させることができます" msgstr "アセットを一致させることができます"
#: assets/models/asset/common.py:434 #: assets/models/asset/common.py:433
msgid "Can change asset nodes" msgid "Can change asset nodes"
msgstr "資産ノードを変更できます" msgstr "資産ノードを変更できます"
@@ -3500,7 +3505,7 @@ msgstr "タスク"
msgid "-" msgid "-"
msgstr "-" msgstr "-"
#: audits/handler.py:128 #: audits/handler.py:130
msgid "Yes" msgid "Yes"
msgstr "是" msgstr "是"
@@ -3779,35 +3784,35 @@ msgstr "この操作には、MFAを検証する必要があります"
msgid "Reusable connection token is not allowed, global setting not enabled" msgid "Reusable connection token is not allowed, global setting not enabled"
msgstr "再使用可能な接続トークンの使用は許可されていません。グローバル設定は有効になっていません" msgstr "再使用可能な接続トークンの使用は許可されていません。グローバル設定は有効になっていません"
#: authentication/api/connection_token.py:425 #: authentication/api/connection_token.py:426
msgid "Anonymous account is not supported for this asset" msgid "Anonymous account is not supported for this asset"
msgstr "匿名アカウントはこのプロパティではサポートされていません" msgstr "匿名アカウントはこのプロパティではサポートされていません"
#: authentication/api/connection_token.py:455 #: authentication/api/connection_token.py:456
msgid "Permission expired" msgid "Permission expired"
msgstr "承認の有効期限が切れています" msgstr "承認の有効期限が切れています"
#: authentication/api/connection_token.py:488 #: authentication/api/connection_token.py:489
msgid "ACL action is reject: {}({})" msgid "ACL action is reject: {}({})"
msgstr "ACL アクションは拒否です: {}({})" msgstr "ACL アクションは拒否です: {}({})"
#: authentication/api/connection_token.py:492 #: authentication/api/connection_token.py:493
msgid "ACL action is review" msgid "ACL action is review"
msgstr "ACL アクションはレビューです" msgstr "ACL アクションはレビューです"
#: authentication/api/connection_token.py:502 #: authentication/api/connection_token.py:503
msgid "ACL action is face verify" msgid "ACL action is face verify"
msgstr "ACL Action は顔認証です" msgstr "ACL Action は顔認証です"
#: authentication/api/connection_token.py:507 #: authentication/api/connection_token.py:508
msgid "ACL action not supported for this asset" msgid "ACL action not supported for this asset"
msgstr "資産ログインルールは現在の資産をサポートしていません" msgstr "資産ログインルールは現在の資産をサポートしていません"
#: authentication/api/connection_token.py:514 #: authentication/api/connection_token.py:515
msgid "ACL action is face online" msgid "ACL action is face online"
msgstr "ACL Action は顔オンラインです" msgstr "ACL Action は顔オンラインです"
#: authentication/api/connection_token.py:539 #: authentication/api/connection_token.py:540
msgid "No available face feature" msgid "No available face feature"
msgstr "利用可能な顔の特徴はありません" msgstr "利用可能な顔の特徴はありません"
@@ -3882,7 +3887,7 @@ msgstr "無効なトークンヘッダー。署名文字列に無効な文字を
msgid "Invalid token or cache refreshed." msgid "Invalid token or cache refreshed."
msgstr "無効なトークンまたはキャッシュの更新。" msgstr "無効なトークンまたはキャッシュの更新。"
#: authentication/backends/oidc/views.py:175 #: authentication/backends/oidc/views.py:137
msgid "OpenID Error" msgid "OpenID Error"
msgstr "OpenID エラー" msgstr "OpenID エラー"
@@ -4101,16 +4106,16 @@ msgstr "パスワードが無効です"
msgid "Please wait for %s seconds before retry" msgid "Please wait for %s seconds before retry"
msgstr "%s 秒後に再試行してください" msgstr "%s 秒後に再試行してください"
#: authentication/errors/redirect.py:85 authentication/mixins.py:332 #: authentication/errors/redirect.py:85 authentication/mixins.py:365
#: users/views/profile/reset.py:224 #: users/views/profile/reset.py:224
msgid "Your password is too simple, please change it for security" msgid "Your password is too simple, please change it for security"
msgstr "パスワードがシンプルすぎるので、セキュリティのために変更してください" msgstr "パスワードがシンプルすぎるので、セキュリティのために変更してください"
#: authentication/errors/redirect.py:93 authentication/mixins.py:341 #: authentication/errors/redirect.py:93 authentication/mixins.py:374
msgid "You should to change your password before login" msgid "You should to change your password before login"
msgstr "ログインする前にパスワードを変更する必要があります" msgstr "ログインする前にパスワードを変更する必要があります"
#: authentication/errors/redirect.py:101 authentication/mixins.py:350 #: authentication/errors/redirect.py:101 authentication/mixins.py:383
msgid "Your password has expired, please reset before logging in" msgid "Your password has expired, please reset before logging in"
msgstr "パスワードの有効期限が切れました。ログインする前にリセットしてください。" msgstr "パスワードの有効期限が切れました。ログインする前にリセットしてください。"
@@ -4227,21 +4232,27 @@ msgstr "無効にする電話番号をクリアする"
msgid "Authentication failed (before login check failed): {}" msgid "Authentication failed (before login check failed): {}"
msgstr "認証に失敗しました (ログインチェックが失敗する前): {}" msgstr "認証に失敗しました (ログインチェックが失敗する前): {}"
#: authentication/mixins.py:84 #: authentication/mixins.py:105
msgid ""
"The administrator has enabled \"Only allow existing users to log in\", \n"
" and the current user is not in the user list. Please contact the administrator."
msgstr "管理者は「既存のユーザーのみログインを許可」をオンにしており、現在のユーザーはユーザーリストにありません。管理者に連絡してください。"
#: authentication/mixins.py:117
msgid "User is invalid" msgid "User is invalid"
msgstr "無効なユーザーです" msgstr "無効なユーザーです"
#: authentication/mixins.py:99 #: authentication/mixins.py:132
msgid "" msgid ""
"The administrator has enabled 'Only allow login from user source'. \n" "The administrator has enabled 'Only allow login from user source'. \n"
" The current user source is {}. Please contact the administrator." " The current user source is {}. Please contact the administrator."
msgstr "管理者は「ユーザーソースからのみログインを許可」をオンにしており、現在のユーザーソースは {} です。管理者に連絡してください。" msgstr "管理者は「ユーザーソースからのみログインを許可」をオンにしており、現在のユーザーソースは {} です。管理者に連絡してください。"
#: authentication/mixins.py:278 #: authentication/mixins.py:311
msgid "The MFA type ({}) is not enabled" msgid "The MFA type ({}) is not enabled"
msgstr "MFAタイプ ({}) が有効になっていない" msgstr "MFAタイプ ({}) が有効になっていない"
#: authentication/mixins.py:320 #: authentication/mixins.py:353
msgid "Please change your password" msgid "Please change your password"
msgstr "パスワードを変更してください" msgstr "パスワードを変更してください"
@@ -4725,22 +4736,22 @@ msgstr "再試行しますか?"
msgid "LAN" msgid "LAN"
msgstr "ローカルエリアネットワーク" msgstr "ローカルエリアネットワーク"
#: authentication/views/base.py:71 #: authentication/views/base.py:70
#: perms/templates/perms/_msg_permed_items_expire.html:18 #: perms/templates/perms/_msg_permed_items_expire.html:18
msgid "If you have any question, please contact the administrator" msgid "If you have any question, please contact the administrator"
msgstr "質問があったら、管理者に連絡して下さい" msgstr "質問があったら、管理者に連絡して下さい"
#: authentication/views/base.py:144 #: authentication/views/base.py:143
#, python-format #, python-format
msgid "%s query user failed" msgid "%s query user failed"
msgstr "%sユーザーのクエリに失敗しました" msgstr "%sユーザーのクエリに失敗しました"
#: authentication/views/base.py:152 #: authentication/views/base.py:151
#, python-format #, python-format
msgid "The %s is already bound to another user" msgid "The %s is already bound to another user"
msgstr "%sが別のユーザーにバインドされています。" msgstr "%sが別のユーザーにバインドされています。"
#: authentication/views/base.py:159 #: authentication/views/base.py:158
#, python-format #, python-format
msgid "Binding %s successfully" msgid "Binding %s successfully"
msgstr "バインド%s成功" msgstr "バインド%s成功"
@@ -4879,7 +4890,7 @@ msgstr "企業の微信からユーザーを取得できませんでした"
msgid "Please login with a password and then bind the WeCom" msgid "Please login with a password and then bind the WeCom"
msgstr "パスワードでログインしてからWeComをバインドしてください" msgstr "パスワードでログインしてからWeComをバインドしてください"
#: common/api/action.py:68 #: common/api/action.py:80
msgid "Request file format may be wrong" msgid "Request file format may be wrong"
msgstr "リクエストファイルの形式が間違っている可能性があります" msgstr "リクエストファイルの形式が間違っている可能性があります"
@@ -5396,7 +5407,7 @@ msgstr ""
msgid "App Labels" msgid "App Labels"
msgstr "ラベル" msgstr "ラベル"
#: labels/models.py:15 settings/serializers/security.py:211 #: labels/models.py:15
msgid "Color" msgid "Color"
msgstr "色" msgstr "色"
@@ -7356,40 +7367,40 @@ msgid "Period clean"
msgstr "定時清掃" msgstr "定時清掃"
#: settings/serializers/cleaning.py:15 #: settings/serializers/cleaning.py:15
msgid "Login log retention days (day)" msgid "Login log retention days"
msgstr "ログインログは日数を保持します(天)" msgstr "ログインログ保持日数"
#: settings/serializers/cleaning.py:19 #: settings/serializers/cleaning.py:19
msgid "Task log retention days (day)" msgid "Task log retention days"
msgstr "タスクログは日数を保持します(天)" msgstr "タスクログ保持日数"
#: settings/serializers/cleaning.py:23 #: settings/serializers/cleaning.py:23
msgid "Operate log retention days (day)" msgid "Operate log retention days"
msgstr "ログ管理日を操作する(天)" msgstr "アクションログ保持日数"
#: settings/serializers/cleaning.py:27 #: settings/serializers/cleaning.py:27
msgid "password change log keep days (day)" msgid "Password change log retention days"
msgstr "パスワード変更ログ(天)" msgstr "ユーザー変更パスワードログ保持日数"
#: settings/serializers/cleaning.py:31 #: settings/serializers/cleaning.py:31
msgid "FTP log retention days (day)" msgid "FTP log retention days"
msgstr "タスクログは日数を保持します(天)" msgstr "アップロードダウンロード記録保持日数"
#: settings/serializers/cleaning.py:35 #: settings/serializers/cleaning.py:35
msgid "Cloud sync task history retention days (day)" msgid "Cloud sync task history retention days"
msgstr "タスクログは日数を保持します(天)" msgstr "クラウド同期記録保持日数"
#: settings/serializers/cleaning.py:39 #: settings/serializers/cleaning.py:39
msgid "job execution retention days (day)" msgid "job execution retention days"
msgstr "ジョブセンターの実行履歴 (天) " msgstr "作業実行履歴保持日数"
#: settings/serializers/cleaning.py:43 #: settings/serializers/cleaning.py:43
msgid "Activity log retention days (day)" msgid "Activity log retention days"
msgstr "活動ログは日数を保持します(天)" msgstr "活動記録保持日数"
#: settings/serializers/cleaning.py:46 #: settings/serializers/cleaning.py:46
msgid "Session log retention days (day)" msgid "Session log retention days"
msgstr "ログインログは日数を保持します(天)" msgstr "セッションログ保持日数"
#: settings/serializers/cleaning.py:48 #: settings/serializers/cleaning.py:48
msgid "" msgid ""
@@ -7399,8 +7410,8 @@ msgstr ""
"この期間を超えるセッション、録音、およびコマンド レコードは削除されます (データベースのバックアップに影響し、OSS などには影響しません)" "この期間を超えるセッション、録音、およびコマンド レコードは削除されます (データベースのバックアップに影響し、OSS などには影響しません)"
#: settings/serializers/cleaning.py:53 #: settings/serializers/cleaning.py:53
msgid "Change secret and push record retention days (day)" msgid "Change secret and push record retention days"
msgstr "パスワード変更プッシュ記録保持する日数 (日)" msgstr "アカウント変更パスワードプッシュ記録保持日数"
#: settings/serializers/feature.py:23 settings/serializers/msg.py:69 #: settings/serializers/feature.py:23 settings/serializers/msg.py:69
msgid "Subject" msgid "Subject"
@@ -7872,28 +7883,32 @@ msgid "Watermark"
msgstr "透かしの有効化" msgstr "透かしの有効化"
#: settings/serializers/security.py:205 #: settings/serializers/security.py:205
msgid "Watermark session content" msgid "Session content"
msgstr "セッションウォーターマークカスタム内容" msgstr "セッションウォーターマークカスタム内容"
#: settings/serializers/security.py:208 #: settings/serializers/security.py:208
msgid "Watermark console content" msgid "Console content"
msgstr "管理ページウォーターマークカスタム内容" msgstr "管理ページウォーターマークカスタム内容"
#: settings/serializers/security.py:211
msgid "Font color"
msgstr "フォントカラー"
#: settings/serializers/security.py:214 #: settings/serializers/security.py:214
msgid "Watermark font size" msgid "Font size"
msgstr "フォントサイズ" msgstr "フォントサイズ (px)"
#: settings/serializers/security.py:217 #: settings/serializers/security.py:217
msgid "Watermark height" msgid "Height"
msgstr "単一ウォーターマークの高さ" msgstr "高さ (px)"
#: settings/serializers/security.py:220 #: settings/serializers/security.py:220
msgid "Watermark width" msgid "Width"
msgstr "単一ウォーターマークの幅" msgstr "幅 (px)"
#: settings/serializers/security.py:223 #: settings/serializers/security.py:223
msgid "Watermark rotate" msgid "Rotate"
msgstr "ウォーターマークの回転角度" msgstr "回転 (度)"
#: settings/serializers/security.py:227 #: settings/serializers/security.py:227
msgid "Max idle time (minute)" msgid "Max idle time (minute)"
@@ -8195,15 +8210,15 @@ msgstr "認証に失敗しました (不明): {}"
msgid "Authentication success: {}" msgid "Authentication success: {}"
msgstr "認証成功: {}" msgstr "認証成功: {}"
#: settings/ws.py:226 #: settings/ws.py:228
msgid "No LDAP user was found" msgid "No LDAP user was found"
msgstr "LDAPユーザーが取得されませんでした" msgstr "LDAPユーザーが取得されませんでした"
#: settings/ws.py:235 #: settings/ws.py:237
msgid "Total {}, success {}, failure {}" msgid "Total {}, success {}, failure {}"
msgstr "合計 {},成功 {},失敗 {}" msgstr "合計 {},成功 {},失敗 {}"
#: settings/ws.py:239 #: settings/ws.py:241
msgid ", disabled {}" msgid ", disabled {}"
msgstr "無効 {}" msgstr "無効 {}"
@@ -11471,3 +11486,18 @@ msgstr "ライセンスのインポートに成功"
#: xpack/plugins/license/api.py:53 #: xpack/plugins/license/api.py:53
msgid "Invalid license" msgid "Invalid license"
msgstr "ライセンスが無効です" msgstr "ライセンスが無効です"
#~ msgid "Watermark console content"
#~ msgstr "管理ページのウォーターマークカスタム内容"
#~ msgid "Watermark font size"
#~ msgstr "フォントサイズ"
#~ msgid "Watermark height"
#~ msgstr "単一ウォーターマークの高さ"
#~ msgid "Watermark width"
#~ msgstr "単一ウォーターマークの幅"
#~ msgid "Watermark rotate"
#~ msgstr "ウォーターマークの回転角度"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-16 14:10+0800\n" "POT-Creation-Date: 2025-11-06 15:37+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,14 +18,14 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
#: accounts/api/account/account.py:141 #: accounts/api/account/account.py:142
#: accounts/serializers/account/account.py:181 #: accounts/serializers/account/account.py:181
#: accounts/serializers/account/account.py:362 #: accounts/serializers/account/account.py:362
msgid "Account already exists" msgid "Account already exists"
msgstr "계정이 이미 존재합니다" msgstr "계정이 이미 존재합니다"
#: accounts/api/account/application.py:77 #: accounts/api/account/application.py:77
#: authentication/api/connection_token.py:452 #: authentication/api/connection_token.py:453
msgid "Account not found" msgid "Account not found"
msgstr "계정을 찾을 수 없습니다" msgstr "계정을 찾을 수 없습니다"
@@ -459,7 +459,7 @@ msgstr "Vault 작업이 실패했습니다. 다시 시도하거나 Vault의 계
#: accounts/templates/accounts/push_account_report.html:78 #: accounts/templates/accounts/push_account_report.html:78
#: accounts/templates/accounts/push_account_report.html:118 #: accounts/templates/accounts/push_account_report.html:118
#: acls/notifications.py:70 acls/serializers/base.py:111 #: acls/notifications.py:70 acls/serializers/base.py:111
#: assets/models/asset/common.py:102 assets/models/asset/common.py:428 #: assets/models/asset/common.py:102 assets/models/asset/common.py:427
#: assets/models/cmd_filter.py:36 audits/models.py:59 audits/models.py:336 #: assets/models/cmd_filter.py:36 audits/models.py:59 audits/models.py:336
#: audits/serializers.py:230 authentication/models/connection_token.py:42 #: audits/serializers.py:230 authentication/models/connection_token.py:42
#: perms/models/asset_permission.py:69 terminal/backends/command/models.py:17 #: perms/models/asset_permission.py:69 terminal/backends/command/models.py:17
@@ -474,7 +474,7 @@ msgstr "자산"
#: accounts/models/account.py:89 accounts/models/template.py:16 #: accounts/models/account.py:89 accounts/models/template.py:16
#: accounts/serializers/account/account.py:234 #: accounts/serializers/account/account.py:234
#: accounts/serializers/account/account.py:304 #: accounts/serializers/account/account.py:305
#: accounts/serializers/account/template.py:35 #: accounts/serializers/account/template.py:35
#: authentication/serializers/connect_token_secret.py:51 #: authentication/serializers/connect_token_secret.py:51
msgid "Su from" msgid "Su from"
@@ -521,13 +521,14 @@ msgstr "비밀번호 변경 상태"
#: accounts/models/account.py:107 #: accounts/models/account.py:107
#: accounts/models/automations/check_account.py:64 #: accounts/models/automations/check_account.py:64
#: accounts/serializers/account/account.py:295
#: accounts/serializers/account/service.py:13 #: accounts/serializers/account/service.py:13
#: accounts/serializers/automations/change_secret.py:117 #: accounts/serializers/automations/change_secret.py:117
#: accounts/serializers/automations/change_secret.py:148 #: accounts/serializers/automations/change_secret.py:148
#: acls/serializers/base.py:112 #: acls/serializers/base.py:112
#: acls/templates/acls/asset_login_reminder.html:11 #: acls/templates/acls/asset_login_reminder.html:11
#: assets/serializers/gateway.py:33 audits/models.py:60 audits/models.py:337 #: assets/serializers/gateway.py:33 audits/models.py:60 audits/models.py:337
#: audits/serializers.py:231 authentication/api/connection_token.py:464 #: audits/serializers.py:231 authentication/api/connection_token.py:465
#: ops/models/base.py:18 perms/models/asset_permission.py:75 #: ops/models/base.py:18 perms/models/asset_permission.py:75
#: settings/serializers/msg.py:33 terminal/backends/command/models.py:18 #: settings/serializers/msg.py:33 terminal/backends/command/models.py:18
#: terminal/models/session/session.py:31 terminal/notifications.py:291 #: terminal/models/session/session.py:31 terminal/notifications.py:291
@@ -620,7 +621,7 @@ msgstr "아이콘"
#: accounts/models/application.py:20 accounts/models/base.py:39 #: accounts/models/application.py:20 accounts/models/base.py:39
#: accounts/models/mixins/vault.py:49 #: accounts/models/mixins/vault.py:49
#: accounts/serializers/account/account.py:492 #: accounts/serializers/account/account.py:498
#: accounts/serializers/account/base.py:20 #: accounts/serializers/account/base.py:20
#: authentication/models/temp_token.py:11 #: authentication/models/temp_token.py:11
#: authentication/templates/authentication/_access_key_modal.html:31 #: authentication/templates/authentication/_access_key_modal.html:31
@@ -793,7 +794,7 @@ msgid "Status"
msgstr "상태" msgstr "상태"
#: accounts/models/automations/change_secret.py:51 #: accounts/models/automations/change_secret.py:51
#: accounts/serializers/account/account.py:296 assets/const/automation.py:9 #: accounts/serializers/account/account.py:297 assets/const/automation.py:9
#: authentication/templates/authentication/passkey.html:177 #: authentication/templates/authentication/passkey.html:177
#: authentication/views/base.py:42 authentication/views/base.py:43 #: authentication/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:67 #: authentication/views/base.py:44 common/const/choices.py:67
@@ -1017,7 +1018,7 @@ msgid "Verify asset account"
msgstr "계정 검증" msgstr "계정 검증"
#: accounts/models/base.py:37 accounts/models/base.py:66 #: accounts/models/base.py:37 accounts/models/base.py:66
#: accounts/serializers/account/account.py:491 #: accounts/serializers/account/account.py:497
#: accounts/serializers/account/base.py:17 #: accounts/serializers/account/base.py:17
#: accounts/serializers/automations/change_secret.py:50 #: accounts/serializers/automations/change_secret.py:50
#: authentication/serializers/connect_token_secret.py:42 #: authentication/serializers/connect_token_secret.py:42
@@ -1241,54 +1242,46 @@ msgstr "계정이 이미 존재합니다. 필드: {fields}는 고유해야 합
msgid "Has secret" msgid "Has secret"
msgstr "이미 관리된 비밀번호" msgstr "이미 관리된 비밀번호"
#: accounts/serializers/account/account.py:295 ops/models/celery.py:84 #: accounts/serializers/account/account.py:296 ops/models/celery.py:84
#: tickets/models/comment.py:13 tickets/models/ticket/general.py:49 #: tickets/models/comment.py:13 tickets/models/ticket/general.py:49
#: tickets/models/ticket/general.py:280 tickets/serializers/super_ticket.py:14 #: tickets/models/ticket/general.py:280 tickets/serializers/super_ticket.py:14
msgid "State" msgid "State"
msgstr "상태" msgstr "상태"
#: accounts/serializers/account/account.py:297 #: accounts/serializers/account/account.py:298
msgid "Changed" msgid "Changed"
msgstr "수정됨" msgstr "수정됨"
#: accounts/serializers/account/account.py:307 acls/models/base.py:97 #: accounts/serializers/account/account.py:410
#: acls/templates/acls/asset_login_reminder.html:10
#: assets/models/automations/base.py:25
#: assets/serializers/automations/base.py:20 assets/serializers/domain.py:33
#: assets/serializers/platform.py:181 assets/serializers/platform.py:213
#: authentication/api/connection_token.py:463 ops/models/base.py:17
#: ops/models/job.py:157 ops/serializers/job.py:21
#: perms/serializers/permission.py:57
#: terminal/templates/terminal/_msg_command_execute_alert.html:16
#: xpack/plugins/cloud/manager.py:101
msgid "Assets"
msgstr "자산"
#: accounts/serializers/account/account.py:412
#, python-format #, python-format
msgid "Asset does not support this secret type: %s" msgid "Asset does not support this secret type: %s"
msgstr "자산이 지원하지 않는 계정 유형: %s" msgstr "자산이 지원하지 않는 계정 유형: %s"
#: accounts/serializers/account/account.py:444 #: accounts/serializers/account/account.py:443
msgid "Account has exist" msgid "Account has exist"
msgstr "계정이 이미 존재합니다" msgstr "계정이 이미 존재합니다"
#: accounts/serializers/account/account.py:476 #: accounts/serializers/account/account.py:468
#: accounts/serializers/account/account.py:483 #: accounts/serializers/account/account.py:469
msgid "At least one asset or node must be specified"
msgstr "자산 또는 노드 중 최소 하나 선택"
#: accounts/serializers/account/account.py:482
#: accounts/serializers/account/account.py:489
#: accounts/serializers/account/base.py:73 #: accounts/serializers/account/base.py:73
#: accounts/serializers/account/base.py:88 #: accounts/serializers/account/base.py:88
#: assets/serializers/asset/common.py:425 #: assets/serializers/asset/common.py:425
msgid "Spec info" msgid "Spec info"
msgstr "특별 정보" msgstr "특별 정보"
#: accounts/serializers/account/account.py:493 #: accounts/serializers/account/account.py:499
#: authentication/serializers/connect_token_secret.py:173 #: authentication/serializers/connect_token_secret.py:173
#: authentication/templates/authentication/_access_key_modal.html:30 #: authentication/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:33 #: perms/models/perm_node.py:21 users/serializers/group.py:33
msgid "ID" msgid "ID"
msgstr "ID" msgstr "ID"
#: accounts/serializers/account/account.py:503 acls/notifications.py:18 #: accounts/serializers/account/account.py:509 acls/notifications.py:18
#: acls/notifications.py:68 acls/serializers/base.py:104 #: acls/notifications.py:68 acls/serializers/base.py:104
#: acls/templates/acls/asset_login_reminder.html:8 #: acls/templates/acls/asset_login_reminder.html:8
#: acls/templates/acls/user_login_reminder.html:8 #: acls/templates/acls/user_login_reminder.html:8
@@ -1313,7 +1306,7 @@ msgstr "ID"
msgid "User" msgid "User"
msgstr "사용자" msgstr "사용자"
#: accounts/serializers/account/account.py:504 #: accounts/serializers/account/account.py:510
#: authentication/templates/authentication/_access_key_modal.html:33 #: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:165 terminal/notifications.py:225 #: terminal/notifications.py:165 terminal/notifications.py:225
msgid "Date" msgid "Date"
@@ -1731,7 +1724,7 @@ msgstr "성공한 계정"
#: accounts/templates/accounts/change_secret_report.html:118 #: accounts/templates/accounts/change_secret_report.html:118
#: accounts/templates/accounts/push_account_report.html:77 #: accounts/templates/accounts/push_account_report.html:77
#: accounts/templates/accounts/push_account_report.html:117 #: accounts/templates/accounts/push_account_report.html:117
#: audits/handler.py:128 #: audits/handler.py:130
msgid "No" msgid "No"
msgstr "아니요" msgstr "아니요"
@@ -1853,6 +1846,18 @@ msgstr "승인자"
msgid "Users" msgid "Users"
msgstr "사용자" msgstr "사용자"
#: acls/models/base.py:97 acls/templates/acls/asset_login_reminder.html:10
#: assets/models/automations/base.py:25
#: assets/serializers/automations/base.py:20 assets/serializers/domain.py:33
#: assets/serializers/platform.py:181 assets/serializers/platform.py:213
#: authentication/api/connection_token.py:464 ops/models/base.py:17
#: ops/models/job.py:157 ops/serializers/job.py:21
#: perms/serializers/permission.py:57
#: terminal/templates/terminal/_msg_command_execute_alert.html:16
#: xpack/plugins/cloud/manager.py:101
msgid "Assets"
msgstr "자산"
#: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60 #: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60
#: ops/serializers/job.py:92 terminal/const.py:88 #: ops/serializers/job.py:92 terminal/const.py:88
#: terminal/models/session/session.py:40 terminal/serializers/command.py:18 #: terminal/models/session/session.py:40 terminal/serializers/command.py:18
@@ -2606,19 +2611,19 @@ msgstr "자산 하드웨어 정보 수집"
msgid "Custom info" msgid "Custom info"
msgstr "사용자 정의 속성" msgstr "사용자 정의 속성"
#: assets/models/asset/common.py:431 #: assets/models/asset/common.py:430
msgid "Can refresh asset hardware info" msgid "Can refresh asset hardware info"
msgstr "자산 하드웨어 정보를 업데이트할 수 있습니다" msgstr "자산 하드웨어 정보를 업데이트할 수 있습니다"
#: assets/models/asset/common.py:432 #: assets/models/asset/common.py:431
msgid "Can test asset connectivity" msgid "Can test asset connectivity"
msgstr "자산 연결성을 테스트할 수 있습니다." msgstr "자산 연결성을 테스트할 수 있습니다."
#: assets/models/asset/common.py:433 #: assets/models/asset/common.py:432
msgid "Can match asset" msgid "Can match asset"
msgstr "자산을 매칭할 수 있습니다." msgstr "자산을 매칭할 수 있습니다."
#: assets/models/asset/common.py:434 #: assets/models/asset/common.py:433
msgid "Can change asset nodes" msgid "Can change asset nodes"
msgstr "자산 노드를 수정할 수 있습니다." msgstr "자산 노드를 수정할 수 있습니다."
@@ -3491,7 +3496,7 @@ msgstr "업무"
msgid "-" msgid "-"
msgstr "-" msgstr "-"
#: audits/handler.py:128 #: audits/handler.py:130
msgid "Yes" msgid "Yes"
msgstr "입니다" msgstr "입니다"
@@ -3769,35 +3774,35 @@ msgstr "이 작업은 귀하의 MFA를 확인해야 하므로, 먼저 활성화
msgid "Reusable connection token is not allowed, global setting not enabled" msgid "Reusable connection token is not allowed, global setting not enabled"
msgstr "재사용 가능한 연결 토큰은 허용되지 않으며, 글로벌 설정이 활성화되지 않았습니다." msgstr "재사용 가능한 연결 토큰은 허용되지 않으며, 글로벌 설정이 활성화되지 않았습니다."
#: authentication/api/connection_token.py:425 #: authentication/api/connection_token.py:426
msgid "Anonymous account is not supported for this asset" msgid "Anonymous account is not supported for this asset"
msgstr "익명 계정은 현재 자산을 지원하지 않습니다." msgstr "익명 계정은 현재 자산을 지원하지 않습니다."
#: authentication/api/connection_token.py:455 #: authentication/api/connection_token.py:456
msgid "Permission expired" msgid "Permission expired"
msgstr "권한이 만료되었습니다." msgstr "권한이 만료되었습니다."
#: authentication/api/connection_token.py:488 #: authentication/api/connection_token.py:489
msgid "ACL action is reject: {}({})" msgid "ACL action is reject: {}({})"
msgstr "ACL Action은 거부: {}({})입니다." msgstr "ACL Action은 거부: {}({})입니다."
#: authentication/api/connection_token.py:492 #: authentication/api/connection_token.py:493
msgid "ACL action is review" msgid "ACL action is review"
msgstr "ACL Action은 재검토입니다." msgstr "ACL Action은 재검토입니다."
#: authentication/api/connection_token.py:502 #: authentication/api/connection_token.py:503
msgid "ACL action is face verify" msgid "ACL action is face verify"
msgstr "ACL Action은 얼굴 인식입니다." msgstr "ACL Action은 얼굴 인식입니다."
#: authentication/api/connection_token.py:507 #: authentication/api/connection_token.py:508
msgid "ACL action not supported for this asset" msgid "ACL action not supported for this asset"
msgstr "자산 로그인 규칙은 현재 자산을 지원하지 않습니다." msgstr "자산 로그인 규칙은 현재 자산을 지원하지 않습니다."
#: authentication/api/connection_token.py:514 #: authentication/api/connection_token.py:515
msgid "ACL action is face online" msgid "ACL action is face online"
msgstr "ACL Action은 온라인 얼굴 인식입니다." msgstr "ACL Action은 온라인 얼굴 인식입니다."
#: authentication/api/connection_token.py:539 #: authentication/api/connection_token.py:540
msgid "No available face feature" msgid "No available face feature"
msgstr "사용 가능한 얼굴 특징이 없습니다." msgstr "사용 가능한 얼굴 특징이 없습니다."
@@ -3879,7 +3884,7 @@ msgstr "유효하지 않은 토큰 헤더입니다. 기호 문자열에는 유
msgid "Invalid token or cache refreshed." msgid "Invalid token or cache refreshed."
msgstr "새로 고침된 토큰 또는 캐시가 유효하지 않습니다." msgstr "새로 고침된 토큰 또는 캐시가 유효하지 않습니다."
#: authentication/backends/oidc/views.py:175 #: authentication/backends/oidc/views.py:137
msgid "OpenID Error" msgid "OpenID Error"
msgstr "OpenID 오류" msgstr "OpenID 오류"
@@ -4100,16 +4105,16 @@ msgstr "귀하의 비밀번호가 유효하지 않습니다"
msgid "Please wait for %s seconds before retry" msgid "Please wait for %s seconds before retry"
msgstr "%s 초 후에 다시 시도해주세요." msgstr "%s 초 후에 다시 시도해주세요."
#: authentication/errors/redirect.py:85 authentication/mixins.py:332 #: authentication/errors/redirect.py:85 authentication/mixins.py:365
#: users/views/profile/reset.py:224 #: users/views/profile/reset.py:224
msgid "Your password is too simple, please change it for security" msgid "Your password is too simple, please change it for security"
msgstr "비밀번호가 너무 간단합니다. 보안을 위해 수정해주세요." msgstr "비밀번호가 너무 간단합니다. 보안을 위해 수정해주세요."
#: authentication/errors/redirect.py:93 authentication/mixins.py:341 #: authentication/errors/redirect.py:93 authentication/mixins.py:374
msgid "You should to change your password before login" msgid "You should to change your password before login"
msgstr "로그인 완료 전에 비밀번호를 먼저 수정해주세요." msgstr "로그인 완료 전에 비밀번호를 먼저 수정해주세요."
#: authentication/errors/redirect.py:101 authentication/mixins.py:350 #: authentication/errors/redirect.py:101 authentication/mixins.py:383
msgid "Your password has expired, please reset before logging in" msgid "Your password has expired, please reset before logging in"
msgstr "당신의 비밀번호가 만료되었습니다. 수정 후 로그인해주세요." msgstr "당신의 비밀번호가 만료되었습니다. 수정 후 로그인해주세요."
@@ -4226,21 +4231,27 @@ msgstr "전화번호 삭제로 비활성화"
msgid "Authentication failed (before login check failed): {}" msgid "Authentication failed (before login check failed): {}"
msgstr "인증 실패 (로그인 전 검사 실패): {}" msgstr "인증 실패 (로그인 전 검사 실패): {}"
#: authentication/mixins.py:84 #: authentication/mixins.py:105
msgid ""
"The administrator has enabled \"Only allow existing users to log in\", \n"
" and the current user is not in the user list. Please contact the administrator."
msgstr "관리자가 '기존 사용자만 로그인 허용'을 활성화했으며, 현재 사용자가 사용자 목록에 없습니다. 관리자에게 연락해 주십시오."
#: authentication/mixins.py:117
msgid "User is invalid" msgid "User is invalid"
msgstr "무효한 사용자" msgstr "무효한 사용자"
#: authentication/mixins.py:99 #: authentication/mixins.py:132
msgid "" msgid ""
"The administrator has enabled 'Only allow login from user source'. \n" "The administrator has enabled 'Only allow login from user source'. \n"
" The current user source is {}. Please contact the administrator." " The current user source is {}. Please contact the administrator."
msgstr "관리자가 '사용자 출처에서만 로그인 허용'을 활성화하였습니다. 현재 사용자 출처는 {}이며 관리자를 연락하십시오." msgstr "관리자가 '사용자 출처에서만 로그인 허용'을 활성화하였습니다. 현재 사용자 출처는 {}이며 관리자를 연락하십시오."
#: authentication/mixins.py:278 #: authentication/mixins.py:311
msgid "The MFA type ({}) is not enabled" msgid "The MFA type ({}) is not enabled"
msgstr "해당 MFA ({}) 방식이 활성화되지 않았습니다." msgstr "해당 MFA ({}) 방식이 활성화되지 않았습니다."
#: authentication/mixins.py:320 #: authentication/mixins.py:353
msgid "Please change your password" msgid "Please change your password"
msgstr "비밀번호를 수정하십시오." msgstr "비밀번호를 수정하십시오."
@@ -4726,22 +4737,22 @@ msgstr "재시도 하시겠습니까?"
msgid "LAN" msgid "LAN"
msgstr "지역 네트워크" msgstr "지역 네트워크"
#: authentication/views/base.py:71 #: authentication/views/base.py:70
#: perms/templates/perms/_msg_permed_items_expire.html:18 #: perms/templates/perms/_msg_permed_items_expire.html:18
msgid "If you have any question, please contact the administrator" msgid "If you have any question, please contact the administrator"
msgstr "질문이나 요구 사항이 있는 경우 시스템 관리자에게 문의해 주세요" msgstr "질문이나 요구 사항이 있는 경우 시스템 관리자에게 문의해 주세요"
#: authentication/views/base.py:144 #: authentication/views/base.py:143
#, python-format #, python-format
msgid "%s query user failed" msgid "%s query user failed"
msgstr "%s 사용자 조회 실패" msgstr "%s 사용자 조회 실패"
#: authentication/views/base.py:152 #: authentication/views/base.py:151
#, python-format #, python-format
msgid "The %s is already bound to another user" msgid "The %s is already bound to another user"
msgstr "%s 다른 사용자에 이미 바인딩되었습니다." msgstr "%s 다른 사용자에 이미 바인딩되었습니다."
#: authentication/views/base.py:159 #: authentication/views/base.py:158
#, python-format #, python-format
msgid "Binding %s successfully" msgid "Binding %s successfully"
msgstr "%s 바인딩 성공" msgstr "%s 바인딩 성공"
@@ -4880,7 +4891,7 @@ msgstr "기업 WeChat에서 사용자 정보를 가져오지 못했습니다."
msgid "Please login with a password and then bind the WeCom" msgid "Please login with a password and then bind the WeCom"
msgstr "密码로 로그인한 후 기업 WeChat을 연결해 주시기 바랍니다." msgstr "密码로 로그인한 후 기업 WeChat을 연결해 주시기 바랍니다."
#: common/api/action.py:68 #: common/api/action.py:80
msgid "Request file format may be wrong" msgid "Request file format may be wrong"
msgstr "업로드한 파일 형식이 잘못되었거나 다른 유형의 리소스 파일입니다." msgstr "업로드한 파일 형식이 잘못되었거나 다른 유형의 리소스 파일입니다."
@@ -5398,7 +5409,7 @@ msgstr "태그 관리"
msgid "App Labels" msgid "App Labels"
msgstr "색상" msgstr "색상"
#: labels/models.py:15 settings/serializers/security.py:211 #: labels/models.py:15
msgid "Color" msgid "Color"
msgstr "색상" msgstr "색상"
@@ -7398,40 +7409,40 @@ msgid "Period clean"
msgstr "정기 청소" msgstr "정기 청소"
#: settings/serializers/cleaning.py:15 #: settings/serializers/cleaning.py:15
msgid "Login log retention days (day)" msgid "Login log retention days"
msgstr "로그인 로그 (일)" msgstr "로그인 로그 보존 일수"
#: settings/serializers/cleaning.py:19 #: settings/serializers/cleaning.py:19
msgid "Task log retention days (day)" msgid "Task log retention days"
msgstr "작업 로그 (일)" msgstr "작업 로그 보존 일수"
#: settings/serializers/cleaning.py:23 #: settings/serializers/cleaning.py:23
msgid "Operate log retention days (day)" msgid "Operate log retention days"
msgstr "액션 로그 (일)" msgstr "액션 로그 보존 일수"
#: settings/serializers/cleaning.py:27 #: settings/serializers/cleaning.py:27
msgid "password change log keep days (day)" msgid "Password change log retention days"
msgstr "비밀번호 변경 로그" msgstr "사용자 비밀번호 변경 로그 보존 일수"
#: settings/serializers/cleaning.py:31 #: settings/serializers/cleaning.py:31
msgid "FTP log retention days (day)" msgid "FTP log retention days"
msgstr "업로드 다운로드 (일)" msgstr "업로드 다운로드 기록 보존 일수"
#: settings/serializers/cleaning.py:35 #: settings/serializers/cleaning.py:35
msgid "Cloud sync task history retention days (day)" msgid "Cloud sync task history retention days"
msgstr "클라우드 동기화 기록 (일)" msgstr "클라우드 동기화 기록 보존 일수"
#: settings/serializers/cleaning.py:39 #: settings/serializers/cleaning.py:39
msgid "job execution retention days (day)" msgid "job execution retention days"
msgstr "작업 센터 실행 이력 (일)" msgstr "작업 실행 이력 보존 일수"
#: settings/serializers/cleaning.py:43 #: settings/serializers/cleaning.py:43
msgid "Activity log retention days (day)" msgid "Activity log retention days"
msgstr "활동 기록 (일)" msgstr "활동 기록 보존 일수"
#: settings/serializers/cleaning.py:46 #: settings/serializers/cleaning.py:46
msgid "Session log retention days (day)" msgid "Session log retention days"
msgstr "세션 로그 (일)" msgstr "세션 로그 보존 일수"
#: settings/serializers/cleaning.py:48 #: settings/serializers/cleaning.py:48
msgid "" msgid ""
@@ -7441,8 +7452,8 @@ msgstr ""
"세션, 녹화 및 명령 기록은 해당 시간을 초과하면 삭제됩니다 (데이터베이스 저장소에 영향, OSS 등은 영향을 받지 않습니다)" "세션, 녹화 및 명령 기록은 해당 시간을 초과하면 삭제됩니다 (데이터베이스 저장소에 영향, OSS 등은 영향을 받지 않습니다)"
#: settings/serializers/cleaning.py:53 #: settings/serializers/cleaning.py:53
msgid "Change secret and push record retention days (day)" msgid "Change secret and push record retention days"
msgstr "비밀번호 변경 푸시 기록 보존 일수 (일)" msgstr "계정 비밀번호 변경 푸시 기록 보존 일수"
#: settings/serializers/feature.py:23 settings/serializers/msg.py:69 #: settings/serializers/feature.py:23 settings/serializers/msg.py:69
msgid "Subject" msgid "Subject"
@@ -7935,28 +7946,32 @@ msgid "Watermark"
msgstr "워터마크 활성화" msgstr "워터마크 활성화"
#: settings/serializers/security.py:205 #: settings/serializers/security.py:205
msgid "Watermark session content" msgid "Session content"
msgstr "세션 워터마크 사용자 정의 내용" msgstr "세션 워터마크 사용자 정의 내용"
#: settings/serializers/security.py:208 #: settings/serializers/security.py:208
msgid "Watermark console content" msgid "Console content"
msgstr "관리 페이지 워터마크 사용자 정의 내용" msgstr "관리 페이지 워터마크 사용자 정의 내용"
#: settings/serializers/security.py:211
msgid "Font color"
msgstr "글꼴 색상"
#: settings/serializers/security.py:214 #: settings/serializers/security.py:214
msgid "Watermark font size" msgid "Font size"
msgstr "글꼴 크기" msgstr "글꼴 크기 (px)"
#: settings/serializers/security.py:217 #: settings/serializers/security.py:217
msgid "Watermark height" msgid "Height"
msgstr "단일 워터마크 높이" msgstr "높이 (px)"
#: settings/serializers/security.py:220 #: settings/serializers/security.py:220
msgid "Watermark width" msgid "Width"
msgstr "단일 워터마크 너비" msgstr "너비 (px)"
#: settings/serializers/security.py:223 #: settings/serializers/security.py:223
msgid "Watermark rotate" msgid "Rotate"
msgstr "워터마크 회전 각도" msgstr "회전 (도)"
#: settings/serializers/security.py:227 #: settings/serializers/security.py:227
msgid "Max idle time (minute)" msgid "Max idle time (minute)"
@@ -8259,15 +8274,15 @@ msgstr "인증 실패: (알 수 없음): {}"
msgid "Authentication success: {}" msgid "Authentication success: {}"
msgstr "인증 성공: {}" msgstr "인증 성공: {}"
#: settings/ws.py:226 #: settings/ws.py:228
msgid "No LDAP user was found" msgid "No LDAP user was found"
msgstr "LDAP 사용자를 획득하지 못함" msgstr "LDAP 사용자를 획득하지 못함"
#: settings/ws.py:235 #: settings/ws.py:237
msgid "Total {}, success {}, failure {}" msgid "Total {}, success {}, failure {}"
msgstr "총 {}명, 성공 {}명, 실패 {}명" msgstr "총 {}명, 성공 {}명, 실패 {}명"
#: settings/ws.py:239 #: settings/ws.py:241
msgid ", disabled {}" msgid ", disabled {}"
msgstr "비활성화 {}" msgstr "비활성화 {}"
@@ -11563,25 +11578,3 @@ msgstr "라이센스 가져오기 성공"
#: xpack/plugins/license/api.py:53 #: xpack/plugins/license/api.py:53
msgid "Invalid license" msgid "Invalid license"
msgstr "라이센스가 유효하지 않습니다." msgstr "라이센스가 유효하지 않습니다."
#, fuzzy
#~ msgid "Themes"
#~ msgstr "테마"
#, fuzzy
#~ msgid "domain_name"
#~ msgstr "도메인 이름."
#~ msgid "Task execution id"
#~ msgstr "작업 실행 ID"
#~ msgid "Respectful"
#~ msgstr "존경하는"
#~ msgid ""
#~ "Hello! The following is the failure of changing the password of your assets "
#~ "or pushing the account. Please check and handle it in time."
#~ msgstr "안녕하세요! 다음은 자산 비밀번호 변경 또는 계정 푸시 실패의 상황입니다. 제때 확인하고 처리해 주세요."
#~ msgid "EXCHANGE"
#~ msgstr "EXCHANGE"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-16 14:10+0800\n" "POT-Creation-Date: 2025-11-06 15:37+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,14 +18,14 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: accounts/api/account/account.py:141 #: accounts/api/account/account.py:142
#: accounts/serializers/account/account.py:181 #: accounts/serializers/account/account.py:181
#: accounts/serializers/account/account.py:362 #: accounts/serializers/account/account.py:362
msgid "Account already exists" msgid "Account already exists"
msgstr "Conta já existente" msgstr "Conta já existente"
#: accounts/api/account/application.py:77 #: accounts/api/account/application.py:77
#: authentication/api/connection_token.py:452 #: authentication/api/connection_token.py:453
msgid "Account not found" msgid "Account not found"
msgstr "Conta não encontrada" msgstr "Conta não encontrada"
@@ -462,7 +462,7 @@ msgstr ""
#: accounts/templates/accounts/push_account_report.html:78 #: accounts/templates/accounts/push_account_report.html:78
#: accounts/templates/accounts/push_account_report.html:118 #: accounts/templates/accounts/push_account_report.html:118
#: acls/notifications.py:70 acls/serializers/base.py:111 #: acls/notifications.py:70 acls/serializers/base.py:111
#: assets/models/asset/common.py:102 assets/models/asset/common.py:428 #: assets/models/asset/common.py:102 assets/models/asset/common.py:427
#: assets/models/cmd_filter.py:36 audits/models.py:59 audits/models.py:336 #: assets/models/cmd_filter.py:36 audits/models.py:59 audits/models.py:336
#: audits/serializers.py:230 authentication/models/connection_token.py:42 #: audits/serializers.py:230 authentication/models/connection_token.py:42
#: perms/models/asset_permission.py:69 terminal/backends/command/models.py:17 #: perms/models/asset_permission.py:69 terminal/backends/command/models.py:17
@@ -477,7 +477,7 @@ msgstr "Ativos"
#: accounts/models/account.py:89 accounts/models/template.py:16 #: accounts/models/account.py:89 accounts/models/template.py:16
#: accounts/serializers/account/account.py:234 #: accounts/serializers/account/account.py:234
#: accounts/serializers/account/account.py:304 #: accounts/serializers/account/account.py:305
#: accounts/serializers/account/template.py:35 #: accounts/serializers/account/template.py:35
#: authentication/serializers/connect_token_secret.py:51 #: authentication/serializers/connect_token_secret.py:51
msgid "Su from" msgid "Su from"
@@ -524,13 +524,14 @@ msgstr "Status da Alteração de Senha"
#: accounts/models/account.py:107 #: accounts/models/account.py:107
#: accounts/models/automations/check_account.py:64 #: accounts/models/automations/check_account.py:64
#: accounts/serializers/account/account.py:295
#: accounts/serializers/account/service.py:13 #: accounts/serializers/account/service.py:13
#: accounts/serializers/automations/change_secret.py:117 #: accounts/serializers/automations/change_secret.py:117
#: accounts/serializers/automations/change_secret.py:148 #: accounts/serializers/automations/change_secret.py:148
#: acls/serializers/base.py:112 #: acls/serializers/base.py:112
#: acls/templates/acls/asset_login_reminder.html:11 #: acls/templates/acls/asset_login_reminder.html:11
#: assets/serializers/gateway.py:33 audits/models.py:60 audits/models.py:337 #: assets/serializers/gateway.py:33 audits/models.py:60 audits/models.py:337
#: audits/serializers.py:231 authentication/api/connection_token.py:464 #: audits/serializers.py:231 authentication/api/connection_token.py:465
#: ops/models/base.py:18 perms/models/asset_permission.py:75 #: ops/models/base.py:18 perms/models/asset_permission.py:75
#: settings/serializers/msg.py:33 terminal/backends/command/models.py:18 #: settings/serializers/msg.py:33 terminal/backends/command/models.py:18
#: terminal/models/session/session.py:31 terminal/notifications.py:291 #: terminal/models/session/session.py:31 terminal/notifications.py:291
@@ -623,7 +624,7 @@ msgstr "Ícone"
#: accounts/models/application.py:20 accounts/models/base.py:39 #: accounts/models/application.py:20 accounts/models/base.py:39
#: accounts/models/mixins/vault.py:49 #: accounts/models/mixins/vault.py:49
#: accounts/serializers/account/account.py:492 #: accounts/serializers/account/account.py:498
#: accounts/serializers/account/base.py:20 #: accounts/serializers/account/base.py:20
#: authentication/models/temp_token.py:11 #: authentication/models/temp_token.py:11
#: authentication/templates/authentication/_access_key_modal.html:31 #: authentication/templates/authentication/_access_key_modal.html:31
@@ -796,7 +797,7 @@ msgid "Status"
msgstr "Status" msgstr "Status"
#: accounts/models/automations/change_secret.py:51 #: accounts/models/automations/change_secret.py:51
#: accounts/serializers/account/account.py:296 assets/const/automation.py:9 #: accounts/serializers/account/account.py:297 assets/const/automation.py:9
#: authentication/templates/authentication/passkey.html:177 #: authentication/templates/authentication/passkey.html:177
#: authentication/views/base.py:42 authentication/views/base.py:43 #: authentication/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:67 #: authentication/views/base.py:44 common/const/choices.py:67
@@ -1040,7 +1041,7 @@ msgid "Verify asset account"
msgstr "Conta verificada" msgstr "Conta verificada"
#: accounts/models/base.py:37 accounts/models/base.py:66 #: accounts/models/base.py:37 accounts/models/base.py:66
#: accounts/serializers/account/account.py:491 #: accounts/serializers/account/account.py:497
#: accounts/serializers/account/base.py:17 #: accounts/serializers/account/base.py:17
#: accounts/serializers/automations/change_secret.py:50 #: accounts/serializers/automations/change_secret.py:50
#: authentication/serializers/connect_token_secret.py:42 #: authentication/serializers/connect_token_secret.py:42
@@ -1274,54 +1275,46 @@ msgstr "Conta já existe. O campo: {fields} deve ser único."
msgid "Has secret" msgid "Has secret"
msgstr "Senha já gerenciada" msgstr "Senha já gerenciada"
#: accounts/serializers/account/account.py:295 ops/models/celery.py:84 #: accounts/serializers/account/account.py:296 ops/models/celery.py:84
#: tickets/models/comment.py:13 tickets/models/ticket/general.py:49 #: tickets/models/comment.py:13 tickets/models/ticket/general.py:49
#: tickets/models/ticket/general.py:280 tickets/serializers/super_ticket.py:14 #: tickets/models/ticket/general.py:280 tickets/serializers/super_ticket.py:14
msgid "State" msgid "State"
msgstr "Estado" msgstr "Estado"
#: accounts/serializers/account/account.py:297 #: accounts/serializers/account/account.py:298
msgid "Changed" msgid "Changed"
msgstr "Modificado" msgstr "Modificado"
#: accounts/serializers/account/account.py:307 acls/models/base.py:97 #: accounts/serializers/account/account.py:410
#: acls/templates/acls/asset_login_reminder.html:10
#: assets/models/automations/base.py:25
#: assets/serializers/automations/base.py:20 assets/serializers/domain.py:33
#: assets/serializers/platform.py:181 assets/serializers/platform.py:213
#: authentication/api/connection_token.py:463 ops/models/base.py:17
#: ops/models/job.py:157 ops/serializers/job.py:21
#: perms/serializers/permission.py:57
#: terminal/templates/terminal/_msg_command_execute_alert.html:16
#: xpack/plugins/cloud/manager.py:101
msgid "Assets"
msgstr "Bens"
#: accounts/serializers/account/account.py:412
#, python-format #, python-format
msgid "Asset does not support this secret type: %s" msgid "Asset does not support this secret type: %s"
msgstr "Bens não suportam o tipo de conta: %s" msgstr "Bens não suportam o tipo de conta: %s"
#: accounts/serializers/account/account.py:444 #: accounts/serializers/account/account.py:443
msgid "Account has exist" msgid "Account has exist"
msgstr "Conta já existente" msgstr "Conta já existente"
#: accounts/serializers/account/account.py:476 #: accounts/serializers/account/account.py:468
#: accounts/serializers/account/account.py:483 #: accounts/serializers/account/account.py:469
msgid "At least one asset or node must be specified"
msgstr "Selecione pelo menos um item de ativo ou nó"
#: accounts/serializers/account/account.py:482
#: accounts/serializers/account/account.py:489
#: accounts/serializers/account/base.py:73 #: accounts/serializers/account/base.py:73
#: accounts/serializers/account/base.py:88 #: accounts/serializers/account/base.py:88
#: assets/serializers/asset/common.py:425 #: assets/serializers/asset/common.py:425
msgid "Spec info" msgid "Spec info"
msgstr "Informações especiais" msgstr "Informações especiais"
#: accounts/serializers/account/account.py:493 #: accounts/serializers/account/account.py:499
#: authentication/serializers/connect_token_secret.py:173 #: authentication/serializers/connect_token_secret.py:173
#: authentication/templates/authentication/_access_key_modal.html:30 #: authentication/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:33 #: perms/models/perm_node.py:21 users/serializers/group.py:33
msgid "ID" msgid "ID"
msgstr "ID" msgstr "ID"
#: accounts/serializers/account/account.py:503 acls/notifications.py:18 #: accounts/serializers/account/account.py:509 acls/notifications.py:18
#: acls/notifications.py:68 acls/serializers/base.py:104 #: acls/notifications.py:68 acls/serializers/base.py:104
#: acls/templates/acls/asset_login_reminder.html:8 #: acls/templates/acls/asset_login_reminder.html:8
#: acls/templates/acls/user_login_reminder.html:8 #: acls/templates/acls/user_login_reminder.html:8
@@ -1346,7 +1339,7 @@ msgstr "ID"
msgid "User" msgid "User"
msgstr "Usuário" msgstr "Usuário"
#: accounts/serializers/account/account.py:504 #: accounts/serializers/account/account.py:510
#: authentication/templates/authentication/_access_key_modal.html:33 #: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:165 terminal/notifications.py:225 #: terminal/notifications.py:165 terminal/notifications.py:225
msgid "Date" msgid "Date"
@@ -1801,7 +1794,7 @@ msgstr "Contas bem-sucedidas"
#: accounts/templates/accounts/change_secret_report.html:118 #: accounts/templates/accounts/change_secret_report.html:118
#: accounts/templates/accounts/push_account_report.html:77 #: accounts/templates/accounts/push_account_report.html:77
#: accounts/templates/accounts/push_account_report.html:117 #: accounts/templates/accounts/push_account_report.html:117
#: audits/handler.py:128 #: audits/handler.py:130
msgid "No" msgid "No"
msgstr "Não" msgstr "Não"
@@ -1926,6 +1919,18 @@ msgstr "Aprovador"
msgid "Users" msgid "Users"
msgstr "Usuário" msgstr "Usuário"
#: acls/models/base.py:97 acls/templates/acls/asset_login_reminder.html:10
#: assets/models/automations/base.py:25
#: assets/serializers/automations/base.py:20 assets/serializers/domain.py:33
#: assets/serializers/platform.py:181 assets/serializers/platform.py:213
#: authentication/api/connection_token.py:464 ops/models/base.py:17
#: ops/models/job.py:157 ops/serializers/job.py:21
#: perms/serializers/permission.py:57
#: terminal/templates/terminal/_msg_command_execute_alert.html:16
#: xpack/plugins/cloud/manager.py:101
msgid "Assets"
msgstr "Bens"
#: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60 #: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60
#: ops/serializers/job.py:92 terminal/const.py:88 #: ops/serializers/job.py:92 terminal/const.py:88
#: terminal/models/session/session.py:40 terminal/serializers/command.py:18 #: terminal/models/session/session.py:40 terminal/serializers/command.py:18
@@ -2699,19 +2704,19 @@ msgstr "Coletar informações do hardware do ativo"
msgid "Custom info" msgid "Custom info"
msgstr "Propriedades personalizadas" msgstr "Propriedades personalizadas"
#: assets/models/asset/common.py:431 #: assets/models/asset/common.py:430
msgid "Can refresh asset hardware info" msgid "Can refresh asset hardware info"
msgstr "Pode atualizar as informações do hardware do ativo" msgstr "Pode atualizar as informações do hardware do ativo"
#: assets/models/asset/common.py:432 #: assets/models/asset/common.py:431
msgid "Can test asset connectivity" msgid "Can test asset connectivity"
msgstr "Pode testar a conectividade do ativo" msgstr "Pode testar a conectividade do ativo"
#: assets/models/asset/common.py:433 #: assets/models/asset/common.py:432
msgid "Can match asset" msgid "Can match asset"
msgstr "Pode correspondências de ativos" msgstr "Pode correspondências de ativos"
#: assets/models/asset/common.py:434 #: assets/models/asset/common.py:433
msgid "Can change asset nodes" msgid "Can change asset nodes"
msgstr "Pode modificar o nó do ativo" msgstr "Pode modificar o nó do ativo"
@@ -3614,7 +3619,7 @@ msgstr "Tarefas"
msgid "-" msgid "-"
msgstr "-" msgstr "-"
#: audits/handler.py:128 #: audits/handler.py:130
msgid "Yes" msgid "Yes"
msgstr "Sim" msgstr "Sim"
@@ -3903,35 +3908,35 @@ msgstr ""
"Não é permitido o uso de tokens de conexão reutilizáveis, as configurações " "Não é permitido o uso de tokens de conexão reutilizáveis, as configurações "
"globais não estão ativadas" "globais não estão ativadas"
#: authentication/api/connection_token.py:425 #: authentication/api/connection_token.py:426
msgid "Anonymous account is not supported for this asset" msgid "Anonymous account is not supported for this asset"
msgstr "Contas anônimas não suportam o ativo atual" msgstr "Contas anônimas não suportam o ativo atual"
#: authentication/api/connection_token.py:455 #: authentication/api/connection_token.py:456
msgid "Permission expired" msgid "Permission expired"
msgstr "A autorização expirou" msgstr "A autorização expirou"
#: authentication/api/connection_token.py:488 #: authentication/api/connection_token.py:489
msgid "ACL action is reject: {}({})" msgid "ACL action is reject: {}({})"
msgstr "Ação do ACL é rejeitar: {} ({})." msgstr "Ação do ACL é rejeitar: {} ({})."
#: authentication/api/connection_token.py:492 #: authentication/api/connection_token.py:493
msgid "ACL action is review" msgid "ACL action is review"
msgstr "Ação ACL é para revisão" msgstr "Ação ACL é para revisão"
#: authentication/api/connection_token.py:502 #: authentication/api/connection_token.py:503
msgid "ACL action is face verify" msgid "ACL action is face verify"
msgstr "Ação ACL é verificação facial" msgstr "Ação ACL é verificação facial"
#: authentication/api/connection_token.py:507 #: authentication/api/connection_token.py:508
msgid "ACL action not supported for this asset" msgid "ACL action not supported for this asset"
msgstr "As regras de login de ativos não suportam o ativo atual" msgstr "As regras de login de ativos não suportam o ativo atual"
#: authentication/api/connection_token.py:514 #: authentication/api/connection_token.py:515
msgid "ACL action is face online" msgid "ACL action is face online"
msgstr "Ação ACL é facial online" msgstr "Ação ACL é facial online"
#: authentication/api/connection_token.py:539 #: authentication/api/connection_token.py:540
msgid "No available face feature" msgid "No available face feature"
msgstr "Não há características faciais disponíveis" msgstr "Não há características faciais disponíveis"
@@ -4013,7 +4018,7 @@ msgstr ""
msgid "Invalid token or cache refreshed." msgid "Invalid token or cache refreshed."
msgstr "O token de atualização ou o cache é inválido." msgstr "O token de atualização ou o cache é inválido."
#: authentication/backends/oidc/views.py:175 #: authentication/backends/oidc/views.py:137
msgid "OpenID Error" msgid "OpenID Error"
msgstr "Erro OpenID" msgstr "Erro OpenID"
@@ -4240,16 +4245,16 @@ msgstr "Sua senha é inválida"
msgid "Please wait for %s seconds before retry" msgid "Please wait for %s seconds before retry"
msgstr "Por favor, tente novamente após %s segundos" msgstr "Por favor, tente novamente após %s segundos"
#: authentication/errors/redirect.py:85 authentication/mixins.py:332 #: authentication/errors/redirect.py:85 authentication/mixins.py:365
#: users/views/profile/reset.py:224 #: users/views/profile/reset.py:224
msgid "Your password is too simple, please change it for security" msgid "Your password is too simple, please change it for security"
msgstr "Sua senha é muito simples, por segurança, favor alterar" msgstr "Sua senha é muito simples, por segurança, favor alterar"
#: authentication/errors/redirect.py:93 authentication/mixins.py:341 #: authentication/errors/redirect.py:93 authentication/mixins.py:374
msgid "You should to change your password before login" msgid "You should to change your password before login"
msgstr "Antes de finalizar o login, favor alterar a senha" msgstr "Antes de finalizar o login, favor alterar a senha"
#: authentication/errors/redirect.py:101 authentication/mixins.py:350 #: authentication/errors/redirect.py:101 authentication/mixins.py:383
msgid "Your password has expired, please reset before logging in" msgid "Your password has expired, please reset before logging in"
msgstr "Sua senha expirou, modifique antes de fazer login" msgstr "Sua senha expirou, modifique antes de fazer login"
@@ -4370,11 +4375,20 @@ msgstr "Desativar limpeza de número de telefone"
msgid "Authentication failed (before login check failed): {}" msgid "Authentication failed (before login check failed): {}"
msgstr "Falha de autenticação (verificação pré-login falhou): {}" msgstr "Falha de autenticação (verificação pré-login falhou): {}"
#: authentication/mixins.py:84 #: authentication/mixins.py:105
msgid ""
"The administrator has enabled \"Only allow existing users to log in\", \n"
" and the current user is not in the user list. Please contact the administrator."
msgstr ""
"O administrador ativou a opção 'Permitir login apenas para usuários "
"existentes', o usuário atual não está na lista de usuários, por favor, "
"contate o administrador."
#: authentication/mixins.py:117
msgid "User is invalid" msgid "User is invalid"
msgstr "Usuário inválido" msgstr "Usuário inválido"
#: authentication/mixins.py:99 #: authentication/mixins.py:132
msgid "" msgid ""
"The administrator has enabled 'Only allow login from user source'. \n" "The administrator has enabled 'Only allow login from user source'. \n"
" The current user source is {}. Please contact the administrator." " The current user source is {}. Please contact the administrator."
@@ -4382,11 +4396,11 @@ msgstr ""
"O administrador ativou 'Apenas login a partir da fonte do usuário', a origem" "O administrador ativou 'Apenas login a partir da fonte do usuário', a origem"
" do usuário atual é {}, por favor, contate o administrador." " do usuário atual é {}, por favor, contate o administrador."
#: authentication/mixins.py:278 #: authentication/mixins.py:311
msgid "The MFA type ({}) is not enabled" msgid "The MFA type ({}) is not enabled"
msgstr "Este método MFA ({}) não está ativado" msgstr "Este método MFA ({}) não está ativado"
#: authentication/mixins.py:320 #: authentication/mixins.py:353
msgid "Please change your password" msgid "Please change your password"
msgstr "Por favor, altere sua senha." msgstr "Por favor, altere sua senha."
@@ -4903,24 +4917,24 @@ msgstr "Deseja tentar novamente?"
msgid "LAN" msgid "LAN"
msgstr "Rede Local" msgstr "Rede Local"
#: authentication/views/base.py:71 #: authentication/views/base.py:70
#: perms/templates/perms/_msg_permed_items_expire.html:18 #: perms/templates/perms/_msg_permed_items_expire.html:18
msgid "If you have any question, please contact the administrator" msgid "If you have any question, please contact the administrator"
msgstr "" msgstr ""
"Em caso de dúvidas ou necessidades, por favor, entre em contato com o " "Em caso de dúvidas ou necessidades, por favor, entre em contato com o "
"administrador do sistema" "administrador do sistema"
#: authentication/views/base.py:144 #: authentication/views/base.py:143
#, python-format #, python-format
msgid "%s query user failed" msgid "%s query user failed"
msgstr "%s Falha ao consultar o usuário" msgstr "%s Falha ao consultar o usuário"
#: authentication/views/base.py:152 #: authentication/views/base.py:151
#, python-format #, python-format
msgid "The %s is already bound to another user" msgid "The %s is already bound to another user"
msgstr "%s já está vinculado a outro usuário" msgstr "%s já está vinculado a outro usuário"
#: authentication/views/base.py:159 #: authentication/views/base.py:158
#, python-format #, python-format
msgid "Binding %s successfully" msgid "Binding %s successfully"
msgstr "Vinculação com %s bem sucedida" msgstr "Vinculação com %s bem sucedida"
@@ -5063,7 +5077,7 @@ msgstr "Falha ao obter o usuário do WeChat Corporativo"
msgid "Please login with a password and then bind the WeCom" msgid "Please login with a password and then bind the WeCom"
msgstr "Faça login com a senha, e então vincule ao WeChat Corporativo" msgstr "Faça login com a senha, e então vincule ao WeChat Corporativo"
#: common/api/action.py:68 #: common/api/action.py:80
msgid "Request file format may be wrong" msgid "Request file format may be wrong"
msgstr "Formato de arquivo enviado errado ou outro tipo de recurso do arquivo" msgstr "Formato de arquivo enviado errado ou outro tipo de recurso do arquivo"
@@ -5604,7 +5618,7 @@ msgstr ""
msgid "App Labels" msgid "App Labels"
msgstr "Gerenciar tags" msgstr "Gerenciar tags"
#: labels/models.py:15 settings/serializers/security.py:211 #: labels/models.py:15
msgid "Color" msgid "Color"
msgstr "Cor" msgstr "Cor"
@@ -7657,40 +7671,40 @@ msgid "Period clean"
msgstr "Limpeza Programada" msgstr "Limpeza Programada"
#: settings/serializers/cleaning.py:15 #: settings/serializers/cleaning.py:15
msgid "Login log retention days (day)" msgid "Login log retention days"
msgstr "Logins (dias)" msgstr "Número de dias para retenção de logs de login"
#: settings/serializers/cleaning.py:19 #: settings/serializers/cleaning.py:19
msgid "Task log retention days (day)" msgid "Task log retention days"
msgstr "Log de tarefas (dias)" msgstr "Número de dias para retenção de logs de tarefas"
#: settings/serializers/cleaning.py:23 #: settings/serializers/cleaning.py:23
msgid "Operate log retention days (day)" msgid "Operate log retention days"
msgstr "Registro de Operações (dias)" msgstr "Número de dias para retenção de logs de Ação"
#: settings/serializers/cleaning.py:27 #: settings/serializers/cleaning.py:27
msgid "password change log keep days (day)" msgid "Password change log retention days"
msgstr "Registro de Alteração de Senha" msgstr "Número de dias para retenção de logs de alteração de senha do usuário"
#: settings/serializers/cleaning.py:31 #: settings/serializers/cleaning.py:31
msgid "FTP log retention days (day)" msgid "FTP log retention days"
msgstr "Upload/Download (dias)" msgstr "Número de dias para retenção de registros de upload e download"
#: settings/serializers/cleaning.py:35 #: settings/serializers/cleaning.py:35
msgid "Cloud sync task history retention days (day)" msgid "Cloud sync task history retention days"
msgstr "Registros de Sincronização em Nuvem (dias)" msgstr "Número de dias para retenção de registros de sincronização na nuvem"
#: settings/serializers/cleaning.py:39 #: settings/serializers/cleaning.py:39
msgid "job execution retention days (day)" msgid "job execution retention days"
msgstr "Histórico de Execuções do Centro de Trabalhos (dias)" msgstr "Número de dias para retenção do histórico de execução de tarefas"
#: settings/serializers/cleaning.py:43 #: settings/serializers/cleaning.py:43
msgid "Activity log retention days (day)" msgid "Activity log retention days"
msgstr "Registros de Atividades (dias)" msgstr "Número de dias para retenção de registros de atividades"
#: settings/serializers/cleaning.py:46 #: settings/serializers/cleaning.py:46
msgid "Session log retention days (day)" msgid "Session log retention days"
msgstr "Registros de Sessão (dias)" msgstr "Número de dias para retenção de logs de sessão"
#: settings/serializers/cleaning.py:48 #: settings/serializers/cleaning.py:48
msgid "" msgid ""
@@ -7701,8 +7715,10 @@ msgstr ""
" (afeta o armazenamento do banco de dados, OSS, etc não são afetados)" " (afeta o armazenamento do banco de dados, OSS, etc não são afetados)"
#: settings/serializers/cleaning.py:53 #: settings/serializers/cleaning.py:53
msgid "Change secret and push record retention days (day)" msgid "Change secret and push record retention days"
msgstr "Registro de Notificações de Alteração de Senha (dias)" msgstr ""
"Número de dias para retenção de registros de notificações sobre alteração de"
" senha da conta"
#: settings/serializers/feature.py:23 settings/serializers/msg.py:69 #: settings/serializers/feature.py:23 settings/serializers/msg.py:69
msgid "Subject" msgid "Subject"
@@ -8228,28 +8244,32 @@ msgid "Watermark"
msgstr "Ativar marca d'água" msgstr "Ativar marca d'água"
#: settings/serializers/security.py:205 #: settings/serializers/security.py:205
msgid "Watermark session content" msgid "Session content"
msgstr "Conteúdo personalizado da marca d'água da sessão" msgstr "Conteúdo personalizado da marca d'água da sessão"
#: settings/serializers/security.py:208 #: settings/serializers/security.py:208
msgid "Watermark console content" msgid "Console content"
msgstr "Página de gerenciamento, conteúdo personalizado de marca d'água" msgstr "Conteúdo personalizado da marca d'água da página"
#: settings/serializers/security.py:211
msgid "Font color"
msgstr "Cor da fonte"
#: settings/serializers/security.py:214 #: settings/serializers/security.py:214
msgid "Watermark font size" msgid "Font size"
msgstr "Tamanho da fonte" msgstr "Tamanho da fonte (px)"
#: settings/serializers/security.py:217 #: settings/serializers/security.py:217
msgid "Watermark height" msgid "Height"
msgstr "Altura da marca d'água única" msgstr "Altura (px)"
#: settings/serializers/security.py:220 #: settings/serializers/security.py:220
msgid "Watermark width" msgid "Width"
msgstr "Largura da marca d'água única" msgstr "Largura (px)"
#: settings/serializers/security.py:223 #: settings/serializers/security.py:223
msgid "Watermark rotate" msgid "Rotate"
msgstr "Ângulo de rotação da marca d'água" msgstr "Rotação (graus)"
#: settings/serializers/security.py:227 #: settings/serializers/security.py:227
msgid "Max idle time (minute)" msgid "Max idle time (minute)"
@@ -8581,15 +8601,15 @@ msgstr "Falha na autenticação: (desconhecido): {}"
msgid "Authentication success: {}" msgid "Authentication success: {}"
msgstr "Autenticação bem sucedida: {}" msgstr "Autenticação bem sucedida: {}"
#: settings/ws.py:226 #: settings/ws.py:228
msgid "No LDAP user was found" msgid "No LDAP user was found"
msgstr "Não foi possível obter usuário LDAP" msgstr "Não foi possível obter usuário LDAP"
#: settings/ws.py:235 #: settings/ws.py:237
msgid "Total {}, success {}, failure {}" msgid "Total {}, success {}, failure {}"
msgstr "Total de {}, sucesso {}, falha {}" msgstr "Total de {}, sucesso {}, falha {}"
#: settings/ws.py:239 #: settings/ws.py:241
msgid ", disabled {}" msgid ", disabled {}"
msgstr ", desativar {}" msgstr ", desativar {}"
@@ -11982,27 +12002,3 @@ msgstr "Importação de licença bem-sucedida"
#: xpack/plugins/license/api.py:53 #: xpack/plugins/license/api.py:53
msgid "Invalid license" msgid "Invalid license"
msgstr "Licença inválida" msgstr "Licença inválida"
#, fuzzy
#~ msgid "Themes"
#~ msgstr "Tema"
#, fuzzy
#~ msgid "domain_name"
#~ msgstr "Nome do domínio"
#~ msgid "Task execution id"
#~ msgstr "ID de execução da tarefa"
#~ msgid "Respectful"
#~ msgstr "Prezado(a)"
#~ msgid ""
#~ "Hello! The following is the failure of changing the password of your assets "
#~ "or pushing the account. Please check and handle it in time."
#~ msgstr ""
#~ "Olá! Aqui estão os casos de falha ao alterar ou enviar a senha do ativo. Por"
#~ " favor, verifique e corrija o mais rápido possível."
#~ msgid "EXCHANGE"
#~ msgstr "EXCHANGE"

View File

@@ -1,10 +1,15 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
# #
#, fuzzy
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: jumpserver\n" "Project-Id-Version: jumpserver\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-16 14:10+0800\n" "POT-Creation-Date: 2025-11-06 15:37+0800\n"
"PO-Revision-Date: 2025-09-26 11:16\n" "PO-Revision-Date: 2025-11-01 11:01\n"
"Last-Translator: ibuler <ibuler@qq.com>\n" "Last-Translator: ibuler <ibuler@qq.com>\n"
"Language-Team: Russian\n" "Language-Team: Russian\n"
"Language: ru_RU\n" "Language: ru_RU\n"
@@ -19,14 +24,14 @@ msgstr ""
"X-Crowdin-Project-ID: 832018\n" "X-Crowdin-Project-ID: 832018\n"
"X-Generator: Poedit 2.4.3\n" "X-Generator: Poedit 2.4.3\n"
#: accounts/api/account/account.py:141 #: accounts/api/account/account.py:142
#: accounts/serializers/account/account.py:181 #: accounts/serializers/account/account.py:181
#: accounts/serializers/account/account.py:362 #: accounts/serializers/account/account.py:362
msgid "Account already exists" msgid "Account already exists"
msgstr "Учетная запись уже существует" msgstr "Учетная запись уже существует."
#: accounts/api/account/application.py:77 #: accounts/api/account/application.py:77
#: authentication/api/connection_token.py:452 #: authentication/api/connection_token.py:453
msgid "Account not found" msgid "Account not found"
msgstr "Учетная запись не найдена" msgstr "Учетная запись не найдена"
@@ -464,7 +469,7 @@ msgstr ""
#: accounts/templates/accounts/push_account_report.html:78 #: accounts/templates/accounts/push_account_report.html:78
#: accounts/templates/accounts/push_account_report.html:118 #: accounts/templates/accounts/push_account_report.html:118
#: acls/notifications.py:70 acls/serializers/base.py:111 #: acls/notifications.py:70 acls/serializers/base.py:111
#: assets/models/asset/common.py:102 assets/models/asset/common.py:428 #: assets/models/asset/common.py:102 assets/models/asset/common.py:427
#: assets/models/cmd_filter.py:36 audits/models.py:59 audits/models.py:336 #: assets/models/cmd_filter.py:36 audits/models.py:59 audits/models.py:336
#: audits/serializers.py:230 authentication/models/connection_token.py:42 #: audits/serializers.py:230 authentication/models/connection_token.py:42
#: perms/models/asset_permission.py:69 terminal/backends/command/models.py:17 #: perms/models/asset_permission.py:69 terminal/backends/command/models.py:17
@@ -479,7 +484,7 @@ msgstr "Актив"
#: accounts/models/account.py:89 accounts/models/template.py:16 #: accounts/models/account.py:89 accounts/models/template.py:16
#: accounts/serializers/account/account.py:234 #: accounts/serializers/account/account.py:234
#: accounts/serializers/account/account.py:304 #: accounts/serializers/account/account.py:305
#: accounts/serializers/account/template.py:35 #: accounts/serializers/account/template.py:35
#: authentication/serializers/connect_token_secret.py:51 #: authentication/serializers/connect_token_secret.py:51
msgid "Su from" msgid "Su from"
@@ -526,13 +531,14 @@ msgstr "Статус изменения секрета"
#: accounts/models/account.py:107 #: accounts/models/account.py:107
#: accounts/models/automations/check_account.py:64 #: accounts/models/automations/check_account.py:64
#: accounts/serializers/account/account.py:295
#: accounts/serializers/account/service.py:13 #: accounts/serializers/account/service.py:13
#: accounts/serializers/automations/change_secret.py:117 #: accounts/serializers/automations/change_secret.py:117
#: accounts/serializers/automations/change_secret.py:148 #: accounts/serializers/automations/change_secret.py:148
#: acls/serializers/base.py:112 #: acls/serializers/base.py:112
#: acls/templates/acls/asset_login_reminder.html:11 #: acls/templates/acls/asset_login_reminder.html:11
#: assets/serializers/gateway.py:33 audits/models.py:60 audits/models.py:337 #: assets/serializers/gateway.py:33 audits/models.py:60 audits/models.py:337
#: audits/serializers.py:231 authentication/api/connection_token.py:464 #: audits/serializers.py:231 authentication/api/connection_token.py:465
#: ops/models/base.py:18 perms/models/asset_permission.py:75 #: ops/models/base.py:18 perms/models/asset_permission.py:75
#: settings/serializers/msg.py:33 terminal/backends/command/models.py:18 #: settings/serializers/msg.py:33 terminal/backends/command/models.py:18
#: terminal/models/session/session.py:31 terminal/notifications.py:291 #: terminal/models/session/session.py:31 terminal/notifications.py:291
@@ -625,7 +631,7 @@ msgstr "Иконка"
#: accounts/models/application.py:20 accounts/models/base.py:39 #: accounts/models/application.py:20 accounts/models/base.py:39
#: accounts/models/mixins/vault.py:49 #: accounts/models/mixins/vault.py:49
#: accounts/serializers/account/account.py:492 #: accounts/serializers/account/account.py:498
#: accounts/serializers/account/base.py:20 #: accounts/serializers/account/base.py:20
#: authentication/models/temp_token.py:11 #: authentication/models/temp_token.py:11
#: authentication/templates/authentication/_access_key_modal.html:31 #: authentication/templates/authentication/_access_key_modal.html:31
@@ -798,7 +804,7 @@ msgid "Status"
msgstr "Статус" msgstr "Статус"
#: accounts/models/automations/change_secret.py:51 #: accounts/models/automations/change_secret.py:51
#: accounts/serializers/account/account.py:296 assets/const/automation.py:9 #: accounts/serializers/account/account.py:297 assets/const/automation.py:9
#: authentication/templates/authentication/passkey.html:177 #: authentication/templates/authentication/passkey.html:177
#: authentication/views/base.py:42 authentication/views/base.py:43 #: authentication/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:67 #: authentication/views/base.py:44 common/const/choices.py:67
@@ -1027,7 +1033,7 @@ msgid "Verify asset account"
msgstr "Проверка УЗ актива" msgstr "Проверка УЗ актива"
#: accounts/models/base.py:37 accounts/models/base.py:66 #: accounts/models/base.py:37 accounts/models/base.py:66
#: accounts/serializers/account/account.py:491 #: accounts/serializers/account/account.py:497
#: accounts/serializers/account/base.py:17 #: accounts/serializers/account/base.py:17
#: accounts/serializers/automations/change_secret.py:50 #: accounts/serializers/automations/change_secret.py:50
#: authentication/serializers/connect_token_secret.py:42 #: authentication/serializers/connect_token_secret.py:42
@@ -1266,54 +1272,46 @@ msgstr ""
msgid "Has secret" msgid "Has secret"
msgstr "Секрет добавлен" msgstr "Секрет добавлен"
#: accounts/serializers/account/account.py:295 ops/models/celery.py:84 #: accounts/serializers/account/account.py:296 ops/models/celery.py:84
#: tickets/models/comment.py:13 tickets/models/ticket/general.py:49 #: tickets/models/comment.py:13 tickets/models/ticket/general.py:49
#: tickets/models/ticket/general.py:280 tickets/serializers/super_ticket.py:14 #: tickets/models/ticket/general.py:280 tickets/serializers/super_ticket.py:14
msgid "State" msgid "State"
msgstr "Состояние" msgstr "Состояние"
#: accounts/serializers/account/account.py:297 #: accounts/serializers/account/account.py:298
msgid "Changed" msgid "Changed"
msgstr "Изменено" msgstr "Изменено"
#: accounts/serializers/account/account.py:307 acls/models/base.py:97 #: accounts/serializers/account/account.py:410
#: acls/templates/acls/asset_login_reminder.html:10
#: assets/models/automations/base.py:25
#: assets/serializers/automations/base.py:20 assets/serializers/domain.py:33
#: assets/serializers/platform.py:181 assets/serializers/platform.py:213
#: authentication/api/connection_token.py:463 ops/models/base.py:17
#: ops/models/job.py:157 ops/serializers/job.py:21
#: perms/serializers/permission.py:57
#: terminal/templates/terminal/_msg_command_execute_alert.html:16
#: xpack/plugins/cloud/manager.py:101
msgid "Assets"
msgstr "Активы"
#: accounts/serializers/account/account.py:412
#, python-format #, python-format
msgid "Asset does not support this secret type: %s" msgid "Asset does not support this secret type: %s"
msgstr "Актив не поддерживает этот тип секрета: %s" msgstr "Актив не поддерживает этот тип секрета: %s"
#: accounts/serializers/account/account.py:444 #: accounts/serializers/account/account.py:443
msgid "Account has exist" msgid "Account has exist"
msgstr "Учетная запись уже существует" msgstr "Учетная запись уже существует"
#: accounts/serializers/account/account.py:476 #: accounts/serializers/account/account.py:468
#: accounts/serializers/account/account.py:483 #: accounts/serializers/account/account.py:469
msgid "At least one asset or node must be specified"
msgstr "Выберите хотя бы один актив или папку"
#: accounts/serializers/account/account.py:482
#: accounts/serializers/account/account.py:489
#: accounts/serializers/account/base.py:73 #: accounts/serializers/account/base.py:73
#: accounts/serializers/account/base.py:88 #: accounts/serializers/account/base.py:88
#: assets/serializers/asset/common.py:425 #: assets/serializers/asset/common.py:425
msgid "Spec info" msgid "Spec info"
msgstr "Специальная информация" msgstr "Специальная информация"
#: accounts/serializers/account/account.py:493 #: accounts/serializers/account/account.py:499
#: authentication/serializers/connect_token_secret.py:173 #: authentication/serializers/connect_token_secret.py:173
#: authentication/templates/authentication/_access_key_modal.html:30 #: authentication/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:33 #: perms/models/perm_node.py:21 users/serializers/group.py:33
msgid "ID" msgid "ID"
msgstr "ID" msgstr "ID"
#: accounts/serializers/account/account.py:503 acls/notifications.py:18 #: accounts/serializers/account/account.py:509 acls/notifications.py:18
#: acls/notifications.py:68 acls/serializers/base.py:104 #: acls/notifications.py:68 acls/serializers/base.py:104
#: acls/templates/acls/asset_login_reminder.html:8 #: acls/templates/acls/asset_login_reminder.html:8
#: acls/templates/acls/user_login_reminder.html:8 #: acls/templates/acls/user_login_reminder.html:8
@@ -1338,7 +1336,7 @@ msgstr "ID"
msgid "User" msgid "User"
msgstr "Пользователь" msgstr "Пользователь"
#: accounts/serializers/account/account.py:504 #: accounts/serializers/account/account.py:510
#: authentication/templates/authentication/_access_key_modal.html:33 #: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:165 terminal/notifications.py:225 #: terminal/notifications.py:165 terminal/notifications.py:225
msgid "Date" msgid "Date"
@@ -1784,7 +1782,7 @@ msgstr "Успешные УЗ"
#: accounts/templates/accounts/change_secret_report.html:118 #: accounts/templates/accounts/change_secret_report.html:118
#: accounts/templates/accounts/push_account_report.html:77 #: accounts/templates/accounts/push_account_report.html:77
#: accounts/templates/accounts/push_account_report.html:117 #: accounts/templates/accounts/push_account_report.html:117
#: audits/handler.py:128 #: audits/handler.py:130
msgid "No" msgid "No"
msgstr "Нет" msgstr "Нет"
@@ -1907,6 +1905,18 @@ msgstr "Утверждающий"
msgid "Users" msgid "Users"
msgstr "Пользователь" msgstr "Пользователь"
#: acls/models/base.py:97 acls/templates/acls/asset_login_reminder.html:10
#: assets/models/automations/base.py:25
#: assets/serializers/automations/base.py:20 assets/serializers/domain.py:33
#: assets/serializers/platform.py:181 assets/serializers/platform.py:213
#: authentication/api/connection_token.py:464 ops/models/base.py:17
#: ops/models/job.py:157 ops/serializers/job.py:21
#: perms/serializers/permission.py:57
#: terminal/templates/terminal/_msg_command_execute_alert.html:16
#: xpack/plugins/cloud/manager.py:101
msgid "Assets"
msgstr "Активы"
#: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60 #: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60
#: ops/serializers/job.py:92 terminal/const.py:88 #: ops/serializers/job.py:92 terminal/const.py:88
#: terminal/models/session/session.py:40 terminal/serializers/command.py:18 #: terminal/models/session/session.py:40 terminal/serializers/command.py:18
@@ -1966,7 +1976,7 @@ msgstr "Правила метода подключения"
#: acls/models/data_masking.py:13 #: acls/models/data_masking.py:13
msgid "Fixed Character Replacement" msgid "Fixed Character Replacement"
msgstr "Фиксированная замена символов" msgstr "Замена на фиксированные символы"
#: acls/models/data_masking.py:14 #: acls/models/data_masking.py:14
msgid "Hide Middle Characters" msgid "Hide Middle Characters"
@@ -1974,19 +1984,19 @@ msgstr "Скрыть средние символы"
#: acls/models/data_masking.py:15 #: acls/models/data_masking.py:15
msgid "Keep Prefix Only" msgid "Keep Prefix Only"
msgstr "Сохранить префикс" msgstr "Сохранить только префикс"
#: acls/models/data_masking.py:16 #: acls/models/data_masking.py:16
msgid "Keep Suffix Only" msgid "Keep Suffix Only"
msgstr "Сохранить суффикс" msgstr "Сохранить только суффикс"
#: acls/models/data_masking.py:21 #: acls/models/data_masking.py:21
msgid "Fields pattern" msgid "Fields pattern"
msgstr "Скрыть имя столбца" msgstr "Маскировать столбцы"
#: acls/models/data_masking.py:27 acls/serializers/data_masking.py:14 #: acls/models/data_masking.py:27 acls/serializers/data_masking.py:14
msgid "Masking Method" msgid "Masking Method"
msgstr "Метод маскировки" msgstr "Метод маскирования"
#: acls/models/data_masking.py:31 #: acls/models/data_masking.py:31
msgid "Mask Pattern" msgid "Mask Pattern"
@@ -2677,19 +2687,19 @@ msgstr "Собранные данные"
msgid "Custom info" msgid "Custom info"
msgstr "Пользовательские атрибуты" msgstr "Пользовательские атрибуты"
#: assets/models/asset/common.py:431 #: assets/models/asset/common.py:430
msgid "Can refresh asset hardware info" msgid "Can refresh asset hardware info"
msgstr "Обновление информации об оборудовании актива" msgstr "Обновление информации об оборудовании актива"
#: assets/models/asset/common.py:432 #: assets/models/asset/common.py:431
msgid "Can test asset connectivity" msgid "Can test asset connectivity"
msgstr "Проверка доступности актива" msgstr "Проверка доступности актива"
#: assets/models/asset/common.py:433 #: assets/models/asset/common.py:432
msgid "Can match asset" msgid "Can match asset"
msgstr "Сопоставление актива" msgstr "Сопоставление актива"
#: assets/models/asset/common.py:434 #: assets/models/asset/common.py:433
msgid "Can change asset nodes" msgid "Can change asset nodes"
msgstr "Изменение папки актива" msgstr "Изменение папки актива"
@@ -3600,7 +3610,7 @@ msgstr "Задача"
msgid "-" msgid "-"
msgstr "-" msgstr "-"
#: audits/handler.py:128 #: audits/handler.py:130
msgid "Yes" msgid "Yes"
msgstr "Да" msgstr "Да"
@@ -3887,35 +3897,35 @@ msgstr ""
"Повторное использование токена не допускается, глобальная настройка не " "Повторное использование токена не допускается, глобальная настройка не "
"включена" "включена"
#: authentication/api/connection_token.py:425 #: authentication/api/connection_token.py:426
msgid "Anonymous account is not supported for this asset" msgid "Anonymous account is not supported for this asset"
msgstr "Анонимная учетная запись не поддерживается для этого актива" msgstr "Анонимная учетная запись не поддерживается для этого актива"
#: authentication/api/connection_token.py:455 #: authentication/api/connection_token.py:456
msgid "Permission expired" msgid "Permission expired"
msgstr "Разрешение истекло" msgstr "Разрешение истекло"
#: authentication/api/connection_token.py:488 #: authentication/api/connection_token.py:489
msgid "ACL action is reject: {}({})" msgid "ACL action is reject: {}({})"
msgstr "Действие правила — запрет: {}({})" msgstr "Действие правила — запрет: {}({})"
#: authentication/api/connection_token.py:492 #: authentication/api/connection_token.py:493
msgid "ACL action is review" msgid "ACL action is review"
msgstr "Действие правила — проверка" msgstr "Действие правила — проверка"
#: authentication/api/connection_token.py:502 #: authentication/api/connection_token.py:503
msgid "ACL action is face verify" msgid "ACL action is face verify"
msgstr "Действие правила — идентификация по лицу" msgstr "Действие правила — идентификация по лицу"
#: authentication/api/connection_token.py:507 #: authentication/api/connection_token.py:508
msgid "ACL action not supported for this asset" msgid "ACL action not supported for this asset"
msgstr "Правило входа в актив не поддерживает текущий актив" msgstr "Правило входа в актив не поддерживает текущий актив"
#: authentication/api/connection_token.py:514 #: authentication/api/connection_token.py:515
msgid "ACL action is face online" msgid "ACL action is face online"
msgstr "Действие правила — онлайн распознавание лица." msgstr "Действие правила — онлайн распознавание лица."
#: authentication/api/connection_token.py:539 #: authentication/api/connection_token.py:540
msgid "No available face feature" msgid "No available face feature"
msgstr "Нет доступных характеристик лица" msgstr "Нет доступных характеристик лица"
@@ -3955,7 +3965,7 @@ msgstr "Забыли пароль"
#: authentication/api/password.py:70 authentication/mfa/email.py:42 #: authentication/api/password.py:70 authentication/mfa/email.py:42
msgid "The validity period of the verification code is {} minute" msgid "The validity period of the verification code is {} minute"
msgstr "Срок действия кода проверки составляет {} минут." msgstr "Срок действия кода проверки: {} мин"
#: authentication/apps.py:7 #: authentication/apps.py:7
msgid "App Authentication" msgid "App Authentication"
@@ -3996,7 +4006,7 @@ msgstr ""
msgid "Invalid token or cache refreshed." msgid "Invalid token or cache refreshed."
msgstr "Обновлённый токен или кэш недействителен." msgstr "Обновлённый токен или кэш недействителен."
#: authentication/backends/oidc/views.py:175 #: authentication/backends/oidc/views.py:137
msgid "OpenID Error" msgid "OpenID Error"
msgstr "Ошибка OpenID" msgstr "Ошибка OpenID"
@@ -4224,16 +4234,16 @@ msgstr "Ваш пароль недействителен"
msgid "Please wait for %s seconds before retry" msgid "Please wait for %s seconds before retry"
msgstr "Пожалуйста, подождите %s секунд перед повторной попыткой" msgstr "Пожалуйста, подождите %s секунд перед повторной попыткой"
#: authentication/errors/redirect.py:85 authentication/mixins.py:332 #: authentication/errors/redirect.py:85 authentication/mixins.py:365
#: users/views/profile/reset.py:224 #: users/views/profile/reset.py:224
msgid "Your password is too simple, please change it for security" msgid "Your password is too simple, please change it for security"
msgstr "Ваш пароль слишком простой, измените его в целях безопасности" msgstr "Ваш пароль слишком простой, измените его в целях безопасности"
#: authentication/errors/redirect.py:93 authentication/mixins.py:341 #: authentication/errors/redirect.py:93 authentication/mixins.py:374
msgid "You should to change your password before login" msgid "You should to change your password before login"
msgstr "Вам необходимо сменить пароль перед входом в систему" msgstr "Вам необходимо сменить пароль перед входом в систему"
#: authentication/errors/redirect.py:101 authentication/mixins.py:350 #: authentication/errors/redirect.py:101 authentication/mixins.py:383
msgid "Your password has expired, please reset before logging in" msgid "Your password has expired, please reset before logging in"
msgstr "" msgstr ""
"Срок действия вашего пароля истек, пожалуйста, сбросьте его перед входом в " "Срок действия вашего пароля истек, пожалуйста, сбросьте его перед входом в "
@@ -4354,11 +4364,20 @@ msgstr "Удалите номер телефона для отключения"
msgid "Authentication failed (before login check failed): {}" msgid "Authentication failed (before login check failed): {}"
msgstr "Ошибка аутентификации (сбой до проверки входа): {}" msgstr "Ошибка аутентификации (сбой до проверки входа): {}"
#: authentication/mixins.py:84 #: authentication/mixins.py:105
msgid ""
"The administrator has enabled \"Only allow existing users to log in\", \n"
" and the current user is not in the user list. Please contact the administrator."
msgstr ""
"Администратор включил опцию 'Разрешить вход только для существующих пользователей'.\n"
" Текущий пользователь не найден в списке пользователей,\n"
" пожалуйста, свяжитесь с администратором."
#: authentication/mixins.py:117
msgid "User is invalid" msgid "User is invalid"
msgstr "Недействительный пользователь" msgstr "Недействительный пользователь"
#: authentication/mixins.py:99 #: authentication/mixins.py:132
msgid "" msgid ""
"The administrator has enabled 'Only allow login from user source'. \n" "The administrator has enabled 'Only allow login from user source'. \n"
" The current user source is {}. Please contact the administrator." " The current user source is {}. Please contact the administrator."
@@ -4366,11 +4385,11 @@ msgstr ""
"Администратор включил «Разрешить вход только из источника пользователя».\n" "Администратор включил «Разрешить вход только из источника пользователя».\n"
" Текущий источник пользователя — {}. Обратитесь к администратору." " Текущий источник пользователя — {}. Обратитесь к администратору."
#: authentication/mixins.py:278 #: authentication/mixins.py:311
msgid "The MFA type ({}) is not enabled" msgid "The MFA type ({}) is not enabled"
msgstr "Способ МФА ({}) не включен" msgstr "Способ МФА ({}) не включен"
#: authentication/mixins.py:320 #: authentication/mixins.py:353
msgid "Please change your password" msgid "Please change your password"
msgstr "Пожалуйста, измените свой пароль" msgstr "Пожалуйста, измените свой пароль"
@@ -4890,22 +4909,22 @@ msgstr "Хотите попробовать снова?"
msgid "LAN" msgid "LAN"
msgstr "Локальная сеть" msgstr "Локальная сеть"
#: authentication/views/base.py:71 #: authentication/views/base.py:70
#: perms/templates/perms/_msg_permed_items_expire.html:18 #: perms/templates/perms/_msg_permed_items_expire.html:18
msgid "If you have any question, please contact the administrator" msgid "If you have any question, please contact the administrator"
msgstr "Если у вас есть вопросы, пожалуйста, свяжитесь с администратором" msgstr "Если у вас есть вопросы, пожалуйста, свяжитесь с администратором"
#: authentication/views/base.py:144 #: authentication/views/base.py:143
#, python-format #, python-format
msgid "%s query user failed" msgid "%s query user failed"
msgstr "Ошибка при запросе пользователя %s" msgstr "Ошибка при запросе пользователя %s"
#: authentication/views/base.py:152 #: authentication/views/base.py:151
#, python-format #, python-format
msgid "The %s is already bound to another user" msgid "The %s is already bound to another user"
msgstr "%s уже привязан к другому пользователю" msgstr "%s уже привязан к другому пользователю"
#: authentication/views/base.py:159 #: authentication/views/base.py:158
#, python-format #, python-format
msgid "Binding %s successfully" msgid "Binding %s successfully"
msgstr "Привязка %s выполнена успешно" msgstr "Привязка %s выполнена успешно"
@@ -5048,7 +5067,7 @@ msgstr "Не удалось получить пользователя WeCom"
msgid "Please login with a password and then bind the WeCom" msgid "Please login with a password and then bind the WeCom"
msgstr "Пожалуйста, войдите с паролем, а затем привяжите WeCom" msgstr "Пожалуйста, войдите с паролем, а затем привяжите WeCom"
#: common/api/action.py:68 #: common/api/action.py:80
msgid "Request file format may be wrong" msgid "Request file format may be wrong"
msgstr "Неверный формат загружаемого файла или файл другого типа ресурсов" msgstr "Неверный формат загружаемого файла или файл другого типа ресурсов"
@@ -5589,7 +5608,7 @@ msgstr ""
msgid "App Labels" msgid "App Labels"
msgstr "Управление тегами" msgstr "Управление тегами"
#: labels/models.py:15 settings/serializers/security.py:211 #: labels/models.py:15
msgid "Color" msgid "Color"
msgstr "Цвет" msgstr "Цвет"
@@ -6779,11 +6798,11 @@ msgstr "Панель смены пароля УЗ"
#: reports/views.py:181 #: reports/views.py:181
msgid "Failed to send email: " msgid "Failed to send email: "
msgstr "Не удалось отправить письмо" msgstr "Не удалось отправить письмо "
#: reports/views.py:182 #: reports/views.py:182
msgid "Email sent successfully to " msgid "Email sent successfully to "
msgstr "Успешно отправлено письмо." msgstr "Письмо успешно отправлено "
#: settings/api/chat.py:41 #: settings/api/chat.py:41
msgid "Chat AI is not enabled" msgid "Chat AI is not enabled"
@@ -7637,40 +7656,40 @@ msgid "Period clean"
msgstr "Периодическая очистка" msgstr "Периодическая очистка"
#: settings/serializers/cleaning.py:15 #: settings/serializers/cleaning.py:15
msgid "Login log retention days (day)" msgid "Login log retention days"
msgstr "Журнал входа (дни)" msgstr "Время хранения журнала входа"
#: settings/serializers/cleaning.py:19 #: settings/serializers/cleaning.py:19
msgid "Task log retention days (day)" msgid "Task log retention days"
msgstr "Журнал задач (дни)" msgstr "Время хранения журнала задач"
#: settings/serializers/cleaning.py:23 #: settings/serializers/cleaning.py:23
msgid "Operate log retention days (day)" msgid "Operate log retention days"
msgstr "Журнал операций (дни)" msgstr "Время хранения журнала действий"
#: settings/serializers/cleaning.py:27 #: settings/serializers/cleaning.py:27
msgid "password change log keep days (day)" msgid "Password change log retention days"
msgstr "Журнал смены пароля (дни)" msgstr "Время хранения журнала изменения пароля пользователя"
#: settings/serializers/cleaning.py:31 #: settings/serializers/cleaning.py:31
msgid "FTP log retention days (day)" msgid "FTP log retention days"
msgstr "Журнал загрузки/скачивания FTP (дни)" msgstr "Время хранения записей загрузки и скачивания"
#: settings/serializers/cleaning.py:35 #: settings/serializers/cleaning.py:35
msgid "Cloud sync task history retention days (day)" msgid "Cloud sync task history retention days"
msgstr "Журнал синхронизации с облаком (дни)" msgstr "Время хранения записей облачной синхронизации"
#: settings/serializers/cleaning.py:39 #: settings/serializers/cleaning.py:39
msgid "job execution retention days (day)" msgid "job execution retention days"
msgstr "История выполнения заданий (дни)" msgstr "Время хранения истории выполнения заданий"
#: settings/serializers/cleaning.py:43 #: settings/serializers/cleaning.py:43
msgid "Activity log retention days (day)" msgid "Activity log retention days"
msgstr "Журнал действий (дни)" msgstr "Время хранения 기록 активности"
#: settings/serializers/cleaning.py:46 #: settings/serializers/cleaning.py:46
msgid "Session log retention days (day)" msgid "Session log retention days"
msgstr "Журнал сессий (дни)" msgstr "Время хранения журнала сеансов"
#: settings/serializers/cleaning.py:48 #: settings/serializers/cleaning.py:48
msgid "" msgid ""
@@ -7681,8 +7700,8 @@ msgstr ""
" удалены (влияет на хранение базы данных, но на OSS не влияет)" " удалены (влияет на хранение базы данных, но на OSS не влияет)"
#: settings/serializers/cleaning.py:53 #: settings/serializers/cleaning.py:53
msgid "Change secret and push record retention days (day)" msgid "Change secret and push record retention days"
msgstr "Срок хранения записей смены и публикации паролей (дни)" msgstr "Время хранения записей уведомлений о смене пароля аккаунта"
#: settings/serializers/feature.py:23 settings/serializers/msg.py:69 #: settings/serializers/feature.py:23 settings/serializers/msg.py:69
msgid "Subject" msgid "Subject"
@@ -8200,28 +8219,32 @@ msgid "Watermark"
msgstr "Водяной знак" msgstr "Водяной знак"
#: settings/serializers/security.py:205 #: settings/serializers/security.py:205
msgid "Watermark session content" msgid "Session content"
msgstr "Водяной знак в сессиях" msgstr "Настраиваемое содержание водяного знака сессии"
#: settings/serializers/security.py:208 #: settings/serializers/security.py:208
msgid "Watermark console content" msgid "Console content"
msgstr "Водяной знак в Консоли" msgstr "Настраиваемое содержание водяного знака страницы"
#: settings/serializers/security.py:211
msgid "Font color"
msgstr "Цвет шрифта"
#: settings/serializers/security.py:214 #: settings/serializers/security.py:214
msgid "Watermark font size" msgid "Font size"
msgstr "Размер шрифта водяного знака" msgstr "Размер шрифта (пиксели)"
#: settings/serializers/security.py:217 #: settings/serializers/security.py:217
msgid "Watermark height" msgid "Height"
msgstr "Высота водяного знака" msgstr "Высота (пиксели)"
#: settings/serializers/security.py:220 #: settings/serializers/security.py:220
msgid "Watermark width" msgid "Width"
msgstr "Ширина водяного знака" msgstr "Ширина (пиксели)"
#: settings/serializers/security.py:223 #: settings/serializers/security.py:223
msgid "Watermark rotate" msgid "Rotate"
msgstr "Угол поворота водяного знака" msgstr "Поворот (градусы)"
#: settings/serializers/security.py:227 #: settings/serializers/security.py:227
msgid "Max idle time (minute)" msgid "Max idle time (minute)"
@@ -8549,15 +8572,15 @@ msgstr "Ошибка аутентификации: (неизвестная): {}"
msgid "Authentication success: {}" msgid "Authentication success: {}"
msgstr "Успешная аутентификация: {}" msgstr "Успешная аутентификация: {}"
#: settings/ws.py:226 #: settings/ws.py:228
msgid "No LDAP user was found" msgid "No LDAP user was found"
msgstr "Не удалось получить пользователей из LDAP" msgstr "Не удалось получить пользователей из LDAP"
#: settings/ws.py:235 #: settings/ws.py:237
msgid "Total {}, success {}, failure {}" msgid "Total {}, success {}, failure {}"
msgstr "Всего {} , успешно {} , неудачно {}" msgstr "Всего {} , успешно {} , неудачно {}"
#: settings/ws.py:239 #: settings/ws.py:241
msgid ", disabled {}" msgid ", disabled {}"
msgstr ", отключено {}" msgstr ", отключено {}"
@@ -11943,3 +11966,21 @@ msgstr "Лицензия успешно импортирована"
#: xpack/plugins/license/api.py:53 #: xpack/plugins/license/api.py:53
msgid "Invalid license" msgid "Invalid license"
msgstr "Лицензия недействительна" msgstr "Лицензия недействительна"
#~ msgid "Watermark console content"
#~ msgstr "Водяной знак в Консоли"
#~ msgid "Watermark font size"
#~ msgstr "Размер шрифта водяного знака"
#~ msgid "Watermark height"
#~ msgstr "Высота водяного знака"
#~ msgid "Watermark width"
#~ msgstr "Ширина водяного знака"
#~ msgid "Watermark rotate"
#~ msgstr "Угол поворота водяного знака"
#~ msgid "domain_name"
#~ msgstr "域名称"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-16 14:10+0800\n" "POT-Creation-Date: 2025-11-06 15:37+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,14 +18,14 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: accounts/api/account/account.py:141 #: accounts/api/account/account.py:142
#: accounts/serializers/account/account.py:181 #: accounts/serializers/account/account.py:181
#: accounts/serializers/account/account.py:362 #: accounts/serializers/account/account.py:362
msgid "Account already exists" msgid "Account already exists"
msgstr "Tài khoản đã tồn tại" msgstr "Tài khoản đã tồn tại"
#: accounts/api/account/application.py:77 #: accounts/api/account/application.py:77
#: authentication/api/connection_token.py:452 #: authentication/api/connection_token.py:453
msgid "Account not found" msgid "Account not found"
msgstr "Tài khoản không tìm thấy" msgstr "Tài khoản không tìm thấy"
@@ -463,7 +463,7 @@ msgstr ""
#: accounts/templates/accounts/push_account_report.html:78 #: accounts/templates/accounts/push_account_report.html:78
#: accounts/templates/accounts/push_account_report.html:118 #: accounts/templates/accounts/push_account_report.html:118
#: acls/notifications.py:70 acls/serializers/base.py:111 #: acls/notifications.py:70 acls/serializers/base.py:111
#: assets/models/asset/common.py:102 assets/models/asset/common.py:428 #: assets/models/asset/common.py:102 assets/models/asset/common.py:427
#: assets/models/cmd_filter.py:36 audits/models.py:59 audits/models.py:336 #: assets/models/cmd_filter.py:36 audits/models.py:59 audits/models.py:336
#: audits/serializers.py:230 authentication/models/connection_token.py:42 #: audits/serializers.py:230 authentication/models/connection_token.py:42
#: perms/models/asset_permission.py:69 terminal/backends/command/models.py:17 #: perms/models/asset_permission.py:69 terminal/backends/command/models.py:17
@@ -478,7 +478,7 @@ msgstr "Tài sản"
#: accounts/models/account.py:89 accounts/models/template.py:16 #: accounts/models/account.py:89 accounts/models/template.py:16
#: accounts/serializers/account/account.py:234 #: accounts/serializers/account/account.py:234
#: accounts/serializers/account/account.py:304 #: accounts/serializers/account/account.py:305
#: accounts/serializers/account/template.py:35 #: accounts/serializers/account/template.py:35
#: authentication/serializers/connect_token_secret.py:51 #: authentication/serializers/connect_token_secret.py:51
msgid "Su from" msgid "Su from"
@@ -525,13 +525,14 @@ msgstr "Trạng thái đổi mật khẩu"
#: accounts/models/account.py:107 #: accounts/models/account.py:107
#: accounts/models/automations/check_account.py:64 #: accounts/models/automations/check_account.py:64
#: accounts/serializers/account/account.py:295
#: accounts/serializers/account/service.py:13 #: accounts/serializers/account/service.py:13
#: accounts/serializers/automations/change_secret.py:117 #: accounts/serializers/automations/change_secret.py:117
#: accounts/serializers/automations/change_secret.py:148 #: accounts/serializers/automations/change_secret.py:148
#: acls/serializers/base.py:112 #: acls/serializers/base.py:112
#: acls/templates/acls/asset_login_reminder.html:11 #: acls/templates/acls/asset_login_reminder.html:11
#: assets/serializers/gateway.py:33 audits/models.py:60 audits/models.py:337 #: assets/serializers/gateway.py:33 audits/models.py:60 audits/models.py:337
#: audits/serializers.py:231 authentication/api/connection_token.py:464 #: audits/serializers.py:231 authentication/api/connection_token.py:465
#: ops/models/base.py:18 perms/models/asset_permission.py:75 #: ops/models/base.py:18 perms/models/asset_permission.py:75
#: settings/serializers/msg.py:33 terminal/backends/command/models.py:18 #: settings/serializers/msg.py:33 terminal/backends/command/models.py:18
#: terminal/models/session/session.py:31 terminal/notifications.py:291 #: terminal/models/session/session.py:31 terminal/notifications.py:291
@@ -624,7 +625,7 @@ msgstr "Biểu tượng"
#: accounts/models/application.py:20 accounts/models/base.py:39 #: accounts/models/application.py:20 accounts/models/base.py:39
#: accounts/models/mixins/vault.py:49 #: accounts/models/mixins/vault.py:49
#: accounts/serializers/account/account.py:492 #: accounts/serializers/account/account.py:498
#: accounts/serializers/account/base.py:20 #: accounts/serializers/account/base.py:20
#: authentication/models/temp_token.py:11 #: authentication/models/temp_token.py:11
#: authentication/templates/authentication/_access_key_modal.html:31 #: authentication/templates/authentication/_access_key_modal.html:31
@@ -797,7 +798,7 @@ msgid "Status"
msgstr "Trạng thái" msgstr "Trạng thái"
#: accounts/models/automations/change_secret.py:51 #: accounts/models/automations/change_secret.py:51
#: accounts/serializers/account/account.py:296 assets/const/automation.py:9 #: accounts/serializers/account/account.py:297 assets/const/automation.py:9
#: authentication/templates/authentication/passkey.html:177 #: authentication/templates/authentication/passkey.html:177
#: authentication/views/base.py:42 authentication/views/base.py:43 #: authentication/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:67 #: authentication/views/base.py:44 common/const/choices.py:67
@@ -1029,7 +1030,7 @@ msgid "Verify asset account"
msgstr "Xác thực tài khoản" msgstr "Xác thực tài khoản"
#: accounts/models/base.py:37 accounts/models/base.py:66 #: accounts/models/base.py:37 accounts/models/base.py:66
#: accounts/serializers/account/account.py:491 #: accounts/serializers/account/account.py:497
#: accounts/serializers/account/base.py:17 #: accounts/serializers/account/base.py:17
#: accounts/serializers/automations/change_secret.py:50 #: accounts/serializers/automations/change_secret.py:50
#: authentication/serializers/connect_token_secret.py:42 #: authentication/serializers/connect_token_secret.py:42
@@ -1274,54 +1275,46 @@ msgstr "Tài khoản đã tồn tại. Trường :{fields} phải là duy nhất
msgid "Has secret" msgid "Has secret"
msgstr "Đã quản lý mật khẩu" msgstr "Đã quản lý mật khẩu"
#: accounts/serializers/account/account.py:295 ops/models/celery.py:84 #: accounts/serializers/account/account.py:296 ops/models/celery.py:84
#: tickets/models/comment.py:13 tickets/models/ticket/general.py:49 #: tickets/models/comment.py:13 tickets/models/ticket/general.py:49
#: tickets/models/ticket/general.py:280 tickets/serializers/super_ticket.py:14 #: tickets/models/ticket/general.py:280 tickets/serializers/super_ticket.py:14
msgid "State" msgid "State"
msgstr "Trạng thái" msgstr "Trạng thái"
#: accounts/serializers/account/account.py:297 #: accounts/serializers/account/account.py:298
msgid "Changed" msgid "Changed"
msgstr "Đã sửa đổi" msgstr "Đã sửa đổi"
#: accounts/serializers/account/account.py:307 acls/models/base.py:97 #: accounts/serializers/account/account.py:410
#: acls/templates/acls/asset_login_reminder.html:10
#: assets/models/automations/base.py:25
#: assets/serializers/automations/base.py:20 assets/serializers/domain.py:33
#: assets/serializers/platform.py:181 assets/serializers/platform.py:213
#: authentication/api/connection_token.py:463 ops/models/base.py:17
#: ops/models/job.py:157 ops/serializers/job.py:21
#: perms/serializers/permission.py:57
#: terminal/templates/terminal/_msg_command_execute_alert.html:16
#: xpack/plugins/cloud/manager.py:101
msgid "Assets"
msgstr "Tài sản"
#: accounts/serializers/account/account.py:412
#, python-format #, python-format
msgid "Asset does not support this secret type: %s" msgid "Asset does not support this secret type: %s"
msgstr "Tài sản không hỗ trợ loại tài khoản: %s" msgstr "Tài sản không hỗ trợ loại tài khoản: %s"
#: accounts/serializers/account/account.py:444 #: accounts/serializers/account/account.py:443
msgid "Account has exist" msgid "Account has exist"
msgstr "Tài khoản đã tồn tại" msgstr "Tài khoản đã tồn tại"
#: accounts/serializers/account/account.py:476 #: accounts/serializers/account/account.py:468
#: accounts/serializers/account/account.py:483 #: accounts/serializers/account/account.py:469
msgid "At least one asset or node must be specified"
msgstr "Tài khoản yêu cầu"
#: accounts/serializers/account/account.py:482
#: accounts/serializers/account/account.py:489
#: accounts/serializers/account/base.py:73 #: accounts/serializers/account/base.py:73
#: accounts/serializers/account/base.py:88 #: accounts/serializers/account/base.py:88
#: assets/serializers/asset/common.py:425 #: assets/serializers/asset/common.py:425
msgid "Spec info" msgid "Spec info"
msgstr "Thông tin đặc biệt" msgstr "Thông tin đặc biệt"
#: accounts/serializers/account/account.py:493 #: accounts/serializers/account/account.py:499
#: authentication/serializers/connect_token_secret.py:173 #: authentication/serializers/connect_token_secret.py:173
#: authentication/templates/authentication/_access_key_modal.html:30 #: authentication/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:33 #: perms/models/perm_node.py:21 users/serializers/group.py:33
msgid "ID" msgid "ID"
msgstr "ID" msgstr "ID"
#: accounts/serializers/account/account.py:503 acls/notifications.py:18 #: accounts/serializers/account/account.py:509 acls/notifications.py:18
#: acls/notifications.py:68 acls/serializers/base.py:104 #: acls/notifications.py:68 acls/serializers/base.py:104
#: acls/templates/acls/asset_login_reminder.html:8 #: acls/templates/acls/asset_login_reminder.html:8
#: acls/templates/acls/user_login_reminder.html:8 #: acls/templates/acls/user_login_reminder.html:8
@@ -1346,7 +1339,7 @@ msgstr "ID"
msgid "User" msgid "User"
msgstr "Người dùng" msgstr "Người dùng"
#: accounts/serializers/account/account.py:504 #: accounts/serializers/account/account.py:510
#: authentication/templates/authentication/_access_key_modal.html:33 #: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:165 terminal/notifications.py:225 #: terminal/notifications.py:165 terminal/notifications.py:225
msgid "Date" msgid "Date"
@@ -1796,7 +1789,7 @@ msgstr "Tài khoản thành công"
#: accounts/templates/accounts/change_secret_report.html:118 #: accounts/templates/accounts/change_secret_report.html:118
#: accounts/templates/accounts/push_account_report.html:77 #: accounts/templates/accounts/push_account_report.html:77
#: accounts/templates/accounts/push_account_report.html:117 #: accounts/templates/accounts/push_account_report.html:117
#: audits/handler.py:128 #: audits/handler.py:130
msgid "No" msgid "No"
msgstr "Không" msgstr "Không"
@@ -1922,6 +1915,18 @@ msgstr "Người phê duyệt"
msgid "Users" msgid "Users"
msgstr "Người dùng" msgstr "Người dùng"
#: acls/models/base.py:97 acls/templates/acls/asset_login_reminder.html:10
#: assets/models/automations/base.py:25
#: assets/serializers/automations/base.py:20 assets/serializers/domain.py:33
#: assets/serializers/platform.py:181 assets/serializers/platform.py:213
#: authentication/api/connection_token.py:464 ops/models/base.py:17
#: ops/models/job.py:157 ops/serializers/job.py:21
#: perms/serializers/permission.py:57
#: terminal/templates/terminal/_msg_command_execute_alert.html:16
#: xpack/plugins/cloud/manager.py:101
msgid "Assets"
msgstr "Tài sản"
#: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60 #: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60
#: ops/serializers/job.py:92 terminal/const.py:88 #: ops/serializers/job.py:92 terminal/const.py:88
#: terminal/models/session/session.py:40 terminal/serializers/command.py:18 #: terminal/models/session/session.py:40 terminal/serializers/command.py:18
@@ -2701,19 +2706,19 @@ msgstr "Thu thập thông tin phần cứng tài sản"
msgid "Custom info" msgid "Custom info"
msgstr "Thuộc tính tùy chỉnh" msgstr "Thuộc tính tùy chỉnh"
#: assets/models/asset/common.py:431 #: assets/models/asset/common.py:430
msgid "Can refresh asset hardware info" msgid "Can refresh asset hardware info"
msgstr "Có thể cập nhật thông tin phần cứng tài sản" msgstr "Có thể cập nhật thông tin phần cứng tài sản"
#: assets/models/asset/common.py:432 #: assets/models/asset/common.py:431
msgid "Can test asset connectivity" msgid "Can test asset connectivity"
msgstr "Có thể kiểm tra tính kết nối của tài sản" msgstr "Có thể kiểm tra tính kết nối của tài sản"
#: assets/models/asset/common.py:433 #: assets/models/asset/common.py:432
msgid "Can match asset" msgid "Can match asset"
msgstr "Có thể khớp tài sản" msgstr "Có thể khớp tài sản"
#: assets/models/asset/common.py:434 #: assets/models/asset/common.py:433
msgid "Can change asset nodes" msgid "Can change asset nodes"
msgstr "Có thể sửa đổi nút tài sản" msgstr "Có thể sửa đổi nút tài sản"
@@ -3643,7 +3648,7 @@ msgstr "Nhiệm vụ"
msgid "-" msgid "-"
msgstr "-" msgstr "-"
#: audits/handler.py:128 #: audits/handler.py:130
msgid "Yes" msgid "Yes"
msgstr "Là" msgstr "Là"
@@ -3929,35 +3934,35 @@ msgstr ""
"Không cho phép sử dụng mã thông báo kết nối có thể tái sử dụng, chưa kích " "Không cho phép sử dụng mã thông báo kết nối có thể tái sử dụng, chưa kích "
"hoạt cài đặt toàn cầu" "hoạt cài đặt toàn cầu"
#: authentication/api/connection_token.py:425 #: authentication/api/connection_token.py:426
msgid "Anonymous account is not supported for this asset" msgid "Anonymous account is not supported for this asset"
msgstr "Tài khoản ẩn danh không hỗ trợ tài sản hiện tại" msgstr "Tài khoản ẩn danh không hỗ trợ tài sản hiện tại"
#: authentication/api/connection_token.py:455 #: authentication/api/connection_token.py:456
msgid "Permission expired" msgid "Permission expired"
msgstr "Quyền truy cập đã hết hạn" msgstr "Quyền truy cập đã hết hạn"
#: authentication/api/connection_token.py:488 #: authentication/api/connection_token.py:489
msgid "ACL action is reject: {}({})" msgid "ACL action is reject: {}({})"
msgstr "Hành động ACL là từ chối: {}({})" msgstr "Hành động ACL là từ chối: {}({})"
#: authentication/api/connection_token.py:492 #: authentication/api/connection_token.py:493
msgid "ACL action is review" msgid "ACL action is review"
msgstr "Hành động ACL là xem xét" msgstr "Hành động ACL là xem xét"
#: authentication/api/connection_token.py:502 #: authentication/api/connection_token.py:503
msgid "ACL action is face verify" msgid "ACL action is face verify"
msgstr "Hành động ACL là xác thực khuôn mặt" msgstr "Hành động ACL là xác thực khuôn mặt"
#: authentication/api/connection_token.py:507 #: authentication/api/connection_token.py:508
msgid "ACL action not supported for this asset" msgid "ACL action not supported for this asset"
msgstr "Quy tắc đăng nhập tài sản không hỗ trợ tài sản hiện tại." msgstr "Quy tắc đăng nhập tài sản không hỗ trợ tài sản hiện tại."
#: authentication/api/connection_token.py:514 #: authentication/api/connection_token.py:515
msgid "ACL action is face online" msgid "ACL action is face online"
msgstr "Hành động ACL là nhận diện khuôn mặt trực tuyến" msgstr "Hành động ACL là nhận diện khuôn mặt trực tuyến"
#: authentication/api/connection_token.py:539 #: authentication/api/connection_token.py:540
msgid "No available face feature" msgid "No available face feature"
msgstr "Không có đặc điểm khuôn mặt khả dụng" msgstr "Không có đặc điểm khuôn mặt khả dụng"
@@ -4038,7 +4043,7 @@ msgstr ""
msgid "Invalid token or cache refreshed." msgid "Invalid token or cache refreshed."
msgstr "Token làm mới hoặc bộ nhớ cache không hợp lệ." msgstr "Token làm mới hoặc bộ nhớ cache không hợp lệ."
#: authentication/backends/oidc/views.py:175 #: authentication/backends/oidc/views.py:137
msgid "OpenID Error" msgid "OpenID Error"
msgstr "Lỗi OpenID." msgstr "Lỗi OpenID."
@@ -4266,16 +4271,16 @@ msgstr "Mật khẩu của bạn không hợp lệ"
msgid "Please wait for %s seconds before retry" msgid "Please wait for %s seconds before retry"
msgstr "Vui lòng thử lại sau %s giây" msgstr "Vui lòng thử lại sau %s giây"
#: authentication/errors/redirect.py:85 authentication/mixins.py:332 #: authentication/errors/redirect.py:85 authentication/mixins.py:365
#: users/views/profile/reset.py:224 #: users/views/profile/reset.py:224
msgid "Your password is too simple, please change it for security" msgid "Your password is too simple, please change it for security"
msgstr "Mật khẩu của bạn quá đơn giản, để đảm bảo an toàn, vui lòng thay đổi" msgstr "Mật khẩu của bạn quá đơn giản, để đảm bảo an toàn, vui lòng thay đổi"
#: authentication/errors/redirect.py:93 authentication/mixins.py:341 #: authentication/errors/redirect.py:93 authentication/mixins.py:374
msgid "You should to change your password before login" msgid "You should to change your password before login"
msgstr "Trước khi hoàn tất đăng nhập, vui lòng thay đổi mật khẩu" msgstr "Trước khi hoàn tất đăng nhập, vui lòng thay đổi mật khẩu"
#: authentication/errors/redirect.py:101 authentication/mixins.py:350 #: authentication/errors/redirect.py:101 authentication/mixins.py:383
msgid "Your password has expired, please reset before logging in" msgid "Your password has expired, please reset before logging in"
msgstr "Mật khẩu của bạn đã hết hạn, hãy thay đổi rồi mới đăng nhập" msgstr "Mật khẩu của bạn đã hết hạn, hãy thay đổi rồi mới đăng nhập"
@@ -4395,11 +4400,20 @@ msgstr "Xóa số điện thoại để vô hiệu hóa."
msgid "Authentication failed (before login check failed): {}" msgid "Authentication failed (before login check failed): {}"
msgstr "Xác thực không thành công (Kiểm tra trước khi đăng nhập thất bại): {}" msgstr "Xác thực không thành công (Kiểm tra trước khi đăng nhập thất bại): {}"
#: authentication/mixins.py:84 #: authentication/mixins.py:105
msgid ""
"The administrator has enabled \"Only allow existing users to log in\", \n"
" and the current user is not in the user list. Please contact the administrator."
msgstr ""
"Quản trị viên đã bật 'chỉ cho phép người dùng đã tồn tại đăng nhập', người "
"dùng hiện tại không có trong danh sách người dùng, xin vui lòng liên hệ với "
"quản trị viên."
#: authentication/mixins.py:117
msgid "User is invalid" msgid "User is invalid"
msgstr "Người dùng không hợp lệ" msgstr "Người dùng không hợp lệ"
#: authentication/mixins.py:99 #: authentication/mixins.py:132
msgid "" msgid ""
"The administrator has enabled 'Only allow login from user source'. \n" "The administrator has enabled 'Only allow login from user source'. \n"
" The current user source is {}. Please contact the administrator." " The current user source is {}. Please contact the administrator."
@@ -4407,11 +4421,11 @@ msgstr ""
"Quản trị viên đã bật 'Chỉ cho phép đăng nhập từ nguồn người dùng', nguồn " "Quản trị viên đã bật 'Chỉ cho phép đăng nhập từ nguồn người dùng', nguồn "
"người dùng hiện tại là {}. Vui lòng liên hệ với quản trị viên." "người dùng hiện tại là {}. Vui lòng liên hệ với quản trị viên."
#: authentication/mixins.py:278 #: authentication/mixins.py:311
msgid "The MFA type ({}) is not enabled" msgid "The MFA type ({}) is not enabled"
msgstr "Phương thức MFA ({}) này chưa được kích hoạt" msgstr "Phương thức MFA ({}) này chưa được kích hoạt"
#: authentication/mixins.py:320 #: authentication/mixins.py:353
msgid "Please change your password" msgid "Please change your password"
msgstr "Vui lòng thay đổi mật khẩu" msgstr "Vui lòng thay đổi mật khẩu"
@@ -4926,24 +4940,24 @@ msgstr "Có muốn thử lại không?"
msgid "LAN" msgid "LAN"
msgstr "Mạng nội bộ" msgstr "Mạng nội bộ"
#: authentication/views/base.py:71 #: authentication/views/base.py:70
#: perms/templates/perms/_msg_permed_items_expire.html:18 #: perms/templates/perms/_msg_permed_items_expire.html:18
msgid "If you have any question, please contact the administrator" msgid "If you have any question, please contact the administrator"
msgstr "" msgstr ""
"Nếu có bất kỳ câu hỏi hoặc nhu cầu nào, xin vui lòng liên hệ với quản trị " "Nếu có bất kỳ câu hỏi hoặc nhu cầu nào, xin vui lòng liên hệ với quản trị "
"viên hệ thống" "viên hệ thống"
#: authentication/views/base.py:144 #: authentication/views/base.py:143
#, python-format #, python-format
msgid "%s query user failed" msgid "%s query user failed"
msgstr "%s truy vấn người dùng không thành công" msgstr "%s truy vấn người dùng không thành công"
#: authentication/views/base.py:152 #: authentication/views/base.py:151
#, python-format #, python-format
msgid "The %s is already bound to another user" msgid "The %s is already bound to another user"
msgstr "%s đã được liên kết với một người dùng khác" msgstr "%s đã được liên kết với một người dùng khác"
#: authentication/views/base.py:159 #: authentication/views/base.py:158
#, python-format #, python-format
msgid "Binding %s successfully" msgid "Binding %s successfully"
msgstr "Liên kết %s thành công" msgstr "Liên kết %s thành công"
@@ -5085,7 +5099,7 @@ msgid "Please login with a password and then bind the WeCom"
msgstr "" msgstr ""
"Vui lòng đăng nhập bằng mật khẩu trước, rồi liên kết WeChat Doanh Nghiệp" "Vui lòng đăng nhập bằng mật khẩu trước, rồi liên kết WeChat Doanh Nghiệp"
#: common/api/action.py:68 #: common/api/action.py:80
msgid "Request file format may be wrong" msgid "Request file format may be wrong"
msgstr "Định dạng tệp tải lên sai hoặc tệp thuộc loại tài nguyên khác." msgstr "Định dạng tệp tải lên sai hoặc tệp thuộc loại tài nguyên khác."
@@ -5633,7 +5647,7 @@ msgstr ""
msgid "App Labels" msgid "App Labels"
msgstr "Labels" msgstr "Labels"
#: labels/models.py:15 settings/serializers/security.py:211 #: labels/models.py:15
msgid "Color" msgid "Color"
msgstr "Màu sắc" msgstr "Màu sắc"
@@ -7685,40 +7699,40 @@ msgid "Period clean"
msgstr "Dọn dẹp định kỳ" msgstr "Dọn dẹp định kỳ"
#: settings/serializers/cleaning.py:15 #: settings/serializers/cleaning.py:15
msgid "Login log retention days (day)" msgid "Login log retention days"
msgstr "Nhật ký đăng nhập (ngày)" msgstr "Ngày lưu giữ nhật ký đăng nhập"
#: settings/serializers/cleaning.py:19 #: settings/serializers/cleaning.py:19
msgid "Task log retention days (day)" msgid "Task log retention days"
msgstr "Nhật ký tác vụ (ngày)" msgstr "Ngày lưu giữ nhật ký nhiệm vụ"
#: settings/serializers/cleaning.py:23 #: settings/serializers/cleaning.py:23
msgid "Operate log retention days (day)" msgid "Operate log retention days"
msgstr "Nhật ký hành động (ngày)" msgstr "Ngày lưu giữ nhật ký hành động"
#: settings/serializers/cleaning.py:27 #: settings/serializers/cleaning.py:27
msgid "password change log keep days (day)" msgid "Password change log retention days"
msgstr "Nhật ký thay đổi mật khẩu" msgstr "Ngày lưu giữ nhật ký thay đổi mật khẩu người dùng"
#: settings/serializers/cleaning.py:31 #: settings/serializers/cleaning.py:31
msgid "FTP log retention days (day)" msgid "FTP log retention days"
msgstr "Tải lên và tải xuống (ngày)" msgstr "Ngày lưu giữ nhật ký tải lên và tải xuống"
#: settings/serializers/cleaning.py:35 #: settings/serializers/cleaning.py:35
msgid "Cloud sync task history retention days (day)" msgid "Cloud sync task history retention days"
msgstr "Hồ sơ đồng bộ đám mây (ngày)" msgstr "Ngày lưu giữ nhật ký đồng bộ đám mây"
#: settings/serializers/cleaning.py:39 #: settings/serializers/cleaning.py:39
msgid "job execution retention days (day)" msgid "job execution retention days"
msgstr "Lịch sử thực hiện trung tâm công việc (ngày)" msgstr "Ngày lưu giữ lịch sử thực hiện công việc"
#: settings/serializers/cleaning.py:43 #: settings/serializers/cleaning.py:43
msgid "Activity log retention days (day)" msgid "Activity log retention days"
msgstr "Hồ sơ hoạt động (ngày)" msgstr "Ngày lưu giữ nhật ký hoạt động"
#: settings/serializers/cleaning.py:46 #: settings/serializers/cleaning.py:46
msgid "Session log retention days (day)" msgid "Session log retention days"
msgstr "Nhật ký phiên (ngày)" msgstr "Ngày lưu giữ nhật ký phiên làm việc"
#: settings/serializers/cleaning.py:48 #: settings/serializers/cleaning.py:48
msgid "" msgid ""
@@ -7729,8 +7743,8 @@ msgstr ""
"tới lưu trữ cơ sở dữ liệu, không ảnh hưởng tới OSS)" "tới lưu trữ cơ sở dữ liệu, không ảnh hưởng tới OSS)"
#: settings/serializers/cleaning.py:53 #: settings/serializers/cleaning.py:53
msgid "Change secret and push record retention days (day)" msgid "Change secret and push record retention days"
msgstr "Số ngày lưu giữ nhật ký đẩy thay đổi mật khẩu (ngày)" msgstr "Ngày lưu giữ nhật ký thông báo thay đổi mật khẩu tài khoản."
#: settings/serializers/feature.py:23 settings/serializers/msg.py:69 #: settings/serializers/feature.py:23 settings/serializers/msg.py:69
msgid "Subject" msgid "Subject"
@@ -8247,28 +8261,32 @@ msgid "Watermark"
msgstr "Bật hình mờ" msgstr "Bật hình mờ"
#: settings/serializers/security.py:205 #: settings/serializers/security.py:205
msgid "Watermark session content" msgid "Session content"
msgstr "Nội dung hình mờ cuộc trò chuyện tùy chỉnh" msgstr "Nội dung tùy chỉnh cho watermark phiên họp"
#: settings/serializers/security.py:208 #: settings/serializers/security.py:208
msgid "Watermark console content" msgid "Console content"
msgstr "Nội dung hình mờ trang quản trị tùy chỉnh" msgstr "Nội dung tùy chỉnh cho watermark trang quản lý"
#: settings/serializers/security.py:211
msgid "Font color"
msgstr "Màu sắc phông chữ"
#: settings/serializers/security.py:214 #: settings/serializers/security.py:214
msgid "Watermark font size" msgid "Font size"
msgstr "Font chữ và cỡ chữ" msgstr "Kích thước phông chữ (px)"
#: settings/serializers/security.py:217 #: settings/serializers/security.py:217
msgid "Watermark height" msgid "Height"
msgstr "Chiều cao hình mờ đơn lẻ" msgstr "Chiều cao (px)"
#: settings/serializers/security.py:220 #: settings/serializers/security.py:220
msgid "Watermark width" msgid "Width"
msgstr "Chiều rộng hình mờ đơn lẻ" msgstr "Chiều rộng (px)"
#: settings/serializers/security.py:223 #: settings/serializers/security.py:223
msgid "Watermark rotate" msgid "Rotate"
msgstr "Góc xoay hình mờ" msgstr "Góc xoay (độ)"
#: settings/serializers/security.py:227 #: settings/serializers/security.py:227
msgid "Max idle time (minute)" msgid "Max idle time (minute)"
@@ -8591,15 +8609,15 @@ msgstr "Xác thực thất bại: (không xác định): {}"
msgid "Authentication success: {}" msgid "Authentication success: {}"
msgstr "Xác thực thành công: {}" msgstr "Xác thực thành công: {}"
#: settings/ws.py:226 #: settings/ws.py:228
msgid "No LDAP user was found" msgid "No LDAP user was found"
msgstr "Không lấy được người dùng LDAP" msgstr "Không lấy được người dùng LDAP"
#: settings/ws.py:235 #: settings/ws.py:237
msgid "Total {}, success {}, failure {}" msgid "Total {}, success {}, failure {}"
msgstr "Tổng cộng {} , thành công {} , thất bại {}" msgstr "Tổng cộng {} , thành công {} , thất bại {}"
#: settings/ws.py:239 #: settings/ws.py:241
msgid ", disabled {}" msgid ", disabled {}"
msgstr ", đã vô hiệu hóa {}" msgstr ", đã vô hiệu hóa {}"
@@ -12021,24 +12039,3 @@ msgstr "Nhập giấy phép thành công"
#: xpack/plugins/license/api.py:53 #: xpack/plugins/license/api.py:53
msgid "Invalid license" msgid "Invalid license"
msgstr "Giấy phép không hợp lệ" msgstr "Giấy phép không hợp lệ"
#, fuzzy
#~ msgid "Themes"
#~ msgstr "Chủ đề"
#, fuzzy
#~ msgid "domain_name"
#~ msgstr "Tên miền"
#~ msgid "Task execution id"
#~ msgstr "ID thực hiện nhiệm vụ"
#~ msgid "Respectful"
#~ msgstr "Kính gửi"
#~ msgid ""
#~ "Hello! The following is the failure of changing the password of your assets "
#~ "or pushing the account. Please check and handle it in time."
#~ msgstr ""
#~ "Chào bạn! Dưới đây là tình huống về việc thay đổi mật khẩu tài sản hoặc thất"
#~ " bại khi đẩy tài khoản. Vui lòng kiểm tra và xử lý kịp thời."

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: JumpServer 0.3.3\n" "Project-Id-Version: JumpServer 0.3.3\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-16 14:10+0800\n" "POT-Creation-Date: 2025-11-05 18:33+0800\n"
"PO-Revision-Date: 2021-05-20 10:54+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n"
"Last-Translator: ibuler <ibuler@qq.com>\n" "Last-Translator: ibuler <ibuler@qq.com>\n"
"Language-Team: JumpServer team<ibuler@qq.com>\n" "Language-Team: JumpServer team<ibuler@qq.com>\n"
@@ -17,14 +17,14 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.4.3\n" "X-Generator: Poedit 2.4.3\n"
#: accounts/api/account/account.py:141 #: accounts/api/account/account.py:142
#: accounts/serializers/account/account.py:181 #: accounts/serializers/account/account.py:181
#: accounts/serializers/account/account.py:362 #: accounts/serializers/account/account.py:362
msgid "Account already exists" msgid "Account already exists"
msgstr "账号已存在" msgstr "账号已存在"
#: accounts/api/account/application.py:77 #: accounts/api/account/application.py:77
#: authentication/api/connection_token.py:452 #: authentication/api/connection_token.py:453
msgid "Account not found" msgid "Account not found"
msgstr "账号未找到" msgstr "账号未找到"
@@ -458,7 +458,7 @@ msgstr "Vault 操作失败,请重试,或者检查 Vault 上的账号信息
#: accounts/templates/accounts/push_account_report.html:78 #: accounts/templates/accounts/push_account_report.html:78
#: accounts/templates/accounts/push_account_report.html:118 #: accounts/templates/accounts/push_account_report.html:118
#: acls/notifications.py:70 acls/serializers/base.py:111 #: acls/notifications.py:70 acls/serializers/base.py:111
#: assets/models/asset/common.py:102 assets/models/asset/common.py:428 #: assets/models/asset/common.py:102 assets/models/asset/common.py:427
#: assets/models/cmd_filter.py:36 audits/models.py:59 audits/models.py:336 #: assets/models/cmd_filter.py:36 audits/models.py:59 audits/models.py:336
#: audits/serializers.py:230 authentication/models/connection_token.py:42 #: audits/serializers.py:230 authentication/models/connection_token.py:42
#: perms/models/asset_permission.py:69 terminal/backends/command/models.py:17 #: perms/models/asset_permission.py:69 terminal/backends/command/models.py:17
@@ -473,7 +473,7 @@ msgstr "资产"
#: accounts/models/account.py:89 accounts/models/template.py:16 #: accounts/models/account.py:89 accounts/models/template.py:16
#: accounts/serializers/account/account.py:234 #: accounts/serializers/account/account.py:234
#: accounts/serializers/account/account.py:304 #: accounts/serializers/account/account.py:305
#: accounts/serializers/account/template.py:35 #: accounts/serializers/account/template.py:35
#: authentication/serializers/connect_token_secret.py:51 #: authentication/serializers/connect_token_secret.py:51
msgid "Su from" msgid "Su from"
@@ -520,13 +520,14 @@ msgstr "改密状态"
#: accounts/models/account.py:107 #: accounts/models/account.py:107
#: accounts/models/automations/check_account.py:64 #: accounts/models/automations/check_account.py:64
#: accounts/serializers/account/account.py:295
#: accounts/serializers/account/service.py:13 #: accounts/serializers/account/service.py:13
#: accounts/serializers/automations/change_secret.py:117 #: accounts/serializers/automations/change_secret.py:117
#: accounts/serializers/automations/change_secret.py:148 #: accounts/serializers/automations/change_secret.py:148
#: acls/serializers/base.py:112 #: acls/serializers/base.py:112
#: acls/templates/acls/asset_login_reminder.html:11 #: acls/templates/acls/asset_login_reminder.html:11
#: assets/serializers/gateway.py:33 audits/models.py:60 audits/models.py:337 #: assets/serializers/gateway.py:33 audits/models.py:60 audits/models.py:337
#: audits/serializers.py:231 authentication/api/connection_token.py:464 #: audits/serializers.py:231 authentication/api/connection_token.py:465
#: ops/models/base.py:18 perms/models/asset_permission.py:75 #: ops/models/base.py:18 perms/models/asset_permission.py:75
#: settings/serializers/msg.py:33 terminal/backends/command/models.py:18 #: settings/serializers/msg.py:33 terminal/backends/command/models.py:18
#: terminal/models/session/session.py:31 terminal/notifications.py:291 #: terminal/models/session/session.py:31 terminal/notifications.py:291
@@ -616,7 +617,7 @@ msgstr "图标"
#: accounts/models/application.py:20 accounts/models/base.py:39 #: accounts/models/application.py:20 accounts/models/base.py:39
#: accounts/models/mixins/vault.py:49 #: accounts/models/mixins/vault.py:49
#: accounts/serializers/account/account.py:492 #: accounts/serializers/account/account.py:498
#: accounts/serializers/account/base.py:20 #: accounts/serializers/account/base.py:20
#: authentication/models/temp_token.py:11 #: authentication/models/temp_token.py:11
#: authentication/templates/authentication/_access_key_modal.html:31 #: authentication/templates/authentication/_access_key_modal.html:31
@@ -786,7 +787,7 @@ msgid "Status"
msgstr "状态" msgstr "状态"
#: accounts/models/automations/change_secret.py:51 #: accounts/models/automations/change_secret.py:51
#: accounts/serializers/account/account.py:296 assets/const/automation.py:9 #: accounts/serializers/account/account.py:297 assets/const/automation.py:9
#: authentication/templates/authentication/passkey.html:177 #: authentication/templates/authentication/passkey.html:177
#: authentication/views/base.py:42 authentication/views/base.py:43 #: authentication/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:67 #: authentication/views/base.py:44 common/const/choices.py:67
@@ -1010,7 +1011,7 @@ msgid "Verify asset account"
msgstr "账号验证" msgstr "账号验证"
#: accounts/models/base.py:37 accounts/models/base.py:66 #: accounts/models/base.py:37 accounts/models/base.py:66
#: accounts/serializers/account/account.py:491 #: accounts/serializers/account/account.py:497
#: accounts/serializers/account/base.py:17 #: accounts/serializers/account/base.py:17
#: accounts/serializers/automations/change_secret.py:50 #: accounts/serializers/automations/change_secret.py:50
#: authentication/serializers/connect_token_secret.py:42 #: authentication/serializers/connect_token_secret.py:42
@@ -1239,54 +1240,46 @@ msgstr "帐号已存在。字段:{fields} 必须是唯一的。"
msgid "Has secret" msgid "Has secret"
msgstr "已托管密码" msgstr "已托管密码"
#: accounts/serializers/account/account.py:295 ops/models/celery.py:84 #: accounts/serializers/account/account.py:296 ops/models/celery.py:84
#: tickets/models/comment.py:13 tickets/models/ticket/general.py:49 #: tickets/models/comment.py:13 tickets/models/ticket/general.py:49
#: tickets/models/ticket/general.py:280 tickets/serializers/super_ticket.py:14 #: tickets/models/ticket/general.py:280 tickets/serializers/super_ticket.py:14
msgid "State" msgid "State"
msgstr "状态" msgstr "状态"
#: accounts/serializers/account/account.py:297 #: accounts/serializers/account/account.py:298
msgid "Changed" msgid "Changed"
msgstr "已修改" msgstr "已修改"
#: accounts/serializers/account/account.py:307 acls/models/base.py:97 #: accounts/serializers/account/account.py:410
#: acls/templates/acls/asset_login_reminder.html:10
#: assets/models/automations/base.py:25
#: assets/serializers/automations/base.py:20 assets/serializers/domain.py:33
#: assets/serializers/platform.py:181 assets/serializers/platform.py:213
#: authentication/api/connection_token.py:463 ops/models/base.py:17
#: ops/models/job.py:157 ops/serializers/job.py:21
#: perms/serializers/permission.py:57
#: terminal/templates/terminal/_msg_command_execute_alert.html:16
#: xpack/plugins/cloud/manager.py:101
msgid "Assets"
msgstr "资产"
#: accounts/serializers/account/account.py:412
#, python-format #, python-format
msgid "Asset does not support this secret type: %s" msgid "Asset does not support this secret type: %s"
msgstr "资产不支持账号类型: %s" msgstr "资产不支持账号类型: %s"
#: accounts/serializers/account/account.py:444 #: accounts/serializers/account/account.py:443
msgid "Account has exist" msgid "Account has exist"
msgstr "账号已存在" msgstr "账号已存在"
#: accounts/serializers/account/account.py:476 #: accounts/serializers/account/account.py:468
#: accounts/serializers/account/account.py:483 #: accounts/serializers/account/account.py:469
msgid "At least one asset or node must be specified"
msgstr "必须指定至少一个资产或节点"
#: accounts/serializers/account/account.py:482
#: accounts/serializers/account/account.py:489
#: accounts/serializers/account/base.py:73 #: accounts/serializers/account/base.py:73
#: accounts/serializers/account/base.py:88 #: accounts/serializers/account/base.py:88
#: assets/serializers/asset/common.py:425 #: assets/serializers/asset/common.py:425
msgid "Spec info" msgid "Spec info"
msgstr "特殊信息" msgstr "特殊信息"
#: accounts/serializers/account/account.py:493 #: accounts/serializers/account/account.py:499
#: authentication/serializers/connect_token_secret.py:173 #: authentication/serializers/connect_token_secret.py:173
#: authentication/templates/authentication/_access_key_modal.html:30 #: authentication/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:33 #: perms/models/perm_node.py:21 users/serializers/group.py:33
msgid "ID" msgid "ID"
msgstr "ID" msgstr "ID"
#: accounts/serializers/account/account.py:503 acls/notifications.py:18 #: accounts/serializers/account/account.py:509 acls/notifications.py:18
#: acls/notifications.py:68 acls/serializers/base.py:104 #: acls/notifications.py:68 acls/serializers/base.py:104
#: acls/templates/acls/asset_login_reminder.html:8 #: acls/templates/acls/asset_login_reminder.html:8
#: acls/templates/acls/user_login_reminder.html:8 #: acls/templates/acls/user_login_reminder.html:8
@@ -1310,7 +1303,7 @@ msgstr "ID"
msgid "User" msgid "User"
msgstr "用户" msgstr "用户"
#: accounts/serializers/account/account.py:504 #: accounts/serializers/account/account.py:510
#: authentication/templates/authentication/_access_key_modal.html:33 #: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:165 terminal/notifications.py:225 #: terminal/notifications.py:165 terminal/notifications.py:225
msgid "Date" msgid "Date"
@@ -1747,7 +1740,7 @@ msgstr "成功账号"
#: accounts/templates/accounts/change_secret_report.html:118 #: accounts/templates/accounts/change_secret_report.html:118
#: accounts/templates/accounts/push_account_report.html:77 #: accounts/templates/accounts/push_account_report.html:77
#: accounts/templates/accounts/push_account_report.html:117 #: accounts/templates/accounts/push_account_report.html:117
#: audits/handler.py:128 #: audits/handler.py:130
msgid "No" msgid "No"
msgstr "否" msgstr "否"
@@ -1868,6 +1861,18 @@ msgstr "审批人"
msgid "Users" msgid "Users"
msgstr "用户" msgstr "用户"
#: acls/models/base.py:97 acls/templates/acls/asset_login_reminder.html:10
#: assets/models/automations/base.py:25
#: assets/serializers/automations/base.py:20 assets/serializers/domain.py:33
#: assets/serializers/platform.py:181 assets/serializers/platform.py:213
#: authentication/api/connection_token.py:464 ops/models/base.py:17
#: ops/models/job.py:157 ops/serializers/job.py:21
#: perms/serializers/permission.py:57
#: terminal/templates/terminal/_msg_command_execute_alert.html:16
#: xpack/plugins/cloud/manager.py:101
msgid "Assets"
msgstr "资产"
#: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60 #: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60
#: ops/serializers/job.py:92 terminal/const.py:88 #: ops/serializers/job.py:92 terminal/const.py:88
#: terminal/models/session/session.py:40 terminal/serializers/command.py:18 #: terminal/models/session/session.py:40 terminal/serializers/command.py:18
@@ -2621,19 +2626,19 @@ msgstr "收集资产硬件信息"
msgid "Custom info" msgid "Custom info"
msgstr "自定义属性" msgstr "自定义属性"
#: assets/models/asset/common.py:431 #: assets/models/asset/common.py:430
msgid "Can refresh asset hardware info" msgid "Can refresh asset hardware info"
msgstr "可以更新资产硬件信息" msgstr "可以更新资产硬件信息"
#: assets/models/asset/common.py:432 #: assets/models/asset/common.py:431
msgid "Can test asset connectivity" msgid "Can test asset connectivity"
msgstr "可以测试资产连接性" msgstr "可以测试资产连接性"
#: assets/models/asset/common.py:433 #: assets/models/asset/common.py:432
msgid "Can match asset" msgid "Can match asset"
msgstr "可以匹配资产" msgstr "可以匹配资产"
#: assets/models/asset/common.py:434 #: assets/models/asset/common.py:433
msgid "Can change asset nodes" msgid "Can change asset nodes"
msgstr "可以修改资产节点" msgstr "可以修改资产节点"
@@ -3518,7 +3523,7 @@ msgstr "任务"
msgid "-" msgid "-"
msgstr "-" msgstr "-"
#: audits/handler.py:128 #: audits/handler.py:130
msgid "Yes" msgid "Yes"
msgstr "是" msgstr "是"
@@ -3801,35 +3806,35 @@ msgstr "该操作需要验证您的 MFA, 请先开启并配置"
msgid "Reusable connection token is not allowed, global setting not enabled" msgid "Reusable connection token is not allowed, global setting not enabled"
msgstr "不允许使用可重复使用的连接令牌,未启用全局设置" msgstr "不允许使用可重复使用的连接令牌,未启用全局设置"
#: authentication/api/connection_token.py:425 #: authentication/api/connection_token.py:426
msgid "Anonymous account is not supported for this asset" msgid "Anonymous account is not supported for this asset"
msgstr "匿名账号不支持当前资产" msgstr "匿名账号不支持当前资产"
#: authentication/api/connection_token.py:455 #: authentication/api/connection_token.py:456
msgid "Permission expired" msgid "Permission expired"
msgstr "授权已过期" msgstr "授权已过期"
#: authentication/api/connection_token.py:488 #: authentication/api/connection_token.py:489
msgid "ACL action is reject: {}({})" msgid "ACL action is reject: {}({})"
msgstr "ACL 动作是拒绝: {}({})" msgstr "ACL 动作是拒绝: {}({})"
#: authentication/api/connection_token.py:492 #: authentication/api/connection_token.py:493
msgid "ACL action is review" msgid "ACL action is review"
msgstr "ACL 动作是复核" msgstr "ACL 动作是复核"
#: authentication/api/connection_token.py:502 #: authentication/api/connection_token.py:503
msgid "ACL action is face verify" msgid "ACL action is face verify"
msgstr "ACL 动作是人脸验证" msgstr "ACL 动作是人脸验证"
#: authentication/api/connection_token.py:507 #: authentication/api/connection_token.py:508
msgid "ACL action not supported for this asset" msgid "ACL action not supported for this asset"
msgstr "资产登录规则不支持当前资产" msgstr "资产登录规则不支持当前资产"
#: authentication/api/connection_token.py:514 #: authentication/api/connection_token.py:515
msgid "ACL action is face online" msgid "ACL action is face online"
msgstr "ACL 动作是人脸在线" msgstr "ACL 动作是人脸在线"
#: authentication/api/connection_token.py:539 #: authentication/api/connection_token.py:540
msgid "No available face feature" msgid "No available face feature"
msgstr "没有可用的人脸特征" msgstr "没有可用的人脸特征"
@@ -3905,7 +3910,7 @@ msgstr "无效的令牌头。符号字符串不应包含无效字符。"
msgid "Invalid token or cache refreshed." msgid "Invalid token or cache refreshed."
msgstr "刷新的令牌或缓存无效。" msgstr "刷新的令牌或缓存无效。"
#: authentication/backends/oidc/views.py:175 #: authentication/backends/oidc/views.py:137
msgid "OpenID Error" msgid "OpenID Error"
msgstr "OpenID 错误" msgstr "OpenID 错误"
@@ -4125,16 +4130,16 @@ msgstr "您的密码无效"
msgid "Please wait for %s seconds before retry" msgid "Please wait for %s seconds before retry"
msgstr "请在 %s 秒后重试" msgstr "请在 %s 秒后重试"
#: authentication/errors/redirect.py:85 authentication/mixins.py:332 #: authentication/errors/redirect.py:85 authentication/mixins.py:365
#: users/views/profile/reset.py:224 #: users/views/profile/reset.py:224
msgid "Your password is too simple, please change it for security" msgid "Your password is too simple, please change it for security"
msgstr "你的密码过于简单,为了安全,请修改" msgstr "你的密码过于简单,为了安全,请修改"
#: authentication/errors/redirect.py:93 authentication/mixins.py:341 #: authentication/errors/redirect.py:93 authentication/mixins.py:374
msgid "You should to change your password before login" msgid "You should to change your password before login"
msgstr "登录完成前,请先修改密码" msgstr "登录完成前,请先修改密码"
#: authentication/errors/redirect.py:101 authentication/mixins.py:350 #: authentication/errors/redirect.py:101 authentication/mixins.py:383
msgid "Your password has expired, please reset before logging in" msgid "Your password has expired, please reset before logging in"
msgstr "您的密码已过期,先修改再登录" msgstr "您的密码已过期,先修改再登录"
@@ -4251,21 +4256,29 @@ msgstr "清空手机号码禁用"
msgid "Authentication failed (before login check failed): {}" msgid "Authentication failed (before login check failed): {}"
msgstr "认证失败 (登录前检查失败): {}" msgstr "认证失败 (登录前检查失败): {}"
#: authentication/mixins.py:84 #: authentication/mixins.py:105
msgid ""
"The administrator has enabled \"Only allow existing users to log in\", \n"
" and the current user is not in the user list. Please contact "
"the administrator."
msgstr ""
"管理员已开启'仅允许已存在用户登录',当前用户不在用户列表中,请联系管理员。"
#: authentication/mixins.py:117
msgid "User is invalid" msgid "User is invalid"
msgstr "无效的用户" msgstr "无效的用户"
#: authentication/mixins.py:99 #: authentication/mixins.py:132
msgid "" msgid ""
"The administrator has enabled 'Only allow login from user source'. \n" "The administrator has enabled 'Only allow login from user source'. \n"
" The current user source is {}. Please contact the administrator." " The current user source is {}. Please contact the administrator."
msgstr "管理员已开启'仅允许从用户来源登录',当前用户来源为{},请联系管理员。" msgstr "管理员已开启'仅允许从用户来源登录',当前用户来源为{},请联系管理员。"
#: authentication/mixins.py:278 #: authentication/mixins.py:311
msgid "The MFA type ({}) is not enabled" msgid "The MFA type ({}) is not enabled"
msgstr "该 MFA ({}) 方式没有启用" msgstr "该 MFA ({}) 方式没有启用"
#: authentication/mixins.py:320 #: authentication/mixins.py:353
msgid "Please change your password" msgid "Please change your password"
msgstr "请修改密码" msgstr "请修改密码"
@@ -4750,22 +4763,22 @@ msgstr "是否重试 "
msgid "LAN" msgid "LAN"
msgstr "局域网" msgstr "局域网"
#: authentication/views/base.py:71 #: authentication/views/base.py:70
#: perms/templates/perms/_msg_permed_items_expire.html:18 #: perms/templates/perms/_msg_permed_items_expire.html:18
msgid "If you have any question, please contact the administrator" msgid "If you have any question, please contact the administrator"
msgstr "如果有疑问或需求,请联系系统管理员" msgstr "如果有疑问或需求,请联系系统管理员"
#: authentication/views/base.py:144 #: authentication/views/base.py:143
#, python-format #, python-format
msgid "%s query user failed" msgid "%s query user failed"
msgstr "%s 查询用户失败" msgstr "%s 查询用户失败"
#: authentication/views/base.py:152 #: authentication/views/base.py:151
#, python-format #, python-format
msgid "The %s is already bound to another user" msgid "The %s is already bound to another user"
msgstr "%s 已绑定到另一个用户" msgstr "%s 已绑定到另一个用户"
#: authentication/views/base.py:159 #: authentication/views/base.py:158
#, python-format #, python-format
msgid "Binding %s successfully" msgid "Binding %s successfully"
msgstr "绑定 %s 成功" msgstr "绑定 %s 成功"
@@ -4905,7 +4918,7 @@ msgstr "从企业微信获取用户失败"
msgid "Please login with a password and then bind the WeCom" msgid "Please login with a password and then bind the WeCom"
msgstr "请使用密码登录,然后绑定企业微信" msgstr "请使用密码登录,然后绑定企业微信"
#: common/api/action.py:68 #: common/api/action.py:80
msgid "Request file format may be wrong" msgid "Request file format may be wrong"
msgstr "上传的文件格式错误 或 其它类型资源的文件" msgstr "上传的文件格式错误 或 其它类型资源的文件"
@@ -5429,7 +5442,7 @@ msgstr ""
msgid "App Labels" msgid "App Labels"
msgstr "标签管理" msgstr "标签管理"
#: labels/models.py:15 settings/serializers/security.py:211 #: labels/models.py:15
msgid "Color" msgid "Color"
msgstr "颜色" msgstr "颜色"
@@ -7407,40 +7420,40 @@ msgid "Period clean"
msgstr "定時清掃" msgstr "定時清掃"
#: settings/serializers/cleaning.py:15 #: settings/serializers/cleaning.py:15
msgid "Login log retention days (day)" msgid "Login log retention days"
msgstr "登录日志 (天)" msgstr "登录日志保留天数"
#: settings/serializers/cleaning.py:19 #: settings/serializers/cleaning.py:19
msgid "Task log retention days (day)" msgid "Task log retention days"
msgstr "任务日志 (天)" msgstr "任务日志保留天数"
#: settings/serializers/cleaning.py:23 #: settings/serializers/cleaning.py:23
msgid "Operate log retention days (day)" msgid "Operate log retention days"
msgstr "操作日志 (天)" msgstr "操作日志保留天数"
#: settings/serializers/cleaning.py:27 #: settings/serializers/cleaning.py:27
msgid "password change log keep days (day)" msgid "Password change log retention days"
msgstr "改密日志" msgstr "用户改密日志保留天数"
#: settings/serializers/cleaning.py:31 #: settings/serializers/cleaning.py:31
msgid "FTP log retention days (day)" msgid "FTP log retention days"
msgstr "上传下载 (天)" msgstr "上传下载记录保留天数"
#: settings/serializers/cleaning.py:35 #: settings/serializers/cleaning.py:35
msgid "Cloud sync task history retention days (day)" msgid "Cloud sync task history retention days"
msgstr "云同步记录 (天)" msgstr "云同步记录保留天数"
#: settings/serializers/cleaning.py:39 #: settings/serializers/cleaning.py:39
msgid "job execution retention days (day)" msgid "job execution retention days"
msgstr "作业中心执行历史 (天)" msgstr "作业执行历史保留天数"
#: settings/serializers/cleaning.py:43 #: settings/serializers/cleaning.py:43
msgid "Activity log retention days (day)" msgid "Activity log retention days"
msgstr "活动记录 (天)" msgstr "活动记录保留天数"
#: settings/serializers/cleaning.py:46 #: settings/serializers/cleaning.py:46
msgid "Session log retention days (day)" msgid "Session log retention days"
msgstr "会话日志 (天)" msgstr "会话日志保留天数"
#: settings/serializers/cleaning.py:48 #: settings/serializers/cleaning.py:48
msgid "" msgid ""
@@ -7450,8 +7463,8 @@ msgstr ""
"会话、录像,命令记录超过该时长将会被清除 (影响数据库存储OSS 等不受影响)" "会话、录像,命令记录超过该时长将会被清除 (影响数据库存储OSS 等不受影响)"
#: settings/serializers/cleaning.py:53 #: settings/serializers/cleaning.py:53
msgid "Change secret and push record retention days (day)" msgid "Change secret and push record retention days"
msgstr "改密推送记录保留天数 (天)" msgstr "账号改密推送记录保留天数"
#: settings/serializers/feature.py:23 settings/serializers/msg.py:69 #: settings/serializers/feature.py:23 settings/serializers/msg.py:69
msgid "Subject" msgid "Subject"
@@ -7933,28 +7946,32 @@ msgid "Watermark"
msgstr "开启水印" msgstr "开启水印"
#: settings/serializers/security.py:205 #: settings/serializers/security.py:205
msgid "Watermark session content" msgid "Session content"
msgstr "会话水印自定义内容" msgstr "会话水印自定义内容"
#: settings/serializers/security.py:208 #: settings/serializers/security.py:208
msgid "Watermark console content" msgid "Console content"
msgstr "管理页面水印自定义内容" msgstr "管理页面水印自定义内容"
#: settings/serializers/security.py:211
msgid "Font color"
msgstr "字体颜色"
#: settings/serializers/security.py:214 #: settings/serializers/security.py:214
msgid "Watermark font size" msgid "Font size"
msgstr "字体字号" msgstr "字体大小 (px)"
#: settings/serializers/security.py:217 #: settings/serializers/security.py:217
msgid "Watermark height" msgid "Height"
msgstr "单个水印高度" msgstr "高度 (px)"
#: settings/serializers/security.py:220 #: settings/serializers/security.py:220
msgid "Watermark width" msgid "Width"
msgstr "单个水印宽度" msgstr "宽度 (px)"
#: settings/serializers/security.py:223 #: settings/serializers/security.py:223
msgid "Watermark rotate" msgid "Rotate"
msgstr "水印旋转角度" msgstr "旋转 (度)"
#: settings/serializers/security.py:227 #: settings/serializers/security.py:227
msgid "Max idle time (minute)" msgid "Max idle time (minute)"
@@ -8259,15 +8276,15 @@ msgstr "认证失败: (未知): {}"
msgid "Authentication success: {}" msgid "Authentication success: {}"
msgstr "认证成功: {}" msgstr "认证成功: {}"
#: settings/ws.py:226 #: settings/ws.py:228
msgid "No LDAP user was found" msgid "No LDAP user was found"
msgstr "没有获取到 LDAP 用户" msgstr "没有获取到 LDAP 用户"
#: settings/ws.py:235 #: settings/ws.py:237
msgid "Total {}, success {}, failure {}" msgid "Total {}, success {}, failure {}"
msgstr "总共 {},成功 {},失败 {}" msgstr "总共 {},成功 {},失败 {}"
#: settings/ws.py:239 #: settings/ws.py:241
msgid ", disabled {}" msgid ", disabled {}"
msgstr ", 禁用 {}" msgstr ", 禁用 {}"
@@ -11568,6 +11585,3 @@ msgstr "许可证导入成功"
#: xpack/plugins/license/api.py:53 #: xpack/plugins/license/api.py:53
msgid "Invalid license" msgid "Invalid license"
msgstr "许可证无效" msgstr "许可证无效"
#~ msgid "domain_name"
#~ msgstr "域名称"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: JumpServer 0.3.3\n" "Project-Id-Version: JumpServer 0.3.3\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-16 14:10+0800\n" "POT-Creation-Date: 2025-11-06 15:37+0800\n"
"PO-Revision-Date: 2021-05-20 10:54+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n"
"Last-Translator: ibuler <ibuler@qq.com>\n" "Last-Translator: ibuler <ibuler@qq.com>\n"
"Language-Team: JumpServer team<ibuler@qq.com>\n" "Language-Team: JumpServer team<ibuler@qq.com>\n"
@@ -18,14 +18,14 @@ msgstr ""
"X-Generator: Poedit 2.4.3\n" "X-Generator: Poedit 2.4.3\n"
"X-ZhConverter: 繁化姬 dict-74c8d060-r1048 @ 2024/04/07 18:19:20 | https://zhconvert.org\n" "X-ZhConverter: 繁化姬 dict-74c8d060-r1048 @ 2024/04/07 18:19:20 | https://zhconvert.org\n"
#: accounts/api/account/account.py:141 #: accounts/api/account/account.py:142
#: accounts/serializers/account/account.py:181 #: accounts/serializers/account/account.py:181
#: accounts/serializers/account/account.py:362 #: accounts/serializers/account/account.py:362
msgid "Account already exists" msgid "Account already exists"
msgstr "帳號已存在" msgstr "帳號已存在"
#: accounts/api/account/application.py:77 #: accounts/api/account/application.py:77
#: authentication/api/connection_token.py:452 #: authentication/api/connection_token.py:453
msgid "Account not found" msgid "Account not found"
msgstr "帳號未找到" msgstr "帳號未找到"
@@ -459,7 +459,7 @@ msgstr "Vault 操作失敗,請重試,或檢查 Vault 上的帳號信息。"
#: accounts/templates/accounts/push_account_report.html:78 #: accounts/templates/accounts/push_account_report.html:78
#: accounts/templates/accounts/push_account_report.html:118 #: accounts/templates/accounts/push_account_report.html:118
#: acls/notifications.py:70 acls/serializers/base.py:111 #: acls/notifications.py:70 acls/serializers/base.py:111
#: assets/models/asset/common.py:102 assets/models/asset/common.py:428 #: assets/models/asset/common.py:102 assets/models/asset/common.py:427
#: assets/models/cmd_filter.py:36 audits/models.py:59 audits/models.py:336 #: assets/models/cmd_filter.py:36 audits/models.py:59 audits/models.py:336
#: audits/serializers.py:230 authentication/models/connection_token.py:42 #: audits/serializers.py:230 authentication/models/connection_token.py:42
#: perms/models/asset_permission.py:69 terminal/backends/command/models.py:17 #: perms/models/asset_permission.py:69 terminal/backends/command/models.py:17
@@ -474,7 +474,7 @@ msgstr "資產"
#: accounts/models/account.py:89 accounts/models/template.py:16 #: accounts/models/account.py:89 accounts/models/template.py:16
#: accounts/serializers/account/account.py:234 #: accounts/serializers/account/account.py:234
#: accounts/serializers/account/account.py:304 #: accounts/serializers/account/account.py:305
#: accounts/serializers/account/template.py:35 #: accounts/serializers/account/template.py:35
#: authentication/serializers/connect_token_secret.py:51 #: authentication/serializers/connect_token_secret.py:51
msgid "Su from" msgid "Su from"
@@ -521,13 +521,14 @@ msgstr "改密狀態"
#: accounts/models/account.py:107 #: accounts/models/account.py:107
#: accounts/models/automations/check_account.py:64 #: accounts/models/automations/check_account.py:64
#: accounts/serializers/account/account.py:295
#: accounts/serializers/account/service.py:13 #: accounts/serializers/account/service.py:13
#: accounts/serializers/automations/change_secret.py:117 #: accounts/serializers/automations/change_secret.py:117
#: accounts/serializers/automations/change_secret.py:148 #: accounts/serializers/automations/change_secret.py:148
#: acls/serializers/base.py:112 #: acls/serializers/base.py:112
#: acls/templates/acls/asset_login_reminder.html:11 #: acls/templates/acls/asset_login_reminder.html:11
#: assets/serializers/gateway.py:33 audits/models.py:60 audits/models.py:337 #: assets/serializers/gateway.py:33 audits/models.py:60 audits/models.py:337
#: audits/serializers.py:231 authentication/api/connection_token.py:464 #: audits/serializers.py:231 authentication/api/connection_token.py:465
#: ops/models/base.py:18 perms/models/asset_permission.py:75 #: ops/models/base.py:18 perms/models/asset_permission.py:75
#: settings/serializers/msg.py:33 terminal/backends/command/models.py:18 #: settings/serializers/msg.py:33 terminal/backends/command/models.py:18
#: terminal/models/session/session.py:31 terminal/notifications.py:291 #: terminal/models/session/session.py:31 terminal/notifications.py:291
@@ -620,7 +621,7 @@ msgstr "圖示"
#: accounts/models/application.py:20 accounts/models/base.py:39 #: accounts/models/application.py:20 accounts/models/base.py:39
#: accounts/models/mixins/vault.py:49 #: accounts/models/mixins/vault.py:49
#: accounts/serializers/account/account.py:492 #: accounts/serializers/account/account.py:498
#: accounts/serializers/account/base.py:20 #: accounts/serializers/account/base.py:20
#: authentication/models/temp_token.py:11 #: authentication/models/temp_token.py:11
#: authentication/templates/authentication/_access_key_modal.html:31 #: authentication/templates/authentication/_access_key_modal.html:31
@@ -793,7 +794,7 @@ msgid "Status"
msgstr "狀態" msgstr "狀態"
#: accounts/models/automations/change_secret.py:51 #: accounts/models/automations/change_secret.py:51
#: accounts/serializers/account/account.py:296 assets/const/automation.py:9 #: accounts/serializers/account/account.py:297 assets/const/automation.py:9
#: authentication/templates/authentication/passkey.html:177 #: authentication/templates/authentication/passkey.html:177
#: authentication/views/base.py:42 authentication/views/base.py:43 #: authentication/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:67 #: authentication/views/base.py:44 common/const/choices.py:67
@@ -1017,7 +1018,7 @@ msgid "Verify asset account"
msgstr "帳號驗證" msgstr "帳號驗證"
#: accounts/models/base.py:37 accounts/models/base.py:66 #: accounts/models/base.py:37 accounts/models/base.py:66
#: accounts/serializers/account/account.py:491 #: accounts/serializers/account/account.py:497
#: accounts/serializers/account/base.py:17 #: accounts/serializers/account/base.py:17
#: accounts/serializers/automations/change_secret.py:50 #: accounts/serializers/automations/change_secret.py:50
#: authentication/serializers/connect_token_secret.py:42 #: authentication/serializers/connect_token_secret.py:42
@@ -1241,54 +1242,46 @@ msgstr "帳號已存在。字段:{fields} 必須是唯一的。"
msgid "Has secret" msgid "Has secret"
msgstr "已託管密碼" msgstr "已託管密碼"
#: accounts/serializers/account/account.py:295 ops/models/celery.py:84 #: accounts/serializers/account/account.py:296 ops/models/celery.py:84
#: tickets/models/comment.py:13 tickets/models/ticket/general.py:49 #: tickets/models/comment.py:13 tickets/models/ticket/general.py:49
#: tickets/models/ticket/general.py:280 tickets/serializers/super_ticket.py:14 #: tickets/models/ticket/general.py:280 tickets/serializers/super_ticket.py:14
msgid "State" msgid "State"
msgstr "狀態" msgstr "狀態"
#: accounts/serializers/account/account.py:297 #: accounts/serializers/account/account.py:298
msgid "Changed" msgid "Changed"
msgstr "已修改" msgstr "已修改"
#: accounts/serializers/account/account.py:307 acls/models/base.py:97 #: accounts/serializers/account/account.py:410
#: acls/templates/acls/asset_login_reminder.html:10
#: assets/models/automations/base.py:25
#: assets/serializers/automations/base.py:20 assets/serializers/domain.py:33
#: assets/serializers/platform.py:181 assets/serializers/platform.py:213
#: authentication/api/connection_token.py:463 ops/models/base.py:17
#: ops/models/job.py:157 ops/serializers/job.py:21
#: perms/serializers/permission.py:57
#: terminal/templates/terminal/_msg_command_execute_alert.html:16
#: xpack/plugins/cloud/manager.py:101
msgid "Assets"
msgstr "資產"
#: accounts/serializers/account/account.py:412
#, python-format #, python-format
msgid "Asset does not support this secret type: %s" msgid "Asset does not support this secret type: %s"
msgstr "資產不支持帳號類型: %s" msgstr "資產不支持帳號類型: %s"
#: accounts/serializers/account/account.py:444 #: accounts/serializers/account/account.py:443
msgid "Account has exist" msgid "Account has exist"
msgstr "帳號已存在" msgstr "帳號已存在"
#: accounts/serializers/account/account.py:476 #: accounts/serializers/account/account.py:468
#: accounts/serializers/account/account.py:483 #: accounts/serializers/account/account.py:469
msgid "At least one asset or node must be specified"
msgstr "資產或者節點至少選擇一項"
#: accounts/serializers/account/account.py:482
#: accounts/serializers/account/account.py:489
#: accounts/serializers/account/base.py:73 #: accounts/serializers/account/base.py:73
#: accounts/serializers/account/base.py:88 #: accounts/serializers/account/base.py:88
#: assets/serializers/asset/common.py:425 #: assets/serializers/asset/common.py:425
msgid "Spec info" msgid "Spec info"
msgstr "特殊資訊" msgstr "特殊資訊"
#: accounts/serializers/account/account.py:493 #: accounts/serializers/account/account.py:499
#: authentication/serializers/connect_token_secret.py:173 #: authentication/serializers/connect_token_secret.py:173
#: authentication/templates/authentication/_access_key_modal.html:30 #: authentication/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:33 #: perms/models/perm_node.py:21 users/serializers/group.py:33
msgid "ID" msgid "ID"
msgstr "ID" msgstr "ID"
#: accounts/serializers/account/account.py:503 acls/notifications.py:18 #: accounts/serializers/account/account.py:509 acls/notifications.py:18
#: acls/notifications.py:68 acls/serializers/base.py:104 #: acls/notifications.py:68 acls/serializers/base.py:104
#: acls/templates/acls/asset_login_reminder.html:8 #: acls/templates/acls/asset_login_reminder.html:8
#: acls/templates/acls/user_login_reminder.html:8 #: acls/templates/acls/user_login_reminder.html:8
@@ -1313,7 +1306,7 @@ msgstr "ID"
msgid "User" msgid "User"
msgstr "用戶" msgstr "用戶"
#: accounts/serializers/account/account.py:504 #: accounts/serializers/account/account.py:510
#: authentication/templates/authentication/_access_key_modal.html:33 #: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:165 terminal/notifications.py:225 #: terminal/notifications.py:165 terminal/notifications.py:225
msgid "Date" msgid "Date"
@@ -1723,7 +1716,7 @@ msgstr "成功帳號"
#: accounts/templates/accounts/change_secret_report.html:118 #: accounts/templates/accounts/change_secret_report.html:118
#: accounts/templates/accounts/push_account_report.html:77 #: accounts/templates/accounts/push_account_report.html:77
#: accounts/templates/accounts/push_account_report.html:117 #: accounts/templates/accounts/push_account_report.html:117
#: audits/handler.py:128 #: audits/handler.py:130
msgid "No" msgid "No"
msgstr "否" msgstr "否"
@@ -1845,6 +1838,18 @@ msgstr "審批人"
msgid "Users" msgid "Users"
msgstr "用戶管理" msgstr "用戶管理"
#: acls/models/base.py:97 acls/templates/acls/asset_login_reminder.html:10
#: assets/models/automations/base.py:25
#: assets/serializers/automations/base.py:20 assets/serializers/domain.py:33
#: assets/serializers/platform.py:181 assets/serializers/platform.py:213
#: authentication/api/connection_token.py:464 ops/models/base.py:17
#: ops/models/job.py:157 ops/serializers/job.py:21
#: perms/serializers/permission.py:57
#: terminal/templates/terminal/_msg_command_execute_alert.html:16
#: xpack/plugins/cloud/manager.py:101
msgid "Assets"
msgstr "資產"
#: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60 #: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60
#: ops/serializers/job.py:92 terminal/const.py:88 #: ops/serializers/job.py:92 terminal/const.py:88
#: terminal/models/session/session.py:40 terminal/serializers/command.py:18 #: terminal/models/session/session.py:40 terminal/serializers/command.py:18
@@ -2594,19 +2599,19 @@ msgstr "收集資產硬體資訊"
msgid "Custom info" msgid "Custom info"
msgstr "自訂屬性" msgstr "自訂屬性"
#: assets/models/asset/common.py:431 #: assets/models/asset/common.py:430
msgid "Can refresh asset hardware info" msgid "Can refresh asset hardware info"
msgstr "可以更新資產硬體資訊" msgstr "可以更新資產硬體資訊"
#: assets/models/asset/common.py:432 #: assets/models/asset/common.py:431
msgid "Can test asset connectivity" msgid "Can test asset connectivity"
msgstr "可以測試資產連接性" msgstr "可以測試資產連接性"
#: assets/models/asset/common.py:433 #: assets/models/asset/common.py:432
msgid "Can match asset" msgid "Can match asset"
msgstr "可以匹配資產" msgstr "可以匹配資產"
#: assets/models/asset/common.py:434 #: assets/models/asset/common.py:433
msgid "Can change asset nodes" msgid "Can change asset nodes"
msgstr "可以修改資產節點" msgstr "可以修改資產節點"
@@ -3479,7 +3484,7 @@ msgstr "任務"
msgid "-" msgid "-"
msgstr "-" msgstr "-"
#: audits/handler.py:128 #: audits/handler.py:130
msgid "Yes" msgid "Yes"
msgstr "是" msgstr "是"
@@ -3757,35 +3762,35 @@ msgstr "該操作需要驗證您的 MFA, 請先開啟並配置"
msgid "Reusable connection token is not allowed, global setting not enabled" msgid "Reusable connection token is not allowed, global setting not enabled"
msgstr "不允許使用可重複使用的連接令牌,未啟用全局設置" msgstr "不允許使用可重複使用的連接令牌,未啟用全局設置"
#: authentication/api/connection_token.py:425 #: authentication/api/connection_token.py:426
msgid "Anonymous account is not supported for this asset" msgid "Anonymous account is not supported for this asset"
msgstr "匿名帳號不支持當前資產" msgstr "匿名帳號不支持當前資產"
#: authentication/api/connection_token.py:455 #: authentication/api/connection_token.py:456
msgid "Permission expired" msgid "Permission expired"
msgstr "授權已過期" msgstr "授權已過期"
#: authentication/api/connection_token.py:488 #: authentication/api/connection_token.py:489
msgid "ACL action is reject: {}({})" msgid "ACL action is reject: {}({})"
msgstr "ACL 動作是拒絕: {}({})" msgstr "ACL 動作是拒絕: {}({})"
#: authentication/api/connection_token.py:492 #: authentication/api/connection_token.py:493
msgid "ACL action is review" msgid "ACL action is review"
msgstr "ACL 動作是覆核" msgstr "ACL 動作是覆核"
#: authentication/api/connection_token.py:502 #: authentication/api/connection_token.py:503
msgid "ACL action is face verify" msgid "ACL action is face verify"
msgstr "ACL Action 係人臉驗證" msgstr "ACL Action 係人臉驗證"
#: authentication/api/connection_token.py:507 #: authentication/api/connection_token.py:508
msgid "ACL action not supported for this asset" msgid "ACL action not supported for this asset"
msgstr "資產登錄規則不支持當前資產" msgstr "資產登錄規則不支持當前資產"
#: authentication/api/connection_token.py:514 #: authentication/api/connection_token.py:515
msgid "ACL action is face online" msgid "ACL action is face online"
msgstr "ACL Action 係人臉在線" msgstr "ACL Action 係人臉在線"
#: authentication/api/connection_token.py:539 #: authentication/api/connection_token.py:540
msgid "No available face feature" msgid "No available face feature"
msgstr "沒有可用的人臉特徵" msgstr "沒有可用的人臉特徵"
@@ -3859,7 +3864,7 @@ msgstr "無效的令牌頭。符號字串不應包含無效字元。"
msgid "Invalid token or cache refreshed." msgid "Invalid token or cache refreshed."
msgstr "刷新的令牌或快取無效。" msgstr "刷新的令牌或快取無效。"
#: authentication/backends/oidc/views.py:175 #: authentication/backends/oidc/views.py:137
msgid "OpenID Error" msgid "OpenID Error"
msgstr "OpenID 錯誤" msgstr "OpenID 錯誤"
@@ -4077,16 +4082,16 @@ msgstr "您的密碼無效"
msgid "Please wait for %s seconds before retry" msgid "Please wait for %s seconds before retry"
msgstr "請在 %s 秒後重試" msgstr "請在 %s 秒後重試"
#: authentication/errors/redirect.py:85 authentication/mixins.py:332 #: authentication/errors/redirect.py:85 authentication/mixins.py:365
#: users/views/profile/reset.py:224 #: users/views/profile/reset.py:224
msgid "Your password is too simple, please change it for security" msgid "Your password is too simple, please change it for security"
msgstr "你的密碼過於簡單,為了安全,請修改" msgstr "你的密碼過於簡單,為了安全,請修改"
#: authentication/errors/redirect.py:93 authentication/mixins.py:341 #: authentication/errors/redirect.py:93 authentication/mixins.py:374
msgid "You should to change your password before login" msgid "You should to change your password before login"
msgstr "登錄完成前,請先修改密碼" msgstr "登錄完成前,請先修改密碼"
#: authentication/errors/redirect.py:101 authentication/mixins.py:350 #: authentication/errors/redirect.py:101 authentication/mixins.py:383
msgid "Your password has expired, please reset before logging in" msgid "Your password has expired, please reset before logging in"
msgstr "您的密碼已過期,先修改再登錄" msgstr "您的密碼已過期,先修改再登錄"
@@ -4203,21 +4208,27 @@ msgstr "清空手機號碼禁用"
msgid "Authentication failed (before login check failed): {}" msgid "Authentication failed (before login check failed): {}"
msgstr "認證失敗 (登錄前檢查失敗): {}" msgstr "認證失敗 (登錄前檢查失敗): {}"
#: authentication/mixins.py:84 #: authentication/mixins.py:105
msgid ""
"The administrator has enabled \"Only allow existing users to log in\", \n"
" and the current user is not in the user list. Please contact the administrator."
msgstr "管理員已開啟'僅允許已存在用戶登錄',當前用戶不在用戶列表中,請聯絡管理員。"
#: authentication/mixins.py:117
msgid "User is invalid" msgid "User is invalid"
msgstr "無效的用戶" msgstr "無效的用戶"
#: authentication/mixins.py:99 #: authentication/mixins.py:132
msgid "" msgid ""
"The administrator has enabled 'Only allow login from user source'. \n" "The administrator has enabled 'Only allow login from user source'. \n"
" The current user source is {}. Please contact the administrator." " The current user source is {}. Please contact the administrator."
msgstr "管理員已開啟'僅允許從用戶來源登錄',當前用戶來源為{},請聯絡管理員。" msgstr "管理員已開啟'僅允許從用戶來源登錄',當前用戶來源為{},請聯絡管理員。"
#: authentication/mixins.py:278 #: authentication/mixins.py:311
msgid "The MFA type ({}) is not enabled" msgid "The MFA type ({}) is not enabled"
msgstr "該 MFA ({}) 方式沒有啟用" msgstr "該 MFA ({}) 方式沒有啟用"
#: authentication/mixins.py:320 #: authentication/mixins.py:353
msgid "Please change your password" msgid "Please change your password"
msgstr "請修改密碼" msgstr "請修改密碼"
@@ -4701,22 +4712,22 @@ msgstr "是否重試 "
msgid "LAN" msgid "LAN"
msgstr "區域網路" msgstr "區域網路"
#: authentication/views/base.py:71 #: authentication/views/base.py:70
#: perms/templates/perms/_msg_permed_items_expire.html:18 #: perms/templates/perms/_msg_permed_items_expire.html:18
msgid "If you have any question, please contact the administrator" msgid "If you have any question, please contact the administrator"
msgstr "如果有疑問或需求,請聯絡系統管理員" msgstr "如果有疑問或需求,請聯絡系統管理員"
#: authentication/views/base.py:144 #: authentication/views/base.py:143
#, python-format #, python-format
msgid "%s query user failed" msgid "%s query user failed"
msgstr "%s 查詢用戶失敗" msgstr "%s 查詢用戶失敗"
#: authentication/views/base.py:152 #: authentication/views/base.py:151
#, python-format #, python-format
msgid "The %s is already bound to another user" msgid "The %s is already bound to another user"
msgstr "%s 已綁定到另一個用戶" msgstr "%s 已綁定到另一個用戶"
#: authentication/views/base.py:159 #: authentication/views/base.py:158
#, python-format #, python-format
msgid "Binding %s successfully" msgid "Binding %s successfully"
msgstr "綁定 %s 成功" msgstr "綁定 %s 成功"
@@ -4855,7 +4866,7 @@ msgstr "從企業微信獲取用戶失敗"
msgid "Please login with a password and then bind the WeCom" msgid "Please login with a password and then bind the WeCom"
msgstr "請使用密碼登錄,然後綁定企業微信" msgstr "請使用密碼登錄,然後綁定企業微信"
#: common/api/action.py:68 #: common/api/action.py:80
msgid "Request file format may be wrong" msgid "Request file format may be wrong"
msgstr "上傳的檔案格式錯誤 或 其它類型資源的文件" msgstr "上傳的檔案格式錯誤 或 其它類型資源的文件"
@@ -5372,7 +5383,7 @@ msgstr ""
msgid "App Labels" msgid "App Labels"
msgstr "標籤管理" msgstr "標籤管理"
#: labels/models.py:15 settings/serializers/security.py:211 #: labels/models.py:15
msgid "Color" msgid "Color"
msgstr "顏色" msgstr "顏色"
@@ -7314,40 +7325,40 @@ msgid "Period clean"
msgstr "定時清掃" msgstr "定時清掃"
#: settings/serializers/cleaning.py:15 #: settings/serializers/cleaning.py:15
msgid "Login log retention days (day)" msgid "Login log retention days"
msgstr "登入記錄 (天)" msgstr "登入日誌保留天數"
#: settings/serializers/cleaning.py:19 #: settings/serializers/cleaning.py:19
msgid "Task log retention days (day)" msgid "Task log retention days"
msgstr "工作紀錄 (天)" msgstr "任務日誌保留天數"
#: settings/serializers/cleaning.py:23 #: settings/serializers/cleaning.py:23
msgid "Operate log retention days (day)" msgid "Operate log retention days"
msgstr "Action日誌 (天)" msgstr "操作日誌保留天數"
#: settings/serializers/cleaning.py:27 #: settings/serializers/cleaning.py:27
msgid "password change log keep days (day)" msgid "Password change log retention days"
msgstr "改密日誌 (天)" msgstr "用戶改密日誌保留天數"
#: settings/serializers/cleaning.py:31 #: settings/serializers/cleaning.py:31
msgid "FTP log retention days (day)" msgid "FTP log retention days"
msgstr "上傳下載 (天)" msgstr "上傳下載記錄保留天數"
#: settings/serializers/cleaning.py:35 #: settings/serializers/cleaning.py:35
msgid "Cloud sync task history retention days (day)" msgid "Cloud sync task history retention days"
msgstr "雲同步紀錄 (天)" msgstr "雲同步記錄保留天數"
#: settings/serializers/cleaning.py:39 #: settings/serializers/cleaning.py:39
msgid "job execution retention days (day)" msgid "job execution retention days"
msgstr "作業中心執行歷史 (天)" msgstr "作業執行歷史保留天數"
#: settings/serializers/cleaning.py:43 #: settings/serializers/cleaning.py:43
msgid "Activity log retention days (day)" msgid "Activity log retention days"
msgstr "活動紀錄 (天)" msgstr "活動記錄保留天數"
#: settings/serializers/cleaning.py:46 #: settings/serializers/cleaning.py:46
msgid "Session log retention days (day)" msgid "Session log retention days"
msgstr "會話日誌 (天)" msgstr "會話日誌保留天數"
#: settings/serializers/cleaning.py:48 #: settings/serializers/cleaning.py:48
msgid "" msgid ""
@@ -7356,8 +7367,8 @@ msgid ""
msgstr "會話、錄影,命令記錄超過該時長將會被清除 (影響資料庫儲存OSS 等不受影響)" msgstr "會話、錄影,命令記錄超過該時長將會被清除 (影響資料庫儲存OSS 等不受影響)"
#: settings/serializers/cleaning.py:53 #: settings/serializers/cleaning.py:53
msgid "Change secret and push record retention days (day)" msgid "Change secret and push record retention days"
msgstr "改密推送記錄保留天數 (天)" msgstr "帳號改密推送記錄保留天數"
#: settings/serializers/feature.py:23 settings/serializers/msg.py:69 #: settings/serializers/feature.py:23 settings/serializers/msg.py:69
msgid "Subject" msgid "Subject"
@@ -7820,28 +7831,32 @@ msgid "Watermark"
msgstr "開啟浮水印" msgstr "開啟浮水印"
#: settings/serializers/security.py:205 #: settings/serializers/security.py:205
msgid "Watermark session content" msgid "Session content"
msgstr "會話水印自訂內容" msgstr "會話水印自訂內容"
#: settings/serializers/security.py:208 #: settings/serializers/security.py:208
msgid "Watermark console content" msgid "Console content"
msgstr "管理頁面水印自訂內容" msgstr "管理頁面水印自訂內容"
#: settings/serializers/security.py:211
msgid "Font color"
msgstr "字體顏色"
#: settings/serializers/security.py:214 #: settings/serializers/security.py:214
msgid "Watermark font size" msgid "Font size"
msgstr "字體字號" msgstr "字體大小 (px)"
#: settings/serializers/security.py:217 #: settings/serializers/security.py:217
msgid "Watermark height" msgid "Height"
msgstr "單個水印高度" msgstr "高度 (px)"
#: settings/serializers/security.py:220 #: settings/serializers/security.py:220
msgid "Watermark width" msgid "Width"
msgstr "單個水印寬度" msgstr "寬度 (px)"
#: settings/serializers/security.py:223 #: settings/serializers/security.py:223
msgid "Watermark rotate" msgid "Rotate"
msgstr "水印旋轉角度" msgstr "旋轉 (度)"
#: settings/serializers/security.py:227 #: settings/serializers/security.py:227
msgid "Max idle time (minute)" msgid "Max idle time (minute)"
@@ -8135,15 +8150,15 @@ msgstr "認證失敗: (未知): {}"
msgid "Authentication success: {}" msgid "Authentication success: {}"
msgstr "認證成功: {}" msgstr "認證成功: {}"
#: settings/ws.py:226 #: settings/ws.py:228
msgid "No LDAP user was found" msgid "No LDAP user was found"
msgstr "沒有取得到 LDAP 用戶" msgstr "沒有取得到 LDAP 用戶"
#: settings/ws.py:235 #: settings/ws.py:237
msgid "Total {}, success {}, failure {}" msgid "Total {}, success {}, failure {}"
msgstr "總共 {},成功 {},失敗 {}" msgstr "總共 {},成功 {},失敗 {}"
#: settings/ws.py:239 #: settings/ws.py:241
msgid ", disabled {}" msgid ", disabled {}"
msgstr ",禁用 {}" msgstr ",禁用 {}"
@@ -11397,25 +11412,3 @@ msgstr "許可證匯入成功"
#: xpack/plugins/license/api.py:53 #: xpack/plugins/license/api.py:53
msgid "Invalid license" msgid "Invalid license"
msgstr "許可證無效" msgstr "許可證無效"
#, fuzzy
#~ msgid "Themes"
#~ msgstr "主題"
#, fuzzy
#~ msgid "domain_name"
#~ msgstr "域名稱"
#~ msgid "Task execution id"
#~ msgstr "任務執行 ID"
#~ msgid "Respectful"
#~ msgstr "尊敬的"
#~ msgid ""
#~ "Hello! The following is the failure of changing the password of your assets "
#~ "or pushing the account. Please check and handle it in time."
#~ msgstr "你好! 以下是資產改密或推送帳戶失敗的情況。 請及時檢查並處理。"
#~ msgid "EXCHANGE"
#~ msgstr "EXCHANGE"

View File

@@ -9,7 +9,7 @@
"ActionPerm": "Разрешения на действия", "ActionPerm": "Разрешения на действия",
"Address": "Адрес", "Address": "Адрес",
"AlreadyExistsPleaseRename": "Файл уже существует, пожалуйста, переименуйте его", "AlreadyExistsPleaseRename": "Файл уже существует, пожалуйста, переименуйте его",
"Announcement: ": "Объявление:", "Announcement: ": "Объявление: ",
"Authentication failed": "Ошибка аутентификации: неверное имя пользователя или пароль", "Authentication failed": "Ошибка аутентификации: неверное имя пользователя или пароль",
"AvailableShortcutKey": "Доступные горячие клавиши", "AvailableShortcutKey": "Доступные горячие клавиши",
"Back": "Назад", "Back": "Назад",

View File

@@ -1627,5 +1627,6 @@
"removeWarningMsg": "Are you sure you want to remove", "removeWarningMsg": "Are you sure you want to remove",
"setVariable": "Set variable", "setVariable": "Set variable",
"userId": "User ID", "userId": "User ID",
"userName": "User name" "userName": "User name",
"LeakPasswordList": "Leaked password list"
} }

View File

@@ -122,7 +122,7 @@
"AppletHelpText": "В процессе загрузки, если приложение отсутствует, оно будет создано; если уже существует, будет выполнено обновление.", "AppletHelpText": "В процессе загрузки, если приложение отсутствует, оно будет создано; если уже существует, будет выполнено обновление.",
"AppletHostCreate": "Добавить сервер RemoteApp", "AppletHostCreate": "Добавить сервер RemoteApp",
"AppletHostDetail": "Подробности о хосте RemoteApp", "AppletHostDetail": "Подробности о хосте RemoteApp",
"AppletHostSelectHelpMessage": "При подключении к активу выбор машины публикации приложения происходит случайным образом (но предпочтение отдается последней использованной). Если вы хотите назначить активу определенную машину, вы можете использовать следующие теги: [publishing machine: имя машины публикации] или [AppletHost: имя машины публикации]; <br>при выборе учетной записи для машины публикации в следующих ситуациях будет выбрана собственная <b>учетная запись пользователя с тем же именем или собственная учетная запись (начинающаяся с js)</b>, в противном случае будет использоваться публичная учетная запись (начинающаяся с jms):<br>&nbsp; 1. И машина публикации, и приложение поддерживают одновременные подключения; <br>&nbsp; 2. Машина публикации поддерживает одновременные подключения, а приложение — нет, и текущее приложение не использует специализированную учетную запись; <br>&nbsp; 3. Машина публикации не поддерживает одновременные подключения, а приложение может как поддерживать, так и не поддерживать одновременные подключения, и ни одно приложение не использует специализированную учетную запись; <br> Примечание: поддержка одновременных подключений со стороны приложения определяется разработчиком, а поддержка одновременных подключений со стороны хоста определяется настройкой «один пользователь — одна сессия» в конфигурации машины публикации.", "AppletHostSelectHelpMessage": "При подключении к активу выбор сервера публикации приложения происходит случайным образом (но предпочтение отдается последнему использованному).<br>\nЕсли необходимо закрепить сервер публикации за конкретным активом, можно указать один из тегов:\n[AppletHost:имя_сервера], [AppletHostOnly:имя_сервера].<br>\nПри подключении к выбранному серверу публикации и выборе учётной записи применяются следующие правила:<br>\nв перечисленных ниже случаях будет использована <b>учетная запись пользователя с тем же именем</b> или <b>специальная учётная запись (начинающаяся с js)</b>,<br>\nв противном случае будет использоваться общая учётная запись (начинающаяся с jms)<br>\n 1. И сервер публикации, и приложение поддерживают одновременные подключения;<br>\n 2. Сервер публикации поддерживает одновременные подключения, а приложение — нет, и текущее приложение не использует специальную учётную запись;<br>\n 3. Сервер публикации не поддерживает одновременные подключения, а приложение может как поддерживать, так и не поддерживать одновременные подключения, и ни одно приложение не использует специализированную учетную запись;<br>\n\nПримечание: поддержка одновременных подключений со стороны приложения определяется разработчиком,<br>\nа поддержка одновременных подключений со стороны хоста определяется настройкой «один пользователь — одна сессия» в настройках сервера публикации.",
"AppletHostUpdate": "Обновить машину публикации RemoteApp", "AppletHostUpdate": "Обновить машину публикации RemoteApp",
"AppletHostZoneHelpText": "Эта зона принадлежит Системной организации", "AppletHostZoneHelpText": "Эта зона принадлежит Системной организации",
"AppletHosts": "Хост RemoteApp", "AppletHosts": "Хост RemoteApp",
@@ -447,10 +447,10 @@
"DangerCommand": "Опасная команда", "DangerCommand": "Опасная команда",
"DangerousCommandNum": "Всего опасных команд", "DangerousCommandNum": "Всего опасных команд",
"Dashboard": "Панель инструментов", "Dashboard": "Панель инструментов",
"DataMasking": "Демаскировка данных", "DataMasking": "Маскирование данных",
"DataMaskingFieldsPatternHelpTip": "Поддержка нескольких имен полей, разделенных запятой, поддержка подстановочных знаков *\nНапример:\nОдно имя поля: password означает, что будет проведено действие по хранению в тайне поля password.\nНесколько имен полей: password, secret означает сохранение в тайне полей password и secret.\nПодстановочный знак *: password* означает, что действие будет применено к полям, содержащим префикс password.\nПодстановочный знак *: .*password означает, что действие будет применено к полям, содержащим суффикс password.", "DataMaskingFieldsPatternHelpTip": "Поддерживается нескольких имён полей, разделённых запятыми, а также использование подстановочного знака *.\nПримеры:\nОдно имя поля: password — выполняется маскирование только поля password.\nНесколько имён полей: password,secret — выполняется маскирование полей password и secret.\nПодстановочный знак *: password* — выполняется маскирование всех полей, имя которых начинается с password.\nПодстановочный знак .*: .*password — выполняется маскирование всех полей, имя которых оканчивается на password",
"DataMaskingRuleHelpHelpMsg": "При подключении к базе данных активов результаты запроса могут быть обработаны в соответствии с этим правилом для обеспечения безопасности данных.", "DataMaskingRuleHelpHelpMsg": "При подключении к активу базы данных результаты запросов могут быть подвергнуты маскированию в соответствии с этим правилом",
"DataMaskingRuleHelpHelpText": "При подключении к базе данных активов можно обезопасить результаты запроса в соответствии с данным правилом.", "DataMaskingRuleHelpHelpText": "При подключении к активу базы данных можно выполнять маскирование результатов запросов в соответствии с этим правилом",
"Database": "База данных", "Database": "База данных",
"DatabaseCreate": "Создать актив - база данных", "DatabaseCreate": "Создать актив - база данных",
"DatabasePort": "Порт протокола базы данных", "DatabasePort": "Порт протокола базы данных",
@@ -1045,7 +1045,7 @@
"PrivilegedOnly": "Только привилегированные", "PrivilegedOnly": "Только привилегированные",
"PrivilegedTemplate": "Привилегированные", "PrivilegedTemplate": "Привилегированные",
"Processing": "В процессе", "Processing": "В процессе",
"ProcessingMessage": "Задача в процессе, пожалуйста, подождите ⏳", "ProcessingMessage": "Задача выполняется, пожалуйста, подождите ⏳",
"Product": "Продукт", "Product": "Продукт",
"ProfileSetting": "Данные профиля", "ProfileSetting": "Данные профиля",
"Project": "Название проекта", "Project": "Название проекта",

View File

@@ -86,7 +86,7 @@
"Expand all asset": "Развернуть все активы в папке", "Expand all asset": "Развернуть все активы в папке",
"Expire time": "Срок действия", "Expire time": "Срок действия",
"ExpiredTime": "Срок действия", "ExpiredTime": "Срок действия",
"Face Verify": "Проверка лица", "Face Verify": "Проверка по лицу",
"Face online required": "Для входа требуется верификация по лицу и мониторинг. Продолжить?", "Face online required": "Для входа требуется верификация по лицу и мониторинг. Продолжить?",
"Face verify": "Распознавание лица", "Face verify": "Распознавание лица",
"Face verify required": "Для входа требуется верификация по лицу. Продолжить?", "Face verify required": "Для входа требуется верификация по лицу. Продолжить?",
@@ -107,7 +107,7 @@
"GUI": "Графический интерфейс", "GUI": "Графический интерфейс",
"General": "Основные настройки", "General": "Основные настройки",
"Go to Settings": "Перейти в настройки", "Go to Settings": "Перейти в настройки",
"Go to profile": "Перейти к личной информации", "Go to profile": "Перейти в профиль",
"Help": "Помощь", "Help": "Помощь",
"Help or download": "Помощь → Скачать", "Help or download": "Помощь → Скачать",
"Help text": "Описание", "Help text": "Описание",

View File

@@ -1,5 +1,3 @@
#!/usr/bin/env python3
list_params = [ list_params = [
{ {
"name": "search", "name": "search",
@@ -13,99 +11,41 @@ list_params = [
"in": "query", "in": "query",
"description": "Which field to use when ordering the results.", "description": "Which field to use when ordering the results.",
"required": False, "required": False,
"type": "string", "type": "string"
"enum": [
"name", "date_created", "date_updated", "created_by",
]
}, },
{ {
"name": "limit", "name": "limit",
"in": "query", "in": "query",
"description": "Number of results to return per page. Default is 10.", "description": "Number of results to return per page. Default is 10.",
"required": False, "required": False,
"type": "integer", "type": "integer"
"default": 10
}, },
{ {
"name": "offset", "name": "offset",
"in": "query", "in": "query",
"description": "The initial index from which to return the results.", "description": "The initial index from which to return the results.",
"required": False, "required": False,
"type": "integer", "type": "integer"
"default": 0
}, },
]
unsupported_resources = [
"customs", "protocol-settings", "gathered-accounts",
"account-template-secrets", 'change-secret-records',
'account-backup-executions', 'change-secret-executions',
'change-secret-status', 'gather-account-executions',
'push-account-executions', 'check-account-executions',
'integration-apps', 'asset-permissions-users-relations',
'asset-permissions-user-groups-relations', 'asset-permissions-assets-relations',
'asset-permissions-nodes-relations', 'terminal-status', 'tasks', 'status',
'session-sharing-records', 'endpoints', 'endpoint-rules',
'chatai-prompts', 'leak-passwords', 'super-connection-tokens',
'system-role-bindings', 'org-role-bindings', 'content-types', 'system-role-permissions',
'org-role-permissions', 'system-msg-subscriptions',
'celery-period-tasks', 'task-executions', 'adhocs',
'user-sessions', 'service-access-logs',
'applet-publications', 'applet-host-deployments',
'virtual-app-publications', 'applet-host-accounts', 'applet-host-applets',
'flows'
]
supported_resources = [
# User
'users', 'user-groups', 'users-groups-relations',
# Asset
'assets', 'hosts', 'devices', 'databases', 'webs', 'clouds', 'gpts',
'ds', 'platforms', 'nodes', 'zones', 'gateways',
# Account
'virtual-accounts', 'account-templates', 'account-backups',
# Automation
'change-secret-automations', 'gather-account-automations',
'push-account-automations', 'check-account-automations',
'account-risks',
# Permission
'asset-permissions',
# Terminal
'terminals', 'replay-storages', 'command-storages',
# Applet
'applets', 'applet-hosts', 'virtual-apps',
# Ops
'playbooks', 'jobs',
# Audit
'ftp-logs', 'login-logs', 'operate-logs', 'password-change-logs', 'job-logs',
# Tickets
'tickets', 'comments', 'apply-assets', 'apply-nodes',
# Acls
'login-acls', 'login-asset-acls', 'command-filter-acls',
'command-groups', 'connect-method-acls', 'data-masking-rules',
# RBAC
'roles', 'role-bindings',
'system-roles', 'org-roles',
# Label
'labeled-resources',
'labels',
] ]
common_params = [ common_params = [
{ {
"name": "resource", "name": "resource",
"in": "path", "in": "path",
"description": f"""Resource to query, {supported_resources} "description": """Resource to query, e.g. users, assets, permissions, acls, user-groups, policies, nodes, hosts,
GET /api/v1/resources/ to get full supported resource. devices, clouds, webs, databases,
if you want to get the resource list, you can set the resource name in the url. gpts, ds, customs, platforms, zones, gateways, protocol-settings, labels, virtual-accounts,
if you want to create a resource, you can set the resource name in the url. gathered-accounts, account-templates, account-template-secrets, account-backups, account-backup-executions,
if you want to get the resource detail, you can set the resource name and id in the url. change-secret-automations, change-secret-executions, change-secret-records, gather-account-automations,
if you want to update the resource, you can set the resource name and id in the url. gather-account-executions, push-account-automations, push-account-executions, push-account-records,
if you want to delete the resource, you can set the resource name and id in the url. check-account-automations, check-account-executions, account-risks, integration-apps, asset-permissions,
""", zones, gateways, virtual-accounts, gathered-accounts, account-templates, account-template-secrets,,
GET /api/v1/resources/ to get full supported resource.
""",
"required": True, "required": True,
"type": "string", "type": "string"
"enum": supported_resources
}, },
{ {
"name": "X-JMS-ORG", "name": "X-JMS-ORG",

View File

@@ -69,13 +69,13 @@ class ResourceListApi(ProxyMixin, APIView):
return self._proxy(request, resource) return self._proxy(request, resource)
@extend_schema( @extend_schema(
operation_id="create_resource", operation_id="create_resource_by_type",
summary="Create resource", summary="Create resource",
parameters=create_params, parameters=create_params,
description=""" description="""
Create resource, Create resource,
OPTIONS /api/v1/resources/{resource}/?action=post to get every resource type field type and help text, OPTIONS /api/v1/resources/{resource}/?action=post to get every resource type field type and helptext, and
and you will know how to create it. you will know how to create it.
""", """,
) )
def post(self, request, resource, pk=None): def post(self, request, resource, pk=None):

View File

@@ -7,7 +7,6 @@ from rest_framework.response import Response
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
from rest_framework.views import APIView from rest_framework.views import APIView
from .const import supported_resources
from .utils import get_full_resource_map from .utils import get_full_resource_map
router = DefaultRouter() router = DefaultRouter()
@@ -36,8 +35,6 @@ class ResourceTypeListApi(APIView):
result = [] result = []
resource_map = get_full_resource_map() resource_map = get_full_resource_map()
for name, desc in resource_map.items(): for name, desc in resource_map.items():
if name not in supported_resources:
continue
desc = resource_map.get(name, {}) desc = resource_map.get(name, {})
resource = { resource = {
"name": name, "name": name,

View File

@@ -4,9 +4,8 @@ import re
from functools import lru_cache from functools import lru_cache
from typing import Dict from typing import Dict
from django.utils.functional import LazyObject from django.urls import URLPattern
from django.urls import URLPattern, URLResolver from django.urls import URLResolver
from drf_spectacular.types import OpenApiTypes
from drf_spectacular.utils import OpenApiParameter from drf_spectacular.utils import OpenApiParameter
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
@@ -115,37 +114,9 @@ def extract_resource_paths(urlpatterns, prefix='/api/v1/') -> Dict[str, Dict[str
def param_dic_to_param(d): def param_dic_to_param(d):
# 将 'in' 字段映射到 OpenApiParameter 的 location 常量
location_map = {
'query': OpenApiParameter.QUERY,
'path': OpenApiParameter.PATH,
'header': OpenApiParameter.HEADER,
'cookie': OpenApiParameter.COOKIE,
}
location = location_map.get(d['in'], OpenApiParameter.QUERY)
# 将 type 字符串映射到 OpenApiTypes
type_map = {
'string': OpenApiTypes.STR,
'integer': OpenApiTypes.INT,
'number': OpenApiTypes.FLOAT,
'boolean': OpenApiTypes.BOOL,
'array': OpenApiTypes.OBJECT, # 对于 array 类型,需要特殊处理
'object': OpenApiTypes.OBJECT,
}
param_type = type_map.get(d['type'], OpenApiTypes.STR)
enum = None
if d.get('enum'):
enum = d['enum']
return OpenApiParameter( return OpenApiParameter(
name=d['name'], name=d['name'], location=d['in'],
location=location, description=d['description'], type=d['type'], required=d.get('required', False)
description=d['description'],
type=param_type,
required=d.get('required', False),
enum=enum
) )

View File

@@ -1,6 +1,6 @@
from collections import defaultdict from collections import defaultdict
from django.db.models import Count, Max, F, CharField from django.db.models import Count, Max, F, CharField, Q
from django.db.models.functions import Cast from django.db.models.functions import Cast
from django.http.response import JsonResponse from django.http.response import JsonResponse
from django.utils import timezone from django.utils import timezone
@@ -18,8 +18,8 @@ from common.utils import lazyproperty
from common.utils.timezone import local_now, local_zero_hour from common.utils.timezone import local_now, local_zero_hour
from ops.const import JobStatus from ops.const import JobStatus
from orgs.caches import OrgResourceStatisticsCache from orgs.caches import OrgResourceStatisticsCache
from orgs.utils import current_org from orgs.utils import current_org, filter_org_queryset
from terminal.const import RiskLevelChoices from terminal.const import RiskLevelChoices, CommandStorageType
from terminal.models import Session, CommandStorage from terminal.models import Session, CommandStorage
__all__ = ['IndexApi'] __all__ = ['IndexApi']
@@ -123,15 +123,18 @@ class DateTimeMixin:
return self.get_logs_queryset_filter(qs, 'date_start') return self.get_logs_queryset_filter(qs, 'date_start')
@lazyproperty @lazyproperty
def command_queryset_list(self): def command_type_queryset_list(self):
qs_list = [] qs_list = []
for storage in CommandStorage.objects.all(): for storage in CommandStorage.objects.exclude(name='null'):
if not storage.is_valid(): if not storage.is_valid():
continue continue
qs = storage.get_command_queryset() qs = storage.get_command_queryset()
qs_list.append(self.get_logs_queryset_filter( qs = filter_org_queryset(qs)
qs = self.get_logs_queryset_filter(
qs, 'timestamp', is_timestamp=True qs, 'timestamp', is_timestamp=True
)) )
qs_list.append((storage.type, qs))
return qs_list return qs_list
@lazyproperty @lazyproperty
@@ -143,7 +146,7 @@ class DateTimeMixin:
class DatesLoginMetricMixin: class DatesLoginMetricMixin:
dates_list: list dates_list: list
date_start_end: tuple date_start_end: tuple
command_queryset_list: list command_type_queryset_list: list
sessions_queryset: Session.objects sessions_queryset: Session.objects
ftp_logs_queryset: FTPLog.objects ftp_logs_queryset: FTPLog.objects
job_logs_queryset: JobLog.objects job_logs_queryset: JobLog.objects
@@ -261,11 +264,25 @@ class DatesLoginMetricMixin:
@lazyproperty @lazyproperty
def command_statistics(self): def command_statistics(self):
def _count_pair(_tp, _qs):
if _tp == CommandStorageType.es:
total = _qs.count(limit_to_max_result_window=False)
danger = _qs.filter(risk_level=RiskLevelChoices.reject) \
.count(limit_to_max_result_window=False)
return total, danger
agg = _qs.aggregate(
total=Count('pk'),
danger=Count('pk', filter=Q(risk_level=RiskLevelChoices.reject)),
)
return (agg['total'] or 0), (agg['danger'] or 0)
total_amount = 0 total_amount = 0
danger_amount = 0 danger_amount = 0
for qs in self.command_queryset_list: for tp, qs in self.command_type_queryset_list:
total_amount += qs.count() t, d = _count_pair(tp, qs)
danger_amount += qs.filter(risk_level=RiskLevelChoices.reject).count() total_amount += t
danger_amount += d
return total_amount, danger_amount return total_amount, danger_amount
@lazyproperty @lazyproperty

View File

@@ -88,7 +88,7 @@ urlpatterns += [
path('core/jsi18n/', JavaScriptCatalog.as_view(), name='javascript-catalog'), path('core/jsi18n/', JavaScriptCatalog.as_view(), name='javascript-catalog'),
] ]
DOC_TTL = 1 DOC_TTL = 60 * 60
DOC_VERSION = uuid.uuid4().hex DOC_VERSION = uuid.uuid4().hex
cache_kwargs = { cache_kwargs = {
'cache_timeout': DOC_TTL, 'cache_timeout': DOC_TTL,
@@ -98,7 +98,7 @@ cache_kwargs = {
} }
# docs 路由 # docs 路由
urlpatterns += [ urlpatterns += [
path('api/swagger.json', views.get_swagger_view(ui='json'), name='schema-json'), path('api/swagger.json', views.get_swagger_view(ui='json', **cache_kwargs), name='schema-json'),
path('api/swagger.yaml', views.get_swagger_view(ui='yaml', **cache_kwargs), name='schema'), path('api/swagger.yaml', views.get_swagger_view(ui='yaml', **cache_kwargs), name='schema'),
re_path('api/docs/?', views.get_swagger_view(ui='swagger', **cache_kwargs), name="docs"), re_path('api/docs/?', views.get_swagger_view(ui='swagger', **cache_kwargs), name="docs"),
re_path('api/redoc/?', views.get_swagger_view(ui='redoc', **cache_kwargs), name='redoc'), re_path('api/redoc/?', views.get_swagger_view(ui='redoc', **cache_kwargs), name='redoc'),

View File

@@ -14,7 +14,7 @@ class CustomSchemaGenerator(SchemaGenerator):
class CustomAutoSchema(AutoSchema): class CustomAutoSchema(AutoSchema):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.from_mcp = True self.from_mcp = kwargs.get('from_mcp', False)
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
def map_parsers(self): def map_parsers(self):
@@ -30,19 +30,19 @@ class CustomAutoSchema(AutoSchema):
tags = ['_'.join(operation_keys[:2])] tags = ['_'.join(operation_keys[:2])]
return tags return tags
# def get_operation(self, path, *args, **kwargs): def get_operation(self, path, *args, **kwargs):
# if path.endswith('render-to-json/'): if path.endswith('render-to-json/'):
# return None return None
# # if not path.startswith('/api/v1/users'): # if not path.startswith('/api/v1/users'):
# # return None # return None
# operation = super().get_operation(path, *args, **kwargs) operation = super().get_operation(path, *args, **kwargs)
# if not operation: if not operation:
# return operation return operation
# if not operation.get('summary', ''): if not operation.get('summary', ''):
# operation['summary'] = operation.get('operationId') operation['summary'] = operation.get('operationId')
# return operation return operation
def get_operation_id(self): def get_operation_id(self):
tokenized_path = self._tokenize_path() tokenized_path = self._tokenize_path()
@@ -118,8 +118,7 @@ class CustomAutoSchema(AutoSchema):
'change-secret-dashboard', '/copy-to-assets/', 'change-secret-dashboard', '/copy-to-assets/',
'/move-to-assets/', 'dashboard', 'index', 'countries', '/move-to-assets/', 'dashboard', 'index', 'countries',
'/resources/cache/', 'profile/mfa', 'profile/password', '/resources/cache/', 'profile/mfa', 'profile/password',
'profile/permissions', 'prometheus', 'constraints', 'profile/permissions', 'prometheus', 'constraints'
'/api/swagger.json', '/api/swagger.yaml',
] ]
for p in excludes: for p in excludes:
if path.find(p) >= 0: if path.find(p) >= 0:
@@ -133,15 +132,14 @@ class CustomAutoSchema(AutoSchema):
apps = [] apps = []
if self.from_mcp: if self.from_mcp:
# apps = [ apps = [
# 'ops', 'tickets', 'authentication', 'ops', 'tickets', 'authentication',
# 'settings', 'xpack', 'terminal', 'rbac', 'settings', 'xpack', 'terminal', 'rbac',
# 'notifications', 'promethues', 'acls' 'notifications', 'promethues', 'acls'
# ] ]
apps = ['resources']
app_name = parts[3] app_name = parts[3]
if app_name not in apps: if app_name in apps:
return True return True
models = [] models = []
model = parts[4] model = parts[4]
@@ -192,9 +190,6 @@ class CustomAutoSchema(AutoSchema):
if not operation.get('summary', ''): if not operation.get('summary', ''):
operation['summary'] = operation.get('operationId') operation['summary'] = operation.get('operationId')
if self.is_excluded():
return None
exclude_operations = [ exclude_operations = [
'orgs_orgs_read', 'orgs_orgs_update', 'orgs_orgs_delete', 'orgs_orgs_read', 'orgs_orgs_update', 'orgs_orgs_delete',

View File

@@ -9,16 +9,15 @@ from rest_framework.response import Response
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
class SwaggerUI( SpectacularSwaggerView): class SwaggerUI(LoginRequiredMixin, SpectacularSwaggerView):
pass pass
class Redoc(LoginRequiredMixin, SpectacularRedocView): class Redoc(LoginRequiredMixin, SpectacularRedocView):
pass pass
class SchemeMixin: class SchemeMixin:
permission_classes = []
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
schema = super().get(request, *args, **kwargs).data schema = super().get(request, *args, **kwargs).data
host = request.get_host() host = request.get_host()
@@ -38,7 +37,7 @@ class SchemeMixin:
} }
return Response(schema) return Response(schema)
# @method_decorator(cache_page(60 * 5,), name="dispatch") @method_decorator(cache_page(60 * 5,), name="dispatch")
class JsonApi(SchemeMixin, SpectacularJSONAPIView): class JsonApi(SchemeMixin, SpectacularJSONAPIView):
pass pass

View File

@@ -76,7 +76,8 @@ class JMSInventory:
proxy_command_list.extend(["-W", "%h:%p", "-q"]) proxy_command_list.extend(["-W", "%h:%p", "-q"])
if gateway.password: if gateway.password:
proxy_command_list.insert(0, f"sshpass -p {gateway.password}") password = gateway.password.replace("%", "%%")
proxy_command_list.insert(0, f"sshpass -p '{password}'")
if gateway.private_key: if gateway.private_key:
proxy_command_list.append(f"-i {gateway.get_private_key_path(path_dir)}") proxy_command_list.append(f"-i {gateway.get_private_key_path(path_dir)}")

View File

@@ -6,6 +6,7 @@ from rest_framework.generics import ListAPIView, CreateAPIView
from rest_framework.views import Response from rest_framework.views import Response
from rest_framework_bulk.generics import BulkModelViewSet from rest_framework_bulk.generics import BulkModelViewSet
from common.api.action import RenderToJsonMixin
from common.drf.filters import IDSpmFilterBackend from common.drf.filters import IDSpmFilterBackend
from users.utils import LoginIpBlockUtil from users.utils import LoginIpBlockUtil
from ..models import LeakPasswords from ..models import LeakPasswords
@@ -61,7 +62,7 @@ class UnlockIPSecurityAPI(CreateAPIView):
return Response(status=200) return Response(status=200)
class LeakPasswordViewSet(BulkModelViewSet): class LeakPasswordViewSet(BulkModelViewSet, RenderToJsonMixin):
serializer_class = LeakPasswordPSerializer serializer_class = LeakPasswordPSerializer
model = LeakPasswords model = LeakPasswords
rbac_perms = { rbac_perms = {
@@ -70,6 +71,12 @@ class LeakPasswordViewSet(BulkModelViewSet):
queryset = LeakPasswords.objects.none() queryset = LeakPasswords.objects.none()
search_fields = ['password'] search_fields = ['password']
def get_object(self):
pk = self.kwargs.get('pk')
if pk:
return self.get_queryset().get(id=pk)
return super().get_object()
def get_queryset(self): def get_queryset(self):
return LeakPasswords.objects.using('sqlite').all() return LeakPasswords.objects.using('sqlite').all()

View File

@@ -12,43 +12,43 @@ class CleaningSerializer(serializers.Serializer):
LOGIN_LOG_KEEP_DAYS = serializers.IntegerField( LOGIN_LOG_KEEP_DAYS = serializers.IntegerField(
min_value=MIN_VALUE, max_value=9999, min_value=MIN_VALUE, max_value=9999,
label=_("Login log retention days (day)"), label=_("Login log retention days"),
) )
TASK_LOG_KEEP_DAYS = serializers.IntegerField( TASK_LOG_KEEP_DAYS = serializers.IntegerField(
min_value=MIN_VALUE, max_value=9999, min_value=MIN_VALUE, max_value=9999,
label=_("Task log retention days (day)"), label=_("Task log retention days"),
) )
OPERATE_LOG_KEEP_DAYS = serializers.IntegerField( OPERATE_LOG_KEEP_DAYS = serializers.IntegerField(
min_value=MIN_VALUE, max_value=9999, min_value=MIN_VALUE, max_value=9999,
label=_("Operate log retention days (day)"), label=_("Operate log retention days"),
) )
PASSWORD_CHANGE_LOG_KEEP_DAYS = serializers.IntegerField( PASSWORD_CHANGE_LOG_KEEP_DAYS = serializers.IntegerField(
min_value=MIN_VALUE, max_value=9999, min_value=MIN_VALUE, max_value=9999,
label=_("password change log keep days (day)"), label=_("Password change log retention days"),
) )
FTP_LOG_KEEP_DAYS = serializers.IntegerField( FTP_LOG_KEEP_DAYS = serializers.IntegerField(
min_value=MIN_VALUE, max_value=9999, min_value=MIN_VALUE, max_value=9999,
label=_("FTP log retention days (day)"), label=_("FTP log retention days"),
) )
CLOUD_SYNC_TASK_EXECUTION_KEEP_DAYS = serializers.IntegerField( CLOUD_SYNC_TASK_EXECUTION_KEEP_DAYS = serializers.IntegerField(
min_value=MIN_VALUE, max_value=9999, min_value=MIN_VALUE, max_value=9999,
label=_("Cloud sync task history retention days (day)"), label=_("Cloud sync task history retention days"),
) )
JOB_EXECUTION_KEEP_DAYS = serializers.IntegerField( JOB_EXECUTION_KEEP_DAYS = serializers.IntegerField(
min_value=MIN_VALUE, max_value=9999, min_value=MIN_VALUE, max_value=9999,
label=_("job execution retention days (day)"), label=_("job execution retention days"),
) )
ACTIVITY_LOG_KEEP_DAYS = serializers.IntegerField( ACTIVITY_LOG_KEEP_DAYS = serializers.IntegerField(
min_value=MIN_VALUE, max_value=9999, min_value=MIN_VALUE, max_value=9999,
label=_("Activity log retention days (day)"), label=_("Activity log retention days"),
) )
TERMINAL_SESSION_KEEP_DURATION = serializers.IntegerField( TERMINAL_SESSION_KEEP_DURATION = serializers.IntegerField(
min_value=MIN_VALUE, max_value=99999, required=True, label=_('Session log retention days (day)'), min_value=MIN_VALUE, max_value=99999, required=True, label=_('Session log retention days'),
help_text=_( help_text=_(
'Session, record, command will be delete if more than duration, only in database, OSS will not be affected.') 'Session, record, command will be delete if more than duration, only in database, OSS will not be affected.')
) )
ACCOUNT_CHANGE_SECRET_RECORD_KEEP_DAYS = serializers.IntegerField( ACCOUNT_CHANGE_SECRET_RECORD_KEEP_DAYS = serializers.IntegerField(
min_value=MIN_VALUE, max_value=9999, min_value=MIN_VALUE, max_value=9999,
label=_("Change secret and push record retention days (day)"), label=_("Change secret and push record retention days"),
) )

View File

@@ -202,25 +202,25 @@ class SecuritySessionSerializer(serializers.Serializer):
required=True, label=_('Watermark'), required=True, label=_('Watermark'),
) )
SECURITY_WATERMARK_SESSION_CONTENT = serializers.CharField( SECURITY_WATERMARK_SESSION_CONTENT = serializers.CharField(
required=False, label=_('Watermark session content'), required=False, label=_('Session content'),
) )
SECURITY_WATERMARK_CONSOLE_CONTENT = serializers.CharField( SECURITY_WATERMARK_CONSOLE_CONTENT = serializers.CharField(
required=False, label=_("Watermark console content") required=False, label=_("Console content")
) )
SECURITY_WATERMARK_COLOR = serializers.CharField( SECURITY_WATERMARK_COLOR = serializers.CharField(
max_length=32, default="", label=_("Color") max_length=32, default="", label=_("Font color")
) )
SECURITY_WATERMARK_FONT_SIZE = serializers.IntegerField( SECURITY_WATERMARK_FONT_SIZE = serializers.IntegerField(
required=False, label=_('Watermark font size'), min_value=1, max_value=100, required=False, label=_('Font size'), min_value=1, max_value=100,
) )
SECURITY_WATERMARK_HEIGHT = serializers.IntegerField( SECURITY_WATERMARK_HEIGHT = serializers.IntegerField(
required=False, label=_('Watermark height'), default=200 required=False, label=_('Height'), default=200
) )
SECURITY_WATERMARK_WIDTH = serializers.IntegerField( SECURITY_WATERMARK_WIDTH = serializers.IntegerField(
required=False, label=_('Watermark width'), default=200 required=False, label=_('Width'), default=200
) )
SECURITY_WATERMARK_ROTATE = serializers.IntegerField( SECURITY_WATERMARK_ROTATE = serializers.IntegerField(
required=False, label=_('Watermark rotate'), default=45 required=False, label=_('Rotate'), default=45
) )
SECURITY_MAX_IDLE_TIME = serializers.IntegerField( SECURITY_MAX_IDLE_TIME = serializers.IntegerField(
min_value=1, max_value=99999, required=False, min_value=1, max_value=99999, required=False,

View File

@@ -36,16 +36,16 @@ class CommandFilter(filters.FilterSet):
date_from = self.form.cleaned_data.get('date_from') date_from = self.form.cleaned_data.get('date_from')
date_to = self.form.cleaned_data.get('date_to') date_to = self.form.cleaned_data.get('date_to')
filters = {} _filters = {}
if date_from: if date_from:
date_from = date_from.timestamp() date_from = date_from.timestamp()
filters['timestamp__gte'] = date_from _filters['timestamp__gte'] = date_from
if date_to: if date_to:
date_to = date_to.timestamp() date_to = date_to.timestamp()
filters['timestamp__lte'] = date_to _filters['timestamp__lte'] = date_to
qs = qs.filter(**filters) qs = qs.filter(**_filters)
return qs return qs
def filter_by_asset_id(self, queryset, name, value): def filter_by_asset_id(self, queryset, name, value):

View File

@@ -41,7 +41,7 @@ class Command(AbstractSessionCommand):
'timestamp': int(d.timestamp()), 'timestamp': int(d.timestamp()),
'org_id': str(org.id) 'org_id': str(org.id)
}) })
for i in range(count) for __ in range(count)
] ]
cls.objects.bulk_create(commands) cls.objects.bulk_create(commands)
print(f'Create {len(commands)} commands of org ({org})') print(f'Create {len(commands)} commands of org ({org})')

6
uv.lock generated
View File

@@ -2595,7 +2595,7 @@ requires-dist = [
{ name = "python-cas", specifier = "==1.6.0" }, { name = "python-cas", specifier = "==1.6.0" },
{ name = "python-daemon", specifier = "==3.0.1" }, { name = "python-daemon", specifier = "==3.0.1" },
{ name = "python-dateutil", specifier = "==2.8.2" }, { name = "python-dateutil", specifier = "==2.8.2" },
{ name = "python-ldap", specifier = "==3.4.5" }, { name = "python-ldap", specifier = "==3.4.3" },
{ name = "python-nmap", specifier = "==0.7.1" }, { name = "python-nmap", specifier = "==0.7.1" },
{ name = "python-redis-lock", specifier = "==4.0.0" }, { name = "python-redis-lock", specifier = "==4.0.0" },
{ name = "python3-saml", specifier = "==1.16.0" }, { name = "python3-saml", specifier = "==1.16.0" },
@@ -4211,13 +4211,13 @@ wheels = [
[[package]] [[package]]
name = "python-ldap" name = "python-ldap"
version = "3.4.5" version = "3.4.3"
source = { registry = "https://pypi.org/simple" } source = { registry = "https://pypi.org/simple" }
dependencies = [ dependencies = [
{ name = "pyasn1" }, { name = "pyasn1" },
{ name = "pyasn1-modules" }, { name = "pyasn1-modules" },
] ]
sdist = { url = "https://files.pythonhosted.org/packages/0c/88/8d2797decc42e1c1cdd926df4f005e938b0643d0d1219c08c2b5ee8ae0c0/python_ldap-3.4.5.tar.gz", hash = "sha256:b2f6ef1c37fe2c6a5a85212efe71311ee21847766a7d45fcb711f3b270a5f79a", size = 388482, upload-time = "2025-10-10T20:00:39.06Z" } sdist = { url = "https://files.pythonhosted.org/packages/3a/7d/de9ae3e5843de77eae3a60c1e70ef5cad9960db50521e8459f7d567a1d1d/python-ldap-3.4.3.tar.gz", hash = "sha256:ab26c519a0ef2a443a2a10391fa3c5cb52d7871323399db949ebfaa9f25ee2a0", size = 377438, upload-time = "2022-09-20T15:46:21.283Z" }
[[package]] [[package]]
name = "python-nmap" name = "python-nmap"