6 Commits

Author SHA1 Message Date
vcoppe 2e8b2d6f30 add ukrainian 2026-07-21 11:20:31 +02:00
Dobrovolskyi Bohdan 5259d007c9 Fix Locale subscription (#369) 2026-07-21 12:04:42 +02:00
vcoppe cb36725a46 New Crowdin updates (#373)
* New translations en.json (German)

[ci skip]

* New translations view.mdx (German)

[ci skip]
2026-07-21 12:00:16 +02:00
vcoppe deef1bab47 fix embedding playground zoom 2026-07-21 11:11:13 +02:00
Dobrovolskyi Bohdan 108880f8cd Update language on map (#365) 2026-07-14 18:50:51 +02:00
vcoppe 37a659831b New Crowdin updates (#359)
* New translations en.json (Hungarian)

[ci skip]

* New translations en.json (Hungarian)

[ci skip]

* New translations en.json (Ukrainian)

[ci skip]

* New translations file.mdx (Ukrainian)

[ci skip]

* New translations file.mdx (Ukrainian)

[ci skip]

* New translations settings.mdx (Ukrainian)

[ci skip]

* New translations view.mdx (Ukrainian)

[ci skip]

* New translations clean.mdx (Ukrainian)

[ci skip]

* New translations routing.mdx (Ukrainian)

[ci skip]

* New translations en.json (Ukrainian)

[ci skip]

* New translations clean.mdx (Ukrainian)

[ci skip]

* New translations routing.mdx (Ukrainian)

[ci skip]

* New translations extract.mdx (Ukrainian)

[ci skip]

* New translations merge.mdx (Ukrainian)

[ci skip]

* New translations minify.mdx (Ukrainian)

[ci skip]

* New translations poi.mdx (Ukrainian)

[ci skip]

* New translations elevation.mdx (Ukrainian)

[ci skip]

* New translations en.json (Ukrainian)

[ci skip]

* New translations routing.mdx (Ukrainian)

[ci skip]

* New translations scissors.mdx (Ukrainian)

[ci skip]

* New translations time.mdx (Ukrainian)

[ci skip]

* New translations faq.mdx (Ukrainian)

[ci skip]

* New translations en.json (Ukrainian)

[ci skip]

* New translations view.mdx (Ukrainian)

[ci skip]

* New translations faq.mdx (Ukrainian)

[ci skip]

* New translations files-and-stats.mdx (Ukrainian)

[ci skip]

* New translations getting-started.mdx (Ukrainian)

[ci skip]

* New translations gpx.mdx (Ukrainian)

[ci skip]

* New translations integration.mdx (Ukrainian)

[ci skip]

* New translations map-controls.mdx (Ukrainian)

[ci skip]

* New translations menu.mdx (Ukrainian)

[ci skip]

* New translations toolbar.mdx (Ukrainian)

[ci skip]

* New translations en.json (Basque)

[ci skip]
2026-07-14 18:49:25 +02:00
7 changed files with 35 additions and 23 deletions
@@ -21,6 +21,7 @@
import { selection } from '$lib/logic/selection'; import { selection } from '$lib/logic/selection';
import { untrack } from 'svelte'; import { untrack } from 'svelte';
import { isSelected, toggle } from '$lib/components/map/layer-control/utils'; import { isSelected, toggle } from '$lib/components/map/layer-control/utils';
import { boundsManager } from '$lib/logic/bounds';
let { let {
useHash = true, useHash = true,
@@ -90,6 +91,7 @@
fileStateCollection.setEmbeddedFiles(files); fileStateCollection.setEmbeddedFiles(files);
$fileOrder = ids; $fileOrder = ids;
selection.selectAll(); selection.selectAll();
boundsManager.fitBoundsOnLoad(ids);
}); });
} }
+1
View File
@@ -58,6 +58,7 @@ export class StyleManager {
opacities.subscribe(() => this.updateOverlays()); opacities.subscribe(() => this.updateOverlays());
terrainSource.subscribe(() => this.updateTerrain()); terrainSource.subscribe(() => this.updateTerrain());
customLayers.subscribe(() => this.updateBasemap()); customLayers.subscribe(() => this.updateBasemap());
i18n.subscribe(() => this.updateBasemap());
distanceUnits.subscribe(() => { distanceUnits.subscribe(() => {
const map = get(this._map); const map = get(this._map);
if (map && (map.getLayer('contours_m') || map.getLayer('contours_ft'))) { if (map && (map.getLayer('contours_m') || map.getLayer('contours_ft'))) {
+2 -2
View File
@@ -50,5 +50,5 @@ Um die Ausrichtung und Neigung der Karte zu steuern, können Sie die Karte auch
### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen ### <Maximize2 size="16" class="inline-block" style="margin-bottom: 2px" /> Full screen
Enter or exit full screen mode. Vollbildmodus ein- oder ausschalten.
You can also press <kbd>F11</kbd> to toggle, or <kbd>Escape</kbd> to exit. Du kannst auch <kbd>F11</kbd> drücken, um zu wechseln, oder <kbd>Escape</kbd> zum Beenden.
+8
View File
@@ -1,3 +1,5 @@
import { writable } from 'svelte/store';
type Dictionary = { type Dictionary = {
[key: string]: string | Dictionary; [key: string]: string | Dictionary;
}; };
@@ -10,6 +12,7 @@ function getDateFormatter(locale: string) {
} }
class Locale { class Locale {
private _store = writable(this);
private _lang = $state(''); private _lang = $state('');
private _isLoadingInitial = $state(true); private _isLoadingInitial = $state(true);
private _isLoading = $state(true); private _isLoading = $state(true);
@@ -38,6 +41,7 @@ class Locale {
} }
import(`../locales/${this._lang}.json`).then((module) => { import(`../locales/${this._lang}.json`).then((module) => {
this.dictionary = module.default; this.dictionary = module.default;
this._store.set(this);
if (this._isLoadingInitial) { if (this._isLoadingInitial) {
this._isLoadingInitial = false; this._isLoadingInitial = false;
} }
@@ -67,6 +71,10 @@ class Locale {
public get df() { public get df() {
return this._df; return this._df;
} }
public subscribe(run: (value: Locale) => void, invalidate?: (value?: Locale) => void) {
return this._store.subscribe(run, invalidate);
}
} }
export const i18n = new Locale(); export const i18n = new Locale();
+1
View File
@@ -10,5 +10,6 @@ export const languages: Record<string, string> = {
nl: 'Nederlands', nl: 'Nederlands',
'pt-BR': 'Português (Brasil)', 'pt-BR': 'Português (Brasil)',
tr: 'Türkçe', tr: 'Türkçe',
uk: 'Українська',
zh: '简体中文', zh: '简体中文',
}; };
+3 -3
View File
@@ -36,7 +36,7 @@
"switch_basemap": "Zur vorherigen Basemap wechseln", "switch_basemap": "Zur vorherigen Basemap wechseln",
"toggle_overlays": "Overlay umschalten", "toggle_overlays": "Overlay umschalten",
"toggle_3d": "3D umschalten", "toggle_3d": "3D umschalten",
"fullscreen": "Full screen", "fullscreen": "Vollbildmodus",
"settings": "Einstellungen", "settings": "Einstellungen",
"distance_units": "Entfernungseinheiten", "distance_units": "Entfernungseinheiten",
"metric": "Metrisch", "metric": "Metrisch",
@@ -235,7 +235,7 @@
}, },
"elevation": { "elevation": {
"button": "Höhendaten anfragen", "button": "Höhendaten anfragen",
"help": "Requesting elevation data will erase the existing elevation data, if any, and replace it with data from Mapterhorn.", "help": "Das Anfordern von Höhendaten löscht die vorhandenen Höhendaten, falls vorhanden, und ersetzt diese durch Daten von Mapterhorn.",
"help_no_selection": "Wählen Sie ein Datei-Element, um Höhendaten anzufordern." "help_no_selection": "Wählen Sie ein Datei-Element, um Höhendaten anzufordern."
}, },
"waypoint": { "waypoint": {
@@ -305,7 +305,7 @@
"united_kingdom": "Großbritannien", "united_kingdom": "Großbritannien",
"united_states": "USA", "united_states": "USA",
"libertyTopo": "Liberty Topo", "libertyTopo": "Liberty Topo",
"libertySatellite": "Liberty Satellite", "libertySatellite": "Liberty Satellit",
"osm": "OpenMapTiles OSM", "osm": "OpenMapTiles OSM",
"osmTopo": "OpenMapTiles OSM Topo", "osmTopo": "OpenMapTiles OSM Topo",
"esriSatellite": "Esri Satellite", "esriSatellite": "Esri Satellite",
+18 -18
View File
@@ -36,7 +36,7 @@
"switch_basemap": "Aldatu aurreko mapa erabiltzera", "switch_basemap": "Aldatu aurreko mapa erabiltzera",
"toggle_overlays": "Txandakatu geruzak", "toggle_overlays": "Txandakatu geruzak",
"toggle_3d": "Txandakatu 3D", "toggle_3d": "Txandakatu 3D",
"fullscreen": "Full screen", "fullscreen": "Pantaila osoa",
"settings": "Ezarpenak", "settings": "Ezarpenak",
"distance_units": "Distantzia unitateak", "distance_units": "Distantzia unitateak",
"metric": "Metrikoa", "metric": "Metrikoa",
@@ -64,7 +64,7 @@
"ctrl": "Ctrl", "ctrl": "Ctrl",
"click": "Klik", "click": "Klik",
"drag": "Arrastatu", "drag": "Arrastatu",
"right_click_drag": "Right-click drag", "right_click_drag": "Eskuin klik eta errestan eraman",
"metadata": { "metadata": {
"button": "Informazioa...", "button": "Informazioa...",
"name": "Izena", "name": "Izena",
@@ -192,8 +192,8 @@
"from": "Hasiera puntua errepide hurbilenetik oso hurrun dago", "from": "Hasiera puntua errepide hurbilenetik oso hurrun dago",
"via": "Puntua errepide hurbilenetik oso hurrun dago", "via": "Puntua errepide hurbilenetik oso hurrun dago",
"to": "Bukaera puntua errepide hurbilenetik oso hurrun dago", "to": "Bukaera puntua errepide hurbilenetik oso hurrun dago",
"distance": "The end point is too far from the start point", "distance": "Bukaera-puntua hasiera-puntutik urrutiegi dago",
"connection": "No connection found between the points", "connection": "Ez da konexiorik topatu puntuen artean",
"timeout": "Ibilbidea kalkulatzea luzeegi joan da, saiatu hurbilago dauden puntuak gehitzen" "timeout": "Ibilbidea kalkulatzea luzeegi joan da, saiatu hurbilago dauden puntuak gehitzen"
} }
}, },
@@ -235,7 +235,7 @@
}, },
"elevation": { "elevation": {
"button": "Eskatu altueraren datuak", "button": "Eskatu altueraren datuak",
"help": "Requesting elevation data will erase the existing elevation data, if any, and replace it with data from Mapterhorn.", "help": "Kota-datuak eskatzeak lehendik dauden kota-datuak ezabatuko ditu, halakorik balego, eta Mapterhorn-eko datuekin ordezkatuko dira.",
"help_no_selection": "Aukeratu fitxategi bat altuera datuak eskatzeko." "help_no_selection": "Aukeratu fitxategi bat altuera datuak eskatzeko."
}, },
"waypoint": { "waypoint": {
@@ -277,7 +277,7 @@
"new": "Geruza pertsonalizatu berria", "new": "Geruza pertsonalizatu berria",
"edit": "Editatu geruza pertsonalizatua", "edit": "Editatu geruza pertsonalizatua",
"urls": "URLa(k)", "urls": "URLa(k)",
"url_placeholder": "WMTS, WMS or MapLibre style JSON", "url_placeholder": "WMTS, WMS edo MapLibre estiloko JSON",
"max_zoom": "Zoom max", "max_zoom": "Zoom max",
"layer_type": "Geruza mota", "layer_type": "Geruza mota",
"basemap": "Oinarrizko-mapa", "basemap": "Oinarrizko-mapa",
@@ -305,7 +305,7 @@
"united_kingdom": "Erresuma Batua", "united_kingdom": "Erresuma Batua",
"united_states": "Ameriketako Estatu Batuak", "united_states": "Ameriketako Estatu Batuak",
"libertyTopo": "Liberty Topo", "libertyTopo": "Liberty Topo",
"libertySatellite": "Liberty Satellite", "libertySatellite": "Liberty Satelitea",
"osm": "OpenMapTiles OSM", "osm": "OpenMapTiles OSM",
"osmTopo": "OpenMapTiles OSM Topo", "osmTopo": "OpenMapTiles OSM Topo",
"esriSatellite": "Esri Satellite", "esriSatellite": "Esri Satellite",
@@ -494,7 +494,7 @@
"email": "Eposta", "email": "Eposta",
"contribute": "Lagundu", "contribute": "Lagundu",
"supported_by": "hauek lagunduta", "supported_by": "hauek lagunduta",
"features": "Features", "features": "Funtzioak",
"route_planning": "Bideak planifikatzea", "route_planning": "Bideak planifikatzea",
"route_planning_description": "OpenStreetMapen datuetan oinarritutako interfaze erabilterraza kirol bakoitzerako ibilbideak sortzeko.", "route_planning_description": "OpenStreetMapen datuetan oinarritutako interfaze erabilterraza kirol bakoitzerako ibilbideak sortzeko.",
"file_processing": "Fitxategien prozesaketa aurreratua", "file_processing": "Fitxategien prozesaketa aurreratua",
@@ -503,15 +503,15 @@
"maps_description": "Oinarrizko mapa, geruza eta interes-puntuen bilduma zabala. Zure aire-libreko ekintzak planifikatzen lagunduko dizu!", "maps_description": "Oinarrizko mapa, geruza eta interes-puntuen bilduma zabala. Zure aire-libreko ekintzak planifikatzen lagunduko dizu!",
"data_visualization": "Datuak bistaratzea", "data_visualization": "Datuak bistaratzea",
"data_visualization_description": "Grabatutako ekintzak edo etorkizuneko zure bideak aztertzeko altuera-profil interaktiboa.", "data_visualization_description": "Grabatutako ekintzak edo etorkizuneko zure bideak aztertzeko altuera-profil interaktiboa.",
"philosophy": "Philosophy", "philosophy": "Filosofia",
"foss": "Free, ad-free and open source", "foss": "Doakoa, propagandarik gabe eta kode irekikoa",
"foss_description": "The website is free to use, without ads, and the source code is publicly available on GitHub.", "foss_description": "Webgunea doakoa da, iragarkirik gabe, eta iturburu-kodea publikoki eskuragarri dago GitHub-en.",
"privacy": "Privacy-friendly", "privacy": "Pribatutasuna zaintzen du",
"privacy_description": "Your GPX files never leave your browser. No tracking, no data collection.", "privacy_description": "Zure GPX fitxategiak ez dira inoiz zure nabigatzailetik irteten. Ez dago jarraipenik, ez datu-bilketarik.",
"community": "Made possible by the community", "community": "Komunitateak posible egin du",
"community_description": "gpx.studio has an amazing community that has covered its costs through donations for years, while shaping the project through feature suggestions, bug reports, and translations into many languages.", "community_description": "gpx.studio-k komunitate harrigarri bat du, urte luzez dohaintzen bidez bere kostuak estali dituena, proiektuaren ezaugarri-iradokizunen, akatsen txostenen eta hizkuntza askotarako itzulpenen bidez moldatu dena.",
"support_button": "Support gpx.studio on Open Collective", "support_button": "Lagundu gpx.studio Open Collectiveren bidez",
"translate_button": "Help translate the website on Crowdin" "translate_button": "Lagundu webgunea itzultzen Crowdin-en"
}, },
"docs": { "docs": {
"translate": "Lagundu itzulpenarekin Crowdinen", "translate": "Lagundu itzulpenarekin Crowdinen",
@@ -536,7 +536,7 @@
}, },
"embedding": { "embedding": {
"title": "Sortu zure mapa", "title": "Sortu zure mapa",
"maptiler_key": "MapTiler key (optional, only required for MapTiler maps)", "maptiler_key": "MapTiler gakoa (aukeran, bakarrik behar da MapTiler mapetan)",
"file_urls": "Fitxategien URLak (komarekin banatuta)", "file_urls": "Fitxategien URLak (komarekin banatuta)",
"drive_ids": "Google Drive fitxategien IDak (komarekin banatuta)", "drive_ids": "Google Drive fitxategien IDak (komarekin banatuta)",
"basemap": "Oinarrizko-mapa", "basemap": "Oinarrizko-mapa",