mirror of https://github.com/jumpserver/jumpserver
perf: 国际化翻译
parent
efc7ca1164
commit
18f6ffe0ce
|
@ -9,12 +9,22 @@ method: change_secret
|
||||||
params:
|
params:
|
||||||
- name: commands
|
- name: commands
|
||||||
type: list
|
type: list
|
||||||
label: '自定义命令'
|
label: "{{ 'Params commands label' | trans }}"
|
||||||
default: [ '' ]
|
default: [ '' ]
|
||||||
help_text: '自定义命令中如需包含账号的 账号、密码、SSH 连接的用户密码 字段,<br />请使用 {username}、{password}、{login_password}格式,执行任务时会进行替换 。<br />比如针对 Cisco 主机进行改密,一般需要配置五条命令:<br />1. enable<br />2. {login_password}<br />3. configure terminal<br />4. username {username} privilege 0 password {password} <br />5. end'
|
help_text: "{{ 'Params commands help text' | trans }}"
|
||||||
|
|
||||||
i18n:
|
i18n:
|
||||||
SSH account change secret:
|
SSH account change secret:
|
||||||
zh: 使用 SSH 命令行自定义改密
|
zh: '使用 SSH 命令行自定义改密'
|
||||||
ja: SSH コマンドライン方式でカスタムパスワード変更
|
ja: 'SSH コマンドライン方式でカスタムパスワード変更'
|
||||||
en: Custom password change by SSH command line
|
en: 'Custom password change by SSH command line'
|
||||||
|
|
||||||
|
Params commands help text:
|
||||||
|
zh: '自定义命令中如需包含账号的 账号、密码、SSH 连接的用户密码 字段,<br />请使用 {username}、{password}、{login_password}格式,执行任务时会进行替换 。<br />比如针对 Cisco 主机进行改密,一般需要配置五条命令:<br />1. enable<br />2. {login_password}<br />3. configure terminal<br />4. username {username} privilege 0 password {password} <br />5. end'
|
||||||
|
ja: 'カスタム コマンドに SSH 接続用のアカウント番号、パスワード、ユーザー パスワード フィールドを含める必要がある場合は、<br />{ユーザー名}、{パスワード}、{login_password& を使用してください。 # 125; 形式。タスクの実行時に置き換えられます。 <br />たとえば、Cisco ホストのパスワードを変更するには、通常、次の 5 つのコマンドを設定する必要があります:<br />1.enable<br />2.{login_password}<br />3 .ターミナルの設定<br / >4. ユーザー名 {ユーザー名} 権限 0 パスワード {パスワード} <br />5. 終了'
|
||||||
|
en: 'If the custom command needs to include the account number, password, and user password field for SSH connection,<br />Please use {username}, {password}, {login_password&# 125; format, which will be replaced when executing the task. <br />For example, to change the password of a Cisco host, you generally need to configure five commands:<br />1. enable<br />2. {login_password}<br />3. configure terminal<br / >4. username {username} privilege 0 password {password} <br />5. end'
|
||||||
|
|
||||||
|
Params commands label:
|
||||||
|
zh: '自定义命令'
|
||||||
|
ja: 'カスタムコマンド'
|
||||||
|
en: 'Custom command'
|
||||||
|
|
|
@ -9,7 +9,7 @@ params:
|
||||||
type: str
|
type: str
|
||||||
label: 'Sudo'
|
label: 'Sudo'
|
||||||
default: '/bin/whoami'
|
default: '/bin/whoami'
|
||||||
help_text: '使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig'
|
help_text: "{{ 'Params sudo help text' | trans }}"
|
||||||
|
|
||||||
- name: shell
|
- name: shell
|
||||||
type: str
|
type: str
|
||||||
|
@ -18,19 +18,44 @@ params:
|
||||||
|
|
||||||
- name: home
|
- name: home
|
||||||
type: str
|
type: str
|
||||||
label: '家目录'
|
label: "{{ 'Params home label' | trans }}"
|
||||||
default: ''
|
default: ''
|
||||||
help_text: '默认家目录 /home/系统用户名: /home/username'
|
help_text: "{{ 'Params home help text' | trans }}"
|
||||||
|
|
||||||
- name: groups
|
- name: groups
|
||||||
type: str
|
type: str
|
||||||
label: '用户组'
|
label: "{{ 'Params groups label' | trans }}"
|
||||||
default: ''
|
default: ''
|
||||||
help_text: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)'
|
help_text: "{{ 'Params groups help text' | trans }}"
|
||||||
|
|
||||||
i18n:
|
i18n:
|
||||||
Aix account push:
|
Aix account push:
|
||||||
zh: 使用 Ansible 模块 user 执行 Aix 账号推送 (DES)
|
zh: '使用 Ansible 模块 user 执行 Aix 账号推送 (DES)'
|
||||||
ja: Ansible user モジュールを使用して Aix アカウントをプッシュする (DES)
|
ja: 'Ansible user モジュールを使用して Aix アカウントをプッシュする (DES)'
|
||||||
en: Using Ansible module user to push account (DES)
|
en: 'Using Ansible module user to push account (DES)'
|
||||||
|
|
||||||
|
Params sudo help text:
|
||||||
|
zh: '使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig'
|
||||||
|
ja: 'コンマで区切って複数のコマンドを入力してください。例: /bin/whoami,/sbin/ifconfig'
|
||||||
|
en: 'Use commas to separate multiple commands, such as: /bin/whoami,/sbin/ifconfig'
|
||||||
|
|
||||||
|
Params home help text:
|
||||||
|
zh: '默认家目录 /home/{账号用户名}'
|
||||||
|
ja: 'デフォルトのホームディレクトリ /home/{アカウントユーザ名}'
|
||||||
|
en: 'Default home directory /home/{account username}'
|
||||||
|
|
||||||
|
Params groups help text:
|
||||||
|
zh: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)'
|
||||||
|
ja: 'グループを入力してください。複数のグループはコンマで区切ってください(既存のグループを入力してください)'
|
||||||
|
en: 'Please enter the group. Multiple groups are separated by commas (please enter the existing group)'
|
||||||
|
|
||||||
|
Params home label:
|
||||||
|
zh: '家目录'
|
||||||
|
ja: 'ホームディレクトリ'
|
||||||
|
en: 'Home'
|
||||||
|
|
||||||
|
Params groups label:
|
||||||
|
zh: '用户组'
|
||||||
|
ja: 'グループ'
|
||||||
|
en: 'Groups'
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ params:
|
||||||
type: str
|
type: str
|
||||||
label: 'Sudo'
|
label: 'Sudo'
|
||||||
default: '/bin/whoami'
|
default: '/bin/whoami'
|
||||||
help_text: '使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig'
|
help_text: "{{ 'Params sudo help text' | trans }}"
|
||||||
|
|
||||||
- name: shell
|
- name: shell
|
||||||
type: str
|
type: str
|
||||||
|
@ -20,18 +20,43 @@ params:
|
||||||
|
|
||||||
- name: home
|
- name: home
|
||||||
type: str
|
type: str
|
||||||
label: '家目录'
|
label: "{{ 'Params home label' | trans }}"
|
||||||
default: ''
|
default: ''
|
||||||
help_text: '默认家目录 /home/系统用户名: /home/username'
|
help_text: "{{ 'Params home help text' | trans }}"
|
||||||
|
|
||||||
- name: groups
|
- name: groups
|
||||||
type: str
|
type: str
|
||||||
label: '用户组'
|
label: "{{ 'Params groups label' | trans }}"
|
||||||
default: ''
|
default: ''
|
||||||
help_text: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)'
|
help_text: "{{ 'Params groups help text' | trans }}"
|
||||||
|
|
||||||
i18n:
|
i18n:
|
||||||
Posix account push:
|
Posix account push:
|
||||||
zh: 使用 Ansible 模块 user 执行账号推送 (sha512)
|
zh: '使用 Ansible 模块 user 执行账号推送 (sha512)'
|
||||||
ja: Ansible user モジュールを使用してアカウントをプッシュする (sha512)
|
ja: 'Ansible user モジュールを使用してアカウントをプッシュする (sha512)'
|
||||||
en: Using Ansible module user to push account (sha512)
|
en: 'Using Ansible module user to push account (sha512)'
|
||||||
|
|
||||||
|
Params sudo help text:
|
||||||
|
zh: '使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig'
|
||||||
|
ja: 'コンマで区切って複数のコマンドを入力してください。例: /bin/whoami,/sbin/ifconfig'
|
||||||
|
en: 'Use commas to separate multiple commands, such as: /bin/whoami,/sbin/ifconfig'
|
||||||
|
|
||||||
|
Params home help text:
|
||||||
|
zh: '默认家目录 /home/{账号用户名}'
|
||||||
|
ja: 'デフォルトのホームディレクトリ /home/{アカウントユーザ名}'
|
||||||
|
en: 'Default home directory /home/{account username}'
|
||||||
|
|
||||||
|
Params groups help text:
|
||||||
|
zh: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)'
|
||||||
|
ja: 'グループを入力してください。複数のグループはコンマで区切ってください(既存のグループを入力してください)'
|
||||||
|
en: 'Please enter the group. Multiple groups are separated by commas (please enter the existing group)'
|
||||||
|
|
||||||
|
Params home label:
|
||||||
|
zh: '家目录'
|
||||||
|
ja: 'ホームディレクトリ'
|
||||||
|
en: 'Home'
|
||||||
|
|
||||||
|
Params groups label:
|
||||||
|
zh: '用户组'
|
||||||
|
ja: 'グループ'
|
||||||
|
en: 'Groups'
|
|
@ -10,10 +10,15 @@ params:
|
||||||
type: str
|
type: str
|
||||||
label: '用户组'
|
label: '用户组'
|
||||||
default: 'Users,Remote Desktop Users'
|
default: 'Users,Remote Desktop Users'
|
||||||
help_text: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)'
|
help_text: "{{ 'Params groups help text' | trans }}"
|
||||||
|
|
||||||
i18n:
|
i18n:
|
||||||
Windows account push:
|
Windows account push:
|
||||||
zh: 使用 Ansible 模块 win_user 执行 Windows 账号推送
|
zh: '使用 Ansible 模块 win_user 执行 Windows 账号推送'
|
||||||
ja: Ansible win_user モジュールを使用して Windows アカウントをプッシュする
|
ja: 'Ansible win_user モジュールを使用して Windows アカウントをプッシュする'
|
||||||
en: Using Ansible module win_user to push account
|
en: 'Using Ansible module win_user to push account'
|
||||||
|
|
||||||
|
Params groups help text:
|
||||||
|
zh: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)'
|
||||||
|
ja: 'グループを入力してください。複数のグループはコンマで区切ってください(既存のグループを入力してください)'
|
||||||
|
en: 'Please enter the group. Multiple groups are separated by commas (please enter the existing group)'
|
||||||
|
|
|
@ -10,10 +10,15 @@ params:
|
||||||
type: str
|
type: str
|
||||||
label: '用户组'
|
label: '用户组'
|
||||||
default: 'Users,Remote Desktop Users'
|
default: 'Users,Remote Desktop Users'
|
||||||
help_text: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)'
|
help_text: "{{ 'Params groups help text' | trans }}"
|
||||||
|
|
||||||
i18n:
|
i18n:
|
||||||
Windows account push rdp verify:
|
Windows account push rdp verify:
|
||||||
zh: 使用 Ansible 模块 win_user 执行 Windows 账号推送 RDP 协议测试最后的可连接性
|
zh: '使用 Ansible 模块 win_user 执行 Windows 账号推送(最后使用 Python 模块 pyfreerdp 验证账号的可连接性)'
|
||||||
ja: Ansibleモジュールwin_userがWindowsアカウントプッシュRDPプロトコルテストを実行する最後の接続性
|
ja: 'Ansible モジュール win_user を使用して Windows アカウントのプッシュを実行します (最後に Python モジュール pyfreerdp を使用してアカウントの接続性を確認します)'
|
||||||
en: Using the Ansible module win_user performs Windows account push RDP protocol testing for final connectivity
|
en: 'Use the Ansible module win_user to perform Windows account push (finally use the Python module pyfreerdp to verify the connectability of the account)'
|
||||||
|
|
||||||
|
Params groups help text:
|
||||||
|
zh: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)'
|
||||||
|
ja: 'グループを入力してください。複数のグループはコンマで区切ってください(既存のグループを入力してください)'
|
||||||
|
en: 'Please enter the group. Multiple groups are separated by commas (please enter the existing group)'
|
||||||
|
|
|
@ -8,6 +8,6 @@ method: verify_account
|
||||||
|
|
||||||
i18n:
|
i18n:
|
||||||
Windows rdp account verify:
|
Windows rdp account verify:
|
||||||
zh: 使用 Python 模块 pyfreerdp 验证账号
|
zh: '使用 Python 模块 pyfreerdp 验证账号'
|
||||||
ja: Python モジュール pyfreerdp を使用してアカウントを検証する
|
ja: 'Python モジュール pyfreerdp を使用してアカウントを検証する'
|
||||||
en: Using Python module pyfreerdp to verify account
|
en: 'Using Python module pyfreerdp to verify account'
|
||||||
|
|
|
@ -9,6 +9,6 @@ method: verify_account
|
||||||
|
|
||||||
i18n:
|
i18n:
|
||||||
SSH account verify:
|
SSH account verify:
|
||||||
zh: 使用 Python 模块 paramiko 验证账号
|
zh: '使用 Python 模块 paramiko 验证账号'
|
||||||
ja: Python モジュール paramiko を使用してアカウントを検証する
|
ja: 'Python モジュール paramiko を使用してアカウントを検証する'
|
||||||
en: Using Python module paramiko to verify account
|
en: 'Using Python module paramiko to verify account'
|
||||||
|
|
|
@ -7,6 +7,6 @@ type:
|
||||||
method: gather_facts
|
method: gather_facts
|
||||||
i18n:
|
i18n:
|
||||||
Gather posix facts:
|
Gather posix facts:
|
||||||
zh: 使用 Ansible 指令 gather_facts 从主机获取设备信息
|
zh: '使用 Ansible 指令 gather_facts 从主机获取设备信息'
|
||||||
en: Gather facts from asset using gather_facts
|
en: 'Gather facts from asset using gather_facts'
|
||||||
ja: gather_factsを使用してPosixから情報を収集する
|
ja: 'gather_factsを使用してPosixから情報を収集する'
|
||||||
|
|
|
@ -7,6 +7,6 @@ type:
|
||||||
- windows
|
- windows
|
||||||
i18n:
|
i18n:
|
||||||
Gather facts windows:
|
Gather facts windows:
|
||||||
zh: 使用 Ansible 指令 gather_facts 从 Windows 获取设备信息
|
zh: '使用 Ansible 指令 gather_facts 从 Windows 获取设备信息'
|
||||||
en: Gather facts from Windows using gather_facts
|
en: 'Gather facts from Windows using gather_facts'
|
||||||
ja: gather_factsを使用してWindowsから情報を収集する
|
ja: 'gather_factsを使用してWindowsから情報を収集する'
|
||||||
|
|
|
@ -31,7 +31,7 @@ def generate_serializer(data):
|
||||||
return create_serializer_class(serializer_name, params)
|
return create_serializer_class(serializer_name, params)
|
||||||
|
|
||||||
|
|
||||||
def get_platform_automation_methods(path):
|
def get_platform_automation_methods(path, lang=None):
|
||||||
methods = []
|
methods = []
|
||||||
for root, dirs, files in os.walk(path, topdown=False):
|
for root, dirs, files in os.walk(path, topdown=False):
|
||||||
for name in files:
|
for name in files:
|
||||||
|
@ -40,7 +40,7 @@ def get_platform_automation_methods(path):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
with open(path, 'r', encoding='utf8') as f:
|
with open(path, 'r', encoding='utf8') as f:
|
||||||
manifest = yaml_load_with_i18n(f)
|
manifest = yaml_load_with_i18n(f, lang)
|
||||||
check_platform_method(manifest, path)
|
check_platform_method(manifest, path)
|
||||||
manifest['dir'] = os.path.dirname(path)
|
manifest['dir'] = os.path.dirname(path)
|
||||||
manifest['params_serializer'] = generate_serializer(manifest)
|
manifest['params_serializer'] = generate_serializer(manifest)
|
||||||
|
|
|
@ -8,6 +8,6 @@ type:
|
||||||
method: ping
|
method: ping
|
||||||
i18n:
|
i18n:
|
||||||
Ping by pyfreerdp:
|
Ping by pyfreerdp:
|
||||||
zh: 使用 Python 模块 pyfreerdp 测试主机可连接性
|
zh: '使用 Python 模块 pyfreerdp 测试主机可连接性'
|
||||||
en: Ping by pyfreerdp module
|
en: 'Ping by pyfreerdp module'
|
||||||
ja: Pyfreerdpモジュールを使用してホストにPingする
|
ja: 'Pyfreerdpモジュールを使用してホストにPingする'
|
||||||
|
|
|
@ -8,6 +8,6 @@ type:
|
||||||
method: ping
|
method: ping
|
||||||
i18n:
|
i18n:
|
||||||
Ping by paramiko:
|
Ping by paramiko:
|
||||||
zh: 使用 Python 模块 paramiko 测试主机可连接性
|
zh: '使用 Python 模块 paramiko 测试主机可连接性'
|
||||||
en: Ping by paramiko module
|
en: 'Ping by paramiko module'
|
||||||
ja: Paramikoモジュールを使用してホストにPingする
|
ja: 'Paramikoモジュールを使用してホストにPingする'
|
||||||
|
|
|
@ -2,9 +2,11 @@ import json
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
from common.db.models import ChoicesMixin
|
from common.db.models import ChoicesMixin
|
||||||
|
from jumpserver.utils import get_current_request
|
||||||
from .category import Category
|
from .category import Category
|
||||||
from .cloud import CloudTypes
|
from .cloud import CloudTypes
|
||||||
from .custom import CustomTypes
|
from .custom import CustomTypes
|
||||||
|
@ -22,6 +24,8 @@ class AllTypes(ChoicesMixin):
|
||||||
CloudTypes, WebTypes, CustomTypes, GPTTypes
|
CloudTypes, WebTypes, CustomTypes, GPTTypes
|
||||||
]
|
]
|
||||||
_category_constrains = {}
|
_category_constrains = {}
|
||||||
|
_automation_methods = None
|
||||||
|
_current_language = settings.LANGUAGE_CODE
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def choices(cls):
|
def choices(cls):
|
||||||
|
@ -61,9 +65,28 @@ class AllTypes(ChoicesMixin):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_automation_methods(cls):
|
def get_automation_methods(cls):
|
||||||
from assets.automations import platform_automation_methods as asset_methods
|
from assets.automations import methods as asset
|
||||||
from accounts.automations import platform_automation_methods as account_methods
|
from accounts.automations import methods as account
|
||||||
return asset_methods + account_methods
|
|
||||||
|
automation_methods = \
|
||||||
|
asset.platform_automation_methods + \
|
||||||
|
account.platform_automation_methods
|
||||||
|
|
||||||
|
request = get_current_request()
|
||||||
|
if request is None:
|
||||||
|
return automation_methods
|
||||||
|
|
||||||
|
language = request.LANGUAGE_CODE
|
||||||
|
if cls._automation_methods is not None and language == cls._current_language:
|
||||||
|
automation_methods = cls._automation_methods
|
||||||
|
else:
|
||||||
|
automation_methods = \
|
||||||
|
asset.get_platform_automation_methods(asset.BASE_DIR, language) + \
|
||||||
|
account.get_platform_automation_methods(account.BASE_DIR, language)
|
||||||
|
|
||||||
|
cls._current_language = language
|
||||||
|
cls._automation_methods = automation_methods
|
||||||
|
return cls._automation_methods
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def set_automation_methods(cls, category, tp_name, constraints):
|
def set_automation_methods(cls, category, tp_name, constraints):
|
||||||
|
|
|
@ -5,20 +5,21 @@ from django.conf import settings
|
||||||
from jinja2 import Environment
|
from jinja2 import Environment
|
||||||
|
|
||||||
|
|
||||||
def translate(key, i18n):
|
def translate(key, i18n, lang):
|
||||||
lang = settings.LANGUAGE_CODE[:2]
|
lang = settings.LANGUAGE_CODE if lang is None else lang
|
||||||
|
lang = lang[:2]
|
||||||
lang_data = i18n.get(key, {})
|
lang_data = i18n.get(key, {})
|
||||||
return lang_data.get(lang, key)
|
return lang_data.get(lang, key)
|
||||||
|
|
||||||
|
|
||||||
def yaml_load_with_i18n(stream):
|
def yaml_load_with_i18n(stream, lang):
|
||||||
ori_text = stream.read()
|
ori_text = stream.read()
|
||||||
stream = io.StringIO(ori_text)
|
stream = io.StringIO(ori_text)
|
||||||
yaml_data = yaml.safe_load(stream)
|
yaml_data = yaml.safe_load(stream)
|
||||||
i18n = yaml_data.get('i18n', {})
|
i18n = yaml_data.get('i18n', {})
|
||||||
|
|
||||||
env = Environment()
|
env = Environment()
|
||||||
env.filters['trans'] = lambda key: translate(key, i18n)
|
env.filters['trans'] = lambda key: translate(key, i18n, lang)
|
||||||
template = env.from_string(ori_text)
|
template = env.from_string(ori_text)
|
||||||
yaml_data = template.render()
|
yaml_data = template.render()
|
||||||
yaml_f = io.StringIO(yaml_data)
|
yaml_f = io.StringIO(yaml_data)
|
||||||
|
|
Loading…
Reference in New Issue