diff --git a/src/renderer/components/landing/Footer.vue b/src/renderer/components/landing/Footer.vue index 4e0018b4..8b5d595c 100644 --- a/src/renderer/components/landing/Footer.vue +++ b/src/renderer/components/landing/Footer.vue @@ -131,30 +131,19 @@
English + >{{ item.name }}
-
- Vietnamese -
-
@@ -209,6 +198,22 @@ export default { computed: { currentYear () { return new Date().getFullYear() + }, + languages () { + return [ + { + id: 'en', + name: 'English' + }, + { + id: 'vi', + name: 'Tiếng Việt' + } + // { + // id: 'zh', + // name: '繁體中文' + // } + ] } }, mounted () { @@ -218,7 +223,7 @@ export default { setLocale (locale) { this.changeLang(locale) setTimeout(() => { - if (this.$route.path.startsWith('/vi/blog') && locale === 'en') { + if (this.$route.path.startsWith('/vi/blog') && locale !== 'vi') { this.$router.push('/blog') return } @@ -226,7 +231,7 @@ export default { this.$router.push('/vi/blog') return } - if (this.$route.path.startsWith('/vi/whitepaper') && locale === 'en') { + if (this.$route.path.startsWith('/vi/whitepaper') && locale !== 'vi') { window.location.replace('/whitepaper') return } diff --git a/src/renderer/components/landing/whitepaper/Header.vue b/src/renderer/components/landing/whitepaper/Header.vue index b40b33cb..f323f467 100644 --- a/src/renderer/components/landing/whitepaper/Header.vue +++ b/src/renderer/components/landing/whitepaper/Header.vue @@ -186,13 +186,11 @@ export default { setLocale (locale) { this.changeLang(locale) setTimeout(() => { - if (locale === 'en') { - window.location.replace('/whitepaper') - return - } if (locale === 'vi') { window.location.replace('/vi/whitepaper') + return } + window.location.replace('/whitepaper') }, 200) } } diff --git a/src/renderer/components/notifications/NotificationBell.vue b/src/renderer/components/notifications/NotificationBell.vue index 33eff153..40ad1817 100644 --- a/src/renderer/components/notifications/NotificationBell.vue +++ b/src/renderer/components/notifications/NotificationBell.vue @@ -51,7 +51,7 @@
{{ item.title.vi }}
-
+
{{ item.title.en }}
- - + + +
diff --git a/src/renderer/layouts/landing.vue b/src/renderer/layouts/landing.vue index bc2cebb0..fd820ccd 100644 --- a/src/renderer/layouts/landing.vue +++ b/src/renderer/layouts/landing.vue @@ -72,6 +72,16 @@ export default { }, head () { // this.$i18n.locale = this.lang + const locale = (() => { + switch (this.locale) { + case 'vi': + return 'vi_VN' + case 'zh': + return 'zh_TW' + default: + return 'en_US' + } + })() return { htmlAttrs: { lang: this.locale @@ -87,7 +97,7 @@ export default { { hid: 'og:locale', property: 'og:locale', - content: this.locale === 'vi' ? 'vi_VN' : 'en_US' + content: locale }, { hid: 'twitter:title', diff --git a/src/renderer/layouts/register.vue b/src/renderer/layouts/register.vue index 8b7f535d..889f8afd 100644 --- a/src/renderer/layouts/register.vue +++ b/src/renderer/layouts/register.vue @@ -27,6 +27,16 @@ export default { }, head () { // this.$i18n.locale = this.lang + const locale = (() => { + switch (this.locale) { + case 'vi': + return 'vi_VN' + case 'zh': + return 'zh_TW' + default: + return 'en_US' + } + })() return { htmlAttrs: { lang: this.locale @@ -42,7 +52,7 @@ export default { { hid: 'og:locale', property: 'og:locale', - content: this.locale === 'vi' ? 'vi_VN' : 'en_US' + content: locale }, { hid: 'twitter:title', diff --git a/src/renderer/layouts/whitepaper.vue b/src/renderer/layouts/whitepaper.vue index f3c138e6..593a47d9 100644 --- a/src/renderer/layouts/whitepaper.vue +++ b/src/renderer/layouts/whitepaper.vue @@ -60,24 +60,19 @@ @@ -235,6 +230,22 @@ export default { computed: { language () { return this.$store.state.user.language + }, + languages () { + return [ + { + id: 'en', + name: 'English' + }, + { + id: 'vi', + name: 'Tiếng Việt' + } + // { + // id: 'zh', + // name: '繁體中文' + // } + ] } }, watch: { diff --git a/src/renderer/locales/zh.json b/src/renderer/locales/zh.json new file mode 100644 index 00000000..a6a05ce6 --- /dev/null +++ b/src/renderer/locales/zh.json @@ -0,0 +1,1859 @@ +{ + "common": { + "accept": "接受", + "accounts": "帳戶 | 帳戶", + "actions": "動作", + "active": "啟用", + "add": "新增", + "add_new": "新增", + "address": "地址", + "address_placeholder": "請輸入您的地址", + "agree_terms": "我同意條款內容條件", + "all_items": "所有項目", + "amount": "金額", + "apply": "套用", + "approve": "同意", + "authentication_app": "驗證應用程式", + "authentication_email": "驗證信箱", + "back": "返回", + "cancel": "取消", + "cardholder": "持卡人姓名", + "cardholder_placeholder": "瑪卡巴卡", + "choose_file": "選擇檔案", + "city": "城市", + "clone": "複製", + "close": "關閉", + "collapse": "收合", + "collections": "團隊資料夾", + "company": "公司", + "company_placeholder": "請輸入您的公司", + "company_size": "員工人數", + "configuration": "設定", + "confirm": "確認", + "confirm_password": "確認密碼", + "confirm_password_placeholder": "請輸入確認密碼", + "confirmed": "已確認", + "contact_us": "聯絡我們", + "continue": "繼續", + "copied": "已複製到剪貼簿", + "copy": "複製", + "country": "國家", + "created": "建立於", + "created_date": "建立日期", + "cystack_address": "地址:Tan Hong Ha Complex, 317 Truong Chinh Street, Thanh Xuan District, Hanoi, Vietnam", + "decline": "拒絕", + "delete": "刪除", + "delete_account": "刪除帳戶", + "disable": "停用", + "discount": "折扣", + "dob": "生日", + "done": "完成", + "dr": "Dr", + "duration": "期間", + "edit": "編輯", + "email": "電子信箱", + "email_address": "電子信箱", + "email_placeholder": "請輸入您的電子信箱", + "enable": "啟用", + "error": "錯誤", + "expired": "已過期", + "failed": "失敗", + "features": "功能", + "female": "女性", + "first_name": "名", + "first_name_placeholder": "請輸入您的名字", + "folder": "資料夾", + "folder_name": "資料夾名稱", + "fullname": "全名", + "get_share_link": "取得分享連結", + "go_to_website": "前往網站", + "good": "良好", + "group_name": "群組名稱", + "groups": "群組", + "half_yearly": "半年方案", + "have_code": "有優惠代碼", + "in_app_share": "在應用程式內分享", + "invite": "邀請", + "issue": "問題", + "item_name": "項目名稱", + "job_title": "職稱", + "job_title_placeholder": "請輸入您的職稱", + "joined": "加入於", + "last_name": "姓", + "last_name_placeholder": "請輸入您的姓氏", + "learn_more": "了解更多", + "length": "長度", + "lifetime": "終身方案", + "lock": "鎖定", + "login": "登入", + "logout": "登出", + "male": "男性", + "manage_plans": "管理方案", + "master_password": "主密碼", + "me": "我", + "month": "月", + "monthly": "月方案", + "move_folder": "移到資料夾", + "mr": "先生", + "mrs": "女士", + "ms": "小姐", + "name": "名稱", + "nationality": "國籍", + "new_password": "新密碼", + "new_password_placeholder": "請輸入新密碼", + "next": "下一步", + "no": "否", + "no_credit_card": "無需信用卡。", + "note": "備註", + "ok": "確定", + "onetime": "終身方案", + "only": "僅", + "or": "或", + "organization": "組織", + "other": "其他", + "owner": "擁有者", + "ownership": "擁有權限", + "password": "密碼", + "permanently_delete": "永久刪除", + "phone": "電話號碼", + "phone_placeholder": "請輸入您的電話號碼", + "plan": "方案", + "previous": "上一步", + "price": "價格", + "privacy": "隱私", + "privacy_policy": "隱私政策", + "proceed": "前往", + "purge": "清除帳戶", + "quick_share": "快速分享", + "reinvite": "重新邀請", + "reject": "拒絕", + "release_notes": "更新說明", + "remove": "移除", + "rename": "重新命名", + "request_access": "請求權限", + "restore": "恢復", + "save": "儲存", + "search_placeholder": "搜尋所有內容……", + "secret_key": "密鑰", + "see_all": "查看全部", + "see_more": "查看更多", + "select": "選擇", + "select_an_option": "請選擇", + "share": "分享", + "share_type": "分享型態", + "shared_with_you": "已在 Locker 分享", + "sign_up": "註冊", + "skip": "略過", + "state": "省/州", + "status": "狀態", + "submit": "送出", + "subscribe": "訂閱", + "success": "成功", + "takeover": "接受", + "terms": "條款", + "total": "總計", + "totp": "TOTP", + "type": "類型", + "unlimited": "無上限", + "update": "更新", + "upgrade": "升級", + "user": "使用者", + "username": "使用者名稱", + "users": "使用者", + "verify": "驗證", + "view": "檢視", + "view_folder": "開啟資料夾", + "view_item": "檢視項目", + "warning": "警告", + "work_email": "公司信箱", + "work_email_placeholder": "請輸入您的公司信箱", + "year": "年", + "yearly": "年度方案", + "yes": "是", + "you": "您", + "your_digital_vault": "您的數位保險庫", + "zip": "郵遞區號", + "send": "發送" + }, + "sidebar": { + "all": "所有項目", + "passwords": "密碼", + "dashboard": "儀表板", + "enterprise_dashboard": "企業儀表板", + "vault": "保險庫", + "notes": "安全筆記", + "cards": "付款卡", + "identities": "身份資料", + "crypto_backups": "加密資產備份", + "crypto-backups": "加密資產備份", + "shares": "共享項目", + "trash": "垃圾桶", + "users": "使用者", + "groups": "群組", + "shared_folders": "共享資料夾", + "settings": "設定", + "general": "一般設定", + "import_export": "匯入/匯出", + "download": "下載", + "excluded_domains": "排除的網域", + "upgrade": "升級", + "tools": "工具", + "logs": "紀錄", + "overview": "概覽", + "billing": "帳單", + "family_members": "家庭成員", + "policies": "策略", + "inventory": "清單", + "help": "幫助與回饋", + "feedback": "回報問題", + "shared_with_you": "與您分享", + "your_shares": "已分享的項目", + "requests": "請求", + "choose_plan": "選擇方案", + "payment": "付款", + "confirmation": "確認", + "account": "帳戶", + "options": "選項", + "security": "安全性", + "security_tools": "安全工具", + "plans_billing": "方案與帳單", + "referral": "推薦", + "manage_member": "管理成員", + "notifications": "通知", + "private_email": "私人電子郵件", + "authenticator": "驗證器", + "in_app_shares": "應用程式內分享", + "quick_shares": "快速分享", + "rewards": "獎勵" + }, + "errors": { + "1002": "驗證碼有誤。", + "1004": "請用此電子郵件註冊一個新帳戶", + "3003": "此團隊已被鎖定。請升級方案來解鎖。", + "5000": "此項目正在共用中且無法被移至共用資料夾。| 您的資料夾包含共用的項目。請移出這些項目才能繼續。", + "5001": "您不能一次刪除超過 10,000 個項目。", + "5002": "您已達 {type} 的儲存空間上限。請至垃圾桶查看並刪除不必要的項目,或升級至 Premium 方案以繼續使用。", + "7009": "您的付款卡片發生錯誤(如餘額不足等)。請聯繫您的發卡機構獲取詳情。", + "7012": "此方案包含您只能加入 6 位成員。", + "7013": "此試用方案已被 {email} 申請", + "7015": "{email} 已在一個企業團隊。請離開該企業團隊或使用其他電子郵件。", + "7018": "您提供的電子郵件不是學校信箱", + "7019": "此學校信箱已經註冊過", + "111111": "您已經新增過此付款方式了。", + "confirm_password": "主密碼驗證不符", + "invalid_password": "您的密碼不正確,請再試一次", + "invalid_master_password": "您的主密碼不正確,請再試一次", + "invalid_number": "卡號不正確", + "incomplete_number": "卡號輸入不完整", + "incomplete_cvc": "安全驗證碼輸入不完整", + "incomplete_expiry": "有效期限輸入不完整", + "invalid_expiry_year": "有效年份不正確", + "invalid_expiry_year_past": "卡片已過期", + "invalid_expiry_month_past": "卡片已過期", + "0004": "資料有誤", + "id_confirm_password": "Locker ID 密碼驗證不符", + "something_went_wrong": "發生了一些錯誤", + "oops": "糟糕!出了點狀況。請稍後再試。", + "locked_until_pay": "您的帳戶因 Locker for Business 方案到期而停用。", + "upgrade_to_use": "您需要升級方案才能使用這項功能", + "only_individual": "此方案僅適用於個人帳戶", + "invalid_url": "無效的網址", + "invalid_code": "您輸入的代碼好像不存在或已過期了 :(" + }, + "master_password": { + "create_success": "您的主密碼設定完成!", + "create_failed": "您的主密碼設定失敗!", + "scores": { + "na": "N/A", + "very_weak": "非常弱", + "weak": "弱", + "medium": "中", + "good": "強", + "strong": "非常強", + "not_set": "未設定密碼" + }, + "change": "變更主密碼", + "current_password": "輸入目前主密碼", + "new_password": "輸入新的主密碼", + "re_password": "再次輸入新的主密碼", + "change_btn": "變更密碼", + "enter_password": "輸入主密碼", + "enter_password_desc": "輸入您的主密碼以解鎖", + "enter_password_title": "登入", + "get_hint": "取得主密碼提示", + "continue": "繼續", + "master_password_hint": "主密碼提示", + "master_password_hint_desc": "主密碼提示將會寄送至您的電子信箱", + "send": "寄送", + "back_login": "返回登入", + "sorry": "抱歉,您還沒有設定主密碼提示。", + "hint_success": "請至電子信箱查看提示內容。", + "unlock": "解鎖", + "id_password": "新的 Locker ID 密碼", + "id_password_confirm": "再次輸入 Locker ID 密碼" + }, + "enum": { + "Login": "密碼 | 密碼", + "SecureNote": "安全筆記 | 安全筆記", + "Card": "付款卡 | 付款卡", + "Identity": "身份資料 | 身份資料", + "null": "垃圾桶" + }, + "type": { + "0": "項目 | 項目", + "1": "密碼 | 密碼", + "2": "安全筆記 | 安全筆記", + "3": "卡片 | 卡片", + "4": "身份資料 | 身份資料", + "5": "OTP | OTPs", + "6": "加密資產帳戶 | 加密資產帳戶", + "7": "加密資產備份 | 加密資產備份", + "null": "項目 | 項目", + "Login": "密碼 | 密碼", + "SecureNote": "安全筆記 | 安全筆記", + "Card": "卡片 | 卡片", + "Identity": "身份資料 | 身份資料", + "Dashboard": "項目 | 項目", + "Vault": "項目 | 項目", + "Shares": "項目 | 項目", + "Folder": "資料夾 | 資料夾", + "your_shares": "已向人分享", + "requests": "請求分享", + "CryptoAccount": "加密資產帳戶 | 加密資產帳戶", + "CryptoWallet": "加密資產備份 | 加密資產備份", + "CryptoBackup": "加密資產備份 | 加密資產備份", + "TOTP": "驗證器", + "private_email": "私人 Email | 私人 Emails" + }, + "set_master_password": { + "title": "建立主密碼", + "subtitle": "您的主密碼是用來解鎖所有儲存於 Locker 內資料的重要關鍵。請勿與他人共享您的主密碼。", + "logout": "登出", + "enter_master_password": "輸入主密碼", + "confirm_master_password": "確認主密碼", + "master_password_hint": "提示(選填) ", + "create_button": "建立密碼", + "note": "注意:忘記或遺失主密碼時,Locker 無法檢視、儲存、或再次發放主密碼。", + "confirm_nodal": { + "title": "重要事項", + "text1": "繼續代表您了解 Locker 無法檢視、儲存、或再次發放您遺失的主密碼。主密碼的保管是您個人的責任。", + "text2": "您可以進一步瞭解有關於主密碼", + "link": "在此", + "btn_next": "我了解了。開始吧!", + "btn_back": "返回,我要變更我的主密碼" + } + }, + "data": { + "notifications": { + "safe": "您的電子郵件是安全的!", + "leaked": "您的電子郵件出現在 {breaches} 資料洩漏事件中", + "create_success": "已新增 {type} !| 已新增 {type}!", + "create_failed": "未能新增 {type} !| 未能新增 {type}!", + "update_success": "已更新 {type} !| 已更新 {type}!", + "update_failed": "未能更新 {type} !| 未能更新 {type}!", + "trash_success": "已將 {type} 移至垃圾桶!| 已將 {type} 移至垃圾桶!", + "trash_failed": "未能將 {type} 移至垃圾桶!| 未能將 {type} 移至垃圾桶!", + "delete_success": "已永久刪除 {type} !| 已永久刪除 {type}!", + "delete_failed": "未能永久刪除 {type} !| 未能永久刪除 {type}!", + "restore_success": "已還原 {type} !| 已還原 {type}!", + "restore_failed": "未能還原 {type} !| 未能還原 {type}!", + "delete_selected": "刪除所選項目", + "delete_selected_desc": "您確定要永久刪除此項目嗎?| 您已選擇 {count} 個項目要永久刪除。您確定要永久刪除所有這些項目嗎?", + "trash_selected": "將所選項目移到垃圾桶", + "trash_selected_desc": "您確定要把這些項目丟到垃圾桶嗎?垃圾桶內的項目會在 30 天後被永久刪除。| 您已選擇 {count} 個項目要移到垃圾桶。您確定要刪除所有這些項目嗎?垃圾桶內的項目會在 30 天後被永久刪除。", + "trash_no_permission": "{count} 個項目因為非您所有而無法被移到垃圾桶", + "restore_selected": "復原所選項目", + "restore_selected_desc": "您確定要復原這個項目嗎?| 您已選擇 {count} 個項目要復原。您確定要復原所有這些項目嗎?", + "move_selected": "移動選取項目", + "move_selected_desc": "選擇您要將這 {count} 個選定項目移至的資料夾。", + "move_success": "項目已移動!| 項目已移動!", + "move_failed": "項目未移動!| 項目未移動!", + "deleted_folder": "刪除資料夾後,其中的所有項目都會被移至垃圾桶。您確定要刪除此資料夾嗎?", + "add_member_success": "成員已收到邀請!", + "add_member_failed": "邀請成員失敗!", + "delete_member_success": "成員已刪除!", + "delete_member_failed": "未能刪除成員!", + "delete_member_description": "您確定要移除此使用者?", + "update_member_success": "成員權限已更新!", + "update_member_failed": "未能更新成員權限", + "confirm_member_success": "此成員已確認!", + "confirm_member_failed": "未能確認成員身份!", + "reject_member_success": "已拒絕邀請!", + "reject_member_failed": "未能拒絕邀請!", + "accept_member_success": "邀請已被接受!", + "accept_member_failed": "未能接受邀請!", + "update_settings_success": "您的設定已更新!", + "update_settings_failed": "您的設定更新出錯!", + "update_master_success": "您的主密碼已更新!", + "update_master_failed": "您的主密碼更新出錯!", + "incorrect_current_master": "目前的主密碼有誤", + "add_group_success": "群組已新增!", + "add_group_failed": "未能新增群組!", + "delete_group_success": "群組已刪除!", + "delete_group_failed": "未能刪除群組!", + "delete_group_description": "您確定要移除此群組嗎?", + "update_group_success": "群組資訊已更新!", + "update_group_failed": "未能更新群組資訊!", + "add_folder_success": "資料夾已新增!", + "add_folder_failed": "未能新增資料夾!", + "delete_folder_success": "資料夾已刪除!", + "delete_folder_failed": "未能刪除資料夾!", + "delete_folder_description": "您確定要移除此資料夾嗎?", + "update_folder_success": "資料夾資訊已更新!", + "update_folder_failed": "未能更新資料夾資訊!", + "purge_success": "您的保險庫已清除!", + "purge_failed": "未能清除您的保險庫!", + "purge_title": "刪除帳戶內的所有項目", + "purge_description": "Locker 中的所有項目將被永久刪除。其他使用者與您分享的項目(若有)不會被刪除。", + "delete_account_success": "您的 Locker 帳戶已被刪除!", + "delete_account_failed": "未能刪除您的 Locker 帳戶!", + "delete_account_title": "刪除 Locker 帳戶", + "delete_account_description": "進行以下操作來刪除帳戶以及相關的所有資料。", + "purge_team_success": "您團隊的保險庫已清除!", + "purge_team_failed": "未能清除您團隊的保險庫!", + "purge_team_title": "刪除團隊保險庫中的所有項目", + "purge_team_description": "進行以下操作來刪除團隊保險庫中的所有項目。", + "update_team_success": "您團隊的資訊已更新!", + "update_team_failed": "未能更新您團隊的資訊!", + "fingerprint_title": "驗證指紋密碼片語", + "fingerprint_description_1": "為確保加密金鑰的完整性,請在繼續之前驗證使用者提供的指紋密碼片語。", + "fingerprint_description_2": "「指紋密碼片語」是一個獨一無二的片語(類似於密碼),使用者可以使用它向另一個使用者驗證自己的公開金鑰,用於分享目的。", + "min_password_length": "密碼長度至少 {length}", + "max_password_length": "密碼長度不能超過 {length}", + "password_composition": "密碼必須至少包含一個特殊字元", + "max_less_than_min": "密碼最長位數不得少於最短位數", + "requires_lowercase": "需包含小寫字母(abc)", + "requires_uppercase": "需包含大寫字母(ABC)", + "requires_special": "需包含特殊字元(@#!$%)", + "requires_number": "需包含數字(0 1 2 3)", + "avoid_ambiguous": "請避免模糊不清的字元(O 和數字 0,小寫 l 和大寫 I……等)", + "invite_user_success": "已邀請使用者", + "invite_user_failed": "邀請使用者失敗", + "accept_invitation_success": "已接受邀請", + "accept_invitation_failed": "無法接受邀請", + "reject_invitation": "已拒絕邀請", + "reject_invitation_failed": "拒絕邀請失敗", + "confirm_emergency_access_success": "已確認 {user} 的身份", + "confirm_emergency_access_failed": "無法確認 {user} 的身份", + "reinvited_user_success": "{user} 已重新邀請", + "reinvited_user_failed": "重新邀請 {user} 失敗", + "update_contact_success": "緊急聯絡人已更新", + "update_contact_failed": "更新緊急聯絡人失敗", + "remove_user_success": "已移除使用者 {user}", + "remove_user_failed": "移除使用者失敗", + "request_send_success": "已向 {user} 請求緊急取用權限", + "request_send_failed": "發送請求失敗", + "emergency_access_approved_failed": "更新存取權限請求失敗", + "emergency_access_approved_success": "已核准緊急存取權限", + "emergency_access_rejected_success": "已拒絕緊急存取權限", + "emergency_access_rejected_failed": "未能更新存取權限請求", + "error_occurred": "發生錯誤", + "takeover_success": "已重設 {user} 的主密碼。您現在可使用新的主密碼登入保險庫。", + "takeover_locker_success": "已重設 {user} 的密碼。您現在可使用新的密碼登入 Locker。", + "delete_emergency_contact": "您確定要移除此緊急聯絡人嗎?", + "approve_emergency_access": "您確定要核准對方的緊急存取權限嗎?這將使 {user} 能夠「{type}」您的帳戶。", + "request_emergency_access": "您確定要請求緊急存取權限嗎?您會於 {day} 天後獲得存取權,或是在使用者手動核准時的任何時間點獲得。", + "incorrect_format": "資料格式不正確", + "no_data": "沒有資料", + "select_appropriate_file": "請選擇正確的檔案", + "import_failed": "資料匯入失敗", + "import_success": "已匯入 {foldersCount} 個資料夾,{ciphersCount}/{total} 個項目", + "confirm_invite_user": "您確定要邀請以下使用者嗎:", + "leave_share": "您確定要退出這個分享群組嗎?", + "share_success": "已分享此項目!| 已分享這些項目!", + "share_failed": "分享此項目失敗!| 分享這些項目失敗!", + "share_less_than_20": "您一次最多只能分享 20 個項目", + "leave_share_success": "已成功退出分享群組", + "update_share_success": "已成功更新分享成員", + "stop_share_success": "已成功停止分享", + "authentication_failed": "驗證失敗", + "extension_loggedin": "Locker 瀏覽器擴充功能已登入。您現在可以點擊工具列中的 Locker 圖示來使用。", + "invalid_master_password": "主密碼必須至少有 8 個字元", + "upgrade_success": "升級成功", + "mark_all_as_read": "全部標為已讀", + "no_notifications": "沒有新的通知", + "switch_plan": "選擇前往以進到付款頁面。完成購買後,您目前方案 {currentPlan}({currentPeriod})將被取消。您的方案將會更新為 {chosenPlan}({chosenPeriod})。", + "purchase_plan": "選擇執行以進入付款頁面。完成購買後,將會為您目前方案延長 {duration}。選擇取消則會關閉此提示視窗。" + }, + "profile_menu": { + "lock": "鎖定帳戶", + "logout": "登出", + "account_settings": "帳戶設定", + "support_center": "客服中心", + "tour": "使用教學導覽", + "feedback": "提供意見回饋" + }, + "admin_menu": { + "my_vault": "我的保險庫", + "team_profile": "團隊設定檔", + "change_team": "切換團隊" + }, + "no_data": { + "7": { + "title": "新增第一個加密資產備份", + "description": "將您的加密帳戶/錢包安全存放", + "btn": "新增資產" + }, + "Dashboard": { + "title": "讓我們開始吧!", + "description": "新增您的第一個項目。您隨時都能輕鬆找到它", + "btn": "新增項目", + "btn_import": "匯入" + }, + "Vault": { + "title": "讓我們開始吧!", + "description": "新增您的第一個項目。您隨時都能輕鬆找到它", + "btn": "新增項目", + "btn_import": "匯入" + }, + "Login": { + "title": "讓我們開始吧!", + "description": "紀錄密碼,從任何裝置都能隨時存取", + "btn": "新增密碼", + "btn_import": "匯入" + }, + "SecureNote": { + "title": "解放被塞滿的大腦", + "description": "儲存 Wi-Fi 密碼、辦公室保全密碼,或是朋友的生日……", + "btn": "新增註記" + }, + "Card": { + "title": "簡化線上購物", + "description": "新增付款卡,線上購物時自動填入付款資料", + "btn": "新增付款卡" + }, + "Identity": { + "title": "快速填寫線上表格", + "description": "新增身份資料,Locker 能幫您自動填寫各類線上表單", + "btn": "新增身份資料" + }, + "Trash": { + "title": "這裡什麼都沒有", + "description": "移到垃圾桶的項目都可在永久刪除前還原" + }, + "Shares": { + "title": "這裡什麼都沒有", + "description": "您與他人分享的項目都會出現在這裡", + "btn": "新增項目" + }, + "TOTP": { + "title": "使您的帳戶更加安全", + "description": "開啟 Locker 的雙因素認證功能,為您的線上帳戶再增一層安全防護", + "btn": "設定雙因素認證(2FA)" + } + }, + "members": { + "role": { + "admin": { + "title": "管理員", + "description": "管理員能存取並管理組織內的所有項目、資料夾及使用者" + }, + "manager": { + "title": "管理員", + "description": "管理員能存取並管理組織內已指派給他的資料夾" + }, + "member": { + "title": "成員", + "description": "一般的使用者,只能存取團隊內已指派給他的資料夾" + }, + "owner": { + "title": "擁有者" + }, + "family": { + "title": "家庭成員" + } + }, + "invite_user": "邀請使用者", + "edit_member": "編輯成員", + "enter_email": "輸入電子信箱", + "user_access": "此使用者只能存取已選取的資料夾。", + "invite_member": { + "by_file": "上傳成員名單", + "upload_file": "上傳檔案", + "select_format": "選取匯入檔案格式", + "select_file": "選取匯入檔案", + "description": "輸入成員的電子信箱以發送邀請。可輸入多個電子信箱,以英文逗號( , )隔開。若成員沒有 Locker 帳戶,會被引導至帳戶建立頁面。若成員已擁有 Locker 帳戶,則現有帳戶會被加入您的群組。", + "warning": "** 注意:請輸入欲邀請成員的正確電子信箱。輸入錯誤的電子信箱可能造成惡意人士存取群組資料的風險。", + "csv_template": "上傳檔案前,請根據此處的範本,將 .csv 檔案排版。", + "xlsx_template": "上傳檔案前,請根據此處的範本,將 .xlsx 檔案排版。" + } + }, + "timeouts": { + "oneMinute": "1 分鐘", + "fiveMinutes": "5 分鐘", + "tenMinutes": "10 分鐘", + "fifteenMinutes": "15 分鐘", + "thirtyMinutes": "30 分鐘", + "oneHour": "1 小時", + "fourHours": "4 小時", + "twoWeeks": "2 週", + "onRefresh": "當瀏覽器重啟時" + }, + "exportFile": { + "export": "匯出", + "export_items": "匯出項目", + "export_items_desc": "請輸入您的主密碼以匯出保險庫內的資料。", + "csv": "CSV", + "json": "JSON", + "encrypted_json": "加密的 JSON" + }, + "importFile": { + "import": "匯入", + "import_items": "匯入項目", + "import_items_desc": "從瀏覽器或檔案匯入密碼與其他項目。", + "select_file": "1. 選擇匯入檔案格式", + "select_format": "2. 選擇匯入檔案", + "or_copy": "或複製/貼上匯入檔案內容", + "instructions": "{name} 匯入說明", + "upgrade_dialog_title": "您的免費方案空間有限", + "upgrade_dialog_message": "已匯入 {importedCount}/{total} 個項目。升級至 Premium 新使增項目不受數量限制" + }, + "plans": { + "price": { + "price": "月費方案", + "half_yearly_price": "半年方案", + "yearly_price": "年度方案" + }, + "descriptions": { + "pm_free": "保護密碼安全並享用 Locker 基本功能。", + "pm_premium": "額外實用功能,讓使用體驗加分。", + "pm_family": "無限儲存空間,讓您體驗 Locker 最完整的功能。" + }, + "members": "{count} 位 | {count} 位", + "features": { + "unlimited_storage": "無儲存空間上限", + "sync_devices": "跨裝置資料同步(最高 3 台裝置)", + "sync_devices_unlimited": "跨裝置資料同步(無裝置數量限制)", + "auto_fill": "隨時隨地自動填入資料", + "authenticator": "雙因素認證", + "password_generator": "安全強力密碼產生器", + "password_health": "密碼健康檢測", + "data_breach": "資料洩漏掃描", + "emergency_access": "緊急存取功能", + "share_passwords": "安全分享項目", + "private_email": "私人電子郵件(最多 5 個別名)", + "private_email_unlimited": "私人電子郵件(無別名數量限制及 1 個子網域)", + "family_members": "家庭成員(最多 6 位成員)" + }, + "payment_step": { + "step_1": "步驟 1:確認選擇的方案", + "step_2": "步驟 2:輸入付款資料", + "step_3": "步驟 3:付款與升級", + "family": { + "invite_member": "開始邀請成員", + "invite_member_desc": "輸入他們的電子信箱。你也可以之後在設定 > 管理成員中邀請。", + "invite": "邀請", + "invite_member_desc_2": "已加入此方案的成員會顯示在下方的列表中。", + "list_member": "已加入成員列表" + }, + "enter_code": "輸入優惠代碼" + }, + "choose_plan": "選擇方案", + "choose_plan_desc": "選擇符合您需求的方案。", + "current_plan": "您目前的方案", + "choose_this_plan": "選擇此方案", + "bill_monthly": "按月計費", + "bill_annually": "按年計費", + "bill_annually_desc": "(最高省下 75%)", + "payment": "付款資訊", + "choose_payment_method": "選擇付款方式", + "order_summary": "訂單摘要", + "invite_people": "邀請成員加入此方案", + "type_email": "在下方輸入他們的電子信箱", + "list_member": "已加入成員列表", + "price_12months": "12 個月優惠價", + "save": "優惠", + "trial_included": "包含 14 天免費試用", + "start_trial": "開始 14 天免費試用", + "purchase_now": "立即購買", + "most_popular": "最受歡迎", + "next_billing_on": "下個結算日" + }, + "billing": { + "card_number": "卡號", + "expiration": "有效期限", + "cvc": "CVV 安全碼", + "payment_method": "付款方式", + "billing_contact": "帳單聯絡人", + "billing_address": "帳單地址", + "card_title": "輸入付款資訊", + "edit_card_title": "修改付款資訊", + "email_hint": "我們會寄送帳單至這個電子信箱", + "card_decline": { + "generic_decline": "您的信用卡遭到拒絕。請聯絡發卡機構或嘗試其他卡片。", + "validation_error": "您的卡片資訊有誤。" + }, + "add_card_success": "付款資訊已新增!", + "add_card_failed": "新增付款資訊失敗!", + "edit_card_success": "付款資訊已更新!", + "edit_card_failed": "更新付款資訊失敗!", + "delete_card_success": "付款資訊已移除!", + "delete_card_failed": "移除付款資訊失敗!", + "remove_btn": "移除信用卡", + "change_btn": "更換信用卡", + "add_btn": "新增信用卡", + "not_have": "此帳戶尚無信用卡資料。", + "billed_to": "此帳戶的帳單寄至:", + "card_ending": "以 {name} 名義結尾的信用卡,末四碼為", + "billing_information": "帳單資訊", + "confirm_delete_card": "移除付款資訊", + "confirm_delete_card_all": "若您移除此信用卡,您的所有訂閱都會被取消。確定要移除嗎?", + "next_billing": "下個結算日", + "total_after_trial": "試用期後,每月自動續訂費用總額", + "charged_today": "今日已請款金額", + "upgrade_summary": "方案升級摘要", + "checkout": "前往結帳", + "checkout_hint": "試用期結束後,Locker 會自動繼續您的訂閱。您依然可以在任何時間取消。", + "required_ownership": "需要通過所有權驗證", + "total_monthly": "每月總額", + "total_yearly": "每年總額", + "additions_members": "額外成員費用", + "past_due": "逾期未付", + "paid": "已付款", + "failed": "付款失敗", + "pending": "處理中", + "processing": "處理中", + "invoice_id": "帳單編號", + "pay_success": "付款成功!", + "pay_failed": "付款失敗!", + "view_details": "查看詳情", + "promo": "優惠代碼", + "promotion_code": "有優惠代碼嗎?", + "promotion_placeholder": "請在此輸入優惠代碼", + "apply": "套用", + "plan_item": "{duration} {name} 方案訂閱", + "unsubscribe_success": "您的訂閱已取消!試用期後,您的方案會在 {date} 降級至免費版", + "unsubscribe_failed": "未能取消您的訂閱!", + "subscribe_success": "您的訂閱資訊已更新!", + "subscribe_failed": "未能更新您的訂閱資訊!", + "restart_success": "您的訂閱已重新開始!", + "restart_failed": "未能重新開始您的訂閱!", + "confirm_unsubscribe": "您確定要取消訂閱嗎?訂閱結束後,您的方案會在 {date} 降級至免費版", + "confirm_restart": "確認要重新開始訂閱嗎?", + "restart": "重新開始", + "upgrading": "升級為", + "payment_due": "待結帳單", + "intro": "請輸入信用卡資訊(Visa、MasterCard、American Express、Discover……等)", + "stripe_desc": "我們使用全球頂尖的第三方支付平台之一 Stripe 來處理金流,您的信用卡資訊不會儲存在我們的伺服器中。", + "total": "總額", + "cancel_subscription": "取消訂閱", + "invoices": "收據", + "cancel_at_period_end": "您的方案會降級於", + "yearly_discount": "年度方案優惠({discount})", + "plan_details": [ + "您現在需支付 {total} {currency},這是目前結算週期的部分費用。", + "您的方案是 {duration} 計費,並會在 {next_bill}{price} {currency}(加上任何適用的稅費,並扣除優惠)的價格更新。", + "您可以在此日期前隨時取消。" + ], + "trial_summary": [ + "您的信用卡目前不會被扣款,您將於 {next_bill} 被收取 {price} {currency}(加上任何適用的稅費,並扣除優惠)。", + "您可以在此日期前隨時取消。" + ], + "payment_success": "付款成功", + "thankyou": "感謝您,您的帳戶已升級。
我們已將帳單寄送到您提供的帳單地址", + "back_to_home": "返回首頁", + "billing_documents": "帳單文件", + "buy_premium": "訂購 Premium", + "manage_payments": "管理付款", + "pay_and_upgrade": "付款與升級", + "card_info": "付款卡片資訊", + "name_on_card": "持卡人姓名", + "by_confirm_you_allow": "確認訂閱後,即代表您允許 CyStack, LLC 依照他們的條款,向您的信用卡收取款項以支付此次與未來相關費用。您可隨時取消訂閱。", + "update_payment_or_downgrade": "我們無法續訂您的 Locker 訂閱。請在 {time} 之前更新您的付款資訊,否則您的方案將會降為免費版。" + }, + "groups": { + "access_all": "此群組可存取所有項目。", + "access_selected": "此群組僅能存取選取的特定資料夾。", + "edit_group": "編輯群組", + "add_group": "新增群組", + "user_access": "使用者存取權", + "groups": "群組" + }, + "users": { + "edit_user": "編輯使用者", + "add_user": "新增使用者", + "add_family": "新增家庭成員", + "edit_family": "編輯家庭成員" + }, + "folders": { + "edit_folder": "編輯資料夾", + "add_folder": "新增資料夾", + "edit_team_folder": "編輯團隊資料夾", + "add_team_folder": "新增團隊資料夾", + "groups_access": "群組存取權限", + "user_access": "使用者存取權限", + "move_to": "移動至", + "move_to_desc": "為這 1 項選取的項目選取新的資料夾。", + "no_folder": "沒有資料夾", + "select_folder": "選取資料夾", + "share_folder": "分享資料夾", + "add_member": "新增成員" + }, + "ciphers": { + "add_cipher": "新增項目", + "password_strength": "密碼強度", + "website_address": "網址", + "password": "密碼", + "card_holder": "持卡人姓名", + "brand": "發卡機構", + "card_number": "卡號", + "expiration_month": "有效月", + "expiration_year": "有效年", + "cvv": "安全驗證碼(CVV)", + "notes": "備註", + "name": "名稱", + "folder": "資料夾", + "title": "標題", + "first_name": "名", + "last_name": "姓", + "company": "公司", + "ssn": "身分證字號/居留證號碼", + "passport": "護照號碼", + "license": "駕照號碼", + "phone": "電話", + "address": "地址", + "city_town": "城市", + "state_province": "州/省", + "zip": "郵遞區號", + "country": "國家", + "owned_by": "擁有者", + "personal": "個人資料", + "contact": "聯絡資訊", + "login": "登入資訊", + "others": "其他", + "choose_at_least_folder": "只有可以存取這些資料夾的團隊成員才能看到此項目。請至少選擇 1 個資料夾。", + "choose_a_team": "選擇您要共享此項目給的團隊。共享會將項目的擁有權轉移到這個團隊。一旦您共享後,將不再是此項目的直接擁有者。", + "folders_team": "團隊資料夾", + "sort_by": "排序依據", + "ascending": "遞增", + "descending": "遞減", + "time": "時間", + "created_time": "建立時間", + "updated_time": "更新時間", + "unassigned_folder": "未分類資料夾", + "all_items": "所有項目", + "add_item": "新增項目", + "selected_items": "已選取的項目", + "generate_random_password": "隨機產生密碼", + "show_password": "顯示密碼", + "choose_file_folder": "選擇項目:", + "choose_file_folder_desc": "您可以選擇任意數量的項目。", + "add_recipient_emails": "新增收件者電子郵件:", + "add_recipient_emails_desc": "您可以加入任意數量的電子郵件。", + "share_type": "分享型態:", + "share_type_desc": "選擇您要如何分享。可以在之後編輯此設定。", + "share_instruction": "發出分享請求後,被指派的使用者必須同意後,才能使用分享帳戶。\n若對方尚未有 Locker 帳戶,將會透過電子郵件邀請對方建立新帳戶。", + "stop_sharing": "停止分享", + "edit_share_type": "編輯權限", + "leave": "離開", + "recovery_email": "救援電子郵件", + "additional_info": "其他資料", + "seed": "助記詞", + "seed_phrase_desc": "注意:助記詞(或稱回復詞)通常是 12 至 24 個隨機英文字組成的片語。這是加密錢包中最敏感的資料。", + "card_details": "卡片資訊", + "contact_info": "聯絡資訊", + "only_use": "僅使用", + "viewable": "可檢視", + "editable": "可編輯", + "wallet_address": "錢包地址", + "private_key": "私鑰", + "password_pin": "密碼/PIN 碼", + "username": "使用者名稱", + "wallet_app": "錢包 App", + "networks": "可用網路", + "shared_with": "分享對象", + "custom_fields": "自訂欄位", + "new_custom_field": "新增自訂欄位", + "field_name": "欄位名稱", + "value": "欄位值", + "text": "文字", + "hidden": "隱藏欄位", + "date": "日期", + "monthYear": "月/年", + "most_relevant": "最相關", + "view_share": "查看分享", + "drive_license": { + "no": "編號", + "class": "駕照種類", + "valid_until": "有效期限", + "vehicle_class": "准駕車型", + "beginning_date": "起始日期", + "issued_by": "發行機關" + }, + "citizen_id": { + "id_no": "身分證字號", + "sex": "性別", + "place_of_origin": "籍貫", + "place_of_residence": "住址", + "expiry_date": "有效期限", + "personal_id": "個人身分資訊", + "date_of_issue": "發行日期", + "issued_by": "發行機關" + }, + "passport_type": { + "passport_id": "護照號碼", + "type": "類型", + "code": "國籍代碼", + "sex": "性別", + "id_number": "身分證字號", + "date_of_issue": "發照日期", + "date_of_expiry": "有效期限", + "place_of_issue": "核發地點" + }, + "router": { + "device_name": "裝置名稱", + "router_ip_address": "路由器 IP 位址", + "wifi_ssid": "WiFi 名稱(SSID)", + "wifi_pw": "WiFi 密碼", + "admin_username": "管理員帳號", + "admin_password": "管理員密碼" + }, + "server": { + "host": "主機位址(IP/網域)", + "public_key": "公鑰", + "private_key": "私鑰" + }, + "api": { + "url": "網址", + "method": "方法", + "header": "標頭(Header)", + "body_data": "請求內容(Body Data)", + "response": "回應內容" + }, + "database": { + "host": "主機位址(IP/網域)", + "port": "連接埠", + "default": "預設資料庫" + }, + "otp": { + "setup": "雙因素認證設定", + "no_otp": "暫不啟用雙因素認證", + "add_new": "新增雙因素認證設定", + "select": "套用現有雙因素認證設定", + "select_placeholder": "選擇雙因素認證設定", + "secret_key": "密鑰或路徑", + "otp_option": "選項" + } + }, + "settings": { + "account": "帳戶", + "plan": "方案", + "manage_plan": "管理方案", + "manage": "管理", + "fingerprint": "指紋辨識", + "options": "選項", + "timeout": "閒置多久後自動上鎖", + "timeout_desc": "指定一段裝置閒置時間後,自動為保險庫上鎖。", + "timeout_action": "上鎖後動作", + "timeout_action_1": "上鎖後需要重新輸入主密碼解鎖。", + "timeout_action_2": "上鎖後須重新登入。", + "security": "安全設定", + "change_master_password": "變更主密碼", + "emergency_access": "緊急存取權限", + "emergency_access_desc": "設定可信任聯絡人。在特定情況下,此聯絡人將能取得您的保險庫檢視權以及接管權限。", + "danger_zone": "危險區域", + "danger_zone_note": "注意,以下動作無法復原!", + "delete_all_items": "刪除所有保險庫資料", + "delete_all_items_desc": "刪除 Locker 帳戶中的所有資料。但您的 Locker 帳戶會保留。", + "delete_account": "刪除帳戶", + "delete_account_desc": "永久刪除您的 Locker 帳戶", + "language": "語言", + "vietnamese": "Tiếng Việt", + "english": "English", + "deauthorize_sessions": "解除所有裝置的登入授權", + "deauthorize_device": "登出此 {name}", + "deauthorize_device_desc": "這個動作會移除此裝置存取您的 Locker 帳戶之權限。請輸入主密碼確認。", + "deauthorize_sessions_title": "擔心帳戶在其他裝置上登入著嗎?執行以下動作將會解除您曾使用過的電腦或裝置的登入授權。若您曾使用公用電腦,或是曾不小心在非您所有的裝置上儲存密碼,建議進行此步驟。", + "deauthorize_sessions_desc": "這個動作也會登出目前正在使用的帳戶,您將需要重新登入。", + "deauthorize_sessions_success": "已解除所有裝置的登入授權", + "deauthorize_sessions_failed": "發生錯誤", + "learn_about_secure": "了解我們如何保護您的保險庫", + "learn_about_secure_desc": "不論是哪種方案,所有 Locker 帳戶皆受到 AES-256 加密及零知識(Zero Knowledge)技術保護,提供最完善的隱私保護。", + "master_password_health": "主密碼健康度", + "master_password_health_desc": "為您的主密碼做健檢。", + "master_password_hint": "主密碼提示", + "master_password_hint_desc": "設定主密碼的提示,以備您忘記主密碼時使用。", + "weak_passwords": "弱密碼偵測", + "weak_passwords_desc": "在您的保險庫中偵測強度不足的密碼。", + "data_breach": "資料洩漏掃描", + "data_breach_desc": "在您的保險庫中掃描是否有被外洩過的帳戶。", + "password_reusage": "重複使用密碼偵測", + "password_reusage_desc": "在您的保險庫中偵測是否有重複使用的密碼。", + "learn_about_emergency_access": "深入了解緊急存取", + "learn_about_emergency_access_desc": "此功能可授予另一個 Locker 帳戶的擁有者在特定緊急情況下,存取您的保險庫之能力。", + "plans_billing": "方案與付款", + "plans_billing_desc": "管理方案、訂閱、帳單以及付款方式。", + "security_desc": "管理您的安全和隱私設定。", + "account_desc": "管理個人資料與帳戶設定。", + "import_export_desc": "匯入或匯出 Locker 檔案。", + "delete_desc": "您可以刪除資料與帳戶。這些動作將無法復原,一旦執行,我們將無法為您恢復這些資料。", + "plan_storage": "方案儲存空間", + "plan_storage_desc": "查看保險庫容量上限。", + "extra_security": "加強安全", + "extra_security_desc": "包含資料洩漏掃描、弱密碼偵測、重複使用密碼偵測與緊急存取權。", + "utilities": "附加功能", + "utilities_desc": "包含密碼分享與登入裝置不限等便利功能。", + "your_profile": "您的個人資料", + "edit_profile": "編輯個人資料", + "change_password": "變更密碼", + "change_password_desc": "這是您登入 Locker 帳戶所用的密碼。", + "manage_sessions": "管理登入裝置", + "logout_all": "從所有裝置登出", + "setup_vault_options": "設定保險庫選項", + "your_inventory": "您的庫存", + "security_control": "安全設定", + "referral": "推薦好友", + "referral_link": "推薦連結", + "referral_desc": "邀請好友免費獲得 Premium", + "referral_details": "好友成功建立主密碼後,您和您的好友就能各自獲得 1 個月免費 Locker Premium", + "notifications": "通知", + "email_notifications": "電子郵件通知", + "system_email": "系統通知", + "master_password_change": "已更換主密碼", + "login_with_new_device": "已從新裝置登入", + "data_breach_scanning": "資料洩漏掃描", + "tips_and_tricks": "密碼管理建議與技巧", + "marketing_and_promotion": "行銷與促銷郵件", + "other": "其他", + "preferences": "偏好設定", + "import_export": "匯入/匯出", + "account_password": "帳戶密碼", + "master_password": "主密碼", + "two_factor_authentication": "雙因素認證(2FA)", + "two_step_verification": "開啟雙因素認證", + "two_factor_authentication_des": "為您的 Locker 帳戶設雙因素認證,打造更安全的防護。", + "learn_two_factor_authentication": "了解如何為 Locker 帳戶開啟雙因素認證", + "lock_desc": "立即鎖定保險庫", + "current_device": "目前使用的裝置", + "dont_find_lang": "找不到您的語言嗎?", + "extra_features": { + "feat1": { + "title": "密碼儲存空間不夠用?", + "desc": "僅需每月 $1.29 升級至 Premium,即可享有無限儲存空間與更多功能!", + "learn_more": { + "text": "進一步了解 Premium 方案", + "url": "https://support.locker.io/en/locker-password-manager/general-features/plans-and-pricing/upgrading-to-premium-plan" + }, + "btn_text": "升級 Premium" + }, + "feat2": { + "title": "安全的項目分享", + "desc": "透過 Locker Premium,項目分享變得更簡易安全。不論是 Locker 內或外分享,都能自訂分享方式!", + "learn_more": { + "text": "了解如何分享項目", + "url": "https://support.locker.io/en/locker-password-manager/vault-management/item-management/share-items" + }, + "btn_text": "立即分享項目" + }, + "feat3": { + "title": "緊急存取權限", + "desc": "新增可信任的聯絡人,讓他們能在緊急時刻存取你的項目!", + "learn_more": { + "text": "進一步了解緊急存取", + "url": "https://support.locker.io/en/locker-general/security-for-locker-account/set-up-emergency-access" + }, + "btn_text": "新增可信任聯絡人" + }, + "feat4": { + "title": "資料洩漏掃描", + "desc": "檢測並即時獲知你的資料是否曾在洩漏事件中外洩!", + "learn_more": { + "text": "立即掃描你的電子郵件地址", + "url": "https://support.locker.io/en/locker-password-manager/general-features/built-in-add-on-features/data-breach-scanner" + }, + "btn_text": "檢查洩漏資料" + }, + "feat5": { + "title": "密碼健康檢測", + "desc": "辨識強度不足、重複使用、或已外洩的密碼,更好地保護你的線上帳戶。", + "learn_more": { + "text": "進一步了解密碼健康檢測", + "url": "https://support.locker.io/en/locker-password-manager/general-features/built-in-add-on-features/password-health-checker" + }, + "btn_text": "檢測弱密碼" + }, + "feat6": { + "title": "私人電子信箱", + "desc": "產生無限數量的別名,保護真實的電子郵件地址。更配備額外的安全功能!", + "learn_more": { + "text": "進一步了解私人電子信箱", + "url": "https://support.locker.io/en/locker-maily/private-email-for-premium" + }, + "btn_text": "取得無限別名" + }, + "feat7": { + "title": "裝置登入管理", + "desc": "升級 Premium 以解除登入裝置數量的限制!", + "learn_more": { + "text": "進一步了解支援的裝置", + "url": "" + }, + "btn_text": "升級 Premium" + }, + "feat8": { + "title": "6 個家庭成員", + "desc": "使用 Locker Family 方案,守護您與親友的線上安全,享更優惠的價格,使用上更便利!", + "learn_more": { + "text": "進一步了解 Family 方案", + "url": "https://support.locker.io/en/locker-password-manager/general-features/plans-and-pricing/upgrading-to-family-plan" + }, + "btn_text": "瞭解詳情" + } + }, + "factor2": { + "title": "雙因素認證", + "is_on": "雙因素認證已啟用", + "is_off": "雙因素認證未啟用", + "send_code_via_email": "透過電子郵件發送代碼", + "email_sent": "電子郵件已發送至", + "enter_code": "請輸入驗證碼", + "resend_email": "重新發送電子郵件", + "factor2_app_des": { + "title": "透過第二道登入步驟,為您的帳戶增添額外的安全防護。", + "step1": "下載並安裝 Locker Password Manager 到您的手機或電腦。", + "step2": "將此組金鑰 {key} 手寫到紙上並保管好。若您遺失或換新了裝置,將會需要這組金鑰。", + "step3": "在手機或電腦上開啟 Locker Password Manager 應用程式,前往「一次性密碼」(OTP)頁面,並使用手機掃描下方的 QRCode。", + "step4": "在下方輸入應用程式產生的一次性驗證碼。" + }, + "factor2_email_des": { + "title": "當我們偵測到從異常裝置的登入嘗試時,將要求您輸入安全代碼。" + } + } + }, + "tools": { + "password_generator": "密碼產生器", + "password_generator_desc": "為您的帳戶建立安全密碼", + "password_health": "密碼健康檢測", + "password_health_desc": "辨識會使您遭受風險的密碼", + "relay": "Locker 私人電子信箱", + "relay_desc": "對線上服務供應商隱藏您的電子郵件", + "data_breach": "資料洩漏掃描", + "data_breach_desc": "檢查您的機敏資料是否曾外洩於線上", + "copy_password": "複製密碼", + "fill_password": "自動填入密碼", + "show_options": "顯示選項", + "uppercase": "包含大寫(A-Z)", + "lowercase": "包含小寫(a-z)", + "digits": "包含數字(0-9)", + "symbols": "包含特殊符號(@!$%*)", + "ambiguous": "避免容易混淆的字元", + "reused_passwords": "重複使用的密碼", + "exposed_passwords": "遭外洩的密碼", + "weak_passwords": "強度不足的密碼", + "weak_passwords_desc": "容易被猜測", + "reused_passwords_desc": "使用於多個帳戶", + "exposed_passwords_desc": "遭外洩的密碼是指駭客透過已知的資料洩漏事件揭露,並在網路上公開或於暗網上販售的密碼。", + "good_news": "好消息", + "weak_passwords_found": "發現了強度不足的密碼", + "good_news_details": "您保險庫中所有项目的密碼強度都足夠。", + "weak_passwords_found_details": "我們在您的保險庫中發現有 {data} 個項目密碼強度不足。您應該將它們修改成更強的密碼。", + "reused_passwords_found": "發現了重複使用的密碼", + "reused_passwords_found_details": "我們發現保險庫中有 {data} 組密碼被重複使用。您應該將它們都修改成獨特的密碼。", + "good_news_reused_details": "您的保險庫中沒有重複使用的密碼。", + "exposed_passwords_found": "發現了遭外洩的密碼", + "exposed_passwords_found_details": "我們發現在您的保險庫中有 {data} 個項目的密碼曾在已知的資料洩漏事件中被揭露。您應該將這些密碼修改成新的。", + "good_news_exposed_details": "您的保險庫中沒有密碼曾在已知的資料洩漏事件中被揭露。", + "times": "次", + "used": "使用於", + "exposed": "曾外洩", + "breach_scanner_desc": "所謂的「被駭」(breached)指的是網站資料遭駭客非法存取並隨後公諸於世的事件。請檢閱被駭時遭外洩的資料類別(如電子郵件地址、密碼、信用卡號等),並採取適當的行動,例如修改密碼。", + "check_breach_title": "檢查您使用的任一使用者名稱或子郵件地址", + "check_breach_button": "檢查外洩情況", + "breach_found": "已發現外洩的帳戶", + "breach_not_found_details": "沒有在任何已知資料洩漏事件中找到 {email}。", + "breach_found_details": "在網路上有 {count} 筆不同的資料洩漏事件中發現 {email}。", + "breach_compromised_data": "遭外洩的資料", + "breach_affected_users": "波及的使用者數", + "breach_occurred": "洩漏事件日期", + "breach_reported": "洩漏事件通報日期", + "relay_your_root_email": "您的原始電子信箱:", + "relay_desc_1": "所有寄到別名的信件都會轉寄至您的原始電子信箱。", + "relay_desc_2": "您可以透過別名回信給寄件人。", + "relay_desc_3": "最多可同時產生及使用 5 個別名。", + "relay_desc_4": "您有一個可編輯的別名。", + "relay_desc_1_premium": "所有寄到別名的信件都會轉寄至您的原始電子信箱。", + "relay_desc_2_premium": "您可以透過別名回信給寄件人。", + "relay_desc_3_premium": "可以產生及使用無上限數量的別名。", + "relay_desc_4_premium": "您有一個可自訂的別名及一個子網域。", + "relay_your_alias_addresses": "您的別名", + "relay_new_alias": "新別名", + "relay_manage_subdomain": "管理子網域", + "relay_use_subdomain": "使用子網域", + "relay_alias_added": "已新增別名", + "relay_alias_edited": "已更新別名", + "relay_alias_deleted": "已刪除別名", + "learn_more_private_email": "瞭解更多 Locker 私人電子信箱", + "edit_relay_alias": { + "title": "編輯別名", + "desc": "Locker 將不再轉發寄到 {email} 的信件,包含能讓您重置丟失的密碼的信件。", + "warning": "如果您使用這個別名登入網站,您應該在更新這個別名前,先將登入信息更新為其他電子信箱。", + "confirm": "是,更新它" + }, + "delete_relay_alias": { + "title": "確定要永久刪除此別名嗎?", + "desc": "一旦您刪除此別名,將無法復原。Locker 將不再轉發寄到 {email} 的信件,包含能讓您重置丟失的密碼的信件。", + "warning": "如果您使用這個別名登入網站,您應該在刪除這個別名前,先將登入信息更新為其他電子信箱。", + "confirm": "是,刪除它" + }, + "relay_address": { + "edit_title": "編輯私人電子信箱", + "forwarded": "已轉寄", + "blocked": "遭封鎖", + "block_all": "封鎖所有信件", + "block_all_desc": "封鎖所有信件,包含廣告信或是垃圾郵件。", + "block_spam": "封鎖垃圾郵件", + "block_spam_desc": "封鎖廣告信與垃圾郵件。只轉發重要信件。", + "forward": "轉寄", + "forward_desc": "轉寄所有信件至原始電子信箱。" + }, + "relay_subdomain": { + "manage_subdomain": "管理子網域", + "create_subdomain": "建立新子網域", + "your_subdomain": "您的子網域", + "new_subdomain": "新子網域", + "change_subdomain": "更換子網域", + "edit_desc": "當您更換新子網域,目前的子網域將會被永久刪除。從您目前子網域下建立的所有別名,也會一併被刪除。", + "create_desc": "子網域能讓您建立自訂信箱網域。
範例: viktor@viktor-agency.maily.org" + } + }, + "welcome": { + "title": "歡迎使用 Locker", + "text1": "您可以安全地儲存各種密碼、記事、線上購物的記錄,甚至是重要文件。", + "text2": "不論您在哪裡工作,您的保險庫都能和所有裝置同步,讓您保持資料整齊又節省時間。", + "text3": "為了更方便使用,您可以前往 這裡 下載 Locker 擴充套件。" + }, + "password_policies": { + "password_violated": "密碼不合規定", + "password_violated_desc": "您的密碼違反以下 {team} 的規定", + "confirm_violation": "仍然使用此密碼", + "min_password_length": "最短密碼長度為 {length}", + "min_password_length_desc": "啟用後,您將可以為這個團隊的所有成員設定密碼所需的最短長度。", + "max_password_length": "最大密碼長度", + "max_password_length_desc": "啟用後,您將可以為這個團隊的所有成員設定密碼最長可以多長。", + "password_complexity": "密碼複雜度", + "password_complexity_desc": "啟用後,您將可以為這個團隊的所有成員設定密碼組成的相關規定。", + "failed_login_attempts": "封鎖多次登入失敗", + "failed_login_attempts_desc": "啟用後,您將控制用戶失敗的登入嘗試次數。", + "min_password_length_rcm": "CIS規範建議密碼安全性的最低長度為 8 個字元。", + "max_password_length_rcm": "最長密碼長度不能小於最短密碼長度。", + "requires_lowercase": "須包含小寫字母(abc)", + "requires_uppercase": "須包含大寫字母(ABC)", + "requires_special": "須包含特殊符號(@#!$%)", + "requires_number": "須包含數字(0 1 2 3)", + "avoid_ambiguous": "避免相似的字符(像是 O 和 0,l 和 I……等等)", + "notice": "提示:這些設定只會套用於未來團隊共享的密碼,先前建立的密碼不受影響。", + "failed_login_how_many": "允許多次登入失敗?", + "failed_login_how_long": "在多久時間內,連續 {failed_login_attempts} 次登入失敗後封鎖使用者?", + "failed_login_how_much_time": "需隔多久後使用者方可再次登入?", + "failed_login_owner_email": "當有成員因為連續登入失敗遭到封鎖,發送信件給團隊所有者", + "failed_login_times": { + "oneLogin": "1 次登入失敗", + "twoLogins": "2 次登入失敗", + "threeLogins": "3 次登入失敗", + "fourLogins": "4 次登入失敗", + "fiveLogins": "5 次登入失敗", + "tenLogins": "10 次登入失敗", + "fifteenLogins": "15 次登入失敗" + }, + "block_mobile": "封鎖手機存取權", + "block_mobile_desc": "", + "ip_filtering": "IP 位置限制", + "ip_filtering_desc": "", + "ip_allow": "允許的 IP 位址", + "ip_block": "遭封鎖的 IP 位址", + "failed_login_owner_email_desc": "" + }, + "emergency_access": { + "emergency_access": "緊急存取權限", + "emergency_access_desc": "授予可信任聯絡人緊急時存取您帳戶的權限。在緊急情況下,可信任聯絡人將能申請檢視或接管您的帳戶。若想知道運作方式或是零知識分享如何保障資料安全的細節,請參考說明文件。", + "learn_more": "瞭解更多關於緊急存取權限", + "emergency_access_owner_warning": "您是 1 或多個團隊的擁有者。若您授予緊急聯絡人接管帳戶的權限,對方在接管後將能使用您所有的擁有者權限。", + "trusted_emergency_contacts": "您的可信任聯絡人", + "no_trusted_contacts": "您尚未添加任何聯絡人。請邀請可信任聯絡人。", + "add_emergency_contact": "新增可信任聯絡人", + "designated_emergency_contacts": "委託您為緊急聯絡人", + "no_granted_access": "尚未被任何人指定為緊急聯絡人", + "invite_emergency_contact": "邀請可信任聯絡人", + "edit_emergency_contact": "編輯聯絡人", + "invite_emergency_contact_desc": "請在下方填寫對方的 Locker 電子信箱,邀請成為緊急聯絡人。若對方尚未有 Locker 帳戶,將會被引導至建立新帳戶頁面。", + "emergency_access_recovery_initiated": "已提交緊急使用權限申請", + "emergency_access_recovery_approved": "核准緊急使用權限申請", + "view": "檢視", + "view_desc": "對方將能檢視您所有保險庫項目。", + "takeover": "接管", + "takeover_desc": "對方將能重設您的主密碼。", + "reset_master_pw": "重設對方 Locker 主密碼", + "reset_pw": "重設對方 Locker 密碼", + "wait_time": "等待時間", + "wait_time_desc": "自動授予權限前須等待的時間", + "one_day": "1 天", + "invited_user": "已邀請使用者", + "accept_emergency_access": "您獲邀為上述使用者的緊急聯絡人。要接受邀請,需要登入 Locker,若尚無帳戶請先建立一個。", + "emergency_invite_accept_failed": "無法接受邀請。請要求使用者再次發送邀請。", + "emergency_invite_accepted_desc": "完成身份驗證後,您將可以存取此使用者的緊急取用管理選項,驗證後您會收到電子郵件通知。", + "request_access": "請求存取權限", + "user_access": "使用者存取權限", + "grantee_recovery_initiated_info": "{day} 天後,或是對方手動核准後,將授予您存取權限。", + "grantor_recovery_initiated_info": "{day} 天後,或是您手動核准申請後,對方將能存取您的帳戶。", + "invitation": "成為緊急聯絡人邀請", + "invitation_details": "您受邀成為以下聯絡人的緊急聯絡人:", + "access_type": "存取權限類型", + "status": { + "invited": "已邀請", + "accepted": "已接受", + "confirmed": "已確認", + "expired": "已過期", + "recovery_initiated": "已提交申請", + "recovery_approved": "已核准申請" + }, + "pending_request": "待回覆的申請 | 待回覆的申請" + }, + "wait_time_days": { + "oneDay": "1 天", + "twoDays": "2 天", + "sevenDays": "7 天", + "fourteenDays": "14 天", + "thirtyDays": "30 天", + "ninetyDays": "90 天" + }, + "instructions": { + "see_details": "請至我們的說明網頁查看詳細操作說明:", + "bitwarden_link": "https://support.locker.io/en/locker-password-manager/get-started/import-and-export/import-data-from-bitwarden-to-locker", + "lastpasscsv_link": "https://support.locker.io/en/locker-password-manager/get-started/import-and-export/import-data-from-lastpass-to-locker", + "chromecsv_link": "https://support.locker.io/en/locker-password-manager/get-started/import-and-export/import-data-from-google-chrome-to-locker", + "firefoxcsv_link": "https://support.locker.io/en/locker-password-manager/get-started/import-and-export/import-data-from-mozilla-firefox-to-locker", + "1password_link": "https://support.locker.io/en/locker-password-manager/get-started/import-and-export/import-data-from-1password-to-locker", + "keepassxcsv_link": "https://support.locker.io/en/locker-password-manager/get-started/import-and-export/import-data-from-keepassx-to-locker", + "aviracsv": "在 Avira 網頁版保險庫中,點選「Settings」→「My Data」→「Export data」並儲存成 CSV 檔。", + "blurcsv": "在 Blur 網頁版保險庫中,於右上角點選您的使用者名稱,前往「Settings」→「Export Data」,接著在「Accounts」欄位點選「Export CSV」。", + "safeincloudxml": "開啟 SaveInCloud 桌面應用程式,點選「File」→「Export」→「As XML」,然後儲存 XML 檔案。", + "padlockcsv": "開啟 Padlock 桌面應用程式,點選左上角的漢堡圖示,接著前往「Settings」→「Export」按鈕,並選擇「As CSV」儲存檔案。", + "keepass2xml_link": "https://support.locker.io/en/locker-password-manager/get-started/import-and-export/import-data-from-keepass-to-locker", + "upmcsv": "開啟 Universal Password Manager 桌面應用程式,點選「Database」→「Export」,然後儲存 CSV 檔案。", + "saferpasscsv": "開啟 SaferPass 瀏覽器擴充套件,點選左上角的漢堡圖示,前往「Settings」。點選「Export accounts」按鈕來儲存 CSV 檔案。", + "meldiumcsv": "開啟 Meldium 網頁版保險庫,前往「Settings」,尋找「Export data」功能,點選「Show me my data」來儲存 CSV 檔案。", + "keepercsv_link": "https://support.locker.io/en/locker-password-manager/get-started/import-and-export/import-data-from-keeper-to-locker", + "passworddragonxml": "開啟 Password Dragon 桌面應用程式,點選「File」→「Export」→「To XML」。接著在跳出的視窗中,選擇「All Rows」勾選所有欄位,並且點選「Export」按鈕儲存 XML 檔案。", + "enpass_link": "https://support.locker.io/en/locker-password-manager/get-started/import-and-export/import-data-from-enpass-to-locker", + "pwsafexml": "開啟 Password Safe 桌面應用程式,點選「File」→「Export To」→「XML format...」,然後儲存 XML 檔案。", + "dashlanejson": "開啟 Dashlane 桌面應用程式,點選「File」→「Export」→「Unsecured archive (readable) in JSON format」,然後儲存 JSON 檔案。", + "msecurecsv": "開啟 mSecure 桌面應用程式,點選「File」→「Export」→「CSV File...」,然後儲存 CSV 檔案。", + "stickypasswordxml": "開啟 Sticky Password 桌面應用程式,於右上角點選「Menu」→「Export」→「Export all」。選擇非加密的 XML 格式,並儲存 XML 檔案。", + "truekeycsv": "開啟 True Key 桌面應用程式,點選右上角的齒輪圖示,並前往「App Settings」。點選「Export」按鈕,輸入您的密碼,然後儲存 CSV 檔案。", + "clipperzhtml": "登入 Clipperz 網頁應用程式(clipperz.is/app)。點選右上角的漢堡圖示展開導覽選單。前往「Data」→「Export」。點選「download HTML+JSON」按鈕來儲存 HTML 檔案。", + "roboformcsv": "開啟 RoboForm Editor 桌面應用程式,點選左上角的「RoboForm」→「Options」→「Account & Data」,然後點選「Export」按鈕。選擇所有項目,將「Format」改為「CSV file」後,再點選「Export」按鈕來儲存 CSV 檔案。注意:RoboForm 只能匯出登入資料,不能匯出其他項目。", + "passboltcsv": "登入 Passbolt 網頁版保險庫,前往「Passwords」列表。選擇您想匯出的資料並點選列表上方的「Export」按鈕。選擇「csv (lastpass)」格式,再點選「Export」按鈕。", + "ascendocsv": "開啟 Ascendo DataVault 桌面應用程式,點選「Tools」→「Export」。接著在跳出的視窗裡選擇「All Items (DVX, CSV)」選項,然後點選「OK」按鈕來儲存 CSV 檔案。", + "passwordbossjson": "開啟 Password Boss 桌面應用程式,點選「File」→「Export data」→「Password Boss JSON - not encrypted」,然後儲存 JSON 檔案。", + "zohovaultcsv": "登入 Zoho 網頁版保險庫(vault.zoho.com)。前往「Tools」→「Export Secrets」。選擇「All Secrets」並點選「Zoho Vault Format CSV」按鈕。反白選取文字方塊中的數據,並開啟記事本等文字編輯器貼上。最後,把檔案儲存成 zoho_export.csv。", + "splashidcsv": "開啟 SplashID Safe 桌面應用程式,在右上角點選 SplashID 的藍色鎖頭圖示。前往「Export」→「Export as CSV」,然後儲存 CSV 檔案。", + "passkeepcsv": "開啟 PassKeep 行動App,前往「Backup/Restore」區塊,點選「CSV Backup/Restore」,並選擇「Backup to CSV」來儲存 CSV 檔案。", + "gnomejson": "請確認您有安裝 python-keyring 和 python-gnomekeyring。請將 GNOME Keyring Import/ Export 的 python script 儲存到桌面,命名為 pw_helper.py。 開啟終端機執行 `chmod +rx Desktop/pw_helper.py` 以及 `python Desktop/pw_helper.py export Desktop/my_passwords.json`。最後,將 my_passwords.json 檔案上傳到 Locker。", + "passwordagentcsv": "開啟 Password Agent 桌面應用程式,點選「File」→「Export」。點選「Fields to export 」按鈕,並勾選所有欄位,接著把「Output format」改為「CSV」,然後點選「Start」按鈕儲存 CSV 檔案。", + "passpackcsv": "登入 Passpack 網頁版保險庫,前往「Settings」→「Export」,然後點選「Download」按鈕儲存 CSV 檔案。", + "passmanjson": "開啟您的 Passman 保險庫,點選左下角的「Settings」。在「Settings」視窗內切換到「Export credentials」分頁,選擇「JSON」作為匯出類型。輸入您的保險庫密碼,然後點選「Export」按鈕來儲存 JSON 檔案。", + "avastcsv": "開啟 Avast Passwords 桌面應用程式,前往「Settings」→「Import/export data」,在「Export to CSV file」選項中點選「Export」按鈕儲存 CSV 檔案。", + "avastjson": "開啟 Avast Passwords 桌面應用程式,前往「Settings」→「Import/export data」,在「Export to JSON file」選項中點選「Export」按鈕儲存 JSON 檔案。", + "fsecurefsk": "開啟 F-Secure KEY 桌面程式,前往「設定」→「Export Passwords」。選擇「匯出」按鈕,輸入您的主密碼,並儲存 FSK 檔案。", + "kasperskytxt": "開啟 Kaspersky Password Manager 桌面程式,前往「設定」→「Import/Export」。找到「匯出為文字檔」區塊,並點選「匯出」按鈕儲存 TXT 檔案。", + "remembearcsv": "開啟 RememBear 桌面程式,前往「設定」→「帳戶」→「匯出」。輸入您的主密碼,然後點選「無論如何都要匯出」按鈕儲存 CSV 檔案。", + "passwordwallettxt": "開啟 PasswordWallet 桌面程式,前往「檔案」→「匯出」→「Visible entries to text file」。輸入您的密碼,然後點選「OK」按鈕儲存 TXT 檔案。", + "mykicsv": "開啟 Myki 桌面瀏覽器擴充套件,前往「進階」→「匯出帳戶」,接著用行動裝置掃描 QR Code。將會有多個 CSV 檔案儲存到電腦的下載資料夾。", + "securesafecsv": "將 SecureSafe 密碼管理器儲存檔匯出為以逗號分隔的 CSV 檔案。", + "logmeoncecsv": "開啟 LogMeOnce 瀏覽器擴充套件,前往「Open Menu」→「匯出至」,並選擇「CSV File」儲存 CSV 檔案。", + "blackberrycsv": "開啟 BlackBerry Password Keeper 應用程式,前往「設定」→「Import/Export」,選擇「Export Passwords」,並依照螢幕上指示儲存 CSV 檔案。", + "buttercupcsv": "開啟 Buttercup 桌面程式,並解鎖您的保險庫。右鍵點選保險庫圖示,並選擇「匯出」來儲存 CSV 檔案。", + "codebookcsv": "開啟 Codebook 桌面程式並登入,前往「檔案」→「匯出所有」,接著點選對話框上的「是」儲存 CSV 檔案。", + "encryptrcsv": "開啟 Encryptr 桌面程式最新版,並等待所有資料同步完成。當同步完成後,右上角的下載圖示會轉為粉紅色。點選下載圖示並儲存 CSV 檔案。", + "yoticsv": "在 Yoti 瀏覽器擴充套件內,點選「設定」→「Export Saved Logins」儲存 CSV 檔案。", + "safaricsv_link": "https://support.locker.io/en/locker-password-manager/get-started/import-and-export/import-data-from-safari-to-locker", + "dashlane_link": "https://support.locker.io/en/locker-password-manager/get-started/import-and-export/import-data-from-dashlane-to-locker", + "nordpasscsv_link": "https://support.locker.io/en/locker-password-manager/get-started/import-and-export/import-data-from-nordpass-to-locker", + "roboformcsv_link": "https://support.locker.io/en/locker-password-manager/get-started/import-and-export/import-data-from-roboform-to-locker" + }, + "sharing": { + "member": "成員", + "invited": "已邀請", + "accepted": "待對方確認", + "confirmed": "已共享", + "shared": "已共享", + "pending": "待處理", + "waiting": "待對方確認", + "new_share": "新共享", + "encrypted_content": "加密內容", + "tips": "小提示", + "tips_title": "請接受邀請來檢視這項目", + "enter_email_or_group": "個人電子信箱或團隊名稱", + "shared_to_new_member": "已成功將項目共享給新成員", + "item_no_longer_shared": "此項目已停止共享", + "search_inventory": "搜尋清單", + "choose_sharing_option": "選擇您的共享設定", + "share_desc": "與 Locker 使用者或使用者群組共享(僅 Locker 企業版支援)。對方將能查看或編輯您的項目內容。", + "quick_share_desc": "傳送一個項目連結給任何人,對方不需要 Locker 帳戶即可檢視內容。", + "quick_share": { + "empty_desc": "傳送這個項目的連結給任何人,對方不需要 Locker 帳戶即可檢視內容。", + "choose_item": "選擇一個項目", + "emails_label": "請輸入共享名單的電子信箱", + "emails_desc": "對方需要驗證電子郵件地址才能存取項目", + "expire_after": "連結有效期限", + "expire_on": "此共享項目連結有效期限", + "get_link": "取得共享連結", + "no_expires": "不會過期", + "anyone_with_link": "任何擁有連結的人", + "anyone": "任何人", + "nobody": "無人", + "only_some": "僅限受邀的對象", + "unlimited": "不限次數", + "times_access": "允許存取次數", + "receiver": "收件人", + "copy_link": "複製連結", + "sharing_time": "共享時間", + "view": "檢視 | 檢視次數", + "expiration": "到期日", + "hide_info": "隱藏內容", + "show_info": "顯示內容", + "view_item": { + "intro": { + "title": "快速又簡單", + "desc": "使用 Locker 快速共享能讓您以加密方式共享敏感資訊(如密碼、加密資產等)。分享的連結也會自動過期,讓您可以保有隱私,也能確保資料不會永遠留在網路上。", + "btn": "立刻試用 Locker!" + }, + "messages": { + "check_email": "請檢查您的信箱", + "no_access": "您沒有權限檢視這個項目。請改用其他信箱試試。", + "wrong_otp": "一次性密碼不正確。請輸入正確的一次性密碼。" + }, + "no_item": { + "title": "抱歉,沒有可檢視的項目", + "desc": "可能是以下其中一個狀況:", + "reasons": [ + "檢視項目的連結已過期或使用次數已達上限。", + "擁有者已停止共享此項目。", + "您輸入的連結不正確。" + ] + }, + "require_email": { + "title": "您已收到機敏資料", + "desc_email": "檢視內容前,您需要先驗證信箱。請輸入您的信箱以接收一次性密碼", + "send_code": "發送驗證碼", + "desc_otp": "請輸入一次性密碼", + "resend_code": "重新發送驗證碼" + } + } + } + }, + "family_member": { + "header": "管理成員", + "info_upgrade": "升級到 Family 方案並邀請您的好友加入 Locker!", + "add_noti": "已成功加入成員 ", + "delete_noti": "已成功刪除成員", + "confirm": "您確定要把這位使用者從 Family 方案中移除嗎?", + "action": "邀請", + "title": "新增成員到您的 Family 方案", + "placeholder": "邀請成員加入您的方案", + "list_member_title": "您新增到方案的成員將顯示在下方清單中", + "select_person": "選擇成員", + "number_member": "您方案內的成員", + "remove": "移除家庭成員", + "confirm_delete_member_all": "您確定要把 {email} 從您的 Family 方案移除嗎?", + "confirm_delete_member": "移除成員", + "unknown": "不確定", + "unknown_tooltip": "這個人還沒有 Locker 帳戶,但只要用這個電子郵件建立帳戶就能立即有 Premium 資格。", + "learn_more": "了解更多", + "number_member_detail": "{currentNumber}/{planMember} 位使用者", + "bill_annually_desc": "*註:僅限年繳。月繳價格為 {monthlyPrice} / 月 / 6 位使用者。", + "mo_per_6_users": "/ 月 / 6 位使用者*" + }, + "enterprise": { + "join_now": "立即加入", + "request_to_join": "申請加入", + "popup": { + "title": "加入團隊", + "desc": "加入您的團隊後方可繼續使用 Locker。", + "text1": "此帳戶是由 {enterpriseName} 管理。", + "text2": "別擔心,您還是可以使用個人保險庫。但是,{enterpriseName} 會有權限控管您帳戶的某些設定,像是:", + "list": [ + "啟用、停用、或禁用您的帳戶", + "將您加到團隊中", + "為您的帳戶套用密碼政策" + ], + "text3": "您所有保險庫資料將維持不變。{enterpriseName} 無法看到您的資料或主密碼。", + "text4": "您必需向 {enterpriseName} 提出存取申請,才能繼續使用 Locker 帳戶。", + "subtitle": "有使用者邀請您加入他們的 Locker 團隊。", + "oragnization": "團隊", + "inviter": "邀請者", + "accept": { + "title": "若您同意邀請:", + "list": [ + "您的帳戶會升級成企業用戶方案", + "您的帳戶會屬於這個團隊", + "您的保險庫仍舊是您的,包含管理員在內,沒有人能看或編輯您的資料", + "管理員可以為您的帳戶套用企業級設定。了解 Locker 企業版的設定", + "管理員可以禁用您的帳戶。這代表在他們啟用前,您將失去存取保險庫的權限。" + ] + }, + "decline": { + "title": "若您不想加入這個團隊:", + "list": [ + "按一下「拒絕」就好。不會再跳出詢問視窗。" + ] + } + }, + "banner": { + "title": "已受邀加入 {team}", + "desc": "{owner} 邀請您加入 {team}。" + }, + "warning": { + "text": "我們無法為您的 Locker 續訂方案。請在 {time} 之前更新您的付款資訊,否則將無法使用 Locker 密碼管理器。", + "link": "更新付款方式" + }, + "about_to_expire_warning": { + "text": "您的 Locker 企業方案即將過期。請在 {time} 之前完成付款,才能繼續使用 Locker 企業版。", + "link": "更新付款方式" + } + }, + "policies": { + "title": "安全設定", + "violated_items": "違規項目", + "no_active_policies": "目前沒有任何啟用的安全設定。", + "you_are_a_member_of": "您的帳戶屬於", + "rules_being_applied": "任何啟用的密碼設定將會顯示在下方。", + "policy_details": "設定內容", + "password_requirement": "密碼需求", + "password_requirement_desc": "您的公司已為您的密碼設定最佳安全實踐方式。", + "password_requirement_policy_details": "您保險庫中的所有密碼都必需符合這些需求:", + "password_requirement_note": "請注意,您還是能建立不符合需求的新密碼。但是,管理員會知悉這些違規狀況。強烈建議您為提升安全性修改這些違規的密碼。
(*)共享的密碼不受此規範影響。", + "you_have_violated_items": "您有 {count} 個違規項目", + "master_password_requirement": "主密碼需求", + "master_password_requirement_desc": "建立一組旁人猜不出的主密碼", + "master_password_requirement_policy_details": "您的主密碼需要符合:", + "need_to_change_master_pw": "您需要修改主密碼", + "block_failed_logins": "封鎖多次登入失敗", + "block_failed_logins_desc": "在指定時間內封鎖多次登入失敗,以防止暴力破解攻擊。", + "block_failed_logins_policy_details": "您的工作區封鎖了連續的登入失敗嘗試。如果您無法登入 Locker,請聯繫您的工作區管理員解鎖。", + "you_have_been_blocked": "您這個月已遭到封鎖 {count} 次", + "passwordless": "無密碼登入", + "passwordless_desc": "使用無密碼方式登入 Locker。", + "passwordless_policy_details": "您的管理員要求您使用無密碼方式登入 Locker。", + "2fa": "使用兩步驟驗證(2FA)登入", + "2fa_desc": "在新裝置上初次登入 Locker 時使用兩步驟驗證(2FA)。", + "2fa_policy_details": "{target} 需要在新裝置上初次登入 Locker 時,使用兩步驟驗證(2FA)。", + "lock_by_2fa": { + "title": "啟用兩步驟驗證", + "desc": "您的團隊要求登入時使用兩步驟驗證(2FA)。請啟用 2FA 後繼續。", + "enable_btn": "啟用兩步驟驗證", + "logout_text": "要使用其他帳戶嗎?" + }, + "violation": "{count} 個違規" + }, + "welcome_business": { + "title": "歡迎使用 Locker 企業版!", + "content": { + "text_1": "使用 Locker 企業版,您可以:", + "list": [ + "邀請成員加入 Locker", + "建立、管理共用資料夾,提升協作效率", + "為整個團隊設定密碼政策", + "追蹤成員的安全設定遵守情況", + "追蹤活動和違規狀況" + ], + "text_2": "點選左側選單中的「企業控制台」,就可以開始使用 Locker 企業版。" + }, + "dont_show": "不再顯示", + "go_dashboard": "前往控制台" + }, + "rewards": { + "subtitle": "參加我們的獎勵計畫,為 Locker 訂閱省錢。每完成一個項目,您就可以獲得一個月的 Premium/Family 方案免費試用,或是年繳方案的折扣。折扣可以累積!", + "note1": "{plan} 免費 {month} 個月", + "note2": "{percent}% 折扣碼", + "no_discount": "還沒有折扣碼可以收取。行動後,可以獲得最高 {percent}% 的折扣", + "progress": "已可收取 {percent}% 折扣碼", + "progress1": "已可收取 {percent}% 折扣碼。使用新折扣碼將替換現有 {current_percent}% 的折扣碼", + "process2": "已收取所有折扣碼", + "discontinue": "中止您的計費週期", + "discontinue_note": "可以在目前的訂閱期滿後,再開始使用免費月份。", + "steps": [ + { + "key": 1, + "name": "尚未開始", + "value": "not_started", + "icon": "power", + "class": "text-black-400", + "status": "wait" + }, + { + "key": 2, + "name": "驗證中", + "value": "under_verification", + "icon": "under-verification", + "class": "text-warning", + "status": "wait" + }, + { + "key": 3, + "name": "已發送獎勵", + "value": "reward_sent", + "icon": "reward-sent", + "class": "text-green", + "status": "wait" + } + ], + "get_code": { + "title": "領取折扣碼", + "note": "或是繼續完成其他行動來獲得最高 {percent}% 的折扣", + "redeem_code": "兌換折扣碼", + "process": "已累積 {value} 個折扣碼", + "description": "此 {percent}% 折扣碼的有效期限至 {time}", + "your_codes": "您的折扣碼", + "popup": { + "title": "確定要領取 {percent}% 折扣碼嗎?", + "desc": "取得折扣碼後,您可以直接以折扣碼結帳,或是繼續完成其他任務來取得更高折扣(最高可達 {percent}%)", + "note": "此折扣碼的有效期限至 {time}", + "note1": "此折扣碼的有效期限至 {time}", + "redeem_now": "立即兌換", + "redeem_note": "可立即或於 {time} 之前兌換。您可在「獎勵」分頁查看折扣碼。" + } + }, + "verify_popup": { + "continue": "繼續", + "go_to_plan": "前往方案與計費", + "congrats": "恭喜您", + "congrats_desc": "您完成 {action} 任務,獲得了 1 個月的 {plan} 免費試用資格。中止目前的計費週期,您可以在訂閱到期後開始免費月份的使用。", + "congrats_desc1": "您完成 {action} 任務,獲得了 {percent}% 折扣!您目前已累積 {current_discount}% 的折扣。馬上領取折扣碼或繼續完成其他任務,以獲得最高 {remain_percent}% 的折扣。", + "congrats_desc2": "您完成 {action} 任務,獲得了 {percent}% 折扣!您目前已累積 {current_discount}% 的折扣。領取折扣碼後可立即使用。", + "resubmit": { + "title": "糟糕!", + "desc": "無法驗證您已完成 {action} 的動作。這可能是由於您的評論尚未在 {store} 上顯示,或是您輸入了有誤的顯示名稱。請在評論於 {store} 上顯示後重新檢查,並於 24 小時內再次提交您的顯示名稱。", + "desc1": "抱歉,{action} 任務未能順利完成,因此無法獲取獎勵,請重新進行這個任務來獲取獎勵", + "desc2": "或者聯繫 support@locker.io 了解詳情。", + "desc3": "無法驗證 {action} 的任務完成狀況。請重新安裝並登入 Locker 桌面應用程式,以便獲得獎勵。" + } + }, + "referral": { + "title": "推薦好友", + "subtitle": "邀請好友註冊,您與好友皆可獲得一個月的 Locker Premium 免費試用。", + "subtitle1": "推薦連結", + "subtitle1_desc": "好友註冊 Locker 成功後(建立主密碼),您與好友皆可獲得一個月的 Premium 免費試用。" + }, + "ext_installation": { + "title": "瀏覽器擴充套件安裝與評論", + "subtitle": "在兩個瀏覽器上安裝、登入 Locker 擴充套件,並在套件商店留言,可獲得 Locker Premium/Family 一個月免費使用。", + "subtitle1_desc": "執行步驟:
(1) 在兩個不同的瀏覽器上安裝並登入 Locker 擴充套件
(2) 在套件商店裡給評價與評論
(3) 勾選已完成的商店,輸入使用者名稱/信箱
(4) 按下發送按鈕", + "btn": "發送", + "input_placeholder": "輸入顯示名稱" + }, + "desktop_installation": { + "title": "安裝桌面程式", + "header_btn": "下載 Locker 桌面應用程式", + "subtitle": "在 Locker 桌面應用程式安裝並登入,可獲取 Locker Premium 或 Family 年繳方案的 5% 折扣碼", + "subtitle1_desc": "執行步驟:
(1) 在電腦上安裝並登入 Locker 桌面應用程式
(2) 按下「是,我確認」按鈕來確認完成此操作
(3) 我們會立刻進行驗證,並給予您獎勵", + "subtitle1_desc1": "按下確認已在電腦上完成 Locker 桌面應用程式安裝與登入,我們會在一個星期內為您進行驗證和發送獎勵", + "btn": "是,我確認", + "note": "我們無法驗證您已完成「安裝桌面程式」的動作,請重新安裝、登入 Locker 桌面應用程式後,再獲得獎勵" + }, + "app_store_rating": { + "title": "App Store 評分與評論", + "header_btn": "撰寫評論", + "subtitle": "為 Locker 在 App Store 上給評價和留下評論,可獲取 Locker Premium 或 Family 年繳方案的 5% 折扣碼。", + "subtitle1_desc": "執行步驟:
(1) 為 Locker 在 App Store 上給評價和留言
(2) 在評價後的 24 小時內,在此欄位輸入你在 App Store 評論上的顯示名稱(或是複製貼上也可)
(3) 我們將為你進行驗證並於一分鐘內給你獎勵", + "input_placeholder": "輸入您的顯示名稱", + "btn": "發送" + }, + "google_play_rating": { + "title": "Google Play 評分與評論", + "header_btn": "撰寫評論", + "subtitle": "為 Locker 在 Google Play 上給評價和留下評論,可獲取 Locker Premium 或 Family 年繳方案的 5% 折扣碼。", + "subtitle1_desc": "執行步驟:
(1) 為 Locker 在 Google Play 上給評價和留言
(2) 在評價後的 24 小時內,在此欄位輸入你在 Google Play 評論上的顯示名稱(或是複製貼上也可)
(3) 我們將為你進行驗證並於一分鐘內給你獎勵", + "input_placeholder": "輸入您的顯示名稱", + "btn": "發送" + }, + "capterra_rating": { + "title": "Capterra 評分與評論", + "header_btn": "在 Capterra 上撰寫評論", + "subtitle": "為 Locker 在 Capterra 上留下評論,可獲得 Locker Premium 或 Family 年繳方案的 5% 折扣碼。", + "subtitle1_desc": "執行步驟:
(1) 為 Locker 在 Capterra 上給評價與留言
(2) 在評價後的 24 小時內,在此欄位輸入你在 Capterra 評論上的顯示名稱(或是複製貼上也可)
(3) 我們將為你進行驗證並於一分鐘內給你獎勵", + "input_placeholder": "輸入您的顯示名稱", + "btn": "發送" + } + } + }, + "plan": { + "plans": [ + { + "alias": "pm_free", + "title": "免費方案", + "duration": "", + "accounts": "", + "price": { + "usd": 0 + }, + "yearly_price": { + "usd": 0 + } + }, + { + "alias": "pm_premium", + "title": "Premium", + "duration": "月繳", + "accounts": "", + "price": { + "usd": "4.99" + }, + "yearly_price": { + "usd": "15.48" + } + }, + { + "alias": "pm_family", + "title": "家庭與朋友", + "duration": "月繳", + "accounts": "6 個帳戶", + "price": { + "usd": "9.99" + }, + "yearly_price": { + "usd": "71.88" + } + } + ] + }, + "master_pw_item": { + "name": "Locker 主密碼", + "desc": "此項是您的 Locker 主密碼。它會隨著您更改主密碼而變動。我們自動建立了這個項目,讓您不會忘記主密碼。不用擔心,這個操作只會在您的裝置上進行,我們依然無法從伺服器端查看或編輯您的主密碼。享受使用 Locker 的樂趣吧!" + }, + "tutorial": { + "welcome": { + "title": "歡迎使用 Locker", + "desc": "我們將在 3 分鐘內帶您認識 Locker 最重要的功能", + "start": "讓我們開始吧", + "skip": "跳過教學" + }, + "extension": { + "title": "6. 網頁存密碼超方便", + "desc": "使用 Locker 瀏覽器擴充套件,您可以:", + "list": [ + "邊瀏覽網頁邊儲存帳號與密碼", + "一鍵安全填入登入資訊", + "快速查看所有的密碼和其他項目" + ], + "action": "立即安裝擴充套件 " + }, + "tour": { + "btn": "開始使用教學", + "steps_completed": "已完成步驟", + "steps": { + "add_pw": { + "title": "新增密碼", + "desc": "你可以隨時手動新增資料,像是密碼、信用卡、秘密記事等。", + "btn": "新增資料", + "detail": { + "step1": { + "title": "1. 新增密碼", + "text": "你可以新增資料,像是密碼、信用卡、祕密記事等。點擊按鈕後選擇「密碼」來建立新的密碼記錄。" + }, + "step2": { + "title": "1. 新增密碼", + "text": "選擇密碼" + }, + "step3": { + "title": "1. 新增密碼", + "text": "填入必要資訊再按下儲存來新增你的第一個項目" + } + } + }, + "import_file": { + "title": "匯入檔案", + "desc": "你可以將瀏覽器或其他密碼管理員中的登入紀錄匯入 Locker。", + "btn": "匯入資料", + "detail": { + "step1": { + "title": "2. 匯入檔案", + "text": "你可以從其他密碼管理員或瀏覽器中匯出密碼並匯入 Locker。
了解如何從其他來源匯出
首先,選取你要匯入的檔案格式。" + }, + "step2": { + "title": "2. 匯入檔案", + "text": "選取檔案格式" + }, + "step3": { + "title": "2. 匯入檔案", + "text": "點擊選擇檔案來選取檔案" + }, + "step4": { + "title": "2. 匯入檔案", + "text": "點擊「匯入」,檔案內容就會被儲存進 Locker 囉!" + } + } + }, + "browse_items": { + "title": "瀏覽項目和其他工具", + "desc": "以下是導航列的各個項目,你可以透過分類快速瀏覽。還能查看保險庫的「安全性」報告以及與其他 Locker 使用者「共享」項目哦,一起來看看吧!", + "btn": "查看側邊列", + "detail": { + "step1": { + "title": "3. 瀏覽項目和安全性報告", + "text": "這裡是導航列的各個項目,你可以透過分類快速瀏覽。還能查看保險庫的「安全性」報告以及與其他 Locker 使用者「共享」項目哦,一起來看看吧!" + }, + "step2": { + "title": "3. 瀏覽項目和安全性報告", + "text": "這裡是導航列的各個項目,你可以透過分類快速瀏覽。還能查看保險庫的「安全性」報告以及與其他 Locker 使用者「共享」項目哦,一起來看看吧!" + } + } + }, + "view_settings": { + "title": "前往設定", + "desc": "這是你的設定選單。你可以在這裡查看 Locker 的設定,或是團隊版儀表板。點擊「設定」來繼續。", + "btn": "前往設定", + "detail": { + "step1": { + "title": "4. 側邊列選項", + "text": "這是你的設定選單。你可以在這裡查看 Locker 的設定,或是團隊版儀表板。點擊「設定」來繼續。" + } + } + }, + "view_profile": { + "title": "查看個人檔案選單", + "desc": "點擊你的使用者名稱來查看 Locker 帳戶相關選項。你也可以在這個選單中找到這份教學。", + "btn": "查看個人檔案選單", + "detail": { + "step1": { + "title": "5. 個人檔案選項", + "text": "點擊你的使用者名稱來查看 Locker 帳戶相關選項。你也可以在選單中找到「這份教學」。" + } + } + }, + "view_autofill": { + "title": "試試看自動填入", + "desc": "使用 Locker 瀏覽器擴充套件,就能在你瀏覽網頁時自動儲存帳號密碼,並一鍵安全地填入登入資訊。", + "btn": "安裝擴充套件" + } + } + } + }, + "lock": { + "factor2": { + "step_1": { + "title": "驗證身分" + }, + "step_2": { + "title": "輸入驗證碼", + "mail_desc": "已將驗證信寄至 {email},請至您的收件匣/垃圾郵件夾查看。", + "app_desc": "請使用您的雙因素驗證應用程式(如 Locker 或 Google Authenticator)取得驗證碼。", + "enter_code": "請輸入驗證碼", + "save_device": "儲存至裝置" + } + }, + "pwl": { + "title": "無密碼解鎖", + "pls_login_desktop": "你的帳戶預設使用無密碼登入的設定,請先使用桌面程式登入,才能繼續使用網頁版本。", + "pls_enter_otp": "請在 Locker 桌面應用程式中輸入這個驗證碼", + "download_app": "下載桌面程式", + "try_again": "再試一次", + "get_new_code": "取得新驗證碼", + "errors": { + "cannot_connect": "無法連接桌面程式", + "rejected": "驗證失敗!請先用對的信箱解鎖桌面程式", + "wrong_otp": "OTP 不正確,請再試一次" + } + } + } +} \ No newline at end of file diff --git a/src/renderer/nuxt.config.electron.js b/src/renderer/nuxt.config.electron.js index 5856c2cd..7c8a65b8 100644 --- a/src/renderer/nuxt.config.electron.js +++ b/src/renderer/nuxt.config.electron.js @@ -40,7 +40,7 @@ module.exports = { }, css: ['@/assets/css/app.scss'], i18n: { - locales: ['en', 'vi'], + locales: ['en', 'vi', 'cn'], defaultLocale: 'en', strategy: 'prefix_except_default', vuex: { @@ -50,7 +50,8 @@ module.exports = { fallbackLocale: 'en', messages: { en: require('./locales/en.js'), - vi: require('./locales/vi.js') + vi: require('./locales/vi.js'), + cn: require('./locales/cn.json') } } }, diff --git a/src/renderer/nuxt.config.js b/src/renderer/nuxt.config.js index 096ed61c..abfe4570 100644 --- a/src/renderer/nuxt.config.js +++ b/src/renderer/nuxt.config.js @@ -7,6 +7,8 @@ import path from 'path' import fs from 'fs' import viVee from 'vee-validate/dist/locale/vi.json' import enVee from 'vee-validate/dist/locale/en.json' +// import zhVee from 'vee-validate/dist/locale/zh_CN.json' +import zhVee from 'vee-validate/dist/locale/zh_TW.json' import axios from 'axios' import cheerio from 'cheerio' @@ -135,7 +137,7 @@ module.exports = { '@/assets/flags/flags.css' ], i18n: { - locales: ['en', 'vi'], + locales: ['en', 'vi', 'zh'], defaultLocale: 'en', strategy: 'prefix_except_default', vuex: { @@ -145,7 +147,8 @@ module.exports = { fallbackLocale: 'en', messages: { en: { ...require('./locales/en.js'), ...enVee }, - vi: { ...require('./locales/vi.js'), ...viVee } + vi: { ...require('./locales/vi.js'), ...viVee }, + zh: { ...require('./locales/zh.json'), ...zhVee } } } }, @@ -194,7 +197,7 @@ module.exports = { router: {}, moment: { defaultLocale: 'en', - locales: ['vi'] + locales: ['vi', 'zh-tw'] }, build: { transpile: ['vee-validate/dist/rules'], diff --git a/src/renderer/pages/features/data-breach-scanner.vue b/src/renderer/pages/features/data-breach-scanner.vue index f5b1a881..86e09e16 100644 --- a/src/renderer/pages/features/data-breach-scanner.vue +++ b/src/renderer/pages/features/data-breach-scanner.vue @@ -377,13 +377,13 @@ export default { methods: { async getData () { this.loading = true - const text_email = document.getElementById('input-email') + const textEmail = document.getElementById('input-email') try { const moutains = await this.$axios .$post( 'https://api.locker.io/v3/cystack_platform/pm/tools/public/breach', { - email: text_email.value + email: textEmail.value } ) .then(res => { @@ -392,7 +392,7 @@ export default { }) return { moutains } } catch (e) { - if (e.request.status == 400) { + if (e.request.status === 400) { this.notify(this.$tc('errors.0004', 1), 'error') } else { this.notify(this.$tc('errors.oops', 1), 'error') diff --git a/src/renderer/pages/password-generator.vue b/src/renderer/pages/password-generator.vue index 2060e2c8..8ab8368f 100644 --- a/src/renderer/pages/password-generator.vue +++ b/src/renderer/pages/password-generator.vue @@ -36,7 +36,7 @@

Mật khẩu mạnh:

-

Strength:

+

Strength:

{ if (app.$cookies.get('i18n_redirected') !== 'vi') { i18n.setLocale('vi') } + } else if (toRoute.path.startsWith('/zh')) { + if (app.$cookies.get('i18n_redirected') !== 'zh') { + i18n.setLocale('zh') + } } if ( diff --git a/src/renderer/plugins/tutorial.js b/src/renderer/plugins/tutorial.js index 530ba3cc..cacbdb6f 100644 --- a/src/renderer/plugins/tutorial.js +++ b/src/renderer/plugins/tutorial.js @@ -34,7 +34,17 @@ export default async ({ store, i18n, $axios, redirect }, inject) => { tour.hide() store.commit('UPDATE_TUTORIAL', { currentStepId: 'add-pw-1' }) _closeModals() - redirect(302, `${store.state.i18n.locale === 'vi' ? '/vi' : ''}/vault`) + const locale = (() => { + switch (store.state.i18n.locale) { + case 'vi': + return '/vi' + case 'zh': + return '/zh' + default: + return '' + } + })() + redirect(302, `${locale}/vault`) setTimeout(() => { store.commit('UPDATE_TUTORIAL', { isActive: true }) tour.show('add-pw-1') @@ -44,9 +54,19 @@ export default async ({ store, i18n, $axios, redirect }, inject) => { const _startFromImport = () => { tour.hide() store.commit('UPDATE_TUTORIAL', { currentStepId: 'import-1' }) + const locale = (() => { + switch (store.state.i18n.locale) { + case 'vi': + return '/vi' + case 'zh': + return '/zh' + default: + return '' + } + })() redirect( 302, - `${store.state.i18n.locale === 'vi' ? '/vi' : ''}/settings/import-export` + `${locale}/settings/import-export` ) setTimeout(() => { store.commit('UPDATE_TUTORIAL', { isActive: true }) diff --git a/src/renderer/store/index.js b/src/renderer/store/index.js index 12c88dee..49283f58 100644 --- a/src/renderer/store/index.js +++ b/src/renderer/store/index.js @@ -255,7 +255,12 @@ export const actions = { return new Promise(resolve => { if (state.isLoggedIn) { const data = Object.assign({}, state.user) - data.language = payload + if (['en', 'vi'].includes(payload)) { + data.language = payload + } else { + data.language = 'en' + } + data.customer_language = payload this.$axios.$put('me', data) } resolve(payload) @@ -270,7 +275,7 @@ export const actions = { } return this.$axios.$get('me').then(res => { commit('UPDATE_USER', res) - commit('SET_LANG', res.language) + commit('SET_LANG', res.customer_language || res.language) return res }) },