Compare commits
61 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
be0f04862a | |
|
|
1a3fb2f0db | |
|
|
4cd70efe66 | |
|
|
28700c01c8 | |
|
|
4524822245 | |
|
|
9d04fda018 | |
|
|
01c277cd1e | |
|
|
c4b3531d72 | |
|
|
8870d1ef9e | |
|
|
6c5086a083 | |
|
|
e9f762a982 | |
|
|
d4d4cadbcd | |
|
|
5e56590405 | |
|
|
ad8c0f6664 | |
|
|
47dd6babfc | |
|
|
691d1c4dba | |
|
|
ac485804d5 | |
|
|
51e5fdb301 | |
|
|
69c4d613f7 | |
|
|
1ad825bf0d | |
|
|
a286cb9343 | |
|
|
1eb489bb2d | |
|
|
4334ae9e5e | |
|
|
f2e346a0c3 | |
|
|
dc20b06431 | |
|
|
387a9248fc | |
|
|
705fd6385f | |
|
|
0ccf36621f | |
|
|
a9ae12fc2c | |
|
|
7b1a25adde | |
|
|
a1b5eb1cd8 | |
|
|
24ac642c5e | |
|
|
e4f5e21219 | |
|
|
a2aae9db47 | |
|
|
206c43cf75 | |
|
|
019a657ec3 | |
|
|
fad60ee40f | |
|
|
1728412793 | |
|
|
3e93034fbc | |
|
|
f4b3a7d73a | |
|
|
3781c40179 | |
|
|
fab6219cea | |
|
|
dd0cacb4bc | |
|
|
b8639601a1 | |
|
|
ab9882c9c1 | |
|
|
77a7b74b15 | |
|
|
4bc05865f1 | |
|
|
bec9e4f3a7 | |
|
|
359adf3dbb | |
|
|
ac54bb672c | |
|
|
9e3ba00bc4 | |
|
|
2ec9a43317 | |
|
|
06be56ef06 | |
|
|
b2a618b206 | |
|
|
1039c2e320 | |
|
|
8d7267400d | |
|
|
d67e473884 | |
|
|
70068c9253 | |
|
|
d68babb2e1 | |
|
|
afb6f466d5 | |
|
|
453ad331ee |
|
|
@ -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"]
|
||||
}
|
||||
|
|
@ -31,8 +31,6 @@ jobs:
|
|||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
with:
|
||||
image: tonistiigi/binfmt:qemu-v7.0.0-28
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
|
|
|||
|
|
@ -0,0 +1,123 @@
|
|||
name: Cleanup PR Branches
|
||||
|
||||
on:
|
||||
schedule:
|
||||
# 每天凌晨2点运行
|
||||
- cron: '0 2 * * *'
|
||||
workflow_dispatch:
|
||||
# 允许手动触发
|
||||
inputs:
|
||||
dry_run:
|
||||
description: 'Dry run mode (default: true)'
|
||||
required: false
|
||||
default: 'true'
|
||||
type: boolean
|
||||
|
||||
jobs:
|
||||
cleanup-branches:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # 获取所有分支和提交历史
|
||||
|
||||
- name: Setup Git
|
||||
run: |
|
||||
git config --global user.name "GitHub Actions"
|
||||
git config --global user.email "actions@github.com"
|
||||
|
||||
- name: Get dry run setting
|
||||
id: dry-run
|
||||
run: |
|
||||
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
||||
echo "dry_run=${{ github.event.inputs.dry_run }}" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "dry_run=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Cleanup branches
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
DRY_RUN: ${{ steps.dry-run.outputs.dry_run }}
|
||||
run: |
|
||||
echo "Starting branch cleanup..."
|
||||
echo "Dry run mode: $DRY_RUN"
|
||||
|
||||
# 获取所有本地分支
|
||||
git fetch --all --prune
|
||||
|
||||
# 获取以 pr 或 repr 开头的分支
|
||||
branches=$(git branch -r | grep -E 'origin/(pr|repr)' | sed 's/origin\///' | grep -v 'HEAD')
|
||||
|
||||
echo "Found branches matching pattern:"
|
||||
echo "$branches"
|
||||
|
||||
deleted_count=0
|
||||
skipped_count=0
|
||||
|
||||
for branch in $branches; do
|
||||
echo ""
|
||||
echo "Processing branch: $branch"
|
||||
|
||||
# 检查分支是否有未合并的PR
|
||||
pr_info=$(gh pr list --head "$branch" --state open --json number,title,state 2>/dev/null)
|
||||
|
||||
if [ $? -eq 0 ] && [ "$pr_info" != "[]" ]; then
|
||||
echo " ⚠️ Branch has open PR(s), skipping deletion"
|
||||
echo " PR info: $pr_info"
|
||||
skipped_count=$((skipped_count + 1))
|
||||
continue
|
||||
fi
|
||||
|
||||
# 检查分支是否有已合并的PR(可选:如果PR已合并也可以删除)
|
||||
merged_pr_info=$(gh pr list --head "$branch" --state merged --json number,title,state 2>/dev/null)
|
||||
|
||||
if [ $? -eq 0 ] && [ "$merged_pr_info" != "[]" ]; then
|
||||
echo " ✅ Branch has merged PR(s), safe to delete"
|
||||
echo " Merged PR info: $merged_pr_info"
|
||||
else
|
||||
echo " ℹ️ No PRs found for this branch"
|
||||
fi
|
||||
|
||||
# 执行删除操作
|
||||
if [ "$DRY_RUN" = "true" ]; then
|
||||
echo " 🔍 [DRY RUN] Would delete branch: $branch"
|
||||
deleted_count=$((deleted_count + 1))
|
||||
else
|
||||
echo " 🗑️ Deleting branch: $branch"
|
||||
|
||||
# 删除远程分支
|
||||
if git push origin --delete "$branch" 2>/dev/null; then
|
||||
echo " ✅ Successfully deleted remote branch: $branch"
|
||||
deleted_count=$((deleted_count + 1))
|
||||
else
|
||||
echo " ❌ Failed to delete remote branch: $branch"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "=== Cleanup Summary ==="
|
||||
echo "Branches processed: $(echo "$branches" | wc -l)"
|
||||
echo "Branches deleted: $deleted_count"
|
||||
echo "Branches skipped: $skipped_count"
|
||||
|
||||
if [ "$DRY_RUN" = "true" ]; then
|
||||
echo ""
|
||||
echo "🔍 This was a DRY RUN - no branches were actually deleted"
|
||||
echo "To perform actual deletion, run this workflow manually with dry_run=false"
|
||||
fi
|
||||
|
||||
- name: Create summary
|
||||
if: always()
|
||||
run: |
|
||||
echo "## Branch Cleanup Summary" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**Workflow:** ${{ github.workflow }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**Run ID:** ${{ github.run_id }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**Dry Run:** ${{ steps.dry-run.outputs.dry_run }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**Triggered by:** ${{ github.event_name }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "Check the logs above for detailed information about processed branches." >> $GITHUB_STEP_SUMMARY
|
||||
|
|
@ -1,11 +1,9 @@
|
|||
name: 🔀 Sync mirror to Gitee
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- dev
|
||||
create:
|
||||
schedule:
|
||||
# 每天凌晨3点运行
|
||||
- cron: '0 3 * * *'
|
||||
|
||||
jobs:
|
||||
mirror:
|
||||
|
|
@ -14,7 +12,6 @@ jobs:
|
|||
steps:
|
||||
- name: mirror
|
||||
continue-on-error: true
|
||||
if: github.event_name == 'push' || (github.event_name == 'create' && github.event.ref_type == 'tag')
|
||||
uses: wearerequired/git-mirror-action@v1
|
||||
env:
|
||||
SSH_PRIVATE_KEY: ${{ secrets.GITEE_SSH_PRIVATE_KEY }}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
FROM jumpserver/core-base:20251014_095903 AS stage-build
|
||||
FROM jumpserver/core-base:20251113_092612 AS stage-build
|
||||
|
||||
ARG VERSION
|
||||
|
||||
|
|
@ -19,7 +19,7 @@ RUN set -ex \
|
|||
&& python manage.py compilemessages
|
||||
|
||||
|
||||
FROM jumpserver/core-base:python-3.11-slim-bullseye-v1
|
||||
FROM python:3.11-slim-trixie
|
||||
ENV LANG=en_US.UTF-8 \
|
||||
PATH=/opt/py3/bin:$PATH
|
||||
|
||||
|
|
@ -39,7 +39,7 @@ ARG TOOLS=" \
|
|||
ARG APT_MIRROR=http://deb.debian.org
|
||||
|
||||
RUN set -ex \
|
||||
&& sed -i "s@http://.*.debian.org@${APT_MIRROR}@g" /etc/apt/sources.list \
|
||||
&& sed -i "s@http://.*.debian.org@${APT_MIRROR}@g" /etc/apt/sources.list.d/debian.sources \
|
||||
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
|
||||
&& apt-get update > /dev/null \
|
||||
&& apt-get -y install --no-install-recommends ${DEPENDENCIES} \
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
FROM jumpserver/core-base:python-3.11-slim-bullseye-v1
|
||||
FROM python:3.11.14-slim-trixie
|
||||
ARG TARGETARCH
|
||||
COPY --from=ghcr.io/astral-sh/uv:0.6.14 /uv /uvx /usr/local/bin/
|
||||
# Install APT dependencies
|
||||
ARG DEPENDENCIES=" \
|
||||
ca-certificates \
|
||||
|
|
@ -22,7 +21,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked,id=core \
|
|||
set -ex \
|
||||
&& rm -f /etc/apt/apt.conf.d/docker-clean \
|
||||
&& echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache \
|
||||
&& sed -i "s@http://.*.debian.org@${APT_MIRROR}@g" /etc/apt/sources.list \
|
||||
&& sed -i "s@http://.*.debian.org@${APT_MIRROR}@g" /etc/apt/sources.list.d/debian.sources \
|
||||
&& apt-get update > /dev/null \
|
||||
&& apt-get -y install --no-install-recommends ${DEPENDENCIES} \
|
||||
&& echo "no" | dpkg-reconfigure dash
|
||||
|
|
@ -41,12 +40,10 @@ RUN set -ex \
|
|||
WORKDIR /opt/jumpserver
|
||||
|
||||
ARG PIP_MIRROR=https://pypi.org/simple
|
||||
ENV POETRY_PYPI_MIRROR_URL=${PIP_MIRROR}
|
||||
ENV ANSIBLE_COLLECTIONS_PATHS=/opt/py3/lib/python3.11/site-packages/ansible_collections
|
||||
ENV LANG=en_US.UTF-8 \
|
||||
PATH=/opt/py3/bin:$PATH
|
||||
|
||||
ENV UV_LINK_MODE=copy
|
||||
ENV SETUPTOOLS_SCM_PRETEND_VERSION=3.4.5
|
||||
|
||||
RUN --mount=type=cache,target=/root/.cache \
|
||||
--mount=type=bind,source=pyproject.toml,target=pyproject.toml \
|
||||
|
|
@ -54,6 +51,7 @@ RUN --mount=type=cache,target=/root/.cache \
|
|||
--mount=type=bind,source=requirements/collections.yml,target=collections.yml \
|
||||
--mount=type=bind,source=requirements/static_files.sh,target=utils/static_files.sh \
|
||||
set -ex \
|
||||
&& pip install uv -i${PIP_MIRROR} \
|
||||
&& uv venv \
|
||||
&& uv pip install -i${PIP_MIRROR} -r pyproject.toml \
|
||||
&& ln -sf $(pwd)/.venv /opt/py3 \
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ ARG TOOLS=" \
|
|||
nmap \
|
||||
telnet \
|
||||
vim \
|
||||
postgresql-client-13 \
|
||||
postgresql-client \
|
||||
wget \
|
||||
poppler-utils"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +0,0 @@
|
|||
FROM python:3.11-slim-bullseye
|
||||
ARG TARGETARCH
|
||||
# Install APT dependencies
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
RUN set -eux; \
|
||||
apt-get update; \
|
||||
apt-get -y --no-install-recommends upgrade; \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# upgrade pip and setuptools
|
||||
RUN pip install --no-cache-dir --upgrade pip setuptools wheel
|
||||
|
|
@ -77,7 +77,8 @@ JumpServer consists of multiple key components, which collectively form the func
|
|||
| [Luna](https://github.com/jumpserver/luna) | <a href="https://github.com/jumpserver/luna/releases"><img alt="Luna release" src="https://img.shields.io/github/release/jumpserver/luna.svg" /></a> | JumpServer Web Terminal |
|
||||
| [KoKo](https://github.com/jumpserver/koko) | <a href="https://github.com/jumpserver/koko/releases"><img alt="Koko release" src="https://img.shields.io/github/release/jumpserver/koko.svg" /></a> | JumpServer Character Protocol Connector |
|
||||
| [Lion](https://github.com/jumpserver/lion) | <a href="https://github.com/jumpserver/lion/releases"><img alt="Lion release" src="https://img.shields.io/github/release/jumpserver/lion.svg" /></a> | JumpServer Graphical Protocol Connector |
|
||||
| [Chen](https://github.com/jumpserver/chen) | <a href="https://github.com/jumpserver/chen/releases"><img alt="Chen release" src="https://img.shields.io/github/release/jumpserver/chen.svg" /> | JumpServer Web DB |
|
||||
| [Chen](https://github.com/jumpserver/chen) | <a href="https://github.com/jumpserver/chen/releases"><img alt="Chen release" src="https://img.shields.io/github/release/jumpserver/chen.svg" /> | JumpServer Web DB
|
||||
| [Client](https://github.com/jumpserver/clients) | <a href="https://github.com/jumpserver/clients/releases"><img alt="Clients release" src="https://img.shields.io/github/release/jumpserver/clients.svg" /> | JumpServer Client |
|
||||
| [Tinker](https://github.com/jumpserver/tinker) | <img alt="Tinker" src="https://img.shields.io/badge/release-private-red" /> | JumpServer Remote Application Connector (Windows) |
|
||||
| [Panda](https://github.com/jumpserver/Panda) | <img alt="Panda" src="https://img.shields.io/badge/release-private-red" /> | JumpServer EE Remote Application Connector (Linux) |
|
||||
| [Razor](https://github.com/jumpserver/razor) | <img alt="Chen" src="https://img.shields.io/badge/release-private-red" /> | JumpServer EE RDP Proxy Connector |
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
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
|
||||
from rest_framework.status import HTTP_200_OK
|
||||
from rest_framework.status import HTTP_200_OK, HTTP_400_BAD_REQUEST
|
||||
|
||||
from accounts import serializers
|
||||
from accounts.const import ChangeSecretRecordStatusChoice
|
||||
|
|
@ -184,12 +185,66 @@ 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)
|
||||
if not assets.exists():
|
||||
error = _("No valid assets found for account creation.")
|
||||
return Response(
|
||||
data={
|
||||
"detail": error,
|
||||
"code": "no_valid_assets"
|
||||
},
|
||||
status=HTTP_400_BAD_REQUEST
|
||||
)
|
||||
|
||||
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):
|
||||
|
|
|
|||
|
|
@ -25,7 +25,8 @@ class IntegrationApplicationViewSet(OrgBulkModelViewSet):
|
|||
}
|
||||
rbac_perms = {
|
||||
'get_once_secret': 'accounts.change_integrationapplication',
|
||||
'get_account_secret': 'accounts.view_integrationapplication'
|
||||
'get_account_secret': 'accounts.view_integrationapplication',
|
||||
'get_sdks_info': 'accounts.view_integrationapplication'
|
||||
}
|
||||
|
||||
def read_file(self, path):
|
||||
|
|
@ -36,7 +37,6 @@ class IntegrationApplicationViewSet(OrgBulkModelViewSet):
|
|||
|
||||
@action(
|
||||
['GET'], detail=False, url_path='sdks',
|
||||
permission_classes=[IsValidUser]
|
||||
)
|
||||
def get_sdks_info(self, request, *args, **kwargs):
|
||||
code_suffix_mapper = {
|
||||
|
|
|
|||
|
|
@ -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,26 +292,26 @@ 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', 'passphrase',
|
||||
'privileged', 'is_active', 'comment', 'template',
|
||||
'on_invalid', 'push_now', 'params', 'assets',
|
||||
'name', 'username', 'secret', 'secret_type', 'secret_reset',
|
||||
'passphrase', 'privileged', 'is_active', 'comment', 'template',
|
||||
'on_invalid', 'push_now', 'params',
|
||||
'su_from_username', 'source', 'source_id',
|
||||
]
|
||||
extra_kwargs = {
|
||||
|
|
@ -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'])
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
from collections import defaultdict
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import transaction
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.utils.translation import gettext as _
|
||||
from django_filters import rest_framework as drf_filters
|
||||
|
|
@ -113,7 +112,7 @@ class BaseAssetViewSet(OrgBulkModelViewSet):
|
|||
("accounts", AccountSerializer),
|
||||
)
|
||||
rbac_perms = (
|
||||
("match", "assets.match_asset"),
|
||||
("match", "assets.view_asset"),
|
||||
("platform", "assets.view_platform"),
|
||||
("gateways", "assets.view_gateway"),
|
||||
("accounts", "assets.view_account"),
|
||||
|
|
@ -181,32 +180,17 @@ class AssetViewSet(SuggestionMixin, BaseAssetViewSet):
|
|||
def sync_platform_protocols(self, request, *args, **kwargs):
|
||||
platform_id = request.data.get('platform_id')
|
||||
platform = get_object_or_404(Platform, pk=platform_id)
|
||||
assets = platform.assets.all()
|
||||
asset_ids = list(platform.assets.values_list('id', flat=True))
|
||||
platform_protocols = list(platform.protocols.values('name', 'port'))
|
||||
|
||||
platform_protocols = {
|
||||
p['name']: p['port']
|
||||
for p in platform.protocols.values('name', 'port')
|
||||
}
|
||||
asset_protocols_map = defaultdict(set)
|
||||
protocols = assets.prefetch_related('protocols').values_list(
|
||||
'id', 'protocols__name'
|
||||
)
|
||||
for asset_id, protocol in protocols:
|
||||
asset_id = str(asset_id)
|
||||
asset_protocols_map[asset_id].add(protocol)
|
||||
with transaction.atomic():
|
||||
if asset_ids:
|
||||
Protocol.objects.filter(asset_id__in=asset_ids).delete()
|
||||
if asset_ids and platform_protocols:
|
||||
objs = []
|
||||
for asset_id, protocols in asset_protocols_map.items():
|
||||
protocol_names = set(platform_protocols) - protocols
|
||||
if not protocol_names:
|
||||
continue
|
||||
for name in protocol_names:
|
||||
objs.append(
|
||||
Protocol(
|
||||
name=name,
|
||||
port=platform_protocols[name],
|
||||
asset_id=asset_id,
|
||||
)
|
||||
)
|
||||
for aid in asset_ids:
|
||||
for p in platform_protocols:
|
||||
objs.append(Protocol(name=p['name'], port=p['port'], asset_id=aid))
|
||||
Protocol.objects.bulk_create(objs)
|
||||
return Response(status=status.HTTP_200_OK)
|
||||
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ class NodeViewSet(SuggestionMixin, OrgBulkModelViewSet):
|
|||
search_fields = ('full_value',)
|
||||
serializer_class = serializers.NodeSerializer
|
||||
rbac_perms = {
|
||||
'match': 'assets.match_node',
|
||||
'match': 'assets.view_node',
|
||||
'check_assets_amount_task': 'assets.change_node'
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -112,8 +112,10 @@ class PlatformProtocolViewSet(JMSModelViewSet):
|
|||
|
||||
|
||||
class PlatformAutomationMethodsApi(generics.ListAPIView):
|
||||
permission_classes = (IsValidUser,)
|
||||
queryset = PlatformAutomation.objects.none()
|
||||
rbac_perms = {
|
||||
'list': 'assets.view_platform'
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def automation_methods():
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -28,7 +28,8 @@ class MyAsset(JMSBaseModel):
|
|||
|
||||
@staticmethod
|
||||
def set_asset_custom_value(assets, user):
|
||||
my_assets = MyAsset.objects.filter(asset__in=assets, user=user).all()
|
||||
asset_ids = [asset.id for asset in assets]
|
||||
my_assets = MyAsset.objects.filter(asset_id__in=asset_ids, user=user).all()
|
||||
customs = {my_asset.asset.id: my_asset.custom_to_dict() for my_asset in my_assets}
|
||||
for asset in assets:
|
||||
custom = customs.get(asset.id)
|
||||
|
|
|
|||
|
|
@ -84,6 +84,7 @@ class PlatformAutomationSerializer(serializers.ModelSerializer):
|
|||
class PlatformProtocolSerializer(serializers.ModelSerializer):
|
||||
setting = MethodSerializer(required=False, label=_("Setting"))
|
||||
port_from_addr = serializers.BooleanField(label=_("Port from addr"), read_only=True)
|
||||
port = serializers.IntegerField(label=_("Port"), required=False, min_value=0, max_value=65535)
|
||||
|
||||
class Meta:
|
||||
model = PlatformProtocol
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -47,20 +47,21 @@ def on_m2m_changed(sender, action, instance, reverse, model, pk_set, **kwargs):
|
|||
objs = model.objects.filter(pk__in=pk_set)
|
||||
objs_display = [str(o) for o in objs]
|
||||
action = M2M_ACTION[action]
|
||||
changed_field = current_instance.get(field_name, [])
|
||||
changed_field = current_instance.get(field_name, {})
|
||||
changed_value = changed_field.get('value', [])
|
||||
|
||||
after, before, before_value = None, None, None
|
||||
if action == ActionChoices.create:
|
||||
before_value = list(set(changed_field) - set(objs_display))
|
||||
before_value = list(set(changed_value) - set(objs_display))
|
||||
elif action == ActionChoices.delete:
|
||||
before_value = list(
|
||||
set(changed_field).symmetric_difference(set(objs_display))
|
||||
)
|
||||
before_value = list(set(changed_value).symmetric_difference(set(objs_display)))
|
||||
|
||||
if changed_field:
|
||||
after = {field_name: changed_field}
|
||||
if before_value:
|
||||
before = {field_name: before_value}
|
||||
before_change_field = changed_field.copy()
|
||||
before_change_field['value'] = before_value
|
||||
before = {field_name: before_change_field}
|
||||
|
||||
if sorted(str(before)) == sorted(str(after)):
|
||||
return
|
||||
|
|
|
|||
|
|
@ -362,6 +362,7 @@ class ConnectionTokenViewSet(AuthFaceMixin, ExtraActionApiMixin, RootOrgViewMixi
|
|||
self.validate_serializer(serializer)
|
||||
return super().perform_create(serializer)
|
||||
|
||||
|
||||
def _insert_connect_options(self, data, user):
|
||||
connect_options = data.pop('connect_options', {})
|
||||
default_name_opts = {
|
||||
|
|
@ -564,7 +565,9 @@ class SuperConnectionTokenViewSet(ConnectionTokenViewSet):
|
|||
rbac_perms = {
|
||||
'create': 'authentication.add_superconnectiontoken',
|
||||
'renewal': 'authentication.add_superconnectiontoken',
|
||||
'list': 'authentication.view_superconnectiontoken',
|
||||
'check': 'authentication.view_superconnectiontoken',
|
||||
'retrieve': 'authentication.view_superconnectiontoken',
|
||||
'get_secret_detail': 'authentication.view_superconnectiontokensecret',
|
||||
'get_applet_info': 'authentication.view_superconnectiontoken',
|
||||
'release_applet_account': 'authentication.view_superconnectiontoken',
|
||||
|
|
@ -572,7 +575,12 @@ class SuperConnectionTokenViewSet(ConnectionTokenViewSet):
|
|||
}
|
||||
|
||||
def get_queryset(self):
|
||||
return ConnectionToken.objects.all()
|
||||
return ConnectionToken.objects.none()
|
||||
|
||||
def get_object(self):
|
||||
pk = self.kwargs.get(self.lookup_field)
|
||||
token = get_object_or_404(ConnectionToken, pk=pk)
|
||||
return token
|
||||
|
||||
def get_user(self, serializer):
|
||||
return serializer.validated_data.get('user')
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ from django.contrib import auth
|
|||
from django.http import HttpResponseRedirect
|
||||
from django.urls import reverse
|
||||
from django.utils.http import urlencode
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.views import View
|
||||
|
||||
from authentication.backends.base import BaseAuthCallbackClientView
|
||||
|
|
@ -61,6 +62,10 @@ class OAuth2AuthCallbackView(View, FlashMessageMixin):
|
|||
return HttpResponseRedirect(
|
||||
settings.AUTH_OAUTH2_AUTHENTICATION_REDIRECT_URI
|
||||
)
|
||||
else:
|
||||
if getattr(request, 'error_message', ''):
|
||||
response = self.get_failed_response('/', title=_('OAuth2 Error'), msg=request.error_message)
|
||||
return response
|
||||
|
||||
logger.debug(log_prompt.format('Redirect'))
|
||||
redirect_url = settings.AUTH_OAUTH2_PROVIDER_END_SESSION_ENDPOINT or '/'
|
||||
|
|
|
|||
|
|
@ -134,6 +134,7 @@ class OIDCAuthCallbackView(View, FlashMessageMixin):
|
|||
log_prompt = "Process GET requests [OIDCAuthCallbackView]: {}"
|
||||
logger.debug(log_prompt.format('Start'))
|
||||
callback_params = request.GET
|
||||
error_title = _("OpenID Error")
|
||||
|
||||
# Retrieve the state value that was previously generated. No state means that we cannot
|
||||
# authenticate the user (so a failure should be returned).
|
||||
|
|
@ -172,10 +173,9 @@ class OIDCAuthCallbackView(View, FlashMessageMixin):
|
|||
try:
|
||||
user = auth.authenticate(nonce=nonce, request=request, code_verifier=code_verifier)
|
||||
except IntegrityError as e:
|
||||
title = _("OpenID Error")
|
||||
msg = _('Please check if a user with the same username or email already exists')
|
||||
logger.error(e, exc_info=True)
|
||||
response = self.get_failed_response('/', title, msg)
|
||||
response = self.get_failed_response('/', error_title, msg)
|
||||
return response
|
||||
if user:
|
||||
logger.debug(log_prompt.format('Login: {}'.format(user)))
|
||||
|
|
@ -194,7 +194,6 @@ class OIDCAuthCallbackView(View, FlashMessageMixin):
|
|||
return HttpResponseRedirect(
|
||||
next_url or settings.AUTH_OPENID_AUTHENTICATION_REDIRECT_URI
|
||||
)
|
||||
|
||||
if 'error' in callback_params:
|
||||
logger.debug(
|
||||
log_prompt.format('Error in callback params: {}'.format(callback_params['error']))
|
||||
|
|
@ -205,9 +204,12 @@ class OIDCAuthCallbackView(View, FlashMessageMixin):
|
|||
# OpenID Connect Provider authenticate endpoint.
|
||||
logger.debug(log_prompt.format('Logout'))
|
||||
auth.logout(request)
|
||||
|
||||
redirect_url = settings.AUTH_OPENID_AUTHENTICATION_FAILURE_REDIRECT_URI
|
||||
if not user and getattr(request, 'error_message', ''):
|
||||
response = self.get_failed_response(redirect_url, title=error_title, msg=request.error_message)
|
||||
return response
|
||||
logger.debug(log_prompt.format('Redirect'))
|
||||
return HttpResponseRedirect(settings.AUTH_OPENID_AUTHENTICATION_FAILURE_REDIRECT_URI)
|
||||
return HttpResponseRedirect(redirect_url)
|
||||
|
||||
|
||||
class OIDCAuthCallbackClientView(BaseAuthCallbackClientView):
|
||||
|
|
|
|||
|
|
@ -252,6 +252,7 @@ class Saml2AuthCallbackView(View, PrepareRequestMixin, FlashMessageMixin):
|
|||
def post(self, request):
|
||||
log_prompt = "Process SAML2 POST requests: {}"
|
||||
post_data = request.POST
|
||||
error_title = _("SAML2 Error")
|
||||
|
||||
try:
|
||||
saml_instance = self.init_saml_auth(request)
|
||||
|
|
@ -279,15 +280,18 @@ class Saml2AuthCallbackView(View, PrepareRequestMixin, FlashMessageMixin):
|
|||
try:
|
||||
user = auth.authenticate(request=request, saml_user_data=saml_user_data)
|
||||
except IntegrityError as e:
|
||||
title = _("SAML2 Error")
|
||||
msg = _('Please check if a user with the same username or email already exists')
|
||||
logger.error(e, exc_info=True)
|
||||
response = self.get_failed_response('/', title, msg)
|
||||
response = self.get_failed_response('/', error_title, msg)
|
||||
return response
|
||||
if user and user.is_valid:
|
||||
logger.debug(log_prompt.format('Login: {}'.format(user)))
|
||||
auth.login(self.request, user)
|
||||
|
||||
if not user and getattr(request, 'error_message', ''):
|
||||
response = self.get_failed_response('/', title=error_title, msg=request.error_message)
|
||||
return response
|
||||
|
||||
logger.debug(log_prompt.format('Redirect'))
|
||||
redir = post_data.get('RelayState')
|
||||
if not redir or len(redir) == 0:
|
||||
|
|
|
|||
|
|
@ -114,12 +114,12 @@ class BlockMFAError(AuthFailedNeedLogMixin, AuthFailedError):
|
|||
super().__init__(username=username, request=request, ip=ip)
|
||||
|
||||
|
||||
class BlockLoginError(AuthFailedNeedBlockMixin, AuthFailedError):
|
||||
class BlockLoginError(AuthFailedNeedLogMixin, AuthFailedNeedBlockMixin, AuthFailedError):
|
||||
error = 'block_login'
|
||||
|
||||
def __init__(self, username, ip):
|
||||
def __init__(self, username, ip, request):
|
||||
self.msg = const.block_user_login_msg.format(settings.SECURITY_LOGIN_LIMIT_TIME)
|
||||
super().__init__(username=username, ip=ip)
|
||||
super().__init__(username=username, ip=ip, request=request)
|
||||
|
||||
|
||||
class SessionEmptyError(AuthFailedError):
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
import inspect
|
||||
import threading
|
||||
import time
|
||||
import uuid
|
||||
from functools import partial
|
||||
|
|
@ -12,6 +13,7 @@ from django.contrib.auth import (
|
|||
BACKEND_SESSION_KEY, load_backend,
|
||||
PermissionDenied, user_login_failed, _clean_credentials,
|
||||
)
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.core.cache import cache
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.shortcuts import reverse, redirect, get_object_or_404
|
||||
|
|
@ -46,6 +48,10 @@ def _get_backends(return_tuples=False):
|
|||
return backends
|
||||
|
||||
|
||||
class OnlyAllowExistUserAuthError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
auth._get_backends = _get_backends
|
||||
|
||||
|
||||
|
|
@ -54,6 +60,24 @@ def authenticate(request=None, **credentials):
|
|||
If the given credentials are valid, return a User object.
|
||||
之所以 hack 这个 authenticate
|
||||
"""
|
||||
|
||||
UserModel = get_user_model()
|
||||
original_get_or_create = UserModel.objects.get_or_create
|
||||
|
||||
thread_local = threading.local()
|
||||
thread_local.thread_id = threading.get_ident()
|
||||
|
||||
def custom_get_or_create(self, *args, **kwargs):
|
||||
logger.debug(f"get_or_create: thread_id={threading.get_ident()}, username={username}")
|
||||
if threading.get_ident() != thread_local.thread_id or not settings.ONLY_ALLOW_EXIST_USER_AUTH:
|
||||
return original_get_or_create(*args, **kwargs)
|
||||
create_username = kwargs.get('username')
|
||||
try:
|
||||
UserModel.objects.get(username=create_username)
|
||||
except UserModel.DoesNotExist:
|
||||
raise OnlyAllowExistUserAuthError
|
||||
return original_get_or_create(*args, **kwargs)
|
||||
|
||||
username = credentials.get('username')
|
||||
|
||||
temp_user = None
|
||||
|
|
@ -71,10 +95,19 @@ def authenticate(request=None, **credentials):
|
|||
# This backend doesn't accept these credentials as arguments. Try the next one.
|
||||
continue
|
||||
try:
|
||||
UserModel.objects.get_or_create = custom_get_or_create.__get__(UserModel.objects)
|
||||
user = backend.authenticate(request, **credentials)
|
||||
except PermissionDenied:
|
||||
# This backend says to stop in our tracks - this user should not be allowed in at all.
|
||||
break
|
||||
except OnlyAllowExistUserAuthError:
|
||||
request.error_message = _(
|
||||
'''The administrator has enabled "Only allow existing users to log in",
|
||||
and the current user is not in the user list. Please contact the administrator.'''
|
||||
)
|
||||
continue
|
||||
finally:
|
||||
UserModel.objects.get_or_create = original_get_or_create
|
||||
if user is None:
|
||||
continue
|
||||
|
||||
|
|
@ -176,9 +209,9 @@ class AuthPreCheckMixin:
|
|||
if not is_block:
|
||||
return
|
||||
logger.warning('Ip was blocked' + ': ' + username + ':' + ip)
|
||||
exception = errors.BlockLoginError(username=username, ip=ip)
|
||||
exception = errors.BlockLoginError(username=username, ip=ip, request=self.request)
|
||||
if raise_exception:
|
||||
raise errors.BlockLoginError(username=username, ip=ip)
|
||||
raise errors.BlockLoginError(username=username, ip=ip, request=self.request)
|
||||
else:
|
||||
return exception
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ from common.utils import get_logger
|
|||
from common.utils.common import get_request_ip
|
||||
from common.utils.django import reverse, get_object_or_none
|
||||
from users.models import User
|
||||
from users.signal_handlers import check_only_allow_exist_user_auth, bind_user_to_org_role
|
||||
from users.signal_handlers import bind_user_to_org_role, check_only_allow_exist_user_auth
|
||||
from .mixins import FlashMessageMixin
|
||||
|
||||
logger = get_logger(__file__)
|
||||
|
|
@ -55,7 +55,6 @@ class BaseLoginCallbackView(AuthMixin, FlashMessageMixin, IMClientMixin, View):
|
|||
)
|
||||
|
||||
if not check_only_allow_exist_user_auth(create):
|
||||
user.delete()
|
||||
return user, (self.msg_client_err, self.request.error_message)
|
||||
|
||||
setattr(user, f'{self.user_type}_id', user_id)
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
from django.conf import settings
|
||||
from typing import Callable
|
||||
|
||||
from django.utils.translation import gettext as _
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.throttling import UserRateThrottle
|
||||
from rest_framework.request import Request
|
||||
from rest_framework.response import Response
|
||||
|
||||
|
|
@ -14,8 +16,12 @@ from orgs.utils import current_org
|
|||
__all__ = ['SuggestionMixin', 'RenderToJsonMixin']
|
||||
|
||||
|
||||
class CustomUserRateThrottle(UserRateThrottle):
|
||||
rate = '60/m'
|
||||
|
||||
|
||||
class SuggestionMixin:
|
||||
suggestion_limit = 10
|
||||
suggestion_limit = settings.SUGGESTION_LIMIT
|
||||
|
||||
filter_queryset: Callable
|
||||
get_queryset: Callable
|
||||
|
|
@ -35,6 +41,7 @@ class SuggestionMixin:
|
|||
queryset = queryset.none()
|
||||
|
||||
queryset = self.filter_queryset(queryset)
|
||||
|
||||
queryset = queryset[:self.suggestion_limit]
|
||||
page = self.paginate_queryset(queryset)
|
||||
|
||||
|
|
@ -45,6 +52,11 @@ class SuggestionMixin:
|
|||
serializer = self.get_serializer(queryset, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
def get_throttles(self):
|
||||
if self.action == 'match':
|
||||
return [CustomUserRateThrottle()]
|
||||
return super().get_throttles()
|
||||
|
||||
|
||||
class RenderToJsonMixin:
|
||||
@action(methods=[POST, PUT], detail=False, url_path='render-to-json')
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
from rest_framework.filters import SearchFilter as SearchFilterBase
|
||||
import base64
|
||||
import json
|
||||
import logging
|
||||
|
|
@ -35,6 +36,14 @@ __all__ = [
|
|||
]
|
||||
|
||||
|
||||
class SearchFilter(SearchFilterBase):
|
||||
def get_search_terms(self, request):
|
||||
params = request.query_params.get(self.search_param, '') or request.query_params.get('search', '')
|
||||
params = params.replace('\x00', '') # strip null characters
|
||||
params = params.replace(',', ' ')
|
||||
return params.split()
|
||||
|
||||
|
||||
class BaseFilterSet(drf_filters.FilterSet):
|
||||
days = drf_filters.NumberFilter(method="filter_days")
|
||||
days__lt = drf_filters.NumberFilter(method="filter_days")
|
||||
|
|
|
|||
|
|
@ -1,9 +1,13 @@
|
|||
import re
|
||||
import uuid
|
||||
import time
|
||||
|
||||
from django.conf import settings
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.test import Client
|
||||
from django.urls import URLPattern, URLResolver
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth.models import AnonymousUser
|
||||
|
||||
from jumpserver.urls import api_v1
|
||||
|
||||
|
|
@ -85,50 +89,262 @@ known_error_urls = [
|
|||
'/api/v1/terminal/sessions/00000000-0000-0000-0000-000000000000/replay/download/',
|
||||
]
|
||||
|
||||
# API 白名单 - 普通用户可以访问的 API
|
||||
user_accessible_urls = known_unauth_urls + [
|
||||
# 添加更多普通用户可以访问的 API
|
||||
"/api/v1/settings/public/",
|
||||
"/api/v1/users/profile/",
|
||||
"/api/v1/users/change-password/",
|
||||
"/api/v1/users/logout/",
|
||||
"/api/v1/settings/chatai-prompts/",
|
||||
"/api/v1/authentication/confirm/",
|
||||
"/api/v1/users/connection-token/",
|
||||
"/api/v1/authentication/temp-tokens/",
|
||||
"/api/v1/notifications/backends/",
|
||||
"/api/v1/authentication/passkeys/",
|
||||
"/api/v1/orgs/orgs/current/",
|
||||
"/api/v1/tickets/apply-asset-tickets/",
|
||||
"/api/v1/ops/celery/task/00000000-0000-0000-0000-000000000000/task-execution/00000000-0000-0000-0000-000000000000/log/",
|
||||
"/api/v1/assets/favorite-assets/",
|
||||
"/api/v1/authentication/connection-token/",
|
||||
"/api/v1/ops/jobs/",
|
||||
"/api/v1/assets/categories/",
|
||||
"/api/v1/tickets/tickets/",
|
||||
"/api/v1/authentication/ssh-key/",
|
||||
"/api/v1/terminal/my-sessions/",
|
||||
"/api/v1/authentication/access-keys/",
|
||||
"/api/v1/users/profile/permissions/",
|
||||
"/api/v1/tickets/apply-login-asset-tickets/",
|
||||
"/api/v1/resources/",
|
||||
"/api/v1/ops/celery/task/00000000-0000-0000-0000-000000000000/task-execution/00000000-0000-0000-0000-000000000000/result/",
|
||||
"/api/v1/notifications/site-messages/",
|
||||
"/api/v1/notifications/site-messages/unread-total/",
|
||||
"/api/v1/assets/assets/suggestions/",
|
||||
"/api/v1/search/",
|
||||
"/api/v1/notifications/user-msg-subscription/",
|
||||
"/api/v1/ops/ansible/job-execution/00000000-0000-0000-0000-000000000000/log/",
|
||||
"/api/v1/tickets/apply-login-tickets/",
|
||||
"/api/v1/ops/variables/form-data/",
|
||||
"/api/v1/ops/variables/help/",
|
||||
"/api/v1/users/profile/password/",
|
||||
"/api/v1/tickets/apply-command-tickets/",
|
||||
"/api/v1/ops/job-executions/",
|
||||
"/api/v1/audits/my-login-logs/",
|
||||
"/api/v1/terminal/components/connect-methods/"
|
||||
"/api/v1/ops/task-executions/",
|
||||
"/api/v1/terminal/sessions/online-info/",
|
||||
"/api/v1/ops/adhocs/",
|
||||
"/api/v1/tickets/apply-nodes/suggestions/",
|
||||
"/api/v1/tickets/apply-assets/suggestions/",
|
||||
"/api/v1/settings/server-info/",
|
||||
"/api/v1/ops/playbooks/",
|
||||
"/api/v1/assets/categories/types/",
|
||||
"/api/v1/assets/protocols/",
|
||||
"/api/v1/common/countries/",
|
||||
"/api/v1/audits/jobs/",
|
||||
"/api/v1/terminal/components/connect-methods/",
|
||||
"/api/v1/ops/task-executions/",
|
||||
]
|
||||
|
||||
errors = {}
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Check api if unauthorized'
|
||||
"""
|
||||
Check API authorization and user access permissions.
|
||||
|
||||
def handle(self, *args, **options):
|
||||
settings.LOG_LEVEL = 'ERROR'
|
||||
urls = get_api_urls()
|
||||
client = Client()
|
||||
client.defaults['HTTP_HOST'] = 'localhost'
|
||||
This command performs two types of checks:
|
||||
1. Anonymous access check - finds APIs that can be accessed without authentication
|
||||
2. User access check - finds APIs that can be accessed by a normal user
|
||||
|
||||
The functionality is split into two methods:
|
||||
- check_anonymous_access(): Checks for APIs accessible without authentication
|
||||
- check_user_access(): Checks for APIs accessible by a normal user
|
||||
|
||||
Usage examples:
|
||||
# Check both anonymous and user access (default behavior)
|
||||
python manage.py check_api
|
||||
|
||||
# Check only anonymous access
|
||||
python manage.py check_api --skip-user-check
|
||||
|
||||
# Check only user access
|
||||
python manage.py check_api --skip-anonymous-check
|
||||
|
||||
# Check user access and update whitelist
|
||||
python manage.py check_api --update-whitelist
|
||||
"""
|
||||
help = 'Check API authorization and user access permissions'
|
||||
password = uuid.uuid4().hex
|
||||
unauth_urls = []
|
||||
error_urls = []
|
||||
unformat_urls = []
|
||||
# 用户可以访问的 API,但不在白名单中的 API
|
||||
unexpected_access = []
|
||||
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
'--skip-anonymous-check',
|
||||
action='store_true',
|
||||
help='Skip anonymous access check (only check user access)',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--skip-user-check',
|
||||
action='store_true',
|
||||
help='Skip user access check (only check anonymous access)',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--update-whitelist',
|
||||
action='store_true',
|
||||
help='Update the user accessible URLs whitelist based on current scan results',
|
||||
)
|
||||
|
||||
def create_test_user(self):
|
||||
"""创建测试用户"""
|
||||
User = get_user_model()
|
||||
username = 'test_user_api_check'
|
||||
email = 'test@example.com'
|
||||
|
||||
# 删除可能存在的测试用户
|
||||
User.objects.filter(username=username).delete()
|
||||
|
||||
# 创建新的测试用户
|
||||
user = User.objects.create_user(
|
||||
username=username,
|
||||
email=email,
|
||||
password=self.password,
|
||||
is_active=True
|
||||
)
|
||||
return user
|
||||
|
||||
def check_user_api_access(self, urls):
|
||||
"""检查普通用户可以访问的 API"""
|
||||
user = self.create_test_user()
|
||||
client = Client()
|
||||
client.defaults['HTTP_HOST'] = 'localhost'
|
||||
|
||||
# 登录用户
|
||||
login_success = client.login(username=user.username, password=self.password)
|
||||
if not login_success:
|
||||
self.stdout.write(
|
||||
self.style.ERROR('Failed to login test user')
|
||||
)
|
||||
return [], []
|
||||
|
||||
accessible_urls = []
|
||||
error_urls = []
|
||||
|
||||
self.stdout.write('Checking user API access...')
|
||||
|
||||
for url, ourl in urls:
|
||||
if '(' in url or '<' in url:
|
||||
unformat_urls.append([url, ourl])
|
||||
continue
|
||||
|
||||
try:
|
||||
response = client.get(url, follow=True)
|
||||
time.sleep(0.1)
|
||||
# 如果状态码是 200 或 201,说明用户可以访问
|
||||
if response.status_code in [200, 201]:
|
||||
accessible_urls.append((url, ourl, response.status_code))
|
||||
elif response.status_code == 403:
|
||||
# 403 表示权限不足,这是正常的
|
||||
pass
|
||||
else:
|
||||
# 其他状态码可能是错误
|
||||
error_urls.append((url, ourl, response.status_code))
|
||||
except Exception as e:
|
||||
error_urls.append((url, ourl, str(e)))
|
||||
|
||||
# 清理测试用户
|
||||
user.delete()
|
||||
|
||||
return accessible_urls, error_urls
|
||||
|
||||
def check_anonymous_access(self, urls):
|
||||
"""检查匿名访问权限"""
|
||||
client = Client()
|
||||
client.defaults['HTTP_HOST'] = 'localhost'
|
||||
|
||||
for url, ourl in urls:
|
||||
if '(' in url or '<' in url:
|
||||
self.unformat_urls.append([url, ourl])
|
||||
continue
|
||||
|
||||
try:
|
||||
response = client.get(url, follow=True)
|
||||
if response.status_code != 401:
|
||||
errors[url] = str(response.status_code) + ' ' + str(ourl)
|
||||
unauth_urls.append(url)
|
||||
self.unauth_urls.append(url)
|
||||
except Exception as e:
|
||||
errors[url] = str(e)
|
||||
error_urls.append(url)
|
||||
self.error_urls.append(url)
|
||||
|
||||
unauth_urls = set(unauth_urls) - set(known_unauth_urls)
|
||||
print("\nUnauthorized urls:")
|
||||
if not unauth_urls:
|
||||
self.unauth_urls = set(self.unauth_urls) - set(known_unauth_urls)
|
||||
self.error_urls = set(self.error_urls)
|
||||
self.unformat_urls = set(self.unformat_urls)
|
||||
|
||||
def print_anonymous_access_result(self):
|
||||
print("\n=== Anonymous Access Check ===")
|
||||
print("Unauthorized urls:")
|
||||
if not self.unauth_urls:
|
||||
print(" Empty, very good!")
|
||||
for url in unauth_urls:
|
||||
for url in self.unauth_urls:
|
||||
print('"{}", {}'.format(url, errors.get(url, '')))
|
||||
|
||||
print("\nError urls:")
|
||||
if not error_urls:
|
||||
if not self.error_urls:
|
||||
print(" Empty, very good!")
|
||||
for url in set(error_urls):
|
||||
for url in set(self.error_urls):
|
||||
print(url, ': ' + errors.get(url))
|
||||
|
||||
print("\nUnformat urls:")
|
||||
if not unformat_urls:
|
||||
if not self.unformat_urls:
|
||||
print(" Empty, very good!")
|
||||
for url in unformat_urls:
|
||||
for url in self.unformat_urls:
|
||||
print(url)
|
||||
|
||||
def check_user_access(self, urls, update_whitelist=False):
|
||||
"""检查用户访问权限"""
|
||||
print("\n=== User Access Check ===")
|
||||
accessible_urls, user_error_urls = self.check_user_api_access(urls)
|
||||
|
||||
# 检查是否有不在白名单中的可访问 API
|
||||
accessible_url_list = [url for url, _, _ in accessible_urls]
|
||||
unexpected_access = set(accessible_url_list) - set(user_accessible_urls)
|
||||
self.unexpected_access = unexpected_access
|
||||
|
||||
# 如果启用了更新白名单选项
|
||||
if update_whitelist:
|
||||
print("\n=== Updating Whitelist ===")
|
||||
new_whitelist = sorted(set(user_accessible_urls + accessible_url_list))
|
||||
print("Updated whitelist would include:")
|
||||
for url in new_whitelist:
|
||||
print(f' "{url}",')
|
||||
print(f"\nTotal URLs in whitelist: {len(new_whitelist)}")
|
||||
|
||||
def print_user_access_result(self):
|
||||
print("\n=== User Access Check ===")
|
||||
|
||||
print("User unexpected urls:")
|
||||
if self.unexpected_access:
|
||||
print(f" Error: Found {len(self.unexpected_access)} URLs accessible by user but not in whitelist:")
|
||||
for url in self.unexpected_access:
|
||||
print(f' "{url}"')
|
||||
else:
|
||||
print(" Empty, very good!")
|
||||
|
||||
def handle(self, *args, **options):
|
||||
settings.LOG_LEVEL = 'ERROR'
|
||||
urls = get_api_urls()
|
||||
|
||||
# 检查匿名访问权限(默认执行)
|
||||
if not options['skip_anonymous_check']:
|
||||
self.check_anonymous_access(urls)
|
||||
|
||||
# 检查用户访问权限(默认执行)
|
||||
if not options['skip_user_check']:
|
||||
self.check_user_access(urls, options['update_whitelist'])
|
||||
|
||||
print("\nCheck total urls: ", len(urls))
|
||||
self.print_anonymous_access_result()
|
||||
self.print_user_access_result()
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -207,7 +207,8 @@ class WeComTool(object):
|
|||
|
||||
def check_state(self, state, request=None):
|
||||
return cache.get(state) == self.WECOM_STATE_VALUE or \
|
||||
request.session[self.WECOM_STATE_SESSION_KEY] == state
|
||||
request.session.get(self.WECOM_STATE_SESSION_KEY) == state or \
|
||||
request.GET.get('state') == state # 在企业微信桌面端打开的话,重新创建了个 session,会导致 session 校验失败
|
||||
|
||||
def wrap_redirect_url(self, next_url):
|
||||
params = {
|
||||
|
|
|
|||
|
|
@ -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-17 17:53+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,18 @@ 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/account.py:207
|
||||
msgid "No valid assets found for account creation."
|
||||
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 +460,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 +475,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 +522,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
|
||||
|
|
@ -578,8 +583,8 @@ msgstr ""
|
|||
#: assets/models/asset/common.py:166 assets/models/cmd_filter.py:21
|
||||
#: assets/models/label.py:18 assets/models/platform.py:15
|
||||
#: assets/models/platform.py:94 assets/models/zone.py:19
|
||||
#: assets/serializers/asset/common.py:174 assets/serializers/platform.py:158
|
||||
#: assets/serializers/platform.py:283
|
||||
#: assets/serializers/asset/common.py:174 assets/serializers/platform.py:159
|
||||
#: assets/serializers/platform.py:284
|
||||
#: authentication/backends/passkey/models.py:10
|
||||
#: authentication/models/ssh_key.py:12 authentication/notifications.py:17
|
||||
#: authentication/notifications.py:56
|
||||
|
|
@ -614,7 +619,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 +789,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 +1013,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
|
||||
|
|
@ -1181,8 +1186,8 @@ msgstr ""
|
|||
|
||||
#: accounts/serializers/account/account.py:206 assets/models/label.py:21
|
||||
#: assets/models/platform.py:95 assets/serializers/asset/common.py:145
|
||||
#: assets/serializers/cagegory.py:12 assets/serializers/platform.py:173
|
||||
#: assets/serializers/platform.py:284 perms/serializers/user_permission.py:27
|
||||
#: assets/serializers/cagegory.py:12 assets/serializers/platform.py:174
|
||||
#: assets/serializers/platform.py:285 perms/serializers/user_permission.py:27
|
||||
#: settings/models.py:41 tickets/models/ticket/apply_application.py:13
|
||||
#: users/models/preference.py:12 xpack/plugins/cloud/models.py:41
|
||||
#: xpack/plugins/cloud/models.py:327
|
||||
|
|
@ -1194,7 +1199,7 @@ msgstr ""
|
|||
#: acls/serializers/command_acl.py:19 assets/models/automations/base.py:27
|
||||
#: assets/models/automations/base.py:146 assets/models/cmd_filter.py:74
|
||||
#: assets/models/platform.py:96 assets/serializers/asset/common.py:146
|
||||
#: assets/serializers/platform.py:160 assets/serializers/platform.py:172
|
||||
#: assets/serializers/platform.py:161 assets/serializers/platform.py:173
|
||||
#: audits/serializers.py:76 audits/serializers.py:196
|
||||
#: authentication/models/connection_token.py:67
|
||||
#: authentication/serializers/connect_token_secret.py:138 ops/models/job.py:155
|
||||
|
|
@ -1228,54 +1233,47 @@ 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
|
||||
#: perms/models/perm_node.py:21 settings/models.py:245
|
||||
#: 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 +1297,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"
|
||||
|
|
@ -1686,7 +1684,7 @@ msgstr ""
|
|||
#: accounts/templates/accounts/change_secret_report.html:33
|
||||
#: accounts/templates/accounts/gather_account_report.html:31
|
||||
#: accounts/templates/accounts/push_account_report.html:32
|
||||
#: assets/serializers/domain.py:23 assets/serializers/platform.py:182
|
||||
#: assets/serializers/domain.py:23 assets/serializers/platform.py:183
|
||||
#: orgs/serializers.py:13 perms/serializers/permission.py:61
|
||||
msgid "Assets amount"
|
||||
msgstr ""
|
||||
|
|
@ -1718,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 ""
|
||||
|
||||
|
|
@ -1839,6 +1837,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:182 assets/serializers/platform.py:214
|
||||
#: 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
|
||||
|
|
@ -2109,11 +2119,11 @@ msgstr ""
|
|||
msgid "User details"
|
||||
msgstr ""
|
||||
|
||||
#: assets/api/asset/asset.py:154
|
||||
#: assets/api/asset/asset.py:153
|
||||
msgid "Cannot create asset directly, you should create a host or other"
|
||||
msgstr ""
|
||||
|
||||
#: assets/api/asset/asset.py:158
|
||||
#: assets/api/asset/asset.py:157
|
||||
msgid "The number of assets exceeds the limit of 5000"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -2542,8 +2552,9 @@ msgid "Cloud"
|
|||
msgstr ""
|
||||
|
||||
#: assets/models/asset/common.py:101 assets/models/platform.py:16
|
||||
#: settings/serializers/auth/radius.py:18 settings/serializers/auth/sms.py:77
|
||||
#: settings/serializers/msg.py:31 terminal/serializers/storage.py:133
|
||||
#: assets/serializers/platform.py:87 settings/serializers/auth/radius.py:18
|
||||
#: settings/serializers/auth/sms.py:77 settings/serializers/msg.py:31
|
||||
#: terminal/serializers/storage.py:133
|
||||
#: xpack/plugins/cloud/serializers/account_attrs.py:88
|
||||
msgid "Port"
|
||||
msgstr ""
|
||||
|
|
@ -2581,19 +2592,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 ""
|
||||
|
||||
|
|
@ -2757,7 +2768,7 @@ msgstr ""
|
|||
|
||||
#: assets/models/label.py:40 assets/serializers/cagegory.py:10
|
||||
#: assets/serializers/cagegory.py:17 assets/serializers/cagegory.py:23
|
||||
#: assets/serializers/platform.py:159
|
||||
#: assets/serializers/platform.py:160
|
||||
#: authentication/serializers/connect_token_secret.py:136
|
||||
#: common/serializers/common.py:85 labels/serializers.py:45
|
||||
#: settings/serializers/msg.py:91 xpack/plugins/cloud/models.py:404
|
||||
|
|
@ -2808,7 +2819,7 @@ msgstr ""
|
|||
msgid "Required"
|
||||
msgstr ""
|
||||
|
||||
#: assets/models/platform.py:19 assets/serializers/platform.py:161
|
||||
#: assets/models/platform.py:19 assets/serializers/platform.py:162
|
||||
#: terminal/models/component/storage.py:28 users/const.py:42
|
||||
#: xpack/plugins/cloud/providers/nutanix.py:30
|
||||
msgid "Default"
|
||||
|
|
@ -2911,11 +2922,11 @@ msgstr ""
|
|||
msgid "Internal"
|
||||
msgstr "Builtin"
|
||||
|
||||
#: assets/models/platform.py:102 assets/serializers/platform.py:171
|
||||
#: assets/models/platform.py:102 assets/serializers/platform.py:172
|
||||
msgid "Charset"
|
||||
msgstr ""
|
||||
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:209
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:210
|
||||
msgid "Gateway enabled"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -2923,15 +2934,15 @@ msgstr ""
|
|||
msgid "DS enabled"
|
||||
msgstr ""
|
||||
|
||||
#: assets/models/platform.py:107 assets/serializers/platform.py:202
|
||||
#: assets/models/platform.py:107 assets/serializers/platform.py:203
|
||||
msgid "Su enabled"
|
||||
msgstr "Switch account enabled"
|
||||
|
||||
#: assets/models/platform.py:108 assets/serializers/platform.py:177
|
||||
#: assets/models/platform.py:108 assets/serializers/platform.py:178
|
||||
msgid "Su method"
|
||||
msgstr "Switch account method"
|
||||
|
||||
#: assets/models/platform.py:109 assets/serializers/platform.py:180
|
||||
#: assets/models/platform.py:109 assets/serializers/platform.py:181
|
||||
msgid "Custom fields"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -2946,7 +2957,7 @@ msgid ""
|
|||
"type"
|
||||
msgstr ""
|
||||
|
||||
#: assets/serializers/asset/common.py:36 assets/serializers/platform.py:153
|
||||
#: assets/serializers/asset/common.py:36 assets/serializers/platform.py:154
|
||||
msgid "Protocols, format is [\"protocol/port\"]"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -2966,7 +2977,7 @@ msgid ""
|
|||
"it"
|
||||
msgstr ""
|
||||
|
||||
#: assets/serializers/asset/common.py:147 assets/serializers/platform.py:174
|
||||
#: assets/serializers/asset/common.py:147 assets/serializers/platform.py:175
|
||||
#: authentication/serializers/connect_token_secret.py:30
|
||||
#: authentication/serializers/connect_token_secret.py:77
|
||||
#: perms/models/asset_permission.py:76 perms/serializers/permission.py:67
|
||||
|
|
@ -3171,58 +3182,58 @@ msgstr ""
|
|||
msgid "Port from addr"
|
||||
msgstr ""
|
||||
|
||||
#: assets/serializers/platform.py:98
|
||||
#: assets/serializers/platform.py:99
|
||||
msgid ""
|
||||
"This protocol is primary, and it must be set when adding assets. "
|
||||
"Additionally, there can only be one primary protocol."
|
||||
msgstr ""
|
||||
|
||||
#: assets/serializers/platform.py:103
|
||||
#: assets/serializers/platform.py:104
|
||||
msgid "This protocol is required, and it must be set when adding assets."
|
||||
msgstr ""
|
||||
|
||||
#: assets/serializers/platform.py:106
|
||||
#: assets/serializers/platform.py:107
|
||||
msgid ""
|
||||
"This protocol is default, when adding assets, it will be displayed by "
|
||||
"default."
|
||||
msgstr ""
|
||||
|
||||
#: assets/serializers/platform.py:109
|
||||
#: assets/serializers/platform.py:110
|
||||
msgid "This protocol is public, asset will show this protocol to user"
|
||||
msgstr ""
|
||||
|
||||
#: assets/serializers/platform.py:162
|
||||
#: assets/serializers/platform.py:163
|
||||
msgid "Help text"
|
||||
msgstr ""
|
||||
|
||||
#: assets/serializers/platform.py:163
|
||||
#: assets/serializers/platform.py:164
|
||||
msgid "Choices"
|
||||
msgstr ""
|
||||
|
||||
#: assets/serializers/platform.py:175
|
||||
#: assets/serializers/platform.py:176
|
||||
msgid "Automation"
|
||||
msgstr ""
|
||||
|
||||
#: assets/serializers/platform.py:204
|
||||
#: assets/serializers/platform.py:205
|
||||
msgid ""
|
||||
"Login with account when accessing assets, then automatically switch to "
|
||||
"another, similar to logging in with a regular account and then switching to "
|
||||
"root"
|
||||
msgstr ""
|
||||
|
||||
#: assets/serializers/platform.py:210
|
||||
#: assets/serializers/platform.py:211
|
||||
msgid "Assets can be connected using a zone gateway"
|
||||
msgstr ""
|
||||
|
||||
#: assets/serializers/platform.py:212
|
||||
#: assets/serializers/platform.py:213
|
||||
msgid "Default zone"
|
||||
msgstr ""
|
||||
|
||||
#: assets/serializers/platform.py:239
|
||||
#: assets/serializers/platform.py:240
|
||||
msgid "type is required"
|
||||
msgstr ""
|
||||
|
||||
#: assets/serializers/platform.py:254
|
||||
#: assets/serializers/platform.py:255
|
||||
msgid "Protocols is required"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -3456,7 +3467,7 @@ msgstr ""
|
|||
msgid "-"
|
||||
msgstr ""
|
||||
|
||||
#: audits/handler.py:128
|
||||
#: audits/handler.py:130
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -3735,35 +3746,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 +3848,11 @@ msgstr ""
|
|||
msgid "Invalid token or cache refreshed."
|
||||
msgstr ""
|
||||
|
||||
#: authentication/backends/oidc/views.py:175
|
||||
#: authentication/backends/oauth2/views.py:67
|
||||
msgid "OAuth2 Error"
|
||||
msgstr ""
|
||||
|
||||
#: authentication/backends/oidc/views.py:137
|
||||
msgid "OpenID Error"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -3866,7 +3881,7 @@ msgstr ""
|
|||
msgid "Credential ID"
|
||||
msgstr ""
|
||||
|
||||
#: authentication/backends/saml2/views.py:282
|
||||
#: authentication/backends/saml2/views.py:255
|
||||
msgid "SAML2 Error"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -4056,16 +4071,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 +4197,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 +4700,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 +4852,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 +5365,7 @@ msgstr ""
|
|||
msgid "App Labels"
|
||||
msgstr "Labels"
|
||||
|
||||
#: labels/models.py:15 settings/serializers/security.py:211
|
||||
#: labels/models.py:15
|
||||
msgid "Color"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -5402,16 +5424,16 @@ msgid ""
|
|||
" work orders, and other notifications"
|
||||
msgstr ""
|
||||
|
||||
#: ops/ansible/inventory.py:135 ops/ansible/inventory.py:205
|
||||
#: ops/ansible/inventory.py:136 ops/ansible/inventory.py:206
|
||||
#: ops/models/job.py:69
|
||||
msgid "No account available"
|
||||
msgstr ""
|
||||
|
||||
#: ops/ansible/inventory.py:326 ops/ansible/inventory.py:368
|
||||
#: ops/ansible/inventory.py:327 ops/ansible/inventory.py:369
|
||||
msgid "Ansible disabled"
|
||||
msgstr ""
|
||||
|
||||
#: ops/ansible/inventory.py:384
|
||||
#: ops/ansible/inventory.py:385
|
||||
msgid "Skip hosts below:"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -5427,34 +5449,38 @@ msgstr ""
|
|||
msgid "Task {} args or kwargs error"
|
||||
msgstr ""
|
||||
|
||||
#: ops/api/job.py:70
|
||||
#: ops/api/job.py:65
|
||||
msgid "Login to asset {}({}) is rejected by login asset ACL ({})"
|
||||
msgstr ""
|
||||
|
||||
#: ops/api/job.py:88
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Asset ({asset}) must have at least one of the following protocols added: "
|
||||
"SSH, SFTP, or WinRM"
|
||||
msgstr ""
|
||||
|
||||
#: ops/api/job.py:71
|
||||
#: ops/api/job.py:89
|
||||
#, python-brace-format
|
||||
msgid "Asset ({asset}) authorization is missing SSH, SFTP, or WinRM protocol"
|
||||
msgstr ""
|
||||
|
||||
#: ops/api/job.py:72
|
||||
#: ops/api/job.py:90
|
||||
#, python-brace-format
|
||||
msgid "Asset ({asset}) authorization lacks upload permissions"
|
||||
msgstr ""
|
||||
|
||||
#: ops/api/job.py:160
|
||||
#: ops/api/job.py:185
|
||||
msgid "Duplicate file exists"
|
||||
msgstr ""
|
||||
|
||||
#: ops/api/job.py:165
|
||||
#: ops/api/job.py:190
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"File size exceeds maximum limit. Please select a file smaller than {limit}MB"
|
||||
msgstr ""
|
||||
|
||||
#: ops/api/job.py:238
|
||||
#: ops/api/job.py:273
|
||||
msgid ""
|
||||
"The task is being created and cannot be interrupted. Please try again later."
|
||||
msgstr ""
|
||||
|
|
@ -5756,7 +5782,7 @@ msgstr ""
|
|||
msgid "Material Type"
|
||||
msgstr ""
|
||||
|
||||
#: ops/models/job.py:561
|
||||
#: ops/models/job.py:581
|
||||
msgid "Job Execution"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -7268,39 +7294,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 +7336,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 +7797,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 +8114,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 ""
|
||||
|
||||
|
|
@ -11161,6 +11191,10 @@ msgstr ""
|
|||
msgid "Port \"%(port)s\" of instance IP \"%(ip)s\" is not reachable"
|
||||
msgstr ""
|
||||
|
||||
#: xpack/plugins/cloud/providers/scp.py:108
|
||||
msgid "Empty"
|
||||
msgstr ""
|
||||
|
||||
#: xpack/plugins/cloud/serializers/account.py:104
|
||||
msgid "Validity display"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -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-17 17:53+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,18 @@ 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/account.py:207
|
||||
msgid "No valid assets found for account creation."
|
||||
msgstr "No se encontraron activos válidos disponibles para crear una cuenta."
|
||||
|
||||
#: 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 +488,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 +503,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 +550,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
|
||||
|
|
@ -606,8 +611,8 @@ msgstr "Actividad de cuenta"
|
|||
#: assets/models/asset/common.py:166 assets/models/cmd_filter.py:21
|
||||
#: assets/models/label.py:18 assets/models/platform.py:15
|
||||
#: assets/models/platform.py:94 assets/models/zone.py:19
|
||||
#: assets/serializers/asset/common.py:174 assets/serializers/platform.py:158
|
||||
#: assets/serializers/platform.py:283
|
||||
#: assets/serializers/asset/common.py:174 assets/serializers/platform.py:159
|
||||
#: assets/serializers/platform.py:284
|
||||
#: authentication/backends/passkey/models.py:10
|
||||
#: authentication/models/ssh_key.py:12 authentication/notifications.py:17
|
||||
#: authentication/notifications.py:56
|
||||
|
|
@ -645,7 +650,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 +823,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 +1054,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
|
||||
|
|
@ -1239,8 +1244,8 @@ msgstr "La cuenta existe política"
|
|||
|
||||
#: accounts/serializers/account/account.py:206 assets/models/label.py:21
|
||||
#: assets/models/platform.py:95 assets/serializers/asset/common.py:145
|
||||
#: assets/serializers/cagegory.py:12 assets/serializers/platform.py:173
|
||||
#: assets/serializers/platform.py:284 perms/serializers/user_permission.py:27
|
||||
#: assets/serializers/cagegory.py:12 assets/serializers/platform.py:174
|
||||
#: assets/serializers/platform.py:285 perms/serializers/user_permission.py:27
|
||||
#: settings/models.py:41 tickets/models/ticket/apply_application.py:13
|
||||
#: users/models/preference.py:12 xpack/plugins/cloud/models.py:41
|
||||
#: xpack/plugins/cloud/models.py:327
|
||||
|
|
@ -1252,7 +1257,7 @@ msgstr "Categoría"
|
|||
#: acls/serializers/command_acl.py:19 assets/models/automations/base.py:27
|
||||
#: assets/models/automations/base.py:146 assets/models/cmd_filter.py:74
|
||||
#: assets/models/platform.py:96 assets/serializers/asset/common.py:146
|
||||
#: assets/serializers/platform.py:160 assets/serializers/platform.py:172
|
||||
#: assets/serializers/platform.py:161 assets/serializers/platform.py:173
|
||||
#: audits/serializers.py:76 audits/serializers.py:196
|
||||
#: authentication/models/connection_token.py:67
|
||||
#: authentication/serializers/connect_token_secret.py:138
|
||||
|
|
@ -1286,54 +1291,47 @@ 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
|
||||
#: perms/models/perm_node.py:21 settings/models.py:245
|
||||
#: 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 +1356,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"
|
||||
|
|
@ -1792,7 +1790,7 @@ msgstr "Número de tipos"
|
|||
#: accounts/templates/accounts/change_secret_report.html:33
|
||||
#: accounts/templates/accounts/gather_account_report.html:31
|
||||
#: accounts/templates/accounts/push_account_report.html:32
|
||||
#: assets/serializers/domain.py:23 assets/serializers/platform.py:182
|
||||
#: assets/serializers/domain.py:23 assets/serializers/platform.py:183
|
||||
#: orgs/serializers.py:13 perms/serializers/permission.py:61
|
||||
msgid "Assets amount"
|
||||
msgstr "Número de activos"
|
||||
|
|
@ -1824,7 +1822,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 +1948,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:182 assets/serializers/platform.py:214
|
||||
#: 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
|
||||
|
|
@ -2234,12 +2244,12 @@ msgstr ""
|
|||
msgid "User details"
|
||||
msgstr "Detalles del usuario"
|
||||
|
||||
#: assets/api/asset/asset.py:154
|
||||
#: assets/api/asset/asset.py:153
|
||||
msgid "Cannot create asset directly, you should create a host or other"
|
||||
msgstr ""
|
||||
"No se puede crear activos directamente, debes crear un host u otro activo"
|
||||
|
||||
#: assets/api/asset/asset.py:158
|
||||
#: assets/api/asset/asset.py:157
|
||||
msgid "The number of assets exceeds the limit of 5000"
|
||||
msgstr "La cantidad de activos ha superado el límite de 5000"
|
||||
|
||||
|
|
@ -2691,8 +2701,9 @@ msgid "Cloud"
|
|||
msgstr "Servicios en la nube"
|
||||
|
||||
#: assets/models/asset/common.py:101 assets/models/platform.py:16
|
||||
#: settings/serializers/auth/radius.py:18 settings/serializers/auth/sms.py:77
|
||||
#: settings/serializers/msg.py:31 terminal/serializers/storage.py:133
|
||||
#: assets/serializers/platform.py:87 settings/serializers/auth/radius.py:18
|
||||
#: settings/serializers/auth/sms.py:77 settings/serializers/msg.py:31
|
||||
#: terminal/serializers/storage.py:133
|
||||
#: xpack/plugins/cloud/serializers/account_attrs.py:88
|
||||
msgid "Port"
|
||||
msgstr "Puerto"
|
||||
|
|
@ -2730,19 +2741,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"
|
||||
|
||||
|
|
@ -2906,7 +2917,7 @@ msgstr "Valor"
|
|||
|
||||
#: assets/models/label.py:40 assets/serializers/cagegory.py:10
|
||||
#: assets/serializers/cagegory.py:17 assets/serializers/cagegory.py:23
|
||||
#: assets/serializers/platform.py:159
|
||||
#: assets/serializers/platform.py:160
|
||||
#: authentication/serializers/connect_token_secret.py:136
|
||||
#: common/serializers/common.py:85 labels/serializers.py:45
|
||||
#: settings/serializers/msg.py:91 xpack/plugins/cloud/models.py:404
|
||||
|
|
@ -2957,7 +2968,7 @@ msgstr "principal"
|
|||
msgid "Required"
|
||||
msgstr "necesario"
|
||||
|
||||
#: assets/models/platform.py:19 assets/serializers/platform.py:161
|
||||
#: assets/models/platform.py:19 assets/serializers/platform.py:162
|
||||
#: terminal/models/component/storage.py:28 users/const.py:42
|
||||
#: xpack/plugins/cloud/providers/nutanix.py:30
|
||||
msgid "Default"
|
||||
|
|
@ -3060,11 +3071,11 @@ msgstr "Parámetros de eliminación de cuenta"
|
|||
msgid "Internal"
|
||||
msgstr "Incorporado"
|
||||
|
||||
#: assets/models/platform.py:102 assets/serializers/platform.py:171
|
||||
#: assets/models/platform.py:102 assets/serializers/platform.py:172
|
||||
msgid "Charset"
|
||||
msgstr "Código"
|
||||
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:209
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:210
|
||||
msgid "Gateway enabled"
|
||||
msgstr "Activar gateway de zona"
|
||||
|
||||
|
|
@ -3072,15 +3083,15 @@ msgstr "Activar gateway de zona"
|
|||
msgid "DS enabled"
|
||||
msgstr "El servicio de directorio ha sido habilitado"
|
||||
|
||||
#: assets/models/platform.py:107 assets/serializers/platform.py:202
|
||||
#: assets/models/platform.py:107 assets/serializers/platform.py:203
|
||||
msgid "Su enabled"
|
||||
msgstr "Activar cambio de cuenta"
|
||||
|
||||
#: assets/models/platform.py:108 assets/serializers/platform.py:177
|
||||
#: assets/models/platform.py:108 assets/serializers/platform.py:178
|
||||
msgid "Su method"
|
||||
msgstr "Método de cambio de cuenta"
|
||||
|
||||
#: assets/models/platform.py:109 assets/serializers/platform.py:180
|
||||
#: assets/models/platform.py:109 assets/serializers/platform.py:181
|
||||
msgid "Custom fields"
|
||||
msgstr "Atributos personalizados"
|
||||
|
||||
|
|
@ -3097,7 +3108,7 @@ msgstr ""
|
|||
"Actualización masiva de activos en la plataforma, se omite el activo que no "
|
||||
"cumple con el tipo de plataforma"
|
||||
|
||||
#: assets/serializers/asset/common.py:36 assets/serializers/platform.py:153
|
||||
#: assets/serializers/asset/common.py:36 assets/serializers/platform.py:154
|
||||
msgid "Protocols, format is [\"protocol/port\"]"
|
||||
msgstr "Protocolo, formato de [\"protocolo/p Puerto\"]"
|
||||
|
||||
|
|
@ -3121,7 +3132,7 @@ msgstr ""
|
|||
"Ruta del nodo, formato de [\"/organización/nombre del nodo\"], si el nodo no"
|
||||
" existe, se creará"
|
||||
|
||||
#: assets/serializers/asset/common.py:147 assets/serializers/platform.py:174
|
||||
#: assets/serializers/asset/common.py:147 assets/serializers/platform.py:175
|
||||
#: authentication/serializers/connect_token_secret.py:30
|
||||
#: authentication/serializers/connect_token_secret.py:77
|
||||
#: perms/models/asset_permission.py:76 perms/serializers/permission.py:67
|
||||
|
|
@ -3344,7 +3355,7 @@ msgstr "Iniciar eliminación de cuentas"
|
|||
msgid "Port from addr"
|
||||
msgstr "Puerto de la dirección"
|
||||
|
||||
#: assets/serializers/platform.py:98
|
||||
#: assets/serializers/platform.py:99
|
||||
msgid ""
|
||||
"This protocol is primary, and it must be set when adding assets. "
|
||||
"Additionally, there can only be one primary protocol."
|
||||
|
|
@ -3352,11 +3363,11 @@ msgstr ""
|
|||
"Este protocolo es principal, debe configurarse al agregar activos, y solo "
|
||||
"puede haber un protocolo principal"
|
||||
|
||||
#: assets/serializers/platform.py:103
|
||||
#: assets/serializers/platform.py:104
|
||||
msgid "This protocol is required, and it must be set when adding assets."
|
||||
msgstr "Este protocolo es obligatorio, debe configurarse al agregar activos"
|
||||
|
||||
#: assets/serializers/platform.py:106
|
||||
#: assets/serializers/platform.py:107
|
||||
msgid ""
|
||||
"This protocol is default, when adding assets, it will be displayed by "
|
||||
"default."
|
||||
|
|
@ -3364,25 +3375,25 @@ msgstr ""
|
|||
"Este protocolo es el predeterminado, se mostrará por defecto al agregar "
|
||||
"activos"
|
||||
|
||||
#: assets/serializers/platform.py:109
|
||||
#: assets/serializers/platform.py:110
|
||||
msgid "This protocol is public, asset will show this protocol to user"
|
||||
msgstr ""
|
||||
"Este protocolo es público, los activos mostrarán este protocolo a los "
|
||||
"usuarios y se podrán conectar para su uso"
|
||||
|
||||
#: assets/serializers/platform.py:162
|
||||
#: assets/serializers/platform.py:163
|
||||
msgid "Help text"
|
||||
msgstr "Ayuda"
|
||||
|
||||
#: assets/serializers/platform.py:163
|
||||
#: assets/serializers/platform.py:164
|
||||
msgid "Choices"
|
||||
msgstr "Elegir"
|
||||
|
||||
#: assets/serializers/platform.py:175
|
||||
#: assets/serializers/platform.py:176
|
||||
msgid "Automation"
|
||||
msgstr "Automatización"
|
||||
|
||||
#: assets/serializers/platform.py:204
|
||||
#: assets/serializers/platform.py:205
|
||||
msgid ""
|
||||
"Login with account when accessing assets, then automatically switch to "
|
||||
"another, similar to logging in with a regular account and then switching to "
|
||||
|
|
@ -3392,19 +3403,19 @@ msgstr ""
|
|||
"se cambia automáticamente a otra cuenta, como si se iniciara sesión con una "
|
||||
"cuenta normal y luego se cambiara a root."
|
||||
|
||||
#: assets/serializers/platform.py:210
|
||||
#: assets/serializers/platform.py:211
|
||||
msgid "Assets can be connected using a zone gateway"
|
||||
msgstr "Los activos pueden conectarse a través de una puerta de enlace local."
|
||||
|
||||
#: assets/serializers/platform.py:212
|
||||
#: assets/serializers/platform.py:213
|
||||
msgid "Default zone"
|
||||
msgstr "Dominio predeterminado"
|
||||
|
||||
#: assets/serializers/platform.py:239
|
||||
#: assets/serializers/platform.py:240
|
||||
msgid "type is required"
|
||||
msgstr "Tipo Este campo es obligatorio."
|
||||
|
||||
#: assets/serializers/platform.py:254
|
||||
#: assets/serializers/platform.py:255
|
||||
msgid "Protocols is required"
|
||||
msgstr "El protocolo es obligatorio."
|
||||
|
||||
|
|
@ -3651,7 +3662,7 @@ msgstr "Tarea"
|
|||
msgid "-"
|
||||
msgstr "-"
|
||||
|
||||
#: audits/handler.py:128
|
||||
#: audits/handler.py:130
|
||||
msgid "Yes"
|
||||
msgstr "Es"
|
||||
|
||||
|
|
@ -3949,37 +3960,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 +4072,11 @@ 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/oauth2/views.py:67
|
||||
msgid "OAuth2 Error"
|
||||
msgstr "Error OAuth2"
|
||||
|
||||
#: authentication/backends/oidc/views.py:137
|
||||
msgid "OpenID Error"
|
||||
msgstr "Error de OpenID"
|
||||
|
||||
|
|
@ -4092,7 +4107,7 @@ msgstr "Adjunto"
|
|||
msgid "Credential ID"
|
||||
msgstr "ID de comprobante"
|
||||
|
||||
#: authentication/backends/saml2/views.py:282
|
||||
#: authentication/backends/saml2/views.py:255
|
||||
msgid "SAML2 Error"
|
||||
msgstr "Error SAML2"
|
||||
|
||||
|
|
@ -4292,18 +4307,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 +4445,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 +4467,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 +4990,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 +5150,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 +5714,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"
|
||||
|
||||
|
|
@ -5750,16 +5774,16 @@ msgstr ""
|
|||
"Ejecutar esta tarea cuando el sistema requiera enviar mensajes internos, "
|
||||
"como alertas y órdenes de trabajo"
|
||||
|
||||
#: ops/ansible/inventory.py:135 ops/ansible/inventory.py:205
|
||||
#: ops/ansible/inventory.py:136 ops/ansible/inventory.py:206
|
||||
#: ops/models/job.py:69
|
||||
msgid "No account available"
|
||||
msgstr "No hay cuentas disponibles"
|
||||
|
||||
#: ops/ansible/inventory.py:326 ops/ansible/inventory.py:368
|
||||
#: ops/ansible/inventory.py:327 ops/ansible/inventory.py:369
|
||||
msgid "Ansible disabled"
|
||||
msgstr "Ansible ha sido desactivado"
|
||||
|
||||
#: ops/ansible/inventory.py:384
|
||||
#: ops/ansible/inventory.py:385
|
||||
msgid "Skip hosts below:"
|
||||
msgstr "Se omiten los siguientes hosts:"
|
||||
|
||||
|
|
@ -5775,7 +5799,11 @@ msgstr "La tarea {} no existe"
|
|||
msgid "Task {} args or kwargs error"
|
||||
msgstr "Error en los parámetros de ejecución de la tarea {}"
|
||||
|
||||
#: ops/api/job.py:70
|
||||
#: ops/api/job.py:65
|
||||
msgid "Login to asset {}({}) is rejected by login asset ACL ({})"
|
||||
msgstr ""
|
||||
|
||||
#: ops/api/job.py:88
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Asset ({asset}) must have at least one of the following protocols added: "
|
||||
|
|
@ -5784,17 +5812,17 @@ msgstr ""
|
|||
"El activo ({asset}) debe tener al menos uno de los siguientes protocolos: "
|
||||
"ssh, sftp, winrm"
|
||||
|
||||
#: ops/api/job.py:71
|
||||
#: ops/api/job.py:89
|
||||
#, python-brace-format
|
||||
msgid "Asset ({asset}) authorization is missing SSH, SFTP, or WinRM protocol"
|
||||
msgstr "Falta autorización de ssh, sftp o winrm para el activo ({asset})"
|
||||
|
||||
#: ops/api/job.py:72
|
||||
#: ops/api/job.py:90
|
||||
#, python-brace-format
|
||||
msgid "Asset ({asset}) authorization lacks upload permissions"
|
||||
msgstr "Falta permiso de subida para el activo ({asset})"
|
||||
|
||||
#: ops/api/job.py:160
|
||||
#: ops/api/job.py:185
|
||||
msgid "Duplicate file exists"
|
||||
msgstr ""
|
||||
"Existen archivos con el mismo nombre. El tamaño del archivo excede el límite"
|
||||
|
|
@ -5806,7 +5834,7 @@ msgstr ""
|
|||
"del archivo es un campo obligatorio. No se puede eliminar este archivo. "
|
||||
"Centro de trabajos. Empuje. Verificación. Recopilación."
|
||||
|
||||
#: ops/api/job.py:165
|
||||
#: ops/api/job.py:190
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"File size exceeds maximum limit. Please select a file smaller than {limit}MB"
|
||||
|
|
@ -5814,7 +5842,7 @@ msgstr ""
|
|||
"El tamaño del archivo excede el límite máximo. Por favor, selecciona un "
|
||||
"archivo menor de {limit}MB."
|
||||
|
||||
#: ops/api/job.py:238
|
||||
#: ops/api/job.py:273
|
||||
msgid ""
|
||||
"The task is being created and cannot be interrupted. Please try again later."
|
||||
msgstr ""
|
||||
|
|
@ -6121,7 +6149,7 @@ msgstr "Material"
|
|||
msgid "Material Type"
|
||||
msgstr "Tipo de material"
|
||||
|
||||
#: ops/models/job.py:561
|
||||
#: ops/models/job.py:581
|
||||
msgid "Job Execution"
|
||||
msgstr "Ejecución de trabajos"
|
||||
|
||||
|
|
@ -7816,40 +7844,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 +7889,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 +8448,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 +8807,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 {}"
|
||||
|
||||
|
|
@ -12051,6 +12084,10 @@ msgstr "Este de China - Suqian"
|
|||
msgid "Port \"%(port)s\" of instance IP \"%(ip)s\" is not reachable"
|
||||
msgstr "No se puede acceder al puerto %(port)s de la instancia IP %(ip)s"
|
||||
|
||||
#: xpack/plugins/cloud/providers/scp.py:108
|
||||
msgid "Empty"
|
||||
msgstr "Vacío "
|
||||
|
||||
#: xpack/plugins/cloud/serializers/account.py:104
|
||||
msgid "Validity display"
|
||||
msgstr "Mostrar validez"
|
||||
|
|
@ -12231,28 +12268,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"
|
||||
|
|
|
|||
|
|
@ -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-17 17:53+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,18 @@ 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/account.py:207
|
||||
msgid "No valid assets found for account creation."
|
||||
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 +463,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 +478,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 +540,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
|
||||
|
|
@ -596,8 +601,8 @@ msgstr "アカウントの活動"
|
|||
#: assets/models/asset/common.py:166 assets/models/cmd_filter.py:21
|
||||
#: assets/models/label.py:18 assets/models/platform.py:15
|
||||
#: assets/models/platform.py:94 assets/models/zone.py:19
|
||||
#: assets/serializers/asset/common.py:174 assets/serializers/platform.py:158
|
||||
#: assets/serializers/platform.py:283
|
||||
#: assets/serializers/asset/common.py:174 assets/serializers/platform.py:159
|
||||
#: assets/serializers/platform.py:284
|
||||
#: authentication/backends/passkey/models.py:10
|
||||
#: authentication/models/ssh_key.py:12 authentication/notifications.py:17
|
||||
#: authentication/notifications.py:56
|
||||
|
|
@ -635,7 +640,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 +813,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 +1037,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
|
||||
|
|
@ -1208,8 +1213,8 @@ msgstr "アカウントの存在ポリシー"
|
|||
|
||||
#: accounts/serializers/account/account.py:206 assets/models/label.py:21
|
||||
#: assets/models/platform.py:95 assets/serializers/asset/common.py:145
|
||||
#: assets/serializers/cagegory.py:12 assets/serializers/platform.py:173
|
||||
#: assets/serializers/platform.py:284 perms/serializers/user_permission.py:27
|
||||
#: assets/serializers/cagegory.py:12 assets/serializers/platform.py:174
|
||||
#: assets/serializers/platform.py:285 perms/serializers/user_permission.py:27
|
||||
#: settings/models.py:41 tickets/models/ticket/apply_application.py:13
|
||||
#: users/models/preference.py:12 xpack/plugins/cloud/models.py:41
|
||||
#: xpack/plugins/cloud/models.py:327
|
||||
|
|
@ -1221,7 +1226,7 @@ msgstr "カテゴリ"
|
|||
#: acls/serializers/command_acl.py:19 assets/models/automations/base.py:27
|
||||
#: assets/models/automations/base.py:146 assets/models/cmd_filter.py:74
|
||||
#: assets/models/platform.py:96 assets/serializers/asset/common.py:146
|
||||
#: assets/serializers/platform.py:160 assets/serializers/platform.py:172
|
||||
#: assets/serializers/platform.py:161 assets/serializers/platform.py:173
|
||||
#: audits/serializers.py:76 audits/serializers.py:196
|
||||
#: authentication/models/connection_token.py:67
|
||||
#: authentication/serializers/connect_token_secret.py:138
|
||||
|
|
@ -1255,54 +1260,47 @@ 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
|
||||
#: perms/models/perm_node.py:21 settings/models.py:245
|
||||
#: 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 +1325,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"
|
||||
|
|
@ -1709,7 +1707,7 @@ msgstr "タイプ数"
|
|||
#: accounts/templates/accounts/change_secret_report.html:33
|
||||
#: accounts/templates/accounts/gather_account_report.html:31
|
||||
#: accounts/templates/accounts/push_account_report.html:32
|
||||
#: assets/serializers/domain.py:23 assets/serializers/platform.py:182
|
||||
#: assets/serializers/domain.py:23 assets/serializers/platform.py:183
|
||||
#: orgs/serializers.py:13 perms/serializers/permission.py:61
|
||||
msgid "Assets amount"
|
||||
msgstr "資産数量"
|
||||
|
|
@ -1741,7 +1739,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 +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:182 assets/serializers/platform.py:214
|
||||
#: 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
|
||||
|
|
@ -2140,11 +2150,11 @@ msgstr "ユーザーが最近ログインしたことをお知らせいたしま
|
|||
msgid "User details"
|
||||
msgstr "ユーザー詳細"
|
||||
|
||||
#: assets/api/asset/asset.py:154
|
||||
#: assets/api/asset/asset.py:153
|
||||
msgid "Cannot create asset directly, you should create a host or other"
|
||||
msgstr "資産を直接作成することはできません。ホストまたはその他を作成する必要があります"
|
||||
|
||||
#: assets/api/asset/asset.py:158
|
||||
#: assets/api/asset/asset.py:157
|
||||
msgid "The number of assets exceeds the limit of 5000"
|
||||
msgstr "資産の数が5000の制限を超えています"
|
||||
|
||||
|
|
@ -2575,8 +2585,9 @@ msgid "Cloud"
|
|||
msgstr "クラウド サービス"
|
||||
|
||||
#: assets/models/asset/common.py:101 assets/models/platform.py:16
|
||||
#: settings/serializers/auth/radius.py:18 settings/serializers/auth/sms.py:77
|
||||
#: settings/serializers/msg.py:31 terminal/serializers/storage.py:133
|
||||
#: assets/serializers/platform.py:87 settings/serializers/auth/radius.py:18
|
||||
#: settings/serializers/auth/sms.py:77 settings/serializers/msg.py:31
|
||||
#: terminal/serializers/storage.py:133
|
||||
#: xpack/plugins/cloud/serializers/account_attrs.py:88
|
||||
msgid "Port"
|
||||
msgstr "ポート"
|
||||
|
|
@ -2614,19 +2625,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 "資産ノードを変更できます"
|
||||
|
||||
|
|
@ -2790,7 +2801,7 @@ msgstr "値"
|
|||
|
||||
#: assets/models/label.py:40 assets/serializers/cagegory.py:10
|
||||
#: assets/serializers/cagegory.py:17 assets/serializers/cagegory.py:23
|
||||
#: assets/serializers/platform.py:159
|
||||
#: assets/serializers/platform.py:160
|
||||
#: authentication/serializers/connect_token_secret.py:136
|
||||
#: common/serializers/common.py:85 labels/serializers.py:45
|
||||
#: settings/serializers/msg.py:91 xpack/plugins/cloud/models.py:404
|
||||
|
|
@ -2841,7 +2852,7 @@ msgstr "主要"
|
|||
msgid "Required"
|
||||
msgstr "必要"
|
||||
|
||||
#: assets/models/platform.py:19 assets/serializers/platform.py:161
|
||||
#: assets/models/platform.py:19 assets/serializers/platform.py:162
|
||||
#: terminal/models/component/storage.py:28 users/const.py:42
|
||||
#: xpack/plugins/cloud/providers/nutanix.py:30
|
||||
msgid "Default"
|
||||
|
|
@ -2944,11 +2955,11 @@ msgstr "アカウント削除パラメータ"
|
|||
msgid "Internal"
|
||||
msgstr "ビルトイン"
|
||||
|
||||
#: assets/models/platform.py:102 assets/serializers/platform.py:171
|
||||
#: assets/models/platform.py:102 assets/serializers/platform.py:172
|
||||
msgid "Charset"
|
||||
msgstr "シャーセット"
|
||||
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:209
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:210
|
||||
msgid "Gateway enabled"
|
||||
msgstr "ゾーンゲートウェイを有効化"
|
||||
|
||||
|
|
@ -2956,15 +2967,15 @@ msgstr "ゾーンゲートウェイを有効化"
|
|||
msgid "DS enabled"
|
||||
msgstr "ディレクトリサービスが有効になりました"
|
||||
|
||||
#: assets/models/platform.py:107 assets/serializers/platform.py:202
|
||||
#: assets/models/platform.py:107 assets/serializers/platform.py:203
|
||||
msgid "Su enabled"
|
||||
msgstr "アカウントの切り替えを有効にする"
|
||||
|
||||
#: assets/models/platform.py:108 assets/serializers/platform.py:177
|
||||
#: assets/models/platform.py:108 assets/serializers/platform.py:178
|
||||
msgid "Su method"
|
||||
msgstr "アカウントの切り替え方法"
|
||||
|
||||
#: assets/models/platform.py:109 assets/serializers/platform.py:180
|
||||
#: assets/models/platform.py:109 assets/serializers/platform.py:181
|
||||
msgid "Custom fields"
|
||||
msgstr "カスタムフィールド"
|
||||
|
||||
|
|
@ -2979,7 +2990,7 @@ msgid ""
|
|||
"type"
|
||||
msgstr "プラットフォームタイプがスキップされた資産に合致しない、資産内の一括更新プラットフォーム"
|
||||
|
||||
#: assets/serializers/asset/common.py:36 assets/serializers/platform.py:153
|
||||
#: assets/serializers/asset/common.py:36 assets/serializers/platform.py:154
|
||||
msgid "Protocols, format is [\"protocol/port\"]"
|
||||
msgstr "契約書、形式は[\"契約書/ポート\"]"
|
||||
|
||||
|
|
@ -2999,7 +3010,7 @@ msgid ""
|
|||
"it"
|
||||
msgstr "ノードパス、形式は [\"/組織/ノード名\"]、もしノードが存在しない場合、それを作成します"
|
||||
|
||||
#: assets/serializers/asset/common.py:147 assets/serializers/platform.py:174
|
||||
#: assets/serializers/asset/common.py:147 assets/serializers/platform.py:175
|
||||
#: authentication/serializers/connect_token_secret.py:30
|
||||
#: authentication/serializers/connect_token_secret.py:77
|
||||
#: perms/models/asset_permission.py:76 perms/serializers/permission.py:67
|
||||
|
|
@ -3215,39 +3226,39 @@ msgstr "アカウントの削除が有効になりました"
|
|||
msgid "Port from addr"
|
||||
msgstr "アドレスからのポート"
|
||||
|
||||
#: assets/serializers/platform.py:98
|
||||
#: assets/serializers/platform.py:99
|
||||
msgid ""
|
||||
"This protocol is primary, and it must be set when adding assets. "
|
||||
"Additionally, there can only be one primary protocol."
|
||||
msgstr "このプロトコルはプライマリであり、資産を追加するときに設定する必要があります。また、プライマリプロトコルは1つしかありません"
|
||||
|
||||
#: assets/serializers/platform.py:103
|
||||
#: assets/serializers/platform.py:104
|
||||
msgid "This protocol is required, and it must be set when adding assets."
|
||||
msgstr "このプロトコルは必須であり、資産を追加するときに設定する必要があります"
|
||||
|
||||
#: assets/serializers/platform.py:106
|
||||
#: assets/serializers/platform.py:107
|
||||
msgid ""
|
||||
"This protocol is default, when adding assets, it will be displayed by "
|
||||
"default."
|
||||
msgstr "このプロトコルはデフォルトです。資産を追加するときに、デフォルトで表示されます"
|
||||
|
||||
#: assets/serializers/platform.py:109
|
||||
#: assets/serializers/platform.py:110
|
||||
msgid "This protocol is public, asset will show this protocol to user"
|
||||
msgstr "このプロトコルは公開されており、資産はこのプロトコルをユーザーに表示します"
|
||||
|
||||
#: assets/serializers/platform.py:162
|
||||
#: assets/serializers/platform.py:163
|
||||
msgid "Help text"
|
||||
msgstr "ヘルプ"
|
||||
|
||||
#: assets/serializers/platform.py:163
|
||||
#: assets/serializers/platform.py:164
|
||||
msgid "Choices"
|
||||
msgstr "せんたく"
|
||||
|
||||
#: assets/serializers/platform.py:175
|
||||
#: assets/serializers/platform.py:176
|
||||
msgid "Automation"
|
||||
msgstr "オートメーション"
|
||||
|
||||
#: assets/serializers/platform.py:204
|
||||
#: assets/serializers/platform.py:205
|
||||
msgid ""
|
||||
"Login with account when accessing assets, then automatically switch to "
|
||||
"another, similar to logging in with a regular account and then switching to "
|
||||
|
|
@ -3256,19 +3267,19 @@ msgstr ""
|
|||
"資産にアクセスする際にアカウントでログインし、その後自動的に別のアカウントに切り替えます。これは、通常のアカウントでログインした後に root "
|
||||
"に切り替えるのと似ています"
|
||||
|
||||
#: assets/serializers/platform.py:210
|
||||
#: assets/serializers/platform.py:211
|
||||
msgid "Assets can be connected using a zone gateway"
|
||||
msgstr "資産はゾーンゲートウェイを使用して接続できます"
|
||||
|
||||
#: assets/serializers/platform.py:212
|
||||
#: assets/serializers/platform.py:213
|
||||
msgid "Default zone"
|
||||
msgstr "デフォルトドメイン"
|
||||
|
||||
#: assets/serializers/platform.py:239
|
||||
#: assets/serializers/platform.py:240
|
||||
msgid "type is required"
|
||||
msgstr "タイプ このフィールドは必須です."
|
||||
|
||||
#: assets/serializers/platform.py:254
|
||||
#: assets/serializers/platform.py:255
|
||||
msgid "Protocols is required"
|
||||
msgstr "同意が必要です"
|
||||
|
||||
|
|
@ -3500,7 +3511,7 @@ msgstr "タスク"
|
|||
msgid "-"
|
||||
msgstr "-"
|
||||
|
||||
#: audits/handler.py:128
|
||||
#: audits/handler.py:130
|
||||
msgid "Yes"
|
||||
msgstr "是"
|
||||
|
||||
|
|
@ -3779,35 +3790,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 +3893,11 @@ msgstr "無効なトークンヘッダー。署名文字列に無効な文字を
|
|||
msgid "Invalid token or cache refreshed."
|
||||
msgstr "無効なトークンまたはキャッシュの更新。"
|
||||
|
||||
#: authentication/backends/oidc/views.py:175
|
||||
#: authentication/backends/oauth2/views.py:67
|
||||
msgid "OAuth2 Error"
|
||||
msgstr "OAuth2 エラー"
|
||||
|
||||
#: authentication/backends/oidc/views.py:137
|
||||
msgid "OpenID Error"
|
||||
msgstr "OpenID エラー"
|
||||
|
||||
|
|
@ -3911,7 +3926,7 @@ msgstr "に追加"
|
|||
msgid "Credential ID"
|
||||
msgstr "資格情報ID"
|
||||
|
||||
#: authentication/backends/saml2/views.py:282
|
||||
#: authentication/backends/saml2/views.py:255
|
||||
msgid "SAML2 Error"
|
||||
msgstr "SAML2 エラー"
|
||||
|
||||
|
|
@ -4101,16 +4116,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 +4242,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 +4746,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 +4900,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 +5417,7 @@ msgstr ""
|
|||
msgid "App Labels"
|
||||
msgstr "ラベル"
|
||||
|
||||
#: labels/models.py:15 settings/serializers/security.py:211
|
||||
#: labels/models.py:15
|
||||
msgid "Color"
|
||||
msgstr "色"
|
||||
|
||||
|
|
@ -5454,16 +5475,16 @@ msgid ""
|
|||
" work orders, and other notifications"
|
||||
msgstr "システムの警告やチケットなどを送信するためには、このタスクを実行します"
|
||||
|
||||
#: ops/ansible/inventory.py:135 ops/ansible/inventory.py:205
|
||||
#: ops/ansible/inventory.py:136 ops/ansible/inventory.py:206
|
||||
#: ops/models/job.py:69
|
||||
msgid "No account available"
|
||||
msgstr "利用可能なアカウントがありません"
|
||||
|
||||
#: ops/ansible/inventory.py:326 ops/ansible/inventory.py:368
|
||||
#: ops/ansible/inventory.py:327 ops/ansible/inventory.py:369
|
||||
msgid "Ansible disabled"
|
||||
msgstr "Ansible 無効"
|
||||
|
||||
#: ops/ansible/inventory.py:384
|
||||
#: ops/ansible/inventory.py:385
|
||||
msgid "Skip hosts below:"
|
||||
msgstr "次のホストをスキップします: "
|
||||
|
||||
|
|
@ -5479,34 +5500,38 @@ msgstr "タスクは存在しません"
|
|||
msgid "Task {} args or kwargs error"
|
||||
msgstr "タスク実行パラメータエラー"
|
||||
|
||||
#: ops/api/job.py:70
|
||||
#: ops/api/job.py:65
|
||||
msgid "Login to asset {}({}) is rejected by login asset ACL ({})"
|
||||
msgstr ""
|
||||
|
||||
#: ops/api/job.py:88
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Asset ({asset}) must have at least one of the following protocols added: "
|
||||
"SSH, SFTP, or WinRM"
|
||||
msgstr "資産({asset})には、少なくともSSH、SFTP、WinRMのいずれか一つのプロトコルを追加する必要があります"
|
||||
|
||||
#: ops/api/job.py:71
|
||||
#: ops/api/job.py:89
|
||||
#, python-brace-format
|
||||
msgid "Asset ({asset}) authorization is missing SSH, SFTP, or WinRM protocol"
|
||||
msgstr "資産({asset})の認証にはSSH、SFTP、またはWinRMプロトコルが不足しています"
|
||||
|
||||
#: ops/api/job.py:72
|
||||
#: ops/api/job.py:90
|
||||
#, python-brace-format
|
||||
msgid "Asset ({asset}) authorization lacks upload permissions"
|
||||
msgstr "資産({asset})の認証にはアップロード権限が不足しています"
|
||||
|
||||
#: ops/api/job.py:160
|
||||
#: ops/api/job.py:185
|
||||
msgid "Duplicate file exists"
|
||||
msgstr "重複したファイルが存在する"
|
||||
|
||||
#: ops/api/job.py:165
|
||||
#: ops/api/job.py:190
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"File size exceeds maximum limit. Please select a file smaller than {limit}MB"
|
||||
msgstr "ファイルサイズが最大制限を超えています。{limit}MB より小さいファイルを選択してください。"
|
||||
|
||||
#: ops/api/job.py:238
|
||||
#: ops/api/job.py:273
|
||||
msgid ""
|
||||
"The task is being created and cannot be interrupted. Please try again later."
|
||||
msgstr "タスクを作成中で、中断できません。後でもう一度お試しください。"
|
||||
|
|
@ -5811,7 +5836,7 @@ msgstr "Material"
|
|||
msgid "Material Type"
|
||||
msgstr "Material を選択してオプションを設定します。"
|
||||
|
||||
#: ops/models/job.py:561
|
||||
#: ops/models/job.py:581
|
||||
msgid "Job Execution"
|
||||
msgstr "ジョブ実行"
|
||||
|
||||
|
|
@ -7356,40 +7381,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 +7424,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 +7897,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 +8224,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 "無効 {}"
|
||||
|
||||
|
|
@ -11300,6 +11329,10 @@ msgstr "華東-宿遷"
|
|||
msgid "Port \"%(port)s\" of instance IP \"%(ip)s\" is not reachable"
|
||||
msgstr "インスタンスIP \"%(ip)s\" のポート \"%(port)s\" は接続できません"
|
||||
|
||||
#: xpack/plugins/cloud/providers/scp.py:108
|
||||
msgid "Empty"
|
||||
msgstr "空 "
|
||||
|
||||
#: xpack/plugins/cloud/serializers/account.py:104
|
||||
msgid "Validity display"
|
||||
msgstr "有効表示"
|
||||
|
|
@ -11471,3 +11504,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 "ウォーターマークの回転角度"
|
||||
|
|
|
|||
|
|
@ -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-17 17:53+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,18 @@ 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/account.py:207
|
||||
msgid "No valid assets found for account creation."
|
||||
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 +463,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 +478,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 +525,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
|
||||
|
|
@ -581,8 +586,8 @@ msgstr "계정 활동"
|
|||
#: assets/models/asset/common.py:166 assets/models/cmd_filter.py:21
|
||||
#: assets/models/label.py:18 assets/models/platform.py:15
|
||||
#: assets/models/platform.py:94 assets/models/zone.py:19
|
||||
#: assets/serializers/asset/common.py:174 assets/serializers/platform.py:158
|
||||
#: assets/serializers/platform.py:283
|
||||
#: assets/serializers/asset/common.py:174 assets/serializers/platform.py:159
|
||||
#: assets/serializers/platform.py:284
|
||||
#: authentication/backends/passkey/models.py:10
|
||||
#: authentication/models/ssh_key.py:12 authentication/notifications.py:17
|
||||
#: authentication/notifications.py:56
|
||||
|
|
@ -620,7 +625,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 +798,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 +1022,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
|
||||
|
|
@ -1194,8 +1199,8 @@ msgstr "계정에 정책이 존재합니다"
|
|||
|
||||
#: accounts/serializers/account/account.py:206 assets/models/label.py:21
|
||||
#: assets/models/platform.py:95 assets/serializers/asset/common.py:145
|
||||
#: assets/serializers/cagegory.py:12 assets/serializers/platform.py:173
|
||||
#: assets/serializers/platform.py:284 perms/serializers/user_permission.py:27
|
||||
#: assets/serializers/cagegory.py:12 assets/serializers/platform.py:174
|
||||
#: assets/serializers/platform.py:285 perms/serializers/user_permission.py:27
|
||||
#: settings/models.py:41 tickets/models/ticket/apply_application.py:13
|
||||
#: users/models/preference.py:12 xpack/plugins/cloud/models.py:41
|
||||
#: xpack/plugins/cloud/models.py:327
|
||||
|
|
@ -1207,7 +1212,7 @@ msgstr "카테고리"
|
|||
#: acls/serializers/command_acl.py:19 assets/models/automations/base.py:27
|
||||
#: assets/models/automations/base.py:146 assets/models/cmd_filter.py:74
|
||||
#: assets/models/platform.py:96 assets/serializers/asset/common.py:146
|
||||
#: assets/serializers/platform.py:160 assets/serializers/platform.py:172
|
||||
#: assets/serializers/platform.py:161 assets/serializers/platform.py:173
|
||||
#: audits/serializers.py:76 audits/serializers.py:196
|
||||
#: authentication/models/connection_token.py:67
|
||||
#: authentication/serializers/connect_token_secret.py:138
|
||||
|
|
@ -1241,54 +1246,47 @@ 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
|
||||
#: perms/models/perm_node.py:21 settings/models.py:245
|
||||
#: 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 +1311,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"
|
||||
|
|
@ -1699,7 +1697,7 @@ msgstr "유형 수"
|
|||
#: accounts/templates/accounts/change_secret_report.html:33
|
||||
#: accounts/templates/accounts/gather_account_report.html:31
|
||||
#: accounts/templates/accounts/push_account_report.html:32
|
||||
#: assets/serializers/domain.py:23 assets/serializers/platform.py:182
|
||||
#: assets/serializers/domain.py:23 assets/serializers/platform.py:183
|
||||
#: orgs/serializers.py:13 perms/serializers/permission.py:61
|
||||
msgid "Assets amount"
|
||||
msgstr "자산 수"
|
||||
|
|
@ -1731,7 +1729,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 +1851,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:182 assets/serializers/platform.py:214
|
||||
#: 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
|
||||
|
|
@ -2130,11 +2140,11 @@ msgstr "최근에 사용자가 로그인했음을 알려드립니다:"
|
|||
msgid "User details"
|
||||
msgstr "사용자 세부정보"
|
||||
|
||||
#: assets/api/asset/asset.py:154
|
||||
#: assets/api/asset/asset.py:153
|
||||
msgid "Cannot create asset directly, you should create a host or other"
|
||||
msgstr "직접 자산을 생성할 수 없습니다. 호스트나 다른 자산을 생성해야 합니다."
|
||||
|
||||
#: assets/api/asset/asset.py:158
|
||||
#: assets/api/asset/asset.py:157
|
||||
msgid "The number of assets exceeds the limit of 5000"
|
||||
msgstr "자산 수가 5000을 초과했습니다."
|
||||
|
||||
|
|
@ -2567,8 +2577,9 @@ msgid "Cloud"
|
|||
msgstr "클라우드 서비스"
|
||||
|
||||
#: assets/models/asset/common.py:101 assets/models/platform.py:16
|
||||
#: settings/serializers/auth/radius.py:18 settings/serializers/auth/sms.py:77
|
||||
#: settings/serializers/msg.py:31 terminal/serializers/storage.py:133
|
||||
#: assets/serializers/platform.py:87 settings/serializers/auth/radius.py:18
|
||||
#: settings/serializers/auth/sms.py:77 settings/serializers/msg.py:31
|
||||
#: terminal/serializers/storage.py:133
|
||||
#: xpack/plugins/cloud/serializers/account_attrs.py:88
|
||||
msgid "Port"
|
||||
msgstr "포트"
|
||||
|
|
@ -2606,19 +2617,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 "자산 노드를 수정할 수 있습니다."
|
||||
|
||||
|
|
@ -2782,7 +2793,7 @@ msgstr "값"
|
|||
|
||||
#: assets/models/label.py:40 assets/serializers/cagegory.py:10
|
||||
#: assets/serializers/cagegory.py:17 assets/serializers/cagegory.py:23
|
||||
#: assets/serializers/platform.py:159
|
||||
#: assets/serializers/platform.py:160
|
||||
#: authentication/serializers/connect_token_secret.py:136
|
||||
#: common/serializers/common.py:85 labels/serializers.py:45
|
||||
#: settings/serializers/msg.py:91 xpack/plugins/cloud/models.py:404
|
||||
|
|
@ -2833,7 +2844,7 @@ msgstr "주요"
|
|||
msgid "Required"
|
||||
msgstr "필수"
|
||||
|
||||
#: assets/models/platform.py:19 assets/serializers/platform.py:161
|
||||
#: assets/models/platform.py:19 assets/serializers/platform.py:162
|
||||
#: terminal/models/component/storage.py:28 users/const.py:42
|
||||
#: xpack/plugins/cloud/providers/nutanix.py:30
|
||||
msgid "Default"
|
||||
|
|
@ -2936,11 +2947,11 @@ msgstr "계정 제거 매개변수"
|
|||
msgid "Internal"
|
||||
msgstr "내장"
|
||||
|
||||
#: assets/models/platform.py:102 assets/serializers/platform.py:171
|
||||
#: assets/models/platform.py:102 assets/serializers/platform.py:172
|
||||
msgid "Charset"
|
||||
msgstr "인코딩"
|
||||
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:209
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:210
|
||||
msgid "Gateway enabled"
|
||||
msgstr "도메인 게이트웨이 활성화"
|
||||
|
||||
|
|
@ -2948,15 +2959,15 @@ msgstr "도메인 게이트웨이 활성화"
|
|||
msgid "DS enabled"
|
||||
msgstr "디렉토리 서비스 활성화"
|
||||
|
||||
#: assets/models/platform.py:107 assets/serializers/platform.py:202
|
||||
#: assets/models/platform.py:107 assets/serializers/platform.py:203
|
||||
msgid "Su enabled"
|
||||
msgstr "계정 전환 활성화"
|
||||
|
||||
#: assets/models/platform.py:108 assets/serializers/platform.py:177
|
||||
#: assets/models/platform.py:108 assets/serializers/platform.py:178
|
||||
msgid "Su method"
|
||||
msgstr "계정 전환 방식"
|
||||
|
||||
#: assets/models/platform.py:109 assets/serializers/platform.py:180
|
||||
#: assets/models/platform.py:109 assets/serializers/platform.py:181
|
||||
msgid "Custom fields"
|
||||
msgstr "사용자 정의 속성"
|
||||
|
||||
|
|
@ -2971,7 +2982,7 @@ msgid ""
|
|||
"type"
|
||||
msgstr "자산 중 플랫폼을 일괄 업데이트하며, 플랫폼 유형에 맞지 않는 자산은 건너뜁니다"
|
||||
|
||||
#: assets/serializers/asset/common.py:36 assets/serializers/platform.py:153
|
||||
#: assets/serializers/asset/common.py:36 assets/serializers/platform.py:154
|
||||
msgid "Protocols, format is [\"protocol/port\"]"
|
||||
msgstr "프로토콜, 형식은 [\"프로토콜/포트\"]"
|
||||
|
||||
|
|
@ -2991,7 +3002,7 @@ msgid ""
|
|||
"it"
|
||||
msgstr "노드 경로, 형식은 [\"/조직/노드명\"], 만약 노드가 존재하지 않으면 생성됩니다"
|
||||
|
||||
#: assets/serializers/asset/common.py:147 assets/serializers/platform.py:174
|
||||
#: assets/serializers/asset/common.py:147 assets/serializers/platform.py:175
|
||||
#: authentication/serializers/connect_token_secret.py:30
|
||||
#: authentication/serializers/connect_token_secret.py:77
|
||||
#: perms/models/asset_permission.py:76 perms/serializers/permission.py:67
|
||||
|
|
@ -3204,39 +3215,39 @@ msgstr "계정 제거 실행"
|
|||
msgid "Port from addr"
|
||||
msgstr "포트 출처 주소"
|
||||
|
||||
#: assets/serializers/platform.py:98
|
||||
#: assets/serializers/platform.py:99
|
||||
msgid ""
|
||||
"This protocol is primary, and it must be set when adding assets. "
|
||||
"Additionally, there can only be one primary protocol."
|
||||
msgstr "이 프로토콜은 주요 프로토콜로, 자산 추가 시 반드시 설정되어야 하며, 단 하나의 주요 프로토콜만 존재할 수 있습니다."
|
||||
|
||||
#: assets/serializers/platform.py:103
|
||||
#: assets/serializers/platform.py:104
|
||||
msgid "This protocol is required, and it must be set when adding assets."
|
||||
msgstr "이 프로토콜은 필수항목으로, 자산 추가 시 반드시 설정해야 합니다."
|
||||
|
||||
#: assets/serializers/platform.py:106
|
||||
#: assets/serializers/platform.py:107
|
||||
msgid ""
|
||||
"This protocol is default, when adding assets, it will be displayed by "
|
||||
"default."
|
||||
msgstr "이 프로토콜은 기본 프로토콜로, 자산 추가 시 자동으로 표시됩니다."
|
||||
|
||||
#: assets/serializers/platform.py:109
|
||||
#: assets/serializers/platform.py:110
|
||||
msgid "This protocol is public, asset will show this protocol to user"
|
||||
msgstr "이 프로토콜은 공용으로, 자산이 사용자에게 해당 프로토콜을 표시하며 연결하여 사용할 수 있습니다."
|
||||
|
||||
#: assets/serializers/platform.py:162
|
||||
#: assets/serializers/platform.py:163
|
||||
msgid "Help text"
|
||||
msgstr "도움"
|
||||
|
||||
#: assets/serializers/platform.py:163
|
||||
#: assets/serializers/platform.py:164
|
||||
msgid "Choices"
|
||||
msgstr "선택"
|
||||
|
||||
#: assets/serializers/platform.py:175
|
||||
#: assets/serializers/platform.py:176
|
||||
msgid "Automation"
|
||||
msgstr "자동화"
|
||||
|
||||
#: assets/serializers/platform.py:204
|
||||
#: assets/serializers/platform.py:205
|
||||
msgid ""
|
||||
"Login with account when accessing assets, then automatically switch to "
|
||||
"another, similar to logging in with a regular account and then switching to "
|
||||
|
|
@ -3244,19 +3255,19 @@ msgid ""
|
|||
msgstr ""
|
||||
"자산에 접근할 때 계정으로 로그인한 후 자동으로 다른 계정으로 전환합니다. 일반 계정으로 로그인한 후 root로 전환하는 것과 같습니다."
|
||||
|
||||
#: assets/serializers/platform.py:210
|
||||
#: assets/serializers/platform.py:211
|
||||
msgid "Assets can be connected using a zone gateway"
|
||||
msgstr "자산은 지역 게이트웨이를 통해 연결할 수 있습니다."
|
||||
|
||||
#: assets/serializers/platform.py:212
|
||||
#: assets/serializers/platform.py:213
|
||||
msgid "Default zone"
|
||||
msgstr "기본 도메인"
|
||||
|
||||
#: assets/serializers/platform.py:239
|
||||
#: assets/serializers/platform.py:240
|
||||
msgid "type is required"
|
||||
msgstr "유형: 이 필드는 필수입니다."
|
||||
|
||||
#: assets/serializers/platform.py:254
|
||||
#: assets/serializers/platform.py:255
|
||||
msgid "Protocols is required"
|
||||
msgstr "프로토콜은 필수입니다."
|
||||
|
||||
|
|
@ -3491,7 +3502,7 @@ msgstr "업무"
|
|||
msgid "-"
|
||||
msgstr "-"
|
||||
|
||||
#: audits/handler.py:128
|
||||
#: audits/handler.py:130
|
||||
msgid "Yes"
|
||||
msgstr "입니다"
|
||||
|
||||
|
|
@ -3769,35 +3780,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 +3890,11 @@ msgstr "유효하지 않은 토큰 헤더입니다. 기호 문자열에는 유
|
|||
msgid "Invalid token or cache refreshed."
|
||||
msgstr "새로 고침된 토큰 또는 캐시가 유효하지 않습니다."
|
||||
|
||||
#: authentication/backends/oidc/views.py:175
|
||||
#: authentication/backends/oauth2/views.py:67
|
||||
msgid "OAuth2 Error"
|
||||
msgstr "OAuth2 오류"
|
||||
|
||||
#: authentication/backends/oidc/views.py:137
|
||||
msgid "OpenID Error"
|
||||
msgstr "OpenID 오류"
|
||||
|
||||
|
|
@ -3908,7 +3923,7 @@ msgstr "추가"
|
|||
msgid "Credential ID"
|
||||
msgstr "증명서 ID"
|
||||
|
||||
#: authentication/backends/saml2/views.py:282
|
||||
#: authentication/backends/saml2/views.py:255
|
||||
msgid "SAML2 Error"
|
||||
msgstr "SAML2 오류"
|
||||
|
||||
|
|
@ -4100,16 +4115,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 +4241,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 +4747,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 +4901,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 +5419,7 @@ msgstr "태그 관리"
|
|||
msgid "App Labels"
|
||||
msgstr "색상"
|
||||
|
||||
#: labels/models.py:15 settings/serializers/security.py:211
|
||||
#: labels/models.py:15
|
||||
msgid "Color"
|
||||
msgstr "색상"
|
||||
|
||||
|
|
@ -5456,16 +5477,16 @@ msgid ""
|
|||
" work orders, and other notifications"
|
||||
msgstr "시스템의 일부 경고, 작업 지시서 등 사이트 내 메시지를 발송해야 할 때 해당 작업을 실행"
|
||||
|
||||
#: ops/ansible/inventory.py:135 ops/ansible/inventory.py:205
|
||||
#: ops/ansible/inventory.py:136 ops/ansible/inventory.py:206
|
||||
#: ops/models/job.py:69
|
||||
msgid "No account available"
|
||||
msgstr "사용 가능한 계정 없음"
|
||||
|
||||
#: ops/ansible/inventory.py:326 ops/ansible/inventory.py:368
|
||||
#: ops/ansible/inventory.py:327 ops/ansible/inventory.py:369
|
||||
msgid "Ansible disabled"
|
||||
msgstr "Ansible이 비활성화되었습니다."
|
||||
|
||||
#: ops/ansible/inventory.py:384
|
||||
#: ops/ansible/inventory.py:385
|
||||
msgid "Skip hosts below:"
|
||||
msgstr "다음 호스트를 건너뜁니다:"
|
||||
|
||||
|
|
@ -5481,34 +5502,38 @@ msgstr "작업 {}가 존재하지 않습니다"
|
|||
msgid "Task {} args or kwargs error"
|
||||
msgstr "작업 {}의 실행 매개변수가 잘못되었습니다"
|
||||
|
||||
#: ops/api/job.py:70
|
||||
#: ops/api/job.py:65
|
||||
msgid "Login to asset {}({}) is rejected by login asset ACL ({})"
|
||||
msgstr ""
|
||||
|
||||
#: ops/api/job.py:88
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Asset ({asset}) must have at least one of the following protocols added: "
|
||||
"SSH, SFTP, or WinRM"
|
||||
msgstr "자산({asset})에는 최소한 ssh, sftp 또는 winrm 중 하나의 프로토콜이 추가되어야 합니다"
|
||||
|
||||
#: ops/api/job.py:71
|
||||
#: ops/api/job.py:89
|
||||
#, python-brace-format
|
||||
msgid "Asset ({asset}) authorization is missing SSH, SFTP, or WinRM protocol"
|
||||
msgstr "자산({asset})의 인증에 ssh, sftp 또는 winrm 프로토콜이 부족합니다"
|
||||
|
||||
#: ops/api/job.py:72
|
||||
#: ops/api/job.py:90
|
||||
#, python-brace-format
|
||||
msgid "Asset ({asset}) authorization lacks upload permissions"
|
||||
msgstr "자산({asset})의 인증에 업로드 권한이 부족합니다"
|
||||
|
||||
#: ops/api/job.py:160
|
||||
#: ops/api/job.py:185
|
||||
msgid "Duplicate file exists"
|
||||
msgstr "동일한 이름의 파일이 존재합니다"
|
||||
|
||||
#: ops/api/job.py:165
|
||||
#: ops/api/job.py:190
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"File size exceeds maximum limit. Please select a file smaller than {limit}MB"
|
||||
msgstr "파일 크기가 최대 제한을 초과했습니다. {limit}MB보다 작은 파일을 선택해 주세요."
|
||||
|
||||
#: ops/api/job.py:238
|
||||
#: ops/api/job.py:273
|
||||
msgid ""
|
||||
"The task is being created and cannot be interrupted. Please try again later."
|
||||
msgstr "작업을 생성 중입니다. 중단할 수 없으니 잠시 후에 다시 시도해 주세요."
|
||||
|
|
@ -5828,7 +5853,7 @@ msgstr "자재"
|
|||
msgid "Material Type"
|
||||
msgstr "자재 유형"
|
||||
|
||||
#: ops/models/job.py:561
|
||||
#: ops/models/job.py:581
|
||||
msgid "Job Execution"
|
||||
msgstr "작업 실행"
|
||||
|
||||
|
|
@ -7398,40 +7423,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 +7466,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 +7960,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 +8288,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 "비활성화 {}"
|
||||
|
||||
|
|
@ -11391,6 +11420,10 @@ msgstr "화동-숙천"
|
|||
msgid "Port \"%(port)s\" of instance IP \"%(ip)s\" is not reachable"
|
||||
msgstr "인스턴스 IP %(ip)s의 포트 %(port)s에 접근할 수 없습니다"
|
||||
|
||||
#: xpack/plugins/cloud/providers/scp.py:108
|
||||
msgid "Empty"
|
||||
msgstr "비어 있음 "
|
||||
|
||||
#: xpack/plugins/cloud/serializers/account.py:104
|
||||
msgid "Validity display"
|
||||
msgstr "유효성 표시"
|
||||
|
|
@ -11563,25 +11596,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"
|
||||
|
|
|
|||
|
|
@ -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-17 17:53+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,18 @@ 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/account.py:207
|
||||
msgid "No valid assets found for account creation."
|
||||
msgstr "Não foi encontrado um ativo válido para a criação da conta."
|
||||
|
||||
#: 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 +466,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 +481,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 +528,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
|
||||
|
|
@ -584,8 +589,8 @@ msgstr "Atividade da conta"
|
|||
#: assets/models/asset/common.py:166 assets/models/cmd_filter.py:21
|
||||
#: assets/models/label.py:18 assets/models/platform.py:15
|
||||
#: assets/models/platform.py:94 assets/models/zone.py:19
|
||||
#: assets/serializers/asset/common.py:174 assets/serializers/platform.py:158
|
||||
#: assets/serializers/platform.py:283
|
||||
#: assets/serializers/asset/common.py:174 assets/serializers/platform.py:159
|
||||
#: assets/serializers/platform.py:284
|
||||
#: authentication/backends/passkey/models.py:10
|
||||
#: authentication/models/ssh_key.py:12 authentication/notifications.py:17
|
||||
#: authentication/notifications.py:56
|
||||
|
|
@ -623,7 +628,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 +801,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 +1045,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
|
||||
|
|
@ -1227,8 +1232,8 @@ msgstr "Estratégia de contas existentes"
|
|||
|
||||
#: accounts/serializers/account/account.py:206 assets/models/label.py:21
|
||||
#: assets/models/platform.py:95 assets/serializers/asset/common.py:145
|
||||
#: assets/serializers/cagegory.py:12 assets/serializers/platform.py:173
|
||||
#: assets/serializers/platform.py:284 perms/serializers/user_permission.py:27
|
||||
#: assets/serializers/cagegory.py:12 assets/serializers/platform.py:174
|
||||
#: assets/serializers/platform.py:285 perms/serializers/user_permission.py:27
|
||||
#: settings/models.py:41 tickets/models/ticket/apply_application.py:13
|
||||
#: users/models/preference.py:12 xpack/plugins/cloud/models.py:41
|
||||
#: xpack/plugins/cloud/models.py:327
|
||||
|
|
@ -1240,7 +1245,7 @@ msgstr "Categoria"
|
|||
#: acls/serializers/command_acl.py:19 assets/models/automations/base.py:27
|
||||
#: assets/models/automations/base.py:146 assets/models/cmd_filter.py:74
|
||||
#: assets/models/platform.py:96 assets/serializers/asset/common.py:146
|
||||
#: assets/serializers/platform.py:160 assets/serializers/platform.py:172
|
||||
#: assets/serializers/platform.py:161 assets/serializers/platform.py:173
|
||||
#: audits/serializers.py:76 audits/serializers.py:196
|
||||
#: authentication/models/connection_token.py:67
|
||||
#: authentication/serializers/connect_token_secret.py:138
|
||||
|
|
@ -1274,54 +1279,47 @@ 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
|
||||
#: perms/models/perm_node.py:21 settings/models.py:245
|
||||
#: 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 +1344,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"
|
||||
|
|
@ -1769,7 +1767,7 @@ msgstr "Número de tipos"
|
|||
#: accounts/templates/accounts/change_secret_report.html:33
|
||||
#: accounts/templates/accounts/gather_account_report.html:31
|
||||
#: accounts/templates/accounts/push_account_report.html:32
|
||||
#: assets/serializers/domain.py:23 assets/serializers/platform.py:182
|
||||
#: assets/serializers/domain.py:23 assets/serializers/platform.py:183
|
||||
#: orgs/serializers.py:13 perms/serializers/permission.py:61
|
||||
msgid "Assets amount"
|
||||
msgstr "Número de ativos"
|
||||
|
|
@ -1801,7 +1799,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 +1924,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:182 assets/serializers/platform.py:214
|
||||
#: 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
|
||||
|
|
@ -2207,13 +2217,13 @@ msgstr "Queremos informá-lo de que recentemente houve logins de usuários:"
|
|||
msgid "User details"
|
||||
msgstr "Detalhes do usuário"
|
||||
|
||||
#: assets/api/asset/asset.py:154
|
||||
#: assets/api/asset/asset.py:153
|
||||
msgid "Cannot create asset directly, you should create a host or other"
|
||||
msgstr ""
|
||||
"Não é possível criar ativos diretamente, você deve criar um host ou outros "
|
||||
"ativos."
|
||||
|
||||
#: assets/api/asset/asset.py:158
|
||||
#: assets/api/asset/asset.py:157
|
||||
msgid "The number of assets exceeds the limit of 5000"
|
||||
msgstr "A quantidade de ativos excedeu o limite de 5000"
|
||||
|
||||
|
|
@ -2660,8 +2670,9 @@ msgid "Cloud"
|
|||
msgstr "Serviço na nuvem"
|
||||
|
||||
#: assets/models/asset/common.py:101 assets/models/platform.py:16
|
||||
#: settings/serializers/auth/radius.py:18 settings/serializers/auth/sms.py:77
|
||||
#: settings/serializers/msg.py:31 terminal/serializers/storage.py:133
|
||||
#: assets/serializers/platform.py:87 settings/serializers/auth/radius.py:18
|
||||
#: settings/serializers/auth/sms.py:77 settings/serializers/msg.py:31
|
||||
#: terminal/serializers/storage.py:133
|
||||
#: xpack/plugins/cloud/serializers/account_attrs.py:88
|
||||
msgid "Port"
|
||||
msgstr "Porta"
|
||||
|
|
@ -2699,19 +2710,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"
|
||||
|
||||
|
|
@ -2875,7 +2886,7 @@ msgstr "Valor"
|
|||
|
||||
#: assets/models/label.py:40 assets/serializers/cagegory.py:10
|
||||
#: assets/serializers/cagegory.py:17 assets/serializers/cagegory.py:23
|
||||
#: assets/serializers/platform.py:159
|
||||
#: assets/serializers/platform.py:160
|
||||
#: authentication/serializers/connect_token_secret.py:136
|
||||
#: common/serializers/common.py:85 labels/serializers.py:45
|
||||
#: settings/serializers/msg.py:91 xpack/plugins/cloud/models.py:404
|
||||
|
|
@ -2926,7 +2937,7 @@ msgstr "Principal"
|
|||
msgid "Required"
|
||||
msgstr "Obrigatório"
|
||||
|
||||
#: assets/models/platform.py:19 assets/serializers/platform.py:161
|
||||
#: assets/models/platform.py:19 assets/serializers/platform.py:162
|
||||
#: terminal/models/component/storage.py:28 users/const.py:42
|
||||
#: xpack/plugins/cloud/providers/nutanix.py:30
|
||||
msgid "Default"
|
||||
|
|
@ -3029,11 +3040,11 @@ msgstr "Parâmetros de remoção de conta"
|
|||
msgid "Internal"
|
||||
msgstr "Incorporado"
|
||||
|
||||
#: assets/models/platform.py:102 assets/serializers/platform.py:171
|
||||
#: assets/models/platform.py:102 assets/serializers/platform.py:172
|
||||
msgid "Charset"
|
||||
msgstr "Codificação"
|
||||
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:209
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:210
|
||||
msgid "Gateway enabled"
|
||||
msgstr "Ativar zone gateway"
|
||||
|
||||
|
|
@ -3041,15 +3052,15 @@ msgstr "Ativar zone gateway"
|
|||
msgid "DS enabled"
|
||||
msgstr "Serviço de diretório habilitado"
|
||||
|
||||
#: assets/models/platform.py:107 assets/serializers/platform.py:202
|
||||
#: assets/models/platform.py:107 assets/serializers/platform.py:203
|
||||
msgid "Su enabled"
|
||||
msgstr "Habilitar mudança de conta"
|
||||
|
||||
#: assets/models/platform.py:108 assets/serializers/platform.py:177
|
||||
#: assets/models/platform.py:108 assets/serializers/platform.py:178
|
||||
msgid "Su method"
|
||||
msgstr "Método de mudança de conta"
|
||||
|
||||
#: assets/models/platform.py:109 assets/serializers/platform.py:180
|
||||
#: assets/models/platform.py:109 assets/serializers/platform.py:181
|
||||
msgid "Custom fields"
|
||||
msgstr "Atributos personalizados"
|
||||
|
||||
|
|
@ -3066,7 +3077,7 @@ msgstr ""
|
|||
"Atualização em massa na plataforma de ativos, ativos ignorados que não "
|
||||
"correspondem ao tipo de plataforma"
|
||||
|
||||
#: assets/serializers/asset/common.py:36 assets/serializers/platform.py:153
|
||||
#: assets/serializers/asset/common.py:36 assets/serializers/platform.py:154
|
||||
msgid "Protocols, format is [\"protocol/port\"]"
|
||||
msgstr "Protocolo, formato como [\"protocolo/porta\"]"
|
||||
|
||||
|
|
@ -3090,7 +3101,7 @@ msgstr ""
|
|||
"Caminho do nó, formatado como [\"/ organização / nome do nó\"], se o nó não "
|
||||
"existir, ele será criado"
|
||||
|
||||
#: assets/serializers/asset/common.py:147 assets/serializers/platform.py:174
|
||||
#: assets/serializers/asset/common.py:147 assets/serializers/platform.py:175
|
||||
#: authentication/serializers/connect_token_secret.py:30
|
||||
#: authentication/serializers/connect_token_secret.py:77
|
||||
#: perms/models/asset_permission.py:76 perms/serializers/permission.py:67
|
||||
|
|
@ -3309,7 +3320,7 @@ msgstr "Inicializar a remoção de contas"
|
|||
msgid "Port from addr"
|
||||
msgstr "Porta de origem do endereço"
|
||||
|
||||
#: assets/serializers/platform.py:98
|
||||
#: assets/serializers/platform.py:99
|
||||
msgid ""
|
||||
"This protocol is primary, and it must be set when adding assets. "
|
||||
"Additionally, there can only be one primary protocol."
|
||||
|
|
@ -3317,36 +3328,36 @@ msgstr ""
|
|||
"Este acordo é o principal, deve ser definido ao adicionar ativos, e só pode "
|
||||
"haver um acordo principal"
|
||||
|
||||
#: assets/serializers/platform.py:103
|
||||
#: assets/serializers/platform.py:104
|
||||
msgid "This protocol is required, and it must be set when adding assets."
|
||||
msgstr "Este acordo é obrigatório, deve ser definido ao adicionar ativos"
|
||||
|
||||
#: assets/serializers/platform.py:106
|
||||
#: assets/serializers/platform.py:107
|
||||
msgid ""
|
||||
"This protocol is default, when adding assets, it will be displayed by "
|
||||
"default."
|
||||
msgstr ""
|
||||
"Este acordo é o padrão, ao adicionar ativos, ele será exibido por padrão"
|
||||
|
||||
#: assets/serializers/platform.py:109
|
||||
#: assets/serializers/platform.py:110
|
||||
msgid "This protocol is public, asset will show this protocol to user"
|
||||
msgstr ""
|
||||
"Este acordo é público, o ativo exibirá este acordo aos usuários e poderá se "
|
||||
"conectar para uso"
|
||||
|
||||
#: assets/serializers/platform.py:162
|
||||
#: assets/serializers/platform.py:163
|
||||
msgid "Help text"
|
||||
msgstr "Ajuda"
|
||||
|
||||
#: assets/serializers/platform.py:163
|
||||
#: assets/serializers/platform.py:164
|
||||
msgid "Choices"
|
||||
msgstr "Selecionar"
|
||||
|
||||
#: assets/serializers/platform.py:175
|
||||
#: assets/serializers/platform.py:176
|
||||
msgid "Automation"
|
||||
msgstr "Automação"
|
||||
|
||||
#: assets/serializers/platform.py:204
|
||||
#: assets/serializers/platform.py:205
|
||||
msgid ""
|
||||
"Login with account when accessing assets, then automatically switch to "
|
||||
"another, similar to logging in with a regular account and then switching to "
|
||||
|
|
@ -3356,19 +3367,19 @@ msgstr ""
|
|||
"para outra conta, como se estivesse fazendo login com uma conta normal e "
|
||||
"mudasse para root"
|
||||
|
||||
#: assets/serializers/platform.py:210
|
||||
#: assets/serializers/platform.py:211
|
||||
msgid "Assets can be connected using a zone gateway"
|
||||
msgstr "O ativo pode se conectar através do gateway regional"
|
||||
|
||||
#: assets/serializers/platform.py:212
|
||||
#: assets/serializers/platform.py:213
|
||||
msgid "Default zone"
|
||||
msgstr "Domínio padrão"
|
||||
|
||||
#: assets/serializers/platform.py:239
|
||||
#: assets/serializers/platform.py:240
|
||||
msgid "type is required"
|
||||
msgstr "Tipo Esse campo é obrigatório."
|
||||
|
||||
#: assets/serializers/platform.py:254
|
||||
#: assets/serializers/platform.py:255
|
||||
msgid "Protocols is required"
|
||||
msgstr "O acordo é obrigatório"
|
||||
|
||||
|
|
@ -3614,7 +3625,7 @@ msgstr "Tarefas"
|
|||
msgid "-"
|
||||
msgstr "-"
|
||||
|
||||
#: audits/handler.py:128
|
||||
#: audits/handler.py:130
|
||||
msgid "Yes"
|
||||
msgstr "Sim"
|
||||
|
||||
|
|
@ -3903,35 +3914,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 +4024,11 @@ 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/oauth2/views.py:67
|
||||
msgid "OAuth2 Error"
|
||||
msgstr "Erro OAuth2"
|
||||
|
||||
#: authentication/backends/oidc/views.py:137
|
||||
msgid "OpenID Error"
|
||||
msgstr "Erro OpenID"
|
||||
|
||||
|
|
@ -4043,7 +4058,7 @@ msgstr "Adicional"
|
|||
msgid "Credential ID"
|
||||
msgstr "ID da credencial"
|
||||
|
||||
#: authentication/backends/saml2/views.py:282
|
||||
#: authentication/backends/saml2/views.py:255
|
||||
msgid "SAML2 Error"
|
||||
msgstr "Erro SAML2"
|
||||
|
||||
|
|
@ -4240,16 +4255,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 +4385,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 +4406,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 +4927,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 +5087,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 +5628,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"
|
||||
|
||||
|
|
@ -5664,16 +5688,16 @@ msgstr ""
|
|||
"Algumas alertas do sistema, ordens de serviço e outras necessidades são "
|
||||
"atendidas por esta tarefa"
|
||||
|
||||
#: ops/ansible/inventory.py:135 ops/ansible/inventory.py:205
|
||||
#: ops/ansible/inventory.py:136 ops/ansible/inventory.py:206
|
||||
#: ops/models/job.py:69
|
||||
msgid "No account available"
|
||||
msgstr "Sem contas disponíveis"
|
||||
|
||||
#: ops/ansible/inventory.py:326 ops/ansible/inventory.py:368
|
||||
#: ops/ansible/inventory.py:327 ops/ansible/inventory.py:369
|
||||
msgid "Ansible disabled"
|
||||
msgstr "Ansible desativado"
|
||||
|
||||
#: ops/ansible/inventory.py:384
|
||||
#: ops/ansible/inventory.py:385
|
||||
msgid "Skip hosts below:"
|
||||
msgstr "Pulando os seguintes hosts:"
|
||||
|
||||
|
|
@ -5689,7 +5713,11 @@ msgstr "A tarefa {} não existe"
|
|||
msgid "Task {} args or kwargs error"
|
||||
msgstr "Erro nos parâmetros da tarefa {}"
|
||||
|
||||
#: ops/api/job.py:70
|
||||
#: ops/api/job.py:65
|
||||
msgid "Login to asset {}({}) is rejected by login asset ACL ({})"
|
||||
msgstr ""
|
||||
|
||||
#: ops/api/job.py:88
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Asset ({asset}) must have at least one of the following protocols added: "
|
||||
|
|
@ -5698,21 +5726,21 @@ msgstr ""
|
|||
"O ativo ({asset}) deve adicionar pelo menos um dos seguintes protocolos: "
|
||||
"ssh, sftp, winrm"
|
||||
|
||||
#: ops/api/job.py:71
|
||||
#: ops/api/job.py:89
|
||||
#, python-brace-format
|
||||
msgid "Asset ({asset}) authorization is missing SSH, SFTP, or WinRM protocol"
|
||||
msgstr "Falta autorização de protocolo ssh, sftp ou winrm no ativo ({asset})"
|
||||
|
||||
#: ops/api/job.py:72
|
||||
#: ops/api/job.py:90
|
||||
#, python-brace-format
|
||||
msgid "Asset ({asset}) authorization lacks upload permissions"
|
||||
msgstr "Falta permissão de upload no ativo ({asset})"
|
||||
|
||||
#: ops/api/job.py:160
|
||||
#: ops/api/job.py:185
|
||||
msgid "Duplicate file exists"
|
||||
msgstr "Existe um arquivo com o mesmo nome"
|
||||
|
||||
#: ops/api/job.py:165
|
||||
#: ops/api/job.py:190
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"File size exceeds maximum limit. Please select a file smaller than {limit}MB"
|
||||
|
|
@ -5720,7 +5748,7 @@ msgstr ""
|
|||
"O tamanho do arquivo excede o limite máximo. Selecione um arquivo menor que "
|
||||
"{limit}MB."
|
||||
|
||||
#: ops/api/job.py:238
|
||||
#: ops/api/job.py:273
|
||||
msgid ""
|
||||
"The task is being created and cannot be interrupted. Please try again later."
|
||||
msgstr ""
|
||||
|
|
@ -6028,7 +6056,7 @@ msgstr "Material"
|
|||
msgid "Material Type"
|
||||
msgstr "Tipo de Material"
|
||||
|
||||
#: ops/models/job.py:561
|
||||
#: ops/models/job.py:581
|
||||
msgid "Job Execution"
|
||||
msgstr "Execução de trabalhos"
|
||||
|
||||
|
|
@ -7657,40 +7685,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 +7729,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 +8258,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 +8615,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 {}"
|
||||
|
||||
|
|
@ -11802,6 +11836,10 @@ msgstr " Leste da China - Suqian"
|
|||
msgid "Port \"%(port)s\" of instance IP \"%(ip)s\" is not reachable"
|
||||
msgstr "O IP da instância %(ip)s na porta%(port)s não pode ser acessado"
|
||||
|
||||
#: xpack/plugins/cloud/providers/scp.py:108
|
||||
msgid "Empty"
|
||||
msgstr "Vazio "
|
||||
|
||||
#: xpack/plugins/cloud/serializers/account.py:104
|
||||
msgid "Validity display"
|
||||
msgstr "Exibição de validade"
|
||||
|
|
@ -11982,27 +12020,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"
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@ 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-17 18:20+0800\n"
|
||||
"PO-Revision-Date: 2025-11-13 12:26\n"
|
||||
"Last-Translator: ibuler <ibuler@qq.com>\n"
|
||||
"Language-Team: Russian\n"
|
||||
"Language: ru_RU\n"
|
||||
|
|
@ -19,14 +19,18 @@ 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/account.py:207
|
||||
msgid "No valid assets found for account creation."
|
||||
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 +468,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 +483,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 +530,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
|
||||
|
|
@ -586,8 +591,8 @@ msgstr "Просмотр активности аккаунта"
|
|||
#: assets/models/asset/common.py:166 assets/models/cmd_filter.py:21
|
||||
#: assets/models/label.py:18 assets/models/platform.py:15
|
||||
#: assets/models/platform.py:94 assets/models/zone.py:19
|
||||
#: assets/serializers/asset/common.py:174 assets/serializers/platform.py:158
|
||||
#: assets/serializers/platform.py:283
|
||||
#: assets/serializers/asset/common.py:174 assets/serializers/platform.py:159
|
||||
#: assets/serializers/platform.py:284
|
||||
#: authentication/backends/passkey/models.py:10
|
||||
#: authentication/models/ssh_key.py:12 authentication/notifications.py:17
|
||||
#: authentication/notifications.py:56
|
||||
|
|
@ -625,7 +630,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 +803,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 +1032,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
|
||||
|
|
@ -1218,8 +1223,8 @@ msgstr "Политика существования УЗ"
|
|||
|
||||
#: accounts/serializers/account/account.py:206 assets/models/label.py:21
|
||||
#: assets/models/platform.py:95 assets/serializers/asset/common.py:145
|
||||
#: assets/serializers/cagegory.py:12 assets/serializers/platform.py:173
|
||||
#: assets/serializers/platform.py:284 perms/serializers/user_permission.py:27
|
||||
#: assets/serializers/cagegory.py:12 assets/serializers/platform.py:174
|
||||
#: assets/serializers/platform.py:285 perms/serializers/user_permission.py:27
|
||||
#: settings/models.py:41 tickets/models/ticket/apply_application.py:13
|
||||
#: users/models/preference.py:12 xpack/plugins/cloud/models.py:41
|
||||
#: xpack/plugins/cloud/models.py:327
|
||||
|
|
@ -1231,7 +1236,7 @@ msgstr "Категория"
|
|||
#: acls/serializers/command_acl.py:19 assets/models/automations/base.py:27
|
||||
#: assets/models/automations/base.py:146 assets/models/cmd_filter.py:74
|
||||
#: assets/models/platform.py:96 assets/serializers/asset/common.py:146
|
||||
#: assets/serializers/platform.py:160 assets/serializers/platform.py:172
|
||||
#: assets/serializers/platform.py:161 assets/serializers/platform.py:173
|
||||
#: audits/serializers.py:76 audits/serializers.py:196
|
||||
#: authentication/models/connection_token.py:67
|
||||
#: authentication/serializers/connect_token_secret.py:138
|
||||
|
|
@ -1266,54 +1271,47 @@ 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
|
||||
#: perms/models/perm_node.py:21 settings/models.py:245
|
||||
#: 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"
|
||||
|
|
@ -1439,8 +1437,9 @@ msgid ""
|
|||
"Associated platform, you can configure push parameters. If not associated, "
|
||||
"default parameters will be used"
|
||||
msgstr ""
|
||||
"Свяжите платформу для настройки параметров публикации УЗ. Если привязки нет,"
|
||||
" будут использоваться параметры по умолчанию."
|
||||
"Укажите платформу, чтобы настроить особые параметры публикации УЗ. Если не "
|
||||
"настраивать отдельные параметры, публикация УЗ будет выполнена с параметрами"
|
||||
" по умолчанию"
|
||||
|
||||
#: accounts/serializers/account/virtual.py:24
|
||||
msgid ""
|
||||
|
|
@ -1752,7 +1751,7 @@ msgstr "Количество типов"
|
|||
#: accounts/templates/accounts/change_secret_report.html:33
|
||||
#: accounts/templates/accounts/gather_account_report.html:31
|
||||
#: accounts/templates/accounts/push_account_report.html:32
|
||||
#: assets/serializers/domain.py:23 assets/serializers/platform.py:182
|
||||
#: assets/serializers/domain.py:23 assets/serializers/platform.py:183
|
||||
#: orgs/serializers.py:13 perms/serializers/permission.py:61
|
||||
msgid "Assets amount"
|
||||
msgstr "Количество активов"
|
||||
|
|
@ -1784,7 +1783,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 +1906,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:182 assets/serializers/platform.py:214
|
||||
#: 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 +1977,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 +1985,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"
|
||||
|
|
@ -2188,12 +2199,12 @@ msgstr "Мы хотим сообщить вам, что недавно воше
|
|||
msgid "User details"
|
||||
msgstr "Данные пользователя"
|
||||
|
||||
#: assets/api/asset/asset.py:154
|
||||
#: assets/api/asset/asset.py:153
|
||||
msgid "Cannot create asset directly, you should create a host or other"
|
||||
msgstr ""
|
||||
"Невозможно создать актив напрямую, вам следует создать хост или другой тип"
|
||||
|
||||
#: assets/api/asset/asset.py:158
|
||||
#: assets/api/asset/asset.py:157
|
||||
msgid "The number of assets exceeds the limit of 5000"
|
||||
msgstr "Количество активов превышает лимит в 5000"
|
||||
|
||||
|
|
@ -2638,8 +2649,9 @@ msgid "Cloud"
|
|||
msgstr "Облака"
|
||||
|
||||
#: assets/models/asset/common.py:101 assets/models/platform.py:16
|
||||
#: settings/serializers/auth/radius.py:18 settings/serializers/auth/sms.py:77
|
||||
#: settings/serializers/msg.py:31 terminal/serializers/storage.py:133
|
||||
#: assets/serializers/platform.py:87 settings/serializers/auth/radius.py:18
|
||||
#: settings/serializers/auth/sms.py:77 settings/serializers/msg.py:31
|
||||
#: terminal/serializers/storage.py:133
|
||||
#: xpack/plugins/cloud/serializers/account_attrs.py:88
|
||||
msgid "Port"
|
||||
msgstr "Порт"
|
||||
|
|
@ -2677,19 +2689,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 "Изменение папки актива"
|
||||
|
||||
|
|
@ -2855,7 +2867,7 @@ msgstr "Значение"
|
|||
|
||||
#: assets/models/label.py:40 assets/serializers/cagegory.py:10
|
||||
#: assets/serializers/cagegory.py:17 assets/serializers/cagegory.py:23
|
||||
#: assets/serializers/platform.py:159
|
||||
#: assets/serializers/platform.py:160
|
||||
#: authentication/serializers/connect_token_secret.py:136
|
||||
#: common/serializers/common.py:85 labels/serializers.py:45
|
||||
#: settings/serializers/msg.py:91 xpack/plugins/cloud/models.py:404
|
||||
|
|
@ -2906,7 +2918,7 @@ msgstr "Основной"
|
|||
msgid "Required"
|
||||
msgstr "Обязательно"
|
||||
|
||||
#: assets/models/platform.py:19 assets/serializers/platform.py:161
|
||||
#: assets/models/platform.py:19 assets/serializers/platform.py:162
|
||||
#: terminal/models/component/storage.py:28 users/const.py:42
|
||||
#: xpack/plugins/cloud/providers/nutanix.py:30
|
||||
msgid "Default"
|
||||
|
|
@ -3009,11 +3021,11 @@ msgstr "Параметры удаления УЗ"
|
|||
msgid "Internal"
|
||||
msgstr "Встроенный"
|
||||
|
||||
#: assets/models/platform.py:102 assets/serializers/platform.py:171
|
||||
#: assets/models/platform.py:102 assets/serializers/platform.py:172
|
||||
msgid "Charset"
|
||||
msgstr "Кодировка"
|
||||
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:209
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:210
|
||||
msgid "Gateway enabled"
|
||||
msgstr "Шлюз включен"
|
||||
|
||||
|
|
@ -3021,15 +3033,15 @@ msgstr "Шлюз включен"
|
|||
msgid "DS enabled"
|
||||
msgstr "Службы Каталогов включены"
|
||||
|
||||
#: assets/models/platform.py:107 assets/serializers/platform.py:202
|
||||
#: assets/models/platform.py:107 assets/serializers/platform.py:203
|
||||
msgid "Su enabled"
|
||||
msgstr "Переключение su включено"
|
||||
|
||||
#: assets/models/platform.py:108 assets/serializers/platform.py:177
|
||||
#: assets/models/platform.py:108 assets/serializers/platform.py:178
|
||||
msgid "Su method"
|
||||
msgstr "Способ переключения su"
|
||||
|
||||
#: assets/models/platform.py:109 assets/serializers/platform.py:180
|
||||
#: assets/models/platform.py:109 assets/serializers/platform.py:181
|
||||
msgid "Custom fields"
|
||||
msgstr "Настраиваемые поля"
|
||||
|
||||
|
|
@ -3046,7 +3058,7 @@ msgstr ""
|
|||
"Пакетное обновление платформы в активах, пропуская активы, которые не "
|
||||
"соответствуют типу платформы"
|
||||
|
||||
#: assets/serializers/asset/common.py:36 assets/serializers/platform.py:153
|
||||
#: assets/serializers/asset/common.py:36 assets/serializers/platform.py:154
|
||||
msgid "Protocols, format is [\"protocol/port\"]"
|
||||
msgstr "Протокол, формат [\"протокол/порт\"]"
|
||||
|
||||
|
|
@ -3070,7 +3082,7 @@ msgstr ""
|
|||
"Путь к папке в формате [\"/Организация/Имя папки\"], если папка не "
|
||||
"существует, она будет создана"
|
||||
|
||||
#: assets/serializers/asset/common.py:147 assets/serializers/platform.py:174
|
||||
#: assets/serializers/asset/common.py:147 assets/serializers/platform.py:175
|
||||
#: authentication/serializers/connect_token_secret.py:30
|
||||
#: authentication/serializers/connect_token_secret.py:77
|
||||
#: perms/models/asset_permission.py:76 perms/serializers/permission.py:67
|
||||
|
|
@ -3292,7 +3304,7 @@ msgstr "Включить удаление учетной записи"
|
|||
msgid "Port from addr"
|
||||
msgstr "Порт из адреса"
|
||||
|
||||
#: assets/serializers/platform.py:98
|
||||
#: assets/serializers/platform.py:99
|
||||
msgid ""
|
||||
"This protocol is primary, and it must be set when adding assets. "
|
||||
"Additionally, there can only be one primary protocol."
|
||||
|
|
@ -3300,13 +3312,13 @@ msgstr ""
|
|||
"Этот протокол является основным, и его необходимо задать при добавлении "
|
||||
"активов. Основной протокол может быть только один."
|
||||
|
||||
#: assets/serializers/platform.py:103
|
||||
#: assets/serializers/platform.py:104
|
||||
msgid "This protocol is required, and it must be set when adding assets."
|
||||
msgstr ""
|
||||
"Этот протокол является обязательным, и его необходимо настроить при "
|
||||
"добавлении активов."
|
||||
|
||||
#: assets/serializers/platform.py:106
|
||||
#: assets/serializers/platform.py:107
|
||||
msgid ""
|
||||
"This protocol is default, when adding assets, it will be displayed by "
|
||||
"default."
|
||||
|
|
@ -3314,25 +3326,25 @@ msgstr ""
|
|||
"Этот протокол установлен по умолчанию, при добавлении активов он будет "
|
||||
"отображаться по умолчанию."
|
||||
|
||||
#: assets/serializers/platform.py:109
|
||||
#: assets/serializers/platform.py:110
|
||||
msgid "This protocol is public, asset will show this protocol to user"
|
||||
msgstr ""
|
||||
"Этот протокол является общедоступным, активы будут отображать этот протокол "
|
||||
"пользователям"
|
||||
|
||||
#: assets/serializers/platform.py:162
|
||||
#: assets/serializers/platform.py:163
|
||||
msgid "Help text"
|
||||
msgstr "Помощь"
|
||||
|
||||
#: assets/serializers/platform.py:163
|
||||
#: assets/serializers/platform.py:164
|
||||
msgid "Choices"
|
||||
msgstr "Выбор"
|
||||
|
||||
#: assets/serializers/platform.py:175
|
||||
#: assets/serializers/platform.py:176
|
||||
msgid "Automation"
|
||||
msgstr "Автоматизация"
|
||||
|
||||
#: assets/serializers/platform.py:204
|
||||
#: assets/serializers/platform.py:205
|
||||
msgid ""
|
||||
"Login with account when accessing assets, then automatically switch to "
|
||||
"another, similar to logging in with a regular account and then switching to "
|
||||
|
|
@ -3342,19 +3354,19 @@ msgstr ""
|
|||
"автоматически переключитесь на другую учетную запись, как если бы вы вошли с"
|
||||
" обычной учетной записью и затем переключились на root"
|
||||
|
||||
#: assets/serializers/platform.py:210
|
||||
#: assets/serializers/platform.py:211
|
||||
msgid "Assets can be connected using a zone gateway"
|
||||
msgstr "Активы могут быть подключены с помощью шлюза зоны"
|
||||
|
||||
#: assets/serializers/platform.py:212
|
||||
#: assets/serializers/platform.py:213
|
||||
msgid "Default zone"
|
||||
msgstr "Зона по умолчанию"
|
||||
|
||||
#: assets/serializers/platform.py:239
|
||||
#: assets/serializers/platform.py:240
|
||||
msgid "type is required"
|
||||
msgstr "тип обязателен"
|
||||
|
||||
#: assets/serializers/platform.py:254
|
||||
#: assets/serializers/platform.py:255
|
||||
msgid "Protocols is required"
|
||||
msgstr "Требуется указание протокола"
|
||||
|
||||
|
|
@ -3600,7 +3612,7 @@ msgstr "Задача"
|
|||
msgid "-"
|
||||
msgstr "-"
|
||||
|
||||
#: audits/handler.py:128
|
||||
#: audits/handler.py:130
|
||||
msgid "Yes"
|
||||
msgstr "Да"
|
||||
|
||||
|
|
@ -3887,35 +3899,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 +3967,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 +4008,11 @@ msgstr ""
|
|||
msgid "Invalid token or cache refreshed."
|
||||
msgstr "Обновлённый токен или кэш недействителен."
|
||||
|
||||
#: authentication/backends/oidc/views.py:175
|
||||
#: authentication/backends/oauth2/views.py:67
|
||||
msgid "OAuth2 Error"
|
||||
msgstr "Ошибка OAuth2"
|
||||
|
||||
#: authentication/backends/oidc/views.py:137
|
||||
msgid "OpenID Error"
|
||||
msgstr "Ошибка OpenID"
|
||||
|
||||
|
|
@ -4027,7 +4043,7 @@ msgstr "Дополнительно"
|
|||
msgid "Credential ID"
|
||||
msgstr "ID учетных данных"
|
||||
|
||||
#: authentication/backends/saml2/views.py:282
|
||||
#: authentication/backends/saml2/views.py:255
|
||||
msgid "SAML2 Error"
|
||||
msgstr "Ошибка SAML2"
|
||||
|
||||
|
|
@ -4224,16 +4240,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 +4370,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 +4391,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 +4915,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 +5073,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 +5614,7 @@ msgstr ""
|
|||
msgid "App Labels"
|
||||
msgstr "Управление тегами"
|
||||
|
||||
#: labels/models.py:15 settings/serializers/security.py:211
|
||||
#: labels/models.py:15
|
||||
msgid "Color"
|
||||
msgstr "Цвет"
|
||||
|
||||
|
|
@ -5649,16 +5674,16 @@ msgstr ""
|
|||
"Эта задача выполняется при необходимости отправки внутреннего сообщения\n"
|
||||
" для системных оповещений, заявок и т.п."
|
||||
|
||||
#: ops/ansible/inventory.py:135 ops/ansible/inventory.py:205
|
||||
#: ops/ansible/inventory.py:136 ops/ansible/inventory.py:206
|
||||
#: ops/models/job.py:69
|
||||
msgid "No account available"
|
||||
msgstr "Нет доступных учетных записей"
|
||||
|
||||
#: ops/ansible/inventory.py:326 ops/ansible/inventory.py:368
|
||||
#: ops/ansible/inventory.py:327 ops/ansible/inventory.py:369
|
||||
msgid "Ansible disabled"
|
||||
msgstr "Ansible отключен"
|
||||
|
||||
#: ops/ansible/inventory.py:384
|
||||
#: ops/ansible/inventory.py:385
|
||||
msgid "Skip hosts below:"
|
||||
msgstr "Пропустить следующие хосты:"
|
||||
|
||||
|
|
@ -5674,7 +5699,11 @@ msgstr "Задача {} не найдена"
|
|||
msgid "Task {} args or kwargs error"
|
||||
msgstr "Ошибка параметров выполнения задачи {}"
|
||||
|
||||
#: ops/api/job.py:70
|
||||
#: ops/api/job.py:65
|
||||
msgid "Login to asset {}({}) is rejected by login asset ACL ({})"
|
||||
msgstr ""
|
||||
|
||||
#: ops/api/job.py:88
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Asset ({asset}) must have at least one of the following protocols added: "
|
||||
|
|
@ -5683,22 +5712,22 @@ msgstr ""
|
|||
"В актив ({asset}) необходимо добавить как минимум один из протоколов: ssh, "
|
||||
"sftp или winrm"
|
||||
|
||||
#: ops/api/job.py:71
|
||||
#: ops/api/job.py:89
|
||||
#, python-brace-format
|
||||
msgid "Asset ({asset}) authorization is missing SSH, SFTP, or WinRM protocol"
|
||||
msgstr ""
|
||||
"Авторизация для актива ({asset}) не включает протоколы ssh, sftp или winrm"
|
||||
|
||||
#: ops/api/job.py:72
|
||||
#: ops/api/job.py:90
|
||||
#, python-brace-format
|
||||
msgid "Asset ({asset}) authorization lacks upload permissions"
|
||||
msgstr "Авторизация актива ({asset}) не имеет разрешения на загрузку"
|
||||
|
||||
#: ops/api/job.py:160
|
||||
#: ops/api/job.py:185
|
||||
msgid "Duplicate file exists"
|
||||
msgstr "Файл с таким именем существует"
|
||||
|
||||
#: ops/api/job.py:165
|
||||
#: ops/api/job.py:190
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"File size exceeds maximum limit. Please select a file smaller than {limit}MB"
|
||||
|
|
@ -5706,7 +5735,7 @@ msgstr ""
|
|||
"Размер файла превышает максимальный лимит. Пожалуйста, выберите файл меньше "
|
||||
"{limit}MB"
|
||||
|
||||
#: ops/api/job.py:238
|
||||
#: ops/api/job.py:273
|
||||
msgid ""
|
||||
"The task is being created and cannot be interrupted. Please try again later."
|
||||
msgstr "Создание задачи, не удалось прервать, попробуйте позже."
|
||||
|
|
@ -6011,7 +6040,7 @@ msgstr "Material"
|
|||
msgid "Material Type"
|
||||
msgstr "Тип Material"
|
||||
|
||||
#: ops/models/job.py:561
|
||||
#: ops/models/job.py:581
|
||||
msgid "Job Execution"
|
||||
msgstr "Выполнение задания"
|
||||
|
||||
|
|
@ -6783,7 +6812,7 @@ 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 +7666,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 +7710,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 +8229,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 +8582,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 ", отключено {}"
|
||||
|
||||
|
|
@ -11767,6 +11800,12 @@ msgstr "Восточный Китай - Сучжоу"
|
|||
msgid "Port \"%(port)s\" of instance IP \"%(ip)s\" is not reachable"
|
||||
msgstr "Порт %(port)s IP-адреса экземпляра %(ip)s недоступен"
|
||||
|
||||
#: xpack/plugins/cloud/providers/scp.py:108
|
||||
#, fuzzy
|
||||
#| msgid "empty"
|
||||
msgid "Empty"
|
||||
msgstr "пусто"
|
||||
|
||||
#: xpack/plugins/cloud/serializers/account.py:104
|
||||
msgid "Validity display"
|
||||
msgstr "Отображение срока действия"
|
||||
|
|
|
|||
|
|
@ -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-17 17:53+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,18 @@ 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/account.py:207
|
||||
msgid "No valid assets found for account creation."
|
||||
msgstr "Không tìm thấy tài sản hợp lệ để tạo tài khoản."
|
||||
|
||||
#: 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 +467,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 +482,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 +529,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
|
||||
|
|
@ -585,8 +590,8 @@ msgstr "Hoạt động tài khoản"
|
|||
#: assets/models/asset/common.py:166 assets/models/cmd_filter.py:21
|
||||
#: assets/models/label.py:18 assets/models/platform.py:15
|
||||
#: assets/models/platform.py:94 assets/models/zone.py:19
|
||||
#: assets/serializers/asset/common.py:174 assets/serializers/platform.py:158
|
||||
#: assets/serializers/platform.py:283
|
||||
#: assets/serializers/asset/common.py:174 assets/serializers/platform.py:159
|
||||
#: assets/serializers/platform.py:284
|
||||
#: authentication/backends/passkey/models.py:10
|
||||
#: authentication/models/ssh_key.py:12 authentication/notifications.py:17
|
||||
#: authentication/notifications.py:56
|
||||
|
|
@ -624,7 +629,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 +802,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 +1034,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
|
||||
|
|
@ -1227,8 +1232,8 @@ msgstr "Tài khoản đã tồn tại chính sách"
|
|||
|
||||
#: accounts/serializers/account/account.py:206 assets/models/label.py:21
|
||||
#: assets/models/platform.py:95 assets/serializers/asset/common.py:145
|
||||
#: assets/serializers/cagegory.py:12 assets/serializers/platform.py:173
|
||||
#: assets/serializers/platform.py:284 perms/serializers/user_permission.py:27
|
||||
#: assets/serializers/cagegory.py:12 assets/serializers/platform.py:174
|
||||
#: assets/serializers/platform.py:285 perms/serializers/user_permission.py:27
|
||||
#: settings/models.py:41 tickets/models/ticket/apply_application.py:13
|
||||
#: users/models/preference.py:12 xpack/plugins/cloud/models.py:41
|
||||
#: xpack/plugins/cloud/models.py:327
|
||||
|
|
@ -1240,7 +1245,7 @@ msgstr "Thể loại"
|
|||
#: acls/serializers/command_acl.py:19 assets/models/automations/base.py:27
|
||||
#: assets/models/automations/base.py:146 assets/models/cmd_filter.py:74
|
||||
#: assets/models/platform.py:96 assets/serializers/asset/common.py:146
|
||||
#: assets/serializers/platform.py:160 assets/serializers/platform.py:172
|
||||
#: assets/serializers/platform.py:161 assets/serializers/platform.py:173
|
||||
#: audits/serializers.py:76 audits/serializers.py:196
|
||||
#: authentication/models/connection_token.py:67
|
||||
#: authentication/serializers/connect_token_secret.py:138
|
||||
|
|
@ -1274,54 +1279,47 @@ 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
|
||||
#: perms/models/perm_node.py:21 settings/models.py:245
|
||||
#: 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 +1344,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"
|
||||
|
|
@ -1764,7 +1762,7 @@ msgstr "Số loại"
|
|||
#: accounts/templates/accounts/change_secret_report.html:33
|
||||
#: accounts/templates/accounts/gather_account_report.html:31
|
||||
#: accounts/templates/accounts/push_account_report.html:32
|
||||
#: assets/serializers/domain.py:23 assets/serializers/platform.py:182
|
||||
#: assets/serializers/domain.py:23 assets/serializers/platform.py:183
|
||||
#: orgs/serializers.py:13 perms/serializers/permission.py:61
|
||||
msgid "Assets amount"
|
||||
msgstr "Số lượng tài sản"
|
||||
|
|
@ -1796,7 +1794,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 +1920,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:182 assets/serializers/platform.py:214
|
||||
#: 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
|
||||
|
|
@ -2203,7 +2213,7 @@ msgstr "Chúng tôi xin thông báo rằng, gần đây có người dùng đã
|
|||
msgid "User details"
|
||||
msgstr "Thông tin người dùng"
|
||||
|
||||
#: assets/api/asset/asset.py:154
|
||||
#: assets/api/asset/asset.py:153
|
||||
msgid "Cannot create asset directly, you should create a host or other"
|
||||
msgstr ""
|
||||
"Không thể tạo tài sản trực tiếp, bạn nên tạo máy chủ hoặc các tài sản khác. "
|
||||
|
|
@ -2217,7 +2227,7 @@ msgstr ""
|
|||
"<–SEP–> >>> Không có nhiệm vụ nào cần thực hiện. <–SEP–> >>> Bắt đầu thực "
|
||||
"hiện đợt nhiệm vụ thứ {index}. <–SEP–> Không có tài khoản."
|
||||
|
||||
#: assets/api/asset/asset.py:158
|
||||
#: assets/api/asset/asset.py:157
|
||||
msgid "The number of assets exceeds the limit of 5000"
|
||||
msgstr "Số lượng tài sản vượt quá giới hạn 5000"
|
||||
|
||||
|
|
@ -2662,8 +2672,9 @@ msgid "Cloud"
|
|||
msgstr "Dịch vụ đám mây"
|
||||
|
||||
#: assets/models/asset/common.py:101 assets/models/platform.py:16
|
||||
#: settings/serializers/auth/radius.py:18 settings/serializers/auth/sms.py:77
|
||||
#: settings/serializers/msg.py:31 terminal/serializers/storage.py:133
|
||||
#: assets/serializers/platform.py:87 settings/serializers/auth/radius.py:18
|
||||
#: settings/serializers/auth/sms.py:77 settings/serializers/msg.py:31
|
||||
#: terminal/serializers/storage.py:133
|
||||
#: xpack/plugins/cloud/serializers/account_attrs.py:88
|
||||
msgid "Port"
|
||||
msgstr "Cổng"
|
||||
|
|
@ -2701,19 +2712,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"
|
||||
|
||||
|
|
@ -2877,7 +2888,7 @@ msgstr "Giá trị"
|
|||
|
||||
#: assets/models/label.py:40 assets/serializers/cagegory.py:10
|
||||
#: assets/serializers/cagegory.py:17 assets/serializers/cagegory.py:23
|
||||
#: assets/serializers/platform.py:159
|
||||
#: assets/serializers/platform.py:160
|
||||
#: authentication/serializers/connect_token_secret.py:136
|
||||
#: common/serializers/common.py:85 labels/serializers.py:45
|
||||
#: settings/serializers/msg.py:91 xpack/plugins/cloud/models.py:404
|
||||
|
|
@ -2928,7 +2939,7 @@ msgstr "Chính"
|
|||
msgid "Required"
|
||||
msgstr "Thiết yếu"
|
||||
|
||||
#: assets/models/platform.py:19 assets/serializers/platform.py:161
|
||||
#: assets/models/platform.py:19 assets/serializers/platform.py:162
|
||||
#: terminal/models/component/storage.py:28 users/const.py:42
|
||||
#: xpack/plugins/cloud/providers/nutanix.py:30
|
||||
msgid "Default"
|
||||
|
|
@ -3031,11 +3042,11 @@ msgstr "Tham số xóa bỏ tài khoản"
|
|||
msgid "Internal"
|
||||
msgstr "Builtin"
|
||||
|
||||
#: assets/models/platform.py:102 assets/serializers/platform.py:171
|
||||
#: assets/models/platform.py:102 assets/serializers/platform.py:172
|
||||
msgid "Charset"
|
||||
msgstr "Mã hóa"
|
||||
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:209
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:210
|
||||
msgid "Gateway enabled"
|
||||
msgstr "Kích hoạt cổng mạng miền"
|
||||
|
||||
|
|
@ -3043,15 +3054,15 @@ msgstr "Kích hoạt cổng mạng miền"
|
|||
msgid "DS enabled"
|
||||
msgstr "Kích hoạt dịch vụ thư mục"
|
||||
|
||||
#: assets/models/platform.py:107 assets/serializers/platform.py:202
|
||||
#: assets/models/platform.py:107 assets/serializers/platform.py:203
|
||||
msgid "Su enabled"
|
||||
msgstr "Switch account enabled"
|
||||
|
||||
#: assets/models/platform.py:108 assets/serializers/platform.py:177
|
||||
#: assets/models/platform.py:108 assets/serializers/platform.py:178
|
||||
msgid "Su method"
|
||||
msgstr "Switch account method"
|
||||
|
||||
#: assets/models/platform.py:109 assets/serializers/platform.py:180
|
||||
#: assets/models/platform.py:109 assets/serializers/platform.py:181
|
||||
msgid "Custom fields"
|
||||
msgstr "Thuộc tính tùy chỉnh"
|
||||
|
||||
|
|
@ -3068,7 +3079,7 @@ msgstr ""
|
|||
"Tài sản trong cập nhật hàng loạt nền tảng, bỏ qua tài sản không phù hợp với "
|
||||
"loại nền tảng"
|
||||
|
||||
#: assets/serializers/asset/common.py:36 assets/serializers/platform.py:153
|
||||
#: assets/serializers/asset/common.py:36 assets/serializers/platform.py:154
|
||||
msgid "Protocols, format is [\"protocol/port\"]"
|
||||
msgstr "Giao thức, định dạng là [\"Giao thức/Cổng\"]"
|
||||
|
||||
|
|
@ -3092,7 +3103,7 @@ msgstr ""
|
|||
"Đường dẫn nút, định dạng là [\"/Tổ chức/Tên nút\"], nếu nút không tồn tại, "
|
||||
"sẽ tạo nó"
|
||||
|
||||
#: assets/serializers/asset/common.py:147 assets/serializers/platform.py:174
|
||||
#: assets/serializers/asset/common.py:147 assets/serializers/platform.py:175
|
||||
#: authentication/serializers/connect_token_secret.py:30
|
||||
#: authentication/serializers/connect_token_secret.py:77
|
||||
#: perms/models/asset_permission.py:76 perms/serializers/permission.py:67
|
||||
|
|
@ -3310,7 +3321,7 @@ msgstr "Khởi động xóa tài khoản"
|
|||
msgid "Port from addr"
|
||||
msgstr "Cổng đến từ địa chỉ"
|
||||
|
||||
#: assets/serializers/platform.py:98
|
||||
#: assets/serializers/platform.py:99
|
||||
msgid ""
|
||||
"This protocol is primary, and it must be set when adding assets. "
|
||||
"Additionally, there can only be one primary protocol."
|
||||
|
|
@ -3318,7 +3329,7 @@ msgstr ""
|
|||
"Giao thức này là chính, cần phải thiết lập khi thêm tài sản, và chỉ có thể "
|
||||
"có một giao thức chính."
|
||||
|
||||
#: assets/serializers/platform.py:103
|
||||
#: assets/serializers/platform.py:104
|
||||
msgid "This protocol is required, and it must be set when adding assets."
|
||||
msgstr ""
|
||||
"Thỏa thuận này là bắt buộc, cần phải thiết lập khi thêm tài sản. Thỏa thuận này là mặc định, sẽ hiển thị tự động khi thêm tài sản. Thỏa thuận này là công khai, tài sản sẽ hiển thị thỏa thuận này cho người dùng và có thể kết nối sử dụng. \n"
|
||||
|
|
@ -3347,13 +3358,13 @@ msgstr ""
|
|||
"\n"
|
||||
"Chưa sử dụng."
|
||||
|
||||
#: assets/serializers/platform.py:106
|
||||
#: assets/serializers/platform.py:107
|
||||
msgid ""
|
||||
"This protocol is default, when adding assets, it will be displayed by "
|
||||
"default."
|
||||
msgstr "Thỏa thuận này là mặc định, khi thêm tài sản, sẽ hiển thị mặc định."
|
||||
|
||||
#: assets/serializers/platform.py:109
|
||||
#: assets/serializers/platform.py:110
|
||||
msgid "This protocol is public, asset will show this protocol to user"
|
||||
msgstr ""
|
||||
"Thỏa thuận này là công khai, tài sản sẽ được hiển thị cho người dùng, và có "
|
||||
|
|
@ -3365,19 +3376,19 @@ msgstr ""
|
|||
"của tài sản. Thu thập thông tin phần cứng của tài sản. Tài sản thực hiện "
|
||||
"Action. Chưa sử dụng. Danh sách mã hóa là char. Danh sách mã hóa là text."
|
||||
|
||||
#: assets/serializers/platform.py:162
|
||||
#: assets/serializers/platform.py:163
|
||||
msgid "Help text"
|
||||
msgstr "Giúp đỡ"
|
||||
|
||||
#: assets/serializers/platform.py:163
|
||||
#: assets/serializers/platform.py:164
|
||||
msgid "Choices"
|
||||
msgstr "Lựa chọn"
|
||||
|
||||
#: assets/serializers/platform.py:175
|
||||
#: assets/serializers/platform.py:176
|
||||
msgid "Automation"
|
||||
msgstr "Tự động hóa"
|
||||
|
||||
#: assets/serializers/platform.py:204
|
||||
#: assets/serializers/platform.py:205
|
||||
msgid ""
|
||||
"Login with account when accessing assets, then automatically switch to "
|
||||
"another, similar to logging in with a regular account and then switching to "
|
||||
|
|
@ -3387,19 +3398,19 @@ msgstr ""
|
|||
" sang một tài khoản khác, giống như việc đăng nhập bằng tài khoản thông "
|
||||
"thường rồi chuyển sang root"
|
||||
|
||||
#: assets/serializers/platform.py:210
|
||||
#: assets/serializers/platform.py:211
|
||||
msgid "Assets can be connected using a zone gateway"
|
||||
msgstr "Tài sản có thể kết nối qua cổng khu vực"
|
||||
|
||||
#: assets/serializers/platform.py:212
|
||||
#: assets/serializers/platform.py:213
|
||||
msgid "Default zone"
|
||||
msgstr "Tên miền mặc định"
|
||||
|
||||
#: assets/serializers/platform.py:239
|
||||
#: assets/serializers/platform.py:240
|
||||
msgid "type is required"
|
||||
msgstr "Loại: trường này là bắt buộc."
|
||||
|
||||
#: assets/serializers/platform.py:254
|
||||
#: assets/serializers/platform.py:255
|
||||
msgid "Protocols is required"
|
||||
msgstr "Giao thức là bắt buộc"
|
||||
|
||||
|
|
@ -3643,7 +3654,7 @@ msgstr "Nhiệm vụ"
|
|||
msgid "-"
|
||||
msgstr "-"
|
||||
|
||||
#: audits/handler.py:128
|
||||
#: audits/handler.py:130
|
||||
msgid "Yes"
|
||||
msgstr "Là"
|
||||
|
||||
|
|
@ -3929,35 +3940,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 +4049,11 @@ 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/oauth2/views.py:67
|
||||
msgid "OAuth2 Error"
|
||||
msgstr "Lỗi OAuth2"
|
||||
|
||||
#: authentication/backends/oidc/views.py:137
|
||||
msgid "OpenID Error"
|
||||
msgstr "Lỗi OpenID."
|
||||
|
||||
|
|
@ -4069,7 +4084,7 @@ msgstr "Bổ sung"
|
|||
msgid "Credential ID"
|
||||
msgstr "Mã xác thực ID"
|
||||
|
||||
#: authentication/backends/saml2/views.py:282
|
||||
#: authentication/backends/saml2/views.py:255
|
||||
msgid "SAML2 Error"
|
||||
msgstr "Lỗi SAML2"
|
||||
|
||||
|
|
@ -4266,16 +4281,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 +4410,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 +4431,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 +4950,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 +5109,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 +5657,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"
|
||||
|
||||
|
|
@ -5693,16 +5717,16 @@ msgstr ""
|
|||
"Một số cảnh báo của hệ thống, đơn đặt hàng, v.v. cần gửi tin nhắn trong hệ "
|
||||
"thống sẽ thực hiện nhiệm vụ này"
|
||||
|
||||
#: ops/ansible/inventory.py:135 ops/ansible/inventory.py:205
|
||||
#: ops/ansible/inventory.py:136 ops/ansible/inventory.py:206
|
||||
#: ops/models/job.py:69
|
||||
msgid "No account available"
|
||||
msgstr "Không có tài khoản nào khả dụng"
|
||||
|
||||
#: ops/ansible/inventory.py:326 ops/ansible/inventory.py:368
|
||||
#: ops/ansible/inventory.py:327 ops/ansible/inventory.py:369
|
||||
msgid "Ansible disabled"
|
||||
msgstr "Ansible đã bị vô hiệu hóa"
|
||||
|
||||
#: ops/ansible/inventory.py:384
|
||||
#: ops/ansible/inventory.py:385
|
||||
msgid "Skip hosts below:"
|
||||
msgstr "Bỏ qua các máy chủ sau:"
|
||||
|
||||
|
|
@ -5718,7 +5742,11 @@ msgstr "Nhiệm vụ {} không tồn tại"
|
|||
msgid "Task {} args or kwargs error"
|
||||
msgstr "Nhiệm vụ {} có tham số thực thi không hợp lệ"
|
||||
|
||||
#: ops/api/job.py:70
|
||||
#: ops/api/job.py:65
|
||||
msgid "Login to asset {}({}) is rejected by login asset ACL ({})"
|
||||
msgstr ""
|
||||
|
||||
#: ops/api/job.py:88
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Asset ({asset}) must have at least one of the following protocols added: "
|
||||
|
|
@ -5726,21 +5754,21 @@ msgid ""
|
|||
msgstr ""
|
||||
"Tài sản ({asset}) ít nhất phải thêm một trong các giao thức ssh, sftp, winrm"
|
||||
|
||||
#: ops/api/job.py:71
|
||||
#: ops/api/job.py:89
|
||||
#, python-brace-format
|
||||
msgid "Asset ({asset}) authorization is missing SSH, SFTP, or WinRM protocol"
|
||||
msgstr "Ủy quyền tài sản ({asset}) thiếu giao thức ssh, sftp hoặc winrm"
|
||||
|
||||
#: ops/api/job.py:72
|
||||
#: ops/api/job.py:90
|
||||
#, python-brace-format
|
||||
msgid "Asset ({asset}) authorization lacks upload permissions"
|
||||
msgstr "Ủy quyền tài sản ({asset}) thiếu quyền tải lên"
|
||||
|
||||
#: ops/api/job.py:160
|
||||
#: ops/api/job.py:185
|
||||
msgid "Duplicate file exists"
|
||||
msgstr "Có tệp cùng tên tồn tại"
|
||||
|
||||
#: ops/api/job.py:165
|
||||
#: ops/api/job.py:190
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"File size exceeds maximum limit. Please select a file smaller than {limit}MB"
|
||||
|
|
@ -5748,7 +5776,7 @@ msgstr ""
|
|||
"Kích thước tệp vượt quá giới hạn tối đa. Vui lòng chọn tệp nhỏ hơn "
|
||||
"{limit}MB."
|
||||
|
||||
#: ops/api/job.py:238
|
||||
#: ops/api/job.py:273
|
||||
msgid ""
|
||||
"The task is being created and cannot be interrupted. Please try again later."
|
||||
msgstr "Đang tạo nhiệm vụ, không thể ngắt quãng, xin vui lòng thử lại sau."
|
||||
|
|
@ -6054,7 +6082,7 @@ msgstr "Vật liệu"
|
|||
msgid "Material Type"
|
||||
msgstr "Loại vật liệu"
|
||||
|
||||
#: ops/models/job.py:561
|
||||
#: ops/models/job.py:581
|
||||
msgid "Job Execution"
|
||||
msgstr "Thực thi công việc"
|
||||
|
||||
|
|
@ -7685,40 +7713,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 +7757,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 +8275,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 +8623,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 {}"
|
||||
|
||||
|
|
@ -11821,6 +11853,10 @@ msgstr "Hoa Đông - Thụy Kiến"
|
|||
msgid "Port \"%(port)s\" of instance IP \"%(ip)s\" is not reachable"
|
||||
msgstr "Cổng %(port)s của IP %(ip)s không thể truy cập"
|
||||
|
||||
#: xpack/plugins/cloud/providers/scp.py:108
|
||||
msgid "Empty"
|
||||
msgstr "Trống "
|
||||
|
||||
#: xpack/plugins/cloud/serializers/account.py:104
|
||||
msgid "Validity display"
|
||||
msgstr "Hiển thị tính hợp lệ"
|
||||
|
|
@ -12021,24 +12057,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."
|
||||
|
|
|
|||
|
|
@ -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-17 17:53+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,18 @@ 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/account.py:207
|
||||
msgid "No valid assets found for account creation."
|
||||
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 +462,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 +477,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 +524,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
|
||||
|
|
@ -580,8 +585,8 @@ msgstr "账号活动"
|
|||
#: assets/models/asset/common.py:166 assets/models/cmd_filter.py:21
|
||||
#: assets/models/label.py:18 assets/models/platform.py:15
|
||||
#: assets/models/platform.py:94 assets/models/zone.py:19
|
||||
#: assets/serializers/asset/common.py:174 assets/serializers/platform.py:158
|
||||
#: assets/serializers/platform.py:283
|
||||
#: assets/serializers/asset/common.py:174 assets/serializers/platform.py:159
|
||||
#: assets/serializers/platform.py:284
|
||||
#: authentication/backends/passkey/models.py:10
|
||||
#: authentication/models/ssh_key.py:12 authentication/notifications.py:17
|
||||
#: authentication/notifications.py:56
|
||||
|
|
@ -616,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
|
||||
|
|
@ -786,7 +791,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 +1015,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
|
||||
|
|
@ -1192,8 +1197,8 @@ msgstr "账号存在策略"
|
|||
|
||||
#: accounts/serializers/account/account.py:206 assets/models/label.py:21
|
||||
#: assets/models/platform.py:95 assets/serializers/asset/common.py:145
|
||||
#: assets/serializers/cagegory.py:12 assets/serializers/platform.py:173
|
||||
#: assets/serializers/platform.py:284 perms/serializers/user_permission.py:27
|
||||
#: assets/serializers/cagegory.py:12 assets/serializers/platform.py:174
|
||||
#: assets/serializers/platform.py:285 perms/serializers/user_permission.py:27
|
||||
#: settings/models.py:41 tickets/models/ticket/apply_application.py:13
|
||||
#: users/models/preference.py:12 xpack/plugins/cloud/models.py:41
|
||||
#: xpack/plugins/cloud/models.py:327
|
||||
|
|
@ -1205,7 +1210,7 @@ msgstr "类别"
|
|||
#: acls/serializers/command_acl.py:19 assets/models/automations/base.py:27
|
||||
#: assets/models/automations/base.py:146 assets/models/cmd_filter.py:74
|
||||
#: assets/models/platform.py:96 assets/serializers/asset/common.py:146
|
||||
#: assets/serializers/platform.py:160 assets/serializers/platform.py:172
|
||||
#: assets/serializers/platform.py:161 assets/serializers/platform.py:173
|
||||
#: audits/serializers.py:76 audits/serializers.py:196
|
||||
#: authentication/models/connection_token.py:67
|
||||
#: authentication/serializers/connect_token_secret.py:138 ops/models/job.py:155
|
||||
|
|
@ -1239,54 +1244,47 @@ 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
|
||||
#: perms/models/perm_node.py:21 settings/models.py:245
|
||||
#: 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 +1308,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"
|
||||
|
|
@ -1715,7 +1713,7 @@ msgstr "类型数"
|
|||
#: accounts/templates/accounts/change_secret_report.html:33
|
||||
#: accounts/templates/accounts/gather_account_report.html:31
|
||||
#: accounts/templates/accounts/push_account_report.html:32
|
||||
#: assets/serializers/domain.py:23 assets/serializers/platform.py:182
|
||||
#: assets/serializers/domain.py:23 assets/serializers/platform.py:183
|
||||
#: orgs/serializers.py:13 perms/serializers/permission.py:61
|
||||
msgid "Assets amount"
|
||||
msgstr "资产数量"
|
||||
|
|
@ -1747,7 +1745,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 +1866,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:182 assets/serializers/platform.py:214
|
||||
#: 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
|
||||
|
|
@ -2144,11 +2154,11 @@ msgstr "我们想通知您,最近有用户登录:"
|
|||
msgid "User details"
|
||||
msgstr "用户详情"
|
||||
|
||||
#: assets/api/asset/asset.py:154
|
||||
#: assets/api/asset/asset.py:153
|
||||
msgid "Cannot create asset directly, you should create a host or other"
|
||||
msgstr "不能直接创建资产, 你应该创建主机或其他资产"
|
||||
|
||||
#: assets/api/asset/asset.py:158
|
||||
#: assets/api/asset/asset.py:157
|
||||
msgid "The number of assets exceeds the limit of 5000"
|
||||
msgstr "资产数量超过了 5000 的限制"
|
||||
|
||||
|
|
@ -2582,8 +2592,9 @@ msgid "Cloud"
|
|||
msgstr "云服务"
|
||||
|
||||
#: assets/models/asset/common.py:101 assets/models/platform.py:16
|
||||
#: settings/serializers/auth/radius.py:18 settings/serializers/auth/sms.py:77
|
||||
#: settings/serializers/msg.py:31 terminal/serializers/storage.py:133
|
||||
#: assets/serializers/platform.py:87 settings/serializers/auth/radius.py:18
|
||||
#: settings/serializers/auth/sms.py:77 settings/serializers/msg.py:31
|
||||
#: terminal/serializers/storage.py:133
|
||||
#: xpack/plugins/cloud/serializers/account_attrs.py:88
|
||||
msgid "Port"
|
||||
msgstr "端口"
|
||||
|
|
@ -2621,19 +2632,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 "可以修改资产节点"
|
||||
|
||||
|
|
@ -2799,7 +2810,7 @@ msgstr "值"
|
|||
|
||||
#: assets/models/label.py:40 assets/serializers/cagegory.py:10
|
||||
#: assets/serializers/cagegory.py:17 assets/serializers/cagegory.py:23
|
||||
#: assets/serializers/platform.py:159
|
||||
#: assets/serializers/platform.py:160
|
||||
#: authentication/serializers/connect_token_secret.py:136
|
||||
#: common/serializers/common.py:85 labels/serializers.py:45
|
||||
#: settings/serializers/msg.py:91 xpack/plugins/cloud/models.py:404
|
||||
|
|
@ -2850,7 +2861,7 @@ msgstr "主要的"
|
|||
msgid "Required"
|
||||
msgstr "必须的"
|
||||
|
||||
#: assets/models/platform.py:19 assets/serializers/platform.py:161
|
||||
#: assets/models/platform.py:19 assets/serializers/platform.py:162
|
||||
#: terminal/models/component/storage.py:28 users/const.py:42
|
||||
#: xpack/plugins/cloud/providers/nutanix.py:30
|
||||
msgid "Default"
|
||||
|
|
@ -2953,11 +2964,11 @@ msgstr "账号移除参数"
|
|||
msgid "Internal"
|
||||
msgstr "内置"
|
||||
|
||||
#: assets/models/platform.py:102 assets/serializers/platform.py:171
|
||||
#: assets/models/platform.py:102 assets/serializers/platform.py:172
|
||||
msgid "Charset"
|
||||
msgstr "编码"
|
||||
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:209
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:210
|
||||
msgid "Gateway enabled"
|
||||
msgstr "启用网域网关"
|
||||
|
||||
|
|
@ -2965,15 +2976,15 @@ msgstr "启用网域网关"
|
|||
msgid "DS enabled"
|
||||
msgstr "启用目录服务"
|
||||
|
||||
#: assets/models/platform.py:107 assets/serializers/platform.py:202
|
||||
#: assets/models/platform.py:107 assets/serializers/platform.py:203
|
||||
msgid "Su enabled"
|
||||
msgstr "启用账号切换"
|
||||
|
||||
#: assets/models/platform.py:108 assets/serializers/platform.py:177
|
||||
#: assets/models/platform.py:108 assets/serializers/platform.py:178
|
||||
msgid "Su method"
|
||||
msgstr "账号切换方式"
|
||||
|
||||
#: assets/models/platform.py:109 assets/serializers/platform.py:180
|
||||
#: assets/models/platform.py:109 assets/serializers/platform.py:181
|
||||
msgid "Custom fields"
|
||||
msgstr "自定义属性"
|
||||
|
||||
|
|
@ -2988,7 +2999,7 @@ msgid ""
|
|||
"type"
|
||||
msgstr "资产中批量更新平台,不符合平台类型跳过的资产"
|
||||
|
||||
#: assets/serializers/asset/common.py:36 assets/serializers/platform.py:153
|
||||
#: assets/serializers/asset/common.py:36 assets/serializers/platform.py:154
|
||||
msgid "Protocols, format is [\"protocol/port\"]"
|
||||
msgstr "协议,格式为 [\"协议/端口\"]"
|
||||
|
||||
|
|
@ -3010,7 +3021,7 @@ msgid ""
|
|||
"it"
|
||||
msgstr "节点路径,格式为 [\"/组织/节点名\"], 如果节点不存在,将创建它"
|
||||
|
||||
#: assets/serializers/asset/common.py:147 assets/serializers/platform.py:174
|
||||
#: assets/serializers/asset/common.py:147 assets/serializers/platform.py:175
|
||||
#: authentication/serializers/connect_token_secret.py:30
|
||||
#: authentication/serializers/connect_token_secret.py:77
|
||||
#: perms/models/asset_permission.py:76 perms/serializers/permission.py:67
|
||||
|
|
@ -3228,39 +3239,39 @@ msgstr "启动账号移除"
|
|||
msgid "Port from addr"
|
||||
msgstr "端口来自地址"
|
||||
|
||||
#: assets/serializers/platform.py:98
|
||||
#: assets/serializers/platform.py:99
|
||||
msgid ""
|
||||
"This protocol is primary, and it must be set when adding assets. "
|
||||
"Additionally, there can only be one primary protocol."
|
||||
msgstr "该协议是主要的,添加资产时必须设置,并且只能有一个主要协议"
|
||||
|
||||
#: assets/serializers/platform.py:103
|
||||
#: assets/serializers/platform.py:104
|
||||
msgid "This protocol is required, and it must be set when adding assets."
|
||||
msgstr "该协议是必填的,添加资产时必须设置"
|
||||
|
||||
#: assets/serializers/platform.py:106
|
||||
#: assets/serializers/platform.py:107
|
||||
msgid ""
|
||||
"This protocol is default, when adding assets, it will be displayed by "
|
||||
"default."
|
||||
msgstr "该协议是默认的,添加资产时,将默认显示"
|
||||
|
||||
#: assets/serializers/platform.py:109
|
||||
#: assets/serializers/platform.py:110
|
||||
msgid "This protocol is public, asset will show this protocol to user"
|
||||
msgstr "该协议是公开的,资产将向用户显示该协议并可以连接使用"
|
||||
|
||||
#: assets/serializers/platform.py:162
|
||||
#: assets/serializers/platform.py:163
|
||||
msgid "Help text"
|
||||
msgstr "帮助"
|
||||
|
||||
#: assets/serializers/platform.py:163
|
||||
#: assets/serializers/platform.py:164
|
||||
msgid "Choices"
|
||||
msgstr "选择"
|
||||
|
||||
#: assets/serializers/platform.py:175
|
||||
#: assets/serializers/platform.py:176
|
||||
msgid "Automation"
|
||||
msgstr "自动化"
|
||||
|
||||
#: assets/serializers/platform.py:204
|
||||
#: assets/serializers/platform.py:205
|
||||
msgid ""
|
||||
"Login with account when accessing assets, then automatically switch to "
|
||||
"another, similar to logging in with a regular account and then switching to "
|
||||
|
|
@ -3269,19 +3280,19 @@ msgstr ""
|
|||
"在访问资产时使用账号登录,然后自动切换到另一个账号,就像用普通账号登录然后切"
|
||||
"换到 root 一样"
|
||||
|
||||
#: assets/serializers/platform.py:210
|
||||
#: assets/serializers/platform.py:211
|
||||
msgid "Assets can be connected using a zone gateway"
|
||||
msgstr "资产可以使用区域网关进行连接"
|
||||
|
||||
#: assets/serializers/platform.py:212
|
||||
#: assets/serializers/platform.py:213
|
||||
msgid "Default zone"
|
||||
msgstr "默认网域"
|
||||
|
||||
#: assets/serializers/platform.py:239
|
||||
#: assets/serializers/platform.py:240
|
||||
msgid "type is required"
|
||||
msgstr "类型 该字段是必填项。"
|
||||
|
||||
#: assets/serializers/platform.py:254
|
||||
#: assets/serializers/platform.py:255
|
||||
msgid "Protocols is required"
|
||||
msgstr "协议是必填的"
|
||||
|
||||
|
|
@ -3518,7 +3529,7 @@ msgstr "任务"
|
|||
msgid "-"
|
||||
msgstr "-"
|
||||
|
||||
#: audits/handler.py:128
|
||||
#: audits/handler.py:130
|
||||
msgid "Yes"
|
||||
msgstr "是"
|
||||
|
||||
|
|
@ -3801,35 +3812,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 +3916,11 @@ msgstr "无效的令牌头。符号字符串不应包含无效字符。"
|
|||
msgid "Invalid token or cache refreshed."
|
||||
msgstr "刷新的令牌或缓存无效。"
|
||||
|
||||
#: authentication/backends/oidc/views.py:175
|
||||
#: authentication/backends/oauth2/views.py:67
|
||||
msgid "OAuth2 Error"
|
||||
msgstr "OAuth2 错误"
|
||||
|
||||
#: authentication/backends/oidc/views.py:137
|
||||
msgid "OpenID Error"
|
||||
msgstr "OpenID 错误"
|
||||
|
||||
|
|
@ -3934,7 +3949,7 @@ msgstr "附加"
|
|||
msgid "Credential ID"
|
||||
msgstr "凭证 ID"
|
||||
|
||||
#: authentication/backends/saml2/views.py:282
|
||||
#: authentication/backends/saml2/views.py:255
|
||||
msgid "SAML2 Error"
|
||||
msgstr "SAML2 错误"
|
||||
|
||||
|
|
@ -4125,16 +4140,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 +4266,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 +4773,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 +4928,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 +5452,7 @@ msgstr ""
|
|||
msgid "App Labels"
|
||||
msgstr "标签管理"
|
||||
|
||||
#: labels/models.py:15 settings/serializers/security.py:211
|
||||
#: labels/models.py:15
|
||||
msgid "Color"
|
||||
msgstr "颜色"
|
||||
|
||||
|
|
@ -5488,16 +5511,16 @@ msgid ""
|
|||
" work orders, and other notifications"
|
||||
msgstr "系统一些告警,工单等需要发送站内信时执行该任务"
|
||||
|
||||
#: ops/ansible/inventory.py:135 ops/ansible/inventory.py:205
|
||||
#: ops/ansible/inventory.py:136 ops/ansible/inventory.py:206
|
||||
#: ops/models/job.py:69
|
||||
msgid "No account available"
|
||||
msgstr "无可用账号"
|
||||
|
||||
#: ops/ansible/inventory.py:326 ops/ansible/inventory.py:368
|
||||
#: ops/ansible/inventory.py:327 ops/ansible/inventory.py:369
|
||||
msgid "Ansible disabled"
|
||||
msgstr "Ansible 已禁用"
|
||||
|
||||
#: ops/ansible/inventory.py:384
|
||||
#: ops/ansible/inventory.py:385
|
||||
msgid "Skip hosts below:"
|
||||
msgstr "跳过以下主机: "
|
||||
|
||||
|
|
@ -5513,34 +5536,38 @@ msgstr "任务 {} 不存在"
|
|||
msgid "Task {} args or kwargs error"
|
||||
msgstr "任务 {} 执行参数错误"
|
||||
|
||||
#: ops/api/job.py:70
|
||||
#: ops/api/job.py:65
|
||||
msgid "Login to asset {}({}) is rejected by login asset ACL ({})"
|
||||
msgstr ""
|
||||
|
||||
#: ops/api/job.py:88
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Asset ({asset}) must have at least one of the following protocols added: "
|
||||
"SSH, SFTP, or WinRM"
|
||||
msgstr "资产({asset})至少要添加ssh,sftp,winrm其中一种协议"
|
||||
|
||||
#: ops/api/job.py:71
|
||||
#: ops/api/job.py:89
|
||||
#, python-brace-format
|
||||
msgid "Asset ({asset}) authorization is missing SSH, SFTP, or WinRM protocol"
|
||||
msgstr "资产({asset})授权缺少ssh,sftp或winrm协议"
|
||||
|
||||
#: ops/api/job.py:72
|
||||
#: ops/api/job.py:90
|
||||
#, python-brace-format
|
||||
msgid "Asset ({asset}) authorization lacks upload permissions"
|
||||
msgstr "资产({asset})授权缺少上传权限"
|
||||
|
||||
#: ops/api/job.py:160
|
||||
#: ops/api/job.py:185
|
||||
msgid "Duplicate file exists"
|
||||
msgstr "存在同名文件"
|
||||
|
||||
#: ops/api/job.py:165
|
||||
#: ops/api/job.py:190
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"File size exceeds maximum limit. Please select a file smaller than {limit}MB"
|
||||
msgstr "文件大小超过最大限制。请选择小于 {limit}MB 的文件。"
|
||||
|
||||
#: ops/api/job.py:238
|
||||
#: ops/api/job.py:273
|
||||
msgid ""
|
||||
"The task is being created and cannot be interrupted. Please try again later."
|
||||
msgstr "正在创建任务,无法中断,请稍后重试。"
|
||||
|
|
@ -5842,7 +5869,7 @@ msgstr "Material"
|
|||
msgid "Material Type"
|
||||
msgstr "Material 类型"
|
||||
|
||||
#: ops/models/job.py:561
|
||||
#: ops/models/job.py:581
|
||||
msgid "Job Execution"
|
||||
msgstr "作业执行"
|
||||
|
||||
|
|
@ -7407,40 +7434,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 +7477,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 +7960,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 +8290,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 ", 禁用 {}"
|
||||
|
||||
|
|
@ -11394,6 +11425,12 @@ msgstr "华东-宿迁"
|
|||
msgid "Port \"%(port)s\" of instance IP \"%(ip)s\" is not reachable"
|
||||
msgstr "实例 IP %(ip)s 的端口%(port)s 无法访问"
|
||||
|
||||
#: xpack/plugins/cloud/providers/scp.py:108
|
||||
#, fuzzy
|
||||
#| msgid "empty"
|
||||
msgid "Empty"
|
||||
msgstr "空"
|
||||
|
||||
#: xpack/plugins/cloud/serializers/account.py:104
|
||||
msgid "Validity display"
|
||||
msgstr "有效性显示"
|
||||
|
|
@ -11568,6 +11605,3 @@ msgstr "许可证导入成功"
|
|||
#: xpack/plugins/license/api.py:53
|
||||
msgid "Invalid license"
|
||||
msgstr "许可证无效"
|
||||
|
||||
#~ msgid "domain_name"
|
||||
#~ msgstr "域名称"
|
||||
|
|
|
|||
|
|
@ -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-17 17:53+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,18 @@ 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/account.py:207
|
||||
msgid "No valid assets found for account creation."
|
||||
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 +463,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 +478,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 +525,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
|
||||
|
|
@ -581,8 +586,8 @@ msgstr "帳號活動"
|
|||
#: assets/models/asset/common.py:166 assets/models/cmd_filter.py:21
|
||||
#: assets/models/label.py:18 assets/models/platform.py:15
|
||||
#: assets/models/platform.py:94 assets/models/zone.py:19
|
||||
#: assets/serializers/asset/common.py:174 assets/serializers/platform.py:158
|
||||
#: assets/serializers/platform.py:283
|
||||
#: assets/serializers/asset/common.py:174 assets/serializers/platform.py:159
|
||||
#: assets/serializers/platform.py:284
|
||||
#: authentication/backends/passkey/models.py:10
|
||||
#: authentication/models/ssh_key.py:12 authentication/notifications.py:17
|
||||
#: authentication/notifications.py:56
|
||||
|
|
@ -620,7 +625,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 +798,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 +1022,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
|
||||
|
|
@ -1194,8 +1199,8 @@ msgstr "帳號存在策略"
|
|||
|
||||
#: accounts/serializers/account/account.py:206 assets/models/label.py:21
|
||||
#: assets/models/platform.py:95 assets/serializers/asset/common.py:145
|
||||
#: assets/serializers/cagegory.py:12 assets/serializers/platform.py:173
|
||||
#: assets/serializers/platform.py:284 perms/serializers/user_permission.py:27
|
||||
#: assets/serializers/cagegory.py:12 assets/serializers/platform.py:174
|
||||
#: assets/serializers/platform.py:285 perms/serializers/user_permission.py:27
|
||||
#: settings/models.py:41 tickets/models/ticket/apply_application.py:13
|
||||
#: users/models/preference.py:12 xpack/plugins/cloud/models.py:41
|
||||
#: xpack/plugins/cloud/models.py:327
|
||||
|
|
@ -1207,7 +1212,7 @@ msgstr "類別"
|
|||
#: acls/serializers/command_acl.py:19 assets/models/automations/base.py:27
|
||||
#: assets/models/automations/base.py:146 assets/models/cmd_filter.py:74
|
||||
#: assets/models/platform.py:96 assets/serializers/asset/common.py:146
|
||||
#: assets/serializers/platform.py:160 assets/serializers/platform.py:172
|
||||
#: assets/serializers/platform.py:161 assets/serializers/platform.py:173
|
||||
#: audits/serializers.py:76 audits/serializers.py:196
|
||||
#: authentication/models/connection_token.py:67
|
||||
#: authentication/serializers/connect_token_secret.py:138
|
||||
|
|
@ -1241,54 +1246,47 @@ 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
|
||||
#: perms/models/perm_node.py:21 settings/models.py:245
|
||||
#: 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 +1311,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"
|
||||
|
|
@ -1691,7 +1689,7 @@ msgstr "類型數"
|
|||
#: accounts/templates/accounts/change_secret_report.html:33
|
||||
#: accounts/templates/accounts/gather_account_report.html:31
|
||||
#: accounts/templates/accounts/push_account_report.html:32
|
||||
#: assets/serializers/domain.py:23 assets/serializers/platform.py:182
|
||||
#: assets/serializers/domain.py:23 assets/serializers/platform.py:183
|
||||
#: orgs/serializers.py:13 perms/serializers/permission.py:61
|
||||
msgid "Assets amount"
|
||||
msgstr "資產數量"
|
||||
|
|
@ -1723,7 +1721,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 +1843,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:182 assets/serializers/platform.py:214
|
||||
#: 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
|
||||
|
|
@ -2120,11 +2130,11 @@ msgstr "我們想通知您,最近有用戶登入:"
|
|||
msgid "User details"
|
||||
msgstr "使用者詳情"
|
||||
|
||||
#: assets/api/asset/asset.py:154
|
||||
#: assets/api/asset/asset.py:153
|
||||
msgid "Cannot create asset directly, you should create a host or other"
|
||||
msgstr "不能直接創建資產, 你應該創建主機或其他資產"
|
||||
|
||||
#: assets/api/asset/asset.py:158
|
||||
#: assets/api/asset/asset.py:157
|
||||
msgid "The number of assets exceeds the limit of 5000"
|
||||
msgstr "資產數量超過 5000 的限制"
|
||||
|
||||
|
|
@ -2555,8 +2565,9 @@ msgid "Cloud"
|
|||
msgstr "雲服務"
|
||||
|
||||
#: assets/models/asset/common.py:101 assets/models/platform.py:16
|
||||
#: settings/serializers/auth/radius.py:18 settings/serializers/auth/sms.py:77
|
||||
#: settings/serializers/msg.py:31 terminal/serializers/storage.py:133
|
||||
#: assets/serializers/platform.py:87 settings/serializers/auth/radius.py:18
|
||||
#: settings/serializers/auth/sms.py:77 settings/serializers/msg.py:31
|
||||
#: terminal/serializers/storage.py:133
|
||||
#: xpack/plugins/cloud/serializers/account_attrs.py:88
|
||||
msgid "Port"
|
||||
msgstr "埠"
|
||||
|
|
@ -2594,19 +2605,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 "可以修改資產節點"
|
||||
|
||||
|
|
@ -2772,7 +2783,7 @@ msgstr "值"
|
|||
|
||||
#: assets/models/label.py:40 assets/serializers/cagegory.py:10
|
||||
#: assets/serializers/cagegory.py:17 assets/serializers/cagegory.py:23
|
||||
#: assets/serializers/platform.py:159
|
||||
#: assets/serializers/platform.py:160
|
||||
#: authentication/serializers/connect_token_secret.py:136
|
||||
#: common/serializers/common.py:85 labels/serializers.py:45
|
||||
#: settings/serializers/msg.py:91 xpack/plugins/cloud/models.py:404
|
||||
|
|
@ -2823,7 +2834,7 @@ msgstr "主要的"
|
|||
msgid "Required"
|
||||
msgstr "必須的"
|
||||
|
||||
#: assets/models/platform.py:19 assets/serializers/platform.py:161
|
||||
#: assets/models/platform.py:19 assets/serializers/platform.py:162
|
||||
#: terminal/models/component/storage.py:28 users/const.py:42
|
||||
#: xpack/plugins/cloud/providers/nutanix.py:30
|
||||
msgid "Default"
|
||||
|
|
@ -2926,11 +2937,11 @@ msgstr "帳號移除參數"
|
|||
msgid "Internal"
|
||||
msgstr "內建"
|
||||
|
||||
#: assets/models/platform.py:102 assets/serializers/platform.py:171
|
||||
#: assets/models/platform.py:102 assets/serializers/platform.py:172
|
||||
msgid "Charset"
|
||||
msgstr "編碼"
|
||||
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:209
|
||||
#: assets/models/platform.py:104 assets/serializers/platform.py:210
|
||||
msgid "Gateway enabled"
|
||||
msgstr "啟用網域網関"
|
||||
|
||||
|
|
@ -2938,15 +2949,15 @@ msgstr "啟用網域網関"
|
|||
msgid "DS enabled"
|
||||
msgstr "目錄服務已啟用"
|
||||
|
||||
#: assets/models/platform.py:107 assets/serializers/platform.py:202
|
||||
#: assets/models/platform.py:107 assets/serializers/platform.py:203
|
||||
msgid "Su enabled"
|
||||
msgstr "啟用帳號切換"
|
||||
|
||||
#: assets/models/platform.py:108 assets/serializers/platform.py:177
|
||||
#: assets/models/platform.py:108 assets/serializers/platform.py:178
|
||||
msgid "Su method"
|
||||
msgstr "帳號切換方式"
|
||||
|
||||
#: assets/models/platform.py:109 assets/serializers/platform.py:180
|
||||
#: assets/models/platform.py:109 assets/serializers/platform.py:181
|
||||
msgid "Custom fields"
|
||||
msgstr "自訂屬性"
|
||||
|
||||
|
|
@ -2961,7 +2972,7 @@ msgid ""
|
|||
"type"
|
||||
msgstr "資產中批次更新平台,不符合平台類型跳過的資產"
|
||||
|
||||
#: assets/serializers/asset/common.py:36 assets/serializers/platform.py:153
|
||||
#: assets/serializers/asset/common.py:36 assets/serializers/platform.py:154
|
||||
msgid "Protocols, format is [\"protocol/port\"]"
|
||||
msgstr "協定,格式為 [\"協定/連接埠\"]"
|
||||
|
||||
|
|
@ -2981,7 +2992,7 @@ msgid ""
|
|||
"it"
|
||||
msgstr "節點路徑,格式為 [\"/組織/節點名稱\"], 如果節點不存在,將創建它"
|
||||
|
||||
#: assets/serializers/asset/common.py:147 assets/serializers/platform.py:174
|
||||
#: assets/serializers/asset/common.py:147 assets/serializers/platform.py:175
|
||||
#: authentication/serializers/connect_token_secret.py:30
|
||||
#: authentication/serializers/connect_token_secret.py:77
|
||||
#: perms/models/asset_permission.py:76 perms/serializers/permission.py:67
|
||||
|
|
@ -3196,58 +3207,58 @@ msgstr "启动账号移除"
|
|||
msgid "Port from addr"
|
||||
msgstr "埠來自地址"
|
||||
|
||||
#: assets/serializers/platform.py:98
|
||||
#: assets/serializers/platform.py:99
|
||||
msgid ""
|
||||
"This protocol is primary, and it must be set when adding assets. "
|
||||
"Additionally, there can only be one primary protocol."
|
||||
msgstr "該協議是主要的,添加資產時必須設置。並且只能有一個主要協議"
|
||||
|
||||
#: assets/serializers/platform.py:103
|
||||
#: assets/serializers/platform.py:104
|
||||
msgid "This protocol is required, and it must be set when adding assets."
|
||||
msgstr "該協議是必填的,添加資產時必須設置"
|
||||
|
||||
#: assets/serializers/platform.py:106
|
||||
#: assets/serializers/platform.py:107
|
||||
msgid ""
|
||||
"This protocol is default, when adding assets, it will be displayed by "
|
||||
"default."
|
||||
msgstr "該協議是預設的,添加資產時,將默認顯示"
|
||||
|
||||
#: assets/serializers/platform.py:109
|
||||
#: assets/serializers/platform.py:110
|
||||
msgid "This protocol is public, asset will show this protocol to user"
|
||||
msgstr "該協議是公開的,資產將向用戶顯示該協議並可以連接使用"
|
||||
|
||||
#: assets/serializers/platform.py:162
|
||||
#: assets/serializers/platform.py:163
|
||||
msgid "Help text"
|
||||
msgstr "幫助"
|
||||
|
||||
#: assets/serializers/platform.py:163
|
||||
#: assets/serializers/platform.py:164
|
||||
msgid "Choices"
|
||||
msgstr "選擇"
|
||||
|
||||
#: assets/serializers/platform.py:175
|
||||
#: assets/serializers/platform.py:176
|
||||
msgid "Automation"
|
||||
msgstr "自動化"
|
||||
|
||||
#: assets/serializers/platform.py:204
|
||||
#: assets/serializers/platform.py:205
|
||||
msgid ""
|
||||
"Login with account when accessing assets, then automatically switch to "
|
||||
"another, similar to logging in with a regular account and then switching to "
|
||||
"root"
|
||||
msgstr "在訪問資產時使用帳戶登入,然後自動切換到另一個帳戶,就像用普通帳戶登入然後切換到 root 一樣"
|
||||
|
||||
#: assets/serializers/platform.py:210
|
||||
#: assets/serializers/platform.py:211
|
||||
msgid "Assets can be connected using a zone gateway"
|
||||
msgstr "資產可以使用區域網關進行連接"
|
||||
|
||||
#: assets/serializers/platform.py:212
|
||||
#: assets/serializers/platform.py:213
|
||||
msgid "Default zone"
|
||||
msgstr "默認網域"
|
||||
|
||||
#: assets/serializers/platform.py:239
|
||||
#: assets/serializers/platform.py:240
|
||||
msgid "type is required"
|
||||
msgstr "類型 該欄位是必填項。"
|
||||
|
||||
#: assets/serializers/platform.py:254
|
||||
#: assets/serializers/platform.py:255
|
||||
msgid "Protocols is required"
|
||||
msgstr "協議是必填的"
|
||||
|
||||
|
|
@ -3479,7 +3490,7 @@ msgstr "任務"
|
|||
msgid "-"
|
||||
msgstr "-"
|
||||
|
||||
#: audits/handler.py:128
|
||||
#: audits/handler.py:130
|
||||
msgid "Yes"
|
||||
msgstr "是"
|
||||
|
||||
|
|
@ -3757,35 +3768,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 +3870,11 @@ msgstr "無效的令牌頭。符號字串不應包含無效字元。"
|
|||
msgid "Invalid token or cache refreshed."
|
||||
msgstr "刷新的令牌或快取無效。"
|
||||
|
||||
#: authentication/backends/oidc/views.py:175
|
||||
#: authentication/backends/oauth2/views.py:67
|
||||
msgid "OAuth2 Error"
|
||||
msgstr "OAuth2 錯誤"
|
||||
|
||||
#: authentication/backends/oidc/views.py:137
|
||||
msgid "OpenID Error"
|
||||
msgstr "OpenID 錯誤"
|
||||
|
||||
|
|
@ -3888,7 +3903,7 @@ msgstr "附加"
|
|||
msgid "Credential ID"
|
||||
msgstr "憑證 ID"
|
||||
|
||||
#: authentication/backends/saml2/views.py:282
|
||||
#: authentication/backends/saml2/views.py:255
|
||||
msgid "SAML2 Error"
|
||||
msgstr "SAML2 錯誤"
|
||||
|
||||
|
|
@ -4077,16 +4092,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 +4218,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 +4722,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 +4876,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 +5393,7 @@ msgstr ""
|
|||
msgid "App Labels"
|
||||
msgstr "標籤管理"
|
||||
|
||||
#: labels/models.py:15 settings/serializers/security.py:211
|
||||
#: labels/models.py:15
|
||||
msgid "Color"
|
||||
msgstr "顏色"
|
||||
|
||||
|
|
@ -5430,16 +5451,16 @@ msgid ""
|
|||
" work orders, and other notifications"
|
||||
msgstr "系統某些告警、工單等需要發送站內信時執行該任務"
|
||||
|
||||
#: ops/ansible/inventory.py:135 ops/ansible/inventory.py:205
|
||||
#: ops/ansible/inventory.py:136 ops/ansible/inventory.py:206
|
||||
#: ops/models/job.py:69
|
||||
msgid "No account available"
|
||||
msgstr "無可用帳號"
|
||||
|
||||
#: ops/ansible/inventory.py:326 ops/ansible/inventory.py:368
|
||||
#: ops/ansible/inventory.py:327 ops/ansible/inventory.py:369
|
||||
msgid "Ansible disabled"
|
||||
msgstr "Ansible 已禁用"
|
||||
|
||||
#: ops/ansible/inventory.py:384
|
||||
#: ops/ansible/inventory.py:385
|
||||
msgid "Skip hosts below:"
|
||||
msgstr "跳過以下主機: "
|
||||
|
||||
|
|
@ -5455,34 +5476,38 @@ msgstr "任務 {} 不存在"
|
|||
msgid "Task {} args or kwargs error"
|
||||
msgstr "任務 {} 執行參數錯誤"
|
||||
|
||||
#: ops/api/job.py:70
|
||||
#: ops/api/job.py:65
|
||||
msgid "Login to asset {}({}) is rejected by login asset ACL ({})"
|
||||
msgstr ""
|
||||
|
||||
#: ops/api/job.py:88
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Asset ({asset}) must have at least one of the following protocols added: "
|
||||
"SSH, SFTP, or WinRM"
|
||||
msgstr "资产({asset})至少要添加ssh,sftp,winrm其中一种协议"
|
||||
|
||||
#: ops/api/job.py:71
|
||||
#: ops/api/job.py:89
|
||||
#, python-brace-format
|
||||
msgid "Asset ({asset}) authorization is missing SSH, SFTP, or WinRM protocol"
|
||||
msgstr "资产({asset})授权缺少ssh,sftp或winrm协议"
|
||||
|
||||
#: ops/api/job.py:72
|
||||
#: ops/api/job.py:90
|
||||
#, python-brace-format
|
||||
msgid "Asset ({asset}) authorization lacks upload permissions"
|
||||
msgstr "资产({asset})授权缺少上传权限"
|
||||
|
||||
#: ops/api/job.py:160
|
||||
#: ops/api/job.py:185
|
||||
msgid "Duplicate file exists"
|
||||
msgstr "存在同名文件"
|
||||
|
||||
#: ops/api/job.py:165
|
||||
#: ops/api/job.py:190
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"File size exceeds maximum limit. Please select a file smaller than {limit}MB"
|
||||
msgstr "檔案大小超過最大限制。請選擇小於 {limit}MB 的文件。"
|
||||
|
||||
#: ops/api/job.py:238
|
||||
#: ops/api/job.py:273
|
||||
msgid ""
|
||||
"The task is being created and cannot be interrupted. Please try again later."
|
||||
msgstr "正在創建任務,無法中斷,請稍後重試。"
|
||||
|
|
@ -5789,7 +5814,7 @@ msgstr "Material"
|
|||
msgid "Material Type"
|
||||
msgstr "Material 類型"
|
||||
|
||||
#: ops/models/job.py:561
|
||||
#: ops/models/job.py:581
|
||||
msgid "Job Execution"
|
||||
msgstr "作業執行"
|
||||
|
||||
|
|
@ -7314,40 +7339,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 +7381,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 +7845,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 +8164,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 ",禁用 {}"
|
||||
|
||||
|
|
@ -11229,6 +11258,12 @@ msgstr "華東-宿遷"
|
|||
msgid "Port \"%(port)s\" of instance IP \"%(ip)s\" is not reachable"
|
||||
msgstr "The port%(port)s of Instance IP %(ip)s is inaccessible."
|
||||
|
||||
#: xpack/plugins/cloud/providers/scp.py:108
|
||||
#, fuzzy
|
||||
#| msgid "empty"
|
||||
msgid "Empty"
|
||||
msgstr "空"
|
||||
|
||||
#: xpack/plugins/cloud/serializers/account.py:104
|
||||
msgid "Validity display"
|
||||
msgstr "有效性顯示"
|
||||
|
|
@ -11397,25 +11432,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"
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@
|
|||
"AppletHelpText": "In the upload process, if the application does not exist, create the application; if it exists, update the application.",
|
||||
"AppletHostCreate": "Add RemoteApp machine",
|
||||
"AppletHostDetail": "RemoteApp machine",
|
||||
"AppletHostSelectHelpMessage": "When connecting to an asset, the selection of the application publishing machine is random (but the last used one is preferred). if you want to assign a specific publishing machine to an asset, you can tag it as [publishing machine: publishing machine name] or [AppletHost: publishing machine name]; <br>when selecting an account for the publishing machine, the following situations will choose the user's own <b>account with the same name or proprietary account (starting with js)</b>, otherwise use a public account (starting with jms):<br> 1. both the publishing machine and application support concurrent;<br> 2. the publishing machine supports concurrent, but the application does not, and the current application does not use a proprietary account;<br> 3. the publishing machine does not support concurrent, the application either supports or does not support concurrent, and no application uses a proprietary account;<br> note: whether the application supports concurrent connections is decided by the developer, and whether the host supports concurrent connections is decided by the single user single session setting in the publishing machine configuration",
|
||||
"AppletHostSelectHelpMessage": "When connecting to an asset, the selection of the application publishing machine is random (but the last used one is preferred). if you want to assign a specific publishing machine to an asset, you can tag it as [发布机: publishing machine name] [AppletHost: publishing machine name] [仅发布机: publishing machine name] [AppletHostOnly: publishing machine name]; <br>when selecting an account for the publishing machine, the following situations will choose the user's own <b>account with the same name or proprietary account (starting with js)</b>, otherwise use a public account (starting with jms):<br> 1. both the publishing machine and application support concurrent;<br> 2. the publishing machine supports concurrent, but the application does not, and the current application does not use a proprietary account;<br> 3. the publishing machine does not support concurrent, the application either supports or does not support concurrent, and no application uses a proprietary account;<br> note: whether the application supports concurrent connections is decided by the developer, and whether the host supports concurrent connections is decided by the single user single session setting in the publishing machine configuration",
|
||||
"AppletHostUpdate": "Update the remote app publishing machine",
|
||||
"AppletHostZoneHelpText": "This domain belongs to the system organization",
|
||||
"AppletHosts": "RemoteApp machine",
|
||||
|
|
@ -773,6 +773,7 @@
|
|||
"LdapBulkImport": "User import",
|
||||
"LdapConnectTest": "Test connection",
|
||||
"LdapLoginTest": "Test login",
|
||||
"LeakPasswordList": "Leaked password list",
|
||||
"LeakedPassword": "Leaked password",
|
||||
"Length": "Length",
|
||||
"LessEqualThan": "Less than or equal to",
|
||||
|
|
@ -1024,6 +1025,7 @@
|
|||
"PleaseAgreeToTheTerms": "Please agree to the terms",
|
||||
"PleaseEnterReason": "Please enter a reason",
|
||||
"PleaseSelect": "Please select ",
|
||||
"PleaseSelectAssetOrNode": "Please select at least one asset or node",
|
||||
"PleaseSelectTheDataYouWantToCheck": "Please select the data you want to check",
|
||||
"PolicyName": "Policy name",
|
||||
"Port": "Port",
|
||||
|
|
@ -1619,12 +1621,17 @@
|
|||
"assetAddress": "Asset address",
|
||||
"assetId": "Asset ID",
|
||||
"assetName": "Asset name",
|
||||
"clickToAdd": "Click to add",
|
||||
"currentTime": "Current time",
|
||||
"description": "No data yet",
|
||||
"disallowSelfUpdateFields": "Not allowed to modify the current fields yourself",
|
||||
"forceEnableMFAHelpText": "If force enable, user can not disable by themselves",
|
||||
"isConsoleCanUse": "is Console page can use",
|
||||
"overwriteProtocolsAndPortsMsg": "This operation will overwrite the protocols and ports of the selected assets. Are you sure you want to continue?",
|
||||
"pleaseSelectAssets": "Please select assets",
|
||||
"removeWarningMsg": "Are you sure you want to remove",
|
||||
"selectFiles": "Selected {number} files",
|
||||
"selectedAssets": "Selected assets",
|
||||
"setVariable": "Set variable",
|
||||
"userId": "User ID",
|
||||
"userName": "User name"
|
||||
|
|
|
|||
|
|
@ -1028,6 +1028,7 @@
|
|||
"PleaseAgreeToTheTerms": "Por favor, acepte los términos",
|
||||
"PleaseEnterReason": "Por favor, introduzca el motivo",
|
||||
"PleaseSelect": "Por favor seleccione",
|
||||
"PleaseSelectAssetOrNode": "Por favor, seleccione un activo o nodo",
|
||||
"PleaseSelectTheDataYouWantToCheck": "Por favor, seleccione los datos que necesita marcar.",
|
||||
"PolicyName": "Nombre de la estrategia",
|
||||
"Port": "Puerto",
|
||||
|
|
@ -1628,13 +1629,17 @@
|
|||
"assetAddress": "Dirección de activo",
|
||||
"assetId": "ID de activo",
|
||||
"assetName": "Nombre de activo",
|
||||
"clickToAdd": "Haga clic en agregar",
|
||||
"currentTime": "Hora actual",
|
||||
"description": "Sin datos disponibles.",
|
||||
"disallowSelfUpdateFields": "No se permite modificar el campo actual.",
|
||||
"forceEnableMFAHelpText": "Si se habilita forzosamente, el usuario no podrá desactivarlo por sí mismo",
|
||||
"isConsoleCanUse": "¿Está disponible la página de gestión?< -SEP->Agregar puerta de enlace al dominio",
|
||||
"name": "Nombre de usuario",
|
||||
"overwriteProtocolsAndPortsMsg": "Esta acción reemplazará todos los protocolos y puertos, ¿continuar?",
|
||||
"pleaseSelectAssets": "Por favor, seleccione un activo.",
|
||||
"removeWarningMsg": "¿Está seguro de que desea eliminar?",
|
||||
"selectedAssets": "Activos seleccionados",
|
||||
"setVariable": "configurar parámetros",
|
||||
"userId": "ID de usuario",
|
||||
"userName": "Nombre de usuario"
|
||||
|
|
|
|||
|
|
@ -1033,6 +1033,7 @@
|
|||
"PleaseAgreeToTheTerms": "規約に同意してください",
|
||||
"PleaseEnterReason": "理由を入力してください",
|
||||
"PleaseSelect": "選択してくださ",
|
||||
"PleaseSelectAssetOrNode": "資産またはノードを選択してください",
|
||||
"PleaseSelectTheDataYouWantToCheck": "選択するデータをチェックしてください",
|
||||
"PolicyName": "ポリシー名称",
|
||||
"Port": "ポート",
|
||||
|
|
@ -1633,13 +1634,17 @@
|
|||
"assetAddress": "資産アドレス",
|
||||
"assetId": "資産ID",
|
||||
"assetName": "資産名",
|
||||
"clickToAdd": "追加をクリック",
|
||||
"currentTime": "現在の時間",
|
||||
"description": "データはありません。",
|
||||
"disallowSelfUpdateFields": "現在のフィールドを自分で変更することは許可されていません",
|
||||
"forceEnableMFAHelpText": "強制的に有効化すると、ユーザーは自分で無効化することができません。",
|
||||
"isConsoleCanUse": "管理ページの利用可能性",
|
||||
"name": "ユーザー名",
|
||||
"overwriteProtocolsAndPortsMsg": "この操作はすべてのプロトコルとポートを上書きしますが、続行してよろしいですか?",
|
||||
"pleaseSelectAssets": "資産を選択してください",
|
||||
"removeWarningMsg": "削除してもよろしいですか",
|
||||
"selectedAssets": "選択した資産",
|
||||
"setVariable": "パラメータ設定",
|
||||
"userId": "ユーザーID",
|
||||
"userName": "ユーザー名"
|
||||
|
|
|
|||
|
|
@ -1028,6 +1028,7 @@
|
|||
"PleaseAgreeToTheTerms": "약관 동의 부탁드립니다",
|
||||
"PleaseEnterReason": "이유를 입력하세요",
|
||||
"PleaseSelect": "선택해주세요",
|
||||
"PleaseSelectAssetOrNode": "자산 또는 노드를 선택해 주세요",
|
||||
"PleaseSelectTheDataYouWantToCheck": "선택할 데이터를 선택해 주십시오.",
|
||||
"PolicyName": "전략 이름",
|
||||
"Port": "포트",
|
||||
|
|
@ -1628,13 +1629,17 @@
|
|||
"assetAddress": "자산 주소",
|
||||
"assetId": "자산 ID",
|
||||
"assetName": "자산 이름",
|
||||
"clickToAdd": "추가를 클릭해 주세요",
|
||||
"currentTime": "현재 시간",
|
||||
"description": "데이터가 없습니다.",
|
||||
"disallowSelfUpdateFields": "현재 필드를 스스로 수정할 수 없음",
|
||||
"forceEnableMFAHelpText": "강제로 활성화하면 사용자가 스스로 비활성화할 수 없음",
|
||||
"isConsoleCanUse": "관리 페이지 사용 가능 여부",
|
||||
"name": "사용자 이름",
|
||||
"overwriteProtocolsAndPortsMsg": "이 작업은 모든 프로토콜과 포트를 덮어씌우게 됩니다. 계속하시겠습니까?",
|
||||
"pleaseSelectAssets": "자산을 선택해 주세요",
|
||||
"removeWarningMsg": "제거할 것인지 확실합니까?",
|
||||
"selectedAssets": "선택한 자산",
|
||||
"setVariable": "설정 매개변수",
|
||||
"userId": "사용자 ID",
|
||||
"userName": "사용자명"
|
||||
|
|
|
|||
|
|
@ -1029,6 +1029,7 @@
|
|||
"PleaseAgreeToTheTerms": "Por favor, concorde com os termos",
|
||||
"PleaseEnterReason": "Por favor, insira o motivo",
|
||||
"PleaseSelect": "Por favor, selecione",
|
||||
"PleaseSelectAssetOrNode": "Por favor, selecione um ativo ou nó",
|
||||
"PleaseSelectTheDataYouWantToCheck": "Por favor, selecione os dados que deseja marcar.",
|
||||
"PolicyName": "Nome da Política",
|
||||
"Port": "Porta",
|
||||
|
|
@ -1629,13 +1630,17 @@
|
|||
"assetAddress": "Endereço do ativo",
|
||||
"assetId": "ID do ativo",
|
||||
"assetName": "Nome do ativo",
|
||||
"clickToAdd": "Clique para adicionar",
|
||||
"currentTime": "Hora atual",
|
||||
"description": "Nenhum dado disponível.",
|
||||
"disallowSelfUpdateFields": "Não é permitido alterar o campo atual",
|
||||
"forceEnableMFAHelpText": "Se for habilitado forçosamente, o usuário não pode desativar por conta própria",
|
||||
"isConsoleCanUse": "Se a página de gerenciamento está disponível",
|
||||
"name": "Nome de usuário",
|
||||
"overwriteProtocolsAndPortsMsg": "Esta ação substituirá todos os protocolos e portas. Deseja continuar?",
|
||||
"pleaseSelectAssets": "Por favor, selecione um ativo.",
|
||||
"removeWarningMsg": "Tem certeza de que deseja remover",
|
||||
"selectedAssets": "Ativos selecionados",
|
||||
"setVariable": "Parâmetros de configuração",
|
||||
"userId": "ID do usuário",
|
||||
"userName": "Usuário"
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@
|
|||
"AppletHelpText": "В процессе загрузки, если приложение отсутствует, оно будет создано; если уже существует, будет выполнено обновление.",
|
||||
"AppletHostCreate": "Добавить сервер RemoteApp",
|
||||
"AppletHostDetail": "Подробности о хосте RemoteApp",
|
||||
"AppletHostSelectHelpMessage": "При подключении к активу выбор машины публикации приложения происходит случайным образом (но предпочтение отдается последней использованной). Если вы хотите назначить активу определенную машину, вы можете использовать следующие теги: [publishing machine: имя машины публикации] или [AppletHost: имя машины публикации]; <br>при выборе учетной записи для машины публикации в следующих ситуациях будет выбрана собственная <b>учетная запись пользователя с тем же именем или собственная учетная запись (начинающаяся с js)</b>, в противном случае будет использоваться публичная учетная запись (начинающаяся с jms):<br> 1. И машина публикации, и приложение поддерживают одновременные подключения; <br> 2. Машина публикации поддерживает одновременные подключения, а приложение — нет, и текущее приложение не использует специализированную учетную запись; <br> 3. Машина публикации не поддерживает одновременные подключения, а приложение может как поддерживать, так и не поддерживать одновременные подключения, и ни одно приложение не использует специализированную учетную запись; <br> Примечание: поддержка одновременных подключений со стороны приложения определяется разработчиком, а поддержка одновременных подключений со стороны хоста определяется настройкой «один пользователь — одна сессия» в конфигурации машины публикации.",
|
||||
"AppletHostSelectHelpMessage": "При подключении к активу выбор сервера публикации приложения происходит случайным образом (но предпочтение отдается последнему использованному).<br>\nЕсли необходимо закрепить сервер публикации за конкретным активом, можно указать один из тегов:\n[AppletHost:имя_сервера], [AppletHostOnly:имя_сервера].<br>\nПри подключении к выбранному серверу публикации и выборе учётной записи применяются следующие правила:<br>\nв перечисленных ниже случаях будет использована <b>учетная запись пользователя с тем же именем</b> или <b>специальная учётная запись (начинающаяся с js)</b>,<br>\nв противном случае будет использоваться общая учётная запись (начинающаяся с jms):<br>\n1. И сервер публикации, и приложение поддерживают одновременные подключения;<br>\n2. Сервер публикации поддерживает одновременные подключения, а приложение — нет, и текущее приложение не использует специальную учётную запись;<br>\n3. Сервер публикации не поддерживает одновременные подключения, а приложение может как поддерживать, так и не поддерживать одновременные подключения, и ни одно приложение не использует специализированную учетную запись;<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": "Порт протокола базы данных",
|
||||
|
|
@ -491,7 +491,7 @@
|
|||
"DeleteOrgMsg": "Пользователь, Группа пользователей, Актив, Папка, Тег, Зона, Разрешение",
|
||||
"DeleteOrgTitle": "Пожалуйста, сначала удалите следующие ресурсы в организации",
|
||||
"DeleteReleasedAssets": "Удалить освобожденные активы",
|
||||
"DeleteRemoteAccount": "Удалить удаленный аккаунт",
|
||||
"DeleteRemoteAccount": "Удалить УЗ на активе",
|
||||
"DeleteSelected": "Удалить выбранное",
|
||||
"DeleteSuccess": "Успешно удалено",
|
||||
"DeleteSuccessMsg": "Успешно удалено",
|
||||
|
|
@ -729,7 +729,7 @@
|
|||
"InstanceName": "Название экземпляра",
|
||||
"InstanceNamePartIp": "Название экземпляра и часть IP",
|
||||
"InstancePlatformName": "Название платформы экземпляра",
|
||||
"Integration": "Интеграция приложений",
|
||||
"Integration": "Интеграция",
|
||||
"Interface": "Сетевой интерфейс",
|
||||
"InterfaceSettings": "Настройки интерфейса",
|
||||
"Interval": "Интервал",
|
||||
|
|
@ -1028,6 +1028,7 @@
|
|||
"PleaseAgreeToTheTerms": "Пожалуйста, согласитесь с условиями",
|
||||
"PleaseEnterReason": "Введите причину",
|
||||
"PleaseSelect": "Пожалуйста, выберите ",
|
||||
"PleaseSelectAssetOrNode": "Пожалуйста, выберите актив или узел.",
|
||||
"PleaseSelectTheDataYouWantToCheck": "Пожалуйста, выберите данные, которые нужно отметить",
|
||||
"PolicyName": "Название политики",
|
||||
"Port": "Порт",
|
||||
|
|
@ -1045,7 +1046,7 @@
|
|||
"PrivilegedOnly": "Только привилегированные",
|
||||
"PrivilegedTemplate": "Привилегированные",
|
||||
"Processing": "В процессе",
|
||||
"ProcessingMessage": "Задача в процессе, пожалуйста, подождите ⏳",
|
||||
"ProcessingMessage": "Задача выполняется, пожалуйста, подождите ⏳",
|
||||
"Product": "Продукт",
|
||||
"ProfileSetting": "Данные профиля",
|
||||
"Project": "Название проекта",
|
||||
|
|
@ -1117,7 +1118,7 @@
|
|||
"RelevantCommand": "Команда",
|
||||
"RelevantSystemUser": "Системный пользователь",
|
||||
"RemoteAddr": "Удалённый адрес",
|
||||
"RemoteAssetFoundAccountDeleteMsg": "Удалить аккаунты, обнаруженные с удалённых активов",
|
||||
"RemoteAssetFoundAccountDeleteMsg": "Удалить УЗ, обнаруженные на удалённых активах",
|
||||
"RemoteLoginProtocolUsageDistribution": "Распределение протоколов входа в активы",
|
||||
"Remove": "Удалить",
|
||||
"RemoveAssetFromNode": "Удалить активы из папки",
|
||||
|
|
@ -1628,13 +1629,17 @@
|
|||
"assetAddress": "Адрес актива",
|
||||
"assetId": "ID актива",
|
||||
"assetName": "Название актива",
|
||||
"clickToAdd": "Нажмите, чтобы добавить",
|
||||
"currentTime": "Текущее время",
|
||||
"description": "Нет данных",
|
||||
"disallowSelfUpdateFields": "Не разрешено самостоятельно изменять текущие поля.",
|
||||
"forceEnableMFAHelpText": "При принудительном включении пользователь не может отключить самостоятельно",
|
||||
"isConsoleCanUse": "Доступна ли Консоль",
|
||||
"name": "Имя пользователя",
|
||||
"overwriteProtocolsAndPortsMsg": "Это действие заменит все протоколы и порты. Продолжить?",
|
||||
"pleaseSelectAssets": "Пожалуйста, выберите актив",
|
||||
"removeWarningMsg": "Вы уверены, что хотите удалить",
|
||||
"selectedAssets": "Выбранные активы",
|
||||
"setVariable": "Задать переменную",
|
||||
"userId": "ID пользователя",
|
||||
"userName": "Имя пользователя"
|
||||
|
|
|
|||
|
|
@ -1028,6 +1028,7 @@
|
|||
"PleaseAgreeToTheTerms": "Vui lòng đồng ý với các điều khoản",
|
||||
"PleaseEnterReason": "Vui lòng nhập lý do",
|
||||
"PleaseSelect": "Vui lòng chọn",
|
||||
"PleaseSelectAssetOrNode": "Vui lòng chọn tài sản hoặc nút",
|
||||
"PleaseSelectTheDataYouWantToCheck": "Vui lòng chọn dữ liệu cần đánh dấu",
|
||||
"PolicyName": "Tên chính sách",
|
||||
"Port": "Cổng",
|
||||
|
|
@ -1628,13 +1629,17 @@
|
|||
"assetAddress": "Địa chỉ tài sản",
|
||||
"assetId": "ID tài sản",
|
||||
"assetName": "Tên tài sản",
|
||||
"clickToAdd": "Nhấp để thêm",
|
||||
"currentTime": "Thời gian hiện tại",
|
||||
"description": "Chưa có dữ liệu.",
|
||||
"disallowSelfUpdateFields": "Không cho phép tự chỉnh sửa trường hiện tại",
|
||||
"forceEnableMFAHelpText": "Nếu buộc kích hoạt, người dùng sẽ không thể tự động vô hiệu hóa",
|
||||
"isConsoleCanUse": "Trang quản lý có khả dụng không",
|
||||
"name": "Tên người dùng",
|
||||
"overwriteProtocolsAndPortsMsg": "Hành động này sẽ ghi đè lên tất cả các giao thức và cổng, có tiếp tục không?",
|
||||
"pleaseSelectAssets": "Vui lòng chọn tài sản.",
|
||||
"removeWarningMsg": "Bạn có chắc chắn muốn xóa bỏ?",
|
||||
"selectedAssets": "Tài sản đã chọn",
|
||||
"setVariable": "Cài đặt tham số",
|
||||
"userId": "ID người dùng",
|
||||
"userName": "Tên người dùng"
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@
|
|||
"AppletHelpText": "在上传过程中,如果应用不存在,则创建该应用;如果已存在,则进行应用更新。",
|
||||
"AppletHostCreate": "添加远程应用发布机",
|
||||
"AppletHostDetail": "远程应用发布机详情",
|
||||
"AppletHostSelectHelpMessage": "连接资产时,应用发布机选择是随机的(但优先选择上次使用的),如果想为某个资产固定发布机,可以指定标签 <发布机:发布机名称> 或 <AppletHost:发布机名称>; <br>连接该发布机选择账号时,以下情况会选择用户的 <b>同名账号 或 专有账号(js开头)</b>,否则使用公用账号(jms开头):<br> 1. 发布机和应用都支持并发; <br> 2. 发布机支持并发,应用不支持并发,当前应用没有使用专有账号; <br> 3. 发布机不支持并发,应用支持并发或不支持,没有任一应用使用专有账号; <br> 注意: 应用支不支持并发是开发者决定,主机支不支持是发布机配置中的 单用户单会话决定",
|
||||
"AppletHostSelectHelpMessage": "连接资产时,应用发布机选择是随机的(但优先选择上次使用的),如果想为某个资产固定发布机,可以指定标签 <发布机:发布机名称>、<AppletHost:发布机名称>、<仅发布机:发布机名称>、 <AppletHostOnly:发布机名称>; <br>连接该发布机选择账号时,以下情况会选择用户的 <b>同名账号 或 专有账号(js开头)</b>,否则使用公用账号(jms开头):<br> 1. 发布机和应用都支持并发; <br> 2. 发布机支持并发,应用不支持并发,当前应用没有使用专有账号; <br> 3. 发布机不支持并发,应用支持并发或不支持,没有任一应用使用专有账号; <br> 注意: 应用支不支持并发是开发者决定,主机支不支持是发布机配置中的 单用户单会话决定",
|
||||
"AppletHostUpdate": "更新远程应用发布机",
|
||||
"AppletHostZoneHelpText": "这里的网域属于 System 组织",
|
||||
"AppletHosts": "应用发布机",
|
||||
|
|
@ -729,7 +729,7 @@
|
|||
"InstanceName": "实例名称",
|
||||
"InstanceNamePartIp": "实例名称和部分IP",
|
||||
"InstancePlatformName": "实例平台名称",
|
||||
"Integration": "应用集成",
|
||||
"Integration": "集成",
|
||||
"Interface": "网络接口",
|
||||
"InterfaceSettings": "界面设置",
|
||||
"Interval": "间隔",
|
||||
|
|
@ -1028,6 +1028,7 @@
|
|||
"PleaseAgreeToTheTerms": "请同意条款",
|
||||
"PleaseEnterReason": "请输入原因",
|
||||
"PleaseSelect": "请选择",
|
||||
"PleaseSelectAssetOrNode": "请选择资产或节点",
|
||||
"PleaseSelectTheDataYouWantToCheck": "请选择需要勾选的数据",
|
||||
"PolicyName": "策略名称",
|
||||
"Port": "端口",
|
||||
|
|
@ -1628,14 +1629,20 @@
|
|||
"assetAddress": "资产地址",
|
||||
"assetId": "资产 ID",
|
||||
"assetName": "资产名称",
|
||||
"clickToAdd": "点击添加",
|
||||
"currentTime": "当前时间",
|
||||
"description": "暂无数据",
|
||||
"disallowSelfUpdateFields": "不允许自己修改当前字段",
|
||||
"forceEnableMFAHelpText": "如果强制启用,用户无法自行禁用",
|
||||
"isConsoleCanUse": "管理页面是否可用",
|
||||
"name": "用户名称",
|
||||
"overwriteProtocolsAndPortsMsg": "此操作将覆盖所有协议和端口,是否继续?",
|
||||
"pleaseSelectAssets": "请选择资产",
|
||||
"removeWarningMsg": "你确定要移除",
|
||||
"selectedAssets": "已选资产",
|
||||
"setVariable": "设置参数",
|
||||
"userId": "用户ID",
|
||||
"userName": "用户名"
|
||||
"userName": "用户名",
|
||||
"Risk": "风险",
|
||||
"selectFiles": "已选择选择{number}文件"
|
||||
}
|
||||
|
|
@ -1033,6 +1033,7 @@
|
|||
"PleaseAgreeToTheTerms": "請同意條款",
|
||||
"PleaseEnterReason": "請輸入原因",
|
||||
"PleaseSelect": "請選擇",
|
||||
"PleaseSelectAssetOrNode": "請選擇資產或節點",
|
||||
"PleaseSelectTheDataYouWantToCheck": "請選擇需要勾選的數據",
|
||||
"PolicyName": "策略名稱",
|
||||
"Port": "端口",
|
||||
|
|
@ -1633,13 +1634,17 @@
|
|||
"assetAddress": "資產地址",
|
||||
"assetId": "資產 ID",
|
||||
"assetName": "資產名稱",
|
||||
"clickToAdd": "點擊添加",
|
||||
"currentTime": "當前時間",
|
||||
"description": "目前沒有數據。",
|
||||
"disallowSelfUpdateFields": "不允許自己修改當前欄位",
|
||||
"forceEnableMFAHelpText": "如果強制啟用,用戶無法自行禁用",
|
||||
"isConsoleCanUse": "管理頁面是否可用",
|
||||
"name": "用戶名稱",
|
||||
"overwriteProtocolsAndPortsMsg": "此操作將覆蓋所有協議和端口,是否繼續?",
|
||||
"pleaseSelectAssets": "請選擇資產",
|
||||
"removeWarningMsg": "你確定要移除",
|
||||
"selectedAssets": "已選資產",
|
||||
"setVariable": "設置參數",
|
||||
"userId": "用戶ID",
|
||||
"userName": "用戶名"
|
||||
|
|
|
|||
|
|
@ -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": "Описание",
|
||||
|
|
@ -151,7 +151,7 @@
|
|||
"No": "Нет",
|
||||
"No account available": "Нет доступных учетных записей",
|
||||
"No available connect method": "Нет доступного метода подключения",
|
||||
"No facial features": "Нет характеристик лица, пожалуйста, перейдите в личную инфрмацию для привязки",
|
||||
"No facial features": "Данные лица отсутствуют. Пожалуйста, перейдите на страницу личной информации, чтобы привязать их. ",
|
||||
"No matching found": "Совпадений не найдено",
|
||||
"No permission": "Нет разрешений",
|
||||
"No protocol available": "Нет доступных протоколов",
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -729,6 +729,12 @@ class Config(dict):
|
|||
'LOKI_BASE_URL': 'http://loki:3100',
|
||||
|
||||
'TOOL_USER_ENABLED': False,
|
||||
|
||||
# Suggestion api
|
||||
'SUGGESTION_LIMIT': 10,
|
||||
|
||||
# MCP
|
||||
'MCP_ENABLED': False,
|
||||
}
|
||||
|
||||
old_config_map = {
|
||||
|
|
|
|||
|
|
@ -267,9 +267,17 @@ DATABASES = {
|
|||
DB_USE_SSL = CONFIG.DB_USE_SSL
|
||||
if DB_ENGINE == 'mysql':
|
||||
DB_OPTIONS['init_command'] = "SET sql_mode='STRICT_TRANS_TABLES'"
|
||||
|
||||
if DB_USE_SSL:
|
||||
DB_CA_PATH = exist_or_default(os.path.join(CERTS_DIR, 'db_ca.pem'), None)
|
||||
|
||||
if DB_ENGINE == 'mysql':
|
||||
DB_OPTIONS['ssl'] = {'ca': DB_CA_PATH }
|
||||
elif DB_ENGINE == 'postgresql':
|
||||
DB_OPTIONS.update({
|
||||
'sslmode': 'require',
|
||||
'sslrootcert': DB_CA_PATH,
|
||||
})
|
||||
|
||||
# Password validation
|
||||
# https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators
|
||||
|
|
|
|||
|
|
@ -266,3 +266,6 @@ LOKI_LOG_ENABLED = CONFIG.LOKI_LOG_ENABLED
|
|||
LOKI_BASE_URL = CONFIG.LOKI_BASE_URL
|
||||
|
||||
TOOL_USER_ENABLED = CONFIG.TOOL_USER_ENABLED
|
||||
|
||||
SUGGESTION_LIMIT = CONFIG.SUGGESTION_LIMIT
|
||||
MCP_ENABLED = CONFIG.MCP_ENABLED
|
||||
|
|
@ -38,12 +38,12 @@ REST_FRAMEWORK = {
|
|||
),
|
||||
'DEFAULT_FILTER_BACKENDS': (
|
||||
'django_filters.rest_framework.DjangoFilterBackend',
|
||||
'rest_framework.filters.SearchFilter',
|
||||
'common.drf.filters.SearchFilter',
|
||||
'common.drf.filters.RewriteOrderingFilter',
|
||||
),
|
||||
'DEFAULT_METADATA_CLASS': 'common.drf.metadata.SimpleMetadataWithFilters',
|
||||
'ORDERING_PARAM': "order",
|
||||
'SEARCH_PARAM': "search",
|
||||
'SEARCH_PARAM': "q",
|
||||
'DATETIME_FORMAT': '%Y/%m/%d %H:%M:%S %z',
|
||||
'DATETIME_INPUT_FORMATS': ['%Y/%m/%d %H:%M:%S %z', 'iso-8601', '%Y-%m-%d %H:%M:%S %z'],
|
||||
'DEFAULT_PAGINATION_CLASS': 'jumpserver.rewriting.pagination.MaxLimitOffsetPagination',
|
||||
|
|
|
|||
|
|
@ -35,11 +35,14 @@ resource_api = [
|
|||
|
||||
api_v1 = resource_api + [
|
||||
path('prometheus/metrics/', api.PrometheusMetricsApi.as_view()),
|
||||
path('search/', api.GlobalSearchView.as_view()),
|
||||
]
|
||||
if settings.MCP_ENABLED:
|
||||
api_v1.extend([
|
||||
path('resources/', api.ResourceTypeListApi.as_view(), name='resource-list'),
|
||||
path('resources/<str:resource>/', api.ResourceListApi.as_view()),
|
||||
path('resources/<str:resource>/<str:pk>/', api.ResourceDetailApi.as_view()),
|
||||
path('search/', api.GlobalSearchView.as_view()),
|
||||
]
|
||||
])
|
||||
|
||||
app_view_patterns = [
|
||||
path('auth/', include('authentication.urls.view_urls'), name='auth'),
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ class ResourceDownload(TemplateView):
|
|||
OPENSSH_VERSION=v9.4.0.0
|
||||
TINKER_VERSION=v0.1.6
|
||||
VIDEO_PLAYER_VERSION=0.6.0
|
||||
CLIENT_VERSION=v3.0.7
|
||||
CLIENT_VERSION=v3.1.0
|
||||
"""
|
||||
|
||||
def get_meta_json(self):
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
if chunk:
|
||||
buffer_str += chunk
|
||||
last_change_ts = time.time()
|
||||
|
||||
if buffer_str and buffer_str != prev_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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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)}")
|
||||
|
|
|
|||
|
|
@ -152,7 +152,7 @@ class UploadFileRunner:
|
|||
host_pattern="*",
|
||||
inventory=self.inventory,
|
||||
module='copy',
|
||||
module_args=f"src={self.src_paths}/ dest={self.dest_path}",
|
||||
module_args=f"src={self.src_paths}/ dest={self.dest_path}/",
|
||||
verbosity=verbosity,
|
||||
event_handler=self.cb.event_handler,
|
||||
status_handler=self.cb.status_handler,
|
||||
|
|
|
|||
|
|
@ -11,12 +11,15 @@ from django.shortcuts import get_object_or_404
|
|||
from django.utils._os import safe_join
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.exceptions import PermissionDenied
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from acls.models import LoginAssetACL
|
||||
from assets.models import Asset
|
||||
from common.const.http import POST
|
||||
from common.permissions import IsValidUser
|
||||
from common.utils import get_request_ip_or_data
|
||||
from ops.celery import app
|
||||
from ops.const import Types
|
||||
from ops.models import Job, JobExecution, JMSPermedInventory
|
||||
|
|
@ -48,7 +51,22 @@ def set_task_to_serializer_data(serializer, task_id):
|
|||
setattr(serializer, "_data", data)
|
||||
|
||||
|
||||
class JobViewSet(OrgBulkModelViewSet):
|
||||
class LoginAssetACLCheckMixin:
|
||||
|
||||
def check_login_asset_acls(self, user, assets, account, ip):
|
||||
for asset in assets:
|
||||
kwargs = {'user': user, 'asset': asset, 'account_username': account}
|
||||
acls = LoginAssetACL.filter_queryset(**kwargs)
|
||||
acl = LoginAssetACL.get_match_rule_acls(user, ip, acls)
|
||||
if not acl:
|
||||
return
|
||||
if not acl.is_action(acl.ActionChoices.accept):
|
||||
raise PermissionDenied(_(
|
||||
"Login to asset {}({}) is rejected by login asset ACL ({})".format(asset.name, asset.address, acl)
|
||||
))
|
||||
|
||||
|
||||
class JobViewSet(LoginAssetACLCheckMixin, OrgBulkModelViewSet):
|
||||
serializer_class = JobSerializer
|
||||
filterset_fields = ('name', 'type')
|
||||
search_fields = ('name', 'comment')
|
||||
|
|
@ -118,6 +136,13 @@ class JobViewSet(OrgBulkModelViewSet):
|
|||
execution.parameters = JobExecutionSerializer.validate_parameters(self._parameters)
|
||||
execution.creator = self.request.user
|
||||
execution.save()
|
||||
assets = merge_nodes_and_assets(job.nodes.all(), job.assets.all(), self.request.user)
|
||||
self.check_login_asset_acls(
|
||||
self.request.user,
|
||||
assets,
|
||||
job.runas,
|
||||
get_request_ip_or_data(self.request)
|
||||
)
|
||||
|
||||
set_task_to_serializer_data(serializer, execution.id)
|
||||
transaction.on_commit(
|
||||
|
|
@ -186,7 +211,7 @@ class JobViewSet(OrgBulkModelViewSet):
|
|||
return Response({'task_id': serializer.data.get('task_id')}, status=201)
|
||||
|
||||
|
||||
class JobExecutionViewSet(OrgBulkModelViewSet):
|
||||
class JobExecutionViewSet(LoginAssetACLCheckMixin, OrgBulkModelViewSet):
|
||||
serializer_class = JobExecutionSerializer
|
||||
http_method_names = ('get', 'post', 'head', 'options',)
|
||||
model = JobExecution
|
||||
|
|
@ -203,6 +228,16 @@ class JobExecutionViewSet(OrgBulkModelViewSet):
|
|||
run_ops_job_execution.apply_async((str(instance.id),), task_id=str(instance.id))
|
||||
|
||||
def perform_create(self, serializer):
|
||||
job = serializer.validated_data.get('job')
|
||||
if job:
|
||||
assets = merge_nodes_and_assets(job.nodes.all(), list(job.assets.all()), self.request.user)
|
||||
self.check_login_asset_acls(
|
||||
self.request.user,
|
||||
assets,
|
||||
job.runas,
|
||||
get_request_ip_or_data(self.request)
|
||||
)
|
||||
|
||||
instance = serializer.save()
|
||||
instance.job_version = instance.job.version
|
||||
instance.material = instance.job.material
|
||||
|
|
@ -235,7 +270,7 @@ class JobExecutionViewSet(OrgBulkModelViewSet):
|
|||
instance = get_object_or_404(JobExecution, task_id=task_id, creator=request.user)
|
||||
except Http404:
|
||||
return Response(
|
||||
{'error': _('The task is being created and cannot be interrupted. Please try again later.')},
|
||||
{'error': _("The task is being created and cannot be interrupted. Please try again later.")},
|
||||
status=400
|
||||
)
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ __all__ = ["Job", "JobExecution", "JMSPermedInventory"]
|
|||
from simple_history.models import HistoricalRecords
|
||||
|
||||
from accounts.models import Account
|
||||
from acls.models import CommandFilterACL
|
||||
from acls.models import CommandFilterACL, DataMaskingRule
|
||||
from assets.models import Asset
|
||||
from assets.automations.base.manager import SSHTunnelManager
|
||||
from common.db.encoder import ModelJSONFieldEncoder
|
||||
|
|
@ -516,13 +516,33 @@ class JobExecution(JMSOrgBaseModel):
|
|||
if error_assets_count > 0:
|
||||
raise Exception("You do not have access rights to {} assets".format(error_assets_count))
|
||||
|
||||
def before_start(self):
|
||||
self.check_assets_perms()
|
||||
def check_data_masking_rules_acls(self):
|
||||
for asset in self.current_job.assets.all():
|
||||
acls = DataMaskingRule.filter_queryset(
|
||||
user=self.creator,
|
||||
asset=asset,
|
||||
is_active=True,
|
||||
account_username=self.current_job.runas
|
||||
)
|
||||
protocols = [p.name for p in asset.protocols.all()]
|
||||
if acls and set(protocols) & {'mariadb', 'mysql', 'postgresql', 'sqlserver'}:
|
||||
print(
|
||||
"\033[31mcommand \'{}\' on asset {}({}) and account {} is rejected by data masking rules acl {}\033[0m"
|
||||
.format(self.current_job.args, asset.name, asset.address, self.current_job.runas, list(acls))
|
||||
)
|
||||
raise Exception("Command is rejected by data masking rules ACL")
|
||||
|
||||
def check_assets_acls(self):
|
||||
self.check_data_masking_rules_acls()
|
||||
if self.current_job.type == 'playbook':
|
||||
self.check_danger_keywords()
|
||||
if self.current_job.type == 'adhoc':
|
||||
self.check_command_acl()
|
||||
|
||||
def before_start(self):
|
||||
self.check_assets_perms()
|
||||
self.check_assets_acls()
|
||||
|
||||
def start(self, **kwargs):
|
||||
self.date_start = timezone.now()
|
||||
self.set_celery_id()
|
||||
|
|
|
|||
|
|
@ -24,5 +24,7 @@ class OrgMixin:
|
|||
|
||||
@sync_to_async
|
||||
def has_perms(self, user, perms):
|
||||
self.cookie = self.get_cookie()
|
||||
self.org = self.get_current_org()
|
||||
with tmp_to_org(self.org):
|
||||
return user.has_perms(perms)
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ user_perms = (
|
|||
("ops", "job", "*", "*"),
|
||||
("ops", "jobexecution", "*", "*"),
|
||||
("ops", "celerytaskexecution", "view", "*"),
|
||||
("users", "user", "match", "user"),
|
||||
)
|
||||
|
||||
system_user_perms = (
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ from django.views.static import serve
|
|||
from rest_framework import generics
|
||||
from rest_framework import status
|
||||
from rest_framework.permissions import AllowAny
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from common.utils import get_logger
|
||||
|
|
@ -215,3 +216,10 @@ class SettingsLogoApi(APIView):
|
|||
else:
|
||||
return HttpResponse(status=status.HTTP_404_NOT_FOUND)
|
||||
return serve(request, logo_path, document_root=document_root)
|
||||
|
||||
|
||||
class ClientVersionView(APIView):
|
||||
permission_classes = (AllowAny,)
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
return Response(['3.1.0'], status=status.HTTP_200_OK)
|
||||
|
|
|
|||
|
|
@ -242,7 +242,7 @@ def register_sqlite_connection():
|
|||
|
||||
|
||||
class LeakPasswords(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
id = models.AutoField(primary_key=True, verbose_name=_("ID"))
|
||||
password = models.CharField(max_length=1024, verbose_name=_("Password"))
|
||||
|
||||
class Meta:
|
||||
|
|
|
|||
|
|
@ -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"),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ urlpatterns = [
|
|||
path('public/open/', api.OpenPublicSettingApi.as_view(), name='open-public-setting'),
|
||||
path('server-info/', api.ServerInfoApi.as_view(), name='server-info'),
|
||||
path('i18n/<str:name>/', api.ComponentI18nApi.as_view(), name='i18n-data'),
|
||||
path('client/versions/', api.ClientVersionView.as_view(), name='client-version'),
|
||||
]
|
||||
|
||||
urlpatterns += router.urls
|
||||
|
|
|
|||
|
|
@ -56,8 +56,6 @@ class ToolsWebsocket(AsyncJsonWebsocketConsumer, OrgMixin):
|
|||
async def connect(self):
|
||||
user = self.scope["user"]
|
||||
if user.is_authenticated:
|
||||
self.cookie = self.get_cookie()
|
||||
self.org = self.get_current_org()
|
||||
has_perm = self.has_perms(user, ['rbac.view_systemtools'])
|
||||
if await self.is_superuser(user) or (settings.TOOL_USER_ENABLED and has_perm):
|
||||
await self.accept()
|
||||
|
|
@ -128,14 +126,14 @@ class ToolsWebsocket(AsyncJsonWebsocketConsumer, OrgMixin):
|
|||
close_old_connections()
|
||||
|
||||
|
||||
class LdapWebsocket(AsyncJsonWebsocketConsumer):
|
||||
class LdapWebsocket(AsyncJsonWebsocketConsumer, OrgMixin):
|
||||
category: str
|
||||
|
||||
async def connect(self):
|
||||
user = self.scope["user"]
|
||||
query = parse_qs(self.scope['query_string'].decode())
|
||||
self.category = query.get('category', [User.Source.ldap.value])[0]
|
||||
if user.is_authenticated:
|
||||
if user.is_authenticated and await self.has_perms(user, ['settings.view_setting']):
|
||||
await self.accept()
|
||||
else:
|
||||
await self.close()
|
||||
|
|
@ -166,8 +164,6 @@ class LdapWebsocket(AsyncJsonWebsocketConsumer):
|
|||
config = {
|
||||
'server_uri': serializer.validated_data.get(f"{prefix}SERVER_URI"),
|
||||
'bind_dn': serializer.validated_data.get(f"{prefix}BIND_DN"),
|
||||
'password': (serializer.validated_data.get(f"{prefix}BIND_PASSWORD") or
|
||||
getattr(settings, f"{prefix}BIND_PASSWORD")),
|
||||
'use_ssl': serializer.validated_data.get(f"{prefix}START_TLS", False),
|
||||
'search_ou': serializer.validated_data.get(f"{prefix}SEARCH_OU"),
|
||||
'search_filter': serializer.validated_data.get(f"{prefix}SEARCH_FILTER"),
|
||||
|
|
@ -175,6 +171,12 @@ class LdapWebsocket(AsyncJsonWebsocketConsumer):
|
|||
'auth_ldap': serializer.validated_data.get(f"{prefix.rstrip('_')}", False)
|
||||
}
|
||||
|
||||
password = serializer.validated_data.get(f"{prefix}BIND_PASSWORD")
|
||||
if not password and config['server_uri'] == getattr(settings, f"{prefix}SERVER_URI"):
|
||||
# 只有在没有修改服务器地址的情况下,才使用原有的密码
|
||||
config['password'] = getattr(settings, f"{prefix}BIND_PASSWORD")
|
||||
else:
|
||||
config['password'] = password
|
||||
return config
|
||||
|
||||
@staticmethod
|
||||
|
|
|
|||
|
|
@ -251,7 +251,8 @@ class SessionReplayViewSet(AsyncApiMixin, viewsets.ViewSet):
|
|||
|
||||
if url.endswith('.cast.gz'):
|
||||
tp = 'asciicast'
|
||||
elif url.endswith('.replay.mp4'):
|
||||
elif url.endswith('.mp4'):
|
||||
## .replay.mp4 .part.mp4
|
||||
tp = 'mp4'
|
||||
elif url.endswith('replay.json'):
|
||||
# 新版本将返回元数据信息
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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})')
|
||||
|
|
|
|||
|
|
@ -41,8 +41,8 @@ class UserViewSet(CommonApiMixin, UserQuerysetMixin, SuggestionMixin, BulkModelV
|
|||
permission_classes = [RBACPermission, UserObjectPermission]
|
||||
serializer_classes = {
|
||||
'default': UserSerializer,
|
||||
'suggestion': MiniUserSerializer,
|
||||
'invite': InviteSerializer,
|
||||
'match': MiniUserSerializer,
|
||||
'retrieve': UserRetrieveSerializer,
|
||||
}
|
||||
rbac_perms = {
|
||||
|
|
|
|||
|
|
@ -93,10 +93,10 @@ dependencies = [
|
|||
'celery==5.3.1',
|
||||
'flower==2.0.1',
|
||||
'django-celery-beat==2.6.0',
|
||||
'kombu==5.3.1',
|
||||
'kombu==5.3.5',
|
||||
'uvicorn==0.22.0',
|
||||
'websockets==11.0.3',
|
||||
'python-ldap==3.4.3',
|
||||
'python-ldap==3.4.5',
|
||||
'ldap3==2.9.1',
|
||||
'django-radius',
|
||||
'django-cas-ng',
|
||||
|
|
@ -149,7 +149,7 @@ dependencies = [
|
|||
'botocore==1.31.9',
|
||||
's3transfer==0.6.1',
|
||||
'xmlsec==1.3.14',
|
||||
'playwright==1.53.0',
|
||||
'playwright==1.55.0',
|
||||
'pdf2image==1.17.0',
|
||||
'drf-spectacular-sidecar==2025.8.1',
|
||||
]
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ fi
|
|||
|
||||
echo "4. For Apple processor"
|
||||
LDFLAGS="-L$(brew --prefix freetds)/lib -L$(brew --prefix openssl@1.1)/lib" CFLAGS="-I$(brew --prefix freetds)/include" pip install $(grep 'pymssql' requirements.txt)
|
||||
export PKG_CONFIG_PATH="/opt/homebrew/opt/mysql-client/lib/pkgconfig"
|
||||
|
||||
|
||||
echo "5. Install Ansible Receptor"
|
||||
|
|
|
|||
10
uv.lock
10
uv.lock
|
|
@ -1,5 +1,5 @@
|
|||
version = 1
|
||||
revision = 2
|
||||
revision = 3
|
||||
requires-python = ">=3.11"
|
||||
resolution-markers = [
|
||||
"python_full_version >= '3.14'",
|
||||
|
|
@ -2553,7 +2553,7 @@ requires-dist = [
|
|||
{ name = "itypes", specifier = "==1.2.0" },
|
||||
{ name = "jinja2", specifier = "==3.1.6" },
|
||||
{ name = "jsonfield2", specifier = "==4.0.0.post0" },
|
||||
{ name = "kombu", specifier = "==5.3.1" },
|
||||
{ name = "kombu", specifier = "==5.3.5" },
|
||||
{ name = "ldap3", specifier = "==2.9.1" },
|
||||
{ name = "lxml", specifier = "==5.2.1" },
|
||||
{ name = "markupsafe", specifier = "==2.1.3" },
|
||||
|
|
@ -2671,15 +2671,15 @@ wheels = [
|
|||
|
||||
[[package]]
|
||||
name = "kombu"
|
||||
version = "5.3.1"
|
||||
version = "5.3.5"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "amqp" },
|
||||
{ name = "vine" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c8/69/b703f8ec8d0406be22534dad885cac847fe092b793c4893034e3308feb9b/kombu-5.3.1.tar.gz", hash = "sha256:fbd7572d92c0bf71c112a6b45163153dea5a7b6a701ec16b568c27d0fd2370f2", size = 434284, upload-time = "2023-06-15T13:16:22.683Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/55/61/0b91085837d446570ea12f63f79463e5a74b449956b1ca9d1946a6f584c2/kombu-5.3.5.tar.gz", hash = "sha256:30e470f1a6b49c70dc6f6d13c3e4cc4e178aa6c469ceb6bcd55645385fc84b93", size = 438460, upload-time = "2024-01-12T19:55:54.982Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/63/58/b23b9c1ffb30d8b5cdfc7bdecb17bfd7ea20c619e86e515297b496177144/kombu-5.3.1-py3-none-any.whl", hash = "sha256:48ee589e8833126fd01ceaa08f8a2041334e9f5894e5763c8486a550454551e9", size = 198498, upload-time = "2023-06-15T13:16:14.57Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f7/88/daca086d72832c74a7e239558ad484644c8cda0b9ae8a690f247bf13c268/kombu-5.3.5-py3-none-any.whl", hash = "sha256:0eac1bbb464afe6fb0924b21bf79460416d25d8abc52546d4f16cad94f789488", size = 200001, upload-time = "2024-01-12T19:55:51.59Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
|
|||
Loading…
Reference in New Issue