mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-19 13:21:46 +00:00
d7a71c0572
Todos already support a due_date field but nothing notifies the user when a deadline is approaching — you'd only remember if you happened to look at the Lists tab. This wires a reminder into the existing notification pipeline so due-date todos behave like trip-start reminders. Details: - New `todo_due` event type alongside trip_reminder; all four channels (in-app, email, webhook, ntfy) supported and toggleable per user in Settings > Notifications. - New daily scheduler task (9 AM local TZ) queries unchecked todos whose due_date is within the next 3 days. Each todo gets at most one reminder per 24 hours, tracked via a new todo_items.reminded_at column (migration 116). - If the todo has an assigned user, only that user is reminded; if not, every member of the trip gets the notification. - Strings added in all 15 UI languages and for all notification carriers. - Gated by app_settings.notify_todo_due (default on) so admins can disable it globally.
2350 lines
118 KiB
TypeScript
2350 lines
118 KiB
TypeScript
const zhTw: Record<string, string> = {
|
||
// Common
|
||
'common.save': '儲存',
|
||
'common.showMore': '顯示更多',
|
||
'common.showLess': '收起',
|
||
'common.cancel': '取消',
|
||
'common.clear': '清除',
|
||
'common.delete': '刪除',
|
||
'common.edit': '編輯',
|
||
'common.add': '新增',
|
||
'common.loading': '載入中...',
|
||
'common.import': '匯入',
|
||
'common.select': '選擇',
|
||
'common.selectAll': '全選',
|
||
'common.deselectAll': '取消全選',
|
||
'common.error': '錯誤',
|
||
'common.unknownError': '未知錯誤',
|
||
'common.tooManyAttempts': '嘗試次數過多,請稍後再試。',
|
||
'common.back': '返回',
|
||
'common.all': '全部',
|
||
'common.close': '關閉',
|
||
'common.open': '開啟',
|
||
'common.upload': '上傳',
|
||
'common.search': '搜尋',
|
||
'common.confirm': '確認',
|
||
'common.ok': '確定',
|
||
'common.yes': '是',
|
||
'common.no': '否',
|
||
'common.or': '或',
|
||
'common.none': '無',
|
||
'common.date': '日期',
|
||
'common.rename': '重新命名',
|
||
'common.name': '名稱',
|
||
'common.email': '郵箱',
|
||
'common.password': '密碼',
|
||
'common.saving': '儲存中...',
|
||
'common.saved': '已儲存',
|
||
'common.expand': '展開',
|
||
'common.collapse': '折疊',
|
||
'trips.memberRemoved': '{username} 已移除',
|
||
'trips.memberRemoveError': '移除失敗',
|
||
'trips.memberAdded': '{username} 已新增',
|
||
'trips.memberAddError': '新增失敗',
|
||
'trips.reminder': '提醒',
|
||
'trips.reminderNone': '無',
|
||
'trips.reminderDay': '天',
|
||
'trips.reminderDays': '天',
|
||
'trips.reminderCustom': '自定義',
|
||
'trips.reminderDaysBefore': '天前提醒',
|
||
'trips.reminderDisabledHint': '旅行提醒已停用。請在管理 > 設定 > 通知中啟用。',
|
||
'common.update': '更新',
|
||
'common.change': '修改',
|
||
'common.uploading': '上傳中…',
|
||
'common.backToPlanning': '返回規劃',
|
||
'common.reset': '重置',
|
||
|
||
// Navbar
|
||
'nav.trip': '旅行',
|
||
'nav.share': '分享',
|
||
'nav.settings': '設定',
|
||
'nav.admin': '管理',
|
||
'nav.logout': '退出登入',
|
||
'nav.lightMode': '淺色模式',
|
||
'nav.darkMode': '深色模式',
|
||
'nav.autoMode': '自動模式',
|
||
'nav.administrator': '管理員',
|
||
|
||
// Dashboard
|
||
'dashboard.title': '我的旅行',
|
||
'dashboard.subtitle.loading': '載入旅行中...',
|
||
'dashboard.subtitle.trips': '{count} 次旅行({archived} 已歸檔)',
|
||
'dashboard.subtitle.empty': '開始你的第一次旅行',
|
||
'dashboard.subtitle.activeOne': '{count} 個進行中的旅行',
|
||
'dashboard.subtitle.activeMany': '{count} 個進行中的旅行',
|
||
'dashboard.subtitle.archivedSuffix': ' · {count} 已歸檔',
|
||
'dashboard.newTrip': '新建旅行',
|
||
'dashboard.gridView': '網格檢視',
|
||
'dashboard.listView': '列表檢視',
|
||
'dashboard.currency': '貨幣',
|
||
'dashboard.timezone': '時區',
|
||
'dashboard.localTime': '本地',
|
||
'dashboard.timezoneCustomTitle': '自定義時區',
|
||
'dashboard.timezoneCustomLabelPlaceholder': '標籤(可選)',
|
||
'dashboard.timezoneCustomTzPlaceholder': '如 America/New_York',
|
||
'dashboard.timezoneCustomAdd': '新增',
|
||
'dashboard.timezoneCustomErrorEmpty': '請輸入時區識別符號',
|
||
'dashboard.timezoneCustomErrorInvalid': '無效的時區。請使用 Europe/Berlin 這樣的格式',
|
||
'dashboard.timezoneCustomErrorDuplicate': '已新增',
|
||
'dashboard.emptyTitle': '暫無旅行',
|
||
'dashboard.emptyText': '建立你的第一次旅行,開始規劃吧!',
|
||
'dashboard.emptyButton': '建立第一次旅行',
|
||
'dashboard.nextTrip': '下次旅行',
|
||
'dashboard.shared': '共享',
|
||
'dashboard.sharedBy': '由 {name} 分享',
|
||
'dashboard.days': '天',
|
||
'dashboard.places': '地點',
|
||
'dashboard.members': '旅伴',
|
||
'dashboard.archive': '歸檔',
|
||
'dashboard.copyTrip': '複製',
|
||
'dashboard.copySuffix': '副本',
|
||
'dashboard.restore': '恢復',
|
||
'dashboard.archived': '已歸檔',
|
||
'dashboard.status.ongoing': '進行中',
|
||
'dashboard.status.today': '今天',
|
||
'dashboard.status.tomorrow': '明天',
|
||
'dashboard.status.past': '已結束',
|
||
'dashboard.status.daysLeft': '還剩 {count} 天',
|
||
'dashboard.toast.loadError': '載入旅行失敗',
|
||
'dashboard.toast.created': '旅行建立成功!',
|
||
'dashboard.toast.createError': '建立旅行失敗',
|
||
'dashboard.toast.updated': '旅行已更新!',
|
||
'dashboard.toast.updateError': '更新旅行失敗',
|
||
'dashboard.toast.deleted': '旅行已刪除',
|
||
'dashboard.toast.deleteError': '刪除旅行失敗',
|
||
'dashboard.toast.archived': '旅行已歸檔',
|
||
'dashboard.toast.archiveError': '歸檔旅行失敗',
|
||
'dashboard.toast.restored': '旅行已恢復',
|
||
'dashboard.toast.restoreError': '恢復旅行失敗',
|
||
'dashboard.toast.copied': '旅行已複製!',
|
||
'dashboard.toast.copyError': '複製旅行失敗',
|
||
'dashboard.confirm.delete': '刪除旅行「{title}」?所有地點和計劃將被永久刪除。',
|
||
'dashboard.editTrip': '編輯旅行',
|
||
'dashboard.createTrip': '建立新旅行',
|
||
'dashboard.tripTitle': '標題',
|
||
'dashboard.tripTitlePlaceholder': '如:日本夏日之旅',
|
||
'dashboard.tripDescription': '描述',
|
||
'dashboard.tripDescriptionPlaceholder': '這次旅行是關於什麼的?',
|
||
'dashboard.startDate': '開始日期',
|
||
'dashboard.endDate': '結束日期',
|
||
'dashboard.dayCount': '天數',
|
||
'dashboard.dayCountHint': '未設定旅行日期時,要規劃的天數。',
|
||
'dashboard.noDateHint': '未設定日期——將預設建立 7 天。你可以隨時修改。',
|
||
'dashboard.coverImage': '封面圖片',
|
||
'dashboard.addCoverImage': '新增封面圖片',
|
||
'dashboard.addMembers': '旅伴',
|
||
'dashboard.addMember': '新增成員',
|
||
'dashboard.coverSaved': '封面圖片已儲存',
|
||
'dashboard.coverUploadError': '上傳失敗',
|
||
'dashboard.coverRemoveError': '移除失敗',
|
||
'dashboard.titleRequired': '標題為必填項',
|
||
'dashboard.endDateError': '結束日期必須晚於開始日期',
|
||
|
||
// Settings
|
||
'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.routeCalculation': '路線計算',
|
||
'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': '通知事件由管理員配置。',
|
||
'admin.notifications.title': '通知',
|
||
'admin.notifications.hint': '選擇一個通知渠道。一次只能啟用一個。',
|
||
'admin.notifications.none': '已停用',
|
||
'admin.notifications.email': '電子郵件 (SMTP)',
|
||
'admin.notifications.webhook': 'Webhook',
|
||
'admin.notifications.save': '儲存通知設定',
|
||
'admin.notifications.saved': '通知設定已儲存',
|
||
'admin.notifications.testWebhook': '傳送測試 Webhook',
|
||
'admin.notifications.testWebhookSuccess': '測試 Webhook 傳送成功',
|
||
'admin.notifications.testWebhookFailed': '測試 Webhook 傳送失敗',
|
||
'admin.notifications.emailPanel.title': '電子郵件 (SMTP)',
|
||
'admin.notifications.webhookPanel.title': 'Webhook',
|
||
'admin.notifications.inappPanel.title': '應用程式內通知',
|
||
'admin.notifications.inappPanel.hint': '應用程式內通知始終啟用,無法全域性停用。',
|
||
'admin.notifications.adminWebhookPanel.title': '管理員 Webhook',
|
||
'admin.notifications.adminWebhookPanel.hint': '此 Webhook 專用於管理員通知(例如版本提醒)。它與每位使用者的 Webhook 分開,設定後始終會觸發。',
|
||
'admin.notifications.adminWebhookPanel.saved': '管理員 Webhook URL 已儲存',
|
||
'admin.notifications.adminWebhookPanel.testSuccess': '測試 Webhook 傳送成功',
|
||
'admin.notifications.adminWebhookPanel.testFailed': '測試 Webhook 傳送失敗',
|
||
'admin.notifications.adminWebhookPanel.alwaysOnHint': '配置 URL 後,管理員 Webhook 始終觸發',
|
||
'admin.notifications.ntfy': 'Ntfy',
|
||
'admin.ntfy.hint': '允許使用者設定自己的 ntfy 主題以接收推播通知。在下方設定預設伺服器以預先填入使用者設定。',
|
||
'admin.notifications.testNtfy': '傳送測試 Ntfy',
|
||
'admin.notifications.testNtfySuccess': '測試 Ntfy 傳送成功',
|
||
'admin.notifications.testNtfyFailed': '測試 Ntfy 失敗',
|
||
'admin.notifications.adminNtfyPanel.title': '管理員 Ntfy',
|
||
'admin.notifications.adminNtfyPanel.hint': '此 Ntfy 主題專用於管理員通知(例如版本提醒)。它與每位使用者的主題分開,設定後始終會觸發。',
|
||
'admin.notifications.adminNtfyPanel.serverLabel': 'Ntfy 伺服器 URL',
|
||
'admin.notifications.adminNtfyPanel.serverHint': '同時用作使用者 ntfy 通知的預設伺服器。留空則預設使用 ntfy.sh。使用者可在自己的設定中覆寫此項。',
|
||
'admin.notifications.adminNtfyPanel.serverPlaceholder': 'https://ntfy.sh',
|
||
'admin.notifications.adminNtfyPanel.topicLabel': '管理員主題',
|
||
'admin.notifications.adminNtfyPanel.topicPlaceholder': 'trek-admin-alerts',
|
||
'admin.notifications.adminNtfyPanel.tokenLabel': '存取權杖(選填)',
|
||
'admin.notifications.adminNtfyPanel.tokenCleared': '管理員存取權杖已清除',
|
||
'admin.notifications.adminNtfyPanel.saved': '管理員 Ntfy 設定已儲存',
|
||
'admin.notifications.adminNtfyPanel.test': '傳送測試 Ntfy',
|
||
'admin.notifications.adminNtfyPanel.testSuccess': '測試 Ntfy 傳送成功',
|
||
'admin.notifications.adminNtfyPanel.testFailed': '測試 Ntfy 失敗',
|
||
'admin.notifications.adminNtfyPanel.alwaysOnHint': '設定主題後管理員 Ntfy 始終觸發',
|
||
'admin.notifications.adminNotificationsHint': '配置哪些渠道傳遞僅管理員通知(例如版本提醒)。',
|
||
'admin.notifications.tripReminders.title': '行程提醒',
|
||
'admin.notifications.tripReminders.hint': '在行程開始前發送提醒通知(需要在行程中設定提醒天數)。',
|
||
'admin.notifications.tripReminders.enabled': '行程提醒已啟用',
|
||
'admin.notifications.tripReminders.disabled': '行程提醒已停用',
|
||
'admin.smtp.title': '郵件與通知',
|
||
'admin.smtp.hint': '用於傳送電子郵件通知的 SMTP 配置。',
|
||
'admin.smtp.testButton': '傳送測試郵件',
|
||
'admin.webhook.hint': '允許使用者配置自己的 Webhook URL 以接收通知(Discord、Slack 等)。',
|
||
'admin.smtp.testSuccess': '測試郵件傳送成功',
|
||
'admin.smtp.testFailed': '測試郵件傳送失敗',
|
||
'dayplan.icsTooltip': '匯出日曆 (ICS)',
|
||
'share.linkTitle': '公開連結',
|
||
'share.linkHint': '建立一個連結,任何人無需登入即可檢視此旅行。僅可檢視,無法編輯。',
|
||
'share.createLink': '建立連結',
|
||
'share.deleteLink': '刪除連結',
|
||
'share.createError': '無法建立連結',
|
||
'common.copy': '複製',
|
||
'common.copied': '已複製',
|
||
'share.permMap': '地圖與計劃',
|
||
'share.permBookings': '預訂',
|
||
'share.permPacking': '行李',
|
||
'shared.expired': '連結已過期或無效',
|
||
'shared.expiredHint': '此共享旅行連結已失效。',
|
||
'shared.readOnly': '只讀共享檢視',
|
||
'shared.tabPlan': '計劃',
|
||
'shared.tabBookings': '預訂',
|
||
'shared.tabPacking': '行李',
|
||
'shared.tabBudget': '預算',
|
||
'shared.tabChat': '聊天',
|
||
'shared.days': '天',
|
||
'shared.places': '個地點',
|
||
'shared.other': '其他',
|
||
'shared.totalBudget': '總預算',
|
||
'shared.messages': '條訊息',
|
||
'shared.sharedVia': '透過以下分享',
|
||
'shared.confirmed': '已確認',
|
||
'shared.pending': '待確認',
|
||
'share.permBudget': '預算',
|
||
'share.permCollab': '聊天',
|
||
'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。需要 HTTPS(localhost 除外)。需要完全符合。',
|
||
'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.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': '上傳失敗',
|
||
|
||
// Login
|
||
'login.error': '登入失敗,請檢查你的憑據。',
|
||
'login.tagline': '你的旅行。\n你的計劃。',
|
||
'login.description': '透過互動地圖、預算管理和即時同步,協同規劃旅行。',
|
||
'login.features.maps': '互動地圖',
|
||
'login.features.mapsDesc': 'Google Places、路線和聚類',
|
||
'login.features.realtime': '即時同步',
|
||
'login.features.realtimeDesc': '透過 WebSocket 協同規劃',
|
||
'login.features.budget': '預算跟蹤',
|
||
'login.features.budgetDesc': '分類、圖表和人均費用',
|
||
'login.features.collab': '協作',
|
||
'login.features.collabDesc': '多使用者共享旅行',
|
||
'login.features.packing': '行李清單',
|
||
'login.features.packingDesc': '分類、進度和建議',
|
||
'login.features.bookings': '預訂',
|
||
'login.features.bookingsDesc': '航班、酒店、餐廳等',
|
||
'login.features.files': '文件',
|
||
'login.features.filesDesc': '上傳和管理文件',
|
||
'login.features.routes': '智慧路線',
|
||
'login.features.routesDesc': '自動最佳化和匯出到 Google Maps',
|
||
'login.selfHosted': '自託管 · 開源 · 資料由你掌控',
|
||
'login.title': '登入',
|
||
'login.subtitle': '歡迎回來',
|
||
'login.signingIn': '登入中…',
|
||
'login.signIn': '登入',
|
||
'login.createAdmin': '建立管理員賬戶',
|
||
'login.createAdminHint': '為 TREK 設定第一個管理員賬戶。',
|
||
'login.setNewPassword': '設定新密碼',
|
||
'login.setNewPasswordHint': '您必須更改密碼才能繼續。',
|
||
'login.createAccount': '建立賬戶',
|
||
'login.createAccountHint': '註冊新賬戶。',
|
||
'login.creating': '建立中…',
|
||
'login.noAccount': '還沒有賬戶?',
|
||
'login.hasAccount': '已有賬戶?',
|
||
'login.register': '註冊',
|
||
'login.emailPlaceholder': 'your@email.com',
|
||
'login.username': '使用者名稱',
|
||
'login.oidc.registrationDisabled': '註冊已關閉。請聯絡管理員。',
|
||
'login.oidc.noEmail': '未從提供商獲取到郵箱。',
|
||
'login.mfaTitle': '雙因素認證',
|
||
'login.mfaSubtitle': '請輸入身份驗證器應用中的 6 位驗證碼。',
|
||
'login.mfaCodeLabel': '驗證碼',
|
||
'login.mfaCodeRequired': '請輸入身份驗證器應用中的驗證碼。',
|
||
'login.mfaHint': '開啟 Google Authenticator、Authy 或其他 TOTP 應用。',
|
||
'login.mfaBack': '← 返回登入',
|
||
'login.mfaVerify': '驗證',
|
||
'login.invalidInviteLink': '邀請連結無效或已過期',
|
||
'login.oidcFailed': 'OIDC 登入失敗',
|
||
'login.usernameRequired': '使用者名稱為必填',
|
||
'login.passwordMinLength': '密碼至少需要8個字元',
|
||
'login.forgotPassword': '忘記密碼?',
|
||
'login.forgotPasswordTitle': '重設密碼',
|
||
'login.forgotPasswordBody': '請輸入您註冊時使用的電子郵件。若帳號存在,我們將傳送重設連結。',
|
||
'login.forgotPasswordSubmit': '傳送重設連結',
|
||
'login.forgotPasswordSentTitle': '請查看您的電子郵件',
|
||
'login.forgotPasswordSentBody': '若此電子郵件存在帳號,重設連結正在傳送中。連結將於 60 分鐘後失效。',
|
||
'login.forgotPasswordSmtpHintOff': '提醒:管理員尚未設定 SMTP,重設連結將寫入伺服器控制台,而非透過電子郵件寄送。',
|
||
'login.backToLogin': '返回登入',
|
||
'login.newPassword': '新密碼',
|
||
'login.confirmPassword': '確認新密碼',
|
||
'login.passwordsDontMatch': '兩次輸入的密碼不一致',
|
||
'login.mfaCode': '2FA 驗證碼',
|
||
'login.resetPasswordTitle': '設定新密碼',
|
||
'login.resetPasswordBody': '請選擇您在此處尚未使用過的強密碼。至少 8 個字元。',
|
||
'login.resetPasswordMfaBody': '請輸入您的 2FA 驗證碼或備用代碼以完成重設。',
|
||
'login.resetPasswordSubmit': '重設密碼',
|
||
'login.resetPasswordVerify': '驗證並重設',
|
||
'login.resetPasswordSuccessTitle': '密碼已更新',
|
||
'login.resetPasswordSuccessBody': '您現在可以使用新密碼登入。',
|
||
'login.resetPasswordInvalidLink': '無效的重設連結',
|
||
'login.resetPasswordInvalidLinkBody': '此連結遺失或已損壞。請重新申請以繼續。',
|
||
'login.resetPasswordFailed': '重設失敗。連結可能已過期。',
|
||
'login.oidc.tokenFailed': '認證失敗。',
|
||
'login.oidc.invalidState': '會話無效,請重試。',
|
||
'login.demoFailed': '演示登入失敗',
|
||
'login.oidcSignIn': '透過 {name} 登入',
|
||
'login.oidcOnly': '密碼登入已關閉。請透過 SSO 提供商登入。',
|
||
'login.oidcLoggedOut': '您已登出。請重新透過 SSO 提供商登入。',
|
||
'login.demoHint': '試用演示——無需註冊',
|
||
|
||
// Register
|
||
'register.passwordMismatch': '兩次輸入的密碼不一致',
|
||
'register.passwordTooShort': '密碼至少需要 8 個字元',
|
||
'register.failed': '註冊失敗',
|
||
'register.getStarted': '開始使用',
|
||
'register.subtitle': '建立賬戶,開始規劃你的夢想旅行。',
|
||
'register.feature1': '無限旅行計劃',
|
||
'register.feature2': '互動地圖檢視',
|
||
'register.feature3': '管理地點和分類',
|
||
'register.feature4': '跟蹤預訂',
|
||
'register.feature5': '建立行李清單',
|
||
'register.feature6': '儲存照片和檔案',
|
||
'register.createAccount': '建立賬戶',
|
||
'register.startPlanning': '開始規劃你的旅行',
|
||
'register.minChars': '至少 6 個字元',
|
||
'register.confirmPassword': '確認密碼',
|
||
'register.repeatPassword': '重複密碼',
|
||
'register.registering': '註冊中...',
|
||
'register.register': '註冊',
|
||
'register.hasAccount': '已有賬戶?',
|
||
'register.signIn': '登入',
|
||
|
||
// Admin
|
||
'admin.title': '管理後臺',
|
||
'admin.subtitle': '使用者管理和系統設定',
|
||
'admin.tabs.users': '使用者',
|
||
'admin.tabs.categories': '分類',
|
||
'admin.tabs.backup': '備份',
|
||
'admin.tabs.audit': '審計日誌',
|
||
'admin.tabs.notifications': '通知',
|
||
'admin.stats.users': '使用者',
|
||
'admin.stats.trips': '旅行',
|
||
'admin.stats.places': '地點',
|
||
'admin.stats.photos': '照片',
|
||
'admin.stats.files': '檔案',
|
||
'admin.table.user': '使用者',
|
||
'admin.table.email': '郵箱',
|
||
'admin.table.role': '角色',
|
||
'admin.table.created': '建立時間',
|
||
'admin.table.lastLogin': '最後登入',
|
||
'admin.table.actions': '操作',
|
||
'admin.you': '(你)',
|
||
'admin.editUser': '編輯使用者',
|
||
'admin.newPassword': '新密碼',
|
||
'admin.newPasswordHint': '留空則保持當前密碼',
|
||
'admin.deleteUser': '刪除使用者「{name}」?所有旅行將被永久刪除。',
|
||
'admin.deleteUserTitle': '刪除使用者',
|
||
'admin.newPasswordPlaceholder': '輸入新密碼…',
|
||
'admin.toast.loadError': '載入管理資料失敗',
|
||
'admin.toast.userUpdated': '使用者已更新',
|
||
'admin.toast.updateError': '更新失敗',
|
||
'admin.toast.userDeleted': '使用者已刪除',
|
||
'admin.toast.deleteError': '刪除失敗',
|
||
'admin.toast.cannotDeleteSelf': '不能刪除自己的賬戶',
|
||
'admin.toast.userCreated': '使用者已建立',
|
||
'admin.toast.createError': '建立使用者失敗',
|
||
'admin.toast.fieldsRequired': '使用者名稱、郵箱和密碼為必填項',
|
||
'admin.createUser': '建立使用者',
|
||
'admin.invite.title': '邀請連結',
|
||
'admin.invite.subtitle': '建立一次性註冊連結',
|
||
'admin.invite.create': '建立連結',
|
||
'admin.invite.createAndCopy': '建立並複製',
|
||
'admin.invite.empty': '尚未建立邀請連結',
|
||
'admin.invite.maxUses': '最大使用次數',
|
||
'admin.invite.expiry': '有效期',
|
||
'admin.invite.uses': '已使用',
|
||
'admin.invite.expiresAt': '過期時間',
|
||
'admin.invite.createdBy': '由',
|
||
'admin.invite.active': '有效',
|
||
'admin.invite.expired': '已過期',
|
||
'admin.invite.usedUp': '已用完',
|
||
'admin.invite.copied': '邀請連結已複製',
|
||
'admin.invite.copyLink': '複製連結',
|
||
'admin.invite.deleted': '邀請連結已刪除',
|
||
'admin.invite.createError': '建立連結失敗',
|
||
'admin.invite.deleteError': '刪除連結失敗',
|
||
'admin.tabs.settings': '設定',
|
||
'admin.allowRegistration': '允許註冊',
|
||
'admin.allowRegistrationHint': '新使用者可以自行註冊',
|
||
'admin.authMethods': 'Authentication Methods',
|
||
'admin.passwordLogin': 'Password Login',
|
||
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
|
||
'admin.passwordRegistration': 'Password Registration',
|
||
'admin.passwordRegistrationHint': 'Allow new users to register with email and password',
|
||
'admin.oidcLogin': 'SSO Login',
|
||
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
|
||
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
||
'admin.oidcRegistrationHint': 'Automatically create accounts for new SSO users',
|
||
'admin.envOverrideHint': 'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
|
||
'admin.lockoutWarning': 'At least one login method must remain enabled',
|
||
'admin.requireMfa': '要求雙因素身份驗證(2FA)',
|
||
'admin.requireMfaHint': '未啟用 2FA 的使用者必須先完成設定中的配置才能使用應用。',
|
||
'admin.apiKeys': 'API 金鑰',
|
||
'admin.apiKeysHint': '可選。啟用地點的擴充套件資料,如照片和天氣。',
|
||
'admin.mapsKey': 'Google Maps API 金鑰',
|
||
'admin.mapsKeyHint': '用於地點搜尋。在 console.cloud.google.com 獲取',
|
||
'admin.mapsKeyHintLong': '沒有 API 金鑰時,使用 OpenStreetMap 搜尋地點。有了 Google API 金鑰,還可以載入照片、評分和營業時間。在 console.cloud.google.com 獲取。',
|
||
'admin.recommended': '推薦',
|
||
'admin.weatherKey': 'OpenWeatherMap API 金鑰',
|
||
'admin.weatherKeyHint': '用於天氣資料。在 openweathermap.org 免費獲取',
|
||
'admin.validateKey': '測試',
|
||
'admin.keyValid': '已連線',
|
||
'admin.keyInvalid': '無效',
|
||
'admin.keySaved': 'API 金鑰已儲存',
|
||
'admin.oidcTitle': '單點登入 (OIDC)',
|
||
'admin.oidcSubtitle': '允許透過 Google、Apple、Authentik 或 Keycloak 等外部提供商登入。',
|
||
'admin.oidcDisplayName': '顯示名稱',
|
||
'admin.oidcIssuer': '頒發者 URL',
|
||
'admin.oidcIssuerHint': '提供商的 OpenID Connect 頒發者 URL。如 https://accounts.google.com',
|
||
'admin.oidcSaved': 'OIDC 配置已儲存',
|
||
'admin.oidcOnlyMode': '停用密碼登入',
|
||
'admin.oidcOnlyModeHint': '啟用後,僅允許 SSO 登入。密碼登入和註冊將被停用。',
|
||
|
||
// File Types
|
||
'admin.fileTypes': '允許的檔案型別',
|
||
'admin.fileTypesHint': '配置使用者可以上傳的檔案型別。',
|
||
'admin.fileTypesFormat': '以逗號分隔的副檔名(如 jpg,png,pdf,doc)。使用 * 允許所有型別。',
|
||
'admin.fileTypesSaved': '檔案型別設定已儲存',
|
||
|
||
'admin.placesPhotos.title': '地點照片',
|
||
'admin.placesPhotos.subtitle': '從 Google Places API 獲取照片。停用可節省 API 配額。Wikimedia 照片不受影響。',
|
||
'admin.placesAutocomplete.title': '地點自動補全',
|
||
'admin.placesAutocomplete.subtitle': '使用 Google Places API 提供搜尋建議。停用可節省 API 配額。',
|
||
'admin.placesDetails.title': '地點詳情',
|
||
'admin.placesDetails.subtitle': '從 Google Places API 獲取地點詳細資訊(營業時間、評分、網站)。停用可節省 API 配額。',
|
||
'admin.bagTracking.title': '行李追蹤',
|
||
'admin.bagTracking.subtitle': '為打包物品啟用重量和行李分配',
|
||
'admin.collab.chat.title': '聊天',
|
||
'admin.collab.chat.subtitle': '即時訊息協作',
|
||
'admin.collab.notes.title': '筆記',
|
||
'admin.collab.notes.subtitle': '共享筆記和文件',
|
||
'admin.collab.polls.title': '投票',
|
||
'admin.collab.polls.subtitle': '群組投票和表決',
|
||
'admin.collab.whatsnext.title': '下一步',
|
||
'admin.collab.whatsnext.subtitle': '活動建議和後續步驟',
|
||
'admin.tabs.config': '配置',
|
||
'admin.tabs.defaults': '用戶預設設定',
|
||
'admin.defaultSettings.title': '用戶預設設定',
|
||
'admin.defaultSettings.description': '設定整個執行個體的預設值。未更改設定的用戶將看到這些值。用戶自己的更改始終優先。',
|
||
'admin.defaultSettings.saved': '預設值已儲存',
|
||
'admin.defaultSettings.reset': '重設為內建預設值',
|
||
'admin.defaultSettings.resetToBuiltIn': '重設',
|
||
'admin.tabs.templates': '打包模板',
|
||
'admin.packingTemplates.title': '打包模板',
|
||
'admin.packingTemplates.subtitle': '建立可複用的旅行打包清單',
|
||
'admin.packingTemplates.create': '新建模板',
|
||
'admin.packingTemplates.namePlaceholder': '模板名稱(如:海灘度假)',
|
||
'admin.packingTemplates.empty': '尚未建立模板',
|
||
'admin.packingTemplates.items': '物品',
|
||
'admin.packingTemplates.categories': '分類',
|
||
'admin.packingTemplates.itemName': '物品名稱',
|
||
'admin.packingTemplates.itemCategory': '分類',
|
||
'admin.packingTemplates.categoryName': '分類名稱(如:衣物)',
|
||
'admin.packingTemplates.addCategory': '新增分類',
|
||
'admin.packingTemplates.created': '模板已建立',
|
||
'admin.packingTemplates.deleted': '模板已刪除',
|
||
'admin.packingTemplates.loadError': '載入模板失敗',
|
||
'admin.packingTemplates.createError': '建立模板失敗',
|
||
'admin.packingTemplates.deleteError': '刪除模板失敗',
|
||
'admin.packingTemplates.saveError': '儲存失敗',
|
||
|
||
// Addons
|
||
'admin.tabs.addons': '擴充套件',
|
||
'admin.addons.title': '擴充套件',
|
||
'admin.addons.subtitle': '啟用或停用功能以自定義你的 TREK 體驗。',
|
||
'admin.addons.catalog.memories.name': '照片 (Immich)',
|
||
'admin.addons.catalog.memories.description': '透過 Immich 例項分享旅行照片',
|
||
'admin.addons.catalog.mcp.name': 'MCP',
|
||
'admin.addons.catalog.mcp.description': '用於 AI 助手整合的模型上下文協議',
|
||
'admin.addons.catalog.packing.name': '行李',
|
||
'admin.addons.catalog.packing.description': '每次旅行的行李準備清單',
|
||
'admin.addons.catalog.budget.name': '預算',
|
||
'admin.addons.catalog.budget.description': '跟蹤支出並規劃旅行預算',
|
||
'admin.addons.catalog.documents.name': '文件',
|
||
'admin.addons.catalog.documents.description': '儲存和管理旅行文件',
|
||
'admin.addons.catalog.vacay.name': 'Vacay',
|
||
'admin.addons.catalog.vacay.description': '帶日曆檢視的個人假期規劃器',
|
||
'admin.addons.catalog.atlas.name': 'Atlas',
|
||
'admin.addons.catalog.atlas.description': '標記已訪問國家和旅行統計的世界地圖',
|
||
'admin.addons.catalog.collab.name': 'Collab',
|
||
'admin.addons.catalog.collab.description': '旅行規劃的即時筆記、投票和聊天',
|
||
'admin.addons.subtitleBefore': '啟用或停用功能以自定義你的 ',
|
||
'admin.addons.subtitleAfter': ' 體驗。',
|
||
'admin.addons.enabled': '已啟用',
|
||
'admin.addons.disabled': '已停用',
|
||
'admin.addons.type.trip': '旅行',
|
||
'admin.addons.type.global': '全域性',
|
||
'admin.addons.type.integration': '整合',
|
||
'admin.addons.tripHint': '在每次旅行中作為標籤頁顯示',
|
||
'admin.addons.globalHint': '在主導航中作為獨立板塊顯示',
|
||
'admin.addons.integrationHint': '後端服務和 API 整合,無專屬頁面',
|
||
'admin.addons.toast.updated': '擴充套件已更新',
|
||
'admin.addons.toast.error': '更新擴充套件失敗',
|
||
'admin.addons.noAddons': '暫無可用擴充套件',
|
||
// Weather info
|
||
'admin.weather.title': '天氣資料',
|
||
'admin.weather.badge': '自 2026 年 3 月 24 日起',
|
||
'admin.weather.description': 'TREK 使用 Open-Meteo 作為天氣資料來源。Open-Meteo 是免費的開源天氣服務——無需 API 金鑰。',
|
||
'admin.weather.forecast': '16 天天氣預報',
|
||
'admin.weather.forecastDesc': '之前為 5 天 (OpenWeatherMap)',
|
||
'admin.weather.climate': '歷史氣候資料',
|
||
'admin.weather.climateDesc': '16 天預報之外的日期使用過去 85 年的平均值',
|
||
'admin.weather.requests': '每天 10,000 次請求',
|
||
'admin.weather.requestsDesc': '免費,無需 API 金鑰',
|
||
'admin.weather.locationHint': '天氣基於每天中第一個有座標的地點。如果當天沒有分配地點,則使用地點列表中的任意地點作為參考。',
|
||
|
||
// MCP Tokens
|
||
'admin.tabs.mcpTokens': 'MCP 存取',
|
||
'admin.mcpTokens.title': 'MCP 存取',
|
||
'admin.mcpTokens.subtitle': '管理所有使用者的 OAuth 工作階段和 API 令牌',
|
||
'admin.mcpTokens.sectionTitle': 'API 令牌',
|
||
'admin.mcpTokens.owner': '所有者',
|
||
'admin.mcpTokens.tokenName': '令牌名稱',
|
||
'admin.mcpTokens.created': '建立時間',
|
||
'admin.mcpTokens.lastUsed': '最後使用',
|
||
'admin.mcpTokens.never': '從未',
|
||
'admin.mcpTokens.empty': '尚未建立任何 MCP 令牌',
|
||
'admin.mcpTokens.deleteTitle': '刪除令牌',
|
||
'admin.mcpTokens.deleteMessage': '此令牌將立即被撤銷。使用者將失去透過此令牌的 MCP 訪問許可權。',
|
||
'admin.mcpTokens.deleteSuccess': '令牌已刪除',
|
||
'admin.mcpTokens.deleteError': '刪除令牌失敗',
|
||
'admin.mcpTokens.loadError': '載入令牌失敗',
|
||
'admin.oauthSessions.sectionTitle': 'OAuth 工作階段',
|
||
'admin.oauthSessions.clientName': '客戶端',
|
||
'admin.oauthSessions.owner': '所有者',
|
||
'admin.oauthSessions.scopes': '權限範圍',
|
||
'admin.oauthSessions.created': '建立時間',
|
||
'admin.oauthSessions.empty': '目前沒有活躍的 OAuth 工作階段',
|
||
'admin.oauthSessions.revokeTitle': '撤銷工作階段',
|
||
'admin.oauthSessions.revokeMessage': '此 OAuth 工作階段將立即被撤銷。客戶端將失去 MCP 存取權限。',
|
||
'admin.oauthSessions.revokeSuccess': '工作階段已撤銷',
|
||
'admin.oauthSessions.revokeError': '撤銷工作階段失敗',
|
||
'admin.oauthSessions.loadError': '載入 OAuth 工作階段失敗',
|
||
|
||
// GitHub
|
||
'admin.tabs.github': 'GitHub',
|
||
|
||
'admin.audit.subtitle': '安全與管理員操作記錄(備份、使用者、MFA、設定)。',
|
||
'admin.audit.empty': '暫無審計記錄。',
|
||
'admin.audit.refresh': '重新整理',
|
||
'admin.audit.loadMore': '載入更多',
|
||
'admin.audit.showing': '已載入 {count} 條 · 共 {total} 條',
|
||
'admin.audit.col.time': '時間',
|
||
'admin.audit.col.user': '使用者',
|
||
'admin.audit.col.action': '操作',
|
||
'admin.audit.col.resource': '資源',
|
||
'admin.audit.col.ip': 'IP',
|
||
'admin.audit.col.details': '詳情',
|
||
|
||
'admin.github.title': '版本歷史',
|
||
'admin.github.subtitle': '{repo} 的最新更新',
|
||
'admin.github.latest': '最新',
|
||
'admin.github.prerelease': '預釋出',
|
||
'admin.github.showDetails': '顯示詳情',
|
||
'admin.github.hideDetails': '隱藏詳情',
|
||
'admin.github.loadMore': '載入更多',
|
||
'admin.github.loading': '載入中...',
|
||
'admin.github.support': '幫助我繼續開發 TREK',
|
||
'admin.github.error': '載入版本失敗',
|
||
'admin.github.by': '作者',
|
||
|
||
'admin.update.available': '有可用更新',
|
||
'admin.update.text': 'TREK {version} 已釋出。你當前使用的是 {current}。',
|
||
'admin.update.button': '在 GitHub 檢視',
|
||
'admin.update.install': '安裝更新',
|
||
'admin.update.confirmTitle': '確定安裝更新?',
|
||
'admin.update.confirmText': 'TREK 將從 {current} 更新到 {version}。伺服器將自動重啟。',
|
||
'admin.update.dataInfo': '你的所有資料(旅行、使用者、API 金鑰、上傳檔案、Vacay、Atlas、預算)將被保留。',
|
||
'admin.update.warning': '重啟期間應用將短暫不可用。',
|
||
'admin.update.confirm': '立即更新',
|
||
'admin.update.installing': '更新中…',
|
||
'admin.update.success': '更新已安裝!伺服器正在重啟…',
|
||
'admin.update.failed': '更新失敗',
|
||
'admin.update.backupHint': '建議在更新前建立備份。',
|
||
'admin.update.backupLink': '前往備份',
|
||
'admin.update.howTo': '如何更新',
|
||
'admin.update.dockerText': '你的 TREK 例項執行在 Docker 中。要更新到 {version},請在伺服器上執行以下命令:',
|
||
'admin.update.reloadHint': '請在幾秒後重新整理頁面。',
|
||
|
||
// Vacay addon
|
||
'vacay.subtitle': '規劃和管理假期',
|
||
'vacay.settings': '設定',
|
||
'vacay.year': '年份',
|
||
'vacay.addYear': '新增下一年',
|
||
'vacay.addPrevYear': '新增上一年',
|
||
'vacay.removeYear': '移除年份',
|
||
'vacay.removeYearConfirm': '移除 {year}?',
|
||
'vacay.removeYearHint': '該年度所有假期記錄和公司假日將被永久刪除。',
|
||
'vacay.remove': '移除',
|
||
'vacay.persons': '成員',
|
||
'vacay.noPersons': '暫無成員',
|
||
'vacay.addPerson': '新增成員',
|
||
'vacay.editPerson': '編輯成員',
|
||
'vacay.removePerson': '移除成員',
|
||
'vacay.removePersonConfirm': '移除 {name}?',
|
||
'vacay.removePersonHint': '該成員的所有假期記錄將被永久刪除。',
|
||
'vacay.personName': '姓名',
|
||
'vacay.personNamePlaceholder': '輸入姓名',
|
||
'vacay.color': '顏色',
|
||
'vacay.add': '新增',
|
||
'vacay.legend': '圖例',
|
||
'vacay.publicHoliday': '公共假日',
|
||
'vacay.companyHoliday': '公司假日',
|
||
'vacay.weekend': '週末',
|
||
'vacay.modeVacation': '休假',
|
||
'vacay.modeCompany': '公司假日',
|
||
'vacay.entitlement': '年假額度',
|
||
'vacay.entitlementDays': '天',
|
||
'vacay.used': '已用',
|
||
'vacay.remaining': '剩餘',
|
||
'vacay.carriedOver': '從 {year} 結轉',
|
||
'vacay.blockWeekends': '鎖定週末',
|
||
'vacay.blockWeekendsHint': '禁止在週六和週日安排假期',
|
||
'vacay.weekendDays': '週末',
|
||
'vacay.mon': '週一',
|
||
'vacay.tue': '週二',
|
||
'vacay.wed': '週三',
|
||
'vacay.thu': '週四',
|
||
'vacay.fri': '週五',
|
||
'vacay.sat': '週六',
|
||
'vacay.sun': '週日',
|
||
'vacay.publicHolidays': '公共假日',
|
||
'vacay.publicHolidaysHint': '在日曆中標記公共假日',
|
||
'vacay.selectCountry': '選擇國家',
|
||
'vacay.selectRegion': '選擇地區(可選)',
|
||
'vacay.companyHolidays': '公司假日',
|
||
'vacay.companyHolidaysHint': '允許標記公司統一休假日',
|
||
'vacay.companyHolidaysNoDeduct': '公司假日不計入年假天數。',
|
||
'vacay.weekStart': '每週開始於',
|
||
'vacay.weekStartHint': '選擇日曆週從週一還是週日開始',
|
||
'vacay.carryOver': '結轉',
|
||
'vacay.carryOverHint': '自動將剩餘年假天數結轉到下一年',
|
||
'vacay.sharing': '共享',
|
||
'vacay.sharingHint': '與其他 TREK 使用者共享你的假期計劃',
|
||
'vacay.owner': '所有者',
|
||
'vacay.shareEmailPlaceholder': 'TREK 使用者郵箱',
|
||
'vacay.shareSuccess': '計劃共享成功',
|
||
'vacay.shareError': '無法共享計劃',
|
||
'vacay.dissolve': '解除合併',
|
||
'vacay.dissolveHint': '重新分離日曆。你的記錄將被保留。',
|
||
'vacay.dissolveAction': '解除',
|
||
'vacay.dissolved': '日曆已分離',
|
||
'vacay.fusedWith': '已合併',
|
||
'vacay.you': '你',
|
||
'vacay.noData': '暫無資料',
|
||
'vacay.changeColor': '更改顏色',
|
||
'vacay.inviteUser': '邀請使用者',
|
||
'vacay.inviteHint': '邀請其他 TREK 使用者共享合併的假期日曆。',
|
||
'vacay.selectUser': '選擇使用者',
|
||
'vacay.sendInvite': '傳送邀請',
|
||
'vacay.inviteSent': '邀請已傳送',
|
||
'vacay.inviteError': '無法傳送邀請',
|
||
'vacay.pending': '待處理',
|
||
'vacay.noUsersAvailable': '沒有可用使用者',
|
||
'vacay.accept': '接受',
|
||
'vacay.decline': '拒絕',
|
||
'vacay.acceptFusion': '接受併合並',
|
||
'vacay.inviteTitle': '合併請求',
|
||
'vacay.inviteWantsToFuse': '想要與你共享假期日曆。',
|
||
'vacay.fuseInfo1': '你們雙方將在一個共享日曆中看到所有假期記錄。',
|
||
'vacay.fuseInfo2': '雙方都可以為對方建立和編輯記錄。',
|
||
'vacay.fuseInfo3': '雙方都可以刪除記錄和修改年假額度。',
|
||
'vacay.fuseInfo4': '公共假日和公司假日等設定將共享。',
|
||
'vacay.fuseInfo5': '任何一方都可以隨時解除合併。你的記錄將被保留。',
|
||
'vacay.addCalendar': '新增日曆',
|
||
'vacay.calendarColor': '顏色',
|
||
'vacay.calendarLabel': '標籤',
|
||
'vacay.noCalendars': '無日曆',
|
||
'nav.myTrips': '我的旅行',
|
||
|
||
// Atlas addon
|
||
'atlas.subtitle': '你的全球旅行足跡',
|
||
'atlas.countries': '國家',
|
||
'atlas.trips': '旅行',
|
||
'atlas.places': '地點',
|
||
'atlas.days': '天',
|
||
'atlas.visitedCountries': '已訪問國家',
|
||
'atlas.cities': '城市',
|
||
'atlas.noData': '暫無旅行資料',
|
||
'atlas.noDataHint': '建立旅行並新增地點以檢視世界地圖',
|
||
'atlas.lastTrip': '上次旅行',
|
||
'atlas.nextTrip': '下次旅行',
|
||
'atlas.daysLeft': '天后出發',
|
||
'atlas.streak': '連續',
|
||
'atlas.year': '年',
|
||
'atlas.years': '年',
|
||
'atlas.yearInRow': '年連續',
|
||
'atlas.yearsInRow': '年連續',
|
||
'atlas.tripIn': '次旅行在',
|
||
'atlas.tripsIn': '次旅行在',
|
||
'atlas.since': '自',
|
||
'atlas.europe': '歐洲',
|
||
'atlas.asia': '亞洲',
|
||
'atlas.northAmerica': '北美洲',
|
||
'atlas.southAmerica': '南美洲',
|
||
'atlas.africa': '非洲',
|
||
'atlas.oceania': '大洋洲',
|
||
'atlas.other': '其他',
|
||
'atlas.firstVisit': '首次旅行',
|
||
'atlas.lastVisitLabel': '最近旅行',
|
||
'atlas.tripSingular': '次旅行',
|
||
'atlas.tripPlural': '次旅行',
|
||
'atlas.placeVisited': '個地點已訪問',
|
||
'atlas.placesVisited': '個地點已訪問',
|
||
'atlas.statsTab': '統計',
|
||
'atlas.bucketTab': '心願單',
|
||
'atlas.addBucket': '新增到心願單',
|
||
'atlas.bucketNamePlaceholder': '地點或目的地...',
|
||
'atlas.bucketNotesPlaceholder': '備註(可選)',
|
||
'atlas.bucketEmpty': '你的心願單是空的',
|
||
'atlas.bucketEmptyHint': '新增你夢想去的地方',
|
||
'atlas.unmark': '移除',
|
||
'atlas.confirmMark': '將此國家標記為已訪問?',
|
||
'atlas.confirmUnmark': '從已訪問列表中移除此國家?',
|
||
'atlas.confirmUnmarkRegion': '從已訪問列表中移除此地區?',
|
||
'atlas.markVisited': '標記為已訪問',
|
||
'atlas.markVisitedHint': '將此國家新增到已訪問列表',
|
||
'atlas.markRegionVisitedHint': '將此地區新增到已訪問列表',
|
||
'atlas.addToBucket': '新增到心願單',
|
||
'atlas.addPoi': '新增地點',
|
||
'atlas.searchCountry': '搜尋國家...',
|
||
'atlas.month': '月份',
|
||
'atlas.addToBucketHint': '儲存為想去的地方',
|
||
'atlas.bucketWhen': '你計劃什麼時候去?',
|
||
|
||
// Trip Planner
|
||
'trip.tabs.plan': '計劃',
|
||
'trip.tabs.transports': '交通',
|
||
'trip.tabs.reservations': '預訂',
|
||
'trip.tabs.reservationsShort': '預訂',
|
||
'trip.tabs.packing': '行李清單',
|
||
'trip.tabs.packingShort': '行李',
|
||
'trip.tabs.lists': '清單',
|
||
'trip.tabs.listsShort': '清單',
|
||
'trip.tabs.budget': '預算',
|
||
'trip.tabs.files': '檔案',
|
||
'trip.loading': '載入旅行中...',
|
||
'trip.loadingPhotos': '正在載入地點照片...',
|
||
'trip.mobilePlan': '計劃',
|
||
'trip.mobilePlaces': '地點',
|
||
'trip.toast.placeUpdated': '地點已更新',
|
||
'trip.toast.placeAdded': '地點已新增',
|
||
'trip.toast.placeDeleted': '地點已刪除',
|
||
'trip.toast.selectDay': '請先選擇一天',
|
||
'trip.toast.assignedToDay': '地點已分配到當天',
|
||
'trip.toast.reorderError': '排序失敗',
|
||
'trip.toast.reservationUpdated': '預訂已更新',
|
||
'trip.toast.reservationAdded': '預訂已新增',
|
||
'trip.toast.deleted': '已刪除',
|
||
'trip.confirm.deletePlace': '確定要刪除這個地點嗎?',
|
||
'trip.confirm.deletePlaces': '刪除 {count} 個地點?',
|
||
'trip.toast.placesDeleted': '已刪除 {count} 個地點',
|
||
|
||
// Day Plan Sidebar
|
||
'dayplan.emptyDay': '當天暫無計劃',
|
||
'dayplan.addNote': '新增備註',
|
||
'dayplan.editNote': '編輯備註',
|
||
'dayplan.noteAdd': '新增備註',
|
||
'dayplan.noteEdit': '編輯備註',
|
||
'dayplan.noteTitle': '備註',
|
||
'dayplan.noteSubtitle': '每日備註',
|
||
'dayplan.totalCost': '總費用',
|
||
'dayplan.days': '天',
|
||
'dayplan.dayN': '第 {n} 天',
|
||
'dayplan.calculating': '計算中...',
|
||
'dayplan.route': '路線',
|
||
'dayplan.optimize': '最佳化',
|
||
'dayplan.optimized': '路線已最佳化',
|
||
'dayplan.routeError': '路線計算失敗',
|
||
'dayplan.toast.needTwoPlaces': '路線最佳化至少需要兩個地點',
|
||
'dayplan.toast.routeOptimized': '路線已最佳化',
|
||
'dayplan.toast.noGeoPlaces': '未找到有座標的地點用於路線計算',
|
||
'dayplan.confirmed': '已確認',
|
||
'dayplan.pendingRes': '待確認',
|
||
'dayplan.pdf': 'PDF',
|
||
'dayplan.pdfTooltip': '匯出當天計劃為 PDF',
|
||
'dayplan.pdfError': 'PDF 匯出失敗',
|
||
'dayplan.cannotReorderTransport': '有固定時間的預訂無法重新排序',
|
||
'dayplan.confirmRemoveTimeTitle': '移除時間?',
|
||
'dayplan.confirmRemoveTimeBody': '此地點有固定時間({time})。移動後將移除時間並允許自由排序。',
|
||
'dayplan.confirmRemoveTimeAction': '移除時間並移動',
|
||
'dayplan.cannotDropOnTimed': '無法將專案放置在有固定時間的條目之間',
|
||
'dayplan.cannotBreakChronology': '這將打亂已計劃專案和預訂的時間順序',
|
||
|
||
// Places Sidebar
|
||
'places.addPlace': '新增地點/活動',
|
||
'places.importFile': '匯入檔案',
|
||
'places.sidebarDrop': '拖放以匯入',
|
||
'places.importFileHint': '從 Google My Maps、Google Earth 或 GPS 追蹤器等工具匯入 .gpx、.kml 或 .kmz 檔案。',
|
||
'places.importFileDropHere': '點選以選取檔案或拖放至此處',
|
||
'places.importFileDropActive': '放開檔案以選取',
|
||
'places.importFileUnsupported': '不支援的檔案類型,請使用 .gpx、.kml 或 .kmz。',
|
||
'places.importFileTooLarge': '檔案過大。最大上傳大小為 {maxMb} MB。',
|
||
'places.importFileError': '匯入失敗',
|
||
'places.importAllSkipped': '所有地點已在行程中。',
|
||
'places.gpxImported': '已從 GPX 匯入 {count} 個地點',
|
||
'places.gpxImportTypes': '要匯入什麼?',
|
||
'places.gpxImportWaypoints': '路點',
|
||
'places.gpxImportRoutes': '路線',
|
||
'places.gpxImportTracks': '軌跡(含路徑幾何)',
|
||
'places.gpxImportNoneSelected': '請至少選擇一種匯入類型。',
|
||
'places.kmlImportTypes': '要匯入什麼?',
|
||
'places.kmlImportPoints': '點(Placemarks)',
|
||
'places.kmlImportPaths': '路徑(LineStrings)',
|
||
'places.kmlImportNoneSelected': '請至少選擇一種類型。',
|
||
'places.selectionCount': '已選 {count} 項',
|
||
'places.deleteSelected': '刪除所選',
|
||
'places.kmlKmzImported': '已從 KMZ/KML 匯入 {count} 個地點',
|
||
'places.urlResolved': '已從 URL 匯入地點',
|
||
'places.importList': '列表匯入',
|
||
'places.kmlKmzSummaryValues': 'Placemarks:{total} • 已匯入:{created} • 已略過:{skipped}',
|
||
'places.importGoogleList': 'Google 列表',
|
||
'places.importNaverList': 'Naver 列表',
|
||
'places.googleListHint': '貼上共享的 Google Maps 列表連結以匯入所有地點。',
|
||
'places.googleListImported': '已從"{list}"匯入 {count} 個地點',
|
||
'places.googleListError': 'Google Maps 列表匯入失敗',
|
||
'places.naverListHint': '貼上共享的 Naver Maps 列表連結以匯入所有地點。',
|
||
'places.naverListImported': '已從"{list}"匯入 {count} 個地點',
|
||
'places.naverListError': 'Naver Maps 列表匯入失敗',
|
||
'places.viewDetails': '檢視詳情',
|
||
'places.assignToDay': '新增到哪一天?',
|
||
'places.all': '全部',
|
||
'places.unplanned': '未規劃',
|
||
'places.filterTracks': '路線',
|
||
'places.search': '搜尋地點...',
|
||
'places.allCategories': '所有分類',
|
||
'places.categoriesSelected': '個分類',
|
||
'places.clearFilter': '清除篩選',
|
||
'places.count': '{count} 個地點',
|
||
'places.countSingular': '1 個地點',
|
||
'places.allPlanned': '所有地點已規劃',
|
||
'places.noneFound': '未找到地點',
|
||
'places.editPlace': '編輯地點',
|
||
'places.formName': '名稱',
|
||
'places.formNamePlaceholder': '如:埃菲爾鐵塔',
|
||
'places.formDescription': '描述',
|
||
'places.formDescriptionPlaceholder': '簡短描述...',
|
||
'places.formAddress': '地址',
|
||
'places.formAddressPlaceholder': '街道、城市、國家',
|
||
'places.formLat': '緯度(如 48.8566)',
|
||
'places.formLng': '經度(如 2.3522)',
|
||
'places.formCategory': '分類',
|
||
'places.noCategory': '無分類',
|
||
'places.categoryNamePlaceholder': '分類名稱',
|
||
'places.formTime': '時間',
|
||
'places.startTime': '開始',
|
||
'places.endTime': '結束',
|
||
'places.endTimeBeforeStart': '結束時間早於開始時間',
|
||
'places.timeCollision': '時間衝突:',
|
||
'places.formWebsite': '網站',
|
||
'places.formNotes': '備註',
|
||
'places.formNotesPlaceholder': '個人備註...',
|
||
'places.formReservation': '預訂',
|
||
'places.reservationNotesPlaceholder': '預訂備註、確認號...',
|
||
'places.mapsSearchPlaceholder': '搜尋地點...',
|
||
'places.mapsSearchError': '地點搜尋失敗。',
|
||
'places.loadingDetails': '正在載入地點詳情…',
|
||
'places.osmHint': '使用 OpenStreetMap 搜尋(無照片、營業時間或評分)。在設定中新增 Google API 金鑰以獲取完整資訊。',
|
||
'places.osmActive': '透過 OpenStreetMap 搜尋(無照片、評分或營業時間)。在設定中新增 Google API 金鑰以獲取增強資料。',
|
||
'places.categoryCreateError': '建立分類失敗',
|
||
'places.nameRequired': '請輸入名稱',
|
||
'places.saveError': '儲存失敗',
|
||
// Place Inspector
|
||
'inspector.opened': '營業中',
|
||
'inspector.closed': '已關閉',
|
||
'inspector.openingHours': '營業時間',
|
||
'inspector.showHours': '顯示營業時間',
|
||
'inspector.files': '檔案',
|
||
'inspector.filesCount': '{count} 個檔案',
|
||
'inspector.removeFromDay': '從當天移除',
|
||
'inspector.remove': '刪除',
|
||
'inspector.addToDay': '新增到當天',
|
||
'inspector.confirmedRes': '已確認預訂',
|
||
'inspector.pendingRes': '待確認預訂',
|
||
'inspector.google': '在 Google Maps 中開啟',
|
||
'inspector.website': '開啟網站',
|
||
'inspector.addRes': '預訂',
|
||
'inspector.editRes': '編輯預訂',
|
||
'inspector.participants': '參與者',
|
||
'inspector.trackStats': '軌跡資料',
|
||
|
||
// Reservations
|
||
'reservations.title': '預訂',
|
||
'reservations.empty': '暫無預訂',
|
||
'reservations.emptyHint': '新增航班、酒店等預訂資訊',
|
||
'reservations.add': '新增預訂',
|
||
'reservations.addManual': '手動新增',
|
||
'reservations.placeHint': '提示:建議從地點直接建立預訂,以便與日程計劃關聯。',
|
||
'reservations.confirmed': '已確認',
|
||
'reservations.pending': '待確認',
|
||
'reservations.summary': '{confirmed} 已確認,{pending} 待確認',
|
||
'reservations.fromPlan': '來自計劃',
|
||
'reservations.showFiles': '檢視檔案',
|
||
'reservations.editTitle': '編輯預訂',
|
||
'reservations.status': '狀態',
|
||
'reservations.datetime': '日期和時間',
|
||
'reservations.startTime': '開始時間',
|
||
'reservations.endTime': '結束時間',
|
||
'reservations.date': '日期',
|
||
'reservations.time': '時間',
|
||
'reservations.timeAlt': '時間(備選,如 19:30)',
|
||
'reservations.notes': '備註',
|
||
'reservations.notesPlaceholder': '其他備註...',
|
||
'reservations.meta.airline': '航空公司',
|
||
'reservations.meta.flightNumber': '航班號',
|
||
'reservations.meta.from': '出發',
|
||
'reservations.meta.to': '到達',
|
||
'reservations.needsReview': '待確認',
|
||
'reservations.needsReviewHint': '無法自動匹配機場 — 請確認位置。',
|
||
'reservations.searchLocation': '搜尋車站、港口、地址...',
|
||
'airport.searchPlaceholder': '機場代碼或城市(例如 FRA)',
|
||
'map.connections': '連接',
|
||
'map.showConnections': '顯示預訂路線',
|
||
'map.hideConnections': '隱藏預訂路線',
|
||
'settings.bookingLabels': '預訂路線標籤',
|
||
'settings.bookingLabelsHint': '在地圖上顯示車站 / 機場名稱。關閉時僅顯示圖示。',
|
||
'reservations.meta.trainNumber': '車次',
|
||
'reservations.meta.platform': '站臺',
|
||
'reservations.meta.seat': '座位',
|
||
'reservations.meta.checkIn': '入住',
|
||
'reservations.meta.checkInUntil': '入住截止',
|
||
'reservations.meta.checkOut': '退房',
|
||
'reservations.meta.linkAccommodation': '住宿',
|
||
'reservations.meta.pickAccommodation': '關聯住宿',
|
||
'reservations.meta.noAccommodation': '無',
|
||
'reservations.meta.hotelPlace': '住宿',
|
||
'reservations.meta.pickHotel': '選擇住宿',
|
||
'reservations.meta.fromDay': '從',
|
||
'reservations.meta.toDay': '到',
|
||
'reservations.meta.selectDay': '選擇日期',
|
||
'reservations.type.flight': '航班',
|
||
'reservations.type.hotel': '住宿',
|
||
'reservations.type.restaurant': '餐廳',
|
||
'reservations.type.train': '火車',
|
||
'reservations.type.car': '汽車',
|
||
'reservations.type.cruise': '郵輪',
|
||
'reservations.type.event': '活動',
|
||
'reservations.type.tour': '旅遊團',
|
||
'reservations.type.other': '其他',
|
||
'reservations.confirm.delete': '確定要刪除預訂「{name}」嗎?',
|
||
'reservations.confirm.deleteTitle': '刪除預訂?',
|
||
'reservations.confirm.deleteBody': '"{name}" 將被永久刪除。',
|
||
'reservations.toast.updated': '預訂已更新',
|
||
'reservations.toast.removed': '預訂已刪除',
|
||
'reservations.toast.fileUploaded': '檔案已上傳',
|
||
'reservations.toast.uploadError': '上傳失敗',
|
||
'reservations.newTitle': '新建預訂',
|
||
'reservations.bookingType': '預訂型別',
|
||
'reservations.titleLabel': '標題',
|
||
'reservations.titlePlaceholder': '如:漢莎 LH123、阿德隆酒店...',
|
||
'reservations.locationAddress': '地點 / 地址',
|
||
'reservations.locationPlaceholder': '地址、機場、酒店...',
|
||
'reservations.confirmationCode': '預訂碼',
|
||
'reservations.confirmationPlaceholder': '如:ABC12345',
|
||
'reservations.day': '日期',
|
||
'reservations.noDay': '無日期',
|
||
'reservations.place': '地點',
|
||
'reservations.noPlace': '無地點',
|
||
'reservations.pendingSave': '將被儲存…',
|
||
'reservations.uploading': '上傳中...',
|
||
'reservations.attachFile': '附加檔案',
|
||
'reservations.linkExisting': '關聯已有檔案',
|
||
'reservations.toast.saveError': '儲存失敗',
|
||
'reservations.toast.updateError': '更新失敗',
|
||
'reservations.toast.deleteError': '刪除失敗',
|
||
'reservations.confirm.remove': '移除「{name}」的預訂?',
|
||
'reservations.linkAssignment': '關聯日程分配',
|
||
'reservations.pickAssignment': '從計劃中選擇一個分配...',
|
||
'reservations.noAssignment': '無關聯(獨立)',
|
||
'reservations.price': '價格',
|
||
'reservations.budgetCategory': '預算分類',
|
||
'reservations.budgetCategoryPlaceholder': '如:交通、住宿',
|
||
'reservations.budgetCategoryAuto': '自動(依預訂類型)',
|
||
'reservations.budgetHint': '儲存時將自動建立預算條目。',
|
||
'reservations.departureDate': '出發日期',
|
||
'reservations.arrivalDate': '到達日期',
|
||
'reservations.departureTime': '出發時間',
|
||
'reservations.arrivalTime': '到達時間',
|
||
'reservations.pickupDate': '取車日期',
|
||
'reservations.returnDate': '還車日期',
|
||
'reservations.pickupTime': '取車時間',
|
||
'reservations.returnTime': '還車時間',
|
||
'reservations.endDate': '結束日期',
|
||
'reservations.meta.departureTimezone': '出發時區',
|
||
'reservations.meta.arrivalTimezone': '到達時區',
|
||
'reservations.span.departure': '出發',
|
||
'reservations.span.arrival': '到達',
|
||
'reservations.span.inTransit': '途中',
|
||
'reservations.span.pickup': '取車',
|
||
'reservations.span.return': '還車',
|
||
'reservations.span.active': '進行中',
|
||
'reservations.span.start': '開始',
|
||
'reservations.span.end': '結束',
|
||
'reservations.span.ongoing': '進行中',
|
||
'reservations.validation.endBeforeStart': '結束日期/時間必須晚於開始日期/時間',
|
||
'reservations.addBooking': '新增預訂',
|
||
|
||
// Budget
|
||
'budget.title': '預算',
|
||
'budget.exportCsv': '匯出 CSV',
|
||
'budget.emptyTitle': '尚未建立預算',
|
||
'budget.emptyText': '建立分類和條目來規劃旅行預算',
|
||
'budget.emptyPlaceholder': '輸入分類名稱...',
|
||
'budget.createCategory': '建立分類',
|
||
'budget.category': '分類',
|
||
'budget.categoryName': '分類名稱',
|
||
'budget.table.name': '名稱',
|
||
'budget.table.total': '合計',
|
||
'budget.table.persons': '人數',
|
||
'budget.table.days': '天數',
|
||
'budget.table.perPerson': '人均',
|
||
'budget.table.perDay': '日均',
|
||
'budget.table.perPersonDay': '人日均',
|
||
'budget.table.note': '備註',
|
||
'budget.table.date': '日期',
|
||
'budget.newEntry': '新建條目',
|
||
'budget.defaultEntry': '新建條目',
|
||
'budget.defaultCategory': '新分類',
|
||
'budget.total': '合計',
|
||
'budget.totalBudget': '總預算',
|
||
'budget.byCategory': '按分類',
|
||
'budget.editTooltip': '點選編輯',
|
||
'budget.linkedToReservation': '已連結至預訂——請在那裡編輯名稱',
|
||
'budget.confirm.deleteCategory': '確定刪除分類「{name}」及其 {count} 個條目?',
|
||
'budget.deleteCategory': '刪除分類',
|
||
'budget.perPerson': '人均',
|
||
'budget.paid': '已支付',
|
||
'budget.open': '未支付',
|
||
'budget.noMembers': '未分配成員',
|
||
'budget.settlement': '結算',
|
||
'budget.settlementInfo': '點選預算專案上的成員頭像將其標記為綠色——表示該成員已付款。結算會顯示誰欠誰多少。',
|
||
'budget.netBalances': '淨餘額',
|
||
|
||
// Files
|
||
'files.title': '檔案',
|
||
'files.pageTitle': '檔案與文件',
|
||
'files.subtitle': '{trip} 的 {count} 個檔案',
|
||
'files.downloadPdf': '下載 PDF',
|
||
'files.count': '{count} 個檔案',
|
||
'files.countSingular': '1 個檔案',
|
||
'files.uploaded': '已上傳 {count} 個',
|
||
'files.uploadError': '上傳失敗',
|
||
'files.dropzone': '將檔案拖放到此處',
|
||
'files.dropzoneHint': '或點選瀏覽',
|
||
'files.allowedTypes': '圖片、PDF、DOC、DOCX、XLS、XLSX、TXT、CSV · 最大 50 MB',
|
||
'files.uploading': '上傳中...',
|
||
'files.filterAll': '全部',
|
||
'files.filterPdf': 'PDF',
|
||
'files.filterImages': '圖片',
|
||
'files.filterDocs': '文件',
|
||
'files.filterCollab': '協作筆記',
|
||
'files.sourceCollab': '來自協作筆記',
|
||
'files.empty': '暫無檔案',
|
||
'files.emptyHint': '上傳檔案以附加到旅行中',
|
||
'files.openTab': '在新標籤頁中開啟',
|
||
'files.confirm.delete': '確定要刪除此檔案嗎?',
|
||
'files.toast.deleted': '檔案已刪除',
|
||
'files.toast.deleteError': '刪除檔案失敗',
|
||
'files.sourcePlan': '日程計劃',
|
||
'files.sourceBooking': '預訂',
|
||
'files.attach': '附加',
|
||
'files.pasteHint': '也可以從剪貼簿貼上圖片 (Ctrl+V)',
|
||
'files.trash': '回收站',
|
||
'files.trashEmpty': '回收站為空',
|
||
'files.emptyTrash': '清空回收站',
|
||
'files.restore': '恢復',
|
||
'files.star': '收藏',
|
||
'files.unstar': '取消收藏',
|
||
'files.assign': '分配',
|
||
'files.assignTitle': '分配檔案',
|
||
'files.assignPlace': '地點',
|
||
'files.assignBooking': '預訂',
|
||
'files.unassigned': '未分配',
|
||
'files.unlink': '移除關聯',
|
||
'files.toast.trashed': '已移至回收站',
|
||
'files.toast.restored': '檔案已恢復',
|
||
'files.toast.trashEmptied': '回收站已清空',
|
||
'files.toast.assigned': '檔案已分配',
|
||
'files.toast.assignError': '分配失敗',
|
||
'files.toast.restoreError': '恢復失敗',
|
||
'files.confirm.permanentDelete': '永久刪除此檔案?此操作無法撤銷。',
|
||
'files.confirm.emptyTrash': '永久刪除回收站中的所有檔案?此操作無法撤銷。',
|
||
'files.noteLabel': '備註',
|
||
'files.notePlaceholder': '新增備註...',
|
||
|
||
// Packing
|
||
'packing.title': '行李清單',
|
||
'packing.empty': '行李清單為空',
|
||
'packing.import': '匯入',
|
||
'packing.importTitle': '匯入裝箱清單',
|
||
'packing.importHint': '每行一個物品。可選用逗號、分號或製表符分隔類別和數量:名稱, 類別, 數量',
|
||
'packing.importPlaceholder': '牙刷\n防曬霜, 衛生\nT恤, 衣物, 5\n護照, 證件',
|
||
'packing.importCsv': '載入 CSV/TXT',
|
||
'packing.importAction': '匯入 {count}',
|
||
'packing.importSuccess': '已匯入 {count} 項',
|
||
'packing.importError': '匯入失敗',
|
||
'packing.importEmpty': '沒有可匯入的專案',
|
||
'packing.progress': '已打包 {packed}/{total}({percent}%)',
|
||
'packing.clearChecked': '移除 {count} 個已勾選',
|
||
'packing.clearCheckedShort': '移除 {count} 個',
|
||
'packing.suggestions': '建議',
|
||
'packing.suggestionsTitle': '新增建議',
|
||
'packing.allSuggested': '所有建議已新增',
|
||
'packing.allPacked': '全部打包完成!',
|
||
'packing.addPlaceholder': '新增新物品...',
|
||
'packing.categoryPlaceholder': '分類...',
|
||
'packing.filterAll': '全部',
|
||
'packing.filterOpen': '未完成',
|
||
'packing.filterDone': '已完成',
|
||
'packing.emptyTitle': '行李清單為空',
|
||
'packing.emptyHint': '新增物品或使用建議',
|
||
'packing.emptyFiltered': '沒有匹配的物品',
|
||
'packing.menuRename': '重新命名',
|
||
'packing.menuCheckAll': '全部勾選',
|
||
'packing.menuUncheckAll': '取消全部勾選',
|
||
'packing.menuDeleteCat': '刪除分類',
|
||
'packing.addItem': '新增物品',
|
||
'packing.addItemPlaceholder': '物品名稱...',
|
||
'packing.addCategory': '新增分類',
|
||
'packing.newCategoryPlaceholder': '分類名稱(如:衣物)',
|
||
'packing.applyTemplate': '應用模板',
|
||
'packing.template': '模板',
|
||
'packing.templateApplied': '已從模板新增 {count} 個物品',
|
||
'packing.templateError': '應用模板失敗',
|
||
'packing.saveAsTemplate': '儲存為範本',
|
||
'packing.templateName': '範本名稱',
|
||
'packing.templateSaved': '行李清單已儲存為範本',
|
||
'packing.noMembers': '無成員',
|
||
'packing.bags': '行李',
|
||
'packing.noBag': '未分配',
|
||
'packing.totalWeight': '總重量',
|
||
'packing.bagName': '名稱...',
|
||
'packing.addBag': '新增行李',
|
||
'packing.changeCategory': '更改分類',
|
||
'packing.confirm.clearChecked': '確定移除 {count} 個已勾選的物品?',
|
||
'packing.confirm.deleteCat': '確定刪除分類「{name}」及其 {count} 個物品?',
|
||
'packing.defaultCategory': '其他',
|
||
'packing.toast.saveError': '儲存失敗',
|
||
'packing.toast.deleteError': '刪除失敗',
|
||
'packing.toast.renameError': '重新命名失敗',
|
||
'packing.toast.addError': '新增失敗',
|
||
|
||
// Packing suggestions
|
||
'packing.suggestions.items': [
|
||
{ name: '護照', category: '證件' },
|
||
{ name: '身份證', category: '證件' },
|
||
{ name: '旅行保險', category: '證件' },
|
||
{ name: '機票', category: '證件' },
|
||
{ name: '信用卡', category: '財務' },
|
||
{ name: '現金', category: '財務' },
|
||
{ name: '簽證', category: '證件' },
|
||
{ name: 'T恤', category: '衣物' },
|
||
{ name: '褲子', category: '衣物' },
|
||
{ name: '內衣', category: '衣物' },
|
||
{ name: '襪子', category: '衣物' },
|
||
{ name: '外套', category: '衣物' },
|
||
{ name: '睡衣', category: '衣物' },
|
||
{ name: '泳衣', category: '衣物' },
|
||
{ name: '雨衣', category: '衣物' },
|
||
{ name: '舒適的鞋子', category: '衣物' },
|
||
{ name: '牙刷', category: '洗漱用品' },
|
||
{ name: '牙膏', category: '洗漱用品' },
|
||
{ name: '洗髮水', category: '洗漱用品' },
|
||
{ name: '除臭劑', category: '洗漱用品' },
|
||
{ name: '防曬霜', category: '洗漱用品' },
|
||
{ name: '剃鬚刀', category: '洗漱用品' },
|
||
{ name: '充電器', category: '電子產品' },
|
||
{ name: '充電寶', category: '電子產品' },
|
||
{ name: '耳機', category: '電子產品' },
|
||
{ name: '旅行轉換插頭', category: '電子產品' },
|
||
{ name: '相機', category: '電子產品' },
|
||
{ name: '止痛藥', category: '健康' },
|
||
{ name: '創可貼', category: '健康' },
|
||
{ name: '消毒液', category: '健康' },
|
||
],
|
||
|
||
// Members / Sharing
|
||
'members.shareTrip': '分享旅行',
|
||
'members.inviteUser': '邀請使用者',
|
||
'members.selectUser': '選擇使用者…',
|
||
'members.invite': '邀請',
|
||
'members.allHaveAccess': '所有使用者均已擁有訪問許可權。',
|
||
'members.access': '訪問許可權',
|
||
'members.person': '人',
|
||
'members.persons': '人',
|
||
'members.you': '你',
|
||
'members.owner': '所有者',
|
||
'members.leaveTrip': '退出旅行',
|
||
'members.removeAccess': '移除訪問許可權',
|
||
'members.confirmLeave': '退出旅行?你將失去訪問許可權。',
|
||
'members.confirmRemove': '移除該使用者的訪問許可權?',
|
||
'members.loadError': '載入成員失敗',
|
||
'members.added': '已新增',
|
||
'members.addError': '新增失敗',
|
||
'members.removed': '成員已移除',
|
||
'members.removeError': '移除失敗',
|
||
|
||
// Categories (Admin)
|
||
'categories.title': '分類',
|
||
'categories.subtitle': '管理地點分類',
|
||
'categories.new': '新建分類',
|
||
'categories.empty': '暫無分類',
|
||
'categories.namePlaceholder': '分類名稱',
|
||
'categories.icon': '圖示',
|
||
'categories.color': '顏色',
|
||
'categories.customColor': '選擇自定義顏色',
|
||
'categories.preview': '預覽',
|
||
'categories.defaultName': '分類',
|
||
'categories.update': '更新',
|
||
'categories.create': '建立',
|
||
'categories.confirm.delete': '刪除分類?該分類下的地點不會被刪除。',
|
||
'categories.toast.loadError': '載入分類失敗',
|
||
'categories.toast.nameRequired': '請輸入名稱',
|
||
'categories.toast.updated': '分類已更新',
|
||
'categories.toast.created': '分類已建立',
|
||
'categories.toast.saveError': '儲存失敗',
|
||
'categories.toast.deleted': '分類已刪除',
|
||
'categories.toast.deleteError': '刪除失敗',
|
||
|
||
// Backup (Admin)
|
||
'backup.title': '資料備份',
|
||
'backup.subtitle': '資料庫和所有上傳檔案',
|
||
'backup.refresh': '重新整理',
|
||
'backup.upload': '上傳備份',
|
||
'backup.uploading': '上傳中…',
|
||
'backup.create': '建立備份',
|
||
'backup.creating': '建立中…',
|
||
'backup.empty': '暫無備份',
|
||
'backup.createFirst': '建立第一個備份',
|
||
'backup.download': '下載',
|
||
'backup.restore': '恢復',
|
||
'backup.confirm.restore': '恢復備份「{name}」?\n\n所有當前資料將被備份資料替換。',
|
||
'backup.confirm.uploadRestore': '上傳並恢復備份檔案「{name}」?\n\n所有當前資料將被覆蓋。',
|
||
'backup.confirm.delete': '刪除備份「{name}」?',
|
||
'backup.toast.loadError': '載入備份失敗',
|
||
'backup.toast.created': '備份建立成功',
|
||
'backup.toast.createError': '建立備份失敗',
|
||
'backup.toast.restored': '備份已恢復。頁面即將重新整理…',
|
||
'backup.toast.restoreError': '恢復失敗',
|
||
'backup.toast.uploadError': '上傳失敗',
|
||
'backup.toast.deleted': '備份已刪除',
|
||
'backup.toast.deleteError': '刪除失敗',
|
||
'backup.toast.downloadError': '下載失敗',
|
||
'backup.toast.settingsSaved': '自動備份設定已儲存',
|
||
'backup.toast.settingsError': '儲存設定失敗',
|
||
'backup.auto.title': '自動備份',
|
||
'backup.auto.subtitle': '按計劃自動備份',
|
||
'backup.auto.enable': '啟用自動備份',
|
||
'backup.auto.enableHint': '將按所選計劃自動建立備份',
|
||
'backup.auto.interval': '間隔',
|
||
'backup.auto.hour': '執行時間',
|
||
'backup.auto.hourHint': '伺服器本地時間({format} 格式)',
|
||
'backup.auto.dayOfWeek': '星期幾',
|
||
'backup.auto.dayOfMonth': '每月幾號',
|
||
'backup.auto.dayOfMonthHint': '限 1–28 以相容所有月份',
|
||
'backup.auto.scheduleSummary': '計劃',
|
||
'backup.auto.summaryDaily': '每天 {hour}:00',
|
||
'backup.auto.summaryWeekly': '每{day} {hour}:00',
|
||
'backup.auto.summaryMonthly': '每月 {day} 號 {hour}:00',
|
||
'backup.auto.envLocked': 'Docker',
|
||
'backup.auto.envLockedHint': '自動備份透過 Docker 環境變數配置。要更改設定,請更新 docker-compose.yml 並重啟容器。',
|
||
'backup.auto.copyEnv': '複製 Docker 環境變數',
|
||
'backup.auto.envCopied': 'Docker 環境變數已複製到剪貼簿',
|
||
'backup.auto.keepLabel': '自動刪除舊備份',
|
||
'backup.dow.sunday': '週日',
|
||
'backup.dow.monday': '週一',
|
||
'backup.dow.tuesday': '週二',
|
||
'backup.dow.wednesday': '週三',
|
||
'backup.dow.thursday': '週四',
|
||
'backup.dow.friday': '週五',
|
||
'backup.dow.saturday': '週六',
|
||
'backup.interval.hourly': '每小時',
|
||
'backup.interval.daily': '每天',
|
||
'backup.interval.weekly': '每週',
|
||
'backup.interval.monthly': '每月',
|
||
'backup.keep.1day': '1 天',
|
||
'backup.keep.3days': '3 天',
|
||
'backup.keep.7days': '7 天',
|
||
'backup.keep.14days': '14 天',
|
||
'backup.keep.30days': '30 天',
|
||
'backup.keep.forever': '永久保留',
|
||
|
||
// Photos
|
||
'photos.title': '照片',
|
||
'photos.subtitle': '{trip} 的 {count} 張照片',
|
||
'photos.dropHere': '將照片拖放至此...',
|
||
'photos.dropHereActive': '將照片拖放至此',
|
||
'photos.captionForAll': '標題(所有)',
|
||
'photos.captionPlaceholder': '可選標題...',
|
||
'photos.addCaption': '新增標題...',
|
||
'photos.allDays': '所有天',
|
||
'photos.noPhotos': '暫無照片',
|
||
'photos.uploadHint': '上傳你的旅行照片',
|
||
'photos.clickToSelect': '或點選選擇',
|
||
'photos.linkPlace': '關聯地點',
|
||
'photos.noPlace': '無地點',
|
||
'photos.uploadN': '上傳 {n} 張照片',
|
||
'photos.linkDay': '關聯天數',
|
||
'photos.noDay': '無天數',
|
||
'photos.dayLabel': '第 {number} 天',
|
||
'photos.photoSelected': '張照片已選擇',
|
||
'photos.photosSelected': '張照片已選擇',
|
||
'photos.fileTypeHint': 'JPG, PNG, WebP · 最大 10 MB · 最多 30 張照片',
|
||
|
||
// Backup restore modal
|
||
'backup.restoreConfirmTitle': '恢復備份?',
|
||
'backup.restoreWarning': '所有當前資料(旅行、地點、使用者、上傳檔案)將被備份資料永久替換。此操作無法撤銷。',
|
||
'backup.restoreTip': '提示:恢復前建議先備份當前狀態。',
|
||
'backup.restoreConfirm': '確認恢復',
|
||
|
||
// PDF
|
||
'pdf.travelPlan': '旅行計劃',
|
||
'pdf.planned': '已規劃',
|
||
'pdf.costLabel': '費用 EUR',
|
||
'pdf.preview': 'PDF 預覽',
|
||
'pdf.saveAsPdf': '儲存為 PDF',
|
||
|
||
// Planner
|
||
'planner.places': '地點',
|
||
'planner.bookings': '預訂',
|
||
'planner.packingList': '行李清單',
|
||
'planner.documents': '文件',
|
||
'planner.dayPlan': '日程計劃',
|
||
'planner.reservations': '預訂',
|
||
'planner.minTwoPlaces': '至少需要 2 個有座標的地點',
|
||
'planner.noGeoPlaces': '沒有有座標的地點',
|
||
'planner.routeCalculated': '路線已計算',
|
||
'planner.routeCalcFailed': '無法計算路線',
|
||
'planner.routeError': '路線計算錯誤',
|
||
'planner.icsExportFailed': 'ICS 匯出失敗',
|
||
'planner.routeOptimized': '路線已最佳化',
|
||
'planner.reservationUpdated': '預訂已更新',
|
||
'planner.reservationAdded': '預訂已新增',
|
||
'planner.confirmDeleteReservation': '刪除預訂?',
|
||
'planner.reservationDeleted': '預訂已刪除',
|
||
'planner.days': '天',
|
||
'planner.allPlaces': '所有地點',
|
||
'planner.totalPlaces': '共 {n} 個地點',
|
||
'planner.noDaysPlanned': '尚未規劃天數',
|
||
'planner.editTrip': '編輯旅行 \u2192',
|
||
'planner.placeOne': '1 個地點',
|
||
'planner.placeN': '{n} 個地點',
|
||
'planner.addNote': '新增備註',
|
||
'planner.noEntries': '當天無條目',
|
||
'planner.addPlace': '新增地點/活動',
|
||
'planner.addPlaceShort': '+ 新增地點/活動',
|
||
'planner.resPending': '預訂待確認 · ',
|
||
'planner.resConfirmed': '預訂已確認 · ',
|
||
'planner.notePlaceholder': '備註…',
|
||
'planner.noteTimePlaceholder': '時間(可選)',
|
||
'planner.noteExamplePlaceholder': '如:14:30 從中央車站乘 S3,7 號碼頭渡輪,午餐休息…',
|
||
'planner.totalCost': '總費用',
|
||
'planner.searchPlaces': '搜尋地點…',
|
||
'planner.allCategories': '所有分類',
|
||
'planner.noPlacesFound': '未找到地點',
|
||
'planner.addFirstPlace': '新增第一個地點',
|
||
'planner.noReservations': '暫無預訂',
|
||
'planner.addFirstReservation': '新增第一個預訂',
|
||
'planner.new': '新建',
|
||
'planner.addToDay': '+ 天',
|
||
'planner.calculating': '計算中…',
|
||
'planner.route': '路線',
|
||
'planner.optimize': '最佳化',
|
||
'planner.openGoogleMaps': '在 Google Maps 中開啟',
|
||
'planner.selectDayHint': '從左側列表選擇一天以檢視日程計劃',
|
||
'planner.noPlacesForDay': '當天暫無地點',
|
||
'planner.addPlacesLink': '新增地點 \u2192',
|
||
'planner.minTotal': '分鐘 合計',
|
||
'planner.noReservation': '無預訂',
|
||
'planner.removeFromDay': '從當天移除',
|
||
'planner.addToThisDay': '新增到當天',
|
||
'planner.overview': '概覽',
|
||
'planner.noDays': '暫無天數',
|
||
'planner.editTripToAddDays': '編輯旅行以新增天數',
|
||
'planner.dayCount': '{n} 天',
|
||
'planner.clickToUnlock': '點選解鎖',
|
||
'planner.keepPosition': '路線最佳化時保持位置',
|
||
'planner.dayDetails': '日程詳情',
|
||
'planner.dayN': '第 {n} 天',
|
||
|
||
// Dashboard Stats
|
||
'stats.countries': '國家',
|
||
'stats.cities': '城市',
|
||
'stats.trips': '旅行',
|
||
'stats.places': '地點',
|
||
'stats.worldProgress': '全球進度',
|
||
'stats.visited': '已訪問',
|
||
'stats.remaining': '未訪問',
|
||
'stats.visitedCountries': '已訪問國家',
|
||
|
||
// Day Detail Panel
|
||
'day.precipProb': '降水機率',
|
||
'day.precipitation': '降水量',
|
||
'day.wind': '風速',
|
||
'day.sunrise': '日出',
|
||
'day.sunset': '日落',
|
||
'day.hourlyForecast': '逐小時預報',
|
||
'day.climateHint': '歷史平均值——實際預報在該日期前 16 天內可用。',
|
||
'day.noWeather': '無天氣資料。請新增有座標的地點。',
|
||
'day.overview': '每日概覽',
|
||
'day.accommodation': '住宿',
|
||
'day.addAccommodation': '新增住宿',
|
||
'day.hotelDayRange': '應用到天數',
|
||
'day.noPlacesForHotel': '請先在旅行中新增地點',
|
||
'day.allDays': '全部',
|
||
'day.checkIn': '入住',
|
||
'day.checkInUntil': '截止',
|
||
'day.checkOut': '退房',
|
||
'day.confirmation': '確認號',
|
||
'day.editAccommodation': '編輯住宿',
|
||
'day.reservations': '預訂',
|
||
|
||
// Memories / Immich
|
||
'memories.title': '照片',
|
||
'memories.notConnected': '{provider_name} 未連線',
|
||
'memories.notConnectedHint': '在設定中連線您的 {provider_name} 例項以在此旅行中新增照片。',
|
||
'memories.notConnectedMultipleHint': '在設定中連線以下任一照片提供商:{provider_names} 以在此旅行中新增照片。',
|
||
'memories.noDates': '為旅行新增日期以載入照片。',
|
||
'memories.noPhotos': '未找到照片',
|
||
'memories.noPhotosHint': '{provider_name} 中未找到此旅行日期範圍內的照片。',
|
||
'memories.photosFound': '張照片',
|
||
'memories.fromOthers': '來自他人',
|
||
'memories.sharePhotos': '分享照片',
|
||
'memories.sharing': '分享中',
|
||
'memories.reviewTitle': '審查您的照片',
|
||
'memories.reviewHint': '點選照片以將其從分享中排除。',
|
||
'memories.shareCount': '分享 {count} 張照片',
|
||
'memories.providerUrl': '伺服器 URL',
|
||
'memories.providerApiKey': 'API 金鑰',
|
||
'memories.providerUsername': '使用者名稱',
|
||
'memories.providerPassword': '密碼',
|
||
'memories.providerOTP': 'MFA 驗證碼(如已啟用)',
|
||
'memories.skipSSLVerification': '跳過 SSL 憑證驗證',
|
||
'memories.immichAutoUpload': '上傳 Journey 照片時同步到 Immich',
|
||
'memories.providerUrlHintSynology': '在網址中包含照片應用程式路徑,例如 https://nas:5001/photo',
|
||
'memories.testConnection': '測試連線',
|
||
'memories.testFirst': '請先測試連線',
|
||
'memories.connected': '已連線',
|
||
'memories.disconnected': '未連線',
|
||
'memories.connectionSuccess': '已連線到 {provider_name}',
|
||
'memories.connectionError': '無法連線到 {provider_name}',
|
||
'memories.saved': '{provider_name} 設定已儲存',
|
||
'memories.providerDisconnectedBanner': '您與 {provider_name} 的連線已中斷。請在設定中重新連線以查看照片。',
|
||
'memories.saveError': '無法儲存 {provider_name} 設定',
|
||
'memories.oldest': '最早優先',
|
||
'memories.newest': '最新優先',
|
||
'memories.allLocations': '所有地點',
|
||
'memories.addPhotos': '新增照片',
|
||
'memories.linkAlbum': '關聯相簿',
|
||
'memories.selectAlbum': '選擇 {provider_name} 相簿',
|
||
'memories.selectAlbumMultiple': '選擇相簿',
|
||
'memories.noAlbums': '未找到相簿',
|
||
'memories.syncAlbum': '同步相簿',
|
||
'memories.unlinkAlbum': '取消關聯',
|
||
'memories.photos': '張照片',
|
||
'memories.selectPhotos': '從 {provider_name} 選擇照片',
|
||
'memories.selectPhotosMultiple': '選擇照片',
|
||
'memories.selectHint': '點選照片以選擇。',
|
||
'memories.selected': '已選擇',
|
||
'memories.addSelected': '新增 {count} 張照片',
|
||
'memories.alreadyAdded': '已新增',
|
||
'memories.private': '私密',
|
||
'memories.stopSharing': '停止分享',
|
||
'memories.tripDates': '旅行日期',
|
||
'memories.allPhotos': '所有照片',
|
||
'memories.confirmShareTitle': '與旅行成員分享?',
|
||
'memories.confirmShareHint': '{count} 張照片將對本次旅行的所有成員可見。你可以稍後將單張照片設為私密。',
|
||
'memories.confirmShareButton': '分享照片',
|
||
|
||
// Collab Addon
|
||
'collab.tabs.chat': '聊天',
|
||
'collab.tabs.notes': '筆記',
|
||
'collab.tabs.polls': '投票',
|
||
'collab.whatsNext.title': '接下來',
|
||
'collab.whatsNext.today': '今天',
|
||
'collab.whatsNext.tomorrow': '明天',
|
||
'collab.whatsNext.empty': '暫無活動',
|
||
'collab.whatsNext.until': '至',
|
||
'collab.whatsNext.emptyHint': '有時間安排的活動將顯示在此',
|
||
'collab.chat.send': '傳送',
|
||
'collab.chat.placeholder': '輸入訊息...',
|
||
'collab.chat.empty': '開始對話',
|
||
'collab.chat.emptyHint': '訊息對所有旅行成員可見',
|
||
'collab.chat.emptyDesc': '與旅伴分享想法、計劃和動態',
|
||
'collab.chat.today': '今天',
|
||
'collab.chat.yesterday': '昨天',
|
||
'collab.chat.deletedMessage': '刪除了一條訊息',
|
||
'collab.chat.reply': '回覆',
|
||
'collab.chat.loadMore': '載入更早的訊息',
|
||
'collab.chat.justNow': '剛剛',
|
||
'collab.chat.minutesAgo': '{n} 分鐘前',
|
||
'collab.chat.hoursAgo': '{n} 小時前',
|
||
'collab.notes.title': '筆記',
|
||
'collab.notes.new': '新建筆記',
|
||
'collab.notes.empty': '暫無筆記',
|
||
'collab.notes.emptyHint': '開始記錄想法和計劃',
|
||
'collab.notes.all': '全部',
|
||
'collab.notes.titlePlaceholder': '筆記標題',
|
||
'collab.notes.contentPlaceholder': '寫點什麼...',
|
||
'collab.notes.categoryPlaceholder': '分類',
|
||
'collab.notes.newCategory': '新建分類...',
|
||
'collab.notes.category': '分類',
|
||
'collab.notes.noCategory': '無分類',
|
||
'collab.notes.color': '顏色',
|
||
'collab.notes.save': '儲存',
|
||
'collab.notes.cancel': '取消',
|
||
'collab.notes.edit': '編輯',
|
||
'collab.notes.delete': '刪除',
|
||
'collab.notes.pin': '置頂',
|
||
'collab.notes.unpin': '取消置頂',
|
||
'collab.notes.daysAgo': '{n} 天前',
|
||
'collab.notes.categorySettings': '管理分類',
|
||
'collab.notes.create': '建立',
|
||
'collab.notes.website': '網站',
|
||
'collab.notes.websitePlaceholder': 'https://...',
|
||
'collab.notes.attachFiles': '附加檔案',
|
||
'collab.notes.noCategoriesYet': '暫無分類',
|
||
'collab.notes.emptyDesc': '建立一個筆記開始吧',
|
||
'collab.polls.title': '投票',
|
||
'collab.polls.new': '新建投票',
|
||
'collab.polls.empty': '暫無投票',
|
||
'collab.polls.emptyHint': '向團隊提問並一起投票',
|
||
'collab.polls.question': '問題',
|
||
'collab.polls.questionPlaceholder': '我們應該做什麼?',
|
||
'collab.polls.addOption': '+ 新增選項',
|
||
'collab.polls.optionPlaceholder': '選項 {n}',
|
||
'collab.polls.create': '建立投票',
|
||
'collab.polls.close': '關閉',
|
||
'collab.polls.closed': '已關閉',
|
||
'collab.polls.votes': '{n} 票',
|
||
'collab.polls.vote': '{n} 票',
|
||
'collab.polls.multipleChoice': '多選',
|
||
'collab.polls.multiChoice': '多選',
|
||
'collab.polls.deadline': '截止時間',
|
||
'collab.polls.option': '選項',
|
||
'collab.polls.options': '選項',
|
||
'collab.polls.delete': '刪除',
|
||
'collab.polls.closedSection': '已關閉',
|
||
|
||
// Permissions
|
||
'admin.tabs.permissions': '許可權',
|
||
'perm.title': '許可權設定',
|
||
'perm.subtitle': '控制誰可以在應用中執行操作',
|
||
'perm.saved': '許可權設定已儲存',
|
||
'perm.resetDefaults': '恢復預設',
|
||
'perm.customized': '已自定義',
|
||
'perm.level.admin': '僅管理員',
|
||
'perm.level.tripOwner': '旅行所有者',
|
||
'perm.level.tripMember': '旅行成員',
|
||
'perm.level.everybody': '所有人',
|
||
'perm.cat.trip': '旅行管理',
|
||
'perm.cat.members': '成員管理',
|
||
'perm.cat.files': '檔案',
|
||
'perm.cat.content': '內容與日程',
|
||
'perm.cat.extras': '預算、行李與協作',
|
||
'perm.action.trip_create': '建立旅行',
|
||
'perm.action.trip_edit': '編輯旅行詳情',
|
||
'perm.action.trip_delete': '刪除旅行',
|
||
'perm.action.trip_archive': '歸檔 / 取消歸檔旅行',
|
||
'perm.action.trip_cover_upload': '上傳封面圖片',
|
||
'perm.action.member_manage': '新增 / 移除成員',
|
||
'perm.action.file_upload': '上傳檔案',
|
||
'perm.action.file_edit': '編輯檔案後設資料',
|
||
'perm.action.file_delete': '刪除檔案',
|
||
'perm.action.place_edit': '新增 / 編輯 / 刪除地點',
|
||
'perm.action.day_edit': '編輯日程、備註與分配',
|
||
'perm.action.reservation_edit': '管理預訂',
|
||
'perm.action.budget_edit': '管理預算',
|
||
'perm.action.packing_edit': '管理行李清單',
|
||
'perm.action.collab_edit': '協作(筆記、投票、聊天)',
|
||
'perm.action.share_manage': '管理分享連結',
|
||
'perm.actionHint.trip_create': '誰可以建立新旅行',
|
||
'perm.actionHint.trip_edit': '誰可以更改旅行名稱、日期、描述和貨幣',
|
||
'perm.actionHint.trip_delete': '誰可以永久刪除旅行',
|
||
'perm.actionHint.trip_archive': '誰可以歸檔或取消歸檔旅行',
|
||
'perm.actionHint.trip_cover_upload': '誰可以上傳或更改封面圖片',
|
||
'perm.actionHint.member_manage': '誰可以邀請或移除旅行成員',
|
||
'perm.actionHint.file_upload': '誰可以向旅行上傳檔案',
|
||
'perm.actionHint.file_edit': '誰可以編輯檔案描述和連結',
|
||
'perm.actionHint.file_delete': '誰可以將檔案移至回收站或永久刪除',
|
||
'perm.actionHint.place_edit': '誰可以新增、編輯或刪除地點',
|
||
'perm.actionHint.day_edit': '誰可以編輯日程、日程備註和地點分配',
|
||
'perm.actionHint.reservation_edit': '誰可以建立、編輯或刪除預訂',
|
||
'perm.actionHint.budget_edit': '誰可以建立、編輯或刪除預算專案',
|
||
'perm.actionHint.packing_edit': '誰可以管理行李物品和包袋',
|
||
'perm.actionHint.collab_edit': '誰可以建立筆記、投票和傳送訊息',
|
||
'perm.actionHint.share_manage': '誰可以建立或刪除公開分享連結',
|
||
// Undo
|
||
'undo.button': '撤銷',
|
||
'undo.tooltip': '撤銷:{action}',
|
||
'undo.assignPlace': '地點已分配至某天',
|
||
'undo.removeAssignment': '地點已從某天移除',
|
||
'undo.reorder': '地點已重新排序',
|
||
'undo.optimize': '路線已最佳化',
|
||
'undo.deletePlace': '地點已刪除',
|
||
'undo.deletePlaces': '地點已刪除',
|
||
'undo.moveDay': '地點已移至另一天',
|
||
'undo.lock': '地點鎖定已切換',
|
||
'undo.importGpx': 'GPX 匯入',
|
||
'undo.importKeyholeMarkup': 'KMZ/KML 匯入',
|
||
'undo.importGoogleList': 'Google 地圖匯入',
|
||
'undo.importNaverList': 'Naver 地圖匯入',
|
||
|
||
// Todo
|
||
'todo.subtab.packing': '行李清單',
|
||
'todo.subtab.todo': '待辦事項',
|
||
'todo.completed': '已完成',
|
||
'todo.filter.all': '全部',
|
||
'todo.filter.open': '未完成',
|
||
'todo.filter.done': '已完成',
|
||
'todo.uncategorized': '未分類',
|
||
'todo.namePlaceholder': '任務名稱',
|
||
'todo.descriptionPlaceholder': '說明(可選)',
|
||
'todo.unassigned': '未指派',
|
||
'todo.noCategory': '無分類',
|
||
'todo.hasDescription': '有說明',
|
||
'todo.addItem': '新增任務',
|
||
'todo.sidebar.sortBy': '排序方式',
|
||
'todo.priority': '優先順序',
|
||
'todo.newCategoryLabel': '新增',
|
||
'budget.categoriesLabel': '類別',
|
||
'todo.newCategory': '分類名稱',
|
||
'todo.addCategory': '新增分類',
|
||
'todo.newItem': '新任務',
|
||
'todo.empty': '尚無任務。新增任務以開始!',
|
||
'todo.filter.my': '我的任務',
|
||
'todo.filter.overdue': '已逾期',
|
||
'todo.sidebar.tasks': '任務',
|
||
'todo.sidebar.categories': '分類',
|
||
'todo.detail.title': '任務',
|
||
'todo.detail.description': '說明',
|
||
'todo.detail.category': '分類',
|
||
'todo.detail.dueDate': '到期日',
|
||
'todo.detail.assignedTo': '指派給',
|
||
'todo.detail.delete': '刪除',
|
||
'todo.detail.save': '儲存變更',
|
||
'todo.sortByPrio': '優先順序',
|
||
'todo.detail.priority': '優先順序',
|
||
'todo.detail.noPriority': '無',
|
||
'todo.detail.create': '建立任務',
|
||
|
||
// Notifications
|
||
'notifications.title': '通知',
|
||
'notifications.markAllRead': '全部標為已讀',
|
||
'notifications.deleteAll': '全部刪除',
|
||
'notifications.showAll': '檢視所有通知',
|
||
'notifications.empty': '暫無通知',
|
||
'notifications.emptyDescription': '您已全部查閱!',
|
||
'notifications.all': '全部',
|
||
'notifications.unreadOnly': '未讀',
|
||
'notifications.markRead': '標為已讀',
|
||
'notifications.markUnread': '標為未讀',
|
||
'notifications.delete': '刪除',
|
||
'notifications.system': '系統',
|
||
'notifications.synologySessionCleared.title': 'Synology Photos 已斷線',
|
||
'notifications.synologySessionCleared.text': '您的伺服器或帳號已更改 — 請前往設定重新測試連線。',
|
||
'memories.error.loadAlbums': '載入相簿失敗',
|
||
'memories.error.linkAlbum': '關聯相簿失敗',
|
||
'memories.error.unlinkAlbum': '取消關聯相簿失敗',
|
||
'memories.error.syncAlbum': '同步相簿失敗',
|
||
'memories.error.loadPhotos': '載入照片失敗',
|
||
'memories.error.addPhotos': '新增照片失敗',
|
||
'memories.error.removePhoto': '刪除照片失敗',
|
||
'memories.error.toggleSharing': '更新共享設定失敗',
|
||
'undo.addPlace': '地點已新增',
|
||
'undo.done': '已撤銷:{action}',
|
||
'notifications.test.title': '來自 {actor} 的測試通知',
|
||
'notifications.test.text': '這是一條簡單的測試通知。',
|
||
'notifications.test.booleanTitle': '{actor} 請求您的審批',
|
||
'notifications.test.booleanText': '測試布林通知。',
|
||
'notifications.test.accept': '批准',
|
||
'notifications.test.decline': '拒絕',
|
||
'notifications.test.navigateTitle': '檢視詳情',
|
||
'notifications.test.navigateText': '測試跳轉通知。',
|
||
'notifications.test.goThere': '前往',
|
||
'notifications.test.adminTitle': '管理員廣播',
|
||
'notifications.test.adminText': '{actor} 向所有管理員傳送了測試通知。',
|
||
'notifications.test.tripTitle': '{actor} 在您的行程中發帖',
|
||
'notifications.test.tripText': '行程"{trip}"的測試通知。',
|
||
|
||
// Journey, Dashboard, Nav, DayPlan
|
||
'common.justNow': '剛剛',
|
||
'common.hoursAgo': '{count}小時前',
|
||
'common.daysAgo': '{count}天前',
|
||
'memories.saveRouteNotConfigured': '此提供商未設定儲存路由',
|
||
'memories.testRouteNotConfigured': '此提供商未設定測試路由',
|
||
'memories.fillRequiredFields': '請填寫所有必填欄位',
|
||
'journey.search.placeholder': '搜尋旅程…',
|
||
'journey.search.noResults': '沒有符合「{query}」的旅程',
|
||
'journey.title': '旅程',
|
||
'journey.subtitle': '即時記錄你的旅行',
|
||
'journey.new': '新建旅程',
|
||
'journey.create': '建立',
|
||
'journey.titlePlaceholder': '你要去哪裡?',
|
||
'journey.empty': '還沒有旅程',
|
||
'journey.emptyHint': '開始記錄你的下一次旅行',
|
||
'journey.deleted': '旅程已刪除',
|
||
'journey.createError': '無法建立旅程',
|
||
'journey.deleteError': '無法刪除旅程',
|
||
'journey.deleteConfirmTitle': '刪除',
|
||
'journey.deleteConfirmMessage': '刪除「{title}」?此操作無法復原。',
|
||
'journey.deleteConfirmGeneric': '確定要刪除嗎?',
|
||
'journey.notFound': '未找到旅程',
|
||
'journey.photos': '照片',
|
||
'journey.timelineEmpty': '還沒有行程',
|
||
'journey.timelineEmptyHint': '新增一個打卡或寫一篇日誌開始記錄',
|
||
'journey.status.draft': '草稿',
|
||
'journey.status.active': '進行中',
|
||
'journey.status.completed': '已完成',
|
||
'journey.status.upcoming': '即將開始',
|
||
'journey.status.archived': '已封存',
|
||
'journey.checkin.add': '打卡',
|
||
'journey.checkin.namePlaceholder': '地點名稱',
|
||
'journey.checkin.notesPlaceholder': '備註(可選)',
|
||
'journey.checkin.save': '儲存',
|
||
'journey.checkin.error': '無法儲存打卡',
|
||
'journey.entry.add': '日誌',
|
||
'journey.entry.edit': '編輯條目',
|
||
'journey.entry.titlePlaceholder': '標題(可選)',
|
||
'journey.entry.bodyPlaceholder': '今天發生了什麼?',
|
||
'journey.entry.save': '儲存',
|
||
'journey.entry.error': '無法儲存條目',
|
||
'journey.photo.add': '照片',
|
||
'journey.photo.uploadError': '上傳失敗',
|
||
'journey.share.share': '分享',
|
||
'journey.share.public': '公開',
|
||
'journey.share.linkCopied': '公開連結已複製',
|
||
'journey.share.disabled': '已關閉公開分享',
|
||
'journey.editor.titlePlaceholder': '給這個瞬間起個名字...',
|
||
'journey.editor.bodyPlaceholder': '講述這一天的故事...',
|
||
'journey.editor.placePlaceholder': '地點(可選)',
|
||
'journey.editor.tagsPlaceholder': '標籤:隱藏寶藏、最佳美食、值得再訪...',
|
||
'journey.visibility.private': '私密',
|
||
'journey.visibility.shared': '共享',
|
||
'journey.visibility.public': '公開',
|
||
'journey.emptyState.title': '你的故事從這裡開始',
|
||
'journey.emptyState.subtitle': '在某個地方打卡或寫下你的第一篇日誌',
|
||
'journey.frontpage.subtitle': '將旅行變成永遠不會忘記的故事',
|
||
'journey.frontpage.createJourney': '建立旅程',
|
||
'journey.frontpage.activeJourney': '進行中的旅程',
|
||
'journey.frontpage.allJourneys': '所有旅程',
|
||
'journey.frontpage.journeys': '個旅程',
|
||
'journey.frontpage.createNew': '建立新旅程',
|
||
'journey.frontpage.createNewSub': '選擇旅行、寫故事、分享你的冒險',
|
||
'journey.frontpage.live': '即時',
|
||
'journey.frontpage.synced': '已同步',
|
||
'journey.frontpage.continueWriting': '繼續撰寫',
|
||
'journey.frontpage.updated': '更新於 {time}',
|
||
'journey.frontpage.suggestionLabel': '旅行剛結束',
|
||
'journey.frontpage.suggestionText': '將 <strong>{title}</strong> 變成一段旅程',
|
||
'journey.frontpage.dismiss': '忽略',
|
||
'journey.frontpage.journeyName': '旅程名稱',
|
||
'journey.frontpage.namePlaceholder': '例如 東南亞 2026',
|
||
'journey.frontpage.selectTrips': '選擇旅行',
|
||
'journey.frontpage.tripsSelected': '個旅行已選擇',
|
||
'journey.frontpage.trips': '個旅行',
|
||
'journey.frontpage.placesImported': '個地點將被匯入',
|
||
'journey.frontpage.places': '個地點',
|
||
'journey.detail.backToJourney': '返回旅程',
|
||
'journey.detail.syncedWithTrips': '已與旅行同步',
|
||
'journey.detail.addEntry': '新增條目',
|
||
'journey.detail.newEntry': '新建條目',
|
||
'journey.detail.editEntry': '編輯條目',
|
||
'journey.detail.noEntries': '還沒有條目',
|
||
'journey.detail.noEntriesHint': '新增一個旅行以產生骨架條目',
|
||
'journey.detail.noPhotos': '還沒有照片',
|
||
'journey.detail.noPhotosHint': '上傳照片到條目或瀏覽你的 Immich/Synology 相簿',
|
||
'journey.detail.journeyStats': '旅程統計',
|
||
'journey.detail.syncedTrips': '已同步的旅行',
|
||
'journey.detail.noTripsLinked': '尚未關聯旅行',
|
||
'journey.detail.contributors': '貢獻者',
|
||
'journey.detail.readMore': '閱讀更多',
|
||
'journey.detail.prosCons': '優缺點',
|
||
'journey.detail.photos': '照片',
|
||
'journey.detail.day': '第{number}天',
|
||
'journey.detail.places': '個地點',
|
||
'journey.stats.days': '天',
|
||
'journey.stats.cities': '城市',
|
||
'journey.stats.entries': '條目',
|
||
'journey.stats.photos': '照片',
|
||
'journey.stats.places': '地點',
|
||
'journey.skeletons.show': '顯示建議',
|
||
'journey.skeletons.hide': '隱藏建議',
|
||
'journey.verdict.lovedIt': '非常喜歡',
|
||
'journey.verdict.couldBeBetter': '有待改進',
|
||
'journey.synced.places': '個地點',
|
||
'journey.synced.synced': '已同步',
|
||
'journey.editor.discardChangesConfirm': '您有未儲存的變更。要放棄嗎?',
|
||
'journey.editor.uploadPhotos': '上傳照片',
|
||
'journey.editor.uploading': '上傳中...',
|
||
'journey.editor.fromGallery': '從相簿',
|
||
'journey.editor.allPhotosAdded': '所有照片已新增',
|
||
'journey.editor.writeStory': '寫下你的故事...',
|
||
'journey.editor.prosCons': '優缺點',
|
||
'journey.editor.pros': '優點',
|
||
'journey.editor.cons': '缺點',
|
||
'journey.editor.proPlaceholder': '好的方面...',
|
||
'journey.editor.conPlaceholder': '不好的方面...',
|
||
'journey.editor.addAnother': '再新增一個',
|
||
'journey.editor.date': '日期',
|
||
'journey.editor.location': '地點',
|
||
'journey.editor.searchLocation': '搜尋地點...',
|
||
'journey.editor.mood': '心情',
|
||
'journey.editor.weather': '天氣',
|
||
'journey.editor.photoFirst': '第1張',
|
||
'journey.editor.makeFirst': '設為第1張',
|
||
'journey.editor.searching': '搜尋中...',
|
||
'journey.mood.amazing': '太棒了',
|
||
'journey.mood.good': '不錯',
|
||
'journey.mood.neutral': '一般',
|
||
'journey.mood.rough': '糟糕',
|
||
'journey.weather.sunny': '晴天',
|
||
'journey.weather.partly': '多雲',
|
||
'journey.weather.cloudy': '陰天',
|
||
'journey.weather.rainy': '雨天',
|
||
'journey.weather.stormy': '暴風雨',
|
||
'journey.weather.cold': '雪天',
|
||
'journey.trips.linkTrip': '關聯旅行',
|
||
'journey.trips.searchTrip': '搜尋旅行',
|
||
'journey.trips.searchPlaceholder': '旅行名稱或目的地...',
|
||
'journey.trips.noTripsAvailable': '沒有可用的旅行',
|
||
'journey.trips.link': '關聯',
|
||
'journey.trips.tripLinked': '旅行已關聯',
|
||
'journey.trips.linkFailed': '關聯旅行失敗',
|
||
'journey.trips.addTrip': '新增旅行',
|
||
'journey.trips.unlinkTrip': '取消關聯旅行',
|
||
'journey.trips.unlinkMessage': '取消關聯「{title}」?此旅行中所有已同步的條目和照片將被永久刪除。此操作無法復原。',
|
||
'journey.trips.unlink': '取消關聯',
|
||
'journey.trips.tripUnlinked': '旅行已取消關聯',
|
||
'journey.trips.unlinkFailed': '取消關聯失敗',
|
||
'journey.trips.noTripsLinkedSettings': '未關聯旅行',
|
||
'journey.contributors.invite': '邀請貢獻者',
|
||
'journey.contributors.searchUser': '搜尋使用者',
|
||
'journey.contributors.searchPlaceholder': '使用者名稱或郵箱...',
|
||
'journey.contributors.noUsers': '未找到使用者',
|
||
'journey.contributors.role': '角色',
|
||
'journey.contributors.added': '貢獻者已新增',
|
||
'journey.contributors.addFailed': '新增貢獻者失敗',
|
||
'journey.share.publicShare': '公開分享',
|
||
'journey.share.createLink': '建立分享連結',
|
||
'journey.share.linkCreated': '分享連結已建立',
|
||
'journey.share.createFailed': '建立連結失敗',
|
||
'journey.share.copy': '複製',
|
||
'journey.share.copied': '已複製!',
|
||
'journey.share.timeline': '時間線',
|
||
'journey.share.gallery': '圖庫',
|
||
'journey.share.map': '地圖',
|
||
'journey.share.removeLink': '移除分享連結',
|
||
'journey.share.linkDeleted': '分享連結已刪除',
|
||
'journey.share.deleteFailed': '刪除失敗',
|
||
'journey.share.updateFailed': '更新失敗',
|
||
|
||
// Journey — Invite
|
||
'journey.invite.role': '角色',
|
||
'journey.invite.viewer': '檢視者',
|
||
'journey.invite.editor': '編輯者',
|
||
'journey.invite.invite': '邀請',
|
||
'journey.invite.inviting': '邀請中...',
|
||
'journey.settings.title': '旅程設定',
|
||
'journey.settings.coverImage': '封面圖片',
|
||
'journey.settings.changeCover': '更換封面',
|
||
'journey.settings.addCover': '新增封面圖片',
|
||
'journey.settings.name': '名稱',
|
||
'journey.settings.subtitle': '副標題',
|
||
'journey.settings.subtitlePlaceholder': '例如 泰國、越南和柬埔寨',
|
||
'journey.settings.endJourney': '封存旅程',
|
||
'journey.settings.reopenJourney': '還原旅程',
|
||
'journey.settings.archived': '旅程已封存',
|
||
'journey.settings.reopened': '旅程已重新開啟',
|
||
'journey.settings.endDescription': '隱藏直播標記。您可以隨時重新開啟。',
|
||
'journey.settings.delete': '刪除',
|
||
'journey.settings.deleteJourney': '刪除旅程',
|
||
'journey.settings.deleteMessage': '刪除「{title}」?所有條目和照片將遺失。',
|
||
'journey.settings.saved': '設定已儲存',
|
||
'journey.settings.saveFailed': '儲存失敗',
|
||
'journey.settings.coverUpdated': '封面已更新',
|
||
'journey.settings.coverFailed': '上傳失敗',
|
||
'journey.settings.failedToDelete': '刪除失敗',
|
||
'journey.entries.deleteTitle': '刪除條目',
|
||
'journey.photosUploaded': '{count} 張照片已上傳',
|
||
'journey.photosAdded': '{count} 張照片已新增',
|
||
'journey.public.notFound': '未找到',
|
||
'journey.public.notFoundMessage': '此旅程不存在或連結已過期。',
|
||
'journey.public.readOnly': '唯讀 · 公開旅程',
|
||
'journey.public.tagline': '旅行資源與探索工具包',
|
||
'journey.public.sharedVia': '分享自',
|
||
'journey.public.madeWith': '由',
|
||
'journey.pdf.journeyBook': '旅程手冊',
|
||
'journey.pdf.madeWith': '由 TREK 製作',
|
||
'journey.pdf.day': '第',
|
||
'journey.pdf.theEnd': '終',
|
||
'journey.pdf.saveAsPdf': '儲存為 PDF',
|
||
'journey.pdf.pages': '頁',
|
||
'journey.picker.tripPeriod': '旅行期間',
|
||
'journey.picker.dateRange': '日期範圍',
|
||
'journey.picker.allPhotos': '所有照片',
|
||
'journey.picker.albums': '相簿',
|
||
'journey.picker.selected': '已選擇',
|
||
'journey.picker.addTo': '新增至',
|
||
'journey.picker.newGallery': '新相簿',
|
||
'journey.picker.selectAll': '全選',
|
||
'journey.picker.deselectAll': '取消全選',
|
||
'journey.picker.noAlbums': '未找到相簿',
|
||
'journey.picker.selectDate': '選擇日期',
|
||
'journey.picker.search': '搜尋',
|
||
'dashboard.greeting.morning': '早安,',
|
||
'dashboard.greeting.afternoon': '午安,',
|
||
'dashboard.greeting.evening': '晚安,',
|
||
'dashboard.mobile.liveNow': '進行中',
|
||
'dashboard.mobile.tripProgress': '旅行進度',
|
||
'dashboard.mobile.daysLeft': '還剩 {count} 天',
|
||
'dashboard.mobile.places': '地點',
|
||
'dashboard.mobile.buddies': '旅伴',
|
||
'dashboard.mobile.newTrip': '新建旅行',
|
||
'dashboard.mobile.currency': '貨幣',
|
||
'dashboard.mobile.timezone': '時區',
|
||
'dashboard.mobile.upcomingTrips': '即將到來的旅行',
|
||
'dashboard.mobile.yourTrips': '我的旅行',
|
||
'dashboard.mobile.trips': '個旅行',
|
||
'dashboard.mobile.starts': '出發',
|
||
'dashboard.mobile.duration': '時長',
|
||
'dashboard.mobile.day': '天',
|
||
'dashboard.mobile.days': '天',
|
||
'dashboard.mobile.ongoing': '進行中',
|
||
'dashboard.mobile.startsToday': '今天出發',
|
||
'dashboard.mobile.tomorrow': '明天',
|
||
'dashboard.mobile.inDays': '{count} 天後',
|
||
'dashboard.mobile.inMonths': '{count} 個月後',
|
||
'dashboard.mobile.completed': '已完成',
|
||
'dashboard.mobile.currencyConverter': '匯率轉換',
|
||
'nav.profile': '個人資料',
|
||
'nav.bottomSettings': '設定',
|
||
'nav.bottomAdmin': '管理設定',
|
||
'nav.bottomLogout': '退出登入',
|
||
'nav.bottomAdminBadge': '管理員',
|
||
'dayplan.mobile.addPlace': '新增地點',
|
||
'dayplan.mobile.searchPlaces': '搜尋地點...',
|
||
'dayplan.mobile.allAssigned': '所有地點已分配',
|
||
'dayplan.mobile.noMatch': '無匹配',
|
||
'dayplan.mobile.createNew': '建立新地點',
|
||
'admin.addons.catalog.journey.name': '旅程',
|
||
'admin.addons.catalog.journey.description': '旅行追蹤與旅行日誌,包含打卡、照片和每日故事',
|
||
'notifications.versionAvailable.title': '有可用更新',
|
||
'notifications.versionAvailable.text': 'TREK {version} 現已推出。',
|
||
'notifications.versionAvailable.button': '查看詳情',
|
||
'notif.test.title': '[測試] 通知',
|
||
'notif.test.simple.text': '這是一則簡單的測試通知。',
|
||
'notif.test.boolean.text': '你是否接受這則測試通知?',
|
||
'notif.test.navigate.text': '點擊下方前往儀表板。',
|
||
'notif.trip_invite.title': '旅行邀請',
|
||
'notif.trip_invite.text': '{actor} 邀請你加入 {trip}',
|
||
'notif.booking_change.title': '預訂已更新',
|
||
'notif.booking_change.text': '{actor} 更新了 {trip} 中的預訂',
|
||
'notif.trip_reminder.title': '旅行提醒',
|
||
'notif.trip_reminder.text': '你的旅行 {trip} 即將開始!',
|
||
'notif.todo_due.title': '待辦事項即將到期',
|
||
'notif.todo_due.text': '{trip} 中的 {todo} 將於 {due} 到期',
|
||
'notif.vacay_invite.title': 'Vacay Fusion 邀請',
|
||
'notif.vacay_invite.text': '{actor} 邀請你合併假期計畫',
|
||
'notif.photos_shared.title': '照片已分享',
|
||
'notif.photos_shared.text': '{actor} 在 {trip} 中分享了 {count} 張照片',
|
||
'notif.collab_message.title': '新訊息',
|
||
'notif.collab_message.text': '{actor} 在 {trip} 中傳送了一則訊息',
|
||
'notif.packing_tagged.title': '打包指派',
|
||
'notif.packing_tagged.text': '{actor} 在 {trip} 中將 {category} 指派給你',
|
||
'notif.version_available.title': '有新版本可用',
|
||
'notif.version_available.text': 'TREK {version} 現已推出',
|
||
'notif.action.view_trip': '查看旅行',
|
||
'notif.action.view_collab': '查看訊息',
|
||
'notif.action.view_packing': '查看打包',
|
||
'notif.action.view_photos': '查看照片',
|
||
'notif.action.view_vacay': '查看 Vacay',
|
||
'notif.action.view_admin': '前往管理',
|
||
|
||
// Notifications — dev test events
|
||
|
||
// Notifications
|
||
'notif.action.view': '查看',
|
||
'notif.action.accept': '接受',
|
||
'notif.action.decline': '拒絕',
|
||
'notif.generic.title': '通知',
|
||
'notif.generic.text': '你有一則新通知',
|
||
'notif.dev.unknown_event.title': '[DEV] 未知事件',
|
||
'notif.dev.unknown_event.text': '事件類型「{event}」未在 EVENT_NOTIFICATION_CONFIG 中註冊',
|
||
|
||
// OAuth scope groups
|
||
'oauth.scope.group.trips': '行程',
|
||
'oauth.scope.group.places': '地點',
|
||
'oauth.scope.group.atlas': 'Atlas',
|
||
'oauth.scope.group.packing': '行李',
|
||
'oauth.scope.group.todos': '待辦事項',
|
||
'oauth.scope.group.budget': '預算',
|
||
'oauth.scope.group.reservations': '預訂',
|
||
'oauth.scope.group.collab': '協作',
|
||
'oauth.scope.group.notifications': '通知',
|
||
'oauth.scope.group.vacay': '假期',
|
||
'oauth.scope.group.geo': 'Geo',
|
||
'oauth.scope.group.weather': '天氣',
|
||
'oauth.scope.group.journey': '旅程',
|
||
|
||
// OAuth scope labels & descriptions
|
||
'oauth.scope.trips:read.label': '檢視行程與旅遊計畫',
|
||
'oauth.scope.trips:read.description': '讀取行程、天數、每日筆記及成員',
|
||
'oauth.scope.trips:write.label': '編輯行程與旅遊計畫',
|
||
'oauth.scope.trips:write.description': '建立及更新行程、天數、筆記並管理成員',
|
||
'oauth.scope.trips:delete.label': '刪除行程',
|
||
'oauth.scope.trips:delete.description': '永久刪除整個行程——此操作無法復原',
|
||
'oauth.scope.trips:share.label': '管理分享連結',
|
||
'oauth.scope.trips:share.description': '建立、更新及撤銷行程的公開分享連結',
|
||
'oauth.scope.places:read.label': '檢視地點與地圖資料',
|
||
'oauth.scope.places:read.description': '讀取地點、每日指派、標籤及類別',
|
||
'oauth.scope.places:write.label': '管理地點',
|
||
'oauth.scope.places:write.description': '建立、更新及刪除地點、指派及標籤',
|
||
'oauth.scope.atlas:read.label': '檢視 Atlas',
|
||
'oauth.scope.atlas:read.description': '讀取已造訪的國家、地區及願望清單',
|
||
'oauth.scope.atlas:write.label': '管理 Atlas',
|
||
'oauth.scope.atlas:write.description': '標記已造訪的國家及地區,管理願望清單',
|
||
'oauth.scope.packing:read.label': '檢視行李清單',
|
||
'oauth.scope.packing:read.description': '讀取行李物品、行李袋及類別負責人',
|
||
'oauth.scope.packing:write.label': '管理行李清單',
|
||
'oauth.scope.packing:write.description': '新增、更新、刪除、勾選及重新排序行李物品和行李袋',
|
||
'oauth.scope.todos:read.label': '檢視待辦清單',
|
||
'oauth.scope.todos:read.description': '讀取行程待辦事項及類別負責人',
|
||
'oauth.scope.todos:write.label': '管理待辦清單',
|
||
'oauth.scope.todos:write.description': '建立、更新、勾選、刪除及重新排序待辦事項',
|
||
'oauth.scope.budget:read.label': '檢視預算',
|
||
'oauth.scope.budget:read.description': '讀取預算項目及費用明細',
|
||
'oauth.scope.budget:write.label': '管理預算',
|
||
'oauth.scope.budget:write.description': '建立、更新及刪除預算項目',
|
||
'oauth.scope.reservations:read.label': '檢視預訂',
|
||
'oauth.scope.reservations:read.description': '讀取預訂及住宿詳情',
|
||
'oauth.scope.reservations:write.label': '管理預訂',
|
||
'oauth.scope.reservations:write.description': '建立、更新、刪除及重新排序預訂',
|
||
'oauth.scope.collab:read.label': '檢視協作',
|
||
'oauth.scope.collab:read.description': '讀取協作筆記、投票及訊息',
|
||
'oauth.scope.collab:write.label': '管理協作',
|
||
'oauth.scope.collab:write.description': '建立、更新及刪除協作筆記、投票及訊息',
|
||
'oauth.scope.notifications:read.label': '檢視通知',
|
||
'oauth.scope.notifications:read.description': '讀取應用程式通知及未讀數量',
|
||
'oauth.scope.notifications:write.label': '管理通知',
|
||
'oauth.scope.notifications:write.description': '將通知標為已讀並回覆',
|
||
'oauth.scope.vacay:read.label': '檢視假期計畫',
|
||
'oauth.scope.vacay:read.description': '讀取假期計畫資料、項目及統計',
|
||
'oauth.scope.vacay:write.label': '管理假期計畫',
|
||
'oauth.scope.vacay:write.description': '建立及管理假期項目、節假日及團隊計畫',
|
||
'oauth.scope.geo:read.label': '地圖與地理編碼',
|
||
'oauth.scope.geo:read.description': '搜尋地點、解析地圖 URL 及反向地理編碼坐標',
|
||
'oauth.scope.weather:read.label': '天氣預報',
|
||
'oauth.scope.weather:read.description': '取得行程地點及日期的天氣預報',
|
||
'oauth.scope.journey:read.label': '檢視旅程',
|
||
'oauth.scope.journey:read.description': '讀取旅程、條目及貢獻者清單',
|
||
'oauth.scope.journey:write.label': '管理旅程',
|
||
'oauth.scope.journey:write.description': '建立、更新及刪除旅程及其條目',
|
||
'oauth.scope.journey:share.label': '管理旅程連結',
|
||
'oauth.scope.journey:share.description': '建立、更新及撤銷旅程的公開分享連結',
|
||
|
||
// System notices
|
||
'system_notice.welcome_v1.title': '歡迎使用 TREK',
|
||
'system_notice.welcome_v1.body': '您的全方位旅遊規劃器。建立行程、與朋友分享旅遊,隨時保持條理分明——無論線上或離線皆可。',
|
||
'system_notice.welcome_v1.cta_label': '規劃行程',
|
||
'system_notice.welcome_v1.hero_alt': '風景優美的旅遊目的地與 TREK 介面',
|
||
'system_notice.welcome_v1.highlight_plan': '逐日行程規劃',
|
||
'system_notice.welcome_v1.highlight_share': '與旅伴協作規劃',
|
||
'system_notice.welcome_v1.highlight_offline': '行動裝置支援離線使用',
|
||
'system_notice.dev_test_modal.title': '[Dev] Test notice',
|
||
'system_notice.dev_test_modal.body': 'This is a dev-only test notice.',
|
||
'system_notice.pager.prev': '上一則通知',
|
||
'system_notice.pager.next': '下一則通知',
|
||
'system_notice.pager.counter': '{current} / {total}',
|
||
'system_notice.pager.goto': '前往通知 {n}',
|
||
'system_notice.pager.position': '通知 {current}/{total}',
|
||
// System notices — 3.0.0 upgrade
|
||
'system_notice.v3_photos.title': '3.0 版相片已移至',
|
||
'system_notice.v3_photos.body': '行程規劃器中的**相片**標籤已被移除。您的相片安全— TREK 從未修改您的 Immich 或 Synology 相簿。\n\n相片現在位於 **Journey** 附加元件中。Journey 為選用 — 若尚未啟用,請聯絡管理員於 Admin → 附加元件 中開啟。',
|
||
'system_notice.v3_journey.title': '認識 Journey — 旅行日記',
|
||
'system_notice.v3_journey.body': '將您的旅程記錄為具有時間軸、相片畫庫與互動地圖的豐富旅行故事。',
|
||
'system_notice.v3_journey.cta_label': '開啟 Journey',
|
||
'system_notice.v3_journey.highlight_timeline': '每日時間軸與畫庫',
|
||
'system_notice.v3_journey.highlight_photos': '從 Immich 或 Synology 匯入',
|
||
'system_notice.v3_journey.highlight_share': '公開分享 — 無需登入',
|
||
'system_notice.v3_journey.highlight_export': '匯出為 PDF 相簿书',
|
||
'system_notice.v3_features.title': '3.0 版更多亮點',
|
||
'system_notice.v3_features.body': '這個版本還有一些其他專項值得了解。',
|
||
'system_notice.v3_features.highlight_dashboard': '行動先行儀表板重設計',
|
||
'system_notice.v3_features.highlight_offline': '作為 PWA 的完整離線模式',
|
||
'system_notice.v3_features.highlight_search': '地點搜尋即時自動補全',
|
||
'system_notice.v3_features.highlight_import': '從 KMZ/KML 檔案匯入地點',
|
||
|
||
// System notices — MCP OAuth 2.1 upgrade
|
||
'system_notice.v3_mcp.title': 'MCP:OAuth 2.1 升級',
|
||
'system_notice.v3_mcp.body': 'MCP 整合已全面重構。OAuth 2.1 現為建議的身份驗證方式。靜態令牌(trek_…)已棄用,將於未來版本移除。',
|
||
'system_notice.v3_mcp.highlight_oauth': 'OAuth 2.1 建議(mcp-remote)',
|
||
'system_notice.v3_mcp.highlight_scopes': '24 個細粒度權限範圍',
|
||
'system_notice.v3_mcp.highlight_deprecated': '靜態 trek_ 令牌已棄用',
|
||
'system_notice.v3_mcp.highlight_tools': '擴展工具集與提示詞',
|
||
|
||
// System notices — personal thank you
|
||
'system_notice.v3_thankyou.title': '來自我的一封私人信',
|
||
'system_notice.v3_thankyou.body': '在你繼續之前——我想停下來說幾句。\n\nTREK 最初只是我為自己的旅行而做的一個業餘專案。我從未想過它會成長為 4,000 人信賴的冒險規劃工具。每一顆星標、每一個 issue、每一個功能請求——我都會讀,它們在全職工作和大學學業之間的深夜裡支撐著我繼續前行。\n\n我想讓你們知道:TREK 將永遠開源,永遠可自託管,永遠屬於你們。沒有追蹤,沒有訂閱,沒有任何附加條件。只是一個熱愛旅行的人為同樣熱愛旅行的你們打造的工具。\n\n特別感謝 [jubnl](https://github.com/jubnl)——你已經成為一位不可思議的合作者。3.0 版本中許多精彩之處都留下了你的印記。感謝你在這個專案還很粗糙的時候就選擇了相信它。\n\n也感謝你們每一位——回報了 bug、翻譯了文字、向朋友分享了 TREK,或者只是用它規劃了一次旅行——**謝謝你們**。你們是這一切存在的原因。\n\n願我們一起踏上更多的冒險旅程。\n\n— Maurice\n\n---\n\n[加入 Discord 社群](https://discord.gg/7Q6M6jDwzf)\n\n如果 TREK 讓你的旅行更美好,一杯[小小的咖啡](https://ko-fi.com/mauriceboe)能讓這盞燈一直亮著。',
|
||
'transport.addTransport': 'Add transport',
|
||
'transport.modalTitle.create': 'Add transport',
|
||
'transport.modalTitle.edit': 'Edit transport',
|
||
'transport.title': '交通',
|
||
'transport.addManual': '手動新增交通',
|
||
}
|
||
|
||
export default zhTw |