Compare commits

...

12 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
feng
3e93034fbc perf: Update remote_client 2025-10-30 10:12:40 +08:00
feng
f4b3a7d73a perf: Sync feishu info 2025-10-29 14:53:45 +08:00
wrd
3781c40179 Revert "perf: update fields serialization and bump django and djangorestframe…"
This reverts commit dd0cacb4bc.
2025-10-29 11:19:50 +08:00
29 changed files with 1261 additions and 1037 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.shortcuts import get_object_or_404
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.generics import ListAPIView, CreateAPIView
from rest_framework.response import Response
@@ -184,12 +185,56 @@ class AssetAccountBulkCreateApi(CreateAPIView):
'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):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
data = serializer.create(serializer.validated_data)
serializer = serializers.AssetAccountBulkSerializerResultSerializer(data, many=True)
return Response(data=serializer.data, status=HTTP_200_OK)
if hasattr(request.data, "copy"):
base_payload = request.data.copy()
else:
base_payload = dict(request.data)
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):

View File

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

View File

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

View File

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

View File

@@ -603,7 +603,7 @@ class JSONManyToManyField(models.JSONField):
return None
if isinstance(value, RelatedManager):
value = value.value
return value
return json.dumps(value)
def validate(self, value, model_instance):
super().validate(value, model_instance)

View File

