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

Refine English translation again and again (#7353)

This commit is contained in:
John Niang 2024-12-12 18:46:01 +08:00 committed by GitHub
parent 590238dc13
commit c95d61397d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
24 changed files with 121 additions and 106 deletions

View File

@ -6,7 +6,7 @@
<div class="flex flex-wrap gap-4"> <div class="flex flex-wrap gap-4">
<el-tag effect="dark" type="success">{{ data.app }}</el-tag> <el-tag effect="dark" type="success">{{ data.app }}</el-tag>
<Status :key="refresh" :status="data.status"></Status> <Status :key="refresh" :status="data.status"></Status>
<el-tag>{{ $t('app.version') }}:{{ data.version }}</el-tag> <el-tag>{{ $t('app.version') }}{{ $t('commons.colon') }}{{ data.version }}</el-tag>
</div> </div>
<div class="mt-0.5"> <div class="mt-0.5">
@ -217,13 +217,13 @@ const onOperate = async (operation: string) => {
const getTitle = (key: string) => { const getTitle = (key: string) => {
switch (key) { switch (key) {
case 'openresty': case 'openresty':
return i18n.global.t('website.website'); return i18n.global.t('website.website', 2);
case 'mysql': case 'mysql':
return 'MySQL ' + i18n.global.t('menu.database'); return 'MySQL ' + i18n.global.t('menu.database').toLowerCase();
case 'postgresql': case 'postgresql':
return 'PostgreSQL ' + i18n.global.t('menu.database'); return 'PostgreSQL ' + i18n.global.t('menu.database').toLowerCase();
case 'redis': case 'redis':
return 'Redis ' + i18n.global.t('menu.database'); return 'Redis ' + i18n.global.t('menu.database').toLowerCase();
} }
}; };

View File

@ -1,6 +1,6 @@
<template> <template>
<div> <div>
<el-popover placement="bottom-start" :width="240" trigger="click"> <el-popover placement="bottom-start" :width="260" trigger="click">
<template #reference> <template #reference>
<el-button round class="timer-button">{{ $t('commons.table.tableSetting') }}</el-button> <el-button round class="timer-button">{{ $t('commons.table.tableSetting') }}</el-button>
</template> </template>

View File

@ -17,7 +17,7 @@ const message = {
create: 'Create ', create: 'Create ',
add: 'Add ', add: 'Add ',
save: 'Save ', save: 'Save ',
set: 'Configure', set: 'Edit config',
sync: 'Sync ', sync: 'Sync ',
delete: 'Delete', delete: 'Delete',
edit: 'Edit ', edit: 'Edit ',
@ -46,7 +46,7 @@ const message = {
retry: 'Retry', retry: 'Retry',
upload: 'Upload', upload: 'Upload',
download: 'Download', download: 'Download',
init: 'Init', init: 'Initialize',
verify: 'Verify', verify: 'Verify',
saveAndEnable: 'Save and enable', saveAndEnable: 'Save and enable',
import: 'Import', import: 'Import',
@ -105,7 +105,7 @@ const message = {
forward: 'Forward', forward: 'Forward',
protocol: 'Protocol', protocol: 'Protocol',
tableSetting: 'Table setting', tableSetting: 'Table setting',
refreshRate: 'Rate', refreshRate: 'Refresh rate',
refreshRateUnit: 'No refresh | {n} second/time | {n} seconds/time', refreshRateUnit: 'No refresh | {n} second/time | {n} seconds/time',
selectColumn: 'Select column', selectColumn: 'Select column',
}, },
@ -285,15 +285,15 @@ const message = {
uperr: 'Error', uperr: 'Error',
}, },
units: { units: {
second: 'second | seconds', second: ' second | second | seconds',
minute: 'minute | minutes', minute: 'minute | minute | minutes',
hour: 'hour | hours', hour: 'hour | hour | hours',
day: 'day | days', day: 'day | day | days',
week: 'week | weeks', week: 'week | week | weeks',
month: 'month | months', month: 'month | month | months',
year: 'year | years', year: 'year | year | years',
time: 'rqm', time: 'rqm',
core: 'core | cores', core: 'core | core | cores',
millisecond: 'millisecond | milliseconds', millisecond: 'millisecond | milliseconds',
secondUnit: 's', secondUnit: 's',
minuteUnit: 'min', minuteUnit: 'min',
@ -326,6 +326,7 @@ const message = {
container: 'Container | Containers', container: 'Container | Containers',
cronjob: 'Cron Job | Cron Jobs', cronjob: 'Cron Job | Cron Jobs',
host: 'Host | Hosts', host: 'Host | Hosts',
system: 'System',
security: 'Security', security: 'Security',
files: 'File Browser', files: 'File Browser',
monitor: 'Monitoring', monitor: 'Monitoring',
@ -366,13 +367,13 @@ const message = {
mem: 'System', mem: 'System',
swapMem: 'Swap partition', swapMem: 'Swap partition',
runSmoothly: 'Run smoothly', runSmoothly: 'Low load',
runNormal: 'Run normally', runNormal: 'Moderate load',
runSlowly: 'Run slowly', runSlowly: 'High load',
runJam: 'Run blockaged', runJam: 'Heavy load',
core: 'Physical core', core: 'Physical core',
logicCore: 'Logic core', logicCore: 'Logical core',
loadAverage: 'Load average in the last 1 minute | Load average in the last {n} minutes', loadAverage: 'Load average in the last 1 minute | Load average in the last {n} minutes',
load: 'Load', load: 'Load',
mount: 'Mount point', mount: 'Mount point',
@ -447,10 +448,10 @@ const message = {
passwordHelper: 'Unable to retrieve, please modify', passwordHelper: 'Unable to retrieve, please modify',
local: 'Local', local: 'Local',
remote: 'Remote', remote: 'Remote',
remoteDB: 'Remote server', remoteDB: 'Remote server | Remote servers',
manageRemoteDB: 'Manage remote servers', manageRemoteDB: 'Manage remote servers',
createRemoteDB: 'Bind remote server', createRemoteDB: 'Bind @.lower:database.remoteDB',
unBindRemoteDB: 'Unbind remote server', unBindRemoteDB: 'Unbind @.lower:database.remoteDB',
unBindForce: 'Force unbind', unBindForce: 'Force unbind',
unBindForceHelper: 'Ignore all errors during the unbinding process to ensure the final operation is successful', unBindForceHelper: 'Ignore all errors during the unbinding process to ensure the final operation is successful',
unBindRemoteHelper: unBindRemoteHelper:
@ -642,7 +643,7 @@ const message = {
downLogHelper2: 'This will download the recent {0} logs from container {0}. Do you want to continue?', downLogHelper2: 'This will download the recent {0} logs from container {0}. Do you want to continue?',
cleanLogHelper: `This will require restarting the container and can't be undone. Do you want to continue?`, cleanLogHelper: `This will require restarting the container and can't be undone. Do you want to continue?`,
newName: 'New name', newName: 'New name',
source: 'Resource rate', source: 'Resource usage',
cpuUsage: 'CPU usage', cpuUsage: 'CPU usage',
cpuTotal: 'CPU total', cpuTotal: 'CPU total',
core: 'Core', core: 'Core',
@ -904,9 +905,9 @@ const message = {
cronSpecHelper: 'Enter the correct execution period', cronSpecHelper: 'Enter the correct execution period',
cleanHelper: cleanHelper:
'This operation records all job execution records, backup files, and log files. Do you want to continue?', 'This operation records all job execution records, backup files, and log files. Do you want to continue?',
directory: 'Backup Directory', directory: 'Backup directory',
sourceDir: 'Backup Directory', sourceDir: 'Backup directory',
snapshot: 'System Snapshot', snapshot: 'System snapshot',
allOptionHelper: `The current task plan is to back up all [{0}]. Direct download isn't supported at the moment. You can check the backup list of [{0}] menu.`, allOptionHelper: `The current task plan is to back up all [{0}]. Direct download isn't supported at the moment. You can check the backup list of [{0}] menu.`,
exclusionRules: 'Exclusive rule', exclusionRules: 'Exclusive rule',
exclusionRulesHelper: 'The exclusion rules will apply to all compression operations of this backup.', exclusionRulesHelper: 'The exclusion rules will apply to all compression operations of this backup.',
@ -941,14 +942,13 @@ const message = {
shellContent: 'Script', shellContent: 'Script',
errRecord: 'Incorrect logging', errRecord: 'Incorrect logging',
errHandle: 'Cronjob execution failure', errHandle: 'Cronjob execution failure',
// noRecord: 'The execution did not generate any logs',
noRecord: 'Trigger the Cron Job, and you will see the records here.', noRecord: 'Trigger the Cron Job, and you will see the records here.',
cleanData: 'Clean data', cleanData: 'Clean data',
cleanDataHelper: 'Delete the backup file generated during this task.', cleanDataHelper: 'Delete the backup file generated during this task.',
noLogs: 'No task output yet...', noLogs: 'No task output yet...',
errPath: 'Backup path [{0}] error, cannot download!', errPath: 'Backup path [{0}] error, cannot download!',
cutWebsiteLog: 'Cut Website Log', cutWebsiteLog: 'Website log rotation',
cutWebsiteLogHelper: 'The cut log files will be backed up to the backup directory of 1Panel', cutWebsiteLogHelper: 'The rotated log files will be backed up to the backup directory of 1Panel.',
requestExpirationTime: 'Upload request expiration time(Hours)', requestExpirationTime: 'Upload request expiration time(Hours)',
unitHours: 'Unit: Hours', unitHours: 'Unit: Hours',
@ -1073,7 +1073,7 @@ const message = {
dnsTestFailed: `DNS configuration information isn't available.`, dnsTestFailed: `DNS configuration information isn't available.`,
}, },
fail2ban: { fail2ban: {
sshPort: 'Listen to SSH Port', sshPort: 'Listen to SSH port',
sshPortHelper: 'Current Fail2ban listens to the SSH connection port of the host', sshPortHelper: 'Current Fail2ban listens to the SSH connection port of the host',
noFail2ban: `Fail2ban service isn't detected. Refer to the official documentation to install.`, noFail2ban: `Fail2ban service isn't detected. Refer to the official documentation to install.`,
unActive: `The Fail2ban service isn't enabled at present.`, unActive: `The Fail2ban service isn't enabled at present.`,
@ -1081,24 +1081,24 @@ const message = {
fail2banChange: 'Fail2ban Configuration Modification', fail2banChange: 'Fail2ban Configuration Modification',
ignoreHelper: 'The IP list in the whitelist will be ignored for blocking. Do you want to continue?', ignoreHelper: 'The IP list in the whitelist will be ignored for blocking. Do you want to continue?',
bannedHelper: 'The IP list in the blacklist will be blocked by the server. Do you want to continue?', bannedHelper: 'The IP list in the blacklist will be blocked by the server. Do you want to continue?',
maxRetry: 'Maximum Retry Attempts', maxRetry: 'Maximum retry attempts',
banTime: 'Ban Time', banTime: 'Ban time',
banTimeHelper: 'Default ban time is 10 minutes, -1 indicates permanent ban', banTimeHelper: 'Default ban time is 10 minutes, -1 indicates permanent ban',
banTimeRule: 'Please enter a valid ban time or -1', banTimeRule: 'Please enter a valid ban time or -1',
banAllTime: 'Permanent Ban', banAllTime: 'Permanent ban',
findTime: 'Discovery Period', findTime: 'Discovery period',
banAction: 'Ban Action', banAction: 'Ban action',
banActionOption: 'Ban specified IP addresses using {0}', banActionOption: 'Ban specified IP addresses using {0}',
allPorts: ' (All Ports)', allPorts: ' (All Ports)',
ignoreIP: 'IP Whitelist', ignoreIP: 'IP whitelist',
bannedIP: 'IP Blacklist', bannedIP: 'IP blacklist',
logPath: 'Log Path', logPath: 'Log path',
logPathHelper: 'Default is /var/log/secure or /var/log/auth.log', logPathHelper: 'Default is /var/log/secure or /var/log/auth.log',
}, },
ftp: { ftp: {
ftp: 'FTP Account', ftp: 'FTP account | FTP accounts',
noFtp: `FTP (pure-ftpd) service isn't detected. Refer to the official documentation to install.`, noFtp: `FTP (pure-ftpd) service isn't detected. Refer to the official documentation to install.`,
operation: 'Perform [{0}] operation on FTP service, continue?', operation: 'This will perform "{0}" operation on FTP service. Do you want to continue?',
noPasswdMsg: 'Can not get the current FTP account password, please set the password and try again! ', noPasswdMsg: 'Can not get the current FTP account password, please set the password and try again! ',
enableHelper: enableHelper:
'Enabling the selected FTP account will restore its access permissions. Do you want to continue?', 'Enabling the selected FTP account will restore its access permissions. Do you want to continue?',
@ -1115,39 +1115,40 @@ const message = {
'Stopping scheduled execution will prevent this scan task from running automatically. Do you want to continue?', 'Stopping scheduled execution will prevent this scan task from running automatically. Do you want to continue?',
enableMsg: enableMsg:
'Enabling scheduled execution will allow this scan task to run automatically at regular intervals. Do you want to continue?', 'Enabling scheduled execution will allow this scan task to run automatically at regular intervals. Do you want to continue?',
showFresh: 'Show Virus Database Service', showFresh: 'Show signature updater service',
hideFresh: 'Hide Virus Database Service', hideFresh: 'Hide signature updater service',
clamHelper: clamHelper:
'The minimum recommended configuration for ClamAV is: 3 GiB of RAM or more, single-core CPU with 2.0 GHz or higher, and at least 5 GiB of available hard disk space.', 'The minimum recommended configuration for ClamAV is: 3 GiB of RAM or more, single-core CPU with 2.0 GHz or higher, and at least 5 GiB of available hard disk space.',
noClam: 'ClamAV service not detected, please refer to the official documentation for installation!', noClam: 'ClamAV service not detected, please refer to the official documentation for installation!',
notStart: 'ClamAV service is currently not running, please start it first!', notStart: 'ClamAV service is currently not running, please start it first!',
removeRecord: 'Delete Report Files', removeRecord: 'Delete peport files',
noRecords: 'Click the "Trigger" button to start the scan and you will see records here.',
removeResultHelper: 'Delete report files generated during task execution to free up storage space.', removeResultHelper: 'Delete report files generated during task execution to free up storage space.',
removeInfected: 'Delete Virus Files', removeInfected: 'Delete virus files',
removeInfectedHelper: removeInfectedHelper:
'Delete virus files detected during the task to ensure server security and normal operation.', 'Delete virus files detected during the task to ensure server security and normal operation.',
clamCreate: 'Create Scan Rules', clamCreate: 'Create scan rule',
infectedStrategy: 'Infected Strategy', infectedStrategy: 'Infected strategy',
remove: 'Delete', remove: 'Delete',
removeHelper: 'Delete virus files, choose carefully!', removeHelper: 'Delete virus files, choose carefully!',
move: 'Move', move: 'Move',
moveHelper: 'Move virus files to specified directory', moveHelper: 'Move virus files to specified directory',
copy: 'Copy', copy: 'Copy',
copyHelper: 'Copy virus files to specified directory', copyHelper: 'Copy virus files to specified directory',
none: 'Do Nothing', none: 'Do nothing',
noneHelper: 'Take no action on virus files', noneHelper: 'Take no action on virus files',
scanDir: 'Scan Directory', scanDir: 'Scan directory',
infectedDir: 'Infected Directory', infectedDir: 'Infected directory',
scanDate: 'Scan Date', scanDate: 'Scan Date',
scanResult: 'Scan log tail', scanResult: 'Scan logs tail',
tail: 'Lines', tail: 'Lines',
scanTime: 'Time Taken', scanTime: 'Time taken',
infectedFiles: 'Infected Files', infectedFiles: 'Infected files',
log: 'Details', log: 'Details',
clamConf: 'Scan Configuration', clamConf: 'Clam AV daemon',
clamLog: 'Scan Logs', clamLog: '@:toolbox.clam.clamConf logs',
freshClam: 'Update Virus Definitions', freshClam: 'FreshClam',
freshClamLog: 'Update Virus Definitions Logs', freshClamLog: '@:toolbox.clam.freshClam logs',
alertHelper: 'Professional version supports scheduled scan and SMS alert', alertHelper: 'Professional version supports scheduled scan and SMS alert',
alertTitle: 'Virus scan task {0} detected infected file alert', alertTitle: 'Virus scan task {0} detected infected file alert',
}, },
@ -1243,6 +1244,7 @@ const message = {
downloadProcess: 'Download progress', downloadProcess: 'Download progress',
downloading: 'Downloading...', downloading: 'Downloading...',
infoDetail: 'File properties', infoDetail: 'File properties',
root: 'Root directory',
list: 'File list', list: 'File list',
sub: 'Include subdirectories', sub: 'Include subdirectories',
downloadSuccess: 'Successfully downloaded', downloadSuccess: 'Successfully downloaded',
@ -1311,7 +1313,7 @@ const message = {
panelInstallDir: `1Panel installation directory can't be deleted`, panelInstallDir: `1Panel installation directory can't be deleted`,
}, },
ssh: { ssh: {
autoStart: 'Auto Start', autoStart: 'Auto start',
enable: 'Enable Autostart', enable: 'Enable Autostart',
disable: 'Disable Autostart', disable: 'Disable Autostart',
sshAlert: sshAlert:
@ -1666,7 +1668,7 @@ const message = {
upgradeNotes: 'Release note', upgradeNotes: 'Release note',
upgradeNow: 'Upgrade now', upgradeNow: 'Upgrade now',
source: 'Download source', source: 'Download source',
hasNewVersion: 'New version available', hasNewVersion: 'Update available',
about: 'About', about: 'About',
project: 'GitHub', project: 'GitHub',
@ -1980,7 +1982,7 @@ const message = {
nginxConfig: 'Nginx configuration', nginxConfig: 'Nginx configuration',
websiteConfig: 'Website settings', websiteConfig: 'Website settings',
basic: 'Basic', basic: 'Basic',
source: 'Configuration source', source: 'Configuration',
security: 'Security', security: 'Security',
log: 'Logs', log: 'Logs',
nginxPer: 'Performance tuning', nginxPer: 'Performance tuning',
@ -2059,7 +2061,7 @@ const message = {
data: 'data', data: 'data',
ever: 'permanent', ever: 'permanent',
nextYear: 'One year later', nextYear: 'One year later',
noLog: 'There are currently no logs...', noLog: 'No logs found',
defaultServer: 'Set default site', defaultServer: 'Set default site',
noDefaultServer: 'Not set', noDefaultServer: 'Not set',
defaultServerHelper: defaultServerHelper:
@ -2100,7 +2102,7 @@ const message = {
disabled: 'Stopped', disabled: 'Stopped',
startProxy: 'This will start reverse proxy. Do you want to continue?', startProxy: 'This will start reverse proxy. Do you want to continue?',
stopProxy: 'This will stop the reverse proxy. Do you want to continue?', stopProxy: 'This will stop the reverse proxy. Do you want to continue?',
proxyFile: 'Source', sourceFile: 'View source',
proxyHelper1: 'When accessing this directory, the content of the target URL will be returned and displayed.', proxyHelper1: 'When accessing this directory, the content of the target URL will be returned and displayed.',
proxyPassHelper: 'The target URL must be valid and accessible.', proxyPassHelper: 'The target URL must be valid and accessible.',
proxyHostHelper: 'Pass the domain name in the request header to the proxy server.', proxyHostHelper: 'Pass the domain name in the request header to the proxy server.',
@ -2302,18 +2304,18 @@ const message = {
notSupport: notSupport:
'No system firewall detected (firewalld or ufw). Please refer to the official documentation for installation.', 'No system firewall detected (firewalld or ufw). Please refer to the official documentation for installation.',
ccDeny: 'CC Protection', ccDeny: 'CC Protection',
ipWhiteList: 'IP Whitelist', ipWhiteList: 'IP whitelist',
ipBlockList: 'IP Blacklist', ipBlockList: 'IP blacklist',
fileExtBlockList: 'File extension blacklist', fileExtBlockList: 'File extension blacklist',
urlWhiteList: 'URL Whitelist', urlWhiteList: 'URL whitelist',
urlBlockList: 'URL Blacklist', urlBlockList: 'URL blacklist',
argsCheck: 'GET parameter check', argsCheck: 'GET parameter check',
postCheck: 'POST parameter verification', postCheck: 'POST parameter verification',
cookieBlockList: 'Cookie Blacklist', cookieBlockList: 'Cookie Blacklist',
firewall: 'Firewall', firewall: 'Firewall',
dockerHelper: `Linux firewall "{0}" can't disable Docker port mapping. The application can edit the parameters on the "App Store -> Installed" page to control whether the port is released.`, dockerHelper: `Linux firewall "{0}" can't disable Docker port mapping. The application can edit the parameters on the "App Store -> Installed" page to control whether the port is released.`,
quickJump: 'Go there now', quickJump: 'Quick access',
used: 'Used', used: 'Used',
unUsed: 'Unused', unUsed: 'Unused',
firewallHelper: '{0} system firewall', firewallHelper: '{0} system firewall',
@ -2471,25 +2473,27 @@ const message = {
supervisor: { supervisor: {
loadStatusErr: 'Failed to retrieve process status, please check the status of the supervisor service.', loadStatusErr: 'Failed to retrieve process status, please check the status of the supervisor service.',
notSupport: `Supervisor isn't detected. Refer to the official document to install.`, notSupport: `Supervisor isn't detected. Refer to the official document to install.`,
list: 'Daemon process', list: 'Daemon process | Daemon processes',
config: 'Supervisor configuration', config: 'Supervisor configuration',
primaryConfig: 'Main configuration file location', primaryConfig: 'Main configuration file location',
notSupportCrl: `The supervisorctl isn't detected. Refer to the official document to install.`, notSupportCrl: `The supervisorctl isn't detected. Refer to the official document to install.`,
user: 'User', user: 'User',
command: 'Command', command: 'Command',
dir: 'Directory', dir: 'Directory',
numprocs: 'Numprocs', numprocs: 'Number of process',
initWarn: initWarn:
'The initialization operation needs to modify the [include] files parameter of the configuration file, the directory where the modified service configuration file is located: 1panel installation directory/1panel/tools/supervisord/supervisor.d/', 'This will modify "files" value in "[include"] section in the main configuration file. The directory of other configuration file will be: "{1Panel installation directory}/1panel/tools/supervisord/supervisor.d/".',
operatorHelper: 'Operation {1} will be performed on {0}, continue? ', operatorHelper: 'Operation {1} will be performed on {0}, continue? ',
uptime: 'running time', uptime: 'Running time',
notStartWarn: `Supervisor isn't started. Start it first.`, notStartWarn: `Supervisor isn't started. Start it first.`,
serviceName: 'Service name', serviceName: 'Service name',
initHelper: // initHelper:
'The initialization process will modify the configuration file, causing all existing processes to stop, please confirm the risk in advance', // 'The initialization process will modify the configuration file, causing all existing daemon processes to stop, please confirm the risk in advance',
// initHelper: '尚未初始化 Supervisor ,请先初始化',
initHelper: `Supervisor service isn't initialized. Click "Initialize" to initialize.`,
serviceNameHelper: 'Supervisor service name managed by systemctl, usually supervisor or supervisord', serviceNameHelper: 'Supervisor service name managed by systemctl, usually supervisor or supervisord',
restartHelper: restartHelper:
'Initialization will restart the service, causing all the original daemon processes to close', 'This will restart the service after initialization, which causes all the existing daemon processes to stop.',
msg: 'Message', msg: 'Message',
RUNNING: 'Running', RUNNING: 'Running',
STOPPED: 'Stopped', STOPPED: 'Stopped',

View File

@ -321,6 +321,7 @@ const message = {
container: '容器', container: '容器',
cronjob: '計劃任務', cronjob: '計劃任務',
host: '主機', host: '主機',
system: '系統',
files: '文件', files: '文件',
monitor: '監控', monitor: '監控',
terminal: '終端', terminal: '終端',
@ -1064,6 +1065,7 @@ const message = {
noClam: '未檢測到 ClamAV 服務請參考官方文檔進行安裝', noClam: '未檢測到 ClamAV 服務請參考官方文檔進行安裝',
notStart: '當前未 ClamAV 服務請先開啟', notStart: '當前未 ClamAV 服務請先開啟',
removeRecord: '刪除報告文件', removeRecord: '刪除報告文件',
noRecords: '點擊執行按鈕開始掃描掃描結果將會記錄在這裏',
removeResultHelper: '刪除任務執行過程中生成的報告文件以清理存儲空間', removeResultHelper: '刪除任務執行過程中生成的報告文件以清理存儲空間',
removeInfected: '刪除病毒文件', removeInfected: '刪除病毒文件',
removeInfectedHelper: '刪除任務檢測到的病毒文件以確保伺服器的安全和正常運行', removeInfectedHelper: '刪除任務檢測到的病毒文件以確保伺服器的安全和正常運行',
@ -1967,7 +1969,7 @@ const message = {
disabled: '已停止', disabled: '已停止',
startProxy: '開啟反向代理', startProxy: '開啟反向代理',
stopProxy: '關閉反向代理', stopProxy: '關閉反向代理',
proxyFile: '源文', sourceFile: '源文',
proxyHelper1: '訪問這個目錄時將會把目標URL的內容返回並顯示', proxyHelper1: '訪問這個目錄時將會把目標URL的內容返回並顯示',
proxyPassHelper: '代理的站點必須為可正常訪問的URL', proxyPassHelper: '代理的站點必須為可正常訪問的URL',
proxyHostHelper: '將域名添加到請求頭傳遞到代理服務器', proxyHostHelper: '將域名添加到請求頭傳遞到代理服務器',

View File

@ -320,6 +320,7 @@ const message = {
container: '容器', container: '容器',
cronjob: '计划任务', cronjob: '计划任务',
host: '主机', host: '主机',
system: '系统',
files: '文件', files: '文件',
monitor: '监控', monitor: '监控',
terminal: '终端', terminal: '终端',
@ -1065,6 +1066,7 @@ const message = {
noClam: '未检测到 ClamAV 服务请参考官方文档进行安装', noClam: '未检测到 ClamAV 服务请参考官方文档进行安装',
notStart: '当前未开启 ClamAV 服务请先开启', notStart: '当前未开启 ClamAV 服务请先开启',
removeRecord: '删除报告文件', removeRecord: '删除报告文件',
noRecords: '点击执行按钮开始扫描扫描结果将会记录在这里',
removeResultHelper: '删除任务执行过程中生成的报告文件以清理存储空间', removeResultHelper: '删除任务执行过程中生成的报告文件以清理存储空间',
removeInfected: '删除病毒文件', removeInfected: '删除病毒文件',
removeInfectedHelper: '删除任务检测到的病毒文件以确保服务器的安全和正常运行', removeInfectedHelper: '删除任务检测到的病毒文件以确保服务器的安全和正常运行',
@ -1967,7 +1969,7 @@ const message = {
disabled: '已停止', disabled: '已停止',
startProxy: '开启反向代理', startProxy: '开启反向代理',
stopProxy: '关闭反向代理', stopProxy: '关闭反向代理',
proxyFile: '源文', sourceFile: '源文',
proxyHelper1: '访问这个目录时将会把目标URL的内容返回并显示', proxyHelper1: '访问这个目录时将会把目标URL的内容返回并显示',
proxyPassHelper: '代理的站点必须为可正常访问的URL', proxyPassHelper: '代理的站点必须为可正常访问的URL',
proxyHostHelper: '将域名添加到请求头传递到代理服务器', proxyHostHelper: '将域名添加到请求头传递到代理服务器',

View File

@ -7,7 +7,7 @@ const hostRouter = {
redirect: '/hosts/security', redirect: '/hosts/security',
meta: { meta: {
icon: 'p-host', icon: 'p-host',
title: 'menu.host', title: 'menu.system',
}, },
children: [ children: [
{ {

View File

@ -227,7 +227,7 @@
</el-card> </el-card>
<div v-if="dbOptionsLocal.length === 0 && dbOptionsRemote.length === 0"> <div v-if="dbOptionsLocal.length === 0 && dbOptionsRemote.length === 0">
<LayoutContent :title="'MySQL ' + $t('menu.database')" :divider="true"> <LayoutContent :title="'MySQL ' + $t('menu.database').toLowerCase()" :divider="true">
<template #main> <template #main>
<div class="app-warn"> <div class="app-warn">
<div class="flex flex-col gap-2 items-center justify-center w-full sm:flex-row"> <div class="flex flex-col gap-2 items-center justify-center w-full sm:flex-row">

View File

@ -187,7 +187,7 @@
</el-card> </el-card>
<div v-if="dbOptionsLocal.length === 0 && dbOptionsRemote.length === 0"> <div v-if="dbOptionsLocal.length === 0 && dbOptionsRemote.length === 0">
<LayoutContent :title="'PostgreSQL ' + $t('menu.database')" :divider="true"> <LayoutContent :title="'PostgreSQL ' + $t('menu.database').toLowerCase()" :divider="true">
<template #main> <template #main>
<div class="app-warn"> <div class="app-warn">
<div class="flex flex-col gap-2 items-center justify-center w-full sm:flex-row"> <div class="flex flex-col gap-2 items-center justify-center w-full sm:flex-row">

View File

@ -2,7 +2,7 @@
<div v-loading="loading"> <div v-loading="loading">
<LayoutContent> <LayoutContent>
<template #title> <template #title>
<back-button name="PostgreSQL" :header="$t('database.remoteDB')" /> <back-button name="PostgreSQL" :header="$t('database.remoteDB', 2)" />
</template> </template>
<template #toolbar> <template #toolbar>
<div class="flex justify-between gap-2 flex-wrap sm:flex-row"> <div class="flex justify-between gap-2 flex-wrap sm:flex-row">

View File

@ -96,7 +96,7 @@
</div> </div>
<div v-if="dbOptionsLocal.length === 0 && dbOptionsRemote.length === 0"> <div v-if="dbOptionsLocal.length === 0 && dbOptionsRemote.length === 0">
<LayoutContent :title="'Redis ' + $t('menu.database')" :divider="true"> <LayoutContent :title="'Redis ' + $t('menu.database').toLowerCase()" :divider="true">
<template #main> <template #main>
<div class="app-warn"> <div class="app-warn">
<div class="flex flex-col gap-2 items-center justify-center w-full sm:flex-row"> <div class="flex flex-col gap-2 items-center justify-center w-full sm:flex-row">

View File

@ -2,7 +2,7 @@
<div v-loading="loading"> <div v-loading="loading">
<LayoutContent> <LayoutContent>
<template #title> <template #title>
<back-button name="Redis" :header="$t('database.remoteDB')" /> <back-button name="Redis" :header="$t('database.remoteDB', 2)" />
</template> </template>
<template #toolbar> <template #toolbar>
<div class="flex justify-between gap-2 flex-wrap sm:flex-row"> <div class="flex justify-between gap-2 flex-wrap sm:flex-row">

View File

@ -581,17 +581,23 @@ function loadUpTime(uptime: number) {
if (hours !== 0) { if (hours !== 0) {
return ( return (
hours + hours +
i18n.global.t('commons.units.hour') + i18n.global.t('commons.units.hour', hours) +
' ' + ' ' +
minutes + minutes +
i18n.global.t('commons.units.minute') + i18n.global.t('commons.units.minute', minutes) +
' ' + ' ' +
seconds + seconds +
i18n.global.t('commons.units.second') i18n.global.t('commons.units.second', seconds)
); );
} }
if (minutes !== 0) { if (minutes !== 0) {
return minutes + i18n.global.t('commons.units.minute') + ' ' + seconds + i18n.global.t('commons.units.second'); return (
minutes +
i18n.global.t('commons.units.minute', minutes) +
' ' +
seconds +
i18n.global.t('commons.units.second', seconds)
);
} }
return seconds + i18n.global.t('commons.units.second'); return seconds + i18n.global.t('commons.units.second');
} }

View File

@ -47,7 +47,8 @@
</template> </template>
</el-popover> </el-popover>
<span class="input-help"> <span class="input-help">
( {{ formatNumber(currentInfo.cpuUsed) }} / {{ currentInfo.cpuTotal }} ) {{ $t('commons.units.core') }} ( {{ formatNumber(currentInfo.cpuUsed) }} / {{ currentInfo.cpuTotal }} )
{{ $t('commons.units.core', currentInfo.cpuTotal) }}
</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

@ -79,7 +79,7 @@
> >
<template #header> <template #header>
<DrawerHeader <DrawerHeader
:header="$t('commons.button.' + operate) + $t('terminal.quickCommand')" :header="$t('commons.button.' + operate) + $t('terminal.quickCommand').toLowerCase()"
:back="handleClose" :back="handleClose"
/> />
</template> </template>

View File

@ -22,7 +22,7 @@
<template #toolbar v-if="clamStatus.isExist"> <template #toolbar v-if="clamStatus.isExist">
<div class="flex w-full flex-col gap-4 md:justify-between md:flex-row"> <div class="flex w-full flex-col gap-4 md:justify-between md:flex-row">
<div class="flex flex-wrap gap-4"> <div class="flex flex-wrap gap-4">
<el-button type="primary" :disabled="!clamStatus.isRunning" @click="onOpenDialog('add')"> <el-button type="primary" :disabled="!clamStatus.isRunning" @click="onOpenDialog('create')">
{{ $t('toolbox.clam.clamCreate') }} {{ $t('toolbox.clam.clamCreate') }}
</el-button> </el-button>
<el-button <el-button
@ -366,7 +366,7 @@ const buttons = [
}, },
}, },
{ {
label: i18n.global.t('cronjob.record'), label: i18n.global.t('cronjob.viewRecords'),
click: (row: Toolbox.ClamInfo) => { click: (row: Toolbox.ClamInfo) => {
onOpenRecord(row); onOpenRecord(row);
}, },

View File

@ -166,7 +166,7 @@
</div> </div>
<div class="app-warn" v-show="!hasRecords"> <div class="app-warn" v-show="!hasRecords">
<div> <div>
<span>{{ $t('cronjob.noRecord') }}</span> <span>{{ $t('toolbox.clam.noRecords') }}</span>
<div> <div>
<img src="@/assets/images/no_app.svg" /> <img src="@/assets/images/no_app.svg" />
</div> </div>

View File

@ -11,7 +11,7 @@
<el-tag round v-if="!data.isActive" type="info"> <el-tag round v-if="!data.isActive" type="info">
{{ $t('commons.status.stopped') }} {{ $t('commons.status.stopped') }}
</el-tag> </el-tag>
<el-tag class="w-24">{{ $t('app.version') }}:{{ data.version }}</el-tag> <el-tag class="w-24">{{ $t('app.version') }}{{ $t('commons.colon') }}{{ data.version }}</el-tag>
</div> </div>
<div class="mt-0.5"> <div class="mt-0.5">
<el-button type="primary" v-if="!data.isActive" link @click="onOperate('ClamAV', 'start')"> <el-button type="primary" v-if="!data.isActive" link @click="onOperate('ClamAV', 'start')">

View File

@ -28,12 +28,12 @@
</el-card> </el-card>
</div> </div>
<div v-if="form.isExist"> <div v-if="form.isExist">
<LayoutContent v-loading="loading" title="FTP"> <LayoutContent v-loading="loading" :title="$t('toolbox.ftp.ftp', 2)">
<template #toolbar> <template #toolbar>
<div class="flex justify-between gap-2 flex-wrap sm:flex-row"> <div class="flex justify-between gap-2 flex-wrap sm:flex-row">
<div class="flex flex-wrap gap-3"> <div class="flex flex-wrap gap-3">
<el-button type="primary" :disabled="!form.isActive" @click="onOpenDialog('add')"> <el-button type="primary" :disabled="!form.isActive" @click="onOpenDialog('add')">
{{ $t('commons.button.add') }} FTP {{ $t('commons.button.add') }} {{ $t('toolbox.ftp.ftp') }}
</el-button> </el-button>
<el-button @click="onSync()" :disabled="!form.isActive"> <el-button @click="onSync()" :disabled="!form.isActive">
{{ $t('commons.button.sync') }} {{ $t('commons.button.sync') }}
@ -327,7 +327,7 @@ const onDelete = async (row: Toolbox.FtpInfo | null) => {
title: i18n.global.t('commons.button.delete'), title: i18n.global.t('commons.button.delete'),
names: names, names: names,
msg: i18n.global.t('commons.msg.operatorHelper', [ msg: i18n.global.t('commons.msg.operatorHelper', [
i18n.global.t('cronjob.cronTask'), i18n.global.t('toolbox.ftp.ftp'),
i18n.global.t('commons.button.delete'), i18n.global.t('commons.button.delete'),
]), ]),
api: null, api: null,

View File

@ -3,7 +3,7 @@
<el-card v-if="showStopped" class="mask-prompt"> <el-card v-if="showStopped" class="mask-prompt">
<span>{{ $t('tool.supervisor.notStartWarn') }}</span> <span>{{ $t('tool.supervisor.notStartWarn') }}</span>
</el-card> </el-card>
<LayoutContent :title="$t('tool.supervisor.list')" v-loading="loading"> <LayoutContent :title="$t('tool.supervisor.list', 2)" v-loading="loading">
<template #app> <template #app>
<SuperVisorStatus <SuperVisorStatus
@setting="setting" @setting="setting"
@ -14,7 +14,7 @@
</template> </template>
<template v-if="showTable" #toolbar> <template v-if="showTable" #toolbar>
<el-button type="primary" @click="openCreate"> <el-button type="primary" @click="openCreate">
{{ $t('commons.button.create') + $t('tool.supervisor.list') }} {{ $t('commons.button.create') + $t('tool.supervisor.list').toLowerCase() }}
</el-button> </el-button>
</template> </template>
<template #main v-if="showTable"> <template #main v-if="showTable">
@ -332,13 +332,13 @@ const buttons = [
}, },
}, },
{ {
label: i18n.global.t('website.proxyFile'), label: i18n.global.t('website.sourceFile'),
click: function (row: HostTool.SupersivorProcess) { click: function (row: HostTool.SupersivorProcess) {
getFile(row.name, 'config'); getFile(row.name, 'config');
}, },
}, },
{ {
label: i18n.global.t('website.log'), label: i18n.global.t('commons.button.log'),
click: function (row: HostTool.SupersivorProcess) { click: function (row: HostTool.SupersivorProcess) {
getFile(row.name, 'out.log'); getFile(row.name, 'out.log');
}, },

View File

@ -6,7 +6,7 @@
<div class="flex flex-wrap gap-4"> <div class="flex flex-wrap gap-4">
<el-tag effect="dark" type="success">{{ 'Supervisor' }}</el-tag> <el-tag effect="dark" type="success">{{ 'Supervisor' }}</el-tag>
<Status :key="data.status" :status="data.status"></Status> <Status :key="data.status" :status="data.status"></Status>
<el-tag>{{ $t('app.version') }}:{{ data.version }}</el-tag> <el-tag>{{ $t('app.version') }}{{ $t('commons.colon') }}{{ data.version }}</el-tag>
</div> </div>
<div class="mt-0.5" v-if="!data.init"> <div class="mt-0.5" v-if="!data.init">
<el-button type="primary" v-if="data.status != 'running'" link @click="onOperate('start')"> <el-button type="primary" v-if="data.status != 'running'" link @click="onOperate('start')">

View File

@ -7,7 +7,7 @@
:before-close="handleClose" :before-close="handleClose"
> >
<template #header> <template #header>
<DrawerHeader :header="$t('website.proxyFile')" :back="handleClose" /> <DrawerHeader :header="$t('website.sourceFile')" :back="handleClose" />
</template> </template>
<el-row v-loading="loading"> <el-row v-loading="loading">
<el-col :span="22" :offset="1"> <el-col :span="22" :offset="1">

View File

@ -70,7 +70,7 @@ const opRef = ref();
const buttons = [ const buttons = [
{ {
label: i18n.global.t('website.proxyFile'), label: i18n.global.t('website.sourceFile'),
click: function (row: Website.ProxyConfig) { click: function (row: Website.ProxyConfig) {
openEditFile(row); openEditFile(row);
}, },

View File

@ -7,7 +7,7 @@
:before-close="handleClose" :before-close="handleClose"
> >
<template #header> <template #header>
<DrawerHeader :header="$t('website.proxyFile')" :back="handleClose" /> <DrawerHeader :header="$t('website.sourceFile')" :back="handleClose" />
</template> </template>
<el-row v-loading="loading"> <el-row v-loading="loading">
<el-col :span="22" :offset="1"> <el-col :span="22" :offset="1">

View File

@ -87,7 +87,7 @@ const opRef = ref();
const buttons = [ const buttons = [
{ {
label: i18n.global.t('website.proxyFile'), label: i18n.global.t('website.sourceFile'),
click: function (row: Website.RedirectConfig) { click: function (row: Website.RedirectConfig) {
openEditFile(row); openEditFile(row);
}, },