Files
TREK/shared/src/i18n/zh-TW/settings.ts
T
Maurice a876fb2634 feat: Passkey (WebAuthn) login (#1111)
* feat(auth): passkey (WebAuthn) login — server endpoints, schema + admin toggle

Add @simplewebauthn/server registration and primary (discoverable) login ceremonies under /api/auth/passkey, a webauthn_credentials + single-use webauthn_challenges schema (migration), the instance-wide passkey_login toggle (default off) enforced before auth by a guard, and require_mfa satisfaction via a verified passkey. RP ID/origin come only from server config (webauthn_rp_id/origins -> APP_URL), never request headers.

* feat(auth): passkey enrolment, login button + admin settings UI

PasskeysSection in account settings (add/rename/remove with a current-password step-up), a 'Sign in with a passkey' button on the login page, the admin enable + RP-ID/origins controls, and a per-user admin reset action.

* i18n(auth): passkey strings across all locales

Add login/settings/admin passkey keys to en and all 19 translated locales.
2026-06-05 18:54:13 +02:00

312 lines
18 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { TranslationStrings } from '../types';
const settings: TranslationStrings = {
'settings.title': '設定',
'settings.subtitle': '配置你的個人設定',
'settings.tabs.display': '顯示',
'settings.tabs.map': '地圖',
'settings.tabs.notifications': '通知',
'settings.tabs.integrations': '整合',
'settings.tabs.account': '帳戶',
'settings.tabs.offline': 'Offline',
'settings.tabs.about': '關於',
'settings.map': '地圖',
'settings.mapTemplate': '地圖模板',
'settings.mapTemplatePlaceholder.select': '選擇模板...',
'settings.mapDefaultHint': '留空則使用 OpenStreetMap(預設)',
'settings.mapTemplatePlaceholder':
'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
'settings.mapHint': '地圖瓦片 URL 模板',
'settings.mapProvider': '地圖提供商',
'settings.mapProviderHint':
'影響行程規劃和旅程地圖。Atlas 始終使用 Leaflet。',
'settings.mapLeafletSubtitle': '經典 2D,任何柵格瓦片',
'settings.mapMapboxSubtitle': '向量瓦片、3D 建築和地形',
'settings.mapExperimental': '實驗性',
'settings.mapMapboxToken': 'Mapbox 存取權杖',
'settings.mapMapboxTokenHint': '公開權杖 (pk.*) 來自',
'settings.mapMapboxTokenLink': 'mapbox.com → 存取權杖',
'settings.mapStyle': '地圖樣式',
'settings.mapStylePlaceholder': '選擇 Mapbox 樣式',
'settings.mapStyleHint': '預設或您自己的 mapbox://styles/USER/ID URL',
'settings.map3dBuildings': '3D 建築和地形',
'settings.map3dHint': '傾斜 + 真實 3D 建築拉伸 — 適用於所有樣式,包括衛星。',
'settings.mapHighQuality': '高畫質模式',
'settings.mapHighQualityHint':
'抗鋸齒 + 地球投影,帶來更清晰的邊緣和更真實的世界視圖。',
'settings.mapHighQualityWarning': '可能影響低階裝置的效能。',
'settings.mapTipLabel': '提示:',
'settings.mapTip':
'右鍵點擊並拖曳以旋轉/傾斜地圖。中鍵點擊新增地點(右鍵用於旋轉)。',
'settings.latitude': '緯度',
'settings.longitude': '經度',
'settings.saveMap': '儲存地圖',
'settings.apiKeys': 'API 金鑰',
'settings.mapsKey': 'Google Maps API 金鑰',
'settings.mapsKeyHint':
'用於地點搜尋。需要 Places API (New)。在 console.cloud.google.com 獲取',
'settings.weatherKey': 'OpenWeatherMap API 金鑰',
'settings.weatherKeyHint': '用於天氣資料。在 openweathermap.org/api 免費獲取',
'settings.keyPlaceholder': '輸入金鑰...',
'settings.configured': '已配置',
'settings.saveKeys': '儲存金鑰',
'settings.display': '顯示',
'settings.colorMode': '顏色模式',
'settings.light': '淺色',
'settings.dark': '深色',
'settings.auto': '自動',
'settings.language': '語言',
'settings.temperature': '溫度單位',
'settings.timeFormat': '時間格式',
'settings.blurBookingCodes': '模糊預訂程式碼',
'settings.notifications': '通知',
'settings.notifyTripInvite': '旅行邀請',
'settings.notifyBookingChange': '預訂變更',
'settings.notifyTripReminder': '旅行提醒',
'settings.notifyTodoDue': '待辦事項即將到期',
'settings.notifyVacayInvite': 'Vacay 融合邀請',
'settings.notifyPhotosShared': '共享照片 (Immich)',
'settings.notifyCollabMessage': '聊天訊息 (Collab)',
'settings.notifyPackingTagged': '行李清單:分配',
'settings.notifyWebhook': 'Webhook 通知',
'settings.notifyVersionAvailable': '有新版本可用',
'settings.notificationPreferences.email': '電子郵件',
'settings.notificationPreferences.webhook': 'Webhook',
'settings.notificationPreferences.inapp': '應用程式內',
'settings.notificationPreferences.ntfy': 'Ntfy',
'settings.notificationPreferences.noChannels':
'未配置通知渠道。請聯絡管理員設定電子郵件或 Webhook 通知。',
'settings.webhookUrl.label': 'Webhook URL',
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint':
'輸入您的 Discord、Slack 或自訂 Webhook URL 以接收通知。',
'settings.webhookUrl.saved': 'Webhook URL 已儲存',
'settings.webhookUrl.test': '測試',
'settings.webhookUrl.testSuccess': '測試 Webhook 傳送成功',
'settings.webhookUrl.testFailed': '測試 Webhook 傳送失敗',
'settings.ntfyUrl.topicLabel': 'Ntfy 主題',
'settings.ntfyUrl.topicPlaceholder': 'my-trek-alerts',
'settings.ntfyUrl.serverLabel': 'Ntfy 伺服器 URL(選填)',
'settings.ntfyUrl.serverPlaceholder': 'https://ntfy.sh',
'settings.ntfyUrl.hint':
'輸入您的 Ntfy 主題以接收推播通知。將伺服器留空以使用管理員設定的預設值。',
'settings.ntfyUrl.tokenLabel': '存取權杖(選填)',
'settings.ntfyUrl.tokenHint': '受密碼保護的主題需要此項目。',
'settings.ntfyUrl.saved': 'Ntfy 設定已儲存',
'settings.ntfyUrl.test': '測試',
'settings.ntfyUrl.testSuccess': '測試 Ntfy 通知傳送成功',
'settings.ntfyUrl.testFailed': '測試 Ntfy 通知失敗',
'settings.ntfyUrl.tokenCleared': '存取權杖已清除',
'settings.notificationsDisabled':
'通知尚未配置。請聯絡管理員啟用電子郵件或 Webhook 通知。',
'settings.notificationsActive': '活躍頻道',
'settings.notificationsManagedByAdmin': '通知事件由管理員配置。',
'settings.on': '開',
'settings.off': '關',
'settings.mcp.title': 'MCP 配置',
'settings.mcp.endpoint': 'MCP 端點',
'settings.mcp.clientConfig': '客戶端配置',
'settings.mcp.clientConfigHint':
'將 <your_token> 替換為下方列表中的 API 令牌。npx 的路徑可能需要根據您的系統進行調整(例如 Windows 上為 C:\\PROGRA~1\\nodejs\\npx.cmd)。',
'settings.mcp.clientConfigHintOAuth':
'將 <your_client_id> 和 <your_client_secret> 替換為上方建立的 OAuth 2.1 客戶端所顯示的憑據。首次連線時,mcp-remote 將開啟瀏覽器完成授權。npx 的路徑可能需要根據您的系統進行調整(例如 Windows 上為 C:\\PROGRA~1\\nodejs\\npx.cmd)。',
'settings.mcp.copy': '複製',
'settings.mcp.copied': '已複製!',
'settings.mcp.apiTokens': 'API 令牌',
'settings.mcp.createToken': '建立新令牌',
'settings.mcp.noTokens': '暫無令牌,請建立一個以連線 MCP 客戶端。',
'settings.mcp.tokenCreatedAt': '創建於',
'settings.mcp.tokenUsedAt': '使用於',
'settings.mcp.deleteTokenTitle': '刪除令牌',
'settings.mcp.deleteTokenMessage':
'此令牌將立即失效,使用它的所有 MCP 客戶端將失去訪問許可權。',
'settings.mcp.modal.createTitle': '建立 API 令牌',
'settings.mcp.modal.tokenName': '令牌名稱',
'settings.mcp.modal.tokenNamePlaceholder': '例如:Claude Desktop、工作電腦',
'settings.mcp.modal.creating': '建立中…',
'settings.mcp.modal.create': '建立令牌',
'settings.mcp.modal.createdTitle': '令牌已建立',
'settings.mcp.modal.createdWarning':
'此令牌只會顯示一次,請立即複製並妥善儲存——無法找回。',
'settings.mcp.modal.done': '完成',
'settings.mcp.toast.created': '令牌已建立',
'settings.mcp.toast.createError': '建立令牌失敗',
'settings.mcp.toast.deleted': '令牌已刪除',
'settings.mcp.toast.deleteError': '刪除令牌失敗',
'settings.mcp.apiTokensDeprecated':
'API 金鑰已棄用,將於未來版本中移除。請改用 OAuth 2.1 客戶端。',
'settings.oauth.clients': 'OAuth 2.1 客戶端',
'settings.oauth.clientsHint':
'註冊 OAuth 2.1 客戶端,讓第三方 MCP 應用程式(Claude Web、Cursor 等)無需靜態金鑰即可連線。',
'settings.oauth.createClient': '新增客戶端',
'settings.oauth.noClients': '尚無已註冊的 OAuth 客戶端。',
'settings.oauth.clientId': '客戶端 ID',
'settings.oauth.clientSecret': '客戶端密鑰',
'settings.oauth.deleteClient': '刪除客戶端',
'settings.oauth.deleteClientMessage':
'此客戶端及所有活躍工作階段將被永久刪除。任何使用此客戶端的應用程式將立即失去存取權限。',
'settings.oauth.rotateSecret': '輪換密鑰',
'settings.oauth.rotateSecretMessage':
'將產生新的客戶端密鑰,所有現有工作階段將立即失效。請在關閉此對話框前更新您的應用程式。',
'settings.oauth.rotateSecretConfirm': '輪換',
'settings.oauth.rotateSecretConfirming': '輪換中…',
'settings.oauth.rotateSecretDoneTitle': '已產生新密鑰',
'settings.oauth.rotateSecretDoneWarning':
'此密鑰僅顯示一次。請立即複製並更新您的應用程式——所有先前的工作階段已失效。',
'settings.oauth.activeSessions': '活躍的 OAuth 工作階段',
'settings.oauth.sessionScopes': '授權範圍',
'settings.oauth.sessionExpires': '到期時間',
'settings.oauth.revoke': '撤銷',
'settings.oauth.revokeSession': '撤銷工作階段',
'settings.oauth.revokeSessionMessage':
'這將立即撤銷此 OAuth 工作階段的存取權限。',
'settings.oauth.modal.createTitle': '註冊 OAuth 客戶端',
'settings.oauth.modal.presets': '快速預設',
'settings.oauth.modal.clientName': '應用程式名稱',
'settings.oauth.modal.clientNamePlaceholder':
'例如 Claude Web、我的 MCP 應用程式',
'settings.oauth.modal.redirectUris': '重新導向 URI',
'settings.oauth.modal.redirectUrisPlaceholder':
'https://your-app.com/callback\nhttps://your-app.com/auth',
'settings.oauth.modal.redirectUrisHint':
'每行一個 URI。需要 HTTPSlocalhost 除外)。需要完全符合。',
'settings.oauth.modal.scopes': '允許的授權範圍',
'settings.oauth.modal.scopesHint':
'list_trips 和 get_trip_summary 始終可用——不需要授權範圍。它們可幫助 AI 找到所需的行程 ID。',
'settings.oauth.modal.selectAll': '全選',
'settings.oauth.modal.deselectAll': '取消全選',
'settings.oauth.modal.creating': '註冊中…',
'settings.oauth.modal.create': '註冊客戶端',
'settings.oauth.modal.createdTitle': '客戶端已註冊',
'settings.oauth.modal.createdWarning':
'客戶端密鑰僅顯示一次。請立即複製——無法恢復。',
'settings.oauth.toast.createError': '註冊 OAuth 客戶端失敗',
'settings.oauth.toast.deleted': 'OAuth 客戶端已刪除',
'settings.oauth.toast.deleteError': '刪除 OAuth 客戶端失敗',
'settings.oauth.toast.revoked': '工作階段已撤銷',
'settings.oauth.toast.revokeError': '撤銷工作階段失敗',
'settings.oauth.toast.rotateError': '輪換客戶端密鑰失敗',
'settings.oauth.modal.machineClient': '機器客戶端(無需瀏覽器登入)',
'settings.oauth.modal.machineClientHint':
'使用 client_credentials 授權——無需重新導向 URI。令牌透過 client_id + client_secret 直接簽發,並在所選範圍內以您的身份運行。',
'settings.oauth.modal.machineClientUsage':
'取得令牌:向 /oauth/token 發送 POST 請求,攜帶 grant_type=client_credentials、client_id 和 client_secret。無需瀏覽器,無重整令牌。',
'settings.oauth.badge.machine': '機器',
'settings.account': '賬戶',
'settings.about': '關於',
'settings.about.reportBug': '回報錯誤',
'settings.about.reportBugHint': '發現問題?告訴我們',
'settings.about.featureRequest': '功能建議',
'settings.about.featureRequestHint': '建議新功能',
'settings.about.wikiHint': '文件與指南',
'settings.about.supporters.badge': '月度支持者',
'settings.about.supporters.title': '與 TREK 同行的夥伴',
'settings.about.supporters.subtitle':
'當你規劃下一段路線時,這些人也在一起規劃 TREK 的未來。他們每月的支持直接用於開發與實際投入的時間——讓 TREK 保持開源。',
'settings.about.supporters.since': '自 {date} 起的支持者',
'settings.about.supporters.tierEmpty': '成為第一個',
'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket',
'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP',
'settings.about.supporter.tier.businessClassDreamer':
'Business Class Dreamer',
'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller',
'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate',
'settings.about.description':
'TREK 是一款自架旅遊規劃器,幫助您從最初構想到最後回憶,整理每次旅行。日程規劃、預算、行李清單、照片及更多功能——全部集中在您自己的伺服器上。',
'settings.about.madeWith': '以',
'settings.about.madeBy': '由 Maurice 及不斷成長的開源社群製作。',
'settings.username': '使用者名稱',
'settings.email': '郵箱',
'settings.role': '角色',
'settings.roleAdmin': '管理員',
'settings.oidcLinked': '已關聯',
'settings.changePassword': '修改密碼',
'settings.mustChangePassword': '您必須更改密碼才能繼續。請在下方設定新密碼。',
'settings.currentPassword': '當前密碼',
'settings.currentPasswordRequired': '請輸入當前密碼',
'settings.newPassword': '新密碼',
'settings.confirmPassword': '確認新密碼',
'settings.updatePassword': '更新密碼',
'settings.passwordRequired': '請輸入當前密碼和新密碼',
'settings.passwordTooShort': '密碼至少需要 8 個字元',
'settings.passwordMismatch': '兩次輸入的密碼不一致',
'settings.passwordWeak': '密碼必須包含大寫字母、小寫字母、數字和特殊字元',
'settings.passwordChanged': '密碼修改成功',
'settings.deleteAccount': '刪除賬戶',
'settings.deleteAccountTitle': '確定刪除賬戶?',
'settings.deleteAccountWarning':
'你的賬戶以及所有旅行、地點和檔案將被永久刪除。此操作無法撤銷。',
'settings.deleteAccountConfirm': '永久刪除',
'settings.deleteBlockedTitle': '無法刪除',
'settings.deleteBlockedMessage':
'你是唯一的管理員。請先將其他使用者提升為管理員,然後再刪除賬戶。',
'settings.roleUser': '使用者',
'settings.saveProfile': '儲存資料',
'settings.mfa.title': '雙因素認證 (2FA)',
'settings.mfa.description':
'登入時新增第二步驗證。使用身份驗證器應用(Google Authenticator、Authy 等)。',
'settings.mfa.requiredByPolicy':
'管理員要求雙因素身份驗證。請先完成下方的身份驗證器設定後再繼續。',
'settings.mfa.backupTitle': '備用程式碼',
'settings.mfa.backupDescription':
'如果你無法使用身份驗證器應用,可使用這些一次性備用程式碼登入。',
'settings.mfa.backupWarning':
'請立即儲存這些程式碼。每個程式碼只能使用一次。',
'settings.mfa.backupCopy': '複製程式碼',
'settings.mfa.backupDownload': '下載 TXT',
'settings.mfa.backupPrint': '列印 / PDF',
'settings.mfa.backupCopied': '備用程式碼已複製',
'settings.mfa.enabled': '您的賬戶已啟用 2FA。',
'settings.mfa.disabled': '2FA 未啟用。',
'settings.mfa.setup': '設定身份驗證器',
'settings.mfa.scanQr': '使用應用掃描此二維碼,或手動輸入金鑰。',
'settings.mfa.secretLabel': '金鑰(手動輸入)',
'settings.mfa.codePlaceholder': '6 位驗證碼',
'settings.mfa.enable': '啟用 2FA',
'settings.mfa.cancelSetup': '取消',
'settings.mfa.disableTitle': '停用 2FA',
'settings.mfa.disableHint': '輸入您的賬戶密碼和身份驗證器中的當前驗證碼。',
'settings.mfa.disable': '停用 2FA',
'settings.mfa.toastEnabled': '雙因素認證已啟用',
'settings.mfa.toastDisabled': '雙因素認證已停用',
'settings.mfa.demoBlocked': '演示模式下不可用',
'settings.toast.mapSaved': '地圖設定已儲存',
'settings.toast.keysSaved': 'API 金鑰已儲存',
'settings.toast.displaySaved': '顯示設定已儲存',
'settings.toast.profileSaved': '資料已儲存',
'settings.uploadAvatar': '上傳頭像',
'settings.removeAvatar': '移除頭像',
'settings.avatarUploaded': '頭像已更新',
'settings.avatarRemoved': '頭像已移除',
'settings.avatarError': '上傳失敗',
'settings.bookingLabels': '預訂路線標籤',
'settings.bookingLabelsHint':
'在地圖上顯示車站 / 機場名稱。關閉時僅顯示圖示。',
"settings.currency": "Currency",
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
'settings.passkey.title': 'Passkey',
'settings.passkey.description':
'使用 Passkey 更快登入,並可抵禦網路釣魚——透過你的指紋、臉部、PIN 碼或硬體金鑰。你的密碼仍會保留作為備援。',
'settings.passkey.notConfigured':
'Passkey 已啟用,但此伺服器尚未完成設定。請聯絡管理員設定 WebAuthn 網域。',
'settings.passkey.add': '新增 Passkey',
'settings.passkey.addTitle': '新增 Passkey',
'settings.passkey.passwordPrompt': '請確認你目前的密碼,然後依照裝置提示操作。',
'settings.passkey.passwordRequired': '請輸入你目前的密碼。',
'settings.passkey.namePlaceholder': '名稱(選填,例如 "iPhone"',
'settings.passkey.addedToast': 'Passkey 已新增',
'settings.passkey.added': '已新增',
'settings.passkey.addError': '無法新增 Passkey',
'settings.passkey.cancelled': 'Passkey 設定已取消',
'settings.passkey.deleted': 'Passkey 已移除',
'settings.passkey.deleteConfirm': '要移除此 Passkey 嗎?請以密碼確認。',
'settings.passkey.rename': '重新命名',
'settings.passkey.defaultName': 'Passkey',
'settings.passkey.synced': '已同步',
'settings.passkey.deviceBound': '此裝置',
'settings.passkey.lastUsed': '上次使用',
'settings.passkey.neverUsed': '從未使用',
};
export default settings;