@@ -162,6 +162,7 @@ class FeiShu(RequestMixin):
except Exception as e:
logger.error(f'Get user detail error: {e} data={data}')
data.update(kwargs['other_info'] if 'other_info' in kwargs else {})
info = flatten_dict(data)
default_detail = self.default_user_detail(data, user_id)
detail = map_attributes(default_detail, info, self.attributes)

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,14 +18,14 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\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:362
msgid "Account already exists"
msgstr ""
#: accounts/api/account/application.py:77
#: authentication/api/connection_token.py:452
#: authentication/api/connection_token.py:453
msgid "Account not found"
msgstr ""
@@ -456,7 +456,7 @@ msgstr ""
#: accounts/templates/accounts/push_account_report.html:78
#: accounts/templates/accounts/push_account_report.html:118
#: 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
#: audits/serializers.py:230 authentication/models/connection_token.py:42
#: 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/serializers/account/account.py:234
#: accounts/serializers/account/account.py:304
#: accounts/serializers/account/account.py:305
#: accounts/serializers/account/template.py:35
#: authentication/serializers/connect_token_secret.py:51
msgid "Su from"
@@ -518,13 +518,14 @@ msgstr ""
#: accounts/models/account.py:107
#: accounts/models/automations/check_account.py:64
#: accounts/serializers/account/account.py:295
#: accounts/serializers/account/service.py:13
#: accounts/serializers/automations/change_secret.py:117
#: accounts/serializers/automations/change_secret.py:148
#: acls/serializers/base.py:112
#: acls/templates/acls/asset_login_reminder.html:11
#: 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
#: settings/serializers/msg.py:33 terminal/backends/command/models.py:18
#: 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/mixins/vault.py:49
#: accounts/serializers/account/account.py:492
#: accounts/serializers/account/account.py:498
#: accounts/serializers/account/base.py:20
#: authentication/models/temp_token.py:11
#: authentication/templates/authentication/_access_key_modal.html:31
@@ -784,7 +785,7 @@ msgid "Status"
msgstr ""
#: 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/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:67
@@ -1008,7 +1009,7 @@ msgid "Verify asset account"
msgstr ""
#: 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/automations/change_secret.py:50
#: authentication/serializers/connect_token_secret.py:42
@@ -1228,54 +1229,46 @@ msgstr ""
msgid "Has secret"
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/ticket/general.py:280 tickets/serializers/super_ticket.py:14
msgid "State"
msgstr ""
#: accounts/serializers/account/account.py:297
#: accounts/serializers/account/account.py:298
msgid "Changed"
msgstr ""
#: accounts/serializers/account/account.py:307 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: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
#: accounts/serializers/account/account.py:410
#, python-format
msgid "Asset does not support this secret type: %s"
msgstr ""
#: accounts/serializers/account/account.py:444
#: accounts/serializers/account/account.py:443
msgid "Account has exist"
msgstr ""
#: accounts/serializers/account/account.py:476
#: accounts/serializers/account/account.py:483
#: accounts/serializers/account/account.py:468
#: 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:88
#: assets/serializers/asset/common.py:425
msgid "Spec info"
msgstr ""
#: accounts/serializers/account/account.py:493
#: accounts/serializers/account/account.py:499
#: authentication/serializers/connect_token_secret.py:173
#: authentication/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:33
msgid "ID"
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/templates/acls/asset_login_reminder.html:8
#: acls/templates/acls/user_login_reminder.html:8
@@ -1299,7 +1292,7 @@ msgstr ""
msgid "User"
msgstr ""
#: accounts/serializers/account/account.py:504
#: accounts/serializers/account/account.py:510
#: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:165 terminal/notifications.py:225
msgid "Date"
@@ -1718,7 +1711,7 @@ msgstr ""
#: accounts/templates/accounts/change_secret_report.html:118
#: accounts/templates/accounts/push_account_report.html:77
#: accounts/templates/accounts/push_account_report.html:117
#: audits/handler.py:128
#: audits/handler.py:130
msgid "No"
msgstr ""
@@ -1839,6 +1832,18 @@ msgstr ""
msgid "Users"
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
#: ops/serializers/job.py:92 terminal/const.py:88
#: terminal/models/session/session.py:40 terminal/serializers/command.py:18
@@ -2581,19 +2586,19 @@ msgstr ""
msgid "Custom info"
msgstr ""
#: assets/models/asset/common.py:431
#: assets/models/asset/common.py:430
msgid "Can refresh asset hardware info"
msgstr ""
#: assets/models/asset/common.py:432
#: assets/models/asset/common.py:431
msgid "Can test asset connectivity"
msgstr ""
#: assets/models/asset/common.py:433
#: assets/models/asset/common.py:432
msgid "Can match asset"
msgstr ""
#: assets/models/asset/common.py:434
#: assets/models/asset/common.py:433
msgid "Can change asset nodes"
msgstr ""
@@ -3456,7 +3461,7 @@ msgstr ""
msgid "-"
msgstr ""
#: audits/handler.py:128
#: audits/handler.py:130
msgid "Yes"
msgstr ""
@@ -3735,35 +3740,35 @@ msgstr ""
msgid "Reusable connection token is not allowed, global setting not enabled"
msgstr ""
#: authentication/api/connection_token.py:425
#: authentication/api/connection_token.py:426
msgid "Anonymous account is not supported for this asset"
msgstr ""
#: authentication/api/connection_token.py:455
#: authentication/api/connection_token.py:456
msgid "Permission expired"
msgstr ""
#: authentication/api/connection_token.py:488
#: authentication/api/connection_token.py:489
msgid "ACL action is reject: {}({})"
msgstr ""
#: authentication/api/connection_token.py:492
#: authentication/api/connection_token.py:493
msgid "ACL action is review"
msgstr ""
#: authentication/api/connection_token.py:502
#: authentication/api/connection_token.py:503
msgid "ACL action is face verify"
msgstr ""
#: authentication/api/connection_token.py:507
#: authentication/api/connection_token.py:508
msgid "ACL action not supported for this asset"
msgstr ""
#: authentication/api/connection_token.py:514
#: authentication/api/connection_token.py:515
msgid "ACL action is face online"
msgstr ""
#: authentication/api/connection_token.py:539
#: authentication/api/connection_token.py:540
msgid "No available face feature"
msgstr ""
@@ -3837,7 +3842,7 @@ msgstr ""
msgid "Invalid token or cache refreshed."
msgstr ""
#: authentication/backends/oidc/views.py:175
#: authentication/backends/oidc/views.py:137
msgid "OpenID Error"
msgstr ""
@@ -4056,16 +4061,16 @@ msgstr ""
msgid "Please wait for %s seconds before retry"
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
msgid "Your password is too simple, please change it for security"
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"
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"
msgstr ""
@@ -4182,21 +4187,28 @@ msgstr ""
msgid "Authentication failed (before login check failed): {}"
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"
msgstr ""
#: authentication/mixins.py:99
#: authentication/mixins.py:132
msgid ""
"The administrator has enabled 'Only allow login from user source'. \n"
" The current user source is {}. Please contact the administrator."
msgstr ""
#: authentication/mixins.py:278
#: authentication/mixins.py:311
msgid "The MFA type ({}) is not enabled"
msgstr ""
#: authentication/mixins.py:320
#: authentication/mixins.py:353
msgid "Please change your password"
msgstr ""
@@ -4678,22 +4690,22 @@ msgstr ""
msgid "LAN"
msgstr ""
#: authentication/views/base.py:71
#: authentication/views/base.py:70
#: perms/templates/perms/_msg_permed_items_expire.html:18
msgid "If you have any question, please contact the administrator"
msgstr ""
#: authentication/views/base.py:144
#: authentication/views/base.py:143
#, python-format
msgid "%s query user failed"
msgstr ""
#: authentication/views/base.py:152
#: authentication/views/base.py:151
#, python-format
msgid "The %s is already bound to another user"
msgstr ""
#: authentication/views/base.py:159
#: authentication/views/base.py:158
#, python-format
msgid "Binding %s successfully"
msgstr ""
@@ -4830,7 +4842,7 @@ msgstr ""
msgid "Please login with a password and then bind the WeCom"
msgstr ""
#: common/api/action.py:68
#: common/api/action.py:80
msgid "Request file format may be wrong"
msgstr ""
@@ -5343,7 +5355,7 @@ msgstr ""
msgid "App Labels"
msgstr "Labels"
#: labels/models.py:15 settings/serializers/security.py:211
#: labels/models.py:15
msgid "Color"
msgstr ""
@@ -7268,39 +7280,39 @@ msgid "Period clean"
msgstr ""
#: settings/serializers/cleaning.py:15
msgid "Login log retention days (day)"
msgid "Login log retention days"
msgstr ""
#: settings/serializers/cleaning.py:19
msgid "Task log retention days (day)"
msgid "Task log retention days"
msgstr ""
#: settings/serializers/cleaning.py:23
msgid "Operate log retention days (day)"
msgid "Operate log retention days"
msgstr ""
#: settings/serializers/cleaning.py:27
msgid "password change log keep days (day)"
msgid "Password change log retention days"
msgstr ""
#: settings/serializers/cleaning.py:31
msgid "FTP log retention days (day)"
msgid "FTP log retention days"
msgstr ""
#: settings/serializers/cleaning.py:35
msgid "Cloud sync task history retention days (day)"
msgid "Cloud sync task history retention days"
msgstr ""
#: settings/serializers/cleaning.py:39
msgid "job execution retention days (day)"
msgid "job execution retention days"
msgstr ""
#: settings/serializers/cleaning.py:43
msgid "Activity log retention days (day)"
msgid "Activity log retention days"
msgstr ""
#: settings/serializers/cleaning.py:46
msgid "Session log retention days (day)"
msgid "Session log retention days"
msgstr ""
#: settings/serializers/cleaning.py:48
@@ -7310,7 +7322,7 @@ msgid ""
msgstr ""
#: settings/serializers/cleaning.py:53
msgid "Change secret and push record retention days (day)"
msgid "Change secret and push record retention days"
msgstr ""
#: settings/serializers/feature.py:23 settings/serializers/msg.py:69
@@ -7771,28 +7783,32 @@ msgid "Watermark"
msgstr ""
#: settings/serializers/security.py:205
msgid "Watermark session content"
msgstr ""
msgid "Session content"
msgstr "Custom content for session"
#: settings/serializers/security.py:208
msgid "Watermark console content"
msgstr ""
msgid "Console content"
msgstr "Custom content on the management page"
#: settings/serializers/security.py:211
msgid "Font color"
msgstr "Font color"
#: settings/serializers/security.py:214
msgid "Watermark font size"
msgstr ""
msgid "Font size"
msgstr "Font size (px)"
#: settings/serializers/security.py:217
msgid "Watermark height"
msgstr ""
msgid "Height"
msgstr "Height (px)"
#: settings/serializers/security.py:220
msgid "Watermark width"
msgstr ""
msgid "Width"
msgstr "Height (px)"
#: settings/serializers/security.py:223
msgid "Watermark rotate"
msgstr ""
msgid "Rotate"
msgstr "Rotate (degree)"
#: settings/serializers/security.py:227
msgid "Max idle time (minute)"
@@ -8084,15 +8100,15 @@ msgstr ""
msgid "Authentication success: {}"
msgstr ""
#: settings/ws.py:226
#: settings/ws.py:228
msgid "No LDAP user was found"
msgstr ""
#: settings/ws.py:235
#: settings/ws.py:237
msgid "Total {}, success {}, failure {}"
msgstr ""
#: settings/ws.py:239
#: settings/ws.py:241
msgid ", disabled {}"
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,14 +18,14 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\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:362
msgid "Account already exists"
msgstr "La cuenta ya existe"
#: accounts/api/account/application.py:77
#: authentication/api/connection_token.py:452
#: authentication/api/connection_token.py:453
msgid "Account not found"
msgstr "Cuenta no encontrada"
@@ -484,7 +484,7 @@ msgstr ""
#: accounts/templates/accounts/push_account_report.html:78
#: accounts/templates/accounts/push_account_report.html:118
#: 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
#: audits/serializers.py:230 authentication/models/connection_token.py:42
#: 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/serializers/account/account.py:234
#: accounts/serializers/account/account.py:304
#: accounts/serializers/account/account.py:305
#: accounts/serializers/account/template.py:35
#: authentication/serializers/connect_token_secret.py:51
msgid "Su from"
@@ -546,13 +546,14 @@ msgstr "Estado de cambio de contraseña"
#: accounts/models/account.py:107
#: accounts/models/automations/check_account.py:64
#: accounts/serializers/account/account.py:295
#: accounts/serializers/account/service.py:13
#: accounts/serializers/automations/change_secret.py:117
#: accounts/serializers/automations/change_secret.py:148
#: acls/serializers/base.py:112
#: acls/templates/acls/asset_login_reminder.html:11
#: 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
#: settings/serializers/msg.py:33 terminal/backends/command/models.py:18
#: 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/mixins/vault.py:49
#: accounts/serializers/account/account.py:492
#: accounts/serializers/account/account.py:498
#: accounts/serializers/account/base.py:20
#: authentication/models/temp_token.py:11
#: authentication/templates/authentication/_access_key_modal.html:31
@@ -818,7 +819,7 @@ msgid "Status"
msgstr "Estado"
#: 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/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:67
@@ -1049,7 +1050,7 @@ msgid "Verify asset account"
msgstr "Verificación de cuentas"
#: 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/automations/change_secret.py:50
#: 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"
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/ticket/general.py:280 tickets/serializers/super_ticket.py:14
msgid "State"
msgstr "Estado"
#: accounts/serializers/account/account.py:297
#: accounts/serializers/account/account.py:298
msgid "Changed"
msgstr "Modificado"
#: accounts/serializers/account/account.py:307 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: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
#: accounts/serializers/account/account.py:410
#, python-format
msgid "Asset does not support this secret type: %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"
msgstr "La cuenta ya existe"
#: accounts/serializers/account/account.py:476
#: accounts/serializers/account/account.py:483
#: accounts/serializers/account/account.py:468
#: 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:88
#: assets/serializers/asset/common.py:425
msgid "Spec info"
msgstr "Información especial"
#: accounts/serializers/account/account.py:493
#: accounts/serializers/account/account.py:499
#: authentication/serializers/connect_token_secret.py:173
#: authentication/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:33
msgid "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/templates/acls/asset_login_reminder.html:8
#: acls/templates/acls/user_login_reminder.html:8
@@ -1358,7 +1351,7 @@ msgstr "ID"
msgid "User"
msgstr "Usuario"
#: accounts/serializers/account/account.py:504
#: accounts/serializers/account/account.py:510
#: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:165 terminal/notifications.py:225
msgid "Date"
@@ -1824,7 +1817,7 @@ msgstr "Cuenta exitosa"
#: accounts/templates/accounts/change_secret_report.html:118
#: accounts/templates/accounts/push_account_report.html:77
#: accounts/templates/accounts/push_account_report.html:117
#: audits/handler.py:128
#: audits/handler.py:130
msgid "No"
msgstr "No"
@@ -1950,6 +1943,18 @@ msgstr "Persona aprobadora"
msgid "Users"
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
#: ops/serializers/job.py:92 terminal/const.py:88
#: 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"
msgstr "Atributos personalizados"
#: assets/models/asset/common.py:431
#: assets/models/asset/common.py:430
msgid "Can refresh asset hardware info"
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"
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"
msgstr "Se pueden emparejar activos"
#: assets/models/asset/common.py:434
#: assets/models/asset/common.py:433
msgid "Can change asset nodes"
msgstr "Se pueden modificar nodos de activos"
@@ -3651,7 +3656,7 @@ msgstr "Tarea"
msgid "-"
msgstr "-"
#: audits/handler.py:128
#: audits/handler.py:130
msgid "Yes"
msgstr "Es"
@@ -3949,37 +3954,37 @@ msgstr ""
"No se permite el uso de tokens de conexión reutilizables, no se han "
"habilitado configuraciones globales."
#: authentication/api/connection_token.py:425
#: authentication/api/connection_token.py:426
msgid "Anonymous account is not supported for this asset"
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"
msgstr "La autorización ha expirado."
#: authentication/api/connection_token.py:488
#: authentication/api/connection_token.py:489
msgid "ACL action is reject: {}({})"
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"
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"
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"
msgstr ""
"La regla de inicio de sesión del activo no es compatible con los activos "
"actuales."
#: authentication/api/connection_token.py:514
#: authentication/api/connection_token.py:515
msgid "ACL action is face online"
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"
msgstr "No hay características faciales disponibles."
@@ -4061,7 +4066,7 @@ msgstr ""
msgid "Invalid token or cache refreshed."
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"
msgstr "Error de OpenID"
@@ -4292,18 +4297,18 @@ msgstr "Tu contraseña es inválida"
msgid "Please wait for %s seconds before retry"
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
msgid "Your password is too simple, please change it for security"
msgstr ""
"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"
msgstr ""
"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"
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): "
"{}"
#: 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"
msgstr "Usuario no válido"
#: authentication/mixins.py:99
#: authentication/mixins.py:132
msgid ""
"The administrator has enabled 'Only allow login from user source'. \n"
" 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 "
"administrador."
#: authentication/mixins.py:278
#: authentication/mixins.py:311
msgid "The MFA type ({}) is not enabled"
msgstr "El método MFA ({}) no está habilitado"
#: authentication/mixins.py:320
#: authentication/mixins.py:353
msgid "Please change your password"
msgstr "Por favor, modifica la contraseña"
@@ -4966,24 +4980,24 @@ msgstr "¿Reintentar?"
msgid "LAN"
msgstr "Red local"
#: authentication/views/base.py:71
#: authentication/views/base.py:70
#: perms/templates/perms/_msg_permed_items_expire.html:18
msgid "If you have any question, please contact the administrator"
msgstr ""
"Si tienes alguna duda o necesidad, por favor contacta al administrador del "
"sistema"
#: authentication/views/base.py:144
#: authentication/views/base.py:143
#, python-format
msgid "%s query user failed"
msgstr "Error al consultar el usuario %s"
#: authentication/views/base.py:152
#: authentication/views/base.py:151
#, python-format
msgid "The %s is already bound to another user"
msgstr "%s ya está vinculado a otro usuario"
#: authentication/views/base.py:159
#: authentication/views/base.py:158
#, python-format
msgid "Binding %s successfully"
msgstr "Vinculación de %s exitosa"
@@ -5126,7 +5140,7 @@ msgid "Please login with a password and then bind the WeCom"
msgstr ""
"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"
msgstr ""
"Formato de archivo subido incorrecto o archivo de otro tipo de recurso"
@@ -5690,7 +5704,7 @@ msgstr ""
msgid "App Labels"
msgstr "Gestión de etiquetas"
#: labels/models.py:15 settings/serializers/security.py:211
#: labels/models.py:15
msgid "Color"
msgstr "Color"
@@ -7816,40 +7830,40 @@ msgid "Period clean"
msgstr "Limpieza programada"
#: settings/serializers/cleaning.py:15
msgid "Login log retention days (day)"
msgstr "Registro de inicio de sesión (días)"
msgid "Login log retention days"
msgstr "Días de retención de los registros de inicio de sesión"
#: settings/serializers/cleaning.py:19
msgid "Task log retention days (day)"
msgstr "Registro de tareas (días)"
msgid "Task log retention days"
msgstr "Días de retención de los registros de tareas"
#: settings/serializers/cleaning.py:23
msgid "Operate log retention days (day)"
msgstr "Registro de acciones (días)"
msgid "Operate log retention days"
msgstr "Días de retención de los registros de acción"
#: settings/serializers/cleaning.py:27
msgid "password change log keep days (day)"
msgstr "Registro de cambios de contraseña"
msgid "Password change log retention days"
msgstr "Días de retención de los registros de cambio de contraseña de usuario"
#: settings/serializers/cleaning.py:31
msgid "FTP log retention days (day)"
msgstr "Subidas y descargas (días)"
msgid "FTP log retention days"
msgstr "Días de retención de los registros de subida y descarga"
#: settings/serializers/cleaning.py:35
msgid "Cloud sync task history retention days (day)"
msgstr "Sincronización de registros en la nube (días)"
msgid "Cloud sync task history retention days"
msgstr "Días de retención de los registros de sincronización en la nube"
#: settings/serializers/cleaning.py:39
msgid "job execution retention days (day)"
msgstr "Historial de ejecución del centro de tareas (días)"
msgid "job execution retention days"
msgstr "Días de retención del historial de ejecución de trabajos"
#: settings/serializers/cleaning.py:43
msgid "Activity log retention days (day)"
msgstr "Registro de actividades (días)"
msgid "Activity log retention days"
msgstr "Días de retención de los registros de actividades"
#: settings/serializers/cleaning.py:46
msgid "Session log retention days (day)"
msgstr "Registro de sesiones (días)"
msgid "Session log retention days"
msgstr "Días de retención de los registros de sesiones"
#: settings/serializers/cleaning.py:48
msgid ""
@@ -7861,8 +7875,10 @@ msgstr ""
"etc.)"
#: settings/serializers/cleaning.py:53
msgid "Change secret and push record retention days (day)"
msgstr "Días de conservación de los registros de cambio de contraseña (días)"
msgid "Change secret and push record retention days"
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
msgid "Subject"
@@ -8418,29 +8434,32 @@ msgid "Watermark"
msgstr "Activar marca de agua"
#: settings/serializers/security.py:205
msgid "Watermark session content"
msgstr "Contenido de personalización de la marca de agua de la sesión"
msgid "Session content"
msgstr "Contenido personalizado de marca de agua de sesión"
#: settings/serializers/security.py:208
msgid "Watermark console content"
msgstr ""
"Contenido de personalización de la marca de agua en la página de gestión"
msgid "Console content"
msgstr "Contenido personalizado de marca de agua de página de gestión"
#: settings/serializers/security.py:211
msgid "Font color"
msgstr "Color de fuente"
#: settings/serializers/security.py:214
msgid "Watermark font size"
msgstr "Tamaño y tipo de fuente"
msgid "Font size"
msgstr "Tamaño de fuente (px)"
#: settings/serializers/security.py:217
msgid "Watermark height"
msgstr "Altura de la marca de agua individual"
msgid "Height"
msgstr "Altura (px)"
#: settings/serializers/security.py:220
msgid "Watermark width"
msgstr "Ancho de la marca de agua individual"
msgid "Width"
msgstr "Ancho (px)"
#: settings/serializers/security.py:223
msgid "Watermark rotate"
msgstr "Ángulo de rotación de la marca de agua"
msgid "Rotate"
msgstr "Rotación (grados)"
#: settings/serializers/security.py:227
msgid "Max idle time (minute)"
@@ -8774,15 +8793,15 @@ msgstr "Error de autenticación: (desconocido): {}"
msgid "Authentication success: {}"
msgstr "Autenticación exitosa: {}"
#: settings/ws.py:226
#: settings/ws.py:228
msgid "No LDAP user was found"
msgstr "No se obtuvo ningún usuario LDAP"
#: settings/ws.py:235
#: settings/ws.py:237
msgid "Total {}, success {}, failure {}"
msgstr "Total: {}, Éxitos: {}, Fracasos: {}"
#: settings/ws.py:239
#: settings/ws.py:241
msgid ", disabled {}"
msgstr ", deshabilitar {}"
@@ -12231,28 +12250,3 @@ msgstr "Importación de licencia exitosa"
#: xpack/plugins/license/api.py:53
msgid "Invalid license"
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 ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,14 +18,14 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\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:362
msgid "Account already exists"
msgstr "アカウントはすでに存在しています"
#: accounts/api/account/application.py:77
#: authentication/api/connection_token.py:452
#: authentication/api/connection_token.py:453
msgid "Account not found"
msgstr "アカウントが見つかりません"
@@ -459,7 +459,7 @@ msgstr "Vault 操作に失敗しました。再試行するか、Vault のアカ
#: accounts/templates/accounts/push_account_report.html:78
#: accounts/templates/accounts/push_account_report.html:118
#: 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
#: audits/serializers.py:230 authentication/models/connection_token.py:42
#: 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/serializers/account/account.py:234
#: accounts/serializers/account/account.py:304
#: accounts/serializers/account/account.py:305
#: accounts/serializers/account/template.py:35
#: authentication/serializers/connect_token_secret.py:51
msgid "Su from"
@@ -536,13 +536,14 @@ msgstr "変更状態"
#: accounts/models/account.py:107
#: accounts/models/automations/check_account.py:64
#: accounts/serializers/account/account.py:295
#: accounts/serializers/account/service.py:13
#: accounts/serializers/automations/change_secret.py:117
#: accounts/serializers/automations/change_secret.py:148
#: acls/serializers/base.py:112
#: acls/templates/acls/asset_login_reminder.html:11
#: 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
#: settings/serializers/msg.py:33 terminal/backends/command/models.py:18
#: 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/mixins/vault.py:49
#: accounts/serializers/account/account.py:492
#: accounts/serializers/account/account.py:498
#: accounts/serializers/account/base.py:20
#: authentication/models/temp_token.py:11
#: authentication/templates/authentication/_access_key_modal.html:31
@@ -808,7 +809,7 @@ msgid "Status"
msgstr "ステータス"
#: 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/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:67
@@ -1032,7 +1033,7 @@ msgid "Verify asset account"
msgstr "アカウントの確認"
#: 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/automations/change_secret.py:50
#: authentication/serializers/connect_token_secret.py:42
@@ -1255,54 +1256,46 @@ msgstr "アカウントは既に存在します。フィールド:{fields}は
msgid "Has secret"
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/ticket/general.py:280 tickets/serializers/super_ticket.py:14
msgid "State"
msgstr "状態"
#: accounts/serializers/account/account.py:297
#: accounts/serializers/account/account.py:298
msgid "Changed"
msgstr "編集済み"
#: accounts/serializers/account/account.py:307 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: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
#: accounts/serializers/account/account.py:410
#, python-format
msgid "Asset does not support this secret type: %s"
msgstr "アセットはアカウント タイプをサポートしていません: %s"
#: accounts/serializers/account/account.py:444
#: accounts/serializers/account/account.py:443
msgid "Account has exist"
msgstr "アカウントはすでに存在しています"
#: accounts/serializers/account/account.py:476
#: accounts/serializers/account/account.py:483
#: accounts/serializers/account/account.py:468
#: 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:88
#: assets/serializers/asset/common.py:425
msgid "Spec info"
msgstr "特別情報"
#: accounts/serializers/account/account.py:493
#: accounts/serializers/account/account.py:499
#: authentication/serializers/connect_token_secret.py:173
#: authentication/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:33
msgid "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/templates/acls/asset_login_reminder.html:8
#: acls/templates/acls/user_login_reminder.html:8
@@ -1327,7 +1320,7 @@ msgstr "ID"
msgid "User"
msgstr "ユーザー"
#: accounts/serializers/account/account.py:504
#: accounts/serializers/account/account.py:510
#: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:165 terminal/notifications.py:225
msgid "Date"
@@ -1741,7 +1734,7 @@ msgstr "成功したアカウント"
#: accounts/templates/accounts/change_secret_report.html:118
#: accounts/templates/accounts/push_account_report.html:77
#: accounts/templates/accounts/push_account_report.html:117
#: audits/handler.py:128
#: audits/handler.py:130
msgid "No"
msgstr "否"
@@ -1863,6 +1856,18 @@ msgstr "レビュー担当者"
msgid "Users"
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
#: ops/serializers/job.py:92 terminal/const.py:88
#: terminal/models/session/session.py:40 terminal/serializers/command.py:18
@@ -2614,19 +2619,19 @@ msgstr "資産ハードウェア情報の収集"
msgid "Custom info"
msgstr "カスタム属性"
#: assets/models/asset/common.py:431
#: assets/models/asset/common.py:430
msgid "Can refresh asset hardware info"
msgstr "資産ハードウェア情報を更新できます"
#: assets/models/asset/common.py:432
#: assets/models/asset/common.py:431
msgid "Can test asset connectivity"
msgstr "資産接続をテストできます"
#: assets/models/asset/common.py:433
#: assets/models/asset/common.py:432
msgid "Can match asset"
msgstr "アセットを一致させることができます"
#: assets/models/asset/common.py:434
#: assets/models/asset/common.py:433
msgid "Can change asset nodes"
msgstr "資産ノードを変更できます"
@@ -3500,7 +3505,7 @@ msgstr "タスク"
msgid "-"
msgstr "-"
#: audits/handler.py:128
#: audits/handler.py:130
msgid "Yes"
msgstr "是"
@@ -3779,35 +3784,35 @@ msgstr "この操作には、MFAを検証する必要があります"
msgid "Reusable connection token is not allowed, global setting not enabled"
msgstr "再使用可能な接続トークンの使用は許可されていません。グローバル設定は有効になっていません"
#: authentication/api/connection_token.py:425
#: authentication/api/connection_token.py:426
msgid "Anonymous account is not supported for this asset"
msgstr "匿名アカウントはこのプロパティではサポートされていません"
#: authentication/api/connection_token.py:455
#: authentication/api/connection_token.py:456
msgid "Permission expired"
msgstr "承認の有効期限が切れています"
#: authentication/api/connection_token.py:488
#: authentication/api/connection_token.py:489
msgid "ACL action is reject: {}({})"
msgstr "ACL アクションは拒否です: {}({})"
#: authentication/api/connection_token.py:492
#: authentication/api/connection_token.py:493
msgid "ACL action is review"
msgstr "ACL アクションはレビューです"
#: authentication/api/connection_token.py:502
#: authentication/api/connection_token.py:503
msgid "ACL action is face verify"
msgstr "ACL Action は顔認証です"
#: authentication/api/connection_token.py:507
#: authentication/api/connection_token.py:508
msgid "ACL action not supported for this asset"
msgstr "資産ログインルールは現在の資産をサポートしていません"
#: authentication/api/connection_token.py:514
#: authentication/api/connection_token.py:515
msgid "ACL action is face online"
msgstr "ACL Action は顔オンラインです"
#: authentication/api/connection_token.py:539
#: authentication/api/connection_token.py:540
msgid "No available face feature"
msgstr "利用可能な顔の特徴はありません"
@@ -3882,7 +3887,7 @@ msgstr "無効なトークンヘッダー。署名文字列に無効な文字を
msgid "Invalid token or cache refreshed."
msgstr "無効なトークンまたはキャッシュの更新。"
#: authentication/backends/oidc/views.py:175
#: authentication/backends/oidc/views.py:137
msgid "OpenID Error"
msgstr "OpenID エラー"
@@ -4101,16 +4106,16 @@ msgstr "パスワードが無効です"
msgid "Please wait for %s seconds before retry"
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
msgid "Your password is too simple, please change it for security"
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"
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"
msgstr "パスワードの有効期限が切れました。ログインする前にリセットしてください。"
@@ -4227,21 +4232,27 @@ msgstr "無効にする電話番号をクリアする"
msgid "Authentication failed (before login check failed): {}"
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"
msgstr "無効なユーザーです"
#: authentication/mixins.py:99
#: authentication/mixins.py:132
msgid ""
"The administrator has enabled 'Only allow login from user source'. \n"
" The current user source is {}. Please contact the administrator."
msgstr "管理者は「ユーザーソースからのみログインを許可」をオンにしており、現在のユーザーソースは {} です。管理者に連絡してください。"
#: authentication/mixins.py:278
#: authentication/mixins.py:311
msgid "The MFA type ({}) is not enabled"
msgstr "MFAタイプ ({}) が有効になっていない"
#: authentication/mixins.py:320
#: authentication/mixins.py:353
msgid "Please change your password"
msgstr "パスワードを変更してください"
@@ -4725,22 +4736,22 @@ msgstr "再試行しますか?"
msgid "LAN"
msgstr "ローカルエリアネットワーク"
#: authentication/views/base.py:71
#: authentication/views/base.py:70
#: perms/templates/perms/_msg_permed_items_expire.html:18
msgid "If you have any question, please contact the administrator"
msgstr "質問があったら、管理者に連絡して下さい"
#: authentication/views/base.py:144
#: authentication/views/base.py:143
#, python-format
msgid "%s query user failed"
msgstr "%sユーザーのクエリに失敗しました"
#: authentication/views/base.py:152
#: authentication/views/base.py:151
#, python-format
msgid "The %s is already bound to another user"
msgstr "%sが別のユーザーにバインドされています。"
#: authentication/views/base.py:159
#: authentication/views/base.py:158
#, python-format
msgid "Binding %s successfully"
msgstr "バインド%s成功"
@@ -4879,7 +4890,7 @@ msgstr "企業の微信からユーザーを取得できませんでした"
msgid "Please login with a password and then bind the WeCom"
msgstr "パスワードでログインしてからWeComをバインドしてください"
#: common/api/action.py:68
#: common/api/action.py:80
msgid "Request file format may be wrong"
msgstr "リクエストファイルの形式が間違っている可能性があります"
@@ -5396,7 +5407,7 @@ msgstr ""
msgid "App Labels"
msgstr "ラベル"
#: labels/models.py:15 settings/serializers/security.py:211
#: labels/models.py:15
msgid "Color"
msgstr "色"
@@ -7356,40 +7367,40 @@ msgid "Period clean"
msgstr "定時清掃"
#: settings/serializers/cleaning.py:15
msgid "Login log retention days (day)"
msgstr "ログインログは日数を保持します(天)"
msgid "Login log retention days"
msgstr "ログインログ保持日数"
#: settings/serializers/cleaning.py:19
msgid "Task log retention days (day)"
msgstr "タスクログは日数を保持します(天)"
msgid "Task log retention days"
msgstr "タスクログ保持日数"
#: settings/serializers/cleaning.py:23
msgid "Operate log retention days (day)"
msgstr "ログ管理日を操作する(天)"
msgid "Operate log retention days"
msgstr "アクションログ保持日数"
#: settings/serializers/cleaning.py:27
msgid "password change log keep days (day)"
msgstr "パスワード変更ログ(天)"
msgid "Password change log retention days"
msgstr "ユーザー変更パスワードログ保持日数"
#: settings/serializers/cleaning.py:31
msgid "FTP log retention days (day)"
msgstr "タスクログは日数を保持します(天)"
msgid "FTP log retention days"
msgstr "アップロードダウンロード記録保持日数"
#: settings/serializers/cleaning.py:35
msgid "Cloud sync task history retention days (day)"
msgstr "タスクログは日数を保持します(天)"
msgid "Cloud sync task history retention days"
msgstr "クラウド同期記録保持日数"
#: settings/serializers/cleaning.py:39
msgid "job execution retention days (day)"
msgstr "ジョブセンターの実行履歴 (天) "
msgid "job execution retention days"
msgstr "作業実行履歴保持日数"
#: settings/serializers/cleaning.py:43
msgid "Activity log retention days (day)"
msgstr "活動ログは日数を保持します(天)"
msgid "Activity log retention days"
msgstr "活動記録保持日数"
#: settings/serializers/cleaning.py:46
msgid "Session log retention days (day)"
msgstr "ログインログは日数を保持します(天)"
msgid "Session log retention days"
msgstr "セッションログ保持日数"
#: settings/serializers/cleaning.py:48
msgid ""
@@ -7399,8 +7410,8 @@ msgstr ""
"この期間を超えるセッション、録音、およびコマンド レコードは削除されます (データベースのバックアップに影響し、OSS などには影響しません)"
#: settings/serializers/cleaning.py:53
msgid "Change secret and push record retention days (day)"
msgstr "パスワード変更プッシュ記録保持する日数 (日)"
msgid "Change secret and push record retention days"
msgstr "アカウント変更パスワードプッシュ記録保持日数"
#: settings/serializers/feature.py:23 settings/serializers/msg.py:69
msgid "Subject"
@@ -7872,28 +7883,32 @@ msgid "Watermark"
msgstr "透かしの有効化"
#: settings/serializers/security.py:205
msgid "Watermark session content"
msgstr "セッションウォーターマークカスタム内容"
msgid "Session content"
msgstr "セッションウォーターマークカスタム内容"
#: settings/serializers/security.py:208
msgid "Watermark console content"
msgstr "管理ページウォーターマークカスタム内容"
msgid "Console content"
msgstr "管理ページウォーターマークカスタム内容"
#: settings/serializers/security.py:211
msgid "Font color"
msgstr "フォントカラー"
#: settings/serializers/security.py:214
msgid "Watermark font size"
msgstr "フォントサイズ"
msgid "Font size"
msgstr "フォントサイズ (px)"
#: settings/serializers/security.py:217
msgid "Watermark height"
msgstr "単一ウォーターマークの高さ"
msgid "Height"
msgstr "高さ (px)"
#: settings/serializers/security.py:220
msgid "Watermark width"
msgstr "単一ウォーターマークの幅"
msgid "Width"
msgstr "幅 (px)"
#: settings/serializers/security.py:223
msgid "Watermark rotate"
msgstr "ウォーターマークの回転角度"
msgid "Rotate"
msgstr "回転 (度)"
#: settings/serializers/security.py:227
msgid "Max idle time (minute)"
@@ -8195,15 +8210,15 @@ msgstr "認証に失敗しました (不明): {}"
msgid "Authentication success: {}"
msgstr "認証成功: {}"
#: settings/ws.py:226
#: settings/ws.py:228
msgid "No LDAP user was found"
msgstr "LDAPユーザーが取得されませんでした"
#: settings/ws.py:235
#: settings/ws.py:237
msgid "Total {}, success {}, failure {}"
msgstr "合計 {},成功 {},失敗 {}"
#: settings/ws.py:239
#: settings/ws.py:241
msgid ", disabled {}"
msgstr "無効 {}"
@@ -11471,3 +11486,18 @@ msgstr "ライセンスのインポートに成功"
#: xpack/plugins/license/api.py:53
msgid "Invalid license"
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 ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,14 +18,14 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\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:362
msgid "Account already exists"
msgstr "계정이 이미 존재합니다"
#: accounts/api/account/application.py:77
#: authentication/api/connection_token.py:452
#: authentication/api/connection_token.py:453
msgid "Account not found"
msgstr "계정을 찾을 수 없습니다"
@@ -459,7 +459,7 @@ msgstr "Vault 작업이 실패했습니다. 다시 시도하거나 Vault의 계
#: accounts/templates/accounts/push_account_report.html:78
#: accounts/templates/accounts/push_account_report.html:118
#: 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
#: audits/serializers.py:230 authentication/models/connection_token.py:42
#: 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/serializers/account/account.py:234
#: accounts/serializers/account/account.py:304
#: accounts/serializers/account/account.py:305
#: accounts/serializers/account/template.py:35
#: authentication/serializers/connect_token_secret.py:51
msgid "Su from"
@@ -521,13 +521,14 @@ msgstr "비밀번호 변경 상태"
#: accounts/models/account.py:107
#: accounts/models/automations/check_account.py:64
#: accounts/serializers/account/account.py:295
#: accounts/serializers/account/service.py:13
#: accounts/serializers/automations/change_secret.py:117
#: accounts/serializers/automations/change_secret.py:148
#: acls/serializers/base.py:112
#: acls/templates/acls/asset_login_reminder.html:11
#: 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
#: settings/serializers/msg.py:33 terminal/backends/command/models.py:18
#: 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/mixins/vault.py:49
#: accounts/serializers/account/account.py:492
#: accounts/serializers/account/account.py:498
#: accounts/serializers/account/base.py:20
#: authentication/models/temp_token.py:11
#: authentication/templates/authentication/_access_key_modal.html:31
@@ -793,7 +794,7 @@ msgid "Status"
msgstr "상태"
#: 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/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:67
@@ -1017,7 +1018,7 @@ msgid "Verify asset account"
msgstr "계정 검증"
#: 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/automations/change_secret.py:50
#: authentication/serializers/connect_token_secret.py:42
@@ -1241,54 +1242,46 @@ msgstr "계정이 이미 존재합니다. 필드: {fields}는 고유해야 합
msgid "Has secret"
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/ticket/general.py:280 tickets/serializers/super_ticket.py:14
msgid "State"
msgstr "상태"
#: accounts/serializers/account/account.py:297
#: accounts/serializers/account/account.py:298
msgid "Changed"
msgstr "수정됨"
#: accounts/serializers/account/account.py:307 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: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
#: accounts/serializers/account/account.py:410
#, python-format
msgid "Asset does not support this secret type: %s"
msgstr "자산이 지원하지 않는 계정 유형: %s"
#: accounts/serializers/account/account.py:444
#: accounts/serializers/account/account.py:443
msgid "Account has exist"
msgstr "계정이 이미 존재합니다"
#: accounts/serializers/account/account.py:476
#: accounts/serializers/account/account.py:483
#: accounts/serializers/account/account.py:468
#: 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:88
#: assets/serializers/asset/common.py:425
msgid "Spec info"
msgstr "특별 정보"
#: accounts/serializers/account/account.py:493
#: accounts/serializers/account/account.py:499
#: authentication/serializers/connect_token_secret.py:173
#: authentication/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:33
msgid "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/templates/acls/asset_login_reminder.html:8
#: acls/templates/acls/user_login_reminder.html:8
@@ -1313,7 +1306,7 @@ msgstr "ID"
msgid "User"
msgstr "사용자"
#: accounts/serializers/account/account.py:504
#: accounts/serializers/account/account.py:510
#: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:165 terminal/notifications.py:225
msgid "Date"
@@ -1731,7 +1724,7 @@ msgstr "성공한 계정"
#: accounts/templates/accounts/change_secret_report.html:118
#: accounts/templates/accounts/push_account_report.html:77
#: accounts/templates/accounts/push_account_report.html:117
#: audits/handler.py:128
#: audits/handler.py:130
msgid "No"
msgstr "아니요"
@@ -1853,6 +1846,18 @@ msgstr "승인자"
msgid "Users"
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
#: ops/serializers/job.py:92 terminal/const.py:88
#: terminal/models/session/session.py:40 terminal/serializers/command.py:18
@@ -2606,19 +2611,19 @@ msgstr "자산 하드웨어 정보 수집"
msgid "Custom info"
msgstr "사용자 정의 속성"
#: assets/models/asset/common.py:431
#: assets/models/asset/common.py:430
msgid "Can refresh asset hardware info"
msgstr "자산 하드웨어 정보를 업데이트할 수 있습니다"
#: assets/models/asset/common.py:432
#: assets/models/asset/common.py:431
msgid "Can test asset connectivity"
msgstr "자산 연결성을 테스트할 수 있습니다."
#: assets/models/asset/common.py:433
#: assets/models/asset/common.py:432
msgid "Can match asset"
msgstr "자산을 매칭할 수 있습니다."
#: assets/models/asset/common.py:434
#: assets/models/asset/common.py:433
msgid "Can change asset nodes"
msgstr "자산 노드를 수정할 수 있습니다."
@@ -3491,7 +3496,7 @@ msgstr "업무"
msgid "-"
msgstr "-"
#: audits/handler.py:128
#: audits/handler.py:130
msgid "Yes"
msgstr "입니다"
@@ -3769,35 +3774,35 @@ msgstr "이 작업은 귀하의 MFA를 확인해야 하므로, 먼저 활성화
msgid "Reusable connection token is not allowed, global setting not enabled"
msgstr "재사용 가능한 연결 토큰은 허용되지 않으며, 글로벌 설정이 활성화되지 않았습니다."
#: authentication/api/connection_token.py:425
#: authentication/api/connection_token.py:426
msgid "Anonymous account is not supported for this asset"
msgstr "익명 계정은 현재 자산을 지원하지 않습니다."
#: authentication/api/connection_token.py:455
#: authentication/api/connection_token.py:456
msgid "Permission expired"
msgstr "권한이 만료되었습니다."
#: authentication/api/connection_token.py:488
#: authentication/api/connection_token.py:489
msgid "ACL action is reject: {}({})"
msgstr "ACL Action은 거부: {}({})입니다."
#: authentication/api/connection_token.py:492
#: authentication/api/connection_token.py:493
msgid "ACL action is review"
msgstr "ACL Action은 재검토입니다."
#: authentication/api/connection_token.py:502
#: authentication/api/connection_token.py:503
msgid "ACL action is face verify"
msgstr "ACL Action은 얼굴 인식입니다."
#: authentication/api/connection_token.py:507
#: authentication/api/connection_token.py:508
msgid "ACL action not supported for this asset"
msgstr "자산 로그인 규칙은 현재 자산을 지원하지 않습니다."
#: authentication/api/connection_token.py:514
#: authentication/api/connection_token.py:515
msgid "ACL action is face online"
msgstr "ACL Action은 온라인 얼굴 인식입니다."
#: authentication/api/connection_token.py:539
#: authentication/api/connection_token.py:540
msgid "No available face feature"
msgstr "사용 가능한 얼굴 특징이 없습니다."
@@ -3879,7 +3884,7 @@ msgstr "유효하지 않은 토큰 헤더입니다. 기호 문자열에는 유
msgid "Invalid token or cache refreshed."
msgstr "새로 고침된 토큰 또는 캐시가 유효하지 않습니다."
#: authentication/backends/oidc/views.py:175
#: authentication/backends/oidc/views.py:137
msgid "OpenID Error"
msgstr "OpenID 오류"
@@ -4100,16 +4105,16 @@ msgstr "귀하의 비밀번호가 유효하지 않습니다"
msgid "Please wait for %s seconds before retry"
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
msgid "Your password is too simple, please change it for security"
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"
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"
msgstr "당신의 비밀번호가 만료되었습니다. 수정 후 로그인해주세요."
@@ -4226,21 +4231,27 @@ msgstr "전화번호 삭제로 비활성화"
msgid "Authentication failed (before login check failed): {}"
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"
msgstr "무효한 사용자"
#: authentication/mixins.py:99
#: authentication/mixins.py:132
msgid ""
"The administrator has enabled 'Only allow login from user source'. \n"
" The current user source is {}. Please contact the administrator."
msgstr "관리자가 '사용자 출처에서만 로그인 허용'을 활성화하였습니다. 현재 사용자 출처는 {}이며 관리자를 연락하십시오."
#: authentication/mixins.py:278
#: authentication/mixins.py:311
msgid "The MFA type ({}) is not enabled"
msgstr "해당 MFA ({}) 방식이 활성화되지 않았습니다."
#: authentication/mixins.py:320
#: authentication/mixins.py:353
msgid "Please change your password"
msgstr "비밀번호를 수정하십시오."
@@ -4726,22 +4737,22 @@ msgstr "재시도 하시겠습니까?"
msgid "LAN"
msgstr "지역 네트워크"
#: authentication/views/base.py:71
#: authentication/views/base.py:70
#: perms/templates/perms/_msg_permed_items_expire.html:18
msgid "If you have any question, please contact the administrator"
msgstr "질문이나 요구 사항이 있는 경우 시스템 관리자에게 문의해 주세요"
#: authentication/views/base.py:144
#: authentication/views/base.py:143
#, python-format
msgid "%s query user failed"
msgstr "%s 사용자 조회 실패"
#: authentication/views/base.py:152
#: authentication/views/base.py:151
#, python-format
msgid "The %s is already bound to another user"
msgstr "%s 다른 사용자에 이미 바인딩되었습니다."
#: authentication/views/base.py:159
#: authentication/views/base.py:158
#, python-format
msgid "Binding %s successfully"
msgstr "%s 바인딩 성공"
@@ -4880,7 +4891,7 @@ msgstr "기업 WeChat에서 사용자 정보를 가져오지 못했습니다."
msgid "Please login with a password and then bind the WeCom"
msgstr "密码로 로그인한 후 기업 WeChat을 연결해 주시기 바랍니다."
#: common/api/action.py:68
#: common/api/action.py:80
msgid "Request file format may be wrong"
msgstr "업로드한 파일 형식이 잘못되었거나 다른 유형의 리소스 파일입니다."
@@ -5398,7 +5409,7 @@ msgstr "태그 관리"
msgid "App Labels"
msgstr "색상"
#: labels/models.py:15 settings/serializers/security.py:211
#: labels/models.py:15
msgid "Color"
msgstr "색상"
@@ -7398,40 +7409,40 @@ msgid "Period clean"
msgstr "정기 청소"
#: settings/serializers/cleaning.py:15
msgid "Login log retention days (day)"
msgstr "로그인 로그 (일)"
msgid "Login log retention days"
msgstr "로그인 로그 보존 일수"
#: settings/serializers/cleaning.py:19
msgid "Task log retention days (day)"
msgstr "작업 로그 (일)"
msgid "Task log retention days"
msgstr "작업 로그 보존 일수"
#: settings/serializers/cleaning.py:23
msgid "Operate log retention days (day)"
msgstr "액션 로그 (일)"
msgid "Operate log retention days"
msgstr "액션 로그 보존 일수"
#: settings/serializers/cleaning.py:27
msgid "password change log keep days (day)"
msgstr "비밀번호 변경 로그"
msgid "Password change log retention days"
msgstr "사용자 비밀번호 변경 로그 보존 일수"
#: settings/serializers/cleaning.py:31
msgid "FTP log retention days (day)"
msgstr "업로드 다운로드 (일)"
msgid "FTP log retention days"
msgstr "업로드 다운로드 기록 보존 일수"
#: settings/serializers/cleaning.py:35
msgid "Cloud sync task history retention days (day)"
msgstr "클라우드 동기화 기록 (일)"
msgid "Cloud sync task history retention days"
msgstr "클라우드 동기화 기록 보존 일수"
#: settings/serializers/cleaning.py:39
msgid "job execution retention days (day)"
msgstr "작업 센터 실행 이력 (일)"
msgid "job execution retention days"
msgstr "작업 실행 이력 보존 일수"
#: settings/serializers/cleaning.py:43
msgid "Activity log retention days (day)"
msgstr "활동 기록 (일)"
msgid "Activity log retention days"
msgstr "활동 기록 보존 일수"
#: settings/serializers/cleaning.py:46
msgid "Session log retention days (day)"
msgstr "세션 로그 (일)"
msgid "Session log retention days"
msgstr "세션 로그 보존 일수"
#: settings/serializers/cleaning.py:48
msgid ""
@@ -7441,8 +7452,8 @@ msgstr ""
"세션, 녹화 및 명령 기록은 해당 시간을 초과하면 삭제됩니다 (데이터베이스 저장소에 영향, OSS 등은 영향을 받지 않습니다)"
#: settings/serializers/cleaning.py:53
msgid "Change secret and push record retention days (day)"
msgstr "비밀번호 변경 푸시 기록 보존 일수 (일)"
msgid "Change secret and push record retention days"
msgstr "계정 비밀번호 변경 푸시 기록 보존 일수"
#: settings/serializers/feature.py:23 settings/serializers/msg.py:69
msgid "Subject"
@@ -7935,28 +7946,32 @@ msgid "Watermark"
msgstr "워터마크 활성화"
#: settings/serializers/security.py:205
msgid "Watermark session content"
msgid "Session content"
msgstr "세션 워터마크 사용자 정의 내용"
#: settings/serializers/security.py:208
msgid "Watermark console content"
msgid "Console content"
msgstr "관리 페이지 워터마크 사용자 정의 내용"
#: settings/serializers/security.py:211
msgid "Font color"
msgstr "글꼴 색상"
#: settings/serializers/security.py:214
msgid "Watermark font size"
msgstr "글꼴 크기"
msgid "Font size"
msgstr "글꼴 크기 (px)"
#: settings/serializers/security.py:217
msgid "Watermark height"
msgstr "단일 워터마크 높이"
msgid "Height"
msgstr "높이 (px)"
#: settings/serializers/security.py:220
msgid "Watermark width"
msgstr "단일 워터마크 너비"
msgid "Width"
msgstr "너비 (px)"
#: settings/serializers/security.py:223
msgid "Watermark rotate"
msgstr "워터마크 회전 각도"
msgid "Rotate"
msgstr "회전 (도)"
#: settings/serializers/security.py:227
msgid "Max idle time (minute)"
@@ -8259,15 +8274,15 @@ msgstr "인증 실패: (알 수 없음): {}"
msgid "Authentication success: {}"
msgstr "인증 성공: {}"
#: settings/ws.py:226
#: settings/ws.py:228
msgid "No LDAP user was found"
msgstr "LDAP 사용자를 획득하지 못함"
#: settings/ws.py:235
#: settings/ws.py:237
msgid "Total {}, success {}, failure {}"
msgstr "총 {}명, 성공 {}명, 실패 {}명"
#: settings/ws.py:239
#: settings/ws.py:241
msgid ", disabled {}"
msgstr "비활성화 {}"
@@ -11563,25 +11578,3 @@ msgstr "라이센스 가져오기 성공"
#: xpack/plugins/license/api.py:53
msgid "Invalid license"
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 ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,14 +18,14 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\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:362
msgid "Account already exists"
msgstr "Conta já existente"
#: accounts/api/account/application.py:77
#: authentication/api/connection_token.py:452
#: authentication/api/connection_token.py:453
msgid "Account not found"
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:118
#: 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
#: audits/serializers.py:230 authentication/models/connection_token.py:42
#: 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/serializers/account/account.py:234
#: accounts/serializers/account/account.py:304
#: accounts/serializers/account/account.py:305
#: accounts/serializers/account/template.py:35
#: authentication/serializers/connect_token_secret.py:51
msgid "Su from"
@@ -524,13 +524,14 @@ msgstr "Status da Alteração de Senha"
#: accounts/models/account.py:107
#: accounts/models/automations/check_account.py:64
#: accounts/serializers/account/account.py:295
#: accounts/serializers/account/service.py:13
#: accounts/serializers/automations/change_secret.py:117
#: accounts/serializers/automations/change_secret.py:148
#: acls/serializers/base.py:112
#: acls/templates/acls/asset_login_reminder.html:11
#: 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
#: settings/serializers/msg.py:33 terminal/backends/command/models.py:18
#: 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/mixins/vault.py:49
#: accounts/serializers/account/account.py:492
#: accounts/serializers/account/account.py:498
#: accounts/serializers/account/base.py:20
#: authentication/models/temp_token.py:11
#: authentication/templates/authentication/_access_key_modal.html:31
@@ -796,7 +797,7 @@ msgid "Status"
msgstr "Status"
#: 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/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:67
@@ -1040,7 +1041,7 @@ msgid "Verify asset account"
msgstr "Conta verificada"
#: 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/automations/change_secret.py:50
#: authentication/serializers/connect_token_secret.py:42
@@ -1274,54 +1275,46 @@ msgstr "Conta já existe. O campo: {fields} deve ser único."
msgid "Has secret"
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/ticket/general.py:280 tickets/serializers/super_ticket.py:14
msgid "State"
msgstr "Estado"
#: accounts/serializers/account/account.py:297
#: accounts/serializers/account/account.py:298
msgid "Changed"
msgstr "Modificado"
#: accounts/serializers/account/account.py:307 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: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
#: accounts/serializers/account/account.py:410
#, python-format
msgid "Asset does not support this secret type: %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"
msgstr "Conta já existente"
#: accounts/serializers/account/account.py:476
#: accounts/serializers/account/account.py:483
#: accounts/serializers/account/account.py:468
#: 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:88
#: assets/serializers/asset/common.py:425
msgid "Spec info"
msgstr "Informações especiais"
#: accounts/serializers/account/account.py:493
#: accounts/serializers/account/account.py:499
#: authentication/serializers/connect_token_secret.py:173
#: authentication/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:33
msgid "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/templates/acls/asset_login_reminder.html:8
#: acls/templates/acls/user_login_reminder.html:8
@@ -1346,7 +1339,7 @@ msgstr "ID"
msgid "User"
msgstr "Usuário"
#: accounts/serializers/account/account.py:504
#: accounts/serializers/account/account.py:510
#: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:165 terminal/notifications.py:225
msgid "Date"
@@ -1801,7 +1794,7 @@ msgstr "Contas bem-sucedidas"
#: accounts/templates/accounts/change_secret_report.html:118
#: accounts/templates/accounts/push_account_report.html:77
#: accounts/templates/accounts/push_account_report.html:117
#: audits/handler.py:128
#: audits/handler.py:130
msgid "No"
msgstr "Não"
@@ -1926,6 +1919,18 @@ msgstr "Aprovador"
msgid "Users"
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
#: ops/serializers/job.py:92 terminal/const.py:88
#: 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"
msgstr "Propriedades personalizadas"
#: assets/models/asset/common.py:431
#: assets/models/asset/common.py:430
msgid "Can refresh asset hardware info"
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"
msgstr "Pode testar a conectividade do ativo"
#: assets/models/asset/common.py:433
#: assets/models/asset/common.py:432
msgid "Can match asset"
msgstr "Pode correspondências de ativos"
#: assets/models/asset/common.py:434
#: assets/models/asset/common.py:433
msgid "Can change asset nodes"
msgstr "Pode modificar o nó do ativo"
@@ -3614,7 +3619,7 @@ msgstr "Tarefas"
msgid "-"
msgstr "-"
#: audits/handler.py:128
#: audits/handler.py:130
msgid "Yes"
msgstr "Sim"
@@ -3903,35 +3908,35 @@ msgstr ""
"Não é permitido o uso de tokens de conexão reutilizáveis, as configurações "
"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"
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"
msgstr "A autorização expirou"
#: authentication/api/connection_token.py:488
#: authentication/api/connection_token.py:489
msgid "ACL action is reject: {}({})"
msgstr "Ação do ACL é rejeitar: {} ({})."
#: authentication/api/connection_token.py:492
#: authentication/api/connection_token.py:493
msgid "ACL action is review"
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"
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"
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"
msgstr "Ação ACL é facial online"
#: authentication/api/connection_token.py:539
#: authentication/api/connection_token.py:540
msgid "No available face feature"
msgstr "Não há características faciais disponíveis"
@@ -4013,7 +4018,7 @@ msgstr ""
msgid "Invalid token or cache refreshed."
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"
msgstr "Erro OpenID"
@@ -4240,16 +4245,16 @@ msgstr "Sua senha é inválida"
msgid "Please wait for %s seconds before retry"
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
msgid "Your password is too simple, please change it for security"
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"
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"
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): {}"
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"
msgstr "Usuário inválido"
#: authentication/mixins.py:99
#: authentication/mixins.py:132
msgid ""
"The administrator has enabled 'Only allow login from user source'. \n"
" 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"
" do usuário atual é {}, por favor, contate o administrador."
#: authentication/mixins.py:278
#: authentication/mixins.py:311
msgid "The MFA type ({}) is not enabled"
msgstr "Este método MFA ({}) não está ativado"
#: authentication/mixins.py:320
#: authentication/mixins.py:353
msgid "Please change your password"
msgstr "Por favor, altere sua senha."
@@ -4903,24 +4917,24 @@ msgstr "Deseja tentar novamente?"
msgid "LAN"
msgstr "Rede Local"
#: authentication/views/base.py:71
#: authentication/views/base.py:70
#: perms/templates/perms/_msg_permed_items_expire.html:18
msgid "If you have any question, please contact the administrator"
msgstr ""
"Em caso de dúvidas ou necessidades, por favor, entre em contato com o "
"administrador do sistema"
#: authentication/views/base.py:144
#: authentication/views/base.py:143
#, python-format
msgid "%s query user failed"
msgstr "%s Falha ao consultar o usuário"
#: authentication/views/base.py:152
#: authentication/views/base.py:151
#, python-format
msgid "The %s is already bound to another user"
msgstr "%s já está vinculado a outro usuário"
#: authentication/views/base.py:159
#: authentication/views/base.py:158
#, python-format
msgid "Binding %s successfully"
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"
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"
msgstr "Formato de arquivo enviado errado ou outro tipo de recurso do arquivo"
@@ -5604,7 +5618,7 @@ msgstr ""
msgid "App Labels"
msgstr "Gerenciar tags"
#: labels/models.py:15 settings/serializers/security.py:211
#: labels/models.py:15
msgid "Color"
msgstr "Cor"
@@ -7657,40 +7671,40 @@ msgid "Period clean"
msgstr "Limpeza Programada"
#: settings/serializers/cleaning.py:15
msgid "Login log retention days (day)"
msgstr "Logins (dias)"
msgid "Login log retention days"
msgstr "Número de dias para retenção de logs de login"
#: settings/serializers/cleaning.py:19
msgid "Task log retention days (day)"
msgstr "Log de tarefas (dias)"
msgid "Task log retention days"
msgstr "Número de dias para retenção de logs de tarefas"
#: settings/serializers/cleaning.py:23
msgid "Operate log retention days (day)"
msgstr "Registro de Operações (dias)"
msgid "Operate log retention days"
msgstr "Número de dias para retenção de logs de Ação"
#: settings/serializers/cleaning.py:27
msgid "password change log keep days (day)"
msgstr "Registro de Alteração de Senha"
msgid "Password change log retention days"
msgstr "Número de dias para retenção de logs de alteração de senha do usuário"
#: settings/serializers/cleaning.py:31
msgid "FTP log retention days (day)"
msgstr "Upload/Download (dias)"
msgid "FTP log retention days"
msgstr "Número de dias para retenção de registros de upload e download"
#: settings/serializers/cleaning.py:35
msgid "Cloud sync task history retention days (day)"
msgstr "Registros de Sincronização em Nuvem (dias)"
msgid "Cloud sync task history retention days"
msgstr "Número de dias para retenção de registros de sincronização na nuvem"
#: settings/serializers/cleaning.py:39
msgid "job execution retention days (day)"
msgstr "Histórico de Execuções do Centro de Trabalhos (dias)"
msgid "job execution retention days"
msgstr "Número de dias para retenção do histórico de execução de tarefas"
#: settings/serializers/cleaning.py:43
msgid "Activity log retention days (day)"
msgstr "Registros de Atividades (dias)"
msgid "Activity log retention days"
msgstr "Número de dias para retenção de registros de atividades"
#: settings/serializers/cleaning.py:46
msgid "Session log retention days (day)"
msgstr "Registros de Sessão (dias)"
msgid "Session log retention days"
msgstr "Número de dias para retenção de logs de sessão"
#: settings/serializers/cleaning.py:48
msgid ""
@@ -7701,8 +7715,10 @@ msgstr ""
" (afeta o armazenamento do banco de dados, OSS, etc não são afetados)"
#: settings/serializers/cleaning.py:53
msgid "Change secret and push record retention days (day)"
msgstr "Registro de Notificações de Alteração de Senha (dias)"
msgid "Change secret and push record retention days"
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
msgid "Subject"
@@ -8228,28 +8244,32 @@ msgid "Watermark"
msgstr "Ativar marca d'água"
#: settings/serializers/security.py:205
msgid "Watermark session content"
msgid "Session content"
msgstr "Conteúdo personalizado da marca d'água da sessão"
#: settings/serializers/security.py:208
msgid "Watermark console content"
msgstr "Página de gerenciamento, conteúdo personalizado de marca d'água"
msgid "Console content"
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
msgid "Watermark font size"
msgstr "Tamanho da fonte"
msgid "Font size"
msgstr "Tamanho da fonte (px)"
#: settings/serializers/security.py:217
msgid "Watermark height"
msgstr "Altura da marca d'água única"
msgid "Height"
msgstr "Altura (px)"
#: settings/serializers/security.py:220
msgid "Watermark width"
msgstr "Largura da marca d'água única"
msgid "Width"
msgstr "Largura (px)"
#: settings/serializers/security.py:223
msgid "Watermark rotate"
msgstr "Ângulo de rotação da marca d'água"
msgid "Rotate"
msgstr "Rotação (graus)"
#: settings/serializers/security.py:227
msgid "Max idle time (minute)"
@@ -8581,15 +8601,15 @@ msgstr "Falha na autenticação: (desconhecido): {}"
msgid "Authentication success: {}"
msgstr "Autenticação bem sucedida: {}"
#: settings/ws.py:226
#: settings/ws.py:228
msgid "No LDAP user was found"
msgstr "Não foi possível obter usuário LDAP"
#: settings/ws.py:235
#: settings/ws.py:237
msgid "Total {}, success {}, failure {}"
msgstr "Total de {}, sucesso {}, falha {}"
#: settings/ws.py:239
#: settings/ws.py:241
msgid ", disabled {}"
msgstr ", desativar {}"
@@ -11982,27 +12002,3 @@ msgstr "Importação de licença bem-sucedida"
#: xpack/plugins/license/api.py:53
msgid "Invalid license"
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 ""
msgstr ""
"Project-Id-Version: jumpserver\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-10-16 14:10+0800\n"
"PO-Revision-Date: 2025-09-26 11:16\n"
"POT-Creation-Date: 2025-11-06 15:37+0800\n"
"PO-Revision-Date: 2025-11-01 11:01\n"
"Last-Translator: ibuler <ibuler@qq.com>\n"
"Language-Team: Russian\n"
"Language: ru_RU\n"
@@ -19,14 +24,14 @@ msgstr ""
"X-Crowdin-Project-ID: 832018\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:362
msgid "Account already exists"
msgstr "Учетная запись уже существует"
msgstr "Учетная запись уже существует."
#: accounts/api/account/application.py:77
#: authentication/api/connection_token.py:452
#: authentication/api/connection_token.py:453
msgid "Account not found"
msgstr "Учетная запись не найдена"
@@ -464,7 +469,7 @@ msgstr ""
#: accounts/templates/accounts/push_account_report.html:78
#: accounts/templates/accounts/push_account_report.html:118
#: 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
#: audits/serializers.py:230 authentication/models/connection_token.py:42
#: 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/serializers/account/account.py:234
#: accounts/serializers/account/account.py:304
#: accounts/serializers/account/account.py:305
#: accounts/serializers/account/template.py:35
#: authentication/serializers/connect_token_secret.py:51
msgid "Su from"
@@ -526,13 +531,14 @@ msgstr "Статус изменения секрета"
#: accounts/models/account.py:107
#: accounts/models/automations/check_account.py:64
#: accounts/serializers/account/account.py:295
#: accounts/serializers/account/service.py:13
#: accounts/serializers/automations/change_secret.py:117
#: accounts/serializers/automations/change_secret.py:148
#: acls/serializers/base.py:112
#: acls/templates/acls/asset_login_reminder.html:11
#: 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
#: settings/serializers/msg.py:33 terminal/backends/command/models.py:18
#: 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/mixins/vault.py:49
#: accounts/serializers/account/account.py:492
#: accounts/serializers/account/account.py:498
#: accounts/serializers/account/base.py:20
#: authentication/models/temp_token.py:11
#: authentication/templates/authentication/_access_key_modal.html:31
@@ -798,7 +804,7 @@ msgid "Status"
msgstr "Статус"
#: 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/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:67
@@ -1027,7 +1033,7 @@ msgid "Verify asset account"
msgstr "Проверка УЗ актива"
#: 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/automations/change_secret.py:50
#: authentication/serializers/connect_token_secret.py:42
@@ -1266,54 +1272,46 @@ msgstr ""
msgid "Has secret"
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/ticket/general.py:280 tickets/serializers/super_ticket.py:14
msgid "State"
msgstr "Состояние"
#: accounts/serializers/account/account.py:297
#: accounts/serializers/account/account.py:298
msgid "Changed"
msgstr "Изменено"
#: accounts/serializers/account/account.py:307 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: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
#: accounts/serializers/account/account.py:410
#, python-format
msgid "Asset does not support this secret type: %s"
msgstr "Актив не поддерживает этот тип секрета: %s"
#: accounts/serializers/account/account.py:444
#: accounts/serializers/account/account.py:443
msgid "Account has exist"
msgstr "Учетная запись уже существует"
#: accounts/serializers/account/account.py:476
#: accounts/serializers/account/account.py:483
#: accounts/serializers/account/account.py:468
#: 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:88
#: assets/serializers/asset/common.py:425
msgid "Spec info"
msgstr "Специальная информация"
#: accounts/serializers/account/account.py:493
#: accounts/serializers/account/account.py:499
#: authentication/serializers/connect_token_secret.py:173
#: authentication/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:33
msgid "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/templates/acls/asset_login_reminder.html:8
#: acls/templates/acls/user_login_reminder.html:8
@@ -1338,7 +1336,7 @@ msgstr "ID"
msgid "User"
msgstr "Пользователь"
#: accounts/serializers/account/account.py:504
#: accounts/serializers/account/account.py:510
#: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:165 terminal/notifications.py:225
msgid "Date"
@@ -1784,7 +1782,7 @@ msgstr "Успешные УЗ"
#: accounts/templates/accounts/change_secret_report.html:118
#: accounts/templates/accounts/push_account_report.html:77
#: accounts/templates/accounts/push_account_report.html:117
#: audits/handler.py:128
#: audits/handler.py:130
msgid "No"
msgstr "Нет"
@@ -1907,6 +1905,18 @@ msgstr "Утверждающий"
msgid "Users"
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
#: ops/serializers/job.py:92 terminal/const.py:88
#: terminal/models/session/session.py:40 terminal/serializers/command.py:18
@@ -1966,7 +1976,7 @@ msgstr "Правила метода подключения"
#: acls/models/data_masking.py:13
msgid "Fixed Character Replacement"
msgstr "Фиксированная замена символов"
msgstr "Замена на фиксированные символы"
#: acls/models/data_masking.py:14
msgid "Hide Middle Characters"
@@ -1974,19 +1984,19 @@ msgstr "Скрыть средние символы"
#: acls/models/data_masking.py:15
msgid "Keep Prefix Only"
msgstr "Сохранить префикс"
msgstr "Сохранить только префикс"
#: acls/models/data_masking.py:16
msgid "Keep Suffix Only"
msgstr "Сохранить суффикс"
msgstr "Сохранить только суффикс"
#: acls/models/data_masking.py:21
msgid "Fields pattern"
msgstr "Скрыть имя столбца"
msgstr "Маскировать столбцы"
#: acls/models/data_masking.py:27 acls/serializers/data_masking.py:14
msgid "Masking Method"
msgstr "Метод маскировки"
msgstr "Метод маскирования"
#: acls/models/data_masking.py:31
msgid "Mask Pattern"
@@ -2677,19 +2687,19 @@ msgstr "Собранные данные"
msgid "Custom info"
msgstr "Пользовательские атрибуты"
#: assets/models/asset/common.py:431
#: assets/models/asset/common.py:430
msgid "Can refresh asset hardware info"
msgstr "Обновление информации об оборудовании актива"
#: assets/models/asset/common.py:432
#: assets/models/asset/common.py:431
msgid "Can test asset connectivity"
msgstr "Проверка доступности актива"
#: assets/models/asset/common.py:433
#: assets/models/asset/common.py:432
msgid "Can match asset"
msgstr "Сопоставление актива"
#: assets/models/asset/common.py:434
#: assets/models/asset/common.py:433
msgid "Can change asset nodes"
msgstr "Изменение папки актива"
@@ -3600,7 +3610,7 @@ msgstr "Задача"
msgid "-"
msgstr "-"
#: audits/handler.py:128
#: audits/handler.py:130
msgid "Yes"
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"
msgstr "Анонимная учетная запись не поддерживается для этого актива"
#: authentication/api/connection_token.py:455
#: authentication/api/connection_token.py:456
msgid "Permission expired"
msgstr "Разрешение истекло"
#: authentication/api/connection_token.py:488
#: authentication/api/connection_token.py:489
msgid "ACL action is reject: {}({})"
msgstr "Действие правила — запрет: {}({})"
#: authentication/api/connection_token.py:492
#: authentication/api/connection_token.py:493
msgid "ACL action is review"
msgstr "Действие правила — проверка"
#: authentication/api/connection_token.py:502
#: authentication/api/connection_token.py:503
msgid "ACL action is face verify"
msgstr "Действие правила — идентификация по лицу"
#: authentication/api/connection_token.py:507
#: authentication/api/connection_token.py:508
msgid "ACL action not supported for this asset"
msgstr "Правило входа в актив не поддерживает текущий актив"
#: authentication/api/connection_token.py:514
#: authentication/api/connection_token.py:515
msgid "ACL action is face online"
msgstr "Действие правила — онлайн распознавание лица."
#: authentication/api/connection_token.py:539
#: authentication/api/connection_token.py:540
msgid "No available face feature"
msgstr "Нет доступных характеристик лица"
@@ -3955,7 +3965,7 @@ msgstr "Забыли пароль"
#: authentication/api/password.py:70 authentication/mfa/email.py:42
msgid "The validity period of the verification code is {} minute"
msgstr "Срок действия кода проверки составляет {} минут."
msgstr "Срок действия кода проверки: {} мин"
#: authentication/apps.py:7
msgid "App Authentication"
@@ -3996,7 +4006,7 @@ msgstr ""
msgid "Invalid token or cache refreshed."
msgstr "Обновлённый токен или кэш недействителен."
#: authentication/backends/oidc/views.py:175
#: authentication/backends/oidc/views.py:137
msgid "OpenID Error"
msgstr "Ошибка OpenID"
@@ -4224,16 +4234,16 @@ msgstr "Ваш пароль недействителен"
msgid "Please wait for %s seconds before retry"
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
msgid "Your password is too simple, please change it for security"
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"
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"
msgstr ""
"Срок действия вашего пароля истек, пожалуйста, сбросьте его перед входом в "
@@ -4354,11 +4364,20 @@ msgstr "Удалите номер телефона для отключения"
msgid "Authentication failed (before login check failed): {}"
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"
msgstr "Недействительный пользователь"
#: authentication/mixins.py:99
#: authentication/mixins.py:132
msgid ""
"The administrator has enabled 'Only allow login from user source'. \n"
" The current user source is {}. Please contact the administrator."
@@ -4366,11 +4385,11 @@ msgstr ""
"Администратор включил «Разрешить вход только из источника пользователя».\n"
" Текущий источник пользователя — {}. Обратитесь к администратору."
#: authentication/mixins.py:278
#: authentication/mixins.py:311
msgid "The MFA type ({}) is not enabled"
msgstr "Способ МФА ({}) не включен"
#: authentication/mixins.py:320
#: authentication/mixins.py:353
msgid "Please change your password"
msgstr "Пожалуйста, измените свой пароль"
@@ -4890,22 +4909,22 @@ msgstr "Хотите попробовать снова?"
msgid "LAN"
msgstr "Локальная сеть"
#: authentication/views/base.py:71
#: authentication/views/base.py:70
#: perms/templates/perms/_msg_permed_items_expire.html:18
msgid "If you have any question, please contact the administrator"
msgstr "Если у вас есть вопросы, пожалуйста, свяжитесь с администратором"
#: authentication/views/base.py:144
#: authentication/views/base.py:143
#, python-format
msgid "%s query user failed"
msgstr "Ошибка при запросе пользователя %s"
#: authentication/views/base.py:152
#: authentication/views/base.py:151
#, python-format
msgid "The %s is already bound to another user"
msgstr "%s уже привязан к другому пользователю"
#: authentication/views/base.py:159
#: authentication/views/base.py:158
#, python-format
msgid "Binding %s successfully"
msgstr "Привязка %s выполнена успешно"
@@ -5048,7 +5067,7 @@ msgstr "Не удалось получить пользователя WeCom"
msgid "Please login with a password and then bind the WeCom"
msgstr "Пожалуйста, войдите с паролем, а затем привяжите WeCom"
#: common/api/action.py:68
#: common/api/action.py:80
msgid "Request file format may be wrong"
msgstr "Неверный формат загружаемого файла или файл другого типа ресурсов"
@@ -5589,7 +5608,7 @@ msgstr ""
msgid "App Labels"
msgstr "Управление тегами"
#: labels/models.py:15 settings/serializers/security.py:211
#: labels/models.py:15
msgid "Color"
msgstr "Цвет"
@@ -6779,11 +6798,11 @@ msgstr "Панель смены пароля УЗ"
#: reports/views.py:181
msgid "Failed to send email: "
msgstr "Не удалось отправить письмо"
msgstr "Не удалось отправить письмо "
#: reports/views.py:182
msgid "Email sent successfully to "
msgstr "Успешно отправлено письмо."
msgstr "Письмо успешно отправлено "
#: settings/api/chat.py:41
msgid "Chat AI is not enabled"
@@ -7637,40 +7656,40 @@ msgid "Period clean"
msgstr "Периодическая очистка"
#: settings/serializers/cleaning.py:15
msgid "Login log retention days (day)"
msgstr "Журнал входа (дни)"
msgid "Login log retention days"
msgstr "Время хранения журнала входа"
#: settings/serializers/cleaning.py:19
msgid "Task log retention days (day)"
msgstr "Журнал задач (дни)"
msgid "Task log retention days"
msgstr "Время хранения журнала задач"
#: settings/serializers/cleaning.py:23
msgid "Operate log retention days (day)"
msgstr "Журнал операций (дни)"
msgid "Operate log retention days"
msgstr "Время хранения журнала действий"
#: settings/serializers/cleaning.py:27
msgid "password change log keep days (day)"
msgstr "Журнал смены пароля (дни)"
msgid "Password change log retention days"
msgstr "Время хранения журнала изменения пароля пользователя"
#: settings/serializers/cleaning.py:31
msgid "FTP log retention days (day)"
msgstr "Журнал загрузки/скачивания FTP (дни)"
msgid "FTP log retention days"
msgstr "Время хранения записей загрузки и скачивания"
#: settings/serializers/cleaning.py:35
msgid "Cloud sync task history retention days (day)"
msgstr "Журнал синхронизации с облаком (дни)"
msgid "Cloud sync task history retention days"
msgstr "Время хранения записей облачной синхронизации"
#: settings/serializers/cleaning.py:39
msgid "job execution retention days (day)"
msgstr "История выполнения заданий (дни)"
msgid "job execution retention days"
msgstr "Время хранения истории выполнения заданий"
#: settings/serializers/cleaning.py:43
msgid "Activity log retention days (day)"
msgstr "Журнал действий (дни)"
msgid "Activity log retention days"
msgstr "Время хранения 기록 активности"
#: settings/serializers/cleaning.py:46
msgid "Session log retention days (day)"
msgstr "Журнал сессий (дни)"
msgid "Session log retention days"
msgstr "Время хранения журнала сеансов"
#: settings/serializers/cleaning.py:48
msgid ""
@@ -7681,8 +7700,8 @@ msgstr ""
" удалены (влияет на хранение базы данных, но на OSS не влияет)"
#: settings/serializers/cleaning.py:53
msgid "Change secret and push record retention days (day)"
msgstr "Срок хранения записей смены и публикации паролей (дни)"
msgid "Change secret and push record retention days"
msgstr "Время хранения записей уведомлений о смене пароля аккаунта"
#: settings/serializers/feature.py:23 settings/serializers/msg.py:69
msgid "Subject"
@@ -8200,28 +8219,32 @@ msgid "Watermark"
msgstr "Водяной знак"
#: settings/serializers/security.py:205
msgid "Watermark session content"
msgstr "Водяной знак в сессиях"
msgid "Session content"
msgstr "Настраиваемое содержание водяного знака сессии"
#: settings/serializers/security.py:208
msgid "Watermark console content"
msgstr "Водяной знак в Консоли"
msgid "Console content"
msgstr "Настраиваемое содержание водяного знака страницы"
#: settings/serializers/security.py:211
msgid "Font color"
msgstr "Цвет шрифта"
#: settings/serializers/security.py:214
msgid "Watermark font size"
msgstr "Размер шрифта водяного знака"
msgid "Font size"
msgstr "Размер шрифта (пиксели)"
#: settings/serializers/security.py:217
msgid "Watermark height"
msgstr "Высота водяного знака"
msgid "Height"
msgstr "Высота (пиксели)"
#: settings/serializers/security.py:220
msgid "Watermark width"
msgstr "Ширина водяного знака"
msgid "Width"
msgstr "Ширина (пиксели)"
#: settings/serializers/security.py:223
msgid "Watermark rotate"
msgstr "Угол поворота водяного знака"
msgid "Rotate"
msgstr "Поворот (градусы)"
#: settings/serializers/security.py:227
msgid "Max idle time (minute)"
@@ -8549,15 +8572,15 @@ msgstr "Ошибка аутентификации: (неизвестная): {}"
msgid "Authentication success: {}"
msgstr "Успешная аутентификация: {}"
#: settings/ws.py:226
#: settings/ws.py:228
msgid "No LDAP user was found"
msgstr "Не удалось получить пользователей из LDAP"
#: settings/ws.py:235
#: settings/ws.py:237
msgid "Total {}, success {}, failure {}"
msgstr "Всего {} , успешно {} , неудачно {}"
#: settings/ws.py:239
#: settings/ws.py:241
msgid ", disabled {}"
msgstr ", отключено {}"
@@ -11943,3 +11966,21 @@ msgstr "Лицензия успешно импортирована"
#: xpack/plugins/license/api.py:53
msgid "Invalid license"
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 ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,14 +18,14 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\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:362
msgid "Account already exists"
msgstr "Tài khoản đã tồn tại"
#: accounts/api/account/application.py:77
#: authentication/api/connection_token.py:452
#: authentication/api/connection_token.py:453
msgid "Account not found"
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:118
#: 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
#: audits/serializers.py:230 authentication/models/connection_token.py:42
#: 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/serializers/account/account.py:234
#: accounts/serializers/account/account.py:304
#: accounts/serializers/account/account.py:305
#: accounts/serializers/account/template.py:35
#: authentication/serializers/connect_token_secret.py:51
msgid "Su from"
@@ -525,13 +525,14 @@ msgstr "Trạng thái đổi mật khẩu"
#: accounts/models/account.py:107
#: accounts/models/automations/check_account.py:64
#: accounts/serializers/account/account.py:295
#: accounts/serializers/account/service.py:13
#: accounts/serializers/automations/change_secret.py:117
#: accounts/serializers/automations/change_secret.py:148
#: acls/serializers/base.py:112
#: acls/templates/acls/asset_login_reminder.html:11
#: 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
#: settings/serializers/msg.py:33 terminal/backends/command/models.py:18
#: 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/mixins/vault.py:49
#: accounts/serializers/account/account.py:492
#: accounts/serializers/account/account.py:498
#: accounts/serializers/account/base.py:20
#: authentication/models/temp_token.py:11
#: authentication/templates/authentication/_access_key_modal.html:31
@@ -797,7 +798,7 @@ msgid "Status"
msgstr "Trạng thái"
#: 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/views/base.py:42 authentication/views/base.py:43
#: 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"
#: 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/automations/change_secret.py:50
#: 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"
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/ticket/general.py:280 tickets/serializers/super_ticket.py:14
msgid "State"
msgstr "Trạng thái"
#: accounts/serializers/account/account.py:297
#: accounts/serializers/account/account.py:298
msgid "Changed"
msgstr "Đã sửa đổi"
#: accounts/serializers/account/account.py:307 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: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
#: accounts/serializers/account/account.py:410
#, python-format
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"
#: accounts/serializers/account/account.py:444
#: accounts/serializers/account/account.py:443
msgid "Account has exist"
msgstr "Tài khoản đã tồn tại"
#: accounts/serializers/account/account.py:476
#: accounts/serializers/account/account.py:483
#: accounts/serializers/account/account.py:468
#: 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:88
#: assets/serializers/asset/common.py:425
msgid "Spec info"
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/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:33
msgid "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/templates/acls/asset_login_reminder.html:8
#: acls/templates/acls/user_login_reminder.html:8
@@ -1346,7 +1339,7 @@ msgstr "ID"
msgid "User"
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
#: terminal/notifications.py:165 terminal/notifications.py:225
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/push_account_report.html:77
#: accounts/templates/accounts/push_account_report.html:117
#: audits/handler.py:128
#: audits/handler.py:130
msgid "No"
msgstr "Không"
@@ -1922,6 +1915,18 @@ msgstr "Người phê duyệt"
msgid "Users"
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
#: ops/serializers/job.py:92 terminal/const.py:88
#: 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"
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"
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"
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"
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"
msgstr "Có thể sửa đổi nút tài sản"
@@ -3643,7 +3648,7 @@ msgstr "Nhiệm vụ"
msgid "-"
msgstr "-"
#: audits/handler.py:128
#: audits/handler.py:130
msgid "Yes"
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 "
"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"
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"
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: {}({})"
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"
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"
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"
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"
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"
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."
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"
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"
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
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"
#: 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"
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"
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): {}"
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"
msgstr "Người dùng không hợp lệ"
#: authentication/mixins.py:99
#: authentication/mixins.py:132
msgid ""
"The administrator has enabled 'Only allow login from user source'. \n"
" 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 "
"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"
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"
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"
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
msgid "If you have any question, please contact the administrator"
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ị "
"viên hệ thống"
#: authentication/views/base.py:144
#: authentication/views/base.py:143
#, python-format
msgid "%s query user failed"
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
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"
#: authentication/views/base.py:159
#: authentication/views/base.py:158
#, python-format
msgid "Binding %s successfully"
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 ""
"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"
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"
msgstr "Labels"
#: labels/models.py:15 settings/serializers/security.py:211
#: labels/models.py:15
msgid "Color"
msgstr "Màu sắc"
@@ -7685,40 +7699,40 @@ msgid "Period clean"
msgstr "Dọn dẹp định kỳ"
#: settings/serializers/cleaning.py:15
msgid "Login log retention days (day)"
msgstr "Nhật ký đăng nhập (ngày)"
msgid "Login log retention days"
msgstr "Ngày lưu giữ nhật ký đăng nhập"
#: settings/serializers/cleaning.py:19
msgid "Task log retention days (day)"
msgstr "Nhật ký tác vụ (ngày)"
msgid "Task log retention days"
msgstr "Ngày lưu giữ nhật ký nhiệm vụ"
#: settings/serializers/cleaning.py:23
msgid "Operate log retention days (day)"
msgstr "Nhật ký hành động (ngày)"
msgid "Operate log retention days"
msgstr "Ngày lưu giữ nhật ký hành động"
#: settings/serializers/cleaning.py:27
msgid "password change log keep days (day)"
msgstr "Nhật ký thay đổi mật khẩu"
msgid "Password change log retention days"
msgstr "Ngày lưu giữ nhật ký thay đổi mật khẩu người dùng"
#: settings/serializers/cleaning.py:31
msgid "FTP log retention days (day)"
msgstr "Tải lên và tải xuống (ngày)"
msgid "FTP log retention days"
msgstr "Ngày lưu giữ nhật ký tải lên và tải xuống"
#: settings/serializers/cleaning.py:35
msgid "Cloud sync task history retention days (day)"
msgstr "Hồ sơ đồng bộ đám mây (ngày)"
msgid "Cloud sync task history retention days"
msgstr "Ngày lưu giữ nhật ký đồng bộ đám mây"
#: settings/serializers/cleaning.py:39
msgid "job execution retention days (day)"
msgstr "Lịch sử thực hiện trung tâm công việc (ngày)"
msgid "job execution retention days"
msgstr "Ngày lưu giữ lịch sử thực hiện công việc"
#: settings/serializers/cleaning.py:43
msgid "Activity log retention days (day)"
msgstr "Hồ sơ hoạt động (ngày)"
msgid "Activity log retention days"
msgstr "Ngày lưu giữ nhật ký hoạt động"
#: settings/serializers/cleaning.py:46
msgid "Session log retention days (day)"
msgstr "Nhật ký phiên (ngày)"
msgid "Session log retention days"
msgstr "Ngày lưu giữ nhật ký phiên làm việc"
#: settings/serializers/cleaning.py:48
msgid ""
@@ -7729,8 +7743,8 @@ msgstr ""
"tới lưu trữ cơ sở dữ liệu, không ảnh hưởng tới OSS)"
#: settings/serializers/cleaning.py:53
msgid "Change secret and push record retention days (day)"
msgstr "Số ngày lưu giữ nhật ký đẩy thay đổi mật khẩu (ngày)"
msgid "Change secret and push record retention days"
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
msgid "Subject"
@@ -8247,28 +8261,32 @@ msgid "Watermark"
msgstr "Bật hình mờ"
#: settings/serializers/security.py:205
msgid "Watermark session content"
msgstr "Nội dung hình mờ cuộc trò chuyện tùy chỉnh"
msgid "Session content"
msgstr "Nội dung tùy chỉnh cho watermark phiên họp"
#: settings/serializers/security.py:208
msgid "Watermark console content"
msgstr "Nội dung hình mờ trang quản trị tùy chỉnh"
msgid "Console content"
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
msgid "Watermark font size"
msgstr "Font chữ và cỡ chữ"
msgid "Font size"
msgstr "Kích thước phông chữ (px)"
#: settings/serializers/security.py:217
msgid "Watermark height"
msgstr "Chiều cao hình mờ đơn lẻ"
msgid "Height"
msgstr "Chiều cao (px)"
#: settings/serializers/security.py:220
msgid "Watermark width"
msgstr "Chiều rộng hình mờ đơn lẻ"
msgid "Width"
msgstr "Chiều rộng (px)"
#: settings/serializers/security.py:223
msgid "Watermark rotate"
msgstr "Góc xoay hình mờ"
msgid "Rotate"
msgstr "Góc xoay (độ)"
#: settings/serializers/security.py:227
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: {}"
msgstr "Xác thực thành công: {}"
#: settings/ws.py:226
#: settings/ws.py:228
msgid "No LDAP user was found"
msgstr "Không lấy được người dùng LDAP"
#: settings/ws.py:235
#: settings/ws.py:237
msgid "Total {}, success {}, failure {}"
msgstr "Tổng cộng {} , thành công {} , thất bại {}"
#: settings/ws.py:239
#: settings/ws.py:241
msgid ", disabled {}"
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
msgid "Invalid license"
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 ""
"Project-Id-Version: JumpServer 0.3.3\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"
"Last-Translator: ibuler <ibuler@qq.com>\n"
"Language-Team: JumpServer team<ibuler@qq.com>\n"
@@ -17,14 +17,14 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\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:362
msgid "Account already exists"
msgstr "账号已存在"
#: accounts/api/account/application.py:77
#: authentication/api/connection_token.py:452
#: authentication/api/connection_token.py:453
msgid "Account not found"
msgstr "账号未找到"
@@ -458,7 +458,7 @@ msgstr "Vault 操作失败,请重试,或者检查 Vault 上的账号信息
#: accounts/templates/accounts/push_account_report.html:78
#: accounts/templates/accounts/push_account_report.html:118
#: 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
#: audits/serializers.py:230 authentication/models/connection_token.py:42
#: 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/serializers/account/account.py:234
#: accounts/serializers/account/account.py:304
#: accounts/serializers/account/account.py:305
#: accounts/serializers/account/template.py:35
#: authentication/serializers/connect_token_secret.py:51
msgid "Su from"
@@ -520,13 +520,14 @@ msgstr "改密状态"
#: accounts/models/account.py:107
#: accounts/models/automations/check_account.py:64
#: accounts/serializers/account/account.py:295
#: accounts/serializers/account/service.py:13
#: accounts/serializers/automations/change_secret.py:117
#: accounts/serializers/automations/change_secret.py:148
#: acls/serializers/base.py:112
#: acls/templates/acls/asset_login_reminder.html:11
#: 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
#: settings/serializers/msg.py:33 terminal/backends/command/models.py:18
#: 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/mixins/vault.py:49
#: accounts/serializers/account/account.py:492
#: accounts/serializers/account/account.py:498
#: accounts/serializers/account/base.py:20
#: authentication/models/temp_token.py:11
#: authentication/templates/authentication/_access_key_modal.html:31
@@ -786,7 +787,7 @@ msgid "Status"
msgstr "状态"
#: 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/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:67
@@ -1010,7 +1011,7 @@ msgid "Verify asset account"
msgstr "账号验证"
#: 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/automations/change_secret.py:50
#: authentication/serializers/connect_token_secret.py:42
@@ -1239,54 +1240,46 @@ msgstr "帐号已存在。字段:{fields} 必须是唯一的。"
msgid "Has secret"
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/ticket/general.py:280 tickets/serializers/super_ticket.py:14
msgid "State"
msgstr "状态"
#: accounts/serializers/account/account.py:297
#: accounts/serializers/account/account.py:298
msgid "Changed"
msgstr "已修改"
#: accounts/serializers/account/account.py:307 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: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
#: accounts/serializers/account/account.py:410
#, python-format
msgid "Asset does not support this secret type: %s"
msgstr "资产不支持账号类型: %s"
#: accounts/serializers/account/account.py:444
#: accounts/serializers/account/account.py:443
msgid "Account has exist"
msgstr "账号已存在"
#: accounts/serializers/account/account.py:476
#: accounts/serializers/account/account.py:483
#: accounts/serializers/account/account.py:468
#: 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:88
#: assets/serializers/asset/common.py:425
msgid "Spec info"
msgstr "特殊信息"
#: accounts/serializers/account/account.py:493
#: accounts/serializers/account/account.py:499
#: authentication/serializers/connect_token_secret.py:173
#: authentication/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:33
msgid "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/templates/acls/asset_login_reminder.html:8
#: acls/templates/acls/user_login_reminder.html:8
@@ -1310,7 +1303,7 @@ msgstr "ID"
msgid "User"
msgstr "用户"
#: accounts/serializers/account/account.py:504
#: accounts/serializers/account/account.py:510
#: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:165 terminal/notifications.py:225
msgid "Date"
@@ -1747,7 +1740,7 @@ msgstr "成功账号"
#: accounts/templates/accounts/change_secret_report.html:118
#: accounts/templates/accounts/push_account_report.html:77
#: accounts/templates/accounts/push_account_report.html:117
#: audits/handler.py:128
#: audits/handler.py:130
msgid "No"
msgstr "否"
@@ -1868,6 +1861,18 @@ msgstr "审批人"
msgid "Users"
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
#: ops/serializers/job.py:92 terminal/const.py:88
#: terminal/models/session/session.py:40 terminal/serializers/command.py:18
@@ -2621,19 +2626,19 @@ msgstr "收集资产硬件信息"
msgid "Custom info"
msgstr "自定义属性"
#: assets/models/asset/common.py:431
#: assets/models/asset/common.py:430
msgid "Can refresh asset hardware info"
msgstr "可以更新资产硬件信息"
#: assets/models/asset/common.py:432
#: assets/models/asset/common.py:431
msgid "Can test asset connectivity"
msgstr "可以测试资产连接性"
#: assets/models/asset/common.py:433
#: assets/models/asset/common.py:432
msgid "Can match asset"
msgstr "可以匹配资产"
#: assets/models/asset/common.py:434
#: assets/models/asset/common.py:433
msgid "Can change asset nodes"
msgstr "可以修改资产节点"
@@ -3518,7 +3523,7 @@ msgstr "任务"
msgid "-"
msgstr "-"
#: audits/handler.py:128
#: audits/handler.py:130
msgid "Yes"
msgstr "是"
@@ -3801,35 +3806,35 @@ msgstr "该操作需要验证您的 MFA, 请先开启并配置"
msgid "Reusable connection token is not allowed, global setting not enabled"
msgstr "不允许使用可重复使用的连接令牌,未启用全局设置"
#: authentication/api/connection_token.py:425
#: authentication/api/connection_token.py:426
msgid "Anonymous account is not supported for this asset"
msgstr "匿名账号不支持当前资产"
#: authentication/api/connection_token.py:455
#: authentication/api/connection_token.py:456
msgid "Permission expired"
msgstr "授权已过期"
#: authentication/api/connection_token.py:488
#: authentication/api/connection_token.py:489
msgid "ACL action is reject: {}({})"
msgstr "ACL 动作是拒绝: {}({})"
#: authentication/api/connection_token.py:492
#: authentication/api/connection_token.py:493
msgid "ACL action is review"
msgstr "ACL 动作是复核"
#: authentication/api/connection_token.py:502
#: authentication/api/connection_token.py:503
msgid "ACL action is face verify"
msgstr "ACL 动作是人脸验证"
#: authentication/api/connection_token.py:507
#: authentication/api/connection_token.py:508
msgid "ACL action not supported for this asset"
msgstr "资产登录规则不支持当前资产"
#: authentication/api/connection_token.py:514
#: authentication/api/connection_token.py:515
msgid "ACL action is face online"
msgstr "ACL 动作是人脸在线"
#: authentication/api/connection_token.py:539
#: authentication/api/connection_token.py:540
msgid "No available face feature"
msgstr "没有可用的人脸特征"
@@ -3905,7 +3910,7 @@ msgstr "无效的令牌头。符号字符串不应包含无效字符。"
msgid "Invalid token or cache refreshed."
msgstr "刷新的令牌或缓存无效。"
#: authentication/backends/oidc/views.py:175
#: authentication/backends/oidc/views.py:137
msgid "OpenID Error"
msgstr "OpenID 错误"
@@ -4125,16 +4130,16 @@ msgstr "您的密码无效"
msgid "Please wait for %s seconds before retry"
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
msgid "Your password is too simple, please change it for security"
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"
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"
msgstr "您的密码已过期,先修改再登录"
@@ -4251,21 +4256,29 @@ msgstr "清空手机号码禁用"
msgid "Authentication failed (before login check failed): {}"
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"
msgstr "无效的用户"
#: authentication/mixins.py:99
#: authentication/mixins.py:132
msgid ""
"The administrator has enabled 'Only allow login from user source'. \n"
" The current user source is {}. Please contact the administrator."
msgstr "管理员已开启'仅允许从用户来源登录',当前用户来源为{},请联系管理员。"
#: authentication/mixins.py:278
#: authentication/mixins.py:311
msgid "The MFA type ({}) is not enabled"
msgstr "该 MFA ({}) 方式没有启用"
#: authentication/mixins.py:320
#: authentication/mixins.py:353
msgid "Please change your password"
msgstr "请修改密码"
@@ -4750,22 +4763,22 @@ msgstr "是否重试 "
msgid "LAN"
msgstr "局域网"
#: authentication/views/base.py:71
#: authentication/views/base.py:70
#: perms/templates/perms/_msg_permed_items_expire.html:18
msgid "If you have any question, please contact the administrator"
msgstr "如果有疑问或需求,请联系系统管理员"
#: authentication/views/base.py:144
#: authentication/views/base.py:143
#, python-format
msgid "%s query user failed"
msgstr "%s 查询用户失败"
#: authentication/views/base.py:152
#: authentication/views/base.py:151
#, python-format
msgid "The %s is already bound to another user"
msgstr "%s 已绑定到另一个用户"
#: authentication/views/base.py:159
#: authentication/views/base.py:158
#, python-format
msgid "Binding %s successfully"
msgstr "绑定 %s 成功"
@@ -4905,7 +4918,7 @@ msgstr "从企业微信获取用户失败"
msgid "Please login with a password and then bind the WeCom"
msgstr "请使用密码登录,然后绑定企业微信"
#: common/api/action.py:68
#: common/api/action.py:80
msgid "Request file format may be wrong"
msgstr "上传的文件格式错误 或 其它类型资源的文件"
@@ -5429,7 +5442,7 @@ msgstr ""
msgid "App Labels"
msgstr "标签管理"
#: labels/models.py:15 settings/serializers/security.py:211
#: labels/models.py:15
msgid "Color"
msgstr "颜色"
@@ -7407,40 +7420,40 @@ msgid "Period clean"
msgstr "定時清掃"
#: settings/serializers/cleaning.py:15
msgid "Login log retention days (day)"
msgstr "登录日志 (天)"
msgid "Login log retention days"
msgstr "登录日志保留天数"
#: settings/serializers/cleaning.py:19
msgid "Task log retention days (day)"
msgstr "任务日志 (天)"
msgid "Task log retention days"
msgstr "任务日志保留天数"
#: settings/serializers/cleaning.py:23
msgid "Operate log retention days (day)"
msgstr "操作日志 (天)"
msgid "Operate log retention days"
msgstr "操作日志保留天数"
#: settings/serializers/cleaning.py:27
msgid "password change log keep days (day)"
msgstr "改密日志"
msgid "Password change log retention days"
msgstr "用户改密日志保留天数"
#: settings/serializers/cleaning.py:31
msgid "FTP log retention days (day)"
msgstr "上传下载 (天)"
msgid "FTP log retention days"
msgstr "上传下载记录保留天数"
#: settings/serializers/cleaning.py:35
msgid "Cloud sync task history retention days (day)"
msgstr "云同步记录 (天)"
msgid "Cloud sync task history retention days"
msgstr "云同步记录保留天数"
#: settings/serializers/cleaning.py:39
msgid "job execution retention days (day)"
msgstr "作业中心执行历史 (天)"
msgid "job execution retention days"
msgstr "作业执行历史保留天数"
#: settings/serializers/cleaning.py:43
msgid "Activity log retention days (day)"
msgstr "活动记录 (天)"
msgid "Activity log retention days"
msgstr "活动记录保留天数"
#: settings/serializers/cleaning.py:46
msgid "Session log retention days (day)"
msgstr "会话日志 (天)"
msgid "Session log retention days"
msgstr "会话日志保留天数"
#: settings/serializers/cleaning.py:48
msgid ""
@@ -7450,8 +7463,8 @@ msgstr ""
"会话、录像,命令记录超过该时长将会被清除 (影响数据库存储OSS 等不受影响)"
#: settings/serializers/cleaning.py:53
msgid "Change secret and push record retention days (day)"
msgstr "改密推送记录保留天数 (天)"
msgid "Change secret and push record retention days"
msgstr "账号改密推送记录保留天数"
#: settings/serializers/feature.py:23 settings/serializers/msg.py:69
msgid "Subject"
@@ -7933,28 +7946,32 @@ msgid "Watermark"
msgstr "开启水印"
#: settings/serializers/security.py:205
msgid "Watermark session content"
msgid "Session content"
msgstr "会话水印自定义内容"
#: settings/serializers/security.py:208
msgid "Watermark console content"
msgid "Console content"
msgstr "管理页面水印自定义内容"
#: settings/serializers/security.py:211
msgid "Font color"
msgstr "字体颜色"
#: settings/serializers/security.py:214
msgid "Watermark font size"
msgstr "字体字号"
msgid "Font size"
msgstr "字体大小 (px)"
#: settings/serializers/security.py:217
msgid "Watermark height"
msgstr "单个水印高度"
msgid "Height"
msgstr "高度 (px)"
#: settings/serializers/security.py:220
msgid "Watermark width"
msgstr "单个水印宽度"
msgid "Width"
msgstr "宽度 (px)"
#: settings/serializers/security.py:223
msgid "Watermark rotate"
msgstr "水印旋转角度"
msgid "Rotate"
msgstr "旋转 (度)"
#: settings/serializers/security.py:227
msgid "Max idle time (minute)"
@@ -8259,15 +8276,15 @@ msgstr "认证失败: (未知): {}"
msgid "Authentication success: {}"
msgstr "认证成功: {}"
#: settings/ws.py:226
#: settings/ws.py:228
msgid "No LDAP user was found"
msgstr "没有获取到 LDAP 用户"
#: settings/ws.py:235
#: settings/ws.py:237
msgid "Total {}, success {}, failure {}"
msgstr "总共 {},成功 {},失败 {}"
#: settings/ws.py:239
#: settings/ws.py:241
msgid ", disabled {}"
msgstr ", 禁用 {}"
@@ -11568,6 +11585,3 @@ msgstr "许可证导入成功"
#: xpack/plugins/license/api.py:53
msgid "Invalid license"
msgstr "许可证无效"
#~ msgid "domain_name"
#~ msgstr "域名称"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: JumpServer 0.3.3\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"
"Last-Translator: ibuler <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-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:362
msgid "Account already exists"
msgstr "帳號已存在"
#: accounts/api/account/application.py:77
#: authentication/api/connection_token.py:452
#: authentication/api/connection_token.py:453
msgid "Account not found"
msgstr "帳號未找到"
@@ -459,7 +459,7 @@ msgstr "Vault 操作失敗,請重試,或檢查 Vault 上的帳號信息。"
#: accounts/templates/accounts/push_account_report.html:78
#: accounts/templates/accounts/push_account_report.html:118
#: 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
#: audits/serializers.py:230 authentication/models/connection_token.py:42
#: 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/serializers/account/account.py:234
#: accounts/serializers/account/account.py:304
#: accounts/serializers/account/account.py:305
#: accounts/serializers/account/template.py:35
#: authentication/serializers/connect_token_secret.py:51
msgid "Su from"
@@ -521,13 +521,14 @@ msgstr "改密狀態"
#: accounts/models/account.py:107
#: accounts/models/automations/check_account.py:64
#: accounts/serializers/account/account.py:295
#: accounts/serializers/account/service.py:13
#: accounts/serializers/automations/change_secret.py:117
#: accounts/serializers/automations/change_secret.py:148
#: acls/serializers/base.py:112
#: acls/templates/acls/asset_login_reminder.html:11
#: 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
#: settings/serializers/msg.py:33 terminal/backends/command/models.py:18
#: 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/mixins/vault.py:49
#: accounts/serializers/account/account.py:492
#: accounts/serializers/account/account.py:498
#: accounts/serializers/account/base.py:20
#: authentication/models/temp_token.py:11
#: authentication/templates/authentication/_access_key_modal.html:31
@@ -793,7 +794,7 @@ msgid "Status"
msgstr "狀態"
#: 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/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:67
@@ -1017,7 +1018,7 @@ msgid "Verify asset account"
msgstr "帳號驗證"
#: 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/automations/change_secret.py:50
#: authentication/serializers/connect_token_secret.py:42
@@ -1241,54 +1242,46 @@ msgstr "帳號已存在。字段:{fields} 必須是唯一的。"
msgid "Has secret"
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/ticket/general.py:280 tickets/serializers/super_ticket.py:14
msgid "State"
msgstr "狀態"
#: accounts/serializers/account/account.py:297
#: accounts/serializers/account/account.py:298
msgid "Changed"
msgstr "已修改"
#: accounts/serializers/account/account.py:307 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: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
#: accounts/serializers/account/account.py:410
#, python-format
msgid "Asset does not support this secret type: %s"
msgstr "資產不支持帳號類型: %s"
#: accounts/serializers/account/account.py:444
#: accounts/serializers/account/account.py:443
msgid "Account has exist"
msgstr "帳號已存在"
#: accounts/serializers/account/account.py:476
#: accounts/serializers/account/account.py:483
#: accounts/serializers/account/account.py:468
#: 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:88
#: assets/serializers/asset/common.py:425
msgid "Spec info"
msgstr "特殊資訊"
#: accounts/serializers/account/account.py:493
#: accounts/serializers/account/account.py:499
#: authentication/serializers/connect_token_secret.py:173
#: authentication/templates/authentication/_access_key_modal.html:30
#: perms/models/perm_node.py:21 users/serializers/group.py:33
msgid "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/templates/acls/asset_login_reminder.html:8
#: acls/templates/acls/user_login_reminder.html:8
@@ -1313,7 +1306,7 @@ msgstr "ID"
msgid "User"
msgstr "用戶"
#: accounts/serializers/account/account.py:504
#: accounts/serializers/account/account.py:510
#: authentication/templates/authentication/_access_key_modal.html:33
#: terminal/notifications.py:165 terminal/notifications.py:225
msgid "Date"
@@ -1723,7 +1716,7 @@ msgstr "成功帳號"
#: accounts/templates/accounts/change_secret_report.html:118
#: accounts/templates/accounts/push_account_report.html:77
#: accounts/templates/accounts/push_account_report.html:117
#: audits/handler.py:128
#: audits/handler.py:130
msgid "No"
msgstr "否"
@@ -1845,6 +1838,18 @@ msgstr "審批人"
msgid "Users"
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
#: ops/serializers/job.py:92 terminal/const.py:88
#: terminal/models/session/session.py:40 terminal/serializers/command.py:18
@@ -2594,19 +2599,19 @@ msgstr "收集資產硬體資訊"
msgid "Custom info"
msgstr "自訂屬性"
#: assets/models/asset/common.py:431
#: assets/models/asset/common.py:430
msgid "Can refresh asset hardware info"
msgstr "可以更新資產硬體資訊"
#: assets/models/asset/common.py:432
#: assets/models/asset/common.py:431
msgid "Can test asset connectivity"
msgstr "可以測試資產連接性"
#: assets/models/asset/common.py:433
#: assets/models/asset/common.py:432
msgid "Can match asset"
msgstr "可以匹配資產"
#: assets/models/asset/common.py:434
#: assets/models/asset/common.py:433
msgid "Can change asset nodes"
msgstr "可以修改資產節點"
@@ -3479,7 +3484,7 @@ msgstr "任務"
msgid "-"
msgstr "-"
#: audits/handler.py:128
#: audits/handler.py:130
msgid "Yes"
msgstr "是"
@@ -3757,35 +3762,35 @@ msgstr "該操作需要驗證您的 MFA, 請先開啟並配置"
msgid "Reusable connection token is not allowed, global setting not enabled"
msgstr "不允許使用可重複使用的連接令牌,未啟用全局設置"
#: authentication/api/connection_token.py:425
#: authentication/api/connection_token.py:426
msgid "Anonymous account is not supported for this asset"
msgstr "匿名帳號不支持當前資產"
#: authentication/api/connection_token.py:455
#: authentication/api/connection_token.py:456
msgid "Permission expired"
msgstr "授權已過期"
#: authentication/api/connection_token.py:488
#: authentication/api/connection_token.py:489
msgid "ACL action is reject: {}({})"
msgstr "ACL 動作是拒絕: {}({})"
#: authentication/api/connection_token.py:492
#: authentication/api/connection_token.py:493
msgid "ACL action is review"
msgstr "ACL 動作是覆核"
#: authentication/api/connection_token.py:502
#: authentication/api/connection_token.py:503
msgid "ACL action is face verify"
msgstr "ACL Action 係人臉驗證"
#: authentication/api/connection_token.py:507
#: authentication/api/connection_token.py:508
msgid "ACL action not supported for this asset"
msgstr "資產登錄規則不支持當前資產"
#: authentication/api/connection_token.py:514
#: authentication/api/connection_token.py:515
msgid "ACL action is face online"
msgstr "ACL Action 係人臉在線"
#: authentication/api/connection_token.py:539
#: authentication/api/connection_token.py:540
msgid "No available face feature"
msgstr "沒有可用的人臉特徵"
@@ -3859,7 +3864,7 @@ msgstr "無效的令牌頭。符號字串不應包含無效字元。"
msgid "Invalid token or cache refreshed."
msgstr "刷新的令牌或快取無效。"
#: authentication/backends/oidc/views.py:175
#: authentication/backends/oidc/views.py:137
msgid "OpenID Error"
msgstr "OpenID 錯誤"
@@ -4077,16 +4082,16 @@ msgstr "您的密碼無效"
msgid "Please wait for %s seconds before retry"
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
msgid "Your password is too simple, please change it for security"
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"
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"
msgstr "您的密碼已過期,先修改再登錄"
@@ -4203,21 +4208,27 @@ msgstr "清空手機號碼禁用"
msgid "Authentication failed (before login check failed): {}"
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"
msgstr "無效的用戶"
#: authentication/mixins.py:99
#: authentication/mixins.py:132
msgid ""
"The administrator has enabled 'Only allow login from user source'. \n"
" The current user source is {}. Please contact the administrator."
msgstr "管理員已開啟'僅允許從用戶來源登錄',當前用戶來源為{},請聯絡管理員。"
#: authentication/mixins.py:278
#: authentication/mixins.py:311
msgid "The MFA type ({}) is not enabled"
msgstr "該 MFA ({}) 方式沒有啟用"
#: authentication/mixins.py:320
#: authentication/mixins.py:353
msgid "Please change your password"
msgstr "請修改密碼"
@@ -4701,22 +4712,22 @@ msgstr "是否重試 "
msgid "LAN"
msgstr "區域網路"
#: authentication/views/base.py:71
#: authentication/views/base.py:70
#: perms/templates/perms/_msg_permed_items_expire.html:18
msgid "If you have any question, please contact the administrator"
msgstr "如果有疑問或需求,請聯絡系統管理員"
#: authentication/views/base.py:144
#: authentication/views/base.py:143
#, python-format
msgid "%s query user failed"
msgstr "%s 查詢用戶失敗"
#: authentication/views/base.py:152
#: authentication/views/base.py:151
#, python-format
msgid "The %s is already bound to another user"
msgstr "%s 已綁定到另一個用戶"
#: authentication/views/base.py:159
#: authentication/views/base.py:158
#, python-format
msgid "Binding %s successfully"
msgstr "綁定 %s 成功"
@@ -4855,7 +4866,7 @@ msgstr "從企業微信獲取用戶失敗"
msgid "Please login with a password and then bind the WeCom"
msgstr "請使用密碼登錄,然後綁定企業微信"
#: common/api/action.py:68
#: common/api/action.py:80
msgid "Request file format may be wrong"
msgstr "上傳的檔案格式錯誤 或 其它類型資源的文件"
@@ -5372,7 +5383,7 @@ msgstr ""
msgid "App Labels"
msgstr "標籤管理"
#: labels/models.py:15 settings/serializers/security.py:211
#: labels/models.py:15
msgid "Color"
msgstr "顏色"
@@ -7314,40 +7325,40 @@ msgid "Period clean"
msgstr "定時清掃"
#: settings/serializers/cleaning.py:15
msgid "Login log retention days (day)"
msgstr "登入記錄 (天)"
msgid "Login log retention days"
msgstr "登入日誌保留天數"
#: settings/serializers/cleaning.py:19
msgid "Task log retention days (day)"
msgstr "工作紀錄 (天)"
msgid "Task log retention days"
msgstr "任務日誌保留天數"
#: settings/serializers/cleaning.py:23
msgid "Operate log retention days (day)"
msgstr "Action日誌 (天)"
msgid "Operate log retention days"
msgstr "操作日誌保留天數"
#: settings/serializers/cleaning.py:27
msgid "password change log keep days (day)"
msgstr "改密日誌 (天)"
msgid "Password change log retention days"
msgstr "用戶改密日誌保留天數"
#: settings/serializers/cleaning.py:31
msgid "FTP log retention days (day)"
msgstr "上傳下載 (天)"
msgid "FTP log retention days"
msgstr "上傳下載記錄保留天數"
#: settings/serializers/cleaning.py:35
msgid "Cloud sync task history retention days (day)"
msgstr "雲同步紀錄 (天)"
msgid "Cloud sync task history retention days"
msgstr "雲同步記錄保留天數"
#: settings/serializers/cleaning.py:39
msgid "job execution retention days (day)"
msgstr "作業中心執行歷史 (天)"
msgid "job execution retention days"
msgstr "作業執行歷史保留天數"
#: settings/serializers/cleaning.py:43
msgid "Activity log retention days (day)"
msgstr "活動紀錄 (天)"
msgid "Activity log retention days"
msgstr "活動記錄保留天數"
#: settings/serializers/cleaning.py:46
msgid "Session log retention days (day)"
msgstr "會話日誌 (天)"
msgid "Session log retention days"
msgstr "會話日誌保留天數"
#: settings/serializers/cleaning.py:48
msgid ""
@@ -7356,8 +7367,8 @@ msgid ""
msgstr "會話、錄影,命令記錄超過該時長將會被清除 (影響資料庫儲存OSS 等不受影響)"
#: settings/serializers/cleaning.py:53
msgid "Change secret and push record retention days (day)"
msgstr "改密推送記錄保留天數 (天)"
msgid "Change secret and push record retention days"
msgstr "帳號改密推送記錄保留天數"
#: settings/serializers/feature.py:23 settings/serializers/msg.py:69
msgid "Subject"
@@ -7820,28 +7831,32 @@ msgid "Watermark"
msgstr "開啟浮水印"
#: settings/serializers/security.py:205
msgid "Watermark session content"
msgid "Session content"
msgstr "會話水印自訂內容"
#: settings/serializers/security.py:208
msgid "Watermark console content"
msgid "Console content"
msgstr "管理頁面水印自訂內容"
#: settings/serializers/security.py:211
msgid "Font color"
msgstr "字體顏色"
#: settings/serializers/security.py:214
msgid "Watermark font size"
msgstr "字體字號"
msgid "Font size"
msgstr "字體大小 (px)"
#: settings/serializers/security.py:217
msgid "Watermark height"
msgstr "單個水印高度"
msgid "Height"
msgstr "高度 (px)"
#: settings/serializers/security.py:220
msgid "Watermark width"
msgstr "單個水印寬度"
msgid "Width"
msgstr "寬度 (px)"
#: settings/serializers/security.py:223
msgid "Watermark rotate"
msgstr "水印旋轉角度"
msgid "Rotate"
msgstr "旋轉 (度)"
#: settings/serializers/security.py:227
msgid "Max idle time (minute)"
@@ -8135,15 +8150,15 @@ msgstr "認證失敗: (未知): {}"
msgid "Authentication success: {}"
msgstr "認證成功: {}"
#: settings/ws.py:226
#: settings/ws.py:228
msgid "No LDAP user was found"
msgstr "沒有取得到 LDAP 用戶"
#: settings/ws.py:235
#: settings/ws.py:237
msgid "Total {}, success {}, failure {}"
msgstr "總共 {},成功 {},失敗 {}"
#: settings/ws.py:239
#: settings/ws.py:241
msgid ", disabled {}"
msgstr ",禁用 {}"
@@ -11397,25 +11412,3 @@ msgstr "許可證匯入成功"
#: xpack/plugins/license/api.py:53
msgid "Invalid license"
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": "Разрешения на действия",
"Address": "Адрес",
"AlreadyExistsPleaseRename": "Файл уже существует, пожалуйста, переименуйте его",
"Announcement: ": "Объявление:",
"Announcement: ": "Объявление: ",
"Authentication failed": "Ошибка аутентификации: неверное имя пользователя или пароль",
"AvailableShortcutKey": "Доступные горячие клавиши",
"Back": "Назад",

