Files
TREK/shared/src/i18n/zh-TW/settings.ts
T
Maurice 56655d53b4 AirTrail integration: import flights & two-way sync (#214) (#1158)
* feat(admin): register AirTrail as an integration addon

Off by default; toggle lives in Admin -> Addons with a Plane icon. The
per-user connection (URL + API key) follows in integration settings.

* feat(integrations): add per-user AirTrail connection

Settings -> Integrations gains an AirTrail section: instance URL + Bearer
API key (encrypted at rest via apiKeyCrypto), a self-signed-TLS opt-in and
a test-connection check. Served by a small Nest controller under
/api/integrations/airtrail, gated on the airtrail addon and SSRF-guarded.
The key is per-user, so it only ever returns that user's own flights.

* feat(transport): import flights from AirTrail

Adds an AirTrail Import button next to Manual Transport that lists the
user's AirTrail flights and highlights the ones inside the trip dates.
Selected flights become reservations linked to their AirTrail origin
(external_* columns), deduped against flights already in the trip, then
broadcast to every member. The mapping resolves airports, airport-local
times and flight metadata; the linkage is what the two-way sync rides on.

* feat(transport): badge AirTrail-linked flights as synced

Linked reservations show an 'AirTrail synced' badge, or 'no longer
synced' once the flight is gone from AirTrail.

* feat(transport): keep TREK and AirTrail flights in sync both ways

A scheduled poll reconciles each connected owner's flights: field edits
(detected by snapshot hash, since AirTrail has no updated_at) flow into
the linked reservation and broadcast live; a flight deleted in AirTrail
keeps the TREK row but stops syncing. Editing a linked flight in TREK
pushes back to AirTrail under the importer's credentials, preserving the
existing seat manifest; if the owner disconnected the link detaches so the
poll can't revert the local edit. Deleting in TREK never touches AirTrail.

* i18n(airtrail): add AirTrail strings across all locales

* test(airtrail): cover flight mapping, timezones and snapshot hashing

* fix(airtrail): reduce airline/aircraft objects to codes

The flight list/get response returns airline and aircraft as joined
objects ({icao, iata, name, ...}), not bare codes. Mapping them straight
through produced '[object Object]' titles and stored objects in metadata,
which crashed reservation rendering. Extract the ICAO/IATA code instead,
and title flights by their flight number.

* fix(airtrail): clear error on non-JSON responses, tolerate /api in URL

A misconfigured instance URL made AirTrail serve its SPA/login HTML, and
the raw JSON.parse failure surfaced as 'Unexpected token <'. Surface an
actionable message instead, and strip a pasted trailing /api so the base
URL still resolves.

* feat(transport): sync AirTrail edits on trip open, not just on the poll

Add a per-user on-demand sync (POST /integrations/airtrail/sync) triggered
when a connected user opens a trip, so AirTrail-side edits appear right away
instead of waiting up to a full poll cycle. Lower the background poll from 15
to 5 minutes as a safety net.

* fix(transport): refresh imported AirTrail flights without a reload

loadTrip doesn't fetch reservations, so a freshly imported flight only
appeared after a full page reload — use loadReservations instead. Also show
flight dates in the user's locale format (e.g. 13.06.2026) rather than the
raw ISO string.

* style(settings): align AirTrail connection with the photo-provider layout

Match the Immich section: stacked URL/key fields, a ToggleSwitch for
self-signed TLS, and a Save / Test-connection row with a status badge.

* feat(transport): add a seat field when editing flights

The transport editor only offered a seat field for trains; flights had
none even though imports store metadata.seat. Show and persist a seat for
flights too.

* style(transport): match the AirTrail button height to Manual Transport

* feat(transport): put the flight seat next to flight number and sync it to AirTrail

Move the seat from a standalone row to the per-leg flight details (beside
the flight number), stored per leg in metadata.legs[].seat with the first
leg mirrored to metadata.seat. On push, set the seat number on the user's
own AirTrail seat (the one with a userId), leaving co-passengers untouched;
import/poll read that same seat back.

* refactor(planner): move the AirTrail trip-open sync into useTripPlanner

Page containers must not own state/effects (lint:pages). Same logic,
relocated from the page into its data hook.

* test(db): pin the region-reconciliation test to its schema version

The test re-ran 'the last migration' assuming the reconciliation is last;
it no longer is once later migrations are appended. Pin to version 135 and
re-run from there (the appended migrations are idempotent).
2026-06-13 13:11:35 +02:00

332 lines
19 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.optimizeFromAccommodation': '從住宿地點最佳化路線',
'settings.optimizeFromAccommodationHint':
'最佳化某一天的行程時,路線從你早上起床的飯店出發,並在你當晚入住的飯店結束。',
'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': '從未使用',
'settings.mapPoiPill': '在地圖上探索地點',
'settings.mapPoiPillHint': '在行程地圖上顯示分類標籤,透過 OpenStreetMap 尋找附近的餐廳、住宿等地點。',
'settings.airtrail.title': 'AirTrail',
'settings.airtrail.hint': '連接你自架的 AirTrail 以匯入及同步航班。在 AirTrail 的「設定 → 安全性」中建立 API 金鑰。',
'settings.airtrail.url': '執行個體網址',
'settings.airtrail.apiKey': 'API 金鑰',
'settings.airtrail.apiKeyPlaceholder': 'Bearer API 金鑰',
'settings.airtrail.apiKeyHint': '在 AirTrail 的「設定 → 安全性」中產生。以加密方式儲存。',
'settings.airtrail.allowInsecureTls': '允許自簽憑證',
'settings.airtrail.allowInsecureTlsHint': '僅在你自己網路上受信任的執行個體啟用。',
'settings.airtrail.connected': '已連接',
'settings.airtrail.notConnected': '未連接',
'settings.airtrail.toast.saved': '已儲存 AirTrail 連接',
'settings.airtrail.toast.saveError': '無法儲存連接',
'settings.airtrail.test.button': '測試連接',
'settings.airtrail.test.success': '已連接——找到 {count} 筆航班',
'settings.airtrail.test.failed': '連接失敗',
};
export default settings;