diff --git a/mail-vue/src/i18n/index.js b/mail-vue/src/i18n/index.js
index b6005a8b22..3447b14dc8 100644
--- a/mail-vue/src/i18n/index.js
+++ b/mail-vue/src/i18n/index.js
@@ -1,10 +1,12 @@
import { createI18n } from 'vue-i18n';
import en from './en.js'
-import zh from './zh.js'
+import zh_cn from './zh_cn.js'
+import zh_tw from './zh_tw.js'
const i18n = createI18n({
legacy: false,
messages: {
- zh,
+ zh_cn,
+ zh_tw,
en
},
});
diff --git a/mail-vue/src/i18n/zh.js b/mail-vue/src/i18n/zh_cn.js
similarity index 99%
rename from mail-vue/src/i18n/zh.js
rename to mail-vue/src/i18n/zh_cn.js
index 832c3d139b..eb9e155b57 100644
--- a/mail-vue/src/i18n/zh.js
+++ b/mail-vue/src/i18n/zh_cn.js
@@ -1,4 +1,4 @@
-const zh = {
+const zhcn = {
inbox: '收件箱',
drafts: '草稿箱',
sent: '已发送',
@@ -346,4 +346,4 @@ const zh = {
clientSecret: '客户端密钥',
notOwner: '基础邮箱不属于您',
}
-export default zh
+export default zhcn
diff --git a/mail-vue/src/i18n/zh_tw.js b/mail-vue/src/i18n/zh_tw.js
new file mode 100644
index 0000000000..75f78ba2f5
--- /dev/null
+++ b/mail-vue/src/i18n/zh_tw.js
@@ -0,0 +1,350 @@
+const zhtw = {
+ inbox: '收件匣',
+ drafts: '草稿匣',
+ sent: '已寄出',
+ starred: '星號郵件',
+ settings: '個人設定',
+ analytics: '分析頁',
+ allUsers: '使用者列表',
+ allMail: '全部郵件',
+ permissions: '權限控制',
+ inviteCode: '註冊金鑰',
+ SystemSettings: '系統設定',
+ noMoreData: '沒有更多資料了',
+ noMessagesFound: '沒有任何郵件',
+ addAccount: '新增信箱',
+ emailAccount: '電子郵件帳號',
+ account: '信箱',
+ userAccount: '使用者信箱',
+ deleteUser: '刪除帳號',
+ deleteUserBtn: '刪除帳號',
+ changePassword: '修改密碼',
+ newPassword: '新密碼',
+ confirmPassword: '確認密碼',
+ add: '新增',
+ manage: '管理',
+ rename: '重新命名',
+ delete: '刪除',
+ save: '儲存',
+ profile: '個人資訊',
+ change: '修改',
+ changePwdBtn: '修改密碼',
+ username: '使用者名稱',
+ trustLevel: '等級',
+ password: '密碼',
+ delAccount: '刪除帳號',
+ delAccountMsg: '此操作將永久刪除您的帳號及其所有資料,且無法復原',
+ totalReceived: '收件數量',
+ totalSent: '寄件數量',
+ totalMailboxes: '信箱數量',
+ totalUsers: '使用者數量',
+ deleted: '刪除',
+ selectDeleted: '已刪除',
+ active: '正常',
+ emailSource: '郵件來源',
+ userGrowth: '使用者成長',
+ emailGrowth: '郵件成長',
+ emailSent: '寄出',
+ emailReceived: '接收',
+ sentToday: '今日寄件',
+ total: '次數',
+ growthTotalUsers: '使用者數',
+ searchByEmail: '輸入電子郵件搜尋',
+ tabEmailAddress: '使用者信箱',
+ tabReceived: '收件數量',
+ tabSent: '寄件數量',
+ tabMailboxes: '信箱數量',
+ tabRegisteredAt: '註冊時間',
+ tabStatus: '狀態',
+ tabRole: '權限身分',
+ roleName: '名稱',
+ role: '權限身分',
+ all: '全部',
+ normal: '正常',
+ banned: '封鎖',
+ reset: '重設',
+ restore: '復原',
+ tabSetting: '設定',
+ registrationIp: '註冊 IP',
+ recentIP: '近期 IP',
+ recentActivity: '近期活動',
+ loginDevice: '登入裝置',
+ loginSystem: '登入系統',
+ browserLogin: '登入瀏覽器',
+ unauthorized: '無權限',
+ unlimited: '無限制',
+ sendCount: '郵件寄送:',
+ accountCount: '信箱新增:',
+ action: '操作',
+ chgPwd: '修改密碼',
+ perm: '權限',
+ btnBan: '停用',
+ admin: '超級管理員',
+ addUser: '新增使用者',
+ select: '請選擇',
+ unknown: '未知',
+ changePerm: '修改權限',
+ from: '寄件人',
+ subject: '主旨',
+ sender: '寄件人',
+ user: '使用者',
+ searchByContent: '輸入內容搜尋',
+ noRecipient: '無收件人',
+ received: '已接收',
+ selectEmail: '信箱',
+ order: '排序',
+ default: '預設',
+ description: '描述',
+ expand: '展開',
+ collapse: '收起',
+ daily: '每天',
+ internal: '站內',
+ searchRegKeyDesc: '輸入註冊碼搜尋',
+ remainingUses: '剩餘次數',
+ exhausted: '已用盡',
+ validUntil: '有效期限',
+ expired: '已過期',
+ copy: '複製',
+ copyCode: '複製驗證碼',
+ codeLabel: '驗證碼:',
+ history: '記錄',
+ addRegKey: '新增註冊碼',
+ regKey: '註冊碼',
+ noCodeFound: '沒有任何註冊碼',
+ useHistory: '使用記錄',
+ date: '時間',
+ roleDesc: '權限身分',
+ noSubject: '無主旨',
+ recipient: '收件人',
+ delivered: '寄送成功',
+ complained: '被標記為垃圾郵件',
+ delayed: '寄送已延遲',
+ bounced: '寄送失敗',
+ attachments: '附件列表',
+ attCount: '共 {total} 個',
+ emailCount: '共 {total} 封',
+ error404: '404 錯誤,找不到頁面',
+ home: '返回首頁',
+ loginBtn: '登入',
+ regBtn: '註冊',
+ loginTitle: '輸入帳號資訊以開始使用郵件系統',
+ regTitle: '輸入帳號密碼以開始註冊郵件系統',
+ confirmPwd: '確認密碼',
+ regKeyOptional: '註冊碼(選填)',
+ noAccount: '還沒有帳號?',
+ hasAccount: '已有帳號?',
+ regSwitch: '建立帳號',
+ loginSwitch: '前往登入',
+ websiteSetting: '網站設定',
+ websiteReg: '使用者註冊',
+ loginDomain: '隱藏登入網域',
+ syncDelete: '同步刪除',
+ syncDeleteDesc: '開啟後收件匣和信箱不再使用軟刪除',
+ multipleEmail: '多信箱模式',
+ multipleEmailDesc: '開啟後帳號欄會出現使用者可以新增多個信箱',
+ customization: '個人化設定',
+ websiteTitle: '網站標題',
+ loginBoxOpacity: '登入框透明度',
+ loginBackground: '登入背景',
+ emailSetting: '郵件設定',
+ receiveEmail: '郵件接收',
+ autoRefresh: '自動重新整理',
+ autoRefreshDesc: '輪詢伺服器以取得最新郵件',
+ sendEmail: '郵件寄送',
+ resendToken: 'Resend Token',
+ cloudflareEmailSending: 'Cloudflare 郵件寄送',
+ blackList: '郵件黑名單',
+ codeRecognition: '辨識驗證碼',
+ codeRecognitionRules: '辨識規則',
+ codeRecognitionRulesDesc: '只辨識包含以下資訊的郵件,留空則辨識全部',
+ oss: '物件儲存',
+ osDomain: '存取網域',
+ ossDomainDesc: '如果是 KV 儲存則不需要填寫',
+ emailPush: '郵件推送',
+ tgBot: 'Telegram 機器人',
+ disable: '關閉',
+ disabled: '已關閉',
+ otherEmail: '第三方信箱',
+ forwardingRules: '轉寄規則',
+ forwardAll: '全部轉寄',
+ rules: '規則轉寄',
+ turnstileSetting: 'Turnstile 人機驗證',
+ signUpVerification: '註冊驗證',
+ addEmailVerification: '新增驗證',
+ about: '關於',
+ version: '版本',
+ community: '交流',
+ changeTitle: '修改標題',
+ addResendTokenDesc: '輸入內容以新增,不填則刪除',
+ addOsDomain: '新增網域',
+ domainDesc: '網域',
+ addTurnstileSecret: '新增 Turnstile 金鑰',
+ backgroundTitle: '設定背景',
+ tgBotDesc: '可以將接收的郵件轉寄至 Telegram 機器人',
+ tgBotToken: '機器人 Token',
+ toBotTokenDesc: '使用者 chat_id 多個請以 , 分隔',
+ otherEmailDesc: '可以將郵件轉寄至其他服務商信箱,需要在 Cloudflare 驗證信箱',
+ otherEmailInputDesc: '多個信箱請以 , 分隔',
+ forwardingRulesDesc: '規則轉寄只會轉寄設定信箱所接收的郵件',
+ ruleEmailsInputDesc: '多個信箱請以 , 分隔',
+ resendTokenList: 'Token 列表',
+ domain: '網域',
+ optional: '選填',
+ subjectInputDesc: '請輸入郵件主旨',
+ changeUserName: '修改使用者名稱',
+ send: '寄送',
+ reply: '回覆',
+ forward: '轉寄',
+ confirm: '確定',
+ cancel: '取消',
+ delEmailConfirm: '確定要刪除這封郵件嗎?',
+ delSuccessMsg: '刪除成功',
+ emptyEmailMsg: '信箱不能為空',
+ notEmailMsg: '輸入的電子郵件地址不合法',
+ emptyPwdMsg: '密碼不能為空',
+ pwdLengthMsg: '密碼至少六位',
+ minEmailPrefix: '信箱名稱至少 {msg} 位',
+ confirmPwdFailMsg: '兩次輸入的密碼不一致',
+ emptyRegKeyMsg: '註冊碼不能為空',
+ regSuccessMsg: '註冊成功',
+ copySuccessMsg: '複製成功',
+ copyFailMsg: '複製失敗',
+ clearRegKey: '確定要清除所有不可用的註冊碼嗎?',
+ clearSuccess: '清除成功',
+ emptyRole: '身分類型不能為空',
+ emptyTimeMsg: '有效時間不能為空',
+ emptyCountMsg: '可用次數不能為空',
+ addSuccessMsg: '新增成功',
+ delConfirm: '確定要刪除 {msg} 嗎?',
+ delUsersConfirm: '確定要刪除選取的使用者嗎?',
+ emptyRoleNameMsg: '身分名稱不能為空',
+ saveSuccessMsg: '儲存成功',
+ changeRoleTitle: '修改身分',
+ addRoleTitle: '新增身分',
+ emptyUserNameMsg: '使用者名稱不能為空',
+ delAccountConfirm: '確定要刪除目前帳號及所有資料嗎?',
+ clearAllDelConfirm: '此操作無法復原,輸入 確認刪除 以繼續操作',
+ warning: '警告',
+ delInputPattern: '確認刪除',
+ inputErrorMessage: '請輸入確認刪除',
+ delBackgroundConfirm: '確定要刪除這個背景嗎?',
+ enable: '啟用',
+ enabled: '已啟用',
+ reSendConfirm: '確定要重設 {msg} 的寄件次數嗎?',
+ reSuccessMsg: '重設成功',
+ restoreConfirm: '確定要復原 {msg} 嗎?',
+ normalRestore: '一般復原',
+ allRestore: '包含已刪除的資料',
+ restoreSuccessMsg: '復原成功',
+ banRestore: '確定要停用 {msg} 嗎?',
+ logOut: '登出',
+ clearContentConfirm: '確定要清空所有內容嗎?',
+ emptyRecipientMsg: '收件人電子郵件地址不能為空',
+ emptySubjectMsg: '主旨不能為空',
+ emptyContentMsg: '郵件正文不能為空',
+ noSeparateSendMsg: '分別寄送目前不支援附件',
+ sendSuccessMsg: '寄送成功',
+ sendFailMsg: '寄送失敗',
+ saveDraftConfirm: '是否儲存草稿?',
+ delEmailsConfirm: '確定要刪除選取的郵件嗎?',
+ delOneEmailConfirm: '確定要刪除這封郵件嗎?',
+ sending: '郵件正在寄送中',
+ sendingErrorMsg: '郵件正在寄送中',
+ networkErrorMsg: '網路錯誤,請檢查網路連線',
+ timeoutErrorMsg: '請求逾時,請稍後再試',
+ serverBusyErrorMsg: '伺服器忙碌中,請稍後再試',
+ reqFailErrorMsg: '請求失敗,請稍後再試',
+ message: '郵件詳細資訊',
+ language: '系統語言',
+ totalUserAccount: '{msg} 個',
+ sendBanned: '已停用',
+ sendInternal: '僅限站內',
+ wrote: '來信',
+ support: '贊助',
+ supportDesc: '請我喝杯奶茶',
+ featDesc: '功能說明',
+ emailInterception: '郵件攔截',
+ emailInterceptionDesc: '輸入信箱或網域以攔截郵件,可用於禁止使用者接收某些網站的郵件,輸入 * 可攔截所有郵件',
+ availableDomains: '可用網域',
+ availableDomainsDesc: '限制使用者只能使用指定的網域信箱,不在設定清單內的網域將禁止註冊、新增信箱、接收及寄送郵件等功能,留空則預設允許所有網域',
+ backgroundUrlDesc: '線上圖片連結',
+ localUpload: '本機上傳',
+ imageLink: '圖片連結',
+ imageLinkErrorMsg: '圖片連結不正確',
+ backgroundWarning: '圖片檔案大小會影響網站載入速度',
+ rulesVerify: '規則',
+ rulesVerifyTitle: 'IP 每天使用 {count} 次後觸發',
+ botVerifyMsg: '請完成人機驗證',
+ oauthLogin: 'OAuth2',
+ noticeTitle: '網站公告',
+ noticePopup: '登入彈窗',
+ icon: '圖示',
+ position: '位置',
+ offset: '偏移距離',
+ duration: '顯示時間',
+ topRight: '右上',
+ topLeft: '左上',
+ bottomRight: '右下',
+ bottomLeft: '左下',
+ width: '寬度',
+ titleDesc: '標題',
+ noticeContentDesc: '公告內容,支援 HTML',
+ verifyModuleFailed: '人機驗證模組載入失敗,請重新整理頁面',
+ popUp: '彈出',
+ noRecipientTitle: '無需註冊即可收件',
+ noRecipientDesc: '即使沒有註冊的信箱也能收到郵件',
+ preview: '預覽',
+ help: '說明',
+ document: '專案文件',
+ clearEmail: '郵件清除',
+ sendEmailAddress: '寄件人信箱',
+ toEmail: '收件人信箱',
+ equal: '等於',
+ leading: '開頭匹配',
+ to: '至',
+ clear: '清除',
+ include: '包含',
+ delAllConfirm: '確定要刪除嗎?',
+ pin: '置頂',
+ s3Configuration: 'S3 設定',
+ confirmDeletionOfContacts: '確定要清除這些聯絡人嗎?',
+ recentContacts: '最近聯絡人',
+ selectContacts: '選取',
+ forcePathStyleDesc: '路徑樣式存取,一些自建的物件儲存需要開啟',
+ storageType: '儲存類型',
+ customDomainDesc: 'Worker 自訂網域',
+ show: '顯示',
+ hide: '隱藏',
+ onlyName: '僅名稱',
+ emailText: '郵件文字',
+ emailPrefix: '信箱前綴',
+ atLeast: '至少',
+ character: '位',
+ mustNotContain: '禁止包含',
+ mustNotContainDesc: '輸入多個值請以 , 分隔',
+ blackSubjectDesc: '郵件主旨',
+ blackContentDesc: '郵件內容',
+ blackFromDesc: '寄件人信箱或網域',
+ senderRules: '寄件人信箱或網域',
+ blackListDesc: '拒收包含以下資訊的郵件',
+ setSuccess: '設定成功',
+ details: '詳細資訊',
+ userDetails: '使用者詳細資訊',
+ markAsRead: '標記為已讀',
+ star: '星號',
+ setRole: '設定權限',
+ adminDeleteUser: '刪除使用者',
+ banUser: '封鎖使用者',
+ enableUser: '啟用使用者',
+ restoreUser: '復原使用者',
+ searchUser: '搜尋使用者',
+ searchEmail: '搜尋信箱',
+ searchSender: '搜尋寄件人',
+ userEmail: '使用者信箱',
+ oauthSetting: 'OAuth',
+ clientId: '客戶端 ID',
+ clientSecret: '客戶端密鑰',
+ notOwner: '基礎信箱不屬於您',
+}
+
+export default zhtw
\ No newline at end of file
diff --git a/mail-vue/src/views/setting/index.vue b/mail-vue/src/views/setting/index.vue
index 1650969df3..00b65b33ac 100644
--- a/mail-vue/src/views/setting/index.vue
+++ b/mail-vue/src/views/setting/index.vue
@@ -38,7 +38,8 @@
placeholder="Select"
@change="changeLang"
>
-
+
+
diff --git a/mail-worker/src/i18n/i18n.js b/mail-worker/src/i18n/i18n.js
index a90393ebcf..c95b55180b 100644
--- a/mail-worker/src/i18n/i18n.js
+++ b/mail-worker/src/i18n/i18n.js
@@ -1,5 +1,6 @@
import i18next from 'i18next';
-import zh from './zh.js'
+import zh_cn from './zh_cn.js'
+import zh_tw from './zh_tw.js'
import en from './en.js'
import app from '../hono/hono';
@@ -15,9 +16,12 @@ const resources = {
en: {
translation: en
},
- zh: {
- translation: zh,
+ zh_cn: {
+ translation: zh_cn,
},
+ zh_tw: {
+ translation: zh_tw,
+ }
};
i18next.init({
diff --git a/mail-worker/src/i18n/zh.js b/mail-worker/src/i18n/zh_cn.js
similarity index 99%
rename from mail-worker/src/i18n/zh.js
rename to mail-worker/src/i18n/zh_cn.js
index e2bf313c5f..4f2c0519c5 100644
--- a/mail-worker/src/i18n/zh.js
+++ b/mail-worker/src/i18n/zh_cn.js
@@ -1,4 +1,4 @@
-const zh = {
+const zh_cn = {
IncorrectPwd: '密码输入错误',
addAccountDisabled: '添加邮箱功能已关闭',
regDisabled: '注册功能已关闭',
@@ -104,4 +104,4 @@ const zh = {
}
}
-export default zh
+export default zh_cn
diff --git a/mail-worker/src/i18n/zh_tw.js b/mail-worker/src/i18n/zh_tw.js
new file mode 100644
index 0000000000..501dc5b87f
--- /dev/null
+++ b/mail-worker/src/i18n/zh_tw.js
@@ -0,0 +1,107 @@
+const zh_tw = {
+ IncorrectPwd: '密碼輸入錯誤',
+ addAccountDisabled: '新增信箱功能已關閉',
+ regDisabled: '註冊功能已關閉',
+ emptyEmail: '信箱不能為空',
+ notEmail: '無效的信箱',
+ notExistDomain: '不存在的信箱網域',
+ isDelAccount: '該信箱已被註銷',
+ isRegAccount: '該信箱已被註冊',
+ accountLimit: '新增信箱數量已達限制',
+ delMyAccount: '不可以刪除自己的信箱',
+ noUserAccount: '該信箱不屬於目前使用者',
+ usernameLengthLimit: '使用者名稱長度超出限制',
+ noOsSendPic: '物件儲存未設定,無法傳送內文圖片',
+ noOsDomainSendAtt: '物件儲存網域未設定,無法傳送附件',
+ noOsSendAtt: '物件儲存未設定,無法傳送附件',
+ disabledSend: '郵件寄送功能已停用',
+ oauthDisabled: '該 OAuth2 功能未啟用',
+ daySendLimit: '寄送次數已達每日限制',
+ totalSendLimit: '寄送次數已達限制',
+ daySendLack: '當日剩餘寄送次數不足',
+ totalSendLack: '剩餘寄送次數不足',
+ senderAccountNotExist: '寄件人信箱不存在',
+ noResendToken: 'Resend 未設定,只能寄送郵件至站內信箱',
+ noSendProvider: '寄件服務未設定,只能寄送郵件至站內信箱',
+ sendEmailNotCurUser: '寄件人信箱不屬於目前使用者',
+ notExistEmailReply: '郵件不存在,無法回覆',
+ imageAttLimit: '圖片不能超過 10 個',
+ attLimit: '附件不能超過 10 個',
+ pwdLengthLimit: '密碼長度超出限制',
+ emailLengthLimit: '信箱長度超出限制',
+ minEmailPrefix: '信箱名稱至少 {{msg}} 位',
+ banEmailPrefix: '信箱名稱包含無效字元',
+ pwdMinLength: '密碼至少六位',
+ notEmailDomain: '無效的信箱網域',
+ emptyRegKey: '註冊碼不能為空',
+ notExistRegKey: '註冊碼不存在',
+ noRegKeyTotal: '註冊碼使用次數已用盡',
+ regKeyExpire: '註冊碼已過期',
+ emailAndPwdEmpty: '信箱和密碼不能為空',
+ notExistUser: '輸入的信箱不存在',
+ isDelUser: '該信箱已被註銷',
+ isBanUser: '該信箱已被停用',
+ regKeyUseCount: '使用次數不能為空',
+ emptyRegKeyExpire: '有效時間不能為空',
+ isExistRegKye: '註冊碼已存在',
+ roleNotExist: '權限身分不存在',
+ emptyRoleName: '身分名稱不能為空',
+ roleNameExist: '身分名稱已存在',
+ delDefRole: '預設身分不能刪除',
+ notJsonDomain: '環境變數 domain 必須是 JSON 類型',
+ noDomainVariable: '環境變數 domain 不能為空',
+ noOsUpBack: '物件儲存未設定,無法上傳背景',
+ noOsDomainUpBack: '物件儲存網域未設定,無法上傳背景',
+ starNotExistEmail: '加星號的郵件不存在',
+ emptyBotToken: '需要進行人機驗證',
+ botVerifyFail: '人機驗證失敗,請重試',
+ authExpired: '身分驗證已失效,請重新登入',
+ unauthorized: '權限不足',
+ bannedSend: '你沒有郵件寄送權限',
+ onlyInternalSend: '權限不足,只能寄送郵件至站內信箱',
+ noDomainPermAdd: '你沒有權限新增該網域的信箱',
+ noDomainPermReg: '你沒有權限註冊該網域的信箱',
+ noDomainPermRegKey: '你的註冊碼沒有權限註冊該網域的信箱',
+ noDomainPermSend: '你沒有權限使用該網域的信箱寄送郵件',
+ publicTokenFail: 'Token 驗證失敗',
+ notAdmin: '輸入的信箱不是管理員信箱',
+ emailExistDatabase: '已有信箱存在於資料庫中',
+ notConfigOss: '物件儲存未設定',
+ perms: {
+ "邮件": "郵件",
+ "邮件发送": "郵件寄送",
+ "邮件删除": "郵件刪除",
+ "邮箱侧栏": "信箱側欄",
+ "邮箱查看": "信箱查看",
+ "邮箱添加": "信箱新增",
+ "邮箱删除": "信箱刪除",
+ "个人设置": "個人設定",
+ "用户注销": "使用者註銷",
+ "分析页": "分析頁",
+ "数据查看": "資料查看",
+ "用户信息": "使用者列表",
+ "用户查看": "使用者查看",
+ "用户添加": "使用者新增",
+ "密码修改": "密碼修改",
+ "状态修改": "狀態修改",
+ "权限修改": "權限修改",
+ "用户删除": "使用者刪除",
+ "邮件列表": "全部郵件",
+ "邮件查看": "郵件查看",
+ "权限控制": "權限控制",
+ "身份查看": "身分查看",
+ "身份添加": "身分新增",
+ "身份修改": "身分修改",
+ "身份删除": "身分刪除",
+ "注册密钥": "註冊金鑰",
+ "密钥查看": "金鑰查看",
+ "密钥添加": "金鑰新增",
+ "密钥删除": "金鑰刪除",
+ "系统设置": "系統設定",
+ "设置查看": "設定查看",
+ "设置修改": "設定修改",
+ "发件重置": "寄件重設"
+ }
+}
+
+export default zh_tw
\ No newline at end of file