Files
TREK/shared/src/i18n/es/collection.ts
T
Maurice 0df82185bd feat(collections): a saved place keeps its price, website and phone, editable like in a trip
A saved place always had price, currency, website and phone columns. Saving
from a trip, the file import and the copy into a trip all carried them, but
neither editor showed them and the update contract did not know them, so the
validation pipe stripped them from a PATCH and the MCP tool refused them as
unknown keys (#2471).

- shared: collectionPlaceUpdateRequestSchema takes price (not negative,
  nullable), currency (three letters, trimmed and upper-cased), website
  (http or https, as on save) and phone (trimmed, capped at 60 like the file
  import). The save schema is unchanged.
- server: updatePlace writes the four fields inside the existing
  transaction. update_collection_place spreads the same shape, so REST and
  MCP take and refuse the same values; its description now names the price
  and asks for the currency with it.
- client: the desktop detail sheet and the phone sheet edit price with a
  currency picker, website and phone, and show them in read mode (price only
  above zero, phone as a call link, website as a link chip through
  safeHttpUrl). Both shells share one hook, useCollectionPlaceExtras, which
  sends only the fields the user changed and always pairs a price with its
  currency, since a list has no base currency. An amount that does not parse
  marks the field and holds the save.
- i18n: collections.price, collections.priceHint and collections.phone in
  all 23 locales; the website label reuses places.formWebsite.
- wiki: Collections and MCP-Addon-Tools name the new fields.

Tests: schema spec, COLLECTIONS-SVC-128 to 131, controller pipe parity,
update_collection_place with the new fields, COLLECTIONS-E2E-085 to 087,
FE-COMP-COLEXTRAS-001 to 012, FE-COMP-COLDETAIL-049 to 054 and
FE-MOB-CPLSH-042 to 046.
2026-09-23 17:41:26 +02:00

239 lines
12 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { TranslationStrings } from '../types';
const collection: TranslationStrings = {
'collections.saveNToList': 'Guardar {count} en una lista',
'collections.addedNToList': '{count} guardados en {name}',
'collections.noOwnLists': 'Aún no tienes listas',
'collections.saveToListHint': 'Los duplicados se omiten automáticamente',
'collections.role.label': 'Rol',
'collections.role.viewer': 'Lector',
'collections.role.editor': 'Editor',
'collections.role.admin': 'Administrador',
'collections.picker.allLists': 'Todas las listas',
'collections.select': 'Elegir',
'collections.selectAll': 'Seleccionar todo',
'collections.deselectAll': 'Deseleccionar todo',
'collections.moveToList': 'Mover a lista',
'collections.duplicateToList': 'Duplicar en lista',
'collections.moveToListTitle': 'Mover {count} a otra lista',
'collections.duplicateToListTitle': 'Duplicar {count} en otra lista',
'collections.noOtherLists': 'Aún no hay otras listas',
'collections.movedCount': 'Movidos {count} lugares',
'collections.duplicatedCount': 'Duplicados {count} lugares',
'collections.placeCount': '{count} lugares',
'collections.category': 'Categoría',
'collections.noCategory': 'Sin categoría',
'collections.editListTitle': 'Editar lista',
'collections.coverImage': 'Imagen de portada',
'collections.addCover': 'Añadir portada',
'collections.changeCover': 'Cambiar portada',
'collections.description': 'Descripción',
'collections.descriptionPlaceholder': 'Añade una descripción…',
'collections.links': 'Enlaces',
'collections.linkLabel': 'Etiqueta',
'collections.addLink': 'Añadir enlace',
'collections.addDetails': 'Añadir detalles',
'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',
'collections.price': 'Precio',
'collections.priceHint':
'Un precio orientativo, como el de una entrada. Se incluye cuando copias el lugar a un viaje.',
'collections.phone': 'Teléfono',
'collections.showList': 'Mostrar lista',
'collections.expandMap': 'Ampliar mapa',
'collections.hero.mine': 'Mi colección',
'collections.hero.shared': 'Compartida contigo',
'collections.hero.all': 'Tu biblioteca',
'collections.title': 'Colecciones',
'collections.subtitle': 'Tus lugares guardados, organizados en listas',
'collections.newList': 'Nueva lista',
'collections.create': 'Crear',
'collections.editList': 'Renombrar',
'collections.listMenu': 'Opciones de la lista',
'collections.deleteList': 'Eliminar lista',
'collections.deleteListConfirm':
'Esto elimina de forma permanente la lista y todos sus lugares guardados. No se puede deshacer.',
'collections.listName': 'Nombre de la lista',
'collections.listNamePlaceholder': 'p. ej. Tokio 2025',
'collections.listColor': 'Color',
'collections.allSaved': 'Todos los guardados',
'collections.shared': 'Compartida',
'collections.empty.title': 'Aún no hay lugares',
'collections.empty.text': 'Guarda lugares de cualquier viaje para crear esta lista.',
'collections.empty.noMatchTitle': 'Sin coincidencias',
'collections.empty.noMatchText': 'Ningún lugar guardado coincide con tu filtro o búsqueda.',
'collections.empty.firstTitle': 'Empieza tu primera colección',
'collections.empty.firstText': 'Crea una lista para guardar lugares que quieras recordar entre viajes.',
'collections.view.grid': 'Cuadrícula',
'collections.view.list': 'Lista',
'collections.view.map': 'Mapa',
'collections.status.idea': 'Idea',
'collections.status.want': 'Quiero ir',
'collections.status.visited': 'Visitado',
'collections.status.filterAll': 'Todos',
'collections.status.cycleHint': 'toca para cambiar',
'collections.markVisited': 'Marcar como visitado',
'collections.markVisitedAll': 'Visitado en todas',
'collections.markVisitedSelection': 'Marcar como visitado en tus listas',
'collections.markVisitedNone': 'Ninguno de estos lugares está guardado en una lista',
'collections.markedVisited': 'Marcado como visitado',
'collections.markedVisitedTrip': '{count} lugares marcados como visitados',
'collections.copyToTrip': 'Copiar al viaje',
'collections.copyToTripTitle': 'Copiar al viaje',
'collections.copyN': 'Copiar {count} al viaje',
'collections.copyToTripSearch': 'Buscar viajes',
'collections.searchLists': 'Buscar listas',
'collections.copyToTripConfirm': 'Copiar',
'collections.noTrips': 'Aún no hay viajes',
'collections.alreadyInTrip': 'Ya está en este viaje',
'collections.copied': 'Copiado al viaje',
'collections.copiedCount': '{count} lugares copiados',
'collections.skippedDuplicates': '{count} duplicados omitidos',
'collections.copyNothing': 'Nada que copiar',
'collections.removeFromList': 'Quitar de la lista',
'collections.removeFromListConfirm': '¿Quitar este lugar de la lista?',
'collections.removeFromCollection': 'Quitar de la colección',
'collections.saved': 'Guardado en {name}',
'collections.savedUndo': 'Deshacer',
'collections.viewInCollection': 'Ver',
'collections.duplicateWarning': 'Este lugar ya está en la lista',
'collections.search': 'Buscar lugares',
'collections.selectMode': 'Seleccionar',
'collections.selectedCount': '{count} seleccionados',
'collections.pickList': 'Guardar en una lista',
'collections.pickListPlaceholder': 'Elige una lista',
'collections.addedToList': 'Añadido a {name}',
'collections.removedFromList': 'Quitado de {name}',
'collections.inLists': 'En tus listas',
'collections.otherLists': 'Añadir a una lista',
'collections.noListsYet': 'Crea primero una lista para guardar lugares.',
'collections.removedFromAll': 'Quitado de la colección',
'collections.picker.title': 'Lugares guardados',
'collections.picker.showMore': 'Mostrar {count} más',
'collections.picker.search': 'Busca en tus lugares guardados',
'collections.picker.empty': 'No hay lugares guardados para añadir',
'collections.picker.hint': 'Elige un lugar de tus colecciones',
'collections.picker.use': 'Usar',
// Export / import a list as a file (#2198)
'collections.file.export': 'Exportar',
'collections.file.exportTitle': 'Descargar esta lista como archivo',
'collections.file.importButton': 'Importar una lista desde un archivo',
'collections.file.importTitle': 'Importar una lista',
'collections.file.choose': 'Elegir un archivo de lista',
'collections.file.confirm': 'Importar',
'collections.file.targetNew': 'Nueva lista',
'collections.file.targetNewHint': 'El archivo como lista propia',
'collections.file.targetExisting': 'Añadir a una lista',
'collections.file.targetExistingHint': 'A una que ya tienes',
'collections.file.searchLists': 'Buscar listas',
'collections.file.intoHint': 'Los lugares que la lista ya tiene se quedan como están, igual que su nombre y su color. Las etiquetas del archivo se añaden.',
'collections.file.confirmInto': 'Añadir a la lista',
'collections.file.doneInto': '{count} lugares añadidos a {name}',
'collections.file.doneIntoDuplicates': '{count} añadidos a {name}, {duplicates} ya estaban',
'collections.file.doneIntoNothing': 'Todos los lugares del archivo ya están en {name}',
'collections.file.change': 'Cambiar',
'collections.file.labelCount': '{count} etiquetas',
'collections.file.hint':
'Los lugares llegan como una lista nueva tuya. Las valoraciones, los miembros y las fotos subidas se quedan atrás.',
'collections.file.done': '{count} lugares importados',
'collections.file.doneSkipped': '{count} lugares importados, {skipped} omitidos',
'collections.file.errorTooLarge': 'Ese archivo es demasiado grande para ser una lista.',
'collections.file.errorUnreadable': 'No se ha podido leer ese archivo.',
'collections.file.errorNotACollection': 'Ese no es un archivo de lista de TREK.',
'collections.file.formatTrek': 'Lista de TREK',
'collections.file.formatTrekHint': 'Para otro TREK, con etiquetas y estado',
'collections.file.formatGpxHint': 'Puntos de ruta para OsmAnd, Organic Maps, Garmin y otras apps de mapas',
'collections.file.gpxOmitted': '{count} lugares no tienen coordenadas y se han quedado fuera del archivo GPX',
'collections.file.gpxNothing':
'Ninguno de estos lugares tiene coordenadas, así que no hay nada que poner en un archivo GPX.',
'collections.file.reading': 'Leyendo el archivo…',
'collections.file.gpxSkipped': 'Se dejan fuera {count} puntos de ruta sin coordenadas válidas.',
'collections.file.gpxTrack':
'Este archivo también tiene {count} puntos de traza. Las trazas no se importan, solo los puntos de ruta.',
'collections.file.gpxEmpty': 'Este archivo GPX no tiene puntos de ruta, así que no hay nada que importar.',
'collections.file.errorNotGpx': 'Ese no es un archivo GPX.',
'collections.file.errorTooManyPlaces':
'Ese archivo tiene más de {count} lugares. Divídelo e importa las partes de una en una.',
'collections.share.title': 'Compartir lista',
'collections.share.titleNamed': 'Compartir «{name}»',
'collections.share.button': 'Compartir',
'collections.share.members': 'Miembros',
'collections.share.owner': 'Propietario',
'collections.share.you': 'tú',
'collections.share.pending': 'invitación pendiente',
'collections.share.accepted': 'aceptada',
'collections.share.invite': 'Invitar a alguien',
'collections.share.inviteUser': 'Seleccionar usuario',
'collections.share.sendInvite': 'Enviar invitación',
'collections.share.inviteHint': 'Las personas invitadas pueden ver y editar esta lista.',
'collections.share.noUsers': 'No hay usuarios disponibles para invitar.',
'collections.share.memberHint': 'Solo el propietario de la lista puede invitar o quitar personas.',
'collections.share.cancel': 'Cancelar',
'collections.share.leave': 'Salir de la lista',
'collections.share.leaveConfirm':
'¿Salir de esta lista compartida? Perderás el acceso hasta que vuelvan a invitarte.',
'collections.share.left': 'Has salido de la lista',
'collections.share.remove': 'Quitar',
'collections.invites.title': 'Invitaciones',
'collections.invites.from': 'de',
'collections.invites.accept': 'Aceptar',
'collections.invites.decline': 'Rechazar',
'collections.invites.received': 'Tienes una nueva invitación a una lista',
'collections.invite.sent': 'Invitación enviada',
'collections.invite.error': 'No se pudo enviar la invitación',
'collections.invite.accepted': 'Invitación aceptada',
'collections.invite.declined': 'Invitación rechazada',
'collections.widget.title': 'Colecciones',
'collections.widget.empty': 'Aún no hay lugares guardados',
'collections.widget.savedCount': '{count} guardados',
'collections.labels.title': 'Etiquetas',
'collections.labels.manage': 'Gestionar etiquetas',
'collections.labels.add': 'Añadir etiqueta',
'collections.labels.name': 'Nombre de la etiqueta',
'collections.labels.namePlaceholder': 'p. ej. Berlin',
'collections.labels.assign': 'Asignar etiqueta',
'collections.labels.assignN': 'Añadir etiquetas a {count} lugares',
'collections.labels.assignedCount': 'Etiquetados {count} lugares',
'collections.labels.empty': 'Aún no hay etiquetas',
'collections.labels.emptyHint': 'Crea primero una etiqueta para agrupar lugares en esta lista.',
};
export default collection;