mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-07-18 19:36:02 +00:00
a83ecc4ffb
- #1394 planner: two transports on one day no longer draw a phantom airport→airport road route between them (a run is only a drive when it holds a real place); mirrored in the map hook and the sidebar's leg list, with a regression test. - #1392 planner: the per-day Route button now points the selection at the tapped day before toggling, so on mobile it computes that day's route instead of the previously selected one, and only the selected day's button reads as active. - #1372 planner: the "open in Google Maps" route now includes the day's hotel bookends, matching the drawn map route. - #1375 planner: a multi-day accommodation no longer thrashes the plan scroll — the auto-scroll lock keys on the selection identity, not the per-day row. - #1377 planner: the reset-orientation compass is now shown on small screens too. - #1382 budget: settlement nets in the trip's canonical currency and converts to the display currency once, so balances no longer drift with live FX and no phantom third-party micro-flows appear (identity, hence unchanged, when they're the same). - #1366 atlas: countries reached only by a transport booking (no lodging/place) now count as visited, on both the dashboard and the Atlas page. - #1383 bookings: a hotel linked to an accommodation shows only its day-range, not a duplicate stamped date row, and the range stays correct after an edit. - #1353 bookings: any non-hotel reservation can now link an existing trip place/activity. - #1390 i18n: fix the Polish word for "buddies" (Towarzysze → Współpodróżnicy). - #1265 planner: drag-and-drop of places now works on touch devices via a polyfill.
170 lines
8.7 KiB
TypeScript
170 lines
8.7 KiB
TypeScript
import type { TranslationStrings } from '../types';
|
||
|
||
const reservations: TranslationStrings = {
|
||
'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.layover.route': '航線',
|
||
'reservations.layover.stop': '中轉站',
|
||
'reservations.layover.addStop': '新增中轉站',
|
||
'reservations.layover.connection': '轉乘航班',
|
||
'reservations.layover.layover': '轉機等候',
|
||
'reservations.needsReview': '待確認',
|
||
'reservations.needsReviewHint': '無法自動匹配機場 — 請確認位置。',
|
||
'reservations.searchLocation': '搜尋車站、港口、地址...',
|
||
'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.linkPlace': '地點 / 活動',
|
||
'reservations.meta.pickPlace': '選擇地點 / 活動',
|
||
'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.type.bus': '公車',
|
||
'reservations.type.ferry': '渡輪',
|
||
'reservations.type.bicycle': '自行車',
|
||
'reservations.type.taxi': '計程車',
|
||
'reservations.type.transport_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': '新增預訂',
|
||
'reservations.import.title': '匯入訂位確認',
|
||
'reservations.import.cta': '從檔案匯入',
|
||
'reservations.import.dropHere': '將訂位確認檔案拖放到此處,或點擊選擇',
|
||
'reservations.import.dropActive': '放開檔案以匯入',
|
||
'reservations.import.acceptedFormats': '支援格式:EML、PDF、PKPass、HTML、TXT(每個最大 10 MB,最多 5 個檔案)',
|
||
'reservations.import.parsing': '正在解析檔案…',
|
||
'reservations.import.previewHeading': '找到 {count} 筆預訂',
|
||
'reservations.import.previewEmpty': '無法從上傳的檔案中提取任何預訂資訊。',
|
||
'reservations.import.removeItem': '移除',
|
||
'reservations.import.needsReview': 'Review',
|
||
'reservations.import.tryAi': 'Try AI parsing',
|
||
'reservations.import.aiParsing': 'Parsing with AI…',
|
||
'reservations.import.confirm': '匯入 {count} 筆預訂',
|
||
'reservations.import.back': '返回',
|
||
'reservations.import.success': '已匯入 {count} 筆預訂',
|
||
'reservations.import.partialFailure': '已匯入 {created} 筆,{failed} 筆失敗',
|
||
'reservations.import.error': '解析失敗。請確保檔案是有效的訂位確認。',
|
||
'reservations.import.unavailable': '此伺服器上的預訂匯入功能不可用。',
|
||
'reservations.import.unsupportedFormat': '不支援的檔案格式。請使用 EML、PDF、PKPass、HTML 或 TXT。',
|
||
'reservations.import.fileTooLarge': '檔案「{name}」超過 10 MB 限制。',
|
||
'reservations.airtrail.title': '從 AirTrail 匯入',
|
||
'reservations.airtrail.cta': 'AirTrail',
|
||
'reservations.airtrail.synced': 'AirTrail',
|
||
'reservations.airtrail.syncedHint': '已從 AirTrail 同步——編輯會雙向保持同步。',
|
||
'reservations.airtrail.notSynced': '未同步',
|
||
'reservations.airtrail.notSyncedHint': '此航班已在 AirTrail 中移除,不再同步。',
|
||
'reservations.airtrail.loadError': '無法載入你的 AirTrail 航班。',
|
||
'reservations.airtrail.imported': '已匯入 {count} 筆航班',
|
||
'reservations.airtrail.skippedDuplicate': '{count} 筆已在此行程中,已略過',
|
||
'reservations.airtrail.nothingImported': '沒有可匯入的項目。',
|
||
'reservations.airtrail.importError': '匯入失敗。請再試一次。',
|
||
'reservations.airtrail.undo': '從 AirTrail 匯入',
|
||
'reservations.airtrail.alreadyImported': '已匯入',
|
||
'reservations.airtrail.duringTrip': '行程期間',
|
||
'reservations.airtrail.otherFlights': '其他航班',
|
||
'reservations.airtrail.empty': '在你的 AirTrail 帳戶中找不到任何航班。',
|
||
'reservations.airtrail.importCta': '匯入 {count}',
|
||
'reservations.costsLabel': 'Costs',
|
||
'reservations.createExpense': 'Create expense',
|
||
'reservations.createExpenseHint': 'Saves the booking, then opens the Costs editor.',
|
||
'reservations.linkedExpense': 'Linked expense',
|
||
'reservations.removeExpense': 'Remove expense',
|
||
'reservations.urlLabel': '連結',
|
||
'reservations.urlPlaceholder': 'https://...',
|
||
};
|
||
export default reservations;
|