1
0
mirror of https://github.com/1Panel-dev/1Panel.git synced 2025-02-08 01:20:07 +08:00

fix: 移除部分重复国际化内容 (#1495)

This commit is contained in:
ssongliu 2023-06-29 22:38:12 +08:00 committed by GitHub
parent 6c4c73e825
commit 4bf76aacb1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
70 changed files with 185 additions and 340 deletions

View File

@ -1,17 +1,13 @@
ErrInvalidParams: "Request parameter error: {{ .detail }}" ErrInvalidParams: "Request parameter error: {{ .detail }}"
ErrToken: "Token information is incorrect.: {{ .detail }}"
ErrTokenParse: "Token generation error: {{ .detail }}" ErrTokenParse: "Token generation error: {{ .detail }}"
ErrTokenTimeOut: "Login information is out of date: {{ .detail }}"
ErrInitialPassword: "Initial password error" ErrInitialPassword: "Initial password error"
ErrInternalServer: "Service internal error: {{ .detail }}" ErrInternalServer: "Service internal error: {{ .detail }}"
ErrRecordExist: "Record already exists" ErrRecordExist: "Record already exists"
ErrRecordNotFound: "Records not found" ErrRecordNotFound: "Records not found"
ErrStructTransform: "Type conversion failure: {{ .detail }}" ErrStructTransform: "Type conversion failure: {{ .detail }}"
ErrNotLogin: "User is not Login: {{ .detail }}" ErrNotLogin: "User is not Login: {{ .detail }}"
ErrNotSafety: "The login status of the current user is unsafe: {{ .detail }}"
ErrPasswordExpired: "The current password has expired: {{ .detail }}" ErrPasswordExpired: "The current password has expired: {{ .detail }}"
ErrNotSupportType: "The system does not support the current type: {{ .detail }}" ErrNotSupportType: "The system does not support the current type: {{ .detail }}"
ErrRepoNotValid: "Remote repository verification failed"
#common #common
ErrNameIsExist: "Name is already exist" ErrNameIsExist: "Name is already exist"

View File

@ -1,17 +1,13 @@
ErrInvalidParams: "请求参数错误: {{ .detail }}" ErrInvalidParams: "请求参数错误: {{ .detail }}"
ErrToken: "Token 信息错误: {{ .detail }}"
ErrTokenParse: "Token 生成错误: {{ .detail }}" ErrTokenParse: "Token 生成错误: {{ .detail }}"
ErrTokenTimeOut: "登陆信息已过期: {{ .detail }}"
ErrInitialPassword: "原密码错误" ErrInitialPassword: "原密码错误"
ErrInternalServer: "服务内部错误: {{ .detail }}" ErrInternalServer: "服务内部错误: {{ .detail }}"
ErrRecordExist: "记录已存在" ErrRecordExist: "记录已存在"
ErrRecordNotFound: "记录未能找到" ErrRecordNotFound: "记录未能找到"
ErrStructTransform: "类型转换失败: {{ .detail }}" ErrStructTransform: "类型转换失败: {{ .detail }}"
ErrNotLogin: "用户未登录: {{ .detail }}" ErrNotLogin: "用户未登录: {{ .detail }}"
ErrNotSafety: "当前用户登录状态不安全: {{ .detail }}"
ErrPasswordExpired: "当前密码已过期: {{ .detail }}" ErrPasswordExpired: "当前密码已过期: {{ .detail }}"
ErrNotSupportType: "系统暂不支持当前类型: {{ .detail }}" ErrNotSupportType: "系统暂不支持当前类型: {{ .detail }}"
ErrRepoNotValid: "远程仓库校验失败!"
#common #common
ErrNameIsExist: "名称已存在" ErrNameIsExist: "名称已存在"

View File

@ -4,11 +4,11 @@
<template #header> <template #header>
<DrawerHeader <DrawerHeader
v-if="detailName" v-if="detailName"
:header="$t('database.backup')" :header="$t('commons.button.backup')"
:resource="name + '(' + detailName + ')'" :resource="name + '(' + detailName + ')'"
:back="handleClose" :back="handleClose"
/> />
<DrawerHeader v-else :header="$t('database.backup')" :resource="name" :back="handleClose" /> <DrawerHeader v-else :header="$t('commons.button.backup')" :resource="name" :back="handleClose" />
</template> </template>
<ComplexTable <ComplexTable
v-loading="loading" v-loading="loading"
@ -19,7 +19,7 @@
> >
<template #toolbar> <template #toolbar>
<el-button type="primary" @click="onBackup()"> <el-button type="primary" @click="onBackup()">
{{ $t('database.backup') }} {{ $t('commons.button.backup') }}
</el-button> </el-button>
<el-button type="primary" plain :disabled="selects.length === 0" @click="onBatchDelete(null)"> <el-button type="primary" plain :disabled="selects.length === 0" @click="onBatchDelete(null)">
{{ $t('commons.button.delete') }} {{ $t('commons.button.delete') }}

View File

@ -34,7 +34,7 @@
</div> </div>
<el-drawer :close-on-click-modal="false" :key="refresh" v-model="drawerVisiable" size="50%" append-to-body> <el-drawer :close-on-click-modal="false" :key="refresh" v-model="drawerVisiable" size="50%" append-to-body>
<template #header> <template #header>
<DrawerHeader :header="$t('setting.upgrade')" :back="handleClose" /> <DrawerHeader :header="$t('commons.button.upgrade')" :back="handleClose" />
</template> </template>
<div class="panel-MdEditor"> <div class="panel-MdEditor">
<el-alert :closable="false"> <el-alert :closable="false">
@ -133,7 +133,7 @@ const changeOption = async () => {
}; };
const onUpgrade = async () => { const onUpgrade = async () => {
ElMessageBox.confirm(i18n.global.t('setting.upgradeHelper', i18n.global.t('setting.upgrade')), { ElMessageBox.confirm(i18n.global.t('setting.upgradeHelper', i18n.global.t('commons.button.upgrade')), {
confirmButtonText: i18n.global.t('commons.button.confirm'), confirmButtonText: i18n.global.t('commons.button.confirm'),
cancelButtonText: i18n.global.t('commons.button.cancel'), cancelButtonText: i18n.global.t('commons.button.cancel'),
type: 'info', type: 'info',

View File

@ -31,6 +31,7 @@ const message = {
expand: 'Expand', expand: 'Expand',
log: 'Log', log: 'Log',
back: 'Back', back: 'Back',
backup: 'Backup',
recover: 'Recover', recover: 'Recover',
retry: 'Retry', retry: 'Retry',
upload: 'Upload', upload: 'Upload',
@ -42,6 +43,7 @@ const message = {
search: 'Search', search: 'Search',
refresh: 'Refresh', refresh: 'Refresh',
get: 'Get', get: 'Get',
upgrade: 'Upgrade',
}, },
search: { search: {
timeStart: 'Time start', timeStart: 'Time start',
@ -58,6 +60,7 @@ const message = {
status: 'Status', status: 'Status',
statusSuccess: 'Success', statusSuccess: 'Success',
statusFailed: 'Failed', statusFailed: 'Failed',
statusWaiting: 'Waiting...',
records: 'Records', records: 'Records',
group: 'Group', group: 'Group',
createdAt: 'Creation Time', createdAt: 'Creation Time',
@ -68,7 +71,10 @@ const message = {
message: 'Message', message: 'Message',
description: 'Description', description: 'Description',
interval: 'Interval', interval: 'Interval',
user: 'User',
title: 'Title', title: 'Title',
port: 'Port',
protocol: 'Protocol',
tableSetting: 'Table setting', tableSetting: 'Table setting',
autoRefresh: 'Auto refresh', autoRefresh: 'Auto refresh',
refreshRate: 'Rate', refreshRate: 'Rate',
@ -99,7 +105,8 @@ const message = {
operate: 'Operate', operate: 'Operate',
operateConfirm: 'If you are sure about the operation, please input it manually', operateConfirm: 'If you are sure about the operation, please input it manually',
inputOrSelect: 'Please select or enter', inputOrSelect: 'Please select or enter',
backupSuccess: 'Backup Success', copyfailed: 'Copy failed',
notFound: 'Sorry, the page you requested does not exist.',
unSupportType: 'Current file type is not supported!', unSupportType: 'Current file type is not supported!',
unSupportSize: 'The uploaded file exceeds {0}M, please confirm!', unSupportSize: 'The uploaded file exceeds {0}M, please confirm!',
fileExist: 'The file already exists in the current folder. Repeat uploading is not supported!', fileExist: 'The file already exists in the current folder. Repeat uploading is not supported!',
@ -192,23 +199,26 @@ const message = {
}, },
status: { status: {
running: 'Running', running: 'Running',
stopped: 'Stopped',
waiting: 'Waiting',
success: 'Success', success: 'Success',
waiting: 'Waiting',
failed: 'Failed', failed: 'Failed',
stopped: 'Stopped',
error: 'Error', error: 'Error',
created: 'Created', created: 'Created',
restarting: 'Restarting', restarting: 'Restarting',
uploading: 'Uploading', uploading: 'Uploading',
unhealthy: 'Unhealthy',
removing: 'Removing', removing: 'Removing',
paused: 'Paused', paused: 'Paused',
exited: 'Exited', exited: 'Exited',
installing: 'Installing',
enabled: 'Enabled', enabled: 'Enabled',
disabled: 'Disabled', disabled: 'Disabled',
normal: 'Normal', normal: 'Normal',
building: 'Building', building: 'Building',
downloaderr: 'Download Error', downloaderr: 'Download Error',
upgrading: 'Upgrading', upgrading: 'Upgrading',
upgradeerr: 'Upgrade Error',
}, },
units: { units: {
second: 'Second', second: 'Second',
@ -218,6 +228,8 @@ const message = {
week: 'Week', week: 'Week',
month: 'Month', month: 'Month',
year: 'Year', year: 'Year',
time: 'Time',
core: 'Core',
}, },
}, },
menu: { menu: {
@ -226,12 +238,13 @@ const message = {
website: 'Website', website: 'Website',
project: 'Project', project: 'Project',
config: 'Config', config: 'Config',
ssh: 'SSH Setting',
firewall: 'Firewall', firewall: 'Firewall',
ssl: 'Certificate',
database: 'Database', database: 'Database',
container: 'Container', container: 'Container',
cronjob: 'Cronjob', cronjob: 'Cronjob',
host: 'Host', host: 'Host',
ssh: 'SSH Setting',
security: 'Security', security: 'Security',
files: 'File', files: 'File',
monitor: 'Monitor', monitor: 'Monitor',
@ -239,7 +252,6 @@ const message = {
settings: 'Setting', settings: 'Setting',
toolbox: 'Toolbox', toolbox: 'Toolbox',
logs: 'Log', logs: 'Log',
ssl: 'Certificate',
runtime: 'Runtime', runtime: 'Runtime',
processManage: 'Process', processManage: 'Process',
process: 'Process', process: 'Process',
@ -261,13 +273,8 @@ const message = {
totalRecv: 'Total recv', totalRecv: 'Total recv',
rwPerSecond: 'IO times', rwPerSecond: 'IO times',
ioDelay: 'IO delay', ioDelay: 'IO delay',
time: 'Times',
uptime: 'Up Time', uptime: 'Up Time',
runningTime: 'Running Time', runningTime: 'Running Time',
Day: 'Days',
Hour: 'Hours',
Minute: 'Minutes',
Second: 'Seconds',
runSmoothly: 'Run smoothly', runSmoothly: 'Run smoothly',
runNormal: 'Run normal', runNormal: 'Run normal',
@ -275,7 +282,6 @@ const message = {
runJam: 'Run Blockaged', runJam: 'Run Blockaged',
core: 'Physical core', core: 'Physical core',
coreUnit: 'Core',
logicCore: 'Logic core', logicCore: 'Logic core',
loadAverage: 'Average load in the last {0} minutes', loadAverage: 'Average load in the last {0} minutes',
load: 'Load', load: 'Load',
@ -309,7 +315,6 @@ const message = {
noMysql: 'No {0} database is detected, please go to App Store and click Install!', noMysql: 'No {0} database is detected, please go to App Store and click Install!',
goInstall: 'Go to install', goInstall: 'Go to install',
source: 'Source', source: 'Source',
backup: 'Backup',
permission: 'Permission', permission: 'Permission',
permissionForIP: 'IP', permissionForIP: 'IP',
permissionAll: 'All of them(%)', permissionAll: 'All of them(%)',
@ -318,9 +323,7 @@ const message = {
serviceName: 'Service Name', serviceName: 'Service Name',
serviceNameHelper: 'Access between containers in the same network.', serviceNameHelper: 'Access between containers in the same network.',
backupList: 'Backup', backupList: 'Backup',
backList: 'Return',
loadBackup: 'Import', loadBackup: 'Import',
setting: 'Settings',
remoteAccess: 'Remote access', remoteAccess: 'Remote access',
remoteHelper: 'Multiple IP comma-delimited, example: 172.16.10.111, 172.16.10.112', remoteHelper: 'Multiple IP comma-delimited, example: 172.16.10.111, 172.16.10.112',
remoteConnHelper: remoteConnHelper:
@ -331,15 +334,18 @@ const message = {
confChange: 'Configuration change', confChange: 'Configuration change',
portSetting: 'Port setting',
portHelper: portHelper:
'This port is the exposed port of the container. You need to save the modification separately and restart the container!', 'This port is the exposed port of the container. You need to save the modification separately and restart the container!',
selectFile: 'Select file', selectFile: 'Select file',
dropHelper: 'You can drag and drop the uploaded file here or',
clickHelper: 'click to upload',
supportUpType: 'Only sql, sql.gz, and tar.gz files are supported', supportUpType: 'Only sql, sql.gz, and tar.gz files are supported',
zipFormat: 'tar.gz compressed package structure: test.tar.gz compressed package must contain test.sql', zipFormat: 'tar.gz compressed package structure: test.tar.gz compressed package must contain test.sql',
currentStatus: 'Current state', currentStatus: 'Current state',
baseParam: 'Basic parameter',
performanceParam: 'Performance parameter',
runTime: 'Startup time', runTime: 'Startup time',
connections: 'Total connections', connections: 'Total connections',
bytesSent: 'Send bytes', bytesSent: 'Send bytes',
@ -395,15 +401,9 @@ const message = {
longQueryTime: 'threshold(s)', longQueryTime: 'threshold(s)',
thresholdRangeHelper: 'Please enter the correct threshold (1 - 600).', thresholdRangeHelper: 'Please enter the correct threshold (1 - 600).',
status: 'The current state',
baseParam: 'Basic parameter',
performanceParam: 'Performance parameter',
terminal: 'Terminal mode',
second: 'Second',
timeout: 'Timeout', timeout: 'Timeout',
timeoutHelper: 'Idle connection timeout period. 0 indicates that the connection is on continuously', timeoutHelper: 'Idle connection timeout period. 0 indicates that the connection is on continuously',
maxclients: 'Max clients', maxclients: 'Max clients',
requirepass: 'Password',
requirepassHelper: requirepassHelper:
'Leave this blank to indicate that no password has been set. Changes need to be saved separately and the container restarted!', 'Leave this blank to indicate that no password has been set. Changes need to be saved separately and the container restarted!',
databases: 'Number of databases', databases: 'Number of databases',
@ -492,13 +492,11 @@ const message = {
cpuShareHelper: cpuShareHelper:
'The default CPU share for a container is 1024, which can be increased to give the container more CPU time.', 'The default CPU share for a container is 1024, which can be increased to give the container more CPU time.',
user: 'User',
command: 'Command', command: 'Command',
custom: 'Custom', custom: 'Custom',
emptyUser: 'When empty, you will log in as default', emptyUser: 'When empty, you will log in as default',
containerTerminal: 'Terminal', containerTerminal: 'Terminal',
upgrade: 'Upgrade',
upgradeHelper: 'This operation only supports upgrading container versions.', upgradeHelper: 'This operation only supports upgrading container versions.',
upgradeWarning: 'The target version is lower than the original image version. Please try again!', upgradeWarning: 'The target version is lower than the original image version. Please try again!',
upgradeWarning2: upgradeWarning2:
@ -508,7 +506,6 @@ const message = {
appHelper: appHelper:
'This container is sourced from the application store. Upgrading it may cause the service to be unavailable. Do you want to continue?', 'This container is sourced from the application store. Upgrading it may cause the service to be unavailable. Do you want to continue?',
port: 'Port',
server: 'Host', server: 'Host',
serverExample: 'e.g. 80, 80-88, ip:80 or ip:80-88', serverExample: 'e.g. 80, 80-88, ip:80 or ip:80-88',
containerExample: 'e.g. 80 or 80-88', containerExample: 'e.g. 80 or 80-88',
@ -534,6 +531,10 @@ const message = {
onFailure: 'on-failurefive times by default', onFailure: 'on-failurefive times by default',
no: 'never', no: 'never',
monitor: 'Monitor',
refreshTime: 'Refresh time',
cache: 'Cache',
image: 'Image', image: 'Image',
imagePull: 'Image pull', imagePull: 'Image pull',
imagePush: 'Image push', imagePush: 'Image push',
@ -544,7 +545,6 @@ const message = {
pull: 'Pull', pull: 'Pull',
path: 'Path', path: 'Path',
importImage: 'Image import', importImage: 'Image import',
import: 'Import',
build: 'Build', build: 'Build',
imageBuild: 'Image build', imageBuild: 'Image build',
pathSelect: 'Path', pathSelect: 'Path',
@ -571,13 +571,8 @@ const message = {
scope: 'IP Scope', scope: 'IP Scope',
gateway: 'Gateway', gateway: 'Gateway',
monitor: 'Monitor',
refreshTime: 'Refresh time',
cache: 'Cache',
volume: 'Volume', volume: 'Volume',
volumeDir: 'Volume dir', volumeDir: 'Volume dir',
volumeName: 'Name',
nfsEnable: 'Enable NFS storage', nfsEnable: 'Enable NFS storage',
nfsAddress: 'Address', nfsAddress: 'Address',
nfsAddressHelper: 'Support input of IP address or domain', nfsAddressHelper: 'Support input of IP address or domain',
@ -588,8 +583,6 @@ const message = {
repo: 'Repo', repo: 'Repo',
createRepo: 'Add repo', createRepo: 'Add repo',
name: 'Name',
protocol: 'Protocol',
httpRepo: 'The http repository needs to restart the docker service to add credit', httpRepo: 'The http repository needs to restart the docker service to add credit',
delInsecure: 'Deletion of credit', delInsecure: 'Deletion of credit',
delInsecureHelper: 'docker service needs to be restarted to delete the credit. Do you want to delete it?', delInsecureHelper: 'docker service needs to be restarted to delete the credit. Do you want to delete it?',
@ -705,11 +698,7 @@ const message = {
perNSecond: 'Every N seconds', perNSecond: 'Every N seconds',
per: 'Every ', per: 'Every ',
handle: 'Handle', handle: 'Handle',
day: 'Day',
day1: 'Day', day1: 'Day',
hour: ' Hour',
minute: ' Minute',
second: ' Second',
monday: 'Monday', monday: 'Monday',
tuesday: 'Tuesday', tuesday: 'Tuesday',
wednesday: 'Wednesday', wednesday: 'Wednesday',
@ -734,15 +723,13 @@ const message = {
enableMonitor: 'Enable', enableMonitor: 'Enable',
storeDays: 'Expiration days', storeDays: 'Expiration days',
cleanMonitor: 'Clearing monitoring records', cleanMonitor: 'Clearing monitoring records',
setting: 'Setting',
avgLoad: 'Average load', avgLoad: 'Average load',
loadDetail: 'Load detail', loadDetail: 'Load detail',
resourceUsage: 'Resource utilization rate', resourceUsage: 'Resource utilization rate',
networkCard: 'Net card', networkCard: 'Net card',
min: 'Minutes',
read: 'Read', read: 'Read',
write: 'Write', write: 'Write',
count: 'Times',
readWriteCount: 'Read or write Times', readWriteCount: 'Read or write Times',
readWriteTime: 'Read or write delay', readWriteTime: 'Read or write delay',
today: 'Today', today: 'Today',
@ -779,14 +766,10 @@ const message = {
addHost: 'Add Host', addHost: 'Add Host',
localhost: 'Localhost', localhost: 'Localhost',
ip: 'Address', ip: 'Address',
name: 'Name',
port: 'Port',
user: 'Username',
authMode: 'Auth Mode', authMode: 'Auth Mode',
passwordMode: 'Password', passwordMode: 'Password',
rememberPassword: 'Remember password', rememberPassword: 'Remember password',
keyMode: 'PrivateKey', keyMode: 'PrivateKey',
password: 'Password',
key: 'Private key', key: 'Private key',
keyPassword: 'Private key password', keyPassword: 'Private key password',
emptyTerminal: 'No terminal is currently connected', emptyTerminal: 'No terminal is currently connected',
@ -795,34 +778,25 @@ const message = {
panelLog: 'Panel logs', panelLog: 'Panel logs',
operation: 'Operation logs', operation: 'Operation logs',
login: 'Login logs', login: 'Login logs',
system: 'System logs',
loginIP: 'Login IP', loginIP: 'Login IP',
loginAddress: 'Login address', loginAddress: 'Login address',
loginAgent: 'Login agent', loginAgent: 'Login agent',
loginStatus: 'Login status', loginStatus: 'Login status',
system: 'System logs',
deleteLogs: 'Clearing Logs', deleteLogs: 'Clearing Logs',
resource: 'Resource', resource: 'Resource',
operate: 'Operate', operate: 'Operate',
detail: { detail: {
users: 'User',
hosts: 'Host', hosts: 'Host',
apps: 'App', apps: 'App',
websites: 'Website', websites: 'Website',
containers: 'Container', containers: 'Container',
runtimes: 'Runtime',
commands: 'Command',
groups: 'System Group',
files: 'File Manage', files: 'File Manage',
backups: 'Backup Account',
logs: 'Panel Logs', logs: 'Panel Logs',
settings: 'Panel Setting', settings: 'Panel Setting',
cronjobs: 'Cronjob', cronjobs: 'Cronjob',
databases: 'Database', databases: 'Database',
auth: 'User',
login: ' login',
logout: ' logout',
}, },
status: 'status',
websiteLog: 'Website Log', websiteLog: 'Website Log',
runLog: 'Run Log', runLog: 'Run Log',
errLog: 'Err Log', errLog: 'Err Log',
@ -849,7 +823,6 @@ const message = {
terminal: 'Terminal', terminal: 'Terminal',
shareList: 'Share list', shareList: 'Share list',
zip: 'Compressed', zip: 'Compressed',
user: 'User',
group: 'User group', group: 'User group',
path: 'Path', path: 'Path',
public: 'Public', public: 'Public',
@ -885,7 +858,6 @@ const message = {
downloadProcess: 'Download progress', downloadProcess: 'Download progress',
downloading: 'Downloading...', downloading: 'Downloading...',
infoDetail: 'File Properties', infoDetail: 'File Properties',
type: 'Type',
list: 'File List', list: 'File List',
sub: 'Include subdirectory', sub: 'Include subdirectory',
downlodSuccess: 'Download Success', downlodSuccess: 'Download Success',
@ -911,7 +883,6 @@ const message = {
sshChangeHelper: 'This action changed {0} to [{1}]. Do you want to continue?', sshChangeHelper: 'This action changed {0} to [{1}]. Do you want to continue?',
sshFileChangeHelper: sshFileChangeHelper:
'Modifying the configuration file may cause service availability. Exercise caution when performing this operation. Do you want to continue?', 'Modifying the configuration file may cause service availability. Exercise caution when performing this operation. Do you want to continue?',
port: 'Port',
portHelper: 'Specifies the port number monitored by the SSH service. The default port number is 22.', portHelper: 'Specifies the port number monitored by the SSH service. The default port number is 22.',
listenAddress: 'Listening address', listenAddress: 'Listening address',
addressHelper: addressHelper:
@ -936,11 +907,9 @@ const message = {
dnsHelper: dnsHelper:
'Controls whether the DNS resolution function is enabled on the SSH server to verify the identity of the connection.', 'Controls whether the DNS resolution function is enabled on the SSH server to verify the identity of the connection.',
loginLogs: 'SSH login log', loginLogs: 'SSH login log',
loginUser: 'User',
loginMode: 'Login mode', loginMode: 'Login mode',
authenticating: 'Key', authenticating: 'Key',
publickey: 'Key', publickey: 'Key',
password: 'Password',
belong: 'Belong', belong: 'Belong',
local: 'Local', local: 'Local',
remote: 'Remote', remote: 'Remote',
@ -948,7 +917,6 @@ const message = {
setting: { setting: {
all: 'All', all: 'All',
panel: 'Panel', panel: 'Panel',
user: 'UserName',
userChange: 'Change username', userChange: 'Change username',
userChangeHelper: 'Change the user name to log out. Do you want to continue?', userChangeHelper: 'Change the user name to log out. Do you want to continue?',
passwd: 'Password', passwd: 'Password',
@ -990,7 +958,6 @@ const message = {
retryPassword: 'Confirm password', retryPassword: 'Confirm password',
duplicatePassword: 'The new password cannot be the same as the original password, please re-enter!', duplicatePassword: 'The new password cannot be the same as the original password, please re-enter!',
backup: 'Backup',
thirdParty: 'Third-party account', thirdParty: 'Third-party account',
createBackupAccount: 'Add {0}', createBackupAccount: 'Add {0}',
noTypeForCreate: 'No backup type is currently created', noTypeForCreate: 'No backup type is currently created',
@ -1029,9 +996,6 @@ const message = {
accountName: 'Account name', accountName: 'Account name',
accountKey: 'Account key', accountKey: 'Account key',
address: 'Address', address: 'Address',
port: 'Port',
username: 'Username',
password: 'Password',
path: 'Path', path: 'Path',
safe: 'Security', safe: 'Security',
@ -1074,6 +1038,7 @@ const message = {
allowIPEgs: allowIPEgs:
'If multiple ip authorizations exist, newlines need to be displayed. For example, \n172.16.10.111 \n172.16.10.112', 'If multiple ip authorizations exist, newlines need to be displayed. For example, \n172.16.10.111 \n172.16.10.112',
mfa: 'MFA', mfa: 'MFA',
secret: 'Secret',
mfaInterval: 'Refresh interval (s)', mfaInterval: 'Refresh interval (s)',
mfaIntervalHelper: 'Please rescan or manually add key information after modifying the refresh time.', mfaIntervalHelper: 'Please rescan or manually add key information after modifying the refresh time.',
mfaAlert: mfaAlert:
@ -1093,7 +1058,6 @@ const message = {
selfSigned: 'Self signed', selfSigned: 'Self signed',
selfSignedHelper: selfSignedHelper:
'It is normal for self-signed certificates to be not trusted by browsers and display a security warning as the certificate is not issued by a trusted third party.', 'It is normal for self-signed certificates to be not trusted by browsers and display a security warning as the certificate is not issued by a trusted third party.',
import: 'Import',
select: 'Select', select: 'Select',
domainOrIP: 'Domain or IP', domainOrIP: 'Domain or IP',
timeOut: 'Timeout', timeOut: 'Timeout',
@ -1119,7 +1083,6 @@ const message = {
rollbackHelper: rollbackHelper:
'This recovery is about to be rolled back, which will replace all the files recovered this time. In the process, docker and 1panel services may need to be restarted. Do you want to continue?', 'This recovery is about to be rolled back, which will replace all the files recovered this time. In the process, docker and 1panel services may need to be restarted. Do you want to continue?',
upgrade: 'Upgrade',
upgrading: 'Please wait while the upgrade is underway...', upgrading: 'Please wait while the upgrade is underway...',
upgradeHelper: 'The upgrade requires a service restart. Do you want to continue?', upgradeHelper: 'The upgrade requires a service restart. Do you want to continue?',
noUpgrade: 'It is currently the latest version', noUpgrade: 'It is currently the latest version',
@ -1135,17 +1098,6 @@ const message = {
source: 'Download source', source: 'Download source',
hasNewVersion: 'New version Available', hasNewVersion: 'New version Available',
message: 'Message',
messageType: 'Message type',
email: 'Email',
wechat: 'WeChat',
dingding: 'DingDing',
closeMessage: 'Turning off Message Notification',
emailServer: 'Service name',
emailAddr: 'Service address',
emailSMTP: 'SMTP code',
secret: 'Secret',
about: 'About', about: 'About',
project: 'Project Address', project: 'Project Address',
issue: 'Feedback', issue: 'Feedback',
@ -1175,22 +1127,15 @@ const message = {
start: 'Start', start: 'Start',
stop: 'Stop', stop: 'Stop',
rebuild: 'Rebuild', rebuild: 'Rebuild',
name: 'Name',
description: 'Description', description: 'Description',
delete: 'Delete',
deleteWarn: deleteWarn:
'The delete operation will delete all data and backups together. This operation cannot be rolled back. Do you want to continue? ', 'The delete operation will delete all data and backups together. This operation cannot be rolled back. Do you want to continue? ',
syncSuccess: 'Sync successfully', syncSuccess: 'Sync successfully',
canUpgrade: 'Upgrade', canUpgrade: 'Upgrade',
backup: 'Backup',
backupName: 'File Name', backupName: 'File Name',
backupPath: 'File Path', backupPath: 'File Path',
backupdate: 'Backup time', backupdate: 'Backup time',
restore: 'Restore',
restoreWarn:
'The recovery operation will delete the current data of this application and perform a restart. This action is irreversible. Do you wish to continue?',
update: 'update', update: 'update',
upgrade: 'upgrade',
versionSelect: 'Please select a version', versionSelect: 'Please select a version',
operatorHelper: 'Operation {0} will be performed on the selected application, Do you want to continue? ', operatorHelper: 'Operation {0} will be performed on the selected application, Do you want to continue? ',
checkInstalledWarn: '{0} is not detected, please enter the app store and click to install!', checkInstalledWarn: '{0} is not detected, please enter the app store and click to install!',
@ -1213,11 +1158,12 @@ const message = {
noService: 'No {0}', noService: 'No {0}',
toInstall: 'to install', toInstall: 'to install',
param: 'parameter configuration', param: 'parameter configuration',
port: ' Port',
alreadyRun: 'Age', alreadyRun: 'Age',
day: ' Day ',
hour: ' Hour',
syncAppList: 'Sync', syncAppList: 'Sync',
less1Minute: 'Less than 1 minute',
appOfficeWebsite: 'Office website',
github: 'Github',
document: 'Cocument',
updatePrompt: 'The current application is the latest version', updatePrompt: 'The current application is the latest version',
installPrompt: 'No apps installed yet', installPrompt: 'No apps installed yet',
updateHelper: 'Updating parameters may cause the application to fail to start, please operate with caution', updateHelper: 'Updating parameters may cause the application to fail to start, please operate with caution',
@ -1249,7 +1195,6 @@ const message = {
website: 'Website', website: 'Website',
primaryDomain: 'Primary Domain', primaryDomain: 'Primary Domain',
otherDomains: 'Other Domains', otherDomains: 'Other Domains',
type: 'Type',
static: 'Static', static: 'Static',
deployment: 'Deployment', deployment: 'Deployment',
supportUpType: 'Only .tar.gz files are supported', supportUpType: 'Only .tar.gz files are supported',
@ -1269,7 +1214,6 @@ const message = {
deleteBackup: 'Delete Backup', deleteBackup: 'Delete Backup',
domain: 'Domain', domain: 'Domain',
domainHelper: 'One domain per line, support * and IP address, support domain name: port', domainHelper: 'One domain per line, support * and IP address, support domain name: port',
port: 'Port',
addDomain: 'Add Domain', addDomain: 'Add Domain',
domainConfig: 'Domain Settings', domainConfig: 'Domain Settings',
defaultDoc: 'Default Document', defaultDoc: 'Default Document',
@ -1315,11 +1259,9 @@ const message = {
basic: 'Basic', basic: 'Basic',
source: 'Configuration', source: 'Configuration',
security: 'Security', security: 'Security',
backup: 'Backup',
log: 'Log', log: 'Log',
nginxPer: 'Performance Tuning', nginxPer: 'Performance Tuning',
neverExpire: 'Never Expire', neverExpire: 'Never Expire',
protocol: 'Protocol',
setDefault: 'Set as default', setDefault: 'Set as default',
default: 'Default', default: 'Default',
deleteHelper: 'Related application status is abnormal, please check', deleteHelper: 'Related application status is abnormal, please check',
@ -1328,8 +1270,6 @@ const message = {
frequency: 'Frequency', frequency: 'Frequency',
ccHelper: ccHelper:
'Accumulatively request the same URL more than {1} times within {0} seconds, trigger CC defense, block this IP', 'Accumulatively request the same URL more than {1} times within {0} seconds, trigger CC defense, block this IP',
seconds: 'seconds',
count: 'times',
mustSave: 'The modification needs to be saved to take effect', mustSave: 'The modification needs to be saved to take effect',
fileExt: 'file extension', fileExt: 'file extension',
fileExtBlock: 'file extension blacklist', fileExtBlock: 'file extension blacklist',
@ -1430,12 +1370,10 @@ const message = {
runUserHelper: runUserHelper:
'For websites deployed through the PHP runtime environment, all files, folder owners, and user groups under the index and subdirectories need to be set to 1000, command: chown -R 1000:1000 index', 'For websites deployed through the PHP runtime environment, all files, folder owners, and user groups under the index and subdirectories need to be set to 1000, command: chown -R 1000:1000 index',
userGroup: 'User/Group', userGroup: 'User/Group',
user: 'User',
uGroup: 'Group', uGroup: 'Group',
proxyPath: 'Proxy Path', proxyPath: 'Proxy Path',
proxyPass: 'Target URL', proxyPass: 'Target URL',
cache: 'Cache', cache: 'Cache',
status: 'Status',
createProxy: 'Create reverse proxy', createProxy: 'Create reverse proxy',
editProxy: 'Edit reverse proxy', editProxy: 'Edit reverse proxy',
cacheTime: 'Cache time', cacheTime: 'Cache time',
@ -1488,7 +1426,6 @@ const message = {
display_errors: 'Whether to output detailed error information', display_errors: 'Whether to output detailed error information',
cgi_fix_pathinfo: 'Whether to open pathinfo', cgi_fix_pathinfo: 'Whether to open pathinfo',
date_timezone: 'Time zone', date_timezone: 'Time zone',
second: 'Second',
disableFunction: 'Disable function', disableFunction: 'Disable function',
disableFunctionHelper: 'Enter the function to be disabled, such as exec, please use multiple, split', disableFunctionHelper: 'Enter the function to be disabled, such as exec, please use multiple, split',
uploadMaxSize: 'Upload limit', uploadMaxSize: 'Upload limit',
@ -1521,7 +1458,6 @@ const message = {
resolveDomain: 'Resolve domain name', resolveDomain: 'Resolve domain name',
err: 'Error', err: 'Error',
value: 'record value', value: 'record value',
type: 'Type',
dnsResolveHelper: 'Please go to the DNS resolution service provider to add the following resolution records:', dnsResolveHelper: 'Please go to the DNS resolution service provider to add the following resolution records:',
detail: 'Details', detail: 'Details',
msg: 'Information', msg: 'Information',
@ -1567,8 +1503,6 @@ const message = {
noPingTitle: 'Disable ping', noPingTitle: 'Disable ping',
noPingHelper: 'If the ping function is disabled, the server cannot be pinged. Do you want to continue?', noPingHelper: 'If the ping function is disabled, the server cannot be pinged. Do you want to continue?',
onPingHelper: 'If you disable ping, hackers may discover your server. Do you want to continue?', onPingHelper: 'If you disable ping, hackers may discover your server. Do you want to continue?',
protocol: 'Protocol',
port: 'Port',
changeStrategy: 'Change the {0} strategy', changeStrategy: 'Change the {0} strategy',
changeStrategyIPHelper1: changeStrategyIPHelper1:
'Change the IP address strategy to [deny]. After the IP address is set, access to the server is prohibited. Do you want to continue?', 'Change the IP address strategy to [deny]. After the IP address is set, access to the server is prohibited. Do you want to continue?',
@ -1606,14 +1540,12 @@ const message = {
image: 'Image', image: 'Image',
workDir: 'Working directory', workDir: 'Working directory',
create: 'Create runtime', create: 'Create runtime',
name: 'Name',
resource: 'Source', resource: 'Source',
appstore: 'App Store', appstore: 'App Store',
local: 'Local', local: 'Local',
app: 'Application', app: 'Application',
localHelper: 'The local operating environment needs to be installed by itself', localHelper: 'The local operating environment needs to be installed by itself',
version: 'Version', version: 'Version',
status: 'Status',
versionHelper: 'PHP version, e.g. v8.0', versionHelper: 'PHP version, e.g. v8.0',
buildHelper: buildHelper:
'The more extensions you select, the more CPU will be occupied during the image making process, so avoid selecting all extensions,If there is no extension you want, you can manually enter it and select it', 'The more extensions you select, the more CPU will be occupied during the image making process, so avoid selecting all extensions,If there is no extension you want, you can manually enter it and select it',
@ -1629,7 +1561,6 @@ const message = {
pid: 'Process ID', pid: 'Process ID',
ppid: 'Parent process ID', ppid: 'Parent process ID',
numThreads: 'Threads', numThreads: 'Threads',
username: 'User',
memory: 'Memory', memory: 'Memory',
diskRead: 'Disk read', diskRead: 'Disk read',
diskWrite: 'Disk write', diskWrite: 'Disk write',

View File

@ -31,6 +31,7 @@ const message = {
expand: '展开', expand: '展开',
log: '日志', log: '日志',
back: '返回', back: '返回',
backup: '备份',
recover: '恢复', recover: '恢复',
retry: '重试', retry: '重试',
upload: '上传', upload: '上传',
@ -42,6 +43,7 @@ const message = {
search: '搜索', search: '搜索',
refresh: '刷新', refresh: '刷新',
get: '获取', get: '获取',
upgrade: '升级',
}, },
search: { search: {
timeStart: '开始时间', timeStart: '开始时间',
@ -69,7 +71,10 @@ const message = {
message: '信息', message: '信息',
description: '描述信息', description: '描述信息',
interval: '耗时', interval: '耗时',
user: '用户',
title: '标题', title: '标题',
port: '端口',
protocol: '协议',
tableSetting: '列表设置', tableSetting: '列表设置',
autoRefresh: '定时刷新', autoRefresh: '定时刷新',
refreshRate: '刷新频率', refreshRate: '刷新频率',
@ -166,7 +171,7 @@ const message = {
appName: '支持英文数字-和_,长度2-30,并且不能以-_开头和结尾', appName: '支持英文数字-和_,长度2-30,并且不能以-_开头和结尾',
containerName: '支持字母数字下划线连字符和点,不能以连字符-或点.结尾,长度1-127', containerName: '支持字母数字下划线连字符和点,不能以连字符-或点.结尾,长度1-127',
disableFunction: '仅支持字母和,', disableFunction: '仅支持字母和,',
leechExts: '支持字母数字和,', leechExts: '支持字母数字和,',
paramSimple: '支持小写字母和数字,长度1-64', paramSimple: '支持小写字母和数字,长度1-64',
}, },
res: { res: {
@ -222,6 +227,8 @@ const message = {
week: '周', week: '周',
month: '月', month: '月',
year: '年', year: '年',
time: '次',
core: '核',
}, },
}, },
menu: { menu: {
@ -263,13 +270,8 @@ const message = {
totalRecv: '总接收', totalRecv: '总接收',
rwPerSecond: '读写次数', rwPerSecond: '读写次数',
ioDelay: '读写延迟', ioDelay: '读写延迟',
time: '次',
uptime: '启动时间', uptime: '启动时间',
runningTime: '运行时间', runningTime: '运行时间',
Day: '天',
Hour: '时',
Minute: '分',
Second: '秒',
runSmoothly: '运行流畅', runSmoothly: '运行流畅',
runNormal: '运行正常', runNormal: '运行正常',
@ -277,7 +279,6 @@ const message = {
runJam: '运行堵塞', runJam: '运行堵塞',
core: '物理核心', core: '物理核心',
coreUnit: '核',
logicCore: '逻辑核心', logicCore: '逻辑核心',
loadAverage: '最近 {0} 分钟平均负载', loadAverage: '最近 {0} 分钟平均负载',
load: '负载', load: '负载',
@ -313,7 +314,6 @@ const message = {
adjust: '中查看原因或修改配置', adjust: '中查看原因或修改配置',
goInstall: '去应用商店安装', goInstall: '去应用商店安装',
source: '来源', source: '来源',
backup: '备份',
permission: '权限', permission: '权限',
permissionForIP: '指定 IP', permissionForIP: '指定 IP',
permissionAll: '所有人(%)', permissionAll: '所有人(%)',
@ -322,16 +322,13 @@ const message = {
serviceName: '服务名称', serviceName: '服务名称',
serviceNameHelper: '用于同一 network 下的容器间访问', serviceNameHelper: '用于同一 network 下的容器间访问',
backupList: '备份列表', backupList: '备份列表',
backList: '返回列表',
loadBackup: '导入备份', loadBackup: '导入备份',
setting: '设置',
remoteAccess: '远程访问', remoteAccess: '远程访问',
remoteHelper: '多个 ip 以逗号分隔172.16.10.111,172.16.10.112', remoteHelper: '多个 ip 以逗号分隔172.16.10.111,172.16.10.112',
remoteConnHelper: 'root 帐号远程连接 mysql 有安全风险开启需谨慎', remoteConnHelper: 'root 帐号远程连接 mysql 有安全风险开启需谨慎',
changePassword: '改密', changePassword: '改密',
changePasswordHelper: '当前数据库已经关联应用修改密码将同步修改应用中数据库密码修改后重启生效', changePasswordHelper: '当前数据库已经关联应用修改密码将同步修改应用中数据库密码修改后重启生效',
portSetting: '端口',
portHelper: '该端口为容器对外暴露端口修改需要单独保存并且重启容器', portHelper: '该端口为容器对外暴露端口修改需要单独保存并且重启容器',
confChange: '配置修改', confChange: '配置修改',
@ -400,21 +397,9 @@ const message = {
longQueryTime: '阈值()', longQueryTime: '阈值()',
thresholdRangeHelper: '请输入正确的阈值(1 - 600)', thresholdRangeHelper: '请输入正确的阈值(1 - 600)',
status: '当前状态',
terminal: '终端模式',
key: '键',
value: '值',
type: '数据类型',
length: '数据长度',
expiration: '有效期',
cleanAll: '清除所有',
expirationHelper: '有效期为 0 表示永久',
forever: '永久',
second: '秒',
timeout: '超时时间', timeout: '超时时间',
timeoutHelper: '空闲连接超时时间0表示不断开', timeoutHelper: '空闲连接超时时间0表示不断开',
maxclients: '最大连接数', maxclients: '最大连接数',
requirepass: '密码',
requirepassHelper: '留空代表没有设置密码修改需要单独保存并且重启容器', requirepassHelper: '留空代表没有设置密码修改需要单独保存并且重启容器',
databases: '数据库数量', databases: '数据库数量',
maxmemory: '最大内存使用', maxmemory: '最大内存使用',
@ -497,13 +482,11 @@ const message = {
cpuShare: 'CPU 权重', cpuShare: 'CPU 权重',
cpuShareHelper: '容器默认份额为 1024 CPU增大可使当前容器获得更多的 CPU 时间', cpuShareHelper: '容器默认份额为 1024 CPU增大可使当前容器获得更多的 CPU 时间',
user: '用户',
command: '命令', command: '命令',
custom: '自定义', custom: '自定义',
containerTerminal: '终端', containerTerminal: '终端',
emptyUser: '为空时将使用容器默认的用户登录', emptyUser: '为空时将使用容器默认的用户登录',
upgrade: '升级',
upgradeHelper: '该操作仅支持容器版本升级', upgradeHelper: '该操作仅支持容器版本升级',
upgradeWarning: '当前目标版本低于原镜像版本请重新输入', upgradeWarning: '当前目标版本低于原镜像版本请重新输入',
upgradeWarning2: '升级操作需要重建容器任何未持久化的数据将会丢失是否继续', upgradeWarning2: '升级操作需要重建容器任何未持久化的数据将会丢失是否继续',
@ -511,7 +494,6 @@ const message = {
targetImage: '目标镜像', targetImage: '目标镜像',
appHelper: '该容器来源于应用商店升级可能导致该服务不可用是否继续', appHelper: '该容器来源于应用商店升级可能导致该服务不可用是否继续',
port: '端口',
server: '服务器', server: '服务器',
serverExample: ' 80, 80-88, ip:80 或者 ip:80-88', serverExample: ' 80, 80-88, ip:80 或者 ip:80-88',
containerExample: ' 80 或者 80-88', containerExample: ' 80 或者 80-88',
@ -554,7 +536,6 @@ const message = {
pull: '拉取', pull: '拉取',
path: '路径', path: '路径',
importImage: '导入镜像', importImage: '导入镜像',
import: '导入',
imageBuild: '构建镜像', imageBuild: '构建镜像',
build: '构建镜像', build: '构建镜像',
pathSelect: '路径选择', pathSelect: '路径选择',
@ -586,7 +567,6 @@ const message = {
nfsEnable: '启用 NFS 存储', nfsEnable: '启用 NFS 存储',
nfsAddress: '地址', nfsAddress: '地址',
nfsAddressHelper: '支持输入 ip 或者域名', nfsAddressHelper: '支持输入 ip 或者域名',
volumeName: '名称',
mountpoint: '挂载点', mountpoint: '挂载点',
mountpointNFSHelper: '/nfs, /nfs-share', mountpointNFSHelper: '/nfs, /nfs-share',
options: '可选参数', options: '可选参数',
@ -594,8 +574,6 @@ const message = {
repo: '仓库', repo: '仓库',
createRepo: '添加仓库', createRepo: '添加仓库',
name: '名称',
protocol: '协议',
downloadUrl: '下载地址', downloadUrl: '下载地址',
imageRepo: '镜像仓库', imageRepo: '镜像仓库',
repoHelper: '是否包含镜像仓库/组织/项目?', repoHelper: '是否包含镜像仓库/组织/项目?',
@ -694,10 +672,6 @@ const message = {
per: '每隔', per: '每隔',
handle: '执行', handle: '执行',
day: '日', day: '日',
day1: '天',
hour: '小时',
minute: '分钟',
second: '秒',
monday: '周一', monday: '周一',
tuesday: '周二', tuesday: '周二',
wednesday: '周三', wednesday: '周三',
@ -722,15 +696,13 @@ const message = {
enableMonitor: '监控状态', enableMonitor: '监控状态',
storeDays: '保存天数', storeDays: '保存天数',
cleanMonitor: '清空监控记录', cleanMonitor: '清空监控记录',
setting: '设置',
avgLoad: '平均负载', avgLoad: '平均负载',
loadDetail: '负载详情', loadDetail: '负载详情',
resourceUsage: '资源使用率', resourceUsage: '资源使用率',
networkCard: '网卡', networkCard: '网卡',
min: '分钟',
read: '读取', read: '读取',
write: '写入', write: '写入',
count: '次',
readWriteCount: '读写次数', readWriteCount: '读写次数',
readWriteTime: '读写延迟', readWriteTime: '读写延迟',
today: '今天', today: '今天',
@ -765,14 +737,10 @@ const message = {
addHost: '添加主机', addHost: '添加主机',
localhost: '本地服务器', localhost: '本地服务器',
ip: '主机地址', ip: '主机地址',
name: '名称',
port: '端口',
user: '用户名',
authMode: '认证方式', authMode: '认证方式',
passwordMode: '密码认证', passwordMode: '密码认证',
rememberPassword: '记住密码', rememberPassword: '记住密码',
keyMode: '私钥认证', keyMode: '私钥认证',
password: '密码',
key: '私钥', key: '私钥',
keyPassword: '私钥密码', keyPassword: '私钥密码',
emptyTerminal: '暂无终端连接', emptyTerminal: '暂无终端连接',
@ -790,25 +758,16 @@ const message = {
resource: '资源', resource: '资源',
operate: '操作', operate: '操作',
detail: { detail: {
users: '用户',
hosts: '主机', hosts: '主机',
apps: '应用', apps: '应用',
websites: '网站', websites: '网站',
containers: '容器', containers: '容器',
runtimes: '运行环境',
groups: '系统组',
commands: '快捷命令',
files: '文件管理', files: '文件管理',
backups: '备份账号',
logs: '日志审计', logs: '日志审计',
settings: '面板设置', settings: '面板设置',
cronjobs: '计划任务', cronjobs: '计划任务',
databases: '数据库', databases: '数据库',
auth: '用户',
login: '登录',
logout: '退出',
}, },
status: '状态',
websiteLog: '网站日志', websiteLog: '网站日志',
runLog: '运行日志', runLog: '运行日志',
errLog: '错误日志', errLog: '错误日志',
@ -835,7 +794,6 @@ const message = {
terminal: '终端', terminal: '终端',
shareList: '分享列表', shareList: '分享列表',
zip: '压缩', zip: '压缩',
user: '用户',
group: '用户组', group: '用户组',
path: '路径', path: '路径',
public: '公共', public: '公共',
@ -844,7 +802,6 @@ const message = {
rRole: '读取', rRole: '读取',
wRole: '写入', wRole: '写入',
xRole: '可执行', xRole: '可执行',
name: '名称',
compress: '压缩', compress: '压缩',
deCompress: '解压', deCompress: '解压',
compressType: '压缩格式', compressType: '压缩格式',
@ -871,7 +828,6 @@ const message = {
downloadProcess: '下载进度', downloadProcess: '下载进度',
downloading: '正在下载...', downloading: '正在下载...',
infoDetail: '文件属性', infoDetail: '文件属性',
type: '类型',
root: '根目录', root: '根目录',
list: '文件列表', list: '文件列表',
sub: '包含子目录', sub: '包含子目录',
@ -918,11 +874,9 @@ const message = {
useDNS: '反向解析', useDNS: '反向解析',
dnsHelper: '控制 SSH 服务器是否启用 DNS 解析功能从而验证连接方的身份', dnsHelper: '控制 SSH 服务器是否启用 DNS 解析功能从而验证连接方的身份',
loginLogs: 'SSH 登录日志', loginLogs: 'SSH 登录日志',
loginUser: '用户',
loginMode: '登录方式', loginMode: '登录方式',
authenticating: '密钥', authenticating: '密钥',
publickey: '密钥', publickey: '密钥',
password: '密码',
belong: '归属地', belong: '归属地',
local: '内网', local: '内网',
remote: '外网', remote: '外网',
@ -968,7 +922,6 @@ const message = {
retryPassword: '确认密码', retryPassword: '确认密码',
duplicatePassword: '新密码不能与原始密码一致请重新输入', duplicatePassword: '新密码不能与原始密码一致请重新输入',
backup: '备份',
thirdParty: '第三方账号', thirdParty: '第三方账号',
createBackupAccount: '添加 {0}', createBackupAccount: '添加 {0}',
noTypeForCreate: '当前无可创建备份类型', noTypeForCreate: '当前无可创建备份类型',
@ -1004,9 +957,6 @@ const message = {
accountName: '账户名称', accountName: '账户名称',
accountKey: '账户密钥', accountKey: '账户密钥',
address: '地址', address: '地址',
port: '端口',
username: '用户名',
password: '密码',
path: '路径', path: '路径',
snapshot: '快照', snapshot: '快照',
@ -1030,7 +980,6 @@ const message = {
rollbackHelper: rollbackHelper:
'即将回滚本次恢复回滚将替换所有本次恢复的文件过程中可能需要重启 docker 以及 1panel 服务是否继续', '即将回滚本次恢复回滚将替换所有本次恢复的文件过程中可能需要重启 docker 以及 1panel 服务是否继续',
upgrade: '升级',
upgrading: '正在升级中请稍候...', upgrading: '正在升级中请稍候...',
upgradeHelper: '升级操作需要重启服务是否继续', upgradeHelper: '升级操作需要重启服务是否继续',
noUpgrade: '当前已经是最新版本', noUpgrade: '当前已经是最新版本',
@ -1073,6 +1022,7 @@ const message = {
allowIPsHelper1: '授权 IP 为空时则取消授权 IP', allowIPsHelper1: '授权 IP 为空时则取消授权 IP',
allowIPEgs: '当存在多个授权 IP 需要换行显示 \n172.16.10.111 \n172.16.10.112', allowIPEgs: '当存在多个授权 IP 需要换行显示 \n172.16.10.111 \n172.16.10.112',
mfa: '两步验证', mfa: '两步验证',
secret: '密钥',
mfaAlert: '两步验证密码是基于当前时间生成请确保服务器时间已同步', mfaAlert: '两步验证密码是基于当前时间生成请确保服务器时间已同步',
mfaHelper: '开启后会验证手机应用验证码', mfaHelper: '开启后会验证手机应用验证码',
mfaHelper1: '下载两步验证手机应用 :', mfaHelper1: '下载两步验证手机应用 :',
@ -1089,7 +1039,6 @@ const message = {
certType: '证书类型', certType: '证书类型',
selfSigned: '自签名', selfSigned: '自签名',
selfSignedHelper: '自签证书不被浏览器信任显示不安全是正常现象', selfSignedHelper: '自签证书不被浏览器信任显示不安全是正常现象',
import: '导入',
select: '选择已有', select: '选择已有',
domainOrIP: '域名或 IP', domainOrIP: '域名或 IP',
timeOut: '过期时间', timeOut: '过期时间',
@ -1097,17 +1046,6 @@ const message = {
primaryKey: '密钥', primaryKey: '密钥',
certificate: '证书', certificate: '证书',
message: '通知',
messageType: '通知方式',
email: '邮箱',
wechat: '企业微信',
dingding: '钉钉',
closeMessage: '关闭消息通知',
emailServer: '邮箱服务名称',
emailAddr: '邮箱地址',
emailSMTP: '邮箱 SMTP 授权码',
secret: '密钥',
about: '关于', about: '关于',
project: '项目地址', project: '项目地址',
issue: '问题反馈', issue: '问题反馈',
@ -1137,20 +1075,14 @@ const message = {
start: '启动', start: '启动',
stop: '停止', stop: '停止',
rebuild: '重建', rebuild: '重建',
name: '名称',
description: '描述', description: '描述',
delete: '删除',
deleteWarn: '删除操作会把所有数据和备份一并删除此操作不可回滚是否继续', deleteWarn: '删除操作会把所有数据和备份一并删除此操作不可回滚是否继续',
syncSuccess: '同步成功', syncSuccess: '同步成功',
canUpgrade: '可升级', canUpgrade: '可升级',
backup: '备份',
backupName: '文件名称', backupName: '文件名称',
backupPath: '文件路径', backupPath: '文件路径',
backupdate: '备份时间', backupdate: '备份时间',
restore: '恢复',
restoreWarn: '恢复操作将删除该应用当前数据并重启此操作不可回滚是否继续?',
update: '更新', update: '更新',
upgrade: '升级',
versionSelect: '请选择版本', versionSelect: '请选择版本',
operatorHelper: '将对选中应用进行 {0} 操作是否继续', operatorHelper: '将对选中应用进行 {0} 操作是否继续',
checkInstalledWarn: '未检测到 {0} ,请进入应用商店点击安装!', checkInstalledWarn: '未检测到 {0} ,请进入应用商店点击安装!',
@ -1173,17 +1105,10 @@ const message = {
toInstall: '去安装', toInstall: '去安装',
param: '参数配置', param: '参数配置',
syncAppList: '更新应用列表', syncAppList: '更新应用列表',
syncAppListSuccess: '更新成功',
port: '端口',
alreadyRun: '已安装', alreadyRun: '已安装',
day: '天',
hour: '小时',
minute: '分钟',
less1Minute: '小于1分钟', less1Minute: '小于1分钟',
appWebsite: '官网',
appOfficeWebsite: '官方网站', appOfficeWebsite: '官方网站',
github: '开源社区', github: '开源社区',
doc: '文档',
document: '文档说明', document: '文档说明',
updatePrompt: '当前应用均为最新版本', updatePrompt: '当前应用均为最新版本',
installPrompt: '尚未安装任何应用', installPrompt: '尚未安装任何应用',
@ -1213,7 +1138,6 @@ const message = {
website: '网站', website: '网站',
primaryDomain: '主域名', primaryDomain: '主域名',
otherDomains: '其他域名', otherDomains: '其他域名',
type: '类型',
static: '静态网站', static: '静态网站',
deployment: '一键部署', deployment: '一键部署',
supportUpType: '仅支持 .tar.gz 文件', supportUpType: '仅支持 .tar.gz 文件',
@ -1233,7 +1157,6 @@ const message = {
deleteBackup: '删除备份', deleteBackup: '删除备份',
domain: '域名', domain: '域名',
domainHelper: '一行一个域名,支持*和IP地址,支持域名:端口', domainHelper: '一行一个域名,支持*和IP地址,支持域名:端口',
port: '端口',
addDomain: '新增域名', addDomain: '新增域名',
domainConfig: '域名设置', domainConfig: '域名设置',
defaultDoc: '默认文档', defaultDoc: '默认文档',
@ -1279,11 +1202,9 @@ const message = {
basic: '基本', basic: '基本',
source: '配置文件', source: '配置文件',
security: '安全', security: '安全',
backup: '备份',
log: '日志', log: '日志',
nginxPer: '性能调整', nginxPer: '性能调整',
neverExpire: '永不过期', neverExpire: '永不过期',
protocol: '协议',
setDefault: '设为默认', setDefault: '设为默认',
default: '默认', default: '默认',
deleteHelper: '相关应用状态不正常请检查', deleteHelper: '相关应用状态不正常请检查',
@ -1291,8 +1212,6 @@ const message = {
cycle: '周期', cycle: '周期',
frequency: '频率', frequency: '频率',
ccHelper: '{0} 秒内累计请求同一URL超过 {1} ,触发CC防御,封锁此IP', ccHelper: '{0} 秒内累计请求同一URL超过 {1} ,触发CC防御,封锁此IP',
seconds: '秒',
count: '次',
mustSave: '修改之后需要保存才能生效', mustSave: '修改之后需要保存才能生效',
fileExt: '文件扩展名', fileExt: '文件扩展名',
fileExtBlock: '文件扩展名黑名单', fileExtBlock: '文件扩展名黑名单',
@ -1385,12 +1304,10 @@ const message = {
runUserHelper: runUserHelper:
'通过 PHP 运行环境部署的网站需要将 index 和子目录下的所有文件文件夹所有者和用户组设置为 1000', '通过 PHP 运行环境部署的网站需要将 index 和子目录下的所有文件文件夹所有者和用户组设置为 1000',
userGroup: '运行用户/', userGroup: '运行用户/',
user: '用户',
uGroup: '用户组', uGroup: '用户组',
proxyPath: '前端请求路径', proxyPath: '前端请求路径',
proxyPass: '后端代理地址', proxyPass: '后端代理地址',
cache: '缓存', cache: '缓存',
status: '状态',
createProxy: '创建反向代理', createProxy: '创建反向代理',
editProxy: '编辑反向代理', editProxy: '编辑反向代理',
cacheTime: '缓存时间', cacheTime: '缓存时间',
@ -1442,7 +1359,6 @@ const message = {
display_errors: '是否输出详细错误信息', display_errors: '是否输出详细错误信息',
cgi_fix_pathinfo: '是否开启pathinfo', cgi_fix_pathinfo: '是否开启pathinfo',
date_timezone: '时区', date_timezone: '时区',
second: '秒',
disableFunction: '禁用函数', disableFunction: '禁用函数',
disableFunctionHelper: '输入要禁用的函数例如exec多个请用,分割', disableFunctionHelper: '输入要禁用的函数例如exec多个请用,分割',
uploadMaxSize: '上传限制', uploadMaxSize: '上传限制',
@ -1475,7 +1391,6 @@ const message = {
resolveDomain: '解析域名', resolveDomain: '解析域名',
err: '错误', err: '错误',
value: '记录值', value: '记录值',
type: '类型',
dnsResolveHelper: '请到DNS解析服务商处添加以下解析记录', dnsResolveHelper: '请到DNS解析服务商处添加以下解析记录',
detail: '详情', detail: '详情',
msg: '证书信息', msg: '证书信息',
@ -1516,8 +1431,6 @@ const message = {
noPingTitle: '是否禁 ping', noPingTitle: '是否禁 ping',
noPingHelper: ' ping 后将无法 ping 通服务器是否继续', noPingHelper: ' ping 后将无法 ping 通服务器是否继续',
onPingHelper: '解除禁 ping 后您的服务器可能会被黑客发现是否继续', onPingHelper: '解除禁 ping 后您的服务器可能会被黑客发现是否继续',
protocol: '协议',
port: '端口',
changeStrategy: '修改{0}策略', changeStrategy: '修改{0}策略',
changeStrategyIPHelper1: 'IP 策略修改为屏蔽设置后该 IP 将禁止访问服务器是否继续', changeStrategyIPHelper1: 'IP 策略修改为屏蔽设置后该 IP 将禁止访问服务器是否继续',
changeStrategyIPHelper2: 'IP 策略修改为放行设置后该 IP 将恢复正常访问是否继续', changeStrategyIPHelper2: 'IP 策略修改为放行设置后该 IP 将恢复正常访问是否继续',
@ -1548,14 +1461,12 @@ const message = {
image: '镜像', image: '镜像',
workDir: '工作目录', workDir: '工作目录',
create: '创建运行环境', create: '创建运行环境',
name: '名称',
resource: '来源', resource: '来源',
appstore: '应用商店', appstore: '应用商店',
local: '本地', local: '本地',
app: '应用', app: '应用',
localHelper: '本地运行环境需要自行安装', localHelper: '本地运行环境需要自行安装',
version: '版本', version: '版本',
status: '状态',
versionHelper: 'PHP的版本, v8.0', versionHelper: 'PHP的版本, v8.0',
buildHelper: '选择的扩展越多制作镜像过程中占用 CPU 越多请尽量避免选择全部扩展', buildHelper: '选择的扩展越多制作镜像过程中占用 CPU 越多请尽量避免选择全部扩展',
openrestryWarn: 'PHP 需要升级 OpenResty 1.21.4.1 版本以上才能使用', openrestryWarn: 'PHP 需要升级 OpenResty 1.21.4.1 版本以上才能使用',
@ -1568,7 +1479,6 @@ const message = {
pid: '进程ID', pid: '进程ID',
ppid: '父进程ID', ppid: '父进程ID',
numThreads: '线程', numThreads: '线程',
username: '用户',
memory: '内存', memory: '内存',
diskRead: '磁盘读', diskRead: '磁盘读',
diskWrite: '磁盘写', diskWrite: '磁盘写',

View File

@ -222,17 +222,17 @@ export function getAge(d1: string): string {
let res = ''; let res = '';
if (dayDiff > 0) { if (dayDiff > 0) {
res += String(dayDiff) + i18n.global.t('app.day'); res += String(dayDiff) + i18n.global.t('commons.units.day');
if (hours <= 0) { if (hours <= 0) {
return res; return res;
} }
} }
if (hours > 0) { if (hours > 0) {
res += String(hours) + i18n.global.t('app.hour'); res += String(hours) + i18n.global.t('commons.units.hour');
return res; return res;
} }
if (minutes > 0) { if (minutes > 0) {
res += String(minutes) + i18n.global.t('app.minute'); res += String(minutes) + i18n.global.t('commons.units.minute');
return res; return res;
} }
return i18n.global.t('app.less1Minute'); return i18n.global.t('app.less1Minute');

View File

@ -26,7 +26,7 @@
:rules="rules" :rules="rules"
:validate-on-rule-change="false" :validate-on-rule-change="false"
> >
<el-form-item :label="$t('app.name')" prop="name"> <el-form-item :label="$t('commons.table.name')" prop="name">
<el-input v-model.trim="req.name"></el-input> <el-input v-model.trim="req.name"></el-input>
</el-form-item> </el-form-item>
<Params <Params

View File

@ -156,7 +156,7 @@
@click="openBackups(installed.app.key, installed.name)" @click="openBackups(installed.app.key, installed.name)"
v-if="mode === 'installed'" v-if="mode === 'installed'"
> >
{{ $t('app.backup') }} {{ $t('commons.button.backup') }}
</el-button> </el-button>
<el-button <el-button
class="h-button" class="h-button"
@ -172,7 +172,7 @@
@click="openOperate(installed, 'upgrade')" @click="openOperate(installed, 'upgrade')"
v-if="mode === 'upgrade'" v-if="mode === 'upgrade'"
> >
{{ $t('app.upgrade') }} {{ $t('commons.button.upgrade') }}
</el-button> </el-button>
</div> </div>
<div class="d-description"> <div class="d-description">
@ -420,7 +420,7 @@ const buttons = [
}, },
}, },
{ {
label: i18n.global.t('app.delete'), label: i18n.global.t('commons.button.delete'),
click: (row: any) => { click: (row: any) => {
openOperate(row, 'delete'); openOperate(row, 'delete');
}, },

View File

@ -1,7 +1,7 @@
<template> <template>
<el-drawer :close-on-click-modal="false" v-model="open" size="30%"> <el-drawer :close-on-click-modal="false" v-model="open" size="30%">
<template #header> <template #header>
<Header :header="$t('app.upgrade')" :resource="resourceName" :back="handleClose"></Header> <Header :header="$t('commons.button.upgrade')" :resource="resourceName" :back="handleClose"></Header>
</template> </template>
<el-row> <el-row>
<el-col :span="22" :offset="1"> <el-col :span="22" :offset="1">
@ -94,8 +94,8 @@ const operate = async () => {
const onOperate = async () => { const onOperate = async () => {
ElMessageBox.confirm( ElMessageBox.confirm(
i18n.global.t('app.operatorHelper', [i18n.global.t('app.upgrade')]), i18n.global.t('app.operatorHelper', [i18n.global.t('commons.button.upgrade')]),
i18n.global.t('app.upgrade'), i18n.global.t('commons.button.upgrade'),
{ {
confirmButtonText: i18n.global.t('commons.button.confirm'), confirmButtonText: i18n.global.t('commons.button.confirm'),
cancelButtonText: i18n.global.t('commons.button.cancel'), cancelButtonText: i18n.global.t('commons.button.cancel'),

View File

@ -86,7 +86,7 @@
{{ row.memoryPercent.toFixed(2) }}% {{ row.memoryPercent.toFixed(2) }}%
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('container.port')" min-width="80" prop="ports" fix> <el-table-column :label="$t('commons.table.port')" min-width="80" prop="ports" fix>
<template #default="{ row }"> <template #default="{ row }">
<div v-if="row.ports"> <div v-if="row.ports">
<div v-for="(item, index) in row.ports" :key="index"> <div v-for="(item, index) in row.ports" :key="index">
@ -431,7 +431,7 @@ const buttons = [
}, },
}, },
{ {
label: i18n.global.t('container.upgrade'), label: i18n.global.t('commons.button.upgrade'),
click: (row: Container.ContainerInfo) => { click: (row: Container.ContainerInfo) => {
dialogUpgradeRef.value!.acceptParams({ container: row.name, image: row.imageName, fromApp: row.isFromApp }); dialogUpgradeRef.value!.acceptParams({ container: row.name, image: row.imageName, fromApp: row.isFromApp });
}, },

View File

@ -13,7 +13,7 @@
> >
<el-row type="flex" justify="center"> <el-row type="flex" justify="center">
<el-col :span="22"> <el-col :span="22">
<el-form-item :label="$t('container.name')" prop="name"> <el-form-item :label="$t('commons.table.name')" prop="name">
<el-input clearable v-model.trim="dialogData.rowData!.name" /> <el-input clearable v-model.trim="dialogData.rowData!.name" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('container.image')" prop="image"> <el-form-item :label="$t('container.image')" prop="image">
@ -26,7 +26,7 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('container.port')"> <el-form-item :label="$t('commons.table.port')">
<el-radio-group v-model="dialogData.rowData!.publishAllPorts" class="ml-4"> <el-radio-group v-model="dialogData.rowData!.publishAllPorts" class="ml-4">
<el-radio :label="false">{{ $t('container.exposePort') }}</el-radio> <el-radio :label="false">{{ $t('container.exposePort') }}</el-radio>
<el-radio :label="true">{{ $t('container.exposeAll') }}</el-radio> <el-radio :label="true">{{ $t('container.exposeAll') }}</el-radio>
@ -43,7 +43,7 @@
<label>{{ $t('container.container') }}</label> <label>{{ $t('container.container') }}</label>
</th> </th>
<th scope="col" width="20%" align="left"> <th scope="col" width="20%" align="left">
<label>{{ $t('container.protocol') }}</label> <label>{{ $t('commons.table.protocol') }}</label>
</th> </th>
<th align="left"></th> <th align="left"></th>
</tr> </tr>
@ -101,11 +101,11 @@
> >
<el-input style="width: 40%" v-model.number="dialogData.rowData!.nanoCPUs"> <el-input style="width: 40%" v-model.number="dialogData.rowData!.nanoCPUs">
<template #append> <template #append>
<div style="width: 35px">{{ $t('home.coreUnit') }}</div> <div style="width: 35px">{{ $t('commons.units.core') }}</div>
</template> </template>
</el-input> </el-input>
<span class="input-help"> <span class="input-help">
{{ $t('container.limitHelper', [limits.cpu]) }}{{ $t('home.coreUnit') }} {{ $t('container.limitHelper', [limits.cpu]) }}{{ $t('commons.units.core') }}
</span> </span>
</el-form-item> </el-form-item>
<el-form-item <el-form-item

View File

@ -10,7 +10,7 @@
<DrawerHeader :header="$t('container.containerTerminal')" :resource="title" :back="handleClose" /> <DrawerHeader :header="$t('container.containerTerminal')" :resource="title" :back="handleClose" />
</template> </template>
<el-form ref="formRef" :model="form" label-position="top"> <el-form ref="formRef" :model="form" label-position="top">
<el-form-item :label="$t('container.user')" prop="user"> <el-form-item :label="$t('commons.table.user')" prop="user">
<el-input placeholder="root" clearable v-model="form.user" /> <el-input placeholder="root" clearable v-model="form.user" />
</el-form-item> </el-form-item>
<el-form-item <el-form-item

View File

@ -1,7 +1,7 @@
<template> <template>
<el-drawer v-model="drawerVisiable" :destroy-on-close="true" :close-on-click-modal="false" size="30%"> <el-drawer v-model="drawerVisiable" :destroy-on-close="true" :close-on-click-modal="false" size="30%">
<template #header> <template #header>
<DrawerHeader :header="$t('container.upgrade')" :resource="form.name" :back="handleClose" /> <DrawerHeader :header="$t('commons.button.upgrade')" :resource="form.name" :back="handleClose" />
</template> </template>
<el-row v-loading="loading"> <el-row v-loading="loading">
@ -86,7 +86,7 @@ const onSubmit = async (formEl: FormInstance | undefined) => {
MsgWarning(i18n.global.t('container.upgradeWarning')); MsgWarning(i18n.global.t('container.upgradeWarning'));
return; return;
} }
ElMessageBox.confirm(i18n.global.t('container.upgradeWarning2'), i18n.global.t('container.upgrade'), { ElMessageBox.confirm(i18n.global.t('container.upgradeWarning2'), i18n.global.t('commons.button.upgrade'), {
confirmButtonText: i18n.global.t('commons.button.confirm'), confirmButtonText: i18n.global.t('commons.button.confirm'),
cancelButtonText: i18n.global.t('commons.button.cancel'), cancelButtonText: i18n.global.t('commons.button.cancel'),
}).then(async () => { }).then(async () => {

View File

@ -12,7 +12,7 @@
<el-row type="flex" justify="center"> <el-row type="flex" justify="center">
<el-col :span="22"> <el-col :span="22">
<el-form ref="formRef" label-position="top" :model="form" label-width="80px" :rules="rules"> <el-form ref="formRef" label-position="top" :model="form" label-width="80px" :rules="rules">
<el-form-item :label="$t('container.name')" prop="name"> <el-form-item :label="$t('commons.table.name')" prop="name">
<el-input :placeholder="$t('container.imageNameHelper')" v-model.trim="form.name" clearable /> <el-input :placeholder="$t('container.imageNameHelper')" v-model.trim="form.name" clearable />
</el-form-item> </el-form-item>
<el-form-item label="Dockerfile" prop="from"> <el-form-item label="Dockerfile" prop="from">

View File

@ -22,7 +22,7 @@
{{ $t('commons.button.cancel') }} {{ $t('commons.button.cancel') }}
</el-button> </el-button>
<el-button :disabeld="loading" type="primary" @click="onSubmit(formRef)"> <el-button :disabeld="loading" type="primary" @click="onSubmit(formRef)">
{{ $t('container.import') }} {{ $t('commons.button.import') }}
</el-button> </el-button>
</span> </span>
</template> </template>

View File

@ -45,7 +45,7 @@
min-width="100" min-width="100"
fix fix
/> />
<el-table-column :label="$t('container.protocol')" prop="protocol" min-width="60" fix /> <el-table-column :label="$t('commons.table.protocol')" prop="protocol" min-width="60" fix />
<el-table-column :label="$t('commons.table.status')" prop="status" min-width="60" fix> <el-table-column :label="$t('commons.table.status')" prop="status" min-width="60" fix>
<template #default="{ row }"> <template #default="{ row }">
<el-tag v-if="row.status === 'Success'" type="success"> <el-tag v-if="row.status === 'Success'" type="success">

View File

@ -17,7 +17,7 @@
> >
<el-row type="flex" justify="center"> <el-row type="flex" justify="center">
<el-col :span="22"> <el-col :span="22">
<el-form-item :label="$t('container.name')" prop="name"> <el-form-item :label="$t('commons.table.name')" prop="name">
<el-input <el-input
clearable clearable
:disabled="dialogData.title === 'edit'" :disabled="dialogData.title === 'edit'"
@ -51,7 +51,7 @@
docker pull {{ dialogData.rowData!.downloadUrl }}/nginx docker pull {{ dialogData.rowData!.downloadUrl }}/nginx
</span> </span>
</el-form-item> </el-form-item>
<el-form-item :label="$t('container.protocol')" prop="protocol"> <el-form-item :label="$t('commons.table.protocol')" prop="protocol">
<el-radio-group v-model="dialogData.rowData!.protocol"> <el-radio-group v-model="dialogData.rowData!.protocol">
<el-radio label="http">http</el-radio> <el-radio label="http">http</el-radio>
<el-radio label="https">https</el-radio> <el-radio label="https">https</el-radio>

View File

@ -17,7 +17,7 @@
> >
<el-row type="flex" justify="center"> <el-row type="flex" justify="center">
<el-col :span="22"> <el-col :span="22">
<el-form-item :label="$t('container.name')" prop="name"> <el-form-item :label="$t('commons.table.name')" prop="name">
<el-input <el-input
:disabled="dialogData.title === 'edit'" :disabled="dialogData.title === 'edit'"
v-model.trim="dialogData.rowData!.name" v-model.trim="dialogData.rowData!.name"

View File

@ -13,7 +13,7 @@
:rules="rules" :rules="rules"
label-width="80px" label-width="80px"
> >
<el-form-item :label="$t('container.volumeName')" prop="name"> <el-form-item :label="$t('commons.table.name')" prop="name">
<el-input clearable v-model.trim="form.name" /> <el-input clearable v-model.trim="form.name" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('container.driver')" prop="driver"> <el-form-item :label="$t('container.driver')" prop="driver">

View File

@ -94,15 +94,19 @@
&#32;{{ loadZero(row.hour) }} : {{ loadZero(row.minute) }} &#32;{{ loadZero(row.hour) }} : {{ loadZero(row.minute) }}
</span> </span>
<span v-if="row.specType === 'perNDay'"> <span v-if="row.specType === 'perNDay'">
{{ row.day }} {{ $t('cronjob.day1') }}, {{ loadZero(row.hour) }} : {{ row.day }} {{ $t('commons.units.day') }}, {{ loadZero(row.hour) }} :
{{ loadZero(row.minute) }} {{ loadZero(row.minute) }}
</span> </span>
<span v-if="row.specType === 'perNHour'"> <span v-if="row.specType === 'perNHour'">
{{ row.hour }}{{ $t('cronjob.hour') }}, {{ loadZero(row.minute) }} {{ row.hour }}{{ $t('commons.units.hour') }}, {{ loadZero(row.minute) }}
</span> </span>
<span v-if="row.specType === 'perHour'">{{ loadZero(row.minute) }}</span> <span v-if="row.specType === 'perHour'">{{ loadZero(row.minute) }}</span>
<span v-if="row.specType === 'perNMinute'">{{ row.minute }}{{ $t('cronjob.minute') }}</span> <span v-if="row.specType === 'perNMinute'">
<span v-if="row.specType === 'perNSecond'">{{ row.second }}{{ $t('cronjob.second') }}</span> {{ row.minute }}{{ $t('commons.units.minute') }}
</span>
<span v-if="row.specType === 'perNSecond'">
{{ row.second }}{{ $t('commons.units.second') }}
</span>
{{ $t('cronjob.handle') }} {{ $t('cronjob.handle') }}
</template> </template>
</el-table-column> </el-table-column>

View File

@ -57,21 +57,21 @@
<template #append>{{ $t('cronjob.day') }}</template> <template #append>{{ $t('cronjob.day') }}</template>
</el-input> </el-input>
<el-input v-if="hasHour()" class="specClass" v-model.number="dialogData.rowData!.hour"> <el-input v-if="hasHour()" class="specClass" v-model.number="dialogData.rowData!.hour">
<template #append>{{ $t('cronjob.hour') }}</template> <template #append>{{ $t('commons.units.hour') }}</template>
</el-input> </el-input>
<el-input <el-input
v-if="dialogData.rowData!.specType !== 'perNSecond'" v-if="dialogData.rowData!.specType !== 'perNSecond'"
class="specClass" class="specClass"
v-model.number="dialogData.rowData!.minute" v-model.number="dialogData.rowData!.minute"
> >
<template #append>{{ $t('cronjob.minute') }}</template> <template #append>{{ $t('commons.units.minute') }}</template>
</el-input> </el-input>
<el-input <el-input
v-if="dialogData.rowData!.specType === 'perNSecond'" v-if="dialogData.rowData!.specType === 'perNSecond'"
class="specClass" class="specClass"
v-model.number="dialogData.rowData!.second" v-model.number="dialogData.rowData!.second"
> >
<template #append>{{ $t('cronjob.second') }}</template> <template #append>{{ $t('commons.units.second') }}</template>
</el-input> </el-input>
</el-form-item> </el-form-item>

View File

@ -47,22 +47,22 @@
{{ loadZero(dialogData.rowData?.minute) }} {{ loadZero(dialogData.rowData?.minute) }}
</span> </span>
<span v-if="dialogData.rowData?.specType === 'perNDay'"> <span v-if="dialogData.rowData?.specType === 'perNDay'">
{{ dialogData.rowData?.day }}{{ $t('cronjob.day1') }},&nbsp; {{ dialogData.rowData?.day }}{{ $t('commons.units.day') }},&nbsp;
{{ loadZero(dialogData.rowData?.hour) }} : {{ loadZero(dialogData.rowData?.hour) }} :
{{ loadZero(dialogData.rowData?.minute) }} {{ loadZero(dialogData.rowData?.minute) }}
</span> </span>
<span v-if="dialogData.rowData?.specType === 'perNHour'"> <span v-if="dialogData.rowData?.specType === 'perNHour'">
{{ dialogData.rowData?.hour }}{{ $t('cronjob.hour') }},&nbsp; {{ dialogData.rowData?.hour }}{{ $t('commons.units.hour') }},&nbsp;
{{ loadZero(dialogData.rowData?.minute) }} {{ loadZero(dialogData.rowData?.minute) }}
</span> </span>
<span v-if="dialogData.rowData?.specType === 'perHour'"> <span v-if="dialogData.rowData?.specType === 'perHour'">
&nbsp;{{ loadZero(dialogData.rowData?.minute) }} &nbsp;{{ loadZero(dialogData.rowData?.minute) }}
</span> </span>
<span v-if="dialogData.rowData?.specType === 'perNMinute'"> <span v-if="dialogData.rowData?.specType === 'perNMinute'">
&nbsp;{{ dialogData.rowData?.minute }}{{ $t('cronjob.minute') }} &nbsp;{{ dialogData.rowData?.minute }}{{ $t('commons.units.minute') }}
</span> </span>
<span v-if="dialogData.rowData?.specType === 'perNSecond'"> <span v-if="dialogData.rowData?.specType === 'perNSecond'">
&nbsp;{{ dialogData.rowData?.second }}{{ $t('cronjob.second') }} &nbsp;{{ dialogData.rowData?.second }}{{ $t('commons.units.second') }}
</span> </span>
&nbsp;{{ $t('cronjob.handle') }} &nbsp;{{ $t('cronjob.handle') }}
</el-tag> </el-tag>

View File

@ -1,6 +1,6 @@
<template> <template>
<div v-show="onSetting" v-loading="loading"> <div v-show="onSetting" v-loading="loading">
<LayoutContent :title="'MySQL ' + $t('database.setting')" :reload="true"> <LayoutContent :title="'MySQL ' + $t('commons.button.set')" :reload="true">
<template #buttons> <template #buttons>
<el-button type="primary" :plain="activeName !== 'conf'" @click="jumpToConf"> <el-button type="primary" :plain="activeName !== 'conf'" @click="jumpToConf">
{{ $t('database.confChange') }} {{ $t('database.confChange') }}
@ -22,7 +22,7 @@
{{ $t('database.performanceTuning') }} {{ $t('database.performanceTuning') }}
</el-button> </el-button>
<el-button type="primary" :plain="activeName !== 'port'" @click="activeName = 'port'"> <el-button type="primary" :plain="activeName !== 'port'" @click="activeName = 'port'">
{{ $t('database.portSetting') }} {{ $t('commons.table.port') }}
</el-button> </el-button>
<el-button <el-button
type="primary" type="primary"
@ -81,7 +81,7 @@
<el-row> <el-row>
<el-col :span="1"><br /></el-col> <el-col :span="1"><br /></el-col>
<el-col :span="10"> <el-col :span="10">
<el-form-item :label="$t('setting.port')" prop="port" :rules="Rules.port"> <el-form-item :label="$t('commons.table.port')" prop="port" :rules="Rules.port">
<el-input clearable type="number" v-model.number="baseInfo.port" /> <el-input clearable type="number" v-model.number="baseInfo.port" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>

View File

@ -6,7 +6,7 @@
<el-form @submit.prevent v-loading="loading" ref="formRef" :model="form" label-position="top"> <el-form @submit.prevent v-loading="loading" ref="formRef" :model="form" label-position="top">
<el-row type="flex" justify="center"> <el-row type="flex" justify="center">
<el-col :span="22"> <el-col :span="22">
<el-form-item :label="$t('database.requirepass')" :rules="Rules.requiredInput" prop="password"> <el-form-item :label="$t('commons.login.password')" :rules="Rules.requiredInput" prop="password">
<el-input type="password" show-password clearable v-model="form.password"> <el-input type="password" show-password clearable v-model="form.password">
<template #append> <template #append>
<el-button @click="onCopy(form.password)" icon="DocumentCopy"></el-button> <el-button @click="onCopy(form.password)" icon="DocumentCopy"></el-button>

View File

@ -1,6 +1,6 @@
<template> <template>
<div v-show="settingShow" v-loading="loading"> <div v-show="settingShow" v-loading="loading">
<LayoutContent :title="'Redis ' + $t('database.setting')" :reload="true"> <LayoutContent :title="'Redis ' + $t('commons.button.set')" :reload="true">
<template #buttons> <template #buttons>
<el-button type="primary" :plain="activeName !== 'conf'" @click="changeTab('conf')"> <el-button type="primary" :plain="activeName !== 'conf'" @click="changeTab('conf')">
{{ $t('database.confChange') }} {{ $t('database.confChange') }}
@ -11,7 +11,7 @@
:plain="activeName !== 'status'" :plain="activeName !== 'status'"
@click="changeTab('status')" @click="changeTab('status')"
> >
{{ $t('database.status') }} {{ $t('database.currentStatus') }}
</el-button> </el-button>
<el-button <el-button
type="primary" type="primary"
@ -22,7 +22,7 @@
{{ $t('database.performanceTuning') }} {{ $t('database.performanceTuning') }}
</el-button> </el-button>
<el-button type="primary" :plain="activeName !== 'port'" @click="changeTab('port')"> <el-button type="primary" :plain="activeName !== 'port'" @click="changeTab('port')">
{{ $t('database.portSetting') }} {{ $t('commons.table.port') }}
</el-button> </el-button>
<el-button <el-button
type="primary" type="primary"
@ -75,7 +75,7 @@
<el-col :span="10"> <el-col :span="10">
<el-form-item :label="$t('database.timeout')" prop="timeout"> <el-form-item :label="$t('database.timeout')" prop="timeout">
<el-input clearable type="number" v-model.number="form.timeout"> <el-input clearable type="number" v-model.number="form.timeout">
<template #append>{{ $t('home.Second') }}</template> <template #append>{{ $t('commons.units.second') }}</template>
</el-input> </el-input>
<span class="input-help">{{ $t('database.timeoutHelper') }}</span> <span class="input-help">{{ $t('database.timeoutHelper') }}</span>
</el-form-item> </el-form-item>
@ -103,7 +103,7 @@
<el-row> <el-row>
<el-col :span="1"><br /></el-col> <el-col :span="1"><br /></el-col>
<el-col :span="10"> <el-col :span="10">
<el-form-item :label="$t('setting.port')" prop="port" :rules="Rules.port"> <el-form-item :label="$t('commons.table.port')" prop="port" :rules="Rules.port">
<el-input clearable type="number" v-model.number="form.port" /> <el-input clearable type="number" v-model.number="form.port" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>

View File

@ -81,7 +81,7 @@
<el-card style="margin-top: 20px"> <el-card style="margin-top: 20px">
<ComplexTable :pagination-config="paginationConfig" v-model:selects="selects" @search="search" :data="data"> <ComplexTable :pagination-config="paginationConfig" v-model:selects="selects" @search="search" :data="data">
<template #toolbar> <template #toolbar>
<el-button type="primary" @click="onBackup">{{ $t('setting.backup') }}</el-button> <el-button type="primary" @click="onBackup">{{ $t('commons.button.backup') }}</el-button>
<el-button type="primary" plain :disabled="selects.length === 0" @click="onBatchDelete(null)"> <el-button type="primary" plain :disabled="selects.length === 0" @click="onBatchDelete(null)">
{{ $t('commons.button.delete') }} {{ $t('commons.button.delete') }}
</el-button> </el-button>

View File

@ -119,7 +119,7 @@
<el-tag>{{ $t('monitor.write') }}: {{ currentChartInfo.ioWriteBytes }} MB</el-tag> <el-tag>{{ $t('monitor.write') }}: {{ currentChartInfo.ioWriteBytes }} MB</el-tag>
<el-tag> <el-tag>
{{ $t('home.rwPerSecond') }}: {{ currentChartInfo.ioCount }} {{ $t('home.rwPerSecond') }}: {{ currentChartInfo.ioCount }}
{{ $t('home.time') }} {{ $t('commons.units.time') }}
</el-tag> </el-tag>
<el-tag>{{ $t('home.ioDelay') }}: {{ currentChartInfo.ioTime }} ms</el-tag> <el-tag>{{ $t('home.ioDelay') }}: {{ currentChartInfo.ioTime }} ms</el-tag>
</div> </div>
@ -435,34 +435,34 @@ function loadUpTime(uptime: number) {
if (days !== 0) { if (days !== 0) {
return ( return (
days + days +
i18n.global.t('home.Day') + i18n.global.t('commons.units.day') +
' ' + ' ' +
hours + hours +
i18n.global.t('home.Hour') + i18n.global.t('commons.units.hour') +
' ' + ' ' +
minutes + minutes +
i18n.global.t('home.Minute') + i18n.global.t('commons.units.minute') +
' ' + ' ' +
seconds + seconds +
i18n.global.t('home.Second') i18n.global.t('commons.units.second')
); );
} }
if (hours !== 0) { if (hours !== 0) {
return ( return (
hours + hours +
i18n.global.t('home.Hour') + i18n.global.t('commons.units.hour') +
' ' + ' ' +
minutes + minutes +
i18n.global.t('home.Minute') + i18n.global.t('commons.units.minute') +
' ' + ' ' +
seconds + seconds +
i18n.global.t('home.Second') i18n.global.t('commons.units.second')
); );
} }
if (minutes !== 0) { if (minutes !== 0) {
return minutes + i18n.global.t('home.Minute') + ' ' + seconds + i18n.global.t('home.Second'); return minutes + i18n.global.t('home.Minute') + ' ' + seconds + i18n.global.t('commons.units.second');
} }
return seconds + i18n.global.t('home.Second'); return seconds + i18n.global.t('commons.units.second');
} }
const loadData = async () => { const loadData = async () => {

View File

@ -33,7 +33,7 @@
</template> </template>
</el-popover> </el-popover>
<span class="input-help"> <span class="input-help">
( {{ formatNumber(currentInfo.cpuUsed) }} / {{ currentInfo.cpuTotal }} ) {{ $t('home.coreUnit') }} ( {{ formatNumber(currentInfo.cpuUsed) }} / {{ currentInfo.cpuTotal }} ) {{ $t('commons.units.core') }}
</span> </span>
</el-col> </el-col>
<el-col :xs="12" :sm="12" :md="6" :lg="6" :xl="6" align="center"> <el-col :xs="12" :sm="12" :md="6" :lg="6" :xl="6" align="center">

View File

@ -14,7 +14,7 @@
:rules="rules" :rules="rules"
v-loading="loading" v-loading="loading"
> >
<el-form-item :label="$t('file.user')" prop="user"> <el-form-item :label="$t('commons.table.user')" prop="user">
<el-input v-model.trim="addForm.user" /> <el-input v-model.trim="addForm.user" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('file.group')" prop="group"> <el-form-item :label="$t('file.group')" prop="group">

View File

@ -24,7 +24,7 @@
<el-option v-for="item in options" :key="item" :label="item" :value="item" /> <el-option v-for="item in options" :key="item" :label="item" :value="item" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('file.name')" prop="name"> <el-form-item :label="$t('commons.table.name')" prop="name">
<el-input v-model="form.name"> <el-input v-model="form.name">
<template #append>{{ extension }}</template> <template #append>{{ extension }}</template>
</el-input> </el-input>

View File

@ -21,7 +21,7 @@
v-loading="loading" v-loading="loading"
@submit.enter.prevent @submit.enter.prevent
> >
<el-form-item :label="$t('file.name')" prop="name"> <el-form-item :label="$t('commons.table.name')" prop="name">
<el-input v-model.trim="addForm.name" /> <el-input v-model.trim="addForm.name" />
</el-form-item> </el-form-item>
<el-form-item v-if="!addForm.isDir"> <el-form-item v-if="!addForm.isDir">

View File

@ -19,7 +19,7 @@
:rules="rules" :rules="rules"
v-loading="loading" v-loading="loading"
> >
<el-form-item :label="$t('file.name')"> <el-form-item :label="$t('commons.table.name')">
<el-input v-model="name" disabled></el-input> <el-input v-model="name" disabled></el-input>
</el-form-item> </el-form-item>
<el-form-item :label="$t('file.deCompressDst')" prop="dst"> <el-form-item :label="$t('file.deCompressDst')" prop="dst">

View File

@ -7,13 +7,13 @@
<el-col> <el-col>
<el-descriptions :column="1" border> <el-descriptions :column="1" border>
<el-descriptions-item :label="$t('file.fileName')">{{ data.name }}</el-descriptions-item> <el-descriptions-item :label="$t('file.fileName')">{{ data.name }}</el-descriptions-item>
<el-descriptions-item :label="$t('file.type')">{{ data.type }}</el-descriptions-item> <el-descriptions-item :label="$t('commons.table.type')">{{ data.type }}</el-descriptions-item>
<el-descriptions-item :label="$t('file.path')">{{ data.path }}</el-descriptions-item> <el-descriptions-item :label="$t('file.path')">{{ data.path }}</el-descriptions-item>
<el-descriptions-item :label="$t('file.size')"> <el-descriptions-item :label="$t('file.size')">
{{ computeSize(data.size) }} {{ computeSize(data.size) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('file.role')">{{ data.mode }}</el-descriptions-item> <el-descriptions-item :label="$t('file.role')">{{ data.mode }}</el-descriptions-item>
<el-descriptions-item :label="$t('file.user')">{{ data.user }}</el-descriptions-item> <el-descriptions-item :label="$t('commons.table.user')">{{ data.user }}</el-descriptions-item>
<el-descriptions-item :label="$t('file.group')">{{ data.group }}</el-descriptions-item> <el-descriptions-item :label="$t('file.group')">{{ data.group }}</el-descriptions-item>
<el-descriptions-item :label="$t('commons.table.updatedAt')"> <el-descriptions-item :label="$t('commons.table.updatedAt')">
{{ dateFormatSimple(data.modTime) }} {{ dateFormatSimple(data.modTime) }}

View File

@ -18,7 +18,7 @@
<el-option v-for="item in options" :key="item" :label="item" :value="item" /> <el-option v-for="item in options" :key="item" :label="item" :value="item" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('file.name')" prop="name"> <el-form-item :label="$t('commons.table.name')" prop="name">
<el-input v-model="addForm.name"> <el-input v-model="addForm.name">
<template #append>{{ extension }}</template> <template #append>{{ extension }}</template>
</el-input> </el-input>

View File

@ -122,7 +122,7 @@
<el-link :underline="false" @click="openMode(row)" type="primary">{{ row.mode }}</el-link> <el-link :underline="false" @click="openMode(row)" type="primary">{{ row.mode }}</el-link>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('file.user')" prop="user" show-overflow-tooltip> <el-table-column :label="$t('commons.table.user')" prop="user" show-overflow-tooltip>
<template #default="{ row }"> <template #default="{ row }">
<el-link :underline="false" @click="openChown(row)" type="primary">{{ row.user }}</el-link> <el-link :underline="false" @click="openChown(row)" type="primary">{{ row.user }}</el-link>
</template> </template>

View File

@ -16,7 +16,7 @@
<el-form-item :label="$t('file.path')" prop="path"> <el-form-item :label="$t('file.path')" prop="path">
<el-input v-model="addForm.path" disabled /> <el-input v-model="addForm.path" disabled />
</el-form-item> </el-form-item>
<el-form-item :label="$t('file.name')" prop="newName"> <el-form-item :label="$t('commons.table.name')" prop="newName">
<el-input v-model.trim="addForm.newName" /> <el-input v-model.trim="addForm.newName" />
</el-form-item> </el-form-item>
</el-form> </el-form>

View File

@ -21,7 +21,7 @@
<template #prepend><FileList :path="addForm.path" @choose="getPath"></FileList></template> <template #prepend><FileList :path="addForm.path" @choose="getPath"></FileList></template>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item :label="$t('file.name')" prop="name"> <el-form-item :label="$t('commons.table.name')" prop="name">
<el-input v-model="addForm.name"></el-input> <el-input v-model="addForm.name"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>

View File

@ -68,8 +68,8 @@
:data="data" :data="data"
> >
<el-table-column type="selection" :selectable="selectable" fix /> <el-table-column type="selection" :selectable="selectable" fix />
<el-table-column :label="$t('firewall.protocol')" :min-width="90" prop="protocol" /> <el-table-column :label="$t('commons.table.protocol')" :min-width="90" prop="protocol" />
<el-table-column :label="$t('firewall.port')" :min-width="120" prop="port" /> <el-table-column :label="$t('commons.table.port')" :min-width="120" prop="port" />
<el-table-column :label="$t('commons.table.status')" :min-width="120"> <el-table-column :label="$t('commons.table.status')" :min-width="120">
<template #default="{ row }"> <template #default="{ row }">
<el-tag type="info" v-if="row.isUsed"> <el-tag type="info" v-if="row.isUsed">
@ -225,7 +225,7 @@ const onChangeStatus = async (row: Host.RuleInfo, status: string) => {
status === 'accept' status === 'accept'
? i18n.global.t('firewall.changeStrategyPortHelper2') ? i18n.global.t('firewall.changeStrategyPortHelper2')
: i18n.global.t('firewall.changeStrategyPortHelper1'); : i18n.global.t('firewall.changeStrategyPortHelper1');
ElMessageBox.confirm(operation, i18n.global.t('firewall.changeStrategy', [i18n.global.t('firewall.port')]), { ElMessageBox.confirm(operation, i18n.global.t('firewall.changeStrategy', [i18n.global.t('commons.table.port')]), {
confirmButtonText: i18n.global.t('commons.button.confirm'), confirmButtonText: i18n.global.t('commons.button.confirm'),
cancelButtonText: i18n.global.t('commons.button.cancel'), cancelButtonText: i18n.global.t('commons.button.cancel'),
}).then(async () => { }).then(async () => {

View File

@ -7,7 +7,7 @@
<el-form ref="formRef" label-position="top" :model="dialogData.rowData" :rules="rules"> <el-form ref="formRef" label-position="top" :model="dialogData.rowData" :rules="rules">
<el-row type="flex" justify="center"> <el-row type="flex" justify="center">
<el-col :span="22"> <el-col :span="22">
<el-form-item :label="$t('firewall.protocol')" prop="protocol"> <el-form-item :label="$t('commons.table.protocol')" prop="protocol">
<el-select style="width: 100%" v-model="dialogData.rowData!.protocol"> <el-select style="width: 100%" v-model="dialogData.rowData!.protocol">
<el-option value="tcp" label="tcp" /> <el-option value="tcp" label="tcp" />
<el-option value="udp" label="udp" /> <el-option value="udp" label="udp" />
@ -15,7 +15,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('firewall.port')" prop="port"> <el-form-item :label="$t('commons.table.port')" prop="port">
<el-input <el-input
:disabled="dialogData.title === 'edit'" :disabled="dialogData.title === 'edit'"
clearable clearable

View File

@ -16,7 +16,7 @@ const buttons = [
path: '/hosts/monitor/monitor', path: '/hosts/monitor/monitor',
}, },
{ {
label: i18n.global.t('monitor.setting'), label: i18n.global.t('commons.button.set'),
path: '/hosts/monitor/setting', path: '/hosts/monitor/setting',
}, },
]; ];

View File

@ -476,9 +476,9 @@ function initLoadCharts(item: Monitor.MonitorData) {
}, },
legend: { legend: {
data: [ data: [
'1 ' + i18n.global.t('monitor.min'), '1 ' + i18n.global.t('commons.units.minute'),
'5 ' + i18n.global.t('monitor.min'), '5 ' + i18n.global.t('commons.units.minute'),
'15 ' + i18n.global.t('monitor.min'), '15 ' + i18n.global.t('commons.units.minute'),
i18n.global.t('monitor.resourceUsage'), i18n.global.t('monitor.resourceUsage'),
], ],
}, },
@ -498,7 +498,7 @@ function initLoadCharts(item: Monitor.MonitorData) {
dataZoom: [{ startValue: zoomStart.value }], dataZoom: [{ startValue: zoomStart.value }],
series: [ series: [
{ {
name: '1 ' + i18n.global.t('monitor.min'), name: '1 ' + i18n.global.t('commons.units.minute'),
type: 'line', type: 'line',
areaStyle: { areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
@ -516,7 +516,7 @@ function initLoadCharts(item: Monitor.MonitorData) {
data: load1Data, data: load1Data,
}, },
{ {
name: '5 ' + i18n.global.t('monitor.min'), name: '5 ' + i18n.global.t('commons.units.minute'),
type: 'line', type: 'line',
areaStyle: { areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
@ -534,7 +534,7 @@ function initLoadCharts(item: Monitor.MonitorData) {
data: load5Data, data: load5Data,
}, },
{ {
name: '15 ' + i18n.global.t('monitor.min'), name: '15 ' + i18n.global.t('commons.units.minute'),
type: 'line', type: 'line',
areaStyle: { areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
@ -620,7 +620,7 @@ function initIOCharts(item: Monitor.MonitorData) {
'' + '' +
item.data + item.data +
' ' + ' ' +
i18n.global.t('monitor.count') + i18n.global.t('commons.units.time') +
'/s' + '/s' +
'<br/>'; '<br/>';
} }

View File

@ -2,7 +2,7 @@
<div> <div>
<MonitorRouter /> <MonitorRouter />
<LayoutContent v-loading="loading" :title="$t('monitor.setting')" :divider="true"> <LayoutContent v-loading="loading" :title="$t('commons.button.set')" :divider="true">
<template #main> <template #main>
<el-form :model="form" @submit.prevent ref="panelFormRef" label-position="left" label-width="160px"> <el-form :model="form" @submit.prevent ref="panelFormRef" label-position="left" label-width="160px">
<el-row> <el-row>

View File

@ -26,7 +26,7 @@
<el-descriptions-item :label="$t('process.diskWrite')"> <el-descriptions-item :label="$t('process.diskWrite')">
{{ data.diskWrite }} {{ data.diskWrite }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('process.username')"> <el-descriptions-item :label="$t('commons.table.user')">
{{ data.username }} {{ data.username }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('process.startTime')"> <el-descriptions-item :label="$t('process.startTime')">

View File

@ -44,7 +44,7 @@
suffix-icon="Search" suffix-icon="Search"
@keyup.enter="search()" @keyup.enter="search()"
@change="search()" @change="search()"
:placeholder="$t('process.username')" :placeholder="$t('commons.table.user')"
></el-input> ></el-input>
</div> </div>
</el-col> </el-col>
@ -75,7 +75,7 @@
></el-table-column> ></el-table-column>
<el-table-column :label="$t('process.ppid')" fix prop="PPID" sortable></el-table-column> <el-table-column :label="$t('process.ppid')" fix prop="PPID" sortable></el-table-column>
<el-table-column :label="$t('process.numThreads')" fix prop="numThreads"></el-table-column> <el-table-column :label="$t('process.numThreads')" fix prop="numThreads"></el-table-column>
<el-table-column :label="$t('process.username')" fix prop="username"></el-table-column> <el-table-column :label="$t('commons.table.user')" fix prop="username"></el-table-column>
<el-table-column <el-table-column
:label="'CPU'" :label="'CPU'"
fix fix

View File

@ -50,13 +50,13 @@
<el-table-column type="selection" :selectable="selectable" fix /> <el-table-column type="selection" :selectable="selectable" fix />
<el-table-column min-width="80" :label="$t('logs.loginIP')" prop="address" /> <el-table-column min-width="80" :label="$t('logs.loginIP')" prop="address" />
<el-table-column min-width="60" :label="$t('ssh.belong')" prop="area" /> <el-table-column min-width="60" :label="$t('ssh.belong')" prop="area" />
<el-table-column min-width="60" :label="$t('firewall.port')" prop="port" /> <el-table-column min-width="60" :label="$t('commons.table.port')" prop="port" />
<el-table-column min-width="60" :label="$t('ssh.loginMode')" prop="authMode"> <el-table-column min-width="60" :label="$t('ssh.loginMode')" prop="authMode">
<template #default="{ row }"> <template #default="{ row }">
<span v-if="row.authMode">{{ $t('ssh.' + row.authMode) }}</span> <span v-if="row.authMode">{{ $t('ssh.' + row.authMode) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column min-width="60" :label="$t('ssh.loginUser')" prop="user" /> <el-table-column min-width="60" :label="$t('commons.table.user')" prop="user" />
<el-table-column min-width="60" :label="$t('logs.loginStatus')" prop="status"> <el-table-column min-width="60" :label="$t('logs.loginStatus')" prop="status">
<template #default="{ row }"> <template #default="{ row }">
<div v-if="row.status === 'Success'"> <div v-if="row.status === 'Success'">

View File

@ -21,7 +21,7 @@
<el-option label="DSA" value="dsa" /> <el-option label="DSA" value="dsa" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('terminal.password')" prop="password"> <el-form-item :label="$t('commons.login.password')" prop="password">
<el-input v-model="form.password" type="password" show-password> <el-input v-model="form.password" type="password" show-password>
<template #append> <template #append>
<el-button @click="onCopy(form.password)" icon="DocumentCopy"></el-button> <el-button @click="onCopy(form.password)" icon="DocumentCopy"></el-button>

View File

@ -47,8 +47,8 @@
> >
<el-table-column type="selection" :selectable="selectable" fix /> <el-table-column type="selection" :selectable="selectable" fix />
<el-table-column :label="$t('terminal.ip')" prop="addr" fix /> <el-table-column :label="$t('terminal.ip')" prop="addr" fix />
<el-table-column :label="$t('terminal.user')" show-overflow-tooltip prop="user" /> <el-table-column :label="$t('commons.login.username')" show-overflow-tooltip prop="user" />
<el-table-column :label="$t('terminal.port')" prop="port" /> <el-table-column :label="$t('commons.table.port')" prop="port" />
<el-table-column :label="$t('commons.table.group')" show-overflow-tooltip prop="groupBelong"> <el-table-column :label="$t('commons.table.group')" show-overflow-tooltip prop="groupBelong">
<template #default="{ row }"> <template #default="{ row }">
<span v-if="row.groupBelong === 'default'">{{ $t('website.default') }}</span> <span v-if="row.groupBelong === 'default'">{{ $t('website.default') }}</span>

View File

@ -13,7 +13,7 @@
</span> </span>
<el-input v-else clearable v-model.trim="dialogData.rowData!.addr" /> <el-input v-else clearable v-model.trim="dialogData.rowData!.addr" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('terminal.user')" prop="user"> <el-form-item :label="$t('commons.login.username')" prop="user">
<el-input clearable v-model="dialogData.rowData!.user" /> <el-input clearable v-model="dialogData.rowData!.user" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('terminal.authMode')" prop="authMode"> <el-form-item :label="$t('terminal.authMode')" prop="authMode">
@ -23,7 +23,7 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
:label="$t('terminal.password')" :label="$t('commons.login.password')"
v-if="dialogData.rowData!.authMode === 'password'" v-if="dialogData.rowData!.authMode === 'password'"
prop="password" prop="password"
> >
@ -51,7 +51,7 @@
<el-checkbox clearable v-model.number="dialogData.rowData!.rememberPassword"> <el-checkbox clearable v-model.number="dialogData.rowData!.rememberPassword">
{{ $t('terminal.rememberPassword') }} {{ $t('terminal.rememberPassword') }}
</el-checkbox> </el-checkbox>
<el-form-item style="margin-top: 10px" :label="$t('terminal.port')" prop="port"> <el-form-item style="margin-top: 10px" :label="$t('commons.table.port')" prop="port">
<el-input clearable v-model.number="dialogData.rowData!.port" /> <el-input clearable v-model.number="dialogData.rowData!.port" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('commons.table.group')" prop="groupID"> <el-form-item :label="$t('commons.table.group')" prop="groupID">

View File

@ -21,7 +21,7 @@
<span v-if="isLocal">{{ hostInfo.addr }}</span> <span v-if="isLocal">{{ hostInfo.addr }}</span>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item :label="$t('terminal.user')" prop="user"> <el-form-item :label="$t('commons.login.username')" prop="user">
<el-input clearable v-model="hostInfo.user" /> <el-input clearable v-model="hostInfo.user" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('terminal.authMode')" prop="authMode"> <el-form-item :label="$t('terminal.authMode')" prop="authMode">
@ -31,7 +31,7 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
:label="$t('terminal.password')" :label="$t('commons.login.password')"
v-if="hostInfo.authMode === 'password'" v-if="hostInfo.authMode === 'password'"
prop="password" prop="password"
> >
@ -50,7 +50,7 @@
<el-checkbox clearable v-model.number="hostInfo.rememberPassword"> <el-checkbox clearable v-model.number="hostInfo.rememberPassword">
{{ $t('terminal.rememberPassword') }} {{ $t('terminal.rememberPassword') }}
</el-checkbox> </el-checkbox>
<el-form-item style="margin-top: 10px" :label="$t('terminal.port')" prop="port"> <el-form-item style="margin-top: 10px" :label="$t('commons.table.port')" prop="port">
<el-input clearable v-model.number="hostInfo.port" /> <el-input clearable v-model.number="hostInfo.port" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('commons.table.title')" prop="name"> <el-form-item :label="$t('commons.table.title')" prop="name">

View File

@ -188,7 +188,7 @@ const loadDetail = (log: string) => {
log = log.replace('[get]', '[' + i18n.global.t('commons.button.get') + ']'); log = log.replace('[get]', '[' + i18n.global.t('commons.button.get') + ']');
} }
if (log.indexOf('[UserName]') !== -1) { if (log.indexOf('[UserName]') !== -1) {
return log.replace('[UserName]', '[' + i18n.global.t('setting.user') + ']'); return log.replace('[UserName]', '[' + i18n.global.t('commons.login.username') + ']');
} }
if (log.indexOf('[PanelName]') !== -1) { if (log.indexOf('[PanelName]') !== -1) {
return log.replace('[PanelName]', '[' + i18n.global.t('setting.title') + ']'); return log.replace('[PanelName]', '[' + i18n.global.t('setting.title') + ']');

View File

@ -1,6 +1,6 @@
<template> <template>
<div> <div>
<LayoutContent :title="$t('setting.backup')"> <LayoutContent :title="$t('commons.button.backup')">
<template #main> <template #main>
<el-form label-position="left" label-width="130px" :v-key="reflash"> <el-form label-position="left" label-width="130px" :v-key="reflash">
<el-row :gutter="20"> <el-row :gutter="20">
@ -343,7 +343,7 @@
<el-form-item :label="$t('setting.address')"> <el-form-item :label="$t('setting.address')">
{{ sftpData.varsJson['address'] }} {{ sftpData.varsJson['address'] }}
</el-form-item> </el-form-item>
<el-form-item :label="$t('setting.port')"> <el-form-item :label="$t('commons.table.port')">
{{ sftpData.varsJson['port'] }} {{ sftpData.varsJson['port'] }}
</el-form-item> </el-form-item>
<el-form-item :label="$t('setting.path')"> <el-form-item :label="$t('setting.path')">

View File

@ -181,7 +181,7 @@
<el-form-item :label="$t('setting.address')" prop="varsJson.address" :rules="Rules.host"> <el-form-item :label="$t('setting.address')" prop="varsJson.address" :rules="Rules.host">
<el-input v-model.trim="dialogData.rowData!.varsJson['address']" /> <el-input v-model.trim="dialogData.rowData!.varsJson['address']" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('setting.port')" prop="varsJson.port" :rules="[Rules.port]"> <el-form-item :label="$t('commons.table.port')" prop="varsJson.port" :rules="[Rules.port]">
<el-input-number <el-input-number
:min="0" :min="0"
:max="65535" :max="65535"
@ -196,7 +196,7 @@
<el-input v-model="dialogData.rowData!.accessKey" /> <el-input v-model="dialogData.rowData!.accessKey" />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
:label="$t('setting.password')" :label="$t('commons.login.password')"
prop="credential" prop="credential"
:rules="[Rules.requiredInput]" :rules="[Rules.requiredInput]"
> >

View File

@ -6,7 +6,7 @@
<el-row> <el-row>
<el-col :span="1"><br /></el-col> <el-col :span="1"><br /></el-col>
<el-col :xs="24" :sm="20" :md="15" :lg="12" :xl="12"> <el-col :xs="24" :sm="20" :md="15" :lg="12" :xl="12">
<el-form-item :label="$t('setting.user')" prop="userName"> <el-form-item :label="$t('commons.login.username')" prop="userName">
<el-input disabled v-model="form.userName"> <el-input disabled v-model="form.userName">
<template #append> <template #append>
<el-button @click="onChangeUserName()" icon="Setting"> <el-button @click="onChangeUserName()" icon="Setting">

View File

@ -2,12 +2,12 @@
<div> <div>
<el-drawer v-model="drawerVisiable" :destroy-on-close="true" :close-on-click-modal="false" size="30%"> <el-drawer v-model="drawerVisiable" :destroy-on-close="true" :close-on-click-modal="false" size="30%">
<template #header> <template #header>
<DrawerHeader :header="$t('setting.user')" :back="handleClose" /> <DrawerHeader :header="$t('commons.login.username')" :back="handleClose" />
</template> </template>
<el-form ref="formRef" label-position="top" :model="form" @submit.prevent v-loading="loading"> <el-form ref="formRef" label-position="top" :model="form" @submit.prevent v-loading="loading">
<el-row type="flex" justify="center"> <el-row type="flex" justify="center">
<el-col :span="22"> <el-col :span="22">
<el-form-item :label="$t('setting.user')" prop="userName" :rules="Rules.userName"> <el-form-item :label="$t('commons.login.username')" prop="userName" :rules="Rules.userName">
<el-input clearable v-model="form.userName" /> <el-input clearable v-model="form.userName" />
</el-form-item> </el-form-item>
</el-col> </el-col>

View File

@ -17,7 +17,7 @@
<el-radio-group v-model="form.sslType"> <el-radio-group v-model="form.sslType">
<el-radio label="self">{{ $t('setting.selfSigned') }}</el-radio> <el-radio label="self">{{ $t('setting.selfSigned') }}</el-radio>
<el-radio label="select">{{ $t('setting.select') }}</el-radio> <el-radio label="select">{{ $t('setting.select') }}</el-radio>
<el-radio label="import">{{ $t('setting.import') }}</el-radio> <el-radio label="import">{{ $t('commons.button.import') }}</el-radio>
</el-radio-group> </el-radio-group>
<span class="input-help" v-if="form.sslType === 'self'"> <span class="input-help" v-if="form.sslType === 'self'">
{{ $t('setting.selfSignedHelper') }} {{ $t('setting.selfSignedHelper') }}

View File

@ -13,7 +13,7 @@
:rules="rules" :rules="rules"
:validate-on-rule-change="false" :validate-on-rule-change="false"
> >
<el-form-item :label="$t('runtime.name')" prop="name"> <el-form-item :label="$t('commons.table.name')" prop="name">
<el-input :disabled="mode === 'edit'" v-model="runtime.name"></el-input> <el-input :disabled="mode === 'edit'" v-model="runtime.name"></el-input>
</el-form-item> </el-form-item>
<el-form-item :label="$t('runtime.resource')" prop="resource"> <el-form-item :label="$t('runtime.resource')" prop="resource">

View File

@ -28,7 +28,7 @@
</el-table-column> </el-table-column>
<el-table-column :label="$t('runtime.version')" prop="version"></el-table-column> <el-table-column :label="$t('runtime.version')" prop="version"></el-table-column>
<el-table-column :label="$t('runtime.image')" prop="image" show-overflow-tooltip></el-table-column> <el-table-column :label="$t('runtime.image')" prop="image" show-overflow-tooltip></el-table-column>
<el-table-column :label="$t('runtime.status')" prop="status"> <el-table-column :label="$t('commons.table.status')" prop="status">
<template #default="{ row }"> <template #default="{ row }">
<el-popover <el-popover
v-if="row.status === 'error'" v-if="row.status === 'error'"

View File

@ -42,7 +42,7 @@ const paginationConfig = reactive({
const buttons = [ const buttons = [
{ {
label: i18n.global.t('app.delete'), label: i18n.global.t('commons.button.delete'),
click: function (row: Website.AcmeAccount) { click: function (row: Website.AcmeAccount) {
deleteAccount(row.id); deleteAccount(row.id);
}, },

View File

@ -53,7 +53,7 @@
<el-table-column prop="domain" :label="$t('website.domain')" /> <el-table-column prop="domain" :label="$t('website.domain')" />
<el-table-column prop="resolve" :label="$t('ssl.resolveDomain')" /> <el-table-column prop="resolve" :label="$t('ssl.resolveDomain')" />
<el-table-column prop="value" :label="$t('ssl.value')" /> <el-table-column prop="value" :label="$t('ssl.value')" />
<el-table-column :label="$t('ssl.type')">TXT</el-table-column> <el-table-column :label="$t('commons.table.type')">TXT</el-table-column>
</el-table> </el-table>
</el-form-item> </el-form-item>
<el-form-item :label="''" prop="autoRenew" v-if="ssl.provider !== 'dnsManual'"> <el-form-item :label="''" prop="autoRenew" v-if="ssl.provider !== 'dnsManual'">

View File

@ -13,7 +13,7 @@
<el-form-item :label="$t('commons.table.name')" prop="name"> <el-form-item :label="$t('commons.table.name')" prop="name">
<el-input v-model.trim="account.name"></el-input> <el-input v-model.trim="account.name"></el-input>
</el-form-item> </el-form-item>
<el-form-item :label="$t('website.type')" prop="type"> <el-form-item :label="$t('commons.table.type')" prop="type">
<el-select v-model="account.type" :disabled="accountData.mode === 'edit'"> <el-select v-model="account.type" :disabled="accountData.mode === 'edit'">
<el-option <el-option
v-for="(type, index) in types" v-for="(type, index) in types"

View File

@ -55,7 +55,7 @@ const buttons = [
}, },
}, },
{ {
label: i18n.global.t('app.delete'), label: i18n.global.t('commons.button.delete'),
click: function (row: Website.DnsAccount) { click: function (row: Website.DnsAccount) {
deleteAccount(row.id); deleteAccount(row.id);
}, },

View File

@ -136,7 +136,7 @@ const buttons = [
}, },
}, },
{ {
label: i18n.global.t('app.delete'), label: i18n.global.t('commons.button.delete'),
click: function (row: Website.SSL) { click: function (row: Website.SSL) {
deleteSSL(row.id); deleteSSL(row.id);
}, },

View File

@ -16,7 +16,7 @@
<el-form-item :label="$t('website.domain')" prop="domain"> <el-form-item :label="$t('website.domain')" prop="domain">
<el-input v-model="domain.domain"></el-input> <el-input v-model="domain.domain"></el-input>
</el-form-item> </el-form-item>
<el-form-item :label="$t('website.port')" prop="port"> <el-form-item :label="$t('commons.table.port')" prop="port">
<el-input v-model.number="domain.port"></el-input> <el-input v-model.number="domain.port"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>

View File

@ -9,7 +9,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('website.domain')" prop="domain"></el-table-column> <el-table-column :label="$t('website.domain')" prop="domain"></el-table-column>
<el-table-column :label="$t('website.port')" prop="port"></el-table-column> <el-table-column :label="$t('commons.table.port')" prop="port"></el-table-column>
<fu-table-operations <fu-table-operations
:ellipsis="1" :ellipsis="1"
:buttons="buttons" :buttons="buttons"
@ -51,7 +51,7 @@ const website = ref<Website.WebsiteDTO>();
const buttons = [ const buttons = [
{ {
label: i18n.global.t('app.delete'), label: i18n.global.t('commons.button.delete'),
click: function (row: Website.Domain) { click: function (row: Website.Domain) {
deleteDoamin(row.id); deleteDoamin(row.id);
}, },

View File

@ -34,7 +34,7 @@
<el-form-item v-if="configDir" :label="$t('website.userGroup')"> <el-form-item v-if="configDir" :label="$t('website.userGroup')">
<el-space wrap> <el-space wrap>
<el-input v-model="updatePermission.user" class="user-num-input"> <el-input v-model="updatePermission.user" class="user-num-input">
<template #prepend>{{ $t('website.user') }}</template> <template #prepend>{{ $t('commons.table.user') }}</template>
</el-input> </el-input>
<el-input v-model="updatePermission.group" class="user-num-input"> <el-input v-model="updatePermission.group" class="user-num-input">
<template #prepend>{{ $t('website.uGroup') }}</template> <template #prepend>{{ $t('website.uGroup') }}</template>

View File

@ -13,7 +13,7 @@
</el-form-item> </el-form-item>
<el-form-item label="max_execution_time" prop="max_execution_time"> <el-form-item label="max_execution_time" prop="max_execution_time">
<el-input clearable v-model.number="form.max_execution_time" maxlength="15"> <el-input clearable v-model.number="form.max_execution_time" maxlength="15">
<template #append>{{ $t('php.second') }}</template> <template #append>{{ $t('commons.units.second') }}</template>
</el-input> </el-input>
<span class="input-help">{{ $t('php.max_execution_time') }}</span> <span class="input-help">{{ $t('php.max_execution_time') }}</span>
</el-form-item> </el-form-item>
@ -51,7 +51,7 @@
<el-col :span="9"> <el-col :span="9">
<el-form-item label="default_socket_timeout" prop="default_socket_timeout"> <el-form-item label="default_socket_timeout" prop="default_socket_timeout">
<el-input clearable v-model.number="form.default_socket_timeout" maxlength="15"> <el-input clearable v-model.number="form.default_socket_timeout" maxlength="15">
<template #append>{{ $t('php.second') }}</template> <template #append>{{ $t('commons.units.second') }}</template>
</el-input> </el-input>
<span class="input-help">{{ $t('php.default_socket_timeout') }}</span> <span class="input-help">{{ $t('php.default_socket_timeout') }}</span>
</el-form-item> </el-form-item>
@ -68,7 +68,7 @@
</el-form-item> </el-form-item>
<el-form-item label="max_input_time" prop="max_input_time"> <el-form-item label="max_input_time" prop="max_input_time">
<el-input clearable v-model.number="form.max_input_time" maxlength="15"> <el-input clearable v-model.number="form.max_input_time" maxlength="15">
<template #append>{{ $t('php.second') }}</template> <template #append>{{ $t('commons.units.second') }}</template>
</el-input> </el-input>
<span class="input-help">{{ $t('php.max_input_time') }}</span> <span class="input-help">{{ $t('php.max_input_time') }}</span>
</el-form-item> </el-form-item>

View File

@ -7,12 +7,12 @@
</el-form-item> </el-form-item>
<el-form-item prop="cycle" :label="$t('website.cycle')"> <el-form-item prop="cycle" :label="$t('website.cycle')">
<el-input v-model.number="form.cycle" maxlength="15"> <el-input v-model.number="form.cycle" maxlength="15">
<template #append>{{ $t('website.seconds') }}</template> <template #append>{{ $t('commons.units.second') }}</template>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="frequency" :label="$t('website.frequency')"> <el-form-item prop="frequency" :label="$t('website.frequency')">
<el-input v-model.number="form.frequency" maxlength="15"> <el-input v-model.number="form.frequency" maxlength="15">
<template #append>{{ $t('website.count') }}</template> <template #append>{{ $t('commons.units.time') }}</template>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-alert <el-alert

View File

@ -139,7 +139,7 @@
</el-col> </el-col>
</el-row> </el-row>
</el-form-item> </el-form-item>
<el-form-item :label="$t('app.name')" prop="appinstall.name"> <el-form-item :label="$t('commons.table.name')" prop="appinstall.name">
<el-input v-model.trim="website.appinstall.name"></el-input> <el-input v-model.trim="website.appinstall.name"></el-input>
</el-form-item> </el-form-item>
<Params <Params
@ -181,7 +181,11 @@
<el-option :label="$t('website.unix')" :value="'unix'"></el-option> <el-option :label="$t('website.unix')" :value="'unix'"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item v-if="website.proxyType === 'tcp'" :label="$t('website.port')" prop="port"> <el-form-item
v-if="website.proxyType === 'tcp'"
:label="$t('commons.table.port')"
prop="port"
>
<el-input v-model.number="website.port"></el-input> <el-input v-model.number="website.port"></el-input>
</el-form-item> </el-form-item>
</div> </div>

View File

@ -118,7 +118,11 @@
<MsgInfo :info="row.remark" /> <MsgInfo :info="row.remark" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('website.protocol')" prop="protocol" width="90px"></el-table-column> <el-table-column
:label="$t('commons.table.protocol')"
prop="protocol"
width="90px"
></el-table-column>
<el-table-column :label="$t('website.expireDate')"> <el-table-column :label="$t('website.expireDate')">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<div v-show="row.showdate"> <div v-show="row.showdate">
@ -383,7 +387,7 @@ const buttons = [
}, },
}, },
{ {
label: i18n.global.t('app.delete'), label: i18n.global.t('commons.button.delete'),
click: function (row: Website.Website) { click: function (row: Website.Website) {
openDelete(row); openDelete(row);
}, },