From 597c9ea4c0ec85159ea8e92833a30930dc661f76 Mon Sep 17 00:00:00 2001
From: ssongliu <73214554+ssongliu@users.noreply.github.com>
Date: Sat, 1 Jul 2023 22:56:13 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E7=B9=81=E4=BD=93?=
 =?UTF-8?q?=E4=B8=AD=E6=96=87=E9=80=82=E9=85=8D=20(#1497)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 backend/i18n/i18n.go                          |    2 +-
 .../i18n/lang/{zh-tw.yaml => zh-Hant.yaml}    |    8 +-
 frontend/src/api/index.ts                     |    2 +
 frontend/src/lang/index.ts                    |    2 +
 frontend/src/lang/modules/en.ts               |   13 +-
 frontend/src/lang/modules/tw.ts               | 1503 +++++++++++++++++
 frontend/src/lang/modules/zh.ts               |   13 +-
 .../src/layout/components/Sidebar/index.vue   |    2 +-
 frontend/src/store/interface/index.ts         |    2 +-
 frontend/src/views/app-store/apps/index.vue   |   10 +-
 frontend/src/views/app-store/detail/index.vue |    2 +-
 .../views/app-store/detail/params/index.vue   |    2 +-
 .../app-store/installed/detail/index.vue      |    2 +-
 frontend/src/views/home/app/index.vue         |    2 +-
 frontend/src/views/log/operation/index.vue    |    6 +-
 frontend/src/views/setting/panel/index.vue    |    3 +-
 .../src/views/website/runtime/edit/index.vue  |    2 +-
 .../src/views/website/runtime/param/index.vue |    2 +-
 18 files changed, 1533 insertions(+), 45 deletions(-)
 rename backend/i18n/lang/{zh-tw.yaml => zh-Hant.yaml} (92%)
 create mode 100644 frontend/src/lang/modules/tw.ts

diff --git a/backend/i18n/i18n.go b/backend/i18n/i18n.go
index 10e5c6feb..1331deef0 100644
--- a/backend/i18n/i18n.go
+++ b/backend/i18n/i18n.go
@@ -60,7 +60,7 @@ func GinI18nLocalize() gin.HandlerFunc {
 	return ginI18n.Localize(
 		ginI18n.WithBundle(&ginI18n.BundleCfg{
 			RootPath:         "./lang",
-			AcceptLanguage:   []language.Tag{language.Chinese, language.English},
+			AcceptLanguage:   []language.Tag{language.Chinese, language.English, language.TraditionalChinese},
 			DefaultLanguage:  language.Chinese,
 			FormatBundleFile: "yaml",
 			UnmarshalFunc:    yaml.Unmarshal,
diff --git a/backend/i18n/lang/zh-tw.yaml b/backend/i18n/lang/zh-Hant.yaml
similarity index 92%
rename from backend/i18n/lang/zh-tw.yaml
rename to backend/i18n/lang/zh-Hant.yaml
index c0bc93ea1..1a8a57889 100644
--- a/backend/i18n/lang/zh-tw.yaml
+++ b/backend/i18n/lang/zh-Hant.yaml
@@ -1,17 +1,13 @@
 ErrInvalidParams: "請求參數錯誤: {{ .detail }}"
-ErrToken: "Token 訊息錯誤: {{ .detail }}"
 ErrTokenParse: "Token 產生錯誤: {{ .detail }}"
-ErrTokenTimeOut: "登入資料已過期: {{ .detail }}"
 ErrInitialPassword: "原密碼錯誤"
 ErrInternalServer: "伺服器內部錯誤: {{ .detail }}"
-ErrRecordExist: "紀錄已存在"
-ErrRecordNotFound: "紀錄未找到"
+ErrRecordExist: "記錄已存在"
+ErrRecordNotFound: "記錄未找到"
 ErrStructTransform: "類型轉換失敗: {{ .detail }}"
 ErrNotLogin: "用戶未登入: {{ .detail }}"
-ErrNotSafety: "當前用戶登入狀態不安全: {{ .detail }}"
 ErrPasswordExpired: "當前密碼已過期: {{ .detail }}"
 ErrNotSupportType: "系統暫不支持當前類型: {{ .detail }}"
-ErrRepoNotValid: "遠程倉庫驗證失敗!"
 
 #common
 ErrNameIsExist: "名稱已存在"
diff --git a/frontend/src/api/index.ts b/frontend/src/api/index.ts
index 6e8b1834c..08ef20f64 100644
--- a/frontend/src/api/index.ts
+++ b/frontend/src/api/index.ts
@@ -18,11 +18,13 @@ class RequestHttp {
     service: AxiosInstance;
     public constructor(config: AxiosRequestConfig) {
         this.service = axios.create(config);
+        let language = globalStore.language === 'tw' ? 'zh-Hant' : globalStore.language;
         this.service.interceptors.request.use(
             (config: AxiosRequestConfig) => {
                 if (config.method != 'get') {
                     config.headers = {
                         'X-CSRF-TOKEN': globalStore.csrfToken,
+                        'Accept-Language': language,
                         ...config.headers,
                     };
                 }
diff --git a/frontend/src/lang/index.ts b/frontend/src/lang/index.ts
index 360f376be..ebb702830 100644
--- a/frontend/src/lang/index.ts
+++ b/frontend/src/lang/index.ts
@@ -1,5 +1,6 @@
 import { createI18n } from 'vue-i18n';
 import zh from './modules/zh';
+import tw from './modules/tw';
 import en from './modules/en';
 
 const i18n = createI18n({
@@ -8,6 +9,7 @@ const i18n = createI18n({
     globalInjection: true,
     messages: {
         zh,
+        tw,
         en,
     },
     warnHtmlMessage: false,
diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts
index 58a597bae..61a5d40b6 100644
--- a/frontend/src/lang/modules/en.ts
+++ b/frontend/src/lang/modules/en.ts
@@ -135,6 +135,7 @@ const message = {
             licenseHelper:
                 'Agree &laquo; <a href="https://www.fit2cloud.com/legal/licenses.html" target="_blank">Community License Agreement</a> &raquo;',
             errorAgree: 'Please click to agree to the Community Software License Agreement',
+            logout: 'Logout',
         },
         rule: {
             username: 'Please enter a username',
@@ -182,18 +183,6 @@ const message = {
             notFound: 'The resource does not exist',
             commonError: 'The request failed',
         },
-        header: {
-            language: 'Internationalization',
-            zh: '简体中文',
-            en: 'English',
-            theme: 'Layout Settings',
-            globalTheme: 'Global',
-            themeColor: 'Theme Color',
-            darkTheme: 'Dark Theme',
-            personalData: 'Personal Data',
-            changePassword: 'Change Password',
-            logout: 'Logout',
-        },
         service: {
             serviceNotStarted: 'The {0} service is not currently started',
         },
diff --git a/frontend/src/lang/modules/tw.ts b/frontend/src/lang/modules/tw.ts
new file mode 100644
index 000000000..5c21bd65a
--- /dev/null
+++ b/frontend/src/lang/modules/tw.ts
@@ -0,0 +1,1503 @@
+import fit2cloudTwLocale from 'fit2cloud-ui-plus/src/locale/lang/zh-cn';
+const message = {
+    commons: {
+        true: '是',
+        false: '否',
+        example: '例:',
+        button: {
+            create: '創建',
+            add: '添加',
+            save: '保存',
+            set: '設置',
+            sync: '同步',
+            delete: '刪除',
+            edit: '編輯',
+            enable: '啟用',
+            disable: '禁用',
+            confirm: '確認',
+            cancel: '取消',
+            reset: '重置',
+            restart: '重啟',
+            conn: '連接',
+            disconn: '斷開',
+            clean: '清空',
+            login: '登錄',
+            close: '關閉',
+            stop: '關閉',
+            start: '開啟',
+            view: '詳情',
+            watch: '追蹤',
+            handle: '執行',
+            expand: '展開',
+            log: '日誌',
+            back: '返回',
+            backup: '備份',
+            recover: '恢復',
+            retry: '重試',
+            upload: '上傳',
+            download: '下載',
+            init: '初始化',
+            verify: '驗證',
+            saveAndEnable: '保存並啟用',
+            import: '導入',
+            search: '搜索',
+            refresh: '刷新',
+            get: '獲取',
+            upgrade: '升級',
+        },
+        search: {
+            timeStart: '開始時間',
+            timeEnd: '結束時間',
+            timeRange: '至',
+            dateStart: '開始日期',
+            dateEnd: '結束日期',
+        },
+        table: {
+            all: '所有',
+            total: '共 {0} 條',
+            name: '名稱',
+            type: '類型',
+            status: '狀態',
+            statusSuccess: '成功',
+            statusFailed: '失敗',
+            statusWaiting: '進行中...',
+            records: '任務輸出',
+            group: '分組',
+            createdAt: '創建時間',
+            publishedAt: '發布時間',
+            date: '時間',
+            updatedAt: '更新時間',
+            operate: '操作',
+            message: '信息',
+            description: '描述信息',
+            interval: '耗時',
+            user: '用戶',
+            title: '標題',
+            port: '端口',
+            protocol: '協議',
+            tableSetting: '列表設置',
+            autoRefresh: '定時刷新',
+            refreshRate: '刷新頻率',
+        },
+        loadingText: {
+            Upgrading: '系統升級中,請稍候...',
+            Restarting: '系統重啟中,請稍候...',
+            Snapshoting: '製作快照中,請稍候...',
+            Recovering: '從快照恢復中,請稍候...',
+            Rollbacking: '快照回滾中,請稍候...',
+        },
+        msg: {
+            delete: '刪除 操作不可回滾,是否繼續?',
+            clean: '清空 操作不可回滾,是否繼續?',
+            deleteTitle: '刪除',
+            deleteSuccess: '刪除成功',
+            loginSuccess: '登錄成功',
+            operationSuccess: '操作成功',
+            copySuccess: '復製成功',
+            notSupportOperation: '不支持的當前操作',
+            requestTimeout: '請求超時,請稍後重試',
+            infoTitle: '提示',
+            notRecords: '當前任務未產生執行記錄',
+            sureLogOut: '您是否確認退出登錄?',
+            createSuccess: '創建成功',
+            updateSuccess: '更新成功',
+            uploadSuccess: '上傳成功',
+            operate: '操作',
+            operateConfirm: '如果確認操作,請手動輸入',
+            inputOrSelect: '請選擇或輸入',
+            copyfailed: '復製失敗',
+            backupSuccess: '備份成功',
+            restoreSuccess: '備份成功',
+            notFound: '抱歉,您訪問的頁面不存在',
+            unSupportType: '不支持當前文件類型!',
+            unSupportSize: '上傳文件超過 {0}M,請確認!',
+            fileExist: '當前文件夾已存在該文件,不支持重復上傳!',
+            fileNameErr: '僅支持上傳名稱包含英文、中文、數字或者 .-_ ,長度 1-256 位的文件',
+            confirmNoNull: '請確認 {0} 值不為空',
+        },
+        login: {
+            username: '用戶名',
+            password: '密碼',
+            welcome: '歡迎回來,請輸入用戶名和密碼登錄!',
+            errorAuthInfo: '您輸入的用戶名或密碼不正確,請重新輸入!',
+            errorMfaInfo: '錯誤的驗證信息,請重試!',
+            captchaHelper: '驗證碼',
+            errorCaptcha: '驗證碼錯誤!',
+            notSafe: '暫無權限訪問',
+            safeEntrance1: '當前環境已經開啟了安全入口登錄',
+            safeEntrance2: '在 SSH 終端輸入以下命令來查看面板入口: 1pctl user-info',
+            errIP1: '當前環境已經開啟了授權 IP 訪問',
+            errDomain1: '當前環境已經開啟了訪問域名綁定',
+            errHelper: '可在 SSH 終端輸入以下命令來重置綁定信息: ',
+            codeInput: '請輸入 MFA 驗證器的 6 位驗證碼',
+            mfaTitle: 'MFA 認證',
+            mfaCode: 'MFA 驗證碼',
+            title: 'Linux 服務器運維管理面板',
+            licenseHelper:
+                '同意 &laquo; <a href="https://www.fit2cloud.com/legal/licenses.html" target="_blank"> 飛致雲社區軟件許可協議</a> &raquo;',
+            errorAgree: '請點擊同意社區軟件許可協議',
+            logout: '退出登錄',
+        },
+        rule: {
+            username: '請輸入用戶名',
+            password: '請輸入密碼',
+            rePassword: '密碼不一致,請檢查後重新輸入',
+            requiredInput: '請填寫必填項',
+            requiredSelect: '請選擇必選項',
+            illegalInput: '輸入框中存在不合法字符',
+            commonName: '支持英文、中文、數字、.-和_,長度1-30',
+            userName: '支持英文、中文、數字和_,長度3-30',
+            simpleName: '支持英文、數字、_,長度1-30',
+            dbName: '支持英文、中文、數字、.-_,長度1-16',
+            imageName: '支持英文、數字、:/.-_,長度1-150',
+            volumeName: '支持英文、數字、.-和_,長度2-30',
+            complexityPassword: '請輸入長度大於 8 位且包含字母、數字、特殊字符至少兩項的密碼組合',
+            commonPassword: '請輸入 6 位以上長度密碼',
+            linuxName: '長度1-30,名稱不能含有{0}等符號',
+            email: '請輸入正確的郵箱',
+            number: '請輸入正確的數字',
+            integer: '請輸入正確的正整數',
+            ip: '請輸入正確的 IP 地址',
+            host: '請輸入正確的 IP 或者域名',
+            port: '請輸入正確的端口,1-65535',
+            selectHelper: '請選擇正確的 {0} 文件',
+            domain: '域名格式錯誤',
+            databaseName: '支持英文、數字、_,長度1-30',
+            ipErr: 'IP [{0}] 格式錯誤,請檢查',
+            numberRange: '數字範圍: {0} - {1}',
+            paramName: '支持英文、數字、.-和_,長度2-64',
+            paramComplexity: '支持英文、數字、{0},長度6-128,特殊字符不能在首尾',
+            paramUrlAndPort: '格式為 http(s)://(域名/ip):(端口)',
+            nginxDoc: '僅支持英文大小寫,數字,和.',
+            appName: '支持英文、數字、-和_,長度2-30,並且不能以-_開頭和結尾',
+            containerName: '支持字母、數字、下劃線、連字符和點,不能以連字符-或點.結尾,長度1-127',
+            disableFunction: '僅支持字母和,',
+            leechExts: '僅支持字母數字和,',
+            paramSimple: '支持小寫字母和數字,長度1-64',
+        },
+        res: {
+            paramError: '請求失敗,請稍後重試!',
+            forbidden: '當前用戶無權限',
+            serverError: '服務異常',
+            notFound: '資源不存在',
+            commonError: '請求失敗',
+        },
+        service: {
+            serviceNotStarted: '當前未啟動 {0} 服務',
+        },
+        status: {
+            running: '已啟動',
+            success: '成功',
+            waiting: '執行中',
+            failed: '失敗',
+            stopped: '已停止',
+            error: '失敗',
+            created: '已創建',
+            restarting: '重啟中',
+            uploading: '上傳中',
+            unhealthy: '異常',
+            removing: '遷移中',
+            paused: '暫停',
+            exited: '停止',
+            installing: '安裝中',
+            enabled: '已啟用',
+            disabled: '已停止',
+            normal: '正常',
+            building: '製作鏡像中',
+            downloaderr: '下載失敗',
+            upgrading: '升級中',
+            upgradeerr: '升級失敗',
+        },
+        units: {
+            second: '秒',
+            minute: '分鐘',
+            hour: '小時',
+            day: '天',
+            week: '周',
+            month: '月',
+            year: '年',
+            time: '次',
+            core: '核',
+        },
+    },
+    menu: {
+        home: '概覽',
+        apps: '應用商店',
+        website: '網站',
+        project: '項目',
+        config: '配置',
+        ssh: 'SSH 配置',
+        firewall: '防火墻',
+        ssl: '證書',
+        database: '數據庫',
+        container: '容器',
+        cronjob: '計劃任務',
+        host: '主機',
+        files: '文件',
+        monitor: '監控',
+        terminal: '終端',
+        settings: '面板設置',
+        toolbox: '工具箱',
+        logs: '日誌審計',
+        runtime: '運行環境',
+        processManage: '進程管理',
+        process: '進程',
+    },
+    home: {
+        overview: '概覽',
+        entranceHelper: '設置安全入口有利於提高系統的安全性,如有需要,前往 面板設置-安全 中,啟用安全入口',
+        appInstalled: '已安裝應用',
+        systemInfo: '系統信息',
+        hostname: '主機名稱',
+        platformVersion: '發行版本',
+        kernelVersion: '內核版本',
+        kernelArch: '系統類型',
+        network: '流量',
+        io: '磁盤 IO',
+        baseInfo: '基本信息',
+        totalSend: '總發送',
+        totalRecv: '總接收',
+        rwPerSecond: '讀寫次數',
+        ioDelay: '讀寫延遲',
+        uptime: '啟動時間',
+        runningTime: '運行時間',
+
+        runSmoothly: '運行流暢',
+        runNormal: '運行正常',
+        runSlowly: '運行緩慢',
+        runJam: '運行堵塞',
+
+        core: '物理核心',
+        logicCore: '邏輯核心',
+        loadAverage: '最近 {0} 分鐘平均負載',
+        load: '負載',
+        mount: '掛載點',
+        fileSystem: '文件系統',
+        total: '總數',
+        used: '已用',
+        free: '可用',
+        percent: '使用率',
+        app: '推薦應用',
+        goInstall: '去安裝',
+
+        networkCard: '網卡',
+        disk: '磁盤',
+    },
+    tabs: {
+        more: '更多',
+        hide: '收起',
+        closeCurrent: '關閉當前',
+        closeOther: '關閉其它',
+        closeAll: '關閉所有',
+    },
+    header: {
+        logout: '退出登錄',
+    },
+    database: {
+        database: '數據庫',
+        delete: '刪除操作無法回滾,請輸入 "',
+        deleteHelper: '" 刪除此數據庫',
+        create: '創建數據庫',
+        noMysql: '當前未檢測到 {0} 數據庫,請進入應用商店點擊安裝!',
+        mysqlBadStatus: '當前 mysql 應用狀態異常,請在',
+        adjust: '中查看原因或修改配置',
+        goInstall: '去應用商店安裝',
+        source: '來源',
+        permission: '權限',
+        permissionForIP: '指定 IP',
+        permissionAll: '所有人(%)',
+        databaseConnInfo: '連接信息',
+        rootPassword: 'root 密碼',
+        serviceName: '服務名稱',
+        serviceNameHelper: '用於同一 network 下的容器間訪問',
+        backupList: '備份列表',
+        loadBackup: '導入備份',
+        remoteAccess: '遠程訪問',
+        remoteHelper: '多個 ip 以逗號分隔,例:172.16.10.111,172.16.10.112',
+        remoteConnHelper: 'root 帳號遠程連接 mysql 有安全風險,開啟需謹慎!',
+        changePassword: '改密',
+        changePasswordHelper: '當前數據庫已經關聯應用,修改密碼將同步修改應用中數據庫密碼,修改後重啟生效。',
+
+        portHelper: '該端口為容器對外暴露端口,修改需要單獨保存並且重啟容器!',
+
+        confChange: '配置修改',
+
+        selectFile: '選擇文件',
+        dropHelper: '將上傳文件拖拽到此處,或者',
+        clickHelper: '點擊上傳',
+        supportUpType: '僅支持 sql、sql.gz、tar.gz 文件',
+        zipFormat: 'tar.gz 壓縮包結構:test.tar.gz 壓縮包內,必需包含 test.sql',
+
+        currentStatus: '當前狀態',
+        baseParam: '基礎參數',
+        performanceParam: '性能參數',
+        runTime: '啟動時間',
+        connections: '總連接數',
+        bytesSent: '發送',
+        bytesReceived: '接收',
+        queryPerSecond: '每秒查詢',
+        txPerSecond: '每秒事務',
+        connInfo: '活動/峰值連接數',
+        connInfoHelper: '若值過大,增加 max_connections',
+        threadCacheHit: '線程緩存命中率',
+        threadCacheHitHelper: '若過低,增加 thread_cache_size',
+        indexHit: '索引命中率',
+        indexHitHelper: '若過低,增加 key_buffer_size',
+        innodbIndexHit: 'Innodb 索引命中率',
+        innodbIndexHitHelper: '若過低,增加 innodb_buffer_pool_size',
+        cacheHit: '查詢緩存命中率',
+        cacheHitHelper: '若過低,增加 query_cache_size',
+        tmpTableToDB: '創建臨時表到磁盤',
+        tmpTableToDBHelper: '若過大,嘗試增加 tmp_table_size',
+        openTables: '已打開的表',
+        openTablesHelper: 'table_open_cache 配置值應大於等於此值',
+        selectFullJoin: '沒有使用索引的量',
+        selectFullJoinHelper: '若不為0,請檢查數據表的索引是否合理',
+        selectRangeCheck: '沒有索引的 JOIN 量',
+        selectRangeCheckHelper: '若不為0,請檢查數據表的索引是否合理',
+        sortMergePasses: '排序後的合並次數',
+        sortMergePassesHelper: '若值過大,增加sort_buffer_size',
+        tableLocksWaited: '鎖表次數',
+        tableLocksWaitedHelper: '若值過大,請考慮增加您的數據庫性能',
+
+        performanceTuning: '性能調整',
+        optimizationScheme: '優化方案',
+        keyBufferSizeHelper: '用於索引的緩沖區大小',
+        queryCacheSizeHelper: '查詢緩存,不開啟請設為0',
+        tmpTableSizeHelper: '臨時表緩存大小',
+        innodbBufferPoolSizeHelper: 'Innodb 緩沖區大小',
+        innodbLogBufferSizeHelper: 'Innodb 日誌緩沖區大小',
+        sortBufferSizeHelper: '* 連接數, 每個線程排序的緩沖大小',
+        readBufferSizeHelper: '* 連接數, 讀入緩沖區大小',
+        readRndBufferSizeHelper: '* 連接數, 隨機讀取緩沖區大小',
+        joinBufferSizeHelper: '* 連接數, 關聯表緩存大小',
+        threadStackelper: '* 連接數, 每個線程的堆棧大小',
+        binlogCacheSizeHelper: '* 連接數, 二進製日誌緩存大小(4096的倍數)',
+        threadCacheSizeHelper: '線程池大小',
+        tableOpenCacheHelper: '表緩存',
+        maxConnectionsHelper: '最大連接數',
+        restart: '重啟數據庫',
+
+        log: '日誌',
+        slowLog: '慢日誌',
+        noData: '暫無慢日誌...',
+
+        isOn: '開啟',
+        longQueryTime: '閾值(秒)',
+        thresholdRangeHelper: '請輸入正確的閾值(1 - 600)',
+
+        timeout: '超時時間',
+        timeoutHelper: '空閑連接超時時間,0表示不斷開',
+        maxclients: '最大連接數',
+        requirepassHelper: '留空代表沒有設置密碼,修改需要單獨保存並且重啟容器!',
+        databases: '數據庫數量',
+        maxmemory: '最大內存使用',
+        maxmemoryHelper: '0 表示不做限製',
+        tcpPort: '當前監聽端口',
+        uptimeInDays: '已運行天數',
+        connectedClients: '連接的客戶端數量',
+        usedMemory: 'Redis 歷史分配內存的峰值',
+        usedMemoryRss: 'Redis 當前占用的系統內存總量',
+        memFragmentationRatio: '內存碎片比率',
+        totalConnectionsReceived: '運行以來連接過的客戶端的總數量',
+        totalCommandsProcessed: '運行以來執行過的命令的總數量',
+        instantaneousOpsPerSec: '服務器每秒鐘執行的命令數量',
+        keyspaceHits: '查找數據庫鍵成功的次數',
+        keyspaceMisses: '查找數據庫鍵失敗的次數',
+        hit: '查找數據庫鍵命中率',
+        latestForkUsec: '最近一次 fork() 操作耗費的微秒數',
+
+        recoverHelper: '即將使用 [{0}] 對數據進行覆蓋,是否繼續?',
+        submitIt: '覆蓋數據',
+
+        baseConf: '基礎配置',
+        allConf: '全部配置',
+        restartNow: '立即重啟',
+        restartNowHelper1: '修改配置後需要重啟生效,若您的數據需要持久化請先執行 save 操作。',
+        restartNowHelper: '修改配置後需要重啟生效。',
+
+        persistence: '持久化',
+        rdbHelper1: '秒內,插入',
+        rdbHelper2: '條數據',
+        rdbHelper3: '符合任意一個條件將會觸發RDB持久化',
+        rdbInfo: '請確認規則列表中值在 1-100000 之間',
+
+        containerConn: '容器連接地址',
+        containerConnHelper: 'PHP 運行環境/容器安裝的應用使用此連接地址',
+        remoteConn: '外部連接地址',
+        remoteConnHelper2: '非容器或外部連接使用此地址',
+        localIP: '本機 IP',
+    },
+    container: {
+        createContainer: '創建容器',
+        updateContaienrHelper: '容器編輯需要重建容器,任何未持久化的數據將會丟失,是否繼續?',
+        containerList: '容器列表',
+        operatorHelper: '將對選中容器進行 {0} 操作,是否繼續?',
+        operatorAppHelper: '存在來源於應用商店的容器,{0} 操作可能會影響到該服務的正常使用,是否確認?',
+        start: '啟動',
+        stop: '停止',
+        restart: '重啟',
+        kill: '強製停止',
+        pause: '暫停',
+        unpause: '恢復',
+        rename: '重命名',
+        remove: '刪除',
+        containerPrune: '清理容器',
+        containerPruneHelper: '清理容器 將刪除所有處於停止狀態的容器,該操作無法回滾,是否繼續?',
+        imagePrune: '清理鏡像',
+        imagePruneSome: '未標簽鏡像',
+        imagePruneSomeHelper: '清理標簽為 none 且未被任何容器使用的鏡像。',
+        imagePruneAll: '未使用鏡像',
+        imagePruneAllHelper: '清理所有未被任何容器使用的鏡像。',
+        networkPrune: '清理網絡',
+        networkPruneHelper: '清理網絡 將刪除所有未被使用的網絡,該操作無法回滾,是否繼續?',
+        volumePrune: '清理存儲卷',
+        volumePruneHelper: '清理存儲卷 將刪除所有未被使用的本地存儲卷,該操作無法回滾,是否繼續?',
+        cleanSuccess: '操作成功,本次清理數量: {0} 個!',
+        cleanSuccessWithSpace: '操作成功,本次清理數量: {0} 個,釋放磁盤空間: {1}!',
+        container: '容器',
+        upTime: '運行時長',
+        all: '全部',
+        fetch: '過濾',
+        lines: '條數',
+        linesHelper: '請輸入正確的日誌獲取條數!',
+        lastDay: '最近一天',
+        last4Hour: '最近 4 小時',
+        lastHour: '最近 1 小時',
+        last10Min: '最近 10 分鐘',
+        cleanLog: '清空日誌',
+        newName: '新名稱',
+        source: '資源使用率',
+        cpuShare: 'CPU 權重',
+        cpuShareHelper: '容器默認份額為 1024 個 CPU,增大可使當前容器獲得更多的 CPU 時間',
+
+        command: '命令',
+        custom: '自定義',
+        containerTerminal: '終端',
+        emptyUser: '為空時,將使用容器默認的用戶登錄',
+
+        upgradeHelper: '該操作僅支持容器版本升級',
+        upgradeWarning: '當前目標版本低於原鏡像版本,請重新輸入!',
+        upgradeWarning2: '升級操作需要重建容器,任何未持久化的數據將會丟失,是否繼續?',
+        oldImage: '當前鏡像',
+        targetImage: '目標鏡像',
+        appHelper: '該容器來源於應用商店,升級可能導致該服務不可用,是否繼續?',
+
+        server: '服務器',
+        serverExample: '例: 80, 80-88, ip:80 或者 ip:80-88',
+        containerExample: '例: 80 或者 80-88',
+        exposePort: '暴露端口',
+        exposeAll: '暴露所有',
+        cmd: '啟動命令',
+        cmdHelper: '例:echo "hello"',
+        autoRemove: '容器退出後自動刪除容器',
+        cpuQuota: 'CPU 限製',
+        memoryLimit: '內存限製',
+        limitHelper: '限製為 0 則關閉限製,最大可用為 {0}',
+        mount: '掛載卷',
+        serverPath: '服務器目錄',
+        containerDir: '容器目錄',
+        volumeHelper: '請確認存儲卷內容輸入正確',
+        modeRW: '讀寫',
+        modeR: '只讀',
+        mode: '權限',
+        env: '環境變量',
+        restartPolicy: '重啟規則',
+        always: '一直重啟',
+        unlessStopped: '關閉後重啟',
+        onFailure: '失敗後重啟(默認重啟 5 次)',
+        no: '不重啟',
+
+        monitor: '監控',
+        refreshTime: '刷新間隔',
+        cache: '緩存',
+
+        image: '鏡像',
+        imagePull: '拉取鏡像',
+        imagePush: '推送鏡像',
+        imageDelete: '刪除鏡像',
+        imageDeleteTag: '刪除 Tag',
+        repoName: '倉庫名',
+        imageName: '鏡像名',
+        httpRepo: 'http 倉庫添加授信需要重啟 docker 服務',
+        delInsecure: '刪除授信',
+        delInsecureHelper: '刪除授信需要重啟 docker 服務,是否刪除?',
+        pull: '拉取',
+        path: '路徑',
+        importImage: '導入鏡像',
+        imageBuild: '構建鏡像',
+        build: '構建鏡像',
+        pathSelect: '路徑選擇',
+        label: '標簽',
+        imageTag: '鏡像標簽',
+        push: '推送',
+        fileName: '文件名',
+        export: '導出',
+        exportImage: '導出鏡像',
+        version: '版本',
+        size: '大小',
+        from: '來源',
+        tag: '標簽',
+        tagHelper: '一行一個,例: \nkey1=value1\nkey2=value2',
+        imageNameHelper: '鏡像名稱及 Tag,例:nginx:latest',
+
+        network: '網絡',
+        createNetwork: '創建網絡',
+        networkName: '網絡名',
+        driver: '模式',
+        option: '參數',
+        attachable: '可用',
+        subnet: '子網',
+        scope: 'IP 範圍',
+        gateway: '網關',
+
+        volume: '存儲卷',
+        volumeDir: '存儲卷目錄',
+        nfsEnable: '啟用 NFS 存儲',
+        nfsAddress: '地址',
+        nfsAddressHelper: '支持輸入 ip 或者域名',
+        mountpoint: '掛載點',
+        mountpointNFSHelper: '例:/nfs, /nfs-share',
+        options: '可選參數',
+        createVolume: '創建存儲卷',
+
+        repo: '倉庫',
+        createRepo: '添加倉庫',
+        downloadUrl: '下載地址',
+        imageRepo: '鏡像倉庫',
+        repoHelper: '是否包含鏡像倉庫/組織/項目?',
+        auth: '認證',
+        mirrorHelper:
+            '當存在多個加速器時,需要換行顯示,例: \nhttp://xxxxxx.m.daocloud.io \nhttps://xxxxxx.mirror.aliyuncs.com',
+        registrieHelper: '當存在多個私有倉庫時,需要換行顯示,例:\n172.16.10.111:8081 \n172.16.10.112:8081',
+
+        compose: '編排',
+        fromChangeHelper: '切換來源將清空當前已編輯內容,是否繼續?',
+        composePathHelper: '配置文件保存路徑: {0}',
+        composeHelper: '通過 1Panel 編輯或者模版創建的編排,將保存在 {0}/docker/compose 路徑下',
+        deleteFile: '刪除文件',
+        deleteComposeHelper: '刪除編排文件所在目錄下所有文件,包括該文件下的持久化文件等,請謹慎操作!',
+        deleteCompose: '" 刪除此編排',
+        apps: '應用商店',
+        local: '本地',
+        createCompose: '創建編排',
+        template: '模版',
+        composeTemplate: '編排模版',
+        createComposeTemplate: '創建編排模版',
+        description: '描述',
+        content: '內容',
+        containerNumber: '容器數量',
+        down: '刪除',
+        up: '啟動',
+        composeDetailHelper: '該 compose 為 1Panel 編排外部創建。暫不支持啟停操作。',
+        composeOperatorHelper: '將對 {0} 進行 {1} 操作,是否繼續?',
+
+        setting: '配置',
+        operatorStatusHelper: '此操作將{0}Docker 服務,是否繼續?',
+        dockerStatus: 'Docker 服務',
+        daemonJsonPathHelper: '請保證配置路徑與 docker.service 中指定的配置路徑保持一致。',
+        mirrors: '鏡像加速',
+        mirrorsHelper: '優先使用加速 URL 執行操作,設置為空則取消鏡像加速。',
+        mirrorsHelper2: '具體操作配置請參照官方文檔',
+        registries: '私有倉庫',
+        cutLog: '日誌切割',
+        cutLogHelper1: '當前配置只會影響新創建的容器;',
+        cutLogHelper2: '已經創建的容器需要重新創建使配置生效;',
+        cutLogHelper3:
+            '註意,重新創建容器可能會導致數據丟失。如果你的容器中有重要數據,確保在執行重建操作之前進行備份。',
+        maxSize: '文件大小',
+        maxFile: '保留份數',
+        liveHelper: '允許在 Docker 守護進程發生意外停機或崩潰時保留正在運行的容器狀態',
+        liveWithSwarmHelper: 'live-restore 守護進程配置與 Swarm 模式不兼容',
+        iptablesDisable: '關閉 iptables',
+        iptablesHelper1: 'Docker 對 iptables 規則的自動配置',
+        iptablesHelper2: '關閉 iptables 會導致容器無法與外部網絡通信。',
+        daemonJsonPath: '配置路徑',
+        serviceUnavailable: '當前未啟動 Docker 服務,請在',
+        startIn: '中開啟',
+    },
+    cronjob: {
+        cronTask: '計劃任務',
+        changeStatus: '狀態修改',
+        disableMsg: '停止計劃任務會導致該任務不再自動執行。是否繼續?',
+        enableMsg: '啟用計劃任務會讓該任務定期自動執行。是否繼續?',
+        taskType: '任務類型',
+        record: '報告',
+        shell: 'Shell 腳本',
+        containerCheckBox: '在容器中執行(無需再輸入進入容器命令)',
+        containerName: '容器名稱',
+        ntp: '時間同步',
+        website: '備份網站',
+        rulesHelper: '當存在多個壓縮排除規則時,需要換行顯示,例:\n*.log \n*.sql',
+        lastRecordTime: '上次執行時間',
+        database: '備份數據庫',
+        missBackupAccount: '未能找到備份賬號',
+        syncDate: '同步時間 ',
+        releaseMemory: '釋放內存',
+        curl: '訪問 URL',
+        taskName: '任務名稱',
+        cronSpec: '執行周期',
+        cronSpecHelper: '請輸入正確的執行周期',
+        cleanHelper: '該操作將所有任務執行記錄、備份文件和日誌文件,是否繼續?',
+        directory: '備份目錄',
+        sourceDir: '備份目錄',
+        allOptionHelper: '當前計劃任務為備份所有【{0}】,暫不支持直接下載,可在【{0}】備份列表中查看',
+        exclusionRules: '排除規則',
+        saveLocal: '同時保留本地備份(和雲存儲保留份數一致)',
+        url: 'URL 地址',
+        target: '備份到',
+        targetHelper: '第三方備份賬號在面板設置中維護',
+        retainCopies: '保留份數',
+        retainCopiesHelper: '執行記錄、日誌文件、備份文件保留份數',
+        cronSpecRule: '請輸入正確的執行周期',
+        perMonth: '每月',
+        perWeek: '每周',
+        perHour: '每小時',
+        perNDay: '每隔 N 日',
+        perDay: '每天',
+        perNHour: '每隔 N 時',
+        perNMinute: '每隔 N 分鐘',
+        perNSecond: '每隔 N 秒',
+        per: '每隔',
+        handle: '執行',
+        day: '日',
+        monday: '周一',
+        tuesday: '周二',
+        wednesday: '周三',
+        thursday: '周四',
+        friday: '周五',
+        saturday: '周六',
+        sunday: '周日',
+        shellContent: '腳本內容',
+        errRecord: '錯誤的日誌記錄',
+        errHandle: '任務執行失敗',
+        noRecord: '當前計劃任務暫未產生記錄',
+        cleanData: '刪除備份文件',
+        cleanDataHelper: '刪除該任務執行過程中產生的備份文件',
+        noLogs: '暫無任務輸出...',
+        errPath: '備份路徑 [{0}] 錯誤,無法下載!',
+        cutWebsiteLog: '切割網站日誌',
+        cutWebsiteLogHelper: '切割的日誌文件會備份到 1Panel 的 backup 目錄下',
+    },
+    monitor: {
+        monitor: '監控',
+        globalFilter: '全局過濾',
+        enableMonitor: '監控狀態',
+        storeDays: '保存天數',
+        cleanMonitor: '清空監控記錄',
+
+        avgLoad: '平均負載',
+        loadDetail: '負載詳情',
+        resourceUsage: '資源使用率',
+        networkCard: '網卡',
+        read: '讀取',
+        write: '寫入',
+        readWriteCount: '讀寫次數',
+        readWriteTime: '讀寫延遲',
+        today: '今天',
+        yesterday: '昨天',
+        lastNDay: '近 {0} 天',
+        memory: '內存',
+        cache: '緩存',
+        disk: '磁盤',
+        network: '網絡',
+        up: '上行',
+        down: '下行',
+        interval: '采集間隔(分鐘)',
+    },
+    terminal: {
+        conn: '連接',
+        connLocalErr: '無法自動認證,請填寫本地服務器的登錄信息!',
+        testConn: '連接測試',
+        saveAndConn: '保存並連接',
+        connTestOk: '連接信息可用',
+        connTestFailed: '連接不可用,請檢查連接信息!',
+        host: '主機',
+        createConn: '新建連接',
+        group: '分組',
+        noHost: '暫無主機',
+        groupChange: '切換分組',
+        expand: '全部展開',
+        fold: '全部收縮',
+        batchInput: '批量輸入',
+        quickCommand: '快速命令',
+        groupDeleteHelper: '移除組後,組內所有連接將遷移到 default 組內,是否確認',
+        command: '命令',
+        addHost: '添加主機',
+        localhost: '本地服務器',
+        ip: '主機地址',
+        authMode: '認證方式',
+        passwordMode: '密碼認證',
+        rememberPassword: '記住密碼',
+        keyMode: '私鑰認證',
+        key: '私鑰',
+        keyPassword: '私鑰密碼',
+        emptyTerminal: '暫無終端連接',
+    },
+    logs: {
+        panelLog: '面板日誌',
+        operation: '操作日誌',
+        login: '訪問日誌',
+        loginIP: '登錄 IP',
+        loginAddress: '登錄地址',
+        loginAgent: '用戶代理',
+        loginStatus: '登錄狀態',
+        system: '系統日誌',
+        deleteLogs: '清空日誌',
+        resource: '資源',
+        operate: '操作',
+        detail: {
+            hosts: '主機',
+            apps: '應用',
+            websites: '網站',
+            containers: '容器',
+            files: '文件管理',
+            logs: '日誌審計',
+            settings: '面板設置',
+            cronjobs: '計劃任務',
+            databases: '數據庫',
+        },
+        websiteLog: '網站日誌',
+        runLog: '運行日誌',
+        errLog: '錯誤日誌',
+    },
+    file: {
+        dir: '文件夾',
+        upload: '上傳',
+        download: '下載',
+        fileName: '文件名',
+        search: '在當前目錄下查找',
+        mode: '權限',
+        owner: '所有者',
+        file: '文件',
+        remoteFile: '遠程下載',
+        share: '分享',
+        sync: '數據同步',
+        size: '大小',
+        updateTime: '修改時間',
+        open: '打開',
+        rename: '重命名',
+        role: '權限',
+        info: '屬性',
+        linkFile: '軟連接文件',
+        terminal: '終端',
+        shareList: '分享列表',
+        zip: '壓縮',
+        group: '用戶組',
+        path: '路徑',
+        public: '公共',
+        setRole: '設置權限',
+        link: '是否鏈接',
+        rRole: '讀取',
+        wRole: '寫入',
+        xRole: '可執行',
+        compress: '壓縮',
+        deCompress: '解壓',
+        compressType: '壓縮格式',
+        compressDst: '壓縮路徑',
+        replace: '覆蓋已存在的文件',
+        compressSuccess: '壓縮成功',
+        deCompressSuccess: '解壓成功',
+        deCompressDst: '解壓路徑',
+        linkType: '鏈接類型',
+        softLink: '軟鏈接',
+        hardLink: '硬鏈接',
+        linkPath: '鏈接路徑',
+        selectFile: '選擇文件',
+        downloadSuccess: '下載成功',
+        downloadUrl: '下載地址',
+        downloadStart: '下載開始!',
+        moveSuccess: '移動成功',
+        copySuccess: '復製成功',
+        move: '移動',
+        copy: '復製',
+        calculate: '計算',
+        canNotDeCompress: '無法解壓此文件',
+        uploadSuccess: '上傳成功!',
+        downloadProcess: '下載進度',
+        downloading: '正在下載...',
+        infoDetail: '文件屬性',
+        root: '根目錄',
+        list: '文件列表',
+        sub: '包含子目錄',
+        downlodSuccess: '下載完成',
+        theme: '主題',
+        language: '語言',
+        eol: '行尾符',
+        copyDir: '復製路徑',
+        paste: '粘貼',
+        cancel: '取消',
+        changeOwner: '修改用戶和用戶組',
+        containSub: '同時修改子文件屬性',
+        ownerHelper: 'PHP 運行環境默認用戶:用戶組為 1000:1000, 容器內外用戶顯示不一致為正常現象',
+        searchHelper: '支持 * 等通配符',
+        uploadFailed: '[{0}] 文件上傳失敗',
+        fileUploadStart: '正在上傳[{0}]....',
+    },
+    ssh: {
+        sshAlert: '列表數據根據登錄時間排序,但請註意,切換時區或其他操作可能導致登錄日誌的時間出現偏差。',
+        sshOperate: '對 SSH 服務進行 [{0}] 操作,是否繼續?',
+        sshChange: 'SSH 配置修改',
+        sshChangeHelper: '此操作將 {0} 修改為 [{1}] ,是否繼續?',
+        sshFileChangeHelper: '直接修改配置文件可能會導致服務不可用,請謹慎操作,是否繼續?',
+        port: '連接端口',
+        portHelper: '指定 SSH 服務監聽的端口號,默認為 22。',
+        listenAddress: '監聽地址',
+        addressHelper: '指定 SSH 服務監聽的 IP 地址,默認為 0.0.0.0,即所有的網絡接口都會被監聽。',
+        permitRootLogin: 'root 用戶',
+        rootSettingHelper: 'root 用戶 SSH 登錄方式,默認所有 SSH 登錄。',
+        rootHelper1: '允許 SSH 登錄',
+        rootHelper2: '禁止 SSH 登錄',
+        rootHelper3: '僅允許密鑰登錄',
+        rootHelper4: '僅允許執行預先定義的命令,不能進行其他操作',
+        passwordAuthentication: '密碼認證',
+        pwdAuthHelper: '是否啟用密碼認證,默認啟用。',
+        pubkeyAuthentication: '密鑰認證',
+        key: '密鑰',
+        pubkey: '密鑰信息',
+        encryptionMode: '加密方式',
+        passwordHelper: '支持大小寫英文、數字,長度6-10',
+        generate: '生成密鑰',
+        reGenerate: '重新生成密鑰',
+        keyAuthHelper: '是否啟用密鑰認證,默認啟用。',
+        useDNS: '反向解析',
+        dnsHelper: '控製 SSH 服務器是否啟用 DNS 解析功能,從而驗證連接方的身份。',
+        loginLogs: 'SSH 登錄日誌',
+        loginMode: '登錄方式',
+        authenticating: '密鑰',
+        publickey: '密鑰',
+        belong: '歸屬地',
+        local: '內網',
+        remote: '外網',
+    },
+    setting: {
+        all: '全部',
+        panel: '面板',
+        user: '用戶名稱',
+        userChange: '修改用戶名',
+        userChangeHelper: '修改用戶名將退出登陸,是否繼續?',
+        passwd: '用戶密碼',
+        emailHelper: '用於密碼找回',
+        title: '面板別名',
+        panelPort: '面板端口',
+        portHelper: '建議端口範圍8888 - 65535,註意:有安全組的服務器請提前在安全組放行新端口',
+        portChange: '端口修改',
+        portChangeHelper: '服務端口修改需要重啟服務,是否繼續?',
+        theme: '主題顏色',
+        componentSize: '組件大小',
+        dark: '暗色',
+        light: '亮色',
+        language: '系統語言',
+        languageHelper: '默認跟隨瀏覽器語言,設置後只對當前瀏覽器生效,更換瀏覽器後需要重新設置',
+        sessionTimeout: '超時時間',
+        sessionTimeoutError: '最小超時時間為 300 秒',
+        sessionTimeoutHelper: '如果用戶超過 {0} 秒未操作面板,面板將自動退出登錄',
+        systemIP: '服務器 IP',
+        systemIPWarning: '請先在面板設置中設置服務器 IP',
+        syncTime: '服務器時間',
+        timeZone: '系統時區',
+        timeZoneChangeHelper: '系統時區修改需要重啟服務,是否繼續?',
+        timeZoneHelper: '時區修改依賴於系統 timedatectl 服務,重啟 1Panel 服務後生效。',
+        timeZoneCN: '北京',
+        timeZoneAM: '洛杉磯',
+        timeZoneNY: '紐約',
+        ntpALi: '阿裏',
+        ntpGoogle: '谷歌',
+        syncSite: 'NTP 服務器',
+        syncSiteHelper: '該操作將使用 {0} 作為源進行系統時間同步,是否繼續?',
+        changePassword: '密碼修改',
+        oldPassword: '原密碼',
+        newPassword: '新密碼',
+        retryPassword: '確認密碼',
+        duplicatePassword: '新密碼不能與原始密碼一致,請重新輸入!',
+
+        thirdParty: '第三方賬號',
+        createBackupAccount: '添加 {0}',
+        noTypeForCreate: '當前無可創建備份類型',
+        LOCAL: '服務器磁盤',
+        currentPath: '當前路徑',
+        OSS: '阿裏雲 OSS',
+        S3: '亞馬遜 S3 雲存儲',
+        MINIO: 'MINIO',
+        SFTP: 'SFTP',
+        OneDrive: '微軟 OneDrive',
+        backupDir: '備份路徑',
+        isCN: '國內版',
+        code: '授權碼',
+        loadCode: '獲取',
+        COS: '騰訊雲 COS',
+        KODO: '七牛雲 Kodo',
+        scType: '存儲類型',
+        typeStandard: '標準存儲',
+        typeStandard_IA: '低頻存儲',
+        typeArchive: '歸檔存儲',
+        typeDeep_Archive: '深度歸檔存儲',
+        scStandard: '標準存儲,適用於實時訪問的大量熱點文件、頻繁的數據交互等業務場景。',
+        scStandard_IA: '低頻存儲,適用於較低訪問頻率(例如平均每月訪問頻率1到2次)的業務場景,最少存儲30天。',
+        scArchive: '歸檔存儲,適用於極低訪問頻率(例如半年訪問1次)的業務場景。',
+        scDeep_Archive: '深度歸檔存儲,適用於極低訪問頻率(例如1年訪問1~2次)的業務場景。',
+        archiveHelper: '歸檔存儲的文件無法直接下載,需要先在對應的雲服務商網站進行恢復操作,請謹慎使用!',
+        domainHelper: '加速域名必須包含 http:// 或者 https://',
+        backupAlert:
+            "理論上只要雲廠商兼容 S3 協議,就可以用現有的亞馬遜 S3 雲存儲來備份,具體配置參考 <a target=「_blank」 href='https://1panel.cn/docs/user_manual/settings/#3'>官方文檔</a> ",
+        domain: '加速域名',
+        backupAccount: '備份賬號',
+        loadBucket: '獲取桶',
+        accountName: '賬戶名稱',
+        accountKey: '賬戶密鑰',
+        address: '地址',
+        path: '路徑',
+
+        snapshot: '快照',
+        thirdPartySupport: '僅支持第三方賬號',
+        recoverDetail: '恢復詳情',
+        createSnapshot: '創建快照',
+        importSnapshot: '同步快照',
+        recover: '恢復',
+        noRecoverRecord: '暫無恢復記錄',
+        lastRecoverAt: '上次恢復時間',
+        lastRollbackAt: '上次回滾時間',
+        noRollbackRecord: '暫無回滾記錄',
+        reDownload: '重新下載備份文件',
+        statusAll: '全部',
+        statusSuccess: '成功',
+        statusFailed: '失敗',
+        versionChange: '版本變化',
+        snapshotFrom: '快照存儲位置',
+        recoverHelper: '即將從快照 {0} 開始恢復,恢復需要重啟 docker 以及 1panel 服務,是否繼續?',
+        rollback: '回滾',
+        rollbackHelper:
+            '即將回滾本次恢復,回滾將替換所有本次恢復的文件,過程中可能需要重啟 docker 以及 1panel 服務,是否繼續?',
+
+        upgrading: '正在升級中,請稍候...',
+        upgradeHelper: '升級操作需要重啟服務,是否繼續?',
+        noUpgrade: '當前已經是最新版本',
+        versionHelper: '1Panel 版本號命名規則為: [大版本].[功能版本].[Bug 修復版本],例:',
+        versionHelper1: 'v1.0.1 是 v1.0.0 之後的 Bug 修復版本',
+        versionHelper2: 'v1.1.0 是 v1.0.0 之後的功能版本',
+        newVersion: '(Bug 修復版本)',
+        latestVersion: '(功能版本)',
+        upgradeCheck: '檢查更新',
+        upgradeNotes: '更新內容',
+        upgradeNow: '立即更新',
+        source: '下載源',
+        hasNewVersion: '有新版本',
+
+        safe: '安全',
+        entrance: '安全入口',
+        entranceHelper: '開啟安全入口後只能通過指定安全入口登錄面板',
+        entranceError: '請輸入 6-10 位安全登錄入口,僅支持輸入數字或字母',
+        entranceInputHelper: '安全入口設置為空時,則取消安全入口',
+        expirationTime: '密碼過期時間',
+        unSetting: '未設置',
+        noneSetting: '為面板密碼設置過期時間,過期後需要重新設置密碼',
+        expirationHelper: '密碼過期時間為 [0] 天時,則關閉密碼過期功能',
+        days: '過期天數',
+        expiredHelper: '當前密碼已過期,請重新修改密碼:',
+        timeoutHelper: '【 {0} 天後 】面板密碼即將過期,過期後需要重新設置密碼',
+        complexity: '密碼復雜度驗證',
+        complexityHelper: '開啟後密碼必須滿足密碼長度大於 8 位且包含字母、數字及特殊字符',
+        bindDomain: '域名綁定',
+        unBindDomain: '域名解綁',
+        unBindDomainHelper: '解除域名綁定可能造成系統不安全,是否繼續?',
+        bindDomainHelper: '設置域名綁定後,僅能通過設置中域名訪問 1Panel 服務',
+        bindDomainHelper1: '綁定域名為空時,則取消域名綁定',
+        bindDomainWarning: '設置域名綁定後,將退出當前登錄,且僅能通過設置中域名訪問 1Panel 服務,是否繼續?',
+        allowIPs: '授權 IP',
+        unAllowIPs: '取消授權',
+        unAllowIPsWarning: '授權 IP 為空將允許所有 IP 訪問系統,可能造成系統不安全,是否繼續?',
+        allowIPsHelper: '設置授權 IP 後,僅有設置中的 IP 可以訪問 1Panel 服務',
+        allowIPsWarning: '設置授權 IP 後,僅有設置中的 IP 可以訪問 1Panel 服務,是否繼續?',
+        allowIPsHelper1: '授權 IP 為空時,則取消授權 IP',
+        allowIPEgs: '當存在多個授權 IP 時,需要換行顯示,例: \n172.16.10.111 \n172.16.10.112',
+        mfa: '兩步驗證',
+        secret: '密鑰',
+        mfaAlert: '兩步驗證密碼是基於當前時間生成,請確保服務器時間已同步',
+        mfaHelper: '開啟後會驗證手機應用驗證碼',
+        mfaHelper1: '下載兩步驗證手機應用 如:',
+        mfaHelper2: '使用手機應用掃描以下二維碼,獲取 6 位驗證碼',
+        mfaHelper3: '輸入手機應用上的 6 位數字',
+        mfaCode: '驗證碼',
+        mfaInterval: '刷新時間(秒)',
+        mfaIntervalHelper: '修改刷新時間後,請重新掃描或手動添加密鑰信息!',
+        sslChangeHelper: 'https 設置修改需要重啟服務,是否繼續?',
+        sslDisable: '禁用',
+        sslDisableHelper: '禁用 https 服務,需要重啟面板才能生效,是否繼續?',
+
+        https: '為面板設置 https 協議訪問,提升面板訪問安全性',
+        certType: '證書類型',
+        selfSigned: '自簽名',
+        selfSignedHelper: '自簽證書,不被瀏覽器信任,顯示不安全是正常現象',
+        select: '選擇已有',
+        domainOrIP: '域名或 IP:',
+        timeOut: '過期時間:',
+        rootCrtDownload: '根證書下載',
+        primaryKey: '密鑰',
+        certificate: '證書',
+
+        about: '關於',
+        project: '項目地址',
+        issue: '問題反饋',
+        doc: '官方文檔',
+        star: '點亮 Star',
+        description: '1Panel,現代化、開源的 Linux 服務器運維管理面板。',
+        forum: '論壇',
+        doc2: '文檔',
+        currentVersion: '當前運行版本:',
+    },
+    app: {
+        app: '應用',
+        installName: '安裝名稱',
+        installed: '已安裝',
+        all: '全部',
+        version: '版本',
+        detail: '詳情',
+        params: '參數',
+        install: '安裝',
+        author: '作者',
+        source: '來源',
+        sync: '同步',
+        appName: '應用名稱',
+        status: '狀態',
+        container: '容器',
+        restart: '重啟',
+        start: '啟動',
+        stop: '停止',
+        rebuild: '重建',
+        description: '描述',
+        deleteWarn: '刪除操作會把所有數據和備份一並刪除,此操作不可回滾,是否繼續?',
+        syncSuccess: '同步成功',
+        canUpgrade: '可升級',
+        backupName: '文件名稱',
+        backupPath: '文件路徑',
+        backupdate: '備份時間',
+        update: '更新',
+        versionSelect: '請選擇版本',
+        operatorHelper: '將對選中應用進行 {0} 操作,是否繼續?',
+        checkInstalledWarn: '未檢測到 {0} ,請進入應用商店點擊安裝!',
+        gotoInstalled: '去安裝',
+        search: '搜索',
+        limitHelper: '該應用已安裝,不支持重復安裝',
+        deleteHelper: '{0}已經關聯以下資源,無法刪除',
+        checkTitle: '提示',
+        website: '網站',
+        database: '數據庫',
+        defaultConfig: '默認配置',
+        defaultConfigHelper: '已恢復為默認配置,保存後生效',
+        forceDelete: '強製刪除',
+        forceDeleteHelper: '強製刪除,會忽略刪除過程中產生的錯誤並最終刪除元數據',
+        deleteBackup: '刪除備份',
+        deleteBackupHelper: '同時刪除應用備份',
+        deleteDB: '刪除數據庫',
+        deleteDBHelper: '同時刪除與應用關聯的數據庫',
+        noService: '無{0}',
+        toInstall: '去安裝',
+        param: '參數配置',
+        syncAppList: '更新應用列表',
+        alreadyRun: '已安裝',
+        less1Minute: '小於1分鐘',
+        appOfficeWebsite: '官方網站',
+        github: '開源社區',
+        document: '文檔說明',
+        updatePrompt: '當前應用均為最新版本',
+        installPrompt: '尚未安裝任何應用',
+        updateHelper: '更新參數可能導致應用無法啟動,請提前備份並謹慎操作',
+        updateWarn: '更新參數需要重建應用,是否繼續?',
+        busPort: '服務端口',
+        syncStart: '開始同步!請稍後刷新應用商店',
+        advanced: '高級設置',
+        cpuCore: '核心數',
+        containerName: '容器名稱',
+        containerNameHelper: '可以為空,為空自動生成',
+        allowPort: '端口外部訪問',
+        allowPortHelper: '允許端口外部訪問會放開防火墻端口,php運行環境請勿放開',
+        appInstallWarn: '應用端口默認不允許外部訪問,可以在下方高級設置中選擇放開',
+        upgradeStart: '開始升級!請稍後刷新頁面',
+        toFolder: '進入安裝目錄',
+        editCompose: '編輯 compose 文件',
+        editComposeHelper: '編輯 compose 文件可能導致軟件安裝失敗',
+        composeNullErr: 'compose 不能為空',
+        takeDown: '已廢棄',
+        allReadyInstalled: '已安裝',
+        installHelper: '配置鏡像加速可以解決鏡像拉取失敗的問題',
+        upgradeHelper: '異常應用需要先同步到正常狀態',
+    },
+    website: {
+        website: '網站',
+        primaryDomain: '主域名',
+        otherDomains: '其他域名',
+        static: '靜態網站',
+        deployment: '一鍵部署',
+        supportUpType: '僅支持 .tar.gz 文件',
+        zipFormat: '.tar.gz 壓縮包結構:test.tar.gz 壓縮包內,必需包含 {0} 文件',
+        proxy: '反向代理',
+        alias: '代號',
+        remark: '備註',
+        group: '分組',
+        groupSetting: '分組管理',
+        createGroup: '創建分組',
+        app: '應用',
+        appNew: '新裝應用',
+        appInstalled: '已裝應用',
+        create: '創建網站',
+        delete: '刪除網站',
+        deleteApp: '刪除應用',
+        deleteBackup: '刪除備份',
+        domain: '域名',
+        domainHelper: '一行一個域名,支持*和IP地址,支持域名:端口',
+        addDomain: '新增域名',
+        domainConfig: '域名設置',
+        defaultDoc: '默認文檔',
+        perserver: '並發限製',
+        perserverHelper: '限製當前站點最大並發數',
+        perip: '單IP限製',
+        peripHelper: '限製單個IP訪問最大並發數',
+        rate: '流量限製',
+        rateHelper: '限製每個請求的流量上(單位:KB)',
+        limitHelper: '啟用流量控製',
+        other: '其他',
+        currentSSL: '當前證書',
+        dnsAccount: 'DNS賬號',
+        applySSL: '證書申請',
+        SSLList: '證書列表',
+        createDnsAccount: 'DNS賬戶',
+        aliyun: '阿裏雲DNS',
+        manual: '手動解析',
+        key: '密鑰',
+        check: '查看',
+        acmeAccountManage: 'Acme 賬戶',
+        email: '郵箱',
+        addAccount: '創建賬戶',
+        acmeAccount: 'Acme 賬戶',
+        provider: '驗證方式',
+        dnsManual: '手動解析',
+        expireDate: '過期時間',
+        brand: '頒發者',
+        deploySSL: '部署',
+        deploySSLHelper: '確定部署證書?',
+        ssl: '證書',
+        dnsAccountManage: 'DNS 賬戶',
+        renewSSL: '續簽',
+        renewHelper: '確定續簽證書?',
+        renewSuccess: '續簽證書',
+        config: '配置',
+        enableHTTPS: '啟用 HTTPS',
+        aliasHelper: '代號是網站目錄的文件夾名稱',
+        lastBackupAt: '上次備份時間',
+        null: '無',
+        nginxConfig: 'Nginx配置',
+        websiteConfig: '網站設置',
+        basic: '基本',
+        source: '配置文件',
+        security: '安全',
+        log: '日誌',
+        nginxPer: '性能調整',
+        neverExpire: '永不過期',
+        setDefault: '設為默認',
+        default: '默認',
+        deleteHelper: '相關應用狀態不正常,請檢查',
+        toApp: '去已安裝列表',
+        cycle: '周期',
+        frequency: '頻率',
+        ccHelper: '{0} 秒內累計請求同一URL超過 {1} 次,觸發CC防禦,封鎖此IP',
+        mustSave: '修改之後需要保存才能生效',
+        fileExt: '文件擴展名',
+        fileExtBlock: '文件擴展名黑名單',
+        value: '值',
+        enable: '開啟',
+        proxyAddress: '代理地址',
+        proxyHelper: '例: http://127.0.0.1:8080',
+        forceDelete: '強製刪除',
+        forceDeleteHelper: '強製刪除,會忽略刪除過程中產生的錯誤並最終刪除元數據',
+        deleteAppHelper: '同時刪除關聯應用、數據庫以及應用備份',
+        deleteBackupHelper: '同時刪除網站備份',
+        deleteConfirmHelper: '刪除操作無法回滾,請輸入 <span style="color:red"> "{0}" </span> 刪除',
+        staticPath: '對應主目錄:',
+        limit: '限製方案',
+        blog: '論壇/博客',
+        imageSite: '圖片站',
+        downloadSite: '下載站',
+        shopSite: '商城',
+        doorSite: '門戶',
+        qiteSite: '企業',
+        videoSite: '視頻',
+        errLog: '錯誤日誌',
+        accessLog: '網站日誌',
+        stopHelper: '停止站點後將無法正常訪問,用戶訪問會顯示當前站點停止頁面,是否繼續操作?',
+        startHelper: '啟用站點後,用戶可以正常訪問網站內容,是否繼續操作?',
+        sitePath: '網站目錄',
+        siteAlias: '網站代號',
+        primaryPath: '主目錄',
+        folderTitle: '網站主目錄主要包含四個文件夾',
+        wafFolder: '防火墻規則',
+        indexFolder: '網站root目錄',
+        logFolder: '網站日誌',
+        sslFolder: '網站證書',
+        enableOrNot: '是否啟用',
+        oldSSL: '選擇已有證書',
+        manualSSL: '手動導入證書',
+        select: '選擇',
+        selectSSL: '選擇證書',
+        privateKey: '密鑰(KEY)',
+        certificate: '證書(PEM格式)',
+        HTTPConfig: 'HTTP 選項',
+        HTTPSOnly: '禁止 HTTP',
+        HTTPToHTTPS: '訪問HTTP自動跳轉到HTTPS',
+        HTTPAlso: 'HTTP可直接訪問',
+        sslConfig: 'SSL 選項',
+        disbaleHTTPS: '禁用 HTTPS',
+        disbaleHTTPSHelper: '禁用 HTTPS會刪除證書相關配置,是否繼續?',
+        SSLHelper: '註意:請勿將SSL證書用於非法網站 \n 如開啟後無法使用HTTPS訪問,請檢查安全組是否正確放行443端口',
+        SSLConfig: '證書設置',
+        SSLProConfig: 'SSL 協議設置',
+        supportProtocol: '支持的協議版本',
+        encryptionAlgorithm: '加密算法',
+        notSecurity: '(不安全)',
+        encryptHelper:
+            "Let's Encrypt 簽發證書有頻率限製,但足以滿足正常需求,過於頻繁操作會導致簽發失敗。具體限製請看 <a target=「_blank」 href='https://letsencrypt.org/zh-cn/docs/rate-limits/'>官方文檔</a> ",
+        ipValue: '值',
+        ext: '文件擴展名',
+        wafInputHelper: '按行輸入數據,一行一個',
+        data: '數據',
+        ever: '永久',
+        nextYear: '一年後',
+        noLog: '當前沒有日誌...',
+        defaultServer: '默認站點',
+        noDefaultServer: '未設置',
+        defaultServerHelper: '設置默認站點後,所有未綁定的域名和IP都被定向到默認站點\n可有效防止惡意解析',
+        websiteDeploymentHelper: '使用從 1Panel 部署的應用創建網站',
+        websiteStatictHelper: '在主機上創建網站目錄',
+        websiteProxyHelper:
+            '代理已有服務,例如本機已安裝使用 8080 端口的 halo 服務,那麼代理地址為 http://127.0.0.1:8080',
+        restoreHelper: '確認使用此備份恢復?',
+        wafValueHelper: '值',
+        wafRemarkHelper: '描述',
+        runtimeProxyHelper: '使用從 1Panel 創建的運行環境',
+        runtime: '運行環境',
+        deleteRuntimeHelper: '運行環境應用需要跟網站一並刪除,請謹慎處理',
+        proxyType: '監聽網絡類型',
+        unix: 'Unix 網絡',
+        tcp: 'TCP/IP 網絡',
+        phpFPM: 'FPM 配置文件',
+        phpConfig: 'PHP 配置文件',
+        updateConfig: '配置修改',
+        isOn: '開啟',
+        isOff: '關閉',
+        rewrite: '偽靜態',
+        rewriteMode: '方案',
+        current: '當前',
+        rewriteHelper: '若設置偽靜態後,網站無法正常訪問,請嘗試設置回default',
+        runDir: '運行目錄',
+        runDirHelper: '部分程序需要指定二級目錄作為運行目錄,如ThinkPHP5,Laravel',
+        runUserHelper:
+            '通過 PHP 運行環境部署的網站,需要將 index 和子目錄下的所有文件、文件夾所有者和用戶組設置為 1000',
+        userGroup: '運行用戶/組',
+        uGroup: '用戶組',
+        proxyPath: '前端請求路徑',
+        proxyPass: '後端代理地址',
+        cache: '緩存',
+        createProxy: '創建反向代理',
+        editProxy: '編輯反向代理',
+        cacheTime: '緩存時間',
+        enableCache: '開啟緩存',
+        proxyHost: '後端域名',
+        disabled: '已停止',
+        startProxy: '開啟反向代理',
+        stopProxy: '關閉反向代理',
+        proxyFile: '源文',
+        proxyHelper1: '訪問這個目錄時將會把目標URL的內容返回並顯示',
+        proxyPassHelper: '代理的站點,必須為可正常訪問的URL',
+        proxyHostHelper: '將域名添加到請求頭傳遞到代理服務器',
+        replacementHelper: '最多可以添加5條替換內容,如果不需要替換請留空',
+        modifier: '匹配規則',
+        modifierHelper: '例:= 精確匹配,~ 正則匹配,^~ 匹配路徑開頭 等',
+        replace: '文本替換',
+        addReplace: '添加文本替換',
+        replaced: '搜索字符串(不能為空)',
+        replaceText: '替換為字符串',
+        replacedErr: '搜索字符串不能為空',
+        replacedErr2: '搜索字符串不能重復',
+        basicAuth: '密碼訪問',
+        editBasicAuthHelper: '密碼為非對稱加密,無法回顯,編輯需要重新設置密碼',
+        createPassword: '生成密碼',
+        antiLeech: '防盜鏈',
+        extends: '擴展名',
+        browserCache: '瀏覽器緩存',
+        leechLog: '記錄防盜鏈日誌',
+        accessDomain: '允許的域名',
+        leechReturn: '響應資源',
+        noneRef: '允許來源為空',
+        disable: '未啟用',
+        disableLeechHelper: '是否禁用防盜鏈',
+        disableLeech: '禁用防盜鏈',
+        ipv6: '監聽 IPV6 端口',
+        leechReturnError: '請填寫 HTTP 狀態碼',
+    },
+    php: {
+        short_open_tag: '短標簽支持',
+        max_execution_time: '最大腳本運行時間',
+        max_input_time: '最大輸入時間',
+        memory_limit: ' 腳本內存限製',
+        post_max_size: 'POST數據最大尺寸',
+        file_uploads: '是否允許上傳文件',
+        upload_max_filesize: '允許上傳文件的最大尺寸',
+        max_file_uploads: '允許同時上傳文件的最大數量',
+        default_socket_timeout: 'Socket超時時間',
+        error_reporting: '錯誤級別',
+        display_errors: '是否輸出詳細錯誤信息',
+        cgi_fix_pathinfo: '是否開啟pathinfo',
+        date_timezone: '時區',
+        disableFunction: '禁用函數',
+        disableFunctionHelper: '輸入要禁用的函數,例如exec,多個請用,分割',
+        uploadMaxSize: '上傳限製',
+    },
+    nginx: {
+        serverNamesHashBucketSizeHelper: '服務器名字的hash表大小',
+        clientHeaderBufferSizeHelper: '客戶端請求的頭buffer大小',
+        clientMaxBodySizeHelper: '最大上傳文件',
+        keepaliveTimeoutHelper: '連接超時時間',
+        gzipMinLengthHelper: '最小壓縮文件',
+        gzipCompLevelHelper: '壓縮率',
+        gzipHelper: '是否開啟壓縮傳輸',
+        connections: '活動連接(Active connections)',
+        accepts: '總連接次數(accepts)',
+        handled: '總握手次數(handled)',
+        requests: '總請求數(requests)',
+        reading: '請求數(Reading)',
+        writing: '響應數(Writing)',
+        waiting: '駐留進程(Waiting)',
+        status: '當前狀態',
+        nginxConfig: 'OpenResty 設置',
+        configResource: '配置修改',
+        saveAndReload: '保存並重載',
+    },
+    ssl: {
+        create: '創建證書',
+        provider: '類型',
+        manualCreate: '手動創建',
+        acmeAccount: 'Acme 賬號',
+        resolveDomain: '解析域名',
+        err: '錯誤',
+        value: '記錄值',
+        dnsResolveHelper: '請到DNS解析服務商處添加以下解析記錄:',
+        detail: '詳情',
+        msg: '證書信息',
+        ssl: '證書',
+        key: '私鑰',
+        startDate: '生效時間',
+        organization: '簽發機構',
+        renewConfirm: '是否確定續簽?',
+        autoRenew: '自動續簽',
+        autoRenewHelper: '距離到期時間7天自動續簽',
+        renewSuccess: '續簽成功',
+        renewWebsite: '該證書已經和以下網站關聯,續簽會同步應用到這些網站',
+        createAcme: '創建賬戶',
+        acmeHelper: 'Acme 賬戶用於申請免費證書',
+    },
+    firewall: {
+        notSupport: '未檢測到系統防火墻(firewalld 或者 ufw),請參考官方文檔進行安裝',
+        ccDeny: 'CC 防護',
+        ipWhiteList: 'IP 白名單',
+        ipBlockList: 'IP 黑名單',
+        fileExtBlockList: '文件擴展名黑名單',
+        urlWhiteList: 'URL 白名單',
+        urlBlockList: 'URL 黑名單',
+        argsCheck: 'GET 參數校驗',
+        postCheck: 'POST 參數校驗',
+        cookieBlockList: 'Cookie 黑名單',
+
+        firewall: '防火墻',
+        dockerHelper: 'Linux 防火墻 {0} 無法禁用 Docker 端口映射,應用可以在 [已安裝] 頁面編輯參數來控製端口是否放開',
+        quickJump: '快速跳轉',
+        used: '已使用',
+        unUsed: '未使用',
+        firewallHelper: '{0}系統防火墻',
+        firewallNotStart: '當前未開啟系統防火墻,請先開啟!',
+        stopFirewallHelper: '系統防火墻關閉後,服務器將失去安全防護,是否繼續?',
+        startFirewallHelper: '系統防火墻開啟後,可以更好的防護服務器安全,是否繼續?',
+        noPing: '禁 ping',
+        noPingTitle: '是否禁 ping',
+        noPingHelper: '禁 ping 後將無法 ping 通服務器,是否繼續?',
+        onPingHelper: '解除禁 ping 後您的服務器可能會被黑客發現,是否繼續?',
+        changeStrategy: '修改{0}策略',
+        changeStrategyIPHelper1: 'IP 策略修改為【屏蔽】,設置後該 IP 將禁止訪問服務器,是否繼續?',
+        changeStrategyIPHelper2: 'IP 策略修改為【放行】,設置後該 IP 將恢復正常訪問,是否繼續?',
+        changeStrategyPortHelper1: '端口策略修改為【拒絕】,設置後端口將拒絕外部訪問,是否繼續?',
+        changeStrategyPortHelper2: '端口策略修改為【允許】,設置後端口將恢復正常訪問,是否繼續?',
+        stop: '禁止',
+        portFormatError: '請輸入正確的端口信息!',
+        portHelper1: '多個端口,如:8080,8081',
+        portHelper2: '範圍端口,如:8080-8089',
+        strategy: '策略',
+        accept: '允許',
+        drop: '拒絕',
+        source: '來源',
+        anyWhere: '所有 IP',
+        address: '指定 IP',
+        addressHelper: '支持輸入 IP 或 IP 段',
+        allow: '放行',
+        deny: '屏蔽',
+        addressFormatError: '請輸入合法的 ip 地址!',
+        addressHelper1: '多個 IP 請用 "," 隔開:172.16.10.11,172.16.10.99',
+        addressHelper2: 'IP 段:172.16.0.0/24',
+        allIP: '所有 IP',
+        portRule: '端口規則',
+        ipRule: 'IP 規則',
+    },
+    runtime: {
+        runtime: '運行環境',
+        image: '鏡像',
+        workDir: '工作目錄',
+        create: '創建運行環境',
+        resource: '來源',
+        appstore: '應用商店',
+        local: '本地',
+        app: '應用',
+        localHelper: '本地運行環境需要自行安裝',
+        version: '版本',
+        versionHelper: 'PHP的版本,例 v8.0',
+        buildHelper: '選擇的擴展越多,製作鏡像過程中占用 CPU 越多,請盡量避免選擇全部擴展',
+        openrestryWarn: 'PHP 需要升級  OpenResty 至 1.21.4.1 版本以上才能使用',
+        toupgrade: '去升級',
+        edit: '編輯運行環境',
+        extendHelper: '列表中不存在的擴展,可以手動輸入之後選擇,例:輸入 sockets ,然後在下拉列表中選擇第一個',
+        rebuildHelper: '編輯擴展後需要去【應用商店-已安裝】頁面【重建】PHP 應用之後才能生效',
+    },
+    process: {
+        pid: '進程ID',
+        ppid: '父進程ID',
+        numThreads: '線程',
+        memory: '內存',
+        diskRead: '磁盤讀',
+        diskWrite: '磁盤寫',
+        netSent: '上行',
+        netRecv: '下行',
+        numConnections: '連接',
+        startTime: '啟動時間',
+        status: '狀態',
+        running: '運行中',
+        sleep: '睡眠',
+        stop: '停止',
+        idle: '空閑',
+        zombie: '僵屍進程',
+        wait: '等待',
+        lock: '鎖定',
+        blocked: '阻塞',
+        cmdLine: '啟動命令',
+        basic: '基本信息',
+        mem: '內存信息',
+        openFiles: '文件打開',
+        file: '文件',
+        env: '環境變量',
+        noenv: '無',
+        net: '網絡連接',
+        laddr: '源地址/端口',
+        raddr: '目標地址/端口',
+        stopProcess: '結束',
+        stopProcessWarn: '是否確定結束此進程 (PID:{0})?此操作不可回滾',
+    },
+};
+export default {
+    ...fit2cloudTwLocale,
+    ...message,
+};
diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts
index ddf296c5f..60ba1653f 100644
--- a/frontend/src/lang/modules/zh.ts
+++ b/frontend/src/lang/modules/zh.ts
@@ -136,6 +136,7 @@ const message = {
             licenseHelper:
                 '同意 &laquo; <a href="https://www.fit2cloud.com/legal/licenses.html" target="_blank"> 飞致云社区软件许可协议</a> &raquo;',
             errorAgree: '请点击同意社区软件许可协议',
+            logout: '退出登录',
         },
         rule: {
             username: '请输入用户名',
@@ -181,18 +182,6 @@ const message = {
             notFound: '资源不存在',
             commonError: '请求失败',
         },
-        header: {
-            language: '国际化',
-            zh: '简体中文',
-            en: 'English',
-            theme: '布局设置',
-            globalTheme: '全局主题',
-            themeColor: '主题颜色',
-            darkTheme: '暗黑主题',
-            personalData: '个人资料',
-            changePassword: '修改密码',
-            logout: '退出登录',
-        },
         service: {
             serviceNotStarted: '当前未启动 {0} 服务',
         },
diff --git a/frontend/src/layout/components/Sidebar/index.vue b/frontend/src/layout/components/Sidebar/index.vue
index 6d6ea50c1..f1e0c4330 100644
--- a/frontend/src/layout/components/Sidebar/index.vue
+++ b/frontend/src/layout/components/Sidebar/index.vue
@@ -22,7 +22,7 @@
                         <SvgIcon :iconName="'p-logout'" :className="'svg-icon'"></SvgIcon>
                     </el-icon>
                     <template #title>
-                        <span @click="logout">{{ $t('commons.header.logout') }}</span>
+                        <span @click="logout">{{ $t('commons.login.logout') }}</span>
                     </template>
                 </el-menu-item>
             </el-menu>
diff --git a/frontend/src/store/interface/index.ts b/frontend/src/store/interface/index.ts
index 6d72ba6aa..b5fb7a80c 100644
--- a/frontend/src/store/interface/index.ts
+++ b/frontend/src/store/interface/index.ts
@@ -13,7 +13,7 @@ export interface GlobalState {
     isLogin: boolean;
     entrance: string;
     csrfToken: string;
-    language: string; // zh | en
+    language: string; // zh | en | tw
     // assemblySize: string; // small | default | large
     themeConfig: ThemeConfigProp;
     isFullScreen: boolean;
diff --git a/frontend/src/views/app-store/apps/index.vue b/frontend/src/views/app-store/apps/index.vue
index 5cfe557ef..3960e1d0f 100644
--- a/frontend/src/views/app-store/apps/index.vue
+++ b/frontend/src/views/app-store/apps/index.vue
@@ -20,7 +20,7 @@
                             :type="activeTag === item.key ? 'primary' : ''"
                             :plain="activeTag !== item.key"
                         >
-                            {{ language == 'zh' ? item.name : item.key }}
+                            {{ language == 'zh' || language == 'tw' ? item.name : item.key }}
                         </el-button>
                     </div>
                 </el-col>
@@ -79,13 +79,17 @@
                                         </div>
                                         <div class="app-desc">
                                             <span class="desc">
-                                                {{ language == 'zh' ? app.shortDescZh : app.shortDescEn }}
+                                                {{
+                                                    language == 'zh' || language == 'tw'
+                                                        ? app.shortDescZh
+                                                        : app.shortDescEn
+                                                }}
                                             </span>
                                         </div>
                                         <div class="app-tag">
                                             <el-tag v-for="(tag, ind) in app.tags" :key="ind" style="margin-right: 5px">
                                                 <span :style="{ color: getColor(ind) }">
-                                                    {{ language == 'zh' ? tag.name : tag.key }}
+                                                    {{ language == 'zh' || language == 'tw' ? tag.name : tag.key }}
                                                 </span>
                                             </el-tag>
                                             <el-tag v-if="app.status === 'TakeDown'" style="margin-right: 5px">
diff --git a/frontend/src/views/app-store/detail/index.vue b/frontend/src/views/app-store/detail/index.vue
index 41ab47e4e..0a89732ba 100644
--- a/frontend/src/views/app-store/detail/index.vue
+++ b/frontend/src/views/app-store/detail/index.vue
@@ -15,7 +15,7 @@
                             </div>
                             <div class="description">
                                 <span>
-                                    {{ language == 'zh' ? app.shortDescZh : app.shortDescEn }}
+                                    {{ language == 'zh' || language == 'tw' ? app.shortDescZh : app.shortDescEn }}
                                 </span>
                             </div>
                             <div class="version">
diff --git a/frontend/src/views/app-store/detail/params/index.vue b/frontend/src/views/app-store/detail/params/index.vue
index 9aedb4bee..3cc7aa2c3 100644
--- a/frontend/src/views/app-store/detail/params/index.vue
+++ b/frontend/src/views/app-store/detail/params/index.vue
@@ -237,7 +237,7 @@ const changeService = (value: string, services: App.AppService[]) => {
 
 const getLabel = (row: ParamObj): string => {
     const language = useI18n().locale.value;
-    if (language == 'zh') {
+    if (language == 'zh' || language == 'tw') {
         return row.labelZh;
     } else {
         return row.labelEn;
diff --git a/frontend/src/views/app-store/installed/detail/index.vue b/frontend/src/views/app-store/installed/detail/index.vue
index 81ff773df..bf51f2ec9 100644
--- a/frontend/src/views/app-store/installed/detail/index.vue
+++ b/frontend/src/views/app-store/installed/detail/index.vue
@@ -223,7 +223,7 @@ const get = async () => {
 
 const getLabel = (row: EditForm): string => {
     const language = useI18n().locale.value;
-    if (language == 'zh') {
+    if (language == 'zh' || language == 'tw') {
         return row.labelZh;
     } else {
         return row.labelEn;
diff --git a/frontend/src/views/home/app/index.vue b/frontend/src/views/home/app/index.vue
index 3bca24b3f..f96a25d9e 100644
--- a/frontend/src/views/home/app/index.vue
+++ b/frontend/src/views/home/app/index.vue
@@ -15,7 +15,7 @@
                             </div>
                             <div class="h-app-desc">
                                 <span>
-                                    {{ language == 'zh' ? app.shortDescZh : app.shortDescEn }}
+                                    {{ language == 'zh' || language == 'tw' ? app.shortDescZh : app.shortDescEn }}
                                 </span>
                             </div>
                         </div>
diff --git a/frontend/src/views/log/operation/index.vue b/frontend/src/views/log/operation/index.vue
index a2e4ca4e8..691bf6165 100644
--- a/frontend/src/views/log/operation/index.vue
+++ b/frontend/src/views/log/operation/index.vue
@@ -65,7 +65,9 @@
                     </el-table-column>
                     <el-table-column :label="$t('logs.operate')" min-width="150px" prop="detailZH">
                         <template #default="{ row }">
-                            <span v-if="globalStore.language === 'zh'">{{ row.detailZH }}</span>
+                            <span v-if="globalStore.language === 'zh' || globalStore.language === 'tw'">
+                                {{ row.detailZH }}
+                            </span>
                             <span v-if="globalStore.language === 'en'">{{ row.detailEN }}</span>
                         </template>
                     </el-table-column>
@@ -143,7 +145,7 @@ const search = async () => {
         .then((res) => {
             loading.value = false;
             data.value = res.data.items || [];
-            if (globalStore.language === 'zh') {
+            if (globalStore.language === 'zh' || globalStore.language === 'tw') {
                 for (const item of data.value) {
                     item.detailZH = loadDetail(item.detailZH);
                 }
diff --git a/frontend/src/views/setting/panel/index.vue b/frontend/src/views/setting/panel/index.vue
index 92c571056..cbc3217d6 100644
--- a/frontend/src/views/setting/panel/index.vue
+++ b/frontend/src/views/setting/panel/index.vue
@@ -55,7 +55,8 @@
                                     @change="onSave('Language', form.language)"
                                     v-model="form.language"
                                 >
-                                    <el-radio label="zh">中文</el-radio>
+                                    <el-radio label="zh">中文(简体)</el-radio>
+                                    <el-radio label="tw">中文(繁體)</el-radio>
                                     <el-radio label="en">English</el-radio>
                                 </el-radio-group>
                             </el-form-item>
diff --git a/frontend/src/views/website/runtime/edit/index.vue b/frontend/src/views/website/runtime/edit/index.vue
index 82a8a7e76..861e3f3ee 100644
--- a/frontend/src/views/website/runtime/edit/index.vue
+++ b/frontend/src/views/website/runtime/edit/index.vue
@@ -98,7 +98,7 @@ const handleParams = () => {
 
 const getLabel = (row: ParamObj): string => {
     const language = useI18n().locale.value;
-    if (language == 'zh') {
+    if (language == 'zh' || language == 'tw') {
         return row.labelZh;
     } else {
         return row.labelEn;
diff --git a/frontend/src/views/website/runtime/param/index.vue b/frontend/src/views/website/runtime/param/index.vue
index 5dbed1a63..1bbb52139 100644
--- a/frontend/src/views/website/runtime/param/index.vue
+++ b/frontend/src/views/website/runtime/param/index.vue
@@ -93,7 +93,7 @@ const handleParams = () => {
 
 const getLabel = (row: ParamObj): string => {
     const language = useI18n().locale.value;
-    if (language == 'zh') {
+    if (language == 'zh' || language == 'tw') {
         return row.labelZh;
     } else {
         return row.labelEn;