View File

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

View File

@@ -122,7 +122,7 @@
"AppletHelpText": "В процессе загрузки, если приложение отсутствует, оно будет создано; если уже существует, будет выполнено обновление.",
"AppletHostCreate": "Добавить сервер 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",
"AppletHostZoneHelpText": "Эта зона принадлежит Системной организации",
"AppletHosts": "Хост RemoteApp",
@@ -447,10 +447,10 @@
"DangerCommand": "Опасная команда",
"DangerousCommandNum": "Всего опасных команд",
"Dashboard": "Панель инструментов",
"DataMasking": "Демаскировка данных",
"DataMaskingFieldsPatternHelpTip": "Поддержка нескольких имен полей, разделенных запятой, поддержка подстановочных знаков *\nНапример:\nОдно имя поля: password означает, что будет проведено действие по хранению в тайне поля password.\nНесколько имен полей: password, secret означает сохранение в тайне полей password и secret.\nПодстановочный знак *: password* означает, что действие будет применено к полям, содержащим префикс password.\nПодстановочный знак *: .*password означает, что действие будет применено к полям, содержащим суффикс password.",
"DataMaskingRuleHelpHelpMsg": "При подключении к базе данных активов результаты запроса могут быть обработаны в соответствии с этим правилом для обеспечения безопасности данных.",
"DataMaskingRuleHelpHelpText": "При подключении к базе данных активов можно обезопасить результаты запроса в соответствии с данным правилом.",
"DataMasking": "Маскирование данных",
"DataMaskingFieldsPatternHelpTip": "Поддерживается нескольких имён полей, разделённых запятыми, а также использование подстановочного знака *.\nПримеры:\nОдно имя поля: password — выполняется маскирование только поля password.\nНесколько имён полей: password,secret — выполняется маскирование полей password и secret.\nПодстановочный знак *: password* — выполняется маскирование всех полей, имя которых начинается с password.\nПодстановочный знак .*: .*password — выполняется маскирование всех полей, имя которых оканчивается на password",
"DataMaskingRuleHelpHelpMsg": "При подключении к активу базы данных результаты запросов могут быть подвергнуты маскированию в соответствии с этим правилом",
"DataMaskingRuleHelpHelpText": "При подключении к активу базы данных можно выполнять маскирование результатов запросов в соответствии с этим правилом",
"Database": "База данных",
"DatabaseCreate": "Создать актив - база данных",
"DatabasePort": "Порт протокола базы данных",
@@ -1045,7 +1045,7 @@
"PrivilegedOnly": "Только привилегированные",
"PrivilegedTemplate": "Привилегированные",
"Processing": "В процессе",
"ProcessingMessage": "Задача в процессе, пожалуйста, подождите ⏳",
"ProcessingMessage": "Задача выполняется, пожалуйста, подождите ⏳",
"Product": "Продукт",
"ProfileSetting": "Данные профиля",
"Project": "Название проекта",

