mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-23 15:36:33 +00:00
6fca238440
Pasting a /maps/dir/ link into the list-import box answered "could not extract list ID", which is the whole of the complaint: people share a drive far more often than they share a list, and it is the same gesture — somebody pressed Share in Google Maps. Which screen they were on is the URL's business, so the box takes both and the controller decides. No API key and no call to Google for the link itself: the stops are in the URL. Three shapes arrive — the path form with its data blob, the documented ?api=1&origin= form, and a short link that is one of those after a redirect — and a stop the link spells out in coordinates needs no geocoder at all. One that is only a name is geocoded, keeping the name from the link rather than the one the geocoder answers with: somebody who typed a nickname into Google should not find a street address on their trip. A name nobody can place is left out and counted rather than failing the import, because a route of six stops with five findable is five stops more than the traveller had. Coordinates are read as 1d/2d, longitude before latitude, which is the reverse of a place link and the one way to put Berlin in Somalia. A blob that does not line up with the stops is ignored entirely: half a link read confidently is worse than one read as names.
134 lines
8.2 KiB
TypeScript
134 lines
8.2 KiB
TypeScript
import type { TranslationStrings } from '../types';
|
|
|
|
const places: TranslationStrings = {
|
|
'places.addPlace': 'Thêm địa điểm/Hoạt động',
|
|
'places.importFile': 'Nhập tập tin',
|
|
'places.trackIndicator': 'Đường đi / tuyến đường',
|
|
'places.sidebarDrop': 'Thả để nhập',
|
|
'places.importFileHint':
|
|
'Nhập tệp.gpx,.kml hoặc.kmz từ các công cụ như Google My Maps, Google Earth hoặc trình theo dõi GPS.',
|
|
'places.importFileDropHere': 'Bấm chọn file hoặc kéo thả vào đây',
|
|
'places.importFileDropActive': 'Thả tập tin để chọn',
|
|
'places.importFileUnsupported': 'Loại tệp không được hỗ trợ. Sử dụng.gpx,.kml hoặc.kmz.',
|
|
'places.importFileTooLarge': 'Tệp quá lớn. Kích thước tải lên tối đa là {maxMb} MB.',
|
|
'places.importFileError': 'Nhập không thành công',
|
|
'places.importAllSkipped': 'Tất cả các địa điểm đã có trong chuyến đi.',
|
|
'places.gpxImported': '{count} địa điểm được nhập từ GPX',
|
|
'places.gpxImportTypes': 'Bạn muốn nhập khẩu gì?',
|
|
'places.gpxImportWaypoints': 'Điểm tham chiếu',
|
|
'places.gpxImportRoutes': 'Tuyến đường',
|
|
'places.gpxImportTracks': 'Đường đi (có hình dạng đường dẫn)',
|
|
'places.gpxImportNoneSelected': 'Chọn ít nhất một loại để nhập.',
|
|
'places.kmlImportTypes': 'Bạn muốn nhập khẩu gì?',
|
|
'places.kmlImportPoints': 'Điểm (Dấu vị trí)',
|
|
'places.kmlImportPaths': 'Đường dẫn (LineStrings)',
|
|
'places.kmlImportNoneSelected': 'Chọn ít nhất một loại để nhập.',
|
|
'places.selectionCount': '{count} đã chọn',
|
|
'places.deleteSelected': 'Xóa đã chọn',
|
|
'places.changeCategory': 'Change category',
|
|
'places.categoryChanged': '{count} places updated',
|
|
'places.kmlKmzImported': '{count} địa điểm được nhập từ KMZ/KML',
|
|
'places.urlResolved': 'Địa điểm được nhập từ URL',
|
|
'places.importList': 'Nhập danh sách',
|
|
'places.kmlKmzSummaryValues': 'Dấu vị trí: {total} • Đã nhập: {created} • Đã bỏ qua: {skipped}',
|
|
'places.importGoogleList': 'Danh sách Google',
|
|
'places.importNaverList': 'Danh sách Naver',
|
|
'places.googleListHint': 'Dán liên kết danh sách Google Maps được chia sẻ để nhập tất cả các địa điểm.',
|
|
'places.googleDirHint': 'Liên kết chỉ đường cũng được: các điểm dừng của nó trở thành địa điểm, theo thứ tự lái xe.',
|
|
'places.googleListImported': '{count} địa điểm được nhập từ "{list}"',
|
|
'places.googleListError': 'Không thể nhập danh sách Google Maps',
|
|
'places.naverListHint': 'Dán liên kết danh sách Naver Maps được chia sẻ để nhập tất cả các địa điểm.',
|
|
'places.naverListImported': '{count} địa điểm được nhập từ "{list}"',
|
|
'places.naverListError': 'Không thể nhập danh sách Naver Maps',
|
|
'places.viewDetails': 'Xem chi tiết',
|
|
'places.assignToDay': 'Thêm vào ngày nào?',
|
|
'places.all': 'Tất cả',
|
|
'places.unplanned': 'Không có kế hoạch',
|
|
'places.planned': 'Có kế hoạch',
|
|
'places.filterTracks': 'Bài hát',
|
|
'places.filterByRating': 'Lọc theo đánh giá',
|
|
'places.yourRating': 'Đánh giá của bạn',
|
|
'places.notRated': 'Chưa có đánh giá',
|
|
'places.search': 'Tìm kiếm địa điểm...',
|
|
'places.allCategories': 'Tất cả danh mục',
|
|
'places.categoriesSelected': 'Thể loại',
|
|
'places.clearFilter': 'Xóa bộ lọc',
|
|
'places.count': '{count} địa điểm',
|
|
'places.countSingular': '1 nơi',
|
|
'places.allPlanned': 'Tất cả các địa điểm đều được quy hoạch',
|
|
'places.noneFound': 'Không tìm thấy địa điểm nào',
|
|
'places.editPlace': 'Chỉnh sửa địa điểm',
|
|
'places.formName': 'Tên',
|
|
'places.formNamePlaceholder': 'ví dụ. Tháp Eiffel',
|
|
'places.formDescription': 'Miêu tả',
|
|
'places.formDescriptionPlaceholder': 'Mô tả ngắn...',
|
|
'places.formAddress': 'Địa chỉ',
|
|
'places.formAddressPlaceholder': 'Đường phố, Thành phố, Quốc gia',
|
|
'places.formLat': 'Vĩ độ (ví dụ: 48,8566)',
|
|
'places.formLng': 'Kinh độ (ví dụ: 2,3522)',
|
|
'places.formCategory': 'Loại',
|
|
'places.noCategory': 'Không có danh mục',
|
|
'places.newCategory': 'Danh mục mới',
|
|
'places.categoryNamePlaceholder': 'Tên danh mục',
|
|
'places.formTime': 'Thời gian',
|
|
'places.startTime': 'Bắt đầu',
|
|
'places.endTime': 'Kết thúc',
|
|
'places.endTimeBeforeStart': 'Thời gian kết thúc trước thời gian bắt đầu',
|
|
'places.timeCollision': 'Thời gian trùng lặp với:',
|
|
'places.formWebsite': 'Trang web',
|
|
'places.formNotes': 'Ghi chú',
|
|
'places.formNotesPlaceholder': 'Ghi chú cá nhân...',
|
|
'places.assignmentNotes': 'Ghi chú cho ngày này',
|
|
'places.assignmentNotesPlaceholder': 'Ghi chú cho địa điểm này chỉ trong ngày này...',
|
|
'places.formReservation': 'Sự đặt chỗ',
|
|
'places.reservationNotesPlaceholder': 'Phiếu đặt chỗ, số xác nhận...',
|
|
'places.mapsSearchPlaceholder': 'Tìm kiếm địa điểm...',
|
|
'places.mapsSearchError': 'Tìm kiếm địa điểm không thành công.',
|
|
'places.loadingDetails': 'Đang tải chi tiết địa điểm…',
|
|
'places.osmHint':
|
|
'Sử dụng tìm kiếm OpenStreetMap (không có ảnh, giờ mở cửa hoặc xếp hạng). Thêm khóa Google API trong cài đặt để biết đầy đủ chi tiết.',
|
|
'places.osmActive': 'Đang dùng OpenStreetMap. Khóa API Google bổ sung đánh giá và giờ mở cửa.',
|
|
'places.details.title': 'Chi tiết địa điểm',
|
|
'places.details.empty': 'Chọn một kết quả tìm kiếm để xem hình ảnh và mô tả.',
|
|
'places.details.loading': 'Đang tải chi tiết...',
|
|
'places.details.error': 'Không tải được chi tiết.',
|
|
'places.details.disabled': 'Quản trị viên đã tắt tính năng làm giàu.',
|
|
'places.details.noPhotos': 'Không tìm thấy hình ảnh cho địa điểm này.',
|
|
'places.details.pickImage': 'Chọn một hình ảnh',
|
|
'places.details.description': 'Mô tả',
|
|
'places.details.adopt': 'Dùng văn bản này',
|
|
'places.details.adoptBlocked': 'Hãy xóa trống ô mô tả trước',
|
|
'places.details.facts': 'Thông tin hữu ích',
|
|
'places.details.nothing': 'Không tìm thấy gì cho địa điểm này.',
|
|
'places.details.noKeyTitle': 'Có thêm thông tin chi tiết',
|
|
'places.details.noKeyHint': 'Không có khóa API Google, phiên bản này chỉ dùng nguồn miễn phí. Hãy đề nghị quản trị viên TREK thêm khóa để có xếp hạng, giờ mở cửa và ảnh.',
|
|
'places.details.aboutBrand': 'Về chuỗi',
|
|
'places.details.aboutBrandNote': 'Mô tả chuỗi, không phải chi nhánh này.',
|
|
'places.details.fact.rating': 'Đánh giá',
|
|
'places.details.fact.cuisine': 'Ẩm thực',
|
|
'places.details.fact.openingHours': 'Giờ mở cửa',
|
|
'places.details.fact.menu': 'Thực đơn',
|
|
'places.details.fact.outdoorSeating': 'Chỗ ngồi ngoài trời',
|
|
'places.details.fact.takeaway': 'Mang đi',
|
|
'places.details.fact.delivery': 'Giao hàng',
|
|
'places.details.fact.wheelchair': 'Lối vào không bậc',
|
|
'places.details.fact.vegetarian': 'Chay',
|
|
'places.details.fact.vegan': 'Thuần chay',
|
|
'places.details.fact.internetAccess': 'Wi-Fi',
|
|
'places.categoryCreateError': 'Không tạo được danh mục',
|
|
'places.nameRequired': 'Vui lòng nhập tên',
|
|
'places.saveError': 'Không lưu được',
|
|
'places.createExpenseHint': 'Lưu địa điểm rồi mở trình sửa chi phí.',
|
|
'places.duplicateExists': "'{name}' đã có trong chuyến đi này.",
|
|
'places.addAnyway': 'Vẫn thêm',
|
|
'places.enrichOnImport': 'Làm phong phú các địa điểm thông qua Google',
|
|
'places.enrichOnImportHint':
|
|
'Tra cứu từng địa điểm đã nhập để điền ảnh, địa chỉ và thông tin liên hệ. Sử dụng khóa Google Maps của bạn.',
|
|
'places.uploadImage': 'Tải ảnh lên',
|
|
'places.changeImage': 'Đổi ảnh',
|
|
'places.removeImage': 'Xóa ảnh',
|
|
'places.imageUploadError': 'Không thể tải ảnh lên',
|
|
'places.imageRemoveError': 'Không thể xóa ảnh',
|
|
};
|
|
export default places;
|