diff --git a/website/src/lib/docs/es/integration.mdx b/website/src/lib/docs/es/integration.mdx index 32498bf96..4b0a69c21 100644 --- a/website/src/lib/docs/es/integration.mdx +++ b/website/src/lib/docs/es/integration.mdx @@ -13,8 +13,8 @@ Puede usar **gpx.studio** para crear mapas que muestren sus archivos GPX e integ Todo lo que necesita es: -1. GPX files hosted on your server or on Google Drive, or accessible via a public URL; -2. _Optional:_ a MapTiler key to load MapTiler maps. +1. Archivos GPX alojados en su servidor o en Google Drive, o accesibles a través de una URL pública; +2. _Opcional:_ una Tecla MapTiler para cargar mapas MapTiler. Luego puede jugar con el configurador de abajo para personalizar su mapa y generar el código HTML correspondiente. diff --git a/website/src/lib/docs/es/map-controls.mdx b/website/src/lib/docs/es/map-controls.mdx index 23b7c4ddb..b1cea96d3 100644 --- a/website/src/lib/docs/es/map-controls.mdx +++ b/website/src/lib/docs/es/map-controls.mdx @@ -69,4 +69,4 @@ Pueden activarse en la [configuración de capas del mapa](./menu/settings). En estos ajustes, también puede administrar la opacidad de las capas superpuestas. -For advanced users, it is possible to add custom basemaps and overlays by providing WMTS, WMS, or MapLibre style JSON URLs. +Para los usuarios avanzados, es posible añadir mapas base y superposiciones personalizadas proporcionando WMTS, WMS o URLs JSON estilo Mapbox. diff --git a/website/src/lib/docs/es/toolbar/elevation.mdx b/website/src/lib/docs/es/toolbar/elevation.mdx index 0a55ecd2b..322f0d1e8 100644 --- a/website/src/lib/docs/es/toolbar/elevation.mdx +++ b/website/src/lib/docs/es/toolbar/elevation.mdx @@ -10,7 +10,7 @@ title: Desnivel # { title } -Le permite añadir datos de desnivel a trazas y [puntos de interés](../gpx), o reemplazar los datos existentes. +Esta herramienta permite añadir datos de elevación a los rastros y [puntos de interés](../gpx), o reemplazar los datos existentes.
@@ -18,7 +18,7 @@ Le permite añadir datos de desnivel a trazas y [puntos de interés](../gpx), o -Elevation data is provided by MapTiler. -You can learn more about its origin and accuracy in the documentation. +Los datos de notificación son proporcionados por MapTiler. +Puedes aprender más sobre su origen y precisión en la documentación. diff --git a/website/src/lib/docs/es/toolbar/merge.mdx b/website/src/lib/docs/es/toolbar/merge.mdx index 73f0d7cbb..26afb326d 100644 --- a/website/src/lib/docs/es/toolbar/merge.mdx +++ b/website/src/lib/docs/es/toolbar/merge.mdx @@ -18,8 +18,8 @@ Para usar esta herramienta, necesita [seleccionar](../files-and-stats) múltiple -Selected items are merged in the order they appear in the files list. -Reorder items by drag-and-drop if needed. +Los elementos seleccionados se combinan en el orden en que aparecen en la lista de archivos. +Si es necesario, puede reordenar los elementos arrastrando y soltando. diff --git a/website/src/lib/logic/settings.ts b/website/src/lib/logic/settings.ts index c27db31c4..facbba2f1 100644 --- a/website/src/lib/logic/settings.ts +++ b/website/src/lib/logic/settings.ts @@ -162,38 +162,26 @@ function getLayerValidator(allowed: Record, fallback: string) { function filterLayerTree(t: LayerTreeType, allowed: LayerTreeType | undefined): LayerTreeType { const filtered: LayerTreeType = {}; - const values = Object.values(t); - if (values.length == 0) return filtered; - if (typeof values[0] === 'boolean') { - if (allowed) { - Object.keys(allowed).forEach((key) => { - if (Object.hasOwn(t, key)) { - filtered[key] = t[key]; - } else { - filtered[key] = allowed[key]; - } - }); + if (!allowed) return filtered; + Object.keys(allowed).forEach((key) => { + const allowedVal = allowed[key]; + if (typeof allowedVal === 'boolean') { + filtered[key] = typeof t?.[key] === 'boolean' ? t[key] : allowedVal; + } else { + filtered[key] = filterLayerTree( + typeof t?.[key] === 'object' ? (t[key] as LayerTreeType) : {}, + allowedVal + ); } - Object.entries(t).forEach(([key, value]) => { - if ( - !Object.hasOwn(filtered, key) && - (key.startsWith('custom-') || key.startsWith('extension-')) - ) { - filtered[key] = value; - } - }); - } else { - Object.entries(t).forEach(([key, value]) => { - if (typeof value === 'object') { - filtered[key] = filterLayerTree( - value, - typeof allowed === 'object' && typeof allowed[key] === 'object' - ? allowed[key] - : undefined - ); - } - }); - } + }); + Object.entries(t ?? {}).forEach(([key, value]) => { + if ( + !Object.hasOwn(filtered, key) && + (key.startsWith('custom-') || key.startsWith('extension-')) + ) { + filtered[key] = value; + } + }); return filtered; } diff --git a/website/src/locales/es.json b/website/src/locales/es.json index 6a33d5b9f..b664bc166 100644 --- a/website/src/locales/es.json +++ b/website/src/locales/es.json @@ -2,10 +2,10 @@ "metadata": { "home_title": "el editor online de archivos GPX", "app_title": "app", - "embed_title": " editor online de archivos GPX", + "embed_title": "Editor online de archivos GPX", "help_title": "ayuda", "404_title": "página no encontrada", - "description": "Mira, edita y crea archivos GPX online con planificación avanzada de rutas y herramientas de procesamiento de archivos, bonitos mapas y visualizaciones detalladas de datos." + "description": "Visualiza, edita y crea archivos GPX online con planificación avanzada de rutas y herramientas de procesamiento de archivos, bonitos mapas y visualizaciones detalladas de datos." }, "menu": { "new": "Nuevo", @@ -234,7 +234,7 @@ }, "elevation": { "button": "Solicitar datos de desnivel", - "help": "Requesting elevation data will erase the existing elevation data, if any, and replace it with data from MapTiler.", + "help": "La solicitud de datos de desnivel borrará los datos de desnivel existentes, si los hay, y los reemplazará con datos de Mapbox.", "help_no_selection": "Seleccione un elemento del archivo para solicitar datos de desnivel." }, "waypoint": { @@ -276,7 +276,7 @@ "new": "Nueva capa personalizada", "edit": "Editar capa personalizada", "urls": "URL(s)", - "url_placeholder": "WMTS, WMS or MapLibre style JSON", + "url_placeholder": "WMTS, WMS o JSON estilo Mapbox", "max_zoom": "Zoom máximo", "layer_type": "Tipo de capa", "basemap": "Mapa base", @@ -494,7 +494,7 @@ "email": "Email", "contribute": "Contribuir", "supported_by": "con el apoyo de", - "features": "Features", + "features": "Características", "route_planning": "Planificación de ruta", "route_planning_description": "Una interfaz intuitiva para crear itinerarios adaptados a cada deporte, basada en datos de OpenStreetMap.", "file_processing": "Procesamiento avanzado de archivo", @@ -503,15 +503,15 @@ "maps_description": "Una gran colección de mapas base, capas y puntos de interés para ayudarle a crear su próxima aventura al aire libre o visualizar su último logro.", "data_visualization": "Visualización de datos", "data_visualization_description": "Un perfil de elevación interactivo con estadísticas detalladas para analizar actividades registradas y futuros objetivos.", - "philosophy": "Philosophy", - "foss": "Free, ad-free and open source", - "foss_description": "The website is free to use, without ads, and the source code is publicly available on GitHub.", - "privacy": "Privacy-friendly", + "philosophy": "Filosofía", + "foss": "Gratis, sin anuncios y código abierto", + "foss_description": "El sitio web es de uso gratuito, sin anuncios, y el código fuente está disponible públicamente en GitHub.", + "privacy": "Respetuosa con la privacidad", "privacy_description": "Tus archivos GPX nunca abandonan tu navegador. Sin seguimiento, sin recopilación de datos.", - "community": "Made possible by the community", + "community": "Posible gracias a la comunidad", "community_description": "gpx.studio tiene una comunidad asombrosa que ha cubierto sus costes a través de donaciones durante años, mientras ha dado forma al proyecto a través de sugerencias de características, informes de fallos y traducciones a muchos idiomas.", "support_button": "Apoya a gpx.studio en Open Collective", - "translate_button": "Help translate the website on Crowdin" + "translate_button": "Ayuda a traducir el sitio web en Crowdin" }, "docs": { "translate": "Mejorar la traducción en Crowdin", @@ -536,7 +536,7 @@ }, "embedding": { "title": "Crear su propio mapa", - "maptiler_key": "MapTiler key (optional, only required for MapTiler maps)", + "maptiler_key": "Clave MapTiler (opcional, sólo se requiere para mapas MapTiler)", "file_urls": "URLs de archivo (separados por comas)", "drive_ids": "IDs de archivo de Google Drive (separados por comas)", "basemap": "Mapa base", diff --git a/website/src/locales/zh-HK.json b/website/src/locales/zh-HK.json index f57348da9..dec053ecf 100644 --- a/website/src/locales/zh-HK.json +++ b/website/src/locales/zh-HK.json @@ -16,9 +16,9 @@ "duplicate": "Duplicate", "copy": "Copy", "paste": "Paste", - "cut": "Cut", - "export": "Export...", - "export_all": "Export all...", + "cut": "剪下", + "export": "匯出……", + "export_all": "匯出所有……", "export_options": "Export options", "support_message": "The tool is free to use, but not free to run. Please consider supporting the website if you use it frequently. Thank you!", "support_button": "Help keep the website free",