View File

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

View File

@@ -1,6 +1,6 @@
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.http.response import JsonResponse
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 ops.const import JobStatus
from orgs.caches import OrgResourceStatisticsCache
from orgs.utils import current_org
from terminal.const import RiskLevelChoices
from orgs.utils import current_org, filter_org_queryset
from terminal.const import RiskLevelChoices, CommandStorageType
from terminal.models import Session, CommandStorage
__all__ = ['IndexApi']
@@ -123,15 +123,18 @@ class DateTimeMixin:
return self.get_logs_queryset_filter(qs, 'date_start')
@lazyproperty
def command_queryset_list(self):
def command_type_queryset_list(self):
qs_list = []
for storage in CommandStorage.objects.all():
for storage in CommandStorage.objects.exclude(name='null'):
if not storage.is_valid():
continue
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_list.append((storage.type, qs))
return qs_list
@lazyproperty
@@ -143,7 +146,7 @@ class DateTimeMixin:
class DatesLoginMetricMixin:
dates_list: list
date_start_end: tuple
command_queryset_list: list
command_type_queryset_list: list
sessions_queryset: Session.objects
ftp_logs_queryset: FTPLog.objects
job_logs_queryset: JobLog.objects
@@ -261,11 +264,25 @@ class DatesLoginMetricMixin:
@lazyproperty
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
danger_amount = 0
for qs in self.command_queryset_list:
total_amount += qs.count()
danger_amount += qs.filter(risk_level=RiskLevelChoices.reject).count()
for tp, qs in self.command_type_queryset_list:
t, d = _count_pair(tp, qs)
total_amount += t
danger_amount += d
return total_amount, danger_amount
@lazyproperty

