mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-19 05:26:47 +00:00
feat(collections): import a whole trip's places into a list (#1903)
* feat(collections): preview which of a trip's places a list already holds The bulk import endpoint has been there since the select-mode copy, but nothing calls it and it only reports duplicates after the fact. A dialog needs the verdict up front, so /:id/importable/:tripId returns the trip's places with the duplicate check the import itself applies, plus whether any day holds the place. * feat(collections): import a whole trip's places into a list Two steps: pick a trip, then tick its places. Places already on the list are greyed out and unpickable, and the ones no day holds start selected — those are the plans a trip left behind, which is the reason to import at all. Sorted so a mostly-saved trip reads as the two that are left rather than a wall of grey. * feat(collections): reach the trip import from the filter row and an empty list * i18n(collections): translate the trip import into all locales * fix(collections): stop the label dialog's buttons wrapping mid-word Three actions in a max-w-sm footer wrapped into two lines each. The assign button also painted white text on the accent, which disappears on a light one. * docs(collections): document the trip import
This commit is contained in:
@@ -314,3 +314,28 @@ export const collectionMembershipSchema = z.object({
|
||||
lists: z.array(z.object({ collection_id: z.number(), name: z.string(), place_id: z.number() })),
|
||||
});
|
||||
export type CollectionMembership = z.infer<typeof collectionMembershipSchema>;
|
||||
|
||||
/** One trip place as offered by the import preview. `already_in_list` is the SAME dedup
|
||||
* verdict the bulk import applies (name, or coordinates within tolerance), resolved on the
|
||||
* server so the dialog can never disagree with what the write path then does. `scheduled`
|
||||
* is false for a place no day holds — the ones a trip left behind, which is exactly what
|
||||
* the import is for, so the dialog pre-selects them. */
|
||||
export const collectionImportablePlaceSchema = z.object({
|
||||
place_id: z.number(),
|
||||
name: z.string(),
|
||||
address: z.string().nullable(),
|
||||
lat: z.number().nullable(),
|
||||
lng: z.number().nullable(),
|
||||
category_id: z.number().nullable(),
|
||||
image_url: z.string().nullable(),
|
||||
already_in_list: z.boolean(),
|
||||
scheduled: z.boolean(),
|
||||
day_number: z.number().nullable(),
|
||||
date: z.string().nullable(),
|
||||
});
|
||||
export type CollectionImportablePlace = z.infer<typeof collectionImportablePlaceSchema>;
|
||||
|
||||
export const collectionImportablesResponseSchema = z.object({
|
||||
places: z.array(collectionImportablePlaceSchema),
|
||||
});
|
||||
export type CollectionImportablesResponse = z.infer<typeof collectionImportablesResponseSchema>;
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': 'إضافة مكان',
|
||||
'collections.addPlaceSearch': 'ابحث عن مكان…',
|
||||
'collections.addPlaceHint': 'ابحث لإضافة مكان إلى هذه القائمة',
|
||||
'collections.importFromTrip': 'استيراد من رحلة',
|
||||
'collections.importTitle': 'استيراد من رحلة',
|
||||
'collections.importDoneTitle': 'اكتمل الاستيراد',
|
||||
'collections.importPickTripHint': 'اختر رحلة وانقل أماكنها إلى {name}.',
|
||||
'collections.importNoTrips': 'لا توجد رحلات بعد',
|
||||
'collections.importPlacesCount': '{count} أماكن',
|
||||
'collections.importSearchPlaces': 'البحث عن أماكن…',
|
||||
'collections.importOnlyNew': 'الجديد فقط',
|
||||
'collections.importSelectAll': 'تحديد الكل',
|
||||
'collections.importClearSelection': 'إلغاء التحديد',
|
||||
'collections.importAlreadySaved': 'محفوظ بالفعل',
|
||||
'collections.importUnscheduled': 'بدون يوم',
|
||||
'collections.importOnDay': 'اليوم {count}',
|
||||
'collections.importSelectedCount': 'تم تحديد {count}',
|
||||
'collections.importAction': 'استيراد {count}',
|
||||
'collections.importEmptyTrip': 'لا تحتوي هذه الرحلة على أماكن بعد',
|
||||
'collections.importNothingNew': 'كل شيء من هذه الرحلة موجود بالفعل في القائمة',
|
||||
'collections.importDone': 'تمت إضافة {count} أماكن',
|
||||
'collections.importDoneSkipped': '{count} كانت موجودة بالفعل وبقيت كما هي',
|
||||
'collections.importDoneClean': 'جميعها الآن في {name}',
|
||||
'collections.sort.default': 'افتراضي',
|
||||
'collections.sort.nameAsc': 'الاسم (أ–ي)',
|
||||
'collections.coordinates': 'الإحداثيات',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': 'Adicionar um lugar',
|
||||
'collections.addPlaceSearch': 'Pesquisar um lugar…',
|
||||
'collections.addPlaceHint': 'Pesquise para adicionar um lugar a esta lista',
|
||||
'collections.importFromTrip': 'Importar de uma viagem',
|
||||
'collections.importTitle': 'Importar de uma viagem',
|
||||
'collections.importDoneTitle': 'Importação concluída',
|
||||
'collections.importPickTripHint': 'Escolha uma viagem e leve os lugares dela para {name}.',
|
||||
'collections.importNoTrips': 'Nenhuma viagem ainda',
|
||||
'collections.importPlacesCount': '{count} lugares',
|
||||
'collections.importSearchPlaces': 'Buscar lugares…',
|
||||
'collections.importOnlyNew': 'Apenas novos',
|
||||
'collections.importSelectAll': 'Selecionar tudo',
|
||||
'collections.importClearSelection': 'Limpar seleção',
|
||||
'collections.importAlreadySaved': 'Já salvo',
|
||||
'collections.importUnscheduled': 'Sem dia',
|
||||
'collections.importOnDay': 'Dia {count}',
|
||||
'collections.importSelectedCount': '{count} selecionados',
|
||||
'collections.importAction': 'Importar {count}',
|
||||
'collections.importEmptyTrip': 'Esta viagem ainda não tem lugares',
|
||||
'collections.importNothingNew': 'Tudo desta viagem já está nesta lista',
|
||||
'collections.importDone': '{count} lugares adicionados',
|
||||
'collections.importDoneSkipped': '{count} já estavam na lista e ficaram como estavam',
|
||||
'collections.importDoneClean': 'Agora estão todos em {name}',
|
||||
'collections.sort.default': 'Padrão',
|
||||
'collections.sort.nameAsc': 'Nome (A–Z)',
|
||||
'collections.coordinates': 'Coordenadas',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': 'Afegir un lloc',
|
||||
'collections.addPlaceSearch': 'Cercar un lloc…',
|
||||
'collections.addPlaceHint': 'Cerca per afegir un lloc a aquesta llista',
|
||||
'collections.importFromTrip': 'Importa des d’un viatge',
|
||||
'collections.importTitle': 'Importa des d’un viatge',
|
||||
'collections.importDoneTitle': 'Importació acabada',
|
||||
'collections.importPickTripHint': 'Tria un viatge i porta’n els llocs a {name}.',
|
||||
'collections.importNoTrips': 'Encara no hi ha viatges',
|
||||
'collections.importPlacesCount': '{count} llocs',
|
||||
'collections.importSearchPlaces': 'Cerca llocs…',
|
||||
'collections.importOnlyNew': 'Només nous',
|
||||
'collections.importSelectAll': 'Selecciona-ho tot',
|
||||
'collections.importClearSelection': 'Esborra la selecció',
|
||||
'collections.importAlreadySaved': 'Ja desat',
|
||||
'collections.importUnscheduled': 'Sense dia',
|
||||
'collections.importOnDay': 'Dia {count}',
|
||||
'collections.importSelectedCount': '{count} seleccionats',
|
||||
'collections.importAction': 'Importa {count}',
|
||||
'collections.importEmptyTrip': 'Aquest viatge encara no té llocs',
|
||||
'collections.importNothingNew': 'Tot aquest viatge ja és en aquesta llista',
|
||||
'collections.importDone': 'S’han afegit {count} llocs',
|
||||
'collections.importDoneSkipped': '{count} ja hi eren i s’han deixat igual',
|
||||
'collections.importDoneClean': 'Ara són tots a {name}',
|
||||
'collections.sort.default': 'Predeterminat',
|
||||
'collections.sort.nameAsc': 'Nom (A–Z)',
|
||||
'collections.coordinates': 'Coordenades',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': 'Přidat místo',
|
||||
'collections.addPlaceSearch': 'Hledat místo…',
|
||||
'collections.addPlaceHint': 'Vyhledejte a přidejte místo do tohoto seznamu',
|
||||
'collections.importFromTrip': 'Importovat z cesty',
|
||||
'collections.importTitle': 'Importovat z cesty',
|
||||
'collections.importDoneTitle': 'Import dokončen',
|
||||
'collections.importPickTripHint': 'Vyber cestu a přenes její místa do {name}.',
|
||||
'collections.importNoTrips': 'Zatím žádné cesty',
|
||||
'collections.importPlacesCount': '{count} míst',
|
||||
'collections.importSearchPlaces': 'Hledat místa…',
|
||||
'collections.importOnlyNew': 'Jen nová',
|
||||
'collections.importSelectAll': 'Vybrat vše',
|
||||
'collections.importClearSelection': 'Zrušit výběr',
|
||||
'collections.importAlreadySaved': 'Již uloženo',
|
||||
'collections.importUnscheduled': 'Bez dne',
|
||||
'collections.importOnDay': 'Den {count}',
|
||||
'collections.importSelectedCount': 'Vybráno: {count}',
|
||||
'collections.importAction': 'Importovat {count}',
|
||||
'collections.importEmptyTrip': 'Tato cesta zatím nemá žádná místa',
|
||||
'collections.importNothingNew': 'Vše z této cesty už na seznamu je',
|
||||
'collections.importDone': 'Přidáno {count} míst',
|
||||
'collections.importDoneSkipped': '{count} už na seznamu bylo a zůstalo beze změny',
|
||||
'collections.importDoneClean': 'Teď jsou všechna v {name}',
|
||||
'collections.sort.default': 'Výchozí',
|
||||
'collections.sort.nameAsc': 'Název (A–Z)',
|
||||
'collections.coordinates': 'Souřadnice',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': 'Ort hinzufügen',
|
||||
'collections.addPlaceSearch': 'Nach einem Ort suchen…',
|
||||
'collections.addPlaceHint': 'Suchen, um einen Ort zur Liste hinzuzufügen',
|
||||
'collections.importFromTrip': 'Aus einer Reise übernehmen',
|
||||
'collections.importTitle': 'Aus einer Reise übernehmen',
|
||||
'collections.importDoneTitle': 'Übernahme abgeschlossen',
|
||||
'collections.importPickTripHint': 'Wähle eine Reise und übernimm ihre Orte in {name}.',
|
||||
'collections.importNoTrips': 'Noch keine Reisen',
|
||||
'collections.importPlacesCount': '{count} Orte',
|
||||
'collections.importSearchPlaces': 'Orte durchsuchen…',
|
||||
'collections.importOnlyNew': 'Nur neue',
|
||||
'collections.importSelectAll': 'Alle auswählen',
|
||||
'collections.importClearSelection': 'Auswahl aufheben',
|
||||
'collections.importAlreadySaved': 'Schon gespeichert',
|
||||
'collections.importUnscheduled': 'Ohne Tag',
|
||||
'collections.importOnDay': 'Tag {count}',
|
||||
'collections.importSelectedCount': '{count} ausgewählt',
|
||||
'collections.importAction': '{count} übernehmen',
|
||||
'collections.importEmptyTrip': 'Diese Reise hat noch keine Orte',
|
||||
'collections.importNothingNew': 'Alles aus dieser Reise steht schon auf der Liste',
|
||||
'collections.importDone': '{count} Orte hinzugefügt',
|
||||
'collections.importDoneSkipped': '{count} standen schon auf der Liste und blieben unverändert',
|
||||
'collections.importDoneClean': 'Sie stehen jetzt alle in {name}',
|
||||
'collections.sort.default': 'Standard',
|
||||
'collections.sort.nameAsc': 'Name (A–Z)',
|
||||
'collections.coordinates': 'Koordinaten',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': 'Add a place',
|
||||
'collections.addPlaceSearch': 'Search for a place…',
|
||||
'collections.addPlaceHint': 'Search to add a place to this list',
|
||||
'collections.importFromTrip': 'Import from a trip',
|
||||
'collections.importTitle': 'Import from a trip',
|
||||
'collections.importDoneTitle': 'Import finished',
|
||||
'collections.importPickTripHint': 'Pick a trip and take its places into {name}.',
|
||||
'collections.importNoTrips': 'No trips yet',
|
||||
'collections.importPlacesCount': '{count} places',
|
||||
'collections.importSearchPlaces': 'Search places…',
|
||||
'collections.importOnlyNew': 'Only new',
|
||||
'collections.importSelectAll': 'Select all',
|
||||
'collections.importClearSelection': 'Clear selection',
|
||||
'collections.importAlreadySaved': 'Already saved',
|
||||
'collections.importUnscheduled': 'Unscheduled',
|
||||
'collections.importOnDay': 'Day {count}',
|
||||
'collections.importSelectedCount': '{count} selected',
|
||||
'collections.importAction': 'Import {count}',
|
||||
'collections.importEmptyTrip': 'This trip has no places yet',
|
||||
'collections.importNothingNew': 'Everything from this trip is already on this list',
|
||||
'collections.importDone': '{count} places added',
|
||||
'collections.importDoneSkipped': '{count} were already on the list and stayed as they were',
|
||||
'collections.importDoneClean': 'They are all in {name} now',
|
||||
'collections.sort.default': 'Default',
|
||||
'collections.sort.nameAsc': 'Name (A–Z)',
|
||||
'collections.coordinates': 'Coordinates',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': 'Añadir un lugar',
|
||||
'collections.addPlaceSearch': 'Buscar un lugar…',
|
||||
'collections.addPlaceHint': 'Busca para añadir un lugar a esta lista',
|
||||
'collections.importFromTrip': 'Importar de un viaje',
|
||||
'collections.importTitle': 'Importar de un viaje',
|
||||
'collections.importDoneTitle': 'Importación terminada',
|
||||
'collections.importPickTripHint': 'Elige un viaje y lleva sus lugares a {name}.',
|
||||
'collections.importNoTrips': 'Aún no hay viajes',
|
||||
'collections.importPlacesCount': '{count} lugares',
|
||||
'collections.importSearchPlaces': 'Buscar lugares…',
|
||||
'collections.importOnlyNew': 'Solo nuevos',
|
||||
'collections.importSelectAll': 'Seleccionar todo',
|
||||
'collections.importClearSelection': 'Quitar selección',
|
||||
'collections.importAlreadySaved': 'Ya guardado',
|
||||
'collections.importUnscheduled': 'Sin día',
|
||||
'collections.importOnDay': 'Día {count}',
|
||||
'collections.importSelectedCount': '{count} seleccionados',
|
||||
'collections.importAction': 'Importar {count}',
|
||||
'collections.importEmptyTrip': 'Este viaje aún no tiene lugares',
|
||||
'collections.importNothingNew': 'Todo este viaje ya está en la lista',
|
||||
'collections.importDone': 'Se añadieron {count} lugares',
|
||||
'collections.importDoneSkipped': '{count} ya estaban en la lista y se quedaron igual',
|
||||
'collections.importDoneClean': 'Ahora están todos en {name}',
|
||||
'collections.sort.default': 'Predeterminado',
|
||||
'collections.sort.nameAsc': 'Nombre (A–Z)',
|
||||
'collections.coordinates': 'Coordenadas',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': 'Ajouter un lieu',
|
||||
'collections.addPlaceSearch': 'Rechercher un lieu…',
|
||||
'collections.addPlaceHint': 'Recherchez pour ajouter un lieu à cette liste',
|
||||
'collections.importFromTrip': 'Importer depuis un voyage',
|
||||
'collections.importTitle': 'Importer depuis un voyage',
|
||||
'collections.importDoneTitle': 'Import terminé',
|
||||
'collections.importPickTripHint': 'Choisissez un voyage et récupérez ses lieux dans {name}.',
|
||||
'collections.importNoTrips': 'Aucun voyage pour l’instant',
|
||||
'collections.importPlacesCount': '{count} lieux',
|
||||
'collections.importSearchPlaces': 'Rechercher des lieux…',
|
||||
'collections.importOnlyNew': 'Nouveaux seulement',
|
||||
'collections.importSelectAll': 'Tout sélectionner',
|
||||
'collections.importClearSelection': 'Effacer la sélection',
|
||||
'collections.importAlreadySaved': 'Déjà enregistré',
|
||||
'collections.importUnscheduled': 'Sans jour',
|
||||
'collections.importOnDay': 'Jour {count}',
|
||||
'collections.importSelectedCount': '{count} sélectionnés',
|
||||
'collections.importAction': 'Importer {count}',
|
||||
'collections.importEmptyTrip': 'Ce voyage n’a pas encore de lieux',
|
||||
'collections.importNothingNew': 'Tout ce voyage figure déjà dans cette liste',
|
||||
'collections.importDone': '{count} lieux ajoutés',
|
||||
'collections.importDoneSkipped': '{count} y étaient déjà et n’ont pas bougé',
|
||||
'collections.importDoneClean': 'Ils sont tous dans {name} maintenant',
|
||||
'collections.sort.default': 'Par défaut',
|
||||
'collections.sort.nameAsc': 'Nom (A–Z)',
|
||||
'collections.coordinates': 'Coordonnées',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': 'Προσθήκη τόπου',
|
||||
'collections.addPlaceSearch': 'Αναζήτηση τόπου…',
|
||||
'collections.addPlaceHint': 'Αναζητήστε για να προσθέσετε έναν τόπο σε αυτήν τη λίστα',
|
||||
'collections.importFromTrip': 'Εισαγωγή από ταξίδι',
|
||||
'collections.importTitle': 'Εισαγωγή από ταξίδι',
|
||||
'collections.importDoneTitle': 'Η εισαγωγή ολοκληρώθηκε',
|
||||
'collections.importPickTripHint': 'Διάλεξε ένα ταξίδι και πέρασε τα μέρη του στη λίστα {name}.',
|
||||
'collections.importNoTrips': 'Δεν υπάρχουν ακόμη ταξίδια',
|
||||
'collections.importPlacesCount': '{count} μέρη',
|
||||
'collections.importSearchPlaces': 'Αναζήτηση μερών…',
|
||||
'collections.importOnlyNew': 'Μόνο νέα',
|
||||
'collections.importSelectAll': 'Επιλογή όλων',
|
||||
'collections.importClearSelection': 'Καθαρισμός επιλογής',
|
||||
'collections.importAlreadySaved': 'Ήδη αποθηκευμένο',
|
||||
'collections.importUnscheduled': 'Χωρίς ημέρα',
|
||||
'collections.importOnDay': 'Ημέρα {count}',
|
||||
'collections.importSelectedCount': 'Επιλέχθηκαν {count}',
|
||||
'collections.importAction': 'Εισαγωγή {count}',
|
||||
'collections.importEmptyTrip': 'Αυτό το ταξίδι δεν έχει ακόμη μέρη',
|
||||
'collections.importNothingNew': 'Όλα από αυτό το ταξίδι είναι ήδη στη λίστα',
|
||||
'collections.importDone': 'Προστέθηκαν {count} μέρη',
|
||||
'collections.importDoneSkipped': '{count} ήταν ήδη στη λίστα και έμειναν ως είχαν',
|
||||
'collections.importDoneClean': 'Είναι όλα τώρα στη λίστα {name}',
|
||||
'collections.sort.default': 'Προεπιλογή',
|
||||
'collections.sort.nameAsc': 'Όνομα (Α–Ω)',
|
||||
'collections.coordinates': 'Συντεταγμένες',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': 'Hely hozzáadása',
|
||||
'collections.addPlaceSearch': 'Hely keresése…',
|
||||
'collections.addPlaceHint': 'Keressen, hogy helyet adjon a listához',
|
||||
'collections.importFromTrip': 'Importálás egy utazásból',
|
||||
'collections.importTitle': 'Importálás egy utazásból',
|
||||
'collections.importDoneTitle': 'Az importálás kész',
|
||||
'collections.importPickTripHint': 'Válassz egy utazást, és vedd át a helyeit ide: {name}.',
|
||||
'collections.importNoTrips': 'Még nincs utazás',
|
||||
'collections.importPlacesCount': '{count} hely',
|
||||
'collections.importSearchPlaces': 'Helyek keresése…',
|
||||
'collections.importOnlyNew': 'Csak az újak',
|
||||
'collections.importSelectAll': 'Összes kijelölése',
|
||||
'collections.importClearSelection': 'Kijelölés törlése',
|
||||
'collections.importAlreadySaved': 'Már mentve',
|
||||
'collections.importUnscheduled': 'Nap nélkül',
|
||||
'collections.importOnDay': '{count}. nap',
|
||||
'collections.importSelectedCount': '{count} kijelölve',
|
||||
'collections.importAction': '{count} importálása',
|
||||
'collections.importEmptyTrip': 'Ennek az utazásnak még nincsenek helyei',
|
||||
'collections.importNothingNew': 'Ebből az utazásból már minden rajta van a listán',
|
||||
'collections.importDone': '{count} hely hozzáadva',
|
||||
'collections.importDoneSkipped': '{count} már a listán volt, és változatlan maradt',
|
||||
'collections.importDoneClean': 'Most már mind itt van: {name}',
|
||||
'collections.sort.default': 'Alapértelmezett',
|
||||
'collections.sort.nameAsc': 'Név (A–Z)',
|
||||
'collections.coordinates': 'Koordináták',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': 'Tambah tempat',
|
||||
'collections.addPlaceSearch': 'Cari tempat…',
|
||||
'collections.addPlaceHint': 'Cari untuk menambahkan tempat ke daftar ini',
|
||||
'collections.importFromTrip': 'Impor dari perjalanan',
|
||||
'collections.importTitle': 'Impor dari perjalanan',
|
||||
'collections.importDoneTitle': 'Impor selesai',
|
||||
'collections.importPickTripHint': 'Pilih perjalanan dan bawa tempatnya ke {name}.',
|
||||
'collections.importNoTrips': 'Belum ada perjalanan',
|
||||
'collections.importPlacesCount': '{count} tempat',
|
||||
'collections.importSearchPlaces': 'Cari tempat…',
|
||||
'collections.importOnlyNew': 'Hanya yang baru',
|
||||
'collections.importSelectAll': 'Pilih semua',
|
||||
'collections.importClearSelection': 'Hapus pilihan',
|
||||
'collections.importAlreadySaved': 'Sudah tersimpan',
|
||||
'collections.importUnscheduled': 'Tanpa hari',
|
||||
'collections.importOnDay': 'Hari {count}',
|
||||
'collections.importSelectedCount': '{count} dipilih',
|
||||
'collections.importAction': 'Impor {count}',
|
||||
'collections.importEmptyTrip': 'Perjalanan ini belum punya tempat',
|
||||
'collections.importNothingNew': 'Semua dari perjalanan ini sudah ada di daftar',
|
||||
'collections.importDone': '{count} tempat ditambahkan',
|
||||
'collections.importDoneSkipped': '{count} sudah ada di daftar dan dibiarkan apa adanya',
|
||||
'collections.importDoneClean': 'Semuanya kini ada di {name}',
|
||||
'collections.sort.default': 'Bawaan',
|
||||
'collections.sort.nameAsc': 'Nama (A–Z)',
|
||||
'collections.coordinates': 'Koordinat',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': 'Aggiungi un luogo',
|
||||
'collections.addPlaceSearch': 'Cerca un luogo…',
|
||||
'collections.addPlaceHint': 'Cerca per aggiungere un luogo a questo elenco',
|
||||
'collections.importFromTrip': 'Importa da un viaggio',
|
||||
'collections.importTitle': 'Importa da un viaggio',
|
||||
'collections.importDoneTitle': 'Importazione completata',
|
||||
'collections.importPickTripHint': 'Scegli un viaggio e porta i suoi luoghi in {name}.',
|
||||
'collections.importNoTrips': 'Ancora nessun viaggio',
|
||||
'collections.importPlacesCount': '{count} luoghi',
|
||||
'collections.importSearchPlaces': 'Cerca luoghi…',
|
||||
'collections.importOnlyNew': 'Solo nuovi',
|
||||
'collections.importSelectAll': 'Seleziona tutto',
|
||||
'collections.importClearSelection': 'Azzera selezione',
|
||||
'collections.importAlreadySaved': 'Già salvato',
|
||||
'collections.importUnscheduled': 'Senza giorno',
|
||||
'collections.importOnDay': 'Giorno {count}',
|
||||
'collections.importSelectedCount': '{count} selezionati',
|
||||
'collections.importAction': 'Importa {count}',
|
||||
'collections.importEmptyTrip': 'Questo viaggio non ha ancora luoghi',
|
||||
'collections.importNothingNew': 'Tutto questo viaggio è già in questa lista',
|
||||
'collections.importDone': 'Aggiunti {count} luoghi',
|
||||
'collections.importDoneSkipped': '{count} erano già in lista e sono rimasti com’erano',
|
||||
'collections.importDoneClean': 'Ora sono tutti in {name}',
|
||||
'collections.sort.default': 'Predefinito',
|
||||
'collections.sort.nameAsc': 'Nome (A–Z)',
|
||||
'collections.coordinates': 'Coordinate',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': '場所を追加',
|
||||
'collections.addPlaceSearch': '場所を検索…',
|
||||
'collections.addPlaceHint': '検索してこのリストに場所を追加',
|
||||
'collections.importFromTrip': '旅行から取り込む',
|
||||
'collections.importTitle': '旅行から取り込む',
|
||||
'collections.importDoneTitle': '取り込みが完了しました',
|
||||
'collections.importPickTripHint': '旅行を選んで、その場所を{name}に取り込みます。',
|
||||
'collections.importNoTrips': 'まだ旅行がありません',
|
||||
'collections.importPlacesCount': '{count}件の場所',
|
||||
'collections.importSearchPlaces': '場所を検索…',
|
||||
'collections.importOnlyNew': '新しいものだけ',
|
||||
'collections.importSelectAll': 'すべて選択',
|
||||
'collections.importClearSelection': '選択を解除',
|
||||
'collections.importAlreadySaved': '保存済み',
|
||||
'collections.importUnscheduled': '日程なし',
|
||||
'collections.importOnDay': '{count}日目',
|
||||
'collections.importSelectedCount': '{count}件選択中',
|
||||
'collections.importAction': '{count}件を取り込む',
|
||||
'collections.importEmptyTrip': 'この旅行にはまだ場所がありません',
|
||||
'collections.importNothingNew': 'この旅行の場所はすべてリストにあります',
|
||||
'collections.importDone': '{count}件の場所を追加しました',
|
||||
'collections.importDoneSkipped': '{count}件はすでにリストにあり、そのままにしました',
|
||||
'collections.importDoneClean': 'すべて{name}に入りました',
|
||||
'collections.sort.default': 'デフォルト',
|
||||
'collections.sort.nameAsc': '名前順(A–Z)',
|
||||
'collections.coordinates': '座標',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': '장소 추가',
|
||||
'collections.addPlaceSearch': '장소 검색…',
|
||||
'collections.addPlaceHint': '검색하여 이 목록에 장소 추가',
|
||||
'collections.importFromTrip': '여행에서 가져오기',
|
||||
'collections.importTitle': '여행에서 가져오기',
|
||||
'collections.importDoneTitle': '가져오기 완료',
|
||||
'collections.importPickTripHint': '여행을 골라 그곳의 장소를 {name}(으)로 가져옵니다.',
|
||||
'collections.importNoTrips': '아직 여행이 없습니다',
|
||||
'collections.importPlacesCount': '장소 {count}개',
|
||||
'collections.importSearchPlaces': '장소 검색…',
|
||||
'collections.importOnlyNew': '새 항목만',
|
||||
'collections.importSelectAll': '전체 선택',
|
||||
'collections.importClearSelection': '선택 해제',
|
||||
'collections.importAlreadySaved': '이미 저장됨',
|
||||
'collections.importUnscheduled': '날짜 없음',
|
||||
'collections.importOnDay': '{count}일차',
|
||||
'collections.importSelectedCount': '{count}개 선택됨',
|
||||
'collections.importAction': '{count}개 가져오기',
|
||||
'collections.importEmptyTrip': '이 여행에는 아직 장소가 없습니다',
|
||||
'collections.importNothingNew': '이 여행의 장소는 모두 목록에 있습니다',
|
||||
'collections.importDone': '장소 {count}개를 추가했습니다',
|
||||
'collections.importDoneSkipped': '{count}개는 이미 목록에 있어 그대로 두었습니다',
|
||||
'collections.importDoneClean': '이제 모두 {name}에 있습니다',
|
||||
'collections.sort.default': '기본',
|
||||
'collections.sort.nameAsc': '이름순 (A–Z)',
|
||||
'collections.coordinates': '좌표',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': 'Plaats toevoegen',
|
||||
'collections.addPlaceSearch': 'Zoek een plaats…',
|
||||
'collections.addPlaceHint': 'Zoek om een plaats aan deze lijst toe te voegen',
|
||||
'collections.importFromTrip': 'Importeren uit een reis',
|
||||
'collections.importTitle': 'Importeren uit een reis',
|
||||
'collections.importDoneTitle': 'Import klaar',
|
||||
'collections.importPickTripHint': 'Kies een reis en haal de plekken ervan naar {name}.',
|
||||
'collections.importNoTrips': 'Nog geen reizen',
|
||||
'collections.importPlacesCount': '{count} plekken',
|
||||
'collections.importSearchPlaces': 'Plekken zoeken…',
|
||||
'collections.importOnlyNew': 'Alleen nieuwe',
|
||||
'collections.importSelectAll': 'Alles selecteren',
|
||||
'collections.importClearSelection': 'Selectie wissen',
|
||||
'collections.importAlreadySaved': 'Al opgeslagen',
|
||||
'collections.importUnscheduled': 'Zonder dag',
|
||||
'collections.importOnDay': 'Dag {count}',
|
||||
'collections.importSelectedCount': '{count} geselecteerd',
|
||||
'collections.importAction': '{count} importeren',
|
||||
'collections.importEmptyTrip': 'Deze reis heeft nog geen plekken',
|
||||
'collections.importNothingNew': 'Alles uit deze reis staat al op deze lijst',
|
||||
'collections.importDone': '{count} plekken toegevoegd',
|
||||
'collections.importDoneSkipped': '{count} stonden er al op en zijn ongewijzigd gebleven',
|
||||
'collections.importDoneClean': 'Ze staan nu allemaal in {name}',
|
||||
'collections.sort.default': 'Standaard',
|
||||
'collections.sort.nameAsc': 'Naam (A–Z)',
|
||||
'collections.coordinates': 'Coördinaten',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': 'Dodaj miejsce',
|
||||
'collections.addPlaceSearch': 'Wyszukaj miejsce…',
|
||||
'collections.addPlaceHint': 'Wyszukaj, aby dodać miejsce do tej listy',
|
||||
'collections.importFromTrip': 'Importuj z podróży',
|
||||
'collections.importTitle': 'Importuj z podróży',
|
||||
'collections.importDoneTitle': 'Import zakończony',
|
||||
'collections.importPickTripHint': 'Wybierz podróż i przenieś jej miejsca do {name}.',
|
||||
'collections.importNoTrips': 'Brak podróży',
|
||||
'collections.importPlacesCount': '{count} miejsc',
|
||||
'collections.importSearchPlaces': 'Szukaj miejsc…',
|
||||
'collections.importOnlyNew': 'Tylko nowe',
|
||||
'collections.importSelectAll': 'Zaznacz wszystko',
|
||||
'collections.importClearSelection': 'Wyczyść zaznaczenie',
|
||||
'collections.importAlreadySaved': 'Już zapisane',
|
||||
'collections.importUnscheduled': 'Bez dnia',
|
||||
'collections.importOnDay': 'Dzień {count}',
|
||||
'collections.importSelectedCount': 'Zaznaczono: {count}',
|
||||
'collections.importAction': 'Importuj {count}',
|
||||
'collections.importEmptyTrip': 'Ta podróż nie ma jeszcze miejsc',
|
||||
'collections.importNothingNew': 'Wszystko z tej podróży jest już na liście',
|
||||
'collections.importDone': 'Dodano {count} miejsc',
|
||||
'collections.importDoneSkipped': '{count} było już na liście i zostało bez zmian',
|
||||
'collections.importDoneClean': 'Teraz wszystkie są w {name}',
|
||||
'collections.sort.default': 'Domyślnie',
|
||||
'collections.sort.nameAsc': 'Nazwa (A–Z)',
|
||||
'collections.coordinates': 'Współrzędne',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': 'Добавить место',
|
||||
'collections.addPlaceSearch': 'Поиск места…',
|
||||
'collections.addPlaceHint': 'Найдите, чтобы добавить место в этот список',
|
||||
'collections.importFromTrip': 'Импорт из поездки',
|
||||
'collections.importTitle': 'Импорт из поездки',
|
||||
'collections.importDoneTitle': 'Импорт завершён',
|
||||
'collections.importPickTripHint': 'Выберите поездку и перенесите её места в список {name}.',
|
||||
'collections.importNoTrips': 'Поездок пока нет',
|
||||
'collections.importPlacesCount': '{count} мест',
|
||||
'collections.importSearchPlaces': 'Поиск мест…',
|
||||
'collections.importOnlyNew': 'Только новые',
|
||||
'collections.importSelectAll': 'Выбрать все',
|
||||
'collections.importClearSelection': 'Снять выделение',
|
||||
'collections.importAlreadySaved': 'Уже сохранено',
|
||||
'collections.importUnscheduled': 'Без дня',
|
||||
'collections.importOnDay': 'День {count}',
|
||||
'collections.importSelectedCount': 'Выбрано: {count}',
|
||||
'collections.importAction': 'Импортировать {count}',
|
||||
'collections.importEmptyTrip': 'В этой поездке пока нет мест',
|
||||
'collections.importNothingNew': 'Всё из этой поездки уже есть в списке',
|
||||
'collections.importDone': 'Добавлено мест: {count}',
|
||||
'collections.importDoneSkipped': '{count} уже были в списке и остались без изменений',
|
||||
'collections.importDoneClean': 'Теперь все они в списке {name}',
|
||||
'collections.sort.default': 'По умолчанию',
|
||||
'collections.sort.nameAsc': 'Название (А–Я)',
|
||||
'collections.coordinates': 'Координаты',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': 'Lägg till en plats',
|
||||
'collections.addPlaceSearch': 'Sök efter en plats…',
|
||||
'collections.addPlaceHint': 'Sök för att lägga till en plats i listan',
|
||||
'collections.importFromTrip': 'Importera från en resa',
|
||||
'collections.importTitle': 'Importera från en resa',
|
||||
'collections.importDoneTitle': 'Importen är klar',
|
||||
'collections.importPickTripHint': 'Välj en resa och ta med dess platser till {name}.',
|
||||
'collections.importNoTrips': 'Inga resor än',
|
||||
'collections.importPlacesCount': '{count} platser',
|
||||
'collections.importSearchPlaces': 'Sök platser…',
|
||||
'collections.importOnlyNew': 'Bara nya',
|
||||
'collections.importSelectAll': 'Markera alla',
|
||||
'collections.importClearSelection': 'Rensa markering',
|
||||
'collections.importAlreadySaved': 'Redan sparad',
|
||||
'collections.importUnscheduled': 'Utan dag',
|
||||
'collections.importOnDay': 'Dag {count}',
|
||||
'collections.importSelectedCount': '{count} markerade',
|
||||
'collections.importAction': 'Importera {count}',
|
||||
'collections.importEmptyTrip': 'Den här resan har inga platser än',
|
||||
'collections.importNothingNew': 'Allt från den här resan finns redan i listan',
|
||||
'collections.importDone': '{count} platser tillagda',
|
||||
'collections.importDoneSkipped': '{count} fanns redan i listan och lämnades som de var',
|
||||
'collections.importDoneClean': 'Nu finns de alla i {name}',
|
||||
'collections.sort.default': 'Standard',
|
||||
'collections.sort.nameAsc': 'Namn (A–Ö)',
|
||||
'collections.coordinates': 'Koordinater',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': 'Yer ekle',
|
||||
'collections.addPlaceSearch': 'Yer ara…',
|
||||
'collections.addPlaceHint': 'Bu listeye yer eklemek için arayın',
|
||||
'collections.importFromTrip': 'Bir geziden içe aktar',
|
||||
'collections.importTitle': 'Bir geziden içe aktar',
|
||||
'collections.importDoneTitle': 'İçe aktarma tamamlandı',
|
||||
'collections.importPickTripHint': 'Bir gezi seç ve oradaki yerleri {name} listesine aktar.',
|
||||
'collections.importNoTrips': 'Henüz gezi yok',
|
||||
'collections.importPlacesCount': '{count} yer',
|
||||
'collections.importSearchPlaces': 'Yer ara…',
|
||||
'collections.importOnlyNew': 'Yalnızca yeniler',
|
||||
'collections.importSelectAll': 'Tümünü seç',
|
||||
'collections.importClearSelection': 'Seçimi temizle',
|
||||
'collections.importAlreadySaved': 'Zaten kayıtlı',
|
||||
'collections.importUnscheduled': 'Günsüz',
|
||||
'collections.importOnDay': '{count}. gün',
|
||||
'collections.importSelectedCount': '{count} seçildi',
|
||||
'collections.importAction': '{count} yeri aktar',
|
||||
'collections.importEmptyTrip': 'Bu gezide henüz yer yok',
|
||||
'collections.importNothingNew': 'Bu gezideki her şey zaten bu listede',
|
||||
'collections.importDone': '{count} yer eklendi',
|
||||
'collections.importDoneSkipped': '{count} zaten listedeydi ve olduğu gibi bırakıldı',
|
||||
'collections.importDoneClean': 'Artık hepsi {name} listesinde',
|
||||
'collections.sort.default': 'Varsayılan',
|
||||
'collections.sort.nameAsc': 'Ad (A–Z)',
|
||||
'collections.coordinates': 'Koordinatlar',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': 'Додати місце',
|
||||
'collections.addPlaceSearch': 'Пошук місця…',
|
||||
'collections.addPlaceHint': 'Знайдіть, щоб додати місце до цього списку',
|
||||
'collections.importFromTrip': 'Імпорт із подорожі',
|
||||
'collections.importTitle': 'Імпорт із подорожі',
|
||||
'collections.importDoneTitle': 'Імпорт завершено',
|
||||
'collections.importPickTripHint': 'Вибери подорож і перенеси її місця до списку {name}.',
|
||||
'collections.importNoTrips': 'Подорожей поки немає',
|
||||
'collections.importPlacesCount': '{count} місць',
|
||||
'collections.importSearchPlaces': 'Пошук місць…',
|
||||
'collections.importOnlyNew': 'Лише нові',
|
||||
'collections.importSelectAll': 'Вибрати все',
|
||||
'collections.importClearSelection': 'Зняти вибір',
|
||||
'collections.importAlreadySaved': 'Уже збережено',
|
||||
'collections.importUnscheduled': 'Без дня',
|
||||
'collections.importOnDay': 'День {count}',
|
||||
'collections.importSelectedCount': 'Вибрано: {count}',
|
||||
'collections.importAction': 'Імпортувати {count}',
|
||||
'collections.importEmptyTrip': 'У цій подорожі ще немає місць',
|
||||
'collections.importNothingNew': 'Усе з цієї подорожі вже є у списку',
|
||||
'collections.importDone': 'Додано місць: {count}',
|
||||
'collections.importDoneSkipped': '{count} уже були у списку й лишилися без змін',
|
||||
'collections.importDoneClean': 'Тепер усі вони у списку {name}',
|
||||
'collections.sort.default': 'За замовчуванням',
|
||||
'collections.sort.nameAsc': 'Назва (А–Я)',
|
||||
'collections.coordinates': 'Координати',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': 'Thêm địa điểm',
|
||||
'collections.addPlaceSearch': 'Tìm địa điểm…',
|
||||
'collections.addPlaceHint': 'Tìm để thêm địa điểm vào danh sách này',
|
||||
'collections.importFromTrip': 'Nhập từ một chuyến đi',
|
||||
'collections.importTitle': 'Nhập từ một chuyến đi',
|
||||
'collections.importDoneTitle': 'Đã nhập xong',
|
||||
'collections.importPickTripHint': 'Chọn một chuyến đi và mang các địa điểm của nó vào {name}.',
|
||||
'collections.importNoTrips': 'Chưa có chuyến đi nào',
|
||||
'collections.importPlacesCount': '{count} địa điểm',
|
||||
'collections.importSearchPlaces': 'Tìm địa điểm…',
|
||||
'collections.importOnlyNew': 'Chỉ cái mới',
|
||||
'collections.importSelectAll': 'Chọn tất cả',
|
||||
'collections.importClearSelection': 'Bỏ chọn',
|
||||
'collections.importAlreadySaved': 'Đã lưu rồi',
|
||||
'collections.importUnscheduled': 'Chưa xếp ngày',
|
||||
'collections.importOnDay': 'Ngày {count}',
|
||||
'collections.importSelectedCount': 'Đã chọn {count}',
|
||||
'collections.importAction': 'Nhập {count}',
|
||||
'collections.importEmptyTrip': 'Chuyến đi này chưa có địa điểm nào',
|
||||
'collections.importNothingNew': 'Mọi thứ trong chuyến đi này đã có trong danh sách',
|
||||
'collections.importDone': 'Đã thêm {count} địa điểm',
|
||||
'collections.importDoneSkipped': '{count} đã có sẵn trong danh sách và được giữ nguyên',
|
||||
'collections.importDoneClean': 'Giờ tất cả đều nằm trong {name}',
|
||||
'collections.sort.default': 'Mặc định',
|
||||
'collections.sort.nameAsc': 'Tên (A–Z)',
|
||||
'collections.coordinates': 'Tọa độ',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': '新增地點',
|
||||
'collections.addPlaceSearch': '搜尋地點…',
|
||||
'collections.addPlaceHint': '搜尋以將地點加入此清單',
|
||||
'collections.importFromTrip': '從行程匯入',
|
||||
'collections.importTitle': '從行程匯入',
|
||||
'collections.importDoneTitle': '匯入完成',
|
||||
'collections.importPickTripHint': '選擇一次行程,把其中的地點帶到{name}。',
|
||||
'collections.importNoTrips': '還沒有行程',
|
||||
'collections.importPlacesCount': '{count} 個地點',
|
||||
'collections.importSearchPlaces': '搜尋地點…',
|
||||
'collections.importOnlyNew': '僅新增',
|
||||
'collections.importSelectAll': '全選',
|
||||
'collections.importClearSelection': '清除選擇',
|
||||
'collections.importAlreadySaved': '已儲存',
|
||||
'collections.importUnscheduled': '未排入行程',
|
||||
'collections.importOnDay': '第 {count} 天',
|
||||
'collections.importSelectedCount': '已選 {count} 個',
|
||||
'collections.importAction': '匯入 {count} 個',
|
||||
'collections.importEmptyTrip': '這次行程還沒有地點',
|
||||
'collections.importNothingNew': '這次行程的地點都已在清單中',
|
||||
'collections.importDone': '已新增 {count} 個地點',
|
||||
'collections.importDoneSkipped': '{count} 個已在清單中,保持原樣',
|
||||
'collections.importDoneClean': '現在它們都在{name}裡',
|
||||
'collections.sort.default': '預設',
|
||||
'collections.sort.nameAsc': '名稱 (A–Z)',
|
||||
'collections.coordinates': '座標',
|
||||
|
||||
@@ -36,6 +36,26 @@ const collection: TranslationStrings = {
|
||||
'collections.addPlace': '添加地点',
|
||||
'collections.addPlaceSearch': '搜索地点…',
|
||||
'collections.addPlaceHint': '搜索以将地点添加到此清单',
|
||||
'collections.importFromTrip': '从行程导入',
|
||||
'collections.importTitle': '从行程导入',
|
||||
'collections.importDoneTitle': '导入完成',
|
||||
'collections.importPickTripHint': '选择一次行程,把其中的地点带到{name}。',
|
||||
'collections.importNoTrips': '还没有行程',
|
||||
'collections.importPlacesCount': '{count} 个地点',
|
||||
'collections.importSearchPlaces': '搜索地点…',
|
||||
'collections.importOnlyNew': '仅新增',
|
||||
'collections.importSelectAll': '全选',
|
||||
'collections.importClearSelection': '清除选择',
|
||||
'collections.importAlreadySaved': '已保存',
|
||||
'collections.importUnscheduled': '未排入日程',
|
||||
'collections.importOnDay': '第 {count} 天',
|
||||
'collections.importSelectedCount': '已选 {count} 个',
|
||||
'collections.importAction': '导入 {count} 个',
|
||||
'collections.importEmptyTrip': '这次行程还没有地点',
|
||||
'collections.importNothingNew': '这次行程的地点都已在列表中',
|
||||
'collections.importDone': '已添加 {count} 个地点',
|
||||
'collections.importDoneSkipped': '{count} 个已在列表中,保持原样',
|
||||
'collections.importDoneClean': '现在它们都在{name}里',
|
||||
'collections.sort.default': '默认',
|
||||
'collections.sort.nameAsc': '名称 (A–Z)',
|
||||
'collections.coordinates': '坐标',
|
||||
|
||||
Reference in New Issue
Block a user