Files
TREK/shared/src/i18n/zh-TW/dashboard.ts
T
Maurice 6d2dd37414 feat(dashboard): mobile layout, glass UI, context bottom nav + OIDC PKCE (#1079)
* feat(dashboard): mobile layout, glass tiles, plain-text countdown, place photos

- Rework the mobile dashboard: cover hero, separate boarding-pass card,
  trimmed atlas (trips + days only), stacked widgets
- New floating bottom tab bar with a centred context-aware + button
  (new trip / place / journey / entry depending on the page)
- Move profile + notifications into a small top strip on the dashboard
- Desktop: glassmorphic tiles (light + dark), neutral dark palette,
  plain-text countdown module, real place photos in the boarding pass

* i18n(dashboard): translate new dashboard keys across all locales

Fill the dashboard-rework keys (hero, atlas, fx, tz, upcoming, copy
dialog, aria labels, countdown) that were left as English placeholders,
plus the new startsIn/aria keys, for all 19 languages.

* feat(oidc): send PKCE (S256) in the OIDC login flow

The OIDC client now generates a code_verifier per login, sends the
S256 code_challenge on the authorize request and the code_verifier on
the token exchange. Works whether the provider has PKCE optional or
required (fixes login against providers that require PKCE, e.g. Pocket ID).
2026-05-27 23:19:03 +02:00

166 lines
7.8 KiB
TypeScript

import type { TranslationStrings } from '../types';
const dashboard: TranslationStrings = {
'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.newTripSub': '從零開始規劃新旅行',
'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': '結束日期必須晚於開始日期',
'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': '匯率轉換',
'dashboard.filter.planned': '已規劃',
'dashboard.hero.badgeLive': '進行中',
'dashboard.hero.badgeToday': '今天開始',
'dashboard.hero.badgeTomorrow': '明天',
'dashboard.hero.badgeNext': '即將開始',
'dashboard.hero.badgeRecent': '最近',
'dashboard.hero.tripDates': '旅行日期',
'dashboard.hero.noDates': '未設定日期',
'dashboard.hero.travelerOne': '{count} 位旅客',
'dashboard.hero.travelerMany': '{count} 位旅客',
'dashboard.hero.destinationOne': '{count} 個目的地',
'dashboard.hero.destinationMany': '{count} 個目的地',
'dashboard.hero.dayUnitOne': '天',
'dashboard.hero.dayUnitMany': '天',
'dashboard.hero.dayLeft': '剩 1 天',
'dashboard.hero.daysLeft': '剩餘天數',
'dashboard.hero.lastDay': '最後一天',
'dashboard.hero.untilStart': '距開始',
'dashboard.hero.startsIn': '距出發',
'dashboard.atlas.countriesVisited': '地圖集 · 已造訪國家',
'dashboard.atlas.ofTotal': '/ {total}',
'dashboard.atlas.tripsTotal': '旅行總數',
'dashboard.atlas.placesMapped': '已標記 {count} 個地點',
'dashboard.atlas.daysTraveled': '旅行天數',
'dashboard.atlas.daysUnit': '天',
'dashboard.atlas.acrossAllTrips': '所有旅行累計',
'dashboard.atlas.distanceFlown': '飛行距離',
'dashboard.atlas.kmUnit': 'km',
'dashboard.atlas.aroundEquator': '≈ 繞赤道 {count} 圈',
'dashboard.card.idea': '想法',
'dashboard.card.buddyOne': '旅伴',
'dashboard.fx.from': '從',
'dashboard.fx.to': '到',
'dashboard.fx.unavailable': '無法取得匯率',
'dashboard.tz.searchPlaceholder': '搜尋時區…',
'dashboard.tz.empty': '還沒有其他時區 — 用 + 新增一個',
'dashboard.upcoming.title': '即將到來的預訂',
'dashboard.upcoming.empty': '尚未預訂任何內容。',
'dashboard.confirm.copy.title': '複製這次旅行?',
'dashboard.confirm.copy.willCopy': '將被複製',
'dashboard.confirm.copy.will1': '天數、地點和每日安排',
'dashboard.confirm.copy.will2': '住宿和預訂',
'dashboard.confirm.copy.will3': '預算項目和分類順序',
'dashboard.confirm.copy.will4': '打包清單(未勾選)',
'dashboard.confirm.copy.will5': '待辦事項(未指派且未勾選)',
'dashboard.confirm.copy.will6': '每日筆記',
'dashboard.confirm.copy.wontCopy': '不會被複製',
'dashboard.confirm.copy.wont1': '協作者和成員指派',
'dashboard.confirm.copy.wont2': '協作筆記、投票和訊息',
'dashboard.confirm.copy.wont3': '檔案和照片',
'dashboard.confirm.copy.wont4': '共享權杖',
'dashboard.confirm.copy.confirm': '複製旅行',
'dashboard.aria.toggleView': '切換檢視',
'dashboard.aria.filter': '篩選',
'dashboard.aria.duplicate': '複製',
'dashboard.aria.refreshRates': '重新整理匯率',
'dashboard.aria.swapCurrencies': '交換貨幣',
'dashboard.aria.addTimezone': '新增時區',
'dashboard.aria.removeTimezone': '移除 {city}',
};
export default dashboard;