View File

@@ -160,6 +160,19 @@ class SSHClient:
try:
self.client.connect(**self.connect_params)
self._channel = self.client.invoke_shell()
# Always perform a gentle handshake that works for servers and
# network devices: drain banner, brief settle, send newline, then
# read in quiet mode to avoid blocking on missing prompt.
try:
while self._channel.recv_ready():
self._channel.recv(self.buffer_size)
except Exception:
pass
time.sleep(0.5)
try:
self._channel.send(b'\n')
except Exception:
pass
self._get_match_recv()
self.switch_user()
except Exception as error:
@@ -186,16 +199,40 @@ class SSHClient:
def _get_match_recv(self, answer_reg=DEFAULT_RE):
buffer_str = ''
prev_str = ''
last_change_ts = time.time()
# Quiet-mode reading only when explicitly requested, or when both
# answer regex and prompt are permissive defaults.
use_regex_match = True
if answer_reg == DEFAULT_RE and self.prompt == DEFAULT_RE:
use_regex_match = False
check_reg = self.prompt if answer_reg == DEFAULT_RE else answer_reg
while True:
if self.channel.recv_ready():
chunk = self.channel.recv(self.buffer_size).decode('utf-8', 'replace')
buffer_str += chunk
if chunk:
buffer_str += chunk
last_change_ts = time.time()
if buffer_str and buffer_str != prev_str:
if self.__match(check_reg, buffer_str):
if use_regex_match:
if self.__match(check_reg, buffer_str):
break
else:
# Wait for a brief quiet period to approximate completion
if time.time() - last_change_ts > 0.3:
break
elif not use_regex_match and buffer_str:
# In quiet mode with some data already seen, also break after
# a brief quiet window even if buffer hasn't changed this loop.
if time.time() - last_change_ts > 0.3:
break
elif not use_regex_match and not buffer_str:
# No data at all in quiet mode; bail after short wait
if time.time() - last_change_ts > 1.0:
break
prev_str = buffer_str
time.sleep(0.01)

