From f320492164e1f52498bff0988d7ae310545a899d Mon Sep 17 00:00:00 2001 From: John Niang Date: Wed, 4 Dec 2024 21:32:59 +0800 Subject: [PATCH] Refine English translation (#7247) --- backend/i18n/lang/en.yaml | 10 +- frontend/src/lang/modules/en.ts | 1141 ++++++++--------- frontend/src/lang/modules/tw.ts | 5 +- frontend/src/lang/modules/zh.ts | 11 +- .../container/container/operate/index.vue | 4 +- .../container/container/upgrade/index.vue | 2 +- .../views/container/repo/operator/index.vue | 2 +- .../src/views/container/setting/index.vue | 6 +- frontend/src/views/cronjob/index.vue | 6 +- .../src/views/host/process/network/index.vue | 2 +- .../host/process/process/detail/index.vue | 2 +- .../src/views/host/process/process/index.vue | 2 +- .../src/views/host/ssh/ssh/address/index.vue | 2 +- frontend/src/views/host/ssh/ssh/index.vue | 2 +- .../src/views/host/ssh/ssh/port/index.vue | 4 +- .../views/host/terminal/terminal/index.vue | 2 +- .../setting/backup-account/cos/index.vue | 4 +- .../setting/backup-account/kodo/index.vue | 4 +- .../setting/backup-account/minio/index.vue | 4 +- .../setting/backup-account/oss/index.vue | 4 +- .../views/setting/backup-account/s3/index.vue | 2 +- frontend/src/views/setting/license/index.vue | 4 +- .../views/toolbox/supervisor/file/index.vue | 4 +- .../website/runtime/dotnet/operate/index.vue | 2 +- .../website/runtime/go/operate/index.vue | 2 +- .../website/runtime/java/operate/index.vue | 2 +- .../website/runtime/node/operate/index.vue | 2 +- .../website/runtime/python/operate/index.vue | 2 +- frontend/src/views/website/ssl/ca/index.vue | 2 +- .../website/ssl/dns-account/create/index.vue | 8 +- .../website/config/basic/domain/index.vue | 2 +- .../website/config/basic/proxy/index.vue | 2 +- .../website/config/basic/redirect/index.vue | 2 +- .../website/config/log/log-fiile/index.vue | 4 +- 34 files changed, 624 insertions(+), 635 deletions(-) diff --git a/backend/i18n/lang/en.yaml b/backend/i18n/lang/en.yaml index 6887dd5d5..ea2e2b3f2 100644 --- a/backend/i18n/lang/en.yaml +++ b/backend/i18n/lang/en.yaml @@ -91,8 +91,8 @@ ErrPathNotDelete: "The selected directory cannot be deleted" ErrDomainIsExist: "Domain is already exist" ErrAliasIsExist: "Alias is already exist" ErrAppDelete: 'Other Website use this App' -ErrGroupIsUsed: 'The group is in use and cannot be deleted' -ErrBackupMatch: 'the backup file does not match the current partial data of the website: {{ .detail}}' +ErrGroupIsUsed: "The group is in use and can't be deleted" +ErrBackupMatch: "the backup file doesn't match the current partial data of the website: {{ .detail}}" ErrBackupExist: 'the backup file corresponds to a portion of the original data that does not exist: {{ .detail}}' ErrPHPResource: 'The local runtime does not support switching!' ErrPathPermission: 'A folder with non-1000:1000 permissions was detected in the index directory, which may cause an Access denied error when accessing the website. Please click the save button above' @@ -122,7 +122,7 @@ DNSAccountName: 'DNS account [{{ .name }}] manufacturer [{{.type}}]' PushDirLog: 'Certificate pushed to directory [{{ .path }}] {{ .status }}' ErrDeleteCAWithSSL: "There is an issued certificate under the current organization and cannot be deleted" ErrDeleteWithPanelSSL: "Panel SSL configuration uses this certificate and cannot be deleted" -ErrDefaultCA: "The default organization cannot be deleted" +ErrDefaultCA: "The default Certificate Authority can't be deleted" ApplyWebSiteSSLLog: "Start updating {{ .name }} website certificate" ErrUpdateWebsiteSSL: "{{ .name }} website failed to update certificate: {{ .err }}" ApplyWebSiteSSLSuccess: "Update website certificate successfully" @@ -143,8 +143,8 @@ ErrLocalExist: "The local database already exists with that name, please modify ErrTypeOfRedis: "The recovery file type does not match the current persistence mode. Modify the file type and try again" #container -ErrInUsed: "{{ .detail }} is in use and cannot be deleted" -ErrObjectInUsed: "This object is in use and cannot be deleted" +ErrInUsed: "{{ .detail }} is in use and can't be deleted" +ErrObjectInUsed: "This object is in use and can't be deleted" ErrPortRules: "The number of ports does not match, please re-enter!" ErrPgImagePull: "Image pull timeout. Please configure image acceleration or manually pull the postgres:16.0-alpine image and try again" diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 3d5c961bd..7ff1df209 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -18,8 +18,8 @@ const message = { save: 'Save ', set: 'Setting', sync: 'Sync ', - delete: 'Delete ', - edit: 'Edit', + delete: 'Delete', + edit: 'Edit ', enable: 'Enable', disable: 'Disable', confirm: 'Confirm', @@ -35,7 +35,7 @@ const message = { start: 'Start', view: 'View', watch: 'Watch', - handle: 'Handle', + handle: 'Trigger', expand: 'Expand', collapse: 'Collapse', log: 'Log', @@ -90,23 +90,23 @@ const message = { statusWaiting: 'Waiting...', records: 'Records', group: 'Group', - createdAt: 'Creation Time', - publishedAt: 'Publish Time', + createdAt: 'Creation time', + publishedAt: 'Publish time', date: 'Date', - updatedAt: 'Update Time', - operate: 'Operations', + updatedAt: 'Update time', + operate: 'Operation(s)', message: 'Message', description: 'Description', interval: 'Interval', user: 'User', title: 'Title', - port: 'Port', + port: 'Ports', forward: 'Forward', protocol: 'Protocol', tableSetting: 'Table setting', refreshRate: 'Rate', - noRefresh: 'No Refresh', - refreshRateUnit: '{0} Seconds/Time', + noRefresh: 'No refresh', + refreshRateUnit: '{0} second(s)/time', selectColumn: 'Select column', }, loadingText: { @@ -117,8 +117,8 @@ const message = { }, msg: { noneData: 'No data available', - delete: 'This operation delete cannot be rolled back. Do you want to continue?', - clean: 'This operation clean cannot be rolled back. Do you want to continue?', + delete: `This operation delete can't be undone. Do you want to continue?`, + clean: `This operation clean can't be undone. Do you want to continue?`, deleteTitle: 'Delete', deleteSuccess: 'Deleted successfully', loginSuccess: 'Logged in successfully', @@ -133,17 +133,17 @@ const message = { updateSuccess: 'Updated successfully', uploadSuccess: 'Uploaded successfully', 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', copyFailed: 'Failed to copy', - operatorHelper: 'Would you like to continue performing {1} operation on {0}?', + operatorHelper: `The operation "{1}" will be performed on "{0}" and can't be undone. Do you want to continue?`, notFound: 'Sorry, the page you requested does not exist.', - unSupportType: 'Current file type is not supported!', + unSupportType: `Current file type isn't supported.`, 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 isn't supported.`, fileNameErr: 'You can upload only files whose name contains 1 to 256 characters, including English, Chinese, digits, or periods (.-_)', - confirmNoNull: 'Make sure the value {0} is not empty', + confirmNoNull: `Make sure the value {0} isn't empty.`, errPort: 'Incorrect port information, please confirm!', remove: 'Remove', backupHelper: 'The current operation will back up {0}. Do you want to proceed?', @@ -180,43 +180,46 @@ const message = { 'In order to better protect your legitimate rights and interests, please read and agree to the following agreement « fly to cloud community software license agreement »', }, rule: { - username: 'Please enter a username', - password: 'Please enter a password', - rePassword: 'The passwords are inconsistent. Please check and re-enter the password', + username: 'Enter an username', + password: 'Enter a password', + rePassword: 'Confirm password is inconsistent with the password.', requiredInput: 'This field is required.', - requiredSelect: 'Please select the required fields', - illegalInput: 'There are illegal characters in the input box.', + requiredSelect: 'Select an item in the list', + illegalInput: `This field mustn't contains illegal characters.`, commonName: - 'Supports non-special characters starting with English, Chinese, numbers, .- and _, length 1-128', - userName: 'Support English, Chinese, numbers and _ length 3-30', - simpleName: 'Supports non-underscore starting, English, numbers, _, length 3-30', - simplePassword: 'Supports non-underscore starting, English, numbers, _, length 1-30', - dbName: 'Supports non-special character starting, including English, Chinese, numbers, .-_, with a length of 1-64', - imageName: 'Support English, numbers, :@/.-_, length 1-256', - volumeName: 'Support English, numbers, .-_, length 2-30', - supervisorName: 'Supports non-special characters starting with English, numbers, - and _, length 1-128', + 'This field must start with non-special characters and must consist of English, Chinese, numbers, ".", "-", and "_" characters with a length of 1-128.', + userName: 'This field must consist of English, Chinese, numbers and "_" characters with a length of 3-30.', + simpleName: `This field mustn't start with underscore character and must consist of English, numbers, and "_" characters with a length of 3-30.`, + simplePassword: `This field mustn't start with underscore character and must consist of English, numbers, and "_" characters with a length of 1-30.`, + dbName: `This field mustn't start with underscore character and must consist of English, numbers, and "_" characters with a length of 1-64.`, + imageName: + 'This field must consist of English, numbers, ":", "@", "/", ".", "-", and "_" characters with a length of 1-256.', + volumeName: + 'This field must consist of English, numbers, ".", "-", and "_" characters with a length of 2-30.', + supervisorName: + 'This field must start with non-special characters and must consist of English, numbers, "-", and "_" characters with a length of 1-128.', complexityPassword: - 'Please enter a password combination with a length of 8-30 characters, including letters, numbers, and at least two special characters.', - commonPassword: 'Please enter a password with more than 6 characters', - linuxName: `The field length must be between 1 and 128. The field mustn't contain these special characters: "{0}".`, - email: 'Email format error', - number: 'Please enter the correct number', - integer: 'Please enter the correct positive integer', - ip: 'Please enter the correct IP address', - host: 'Enter the correct IP address or domain name', - hostHelper: 'Support input of IP address or domain', - port: 'Please enter the correct port', + 'This field must consist of English, numbers with a length of 8-30 and contain at least two special characters.', + commonPassword: 'This field length must be more than 6.', + linuxName: `This field length must be between 1 and 128. The field mustn't contain these special characters: "{0}".`, + email: 'This field must be a valid email address.', + number: 'This field must be a number.', + integer: 'This field must be a positive integer.', + ip: 'This field must be a valid IP address.', + host: 'This field must be a valid IP address or domain name.', + hostHelper: 'Support input of IP address or domain name', + port: 'This field must be a valid port number.', selectHelper: 'Please select the correct {0} file', - domain: 'Primary domain should be like: example.com or example.com:8080.', - databaseName: 'Support English, numbers, _, length 1-30', - ipErr: 'IP [{0}] format error, please check', - numberRange: 'Number range: {0} - {1}', - paramName: 'Support English, numbers, .- and _, length 2-30', - paramComplexity: - 'Support English, numbers, {0}, length 6-128,Special characters cannot be at the beginning and end', - paramUrlAndPort: 'The format is http(s)://(domain name/ip):(port)', - nginxDoc: 'Only supports English case, numbers, and .', - appName: 'Support English, numbers, - and _, length 2-30, and cannot start and end with -_', + domain: 'This field must be like: example.com or example.com:8080.', + databaseName: 'This field must consist of English, numbers, and "_" characters with a length of 1-30.', + ipErr: 'This field must be a valid IP address.', + numberRange: 'This field must be a number between {0} and {1}.', + paramName: + 'This field must consist of English, numbers, ".", "-", and "_" characters with a length of 2-30.', + paramComplexity: `This field mustn't start and end with special characters and must consist of English, numbers, "{0}" characters with a length of 6-128.`, + paramUrlAndPort: 'This field must be in the format of "http(s)://(domain name/ip):(port)".', + nginxDoc: 'This field must consist of English, numbers and "." characters.', + appName: `This field musnt't start and end with "-" and "_" characters and must consist of English, numbers, "-", and "_" characters with a length of 2-30.`, containerName: 'Supports letters, numbers, -, _ and .; cannot start with - _ or .; length: 2-128', mirror: 'The mirror acceleration address should start with http(s)://, support English letters (both uppercase and lowercase), numbers, . / and -, and should not contain blank lines.', disableFunction: 'Only support letters ,underscores,and,', @@ -236,7 +239,7 @@ const message = { commonError: 'The request failed', }, service: { - serviceNotStarted: `The {0} service isn't started`, + serviceNotStarted: `The {0} service isn't started.`, }, status: { running: 'Running', @@ -282,16 +285,16 @@ const message = { uperr: 'Error', }, units: { - second: 'Second', - minute: 'Minute', - hour: 'Hour', - day: 'Day', - week: 'Week', - month: 'Month', - year: 'Year', - time: 'Time', - core: 'Core', - millisecond: 'Millisecond', + second: 'second(s)', + minute: 'minute(s)', + hour: 'hour(s)', + day: 'day(s)', + week: 'week(s)', + month: 'month(s)', + year: 'year(s)', + time: 'time(s)', + core: 'core(s)', + millisecond: 'millisecond(s)', }, operate: { down: 'Stop', @@ -313,7 +316,7 @@ const message = { ssl: 'Certificate', database: 'Database', container: 'Container', - cronjob: 'Cronjob', + cronjob: 'Cron Job', host: 'Host', security: 'Security', files: 'File', @@ -330,12 +333,11 @@ const message = { name: 'Tamper Proof', }, home: { - restart_1panel: 'Restart Panel', - restart_system: 'Restart Server', + restart_1panel: 'Restart panel', + restart_system: 'Restart server', operationSuccess: 'Operation succeeded, rebooting, please refresh the browser manually later!', overview: 'Overview', - entranceHelper: - 'Enabling a secure entrance can help improve system security. If necessary, go to the Control Panel settings, select Security, and enable the secure entrance.', + entranceHelper: `Security entrance isn't enabled. You can enable it in "Settings -> Security" to improve system security.`, appInstalled: 'App', systemInfo: 'System info', hostname: 'Hostname', @@ -397,27 +399,27 @@ const message = { deleteBackupHelper: 'Delete database backups simultaneously', delete: 'Delete operation cannot be rolled back, please input "', deleteHelper: '" to delete this database', - create: 'Create', + create: 'Create database', noMysql: 'Database service (MySQL or MariaDB)', noPostgresql: 'Database service Postgresql', - goUpgrade: 'Go for upgrade', - goInstall: 'Go for install', + goUpgrade: 'Go to upgrade', + goInstall: 'Go to install', source: 'Source', isDelete: 'Deleted', - permission: 'Permission', + permission: 'Change Permission', permissionForIP: 'IP', permissionAll: 'All of them(%)', - databaseConnInfo: 'Conn info', + databaseConnInfo: 'Connection info', rootPassword: 'Root password', serviceName: 'Service Name', serviceNameHelper: 'Access between containers in the same network.', backupList: 'Backup', loadBackup: 'Import', - remoteAccess: 'Remote Access', + remoteAccess: 'Remote access', remoteHelper: 'Multiple IP comma-delimited, example: 172.16.10.111, 172.16.10.112', remoteConnHelper: - 'Remote connection to mysql as user root may have security risks. Therefore, perform this operation with caution.', - changePassword: 'Password', + 'Remote connection to MySQL as user root may have security risks. Therefore, perform this operation with caution.', + changePassword: 'Change password', changePasswordHelper: 'The database has been associated with an application. Changing the password will change the database password of the application at the same time. The change takes effect after the application restarts.', @@ -428,35 +430,34 @@ const message = { portHelper: 'This port is the exposed port of the container. You need to save the modification separately and restart the container!', - loadFromRemote: 'Sync from Server', - userBind: 'Bind User', - pgBindHelper: - 'This operation is used to create a new user and bind it to the target database. Currently, selecting users already existing in the database is not supported.', + loadFromRemote: 'Sync from server', + userBind: 'Bind user', + pgBindHelper: `This operation is used to create a new user and bind it to the target database. Currently, selecting users already existing in the database isn't supported.`, pgSuperUser: 'Super User', loadFromRemoteHelper: - 'This action will synchronize the database info on the server to 1Panel, do you want to continue?', + 'This will synchronize the database info on the server to 1Panel. Do you want to continue?', passwordHelper: 'Unable to retrieve, please modify', local: 'Local', remote: 'Remote', - remoteDB: 'Remote DB', - createRemoteDB: 'Create Remote Server', + remoteDB: 'Remote database', + createRemoteDB: 'Create remote server', unBindRemoteDB: 'Unbind remote server', unBindForce: 'Force unbind', unBindForceHelper: 'Ignore all errors during the unbinding process to ensure the final operation is successful', unBindRemoteHelper: 'Unbinding the remote database will only remove the binding relationship and will not directly delete the remote database', - editRemoteDB: 'Edit Remote Server', - localDB: 'Local DB', - address: 'DB address', - version: 'DB version', + editRemoteDB: 'Edit remote server', + localDB: 'Local database', + address: 'Database address', + version: 'Database version', userHelper: 'The root user or a database user with root privileges can access the remote database.', pgUserHelper: 'Database user with superuser privileges.', ssl: 'Use SSL', - clientKey: 'Client Private Key', - clientCert: 'Client Certificate', - caCert: 'CA Certificate', - hasCA: 'Has CA Certificate', - skipVerify: 'Ignore Certificate Validity Check', + clientKey: 'Client private key', + clientCert: 'Client certificate', + caCert: 'CA certificate', + hasCA: 'Has CA certificate', + skipVerify: 'Ignore certificate validity check', formatHelper: 'The current database character set is {0}, the character set inconsistency may cause recovery failure', @@ -466,7 +467,7 @@ const message = { 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', - currentStatus: 'Current State', + currentStatus: 'Current state', baseParam: 'Basic parameter', performanceParam: 'Performance parameter', runTime: 'Startup time', @@ -476,32 +477,32 @@ const message = { queryPerSecond: 'Query per second', txPerSecond: 'Tx per second', connInfo: 'active/peak connections', - connInfoHelper: 'If the value is too large, increase max_connections', + connInfoHelper: 'If the value is too large, increase "max_connections".', threadCacheHit: 'Thread cache hit', - threadCacheHitHelper: 'If it is too low, increase thread_cache_size', + threadCacheHitHelper: 'If it is too low, increase "thread_cache_size".', indexHit: 'Index hit', - indexHitHelper: 'If it is too low, increase key_buffer_size', + indexHitHelper: 'If it is too low, increase "key_buffer_size".', innodbIndexHit: 'Innodb index hit rate', - innodbIndexHitHelper: 'If it is too low, increase innodb_buffer_pool_size', - cacheHit: 'Querying the Cache Hit', - cacheHitHelper: 'If it is too low, increase query_cache_size', + innodbIndexHitHelper: 'If it is too low, increase "innodb_buffer_pool_size".', + cacheHit: 'Querying the cache hit', + cacheHitHelper: 'If it is too low, increase "query_cache_size".', tmpTableToDB: 'Temporary table to disk', - tmpTableToDBHelper: 'If it is too large, try increasing tmp_table_size', + tmpTableToDBHelper: 'If it is too large, try increasing "tmp_table_size".', openTables: 'Open tables', - openTablesHelper: 'The configuration value of table_open_cache must be greater than or equal to this value', + openTablesHelper: 'The configuration value of "table_open_cache" must be greater than or equal to this value.', selectFullJoin: 'Select full join', - selectFullJoinHelper: 'If the value is not 0, check whether the index of the data table is correct', + selectFullJoinHelper: `If the value isn't 0, check whether the index of the data table is correct.`, selectRangeCheck: 'The number of joins with no index', - selectRangeCheckHelper: 'If the value is not 0, check whether the index of the data table is correct', + selectRangeCheckHelper: `If the value isn't 0, check whether the index of the data table is correct.`, sortMergePasses: 'Number of sorted merges', - sortMergePassesHelper: 'If the value is too large, increase sort_buffer_size', + sortMergePassesHelper: 'If the value is too large, increase "sort_buffer_size".', tableLocksWaited: 'Lock table number', - tableLocksWaitedHelper: 'If the value is too large, consider increasing your database performance', + tableLocksWaitedHelper: 'If the value is too large, consider increasing your database performance.', - performanceTuning: 'Performance Tuning', + performanceTuning: 'Performance tuning', optimizationScheme: 'Optimization scheme', keyBufferSizeHelper: 'Buffer size for index', - queryCacheSizeHelper: 'Query cache. If this function is disabled, set this parameter to 0', + queryCacheSizeHelper: 'Query cache. If this function is disabled, set this parameter to 0.', tmpTableSizeHelper: 'Temporary table cache size', innodbBufferPoolSizeHelper: 'Innodb buffer size', innodbLogBufferSizeHelper: 'Innodb log buffer size', @@ -517,39 +518,38 @@ const message = { restart: 'Restart', log: 'Logs', - slowLog: 'Slowlogs', - noData: 'No slow log yet...', + slowLog: 'Slow logs', + noData: 'No slow logs yet.', isOn: 'On', longQueryTime: 'threshold(s)', thresholdRangeHelper: 'Please enter the correct threshold (1 - 600).', 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', requirepassHelper: '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', maxmemory: 'Maximum memory usage', - maxmemoryHelper: '0 indicates no restriction', - tcpPort: 'Current listening port', - uptimeInDays: 'Days in operation', - connectedClients: 'Number of connected clients', - usedMemory: 'Current memory usage of Redis', - usedMemoryRss: 'Memory size requested from the operating system', - usedMemoryPeak: 'Peak memory consumption of Redis', - memFragmentationRatio: 'Memory fragmentation ratio', - totalConnectionsReceived: 'Total number of clients connected since run', - totalCommandsProcessed: 'The total number of commands executed since the run', - instantaneousOpsPerSec: 'Number of commands executed by the server per second', - keyspaceHits: 'The number of times a database key was successfully found', - keyspaceMisses: 'Number of failed attempts to find the database key', - hit: 'Find the database key hit ratio', - latestForkUsec: 'The number of microseconds spent on the last fork() operation', - redisCliHelper: 'redis-cli service not detected, please enable the service first!', - redisQuickCmd: 'Redis quick command', - - recoverHelper: 'Data is about to be overwritten with [{0}]. Do you want to continue?', + maxmemoryHelper: '0 indicates no restriction.', + tcpPort: 'Current listening port.', + uptimeInDays: 'Days in operation.', + connectedClients: 'Number of connected clients.', + usedMemory: 'Current memory usage of Redis.', + usedMemoryRss: 'Memory size requested from the operating system.', + usedMemoryPeak: 'Peak memory consumption of Redis.', + memFragmentationRatio: 'Memory fragmentation ratio.', + totalConnectionsReceived: 'Total number of clients connected since run.', + totalCommandsProcessed: 'The total number of commands executed since the run.', + instantaneousOpsPerSec: 'Number of commands executed by the server per second.', + keyspaceHits: 'The number of times a database key was successfully found.', + keyspaceMisses: 'Number of failed attempts to find the database key.', + hit: 'Find the database key hit ratio.', + latestForkUsec: 'The number of microseconds spent on the last fork() operation.', + redisCliHelper: `"redis-cli" service isn't detected. Enable the service first.`, + redisQuickCmd: 'Redis quick commands', + recoverHelper: 'This will overwrite the data with [{0}]. Do you want to continue?', submitIt: 'Overwrite the data', baseConf: 'Basic configuration', @@ -557,21 +557,22 @@ const message = { restartNow: 'Restart now', restartNowHelper1: 'You need to restart the system after the configuration changes take effect. If your data needs to be persisted, perform the save operation first.', - restartNowHelper: 'The modification takes effect only after the system restarts.', + restartNowHelper: 'This will take effect only after the system restarts.', persistence: 'Persistence', - rdbHelper1: 'In seconds, insert', - rdbHelper2: 'The data', - rdbHelper3: 'Meeting either condition triggers RDB persistence', + rdbHelper1: 'second(s), insert', + rdbHelper2: 'pieces of data', + rdbHelper3: 'Meeting any of the conditions will trigger RDB persistence.', rdbInfo: 'Ensure that the value in the rule list ranges from 1 to 100000', - containerConn: 'Container Connection', + containerConn: 'Container connection', connAddress: 'Address', connPort: 'Port', containerConnHelper: - 'This connection address is used by applications running on the PHP execution environment/container installation.', - remoteConn: 'External Connection', - remoteConnHelper2: 'Use this address for non-container or external connections', + 'This connection address can be used by applications that are running on the PHP execution environment or container.', + remoteConn: 'External connection', + remoteConnHelper2: + 'This connnection address can be used by applications running on non-container or external applications.', localIP: 'Local IP', }, container: { @@ -587,105 +588,104 @@ const message = { containerList: 'Container list', operatorHelper: '{0} will be performed on the following container, Do you want to continue?', operatorAppHelper: - 'The {0} operation will be performed on the following containers,\n some of which are from the App Store. This operation may affect the normal use of the service. \nDo you want to continue?', + 'The "{0}" operation will be performed on the following container(s) and may affect the running services. Do you want to continue?', start: 'Start', stop: 'Stop', restart: 'Restart', kill: 'Kill', pause: 'Pause', - unpause: 'Unpause', + unpause: 'Resume', rename: 'Rename', remove: 'Remove', - removeAll: 'Remove All', + removeAll: 'Remove all', containerPrune: 'Prune', - containerPruneHelper1: 'Cleaning containers will delete all containers that are in a stopped state.', + containerPruneHelper1: 'This will delete all containers that are in stopped state.', containerPruneHelper2: - 'If the containers are from the app store, after performing the cleanup, you need to go to the [Installed] list in the [App Store] and click the [Rebuild] button to reinstall them.', - containerPruneHelper3: 'This operation cannot be rolled back. Do you want to continue?', + 'If the containers are from the app store, you need to go to "App Store -> Installed" and click the "Rebuild" button to reinstall them after performing the cleanup.', + containerPruneHelper3: `This operation can't be undone. Do you want to continue?`, imagePrune: 'Prune', imagePruneSome: 'Clean unlabeled', - imagePruneSomeEmpty: 'No image with the "none" tag is to be cleared', + imagePruneSomeEmpty: 'No images with the "none" tag can be cleaned.', imagePruneSomeHelper: 'Clean the images with the tag "none" that are not used by any containers.', imagePruneAll: 'Clean unused', - imagePruneAllEmpty: 'No unused images to be cleared', + imagePruneAllEmpty: 'No unused images can be cleaned.', imagePruneAllHelper: 'Clean the images that are not used by any containers.', networkPrune: 'Prune', - networkPruneHelper: 'Remove all unused networks. Do you want to continue?', + networkPruneHelper: 'This will remove all unused networks. Do you want to continue?', volumePrune: 'Prune', - volumePruneHelper: 'Remove all unused local volumes. Do you want to continue?', + volumePruneHelper: 'This will remove all unused local volumes. Do you want to continue?', cleanSuccess: 'The operation is successful, the number of this cleanup: {0}!', cleanSuccessWithSpace: - 'The operation is successful. The number of disks cleared this time is {0}. The disk space freed is {1}!', + 'The operation is successful. The number of disks cleaned this time is {0}. The disk space freed is {1}!', container: 'Container', unExposedPort: 'The current port mapping address is 127.0.0.1, which cannot enable external access.', - upTime: 'UpTime', + upTime: 'Uptime', all: 'All', fetch: 'Fetch', lines: 'Lines', linesHelper: 'Please enter the correct number of logs to retrieve!', - lastDay: 'Last Day', - last4Hour: 'Last 4 Hours', - lastHour: 'Last Hour', - last10Min: 'Last 10 Minutes', + lastDay: 'Last day', + last4Hour: 'Last 4 hours', + lastHour: 'Last hour', + last10Min: 'Last 10 minutes', cleanLog: 'Clean log', - downLogHelper1: 'Are you sure you want to download all logs for container {0}?', - downLogHelper2: 'Are you sure you want to download the recent {1} logs for container {0}?', - cleanLogHelper: - 'Clearing logs requires restarting the container, and this operation cannot be rolled back. Do you want to continue?', + downLogHelper1: 'This will download all 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?`, newName: 'New name', - source: 'Resource Rate', - cpuUsage: 'CPU Usage', - cpuTotal: 'CPU Total', + source: 'Resource rate', + cpuUsage: 'CPU usage', + cpuTotal: 'CPU total', core: 'Core', - memUsage: 'Memory Usage', - memTotal: 'Memory Limit', - memCache: 'Memory Cache', + memUsage: 'Memory usage', + memTotal: 'Memory limit', + memCache: 'Memory cache', ip: 'IP address', - cpuShare: 'CPU Share', + cpuShare: 'CPU shares', cpuShareHelper: - 'The default CPU share for a container is 1024, which can be increased to give the container more CPU time.', - inputIpv4: 'Please enter the IPv4 address', - inputIpv6: 'Please enter the IPv6 address', + 'Container engine uses a base value of 1024 for CPU shares. You can increase it to give the container more CPU time.', + inputIpv4: 'Example: 192.168.1.1', + inputIpv6: 'Example: 2001:0db8:85a3:0000:0000:8a2e:0370:7334', containerFromAppHelper: 'Detected that this container originates from the app store. App operations may cause current edits to be invalidated.', containerFromAppHelper1: 'Click the [Param] button in the installed applications list to enter the editing page and modify the container name.', command: 'Command', - console: 'Console Interaction', - tty: 'TTY (-t)', - openStdin: 'OpenStdin (-i)', + console: 'Container interaction', + tty: 'Allocate a pseudo-TTY (-t)', + openStdin: 'Keep STDIN open even if not attached (-i)', custom: 'Custom', emptyUser: 'When empty, you will log in as default', containerTerminal: 'Terminal', privileged: 'Privileged', privilegedHelper: - 'Allows the container to perform certain privileged operations on the host, which may increase container risks. Use with caution!', + 'Allow the container to perform certain privileged operations on the host, which may increase container risks. Use with caution!', editComposeHelper: 'Note: The environment variables set will be written to the 1panel.env file by default.\nIf you want to use these parameters in the container, you also need to manually add an env_file reference in the compose file.', upgradeHelper: 'Repository Name/Image Name: Image Version', upgradeWarning2: 'The upgrade operation requires rebuilding the container, any unpersisted data will be lost. Do you wish to continue?', - oldImage: 'Current Image', - targetImage: 'Target Image', + oldImage: 'Current image', + targetImage: 'Target image', imageLoadErr: 'No image name detected for the container', - appHelper: 'This container is sourced from the app store; upgrading might render the service unavailable', + appHelper: 'The container comes from the app store, and upgrading may make the service unavailable.', - input: 'Input', - forcePull: 'forced image pull ', - forcePullHelper: 'Ignore existing images on the server and pull again.', + input: 'Manually input', + forcePull: 'Always pull image ', + forcePullHelper: 'This will ignore existing images on the server and pull the latest image from the registry.', server: 'Host', serverExample: '80, 80-88, ip:80 or ip:80-88', containerExample: '80 or 80-88', exposePort: 'Expose port', exposeAll: 'Expose all', - cmdHelper: 'e.g. nginx -g "daemon off;"', - entrypointHelper: 'e.g. docker-entrypoint.sh', + cmdHelper: 'Example: nginx -g "daemon off;"', + entrypointHelper: 'Example: docker-entrypoint.sh', autoRemove: 'Auto remove', cpuQuota: 'Number of CPU cores', memoryLimit: 'Memory', - limitHelper: `If set to 0, it means that there is no limitation. The maximum value is {0}.`, + limitHelper: `If set to 0, it means that there is no limitation. The maximum value is {0}`, mount: 'Mount', volumeOption: 'Volume', hostOption: 'Host', @@ -695,24 +695,24 @@ const message = { modeRW: 'RW', modeR: 'R', mode: 'Mode', - env: 'Environment', + env: 'Environments', restartPolicy: 'Restart policy', always: 'always', unlessStopped: 'unless-stopped', - onFailure: 'on-failure(five times by default)', + onFailure: 'on-failure (five times by default)', no: 'never', monitor: 'Monitor', refreshTime: 'Refresh time', cache: 'Cache', - image: 'Image', + image: 'Image name', imagePull: 'Pull', imagePush: 'Push', imageDelete: 'Image delete', imageDeleteTag: 'Image tag delete', imageTagDeleteHelper: 'Remove other tags associated with this image ID', - repoName: 'Repo Name', + repoName: 'Container registry', imageName: 'Image name', pull: 'Pull', path: 'Path', @@ -721,37 +721,36 @@ const message = { imageBuild: 'Build', pathSelect: 'Path', label: 'Label', - imageTag: 'Image Tag', + imageTag: 'Image tag', push: 'Push', - fileName: 'FileName', + fileName: 'Filename', export: 'Export', exportImage: 'Image export', version: 'Version', size: 'Size', from: 'From', - tag: 'Tag', - tagHelper: 'one in a row, for example, \nkey1=value1\nkey2=value2', + tag: 'Tags', + tagHelper: 'One per line. For example,\nkey1=value1\nkey2=value2', imageNameHelper: 'Image name and Tag, for example: nginx:latest', cleanBuildCache: 'Clean build cache', - delBuildCacheHelper: - 'Cleaning the build cache will delete all cached artifacts generated during builds. This action cannot be undone. Continue?', + delBuildCacheHelper: `This will delete all cached artifacts that are generated during builds and can't be undone. Do you want to continue?`, urlWarning: 'The URL prefix does not need to include http:// or https://. Please modify.', network: 'Network', networkHelper: - 'Deleting the 1panel-network container network will affect the normal use of some applications and runtime environments. Do you want to continue?', + 'This may cause some applications and runtime environments to not work properly. Do you want to continue?', createNetwork: 'Create', networkName: 'Name', driver: 'Driver', option: 'Option', attachable: 'Attachable', subnet: 'Subnet', - scope: 'IP Scope', + scope: 'IP scope', gateway: 'Gateway', auxAddress: 'Exclude IP', volume: 'Volume', - volumeDir: 'Volume dir', + volumeDir: 'Volume directory', nfsEnable: 'Enable NFS storage', nfsAddress: 'Address', mountpoint: 'Mountpoint', @@ -759,23 +758,24 @@ const message = { options: 'Options', createVolume: 'Create', - repo: 'Repo', + repo: 'Container registry', createRepo: 'Add', - httpRepo: 'The http repository needs to restart the docker service to add credit', + httpRepo: 'Choosing HTTP protocol requires restarting the Docker service to add it into insecure registries.', delInsecure: 'Deletion of credit', - delInsecureHelper: 'docker service needs to be restarted to delete the credit. Do you want to delete it?', - downloadUrl: 'Download URL', + delInsecureHelper: + 'This will restart Docker service to remove it from insecure registries. Do you want to continue?', + downloadUrl: 'Registry server', imageRepo: 'Image repo', repoHelper: 'Does it include a mirror repository/organization/project?', - auth: 'Auth', + auth: 'Require authentication', mirrorHelper: 'If there are multiple mirrors, newlines must be displayed, for example:\nhttp://xxxxxx.m.daocloud.io \nhttps://xxxxxx.mirror.aliyuncs.com', registrieHelper: 'If multiple private repositories exist, newlines must be displayed, for example:\n172.16.10.111:8081 \n172.16.10.112:8081', compose: 'Compose', - fromChangeHelper: 'Switching the source will clear the current edited content. Do you want to continue?', - composePathHelper: 'Config file save path: {0}', + fromChangeHelper: 'Switching the source will clean the current edited content. Do you want to continue?', + composePathHelper: 'Configuration file save path: {0}', composeHelper: 'The composition created through 1Panel editor or template will be saved in the {0}/docker/compose directory.', deleteFile: 'Delete file', @@ -786,7 +786,7 @@ const message = { apps: 'Apps', local: 'Local', createCompose: 'Create', - composeDirectory: 'Compose Directory', + composeDirectory: 'Compose directory', template: 'Template', composeTemplate: 'Compose template', createComposeTemplate: 'Create', @@ -794,7 +794,7 @@ const message = { content: 'Content', contentEmpty: 'Compose content cannot be empty, please enter and try again!', containerNumber: 'Container number', - containerStatus: 'Container Status', + containerStatus: 'Container status', exited: 'Exited', running: 'Running', down: 'Down', @@ -806,18 +806,17 @@ const message = { 'This will stop and remove all containers and networks under the {0} compose. Do you want to continue?', setting: 'Setting', - operatorStatusHelper: 'This action will {0} Docker service, do you want to continue?', + operatorStatusHelper: 'This will "{0}" Docker service. Do you want to continue?', dockerStatus: 'Docker Service', daemonJsonPathHelper: 'Ensure that the configuration path is the same as that specified in docker.service.', mirrors: 'Registry mirrors', - mirrorsHelper: - 'The acceleration URL is preferred to perform operations. If this parameter is set to empty, mirror acceleration is disabled.', - mirrorsHelper2: 'For details, see the official documents, ', + mirrorsHelper: '', + mirrorsHelper2: 'For details, see the official documents. ', registries: 'Insecure registries', ipv6Helper: 'When enabling IPv6, you need to add an IPv6 container network. Refer to the official documentation for specific configuration steps.', ipv6CidrHelper: 'IPv6 address pool range for containers', - ipv6TablesHelper: 'Automatic configuration of Docker IPv6 for iptables rules', + ipv6TablesHelper: 'Automatic configuration of Docker IPv6 for iptables rules.', experimentalHelper: 'Enabling ip6tables requires this configuration to be turned on; otherwise, ip6tables will be ignored', cutLog: 'Log option', @@ -825,21 +824,21 @@ const message = { cutLogHelper2: 'Existing containers need to be recreated for the configuration to take effect.', cutLogHelper3: 'Please note that recreating containers may result in data loss. If your containers contain important data, make sure to backup before performing the rebuilding operation.', - maxSize: 'Max-Size', - maxFile: 'Max-File', + maxSize: 'Max size', + maxFile: 'Max file', liveHelper: - 'Allows the running container state to be preserved in case of unexpected shutdown or crash of the Docker daemon', + 'By default, when the Docker daemon terminates, it shuts down running containers. You can configure the daemon so that containers remain running if the daemon becomes unavailable. This functionality is called live restore. The live restore option helps reduce container downtime due to daemon crashes, planned outages, or upgrades.', liveWithSwarmHelper: 'live-restore daemon configuration is incompatible with swarm mode.', iptablesDisable: 'Close iptables', iptablesHelper1: 'Automatic configuration of iptables rules for Docker.', iptablesHelper2: 'Disabling iptables will result in the containers being unable to communicate with external networks.', daemonJsonPath: 'Conf Path', - serviceUnavailable: 'Docker service is not started at present, please click', + serviceUnavailable: `Docker service isn't started at present.`, startIn: ' to start', - sockPath: 'Socket Path', - sockPathHelper: 'Communication channel between Docker Daemon and the client', - sockPathHelper1: 'Default Path: /var/run/docker-x.sock', + sockPath: 'Unix domain socket', + sockPathHelper: 'Communication channel between Docker daemon and the client.', + sockPathHelper1: 'Default path: /var/run/docker-x.sock', sockPathMsg: 'Saving the Socket Path setting may result in Docker service being unavailable. Do you want to continue?', sockPathErr: 'Please select or enter the correct Docker sock file path', @@ -851,79 +850,77 @@ const message = { cleanContainersHelper: '( Clean up all stopped containers )', cleanVolumesHelper: '( Clean up all unused local volumes )', - makeImage: 'Create Image', - newImageName: 'New Image Name', - commitMessage: 'Commit Message', + makeImage: 'Create image', + newImageName: 'New image name', + commitMessage: 'Commit message', author: 'Author', ifPause: 'Pause Container During Creation', ifMakeImageWithContainer: 'Create New Image from This Container?', }, cronjob: { - create: 'Create Cronjob', - edit: 'Edit Cronjob', - cronTask: 'Cronjob', + create: 'Create Cron Job', + edit: 'Edit Cron Job', + cronTask: 'Cron Job', changeStatus: 'Change status', - disableMsg: - 'Stopping the scheduled task will result in the task no longer automatically executing. Do you want to continue?', - enableMsg: - 'Enabling the scheduled task will allow the task to automatically execute on a regular basis. Do you want to continue?', + disableMsg: 'This will stop the scheduled task from automatically executing. Do you want to continue?', + enableMsg: 'This will allow the scheduled task to automatically execute. Do you want to continue?', taskType: 'Type', record: 'Records', + viewRecords: 'View records', shell: 'Shell', - log: 'Backup Logs', - logHelper: 'Backup System Log', + log: 'Backup logs', + logHelper: 'Backup system log', ogHelper1: '1.1Panel System log ', logHelper2: '2. SSH login log of the server ', logHelper3: '3. All site logs ', containerCheckBox: 'In container (no need to enter the container command)', - containerName: 'Container Name', - ntp: 'Time Synchronization', + containerName: 'Container name', + ntp: 'Time synchronization', ntp_helper: 'You can configure the NTP server on the Quick Setup page of the Toolbox.', - app: 'Backup App', - website: 'Backup Website', + app: 'Backup app', + website: 'Backup website', rulesHelper: - 'When there are multiple compression exclusion rules, they need to be displayed with line breaks. For example: \n*.log \n*.sql', - lastRecordTime: 'Last Execution Time', + 'When there are multiple compression exclusion rules, they need to be displayed with line breaks. For example,\n*.log \n*.sql', + lastRecordTime: 'Last execution time', all: 'All', - failedRecord: 'Failed Records', - successRecord: 'Successful Records', - database: 'Backup Database', + failedRecord: 'Failure records', + successRecord: 'Successful records', + database: 'Backup database', missBackupAccount: 'The backup account could not be found', syncDate: 'Synchronization time ', - clean: 'Cache Clean', + clean: 'Cache clean', curl: 'Access URL', taskName: 'Name', - cronSpec: 'Lifecycle', + cronSpec: 'Trigger cycle', cronSpecHelper: 'Enter the correct execution period', cleanHelper: 'This operation records all job execution records, backup files, and log files. Do you want to continue?', directory: 'Backup Directory', sourceDir: 'Backup Directory', snapshot: 'System Snapshot', - allOptionHelper: - 'The current task plan is to back up all [{0}]. Direct download is not 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', exclusionRulesHelper: 'The exclusion rules will apply to all compression operations of this backup.', - default_download_path: 'Default Download Link', + default_download_path: 'Default download link', saveLocal: 'Retain local backups (the same as the number of cloud storage copies)', url: 'URL Address', targetHelper: 'Backup accounts are maintained in panel settings.', - retainCopies: 'Retain Copies', + retainCopies: 'Retain records', retainCopiesHelper: 'Number of copies to retain for execution records and logs', retainCopiesHelper1: 'Number of copies to retain for backup files', retainCopiesUnit: ' copies (View)', cronSpecRule: 'The execution period format in line {0} is incorrect. Please check and try again!', - perMonth: 'Every monthly', + perMonth: 'Every month', perWeek: 'Every week', perHour: 'Every hour', - perNDay: 'Every N days', - perDay: 'Every days', - perNHour: 'Every N hours', - perNMinute: 'Every N minutes', - perNSecond: 'Every N seconds', + perNDay: 'Every N day(s)', + perDay: 'Every day', + perNHour: 'Every N hour(s)', + perNMinute: 'Every N minute(s)', + perNSecond: 'Every N second(s)', per: 'Every ', - handle: 'Handle', - day: 'Day', + handle: '', + day: 'day(s)', monday: 'Monday', tuesday: 'Tuesday', wednesday: 'Wednesday', @@ -934,7 +931,8 @@ const message = { shellContent: 'Script', errRecord: 'Incorrect logging', errHandle: 'Cronjob execution failure', - noRecord: 'The execution did not generate any logs', + // noRecord: 'The execution did not generate any logs', + noRecord: 'Trigger the Cron Job, and you will see the records here.', cleanData: 'Clean data', cleanDataHelper: 'Delete the backup file generated during this task.', noLogs: 'No task output yet...', @@ -942,7 +940,7 @@ const message = { cutWebsiteLog: 'Cut Website Log', cutWebsiteLogHelper: 'The cut 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', alertTitle: 'Planned Task - {0} 「{1}」 Task Failure Alert', }, @@ -951,7 +949,7 @@ const message = { globalFilter: 'Global Filter', enableMonitor: 'Enable', storeDays: 'Expiration days', - cleanMonitor: 'Clearing monitoring records', + cleanMonitor: 'Clean monitoring records', avgLoad: 'Average load', loadDetail: 'Load detail', @@ -959,31 +957,31 @@ const message = { networkCard: 'NetworkCard', read: 'Read', write: 'Write', - readWriteCount: 'Read or write Times', + readWriteCount: 'Read or write times', readWriteTime: 'Read or write delay', today: 'Today', yesterday: 'Yesterday', - lastNDay: 'Last {0} day', + lastNDay: 'Last {0} day(s)', memory: 'Memory', cache: 'Cache', disk: 'Disk', network: 'Network', up: 'Up', down: 'Down', - interval: 'Interval(min)', + interval: 'Interval(minute)', gpuUtil: 'GPU Utilization', temperature: 'Temperature', - performanceState: 'Performance State', - powerUsage: 'Power Usage', - memoryUsage: 'Memory Usage', - fanSpeed: 'Fan Speed', + performanceState: 'Performance state', + powerUsage: 'Power usage', + memoryUsage: 'Memory usage', + fanSpeed: 'Fan speed', }, terminal: { conn: 'connection', connLocalErr: 'Unable to automatically authenticate, please fill in the local server login information!', testConn: 'Test connection', - saveAndConn: 'Save and Connect', + saveAndConn: 'Save and connect', connTestOk: 'Connection information available', connTestFailed: 'Connection unavailable, please check connection information!', host: 'Host', @@ -994,22 +992,22 @@ const message = { expand: 'Expand all', fold: 'All contract', batchInput: 'Batch input', - quickCommand: 'Quick Command', + quickCommand: 'Quick command', quickCommandHelper: 'Frequently used command list for quick selection at the bottom of the terminal interface', groupDeleteHelper: 'After the group is removed, all connections in the group will be migrated to the default group. Do you want to continue?', command: 'Command', - quickCmd: 'Quick Command', - addHost: 'Add Host', + quickCmd: 'Quick command', + addHost: 'Add host', localhost: 'Localhost', ip: 'Address', - authMode: 'Auth Mode', + authMode: 'Auth mode', passwordMode: 'Password', - rememberPassword: 'Remember Authentication Information', + rememberPassword: 'Remember authentication information', keyMode: 'PrivateKey', key: 'Private key', keyPassword: 'Private key password', - emptyTerminal: 'No terminal is currently connected', + emptyTerminal: 'No terminal is currently connected.', }, toolbox: { swap: { @@ -1039,21 +1037,22 @@ const message = { hostsHelper: 'Hostname Resolution', hosts: 'Domain', hostAlert: 'Hidden commented records, please click the All configuration button to view or set', - toolbox: 'Quick Setup', + toolbox: 'Quick setup', hostname: 'Hostname', - passwd: 'System Password', + passwd: 'System password', passwdHelper: 'Input characters cannot include $ and &', - timeZone: 'System Time Zone', - localTime: 'Server Time', + timeZone: 'System time zone', + localTime: 'Server time', timeZoneChangeHelper: 'Modifying the system time zone requires restarting the service. Continue?', - timeZoneHelper: - 'Time zone modification depends on the timedatectl command. If not installed, the modification may fail.', + // timeZoneHelper: + // 'Time zone modification depends on the timedatectl command. If not installed, the modification may fail.', + timeZoneHelper: `If you don't install "timedatectl" command, you may not change the time zone. Because system uses that command to change time zone.`, timeZoneCN: 'Beijing', timeZoneAM: 'Los Angeles', timeZoneNY: 'New York', ntpALi: 'Alibaba', ntpGoogle: 'Google', - syncSite: 'NTP Server', + syncSite: 'NTP server', hostnameHelper: 'Hostname modification depends on the hostnamectl command. If not installed, the modification may fail.', userHelper: @@ -1064,17 +1063,17 @@ const message = { 'There is an empty value in the provided content. Please check and try again after modification!', dnsCheck: 'Test Availability', dnsOK: 'DNS configuration information is available!', - dnsTestFailed: 'DNS configuration information is not available. Please modify and try again!', + dnsTestFailed: `DNS configuration information isn't available.`, }, fail2ban: { sshPort: 'Listen to SSH Port', sshPortHelper: 'Current Fail2ban listens to the SSH connection port of the host', - noFail2ban: 'Fail2ban service not detected, please refer to the official documentation for installation!', - unActive: 'The Fail2ban service is not enabled at present, please enable it first!', - operation: 'Perform [{0}] operation on Fail2ban service, continue?', + noFail2ban: `Fail2ban service isn't detected. Refer to the official documentation to install.`, + unActive: `The Fail2ban service isn't enabled at present.`, + operation: 'You will perform operation "{0}" on Fail2ban service. Do you want to continue?', fail2banChange: 'Fail2ban Configuration Modification', - ignoreHelper: 'The IP list in the whitelist will be ignored for blocking, continue?', - bannedHelper: 'The IP list in the blacklist will be blocked by the server, 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?', maxRetry: 'Maximum Retry Attempts', banTime: 'Ban Time', banTimeHelper: 'Default ban time is 10 minutes, -1 indicates permanent ban', @@ -1091,7 +1090,7 @@ const message = { }, ftp: { ftp: 'FTP Account', - noFtp: 'FTP (pure-ftpd) service not detected, please refer to the official documentation for installation!', + noFtp: `FTP (pure-ftpd) service isn't detected. Refer to the official documentation to install.`, operation: 'Perform [{0}] operation on FTP service, continue?', noPasswdMsg: 'Can not get the current FTP account password, please set the password and try again! ', enableHelper: @@ -1101,7 +1100,7 @@ const message = { syncHelper: 'Sync FTP account data between server and database. Do you want to continue?', }, clam: { - clam: 'Virus Scan', + clam: 'Virus scan', cron: 'Scheduled scan', cronHelper: 'Professional version supports scheduled scan feature', specErr: 'Execution schedule format error, please check and retry!', @@ -1147,15 +1146,15 @@ const message = { }, }, logs: { - panelLog: 'Panel Logs', - operation: 'Operation Logs', - login: 'Login Logs', + panelLog: 'Panel logs', + operation: 'Operation logs', + login: 'Login logs', loginIP: 'Login IP', - loginAddress: 'Login Address', - loginAgent: 'Login Agent', + loginAddress: 'Login address', + loginAgent: 'Login agent', loginStatus: 'Status', - system: 'System Logs', - deleteLogs: 'Clearing Logs', + system: 'System logs', + deleteLogs: 'Clean logs', resource: 'Resource', operate: 'Operate', detail: { @@ -1173,27 +1172,27 @@ const message = { cronjobs: 'Cronjob', databases: 'Database', }, - websiteLog: 'Website Logs', - runLog: 'Run Log', - errLog: 'Err Log', + websiteLog: 'Website logs', + runLog: 'Run logs', + errLog: 'Error logs', }, file: { dir: 'Folder', upload: 'Upload', download: 'Download', fileName: 'File name', - search: 'Find', - mode: 'Permission', + search: 'Search', + mode: 'Permissions', owner: 'Owner', file: 'File', - remoteFile: 'Remote Download', + remoteFile: 'Remote download', share: 'Share', sync: 'Data Synchronization', size: 'Size', - updateTime: 'Modification Time', + updateTime: 'Modification time', open: 'Open', rename: 'Rename', - role: 'Permission', + role: 'Permissions', info: 'Attribute', linkFile: 'Soft link', terminal: 'Terminal', @@ -1204,7 +1203,7 @@ const message = { path: 'Path', public: 'Public', setRole: 'Set permissions', - link: 'Whether to link', + link: 'File link', rRole: 'Read', wRole: 'Write', xRole: 'Executable', @@ -1217,10 +1216,10 @@ const message = { compressSuccess: 'Compressed successfully', deCompressSuccess: 'Decompress succeeded', deCompressDst: 'Decompress path', - linkType: 'Link Type', + linkType: 'Link type', softLink: 'Soft link', hardLink: 'Hard link', - linkPath: 'Link Path', + linkPath: 'Link path', selectFile: 'Select file', downloadUrl: 'Download URL', downloadStart: 'Download start!', @@ -1235,11 +1234,11 @@ const message = { downloading: 'Downloading...', infoDetail: 'File Properties', list: 'File List', - sub: 'Subdirectory', + sub: 'Include subdirectory', downloadSuccess: 'Download Success', theme: 'Theme', language: 'Language', - eol: 'End Of Line', + eol: 'End of line', copyDir: 'Copy Dir', paste: 'Paste', cancel: 'Cancel', @@ -1248,15 +1247,15 @@ const message = { ownerHelper: 'The default user of the PHP operating environment: the user group is 1000:1000, it is normal that the users inside and outside the container show inconsistencies', searchHelper: 'Support wildcards such as *', - uploadFailed: '[{0}] File Upload file', + uploadFailed: '[{0}] File upload file', fileUploadStart: 'Uploading [{0}]....', - currentSelect: 'Current Select: ', + currentSelect: 'Current select: ', unsupportedType: 'Unsupported file type', deleteHelper: 'Are you sure you want to delete the following files? By default, it will enter the recycle bin after deletion', fileHeper: 'Note: 1. Search results do not support sorting. 2. Folders cannot be sorted by size.', forceDeleteHelper: 'Permanently delete the file (without entering the recycle bin, delete it directly)', - recycleBin: 'Recycle Bin', + recycleBin: 'Recycle bin', sourcePath: 'Original path', deleteTime: 'Delete time', confirmReduce: 'Are you sure you want to restore the following files?', @@ -1264,17 +1263,17 @@ const message = { reduce: 'Reduction', reduceHelper: 'If a file or directory with the same name exists in the original path, it will be overwritten. Do you want to continue?', - clearRecycleBin: 'Clear', - clearRecycleBinHelper: 'Do you want to clear the Recycle Bin?', + clearRecycleBin: 'Clean', + clearRecycleBinHelper: 'Do you want to clean the recycle bin?', favorite: 'Favorites', - removeFavorite: 'Remove from Favorites?', + removeFavorite: 'Remove from favorites?', addFavorite: 'Add to Davorites', - clearList: 'Clear list', + clearList: 'Clean list', deleteRecycleHelper: 'Are you sure you want to permanently delete the following files?', typeErrOrEmpty: '[{0}] file type is wrong or empty folder', dropHelper: 'Drag the files you want to upload here', - fileRecycleBin: 'Enable Recycle Bin', - fileRecycleBinMsg: '{0} recycle Bin', + fileRecycleBin: 'Enable recycle bin', + fileRecycleBinMsg: '{0} recycle bin', wordWrap: 'Automatically wrap', deleteHelper2: 'Are you sure you want to delete the selected file? The deletion operation cannot be rolled back', @@ -1283,7 +1282,7 @@ const message = { 'Ignoring untrusted certificates during downloads may lead to data leakage or tampering. Please use this option with caution, only when trusting the download source.', uploadOverLimit: 'The number of files exceeds 1000! Please compress and upload', clashDitNotSupport: 'File names are prohibited from containing .1panel_clash', - clashDeleteAlert: 'The Recycle Bin folder cannot be deleted', + clashDeleteAlert: `The "Recycle Bin" folder can't be deleted`, clashOpenAlert: 'Please click the [Recycle Bin] button to open the recycle bin directory', right: 'Forward', back: 'Back', @@ -1295,33 +1294,34 @@ const message = { saveContentAndClose: 'The file has been modified, do you want to save and close it?', saveAndOpenNewFile: 'The file has been modified, do you want to save and open the new file?', noEdit: 'The file has not been modified, no need to do this!', - noNameFolder: 'Untitled Folder', - noNameFile: 'Untitled File', - minimap: 'Code Mini Map', + noNameFolder: 'Untitled folder', + noNameFile: 'Untitled file', + minimap: 'Code mini map', fileCanNotRead: 'File can not read', - panelInstallDir: '1Panel installation directory cannot be deleted', + panelInstallDir: `1Panel installation directory can't be deleted`, }, ssh: { autoStart: 'Auto Start', enable: 'Enable Autostart', disable: 'Disable Autostart', sshAlert: - 'The list data is sorted based on login time, but please note that changing time zones or other operations may cause deviations in the time of login logs.', + 'The list data is sorted based on login date. Changing time zone or performing other operations may cause deviations in the date of login logs.', sshAlert2: - 'You can use Fail2ban in the toolbox to block IP addresses attempting brute force attacks, thus enhancing the security of the host.', - sshOperate: 'Operation [{0}] on the SSH service is performed. Do you want to continue?', + 'You can use "Fail2ban" in the "Toolbox" to block IP addresses that attempt brute force attacks, and this will enhance the security of the host.', + sshOperate: 'Operation "{0}" on the SSH service will be performed. Do you want to continue?', sshChange: 'SSH Setting', - 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: 'Modifying the configuration file may cause service availability. Exercise caution when performing this operation. Do you want to continue?', - portHelper: 'Specifies the port number monitored by the SSH service. The default port number is 22.', - listenAddress: 'Listening address', + port: 'Port', + portHelper: 'Specific the port that SSH service listens on.', + listenAddress: 'Listen address', allV4V6: '0.0.0.0:{0}(IPv4) and :::{0}(IPv6)', listenHelper: - 'Canceling IPv4 and IPv6 settings simultaneously will listen on both 0.0.0.0:{0}(IPv4) and :::{0}(IPv6)', - addressHelper: 'Specify the IP address on which the SSH service will listen', - permitRootLogin: 'root user', - rootSettingHelper: 'The default login mode is SSH for user root.', + 'Leaving both of IPv4 and IPv6 settings blank will listen on "0.0.0.0:{0}(IPv4)" and ":::{0}(IPv6)".', + addressHelper: 'Specify the address that SSH service listens on.', + permitRootLogin: 'Permit root user login', + rootSettingHelper: 'The default login method for root user is "Allow SSH login".', rootHelper1: 'Allow SSH login', rootHelper2: 'Disable SSH login', rootHelper3: 'Only key login is allowed', @@ -1336,10 +1336,10 @@ const message = { passwordHelper: 'Can contain 6 to 10 digits and English cases', generate: 'Generate key', reGenerate: 'Regenerate key', - keyAuthHelper: 'Whether to enable key authentication. This parameter is enabled by default.', + keyAuthHelper: 'Whether to enable key authentication.', useDNS: 'useDNS', dnsHelper: - 'Controls whether the DNS resolution function is enabled on the SSH server to verify the identity of the connection.', + 'Control whether the DNS resolution function is enabled on the SSH server to verify the identity of the connection.', analysis: 'Statistical information', denyHelper: "Performing a 'deny' operation on the following addresses. After setting, the IP will be prohibited from accessing the server. Do you want to continue?", @@ -1348,7 +1348,7 @@ const message = { noAddrWarning: 'No [{0}] addresses are currently selected. Please check and try again!', successful: 'Success', failed: 'Failed', - loginLogs: 'Login Logs', + loginLogs: 'Login logs', loginMode: 'Mode', authenticating: 'Key', publickey: 'Key', @@ -1356,7 +1356,7 @@ const message = { local: 'Local', config: 'Configuration', session: 'Session', - loginTime: 'Login Time', + loginTime: 'Login time', loginIP: 'Login IP', disconnect: 'Disconnect', stopSSHWarn: 'Whether to disconnect this SSH connection', @@ -1364,13 +1364,13 @@ const message = { setting: { all: 'All', panel: 'Panel', - user: 'Panel User', - userChange: 'Change Panel User', + user: 'Panel user', + userChange: 'Change panel user', userChangeHelper: 'Changing the panel user will log you out. Continue?', - passwd: 'Panel Password', + passwd: 'Panel password', emailHelper: 'For password retrieval', - title: 'Panel Alias', - panelPort: 'Panel Port', + title: 'Panel alias', + panelPort: 'Panel port', titleHelper: 'Supports non-special character starting, English, Chinese, numbers, spaces, .- and _, length 3-30', portHelper: @@ -1386,47 +1386,45 @@ const message = { language: 'Language', languageHelper: 'By default, it follows the browser language. This parameter takes effect only on the current browser', - sessionTimeout: 'Timeout', - sessionTimeoutError: 'The minimum timeout is 300 seconds', + sessionTimeout: 'Session timeout', + sessionTimeoutError: 'The minimum session timeout is 300 seconds', sessionTimeoutHelper: - 'If you do not operate the panel for more than {0} seconds, the panel automatically logs out', - systemIP: 'System Address', - proxy: 'Server Proxy', - proxyHelper: 'After setting up the proxy server, it will be effective in the following scenarios:', - proxyHelper1: 'Downloading and synchronizing installation packages from the app store (Professional)', - proxyHelper2: 'System version upgrades and retrieving update information (Professional)', - proxyHelper4: 'Docker network access will be done through a proxy server (Professional)', - proxyHelper3: 'Verification and synchronization of system licenses', - proxyType: 'Proxy Type', + 'The panel will automatically be logged out if there is no operation for more than {0} second(s).', + systemIP: 'System address', + proxy: 'Server proxy', + proxyHelper: 'It will be effective in the following scenarios after you set up the proxy server:', + proxyHelper1: + 'Installation package download and synchronization from the app store (Professional edition only)', + proxyHelper2: 'System update and update information retrieval (Professional edition only)', + proxyHelper4: 'Docker network will be accessed through a proxy server (Professional edition only)', + proxyHelper3: 'System license verification and synchronization', + proxyType: 'Proxy type', proxyUrl: 'Proxy Address', proxyPort: 'Proxy Port', proxyPasswdKeep: 'Remember Password', proxyDocker: 'Docker Proxy', proxyDockerHelper: 'Synchronize proxy server configuration to Docker, support offline server image pulling and other operations', - apiInterface: 'API Interface', + apiInterface: 'Enable API', apiInterfaceClose: 'Once closed, API interfaces cannot be accessed. Do you want to continue?', - apiInterfaceHelper: 'Provide panel support for API interface access', - apiInterfaceAlert1: - 'Please do not enable it in production environments as it may increase server security risks', - apiInterfaceAlert2: - 'Please do not use third-party applications to call the panel API to prevent potential security threats.', - apiInterfaceAlert3: 'API Interface Document:', - apiInterfaceAlert4: 'Usage Document:', - apiKey: 'Interface Key', - apiKeyHelper: 'Interface key is used for external applications to access API interfaces', - ipWhiteList: 'IP Whitelist', - ipWhiteListEgs: - 'When there are multiple IPs, line breaks are required for display, for example: \n172.161.10.111 \n172.161.10.0/24 ', - ipWhiteListHelper: 'IPs must be in the IP whitelist list to access the panel API interface', + apiInterfaceHelper: 'Allow third-party applications to access the API.', + apiInterfaceAlert1: `Don't enable it in production environments because it may increase server security risks.`, + apiInterfaceAlert2: `Don't use third-party applications to call the API to prevent potential security threats.`, + apiInterfaceAlert3: 'API document:', + apiInterfaceAlert4: 'Usage document:', + apiKey: 'Interface key', + apiKeyHelper: 'API key is used for third-party applications to access the API.', + ipWhiteList: 'IP whitelist', + ipWhiteListEgs: 'One per line. For example,\n172.161.10.111\n172.161.10.0/24', + ipWhiteListHelper: 'IPs within the whitelist can access the API.', apiKeyReset: 'Interface key reset', apiKeyResetHelper: 'the associated key service will become invalid. Please add a new key to the service', - confDockerProxy: 'Configure Docker Proxy', + confDockerProxy: 'Configure docker proxy', restartNowHelper: 'Configuring Docker proxy requires restarting the Docker service.', restartNow: 'Restart immediately', - systemIPWarning: 'The server address is not currently set. Please set it in the control panel first!', - systemIPWarning1: 'The current server address is set to {0}, and quick redirection is not possible!', - defaultNetwork: 'Network Card', + systemIPWarning: `The server address isn't currently set. Set it in the control panel first.`, + systemIPWarning1: `The current server address is set to {0}, and quick redirection isn't possible!`, + defaultNetwork: 'Network card', syncTime: 'Server Time', timeZone: 'Time Zone', timeZoneChangeHelper: 'Changing the time zone requires restarting the service. Do you want to continue?', @@ -1446,18 +1444,17 @@ const message = { retryPassword: 'Confirm password', noSpace: 'Input information cannot include space characters', duplicatePassword: 'The new password cannot be the same as the original password, please re-enter!', - diskClean: 'Cache Clean', - developerMode: 'Preview Experience Program', - developerModeHelper: 'Get a preview version of 1Panel to provide feedback on new features and updates', - - thirdParty: 'Third-party Account', + diskClean: 'Cache clean', + developerMode: 'Preview Program', + developerModeHelper: `You will get to expirence new features and fixes before they're released broadly and give early feedback.`, + thirdParty: 'Third-party account', createBackupAccount: 'Add {0}', noTypeForCreate: 'No backup type is currently created', - LOCAL: 'Server Disks', + LOCAL: 'Server disk', OSS: 'Ali OSS', S3: 'Amazon S3', mode: 'Mode', - MINIO: 'MINIO', + MINIO: 'MinIO', SFTP: 'SFTP', WebDAV: 'WebDAV', WebDAVAlist: 'WebDAV connect Alist can refer to the official documentation', @@ -1465,12 +1462,12 @@ const message = { isCN: 'Century Internet', isNotCN: 'International Version', client_id: 'Client ID', - client_secret: 'Client Secret', + client_secret: 'Client secret', redirect_uri: 'Redirect URL', onedrive_helper: 'Custom configuration can be referred to in the official documentation', refreshTime: 'Token Refresh Time', refreshStatus: 'Token Refresh Status', - backupDir: 'Backup Dir', + backupDir: 'Backup directory', codeWarning: 'The current authorization code format is incorrect, please confirm again!', code: 'Auth code', codeHelper: @@ -1500,7 +1497,7 @@ const message = { sa_saopaulo: 'Sao Paulo', eu_frankfurt: 'Frankfurt', KODO: 'Qiniu Kodo', - scType: ' Storage Type', + scType: ' Storage type', typeStandard: 'Standard', typeStandard_IA: 'Standard_IA', typeArchive: 'Archive', @@ -1514,9 +1511,9 @@ const message = { archiveHelper: 'Archival storage files cannot be downloaded directly and must first be restored through the corresponding cloud service provider`s website. Please use with caution!', backupAlert: - "In theory, as long as the cloud provider is compatible with the S3 protocol, existing Amazon S3 cloud storage can be used for backup. For specific configurations, please refer to the official documentation. ", + 'If a cloud provider is compatible with the S3 protocol, you can directly use Amazon S3 for backup. ', domain: 'Accelerate domain', - backupAccount: 'Backup Account', + backupAccount: 'Backup account', loadBucket: 'Get bucket', accountName: 'Account name', accountKey: 'Account key', @@ -1524,18 +1521,19 @@ const message = { path: 'Path', safe: 'Security', - bindInfo: 'Bind Info', + bindInfo: 'Bind info', bindAll: 'Listen All', bindInfoHelper: 'Changing the service listening address or protocol may result in service unavailability. Do you want to continue?', ipv6: 'Listen IPv6', - bindAddress: 'Listen Address', + bindAddress: 'Listen address', entrance: 'Entrance', - showEntrance: 'Enable Home Page Notification Not Enabled', - entranceHelper: 'Enabling secure entry will only allow logging in to the panel through specified secure entry.', + showEntrance: 'Show disabled alert in "Overview" page', + entranceHelper: + 'Enabling security entrance will only allow logging in to the panel through specified security entrance.', entranceError: 'Please enter a secure login entry point of 5-116 characters, only numbers or letters are supported.', - entranceInputHelper: 'When the security entry is set to blank, the security entry is cancelled.', + entranceInputHelper: 'Leave it blank to disable the security entrance.', randomGenerate: 'Random', expirationTime: 'Expiration Date', unSetting: 'Unset', @@ -1546,17 +1544,15 @@ const message = { expiredHelper: 'The current password has expired. Please change the password again.', timeoutHelper: '[ {0} days ] The panel password is about to expire. After the expiration, you need to reset the password', - complexity: 'Complexity Verification', - complexityHelper: - 'After enabling, the password must have a length of 8-30 characters, including letters, numbers, and at least two special characters.', - bindDomain: 'Bind Domain', + complexity: 'Complexity validation', + complexityHelper: `After you enable it, the password validation rule will be: 8-30 characters, including English, numbers, and at least two special characters.`, + bindDomain: 'Bind domain', unBindDomain: 'Unbind domain', panelSSL: 'Panel SSL', unBindDomainHelper: 'The action of unbinding a domain name may cause system insecurity. Do you want to continue?', - bindDomainHelper: - 'After the domain binding, only the domain in the setting can be used to access 1Panel service', - bindDomainHelper1: 'If the binding domain is empty, the binding of the domain is cancelled', + bindDomainHelper: 'After you bind the domain, only that domain can access 1Panel service.', + bindDomainHelper1: 'Leave it blank to disable the domain name binding.', bindDomainWarning: 'After domain binding, you will be logged out and can only access 1Panel service through the domain name specified in the settings. Do you want to continue?', allowIPs: 'Authorized IP', @@ -1564,34 +1560,33 @@ const message = { unAllowIPsWarning: 'Authorizing an empty IP will allow all IPs to access the system, which may cause system insecurity. Do you want to continue?', allowIPsHelper: - 'After setting the authorized IP address, only the IP address in the setting can access the 1Panel service', + 'After you set the authorized IP address list, only the IP address in the list can access the panel service.', allowIPsWarning: - 'After setting the authorized IP address, only the IP address in the setting can access the 1Panel service. Do you want to continue?', - allowIPsHelper1: 'If the authorized IP address is empty, the authorized IP address is canceled', - allowIPEgs: - 'If multiple ip authorizations exist, newlines need to be displayed. For example, \n172.16.10.111 \n172.16.10.0/24', - mfa: 'MFA', + 'After you set the authorized IP address list, only the IP address in the list can access the panel service. Do you want to continue?', + allowIPsHelper1: `Leave it blank to disable the IP address restriction.`, + allowIPEgs: 'One per line. For example,\n172.16.10.111\n172.16.10.0/24', + mfa: 'Two-factor authentication (2FA)', mfaClose: 'Disabling MFA will reduce the security of the service. Do you want to continue?', secret: 'Secret', - mfaInterval: 'Refresh interval (s)', + mfaInterval: 'Refresh interval(s)', mfaTitleHelper: - 'Used to differentiate between different 1Panel hosts. After modification, please rescan or manually add the key information!', - mfaIntervalHelper: 'Please rescan or manually add key information after modifying the refresh time.', + 'The title is used to distinguish different 1Panel hosts. Scan again or manually add the secret key after you modify the title.', + mfaIntervalHelper: 'Scan again or manually add the secret key after you modify the refresh time.', mfaAlert: - 'MFA password is generated based on the current time. Please ensure that the server time is synchronized.', - mfaHelper: 'After this function is enabled, the mobile application verification code will be verified', - mfaHelper1: 'Download a MFA verification mobile app e.g.:', - mfaHelper2: 'Scan the following QR code using the mobile app to obtain the 6-digit verification code', + 'One-time token is dynamically generated 6-digit number and based on the current time. Make sure that the server time is synchronized.', + mfaHelper: 'After you enabled it, the one-time token needs to be verified.', + mfaHelper1: 'Download an authenticator app, for example,', + mfaHelper2: + 'To obtain the one-time token, scan the following QR code using your authenticator app or copy the secret key into your authentication app.', mfaHelper3: 'Enter six digits from the app', - mfaCode: 'Code', + mfaCode: 'One-time token', sslChangeHelper: 'Modify the https setting and restart the service. Do you want to continue?', sslDisable: 'Disable', sslDisableHelper: 'If the https service is disabled, you need to restart the panel for it to take effect. Do you want to continue?', - noAuthSetting: 'Unauthorized Setting', - noAuthSettingHelper: - 'When the user is not logged in and has not correctly entered the security gateway, authorized IP, or bound domain, this response can hide panel features.', - responseSetting: 'Response Setting', + noAuthSetting: 'Unauthorized setting', + noAuthSettingHelper: `When users don't log in with specified security entrance, or don't access the panel from specified IP or domain name, this response can hid panel characteristic.`, + responseSetting: 'Response setting', help200: 'Help Page', error400: 'Bad Request', error401: 'Unauthorized', @@ -1605,8 +1600,7 @@ const message = { https: 'Setting up HTTPS protocol access for the panel can enhance the security of panel access.', certType: 'Certificate type', selfSigned: 'Self signed', - 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.', + selfSignedHelper: `Browsers may not trust self-signed certificates and may display security warnings.`, select: 'Select', domainOrIP: 'Domain or IP:', timeOut: 'Timeout', @@ -1618,12 +1612,12 @@ const message = { snapshot: 'Snapshot', deleteHelper: - 'All backup files for the snapshot, including those in the third-party backup account, will be deleted.', + 'All snapshot files including those in the third-party backup account will be deleted. Do you want to continue?', status: 'Snapshot status', - ignoreRule: 'Ignore Rule', + ignoreRule: 'Ignore rule', ignoreHelper: - 'This rule will be used to compress and backup the 1Panel data directory during snapshots, with socket files ignored by default.', - ignoreHelper1: 'One item per line, e.g.: \n*.log\n/opt/1panel/cache', + 'This rule will be used to compress and backup the 1Panel data directory during creating snapshot. By default, socket files are ignored.', + ignoreHelper1: 'One per line. For example,\n*.log\n/opt/1panel/cache', panelInfo: 'Write 1Panel basic information', panelBin: 'Backup 1Panel system files', daemonJson: 'Backup Docker configuration file', @@ -1633,16 +1627,16 @@ const message = { compress: 'Create Snapshot file', upload: 'Upload snapshot file', recoverDetail: 'Recover detail', - createSnapshot: 'Create Snapshot', - importSnapshot: 'Sync Snapshot', - importHelper: 'Snapshot directory:', + createSnapshot: 'Create snapshot', + importSnapshot: 'Sync snapshot', + importHelper: 'Snapshot directory: ', recover: 'Recover', lastRecoverAt: 'Last recovery time', lastRollbackAt: 'Last rollback time', reDownload: 'Download the backup file again', statusSuccess: 'Success', statusFailed: 'Failed', - recoverErrArch: 'Snapshot recovery between different server architectures is not supported!', + recoverErrArch: `Snapshot recovery between different server architectures isn't supported!`, recoverErrSize: 'Detected insufficient disk space, please check or clean up and try again!', recoverHelper: 'Starting recovery from snapshot {0}, please confirm the following information before proceeding:', @@ -1678,7 +1672,7 @@ const message = { currentVersion: 'Version', license: 'License', - advancedMenuHide: 'Advanced Menu Hide', + advancedMenuHide: 'Hide advanced menu', showMainAdvancedMenu: 'If only one menu is retained, only the main advanced menu will be displayed in the sidebar', showAll: 'Show All', @@ -1686,7 +1680,7 @@ const message = { ifShow: 'Whether to Show', menu: 'Menu', confirmMessage: 'The page will be refreshed to update the advanced menu list. Continue?', - compressPassword: 'Compression Password', + compressPassword: 'Compression password', backupRecoverMessage: 'Please enter the compression or decompression password (leave blank to not set)', }, license: { @@ -1696,9 +1690,9 @@ const message = { trial: 'Trial Edition', office: 'Official Edition', trialInfo: 'Version', - authorizationId: 'Subscription Authorization ID', - authorizedUser: 'Authorized User', - expiresAt: 'Expiration Date', + authorizationId: 'Subscription authorization ID', + authorizedUser: 'Authorized user', + expiresAt: 'Expiration date', productName: 'Product Name', productStatus: 'Product Status', Lost: 'Lost', @@ -1708,14 +1702,14 @@ const message = { 'The license has reached the maximum number of retry attempts. Please manually click the sync button to ensure the professional version features are functioning properly.', disableHelper: 'License synchronization verification failed. Please manually click the sync button to ensure that the professional version features are functioning properly.', - quickUpdate: 'Quick Update', + quickUpdate: 'Quick update', import: 'Import', power: 'Authorize', unbind: 'Unbind License', - unbindHelper: 'All Pro related Settings will be cleared after unbinding. Do you want to continue? ', - importLicense: 'Import License', + unbindHelper: 'All Pro related Settings will be cleaned after unbinding. Do you want to continue? ', + importLicense: 'License', importHelper: 'Please click or drag the license file here', - technicalAdvice: 'Technical Advice', + technicalAdvice: 'Technical consultation', advice: 'Consultation', indefinitePeriod: 'Indefinite Period', levelUpPro: 'Upgrade to Professional Edition', @@ -1733,19 +1727,18 @@ const message = { alert: 'Upgrade to the professional version to receive alarm information via SMS and view alarm logs, fully control various key events, and ensure worry-free system operation', }, clean: { - scan: 'Start Scanning', - scanHelper: 'Easily tidy up junk files accumulated during 1Panel runtime', - clean: 'Clean Now', + scan: 'Start scanning', + scanHelper: 'Easily clean up junk files produced during 1Panel runtime', + clean: 'Clean now', reScan: 'Rescan', - cleanHelper: - 'After checking the files and directories for cleaning, it cannot be undone (system cache cleaning requires a service restart). Do you want to continue?', - statusSuggest: '( Recommended Cleaning )', - statusClean: '( Very Clean )', + cleanHelper: `This will clean up the selected system junk files and can't be undone. Do you want to continue?`, + statusSuggest: '(Recommended Cleaning)', + statusClean: '(Very Clean)', statusEmpty: 'Very clean, no cleaning needed!', - statusWarning: '( Proceed with Caution )', + statusWarning: '(Proceed with Caution)', lastCleanTime: 'Last Cleaned: {0}', - lastCleanHelper: 'Files and directories cleaned: {0}, Total cleaned: {1}', - cleanSuccessful: 'Cleaning Successful!', + lastCleanHelper: 'Files and directories cleaned: {0}, total cleaned: {1}', + cleanSuccessful: 'Successfully cleaned', currentCleanHelper: 'Files and directories cleaned in this session: {0}, Total cleaned: {1}', suggest: '(Recommended)', totalScan: 'Total junk files to be cleaned: ', @@ -1758,7 +1751,7 @@ const message = { upgrade: 'System upgrade backup files', upgradeHelper: '(Recommend keeping the latest upgrade backup for system rollback)', cache: 'System cache files', - cacheHelper: '(Proceed with caution, clearing requires a service restart)', + cacheHelper: '(Proceed with caution, cleaning requires a service restart)', snapshot: 'System snapshot temporary files', snapshotTmp: 'System snapshot upload temporary files', snapshotLocal: 'System snapshot creation temporary files', @@ -1768,7 +1761,7 @@ const message = { oldOriginal: 'Unused pre-snapshot recovery backup directories', oldAppsBak: 'Unused application backup directories', - upload: 'Temporary upload files', + upload: 'Temporary Upload Files', uploadHelper: 'Temporary files uploaded from the system backup list', download: 'Temporary Download Files', downloadHelper: 'Temporary files downloaded from third-party backup accounts by the system', @@ -1793,13 +1786,13 @@ const message = { buildCache: 'Container Build Cache', }, app: { - app: 'Applications', + app: 'Application', installName: 'Name', installed: 'Installed', all: 'All', version: 'Version', detail: 'Details', - params: 'Param', + params: 'Edit parameters', install: 'Install', author: 'Author', source: 'Source', @@ -1826,26 +1819,26 @@ const message = { stopOperatorHelper: 'The application will be stopped. Do you want to continue?', restartOperatorHelper: 'The application will be restarted. Do you want to continue?', reloadOperatorHelper: 'The application will be reloaded. Do you want to continue?', - checkInstalledWarn: '{0} is not detected, please enter the app store and click to install!', + checkInstalledWarn: `"{0}" isn't detected. Go to "App Store" to install.`, gotoInstalled: 'Go to install', search: 'Search', - limitHelper: 'The application has already been installed, does not support repeated installation', - deleteHelper: '{0} has been associated with the following resources and cannot be deleted', - checkTitle: 'Prompt', + limitHelper: 'The application has already been installed.', + deleteHelper: `"{0}" has been associated with the following resource(s) and can't be deleted`, + checkTitle: 'Hint', website: 'website', database: 'database', - defaultConfig: 'Default Configuration', + defaultConfig: 'Default configuration', defaultConfigHelper: 'It has been restored to the default configuration, it will take effect after saving', forceDelete: 'Force delete', forceDeleteHelper: - 'Forced deletion will ignore errors generated during the deletion process and eventually delete metadata', + 'Force deletion will ignore errors during the deletion process and eventually delete metadata.', deleteBackup: 'Delete backup', deleteBackupHelper: 'Also delete the application backup', - deleteDB: 'Delete Database', + deleteDB: 'Delete database', deleteDBHelper: 'Also delete the database', noService: 'No {0}', toInstall: 'to install', - param: 'parameter configuration', + param: 'Parameters configuration', alreadyRun: 'Age', syncAppList: 'Sync', less1Minute: 'Less than 1 minute', @@ -1860,9 +1853,9 @@ const message = { syncStart: 'Start syncing! Please refresh the app store later', advanced: 'Advanced Settings', cpuCore: 'core(s)', - containerName: 'Container Name', + containerName: 'Container name', containerNameHelper: 'The container name will be automatically generated when not set', - allowPort: 'Port external access', + allowPort: 'External access', allowPortHelper: 'Allowing external port access will release the firewall port', appInstallWarn: `The application dosn't expose the external access port by default. Click "Advanced Settings" to expose it.`, upgradeStart: 'Start upgrading! Please refresh the page later', @@ -1872,18 +1865,13 @@ const message = { composeNullErr: 'compose cannot be empty', takeDown: 'TakeDown', allReadyInstalled: 'Installed', - // installHelper: 'Configuring image acceleration can solve the problem of image pull failure', installHelper: 'Configure image acceleration if you have image pull issues.', - // upgradeHelper: - // 'Abnormal applications need to be synchronized to normal status first. If the upgrade fails, please check the failure reason in the log audit-system log', upgradeHelper: 'Bring abnormal applications back to normal status before upgrading. If the upgrade fails, go to "Log" > "System Logs" to check the failure reason.', - installWarn: - 'Currently, if the port external access is not checked, it will not be able to access through the external network IP: port. Do you want to continue?', + installWarn: `The external access isn't checked, and it will make the application unable to access through external network. Do you want to continue?`, showIgnore: 'View ignored applications', cancelIgnore: 'Cancel ignore', ignoreList: 'Ignored applications', - // appHelper: 'Please view the installation instructions of some applications on the application details page', appHelper: 'Go to application details page to learn installation instruction for some special applications.', backupApp: 'Backup application before upgrade', backupAppHelper: @@ -1908,8 +1896,7 @@ const message = { useNew: 'Use custom version', useDefault: 'Use default version', useCustom: 'Customize docker-compose.yml', - useCustomHelper: - 'Using a custom docker-compose.yml file may cause the application upgrade to fail. If it is not necessary, do not check it', + useCustomHelper: `Using a custom docker-compose.yml file may cause the application upgrade to fail. If it isn't necessary, don't check it.`, diffHelper: 'The left side is the old version, the right side is the new version. After editing, click to save the custom version', pullImage: 'Pull Image', @@ -1923,13 +1910,11 @@ const message = { deployment: 'Deployment', supportUpType: 'Only .tar.gz files are supported', zipFormat: '.tar.gz compressed package structure: test.tar.gz compressed package must contain {0} file', - proxy: 'Reverse Proxy', + proxy: 'Reverse proxy', alias: 'Alias', enableFtp: 'FTP', - ftpUser: 'FTP Account', - ftpPassword: 'FTP Password', - // ftpHelper: - // "When creating a site, simultaneously create a corresponding FTP account for the site, with the FTP directory pointing to the site's directory.", + ftpUser: 'FTP account', + ftpPassword: 'FTP password', ftpHelper: 'After creating a website, a corresponding FTP account will be created and the FTP directory will link to the website directory.', remark: 'Remark', @@ -1944,7 +1929,6 @@ const message = { deleteApp: 'Delete Application', deleteBackup: 'Delete Backup', domain: 'Domain', - // domainHelper: 'One domain per line, support * and IP address, support domain name:port', domainHelper: 'One domain per line.\nSupport wildcard "*" and IP address.\nSupport adding port.', addDomain: 'Add', domainConfig: 'Domains', @@ -1953,7 +1937,7 @@ const message = { perserverHelper: 'Limit the maximum concurrency of the current site', perip: 'Single IP', peripHelper: 'Limit the maximum number of concurrent access to a single IP', - rate: 'Flow Limit', + rate: 'Flow limit', rateHelper: 'Limit the flow of each request (unit: KB)', limitHelper: 'Enable flow control', other: 'Other', @@ -1972,7 +1956,7 @@ const message = { acmeAccount: 'ACME account', provider: 'Verification method', dnsManual: 'Manual Resolution', - expireDate: 'Expiry Date', + expireDate: 'Expiration date', brand: 'Organization', deploySSL: 'Deployment', deploySSLHelper: 'Are you sure to deploy the certificate? ', @@ -1993,7 +1977,7 @@ const message = { security: 'Security', log: 'Log', nginxPer: 'Performance Tuning', - neverExpire: 'Never Expire', + neverExpire: 'Never', setDefault: 'Set as default', default: 'Default', deleteHelper: 'Related application status is abnormal, please check', @@ -2011,10 +1995,10 @@ const message = { proxyHelper: 'Example: 127.0.0.1:8080', forceDelete: 'Force Delete', forceDeleteHelper: - 'Forced deletion will ignore errors generated during the deletion process and eventually delete metadata', + 'Force deletion will ignore errors during the deletion process and eventually delete metadata.', deleteAppHelper: 'Delete associated applications and application backups at the same time', - deleteBackupHelper: 'Also delete website backup', - deleteConfirmHelper: `The delete operation can't be undone, please enter "{0}" to delete`, + deleteBackupHelper: 'Also delete website backups.', + deleteConfirmHelper: `The delete operation can't be undone. Enter "{0}" to confirm deletion.`, staticPath: 'The corresponding main directory is ', limit: 'Scheme', blog: 'Forum/Blog', @@ -2024,19 +2008,19 @@ const message = { doorSite: 'Portal', qiteSite: 'Enterprise', videoSite: 'Video', - errLog: 'Error Log', + errLog: 'Error logs', accessLog: 'Website Logs', stopHelper: 'After stopping the site, it will not be able to access normally, and the user will display the stop page of the current site when visiting. Do you want to continue? ', startHelper: 'After enabling the site, users can access the content of the site normally, do you want to continue? ', sitePath: 'Directory', - siteAlias: 'Site Alias', - primaryPath: 'Root Directory', + siteAlias: 'Site alias', + primaryPath: 'Root directory', folderTitle: 'The website mainly contains the following folders', - wafFolder: 'Firewall Rules', - indexFolder: 'Website Root Directory', - logFolder: 'Website Logs', + wafFolder: 'Firewall rules', + indexFolder: 'Website root directory', + logFolder: 'Website logs', sslFolder: 'Website Certificate', enableOrNot: 'Enable', oldSSL: 'Existing certificate', @@ -2054,11 +2038,11 @@ const message = { disableHTTPSHelper: 'Disabling HTTPS will delete the certificate related configuration, Do you want to continue?', SSLHelper: - 'Note: Do not use SSL certificates for illegal websites \n If HTTPS access cannot be used after opening, please check whether the security group has correctly released port 443', - SSLConfig: 'Certificate Settings', - SSLProConfig: 'Protocol Settings', - supportProtocol: 'Protocol Version', - encryptionAlgorithm: 'Rncryption Algorithm', + "Note: Do not use SSL certificates for illegal websites.\nIf HTTPS access can't be used after opening, check whether the security group has correctly released port 443.", + SSLConfig: 'Certificate settings', + SSLProConfig: 'Protocol settings', + supportProtocol: 'Protocol version', + encryptionAlgorithm: 'Encryption algorithm', notSecurity: '(not safe)', encryptHelper: "Let's Encrypt has a frequency limit for issuing certificates, but it is sufficient to meet normal needs. Too frequent operations will cause issuance failure. For specific restrictions, please see official document ", @@ -2094,60 +2078,61 @@ const message = { rewriteMode: 'Scheme', current: 'Current', rewriteHelper: - 'If setting pseudo-static causes the website to become inaccessible, please try reverting to the default settings', + 'If setting pseudo-static causes the website to become inaccessible, try to revert to the default settings.', runDir: 'Run Directory', runUserHelper: 'For websites deployed through the PHP container runtime environment, you need to set the owner and user group of all files and folders under index and subdirectories to 1000. For the local PHP environment, refer to the local PHP-FPM user and user group settings', userGroup: 'User/Group', uGroup: 'Group', - proxyPath: 'Proxy Path', + proxyPath: 'Proxy path', proxyPass: 'Target URL', cache: 'Cache', - cacheTime: 'Cache Duration', + cacheTime: 'Cache duration', enableCache: 'Cache', - proxyHost: 'ProxyHost', + proxyHost: 'Proxy host', disabled: 'Stopped', - startProxy: 'Start Reverse proxy', - stopProxy: 'Stop the Reverse proxy', + startProxy: 'This will start reverse proxy. Do you want to continue?', + stopProxy: 'This will stop the reverse proxy. Do you want to continue?', proxyFile: 'Source', - proxyHelper1: 'When accessing this directory, the content of the target URL will be returned and displayed', - proxyPassHelper: 'The proxied site must be a valid and accessible URL', - proxyHostHelper: 'Pass the domain name in the request header to the proxy server', - replacementHelper: 'Up to 5 replacements can be added, please leave blank if no replacement is required', - modifier: 'Matching Rules', - modifierHelper: 'Example: = exact match, ~ regular match, ^~ match the beginning of the path, etc', - replace: 'Text Replacement', + 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.', + proxyHostHelper: 'Pass the domain name in the request header to the proxy server.', + replacementHelper: 'Up to 5 replacements can be added, please leave blank if no replacement is required.', + modifier: 'Matching rules', + modifierHelper: + 'Example: "=" is exact match, "~" is regular match, "^~" matches the beginning of the path, etc.', + replace: 'Text replacements', addReplace: 'Add', replaced: 'Search String (cannot be empty)', replaceText: 'Replace with string', replacedErr: 'The Search String cannot be empty', replacedErr2: 'The Search String cannot be repeated', - basicAuth: 'Basic Authentication', + basicAuth: 'Basic authentication', editBasicAuthHelper: 'The password is asymmetrically encrypted and cannot be echoed. Editing needs to reset the password', antiLeech: 'Anti-leech', extends: 'Extension', browserCache: 'Cache', leechLog: 'Record anti-leech log', - accessDomain: 'Allowed Domains', - leechReturn: 'Response Resource', - noneRef: 'Allow Rmpty Referrer', + accessDomain: 'Allowed domains', + leechReturn: 'Response resource', + noneRef: 'Allow empty referrer', disable: 'not enabled', disableLeechHelper: 'Whether to disable the anti-leech', disableLeech: 'Disable anti-leech', ipv6: 'Listen IPv6', leechReturnError: 'Please fill in the HTTP status code', selectAcme: 'Select Acme account', - imported: 'Manually Created', - importType: 'Import Type', + imported: 'Created manually', + importType: 'Import type', pasteSSL: 'Paste code', localSSL: 'Select server file', privateKeyPath: 'Private key file', certificatePath: 'Certificate file', ipWhiteListHelper: 'The role of IP whitelist: all rules are invalid for IP whitelist', redirect: 'Redirect', - sourceDomain: 'Source Domain', - targetURL: 'Target URL Address', + sourceDomain: 'Source domain', + targetURL: 'Target URL address', keepPath: 'URI params', path: 'path', redirectType: 'redirection type', @@ -2164,15 +2149,15 @@ const message = { openrestyHelper: 'OpenResty default HTTP port: {0} HTTPS port: {1}, which may affect website domain name access and HTTPS forced redirect', primaryDomainHelper: 'Exmaple: example.com or example.com:8080', - acmeAccountType: 'Account Type', + acmeAccountType: 'Account type', keyType: 'Key algorithm', tencentCloud: 'Tencent Cloud', containWarn: 'The domain name contains the main domain, please re-enter', rewriteHelper2: - 'Applications like WordPress installed from the app store typically come with pseudo-static configurations pre-set. Reconfiguring them unnecessarily may lead to errors', + 'Applications like WordPress installed from the app store typically come with pseudo-static configuration preset. Reconfiguring them may lead to errors.', websiteBackupWarn: 'Only supports importing local backups, importing backups from other machines may cause recovery failure', - ipWebsiteWarn: 'Websites with IP as domain names need to be set as default sites to be accessed normally', + ipWebsiteWarn: 'Websites with IP as domain names need to be set as default site to be accessed normally.', hstsHelper: 'Enabling HSTS can increase website security', defaultHtml: 'Default page', website404: 'Website 404 error page', @@ -2229,27 +2214,27 @@ const message = { status: 'Current Status', nginxConfig: 'Settings', configResource: 'Configuration', - saveAndReload: 'Save and Reload', - clearProxyCache: 'Clear reverse proxy cache', + saveAndReload: 'Save and reload', + clearProxyCache: 'Clean reverse proxy cache', clearProxyCacheWarn: 'All websites that have configured with cache will be affected and "OpenResty" will be restarted. Do you want to continue?', }, ssl: { create: 'Request', provider: 'Type', - manualCreate: 'Manually Created', - acmeAccount: 'Acme Account', + manualCreate: 'Created manually', + acmeAccount: 'ACME account', resolveDomain: 'Resolve domain name', err: 'Error', value: 'record value', dnsResolveHelper: 'Please go to the DNS resolution service provider to add the following resolution records:', - detail: 'Details', + detail: 'View details', msg: 'Information', ssl: 'Certificate', - key: 'Private Key', - startDate: 'Effective Time', + key: 'Private key', + startDate: 'Effective time', organization: 'issuing organization', - renewConfirm: 'Are you sure you want to apply for a certificate for domain name {0}? ', + renewConfirm: 'This will renew a new certificate for domain name {0}. Do you want to continue?', autoRenew: 'Automatic renewal', autoRenewHelper: 'Automatically renew 30 days before expiration', renewSuccess: 'Renewal successful', @@ -2257,36 +2242,36 @@ const message = { 'This certificate has been associated with the following websites, and the application will be applied to these websites simultaneously', createAcme: 'Create Account', acmeHelper: 'Acme Account is used to apply for free certificates', - upload: 'Upload', - applyType: 'Application Method', - apply: 'Apply', + upload: 'Import', + applyType: 'Application method', + apply: 'Renew', applyStart: 'Certificate application starts', getDnsResolve: 'Getting DNS resolution value, please wait...', selfSigned: 'View Self-signed certificates', - ca: 'Certification Authority', - commonName: 'Certificate subject name (CN)', - caName: 'Institution name', - company: 'company/organization', - department: 'department', - city: 'city', - province: 'province', - country: 'country code', - commonNameHelper: 'For example:', - selfSign: 'Issue Certificate', + ca: 'Certificate Authority', + commonName: 'Common name', + caName: 'Certificate authority name', + company: 'Organization name', + department: 'Organizational unit name', + city: 'Locality name', + province: 'State or province name', + country: 'Country name (2 letter code)', + commonNameHelper: 'For example, ', + selfSign: 'Issue certificate', days: 'validity period', domainHelper: 'One domain name per line, supports * and IP address', pushDir: 'Push the certificate to the local directory', dir: 'Directory', pushDirHelper: 'Certificate file "fullchain.pem" and key file "privkey.pem" will be generated in this directory.', - organizationDetail: 'Organization Details', + organizationDetail: 'Organization details', fromWebsite: 'From websites', dnsMauanlHelper: 'In manual resolution mode, you need to click the apply button after creation to obtain the DNS resolution value', httpHelper: 'HTTP mode requires OpenResty to be installed', - buypassHelper: 'Buypass is not accessible in mainland China', + buypassHelper: `Buypass isn't accessible in mainland China`, googleHelper: 'How to get EAB HmacKey and EAB kid', - googleCloudHelper: 'Google Cloud API is not accessible in most parts of mainland China', + googleCloudHelper: `Google Cloud API isn't accessible in most parts of mainland China`, httpHelper2: 'Unable to apply for a generic domain name certificate in HTTP mode', skipDNSCheck: 'Skip DNS check', skipDNSCheckHelper: 'Check here only if you encounter a timeout issue during certification request.', @@ -2305,7 +2290,7 @@ const message = { 'The default execution directory of the script is the 1Panel installation directory. If a certificate is pushed into local directory, the execution directory will be the certificate push directory. The default execution timeout is 30 minutes.', }, firewall: { - create: 'Create Rule', + create: 'Create rule', edit: 'Edit rule', notSupport: 'No system firewall detected (firewalld or ufw). Please refer to the official documentation for installation.', @@ -2320,22 +2305,20 @@ const message = { cookieBlockList: 'Cookie Blacklist', firewall: 'Firewall', - dockerHelper: - 'Linux firewall {0} cannot disable Docker port mapping, the application can edit the parameters on the [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 to now', used: 'Used', unUsed: 'Unused', - firewallHelper: '{0} System firewall', - firewallNotStart: 'The system firewall is not enabled at present, please enable it first!', + firewallHelper: '{0} system firewall', + firewallNotStart: `The system firewall isn't enabled at present. Enable it first.`, restartFirewallHelper: 'This operation will restart the current firewall. Do you want to continue?', - stopFirewallHelper: - 'After the system firewall is disabled, the server loses security protection. Do you want to continue?', + stopFirewallHelper: 'This will make the server lose security protection. Do you want to continue?', startFirewallHelper: 'After the firewall is enabled, the server security can be better protected. Do you want to continue?', noPing: 'Disable ping', noPingTitle: 'Disable ping', - 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?', + noPingHelper: `This will disable ping, and the server won't echo ICMP response. Do you want to continue?`, + onPingHelper: 'This will enable ping, and hackers may discover your server. Do you want to continue?', changeStrategy: 'Change the {0} strategy', 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?', @@ -2346,7 +2329,7 @@ const message = { changeStrategyPortHelper2: 'Change the port policy to [accept]. After the port policy is set, normal port access will be restored. Do you want to continue?', stop: 'Stop', - portFormatError: 'Please enter the correct port information!', + portFormatError: 'This field must be a valid port.', portHelper1: 'Multiple ports, e.g. 8080 and 8081', portHelper2: 'Range port, e.g. 8080-8089', changeStrategyHelper: @@ -2361,20 +2344,21 @@ const message = { addressHelper: 'Support IP address or IP segment', allow: 'Allow', deny: 'Deny', - addressFormatError: 'Please enter a valid ip address!', - addressHelper1: 'Supports input of single IPs or IP ranges: 172.16.10.11 or 172.16.0.0/24', - addressHelper2: 'For multiple IPs or IP ranges, separate with commas: 172.16.10.11, 172.16.0.0/24', + // addressFormatError: 'Please enter a valid IP address!', + addressFormatError: 'This field must be a valid IP address.', + addressHelper1: 'Support IP address or IP range. For example, "172.16.10.11" or "172.16.10.0/24".', + addressHelper2: 'For multiple IP addresses, separate with comma. For example, "172.16.10.11, 172.16.0.0/24".', allIP: 'All IP', - portRule: 'Port Rule', + portRule: 'Port rule', forwardRule: 'Forwarding', - ipRule: 'IP Rule', + ipRule: 'IP rule', userAgent: 'User-Agent filter', - sourcePort: 'Source Port', + sourcePort: 'Source port', targetIP: 'Destination IP', - targetPort: 'Destination Port', - forwardHelper1: 'In the case of local port forwarding, the destination IP is: 127.0.0.1', - forwardHelper2: 'If the destination IP is not filled in, it will be forwarded to the local port by default', - forwardHelper3: 'Currently only supports port forwarding for IPv4', + targetPort: 'Destination port', + forwardHelper1: 'If you want to forward to the local port, the destination IP should be set to "127.0.0.1".', + forwardHelper2: 'Leave the destination IP blank to forward to the local port.', + forwardHelper3: 'Only support IPv4 port forwarding.', }, runtime: { runtime: 'Runtime', @@ -2388,13 +2372,11 @@ const message = { localHelper: 'The local operating environment needs to be installed by itself', version: 'Version', versionHelper: 'PHP version, e.g. v8.0', - 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', + buildHelper: `If more extensions are selected, the CPU usage will be higher during the image creation process. Avoid selecting all extensions.`, openrestyWarn: 'PHP needs to be upgraded to OpenResty to version 1.21.4.1 or later to use', toupgrade: 'To Upgrade', edit: 'Edit runtime', - extendHelper: - 'Extensions that do not exist in the list can be selected after manual input, for example: input sockets, and then select the first one in the drop-down list,', + extendHelper: `If the extensions you need are not in the list, you can manually input the extension name. For example, input "sockets", then select the first one.`, rebuildHelper: 'After editing the extension, you need to rebuild the PHP application to take effect', rebuild: 'Rebuild PHP App', source: 'PHP extension source', @@ -2405,15 +2387,15 @@ const message = { tsinghua: 'Tsinghua University', xtomhk: 'XTOM Mirror Station (Hong Kong)', xtom: 'XTOM Mirror Station (Global)', - phpsourceHelper: 'Choose the appropriate source according to your network environment', - appPort: 'App Port', - externalPort: 'External Port', - packageManager: 'Package Manager', - codeDir: 'Code Directory', - appPortHelper: 'The port used by the application', - externalPortHelper: 'The port exposed to the outside world', - runScript: 'Run Script', - runScriptHelper: 'The startup command list is parsed from the package.json file in the source directory', + phpsourceHelper: 'Choose a proper source according to your network environment.', + appPort: 'App port', + externalPort: 'External port', + packageManager: 'Package manager', + codeDir: 'Code directory', + appPortHelper: 'The port used by the application.', + externalPortHelper: 'The port exposed to the outside world.', + runScript: 'Run script', + runScriptHelper: 'The startup command list is parsed from the package.json file in the source directory.', open: 'Open', close: 'Close', operatorHelper: @@ -2428,30 +2410,30 @@ const message = { nodeOperatorHelper: 'Is {0} {1} module? The operation may cause abnormality in the operating environment, please confirm before proceeding', customScript: 'Custom startup command', - customScriptHelper: 'Please fill in the complete startup command, for example: npm run start', - portError: 'Cannot fill in the same port', + customScriptHelper: 'Provide a full startup command. For example, "npm run start".', + portError: `Don't repeat the same port.`, systemRestartHelper: 'Status description: Interruption - status acquisition failed due to system restart', - javaScriptHelper: - 'Please fill in the complete startup command, for example: java -jar halo.jar -Xmx1024M -Xms256M', + javaScriptHelper: 'Provide a full startup command. For example, "java -jar halo.jar -Xmx1024M -Xms256M".', javaDirHelper: 'The directory must contain jar files, subdirectories are also acceptable', - goHelper: 'Please provide a complete start command, for example: go run main.go or ./main', - goDirHelper: 'The directory must contain go files or binary files, subdirectories are also acceptable', + goHelper: 'Provide a full startup command. For example, "go run main.go" or "./main".', + goDirHelper: 'The directory or subdirectory must contain Go or binary files.', pythonHelper: - 'Please fill in the complete startup command, for example: pip install -r requirements.txt && python manage.py runserver 0.0.0.0:5000', - dotnetHelper: 'Please fill in the complete startup comman, for example: dotnet MyWebApp.dll', + 'Provide a full startup command. For example, "pip install -r requirements.txt && python manage.py runserver 0.0.0.0:5000".', + dotnetHelper: 'Provide a full startup command. For example, "dotnet MyWebApp.dll".', }, process: { pid: 'Process ID', - ppid: 'Parent Process ID', + ppid: 'Parent process ID', numThreads: 'Threads', memory: 'Memory', - diskRead: 'Disk Read', - diskWrite: 'Disk Write', + diskRead: 'Disk read', + diskWrite: 'Disk write', netSent: 'uplink', netRecv: 'downstream', numConnections: 'Connections', - startTime: 'Start Time', + startTime: 'Start time', status: 'Status', + state: 'State', running: 'Running', sleep: 'sleep', stop: 'stop', @@ -2460,28 +2442,29 @@ const message = { wait: 'waiting', lock: 'lock', blocked: 'blocked', - cmdLine: 'Start Command', - basic: 'Basic Info', - mem: 'Memory Info', - openFiles: 'File Open', + cmdLine: 'Start command', + basic: 'Basic info', + mem: 'Memory info', + openFiles: 'File open', file: 'File', env: 'Environment', noenv: 'None', - net: 'Network Connection', + net: 'Network connection', laddr: 'Source address/port', raddr: 'Destination address/port', stopProcess: 'End', + viewDetails: 'View details', stopProcessWarn: 'Are you sure you want to end this process (PID:{0})? ', processName: 'Processname', }, tool: { supervisor: { loadStatusErr: 'Failed to retrieve process status, please check the status of the supervisor service.', - notSupport: 'Supervisor is not detected, please refer to the official document for installation', + notSupport: `Supervisor isn't detected. Refer to the official document to install.`, list: 'Daemon process', config: 'Supervisor configuration', primaryConfig: 'Main configuration file location', - notSupportCrl: 'The supervisorctl is not detected, please refer to the official document for installation', + notSupportCrl: `The supervisorctl isn't detected. Refer to the official document to install.`, user: 'User', command: 'Command', dir: 'Directory', @@ -2490,7 +2473,7 @@ const message = { '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/', operatorHelper: 'Operation {1} will be performed on {0}, continue? ', uptime: 'running time', - notStartWarn: 'Supervisor is not started, please start it first', + notStartWarn: `Supervisor isn't started. Start it first.`, serviceName: 'Service name', initHelper: 'The initialization process will modify the configuration file, causing all existing processes to stop, please confirm the risk in advance', @@ -2513,7 +2496,7 @@ const message = { isAlert: 'Alert', alertCount: 'Alert Count', clamHelper: 'Trigger SMS alert when scanning infected files', - cronJobHelper: 'Trigger SMS alert when scheduled task execution fails', + cronJobHelper: 'Trigger SMS alert when task execution fails', licenseHelper: 'Professional version supports SMS alert', alertCountHelper: 'Maximum daily alarm frequency', }, diff --git a/frontend/src/lang/modules/tw.ts b/frontend/src/lang/modules/tw.ts index db94cf225..010575817 100644 --- a/frontend/src/lang/modules/tw.ts +++ b/frontend/src/lang/modules/tw.ts @@ -408,7 +408,7 @@ const message = { loadBackup: '導入備份', remoteAccess: '遠程訪問', remoteHelper: '多個 ip 以逗號分隔,例:172.16.10.111,172.16.10.112', - remoteConnHelper: 'root 帳號遠程連接 mysql 有安全風險,開啟需謹慎!', + remoteConnHelper: 'root 帳號遠程連接 MySQL 有安全風險,開啟需謹慎!', changePassword: '改密', changePasswordHelper: '當前數據庫已經關聯應用,修改密碼將同步修改應用中數據庫密碼,修改後重啟生效。', @@ -826,6 +826,7 @@ const message = { enableMsg: '啟用計劃任務會讓該任務定期自動執行。是否繼續?', taskType: '任務類型', record: '報告', + viewRecords: '查看報告', shell: 'Shell 腳本', log: '備份日誌', logHelper: '備份系統日誌', @@ -2262,6 +2263,7 @@ const message = { numConnections: '連接', startTime: '啟動時間', status: '狀態', + state: '狀態', running: '運行中', sleep: '睡眠', stop: '停止', @@ -2281,6 +2283,7 @@ const message = { laddr: '源地址/端口', raddr: '目標地址/端口', stopProcess: '結束', + viewDetails: '查看詳情', stopProcessWarn: '是否確定結束此進程 (PID:{0})?', processName: '進程名稱', }, diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 041ec8ac2..605d38f5c 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -410,7 +410,7 @@ const message = { loadBackup: '导入备份', remoteAccess: '远程访问', remoteHelper: '多个 ip 以逗号分隔,例:172.16.10.111,172.16.10.112', - remoteConnHelper: 'root 帐号远程连接 mysql 有安全风险,开启需谨慎!', + remoteConnHelper: 'root 帐号远程连接 MySQL 有安全风险,开启需谨慎!', changePassword: '改密', changePasswordHelper: '当前数据库已经关联应用,修改密码将同步修改应用中数据库密码,修改后重启生效。', @@ -623,8 +623,8 @@ const message = { ip: 'IP 地址', cpuShare: 'CPU 权重', cpuShareHelper: '容器默认份额为 1024 个 CPU,增大可使当前容器获得更多的 CPU 时间', - inputIpv4: '请输入 ipv4 地址', - inputIpv6: '请输入 ipv6 地址', + inputIpv4: '请输入 IPv4 地址', + inputIpv6: '请输入 IPv6 地址', containerFromAppHelper: '检测到该容器来源于应用商店,应用操作可能会导致当前编辑失效', containerFromAppHelper1: '在应用商店的已安装页面,点击 [参数] 按钮,进入编辑页面修改容器名称。', @@ -827,6 +827,7 @@ const message = { enableMsg: '启用计划任务会让该任务定期自动执行。是否继续?', taskType: '任务类型', record: '报告', + viewRecords: '查看报告', shell: 'Shell 脚本', log: '备份日志', logHelper: '备份系统日志', @@ -2192,7 +2193,7 @@ const message = { targetPort: '目标端口', forwardHelper1: '如果是本机端口转发,目标IP为:127.0.0.1', forwardHelper2: '如果目标IP不填写,则默认为本机端口转发', - forwardHelper3: '当前仅支持 ipv4 的端口转发', + forwardHelper3: '当前仅支持 IPv4 的端口转发', }, runtime: { runtime: '运行环境', @@ -2264,6 +2265,7 @@ const message = { numConnections: '连接', startTime: '启动时间', status: '状态', + state: '状态', running: '运行中', sleep: '睡眠', stop: '停止', @@ -2283,6 +2285,7 @@ const message = { laddr: '源地址/端口', raddr: '目标地址/端口', stopProcess: '结束', + viewDetails: '查看详情', stopProcessWarn: '是否确定结束此进程 (PID:{0})?', processName: '进程名称', }, diff --git a/frontend/src/views/container/container/operate/index.vue b/frontend/src/views/container/container/operate/index.vue index 8fa60ffe0..6045c9cb0 100644 --- a/frontend/src/views/container/container/operate/index.vue +++ b/frontend/src/views/container/container/operate/index.vue @@ -131,10 +131,10 @@ - + - + diff --git a/frontend/src/views/container/container/upgrade/index.vue b/frontend/src/views/container/container/upgrade/index.vue index 5b0fc07a5..01ad7bfc1 100644 --- a/frontend/src/views/container/container/upgrade/index.vue +++ b/frontend/src/views/container/container/upgrade/index.vue @@ -17,7 +17,7 @@ v-if="form.fromApp" class="common-prompt" :closable="false" - type="error" + type="warning" /> diff --git a/frontend/src/views/container/repo/operator/index.vue b/frontend/src/views/container/repo/operator/index.vue index 9254e2e59..64983ddb4 100644 --- a/frontend/src/views/container/repo/operator/index.vue +++ b/frontend/src/views/container/repo/operator/index.vue @@ -54,7 +54,7 @@ :placeholder="'172.16.10.10:8081'" > - docker pull {{ dialogData.rowData!.downloadUrl }}/nginx + Pull example: docker pull {{ dialogData.rowData!.downloadUrl }}/nginx diff --git a/frontend/src/views/container/setting/index.vue b/frontend/src/views/container/setting/index.vue index 08e541409..7a39af674 100644 --- a/frontend/src/views/container/setting/index.vue +++ b/frontend/src/views/container/setting/index.vue @@ -98,7 +98,7 @@ - +
@@ -131,7 +131,7 @@ {{ $t('container.iptablesHelper1') }} - + - + cgroupfs systemd diff --git a/frontend/src/views/cronjob/index.vue b/frontend/src/views/cronjob/index.vue index 8c7dc1745..ada16a5b8 100644 --- a/frontend/src/views/cronjob/index.vue +++ b/frontend/src/views/cronjob/index.vue @@ -64,7 +64,7 @@ icon="VideoPlay" type="success" > - {{ $t('commons.button.enable') }} + {{ $t('commons.status.enabled') }} - {{ $t('commons.button.disable') }} + {{ $t('commons.status.disabled') }} @@ -390,7 +390,7 @@ const buttons = [ }, }, { - label: i18n.global.t('cronjob.record'), + label: i18n.global.t('cronjob.viewRecords'), click: (row: Cronjob.CronjobInfo) => { loadDetail(row); }, diff --git a/frontend/src/views/host/process/network/index.vue b/frontend/src/views/host/process/network/index.vue index e5432c099..ee76f64ba 100644 --- a/frontend/src/views/host/process/network/index.vue +++ b/frontend/src/views/host/process/network/index.vue @@ -51,7 +51,7 @@ 0">:{{ row.remoteaddr.port }} - + diff --git a/frontend/src/views/host/process/process/index.vue b/frontend/src/views/host/process/process/index.vue index 1712ca5ff..fb8e60468 100644 --- a/frontend/src/views/host/process/process/index.vue +++ b/frontend/src/views/host/process/process/index.vue @@ -124,7 +124,7 @@ const opRef = ref(); const buttons = [ { - label: i18n.global.t('app.detail'), + label: i18n.global.t('process.viewDetails'), click: function (row: any) { openDetail(row); }, diff --git a/frontend/src/views/host/ssh/ssh/address/index.vue b/frontend/src/views/host/ssh/ssh/address/index.vue index 333eb34f8..c3e3caa35 100644 --- a/frontend/src/views/host/ssh/ssh/address/index.vue +++ b/frontend/src/views/host/ssh/ssh/address/index.vue @@ -21,7 +21,7 @@ > - +