Files
TREK/shared/src/i18n/id/places.ts
T
Maurice 3e9626fce9 feat(places): enrich list-imported places via the Places API (#886) (#1161)
* feat(places): enrich list-imported places via the Places API (#886)

Google/Naver list imports only carry a name and coordinates, so the places open
as bare pins — the Maps tab jumps to coordinates, with no photo, address or
open/closed. Add an opt-in "Enrich places via Google" toggle to the list-import
dialog, shown only when a Google Maps key is configured.

When enabled, after the (fast, unchanged) import the server runs a background
pass that re-resolves each place by name — biased to and validated against the
imported coordinates so a common-name search cannot overwrite the wrong place —
and fills the empty address/website/phone/photo columns plus the resolved
google_place_id, pushing each row over the live sync. Opening hours and the
proper Maps link then work on demand from the stored id.

Enrichment only fills empty fields, runs detached so a long list never blocks
the import, and no-ops when no key is configured.

* fix(places): use the ToggleSwitch component for the enrich toggle

Match the rest of the app — the import-enrichment opt-in used a raw checkbox;
swap it for the shared ToggleSwitch (text left, switch right) like the settings
toggles.
2026-06-14 00:54:11 +02:00

98 lines
4.7 KiB
TypeScript

import type { TranslationStrings } from '../types';
const places: TranslationStrings = {
'places.addPlace': 'Tambah Tempat/Aktivitas',
'places.importFile': 'Impor file',
'places.sidebarDrop': 'Lepas untuk mengimpor',
'places.importFileHint':
'Impor file .gpx, .kml, atau .kmz dari Google My Maps, Google Earth, atau pelacak GPS.',
'places.importFileDropHere':
'Klik untuk memilih file atau seret dan lepas di sini',
'places.importFileDropActive': 'Lepas file untuk memilih',
'places.importFileUnsupported':
'Jenis file tidak didukung. Gunakan .gpx, .kml, atau .kmz.',
'places.importFileTooLarge':
'File terlalu besar. Ukuran unggah maksimum adalah {maxMb} MB.',
'places.importFileError': 'Impor gagal',
'places.importAllSkipped': 'Semua tempat sudah ada di perjalanan.',
'places.gpxImported': '{count} tempat diimpor dari GPX',
'places.gpxImportTypes': 'Apa yang ingin diimpor?',
'places.gpxImportWaypoints': 'Titik jalan',
'places.gpxImportRoutes': 'Rute',
'places.gpxImportTracks': 'Trek (dengan geometri jalur)',
'places.gpxImportNoneSelected': 'Pilih setidaknya satu jenis untuk diimpor.',
'places.kmlImportTypes': 'Apa yang ingin diimpor?',
'places.kmlImportPoints': 'Titik (Placemarks)',
'places.kmlImportPaths': 'Jalur (LineStrings)',
'places.kmlImportNoneSelected': 'Pilih setidaknya satu jenis.',
'places.selectionCount': '{count} dipilih',
'places.deleteSelected': 'Hapus yang dipilih',
'places.kmlKmzImported': '{count} tempat diimpor dari KMZ/KML',
'places.urlResolved': 'Tempat diimpor dari URL',
'places.importList': 'Impor Daftar',
'places.kmlKmzSummaryValues':
'Placemark: {total} • Diimpor: {created} • Dilewati: {skipped}',
'places.importGoogleList': 'Daftar Google',
'places.importNaverList': 'Daftar Naver',
'places.googleListHint':
'Tempel tautan daftar Google Maps yang dibagikan untuk mengimpor semua tempat.',
'places.googleListImported': '{count} tempat diimpor dari "{list}"',
'places.googleListError': 'Gagal mengimpor daftar Google Maps',
'places.naverListHint':
'Tempel tautan daftar Naver Maps yang dibagikan untuk mengimpor semua tempat.',
'places.naverListImported': '{count} tempat diimpor dari "{list}"',
'places.naverListError': 'Gagal mengimpor daftar Naver Maps',
'places.viewDetails': 'Lihat Detail',
'places.assignToDay': 'Tambah ke hari mana?',
'places.all': 'Semua',
'places.unplanned': 'Belum direncanakan',
'places.filterTracks': 'Trek',
'places.search': 'Cari tempat...',
'places.allCategories': 'Semua Kategori',
'places.categoriesSelected': 'kategori',
'places.clearFilter': 'Hapus filter',
'places.count': '{count} tempat',
'places.countSingular': '1 tempat',
'places.allPlanned': 'Semua tempat sudah direncanakan',
'places.noneFound': 'Tidak ada tempat ditemukan',
'places.editPlace': 'Edit Tempat',
'places.formName': 'Nama',
'places.formNamePlaceholder': 'mis. Menara Eiffel',
'places.formDescription': 'Deskripsi',
'places.formDescriptionPlaceholder': 'Deskripsi singkat...',
'places.formAddress': 'Alamat',
'places.formAddressPlaceholder': 'Jalan, Kota, Negara',
'places.formLat': 'Lintang (mis. 48.8566)',
'places.formLng': 'Bujur (mis. 2.3522)',
'places.formCategory': 'Kategori',
'places.noCategory': 'Tanpa Kategori',
'places.categoryNamePlaceholder': 'Nama kategori',
'places.formTime': 'Waktu',
'places.startTime': 'Mulai',
'places.endTime': 'Selesai',
'places.endTimeBeforeStart': 'Waktu selesai lebih awal dari waktu mulai',
'places.timeCollision': 'Waktu tumpang tindih dengan:',
'places.formWebsite': 'Situs web',
'places.formNotes': 'Catatan',
'places.formNotesPlaceholder': 'Catatan pribadi...',
'places.formReservation': 'Reservasi',
'places.reservationNotesPlaceholder':
'Catatan reservasi, nomor konfirmasi...',
'places.mapsSearchPlaceholder': 'Cari tempat...',
'places.mapsSearchError': 'Pencarian tempat gagal.',
'places.loadingDetails': 'Memuat detail tempat…',
'places.osmHint':
'Menggunakan pencarian OpenStreetMap (tanpa foto, jam buka, atau penilaian). Tambahkan Google API key di pengaturan untuk detail lengkap.',
'places.osmActive':
'Pencarian via OpenStreetMap (tanpa foto, penilaian, atau jam buka). Tambahkan Google API key di Pengaturan untuk data yang lebih lengkap.',
'places.categoryCreateError': 'Gagal membuat kategori',
'places.nameRequired': 'Harap masukkan nama',
'places.saveError': 'Gagal menyimpan',
'places.duplicateExists': "'{name}' sudah ada di perjalanan ini.",
'places.addAnyway': 'Tetap tambahkan',
'places.enrichOnImport': 'Perkaya tempat via Google',
'places.enrichOnImportHint':
'Mencari setiap tempat yang diimpor untuk menambahkan foto, alamat, dan kontak. Memerlukan kunci Google Maps.',
};
export default places;