View File

@@ -76,7 +76,8 @@ class JMSInventory:
proxy_command_list.extend(["-W", "%h:%p", "-q"])
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:
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_bulk.generics import BulkModelViewSet
from common.api.action import RenderToJsonMixin
from common.drf.filters import IDSpmFilterBackend
from users.utils import LoginIpBlockUtil
from ..models import LeakPasswords
@@ -61,7 +62,7 @@ class UnlockIPSecurityAPI(CreateAPIView):
return Response(status=200)
class LeakPasswordViewSet(BulkModelViewSet):
class LeakPasswordViewSet(BulkModelViewSet, RenderToJsonMixin):
serializer_class = LeakPasswordPSerializer
model = LeakPasswords
rbac_perms = {
@@ -70,6 +71,12 @@ class LeakPasswordViewSet(BulkModelViewSet):
queryset = LeakPasswords.objects.none()
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):
return LeakPasswords.objects.using('sqlite').all()

View File

@@ -12,43 +12,43 @@ class CleaningSerializer(serializers.Serializer):
LOGIN_LOG_KEEP_DAYS = serializers.IntegerField(
min_value=MIN_VALUE, max_value=9999,
label=_("Login log retention days (day)"),
label=_("Login log retention days"),
)
TASK_LOG_KEEP_DAYS = serializers.IntegerField(
min_value=MIN_VALUE, max_value=9999,
label=_("Task log retention days (day)"),
label=_("Task log retention days"),
)
OPERATE_LOG_KEEP_DAYS = serializers.IntegerField(
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(
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(
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(
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(
min_value=MIN_VALUE, max_value=9999,
label=_("job execution retention days (day)"),
label=_("job execution retention days"),
)
ACTIVITY_LOG_KEEP_DAYS = serializers.IntegerField(
min_value=MIN_VALUE, max_value=9999,
label=_("Activity log retention days (day)"),
label=_("Activity log retention days"),
)
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=_(
'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(
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'),
)
SECURITY_WATERMARK_SESSION_CONTENT = serializers.CharField(
required=False, label=_('Watermark session content'),
required=False, label=_('Session content'),
)
SECURITY_WATERMARK_CONSOLE_CONTENT = serializers.CharField(
required=False, label=_("Watermark console content")
required=False, label=_("Console content")
)
SECURITY_WATERMARK_COLOR = serializers.CharField(
max_length=32, default="", label=_("Color")
max_length=32, default="", label=_("Font color")
)
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(
required=False, label=_('Watermark height'), default=200
required=False, label=_('Height'), default=200
)
SECURITY_WATERMARK_WIDTH = serializers.IntegerField(
required=False, label=_('Watermark width'), default=200
required=False, label=_('Width'), default=200
)
SECURITY_WATERMARK_ROTATE = serializers.IntegerField(
required=False, label=_('Watermark rotate'), default=45
required=False, label=_('Rotate'), default=45
)
SECURITY_MAX_IDLE_TIME = serializers.IntegerField(
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_to = self.form.cleaned_data.get('date_to')
filters = {}
_filters = {}
if date_from:
date_from = date_from.timestamp()
filters['timestamp__gte'] = date_from
_filters['timestamp__gte'] = date_from
if date_to:
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
def filter_by_asset_id(self, queryset, name, value):

View File

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

View File

@@ -68,14 +68,14 @@ dependencies = [
'ipip-ipdb==1.6.1',
'pywinrm==0.4.3',
'python-nmap==0.7.1',
'django==4.2.24',
'django==4.1.13',
'django-bootstrap3==23.4',
'django-filter==23.2',
'django-formtools==2.5.1',
'django-ranged-response==0.2.0',
'django-simple-captcha==0.5.18',
'django-timezone-field==5.1',
'djangorestframework==3.16.1',
'djangorestframework==3.14.0',
'djangorestframework-bulk==0.2.1',
'django-simple-history==3.6.0',
'django-private-storage==3.1',