From 297bb1c4985ffe9c53b1c9e4077c6af9ac1ce993 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet <pietervdvn@posteo.net> Date: Thu, 6 Mar 2025 16:21:55 +0100 Subject: [PATCH] chore: automated housekeeping... --- Docs/ELI-overview.md | 3 +- Docs/Layers/entrance.md | 9 + Docs/Layers/onwheels_entrance_data.md | 61 + Docs/Layers/walls_and_buildings.md | 1 + Docs/Themes/onwheels.md | 52 +- app/land.ts | 1 - assets/layers/address/address.json | 3 +- assets/layers/advertising/advertising.json | 21 +- assets/layers/aerialway/aerialway.json | 7 +- .../layers/animal_shelter/animal_shelter.json | 3 +- assets/layers/artwork/artwork.json | 15 +- .../layers/assembly_point/assembly_point.json | 9 +- .../assisted_repair/assisted_repair.json | 3 +- assets/layers/atm/atm.json | 9 +- assets/layers/bank/bank.json | 3 +- assets/layers/barrier/barrier.json | 9 +- assets/layers/bbq/bbq.json | 9 +- assets/layers/beehive/beehive.json | 6 +- assets/layers/bench/bench.json | 6 +- assets/layers/bench_at_pt/bench_at_pt.json | 6 +- .../layers/bicycle_rental/bicycle_rental.json | 3 +- assets/layers/bike_parking/bike_parking.json | 9 +- .../bike_repair_station.json | 3 +- assets/layers/brothel/brothel.json | 6 +- assets/layers/building/building.json | 60 +- assets/layers/cafe_pub/cafe_pub.json | 15 +- assets/layers/campsite/campsite.json | 28 +- .../charging_station/charging_station.json | 1 + assets/layers/childcare/childcare.json | 3 +- assets/layers/cinema/cinema.json | 6 +- .../layers/climbing_area/climbing_area.json | 6 +- .../layers/climbing_club/climbing_club.json | 3 +- .../climbing_opportunity.json | 5 +- .../layers/climbing_route/climbing_route.json | 3 +- assets/layers/crossings/crossings.json | 6 +- .../cycleways_and_roads.json | 5 +- .../layers/defibrillator/defibrillator.json | 16 +- assets/layers/dentist/dentist.json | 6 +- assets/layers/doctors/doctors.json | 3 +- assets/layers/elevator/elevator.json | 6 +- assets/layers/entrance/entrance.json | 6 +- assets/layers/extinguisher/extinguisher.json | 3 +- assets/layers/filters/filters.json | 8 +- assets/layers/firepit/firepit.json | 6 +- .../fitness_station/fitness_station.json | 6 +- assets/layers/food/food.json | 36 +- assets/layers/food_courts/food_courts.json | 12 +- assets/layers/ghost_bike/ghost_bike.json | 3 +- assets/layers/ghostsign/ghostsign.json | 4 +- assets/layers/governments/governments.json | 3 +- assets/layers/grave/grave.json | 7 +- assets/layers/guidepost/guidepost.json | 20 +- assets/layers/hackerspace/hackerspace.json | 19 +- assets/layers/hospital/hospital.json | 6 +- assets/layers/ice_cream/ice_cream.json | 11 +- assets/layers/icons/icons.json | 6 +- assets/layers/indoors/indoors.json | 9 +- assets/layers/insect_hotel/insect_hotel.json | 2 +- .../item_with_image/item_with_image.json | 2 +- assets/layers/kerbs/kerbs.json | 32 +- assets/layers/lighthouse/lighthouse.json | 9 +- assets/layers/love_hotel/love_hotel.json | 4 +- assets/layers/map/map.json | 6 +- assets/layers/maproulette/maproulette.json | 2 +- assets/layers/memorial/memorial.json | 36 +- .../mountain_rescue/mountain_rescue.json | 2 +- assets/layers/note/note.json | 5 +- .../observation_tower/observation_tower.json | 5 +- .../osm_community_index.json | 12 +- .../outdoor_seating/outdoor_seating.json | 4 +- .../layers/parcel_lockers/parcel_lockers.json | 9 +- assets/layers/parking/parking.json | 5 +- .../layers/parking_spaces/parking_spaces.json | 2 +- assets/layers/pharmacy/pharmacy.json | 9 +- assets/layers/police/police.json | 14 +- assets/layers/postboxes/postboxes.json | 6 +- assets/layers/questions/questions.json | 24 +- .../railway_platforms/railway_platforms.json | 3 +- .../rainbow_crossings/rainbow_crossings.json | 3 +- assets/layers/recycling/recycling.json | 7 +- assets/layers/route_marker/route_marker.json | 8 +- assets/layers/school/school.json | 34 +- .../layers/scouting_group/scouting_group.json | 7 +- assets/layers/search/search.json | 2 +- assets/layers/shelter/shelter.json | 8 +- assets/layers/shops/shops.json | 26 +- assets/layers/shower/shower.json | 6 +- assets/layers/ski_piste/ski_piste.json | 8 +- assets/layers/slow_roads/slow_roads.json | 14 +- .../layers/souvenir_coin/souvenir_coin.json | 4 +- .../layers/souvenir_note/souvenir_note.json | 12 +- assets/layers/speed_camera/speed_camera.json | 2 +- .../layers/speed_display/speed_display.json | 6 +- assets/layers/sport_pitch/sport_pitch.json | 8 +- .../layers/sports_centre/sports_centre.json | 190 +- assets/layers/stairs/stairs.json | 11 +- assets/layers/stripclub/stripclub.json | 8 +- assets/layers/summary/summary.json | 3 +- .../surveillance_camera.json | 2 +- .../layers/tactile_model/tactile_model.json | 4 +- .../tertiary_education.json | 6 +- assets/layers/toilet/toilet.json | 6 +- assets/layers/tool_library/tool_library.json | 7 +- .../tourism_accomodation.json | 29 +- assets/layers/trail/trail.json | 6 +- .../layers/transit_routes/transit_routes.json | 3 +- assets/layers/tree_node/tree_node.json | 9 +- assets/layers/usersettings/usersettings.json | 3 +- .../visitor_information_centre.json | 6 +- assets/layers/windturbine/windturbine.json | 3 +- assets/svg/license_info.json | 10 - assets/themes/advertising/advertising.json | 3 +- assets/themes/architecture/architecture.json | 8 +- assets/themes/atm/atm.json | 3 +- assets/themes/benches/benches.json | 6 +- .../themes/cafes_and_pubs/cafes_and_pubs.json | 6 +- assets/themes/campersite/campersite.json | 3 +- .../charging_stations/charging_stations.json | 3 +- .../circular_economy/circular_economy.json | 3 +- assets/themes/climbing/climbing.json | 15 +- assets/themes/cyclenodes/cyclenodes.json | 21 +- assets/themes/cyclestreets/cyclestreets.json | 6 +- .../disaster_response/disaster_response.json | 6 +- .../themes/drinking_water/drinking_water.json | 3 +- assets/themes/education/education.json | 6 +- .../themes/elongated_coin/elongated_coin.json | 7 +- assets/themes/etymology/etymology.json | 24 +- .../themes/facadegardens/facadegardens.json | 57 +- assets/themes/food/food.json | 6 +- assets/themes/glutenfree/glutenfree.json | 3 +- assets/themes/guideposts/guideposts.json | 3 +- assets/themes/hailhydrant/hailhydrant.json | 2 +- assets/themes/healthcare/healthcare.json | 13 +- assets/themes/hotels/hotels.json | 3 +- assets/themes/icecream/icecream.json | 3 +- assets/themes/indoors/indoors.json | 3 +- .../kerbs_and_crossings.json | 6 +- assets/themes/maps/maps.json | 3 +- assets/themes/notes/notes.json | 3 +- package-lock.json | 12 +- scripts/generateDocs.ts | 2 +- scripts/generateLayerOverview.ts | 94 +- scripts/generateLayouts.ts | 52 +- scripts/generateReviewsAnalysis.ts | 23 +- scripts/generateStats.ts | 7 +- scripts/generateTaginfoProjectFiles.ts | 3 +- src/Logic/GeoOperations.ts | 1 - src/Logic/Search/ThemeSearch.ts | 45 +- src/Logic/State/SearchState.ts | 5 +- src/Logic/State/UserSettingsMetaTagging.ts | 48 +- src/Logic/Tags/SubstitutingTag.ts | 5 +- src/Logic/Web/AndroidPolyfill.ts | 2 +- src/Logic/Web/MangroveReviews.ts | 18 +- src/Models/ThemeConfig/TagRenderingConfig.ts | 15 +- .../UserMapFeatureswitchState.ts | 16 +- src/UI/AllThemesGui.svelte | 35 +- src/UI/Base/Popup.svelte | 3 +- src/UI/BigComponents/ClearGPSHistory.svelte | 3 +- src/UI/BigComponents/CopyrightPanel.svelte | 49 +- src/UI/BigComponents/MenuDrawer.svelte | 40 +- .../PendingChangesIndicator.svelte | 1 + src/UI/BigComponents/PrivacyPolicy.svelte | 11 +- src/UI/BigComponents/StatisticsPanel.ts | 1 - src/UI/BigComponents/TagRenderingChart.ts | 9 +- src/UI/BigComponents/ThemesList.svelte | 5 +- .../InputElement/Validators/RegexValidator.ts | 5 +- src/UI/Map/ProtomapsLanguageSupport.ts | 6423 ++++------------- src/UI/Map/RasterLayerHandler.ts | 24 +- src/UI/Popup/AddNewPoint/AddNewPoint.svelte | 12 +- src/UI/Reviews/ReviewForm.svelte | 33 +- src/UI/Reviews/ReviewPrivacyShield.svelte | 30 +- .../SettingsVisualisations.ts | 4 +- .../UISpecialVisualisations.ts | 4 +- src/UI/SpecialVisualizations.ts | 15 +- .../Statistics/AllFeaturesStatistics.svelte | 4 +- src/UI/Statistics/LayerStatistics.svelte | 23 +- .../CollapsedTagRenderingPreview.svelte | 18 +- src/UI/StudioGUI.svelte | 24 +- src/assets/contributors.json | 34 +- src/assets/language_in_country.json | 4 +- src/assets/schemas/layerconfigmeta.json | 12 +- src/assets/schemas/layoutconfigmeta.json | 24 +- .../questionabletagrenderingconfigmeta.json | 2 +- src/assets/translators.json | 22 +- src/land.ts | 2 +- 185 files changed, 2826 insertions(+), 5874 deletions(-) create mode 100644 Docs/Layers/onwheels_entrance_data.md diff --git a/Docs/ELI-overview.md b/Docs/ELI-overview.md index 161440a3d..1670c852e 100644 --- a/Docs/ELI-overview.md +++ b/Docs/ELI-overview.md @@ -242,6 +242,7 @@ This table gives a summary of ids, names and other metainformation. [See the onl | geoEuskadi-basemap | geoEuskadiren Kartografia | map | | Eusko Jaurlaritza / Gobierno Vasco. geoEuskadi | | geoEuskadi-ORTO | geoEuskadiren Ortoargazkiak | photo | ⭐ | Eusko Jaurlaritza / Gobierno Vasco. geoEuskadi | | IDEIB | IDEIB - Ortofoto més recent de les Illes Balears | photo | ⭐ | Infraestructura de Dades Espacials de les Illes Balears | +| ortofotos-madrid-2023 | Ortofotos Madrid (mayo 2023) | photo | | Ayuntamiento de Madrid | | hri-orto | Helsinki region orthophoto | photo | ⭐ | © Espoon, Helsingin ja Vantaan kaupungit, Kirkkonummen ja Nurmijärven kunnat sekä HSL ja HSY | | mml-orto | MML Orthophoto | photo | ⭐ | © Maanmittauslaitos | | mml-tausta | MML Background Map | map | | © Maanmittauslaitos | @@ -934,7 +935,7 @@ This table gives a summary of ids, names and other metainformation. [See the onl | Environment_Canterbury_Imagery | Environment Canterbury Imagery | photo | | Environment Canterbury | | LINZ_Cyclone_Gabrielle_Hawkes_Bay | LINZ Cyclone Gabrielle – Hawke's Bay | photo | ⭐ | Sourced from LINZ CC-BY 4.0 | | LINZ_NZ_Aerial_Imagery | LINZ NZ Aerial Imagery | photo | ⭐ | Sourced from LINZ CC-BY 4.0 | -| LINZ_Auckland_2010 | LINZ Auckland 2010-2012 | historicphoto | | Sourced from LINZ CC-BY 4.0 | +| LINZ_Auckland_2017 | LINZ Auckland 2017 | historicphoto | | Sourced from LINZ CC-BY 4.0 | | LINZ_Auckland_2023 | LINZ Auckland 2023 | photo | ⭐ | Sourced from LINZ CC-BY 4.0 | | LINZ_Bay_of_Plenty_2014 | LINZ Bay of Plenty 2014-2015 | historicphoto | | Sourced from LINZ CC-BY 4.0 | | LINZ_Christchurch_2015 | LINZ Christchurch 2015-2016 | historicphoto | | Sourced from LINZ CC-BY 4.0 | diff --git a/Docs/Layers/entrance.md b/Docs/Layers/entrance.md index 40e316a4a..1e4d4f1e9 100644 --- a/Docs/Layers/entrance.md +++ b/Docs/Layers/entrance.md @@ -27,6 +27,7 @@ A layer showing entrances and offering capabilities to survey some advanced data - [leftover-questions](#leftover-questions) - [move-button](#move-button) - [lod](#lod) +5. [Filters](#filters) ## Themes using this layer @@ -163,5 +164,13 @@ _This tagrendering has no question and is thus read-only_ This tagrendering has labels `added_by_default` +## Filters + +| id | question | osmTags | +-----|-----|----- | +| width.0 | *Any/No width info* (default) | | +| width.1 | Without width info | width= | + + This document is autogenerated from [assets/layers/entrance/entrance.json](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/assets/layers/entrance/entrance.json) diff --git a/Docs/Layers/onwheels_entrance_data.md b/Docs/Layers/onwheels_entrance_data.md new file mode 100644 index 000000000..5142157ef --- /dev/null +++ b/Docs/Layers/onwheels_entrance_data.md @@ -0,0 +1,61 @@ +[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources) + +# onwheels_entrance_data + +All objects which have entrance data mapped on the amenity instead of the entrance object + + - This layer is shown at zoomlevel **0** and higher + - This layer is not visible by default and must be enabled in the filter by the user. + - Elements don't have a title set and cannot be toggled nor will they show up in the dashboard. If you import this layer in your theme, override `title` to make this toggleable. + - This layer is not visible by default and the visibility cannot be toggled, effectively resulting in a fully hidden layer. This can be useful, e.g. to calculate some metatags. If you want to render this layer (e.g. for debugging), enable it by setting the URL-parameter layer-<id>=true + - Not visible in the layer selection by default. If you want to make this layer toggable, override `name` + - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` + - This layer will automatically load [walls_and_buildings](./walls_and_buildings.md) into the layout as it depends on it: a tagrendering needs this layer (_stolen_entrances) + - This layer will automatically load [walls_and_buildings](./walls_and_buildings.md) into the layout as it depends on it: a calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _enclosing_building) + +## Table of contents + +1. [Themes using this layer](#themes-using-this-layer) +2. [Basic tags for this layer](#basic-tags-for-this-layer) +3. [Supported attributes](#supported-attributes) + - [_stolen_entrances](#_stolen_entrances) + - [leftover-questions](#leftover-questions) + - [lod](#lod) + +## Themes using this layer + + - [onwheels](https://mapcomplete.org/onwheels) + +## Basic tags for this layer + +Elements must match **all** of the following expressions: + +0. door= +1. entrance= +2. entrance:kerb:height~.+ | entrance:step_count~.+ | entrance:width~.+ | entrance:width~.+ +3. indoor!=door + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B!%22door%22%5D%5B!%22entrance%22%5D%5B%22entrance%3Akerb%3Aheight%22%5D%5B%22indoor%22!%3D%22door%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B!%22door%22%5D%5B!%22entrance%22%5D%5B%22entrance%3Astep_count%22%5D%5B%22indoor%22!%3D%22door%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B!%22door%22%5D%5B!%22entrance%22%5D%5B%22entrance%3Awidth%22%5D%5B%22indoor%22!%3D%22door%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B!%22door%22%5D%5B!%22entrance%22%5D%5B%22entrance%3Awidth%22%5D%5B%22indoor%22!%3D%22door%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + +## Supported attributes + +### _stolen_entrances + +_This tagrendering has no question and is thus read-only_ +*{steal(_enclosing_building,walls_and_buildings.entrance_info; walls_and_buildings.biggest_width)}* + +### leftover-questions + +_This tagrendering has no question and is thus read-only_ +*{questions( ,)}* + +### lod + +_This tagrendering has no question and is thus read-only_ +*{linked_data_from_website()}* + +This tagrendering has labels +`added_by_default` + + +This document is autogenerated from [assets/themes/onwheels/onwheels.json](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/assets/themes/onwheels/onwheels.json) diff --git a/Docs/Layers/walls_and_buildings.md b/Docs/Layers/walls_and_buildings.md index ba96da276..09e20f1e5 100644 --- a/Docs/Layers/walls_and_buildings.md +++ b/Docs/Layers/walls_and_buildings.md @@ -19,6 +19,7 @@ Special builtin layer providing all walls and buildings. This layer is useful in - This layer is needed as dependency for layer [postboxes](#postboxes) - This layer is needed as dependency for layer [surveillance_camera](#surveillance_camera) - This layer is needed as dependency for layer [facadegardens](#facadegardens) + - This layer is needed as dependency for layer [onwheels_entrance_data](#onwheels_entrance_data) - This layer is needed as dependency for layer [parking_spaces_disabled](#parking_spaces_disabled) ## Table of contents diff --git a/Docs/Themes/onwheels.md b/Docs/Themes/onwheels.md index d963f29c2..5a5914e17 100644 --- a/Docs/Themes/onwheels.md +++ b/Docs/Themes/onwheels.md @@ -8,6 +8,7 @@ The theme introduction reads: This theme contains the following layers: + - [onwheels_entrance_data (defined in this theme)](#onwheels_entrance_data) - [indoors](../Layers/indoors.md) - [pedestrian_path](../Layers/pedestrian_path.md) - [cycleways_and_roads](../Layers/cycleways_and_roads.md) @@ -50,7 +51,13 @@ Available languages: - [OnWheels ( onwheels )](#onwheels-(-onwheels-)) 1. [Layers defined in this theme configuration file](#layers-defined-in-this-theme-configuration-file) -2. [parking_spaces_disabled](#parking_spaces_disabled) +2. [onwheels_entrance_data](#onwheels_entrance_data) + - [Basic tags for this layer](#basic-tags-for-this-layer) + - [Supported attributes](#supported-attributes) + + [_stolen_entrances](#_stolen_entrances) + + [leftover-questions](#leftover-questions) + + [lod](#lod) +3. [parking_spaces_disabled](#parking_spaces_disabled) - [Basic tags for this layer](#basic-tags-for-this-layer) - [Supported attributes](#supported-attributes) + [images](#images) @@ -61,6 +68,49 @@ Available languages: # Layers defined in this theme configuration file These layers can not be reused in different themes. +# onwheels_entrance_data + +All objects which have entrance data mapped on the amenity instead of the entrance object + + - This layer is shown at zoomlevel **0** and higher + - This layer is not visible by default and must be enabled in the filter by the user. + - Elements don't have a title set and cannot be toggled nor will they show up in the dashboard. If you import this layer in your theme, override `title` to make this toggleable. + - This layer is not visible by default and the visibility cannot be toggled, effectively resulting in a fully hidden layer. This can be useful, e.g. to calculate some metatags. If you want to render this layer (e.g. for debugging), enable it by setting the URL-parameter layer-<id>=true + - Not visible in the layer selection by default. If you want to make this layer toggable, override `name` + - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings` + +No themes use this layer + +## Basic tags for this layer + +Elements must match **all** of the following expressions: + +0. door= +1. entrance= +2. entrance:kerb:height~.+ | entrance:step_count~.+ | entrance:width~.+ | entrance:width~.+ +3. indoor!=door + +[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B!%22door%22%5D%5B!%22entrance%22%5D%5B%22entrance%3Akerb%3Aheight%22%5D%5B%22indoor%22!%3D%22door%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B!%22door%22%5D%5B!%22entrance%22%5D%5B%22entrance%3Astep_count%22%5D%5B%22indoor%22!%3D%22door%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B!%22door%22%5D%5B!%22entrance%22%5D%5B%22entrance%3Awidth%22%5D%5B%22indoor%22!%3D%22door%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B!%22door%22%5D%5B!%22entrance%22%5D%5B%22entrance%3Awidth%22%5D%5B%22indoor%22!%3D%22door%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B) + +## Supported attributes + +### _stolen_entrances + +_This tagrendering has no question and is thus read-only_ +*{steal(_enclosing_building,walls_and_buildings.entrance_info; walls_and_buildings.biggest_width)}* + +### leftover-questions + +_This tagrendering has no question and is thus read-only_ +*{questions( ,)}* + +### lod + +_This tagrendering has no question and is thus read-only_ +*{linked_data_from_website()}* + +This tagrendering has labels +`added_by_default` # parking_spaces_disabled This layer is based on [parking_spaces](../Layers/parking_spaces.md) diff --git a/app/land.ts b/app/land.ts index a8ac65d7c..b6e000519 100644 --- a/app/land.ts +++ b/app/land.ts @@ -11,7 +11,6 @@ console.log("Prev state is", key, st) const tokenSrc = new UIEventSource("") const debug = new UIEventSource<string[]>([]) - const connection = new OsmConnection() connection.finishLogin(async () => { let token: string = undefined diff --git a/assets/layers/address/address.json b/assets/layers/address/address.json index 01f07dab1..a8965f779 100644 --- a/assets/layers/address/address.json +++ b/assets/layers/address/address.json @@ -51,7 +51,8 @@ "eu": "Helbideak", "it": "Indirizzi", "uk": "Адреси", - "ko": "주소" + "ko": "주소", + "cy": "Cyfeiriadau" }, "source": { "osmTags": { diff --git a/assets/layers/advertising/advertising.json b/assets/layers/advertising/advertising.json index 084a7cfcd..50aa8ea2c 100644 --- a/assets/layers/advertising/advertising.json +++ b/assets/layers/advertising/advertising.json @@ -17,7 +17,8 @@ "zh_Hant": "廣告", "fr": "Publicité", "ru": "Реклама", - "uk": "Оголошення" + "uk": "Оголошення", + "cy": "Hysbyseb" }, "description": { "ca": "Completarem les dades dels elements publicitaris amb referència, operador i il·luminació", @@ -86,7 +87,8 @@ "pt_BR": "Quadro", "zh_Hans": "木板", "pt": "Quadro", - "uk": "Дошка оголошень" + "uk": "Дошка оголошень", + "cy": "Bwrdd" } }, { @@ -127,7 +129,8 @@ "pl": "Kolumna", "pt_BR": "Coluna", "zh_Hans": "专栏", - "pt": "Coluna" + "pt": "Coluna", + "cy": "Colofn" } }, { @@ -148,7 +151,8 @@ "pl": "Flaga", "pt_BR": "Bandeira", "zh_Hans": "旗帜", - "pt": "Bandeira" + "pt": "Bandeira", + "cy": "Baner" } }, { @@ -169,7 +173,8 @@ "pl": "Ekran", "pt_BR": "Tela", "zh_Hans": "屏幕", - "pt": "Ecrã" + "pt": "Ecrã", + "cy": "Sgrin" } }, { @@ -210,7 +215,8 @@ "eu": "Kartela", "pl": "Znak", "zh_Hans": "标志", - "pt": "Placa" + "pt": "Placa", + "cy": "Arwydd" } }, { @@ -829,7 +835,8 @@ "zh_Hans": "标志", "it": "un'insegna", "uk": "знак", - "nl": "een bord" + "nl": "een bord", + "cy": "arwydd" }, "description": { "en": "Used for advertising signs, neon signs, logos & institutional entrance signs", diff --git a/assets/layers/aerialway/aerialway.json b/assets/layers/aerialway/aerialway.json index c48030f5a..02f9c9dfd 100644 --- a/assets/layers/aerialway/aerialway.json +++ b/assets/layers/aerialway/aerialway.json @@ -34,7 +34,7 @@ "cs": "Dráha {name}", "es": "Teleférico {name}", "nl": "Kabelbaan {name}", - "ca": "Telecadira {name}" + "ca": "Telefèric {name}" } }, "pointRendering": [ @@ -63,7 +63,8 @@ "es": "{name}", "cs": "{name}", "ca": "{name}", - "nl": "{name}" + "nl": "{name}", + "cy": "{name}" }, "condition": "name~*", "classes": "bg-white p-1 px-2 rounded" @@ -314,7 +315,7 @@ "cs": "Touto lanovkou lze vyjet pouze na vrchol", "es": "Este teleférico solo se puede tomar hacia arriba", "nl": "Deze kabelbaan kan alleen naar de top worden genomen", - "ca": "Aquest telefèric només es pot prendre cap amunt" + "ca": "Aquest telefèric només es prendre cap amunt" } }, { diff --git a/assets/layers/animal_shelter/animal_shelter.json b/assets/layers/animal_shelter/animal_shelter.json index 0aa81fd4b..31bfde09f 100644 --- a/assets/layers/animal_shelter/animal_shelter.json +++ b/assets/layers/animal_shelter/animal_shelter.json @@ -50,7 +50,8 @@ "ca": "{name}", "pl": "{name}", "cs": "{name}", - "nl": "{name}" + "nl": "{name}", + "cy": "{name}" } } ] diff --git a/assets/layers/artwork/artwork.json b/assets/layers/artwork/artwork.json index 622a102cf..06259fb88 100644 --- a/assets/layers/artwork/artwork.json +++ b/assets/layers/artwork/artwork.json @@ -23,7 +23,8 @@ "eu": "Artelanak", "pt_BR": "Obras de arte", "zh_Hans": "艺术品", - "uk": "Витвори мистецтва" + "uk": "Витвори мистецтва", + "cy": "Gwaith Celf" }, "description": { "en": "An open map of statues, busts, graffitis and other artwork all over the world", @@ -432,7 +433,8 @@ "he": "אבן", "eu": "Harria", "zh_Hans": "石头", - "uk": "Камінь" + "uk": "Камінь", + "cy": "Carreg" } }, { @@ -458,7 +460,8 @@ "pt_BR": "Instalação", "eu": "Instalazioa", "zh_Hans": "设施", - "uk": "Інсталяція" + "uk": "Інсталяція", + "cy": "Gosodiad" } }, { @@ -484,7 +487,8 @@ "eu": "Graffitia", "pt_BR": "Grafite", "zh_Hans": "涂鸦/粗糙雕刻", - "uk": "Графіті" + "uk": "Графіті", + "cy": "Graffiti" } }, { @@ -559,7 +563,8 @@ "he": "יצירת פסיפס", "eu": "Keramika", "pt_BR": "Azulejaria", - "uk": "Кахельна плитка" + "uk": "Кахельна плитка", + "cy": "Gwaith Teils" } }, { diff --git a/assets/layers/assembly_point/assembly_point.json b/assets/layers/assembly_point/assembly_point.json index 772852f7b..3f506d1e9 100644 --- a/assets/layers/assembly_point/assembly_point.json +++ b/assets/layers/assembly_point/assembly_point.json @@ -147,7 +147,8 @@ "cs": "Zemětřesení", "es": "Terremoto", "nl": "Aardbeving", - "ca": "Terratrèmol" + "ca": "Terratrèmol", + "cy": "Daeargryn" }, "icon": { "path": "./assets/layers/assembly_point/earthquake.svg", @@ -165,7 +166,8 @@ "cs": "Povodně", "es": "Inundación", "nl": "Overstroming", - "ca": "Inundació" + "ca": "Inundació", + "cy": "Llif" }, "icon": { "path": "./assets/layers/assembly_point/flood.svg", @@ -183,7 +185,8 @@ "cs": "Požár", "es": "Incendio", "nl": "Brand", - "ca": "Foc" + "ca": "Foc", + "cy": "Tân" }, "icon": { "path": "./assets/layers/assembly_point/fire.svg", diff --git a/assets/layers/assisted_repair/assisted_repair.json b/assets/layers/assisted_repair/assisted_repair.json index 249fa648c..3a0fd4a34 100644 --- a/assets/layers/assisted_repair/assisted_repair.json +++ b/assets/layers/assisted_repair/assisted_repair.json @@ -38,7 +38,8 @@ "cs": "{name}", "es": "{name}", "nl": "{name}", - "ca": "{name}" + "ca": "{name}", + "cy": "{name}" } } ] diff --git a/assets/layers/atm/atm.json b/assets/layers/atm/atm.json index 1f1cf0845..c0df058aa 100644 --- a/assets/layers/atm/atm.json +++ b/assets/layers/atm/atm.json @@ -15,7 +15,8 @@ "es": "Cajeros automáticos", "pt": "Multibancos", "it": "Sportelli Bancomat", - "uk": "Банкомати" + "uk": "Банкомати", + "cy": "Peiriannau Codi Arian" }, "description": { "en": "ATMs to withdraw money", @@ -52,7 +53,8 @@ "pt_BR": "Caixa eletrônico", "es": "Cajero automático", "pt": "Multibanco", - "sl": "Bankomat" + "sl": "Bankomat", + "cy": "Peiriant Codi Arian" }, "mappings": [ { @@ -218,7 +220,8 @@ "pt_BR": "Operador", "es": "Operador", "pt": "Operador", - "it": "Operatore" + "it": "Operatore", + "cy": "Gweithredwr" } }, "render": { diff --git a/assets/layers/bank/bank.json b/assets/layers/bank/bank.json index 0cf3edc25..eacca3437 100644 --- a/assets/layers/bank/bank.json +++ b/assets/layers/bank/bank.json @@ -13,7 +13,8 @@ "pt_BR": "Bancos", "es": "Bancos", "pt": "Bancos", - "uk": "Банки" + "uk": "Банки", + "cy": "Banciau" }, "description": { "en": "A financial institution to deposit money", diff --git a/assets/layers/barrier/barrier.json b/assets/layers/barrier/barrier.json index 5d4673da5..69fb25274 100644 --- a/assets/layers/barrier/barrier.json +++ b/assets/layers/barrier/barrier.json @@ -18,7 +18,8 @@ "pl": "Barierki", "pt_BR": "Barreiras", "pt": "Barreiras", - "uk": "Перешкоди" + "uk": "Перешкоди", + "cy": "Rhwystrau" }, "description": { "en": "Obstacles while cycling, such as bollards and cycle barriers", @@ -58,7 +59,8 @@ "he": "מחסום", "eu": "Barrera", "pt_BR": "Barreira", - "pt": "Barreira" + "pt": "Barreira", + "cy": "Rhwystr" }, "mappings": [ { @@ -76,7 +78,8 @@ "pa_PK": "بولارڈ", "eu": "Bolardoa", "pt_BR": "Pilar", - "pt": "Pilar" + "pt": "Pilar", + "cy": "Bolard" } }, { diff --git a/assets/layers/bbq/bbq.json b/assets/layers/bbq/bbq.json index bbce507d7..320a690c8 100644 --- a/assets/layers/bbq/bbq.json +++ b/assets/layers/bbq/bbq.json @@ -7,7 +7,8 @@ "es": "Barbacoa", "nl": "Barbecue", "ca": "Barbacoa", - "uk": "Барбекю" + "uk": "Барбекю", + "cy": "Barbeciw" }, "description": { "de": "Ein ortsfest installierter Grill, typischerweise öffentlich zugänglich.", @@ -28,7 +29,8 @@ "cs": "BBQ", "es": "Barbacoa", "nl": "BBQ", - "ca": "Barbacoa" + "ca": "Barbacoa", + "cy": "Barbeciw" } }, "pointRendering": [ @@ -58,7 +60,8 @@ "cs": "BBQ", "es": "Barbacoa", "nl": "Barbecue", - "ca": "Barbacoa" + "ca": "Barbacoa", + "cy": "Barbeciw" }, "description": { "de": "Ein ortsfest installierter Grill, typischerweise öffentlich zugänglich.", diff --git a/assets/layers/beehive/beehive.json b/assets/layers/beehive/beehive.json index 0ba774acf..e9a486f11 100644 --- a/assets/layers/beehive/beehive.json +++ b/assets/layers/beehive/beehive.json @@ -4,7 +4,8 @@ "en": "Beehives", "de": "Bienenstöcke", "ca": "Ruscs", - "uk": "Бджолині вулики" + "uk": "Бджолині вулики", + "cy": "Nythod Gwenyn" }, "description": { "en": "Layer showing beehives", @@ -18,7 +19,8 @@ "title": { "en": "Beehive", "de": "Bienenstock", - "ca": "Rusc" + "ca": "Rusc", + "cy": "Nyth Gwenyn" }, "pointRendering": [ { diff --git a/assets/layers/bench/bench.json b/assets/layers/bench/bench.json index f54ab167c..300ef7c5b 100644 --- a/assets/layers/bench/bench.json +++ b/assets/layers/bench/bench.json @@ -23,7 +23,8 @@ "pa_PK": "بینچ", "he": "ספסלים", "eu": "Bankuak", - "uk": "Лавки" + "uk": "Лавки", + "cy": "Meinciau" }, "description": { "nl": "Een zitbank is een houten, metalen, stenen, … oppervlak waar een mens kan zitten. Deze laag toont ze en stelt er enkele vragen over.", @@ -65,7 +66,8 @@ "cs": "Lavička", "pa_PK": "بینچ", "he": "ספסל", - "eu": "Bankua" + "eu": "Bankua", + "cy": "Mainc" } }, "pointRendering": [ diff --git a/assets/layers/bench_at_pt/bench_at_pt.json b/assets/layers/bench_at_pt/bench_at_pt.json index abe2d4e76..020decfc2 100644 --- a/assets/layers/bench_at_pt/bench_at_pt.json +++ b/assets/layers/bench_at_pt/bench_at_pt.json @@ -70,7 +70,8 @@ "cs": "Lavička", "pa_PK": "بینچ", "he": "ספסל", - "eu": "Banku" + "eu": "Banku", + "cy": "Mainc" }, "mappings": [ { @@ -175,7 +176,8 @@ "ca": "{name}", "da": "{name}", "cs": "{name}", - "eu": "{name}" + "eu": "{name}", + "cy": "{name}" }, "freeform": { "key": "name" diff --git a/assets/layers/bicycle_rental/bicycle_rental.json b/assets/layers/bicycle_rental/bicycle_rental.json index 87cb5b036..12b35b50d 100644 --- a/assets/layers/bicycle_rental/bicycle_rental.json +++ b/assets/layers/bicycle_rental/bicycle_rental.json @@ -75,7 +75,8 @@ "eu": "{name}", "pl": "{name}", "pt_BR": "{name}", - "pt": "{name}" + "pt": "{name}", + "cy": "{name}" } } ] diff --git a/assets/layers/bike_parking/bike_parking.json b/assets/layers/bike_parking/bike_parking.json index 446ba65c8..77a763ffa 100644 --- a/assets/layers/bike_parking/bike_parking.json +++ b/assets/layers/bike_parking/bike_parking.json @@ -326,7 +326,8 @@ "pt_BR": "Cabana", "pt": "Cabana", "pl": "Wiata", - "uk": "Навіс" + "uk": "Навіс", + "cy": "Sied" }, "icon": { "path": "./assets/layers/bike_parking/shed.svg", @@ -350,7 +351,8 @@ "eu": "Bolardo", "pt_BR": "Pilar", "pt": "Pilar", - "uk": "Стовпчик" + "uk": "Стовпчик", + "cy": "Bolard" }, "icon": { "path": "./assets/layers/bike_parking/bollard.svg", @@ -703,7 +705,8 @@ "da": "{access}", "cs": "{access}", "eu": "{access}", - "pl": "{access}" + "pl": "{access}", + "cy": "{access}" }, "freeform": { "key": "access", diff --git a/assets/layers/bike_repair_station/bike_repair_station.json b/assets/layers/bike_repair_station/bike_repair_station.json index 597be16b2..0d1c0b5f5 100644 --- a/assets/layers/bike_repair_station/bike_repair_station.json +++ b/assets/layers/bike_repair_station/bike_repair_station.json @@ -985,7 +985,8 @@ "cs": "Dunlop", "ca": "Dunlop", "eu": "Dunlop", - "pl": "Dunlop" + "pl": "Dunlop", + "cy": "Dunlop" } }, { diff --git a/assets/layers/brothel/brothel.json b/assets/layers/brothel/brothel.json index 5fc4e594b..5918fce81 100644 --- a/assets/layers/brothel/brothel.json +++ b/assets/layers/brothel/brothel.json @@ -6,7 +6,8 @@ "cs": "Nevěstince", "es": "Burdeles", "nl": "Bordelen", - "ca": "Bordells" + "ca": "Bordells", + "cy": "Puteindai" }, "description": { "en": "An establishment specifically dedicated to prostitution.", @@ -27,7 +28,8 @@ "ca": "Bordell", "cs": "Nevěstinec", "es": "Burdel", - "nl": "Bordeel" + "nl": "Bordeel", + "cy": "Puteindy" }, "mappings": [ { diff --git a/assets/layers/building/building.json b/assets/layers/building/building.json index 20ecc6a22..433fdd166 100644 --- a/assets/layers/building/building.json +++ b/assets/layers/building/building.json @@ -5,7 +5,9 @@ "osmTags": "building~*" }, "description": { - "en": "All buildings" + "en": "All buildings", + "ca": "Tots els edificis", + "de": "Alle Gebäude" }, "pointRendering": [ { @@ -28,18 +30,26 @@ } ], "name": { - "en": "Buildings" + "en": "Buildings", + "ca": "Edificis", + "cy": "Adeiladau", + "de": "Gebäude" }, "title": { "render": { - "en": "Building" + "en": "Building", + "ca": "Edifici", + "cy": "Adeilad", + "de": "Gebäude" } }, "tagRenderings": [ { "id": "architecture", "question": { - "en": "What is the architectural style of this building?" + "en": "What is the architectural style of this building?", + "ca": "Quin és l'estil arquitectònic d'aquest edifici?", + "de": "Welchem architektonischen Stil entspricht dieses Gebäude?" }, "mappings": [ { @@ -47,7 +57,8 @@ "then": { "en": "Islamic architecture", "fr": "Architecture islamique", - "nl": "Islamitische architectuur" + "nl": "Islamitische architectuur", + "ca": "Arquitectura islàmica" } }, { @@ -55,7 +66,8 @@ "then": { "en": "Mamluk architecture", "fr": "Architecture mamelouke", - "nl": "Mamelukse architectuur" + "nl": "Mamelukse architectuur", + "ca": "Arquitectura mameluca" } }, { @@ -111,7 +123,8 @@ "then": { "en": "Rococo", "fr": "Rococo", - "nl": "Rococo" + "nl": "Rococo", + "cy": "Rococo" } }, { @@ -127,7 +140,8 @@ "then": { "en": "Moorish Revival", "fr": "Architecture néo-mauresque", - "nl": "Neo-Moorse architectuur" + "nl": "Neo-Moorse architectuur", + "ca": "Estil neoàrab" } }, { @@ -135,7 +149,8 @@ "then": { "en": "Neoclassical architecture", "fr": "Architecture néoclassique", - "nl": "Neoclassicistische architectuur" + "nl": "Neoclassicistische architectuur", + "ca": "Arquitectura neoclàssica" } }, { @@ -143,7 +158,8 @@ "then": { "en": "Georgian architecture", "fr": "Architecture géorgienne", - "nl": "Georgian architectuur" + "nl": "Georgian architectuur", + "ca": "Arquitectura georgiana" } }, { @@ -151,7 +167,8 @@ "then": { "en": "Victorian architecture", "fr": "Architecture victorienne", - "nl": "Victoriaanse architectuur" + "nl": "Victoriaanse architectuur", + "ca": "Arquitectura victoriana" } }, { @@ -295,7 +312,8 @@ "then": { "en": "Brutalist architecture", "fr": "Architecture brutaliste", - "nl": "Brutalistische architectuur" + "nl": "Brutalistische architectuur", + "ca": "Arquitectura brutalista" } }, { @@ -303,7 +321,8 @@ "then": { "en": "Postmodern architecture", "fr": "Architecture postmoderne", - "nl": "Postmoderne architectuur" + "nl": "Postmoderne architectuur", + "ca": "Arquitectura postmoderna" } }, { @@ -311,12 +330,16 @@ "then": { "en": "Contemporary architecture", "fr": "Architecture contemporaine", - "nl": "Hedendaagse architectuur" + "nl": "Hedendaagse architectuur", + "ca": "Arquitectura contemporània" } } ], "render": { - "en": "{building:architecture}" + "en": "{building:architecture}", + "ca": "{building:architecture}", + "cy": "{building:architecture}", + "de": "{building:architecture}" }, "multiAnswer": true, "freeform": { @@ -326,10 +349,13 @@ { "id": "construction_date", "question": { - "en": "When was this built?" + "en": "When was this built?", + "ca": "Quan va ser construït?", + "de": "Wann wurde dieses Gebäude gebaut?" }, "render": { - "en": "Built in <b>{construction_date}</b>" + "en": "Built in <b>{construction_date}</b>", + "ca": "Construït el <b>{construction_date}</b>" }, "freeform": { "key": "construction_date", diff --git a/assets/layers/cafe_pub/cafe_pub.json b/assets/layers/cafe_pub/cafe_pub.json index 6bcc4f38a..daa55af8f 100644 --- a/assets/layers/cafe_pub/cafe_pub.json +++ b/assets/layers/cafe_pub/cafe_pub.json @@ -49,7 +49,8 @@ "pa_PK": "پب", "eu": "Edaritegia", "pl": "Pub", - "cs": "Hospoda" + "cs": "Hospoda", + "cy": "Tafarn" }, "mappings": [ { @@ -69,7 +70,8 @@ "fr": "<i>{name}</i>", "eu": "<i>{name}</i>", "cs": "<i>{name}</i>", - "pl": "<i>{name}</i>" + "pl": "<i>{name}</i>", + "cy": "<i>{name}</i>" } }, { @@ -80,7 +82,8 @@ "ca": "Pub", "cs": "Bar", "es": "Bar", - "nl": "Bar" + "nl": "Bar", + "cy": "Bar" } }, { @@ -91,7 +94,8 @@ "ca": "CAfè", "cs": "Kavárna", "es": "Café", - "nl": "Café" + "nl": "Café", + "cy": "Caffi" } }, { @@ -102,7 +106,8 @@ "cs": "Noční klub", "es": "Discoteca", "nl": "Nachtclub", - "ca": "Club nocturn" + "ca": "Club nocturn", + "cy": "Clwb Nos" } } ] diff --git a/assets/layers/campsite/campsite.json b/assets/layers/campsite/campsite.json index 5d5192bcd..83d7925a1 100644 --- a/assets/layers/campsite/campsite.json +++ b/assets/layers/campsite/campsite.json @@ -23,7 +23,8 @@ "render": { "en": "{name}", "ca": "{name}", - "de": "{name}" + "de": "{name}", + "cy": "{name}" } }, "pointRendering": [ @@ -199,12 +200,17 @@ "options": [ { "question": { - "en": "Fee" + "en": "Fee", + "ca": "Taxa", + "cy": "Ffi", + "de": "Gebühr" } }, { "question": { - "en": "free of charge" + "en": "free of charge", + "ca": "Gratuït", + "de": "kostenlos" }, "osmTags": { "and": [ @@ -301,7 +307,8 @@ "question": { "en": "?", "ca": "?", - "de": "?" + "de": "?", + "cy": "?" }, "osmTags": "capacity:persons=" } @@ -312,12 +319,17 @@ "options": [ { "question": { - "en": "Toilets" + "en": "Toilets", + "ca": "Lavabos", + "cy": "Toiledau", + "de": "Toiletten" } }, { "question": { - "en": "Toilets are available." + "en": "Toilets are available.", + "ca": "Hi ha lavabos disponibles.", + "de": "Toiletten sind vorhanden." }, "osmTags": { "and": [ @@ -327,7 +339,9 @@ }, { "question": { - "en": "There are no toilets." + "en": "There are no toilets.", + "ca": "No hi ha lavabos.", + "de": "Es gibt keine Toiletten." }, "osmTags": { "and": [ diff --git a/assets/layers/charging_station/charging_station.json b/assets/layers/charging_station/charging_station.json index fcf8ffa15..fafef10da 100644 --- a/assets/layers/charging_station/charging_station.json +++ b/assets/layers/charging_station/charging_station.json @@ -546,6 +546,7 @@ "nl": "<b>Chademo</b>", "ca": "<b>CHAdeMo</b>", "cs": "<b>Chademo</b>", + "cy": "<b>Chademo</b>", "de": "<b>Chademo-Anschluss</b>", "es": "<b>Chademo</b>" }, diff --git a/assets/layers/childcare/childcare.json b/assets/layers/childcare/childcare.json index 341ce0d15..d16f81470 100644 --- a/assets/layers/childcare/childcare.json +++ b/assets/layers/childcare/childcare.json @@ -4,7 +4,8 @@ "en": "Childcare", "nl": "Kinderopvang", "de": "Kinderkrippen", - "ca": "Guarderies d'infants" + "ca": "Guarderies d'infants", + "cy": "Gofal Plant" }, "description": "Shows kindergartens and preschools. Both are grouped in one layer, as they are regularly confused with each other", "source": { diff --git a/assets/layers/cinema/cinema.json b/assets/layers/cinema/cinema.json index 9dd9eb6a1..9b0bea7f3 100644 --- a/assets/layers/cinema/cinema.json +++ b/assets/layers/cinema/cinema.json @@ -6,7 +6,8 @@ "es": "Cine", "cs": "Kino", "nl": "Bioscoop", - "ca": "Cinema" + "ca": "Cinema", + "cy": "Sinema" }, "description": { "en": "A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US.", @@ -34,7 +35,8 @@ "es": "Cine", "cs": "Kino", "nl": "Bioscoop", - "ca": "Cinema" + "ca": "Cinema", + "cy": "Sinema" } }, "pointRendering": [ diff --git a/assets/layers/climbing_area/climbing_area.json b/assets/layers/climbing_area/climbing_area.json index f9cb91e6f..26a680282 100644 --- a/assets/layers/climbing_area/climbing_area.json +++ b/assets/layers/climbing_area/climbing_area.json @@ -245,7 +245,8 @@ "it": "<strong>{name}</strong>", "eu": "<strong>{name}</strong>", "cs": "<strong>{name}</strong>", - "es": "<strong>{name}</strong>" + "es": "<strong>{name}</strong>", + "cy": "<strong>{name}</strong>" }, "question": { "en": "What is the name of this climbing opportunity?", @@ -364,7 +365,8 @@ "ca": "Calcària", "cs": "Vápenec", "pl": "Wapień", - "es": "Caliza" + "es": "Caliza", + "cy": "Leim" } } ], diff --git a/assets/layers/climbing_club/climbing_club.json b/assets/layers/climbing_club/climbing_club.json index 56a946089..0a6a21539 100644 --- a/assets/layers/climbing_club/climbing_club.json +++ b/assets/layers/climbing_club/climbing_club.json @@ -193,7 +193,8 @@ "it": "<strong>{name}</strong>", "hu": "<strong>{name}</strong>", "cs": "<strong>{name}</strong>", - "es": "<strong>{name}</strong>" + "es": "<strong>{name}</strong>", + "cy": "<strong>{name}</strong>" }, "question": { "en": "What is the name of this climbing club or NGO?", diff --git a/assets/layers/climbing_opportunity/climbing_opportunity.json b/assets/layers/climbing_opportunity/climbing_opportunity.json index 6cdc452bb..8d1c6e4c0 100644 --- a/assets/layers/climbing_opportunity/climbing_opportunity.json +++ b/assets/layers/climbing_opportunity/climbing_opportunity.json @@ -88,7 +88,8 @@ "it": "<strong>{name}</strong>", "pl": "<strong>{name}</strong>", "cs": "<strong>{name}</strong>", - "es": "<strong>{name}</strong>" + "es": "<strong>{name}</strong>", + "cy": "<strong>{name}</strong>" }, "condition": "name~*" }, @@ -118,7 +119,7 @@ "de": "Hier kann geklettert werden", "ja": "ここでは登ることができる", "nb_NO": "Klatring er mulig her", - "nl": "Klimmen is hier niet toegelaten", + "nl": "Klimmen is hier toegelaten", "fr": "Escalader est possible", "it": "È possibile arrampicarsi qua", "cs": "Lezení je zde možné", diff --git a/assets/layers/climbing_route/climbing_route.json b/assets/layers/climbing_route/climbing_route.json index d54ef1bea..bce9c8a07 100644 --- a/assets/layers/climbing_route/climbing_route.json +++ b/assets/layers/climbing_route/climbing_route.json @@ -140,7 +140,8 @@ "nb_NO": "<strong>{name}</strong>", "da": "<strong>{name}</strong>", "cs": "<strong>{name}</strong>", - "es": "<strong>{name}</strong>" + "es": "<strong>{name}</strong>", + "cy": "<strong>{name}</strong>" }, "question": { "en": "What is the name of this climbing route?", diff --git a/assets/layers/crossings/crossings.json b/assets/layers/crossings/crossings.json index 733613c45..41398f06c 100644 --- a/assets/layers/crossings/crossings.json +++ b/assets/layers/crossings/crossings.json @@ -9,7 +9,8 @@ "da": "Overgange", "es": "Cruces", "pa_PK": "کراسنگاں", - "cs": "Přechody" + "cs": "Přechody", + "cy": "Croesfannau" }, "description": { "en": "Crossings for pedestrians and cyclists", @@ -39,7 +40,8 @@ "ca": "Encreuament", "es": "Cruce", "pa_PK": "کراسنگ", - "cs": "Přechod" + "cs": "Přechod", + "cy": "Croesfan" }, "mappings": [ { diff --git a/assets/layers/cycleways_and_roads/cycleways_and_roads.json b/assets/layers/cycleways_and_roads/cycleways_and_roads.json index 503460c7e..53b59ede0 100644 --- a/assets/layers/cycleways_and_roads/cycleways_and_roads.json +++ b/assets/layers/cycleways_and_roads/cycleways_and_roads.json @@ -59,7 +59,8 @@ "pa_PK": "راہ", "ca": "Via", "cs": "Cesta", - "es": "Vía" + "es": "Vía", + "cy": "Llwybr" }, "mappings": [ { @@ -1438,7 +1439,7 @@ "de": "Welches Verkehrszeichen hat dieser Radweg?", "es": "¿Qué señal de tráfico tiene este carril bici?", "fr": "Quel panneau de signalisation cette a cette piste cyclable ?", - "ca": "Quin senyal de trànsit té aquesta via ciclista?", + "ca": "Quina senyal de trànsit té aquesta via ciclista?", "cs": "Jakou dopravní značku má tato cyklostezka?" }, "condition": { diff --git a/assets/layers/defibrillator/defibrillator.json b/assets/layers/defibrillator/defibrillator.json index e72b44991..3cd629dc2 100644 --- a/assets/layers/defibrillator/defibrillator.json +++ b/assets/layers/defibrillator/defibrillator.json @@ -11,7 +11,8 @@ "ru": "Дефибрилляторы", "sl": "Defibrilatorji", "da": "Hjertestartere", - "cs": "Defibrilátory" + "cs": "Defibrilátory", + "cy": "Diffibrilwyr" }, "description": { "en": "A layer showing defibrillators which can be used in case of emergency. This contains public defibrillators, but also defibrillators which might need staff to fetch the actual device", @@ -43,7 +44,8 @@ "ru": "Дефибриллятор", "sl": "Defibrilator", "pl": "Defibrylator", - "cs": "Defibrilátor" + "cs": "Defibrilátor", + "cy": "Diffibriliwr" } }, "pointRendering": [ @@ -595,7 +597,9 @@ "icon": "./assets/layers/barrier/barrier.svg", "then": { "en": "Not accessible 24/7, but the exact hours are unknown", - "nl": "Niet 24/7 bereikbaar, maar de exacte uren zijn niet bekend" + "nl": "Niet 24/7 bereikbaar, maar de exacte uren zijn niet bekend", + "ca": "No és accessible 24/7, però es desconeix l'horari exacte", + "de": "Nicht rund um die Uhr zugänglich, aber die genauen Öffnungszeiten sind nicht bekannt" }, "hideInAnswer": true } @@ -725,7 +729,8 @@ "osmTags": "_recently_surveyed=false", "question": { "en": "Only where survey was more than 90 days ago", - "nl": "Enkel die meer dan 90 dagen geleden ter plaatse zijn nagezien" + "nl": "Enkel die meer dan 90 dagen geleden ter plaatse zijn nagezien", + "de": "Nur wenn die Erhebung mehr als 90 Tage zurückliegt" } } ] @@ -753,7 +758,8 @@ }, "question": { "en": "Unknown access or times of accessibility", - "nl": "Onbekende toegang of onbekende tijden waarop toegankelijk" + "nl": "Onbekende toegang of onbekende tijden waarop toegankelijk", + "de": "Zugang oder Öffnungszeiten unbekannt" } } ] diff --git a/assets/layers/dentist/dentist.json b/assets/layers/dentist/dentist.json index 33d89fdc5..ae6e62fbf 100644 --- a/assets/layers/dentist/dentist.json +++ b/assets/layers/dentist/dentist.json @@ -8,7 +8,8 @@ "ca": "Dentista", "pl": "Dentysta", "cs": "Zubař", - "uk": "Стоматолог" + "uk": "Стоматолог", + "cy": "Deintydd" }, "description": { "en": "This layer shows dentist offices", @@ -62,7 +63,8 @@ "de": "{name}", "ca": "{name}", "es": "{name}", - "nl": "{name}" + "nl": "{name}", + "cy": "{name}" } } ] diff --git a/assets/layers/doctors/doctors.json b/assets/layers/doctors/doctors.json index be9d5997f..dfb88c8a3 100644 --- a/assets/layers/doctors/doctors.json +++ b/assets/layers/doctors/doctors.json @@ -9,7 +9,8 @@ "ca": "Metges", "he": "רופאים", "cs": "Lékaři", - "es": "Médicos" + "es": "Médicos", + "cy": "Meddygon" }, "description": { "en": "This layer shows doctor offices", diff --git a/assets/layers/elevator/elevator.json b/assets/layers/elevator/elevator.json index db439b770..a7a5f5747 100644 --- a/assets/layers/elevator/elevator.json +++ b/assets/layers/elevator/elevator.json @@ -9,7 +9,8 @@ "ca": "Ascensor", "pl": "Winda", "cs": "Výtah", - "es": "Ascensor" + "es": "Ascensor", + "cy": "Lifft" }, "description": { "en": "This layer show elevators and asks for operational status and elevator dimensions. Useful for wheelchair accessibility information", @@ -35,7 +36,8 @@ "pl": "Winda", "ca": "Ascensor", "cs": "Výtah", - "es": "Ascensor" + "es": "Ascensor", + "cy": "Lifft" } }, "pointRendering": [ diff --git a/assets/layers/entrance/entrance.json b/assets/layers/entrance/entrance.json index 9e6d268ff..50148fc9c 100644 --- a/assets/layers/entrance/entrance.json +++ b/assets/layers/entrance/entrance.json @@ -9,7 +9,8 @@ "fr": "Entrée", "pa_PK": "دروازہ", "cs": "Vchod", - "pl": "Wejście" + "pl": "Wejście", + "cy": "Mynedfa" }, "description": { "en": "A layer showing entrances and offering capabilities to survey some advanced data which is important for e.g. wheelchair users (but also bicycle users, people who want to deliver, …)", @@ -41,7 +42,8 @@ "fr": "Entrée", "pa_PK": "دروازہ", "pl": "Wejście", - "cs": "Vchod" + "cs": "Vchod", + "cy": "Mynedfa" } }, "pointRendering": [ diff --git a/assets/layers/extinguisher/extinguisher.json b/assets/layers/extinguisher/extinguisher.json index 83f1c2b94..23cd9767b 100644 --- a/assets/layers/extinguisher/extinguisher.json +++ b/assets/layers/extinguisher/extinguisher.json @@ -51,7 +51,8 @@ "ca": "Extintors", "es": "Extintores", "pl": "Gaśnice", - "cs": "Hasicí přístroje" + "cs": "Hasicí přístroje", + "cy": "Diffoddwyr" } }, "pointRendering": [ diff --git a/assets/layers/filters/filters.json b/assets/layers/filters/filters.json index f9f36c538..6115ef81f 100644 --- a/assets/layers/filters/filters.json +++ b/assets/layers/filters/filters.json @@ -459,7 +459,9 @@ { "question": { "en": "Open to the public", - "nl": "Publiek toegankelijk" + "nl": "Publiek toegankelijk", + "ca": "Obert al públic", + "de": "Öffentlich zugänglich" }, "osmTags": { "or": [ @@ -477,7 +479,9 @@ { "question": { "en": "Accessible to wheelchair users", - "nl": "Toegankelijk voor rolstoelgebruikers" + "nl": "Toegankelijk voor rolstoelgebruikers", + "ca": "Accessible per a usuaris de cadira de rodes", + "de": "Zugänglich für Rollstuhlfahrer" }, "osmTags": { "or": [ diff --git a/assets/layers/firepit/firepit.json b/assets/layers/firepit/firepit.json index e0ca43740..0d0a5cc4c 100644 --- a/assets/layers/firepit/firepit.json +++ b/assets/layers/firepit/firepit.json @@ -82,7 +82,8 @@ "de": "Öffentlich", "en": "Public", "es": "Público", - "ca": "Públic" + "ca": "Públic", + "cy": "Cyhoeddus" } }, { @@ -100,7 +101,8 @@ "de": "Privat", "en": "Private", "es": "Privado", - "ca": "Privat" + "ca": "Privat", + "cy": "Preifat" } }, { diff --git a/assets/layers/fitness_station/fitness_station.json b/assets/layers/fitness_station/fitness_station.json index f0e250e91..335d7e0b4 100644 --- a/assets/layers/fitness_station/fitness_station.json +++ b/assets/layers/fitness_station/fitness_station.json @@ -446,7 +446,7 @@ "de": "Die Fitness-Station hat einen Crosstrainer.", "cs": "Tato fitness stanice má crossový trenažér.", "es": "Esta estación de fitness tiene una elíptica.", - "ca": "Aquesta estació de fitness té una bicicleta el·líptica." + "ca": "Aquesta estació de fitness té un entrenament creuat." }, "icon": { "path": "./assets/layers/fitness_station/07-12-2016,_Fitness_trail,_Parque_da_Alfarrobeira,_Albufeira_2.jpg", @@ -474,7 +474,7 @@ "de": "Die Fitness-Station hat ein Rudergerät.", "cs": "Tato fitness stanice má veslař.", "es": "Esta estación de fitness tiene una máquina de remo.", - "ca": "Aquesta estació de fitness té una màquina de rem." + "ca": "Aquesta estació de fitness té un rem." }, "icon": { "path": "./assets/layers/fitness_station/Annecy_-_rower.jpg", @@ -488,7 +488,7 @@ "de": "Die Fitness-Station hat eine Slackline.", "cs": "Tato fitness stanice má slackline.", "es": "Esta estación de fitness tiene una slackline.", - "ca": "Aquesta estació de fitness té una slackline." + "ca": "Aquesta estació de fitness té una escletxa." }, "icon": { "path": "./assets/layers/fitness_station/Slacklineanlage_im_Dietenbachpark.jpg", diff --git a/assets/layers/food/food.json b/assets/layers/food/food.json index 360f03495..ff8c19a02 100644 --- a/assets/layers/food/food.json +++ b/assets/layers/food/food.json @@ -49,7 +49,8 @@ "fr": "Restaurant", "pa_PK": "بھون آلہ", "pl": "Restauracja", - "cs": "Restaurace" + "cs": "Restaurace", + "cy": "Bwyty" }, "mappings": [ { @@ -102,7 +103,8 @@ "es": "Comida rápida", "fr": "Fast-food", "cs": "Rychlé občerstvení", - "pl": "Fastfood" + "pl": "Fastfood", + "cy": "Bwyd Brys" } } ] @@ -372,7 +374,8 @@ "fr": "Pizzéria", "ca": "Pizzeria", "pl": "Pizzeria", - "cs": "Pizzerie" + "cs": "Pizzerie", + "cy": "Pizzeria" } }, { @@ -440,7 +443,8 @@ "ca": "Restaurant d'hamburgueses", "pl": "Są tu podawane burgery", "cs": "Podávají se zde burgery", - "de": "Burgerrestaurant" + "de": "Burgerrestaurant", + "cy": "Byrgers" } }, { @@ -568,7 +572,7 @@ "nl": "Dit is een mexicaans restaurant", "de": "Hier werden mexikanische Gerichte serviert", "es": "Aquí se sirven platillos mexicanos", - "ca": "Aquí es serveixen plats mexicans" + "ca": "Els plats mexicans se serveixen aquí" } }, { @@ -579,7 +583,7 @@ "nl": "Dit is een japans restaurant", "de": "Hier werden japanische Gerichte serviert", "es": "Aquí se sirven platillos japoneses", - "ca": "Aquí es serveixen plats japonesos" + "ca": "Els plats japonesos se serveixen aquí" } }, { @@ -590,7 +594,7 @@ "nl": "Dit is een kiprestaurant", "de": "Hier werden Hühnergerichte serviert", "es": "Aquí se sirven platillos a base de pollo", - "ca": "Aquí es serveixen plats a base de pollastre" + "ca": "Els plats a base de pollastre es serveixen aquí" } }, { @@ -626,7 +630,7 @@ "de": "Ein Bild aus dem Menü hinzufügen", "es": "Añadir una imagen del menú", "uk": "Додати зображення з меню", - "ca": "Afegeix una imatge del menú" + "ca": "Afegeix una imatge des del menú" } } } @@ -824,7 +828,7 @@ "en": "Does this fast-food restaurant have a drive-through?", "nl": "Heeft dit fastfoodrestaurant een drive-through?", "de": "Hat dieses Fast-Food-Restaurant eine Durchfahrtsmöglichkeit?", - "ca": "Aquest restaurant de menjar ràpid té servei al cotxe?" + "ca": "Aquest restaurant de menjar ràpid té un recorregut?" }, "mappings": [ { @@ -833,7 +837,7 @@ "en": "This fast-food restaurant has a drive-through", "nl": "Dit fastfoodrestaurant heeft een drive-through", "de": "Dieses Fast-Food-Restaurant hat einen Drive-In", - "ca": "Aquest restaurant de menjar ràpid té servei al cotxe" + "ca": "Aquest restaurant de menjar ràpid té un recorregut" } }, { @@ -842,7 +846,7 @@ "en": "This fast-food restaurant does not have a drive-through", "nl": "Dit fastfoodrestaurant heeft geen drive-through", "de": "Dieses Fast-Food-Restaurant hat keinen Drive-in", - "ca": "Aquest restaurant de menjar ràpid no té servei al cotxe" + "ca": "Aquest restaurant de menjar ràpid no té un drive-through" } } ] @@ -854,7 +858,7 @@ "en": "What are the opening hours of the drive-through?", "nl": "Wat zijn de openingsuren van de drive-through?", "de": "Wie sind die Öffnungszeiten des Drive-Ins?", - "ca": "Quin és l'horari d'obertura del servei al cotxe?" + "ca": "Quin és l'horari d'obertura de l'autovia?" }, "freeform": { "key": "opening_hours:drive_through", @@ -867,7 +871,7 @@ "en": "The opening hours of the drive-through are the same as the restaurant", "nl": "De openingsuren van de drive-through zijn dezelfde als die van het restaurant", "de": "Die Öffnungszeiten des Drive-Ins sind dieselben wie die des Restaurants", - "ca": "L'horari d'obertura del servei al cotxe és el mateix que el restaurant" + "ca": "L'horari d'obertura del passeig és el mateix que el restaurant" } } ], @@ -952,7 +956,7 @@ "nl": "Sommige gerechten kunnen op vraag vegetarisch gemaakt worden", "de": "Einige Gerichte können auf Nachfrage in eine vegetarische Version umgewandelt werden", "es": "Algunos platillos podrían adaptarse a una versión vegetariana, pero esto debe solicitarse", - "ca": "Alguns plats poden adaptar-se a una versió vegetariana, però s'ha de demanar" + "ca": "Alguns plats poden adaptar-se a una versió vegetariana, però això s'ha de demanar" } } ], @@ -1168,7 +1172,7 @@ "en": "Serves only vegetarian snacks and burgers", "de": "Nur vegetarische Snacks und Burger erhältlich", "es": "Sirve solo refrigerios y hamburguesas vegetarianas", - "ca": "Servix només snacks i hamburgueses vegetarianes" + "ca": "Servix només aperitius i hamburgueses vegetarianes" } }, { @@ -1228,7 +1232,7 @@ "en": "Serves only vegan snacks and burgers", "de": "Nur vegane Snacks und Burger erhältlich", "es": "Sirve solo refrigerios y hamburguesas veganas", - "ca": "Servix només snacks i hamburgueses veganes" + "ca": "Servix només aperitius i hamburgueses veganes" } }, { diff --git a/assets/layers/food_courts/food_courts.json b/assets/layers/food_courts/food_courts.json index 14e0ffbd5..0c569f5cb 100644 --- a/assets/layers/food_courts/food_courts.json +++ b/assets/layers/food_courts/food_courts.json @@ -5,13 +5,13 @@ "de": "Food Courts", "es": "Plazas de comida", "uk": "Фуд-корти", - "ca": "Places de restauració" + "ca": "Corts d'Aliments" }, "description": { "en": "Food courts with a variety of food options.", "de": "Food-Courts mit einer Vielzahl von Essensmöglichkeiten.", "es": "Plazas de comida con una variedad de opciones gastronómicas.", - "ca": "Places de restauració amb una gran varietat d'opcions gastronòmiques." + "ca": "Pistes d'alimentació amb una gran varietat d'opcions alimentàries." }, "source": { "osmTags": "amenity=food_court" @@ -22,7 +22,7 @@ "en": "Food Court", "de": "Food Court", "es": "Plaza de comida", - "ca": "Plaça de restauració" + "ca": "Tribunal d'Aliments" }, "mappings": [ { @@ -65,7 +65,7 @@ "en": "What is the name of this food court?", "de": "Wie lautet der Name dieses Food-Courts?", "es": "¿Cuál es el nombre de esta plaza de comida?", - "ca": "Quin és el nom d'aquesta plaça de restauració?" + "ca": "Quin és el nom d'aquest tribunal alimentari?" }, "freeform": { "key": "name", @@ -74,14 +74,14 @@ "en": "Name of the food court", "de": "Name des Food-Courts", "es": "Nombre de la plaza de comida", - "ca": "Nom de la plaça de restauració" + "ca": "Nom de la pista de menjar" } }, "render": { "en": "This food court is called <b>{name}</b>.", "de": "Dieser Food Court heißt <b>{name}</b>.", "es": "Esta plaza de comida se llama <b>{name}</b>.", - "ca": "Aquesta plaça de restauració es diu <b>{name}</b>." + "ca": "Aquest tribunal alimentari es diu <b>{name}</b>." } }, "reviews", diff --git a/assets/layers/ghost_bike/ghost_bike.json b/assets/layers/ghost_bike/ghost_bike.json index 5358eb427..8fed8c79a 100644 --- a/assets/layers/ghost_bike/ghost_bike.json +++ b/assets/layers/ghost_bike/ghost_bike.json @@ -282,7 +282,8 @@ "cs": "<i>{inscription}</i>", "pl": "<i>{inscription}</i>", "uk": "<i>{inscription}</i>", - "es": "<i>{inscription}</i>" + "es": "<i>{inscription}</i>", + "cy": "<i>{inscription}</i>" }, "freeform": { "key": "inscription" diff --git a/assets/layers/ghostsign/ghostsign.json b/assets/layers/ghostsign/ghostsign.json index 585b0fdfd..828a47100 100644 --- a/assets/layers/ghostsign/ghostsign.json +++ b/assets/layers/ghostsign/ghostsign.json @@ -4,7 +4,7 @@ "en": "Ghost Signs", "de": "Geisterzeichen", "es": "Letreros fantasma", - "ca": "Rètols fantasmes" + "ca": "Signes fantasma" }, "description": { "en": "Layer showing disused signs on buildings", @@ -98,7 +98,7 @@ "de": "Der Text auf dem Schild ist: {inscription}", "es": "El texto en el letrero es: {inscription}", "uk": "Текст на табличці: {inscription}", - "ca": "El text del rètol és: {inscription}" + "ca": "El text del signe és: {inscription}" } }, { diff --git a/assets/layers/governments/governments.json b/assets/layers/governments/governments.json index e5dbb0184..64f03dab3 100644 --- a/assets/layers/governments/governments.json +++ b/assets/layers/governments/governments.json @@ -7,7 +7,8 @@ "pa_PK": "سرکارسں", "ca": "Governs", "cs": "vlády", - "es": "Edificios gubernamentales" + "es": "Edificios gubernamentales", + "cy": "llywodraethau" }, "description": { "en": "This layer show governmental buildings. It was setup as commissioned layer for the client of OSOC '22", diff --git a/assets/layers/grave/grave.json b/assets/layers/grave/grave.json index 228bd9f32..0c72cb624 100644 --- a/assets/layers/grave/grave.json +++ b/assets/layers/grave/grave.json @@ -10,7 +10,7 @@ "en": "Tombstones (and graves) indicate where a person was buried. On this map, those can be recorded and a link to Wikipedia can be made", "de": "Grabsteine (und Gräber) zeigen an, wo eine Person begraben wurde. Auf dieser Karte können diese aufgezeichnet werden und ein Wikipedialink erstellt werden", "es": "Las lápidas (y las tumbas) indican dónde fue enterrada una persona. En este mapa, estas pueden registrarse y se puede establecer un enlace a Wikipedia", - "ca": "Les làpides (i les tombes) indiquen on va ser enterrada una persona. En aquest mapa, es poden registrar i es pot establir un enllaç a Viquipèdia" + "ca": "Les tombes (i les tombes) indiquen on va ser enterrada una persona. En aquest mapa, es poden gravar i es pot fer un enllaç a la Viquipèdia" }, "source": { "osmTags": "historic=tomb" @@ -21,7 +21,7 @@ "en": "Tombstone", "de": "Grabstein", "es": "Lápida", - "ca": "Làpida" + "ca": "Tomba" } }, "pointRendering": [ @@ -75,7 +75,8 @@ "en": "{wikipedia(buried:wikidata)}", "de": "{wikipedia(buried:wikidata)}", "es": "{wikipedia(buried:wikidata)}", - "ca": "{wikipedia(buried:wikidata)}" + "ca": "{wikipedia(buried:wikidata)}", + "cy": "{wikipedia(buried:wikidata)}" }, "freeform": { "key": "buried:wikidata", diff --git a/assets/layers/guidepost/guidepost.json b/assets/layers/guidepost/guidepost.json index efb90cd77..18b8f6c40 100644 --- a/assets/layers/guidepost/guidepost.json +++ b/assets/layers/guidepost/guidepost.json @@ -5,14 +5,14 @@ "cs": "Rozcestníky", "de": "Wegweiser", "es": "Postes indicadores", - "ca": "Pals guia" + "ca": "Punts guia" }, "description": { "en": "Guideposts (also known as fingerposts or finger posts) are often found along official hiking/cycling/riding/skiing routes to indicate the directions to different destinations", "cs": "Podél oficiálních turistických/cyklistických/jezdeckých/lyžařských tras se často nacházejí rozcestníky (také známé jako ukazatel směru nebo značky), které ukazují směry k různým cílům", "de": "Wegweiser (auch als Wegzeiger oder Fingerschilder bekannt) sind entlang offizieller Wander-, Radfahr-, Reit- oder Skirouten oft zu finden, um die Richtungen zu verschiedenen Zielen anzuzeigen", "es": "Los postes indicadores (también conocidos como señales o hitos) a menudo se encuentran a lo largo de rutas oficiales de senderismo/ciclismo/equitación/esquí para indicar las direcciones a diferentes destinos", - "ca": "Els pals guia (també coneguts com a senyals o fites) es troben sovint al llarg de rutes oficials de senderisme/ciclisme/equitació/esquí per indicar les direccions a diferents destinacions" + "ca": "Els pals guia (també coneguts com a pals de dits o pals de dits) es troben sovint al llarg de rutes oficials de senderisme/ciclisme/riding/esquí per indicar les direccions a diferents destinacions" }, "source": { "osmTags": "information=guidepost" @@ -23,7 +23,7 @@ "cs": "Rozcestník", "de": "Wegweiser", "es": "Postes indicadores", - "ca": "Pals guia" + "ca": "Punts guia" }, "pointRendering": [ { @@ -57,7 +57,7 @@ "cs": "Rozcestník (také známý jako ukazatel směru) se často nachází podél oficiálních turistických / cyklistických / jezdeckých / lyžařských tras, které ukazují směry k různým destinacím", "de": "Ein Wegweiser (auch bekannt als Fingerschild) wird oft entlang offizieller Wander-, Radfahr-, Reit- oder Skirouten gefunden, um die Richtungen zu verschiedenen Zielen anzuzeigen", "es": "Un poste indicador (también conocido como señal) a menudo se encuentra a lo largo de rutas oficiales de senderismo/ciclismo/equitación/esquí para indicar las direcciones a diferentes destinos", - "ca": "Un pal guia (també conegut com a senyal) es troba sovint al llarg de rutes oficials de senderisme/ciclisme/equitació/esquí per indicar les direccions a diferents destinacions" + "ca": "Un lloc guia (també conegut com a fingerpost) es troba sovint al llarg de rutes oficials de senderisme/ciclisme/riding/esquí per indicar les direccions a diferents destinacions" }, "exampleImages": [ "./assets/layers/guidepost/guidepost_example.jpg" @@ -73,7 +73,7 @@ "de": "Welche Arten von Routen werden auf diesem Wegweiser angezeigt?", "fr": "Quel type d'itinéraire indique ce panneau ?", "es": "¿Qué tipo de rutas se muestran en este poste indicador?", - "ca": "Quin tipus de rutes es mostren en aquest pal guia?" + "ca": "Quin tipus de rutes es mostren en aquesta guia?" }, "multiAnswer": true, "mappings": [ @@ -85,7 +85,7 @@ "de": "Dieser Wegweiser zeigt Fahrradwege", "fr": "Un itinéraire vélo", "es": "Este poste indicador muestra rutas de bicicleta", - "ca": "Aquest pal guia mostra les rutes en bicicleta" + "ca": "Aquest document guia mostra les rutes en bicicleta" } }, { @@ -96,7 +96,7 @@ "de": "Dieser Wegweiser zeigt Wanderwege", "fr": "un itinéraire de randonnée", "es": "Este poste indicador muestra rutas de senderismo", - "ca": "Aquest pal guia mostra les rutes de senderisme" + "ca": "Aquest document guia mostra les rutes de senderisme" } }, { @@ -107,7 +107,7 @@ "de": "Dieser Wegweiser zeigt Mountainbike-Routen", "fr": "un itinéraire de vtt", "es": "Este poste indicador muestra rutas de bicicleta de montaña", - "ca": "Aquest pal guia mostra les rutes en bicicleta de muntanya" + "ca": "Aquest document guia mostra les rutes en bicicleta de muntanya" } }, { @@ -118,7 +118,7 @@ "de": "Dieser Wegweiser zeigt Reitwege", "fr": "un itinéraire équestre", "es": "Este poste indicador muestra rutas a caballo", - "ca": "Aquest pal guia mostra les rutes d'equitació" + "ca": "Aquest document guia mostra les rutes d'equitació" } }, { @@ -129,7 +129,7 @@ "de": "Dieser Wegweiser zeigt Skirouten", "fr": "un itinéraire de pistes de ski", "es": "Este poste indicador muestra rutas de esquí", - "ca": "Aquest pal guia mostra les rutes d'esquí" + "ca": "Aquest document guia mostra les rutes d'esquí" } } ] diff --git a/assets/layers/hackerspace/hackerspace.json b/assets/layers/hackerspace/hackerspace.json index 163adb830..8d50ead8d 100644 --- a/assets/layers/hackerspace/hackerspace.json +++ b/assets/layers/hackerspace/hackerspace.json @@ -60,7 +60,8 @@ "ca": " {name}", "es": " {name}", "nl": " {name}", - "cs": " {name}" + "cs": " {name}", + "cy": " {name}" } } ] @@ -200,7 +201,7 @@ "de": "Dies ist ein <b>Hackerspace/Hack-Lab</b>, das sich hauptsächlich auf grundlegende Computerkenntnisse konzentriert, recycelte Geräte verwendet und/oder der Gemeinschaft Internet bereitstellt. Es befindet sich typischerweise in autonomen Räumen, besetzten Häusern oder sozialen Einrichtungen", "uk": "Це <b>хак-лабораторія</b>, яка здебільшого зосереджена на базових комп'ютерних навичках, використовує перероблені пристрої та/або надає доступ до Інтернету громаді. Зазвичай вони розташовані в автономних приміщеннях, сквотах або соціальних об'єктах", "es": "Este es un <b>hacklab</b> que se centra principalmente en habilidades informáticas básicas, utilizando dispositivos reciclados y/o proporcionando internet a la comunidad. Por lo general, se encuentra en espacios autónomos, okupas o instalaciones sociales", - "ca": "Aquest és un <b>hacklab</b> que es centra principalment en les habilitats informàtiques bàsiques, utilitzant dispositius reciclats i/o proporcionant internet a la comunitat. Normalment es troba en espais autònoms, okupes o instal·lacions socials" + "ca": "Aquest és un <b>hacklab</b> que es centra principalment en les habilitats informàtiques bàsiques, utilitzant dispositius reciclats i/o proporcionant internet a la comunitat. Normalment es troba en espais autònoms, places o instal·lacions socials" } } ] @@ -367,14 +368,14 @@ "nl": "een houtbewerkingsatelier", "de": "eine Holzwerkstatt", "es": "un taller de carpintería", - "ca": "Un taller de fusta" + "ca": "Un taller de fusteria" }, { "en": "woodworking workshop", "nl": "houtbewerkingsatelier", "de": "Holzwerkstatt", "es": "taller de carpintería", - "ca": "taller de fusta" + "ca": "Taller de treball en fusta" }, "./assets/layers/hackerspace/woodworking.svg", false @@ -393,7 +394,7 @@ "nl": "keramiekatelier", "de": "Keramikwerkstatt", "es": "taller de cerámica", - "ca": "taller de ceràmica" + "ca": "Taller de ceràmica" }, "./assets/layers/hackerspace/ceramics.svg", false @@ -405,14 +406,14 @@ "nl": "een metaalatelier", "de": "eine Metallwerkstatt", "es": "un taller de metal", - "ca": "un taller de metall" + "ca": "Un taller de metall" }, { "en": "metal workshop", "nl": "metaalatelier", "de": "Metallwerkstatt", "es": "taller de metal", - "ca": "taller de metall" + "ca": "Taller de metall" }, "./assets/layers/hackerspace/metal.svg", false @@ -424,14 +425,14 @@ "nl": "een fietsherstelplaats", "de": "eine Fahrradwerkstatt", "es": "un taller de reparación de bicicletas", - "ca": "un taller de reparació de bicicletes" + "ca": "Un taller de reparació de bicicletes" }, { "en": "bicycle repair workshop", "nl": "fietsherstelplaats", "de": "Fahrradwerkstatt", "es": "taller de reparación de bicicletas", - "ca": "taller de reparació de bicicletes" + "ca": "Taller de reparació de bicicletes" }, "./assets/layers/hackerspace/bicycle.svg", false diff --git a/assets/layers/hospital/hospital.json b/assets/layers/hospital/hospital.json index d06f26ef7..209c25414 100644 --- a/assets/layers/hospital/hospital.json +++ b/assets/layers/hospital/hospital.json @@ -9,7 +9,8 @@ "ru": "Больницы", "cs": "Nemocnice", "es": "Hospitales", - "uk": "Лікарні" + "uk": "Лікарні", + "cy": "Ysbytai" }, "description": { "en": "A layer showing hospital grounds", @@ -38,7 +39,8 @@ "ca": "Hospital", "cs": "Nemocnice", "pl": "Szpital", - "es": "Hospital" + "es": "Hospital", + "cy": "Ysbyty" }, "mappings": [ { diff --git a/assets/layers/ice_cream/ice_cream.json b/assets/layers/ice_cream/ice_cream.json index cd10df6c8..2a7f75042 100644 --- a/assets/layers/ice_cream/ice_cream.json +++ b/assets/layers/ice_cream/ice_cream.json @@ -6,14 +6,14 @@ "nl": "IJssalon", "es": "Heladerías", "uk": "Кафе-морозиво", - "ca": "Gelateries" + "ca": "Sales de gelat" }, "description": { "en": "A place where ice cream is sold over the counter", "de": "Ein Ort, an dem Eiscreme an der Theke verkauft wird", "nl": "Een plaats waar voornamelijk ijsjes verkocht worden, bedoeld voor onmiddelijke consumptie", "es": "Un lugar donde se vende helado en el mostrador", - "ca": "Un lloc on es ven gelat al taulell" + "ca": "Un lloc on es ven gelat sobre el taulell" }, "source": { "osmTags": "amenity=ice_cream" @@ -25,7 +25,7 @@ "de": "Eisdiele", "nl": "IJssalon", "es": "Heladería", - "ca": "Gelateria" + "ca": "Crema de gel" }, "mappings": [ { @@ -36,7 +36,8 @@ "pl": "{name}", "nl": "{name}", "es": "{name}", - "ca": "{name}" + "ca": "{name}", + "cy": "{name}" } } ] @@ -89,7 +90,7 @@ "nl": "Een plaats waar men voornamelijk ijsjes koopt, meestal met de hand geschept en bedoeld om onmiddellijk op te eten.", "es": "Una tienda donde solo se puede comprar helado y artículos relacionados. El helado normalmente se sirve con cuchara.", "uk": "Магазин, де можна купити лише морозиво та супутні товари. Зазвичай морозиво набирають вручну.", - "ca": "Una botiga on només es poden comprar gelats i articles relacionats. El gelat normalment és serveix amb cullera." + "ca": "Una botiga on només es poden comprar gelats i articles relacionats. El gelat normalment és cobert a mà." } } ], diff --git a/assets/layers/icons/icons.json b/assets/layers/icons/icons.json index 504e4afac..99bde48a5 100644 --- a/assets/layers/icons/icons.json +++ b/assets/layers/icons/icons.json @@ -145,7 +145,8 @@ "cs": "telefon", "es": "teléfono", "uk": "телефон", - "ca": "telèfon" + "ca": "telèfon", + "cy": "ffôn" } } }, @@ -166,7 +167,8 @@ "cs": "telefon", "es": "teléfono", "uk": "телефон", - "ca": "telèfon" + "ca": "telèfon", + "cy": "ffôn" } } } diff --git a/assets/layers/indoors/indoors.json b/assets/layers/indoors/indoors.json index 3a0fc2ea6..e2a2c113c 100644 --- a/assets/layers/indoors/indoors.json +++ b/assets/layers/indoors/indoors.json @@ -7,7 +7,8 @@ "pa_PK": "اندروں", "ca": "Interiors", "cs": "Vnitřní prostory", - "es": "Interiores" + "es": "Interiores", + "cy": "Dan do" }, "description": { "en": "Basic indoor mapping: shows room outlines", @@ -496,7 +497,7 @@ "de": "Dies ist ein Kinderzimmer", "cs": "Jedná se o školku", "es": "Esta es una guardería", - "ca": "Aquest és un jardí d'infants" + "ca": "Aquest és un viver" }, "icon": "./assets/layers/indoors/room_nursery.svg" }, @@ -630,7 +631,7 @@ "cs": "Kolik lidí se maximálně vejde do této místnosti?", "pl": "Ile osób może pomieścić to pomieszczenie?", "es": "¿Cuántas personas pueden caber como máximo en esta habitación?", - "ca": "Quanta gent pot, com a màxim, cabre en aquesta habitació?" + "ca": "Quanta gent pot, com a màxim, encaixar en aquesta habitació?" }, "condition": { "or": [ @@ -651,7 +652,7 @@ "cs": "Do této místnosti se vejde maximálně {capacity} osob", "pl": "To pomieszczenie może pomieścić maksymalnie {capacity} osób", "es": "En esta habitación caben como máximo {capacity} personas", - "ca": "Com a màxim {capacity} persones caben en aquesta sala" + "ca": "Com a màxim {capacity} persones encaixen en aquesta sala" }, "freeform": { "key": "capacity", diff --git a/assets/layers/insect_hotel/insect_hotel.json b/assets/layers/insect_hotel/insect_hotel.json index 1bdaf327b..2bbe4da42 100644 --- a/assets/layers/insect_hotel/insect_hotel.json +++ b/assets/layers/insect_hotel/insect_hotel.json @@ -20,7 +20,7 @@ "en": "Insect Hotel", "nl": "Insectenhotel", "de": "Insektenhotel", - "ca": "Hotel d'Insectes" + "ca": "Hotel Insect" }, "pointRendering": [ { diff --git a/assets/layers/item_with_image/item_with_image.json b/assets/layers/item_with_image/item_with_image.json index 3d61a3901..c0750d341 100644 --- a/assets/layers/item_with_image/item_with_image.json +++ b/assets/layers/item_with_image/item_with_image.json @@ -44,7 +44,7 @@ "en": "POI with image", "de": "POI mit Bild", "es": "PDI con imagen", - "ca": "PDI amb imatge" + "ca": "POI amb imatge" }, "mappings": [ { diff --git a/assets/layers/kerbs/kerbs.json b/assets/layers/kerbs/kerbs.json index 09a1ac7aa..258cc1f2a 100644 --- a/assets/layers/kerbs/kerbs.json +++ b/assets/layers/kerbs/kerbs.json @@ -103,7 +103,7 @@ "fr": "Bordure dans un trottoir", "cs": "Obrubník na chodníku", "es": "Bordillo en una acera", - "ca": "Vorada en una vorera" + "ca": "Kerb en una pista" }, "snapToLayer": [ "cycleways_and_roads", @@ -262,7 +262,9 @@ "if": "tactile_paving=contrasted", "then": { "en": "This kerb has tactile paving, which has a contrasting colour to the surrounding pavement.", - "nl": "Deze stoeprand heeft voelbare bestrating, die een contrasterende kleur heeft ten opzichte van de omliggende bestrating." + "nl": "Deze stoeprand heeft voelbare bestrating, die een contrasterende kleur heeft ten opzichte van de omliggende bestrating.", + "ca": "Aquest voral té paviment podotàctil, que té un color contrastant amb el paviment circumdant.", + "de": "Diese Bordsteinkante ist mit taktilem Pflaster versehen, das sich farblich vom umgebenden Pflaster abhebt." }, "hideInAnswer": true }, @@ -288,35 +290,41 @@ "id": "tactile-paving-colour", "question": { "en": "What is the colour of the tactile paving?", - "nl": "Wat is de kleur van de voelbare bestrating?" + "nl": "Wat is de kleur van de voelbare bestrating?", + "ca": "Quin és el color del paviment podotàctil?", + "de": "Welche Farbe hat das taktile Pflaster?" }, "mappings": [ { "if": "tactile_paving:colour=yellow", "then": { "en": "The tactile paving is yellow.", - "nl": "De voelbare bestrating is geel." + "nl": "De voelbare bestrating is geel.", + "ca": "El paviment podotàctil és groc." } }, { "if": "tactile_paving:colour=red", "then": { "en": "The tactile paving is red.", - "nl": "De voelbare bestrating is rood." + "nl": "De voelbare bestrating is rood.", + "ca": "El paviment podotàctil és vermell." } }, { "if": "tactile_paving:colour=white", "then": { "en": "The tactile paving is white.", - "nl": "De voelbare bestrating is wit." + "nl": "De voelbare bestrating is wit.", + "ca": "El paviment podotàctil és blanc." } }, { "if": "tactile_paving:colour=grey", "then": { "en": "The tactile paving is grey.", - "nl": "De voelbare bestrating is grijs." + "nl": "De voelbare bestrating is grijs.", + "ca": "El paviment podotàctil és gris." } } ], @@ -325,12 +333,16 @@ "type": "color", "placeholder": { "en": "Colour of the tactile paving", - "nl": "Kleur van de voelbare bestrating" + "nl": "Kleur van de voelbare bestrating", + "ca": "Color del paviment podotàctil", + "de": "Farbe des taktilen Pflasters" } }, "render": { "en": "The tactile paving is coloured {tactile_paving:colour}.", - "nl": "De voelbare bestrating is {tactile_paving:colour} gekleurd." + "nl": "De voelbare bestrating is {tactile_paving:colour} gekleurd.", + "ca": "El paviment podotàctil és de color {tactile_paving:colour}.", + "de": "Die taktilen Pflastersteine sind in der Farbe {tactile_paving:colour} gehalten." }, "condition": { "and": [ @@ -500,6 +512,6 @@ "en": "a kerb", "de": "ein Bordstein", "es": "un bordillo", - "ca": "una vorada" + "ca": "un kerb" } } \ No newline at end of file diff --git a/assets/layers/lighthouse/lighthouse.json b/assets/layers/lighthouse/lighthouse.json index 6f03e0d2b..7c8249dc7 100644 --- a/assets/layers/lighthouse/lighthouse.json +++ b/assets/layers/lighthouse/lighthouse.json @@ -4,7 +4,8 @@ "en": "lighthouse", "de": "Leuchtturm", "es": "faro", - "ca": "far" + "ca": "far", + "cy": "goleudy" }, "source": { "osmTags": "man_made=lighthouse" @@ -15,7 +16,8 @@ "en": "lighthouse", "de": "Leuchtturm", "es": "faro", - "ca": "far" + "ca": "far", + "cy": "goleudy" }, "mappings": [ { @@ -24,7 +26,8 @@ "en": "{name}", "de": "{name}", "es": "{name}", - "ca": "{name}" + "ca": "{name}", + "cy": "{name}" } } ] diff --git a/assets/layers/love_hotel/love_hotel.json b/assets/layers/love_hotel/love_hotel.json index 418db0444..5f0178311 100644 --- a/assets/layers/love_hotel/love_hotel.json +++ b/assets/layers/love_hotel/love_hotel.json @@ -4,7 +4,7 @@ "en": "Love hotels", "de": "Love Hotels", "es": "Hoteles del amor", - "ca": "Hotels de l'amor" + "ca": "Hotels Love" }, "description": { "en": "A love hotel is a type of short-stay hotel found around the world operated primarily for the purpose of allowing guests privacy for sexual activities", @@ -61,7 +61,7 @@ "en": "a love hotel", "de": "ein Love Hotel", "es": "un hotel del amor", - "ca": "un hotel d'amor" + "ca": "Un hotel d'amor" }, "description": { "en": "A love hotel is a type of short-stay hotel found around the world operated primarily for the purpose of allowing guests privacy for sexual activities.", diff --git a/assets/layers/map/map.json b/assets/layers/map/map.json index 2b6af30b5..f644a1cbd 100644 --- a/assets/layers/map/map.json +++ b/assets/layers/map/map.json @@ -11,7 +11,8 @@ "es": "Mapas", "pa_PK": "نقشے", "pl": "Mapy", - "cs": "Mapy" + "cs": "Mapy", + "cy": "Mapiau" }, "description": { "en": "A map, meant for tourists which is permanently installed in the public space", @@ -45,7 +46,8 @@ "es": "Mapa", "pa_PK": "نقشہ", "pl": "Mapa", - "cs": "Mapa" + "cs": "Mapa", + "cy": "Map" } }, "pointRendering": [ diff --git a/assets/layers/maproulette/maproulette.json b/assets/layers/maproulette/maproulette.json index 02dd30f34..d464e772d 100644 --- a/assets/layers/maproulette/maproulette.json +++ b/assets/layers/maproulette/maproulette.json @@ -34,7 +34,7 @@ "pl": "Obiekt MapRoulette: {parentName}", "cs": "Položka MapRoulette: {parentName}", "es": "Elemento de MapRoulette: {parentName}", - "ca": "Element de MapRoulette: {parentName}" + "ca": "Element MapRoulette: {parentName}" } }, "titleIcons": [ diff --git a/assets/layers/memorial/memorial.json b/assets/layers/memorial/memorial.json index e291df503..9faa0fde8 100644 --- a/assets/layers/memorial/memorial.json +++ b/assets/layers/memorial/memorial.json @@ -84,14 +84,14 @@ "fr": "un mémorial", "nl": "een gedenkteken", "es": "un monumento", - "ca": "un memorial" + "ca": "un monument" }, "description": { "en": "A memorial is a physical object which remembers a person or event.", "de": "Ein Mahnmal ist ein physischer Gegenstand, der an eine Person oder ein Ereignis erinnert.", "fr": "Un mémorial est un élément physique disposé en mémoire d'une personne ou d'un évènement.", "es": "Un monumento es un objeto físico que recuerda a una persona o un evento.", - "ca": "Un memorial és un objecte físic que recorda una persona o esdeveniment." + "ca": "Un monument és un objecte físic que recorda una persona o esdeveniment." }, "tags": [ "historic=memorial" @@ -123,7 +123,7 @@ "nl": "Dit is een standbeeld", "sl": "To je kip", "es": "Es una estatua", - "ca": "És una estàtua" + "ca": "Aquesta és una estàtua" }, "addExtraTags": [ "tourism=artwork", @@ -139,7 +139,7 @@ "sl": "To je plošča", "uk": "Це меморіальна дошка", "es": "Es una placa", - "ca": "És una placa" + "ca": "Aquesta és una placa" } }, { @@ -150,7 +150,7 @@ "fr": "C'est un banc commémoratif", "nl": "Dit is een zitbank die ook als herdenking dienst doet", "es": "Es un banco conmemorativo", - "ca": "És un banc commemoratiu" + "ca": "Aquest és un banc commemoratiu" }, "addExtraTags": [ "amenity=bench" @@ -164,7 +164,7 @@ "fr": "C'est un vélo fantôme - un vélo blanc peint en mémoire d'un cycliste mort à cet endroit suite à un accident avec une voiture", "nl": "Dit is een witte fiets of spookfiets - een witgeschilderede fiets die een omgekomen fietsen herdenkt", "es": "Es una bicicleta fantasma - una bicicleta pintada de blanco para recordar a un ciclista que falleció debido a un accidente de coche", - "ca": "Aquesta és una bicicleta fantasma: una bicicleta pintada de blanc per recordar un ciclista que va morir a causa d'un accident de cotxe" + "ca": "Aquesta és una bicicleta fantasma - una bicicleta pintada de blanc per recordar un ciclista que va morir a causa d'un accident de cotxe" } }, { @@ -175,7 +175,7 @@ "fr": "C'est un stolperstein (pierre d'achoppement)", "nl": "Dit is een struikelsteen (stolperstein)", "es": "Es un stolperstein (piedra de tropiezo)", - "ca": "Es tracta d'un stolperstein (pedra de memòria)" + "ca": "Es tracta d'un stolperstein (pedra d'afaitar)" } }, { @@ -196,7 +196,7 @@ "fr": "C'est une pierre commémorative", "sl": "To je spominski kamen", "es": "Es una piedra conmemorativa", - "ca": "És una pedra commemorativa" + "ca": "Aquesta és una pedra commemorativa" } }, { @@ -207,7 +207,7 @@ "fr": "C'est un buste", "sl": "To je doprsni kip", "es": "Es un busto", - "ca": "És un bust" + "ca": "Això és un bust" } }, { @@ -219,7 +219,7 @@ "nl": "Dit is een sculptuur", "sl": "To je skulptura", "es": "Es una escultura", - "ca": "És una escultura" + "ca": "Aquesta és una escultura" } }, { @@ -230,7 +230,7 @@ "es": "Es un obelisco", "fr": "C'est un obélisque", "sl": "To je obelisk", - "ca": "És un obelisc" + "ca": "Aquest és un obelisc" } }, { @@ -243,7 +243,7 @@ "nl": "Dit is een kruis", "pl": "To jest krzyż", "sl": "To je križ", - "ca": "És una creu" + "ca": "Això és una creu" } }, { @@ -253,7 +253,7 @@ "de": "Dies ist eine blaue Plaque", "fr": "C'est une plaque bleue (spécifique aux pays anglo-saxons)", "es": "Es una placa azul", - "ca": "És una placa blava" + "ca": "Aquesta és una placa blava" }, "onlyShowIf": "_country=gb" }, @@ -266,7 +266,7 @@ "nl": "Dit is een historische tank, permanent in de publieke ruimte geplaatst als gedenkteken", "sl": "To je zgodovinski tank, ki je stalno postavljen v spomin na javnem kraju", "es": "Es un tanque histórico, colocado permanentemente en el espacio público como monumento", - "ca": "Es tracta d'un tanc històric, situat permanentment a l'espai públic com a memorial" + "ca": "Es tracta d'un tanc històric, situat permanentment a l'espai públic com a monument" } }, { @@ -291,7 +291,7 @@ "sl": "To je nagrobni kamen; oseba je pokopana tu", "fr": "C'est une pierre tombale, une personne est enterrée ici", "es": "Es una lápida; la persona está enterrada aquí", - "ca": "És una làpida; la persona està enterrada aquí" + "ca": "Aquesta és una làpida; la persona està enterrada aquí" }, "addExtraTags": [ "memorial=" @@ -358,7 +358,7 @@ "sl": "Ta spomenik nima napisa", "uk": "Цей пам'ятник не має напису", "es": "Este monumento no tiene inscripción", - "ca": "Aquest memorial no té inscripció" + "ca": "Aquest monument no té inscripció" }, "addExtraTags": [ "inscription=" @@ -384,7 +384,7 @@ "de": "Hier geht es um das Denkmal selbst, nicht um die Person oder das Ereignis, an das die Denkmal erinnert. Wenn diese Gedenkstätte keine Wikipedia-Seite oder Wikidata-Entität hat, überspringe diese Frage.", "fr": "C'est la page Wikipédia du mémorial et non celle de la personne ou de l'évènement commémoré. Si le mémorial n'a pas de page Wikipédia ou d'entité Wikidata, passez cette question.", "es": "Se trata del propio monumento, no de la persona o el evento que recuerda el monumento. Si este monumento no tiene una página de Wikipedia o una entidad Wikidata, omite esta pregunta.", - "ca": "Es tracta sobre el memorial en si, no de la persona o esdeveniment que el memorial recorda. Si aquest memorial no té una pàgina de Viquipèdia o una entitat de Wikidata, ometeu aquesta pregunta." + "ca": "Es tracta d'un memorial en si, no de la persona o esdeveniment que el memorial recorda. Si aquest memorial no té una pàgina de Viquipèdia o una entitat de Wikidata, ometeu aquesta pregunta." }, "render": { "special": { @@ -443,7 +443,7 @@ "de": "Wann wurde dieses Denkmal installiert?", "fr": "Quand ce mémorial a-t-il été installé ?", "es": "¿Cuándo se instaló este monumento?", - "ca": "Quan es va instal·lar aquest memorial?" + "ca": "Quan es va instal·lar aquest monument?" }, "render": { "nl": "Geplaatst op {start_date}", diff --git a/assets/layers/mountain_rescue/mountain_rescue.json b/assets/layers/mountain_rescue/mountain_rescue.json index f120d886f..918c7c0f3 100644 --- a/assets/layers/mountain_rescue/mountain_rescue.json +++ b/assets/layers/mountain_rescue/mountain_rescue.json @@ -13,7 +13,7 @@ "de": "Ein Gebäude, in dem die Ersthelfer Material lagern und möglicherweise Wache halten", "fr": "Un bâtiment où les organismes de secours stockent du matériel ou assurent la garde", "es": "Un edificio donde los socorristas guardan material y pueden estar de guardia", - "ca": "Un edifici on els socorristes emmagatzemen material i poden estar de guardia" + "ca": "Un edifici on els primers auxilis emmagatzemen material i podria estar en vigilància" }, "source": { "osmTags": "emergency=mountain_rescue" diff --git a/assets/layers/note/note.json b/assets/layers/note/note.json index c5326f165..42dc59b3b 100644 --- a/assets/layers/note/note.json +++ b/assets/layers/note/note.json @@ -39,7 +39,8 @@ "pa_PK": "نوٹ", "pl": "Notatka", "cs": "Poznámka", - "fr": "Note" + "fr": "Note", + "cy": "Nodyn" }, "mappings": [ { @@ -313,7 +314,7 @@ "en": "Should <b>not</b> mention {search} in <b>any</b> comment", "de": "Sollte {search} in <b>keinem</b> Kommentar erwähnen", "es": "No debe mencionar {search} en ningún comentario", - "ca": "<b>no</b> ha de mencionar {search} a <b>cap</b> comentari" + "ca": "Si <b>no</b> menciona {search} a <b>qualsevol comentari</b>" } } ] diff --git a/assets/layers/observation_tower/observation_tower.json b/assets/layers/observation_tower/observation_tower.json index bcc3049e6..027ae57d3 100644 --- a/assets/layers/observation_tower/observation_tower.json +++ b/assets/layers/observation_tower/observation_tower.json @@ -49,7 +49,8 @@ "ca": "<b>{name}</b>", "es": "<b>{name}</b>", "pl": "<b>{name}</b>", - "cs": "<b>{name}</b>" + "cs": "<b>{name}</b>", + "cy": "<b>{name}</b>" } } ] @@ -216,7 +217,7 @@ "pl": "Darmowe wejście", "cs": "Zdarma k návštěvě", "es": "Entrada gratuita", - "ca": "Entrada gratuita" + "ca": "Gratuït per visitar" } } ], diff --git a/assets/layers/osm_community_index/osm_community_index.json b/assets/layers/osm_community_index/osm_community_index.json index df2bf5a5b..6d977757d 100644 --- a/assets/layers/osm_community_index/osm_community_index.json +++ b/assets/layers/osm_community_index/osm_community_index.json @@ -88,7 +88,8 @@ "fr": "Pays", "pl": "Kraj", "cs": "Země", - "es": "País" + "es": "País", + "cy": "Gwlad" }, "osmTags": "level=country" } @@ -121,7 +122,8 @@ "fr": "Région", "pl": "Region", "cs": "Region", - "es": "Región" + "es": "Región", + "cy": "Rhanbarth" }, "osmTags": "level=region" } @@ -153,7 +155,8 @@ "fr": "Territoire", "pl": "Terytorium", "cs": "Území", - "es": "Territorio" + "es": "Territorio", + "cy": "Tiriogaeth" }, "osmTags": "level=territory" } @@ -171,7 +174,8 @@ "fr": "Monde", "pl": "Świat", "cs": "Svět", - "es": "Mundo" + "es": "Mundo", + "cy": "Byd" }, "osmTags": "level=world" } diff --git a/assets/layers/outdoor_seating/outdoor_seating.json b/assets/layers/outdoor_seating/outdoor_seating.json index 3514764d8..1123f0511 100644 --- a/assets/layers/outdoor_seating/outdoor_seating.json +++ b/assets/layers/outdoor_seating/outdoor_seating.json @@ -5,7 +5,7 @@ "de": "Außenbestuhlung", "es": "Asientos al aire libre", "uk": "Сидіння на відкритому повітрі", - "ca": "Zona d'estar exterior" + "ca": "Sembra exterior" }, "description": { "en": "Outdoor seating areas, usually located near cafes and restaurants.", @@ -22,7 +22,7 @@ "en": "Outdoor Seating area", "de": "Sitzbereich im Freien", "es": "Área de asientos al aire libre", - "ca": "Zona d'estar exterior" + "ca": "Zona exterior" }, "mappings": [ { diff --git a/assets/layers/parcel_lockers/parcel_lockers.json b/assets/layers/parcel_lockers/parcel_lockers.json index 14137ea2d..c82c8cfc1 100644 --- a/assets/layers/parcel_lockers/parcel_lockers.json +++ b/assets/layers/parcel_lockers/parcel_lockers.json @@ -132,7 +132,8 @@ "fr": "Marque", "pl": "Marka", "cs": "Značka", - "es": "Marca" + "es": "Marca", + "cy": "Masnach" } }, "render": { @@ -168,7 +169,8 @@ "fr": "Exploitant", "pl": "Operator", "cs": "Operátor", - "es": "Operador" + "es": "Operador", + "cy": "Gweithredwr" } }, "render": { @@ -205,7 +207,8 @@ "ca": "Referència", "fr": "Référence", "cs": "Reference", - "es": "Referencia" + "es": "Referencia", + "cy": "Cyfeirnod" } }, "render": { diff --git a/assets/layers/parking/parking.json b/assets/layers/parking/parking.json index 1a238d15d..93ae7ee74 100644 --- a/assets/layers/parking/parking.json +++ b/assets/layers/parking/parking.json @@ -9,7 +9,8 @@ "fr": "Lieu de stationnement", "pa_PK": "پارکنگ", "pl": "Parking", - "cs": "Parkoviště" + "cs": "Parkoviště", + "cy": "Parcio" }, "description": { "en": "A layer showing car parkings", @@ -183,7 +184,7 @@ "cs": "Jedná se o parkoviště kryté přístřešky pro auta", "es": "Este aparcamiento está cubierto por cocheras", "uk": "Це парковка, закрита навісами для автомобілів", - "ca": "Es tracta d'aparcament cobert per garatges" + "ca": "Es tracta d'aparcament cobert per ports" } }, { diff --git a/assets/layers/parking_spaces/parking_spaces.json b/assets/layers/parking_spaces/parking_spaces.json index 0dded5e4b..8b954ab88 100644 --- a/assets/layers/parking_spaces/parking_spaces.json +++ b/assets/layers/parking_spaces/parking_spaces.json @@ -271,7 +271,7 @@ "nl": "Deze parkeerplek is gereserveerd voor autodelen.", "cs": "Jedná se o parkovací místo vyhrazené pro sdílení automobilů.", "es": "Esta es una plaza de aparcamiento reservada para coches compartidos.", - "ca": "Es tracta d'una plaça d'aparcament reservada per a cotxes compartits." + "ca": "Es tracta d'una plaça d'aparcament reservada per a compartir cotxe." } } ] diff --git a/assets/layers/pharmacy/pharmacy.json b/assets/layers/pharmacy/pharmacy.json index a36d84f73..580bdead2 100644 --- a/assets/layers/pharmacy/pharmacy.json +++ b/assets/layers/pharmacy/pharmacy.json @@ -9,7 +9,8 @@ "fr": "Pharmacies", "cs": "Lékárny", "es": "Farmacias", - "uk": "Аптеки" + "uk": "Аптеки", + "cy": "Fferyllfeydd" }, "description": { "en": "A layer showing pharmacies, which (probably) dispense prescription drugs", @@ -37,7 +38,8 @@ "ca": "{name}", "cs": "{name}", "pl": "{name}", - "es": "{name}" + "es": "{name}", + "cy": "{name}" }, "mappings": [ { @@ -51,7 +53,8 @@ "ca": "Farmàcia", "cs": "Lékárna", "pl": "Apteka", - "es": "Farmacia" + "es": "Farmacia", + "cy": "Fferyllfa" } } ] diff --git a/assets/layers/police/police.json b/assets/layers/police/police.json index 6c778cc44..0d7f0ecfa 100644 --- a/assets/layers/police/police.json +++ b/assets/layers/police/police.json @@ -26,7 +26,8 @@ "en": "{name}", "de": "{name}", "es": "{name}", - "ca": "{name}" + "ca": "{name}", + "cy": "{name}" } }, "pointRendering": [ @@ -115,7 +116,7 @@ "en": "An administrative police office without services for the general public.", "de": "Ein Verwaltungsbüro der Polizei ohne Dienstleistungen für die Allgemeinheit.", "es": "Una oficina administrativa de policía sin servicios para el público en general.", - "ca": "Una oficina administrativa de policia sense serveis per al públic en general." + "ca": "Una oficina administrativa de la policia sense serveis per al públic en general." } }, { @@ -158,7 +159,8 @@ "en": "<b>{name}</b>", "de": "<b>{name}</b>", "es": "<b>{name}</b>", - "ca": "<b>{name}</b>" + "ca": "<b>{name}</b>", + "cy": "<b>{name}</b>" }, "freeform": { "key": "name" @@ -172,7 +174,7 @@ "en": "Does this police office have detention facilities?", "de": "Verfügt die Polizeidienststelle über Gewahrsamsräume?", "es": "¿Tiene esta oficina de policía instalaciones de detención?", - "ca": "Té aquesta oficina policial instal·lacions de detenció?" + "ca": "Aquesta comisaria té instal·lacions de detenció?" }, "filter": true, "id": "4_z2nrdhy6tyyh4fd", @@ -185,7 +187,7 @@ "en": "This police office has some cells to detain people", "de": "Die Polizeidienststelle hat Zellen für die Inhaftierung von Personen", "es": "Esta oficina de policía tiene algunas celdas para detener personas", - "ca": "Aquesta oficina de policia té algunes cel·les per detenir persones" + "ca": "Aquesta comisaria té algunes cel·les per detenir persones" } }, { @@ -194,7 +196,7 @@ "en": "This police office does not have cells to detain people", "de": "Die Polizeidienststelle hat keine Zellen für die Inhaftierung von Personen", "es": "Esta oficina de policía no tiene celdas para detener personas", - "ca": "Aquesta oficina de policia no té cel·les per detenir persones" + "ca": "Aquesta comisaria no té cel·les per detenir persones" } } ] diff --git a/assets/layers/postboxes/postboxes.json b/assets/layers/postboxes/postboxes.json index 8b92fbd87..b365f4b44 100644 --- a/assets/layers/postboxes/postboxes.json +++ b/assets/layers/postboxes/postboxes.json @@ -12,7 +12,8 @@ "es": "Buzones", "nb_NO": "Postbokser", "fr": "Boîtes à lettres", - "cs": "Poštovní schránky" + "cs": "Poštovní schránky", + "cy": "Blychau Post" }, "description": { "en": "The layer showing postboxes.", @@ -45,7 +46,8 @@ "nb_NO": "Postboks", "fr": "Boîte à lettres", "nl": "Brievenbus", - "cs": "Poštovní schránka" + "cs": "Poštovní schránka", + "cy": "Blwch Post" } }, "pointRendering": [ diff --git a/assets/layers/questions/questions.json b/assets/layers/questions/questions.json index 33c4151da..da220c453 100644 --- a/assets/layers/questions/questions.json +++ b/assets/layers/questions/questions.json @@ -2548,7 +2548,7 @@ "de": "Wann wurde dieses Objekt zuletzt geprüft?", "cs": "Kdy byl tento objekt naposledy zkoumán?", "es": "¿Cuándo fue inspeccionado este objeto por última vez?", - "ca": "Quan es va enquestar per última vegada aquest objecte?" + "ca": "Quan es va inspeccionar per última vegada aquest objecte?" }, "freeform": { "key": "survey:date", @@ -2559,7 +2559,7 @@ "de": "Dieses Objekt wurde zuletzt geprüft am <b>{survey:date}</b>", "cs": "Tento objekt byl naposledy zkoumán dne <b>{survey:date}</b>", "es": "Este objeto fue inspeccionado por última vez el <b>{survey:date}</b>", - "ca": "Aquest objecte va ser enquestat per darrera vegada el <b>{survey:date}</b>" + "ca": "Aquest objecte va ser inspeccionat per darrera vegada el <b>{survey:date}</b>" }, "mappings": [ { @@ -2569,7 +2569,7 @@ "de": "Dieses Objekt wurde heute zuletzt geprüft", "cs": "Tento objekt byl naposledy zkoumán dnes", "es": "Este objeto fue inspeccionado por última vez hoy", - "ca": "Aquest objecte s'ha enquestat per darrera vegada avui" + "ca": "Aquest objecte s'ha inspeccionat per darrera vegada avui" } } ] @@ -2623,7 +2623,7 @@ "de": "Verkauft das Geschäft zuckerfreie Produkte?", "cs": "Nabízí tento obchod nabídku bez cukru?", "es": "¿Tiene esta tienda una oferta de productos sin azúcar?", - "ca": "Aquesta botiga té una oferta lliure de sucre?" + "ca": "Aquesta botiga té una oferta de productes sense sucre?" }, "questionHint": { "en": "This is important for people following a sugar-free diet, such as people with Diabetes", @@ -2651,7 +2651,7 @@ "de": "Das Geschäft verkauft <b>viele<b> zuckerfreie Produkte", "cs": "Tento obchod má velkou nabídku bez cukru", "es": "Esta tienda tiene una gran oferta de productos sin azúcar", - "ca": "Aquesta botiga té una gran oferta lliure de sucre" + "ca": "Aquesta botiga té una gran oferta sense sucre" } }, { @@ -2661,7 +2661,7 @@ "de": "Das Geschäft verkauft <b>wenige</b> zuckerfreie Produkte", "cs": "Tento obchod má <b>omezenou nabídku bez cukru</b>", "es": "Esta tienda tiene una oferta <b>limitada de productos sin azúcar</b>", - "ca": "Aquesta botiga té una oferta de <b>limitada sense sucre</b>" + "ca": "Aquesta botiga té una oferta <b>limitada de productes sense sucre</b>" } }, { @@ -2671,7 +2671,7 @@ "de": "Das Geschäft verkauft <b>keine<b> zuckerfreie Produkte", "cs": "Tento obchod nemá žádnou nabídku bez cukru", "es": "Esta tienda no tiene oferta de productos sin azúcar", - "ca": "Aquesta botiga no té oferta de sucre" + "ca": "Aquesta botiga no té oferta de productes sense sucre" } } ], @@ -2846,7 +2846,7 @@ "en": "This shop has a <b>limited vegan</b> offering", "de": "Dieser Laden hat ein <b>begrenztes veganes</b> Angebot", "es": "Esta tienda tiene una oferta <b>vegana limitada</b>", - "ca": "Aquesta botiga té una oferta de <b>vegana limitada</b>" + "ca": "Aquesta botiga té una oferta <b>vegana limitada</b>" } }, { @@ -3132,7 +3132,7 @@ "en": "This facility does have showers, but the water is not heated", "de": "Diese Einrichtung verfügt zwar über Duschen, aber das Wasser ist nicht beheizt", "es": "Esta instalación tiene duchas, pero el agua no está caliente", - "ca": "Aquesta instal·lació té dutxes, però l'aigua no s'escalfa" + "ca": "Aquesta instal·lació té dutxes, però l'aigua està calenta" } }, { @@ -3246,7 +3246,7 @@ "en": "What kind of seating does {title()} have?", "nl": "Wat voor zitplaatsen heeft {title()}?", "de": "Welche Art von Sitzgelegenheiten hat {title()}?", - "ca": "Quin tipus de seient té {title()}?" + "ca": "Quin tipus de seients té {title()}?" }, "mappings": [ { @@ -3256,7 +3256,7 @@ "en": "This place has outdoor seating", "nl": "Deze plaats heeft zitplaatsen buiten", "de": "Dieser Ort hat Sitzgelegenheiten im Freien", - "ca": "Aquest lloc té zona d'estar exterior" + "ca": "Aquest lloc té seients exteriors" }, "icon": "./assets/layers/outdoor_seating/outdoor_seating.svg" }, @@ -3267,7 +3267,7 @@ "en": "This place has indoor seating", "nl": "Deze plaats heeft zitplaatsen binnen", "de": "Dieser Ort hat Sitzplätze im Innenbereich", - "ca": "Aquest lloc té seients interiors" + "ca": "Aquest lloc té zona d'estar interior" } } ], diff --git a/assets/layers/railway_platforms/railway_platforms.json b/assets/layers/railway_platforms/railway_platforms.json index 546f8b575..bf7d281e6 100644 --- a/assets/layers/railway_platforms/railway_platforms.json +++ b/assets/layers/railway_platforms/railway_platforms.json @@ -35,7 +35,8 @@ "ca": "Andana", "cs": "Nástupiště", "pl": "Peron", - "es": "Andén" + "es": "Andén", + "cy": "Platfform" }, "mappings": [ { diff --git a/assets/layers/rainbow_crossings/rainbow_crossings.json b/assets/layers/rainbow_crossings/rainbow_crossings.json index 1cd59d566..bc57c7382 100644 --- a/assets/layers/rainbow_crossings/rainbow_crossings.json +++ b/assets/layers/rainbow_crossings/rainbow_crossings.json @@ -41,7 +41,8 @@ "fr": "Passage", "ca": "Creuament", "cs": "Přechod", - "es": "Paso de peatones" + "es": "Paso de peatones", + "cy": "Croesfan" } }, "pointRendering": [ diff --git a/assets/layers/recycling/recycling.json b/assets/layers/recycling/recycling.json index 9333fe019..e126291ea 100644 --- a/assets/layers/recycling/recycling.json +++ b/assets/layers/recycling/recycling.json @@ -11,7 +11,8 @@ "fr": "Recyclage", "cs": "Recyklování", "pl": "Recykling", - "uk": "Переробка" + "uk": "Переробка", + "cy": "Ailgylchu" }, "description": { "en": "A layer with recycling containers and centres", @@ -1159,7 +1160,7 @@ "de": "Kunststoffverpackungen, Metallverpackungen und Getränkekartons (Tetrapak) können hier recycelt werden", "uk": "Пластикова упаковка, металева упаковка та упаковка для напоїв (PMD)", "es": "Los envases de plástico, los envases metálicos y los envases de bebidas (PMD) se pueden reciclar aquí", - "ca": "Els envasos de plàstic, els envasos metàl·lics i els cartons de begudes (PMD) es poden reciclar aquí" + "ca": "Els envasos de plàstic, els envasos metàl·lics i els cartons de begudes (contenidor groc) es poden reciclar aquí" }, "icon": { "path": "./assets/layers/recycling/pmd.svg", @@ -1753,7 +1754,7 @@ "nl": "Recycling van plastic verkpakkingen, metalen verkpakkingen en drankpakken (PMD)", "de": "Recycling von Kunststoffverpackungen, Metallverpackungen und Getränkekartons (Tetrapak)", "es": "Reciclaje de envases de plástico, envases metálicos y envases de bebidas (PMD)", - "ca": "Reciclatge d'envasos de plàstic, envasos metàl·lics i cartons de begudes (PMD)" + "ca": "Reciclatge d'envasos de plàstic, envasos metàl·lics i cartons de begudes (contenidor groc)" }, "osmTags": "recycling:pmd=yes" } diff --git a/assets/layers/route_marker/route_marker.json b/assets/layers/route_marker/route_marker.json index 73a8965be..4cc6d3d71 100644 --- a/assets/layers/route_marker/route_marker.json +++ b/assets/layers/route_marker/route_marker.json @@ -10,7 +10,7 @@ "en": "Route markers are small markers often found along official hiking/cycling/riding/skiing routes to indicate the direction of the route.", "de": "Routenmarkierungen sind kleine Markierungen, die häufig entlang offizieller Wander-/Rad-/Reit-/Skirouten zu finden sind, um die Richtung der Route anzuzeigen.", "es": "Los marcadores de ruta son pequeños marcadores que a menudo se encuentran a lo largo de rutas oficiales de senderismo/ciclismo/equitación/esquí para indicar la dirección de la ruta.", - "ca": "Els marcadors de ruta són petits marcadors que sovint es troben al llarg de les rutes oficials de senderisme/ciclisme/riding/esquí per indicar la direcció de la ruta." + "ca": "Els marcadors de ruta són petits marcadors que sovint es troben al llarg de les rutes oficials de senderisme/ciclisme/equitació/esquí per indicar la direcció de la ruta." }, "source": { "osmTags": "information=route_marker" @@ -22,7 +22,7 @@ "de": "Routenmarker", "es": "Marcador de ruta", "cs": "Značka trasy", - "ca": "Marcador d'itinerari" + "ca": "Marcador de ruta" } }, "pointRendering": [ @@ -54,7 +54,7 @@ "en": "A route marker is a small marker often found along official hiking/cycling/riding/skiing routes to indicate the direction of the route.", "de": "Ein Routenmarker ist ein kleiner Marker, der oft entlang offizieller Wander-/Fahrrad-/Reit-/Skirouten zu finden ist, um die Richtung der Route anzuzeigen.", "es": "Un marcador de ruta es un pequeño marcador que a menudo se encuentra a lo largo de rutas oficiales de senderismo/ciclismo/equitación/esquí para indicar la dirección de la ruta.", - "ca": "Un marcador de ruta és un petit marcador que sovint es troba al llarg de les rutes oficials de senderisme/ciclisme/riding/esquí per indicar la direcció de la ruta." + "ca": "Un marcador de ruta és un petit marcador que sovint es troba al llarg de les rutes oficials de senderisme/ciclisme/equitació/esquí per indicar la direcció de la ruta." }, "exampleImages": [ "./assets/layers/route_marker/bicycle_route_marker.jpg", @@ -71,7 +71,7 @@ "de": "Für welche Art von Route ist dieser Marker?", "es": "¿Para qué tipo de ruta es este marcador?", "cs": "Pro jaký druh trasy je tato značka určena?", - "ca": "Per quin tipus de ruta és aquest marcador?" + "ca": "Per a quin tipus de ruta és aquest marcador?" }, "multiAnswer": true, "mappings": [ diff --git a/assets/layers/school/school.json b/assets/layers/school/school.json index cb2e68ccc..701acd8e3 100644 --- a/assets/layers/school/school.json +++ b/assets/layers/school/school.json @@ -349,7 +349,7 @@ "then": { "en": "Students with special needs and non-special need students have classes together.", "nl": "Buitengewone (geattesteerde) leerlingen en leerlingen zonder extra zorgnood zitten samen in de klas.", - "ca": "Els estudiants amb necessitats especials i les necessitats no especials tenen classes junts.", + "ca": "Els estudiants amb necessitats especials i sense necessitats especials fan classes junts.", "de": "Schüler mit und ohne besonderen Förderbedarf haben gemeinsamen Unterricht." } }, @@ -389,7 +389,7 @@ "question": { "en": "What does this school train pupils for?", "nl": "Waarop wordt een leerling voorbereid?", - "ca": "Per a què capacita els alumnes?", + "ca": "Per a què capacita als alumnes?", "de": "Was lernt man an dieser Schule?" }, "condition": { @@ -426,7 +426,7 @@ "then": { "en": "Prepares for a professional study at a college", "nl": "<b>Dubbele finaliteit</b>: een opleiding hier bereidt voor op verdere studie (bv. aan een hogeschool of secundair-na-secundair) of op de arbeidsmarkt", - "ca": "Preparats per a un estudi professional en una universitat", + "ca": "Prepara per a estudis professionals en un cicle formatiu de grau superior", "de": "Bereitet sich auf ein Fachstudium an einer Hochschule vor" } }, @@ -435,7 +435,7 @@ "then": { "en": "Prepares for a job", "nl": "<b>Arbeidsfinaliteit</b>: een opleiding hier bereidt voor op de arbeidsmarkt", - "ca": "Preparats per a una feina", + "ca": "Prepara per a una feina", "de": "Bereitet sich auf einen Arbeitsplatz vor" } } @@ -446,7 +446,7 @@ "question": { "en": "What does this school train pupils for?", "nl": "Waar traint deze school de leerlingen voor?", - "ca": "Per a què capacita els alumnes?", + "ca": "Per a què capacita als alumnes?", "de": "Wozu bildet diese Schule Schüler aus?" }, "condition": { @@ -472,7 +472,7 @@ "then": { "en": "<b>Training type 1</b>: trains elementary life skills to live in an institution. There is no intention to do a (paid) job after training", "nl": "<b>Onderwijsvorm type 1</b>: leert elementaire vaardigheden om te functioneren in een zorginstelling", - "ca": "<b>Entrenament tipus 1</b>: entrena habilitats de vida elemental per viure en una institució. No hi ha intenció de fer una feina (retribuïda) després de la formació", + "ca": "<b>Entrenament tipus 1</b>: entrena habilitats bàsiques per a la vida quotidiana per viure en una societat. No hi ha intenció de fer una feina (retribuïda) després de la formació", "de": "<b>Ausbildungstyp 1</b>: vermittelt elementare Lebenskompetenzen für das Leben in einer Einrichtung. Es besteht nicht die Absicht, nach der Ausbildung eine (bezahlte) Arbeit aufzunehmen." } }, @@ -481,7 +481,7 @@ "then": { "en": "<b>Training type 2</b>: prepares to work in an environment with extra care and facilities such as a sheltered workshop", "nl": "<b>Onderwijsvorm type 2</b>: leert vaardigheden om te werken in een een beschermde arbeidsomgeving zoals een maatwerkbedrijf", - "ca": "<b>Formació tipus 2</b>: es prepara per treballar en un entorn amb cures extra i instal·lacions com un taller tutelat", + "ca": "<b>Formació tipus 2</b>: prepara per treballar en un entorn amb atenció especial i instal·lacions com un taller tutelat", "de": "<b>Ausbildungstyp 2</b>: bereitet auf die Arbeit in einem Umfeld mit zusätzlicher Betreuung und Einrichtungen wie z.B. einer Behindertenwerkstatt vor" } }, @@ -490,7 +490,7 @@ "then": { "en": "<b>Training type 3</b>: prepares for a job and a (more-or-less) independent life in society", "nl": "<b>Onderwijsvorm type 3</b>: leert vaardigheden voor een een job op de reguliere arbeidsmarkt en zelfstandig wonen", - "ca": "<b>Formació tipus 3</b>: es prepara per a un treball i una vida independent (més o menys) en la societat", + "ca": "<b>Formació tipus 3</b>: prepara per a un treball i una vida (més o menys) independent en la societat", "de": "<b>Ausbildungstyp 3</b>: bereitet auf einen Arbeitsplatz und ein (mehr oder weniger) unabhängiges Leben in der Gesellschaft vor" } }, @@ -499,7 +499,7 @@ "then": { "en": "<b>Training type 4</b>: prepares for a job or continued education", "nl": "<b>Onderwijsvorm type 4</b>: leert vaardigheden voor een een job op de reguliere arbeidsmarkt of voor voortgezette studies", - "ca": "<b>Formació tipus 4</b>: preparació per a un treball o educació continuada", + "ca": "<b>Formació tipus 4</b>: prepara per a un treball o educació continuada", "de": "<b>Ausbildungstyp 4</b>: bereitet auf einen Arbeitsplatz oder eine weiterführende Ausbildung vor" } } @@ -604,7 +604,7 @@ "de": "Diese Schule ist mit der Freinet Modern School Movement verbunden", "es": "Esta escuela está asociada con el Movimiento de Escuelas Modernas Freinet", "cs": "Tato škola je spojena s Freinet Modern School Movement", - "ca": "Aquesta escola està associada amb el Moviment Escolar Modern Freinet" + "ca": "Aquesta escola està associada amb el Moviment d'Escoles Modernes Freinet" } }, { @@ -752,7 +752,7 @@ "then": { "nl": "Voor leerlingen met een Spraak- of Taalontwikkelingsstoornis (type 7 - STOS/TOS)", "en": "For students with a Developemental Language Disorder (type 7 - DLD)", - "ca": "Per a estudiants amb un trastorn del llenguatge de desenvolupament (tipus 7 - DLD)", + "ca": "Per a estudiants amb un trastorn del llenguatge de desenvolupament (tipus 7 - TDL)", "de": "Für Schüler mit einer Entwicklungsbedingten Sprachstörung (Typ 7 – DLD)" } }, @@ -951,7 +951,7 @@ "question": { "en": "Has first grade", "nl": "Heeft eerste graad", - "ca": "Té primera qualificació", + "ca": "Té primer cicle d'ESO", "de": "Hat die erste Klasse" }, "osmTags": { @@ -965,7 +965,7 @@ "question": { "en": "Has second grade", "nl": "Heeft tweede graad", - "ca": "Té segona qualificació", + "ca": "Té segon cicle d'ESO", "de": "Hat die zweite Klasse" }, "osmTags": { @@ -979,7 +979,7 @@ "question": { "en": "Has third grade", "nl": "Heeft derde graad", - "ca": "Té tercera qualificació", + "ca": "Té Batxillerat o FP de Grau Mitjà", "de": "Hat die dritte Klasse" }, "osmTags": { @@ -993,7 +993,7 @@ "question": { "en": "This school offers post-secondary education (e.g. a seventh or eight specialisation year)", "nl": "Heeft specialisatiejaar", - "ca": "Aquesta escola ofereix educació postsecundària (per exemple, un setè o vuit anys d'especialització)", + "ca": "Aquesta escola ofereix educació postsecundària (Batxillerat o Cicle Mitjà)", "de": "Diese Schule bietet eine postsekundäre Ausbildung (z. B. ein siebtes oder achtes Spezialisierungsjahr)" }, "osmTags": "school~i~.+;)?post_secondary(;.+" @@ -1019,7 +1019,7 @@ { "question": { "en": "Does this school have special need education?", - "ca": "Aquesta escola té una necessitat especial d'educació?", + "ca": "Aquesta escola ofereix educació per a necessitats especials?", "de": "Bietet diese Schule sonderpädagogische Förderung an?" } }, @@ -1040,7 +1040,7 @@ { "question": { "en": "No or limited special need education", - "ca": "Ensenyament de necessitat especial", + "ca": "Educació per a necessitats especials nula o limitada", "de": "Keine oder nur eingeschränkte sonderpädagogische Förderung" }, "osmTags": { diff --git a/assets/layers/scouting_group/scouting_group.json b/assets/layers/scouting_group/scouting_group.json index 231e9ec94..a35deb946 100644 --- a/assets/layers/scouting_group/scouting_group.json +++ b/assets/layers/scouting_group/scouting_group.json @@ -9,7 +9,7 @@ "description": { "en": "A map showing scouting groups.", "de": "Eine Karte mit Pfadfindergruppen.", - "ca": "Un mapa que mostra els grups d'exploració." + "ca": "Un mapa que mostra els grups d'escolta." }, "source": { "osmTags": "club=scout" @@ -19,7 +19,8 @@ "render": { "en": "{name}", "de": "{name}", - "ca": "{name}" + "ca": "{name}", + "cy": "{name}" } }, "pointRendering": [ @@ -51,7 +52,7 @@ "title": { "en": "scouting group", "de": "Pfadfinder:innenstamm", - "ca": "grup d'exploració" + "ca": "grup d'escoltes" }, "tags": [ "club=scout" diff --git a/assets/layers/search/search.json b/assets/layers/search/search.json index 982a61a26..30c17c022 100644 --- a/assets/layers/search/search.json +++ b/assets/layers/search/search.json @@ -5,7 +5,7 @@ "de": "Priorisierte Ebene, die Suchergebnissen anzeigt", "cs": "Soukromá vrstva zobrazující výsledky hledání", "es": "Capa privilegiada que muestra los resultados de la búsqueda", - "ca": "Capa privada que mostra els resultats de la cerca" + "ca": "Capa prioritaria que mostra els resultats de la cerca" }, "source": "special", "title": "{display_name}", diff --git a/assets/layers/shelter/shelter.json b/assets/layers/shelter/shelter.json index 826afc383..50186a91f 100644 --- a/assets/layers/shelter/shelter.json +++ b/assets/layers/shelter/shelter.json @@ -7,7 +7,8 @@ "ca": "Refugi", "fr": "Abri", "cs": "Přístřešek", - "es": "Refugio" + "es": "Refugio", + "cy": "Cysgod" }, "description": { "en": "Layer showing shelter structures", @@ -31,7 +32,8 @@ "nl": "Schuilplaats", "ca": "Refugi", "cs": "Přístřešek", - "es": "Refugio" + "es": "Refugio", + "cy": "Cysgod" } }, "pointRendering": [ @@ -117,7 +119,7 @@ "cs": "Toto je pavilon", "uk": "Це павільйон", "es": "Este es un pabellón", - "ca": "És un pavelló" + "ca": "Aquest és un pavelló" } }, { diff --git a/assets/layers/shops/shops.json b/assets/layers/shops/shops.json index 6978a21a6..9c6bf084b 100644 --- a/assets/layers/shops/shops.json +++ b/assets/layers/shops/shops.json @@ -12,7 +12,8 @@ "es": "Tienda", "pa_PK": "دکان", "cs": "Obchod", - "pl": "Sklep" + "pl": "Sklep", + "cy": "Siop" }, "description": { "en": "A shop", @@ -55,7 +56,8 @@ "es": "Tienda", "pa_PK": "دکان", "cs": "Obchod", - "pl": "Sklep" + "pl": "Sklep", + "cy": "Siop" }, "mappings": [ { @@ -75,7 +77,8 @@ "ca": "{name}", "es": "{name}", "cs": "{name}", - "pl": "{name}" + "pl": "{name}", + "cy": "{name}" } }, { @@ -94,7 +97,8 @@ "nl": "{shop}", "ca": "{shop}", "es": "{shop}", - "cs": "{shop}" + "cs": "{shop}", + "cy": "{shop}" } } ] @@ -524,14 +528,14 @@ "de": "Bietet dieser Laden einen Bindeservice an?", "es": "¿Esta tienda ofrece un servicio de encuadernación?", "cs": "Nabízí tento obchod službu vazby?", - "ca": "Aquesta botiga ofereix un servei vinculant?" + "ca": "Aquesta botiga ofereix un servei d'enquadernació?" }, "questionHint": { "en": "Does this shop bind a bundle of pages into a small book, e.g. with a comb, a spiral, wire or by gluing?", "de": "Bindet dieser Laden ein Bündel von Seiten zu einem kleinen Buch, z.B. mit einer Kamm-, Spiral-, Drahtbindung oder durch Kleben?", "es": "¿Esta tienda encuaderna un conjunto de páginas en un pequeño libro, por ejemplo, con un peine, una espiral, alambre o pegamento?", "cs": "Váže tento obchod svazek stránek do malé knihy, např. hřebenem, spirálou, drátem nebo lepením?", - "ca": "Aquesta botiga lliga un paquet de pàgines a un llibre petit, per exemple amb una pinta, una espiral, un filferro o enganxant?" + "ca": "Aquesta botiga enquaderna un conjunt de pàgines a un llibre petit, per exemple amb una pinta, una espiral, un filferro o adhesiu?" }, "mappings": [ { @@ -541,7 +545,7 @@ "de": "Dieser Laden bindet Papiere zu einem Heft", "es": "Esta tienda encuaderna papeles en un folleto", "cs": "Tento obchod váže papíry do brožury", - "ca": "Aquesta botiga vincula els papers a un llibret" + "ca": "Aquesta botiga enquaderna papers en un fulletó" } }, { @@ -551,7 +555,7 @@ "de": "Dieser Laden bindet Bücher", "es": "Esta tienda encuaderna libros", "cs": "Tento obchod váže knihy", - "ca": "Aquesta botiga vincula llibres" + "ca": "Aquesta botiga enquaderna llibres" } } ] @@ -581,7 +585,7 @@ "en": "This shop offers eye exams by certified optometrists", "nl": "Hier kan men een oogtest door een erkende optometrist laten uitvoeren", "de": "Dieser Shop bietet Augenuntersuchungen durch zertifizierte Optiker an", - "ca": "Aquesta botiga ofereix exàmens oculars d'optometristes certificats" + "ca": "Aquesta botiga ofereix exàmens oculars per optometristes certificats" } }, { @@ -591,7 +595,7 @@ "en": "This shop offers hearing tests by a certified audiologist", "nl": "HIer kan men een hoortest laten uitvoeren door een erkende audioloog", "de": "Dieser Shop bietet Hörtests durch einen zertifizierten Audiologen an", - "ca": "Aquesta botiga ofereix proves auditives d'un audiòleg certificat" + "ca": "Aquesta botiga ofereix proves auditives per un audiòleg certificat" } } ] @@ -948,7 +952,7 @@ "uk": "Йдеться про прокат для туристів, яким потрібен велосипед. Деякі майстерні з ремонту велосипедів пропонують велосипед на час ремонту, але це не вважається прокатом в даному випадку.", "es": "Esto se refiere al alquiler para, por ejemplo, turistas que necesitan una bicicleta. Algunas tiendas de reparación de bicicletas ofrecen una bicicleta para usar mientras se repara la suya, pero esto no se considera alquiler para esta pregunta.", "cs": "Jedná se o pronájem např. turisté, kteří potřebují kolo. Některé opravny jízdních kol nabízejí jízdní kolo k použití při opravě kola, ale u této otázky se to nepovažuje za pronájem.", - "ca": "Es tracta de lloguer per als turistes que necessiten una bicicleta. Alguns tallers de reparació de bicicletes ofereixen una bicicleta a utilitzar mentre la seva bicicleta està sent reparada, però això no es considera lloguer per a aquesta pregunta." + "ca": "Es tracta de lloguer per a, per exemple, turistes que necessiten una bicicleta. Alguns tallers de reparació de bicicletes ofereixen una bicicleta a utilitzar mentre la seva bicicleta està sent reparada, però això no es considera lloguer per a aquesta pregunta." }, "mappings": [ { diff --git a/assets/layers/shower/shower.json b/assets/layers/shower/shower.json index 4697b19ba..c96907363 100644 --- a/assets/layers/shower/shower.json +++ b/assets/layers/shower/shower.json @@ -6,7 +6,8 @@ "fr": "Douche", "ca": "Dutxa", "cs": "Sprcha", - "es": "Ducha" + "es": "Ducha", + "cy": "Cawod" }, "description": { "en": "A layer showing (public) showers", @@ -27,7 +28,8 @@ "ca": "Dutxa", "fr": "Douche", "cs": "Sprcha", - "es": "Ducha" + "es": "Ducha", + "cy": "Cawod" } }, "pointRendering": [ diff --git a/assets/layers/ski_piste/ski_piste.json b/assets/layers/ski_piste/ski_piste.json index 031d0a0a4..54c8dd8a4 100644 --- a/assets/layers/ski_piste/ski_piste.json +++ b/assets/layers/ski_piste/ski_piste.json @@ -6,7 +6,7 @@ "fr": "Pistes de ski et de snowboard", "es": "Pistas de esquí y snowboard", "cs": "Lyžařské a snowboardové sjezdovky", - "ca": "pistes d'esquí i snowboard" + "ca": "Pistes d'esquí i snowboard" }, "description": { "en": "Ski and snowboard pistes", @@ -14,7 +14,7 @@ "fr": "Pistes de ski et de snowboard", "es": "Pistas de esquí y snowboard", "cs": "Lyžařské a snowboardové sjezdovky", - "ca": "pistes d'esquí i snowboard" + "ca": "Pistes d'esquí i snowboard" }, "source": { "osmTags": { @@ -37,7 +37,7 @@ "fr": "Piste de ski {name}", "es": "Pista de esquí {name}", "cs": "Lyžařská sjezdovka {name}", - "ca": "Esquí de pista {name}" + "ca": "Pista d'esquí {name}" } }, "pointRendering": [ @@ -109,7 +109,7 @@ "fr": "Débutant (vert)", "es": "Principiante (verde)", "cs": "Nováček (zelená)", - "ca": "Novici (verd)" + "ca": "Principiant (verd)" } }, { diff --git a/assets/layers/slow_roads/slow_roads.json b/assets/layers/slow_roads/slow_roads.json index 47c3be320..3309094bf 100644 --- a/assets/layers/slow_roads/slow_roads.json +++ b/assets/layers/slow_roads/slow_roads.json @@ -7,7 +7,7 @@ "fr": "Chemins, routes non carrossables et routes à vitesse réduite", "es": "Senderos, caminos lentos y sin coches", "cs": "Stezky, silnice bez aut a pomalé cesty", - "ca": "Camins, carreteres sense cotxes i lentes" + "ca": "Camins, carreteres lentes i sense cotxes" }, "description": { "en": "All carfree roads", @@ -60,7 +60,7 @@ "nl": "Voetpad", "de": "Fußweg", "es": "Acera", - "ca": "Peu" + "ca": "Vorera" } }, { @@ -90,7 +90,7 @@ "nl": "Woonerf", "de": "Wohnstraße", "es": "Calle residencial", - "ca": "Carrer viu" + "ca": "Carrer residencial" } }, { @@ -137,7 +137,7 @@ "de": "Dies ist eine Wohnstraße", "fr": "C'est une zone de rencontre", "es": "Esta es una calle residencial", - "ca": "Aquest és un carrer viu" + "ca": "Aquest és un carrer residencial" }, "icon": { "path": "./assets/layers/slow_roads/woonerf.svg", @@ -162,7 +162,7 @@ "de": "Dies ist ein Fußweg", "fr": "C'est un chemin piéton", "es": "Esta es una acera", - "ca": "Aquest és un camí" + "ca": "Aquest és una vorera" } }, { @@ -194,7 +194,7 @@ "nl": "Dit is een tractorspoor of weg om landbouwgrond te bereikken", "de": "Dies ist eine Zufahrtsstraße", "es": "Este es un camino de acceso a terrenos", - "ca": "Aquesta és una carretera d'accés a la terra" + "ca": "Aquesta és una carretera d'accés a terrenys" } } ] @@ -372,7 +372,7 @@ "nl": "Niet verlicht", "de": "Nicht beleuchtet", "es": "Sin iluminación", - "ca": "No il·luminat" + "ca": "Sense il·luminació" } } ] diff --git a/assets/layers/souvenir_coin/souvenir_coin.json b/assets/layers/souvenir_coin/souvenir_coin.json index 1f5a20f30..70cbb1f7f 100644 --- a/assets/layers/souvenir_coin/souvenir_coin.json +++ b/assets/layers/souvenir_coin/souvenir_coin.json @@ -28,7 +28,7 @@ "de": "Souvenir-Münzautomat", "es": "Máquina de Monedas de Recuerdo", "nl": "Souvenirmuntmachine", - "ca": "Màquina de monedes de souvenir" + "ca": "Màquina de monedes de record" } }, "pointRendering": [ @@ -156,7 +156,7 @@ "de": "Eine Souvenirmünze kostet {charge}", "es": "Una moneda de recuerdo cuesta {charge}", "nl": "Een souvenirmunt kost {charge}", - "ca": "Un record de monedes costa {charge}" + "ca": "Una moneda de record costa {charge}" }, "freeform": { "key": "charge", diff --git a/assets/layers/souvenir_note/souvenir_note.json b/assets/layers/souvenir_note/souvenir_note.json index 884336a4b..3a5bc4781 100644 --- a/assets/layers/souvenir_note/souvenir_note.json +++ b/assets/layers/souvenir_note/souvenir_note.json @@ -5,14 +5,14 @@ "de": "Souvenir Banknotenmaschinen", "es": "Máquinas de Billetes de Recuerdo", "nl": "Souvenirbiljetmachines", - "ca": "Màquines de bitllets de souvenir" + "ca": "Màquines de bitllets de record" }, "description": { "en": "Layer showing machines selling souvenir banknotes", "de": "Ebene zeigt Maschinen, die Souvenir-Banknoten verkaufen", "es": "Capa que muestra máquinas expendedoras de billetes de recuerdo", "nl": "Laag die machines toont die souvenirbiljetten verkopen", - "ca": "Capa que mostra màquines que venen bitllets de souvenir" + "ca": "Capa que mostra màquines que venen bitllets de record" }, "source": { "osmTags": { @@ -74,7 +74,7 @@ "de": "Hinzufügen eines Automaten, der Souvenir-Banknoten verkauft", "es": "Añadir una máquina expendedora de billetes de recuerdo", "nl": "Voeg een machine toe die souvenirbiljetten verkoopt", - "ca": "Afegeix una màquina venent bitllets de souvenir" + "ca": "Afegeix una màquina expenedora de bitllets de record" }, "tags": [ "amenity=vending_machine", @@ -111,7 +111,7 @@ "de": "Diese Maschine verfügt über {note:design_count} Designs.", "es": "Esta máquina tiene {note:design_count} diseños disponibles.", "nl": "Deze machine heeft {note:design_count} ontwerpen beschikbaar.", - "ca": "Aquesta màquina té disponibles {note:design_count} dissenys." + "ca": "Aquesta màquina té disponibles {note:design_count}." }, "mappings": [ { @@ -164,7 +164,7 @@ "de": "Wie viel kostet eine Souvenirnote?", "es": "¿Cuánto cuesta un billete de recuerdo?", "nl": "Hoeveel kost een souvenirbiljet?", - "ca": "Quant costa una nota de record?" + "ca": "Quant costa una bitllet de record?" }, "id": "charge", "render": { @@ -172,7 +172,7 @@ "de": "Eine Souvenirnote kostet {charge}", "es": "Un billete de recuerdo cuesta {charge}", "nl": "Een souvenirbiljet kost {charge}", - "ca": "Una nota de record costa {charge}" + "ca": "Una bitllet de record costa {charge}" }, "freeform": { "key": "charge", diff --git a/assets/layers/speed_camera/speed_camera.json b/assets/layers/speed_camera/speed_camera.json index 9005a90fb..b767e59bb 100644 --- a/assets/layers/speed_camera/speed_camera.json +++ b/assets/layers/speed_camera/speed_camera.json @@ -110,7 +110,7 @@ "nl": "De referentie van deze flitspaal is {ref}", "es": "El número de referencia de este radar es {ref}", "cs": "Referenční číslo tohoto rychlostního radaru je {ref}", - "ca": "El número de referència d'aquesta càmera de velocitat és {ref}" + "ca": "El número de referència d'aquest radar de velocitat és {ref}" }, "condition": "ref~*" }, diff --git a/assets/layers/speed_display/speed_display.json b/assets/layers/speed_display/speed_display.json index a92c46750..499fc83e9 100644 --- a/assets/layers/speed_display/speed_display.json +++ b/assets/layers/speed_display/speed_display.json @@ -27,7 +27,7 @@ "nl": "Snelheidsdisplay", "cs": "Ukazatel rychlosti", "es": "Pantalla de Velocidad", - "ca": "Visualització de velocitat" + "ca": "Radar pedagògic" } }, "pointRendering": [ @@ -69,7 +69,7 @@ "fr": "Quelle est la vitesse maximale autorisée au niveau de ce radar pédagogique ?", "cs": "Jaká je maximální povolená rychlost na tomto ukazateli rychlosti?", "es": "¿Cuál es la velocidad máxima permitida en esta pantalla de velocidad?", - "ca": "Quina és la velocitat màxima permesa a aquesta pantalla de velocitat?" + "ca": "Quina és la velocitat màxima permesa a aquest radar pedagògic?" }, "freeform": { "key": "maxspeed", @@ -81,7 +81,7 @@ "fr": "Vitesse autorisée au niveau de ce radar pédagogique", "cs": "Povolená rychlost na ukazateli rychlosti", "es": "Velocidad permitida en la pantalla de velocidad", - "ca": "Velocitat permesa a la visualització de velocitat" + "ca": "Velocitat permesa al radar pedagògic" } }, "render": { diff --git a/assets/layers/sport_pitch/sport_pitch.json b/assets/layers/sport_pitch/sport_pitch.json index 53b8b108b..2a587c8c9 100644 --- a/assets/layers/sport_pitch/sport_pitch.json +++ b/assets/layers/sport_pitch/sport_pitch.json @@ -145,7 +145,7 @@ "de": "eine Tischtennisplatte", "cs": "stůl na stolní tenis", "es": "una mesa de ping-pong", - "ca": "una taula de tabletennis" + "ca": "una taula de tennis de taula" }, "tags": [ "leisure=pitch", @@ -186,7 +186,7 @@ "en": "a horse riding arena", "de": "einen Reitplatz", "es": "una pista ecuestre", - "ca": "un arena muntat a cavall" + "ca": "una pista eqüestre" }, "tags": [ "leisure=pitch", @@ -388,7 +388,7 @@ "de": "Dieses Basketballfeld hat einen einzigen Korb", "cs": "Toto basketbalové hřiště má jeden koš", "es": "Esta cancha de baloncesto tiene un solo aro", - "ca": "Aquest camp de bàsquet té un sol cèrcol" + "ca": "Aquest camp de bàsquet té una sola cistella" } }, { @@ -766,7 +766,7 @@ "de": "Wann ist dieser Sportplatz zugänglich?", "es": "¿Cuándo es accesible esta cancha?", "cs": "Kdy je toto hřiště přístupné?", - "ca": "Quan és accessible aquest pitch?" + "ca": "Quan és accessible aquesta pista?" }, "render": "Openingsuren: {opening_hours_table()}", "freeform": { diff --git a/assets/layers/sports_centre/sports_centre.json b/assets/layers/sports_centre/sports_centre.json index 44f878c02..a945eba65 100644 --- a/assets/layers/sports_centre/sports_centre.json +++ b/assets/layers/sports_centre/sports_centre.json @@ -95,7 +95,7 @@ "en": "Nine-pin bowling", "es": "Bolos de nueve bolos", "de": "Kegeln", - "ca": "Bola de nou pins" + "ca": "Bitlles de nou bitlles" } }, { @@ -104,7 +104,7 @@ "en": "Ten-pin bowling", "es": "Bolos de diez bolos", "de": "Bowling", - "ca": "Bola de deu pins" + "ca": "Bitlles de deu bitlles" } }, { @@ -128,7 +128,8 @@ "then": { "en": "Aikido", "de": "Aikido", - "ca": "Aikido" + "ca": "Aikido", + "cy": "Aikido" } }, { @@ -136,7 +137,7 @@ "then": { "en": "Archery", "de": "Bogenschießen", - "ca": "Arc" + "ca": "Tir amb arc" } }, { @@ -168,7 +169,8 @@ "then": { "en": "Bandy", "de": "Bandy", - "ca": "Bandy" + "ca": "Bandy", + "cy": "Bandy" } }, { @@ -177,7 +179,7 @@ "en": "BASE jumping", "es": "Salto BASE", "de": "Basejumping", - "ca": "salt base" + "ca": "Salt base" } }, { @@ -185,7 +187,8 @@ "then": { "en": "Baseball", "de": "Baseball", - "ca": "Baseball" + "ca": "Beisbol", + "cy": "Pêl-fas" } }, { @@ -209,7 +212,8 @@ "then": { "en": "Biathlon", "de": "Biathlon", - "ca": "Biatló" + "ca": "Biatló", + "cy": "Biathlon" } }, { @@ -217,7 +221,7 @@ "then": { "en": "Cue sports", "de": "Cuesport", - "ca": "Esports Cue" + "ca": "Billar" } }, { @@ -225,7 +229,8 @@ "then": { "en": "BMX", "de": "BMX", - "ca": "BMX" + "ca": "BMX", + "cy": "BMX" } }, { @@ -233,7 +238,8 @@ "then": { "en": "Bobsleigh", "de": "Bobfahren", - "ca": "Bob" + "ca": "Bob", + "cy": "Bobslê" } }, { @@ -249,7 +255,7 @@ "then": { "en": "Bowls", "de": "Bowls", - "ca": "Bols" + "ca": "Petanca" } }, { @@ -257,7 +263,8 @@ "then": { "en": "Boxing", "de": "Boxen", - "ca": "Boxa" + "ca": "Boxa", + "cy": "Bocsio" } }, { @@ -281,7 +288,8 @@ "then": { "en": "Canoe", "de": "Kanu", - "ca": "Canoa" + "ca": "Canoa", + "cy": "Canŵ" } }, { @@ -289,7 +297,8 @@ "then": { "en": "Chess", "de": "Schach", - "ca": "Escac" + "ca": "Escacs", + "cy": "Gwyddbwyll" } }, { @@ -306,7 +315,8 @@ "en": "Climbing", "nl": "Klimmen", "de": "Klettern", - "ca": "Escalada" + "ca": "Escalada", + "cy": "Dringo" } }, { @@ -315,7 +325,7 @@ "en": "Climbing Adventure", "nl": "Hoogteparcours", "de": "Seilgarten", - "ca": "Aventura de l'escalada" + "ca": "Aventura d'escalada" } }, { @@ -331,7 +341,8 @@ "then": { "en": "Cricket", "de": "Kricket", - "ca": "Criquet" + "ca": "Criquet", + "cy": "Criced" } }, { @@ -339,7 +350,8 @@ "then": { "en": "CrossFit", "de": "CrossFit", - "ca": "CrossFit" + "ca": "CrossFit", + "cy": "CrossFit" } }, { @@ -347,7 +359,8 @@ "then": { "en": "Croquet", "de": "Krocket", - "ca": "Croquet" + "ca": "Croquet", + "cy": "Croquet" } }, { @@ -363,7 +376,7 @@ "then": { "en": "Cycle Polo", "de": "Radpolo", - "ca": "Polo de cicle" + "ca": "Polo amb bicicleta" } }, { @@ -371,7 +384,8 @@ "then": { "en": "Cycling", "de": "Radfahren", - "ca": "Ciclisme" + "ca": "Ciclisme", + "cy": "Seiclo" } }, { @@ -379,7 +393,8 @@ "then": { "en": "Dance", "de": "Tanz", - "ca": "Dansa" + "ca": "Dansa", + "cy": "Dawns" } }, { @@ -387,7 +402,8 @@ "then": { "en": "Darts", "de": "Dart", - "ca": "Dards" + "ca": "Dards", + "cy": "Dartiau" } }, { @@ -395,7 +411,7 @@ "then": { "en": "Dog agility", "de": "Hundetraining", - "ca": "Agilitat del gos" + "ca": "Ensinistrament caní" } }, { @@ -403,7 +419,7 @@ "then": { "en": "Greyhound racing", "de": "Windhundrennen", - "ca": "Curses de Greyhound" + "ca": "Cursa de llebrers" } }, { @@ -411,7 +427,7 @@ "then": { "en": "Dragon Boat", "de": "Drachenboot", - "ca": "Boca de drac" + "ca": "Bot dragó" } }, { @@ -419,7 +435,8 @@ "then": { "en": "Equestrianism", "de": "Reitsport", - "ca": "Hípica" + "ca": "Hípica", + "cy": "Marchogaeth" } }, { @@ -427,7 +444,8 @@ "then": { "en": "Fencing", "de": "Fechten", - "ca": "Fenc" + "ca": "Esgrima", + "cy": "Ffensio" } }, { @@ -435,7 +453,7 @@ "then": { "en": "Field hockey", "de": "Feldhockey", - "ca": "Hoquei de camp" + "ca": "Hoquei sobre herba" } }, { @@ -443,7 +461,8 @@ "then": { "en": "Fitness", "de": "Fitnesstraining", - "ca": "Ajusta" + "ca": "Fitnes", + "cy": "Ffitrwydd" } }, { @@ -451,7 +470,7 @@ "then": { "en": "5 person soccer", "de": "Fußball mit 5 Personen", - "ca": "futbol 5 persones" + "ca": "Futbol 5" } }, { @@ -459,7 +478,7 @@ "then": { "en": "Floorball", "de": "Unihockey", - "ca": "Bola de terra" + "ca": "Hoquei pista" } }, { @@ -483,7 +502,8 @@ "then": { "en": "Futsal", "de": "Hallenfußball", - "ca": "Futbol sala" + "ca": "Futbol sala", + "cy": "Futsal" } }, { @@ -507,7 +527,8 @@ "then": { "en": "Golf", "de": "Golf", - "ca": "Golf" + "ca": "Golf", + "cy": "Golff" } }, { @@ -515,7 +536,8 @@ "then": { "en": "Gymnastics", "de": "Turnen", - "ca": "Gimnàstica" + "ca": "Gimnàstica", + "cy": "Gymnasteg" } }, { @@ -531,7 +553,8 @@ "then": { "en": "Hapkido", "de": "Hapkido", - "ca": "Hapkido" + "ca": "Hapkido", + "cy": "Hapkido" } }, { @@ -547,7 +570,7 @@ "then": { "en": "Horseshoes", "de": "Hufeisenwerfen", - "ca": "Raquetes de cavalls" + "ca": "Ferradures" } }, { @@ -579,7 +602,7 @@ "then": { "en": "Ice stock sport", "de": "Eisstockschießen", - "ca": "Esport d'estoc de gel" + "ca": "Esport d'Icestock" } }, { @@ -587,7 +610,8 @@ "then": { "en": "Judo", "de": "Judo", - "ca": "Judo" + "ca": "Judo", + "cy": "Judo" } }, { @@ -595,7 +619,8 @@ "then": { "en": "Karate", "de": "Karate", - "ca": "karate" + "ca": "Karate", + "cy": "Karate" } }, { @@ -603,7 +628,7 @@ "then": { "en": "Kart racing", "de": "Go-Kart-Rennen", - "ca": "Curses de Kart" + "ca": "Curses de Karts" } }, { @@ -643,7 +668,8 @@ "then": { "en": "Lacrosse", "de": "Lacrosse", - "ca": "Lacrosse" + "ca": "Lacrosse", + "cy": "Lacrosse" } }, { @@ -651,7 +677,7 @@ "then": { "en": "Laser tag", "de": "Laser Tag", - "ca": "Etiqueta làser" + "ca": "Làser tag" } }, { @@ -715,7 +741,7 @@ "then": { "en": "Obstacle course", "de": "Hindernislauf", - "ca": "Curs d'obstacle" + "ca": "Cursa d'obstacles" } }, { @@ -739,7 +765,8 @@ "then": { "en": "Padel", "de": "Padel-Tennis", - "ca": "Pàdel" + "ca": "Pàdel", + "cy": "Padel" } }, { @@ -763,7 +790,8 @@ "then": { "en": "Parkour", "de": "Parkour", - "ca": "Parkour" + "ca": "Parkour", + "cy": "Parkour" } }, { @@ -771,7 +799,8 @@ "then": { "en": "Palota", "de": "Palota", - "ca": "Pilota" + "ca": "Pilota", + "cy": "Palota" } }, { @@ -779,7 +808,8 @@ "then": { "en": "Pesäpallo", "de": "Pesäpallo", - "ca": "Pespalpallo" + "ca": "Beisbol finlandés", + "cy": "Pesäpallo" } }, { @@ -787,7 +817,8 @@ "then": { "en": "Pickleball", "de": "Pickleball", - "ca": "Pickleball" + "ca": "Pickleball", + "cy": "Padel" } }, { @@ -795,7 +826,8 @@ "then": { "en": "Pilates", "de": "Pilates", - "ca": "Pilates" + "ca": "Pilates", + "cy": "Pilates" } }, { @@ -827,7 +859,7 @@ "then": { "en": "Roller skating", "de": "Rollschuhlaufen", - "ca": "Patinatge enrotllat" + "ca": "Patinatge sobre rodes" } }, { @@ -835,7 +867,8 @@ "then": { "en": "Rowing", "de": "Rudern", - "ca": "Rem" + "ca": "Rem", + "cy": "Rhwyfo" } }, { @@ -859,7 +892,8 @@ "then": { "en": "Running", "de": "Laufsport", - "ca": "En execució" + "ca": "Carrera a peu", + "cy": "Rhedeg" } }, { @@ -883,7 +917,8 @@ "then": { "en": "Shooting", "de": "Schießen", - "ca": "Tir" + "ca": "Tir", + "cy": "Saethu" } }, { @@ -918,7 +953,7 @@ "en": "Snooker", "es": "Snooker", "de": "Snooker", - "ca": "Llibreta" + "ca": "Snooker" } }, { @@ -927,7 +962,8 @@ "en": "Soccer", "es": "Fútbol", "de": "Fußball", - "ca": "Futbol" + "ca": "Futbol", + "cy": "Pêl-droed" } }, { @@ -936,7 +972,8 @@ "en": "Softball", "es": "Softball", "de": "Softball", - "ca": "Softbol" + "ca": "Softbol", + "cy": "Pêl-feddal" } }, { @@ -945,7 +982,7 @@ "en": "Motorcycle speedway", "es": "Circuito de motos", "de": "Motorrad-Speedway", - "ca": "Velocitat de la moto" + "ca": "Circuit de motos" } }, { @@ -953,7 +990,8 @@ "then": { "en": "Squash", "de": "Squash", - "ca": "Esquaix" + "ca": "Esquaix", + "cy": "Sboncen" } }, { @@ -961,7 +999,8 @@ "then": { "en": "Sumo", "de": "Sumoringen", - "ca": "Sumo" + "ca": "Sumo", + "cy": "Sumo" } }, { @@ -969,7 +1008,8 @@ "then": { "en": "Surfing", "de": "Surfen", - "ca": "Surfing" + "ca": "Surfing", + "cy": "Syrffio" } }, { @@ -977,7 +1017,8 @@ "then": { "en": "Swimming", "de": "Schwimmen", - "ca": "Natació" + "ca": "Natació", + "cy": "Nofio" } }, { @@ -985,7 +1026,7 @@ "then": { "en": "Table tennis", "de": "Tischtennis", - "ca": "Tennis taula" + "ca": "Tennis de taula" } }, { @@ -993,7 +1034,7 @@ "then": { "en": "Table soccer", "de": "Tischfußball", - "ca": "Futbol taula" + "ca": "Futbolí" } }, { @@ -1001,7 +1042,8 @@ "then": { "en": "Taekwondo", "de": "Taekwondo", - "ca": "Taekwondo" + "ca": "Taekwondo", + "cy": "Taekwondo" } }, { @@ -1009,7 +1051,8 @@ "then": { "en": "Tennis", "de": "Tennis", - "ca": "Tenis" + "ca": "Tenis", + "cy": "Tenis" } }, { @@ -1041,7 +1084,7 @@ "then": { "en": "Ultimate frisbee", "de": "Ultimate Frisbee", - "ca": "Ultima l'abella" + "ca": "Ultimate" } }, { @@ -1049,7 +1092,7 @@ "then": { "en": "Ultralight aviation", "de": "Ultraleichtflug", - "ca": "Aviació ultralleuger" + "ca": "Aviació ultralleugera" } }, { @@ -1089,7 +1132,7 @@ "then": { "en": "Olympic weightlifting", "de": "Olympisches Gewichtheben", - "ca": "Elevador de pesos olímpic" + "ca": "Halterofília olímpica" } }, { @@ -1105,7 +1148,7 @@ "then": { "en": "Wrestling", "de": "Wrestling", - "ca": "Lluita" + "ca": "Lluita lliure" } }, { @@ -1113,7 +1156,8 @@ "then": { "en": "Yoga", "de": "Yoga", - "ca": "ioga" + "ca": "Ioga", + "cy": "Ioga" } }, { @@ -1128,7 +1172,7 @@ "render": { "en": "Sports played here: {sport}", "de": "Hier werden folgende Sportarten ausgeübt: {sport}", - "ca": "Esports jugats aquí: {sport}" + "ca": "Esports practicats aquí: {sport}" }, "freeform": { "key": "sport" diff --git a/assets/layers/stairs/stairs.json b/assets/layers/stairs/stairs.json index 50758a9bf..d0c9cbfc7 100644 --- a/assets/layers/stairs/stairs.json +++ b/assets/layers/stairs/stairs.json @@ -7,7 +7,8 @@ "ca": "Escales", "cs": "Schody", "id": "Tangga", - "es": "Escaleras" + "es": "Escaleras", + "cy": "Grisiau" }, "description": { "en": "Layer showing stairs and escalators", @@ -29,7 +30,8 @@ "de": "Treppe", "ca": "Escales", "cs": "Schody", - "es": "Escaleras" + "es": "Escaleras", + "cy": "Grisiau" }, "mappings": [ { @@ -47,7 +49,8 @@ "de": "Rolltreppe", "ca": "Escala mecànica", "cs": "Jezdící schody", - "es": "Escalera mecánica" + "es": "Escalera mecánica", + "cy": "Esgaladur" } } ] @@ -191,7 +194,7 @@ "en": "This is a reversible escalator", "nl": "Dit is een roltrap die van richting kan veranderen", "de": "Diese Rolltreppe ist beidseitig befahrbar", - "ca": "Es tracta d'una escaladora reversible" + "ca": "Es tracta d'una escala mecànica reversible" } }, { diff --git a/assets/layers/stripclub/stripclub.json b/assets/layers/stripclub/stripclub.json index 34b0f8d32..17e6eb6ff 100644 --- a/assets/layers/stripclub/stripclub.json +++ b/assets/layers/stripclub/stripclub.json @@ -10,7 +10,7 @@ "en": "A venue where erotic dance, striptease, or lap dances are performed commercially. ", "de": "Ein Ort, an dem erotische Tanz-, Striptease- oder Lapdances kommerziell durchgeführt werden. ", "es": "Un local donde se realizan bailes eróticos, striptease o bailes en el regazo de forma comercial. ", - "ca": "Un espai on es realitzen balls eròtics, striptease o lap dances comercialment. " + "ca": "Un espai on es realitzen balls eròtics, striptease o balls a la falda comercialment. " }, "source": { "osmTags": "amenity=stripclub" @@ -67,7 +67,7 @@ "en": "a stripclub", "de": "ein Stripclub", "es": "un club de striptease", - "ca": "un stripclub" + "ca": "un club de striptease" }, "tags": [ "amenity=stripclub" @@ -88,13 +88,13 @@ "en": "What is the name of this stripclub?", "de": "Wie lautet der Name des Stripclubs?", "es": "¿Cuál es el nombre de este club de striptease?", - "ca": "Quin és el nom d'aquest stripclub?" + "ca": "Quin és el nom d'aquest club de striptease?" }, "render": { "en": "This stripclub is named <b>{name}</b>", "de": "Der Name des Stripclubs lautet <b>{name}</b>", "es": "Este club de striptease se llama <b>{name}</b>", - "ca": "Aquest club de stripclub s'anomena <b>{name}</b>" + "ca": "Aquest club de striptease s'anomena <b>{name}</b>" } }, "opening_hours", diff --git a/assets/layers/summary/summary.json b/assets/layers/summary/summary.json index c0980269a..81211ec9b 100644 --- a/assets/layers/summary/summary.json +++ b/assets/layers/summary/summary.json @@ -9,7 +9,8 @@ "nl": "Samenvatting", "cs": "Souhrn", "es": "Resumen", - "ca": "Resum" + "ca": "Resum", + "cy": "Crynodeb" } }, "pointRendering": [ diff --git a/assets/layers/surveillance_camera/surveillance_camera.json b/assets/layers/surveillance_camera/surveillance_camera.json index f102898f1..4b6782149 100644 --- a/assets/layers/surveillance_camera/surveillance_camera.json +++ b/assets/layers/surveillance_camera/surveillance_camera.json @@ -340,7 +340,7 @@ "then": { "en": "A doorbell which might be turned on remotely at any time or by motion detection. These are typically <i>Smart</i>, internet-connected doorbells. Typical brands are Ring, Google Nest, Eufy, ...", "de": "Eine Türklingel, die jederzeit oder per Bewegungserkennung ferngeschaltet werden kann. Dies sind typischerweise <i>Smart</i>, internetgebundene Türklingeln. Typische Marken sind Ring, Google Nest, Eufy, ...", - "ca": "Un timbre que es pot activar remotament en qualsevol moment o mitjançant la detecció de moviment. Aquests són típicament <i>Smart</i>, timbres connectats a Internet. Les marques típiques són Ring, Google Nest, Eufy, ..." + "ca": "Un timbre que es pot activar remotament en qualsevol moment o mitjançant la detecció de moviment. Aquests són típicament <i>Smart</i>, banderes connectades a Internet. Les marques típiques són Ring, Google Nest, Eufy, ..." } } ], diff --git a/assets/layers/tactile_model/tactile_model.json b/assets/layers/tactile_model/tactile_model.json index a7d5b9336..0c7d735ba 100644 --- a/assets/layers/tactile_model/tactile_model.json +++ b/assets/layers/tactile_model/tactile_model.json @@ -109,12 +109,12 @@ "question": { "en": "In which languages is there a braille description?", "de": "In welchen Sprachen gibt es eine Beschreibung in Blindenschrift?", - "ca": "En quines llengües hi ha una descripció en braille?" + "ca": "En quines llengües hi ha descripció en braille?" }, "render_list_item": { "en": "This model has a braille description in {language()}", "de": "Dieses Modell hat eine Beschreibung in Brailleschrift in {language()}", - "ca": "Aquest model té una descripció en braille a {language()}" + "ca": "Aquest model té una descripció en braille en {language()}" }, "render_single_language": { "en": "This model has a braille description in {language}", diff --git a/assets/layers/tertiary_education/tertiary_education.json b/assets/layers/tertiary_education/tertiary_education.json index ed37438aa..e0d278d4d 100644 --- a/assets/layers/tertiary_education/tertiary_education.json +++ b/assets/layers/tertiary_education/tertiary_education.json @@ -49,7 +49,8 @@ "pa_PK": "کالج", "ca": "Institut superior", "cs": "Vysoká škola", - "es": "Colegio" + "es": "Colegio", + "cy": "Coleg" } }, { @@ -63,7 +64,8 @@ "pa_PK": "یونیورسٹی", "ca": "Universitat", "cs": "Univerzita", - "es": "Universidad" + "es": "Universidad", + "cy": "Prifysgol" } }, { diff --git a/assets/layers/toilet/toilet.json b/assets/layers/toilet/toilet.json index 02a11b63a..1c04fad19 100644 --- a/assets/layers/toilet/toilet.json +++ b/assets/layers/toilet/toilet.json @@ -13,7 +13,8 @@ "pa_PK": "ٹوئیلٹاں", "cs": "Toalety", "sl": "Stranišča", - "uk": "Туалети" + "uk": "Туалети", + "cy": "Toiledau" }, "description": { "en": "A layer showing (public) toilets", @@ -68,7 +69,8 @@ "da": "Toilet", "pa_PK": "ٹوئیلٹ", "cs": "Toaleta", - "sl": "Stranišče" + "sl": "Stranišče", + "cy": "Toiled" } }, "pointRendering": [ diff --git a/assets/layers/tool_library/tool_library.json b/assets/layers/tool_library/tool_library.json index 1be1c251d..6ff62eac7 100644 --- a/assets/layers/tool_library/tool_library.json +++ b/assets/layers/tool_library/tool_library.json @@ -48,7 +48,8 @@ "en": "{name}", "de": "{name}", "es": "{name}", - "ca": "{name}" + "ca": "{name}", + "cy": "{name}" } } ] @@ -129,7 +130,7 @@ "en": "How much does a membership cost?", "de": "Wie viel kostet eine Mitgliedschaft?", "es": "¿Cuánto cuesta una membresía?", - "ca": "Quant costa una pertinença?" + "ca": "Quant costa una filiació?" }, "id": "membership_charge", "questionHint": { @@ -147,7 +148,7 @@ "en": "A membership costs {charge:membership}", "de": "Eine Mitgliedschaft kostet {charge:membership}", "es": "Una membresía cuesta {charge:membership}", - "ca": "Una pertinença costa {charge:membership}" + "ca": "Una filiació costa {charge:membership}" } }, { diff --git a/assets/layers/tourism_accomodation/tourism_accomodation.json b/assets/layers/tourism_accomodation/tourism_accomodation.json index 931bd7260..213aedc89 100644 --- a/assets/layers/tourism_accomodation/tourism_accomodation.json +++ b/assets/layers/tourism_accomodation/tourism_accomodation.json @@ -186,7 +186,7 @@ "de": "Ein Hostel ist eine Art von Touristenherberge, in der man in einem Zimmer schlafen kann, das man mit Fremden teilt", "nl": "Een herberg is een gebouw waar je enkele dagen kan blijven. Je deelt een kamer met onbekenden.", "es": "Un hostal es un tipo de alojamiento turístico donde las personas pueden dormir en una habitación compartida con desconocidos", - "ca": "Un hostal és un tipus d'allotjament turístic on la gent pot dormir en una habitació compartida amb estranys" + "ca": "Un alberg és un tipus d'allotjament turístic on la gent pot dormir en una habitació compartida amb estranys" } }, { @@ -205,7 +205,7 @@ "de": "Ein möbliertes Appartement oder eine Wohnung mit Kochgelegenheit und Bad in einem Gemeinschaftsgebäude, das für Ferienzwecke gemietet werden kann, normalerweise ohne Frühstück oder Rezeption", "nl": "Een bemeubeld apparement met kookgelegenheid en een badkamer in een groter gebouw. Het appartement kan gehuurd worden voor vakanties. Er is geen receptie of ontbijt voorzien.", "es": "Un apartamento o piso amueblado con cocina y baño en un edificio compartido que se puede alquilar para vacaciones, normalmente sin desayuno ni recepción", - "ca": "Un apartament moblat o pis amb cuina i bany instal·lacions en un edifici compartit que es pot llogar per vacances, típicament sense esmorzar o recepció" + "ca": "Un apartament o pis moblat amb cuina i bany en un edifici compartit que es pot llogar per vacances, típicament sense esmorzar o recepció" } }, { @@ -222,7 +222,7 @@ "en": "A holiday cottage or vacation home with cooking and bathroom facilities that can be rented for holiday vacations, typically without breakfast or reception desk", "de": "Ein Ferienhaus oder eine Ferienwohnung mit Kochgelegenheit und Bad, das bzw. die für Ferienaufenthalte gemietet werden kann, in der Regel ohne Frühstück oder Rezeption", "es": "Una casa de vacaciones o chalet con cocina y baño que se puede alquilar para vacaciones, normalmente sin desayuno ni recepción", - "ca": "Una casa de vacances o casa de vacances amb instal·lacions de cuina i bany que es poden llogar per vacances, normalment sense esmorzar o recepció" + "ca": "Una casa de vacances o xalet amb instal·lacions de cuina i bany que es poden llogar per vacances, normalment sense desdejuni o recepció" } }, { @@ -240,7 +240,7 @@ "en": "A motel is an establishment that provides paid lodging, usually on a short-term basis, with convenient parking for motor cars at or close to the room. They are typically cheaper then a hotel", "de": "Ein Motel ist eine Einrichtung, die eine bezahlte Unterkunft anbietet, in der Regel für kurze Zeit, mit bequemen Parkplätzen für Kraftfahrzeuge am oder in der Nähe des Zimmers. Sie sind in der Regel billiger als ein Hotel", "es": "Un motel es un establecimiento que proporciona alojamiento de pago, generalmente a corto plazo, con estacionamiento conveniente para automóviles en o cerca de la habitación. Suelen ser más baratos que un hotel", - "ca": "Un motel és un establiment que ofereix allotjament de pagament, normalment a curt termini, amb un còmode aparcament per a cotxes de motor a o prop de l'habitació. Normalment són més barats, després un hotel" + "ca": "Un motel és un establiment que ofereix allotjament de pagament, normalment a curt termini, amb un còmode aparcament per a cotxes prop de l'habitació. Normalment són més barats que un hotel" } }, { @@ -301,7 +301,8 @@ "de": "{name}", "nl": "{name}", "es": "{name}", - "ca": "{name}" + "ca": "{name}", + "cy": "{name}" }, "freeform": { "key": "name" @@ -316,7 +317,8 @@ }, "question": { "de": "Ist diese Unterkunft ausschließlich für Gruppen?", - "en": "Is this hostel exclusively for groups?" + "en": "Is this hostel exclusively for groups?", + "ca": "Aquest hostel és exclusivament per a grups?" }, "mappings": [ { @@ -327,7 +329,8 @@ }, "then": { "en": "This hostel is exclusively for groups", - "de": "Diese Unterkunft ist ausschließlich für Gruppen" + "de": "Diese Unterkunft ist ausschließlich für Gruppen", + "ca": "Aquest hostel és exclusivament per a grups" } }, { @@ -338,7 +341,8 @@ }, "then": { "en": "This hostel is not exclusively for groups", - "de": "Diese Unterkunft ist nicht ausschließlich für Gruppen" + "de": "Diese Unterkunft ist nicht ausschließlich für Gruppen", + "ca": "Aquest hostel no és exclusivament per a grups" } } ], @@ -371,7 +375,8 @@ "de": "Hotels", "nl": "Hotels", "es": "Hoteles", - "ca": "Hotels" + "ca": "Hotels", + "cy": "Gwestai" } }, { @@ -381,7 +386,7 @@ "de": "Hostels / Herbergen", "nl": "Hostels", "es": "Hostales", - "ca": "Albergs" + "ca": "Alberg" } }, { @@ -391,7 +396,7 @@ "de": "Gasthäuser und Bed & Breakfasts", "nl": "Gastenkamers en bed-en-breakfasts", "es": "Pensiones y Bed&Breakfast", - "ca": "Cases d'hostes i BedBreakfasts" + "ca": "Cases d'hostes i Bed&Breakfasts" } }, { @@ -411,7 +416,7 @@ "de": "Ferienhaus", "nl": "Vakantiehuisje", "es": "Casa de vacaciones", - "ca": "Vacances a casa" + "ca": "Casa de vacances" } }, { diff --git a/assets/layers/trail/trail.json b/assets/layers/trail/trail.json index 00d7c16f4..905655583 100644 --- a/assets/layers/trail/trail.json +++ b/assets/layers/trail/trail.json @@ -10,7 +10,8 @@ "da": "Stier", "cs": "Stezky", "pl": "Ścieżki", - "es": "Senderos" + "es": "Senderos", + "cy": "Llwybrau" }, "description": { "en": "Waymarked trails", @@ -45,7 +46,8 @@ "da": "Sti", "cs": "Stezka", "pl": "Ścieżka", - "es": "Sendero" + "es": "Sendero", + "cy": "Llwybr" }, "mappings": [ { diff --git a/assets/layers/transit_routes/transit_routes.json b/assets/layers/transit_routes/transit_routes.json index e045775b3..1c85825b3 100644 --- a/assets/layers/transit_routes/transit_routes.json +++ b/assets/layers/transit_routes/transit_routes.json @@ -50,7 +50,8 @@ "nl": "{name}", "ca": "{name}", "cs": "{name}", - "es": "{name}" + "es": "{name}", + "cy": "{name}" } } ] diff --git a/assets/layers/tree_node/tree_node.json b/assets/layers/tree_node/tree_node.json index 7a9ecbf18..d97812fb0 100644 --- a/assets/layers/tree_node/tree_node.json +++ b/assets/layers/tree_node/tree_node.json @@ -12,7 +12,8 @@ "da": "Træ", "pt_BR": "Árvore", "cs": "Strom", - "pt": "Árvore" + "pt": "Árvore", + "cy": "Coeden" }, "description": { "en": "A layer showing trees", @@ -46,7 +47,8 @@ "da": "Træ", "pt": "Árvore", "cs": "Strom", - "uk": "Дерево" + "uk": "Дерево", + "cy": "Coeden" }, "mappings": [ { @@ -661,7 +663,8 @@ "es": "Perenne.", "da": "Stedsegrøn.", "pt": "Perene.", - "cs": "Stálozelený." + "cs": "Stálozelený.", + "cy": "Bytholwyrdd" } } ], diff --git a/assets/layers/usersettings/usersettings.json b/assets/layers/usersettings/usersettings.json index 6ac70923b..09fb17d3f 100644 --- a/assets/layers/usersettings/usersettings.json +++ b/assets/layers/usersettings/usersettings.json @@ -35,7 +35,8 @@ "ru": "Настройки", "hu": "Beállítások", "uk": "Налаштування", - "es": "Configuración" + "es": "Configuración", + "cy": "Gosodiadau" } }, "pointRendering": null, diff --git a/assets/layers/visitor_information_centre/visitor_information_centre.json b/assets/layers/visitor_information_centre/visitor_information_centre.json index 116e28e35..1439233af 100644 --- a/assets/layers/visitor_information_centre/visitor_information_centre.json +++ b/assets/layers/visitor_information_centre/visitor_information_centre.json @@ -45,7 +45,8 @@ "da": "{name}", "cs": "{name}", "zh_Hant": "{name}", - "pl": "{name}" + "pl": "{name}", + "cy": "{name}" }, "mappings": [ { @@ -77,7 +78,8 @@ "da": "{name}", "cs": "{name}", "zh_Hant": "{name}", - "pl": "{name}" + "pl": "{name}", + "cy": "{name}" } } ] diff --git a/assets/layers/windturbine/windturbine.json b/assets/layers/windturbine/windturbine.json index e6b7522f6..07bf62b39 100644 --- a/assets/layers/windturbine/windturbine.json +++ b/assets/layers/windturbine/windturbine.json @@ -62,7 +62,8 @@ "pl": "{name}", "cs": "{name}", "pt": "{name}", - "es": "{name}" + "es": "{name}", + "cy": "{name}" } } ] diff --git a/assets/svg/license_info.json b/assets/svg/license_info.json index 150c8266e..06bc3869d 100644 --- a/assets/svg/license_info.json +++ b/assets/svg/license_info.json @@ -527,16 +527,6 @@ "https://www.svgrepo.com/svg/22182/map" ] }, - { - "path": "github.svg", - "license": "LOGO", - "authors": [ - "Github" - ], - "sources": [ - "https://github.com/logos" - ] - }, { "path": "gps_arrow.svg", "license": "CC0-1.0", diff --git a/assets/themes/advertising/advertising.json b/assets/themes/advertising/advertising.json index c2ff65442..2626de460 100644 --- a/assets/themes/advertising/advertising.json +++ b/assets/themes/advertising/advertising.json @@ -17,7 +17,8 @@ "ru": "Реклама", "uk": "Реклама", "hu": "Reklámok", - "ko": "시설물" + "ko": "시설물", + "cy": "Hysbysebu" }, "description": { "ca": "Alguna vegada t'has preguntat quanta publictat hi ha als nostres carrers i carreteres? Amb aquest mapa podràs trobar i afegir informació de tots els elements publictaris que t'hi trobes pel carrer", diff --git a/assets/themes/architecture/architecture.json b/assets/themes/architecture/architecture.json index 9b16a1e9d..65a3c8c1a 100644 --- a/assets/themes/architecture/architecture.json +++ b/assets/themes/architecture/architecture.json @@ -1,10 +1,14 @@ { "id": "architecture", "title": { - "en": "Buildings with an architectural style" + "en": "Buildings with an architectural style", + "de": "Gebäude mit einem architektonischen Stil", + "zh_Hant": "有特定風格的建築" }, "description": { - "en": "A map showing the archetectural style of buildings" + "en": "A map showing the archetectural style of buildings", + "de": "Eine Karte, die den architektonischen Stil der Gebäude zeigt", + "zh_Hant": "顯示建築風格的地圖" }, "icon": "./assets/themes/architecture/architecture.svg", "defaultBackgroundId": "protomaps.white", diff --git a/assets/themes/atm/atm.json b/assets/themes/atm/atm.json index fda0df2c7..e1290f672 100644 --- a/assets/themes/atm/atm.json +++ b/assets/themes/atm/atm.json @@ -19,7 +19,8 @@ "zh_Hans": "自动取款机", "uk": "Банкомати", "hu": "Bankautomaták", - "ko": "ATM 기기" + "ko": "ATM 기기", + "cy": "Peiriannau Codi Arian" }, "description": { "en": "This map shows ATMs to withdraw or deposit money", diff --git a/assets/themes/benches/benches.json b/assets/themes/benches/benches.json index ae9f6ec23..c42083ea3 100644 --- a/assets/themes/benches/benches.json +++ b/assets/themes/benches/benches.json @@ -24,7 +24,8 @@ "pt": "Bancadas", "fil": "Mga upuan", "uk": "Лавки", - "ko": "벤치" + "ko": "벤치", + "cy": "Meinciau" }, "description": { "en": "This map shows all benches that are recorded in OpenStreetMap: Individual benches, and benches belonging to public transport stops or shelters.", @@ -70,7 +71,8 @@ "pt": "Um mapa de bancadas", "fil": "Mapa ng upuan", "uk": "Мапа лавок", - "ko": "벤치 지도" + "ko": "벤치 지도", + "cy": "Map o feinciau" }, "icon": "./assets/themes/benches/bench_poi.svg", "credits": [ diff --git a/assets/themes/cafes_and_pubs/cafes_and_pubs.json b/assets/themes/cafes_and_pubs/cafes_and_pubs.json index 819599918..019c05567 100644 --- a/assets/themes/cafes_and_pubs/cafes_and_pubs.json +++ b/assets/themes/cafes_and_pubs/cafes_and_pubs.json @@ -20,7 +20,8 @@ "pl": "Kawiarnie i puby", "zh_Hans": "咖啡馆和酒吧", "uk": "Кафе та паби", - "ko": "카페 그리고 펍" + "ko": "카페 그리고 펍", + "cy": "Caffis a thafarndai" }, "description": { "en": "Coffeehouses, pubs and bars", @@ -39,7 +40,8 @@ "pl": "Kawiarnie, puby i bary", "zh_Hans": "咖啡馆、酒吧和酒吧", "uk": "Кав'ярні, паби та бари", - "ko": "커피 전문점, 펍 그리고 바" + "ko": "커피 전문점, 펍 그리고 바", + "cy": "Tai coffi, tafarndai a bars" }, "icon": "./assets/layers/cafe_pub/pub.svg", "layers": [ diff --git a/assets/themes/campersite/campersite.json b/assets/themes/campersite/campersite.json index 3d721b7e9..a8d32de91 100644 --- a/assets/themes/campersite/campersite.json +++ b/assets/themes/campersite/campersite.json @@ -110,7 +110,8 @@ "cs": "Kdo toto místo provozuje?", "pl": "Kto obsługuje to miejsce?", "uk": "Хто керує цим місцем?", - "ko": "이 장소의 운영자는 누구인가요?" + "ko": "이 장소의 운영자는 누구인가요?", + "cy": "Pwy sy'n rhedeg y lleoliad hwn?" }, "freeform": { "key": "operator" diff --git a/assets/themes/charging_stations/charging_stations.json b/assets/themes/charging_stations/charging_stations.json index 25b22b755..7ec494cc1 100644 --- a/assets/themes/charging_stations/charging_stations.json +++ b/assets/themes/charging_stations/charging_stations.json @@ -19,7 +19,8 @@ "cs": "Nabíjecí stanice", "pl": "Stacje ładowania", "uk": "Зарядні станції", - "ko": "충전소" + "ko": "충전소", + "cy": "Lleoliadau Gwefru" }, "description": { "en": "On this open map, one can find and mark information about charging stations", diff --git a/assets/themes/circular_economy/circular_economy.json b/assets/themes/circular_economy/circular_economy.json index 2f8442bf0..218945031 100644 --- a/assets/themes/circular_economy/circular_economy.json +++ b/assets/themes/circular_economy/circular_economy.json @@ -61,7 +61,8 @@ "nl": "Tweedehandswinkels", "fr": "Commerces de produits d'occasion", "zh_Hant": "二手商店", - "ko": "중고 물품 상점" + "ko": "중고 물품 상점", + "cy": "Siopau ail law" }, "filter": null, "source": { diff --git a/assets/themes/climbing/climbing.json b/assets/themes/climbing/climbing.json index 65a075ff2..2461b9751 100644 --- a/assets/themes/climbing/climbing.json +++ b/assets/themes/climbing/climbing.json @@ -243,7 +243,8 @@ "pl": "Kto ma tutaj dostęp?", "uk": "Хто може сюди потрапити?", "zh_Hant": "誰能進入這裡?", - "ko": "누가 이곳에 접근 가능합니까?" + "ko": "누가 이곳에 접근 가능합니까?", + "cy": "Pwy sy'n gallu mynd yma?" }, "mappings": [ { @@ -262,7 +263,8 @@ "pl": "Publicznie dostępne dla każdego", "uk": "Загальнодоступний для всіх", "zh_Hant": "開放給所有人", - "ko": "누구나 접근 가능합니다" + "ko": "누구나 접근 가능합니다", + "cy": "Ar gael yn gyhoeddus i unrhyw un" } }, { @@ -300,7 +302,8 @@ "pl": "Tylko klienci", "uk": "Тільки клієнти", "zh_Hant": "只有顧客", - "ko": "오직 고객만" + "ko": "오직 고객만", + "cy": "Dim ond cwsmeriaid" } }, { @@ -321,7 +324,8 @@ "pl": "Tylko członkowie klubu", "uk": "Тільки члени клубу", "zh_Hant": "只有會員", - "ko": "오직 클럽 회원만" + "ko": "오직 클럽 회원만", + "cy": "Dim ond aelodau o'r clwb" } }, { @@ -518,7 +522,8 @@ "hu": "egy cipészműhely", "nl": "een schoenmaker", "zh_Hant": "修鞋店", - "ko": "신발 수리점" + "ko": "신발 수리점", + "cy": "siop drwsio esgidiau" } } ] diff --git a/assets/themes/cyclenodes/cyclenodes.json b/assets/themes/cyclenodes/cyclenodes.json index 752568a70..8f03e74f8 100644 --- a/assets/themes/cyclenodes/cyclenodes.json +++ b/assets/themes/cyclenodes/cyclenodes.json @@ -11,7 +11,8 @@ "cs": "Sítě uzlů cyklu", "pl": "Sieci węzłów rowerowych", "ko": "자전거 노드 네트워크", - "zh_Hant": "單車節點網路" + "zh_Hant": "單車節點網路", + "cy": "Rhwydweithiau Nod Seiclo" }, "description": { "en": "This map shows cycle node networks and allows you to add new nodes easily", @@ -49,7 +50,8 @@ "pl": "łącza węzeł do węzła", "uk": "Звʼязки між точками", "zh_Hant": "節點到節點的連結", - "ko": "노드간 경로" + "ko": "노드간 경로", + "cy": "Cysylltiadau nod i nod" }, "source": { "osmTags": { @@ -73,7 +75,8 @@ "pl": "połączenie węzła z węzłem", "uk": "Відрізок між точками", "zh_Hant": "節點到節點連結", - "ko": "노드간 경로" + "ko": "노드간 경로", + "cy": "Cyswllt nod i nod" }, "mappings": [ { @@ -222,7 +225,8 @@ "cs": "uzel cyklu <strong>{rcn_ref}</strong>", "pl": "węzeł rowerowy <strong>{rcn_ref}</strong>", "zh_Hant": "單車節點 <strong>{rcn_ref}</strong>", - "ko": "자전거 노드 <strong>{rcn_ref}</strong>" + "ko": "자전거 노드 <strong>{rcn_ref}</strong>", + "cy": "Nod seiclo <strong>{rcn_ref}</strong>" } }, { @@ -268,7 +272,8 @@ "ca": "Per exemple, 1", "zh_Hant": "例如 1", "ko": "e.g. 1", - "uk": "наприклад, 1" + "uk": "наприклад, 1", + "cy": "e.e. 1" } }, "render": { @@ -358,7 +363,8 @@ "ca": "Per exemple, 3", "uk": "напр. 3", "zh_Hant": "例如 3", - "ko": "e.g. 3" + "ko": "e.g. 3", + "cy": "e.e. 3" } }, "id": "node-expected_rcn_route_relations" @@ -381,7 +387,8 @@ "pl": "węzeł rowerowy", "uk": "велоточка", "zh_Hant": "單車節點", - "ko": "자전거 노드" + "ko": "자전거 노드", + "cy": "nod seiclo" }, "snapToLayer": [ "cycleways_and_roads" diff --git a/assets/themes/cyclestreets/cyclestreets.json b/assets/themes/cyclestreets/cyclestreets.json index 9b0682b9d..bde4d6a80 100644 --- a/assets/themes/cyclestreets/cyclestreets.json +++ b/assets/themes/cyclestreets/cyclestreets.json @@ -207,7 +207,8 @@ "cs": "Všechny ulice", "pl": "Wszystkie ulice", "zh_Hant": "所有道路", - "ko": "모든 도로" + "ko": "모든 도로", + "cy": "Pob stryd" }, "allowSplit": true, "description": { @@ -257,7 +258,8 @@ "eu": "Kalea", "pl": "Ulica", "zh_Hant": "街道", - "ko": "도로" + "ko": "도로", + "cy": "Stryd" }, "mappings": [ { diff --git a/assets/themes/disaster_response/disaster_response.json b/assets/themes/disaster_response/disaster_response.json index 0dd3919bf..0ec5a66ed 100644 --- a/assets/themes/disaster_response/disaster_response.json +++ b/assets/themes/disaster_response/disaster_response.json @@ -12,7 +12,8 @@ "hu": "Katasztrófaelhárítás és sürgősségi szolgálatok", "uk": "Реагування на стихійні лиха та аварійні служби", "nl": "Rampbestrijding en hulpdiensten", - "ko": "재난 대비와 응급 상황 서비스" + "ko": "재난 대비와 응급 상황 서비스", + "zh_Hant": "救災與緊急服務" }, "description": { "en": "This map contains elements meant for disaster preparedness and response.", @@ -23,7 +24,8 @@ "cs": "Tato mapa obsahuje prvky určené pro připravenost na katastrofy a reakci na ně.", "uk": "Ця мапа містить обʼєкти, призначені для забезпечення готовності до стихійних лих та реагування на них.", "nl": "Deze kaart bevat elementen die bedoeld zijn voor rampbestrijding en -voorbereiding.", - "ko": "이 지도에는 재난에 대한 대비와 대응을 위한 요소들이 포함되어 있습니다." + "ko": "이 지도에는 재난에 대한 대비와 대응을 위한 요소들이 포함되어 있습니다.", + "zh_Hant": "這份地圖包含防災與救災的元素。" }, "icon": "./assets/themes/disaster_response/CivilDefence.svg", "socialImage": "./assets/themes/disaster_response/social.svg", diff --git a/assets/themes/drinking_water/drinking_water.json b/assets/themes/drinking_water/drinking_water.json index 629a366a4..0ebe74af1 100644 --- a/assets/themes/drinking_water/drinking_water.json +++ b/assets/themes/drinking_water/drinking_water.json @@ -18,7 +18,8 @@ "cs": "Pitná voda", "pl": "Woda pitna", "uk": "Питна вода", - "ko": "음용수" + "ko": "음용수", + "cy": "Dŵr Yfed" }, "description": { "en": "On this map, publicly accessible drinking water spots are shown and can be easily added", diff --git a/assets/themes/education/education.json b/assets/themes/education/education.json index 5573a045c..2ab396f7e 100644 --- a/assets/themes/education/education.json +++ b/assets/themes/education/education.json @@ -18,7 +18,8 @@ "ru": "Образование", "hu": "Oktatás", "uk": "Освіта", - "ko": "교육 기관" + "ko": "교육 기관", + "cy": "Addysg" }, "description": { "en": "On this map, you'll find information about all types of schools and education and can easily add more information", @@ -32,7 +33,8 @@ "pl": "Na tej mapie znajdziesz informacje o wszystkich typach szkół i edukacji, a także możesz łatwo dodać więcej informacji", "it": "In questa mappa troverai informazioni su tutti i tipi di scuole e istituti di istruzione e puoi aggiungere facilmente ulteriori informazioni", "uk": "На цій мапі ви знайдете інформацію про всі типи шкіл та заклади освіти, ви також зможете легко додати додаткову інформацію", - "ko": "이 지도에서는 모든 유형의 학교와 교육기관에 대한 정보를 확인할 수 있으며 추가 정보를 쉽게 추가 가능합니다" + "ko": "이 지도에서는 모든 유형의 학교와 교육기관에 대한 정보를 확인할 수 있으며 추가 정보를 쉽게 추가 가능합니다", + "zh_Hant": "在這份地圖上,你可以更容易找到所有類型的學校與教育設施,並且還有更多資訊" }, "icon": "./assets/layers/school/college.svg", "layers": [ diff --git a/assets/themes/elongated_coin/elongated_coin.json b/assets/themes/elongated_coin/elongated_coin.json index 2b8004aea..c43fe0200 100644 --- a/assets/themes/elongated_coin/elongated_coin.json +++ b/assets/themes/elongated_coin/elongated_coin.json @@ -10,7 +10,9 @@ "hu": "Kinyújtottérem-automaták", "uk": "Монетні преси", "nl": "Muntpersen", - "ko": "페니 프레스" + "ko": "페니 프레스", + "cy": "Gweisg Ceiniog", + "zh_Hant": "硬幣壓花" }, "description": { "en": "Find penny presses to create your own elongated coins.", @@ -21,7 +23,8 @@ "pl": "Znajdź prasy do groszy, aby stworzyć własne wydłużone monety.", "uk": "Знайдіть преси для монет, щоб створити власні витягнуті монети.", "nl": "Zoek muntpersen om uitgetrokken munten te maken.", - "ko": "나만의 길쭉한 동전을 만들 수 있는 페니 프레스 위치를 찾아보십시오." + "ko": "나만의 길쭉한 동전을 만들 수 있는 페니 프레스 위치를 찾아보십시오.", + "zh_Hant": "找硬幣壓花機來創建自己的壓花硬幣。" }, "icon": "./assets/themes/elongated_coin/penny.svg", "startZoom": 11, diff --git a/assets/themes/etymology/etymology.json b/assets/themes/etymology/etymology.json index b4a538d3d..1082e6adf 100644 --- a/assets/themes/etymology/etymology.json +++ b/assets/themes/etymology/etymology.json @@ -6,7 +6,7 @@ "de": "Etymologie - Wonach ist ein Ort benannt?", "it": "Etimologia - da cosa prende nome un luogo?", "ru": "Открытая этимологическая карта", - "zh_Hant": "開放詞源地圖", + "zh_Hant": "地名由來 - 取名是為了紀念誰?", "hu": "Etimológiai térkép – miről kapta a nevét ez a hely?", "fr": "Étymologie - d'où les lieux tirent leur nom ?", "ca": "Etimologia: com rep el nom un lloc?", @@ -64,7 +64,7 @@ "nl": "Straten zonder etymologische informatie", "de": "Straßen ohne Namensherkunft", "it": "Strade senza informazioni etimologiche", - "zh_Hant": "道路沒有詞源資訊", + "zh_Hant": "沒有名稱由來資訊的道路", "hu": "Etimológiai adat nélküli utcák", "fr": "Route sans origine étymologique", "es": "Calles sin información de etimología", @@ -98,7 +98,7 @@ "nl": "Parken en bossen zonder etymologische informatie", "de": "Parks und Waldflächen ohne Namensherkunft", "it": "Parchi e foreste senza informazioni etimologiche", - "zh_Hant": "公園與森哥沒有詞源資訊", + "zh_Hant": "沒有名稱由來資訊的公園與森林", "hu": "Etimológiai adat nélküli parkok és erdők", "fr": "Parcs et forêts sans origine étymologique", "es": "Parques y bosques sin información de etimología", @@ -143,7 +143,8 @@ "cs": "Vzdělávací instituce bez etymologických informací", "pl": "Instytucje edukacyjne bez informacji o etymologii", "uk": "Навчальні заклади без етимологічної інформації", - "ko": "어원 정보가 없는 교육 연구 시설" + "ko": "어원 정보가 없는 교육 연구 시설", + "zh_Hant": "沒有名稱由來資訊的教育機構" }, "minzoom": 18, "isCounted": false, @@ -181,7 +182,8 @@ "cs": "Kulturní místa bez etymologických informací", "pl": "Miejsca kulturowe bez informacji o etymologii", "uk": "Культурні місця без етимологічної інформації", - "ko": "어원 정보가 없는 문화 공간" + "ko": "어원 정보가 없는 문화 공간", + "zh_Hant": "沒有名稱由來資訊的文化性場館" }, "minzoom": 18, "isCounted": false, @@ -219,7 +221,8 @@ "cs": "Turistická místa bez etymologických informací", "pl": "Miejsca turystyczne bez informacji o etymologii", "uk": "Туристичні місця без інформації про етимологію", - "ko": "어원 정보가 없는 관광 시설" + "ko": "어원 정보가 없는 관광 시설", + "zh_Hant": "沒有名稱由來資訊的旅遊聖地" }, "minzoom": 18, "isCounted": false, @@ -256,7 +259,8 @@ "es": "Lugares de salud y sociales sin información de etimología", "pl": "Miejsca związane ze zdrowiem i społeczeństwem bez informacji o etymologii", "uk": "Медичні та соціальні заклади без етимологічної інформації", - "ko": "어원 정보가 없는 건강과 사회 복지 공간" + "ko": "어원 정보가 없는 건강과 사회 복지 공간", + "zh_Hant": "沒有名稱由來資訊的健康與社服場所" }, "minzoom": 18, "isCounted": false, @@ -292,7 +296,8 @@ "cs": "Sportovní místa bez etymologických informací", "pl": "Miejsca sportowe bez informacji o etymologii", "uk": "Спортивні місця без етимологічної інформації", - "ko": "어원 정보가 없는 운동 공간" + "ko": "어원 정보가 없는 운동 공간", + "zh_Hant": "沒有名稱由來資訊的運動場地" }, "minzoom": 18, "isCounted": false, @@ -320,7 +325,8 @@ "en": "Parks without etymology information", "de": "Parks ohne etymologische Angaben", "cs": "Parky bez etymologických informací", - "ko": "어원 정보가 없는 공원" + "ko": "어원 정보가 없는 공원", + "zh_Hant": "沒有名稱由來資訊的公園" }, "minzoom": 18, "isCounted": false, diff --git a/assets/themes/facadegardens/facadegardens.json b/assets/themes/facadegardens/facadegardens.json index 3a7ca0e2e..777d9f97e 100644 --- a/assets/themes/facadegardens/facadegardens.json +++ b/assets/themes/facadegardens/facadegardens.json @@ -31,7 +31,8 @@ "es": "<a href='https://nl.wikipedia.org/wiki/Geveltuin' target=_blank>Jardines de fachada</a>, fachadas verdes y árboles en la ciudad no solo traen paz y tranquilidad, sino también una ciudad más hermosa, una mayor biodiversidad, un efecto de enfriamiento y una mejor calidad del aire. <br/> Klimaan VZW y Mechelen Klimaatneutraal quieren mapear los jardines de fachada existentes y nuevos como un ejemplo para las personas que quieren construir su propio jardín o para los paseantes de la ciudad que aman la naturaleza.<br/>Más información sobre el proyecto en <a href='https://klimaan.be/' target=_blank>klimaan.be</a>.", "ca": "<a href='https://nl.wikipedia.org/wiki/Geveltuin' target=_blank>Els Jardins de façana</a>, façanes verdes i arbres de la ciutat no només aporten pau i tranquil·litat, sinó també una ciutat més bella , una major biodiversitat, un efecte de refredament i una millor qualitat de l'aire. <br/> Klimaan VZW i Mechelen Klimaatneutraal volen cartografiar els jardins de façana existents i nous com a exemple per a les persones que volen construir el seu propi jardí o per als excursionistes de la ciutat que estimen la natura.<br/>Més informació sobre el projecte a <a href ='https://klimaan.be/' target=_blank>klimaan.be</a>.", "pl": "<a href='https://nl.wikipedia.org/wiki/Geveltuin' target=_blank>Ogrody fasadowe</a>, zielone fasady i drzewa w mieście nie tylko zapewniają ciszę i spokój, ale także piękniejsze miasto, większą różnorodność biologiczną, efekt chłodzący i lepszą jakość powietrza. <br/> Klimaan VZW i Mechelen Klimaatneutraal chcą zmapować istniejące i nowe ogrody fasadowe jako przykład dla osób chcących zbudować własny ogród lub dla spacerowiczów kochających przyrodę.<br/>Więcej informacji o projekcie na <a href ='https://klimaan.be/' target=_blank>klimaan.be</a>.", - "ko": "<a href='https://nl.wikipedia.org/wiki/Geveltuin' target=_blank>벽면 녹화 정원</a>, 녹색 벽 및 도시 내 나무는 평화와 고요를 제공할 뿐만 아니라, 더 아름다운 도시, 더 큰 생물다양성, 냉각 효과, 그리고 더 나은 공기 질을 가져옵니다. <br/> Klimaan VZW와 Mechelen Klimaatneutraal은 사람들이 자신만의 정원을 만들고 싶어 하거나 자연을 사랑하는 도시 산책을 하는 사람들를 위해 기존 및 새로운 벽면 녹화 정원을 지도에 표시하려고 합니다.<br/>프로젝트에 대한 자세한 정보는 <a href='https://klimaan.be/' target=_blank>klimaan.be</a>에서 확인할 수 있습니다." + "ko": "<a href='https://nl.wikipedia.org/wiki/Geveltuin' target=_blank>벽면 녹화 정원</a>, 녹색 벽 및 도시 내 나무는 평화와 고요를 제공할 뿐만 아니라, 더 아름다운 도시, 더 큰 생물다양성, 냉각 효과, 그리고 더 나은 공기 질을 가져옵니다. <br/> Klimaan VZW와 Mechelen Klimaatneutraal은 사람들이 자신만의 정원을 만들고 싶어 하거나 자연을 사랑하는 도시 산책을 하는 사람들를 위해 기존 및 새로운 벽면 녹화 정원을 지도에 표시하려고 합니다.<br/>프로젝트에 대한 자세한 정보는 <a href='https://klimaan.be/' target=_blank>klimaan.be</a>에서 확인할 수 있습니다.", + "zh_Hant": "<a href='https://nl.wikipedia.org/wiki/Geveltuin' target=_blank>立面花園</a>,綠色植栽與樹林不只是帶來和平與平靜之外,也能妝點城市,增進生物多樣性,降低溫度以及改善空氣品質。 <br/> Klimaan VZW 以及 Mechelen Klimaatneutraal 想要繪製現存的立面花園,當作想要效法的人的範例,或是讓城市當中行人能夠更愛大自然。<br/><a href='https://klimaan.be/' target=_blank>專案頁面 klimaan.be</a> 有更多資訊。" }, "shortDescription": { "nl": "Deze kaart toont geveltuintjes met foto's en bruikbare info over oriëntatie, zonlicht en planttypes.", @@ -135,7 +136,8 @@ "ca": "Orientació: {direction} (on 0=N y 90=O)", "cs": "Orientace: {direction} (kde 0=N a 90=O)", "pl": "Orientacja: {direction} (gdzie 0=N i 90=E)", - "ko": "방향: {direction} (where 0=N and 90=O)" + "ko": "방향: {direction} (where 0=N and 90=O)", + "zh_Hant": "方位: {direction} (where 0=北 and 90=東)" }, "question": { "nl": "Hoe is de tuin georiënteerd?", @@ -150,7 +152,8 @@ "ca": "Quina és l'orientació del jardí?", "cs": "Jaká je orientace zahrady?", "pl": "Jaka jest orientacja ogrodu?", - "ko": "정원의 방향은 어디입니까?" + "ko": "정원의 방향은 어디입니까?", + "zh_Hant": "花園朝向那裡?" }, "freeform": { "type": "direction", @@ -181,7 +184,8 @@ "cs": "Zahrada je na přímém slunci", "ca": "El jardí està completament al sol", "pl": "Ogród jest w pełnym słońcu", - "ko": "정원은 햇볕이 잘 드는 곳에 있습니다" + "ko": "정원은 햇볕이 잘 드는 곳에 있습니다", + "zh_Hant": "花園陽光能全部照射" } }, { @@ -204,7 +208,8 @@ "cs": "Zahrada je v polostínu", "ca": "El jardí està parcialment a l'ombra", "pl": "Ogród jest częściowo w cieniu", - "ko": "정원은 부분적으로 그늘진 곳에 위치해 있습니다" + "ko": "정원은 부분적으로 그늘진 곳에 위치해 있습니다", + "zh_Hant": "花園有部分陰影遮蔭" } }, { @@ -227,7 +232,8 @@ "cs": "Zahrada je ve stínu", "ca": "El jardí està a l'ombra", "pl": "Ogród jest w cieniu", - "ko": "정원은 그늘진 곳에 위치해 있습니다" + "ko": "정원은 그늘진 곳에 위치해 있습니다", + "zh_Hant": "花園有陰影遮蔭" } } ], @@ -337,7 +343,8 @@ "cs": "Datum výstavby zahrady: {start_date}", "ca": "Data de construcció del jardí: {start_date}", "pl": "Data budowy ogrodu: {start_date}", - "ko": "정원 조성 날짜: {start_date}" + "ko": "정원 조성 날짜: {start_date}", + "zh_Hant": "花園的施工日期:{start_date}" }, "question": { "nl": "Wanneer werd de tuin aangelegd? (vul gewoon een jaartal in)", @@ -353,7 +360,8 @@ "cs": "Kdy byla zahrada postavena? (rok je postačující)", "ca": "Quan es va construir el jardí? (l'any és suficient)", "pl": "Kiedy powstał ogród? (rok wystarczy)", - "ko": "정원은 언제 조성되었나요? (연도만으로 충분합니다.)" + "ko": "정원은 언제 조성되었나요? (연도만으로 충분합니다.)", + "zh_Hant": "花園何時竣工?(一年足夠了)" }, "freeform": { "key": "start_date", @@ -384,7 +392,9 @@ "cs": "Jsou zde jedlé rostliny", "ca": "Hi han plantes comestibles", "pl": "Istnieją rośliny jadalne", - "ko": "식용 식물이 있습니다" + "ko": "식용 식물이 있습니다", + "cy": "Ceir planhigion bwytadwy", + "zh_Hant": "這些是可食用植物" } }, { @@ -407,7 +417,8 @@ "cs": "Nejsou zde jedlé rostliny", "ca": "No hi han plantes comestibles", "pl": "Nie ma roślin jadalnych", - "ko": "식용 식물이 없습니다" + "ko": "식용 식물이 없습니다", + "zh_Hant": "這裡沒有可食用植物" } } ], @@ -425,7 +436,8 @@ "cs": "Jsou zde jedlé rostliny?", "ca": "Hi ha alguna planta comestible?", "pl": "Czy są jakieś rośliny jadalne?", - "ko": "식용 가능 식물이 있습니까?" + "ko": "식용 가능 식물이 있습니까?", + "zh_Hant": "有任何可食用植物嗎?" } }, { @@ -463,7 +475,8 @@ "es": "Hay vides", "ca": "Hi ha vinyes", "pl": "Są winorośle", - "ko": "덩쿨 식물이 있습니다" + "ko": "덩쿨 식물이 있습니다", + "zh_Hant": "有藤蔓" } }, { @@ -481,7 +494,9 @@ "es": "Hay plantas con flores", "ca": "Hi ha plantes amb flors", "pl": "Są rośliny kwitnące", - "ko": "꽃이 피는 식물이 있습니다" + "ko": "꽃이 피는 식물이 있습니다", + "cy": "Ceir planhigion blodeuog", + "zh_Hant": "這裡有開花植物" } }, { @@ -499,7 +514,8 @@ "ca": "Hi ha arbustos", "cs": "Jsou zde keře", "pl": "Są krzewy", - "ko": "관목이 있습니다" + "ko": "관목이 있습니다", + "zh_Hant": "這裡有灌木" } }, { @@ -540,7 +556,9 @@ "ca": "Més detalls: {description}", "cs": "Další podrobnosti: {description}", "pl": "Więcej szczegółów: {description}", - "ko": "세부 정보: {description}" + "ko": "세부 정보: {description}", + "cy": "Rhagor o fanylion: {description}", + "zh_Hant": "更多細節:{description}" }, "question": { "nl": "Aanvullende omschrijving van de tuin (indien nodig, en voor zover nog niet omschreven hierboven)", @@ -557,7 +575,8 @@ "cs": "Další popisné informace o zahradě (pokud jsou potřeba a nejsou popsány výše)", "ca": "Informació descriptiva complementària sobre el jardí (si és necesaria y no està encara descrit dalt)", "pl": "Dodatkowe informacje opisujące ogród (jeśli są potrzebne i nie zostały jeszcze opisane powyżej)", - "ko": "정원에 대한 추가 설명 정보(필요한 경우 혹은 위에서 설명되지 않은 내용)" + "ko": "정원에 대한 추가 설명 정보(필요한 경우 혹은 위에서 설명되지 않은 내용)", + "zh_Hant": "更多花園的資訊 (如果需要而且以上還沒有敘述的話)" }, "freeform": { "key": "description", @@ -589,7 +608,8 @@ "da": "en facadehave", "cs": "fasádní zahrada", "pl": "ogród fasadowy", - "ko": "벽면 녹화 정원" + "ko": "벽면 녹화 정원", + "zh_Hant": "立面花園" }, "description": { "nl": "Voeg geveltuintje toe", @@ -605,7 +625,8 @@ "da": "Tilføj en facadehave", "cs": "Přidat fasádní zahradu", "pl": "Dodaj ogród fasadowy", - "ko": "벽면 녹화 정원을 추가하십시오" + "ko": "벽면 녹화 정원을 추가하십시오", + "zh_Hant": "新增立面花園" } } ], diff --git a/assets/themes/food/food.json b/assets/themes/food/food.json index 08ed1e0b2..54e3ea2e6 100644 --- a/assets/themes/food/food.json +++ b/assets/themes/food/food.json @@ -16,7 +16,8 @@ "ru": "Общественное питание", "pl": "Restauracje i fast foody", "uk": "Ресторани та фаст-фуд", - "ko": "식당과 패스트푸드점" + "ko": "식당과 패스트푸드점", + "cy": "Bwytai a bwyd brys" }, "description": { "nl": "Restaurants en fastfood", @@ -32,7 +33,8 @@ "it": "Ristoranti e fast food", "uk": "Ресторани та фаст-фуд", "ko": "식당과 패스트푸드점", - "zh_Hant": "餐廳與速食餐廳" + "zh_Hant": "餐廳與快餐店", + "cy": "Bwytai a bwyd brys" }, "icon": "./assets/layers/food/restaurant.svg", "layers": [ diff --git a/assets/themes/glutenfree/glutenfree.json b/assets/themes/glutenfree/glutenfree.json index 07d5824dd..8cb6b8bc0 100644 --- a/assets/themes/glutenfree/glutenfree.json +++ b/assets/themes/glutenfree/glutenfree.json @@ -12,7 +12,8 @@ "uk": "Без глютену", "fr": "Sans gluten", "nl": "Glutenvrij", - "ko": "글루텐프리" + "ko": "글루텐프리", + "zh_Hant": "無麩質飲食" }, "description": { "en": "A crowdsourced map with glutenfree items", diff --git a/assets/themes/guideposts/guideposts.json b/assets/themes/guideposts/guideposts.json index 16094c455..84833a42c 100644 --- a/assets/themes/guideposts/guideposts.json +++ b/assets/themes/guideposts/guideposts.json @@ -10,7 +10,8 @@ "ru": "Указатели", "uk": "Вказівники", "nl": "Wegwijzers", - "ko": "표지판" + "ko": "표지판", + "zh_Hant": "指示牌" }, "description": { "en": "Guideposts (also known as fingerposts or finger posts) are often found along official hiking, cycling, skiing or horseback riding routes to indicate the directions to different destinations. Additionally, they are often named after a region or place and show the altitude.\n\nThe position of a signpost can be used by a hiker/biker/rider/skier as a confirmation of the current position, especially if they use a printed map without a GPS receiver. ", diff --git a/assets/themes/hailhydrant/hailhydrant.json b/assets/themes/hailhydrant/hailhydrant.json index 555ed8558..7cdf5dad7 100644 --- a/assets/themes/hailhydrant/hailhydrant.json +++ b/assets/themes/hailhydrant/hailhydrant.json @@ -22,7 +22,7 @@ "description": { "en": "On this map you can find and update hydrants, fire stations, ambulance stations, and extinguishers in your favorite neighborhoods.", "ja": "このマップでは、お気に入りの近隣にある消火栓、消防署、救急ステーション、消火器を検索して更新できます。\n\n正確な位置を追跡し(モバイルのみ)、左下コーナーで関連するレイヤを選択できます。このツールを使用して、マップにピン(注視点)を追加または編集したり、利用可能な質問に答えることによって追加の詳細を提供することもできます。\n\nすべての変更は自動的にOpenStreetMapのグローバルデータベースに保存され、他のユーザが自由に再利用できます。", - "zh_Hant": "在這份地圖上面你可以在你喜愛的社區尋找與更新消防栓、消防隊、急救站與滅火器。\n\n你可以追蹤確切位置 (只有行動版) 以及在左下角選擇與你相關的圖層。你也可以使用這工具新增或編輯地圖上的釘子 (興趣點),以及透過回答一些問題提供額外的資訊。\n\n所有你做出的變動都會自動存到開放街圖這個全球資料庫,而且能自由讓其他人取用。", + "zh_Hant": "在這份地圖上面你可以在你喜愛的社區尋找與更新消防栓、消防隊、急救站與滅火器。", "fr": "Sur cette carte on trouve et met à jour les bornes incendies, extincteurs, casernes de pompiers et ambulanciers dans son quartier.", "de": "Auf dieser Karte können Sie Hydranten, Feuerwachen, Krankenwagen und Feuerlöscher in Ihren bevorzugten Stadtvierteln finden und aktualisieren.", "it": "In questa cartina puoi vedere e aggiornare idranti, stazioni dei pompieri, stazioni delle ambulanze ed estintori del tuo quartiere preferito.", diff --git a/assets/themes/healthcare/healthcare.json b/assets/themes/healthcare/healthcare.json index fc093cab6..07861c894 100644 --- a/assets/themes/healthcare/healthcare.json +++ b/assets/themes/healthcare/healthcare.json @@ -18,7 +18,8 @@ "it": "Assistenza sanitaria", "hu": "Egészségügy", "uk": "Охорона здоров'я", - "ko": "의료" + "ko": "의료", + "cy": "Gofal Iechyd" }, "description": { "en": "On this map, various healthcare related items are shown", @@ -66,7 +67,8 @@ "fr": "un commerce d'équipements médicaux", "pl": "sklep z artykułami medycznymi", "it": "un negozio di forniture mediche", - "ko": "의료 용품 상점" + "ko": "의료 용품 상점", + "zh_Hant": "醫療設備商家" }, "tags": [ "shop=medical_supply" @@ -83,7 +85,9 @@ "fr": "un magasin d'appareils auditifs", "pl": "sklep z aparatami słuchowymi", "it": "un negozio di apparecchi acustici", - "ko": "보청기 상점" + "ko": "보청기 상점", + "cy": "siop gymorth clyw", + "zh_Hant": "助聽器商家" }, "tags": [ "shop=hearing_aids" @@ -101,7 +105,8 @@ "pl": "optyk", "zh_Hant": "配鏡師", "it": "un ottico", - "ko": "안경점" + "ko": "안경점", + "cy": "optegydd" }, "tags": [ "shop=optician" diff --git a/assets/themes/hotels/hotels.json b/assets/themes/hotels/hotels.json index 133e3e7b9..07948dbb8 100644 --- a/assets/themes/hotels/hotels.json +++ b/assets/themes/hotels/hotels.json @@ -18,7 +18,8 @@ "ru": "Гостиницы", "hu": "Szállodák", "uk": "Готелі", - "ko": "호텔" + "ko": "호텔", + "cy": "Gwestai" }, "description": { "en": "On this map, you'll find hotels in your area", diff --git a/assets/themes/icecream/icecream.json b/assets/themes/icecream/icecream.json index a7d1d7087..eea842f37 100644 --- a/assets/themes/icecream/icecream.json +++ b/assets/themes/icecream/icecream.json @@ -13,7 +13,8 @@ "uk": "Морозиво", "fr": "Glace", "nl": "IJs", - "ko": "아이스크림" + "ko": "아이스크림", + "cy": "Hufen Iâ" }, "description": { "en": "A map showing ice cream parlors and ice cream vending machines", diff --git a/assets/themes/indoors/indoors.json b/assets/themes/indoors/indoors.json index 23659fb7c..bfe0d9d1f 100644 --- a/assets/themes/indoors/indoors.json +++ b/assets/themes/indoors/indoors.json @@ -18,7 +18,8 @@ "ru": "Внутри помещений", "hu": "Beltéri létesítmények", "uk": "Плани приміщень", - "ko": "실내" + "ko": "실내", + "cy": "Dan Do" }, "description": { "en": "On this map, publicly accessible indoor places are shown", diff --git a/assets/themes/kerbs_and_crossings/kerbs_and_crossings.json b/assets/themes/kerbs_and_crossings/kerbs_and_crossings.json index 60120f89d..50f1f8090 100644 --- a/assets/themes/kerbs_and_crossings/kerbs_and_crossings.json +++ b/assets/themes/kerbs_and_crossings/kerbs_and_crossings.json @@ -14,7 +14,8 @@ "pl": "Krawężniki i przejścia", "hu": "Járdaszegélyek és gyalogosátkelők", "uk": "Бордюри та переходи", - "ko": "보도 경계석 그리고 횡단보도" + "ko": "보도 경계석 그리고 횡단보도", + "cy": "Cyrbiau a chroesfannau" }, "description": { "en": "A map showing kerbs and crossings.", @@ -66,7 +67,8 @@ "cs": "křížení", "pl": "przejście", "it": "un incrocio", - "ko": "횡단보도" + "ko": "횡단보도", + "cy": "croesfan" }, "tags": [ "highway=crossing" diff --git a/assets/themes/maps/maps.json b/assets/themes/maps/maps.json index 07eb7c9bf..b9359162d 100644 --- a/assets/themes/maps/maps.json +++ b/assets/themes/maps/maps.json @@ -17,7 +17,8 @@ "pl": "Mapa map", "hu": "Térképek térképe", "uk": "Мапа мап", - "ko": "모든 지도가 포함된 지도" + "ko": "모든 지도가 포함된 지도", + "cy": "Map o fapiau" }, "description": { "en": "On this map you can find all maps OpenStreetMap knows - typically a big map on an information board showing the area, city or region, e.g. a tourist map on the back of a billboard, a map of a nature reserve, a map of cycling networks in the region, ...) <br/><br/>If a map is missing, you can easily map this map on OpenStreetMap.", diff --git a/assets/themes/notes/notes.json b/assets/themes/notes/notes.json index 7bbd3655c..529278f3e 100644 --- a/assets/themes/notes/notes.json +++ b/assets/themes/notes/notes.json @@ -15,7 +15,8 @@ "pl": "Notatki na OpenStreetMap", "ru": "Заметки в OpenStreetMap", "uk": "Нотатки OpenStreetMap", - "ko": "OpenStreetMap의 노트" + "ko": "OpenStreetMap의 노트", + "cy": "Nodiadau ar OpenStreetMap" }, "description": { "en": "A note is a pin on the map with some text to indicate something wrong.<br/><br/>Make sure to checkout the <a href='#filters'>filter view</a> to search for users and text.", diff --git a/package-lock.json b/package-lock.json index a0b78c88d..7fd73284a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12749,9 +12749,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001699", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001699.tgz", - "integrity": "sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==", + "version": "1.0.30001702", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz", + "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==", "dev": true, "funding": [ { @@ -39188,9 +39188,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001699", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001699.tgz", - "integrity": "sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==", + "version": "1.0.30001702", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz", + "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==", "dev": true }, "canonicalize": { diff --git a/scripts/generateDocs.ts b/scripts/generateDocs.ts index 63da5399f..af268b27b 100644 --- a/scripts/generateDocs.ts +++ b/scripts/generateDocs.ts @@ -494,7 +494,7 @@ export class GenerateDocs extends Script { MarkdownUtils.list(theme.language.filter((ln) => ln !== "_context")), "# Layers defined in this theme configuration file", "These layers can not be reused in different themes.", - ...layersToInline.map((l) => l.generateDocumentation(null)) + ...layersToInline.map((l) => l.generateDocumentation(null)), ].join("\n") this.WriteMarkdownFile( "./Docs/Themes/" + theme.id + ".md", diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts index 1b76b5223..d3f4dd4f9 100644 --- a/scripts/generateLayerOverview.ts +++ b/scripts/generateLayerOverview.ts @@ -9,12 +9,16 @@ import { DoesImageExist, PrevalidateTheme, ValidateLayer, - ValidateThemeEnsemble + ValidateThemeEnsemble, } from "../src/Models/ThemeConfig/Conversion/Validation" import { Translation } from "../src/UI/i18n/Translation" import { PrepareLayer } from "../src/Models/ThemeConfig/Conversion/PrepareLayer" import { PrepareTheme } from "../src/Models/ThemeConfig/Conversion/PrepareTheme" -import { Conversion, DesugaringContext, DesugaringStep } from "../src/Models/ThemeConfig/Conversion/Conversion" +import { + Conversion, + DesugaringContext, + DesugaringStep, +} from "../src/Models/ThemeConfig/Conversion/Conversion" import { Utils } from "../src/Utils" import Script from "./Script" import { AllSharedLayers } from "../src/Customizations/AllSharedLayers" @@ -283,9 +287,9 @@ class LayerOverviewUtils extends Script { | LayerConfigJson | string | { - builtin - } - )[] + builtin + } + )[] }[], sharedLayers: Map<string, LayerConfigJson> ) { @@ -316,8 +320,8 @@ class LayerOverviewUtils extends Script { keywords, layers: (<LayerConfigJson[]>theme.layers) .filter((l) => sharedLayers.has(l.id)) - .filter(l => l.minzoom < 17) - .map((l) => l.id) + .filter((l) => l.minzoom < 17) + .map((l) => l.id), } perId.set(data.id, data) } @@ -392,10 +396,10 @@ class LayerOverviewUtils extends Script { tagRenderings: bootstrapTagRenderings, tagRenderingOrder: bootstrapTagRenderingsOrder, sharedLayers: null, - publicLayers: null + publicLayers: null, }, { - addTagRenderingsToContext: true + addTagRenderingsToContext: true, } ) @@ -431,7 +435,7 @@ class LayerOverviewUtils extends Script { "src/assets/SocialImageBanner.svg", "src/assets/SocialImageRepo.svg", "src/assets/svg/osm-logo.svg", - "src/assets/templates/*" + "src/assets/templates/*", ] for (const path of allSvgs) { if ( @@ -456,8 +460,8 @@ class LayerOverviewUtils extends Script { if (contents.indexOf("<text") > 0) { console.warn( "The SVG at " + - path + - " contains a `text`-tag. This is highly discouraged. Every machine viewing your theme has their own font libary, and the font you choose might not be present, resulting in a different font being rendered. Solution: open your .svg in inkscape (or another program), select the text and convert it to a path" + path + + " contains a `text`-tag. This is highly discouraged. Every machine viewing your theme has their own font libary, and the font you choose might not be present, resulting in a different font being rendered. Solution: open your .svg in inkscape (or another program), select the text and convert it to a path" ) errCount++ } @@ -529,7 +533,7 @@ class LayerOverviewUtils extends Script { JSON.stringify({ layers: Array.from(sharedLayers.values()).filter( (l) => !(l["#no-index"] === "yes") - ) + ), }) ) } @@ -546,11 +550,11 @@ class LayerOverviewUtils extends Script { // mapcomplete-changes shows an icon for each corresponding mapcomplete-theme const iconsPerTheme = Array.from(sharedThemes.values()).map((th) => ({ if: "theme=" + th.id, - then: th.icon + then: th.icon, })) const proto: ThemeConfigJson = JSON.parse( readFileSync("./assets/themes/mapcomplete-changes/mapcomplete-changes.proto.json", { - encoding: "utf8" + encoding: "utf8", }) ) const protolayer = <LayerConfigJson>( @@ -566,7 +570,7 @@ class LayerOverviewUtils extends Script { new DetectDuplicateFilters().convertStrict( { layers: ScriptUtils.getLayerFiles().map((f) => f.parsed), - themes: ScriptUtils.getThemeFiles().map((f) => f.parsed) + themes: ScriptUtils.getThemeFiles().map((f) => f.parsed), }, ConversionContext.construct([], []) ) @@ -614,7 +618,7 @@ class LayerOverviewUtils extends Script { const state: DesugaringContext = { tagRenderings: LayerOverviewUtils.asDict(sharedTagRenderings), tagRenderingOrder: sharedTagRenderings.map((tr) => tr.id), - sharedLayers: AllSharedLayers.getSharedLayersConfigs() + sharedLayers: AllSharedLayers.getSharedLayersConfigs(), } const sharedLayers = new Map<string, LayerConfigJson>() const prepLayer = new PrepareLayer(state) @@ -659,12 +663,12 @@ class LayerOverviewUtils extends Script { console.log( "Recompiled layers " + - recompiledLayers.join(", ") + - " and skipped " + - skippedLayers.length + - " layers. Detected " + - warningCount + - " warnings" + recompiledLayers.join(", ") + + " and skipped " + + skippedLayers.length + + " layers. Detected " + + warningCount + + " warnings" ) // We always need the calculated tags of 'usersettings', so we export them separately this.extractJavascriptCodeForLayer( @@ -686,11 +690,11 @@ class LayerOverviewUtils extends Script { private extractJavascriptCode(themeFile: ThemeConfigJson) { const allCode = [ "import {Feature} from 'geojson'", - "import { ExtraFuncType } from \"../../../Logic/ExtraFunctions\";", - "import { Utils } from \"../../../Utils\"", + 'import { ExtraFuncType } from "../../../Logic/ExtraFunctions";', + 'import { Utils } from "../../../Utils"', "export class ThemeMetaTagging {", " public static readonly themeName = " + JSON.stringify(themeFile.id), - "" + "", ] for (const layer of themeFile.layers) { const l = <LayerConfigJson>layer @@ -699,8 +703,8 @@ class LayerOverviewUtils extends Script { allCode.push( " public metaTaggging_for_" + - id + - "(feat: Feature, helperFunctions: Record<ExtraFuncType, (feature: Feature) => Function>) {" + id + + "(feat: Feature, helperFunctions: Record<ExtraFuncType, (feature: Feature) => Function>) {" ) allCode.push(" const {" + ExtraFunctions.types.join(", ") + "} = helperFunctions") for (const line of code) { @@ -711,10 +715,10 @@ class LayerOverviewUtils extends Script { if (!isStrict) { allCode.push( " Utils.AddLazyProperty(feat.properties, '" + - attributeName + - "', () => " + - expression + - " ) " + attributeName + + "', () => " + + expression + + " ) " ) } else { attributeName = attributeName.substring(0, attributeName.length - 1).trim() @@ -754,7 +758,7 @@ class LayerOverviewUtils extends Script { `/** This code is autogenerated - do not edit. Edit ./assets/layers/${l?.id}/${l?.id}.json instead */`, "export class ThemeMetaTagging {", " public static readonly themeName = " + JSON.stringify(l.id), - "" + "", ] const code = l.calculatedTags ?? [] @@ -769,10 +773,10 @@ class LayerOverviewUtils extends Script { if (!isStrict) { allCode.push( " Utils.AddLazyProperty(feat.properties, '" + - attributeName + - "', () => " + - expression + - " ) " + attributeName + + "', () => " + + expression + + " ) " ) } else { attributeName = attributeName.substring(0, attributeName.length - 2).trim() @@ -813,7 +817,7 @@ class LayerOverviewUtils extends Script { sharedLayers, tagRenderings: LayerOverviewUtils.asDict(trs), tagRenderingOrder: trs.map((tr) => tr.id), - publicLayers + publicLayers, } const knownTagRenderings = new Set<string>() convertState.tagRenderings.forEach((_, key) => knownTagRenderings.add(key)) @@ -870,7 +874,7 @@ class LayerOverviewUtils extends Script { ) try { themeFile = new PrepareTheme(convertState, { - skipDefaultLayers: true + skipDefaultLayers: true, }).convertStrict( themeFile, ConversionContext.construct([themePath], ["PrepareLayer"]) @@ -919,7 +923,7 @@ class LayerOverviewUtils extends Script { const e: string = [ `the icon for theme ${themeFile.id} is too small. Please rescale the icon at ${themeFile.icon}`, `Even though an SVG is 'infinitely scaleable', the icon should be dimensioned bigger. One of the build steps of the theme does convert the image to a PNG (to serve as PWA-icon) and having a small dimension will cause blurry images.`, - ` Width = ${width} height = ${height}; we recommend a size of at least 500px * 500px and to use a square aspect ratio.` + ` Width = ${width} height = ${height}; we recommend a size of at least 500px * 500px and to use a square aspect ratio.`, ].join("\n") err(e) } @@ -956,7 +960,7 @@ class LayerOverviewUtils extends Script { hideFromOverview: t.hideFromOverview ?? false, shortDescription: t.shortDescription ?? new Translation(t.description).FirstSentence(), - mustHaveLanguage: t.mustHaveLanguage?.length > 0 + mustHaveLanguage: t.mustHaveLanguage?.length > 0, } }), sharedLayers @@ -965,10 +969,10 @@ class LayerOverviewUtils extends Script { console.log( "Recompiled themes " + - recompiledThemes.join(", ") + - " and skipped " + - skippedThemes.length + - " themes" + recompiledThemes.join(", ") + + " and skipped " + + skippedThemes.length + + " themes" ) return fixed diff --git a/scripts/generateLayouts.ts b/scripts/generateLayouts.ts index b6aa9c097..79a7469aa 100644 --- a/scripts/generateLayouts.ts +++ b/scripts/generateLayouts.ts @@ -107,9 +107,9 @@ class GenerateLayouts extends Script { if (!layout.icon.endsWith(".svg")) { console.warn( "Not creating a social image for " + - layout.id + - " as it is _not_ a .svg: " + - layout.icon + layout.id + + " as it is _not_ a .svg: " + + layout.icon ) return undefined } @@ -142,9 +142,9 @@ class GenerateLayouts extends Script { id: "icon", transform: `translate(${cx - r},${cy - r}) scale(${ (r * 2) / Number(width) - }) ` + }) `, }, - g: [svg] + g: [svg], } }, (mightBeTokenToReplace) => { @@ -205,19 +205,19 @@ class GenerateLayouts extends Script { icons.push({ src: name, sizes: size + "x" + size, - type: "image/png" + type: "image/png", }) } icons.push({ src: path, sizes: "513x513", - type: "image/svg" + type: "image/svg", }) } else if (icon.endsWith(".png")) { icons.push({ src: icon, sizes: "513x513", - type: "image/png" + type: "image/png", }) } else { console.log(icon) @@ -236,11 +236,11 @@ class GenerateLayouts extends Script { description: ogDescr, orientation: "portrait-primary, landscape-primary", icons: icons, - categories: ["map", "navigation"] + categories: ["map", "navigation"], } return { manifest, - whiteIcons + whiteIcons, } } @@ -251,7 +251,7 @@ class GenerateLayouts extends Script { if (lang === "_context") { continue } - let display = " style=\"display: none\"" + let display = ' style="display: none"' if (!defaultSet) { display = "" defaultSet = true @@ -272,7 +272,7 @@ class GenerateLayouts extends Script { ...eli.features, bing, ...eli_global.map((properties) => ({ properties })), - ...layers_global.layers.map((properties) => ({ properties })) + ...layers_global.layers.map((properties) => ({ properties })), ] for (const feature of rasterLayers) { const f = <RasterLayerPolygon>feature @@ -293,7 +293,7 @@ class GenerateLayouts extends Script { url = url.substring("pmtiles://".length) } const styleSpec = await Utils.downloadJsonCached(url, 1000 * 120, { - Origin: "https://mapcomplete.org" + Origin: "https://mapcomplete.org", }) urls.push(...(f.properties["connect-src"] ?? [])) for (const key of Object.keys(styleSpec?.["sources"] ?? {})) { @@ -309,7 +309,7 @@ class GenerateLayouts extends Script { urls.push(url) if (urlClipped.endsWith(".json")) { const tileInfo = await Utils.downloadJsonCached(url, 1000 * 120, { - Origin: "https://mapcomplete.org" + Origin: "https://mapcomplete.org", }) urls.push(tileInfo["tiles"] ?? []) } @@ -338,7 +338,7 @@ class GenerateLayouts extends Script { "https://api.panoramax.xyz", "https://panoramax.mapcomplete.org", "https://data.velopark.be", - "https://data.mapcomplete.org" + "https://data.mapcomplete.org", ].concat(...(await this.eliUrls())) SpecialVisualizations.specialVisualizations.forEach((sv) => { @@ -433,17 +433,15 @@ class GenerateLayouts extends Script { "script-src": [ "'self'", "https://gc.zgo.at/count.js", - ...(options?.scriptSrcs?.map((s) => "'" + s + "'") ?? []) + ...(options?.scriptSrcs?.map((s) => "'" + s + "'") ?? []), ].join(" "), - "connect-src": "'self' " + connectSrc.join(" ") + "connect-src": "'self' " + connectSrc.join(" "), } const content = Object.keys(csp) .map((k) => k + " " + csp[k]) .join(" ; ") - return [ - `<meta http-equiv="Content-Security-Policy" content="${content}">` - ].join("\n") + return [`<meta http-equiv="Content-Security-Policy" content="${content}">`].join("\n") } async createLandingPage( @@ -454,12 +452,12 @@ class GenerateLayouts extends Script { ) { Locale.language.setData(layout.language[0]) const targetLanguage = layout.language[0] - const ogTitle = Translations.T(layout.title).textFor(targetLanguage).replace(/"/g, "\\\"") + const ogTitle = Translations.T(layout.title).textFor(targetLanguage).replace(/"/g, '\\"') const ogDescr = Translations.T( layout.shortDescription ?? "Easily add and edit geodata with OpenStreetMap" ) .textFor(targetLanguage) - .replace(/"/g, "\\\"") + .replace(/"/g, '\\"') let ogImage = layout.socialImage let twitterImage = ogImage if (ogImage === ThemeConfig.defaultSocialImage && layout.official) { @@ -530,7 +528,7 @@ class GenerateLayouts extends Script { og, customCss, `<link rel="icon" href="${icon}" sizes="any" type="image/svg+xml">`, - ...apple_icons + ...apple_icons, ].join("\n") let branchname = await this.getBranchName() @@ -553,7 +551,7 @@ class GenerateLayouts extends Script { .replace( /<!-- CSP -->/, await this.generateCsp(layout, layoutJson, { - scriptSrcs: [this.removeOtherLanguagesHash] + scriptSrcs: [this.removeOtherLanguagesHash], }) ) .replace( @@ -584,7 +582,7 @@ class GenerateLayouts extends Script { const imports = [ `import theme from "./public/assets/generated/themes/${theme.id}.json"`, - `import { ThemeMetaTagging } from "./src/assets/generated/metatagging/${theme.id}"` + `import { ThemeMetaTagging } from "./src/assets/generated/metatagging/${theme.id}"`, ] for (const layerName of Constants.added_by_default) { imports.push( @@ -631,7 +629,7 @@ class GenerateLayouts extends Script { "account", "openstreetmap", "custom", - "theme" + "theme", ] const args = process.argv const theme = args[2] @@ -682,7 +680,7 @@ class GenerateLayouts extends Script { startLon: 0, startZoom: 0, title: { en: "MapComplete" }, - description: { en: "A thematic map viewer and editor based on OpenStreetMap" } + description: { en: "A thematic map viewer and editor based on OpenStreetMap" }, }), alreadyWritten ) diff --git a/scripts/generateReviewsAnalysis.ts b/scripts/generateReviewsAnalysis.ts index 94663c450..7bdd291fd 100644 --- a/scripts/generateReviewsAnalysis.ts +++ b/scripts/generateReviewsAnalysis.ts @@ -60,7 +60,7 @@ export default class GenerateReviewsAnalysis extends Script { geojsonFeatures.push({ geometry: { type: "Point", - coordinates: [lon, lat] + coordinates: [lon, lat], }, type: "Feature", properties: { @@ -69,8 +69,8 @@ export default class GenerateReviewsAnalysis extends Script { opinion: review.opinion, client: review.metadata.client_id, nickname: review.metadata.nickname, - affiliated: "" + review.metadata.is_affiliated - } + affiliated: "" + review.metadata.is_affiliated, + }, }) } catch (e) { console.error(e) @@ -78,8 +78,13 @@ export default class GenerateReviewsAnalysis extends Script { } console.log("Total number of reviews", reviews.length) - - const aliases = ["mapcomplete.osm.be", "pietervdvn.github.io", "dev.mapcomplete.org", "127.0.0.1:1234", "localhost:1234"] + const aliases = [ + "mapcomplete.osm.be", + "pietervdvn.github.io", + "dev.mapcomplete.org", + "127.0.0.1:1234", + "localhost:1234", + ] for (const alias of aliases) { clientWebsites["mapcomplete.org"] += clientWebsites[alias] delete clientWebsites[alias] @@ -90,7 +95,7 @@ export default class GenerateReviewsAnalysis extends Script { this.print("language", languageHist) const fc: FeatureCollection = { type: "FeatureCollection", - features: geojsonFeatures + features: geojsonFeatures, } const fcmc: FeatureCollection = { @@ -99,7 +104,7 @@ export default class GenerateReviewsAnalysis extends Script { (f) => f.properties.client.indexOf("mapcomplete") >= 0 || f.properties.client.indexOf("pietervdvn.github.io") >= 0 - ) + ), } if (!fs.existsSync("./reviews-analysis")) { fs.mkdirSync("./reviews-analysis") @@ -163,10 +168,10 @@ export default class GenerateReviewsAnalysis extends Script { "rating", "opinion", "images", - "metadata" + "metadata", ] return new Promise<Review[]>((resolve) => { - const parser = parse({ delimiter: "," }, function(err, data) { + const parser = parse({ delimiter: "," }, function (err, data) { const asJson: Review[] = [] for (let i = 1; i < data.length; i++) { const line = data[i] diff --git a/scripts/generateStats.ts b/scripts/generateStats.ts index 0a3acb430..9f570ea10 100644 --- a/scripts/generateStats.ts +++ b/scripts/generateStats.ts @@ -156,7 +156,12 @@ class GenerateStats extends Script { ) const batchSize = 50 for (let i = 0; i < allBrandNames.length; i += batchSize) { - console.warn("Downloading ", batchSize, "occurence counts, items: ", i + "/" + allBrandNames.length) + console.warn( + "Downloading ", + batchSize, + "occurence counts, items: ", + i + "/" + allBrandNames.length + ) let downloaded = 0 await Promise.all( Utils.TimesT(batchSize, async (j) => { diff --git a/scripts/generateTaginfoProjectFiles.ts b/scripts/generateTaginfoProjectFiles.ts index ee7a9652c..81642c915 100644 --- a/scripts/generateTaginfoProjectFiles.ts +++ b/scripts/generateTaginfoProjectFiles.ts @@ -155,7 +155,8 @@ function generateTagInfoEntry(layout: ThemeConfig): any { name: "MapComplete " + layout.title.txt, // name of the project (required) description: layout.shortDescription.txt, // short description of the project (required) project_url: "https://mapcomplete.org/" + layout.id, // home page of the project with general information (required) - doc_url: "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Themes", // documentation of the project and especially the tags used (optional) + doc_url: + "https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Themes", // documentation of the project and especially the tags used (optional) icon_url: "https://mapcomplete.org/" + icon, // project logo, should work in 16x16 pixels on white and light gray backgrounds (optional) contact_name: "Pieter Vander Vennet", // contact name, needed for taginfo maintainer (required) contact_email: "pietervdvn@posteo.net", // contact email, needed for taginfo maintainer (required) diff --git a/src/Logic/GeoOperations.ts b/src/Logic/GeoOperations.ts index d520e0faf..71e0ff211 100644 --- a/src/Logic/GeoOperations.ts +++ b/src/Logic/GeoOperations.ts @@ -14,7 +14,6 @@ import { } from "geojson" import { Tiles } from "../Models/TileRange" import { Utils } from "../Utils" - ;("use strict") export class GeoOperations { diff --git a/src/Logic/Search/ThemeSearch.ts b/src/Logic/Search/ThemeSearch.ts index 9bf6bf827..f196031bb 100644 --- a/src/Logic/Search/ThemeSearch.ts +++ b/src/Logic/Search/ThemeSearch.ts @@ -9,13 +9,15 @@ import Constants from "../../Models/Constants" import Locale from "../../UI/i18n/Locale" import { Utils } from "../../Utils" - export class ThemeSearchIndex { - private readonly themeIndex: Fuse<MinimalThemeInformation> - private readonly layerIndex: Fuse<{ id: string, description }> + private readonly layerIndex: Fuse<{ id: string; description }> - constructor(language: string, themesToSearch?: MinimalThemeInformation[], layersToIgnore: string[] = []) { + constructor( + language: string, + themesToSearch?: MinimalThemeInformation[], + layersToIgnore: string[] = [] + ) { const themes = Utils.NoNull(themesToSearch ?? ThemeSearch.officialThemes?.themes) if (!themes) { throw "No themes loaded. Did generate:layeroverview fail?" @@ -27,14 +29,17 @@ export class ThemeSearchIndex { { name: "id", weight: 2 }, "title." + language, "keywords." + language, - "shortDescription." + language - ] + "shortDescription." + language, + ], } - this.themeIndex = new Fuse(themes.filter(th => th?.id !== "personal"), fuseOptions) + this.themeIndex = new Fuse( + themes.filter((th) => th?.id !== "personal"), + fuseOptions + ) const toIgnore = new Set(layersToIgnore) - const layersAsList: { id: string, description: Record<string, string[]> }[] = [] + const layersAsList: { id: string; description: Record<string, string[]> }[] = [] for (const id in ThemeSearch.officialThemes.layers) { if (Constants.isPriviliged(id)) { continue @@ -50,7 +55,7 @@ export class ThemeSearchIndex { minMatchCharLength: 3, ignoreLocation: true, threshold: 0.02, - keys: ["id", "description." + language] + keys: ["id", "description." + language], }) } @@ -61,7 +66,7 @@ export class ThemeSearchIndex { if (limit) { result = result.slice(0, limit) } - return result.map(e => ThemeSearch.officialThemesById.get(e[0])) + return result.map((e) => ThemeSearch.officialThemesById.get(e[0])) } public searchWithScores(text: string): Map<string, number> { @@ -76,20 +81,22 @@ export class ThemeSearchIndex { for (const layer of layerResults) { const matchingThemes = ThemeSearch.layersToThemes.get(layer.item.id) const score = layer.score - matchingThemes?.forEach(th => { + matchingThemes?.forEach((th) => { const previous = result.get(th.id) ?? 10000 result.set(th.id, Math.min(previous, score * 5)) }) } - return result } /** * Builds a search index containing all public and visited themes, but ignoring the layers loaded by the current theme */ - public static fromState(state: { osmConnection: OsmConnection; theme: ThemeConfig }): Store<ThemeSearchIndex> { + public static fromState(state: { + osmConnection: OsmConnection + theme: ThemeConfig + }): Store<ThemeSearchIndex> { const layersToIgnore = state.theme.layers.filter((l) => l.isNormal()).map((l) => l.id) const knownHidden: Store<string[]> = UserRelatedState.initDiscoveredHiddenThemes( state.osmConnection @@ -97,8 +104,11 @@ export class ThemeSearchIndex { const otherThemes: MinimalThemeInformation[] = ThemeSearch.officialThemes.themes.filter( (th) => th.id !== state.theme.id ) - return Locale.language.map(language => { - const themes = otherThemes.concat(...knownHidden.data.map(id => ThemeSearch.officialThemesById.get(id))) + return Locale.language.map( + (language) => { + const themes = otherThemes.concat( + ...knownHidden.data.map((id) => ThemeSearch.officialThemesById.get(id)) + ) return new ThemeSearchIndex(language, themes, layersToIgnore) }, [knownHidden] @@ -116,9 +126,8 @@ export default class ThemeSearch { MinimalThemeInformation >() - /* - * For every layer id, states which themes use the layer + * For every layer id, states which themes use the layer */ public static readonly layersToThemes: Map<string, MinimalThemeInformation[]> = new Map() static { @@ -170,6 +179,4 @@ export default class ThemeSearch { return `${linkPrefix}` } - - } diff --git a/src/Logic/State/SearchState.ts b/src/Logic/State/SearchState.ts index e4bf83bba..642a64fa3 100644 --- a/src/Logic/State/SearchState.ts +++ b/src/Logic/State/SearchState.ts @@ -68,7 +68,10 @@ export default class SearchState { ) const themeSearch = ThemeSearchIndex.fromState(state) - this.themeSuggestions = this.searchTerm.mapD((query) => themeSearch.data.search(query, 3), [themeSearch]) + this.themeSuggestions = this.searchTerm.mapD( + (query) => themeSearch.data.search(query, 3), + [themeSearch] + ) const layerSearch = new LayerSearch(state.theme) this.layerSuggestions = this.searchTerm.mapD((query) => layerSearch.search(query, 5)) diff --git a/src/Logic/State/UserSettingsMetaTagging.ts b/src/Logic/State/UserSettingsMetaTagging.ts index 33a5ae85b..6e568c5c3 100644 --- a/src/Logic/State/UserSettingsMetaTagging.ts +++ b/src/Logic/State/UserSettingsMetaTagging.ts @@ -1,14 +1,42 @@ import { Utils } from "../../Utils" /** This code is autogenerated - do not edit. Edit ./assets/layers/usersettings/usersettings.json instead */ export class ThemeMetaTagging { - public static readonly themeName = "usersettings" + public static readonly themeName = "usersettings" - public metaTaggging_for_usersettings(feat: {properties: Record<string, string>}) { - Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_md', () => feat.properties._description.match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/)?.at(1) ) - Utils.AddLazyProperty(feat.properties, '_d', () => feat.properties._description?.replace(/</g,'<')?.replace(/>/g,'>') ?? '' ) - Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_a', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.href.match(/mastodon|en.osm.town/) !== null)[0]?.href }) (feat) ) - Utils.AddLazyProperty(feat.properties, '_mastodon_link', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.getAttribute("rel")?.indexOf('me') >= 0)[0]?.href})(feat) ) - Utils.AddLazyProperty(feat.properties, '_mastodon_candidate', () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a ) - feat.properties['__current_backgroun'] = 'initial_value' - } -} \ No newline at end of file + public metaTaggging_for_usersettings(feat: { properties: Record<string, string> }) { + Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_md", () => + feat.properties._description + .match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/) + ?.at(1) + ) + Utils.AddLazyProperty( + feat.properties, + "_d", + () => feat.properties._description?.replace(/</g, "<")?.replace(/>/g, ">") ?? "" + ) + Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_a", () => + ((feat) => { + const e = document.createElement("div") + e.innerHTML = feat.properties._d + return Array.from(e.getElementsByTagName("a")).filter( + (a) => a.href.match(/mastodon|en.osm.town/) !== null + )[0]?.href + })(feat) + ) + Utils.AddLazyProperty(feat.properties, "_mastodon_link", () => + ((feat) => { + const e = document.createElement("div") + e.innerHTML = feat.properties._d + return Array.from(e.getElementsByTagName("a")).filter( + (a) => a.getAttribute("rel")?.indexOf("me") >= 0 + )[0]?.href + })(feat) + ) + Utils.AddLazyProperty( + feat.properties, + "_mastodon_candidate", + () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a + ) + feat.properties["__current_backgroun"] = "initial_value" + } +} diff --git a/src/Logic/Tags/SubstitutingTag.ts b/src/Logic/Tags/SubstitutingTag.ts index 25c6cc8a9..e44e28394 100644 --- a/src/Logic/Tags/SubstitutingTag.ts +++ b/src/Logic/Tags/SubstitutingTag.ts @@ -103,7 +103,10 @@ export default class SubstitutingTag extends TagsFilter { asChange(properties: Readonly<Record<string, string>>): { k: string; v: string }[] { if (this._invert) { - throw "An inverted substituting tag can not be used to create a change. The offending tag is " + this.asHumanString() + throw ( + "An inverted substituting tag can not be used to create a change. The offending tag is " + + this.asHumanString() + ) } const v = SubstitutingTag.substituteString(this._value, properties) if (v.match(/{.*}/) !== null) { diff --git a/src/Logic/Web/AndroidPolyfill.ts b/src/Logic/Web/AndroidPolyfill.ts index 827428a66..00c41f6f8 100644 --- a/src/Logic/Web/AndroidPolyfill.ts +++ b/src/Logic/Web/AndroidPolyfill.ts @@ -70,7 +70,7 @@ export class AndroidPolyfill { AndroidPolyfill.backfillGeolocation(AndroidPolyfill.databridgePlugin) } - public static async openLoginPage(){ + public static async openLoginPage() { await DatabridgePluginSingleton.request<{ oauth_token: string }>({ key: "open:login" }) } public static async requestLoginCodes() { diff --git a/src/Logic/Web/MangroveReviews.ts b/src/Logic/Web/MangroveReviews.ts index d1920a7ff..85ca36c26 100644 --- a/src/Logic/Web/MangroveReviews.ts +++ b/src/Logic/Web/MangroveReviews.ts @@ -117,12 +117,12 @@ export class MangroveIdentity { return [] } const allReviews = await MangroveReviews.getReviews({ - kid: pem + kid: pem, }) this.allReviewsById.setData( allReviews.reviews.map((r) => ({ ...r, - ...r.payload + ...r.payload, })) ) }) @@ -283,7 +283,9 @@ export default class FeatureReviews { return cached } const themeIsSensitive = state.theme?.enableMorePrivacy - const settings = state.osmConnection.getPreference<"always" | "yes" | "ask" | "hidden">("reviews-allowed") + const settings = state.osmConnection.getPreference<"always" | "yes" | "ask" | "hidden">( + "reviews-allowed" + ) const loadingAllowed = new UIEventSource(false) settings.addCallbackAndRun((s) => { console.log("Reviews allowed is", s) @@ -329,7 +331,7 @@ export default class FeatureReviews { } const r: Review = { sub: this.subjectUri.data, - ...review + ...review, } const keypair: CryptoKeyPair = await this._identity.getKeypair() const jwt = await MangroveReviews.signReview(keypair, r) @@ -344,7 +346,7 @@ export default class FeatureReviews { ...r, kid, signature: jwt, - madeByLoggedInUser: new ImmutableStore(true) + madeByLoggedInUser: new ImmutableStore(true), } this._reviews.data.push(reviewWithKid) this._reviews.ping() @@ -402,7 +404,7 @@ export default class FeatureReviews { signature: reviewData.signature, madeByLoggedInUser: this._identity.getKeyId().map((user_key_id) => { return reviewData.kid === user_key_id - }) + }), }) hasNew = true } @@ -428,8 +430,8 @@ export default class FeatureReviews { } else if (this._uncertainty > 1000) { console.error( "Not fetching reviews. Only got a point and a very big uncertainty range (" + - this._uncertainty + - "), so you'd probably only get garbage. Specify a name" + this._uncertainty + + "), so you'd probably only get garbage. Specify a name" ) return undefined } diff --git a/src/Models/ThemeConfig/TagRenderingConfig.ts b/src/Models/ThemeConfig/TagRenderingConfig.ts index c5a26ace4..35f85965f 100644 --- a/src/Models/ThemeConfig/TagRenderingConfig.ts +++ b/src/Models/ThemeConfig/TagRenderingConfig.ts @@ -5,7 +5,10 @@ import { TagUtils } from "../../Logic/Tags/TagUtils" import { And } from "../../Logic/Tags/And" import { Utils } from "../../Utils" import { Tag } from "../../Logic/Tags/Tag" -import { MappingConfigJson, QuestionableTagRenderingConfigJson } from "./Json/QuestionableTagRenderingConfigJson" +import { + MappingConfigJson, + QuestionableTagRenderingConfigJson, +} from "./Json/QuestionableTagRenderingConfigJson" import Validators, { ValidatorType } from "../../UI/InputElement/Validators" import { TagRenderingConfigJson } from "./Json/TagRenderingConfigJson" import { RegexTag } from "../../Logic/Tags/RegexTag" @@ -812,8 +815,14 @@ export default class TagRenderingConfig { if (and.and.length === 0) { return undefined } - console.log(">>> New properties", TagUtils.asProperties(and, currentProperties), this.invalidValues) - if (this.invalidValues?.matchesProperties(TagUtils.asProperties(and, currentProperties))) { + console.log( + ">>> New properties", + TagUtils.asProperties(and, currentProperties), + this.invalidValues + ) + if ( + this.invalidValues?.matchesProperties(TagUtils.asProperties(and, currentProperties)) + ) { return undefined } return and diff --git a/src/Models/ThemeViewState/UserMapFeatureswitchState.ts b/src/Models/ThemeViewState/UserMapFeatureswitchState.ts index 0f466f07d..eae94c975 100644 --- a/src/Models/ThemeViewState/UserMapFeatureswitchState.ts +++ b/src/Models/ThemeViewState/UserMapFeatureswitchState.ts @@ -225,13 +225,17 @@ export class UserMapFeatureswitchState extends WithUserRelatedState { this.geolocationControl.handleClick() }) - Hotkeys.RegisterHotkey({ nomod: "H" }, Translations.t.hotkeyDocumentation.homeLocation, () => { - const home = this.userRelatedState.osmConnection.userDetails.data?.home - if (!home) { - console.log("No home location set") + Hotkeys.RegisterHotkey( + { nomod: "H" }, + Translations.t.hotkeyDocumentation.homeLocation, + () => { + const home = this.userRelatedState.osmConnection.userDetails.data?.home + if (!home) { + console.log("No home location set") + } + this.mapProperties.location.set(home) } - this.mapProperties.location.set(home) - }) + ) Hotkeys.RegisterHotkey( { diff --git a/src/UI/AllThemesGui.svelte b/src/UI/AllThemesGui.svelte index 236299375..9717173b8 100644 --- a/src/UI/AllThemesGui.svelte +++ b/src/UI/AllThemesGui.svelte @@ -41,21 +41,24 @@ "oauth_token", undefined, "Used to complete the login" - ) + ), }) const state = new UserRelatedState(osmConnection) const guistate = new MenuState(undefined) const menuDrawerState = { - guistate, osmConnection, + guistate, + osmConnection, userRelatedState: state, - featureSwitches: { featureSwitchEnableLogin: new UIEventSource(true) } + featureSwitches: { featureSwitchEnableLogin: new UIEventSource(true) }, } const t = Translations.t.index const tu = Translations.t.general const tr = Translations.t.general.morescreen - const recentThemes = state.recentlyVisitedThemes.value.mapD(themes => themes.map(thId => ThemeSearch.officialThemesById.get(thId))) + const recentThemes = state.recentlyVisitedThemes.value.mapD((themes) => + themes.map((thId) => ThemeSearch.officialThemesById.get(thId)) + ) let userLanguages = osmConnection.userDetails.map((ud) => ud?.languages ?? []) let search: UIEventSource<string | undefined> = new UIEventSource<string>("") @@ -81,10 +84,12 @@ ).mapD((stableIds) => Utils.NoNullInplace(stableIds.map((id) => state.getUnofficialTheme(id)))) function filtered(themes: Store<MinimalThemeInformation[]>): Store<MinimalThemeInformation[]> { - const searchIndex = Locale.language.map(language => { - return new ThemeSearchIndex(language, themes.data) - }, [themes]) - + const searchIndex = Locale.language.map( + (language) => { + return new ThemeSearchIndex(language, themes.data) + }, + [themes] + ) return searchStable.map( (searchTerm) => { @@ -98,7 +103,6 @@ const index = searchIndex.data return index.search(searchTerm) - }, [searchIndex] ) @@ -113,7 +117,7 @@ let customSearched: Store<MinimalThemeInformation[]> = filtered(customThemes) let searchIsFocussed = new UIEventSource(false) - document.addEventListener("keydown", function(event) { + document.addEventListener("keydown", function (event) { if (event.ctrlKey && event.code === "KeyF") { searchIsFocussed.set(true) event.preventDefault() @@ -150,7 +154,7 @@ </script> <main> - <div class="absolute h-screen w-screen bg-white top-0 left-0" style="z-index: -1;"></div> + <div class="absolute left-0 top-0 h-screen w-screen bg-white" style="z-index: -1;" /> <div class="h-full overflow-hidden"> <DrawerLeft shown={guistate.pageStates.menu}> @@ -162,7 +166,7 @@ <div class="m-4 flex flex-col"> <div class="w-ful flex justify-between"> - <button on:click={() => guistate.pageStates.menu.set(true)} class="rounded-full m-0 p-2"> + <button on:click={() => guistate.pageStates.menu.set(true)} class="m-0 rounded-full p-2"> <MenuIcon class="h-6 w-6 cursor-pointer" /> </button> @@ -179,7 +183,7 @@ <Logo alt="MapComplete Logo" class="h-12 w-12 sm:h-24 sm:w-24" /> </div> - <div class="link-underline flex flex-col w-full"> + <div class="link-underline flex w-full flex-col"> <h1 class="m-0 font-extrabold tracking-tight md:text-6xl"> <Tr t={t.title} /> </h1> @@ -259,15 +263,12 @@ {/if} </LoginToggle> - - <div class="subtle mb-16 self-end"> v{Constants.vNumber} </div> </div> - <div class="absolute top-0 w-0 h-0" style="margin-left: -10em"> + <div class="absolute top-0 h-0 w-0" style="margin-left: -10em"> <MenuDrawer onlyLink={false} state={menuDrawerState} /> </div> - </main> diff --git a/src/UI/Base/Popup.svelte b/src/UI/Base/Popup.svelte index a5f54a560..49160d631 100644 --- a/src/UI/Base/Popup.svelte +++ b/src/UI/Base/Popup.svelte @@ -21,7 +21,8 @@ if (fullscreen) { defaultClass = shared } - let dialogClass = "fixed top-0 start-0 end-0 h-modal inset-0 w-full p-4 flex class-marker-dialog " + zIndex + let dialogClass = + "fixed top-0 start-0 end-0 h-modal inset-0 w-full p-4 flex class-marker-dialog " + zIndex if (fullscreen) { dialogClass += " h-full-child" } diff --git a/src/UI/BigComponents/ClearGPSHistory.svelte b/src/UI/BigComponents/ClearGPSHistory.svelte index e922047e5..c8a8b2783 100644 --- a/src/UI/BigComponents/ClearGPSHistory.svelte +++ b/src/UI/BigComponents/ClearGPSHistory.svelte @@ -13,8 +13,7 @@ } </script> - <button on:click={() => clear()}> - <Trash class="w-6 h-6" /> + <Trash class="h-6 w-6" /> <Tr t={Translations.t.general.removeLocationHistory} /> </button> diff --git a/src/UI/BigComponents/CopyrightPanel.svelte b/src/UI/BigComponents/CopyrightPanel.svelte index ae3d6c647..31dff49d6 100644 --- a/src/UI/BigComponents/CopyrightPanel.svelte +++ b/src/UI/BigComponents/CopyrightPanel.svelte @@ -17,7 +17,7 @@ import ThemeConfig from "../../Models/ThemeConfig/ThemeConfig" import { ImmutableStore } from "../../Logic/UIEventSource" - export let state: { theme?: ThemeConfig, mapProperties?: MapProperties } + export let state: { theme?: ThemeConfig; mapProperties?: MapProperties } const t = Translations.t.general.attribution const layoutToUse = state.theme @@ -27,27 +27,28 @@ maintainer = t.themeBy.Subs({ author: layoutToUse.credits }) } - const bgMapAttribution = state.mapProperties?.rasterLayer?.mapD((layer) => { - const props = layer.properties - const attrUrl = props.attribution?.url - const attrText = props.attribution?.text + const bgMapAttribution = + state.mapProperties?.rasterLayer?.mapD((layer) => { + const props = layer.properties + const attrUrl = props.attribution?.url + const attrText = props.attribution?.text - let bgAttr: BaseUIElement | string = undefined - if (attrText && attrUrl) { - bgAttr = "<a href='" + attrUrl + "' target='_blank' rel='noopener'>" + attrText + "</a>" - } else if (attrUrl) { - bgAttr = attrUrl - } else { - bgAttr = attrText - } - if (bgAttr) { - return Translations.t.general.attribution.attributionBackgroundLayerWithCopyright.Subs({ - name: props.name, - copyright: bgAttr, - }) - } - return Translations.t.general.attribution.attributionBackgroundLayer.Subs(props) - }) ?? new ImmutableStore(undefined) + let bgAttr: BaseUIElement | string = undefined + if (attrText && attrUrl) { + bgAttr = "<a href='" + attrUrl + "' target='_blank' rel='noopener'>" + attrText + "</a>" + } else if (attrUrl) { + bgAttr = attrUrl + } else { + bgAttr = attrText + } + if (bgAttr) { + return Translations.t.general.attribution.attributionBackgroundLayerWithCopyright.Subs({ + name: props.name, + copyright: bgAttr, + }) + } + return Translations.t.general.attribution.attributionBackgroundLayer.Subs(props) + }) ?? new ImmutableStore(undefined) function calculateDataContributions(contributions: Map<string, number>): Translation { if (contributions === undefined) { @@ -83,9 +84,9 @@ } } - const datacontributions = (state.mapProperties ? new ContributorCount(<any>state).Contributors : new ImmutableStore([])).map((counts) => - calculateDataContributions(counts) - ) + const datacontributions = ( + state.mapProperties ? new ContributorCount(<any>state).Contributors : new ImmutableStore([]) + ).map((counts) => calculateDataContributions(counts)) function codeContributors( contributors, diff --git a/src/UI/BigComponents/MenuDrawer.svelte b/src/UI/BigComponents/MenuDrawer.svelte index 7fde54c4d..dffece5f4 100644 --- a/src/UI/BigComponents/MenuDrawer.svelte +++ b/src/UI/BigComponents/MenuDrawer.svelte @@ -64,11 +64,11 @@ export let state: { favourites: FavouritesFeatureSource - guistate: MenuState, - osmConnection: OsmConnection, - theme?: ThemeConfig, - featureSwitches: Partial<FeatureSwitchState>, - mapProperties?: MapProperties, + guistate: MenuState + osmConnection: OsmConnection + theme?: ThemeConfig + featureSwitches: Partial<FeatureSwitchState> + mapProperties?: MapProperties userRelatedState?: UserRelatedState } let hotkeys = Hotkeys._docs @@ -240,15 +240,15 @@ <a class="flex" href={"https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Themes/" + - theme.id + - ".md"} + theme.id + + ".md"} target="_blank" > <DocumentMagnifyingGlass class="h-6 w-6" /> <Tr t={Translations.t.general.attribution.openThemeDocumentation.Subs({ - name: theme.title, - })} + name: theme.title, + })} /> </a> @@ -256,10 +256,13 @@ <QueueList class="h-6 w-6" /> <Tr t={Translations.t.general.attribution.openOsmcha.Subs({ theme: theme.title })} /> </a> - <a class="flex" href={`./statistics.html?filter-mapcomplete-changes-theme-search={"search"%3A"${theme.id}"}`} - target="_blank"> + <a + class="flex" + href={`./statistics.html?filter-mapcomplete-changes-theme-search={"search"%3A"${theme.id}"}`} + target="_blank" + > <ChartBar class="h-6 w-6" /> - <Tr t={Translations.t.general.attribution.openStatistics.Subs({theme: theme.title})} /> + <Tr t={Translations.t.general.attribution.openStatistics.Subs({ theme: theme.title })} /> </a> {/if} </SidebarUnit> @@ -305,7 +308,6 @@ <Tr t={Translations.t.general.morescreen.createYourOwnTheme} /> </a> - <a class="flex" href="mailto:info@mapcomplete.org"> <EnvelopeOpen class="h-6 w-6" /> <Tr t={Translations.t.general.attribution.emailCreators} /> @@ -321,7 +323,6 @@ <Tr t={Translations.t.general.attribution.donate} /> </a> - <a class="flex" href="https://source.mapcomplete.org/MapComplete/MapComplete/issues" @@ -340,7 +341,6 @@ <Tr t={Translations.t.translations.activateButton} /> </a> - <a class="flex" href={window.location.protocol + "//" + window.location.host + "/inspector.html"} @@ -350,10 +350,9 @@ </a> {#if !state.theme} - <a class="flex" href={`./statistics.html`} - target="_blank"> + <a class="flex" href={`./statistics.html`} target="_blank"> <ChartBar class="h-6 w-6" /> - <Tr t={Translations.t.general.attribution.openStatistics.Subs({theme: "MapComplete"})} /> + <Tr t={Translations.t.general.attribution.openStatistics.Subs({ theme: "MapComplete" })} /> </a> {/if} @@ -389,11 +388,10 @@ <Tr t={Translations.t.privacy.title} /> </svelte:fragment> <PrivacyPolicy {state} /> - <a href="./privacy.html" class="button w-fit float-right" target="_blank"> - <ArrowTopRightOnSquare class="w-8 h-8" /> + <a href="./privacy.html" class="button float-right w-fit" target="_blank"> + <ArrowTopRightOnSquare class="h-8 w-8" /> </a> </Page> - </SidebarUnit> <div class="subtle self-end"> diff --git a/src/UI/BigComponents/PendingChangesIndicator.svelte b/src/UI/BigComponents/PendingChangesIndicator.svelte index 43a427efd..0dddea908 100644 --- a/src/UI/BigComponents/PendingChangesIndicator.svelte +++ b/src/UI/BigComponents/PendingChangesIndicator.svelte @@ -15,6 +15,7 @@ const errors = changes?.errors const pending = changes?.pendingChanges </script> + {#if changes} <div class="pointer-events-auto flex flex-col" diff --git a/src/UI/BigComponents/PrivacyPolicy.svelte b/src/UI/BigComponents/PrivacyPolicy.svelte index eafd76e2b..625c65f43 100644 --- a/src/UI/BigComponents/PrivacyPolicy.svelte +++ b/src/UI/BigComponents/PrivacyPolicy.svelte @@ -13,12 +13,14 @@ const editThemeHistory = usersettings.tagRenderings.find((tr) => tr.id === "sync-visited-themes") const editReviews = usersettings.tagRenderings.find((tr) => tr.id === "mangrove-reviews-allowed") - const editLocationHistory = usersettings.tagRenderings.find((tr) => tr.id === "sync-visited-locations") + const editLocationHistory = usersettings.tagRenderings.find( + (tr) => tr.id === "sync-visited-locations" + ) const selectedElement: Feature = { type: "Feature", properties: { id: "settings" }, - geometry: { type: "Point", coordinates: [0, 0] } + geometry: { type: "Point", coordinates: [0, 0] }, } const isLoggedIn = state.osmConnection.isLoggedIn </script> @@ -93,7 +95,6 @@ /> </li> <li> - <TagRenderingEditable config={editThemeHistory} {selectedElement} @@ -102,8 +103,7 @@ /> </li> </ul> - - {:else } + {:else} <button class="as-link" on:click={() => state.osmConnection.AttemptLogin()}> <Tr t={t.browsingHistoryNotLoggedIn} /> </button> @@ -120,7 +120,6 @@ tags={state.userRelatedState.preferencesAsTags} /> - <h3> <Tr t={t.whileYoureHere} /> </h3> diff --git a/src/UI/BigComponents/StatisticsPanel.ts b/src/UI/BigComponents/StatisticsPanel.ts index 906c5c1b3..55a33a1b9 100644 --- a/src/UI/BigComponents/StatisticsPanel.ts +++ b/src/UI/BigComponents/StatisticsPanel.ts @@ -12,7 +12,6 @@ export default class StatisticsForLayerPanel extends VariableUiElement { super( elementsInview.features.stabilized(1000).map( (features) => { - const els: BaseUIElement[] = [] const featuresForLayer = features if (featuresForLayer.length === 0) { diff --git a/src/UI/BigComponents/TagRenderingChart.ts b/src/UI/BigComponents/TagRenderingChart.ts index 3a9b9447c..0b8e21c35 100644 --- a/src/UI/BigComponents/TagRenderingChart.ts +++ b/src/UI/BigComponents/TagRenderingChart.ts @@ -276,13 +276,8 @@ export default class TagRenderingChart extends Combine { } super([ - new Title( - options?.includeTitle ? tagRendering.question ?? tagRendering.id : undefined - ), - new Combine([ - - chart - ]).SetClass("flex flex-col justify-center h-full") + new Title(options?.includeTitle ? tagRendering.question ?? tagRendering.id : undefined), + new Combine([chart]).SetClass("flex flex-col justify-center h-full"), ]) this.SetClass("block") diff --git a/src/UI/BigComponents/ThemesList.svelte b/src/UI/BigComponents/ThemesList.svelte index 47ff6ac75..7bd9d9f6f 100644 --- a/src/UI/BigComponents/ThemesList.svelte +++ b/src/UI/BigComponents/ThemesList.svelte @@ -19,7 +19,10 @@ <section class="w-full"> <slot name="title" /> <div - class={onlyIcons ? "flex gap-x-2 flex-wrap items-center justify-center" : ("theme-list my-2 gap-4 md:grid md:grid-flow-row md:grid-cols-2 lg:grid-cols-3")}> + class={onlyIcons + ? "flex flex-wrap items-center justify-center gap-x-2" + : "theme-list my-2 gap-4 md:grid md:grid-flow-row md:grid-cols-2 lg:grid-cols-3"} + > {#each Utils.NoNull(themes) as theme (theme.id)} <ThemeButton {theme} {state} iconOnly={onlyIcons}> {#if $search && hasSelection && themes?.[0] === theme} diff --git a/src/UI/InputElement/Validators/RegexValidator.ts b/src/UI/InputElement/Validators/RegexValidator.ts index 37bfed2db..83abdb779 100644 --- a/src/UI/InputElement/Validators/RegexValidator.ts +++ b/src/UI/InputElement/Validators/RegexValidator.ts @@ -4,7 +4,10 @@ import Translations from "../../i18n/Translations" export default class RegexValidator extends StringValidator { constructor() { - super("regex", "Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme.") + super( + "regex", + "Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." + ) } getFeedback(s: string): Translation | undefined { diff --git a/src/UI/Map/ProtomapsLanguageSupport.ts b/src/UI/Map/ProtomapsLanguageSupport.ts index c48753ead..7df4ab144 100644 --- a/src/UI/Map/ProtomapsLanguageSupport.ts +++ b/src/UI/Map/ProtomapsLanguageSupport.ts @@ -3,992 +3,45 @@ import { DataDrivenPropertyValueSpecification, LayerSpecification, Map as MlMap, - SymbolLayerSpecification + SymbolLayerSpecification, } from "maplibre-gl" import Locale from "../i18n/Locale" import { Utils } from "../../Utils" export class ProtomapsLanguageSupport { - private _map: Store<MlMap> - private static expressions: Record<string, (language: string) => DataDrivenPropertyValueSpecification<string>> = - { - "places_country": language => [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "name:en" - ] - ], - {} - ], - "places_region": language => [ - "step", - [ - "zoom" - ], - [ - "get", - "name:short" - ], - 6, - [ - "case", - [ - "all", - [ - "any", - [ - "has", - "name" - ], - [ - "has", - "pgf:name" - ] - ], - [ - "!", - [ - "any", - [ - "has", - "name2" - ], - [ - "has", - "pgf:name2" - ] - ] - ], - [ - "!", - [ - "any", - [ - "has", - "name3" - ], - [ - "has", - "pgf:name3" - ] - ] - ] - ], - [ - "case", - [ - "has", - "script" - ], - [ - "case", - [ - "any", - [ - "is-supported-script", - [ - "get", - "name" - ] - ], - [ - "has", - "pgf:name" - ] - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "name:en" - ] - ], - {}, - "\n", - {}, - [ - "case", - [ - "all", - [ - "!", - [ - "has", - "name:" + language - ] - ], - [ - "has", - "name:en" - ], - [ - "!", - [ - "has", - "script" - ] - ] - ], - "", - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "get", - "name:en" - ] - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - {} - ] - ], - [ - "all", - [ - "any", - [ - "has", - "name" - ], - [ - "has", - "pgf:name" - ] - ], - [ - "any", - [ - "has", - "name2" - ], - [ - "has", - "pgf:name2" - ] - ], - [ - "!", - [ - "any", - [ - "has", - "name3" - ], - [ - "has", - "pgf:name3" - ] - ] - ] - ], - [ - "case", - [ - "all", - [ - "has", - "script" - ], - [ - "has", - "script2" - ] - ], - [ - "format", - [ - "get", - "name:" + language - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "case", - [ - "has", - "script2" - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ] - ] - ], - [ - "case", - [ - "all", - [ - "has", - "script" - ], - [ - "has", - "script2" - ], - [ - "has", - "script3" - ] - ], - [ - "format", - [ - "get", - "name:" + language - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script3" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "case", - [ - "!", - [ - "has", - "script" - ] - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script3" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "!", - [ - "has", - "script2" - ] - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script3" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ] - ] - ] - ] - ], - "places_locality": language => [ + private static expressions: Record< + string, + (language: string) => DataDrivenPropertyValueSpecification<string> + > = { + places_country: (language) => [ + "format", + ["coalesce", ["get", "name:" + language], ["get", "name:en"]], + {}, + ], + places_region: (language) => [ + "step", + ["zoom"], + ["get", "name:short"], + 6, + [ "case", [ "all", - [ - "any", - [ - "has", - "name" - ], - [ - "has", - "pgf:name" - ] - ], - [ - "!", - [ - "any", - [ - "has", - "name2" - ], - [ - "has", - "pgf:name2" - ] - ] - ], - [ - "!", - [ - "any", - [ - "has", - "name3" - ], - [ - "has", - "pgf:name3" - ] - ] - ] + ["any", ["has", "name"], ["has", "pgf:name"]], + ["!", ["any", ["has", "name2"], ["has", "pgf:name2"]]], + ["!", ["any", ["has", "name3"], ["has", "pgf:name3"]]], ], [ "case", - [ - "has", - "script" - ], + ["has", "script"], [ "case", - [ - "any", - [ - "is-supported-script", - [ - "get", - "name" - ] - ], - [ - "has", - "pgf:name" - ] - ], + ["any", ["is-supported-script", ["get", "name"]], ["has", "pgf:name"]], [ "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "name:en" - ] - ], + ["coalesce", ["get", "name:" + language], ["get", "name:en"]], {}, "\n", {}, @@ -996,2538 +49,1095 @@ export class ProtomapsLanguageSupport { "case", [ "all", - [ - "!", - [ - "has", - "name:" + language - ] - ], - [ - "has", - "name:en" - ], - [ - "!", - [ - "has", - "script" - ] - ] + ["!", ["has", "name:" + language]], + ["has", "name:en"], + ["!", ["has", "script"]], ], "", - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ] + ["coalesce", ["get", "pgf:name"], ["get", "name"]], ], { "text-font": [ "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, ], - [ - "get", - "name:en" - ] + ["get", "name:en"], ], [ "format", [ "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] + ["get", "name:" + language], + ["get", "pgf:name"], + ["get", "name"], ], - {} - ] + {}, + ], ], [ "all", - [ - "any", - [ - "has", - "name" - ], - [ - "has", - "pgf:name" - ] - ], - [ - "any", - [ - "has", - "name2" - ], - [ - "has", - "pgf:name2" - ] - ], - [ - "!", - [ - "any", - [ - "has", - "name3" - ], - [ - "has", - "pgf:name3" - ] - ] - ] + ["any", ["has", "name"], ["has", "pgf:name"]], + ["any", ["has", "name2"], ["has", "pgf:name2"]], + ["!", ["any", ["has", "name3"], ["has", "pgf:name3"]]], ], [ "case", - [ - "all", - [ - "has", - "script" - ], - [ - "has", - "script2" - ] - ], + ["all", ["has", "script"], ["has", "script2"]], [ "format", - [ - "get", - "name:" + language - ], + ["get", "name:" + language], {}, "\n", {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], + ["coalesce", ["get", "pgf:name"], ["get", "name"]], { "text-font": [ "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], }, "\n", {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], { "text-font": [ "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, ], [ "case", + ["has", "script2"], [ - "has", - "script2" + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name"], + ["get", "name"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, ], [ "format", [ "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] + ["get", "name:" + language], + ["get", "pgf:name2"], + ["get", "name2"], ], {}, "\n", {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], + ["coalesce", ["get", "pgf:name"], ["get", "name"]], { "text-font": [ "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ] - ] + ], ], [ "case", - [ - "all", - [ - "has", - "script" - ], - [ - "has", - "script2" - ], - [ - "has", - "script3" - ] - ], + ["all", ["has", "script"], ["has", "script2"], ["has", "script3"]], [ "format", - [ - "get", - "name:" + language - ], + ["get", "name:" + language], {}, "\n", {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], + ["coalesce", ["get", "pgf:name"], ["get", "name"]], { "text-font": [ "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], }, "\n", {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], { "text-font": [ "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], }, "\n", {}, - [ - "coalesce", - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], + ["coalesce", ["get", "pgf:name3"], ["get", "name3"]], { "text-font": [ "case", - [ - "==", - [ - "get", - "script3" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } + ["==", ["get", "script3"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, ], [ "case", + ["!", ["has", "script"]], [ - "!", + "format", [ - "has", - "script" - ] + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name"], + ["get", "name"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name3"], ["get", "name3"]], + { + "text-font": [ + "case", + ["==", ["get", "script3"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + ["!", ["has", "script2"]], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name2"], + ["get", "name2"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name3"], ["get", "name3"]], + { + "text-font": [ + "case", + ["==", ["get", "script3"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, ], [ "format", [ "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] + ["get", "name:" + language], + ["get", "pgf:name3"], + ["get", "name3"], ], {}, "\n", {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], + ["coalesce", ["get", "pgf:name"], ["get", "name"]], { "text-font": [ "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], }, "\n", {}, - [ - "coalesce", - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], { "text-font": [ "case", - [ - "==", - [ - "get", - "script3" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "!", - [ - "has", - "script2" - ] - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], ], - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script3" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ] - ] - ] + ], + ], ], - "places_subplace": language => [ + ], + places_locality: (language) => [ + "case", + [ + "all", + ["any", ["has", "name"], ["has", "pgf:name"]], + ["!", ["any", ["has", "name2"], ["has", "pgf:name2"]]], + ["!", ["any", ["has", "name3"], ["has", "pgf:name3"]]], + ], + [ "case", - [ - "all", - [ - "any", - [ - "has", - "name" - ], - [ - "has", - "pgf:name" - ] - ], - [ - "!", - [ - "any", - [ - "has", - "name2" - ], - [ - "has", - "pgf:name2" - ] - ] - ], - [ - "!", - [ - "any", - [ - "has", - "name3" - ], - [ - "has", - "pgf:name3" - ] - ] - ] - ], + ["has", "script"], [ "case", - [ - "has", - "script" - ], - [ - "case", - [ - "any", - [ - "is-supported-script", - [ - "get", - "name" - ] - ], - [ - "has", - "pgf:name" - ] - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "name:en" - ] - ], - {}, - "\n", - {}, - [ - "case", - [ - "all", - [ - "!", - [ - "has", - "name:" + language - ] - ], - [ - "has", - "name:en" - ], - [ - "!", - [ - "has", - "script" - ] - ] - ], - "", - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "get", - "name:en" - ] - ], + ["any", ["is-supported-script", ["get", "name"]], ["has", "pgf:name"]], [ "format", + ["coalesce", ["get", "name:" + language], ["get", "name:en"]], + {}, + "\n", + {}, [ - "coalesce", + "case", [ - "get", - "name:" + language + "all", + ["!", ["has", "name:" + language]], + ["has", "name:en"], + ["!", ["has", "script"]], ], - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] + "", + ["coalesce", ["get", "pgf:name"], ["get", "name"]], ], - {} - ] + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + ["get", "name:en"], ], [ - "all", - [ - "any", - [ - "has", - "name" - ], - [ - "has", - "pgf:name" - ] - ], - [ - "any", - [ - "has", - "name2" - ], - [ - "has", - "pgf:name2" - ] - ], - [ - "!", - [ - "any", - [ - "has", - "name3" - ], - [ - "has", - "pgf:name3" - ] - ] - ] + "format", + ["coalesce", ["get", "name:" + language], ["get", "pgf:name"], ["get", "name"]], + {}, ], - [ - "case", - [ - "all", - [ - "has", - "script" - ], - [ - "has", - "script2" - ] - ], - [ - "format", - [ - "get", - "name:" + language - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "case", - [ - "has", - "script2" - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ] - ] - ], - [ - "case", - [ - "all", - [ - "has", - "script" - ], - [ - "has", - "script2" - ], - [ - "has", - "script3" - ] - ], - [ - "format", - [ - "get", - "name:" + language - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script3" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "case", - [ - "!", - [ - "has", - "script" - ] - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script3" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "!", - [ - "has", - "script2" - ] - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script3" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ] - ] - ] ], - "pois": language => [ + [ + "all", + ["any", ["has", "name"], ["has", "pgf:name"]], + ["any", ["has", "name2"], ["has", "pgf:name2"]], + ["!", ["any", ["has", "name3"], ["has", "pgf:name3"]]], + ], + [ "case", + ["all", ["has", "script"], ["has", "script2"]], [ - "all", - [ - "any", - [ - "has", - "name" + "format", + ["get", "name:" + language], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], ], - [ - "has", - "pgf:name" - ] - ], - [ - "!", - [ - "any", - [ - "has", - "name2" - ], - [ - "has", - "pgf:name2" - ] - ] - ], - [ - "!", - [ - "any", - [ - "has", - "name3" - ], - [ - "has", - "pgf:name3" - ] - ] - ] + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, ], [ "case", + ["has", "script2"], [ - "has", - "script" - ], - [ - "case", + "format", [ - "any", - [ - "is-supported-script", - [ - "get", - "name" - ] - ], - [ - "has", - "pgf:name" - ] + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name"], + ["get", "name"], ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "name:en" - ] - ], - {}, - "\n", - {}, - [ + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ "case", - [ - "all", - [ - "!", - [ - "has", - "name:" + language - ] - ], - [ - "has", - "name:en" - ], - [ - "!", - [ - "has", - "script" - ] - ] - ], - "", - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ] + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "get", - "name:en" - ] + }, ], [ "format", [ "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - {} - ] - ], - [ - "all", - [ - "any", - [ - "has", - "name" - ], - [ - "has", - "pgf:name" - ] - ], - [ - "any", - [ - "has", - "name2" - ], - [ - "has", - "pgf:name2" - ] - ], - [ - "!", - [ - "any", - [ - "has", - "name3" - ], - [ - "has", - "pgf:name3" - ] - ] - ] - ], - [ - "case", - [ - "all", - [ - "has", - "script" - ], - [ - "has", - "script2" - ] - ], - [ - "format", - [ - "get", - "name:" + language + ["get", "name:" + language], + ["get", "pgf:name2"], + ["get", "name2"], ], {}, "\n", {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], + ["coalesce", ["get", "pgf:name"], ["get", "name"]], { "text-font": [ "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } ], - [ - "case", - [ - "has", - "script2" - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ] - ] ], - [ - "case", - [ - "all", - [ - "has", - "script" - ], - [ - "has", - "script2" - ], - [ - "has", - "script3" - ] - ], - [ - "format", - [ - "get", - "name:" + language - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script3" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "case", - [ - "!", - [ - "has", - "script" - ] - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script3" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "!", - [ - "has", - "script2" - ] - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script3" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ] - ] - ] ], - "pois_peak": language => ProtomapsLanguageSupport.simpleExpression(language), - "water_label_lakes": language => ProtomapsLanguageSupport.waterwayExpression(language), - "water_label_ocean": language => ProtomapsLanguageSupport.waterwayExpression(language), - "water_waterway_label": language => ProtomapsLanguageSupport.waterwayExpression(language), - "roads_labels_minor": language => ProtomapsLanguageSupport.roadLabelExpression(language), - "roads_labels_major": language => ProtomapsLanguageSupport.roadLabelExpression(language) - } - + [ + "case", + ["all", ["has", "script"], ["has", "script2"], ["has", "script3"]], + [ + "format", + ["get", "name:" + language], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name3"], ["get", "name3"]], + { + "text-font": [ + "case", + ["==", ["get", "script3"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + [ + "case", + ["!", ["has", "script"]], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name"], + ["get", "name"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name3"], ["get", "name3"]], + { + "text-font": [ + "case", + ["==", ["get", "script3"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + ["!", ["has", "script2"]], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name2"], + ["get", "name2"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name3"], ["get", "name3"]], + { + "text-font": [ + "case", + ["==", ["get", "script3"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name3"], + ["get", "name3"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + ], + ], + ], + places_subplace: (language) => [ + "case", + [ + "all", + ["any", ["has", "name"], ["has", "pgf:name"]], + ["!", ["any", ["has", "name2"], ["has", "pgf:name2"]]], + ["!", ["any", ["has", "name3"], ["has", "pgf:name3"]]], + ], + [ + "case", + ["has", "script"], + [ + "case", + ["any", ["is-supported-script", ["get", "name"]], ["has", "pgf:name"]], + [ + "format", + ["coalesce", ["get", "name:" + language], ["get", "name:en"]], + {}, + "\n", + {}, + [ + "case", + [ + "all", + ["!", ["has", "name:" + language]], + ["has", "name:en"], + ["!", ["has", "script"]], + ], + "", + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + ], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + ["get", "name:en"], + ], + [ + "format", + ["coalesce", ["get", "name:" + language], ["get", "pgf:name"], ["get", "name"]], + {}, + ], + ], + [ + "all", + ["any", ["has", "name"], ["has", "pgf:name"]], + ["any", ["has", "name2"], ["has", "pgf:name2"]], + ["!", ["any", ["has", "name3"], ["has", "pgf:name3"]]], + ], + [ + "case", + ["all", ["has", "script"], ["has", "script2"]], + [ + "format", + ["get", "name:" + language], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + [ + "case", + ["has", "script2"], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name"], + ["get", "name"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name2"], + ["get", "name2"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + ], + ], + [ + "case", + ["all", ["has", "script"], ["has", "script2"], ["has", "script3"]], + [ + "format", + ["get", "name:" + language], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name3"], ["get", "name3"]], + { + "text-font": [ + "case", + ["==", ["get", "script3"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + [ + "case", + ["!", ["has", "script"]], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name"], + ["get", "name"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name3"], ["get", "name3"]], + { + "text-font": [ + "case", + ["==", ["get", "script3"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + ["!", ["has", "script2"]], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name2"], + ["get", "name2"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name3"], ["get", "name3"]], + { + "text-font": [ + "case", + ["==", ["get", "script3"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name3"], + ["get", "name3"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + ], + ], + ], + pois: (language) => [ + "case", + [ + "all", + ["any", ["has", "name"], ["has", "pgf:name"]], + ["!", ["any", ["has", "name2"], ["has", "pgf:name2"]]], + ["!", ["any", ["has", "name3"], ["has", "pgf:name3"]]], + ], + [ + "case", + ["has", "script"], + [ + "case", + ["any", ["is-supported-script", ["get", "name"]], ["has", "pgf:name"]], + [ + "format", + ["coalesce", ["get", "name:" + language], ["get", "name:en"]], + {}, + "\n", + {}, + [ + "case", + [ + "all", + ["!", ["has", "name:" + language]], + ["has", "name:en"], + ["!", ["has", "script"]], + ], + "", + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + ], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + ["get", "name:en"], + ], + [ + "format", + ["coalesce", ["get", "name:" + language], ["get", "pgf:name"], ["get", "name"]], + {}, + ], + ], + [ + "all", + ["any", ["has", "name"], ["has", "pgf:name"]], + ["any", ["has", "name2"], ["has", "pgf:name2"]], + ["!", ["any", ["has", "name3"], ["has", "pgf:name3"]]], + ], + [ + "case", + ["all", ["has", "script"], ["has", "script2"]], + [ + "format", + ["get", "name:" + language], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + [ + "case", + ["has", "script2"], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name"], + ["get", "name"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name2"], + ["get", "name2"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + ], + ], + [ + "case", + ["all", ["has", "script"], ["has", "script2"], ["has", "script3"]], + [ + "format", + ["get", "name:" + language], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name3"], ["get", "name3"]], + { + "text-font": [ + "case", + ["==", ["get", "script3"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + [ + "case", + ["!", ["has", "script"]], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name"], + ["get", "name"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name3"], ["get", "name3"]], + { + "text-font": [ + "case", + ["==", ["get", "script3"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + ["!", ["has", "script2"]], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name2"], + ["get", "name2"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name3"], ["get", "name3"]], + { + "text-font": [ + "case", + ["==", ["get", "script3"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name3"], + ["get", "name3"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + ], + ], + ], + pois_peak: (language) => ProtomapsLanguageSupport.simpleExpression(language), + water_label_lakes: (language) => ProtomapsLanguageSupport.waterwayExpression(language), + water_label_ocean: (language) => ProtomapsLanguageSupport.waterwayExpression(language), + water_waterway_label: (language) => ProtomapsLanguageSupport.waterwayExpression(language), + roads_labels_minor: (language) => ProtomapsLanguageSupport.roadLabelExpression(language), + roads_labels_major: (language) => ProtomapsLanguageSupport.roadLabelExpression(language), + } constructor(map: Store<MlMap>) { this._map = map @@ -3550,967 +1160,26 @@ export class ProtomapsLanguageSupport { ProtomapsLanguageSupport._update(this._map?.data, Locale.language.data) } - private static waterwayExpression(language: string): DataDrivenPropertyValueSpecification<string> { - return ["case", - [ - "all", - [ - "any", - [ - "has", - "name" - ], - [ - "has", - "pgf:name" - ] - ], - [ - "!", - [ - "any", - [ - "has", - "name2" - ], - [ - "has", - "pgf:name2" - ] - ] - ], - [ - "!", - [ - "any", - [ - "has", - "name3" - ], - [ - "has", - "pgf:name3" - ] - ] - ] - ], - [ - "case", - [ - "has", - "script" - ], - [ - "case", - [ - "any", - [ - "is-supported-script", - [ - "get", - "name" - ] - ], - [ - "has", - "pgf:name" - ] - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "name:en" - ] - ], - {}, - "\n", - {}, - [ - "case", - [ - "all", - [ - "!", - [ - "has", - "name:" + language - ] - ], - [ - "has", - "name:en" - ], - [ - "!", - [ - "has", - "script" - ] - ] - ], - "", - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "get", - "name:en" - ] - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - {} - ] - ], - [ - "all", - [ - "any", - [ - "has", - "name" - ], - [ - "has", - "pgf:name" - ] - ], - [ - "any", - [ - "has", - "name2" - ], - [ - "has", - "pgf:name2" - ] - ], - [ - "!", - [ - "any", - [ - "has", - "name3" - ], - [ - "has", - "pgf:name3" - ] - ] - ] - ], - [ - "case", - [ - "all", - [ - "has", - "script" - ], - [ - "has", - "script2" - ] - ], - [ - "format", - [ - "get", - "name:" + language - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "case", - [ - "has", - "script2" - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ] - ] - ], - [ - "case", - [ - "all", - [ - "has", - "script" - ], - [ - "has", - "script2" - ], - [ - "has", - "script3" - ] - ], - [ - "format", - [ - "get", - "name:" + language - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script3" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "case", - [ - "!", - [ - "has", - "script" - ] - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script3" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "!", - [ - "has", - "script2" - ] - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script3" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ] - ] - ] - ] - } - - private static simpleExpression(language: string): DataDrivenPropertyValueSpecification<string> { - return [ - "coalesce", - ["get", "name:" + language], - ["get", "name"], - ["get", "name:en"] - ] - } - - private static roadLabelExpression(language: string): DataDrivenPropertyValueSpecification<string> { + private static waterwayExpression( + language: string + ): DataDrivenPropertyValueSpecification<string> { return [ "case", [ "all", - [ - "any", - [ - "has", - "name" - ], - [ - "has", - "pgf:name" - ] - ], - [ - "!", - [ - "any", - [ - "has", - "name2" - ], - [ - "has", - "pgf:name2" - ] - ] - ], - [ - "!", - [ - "any", - [ - "has", - "name3" - ], - [ - "has", - "pgf:name3" - ] - ] - ] + ["any", ["has", "name"], ["has", "pgf:name"]], + ["!", ["any", ["has", "name2"], ["has", "pgf:name2"]]], + ["!", ["any", ["has", "name3"], ["has", "pgf:name3"]]], ], [ "case", - [ - "has", - "script" - ], + ["has", "script"], [ "case", - [ - "any", - [ - "is-supported-script", - [ - "get", - "name" - ] - ], - [ - "has", - "pgf:name" - ] - ], + ["any", ["is-supported-script", ["get", "name"]], ["has", "pgf:name"]], [ "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "name:en" - ] - ], + ["coalesce", ["get", "name:" + language], ["get", "name:en"]], {}, "\n", {}, @@ -4518,792 +1187,544 @@ export class ProtomapsLanguageSupport { "case", [ "all", - [ - "!", - [ - "has", - "name:" + language - ] - ], - [ - "has", - "name:en" - ], - [ - "!", - [ - "has", - "script" - ] - ] + ["!", ["has", "name:" + language]], + ["has", "name:en"], + ["!", ["has", "script"]], ], "", - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ] + ["coalesce", ["get", "pgf:name"], ["get", "name"]], ], { "text-font": [ "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, ], - [ - "get", - "name:en" - ] + ["get", "name:en"], ], [ "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - {} - ] + ["coalesce", ["get", "name:" + language], ["get", "pgf:name"], ["get", "name"]], + {}, + ], ], [ "all", - [ - "any", - [ - "has", - "name" - ], - [ - "has", - "pgf:name" - ] - ], - [ - "any", - [ - "has", - "name2" - ], - [ - "has", - "pgf:name2" - ] - ], - [ - "!", - [ - "any", - [ - "has", - "name3" - ], - [ - "has", - "pgf:name3" - ] - ] - ] + ["any", ["has", "name"], ["has", "pgf:name"]], + ["any", ["has", "name2"], ["has", "pgf:name2"]], + ["!", ["any", ["has", "name3"], ["has", "pgf:name3"]]], ], [ "case", - [ - "all", - [ - "has", - "script" - ], - [ - "has", - "script2" - ] - ], + ["all", ["has", "script"], ["has", "script2"]], [ "format", - [ - "get", - "name:" + language - ], + ["get", "name:" + language], {}, "\n", {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], + ["coalesce", ["get", "pgf:name"], ["get", "name"]], { "text-font": [ "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], }, "\n", {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], { "text-font": [ "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, ], [ "case", + ["has", "script2"], [ - "has", - "script2" + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name"], + ["get", "name"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, ], [ "format", [ "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] + ["get", "name:" + language], + ["get", "pgf:name2"], + ["get", "name2"], ], {}, "\n", {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], + ["coalesce", ["get", "pgf:name"], ["get", "name"]], { "text-font": [ "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ] - ] + ], ], [ "case", - [ - "all", - [ - "has", - "script" - ], - [ - "has", - "script2" - ], - [ - "has", - "script3" - ] - ], + ["all", ["has", "script"], ["has", "script2"], ["has", "script3"]], [ "format", - [ - "get", - "name:" + language - ], + ["get", "name:" + language], {}, "\n", {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], + ["coalesce", ["get", "pgf:name"], ["get", "name"]], { "text-font": [ "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], }, "\n", {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], { "text-font": [ "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], }, "\n", {}, - [ - "coalesce", - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], + ["coalesce", ["get", "pgf:name3"], ["get", "name3"]], { "text-font": [ "case", - [ - "==", - [ - "get", - "script3" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } + ["==", ["get", "script3"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, ], [ "case", + ["!", ["has", "script"]], [ - "!", + "format", [ - "has", - "script" - ] + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name"], + ["get", "name"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name3"], ["get", "name3"]], + { + "text-font": [ + "case", + ["==", ["get", "script3"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + ["!", ["has", "script2"]], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name2"], + ["get", "name2"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name3"], ["get", "name3"]], + { + "text-font": [ + "case", + ["==", ["get", "script3"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, ], [ "format", [ "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] + ["get", "name:" + language], + ["get", "pgf:name3"], + ["get", "name3"], ], {}, "\n", {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], + ["coalesce", ["get", "pgf:name"], ["get", "name"]], { "text-font": [ "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], }, "\n", {}, - [ - "coalesce", - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], { "text-font": [ "case", - [ - "==", - [ - "get", - "script3" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ], - [ - "!", - [ - "has", - "script2" - ] - ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], ], - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script3" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } ], - [ - "format", - [ - "coalesce", - [ - "get", - "name:" + language - ], - [ - "get", - "pgf:name3" - ], - [ - "get", - "name3" - ] - ], - {}, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name" - ], - [ - "get", - "name" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - }, - "\n", - {}, - [ - "coalesce", - [ - "get", - "pgf:name2" - ], - [ - "get", - "name2" - ] - ], - { - "text-font": [ - "case", - [ - "==", - [ - "get", - "script2" - ], - "Devanagari" - ], - [ - "literal", - [ - "Noto Sans Devanagari Regular v1" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ] - } - ] - ] - ] + ], + ], ] } + private static simpleExpression( + language: string + ): DataDrivenPropertyValueSpecification<string> { + return ["coalesce", ["get", "name:" + language], ["get", "name"], ["get", "name:en"]] + } + + private static roadLabelExpression( + language: string + ): DataDrivenPropertyValueSpecification<string> { + return [ + "case", + [ + "all", + ["any", ["has", "name"], ["has", "pgf:name"]], + ["!", ["any", ["has", "name2"], ["has", "pgf:name2"]]], + ["!", ["any", ["has", "name3"], ["has", "pgf:name3"]]], + ], + [ + "case", + ["has", "script"], + [ + "case", + ["any", ["is-supported-script", ["get", "name"]], ["has", "pgf:name"]], + [ + "format", + ["coalesce", ["get", "name:" + language], ["get", "name:en"]], + {}, + "\n", + {}, + [ + "case", + [ + "all", + ["!", ["has", "name:" + language]], + ["has", "name:en"], + ["!", ["has", "script"]], + ], + "", + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + ], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + ["get", "name:en"], + ], + [ + "format", + ["coalesce", ["get", "name:" + language], ["get", "pgf:name"], ["get", "name"]], + {}, + ], + ], + [ + "all", + ["any", ["has", "name"], ["has", "pgf:name"]], + ["any", ["has", "name2"], ["has", "pgf:name2"]], + ["!", ["any", ["has", "name3"], ["has", "pgf:name3"]]], + ], + [ + "case", + ["all", ["has", "script"], ["has", "script2"]], + [ + "format", + ["get", "name:" + language], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + [ + "case", + ["has", "script2"], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name"], + ["get", "name"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name2"], + ["get", "name2"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + ], + ], + [ + "case", + ["all", ["has", "script"], ["has", "script2"], ["has", "script3"]], + [ + "format", + ["get", "name:" + language], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name3"], ["get", "name3"]], + { + "text-font": [ + "case", + ["==", ["get", "script3"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + [ + "case", + ["!", ["has", "script"]], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name"], + ["get", "name"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name3"], ["get", "name3"]], + { + "text-font": [ + "case", + ["==", ["get", "script3"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + ["!", ["has", "script2"]], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name2"], + ["get", "name2"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name3"], ["get", "name3"]], + { + "text-font": [ + "case", + ["==", ["get", "script3"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + [ + "format", + [ + "coalesce", + ["get", "name:" + language], + ["get", "pgf:name3"], + ["get", "name3"], + ], + {}, + "\n", + {}, + ["coalesce", ["get", "pgf:name"], ["get", "name"]], + { + "text-font": [ + "case", + ["==", ["get", "script"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + "\n", + {}, + ["coalesce", ["get", "pgf:name2"], ["get", "name2"]], + { + "text-font": [ + "case", + ["==", ["get", "script2"], "Devanagari"], + ["literal", ["Noto Sans Devanagari Regular v1"]], + ["literal", ["Noto Sans Regular"]], + ], + }, + ], + ], + ], + ] + } private static _update(map: MlMap, language: string) { if (!map) { @@ -5315,8 +1736,8 @@ export class ProtomapsLanguageSupport { }) return } - const style = map.getStyle(); - (style.layers ?? []).forEach((layer: LayerSpecification) => { + const style = map.getStyle() + ;(style.layers ?? []).forEach((layer: LayerSpecification) => { if (layer.type !== "symbol") { return } @@ -5345,6 +1766,4 @@ export class ProtomapsLanguageSupport { map.setLayoutProperty(layer.id, "text-field", newExpression) }) } - - } diff --git a/src/UI/Map/RasterLayerHandler.ts b/src/UI/Map/RasterLayerHandler.ts index 99ebac072..fa362658e 100644 --- a/src/UI/Map/RasterLayerHandler.ts +++ b/src/UI/Map/RasterLayerHandler.ts @@ -101,7 +101,11 @@ class SingleBackgroundHandler { private async enable() { let ttl = 15 await this.awaitStyleIsLoaded() - while (this._background.data.properties.id === this._targetLayer.properties.id && !this.tryEnable() && ttl > 0) { + while ( + this._background.data.properties.id === this._targetLayer.properties.id && + !this.tryEnable() && + ttl > 0 + ) { ttl-- await Utils.waitFor(250) } @@ -147,7 +151,6 @@ class SingleBackgroundHandler { console.log("UPDATING") this._languageSupport.update() }) - } else { map.addLayer( { @@ -155,8 +158,8 @@ class SingleBackgroundHandler { type: "raster", source: background.id, paint: { - "raster-opacity": 0 - } + "raster-opacity": 0, + }, }, addLayerBeforeId ) @@ -213,7 +216,12 @@ export default class RasterLayerHandler { background.addCallbackAndRunD((l) => { const key = l.properties.id if (!this._singleLayerHandlers[key]) { - this._singleLayerHandlers[key] = new SingleBackgroundHandler(map, l, background, this._languageSupport) + this._singleLayerHandlers[key] = new SingleBackgroundHandler( + map, + l, + background, + this._languageSupport + ) } }) this._languageSupport = new ProtomapsLanguageSupport(map) @@ -225,7 +233,7 @@ export default class RasterLayerHandler { if (layer.type === "vector") { return { type: "vector", - url: layer.url + url: layer.url, } } return { @@ -237,7 +245,7 @@ export default class RasterLayerHandler { minzoom: layer["min_zoom"] ?? 1, maxzoom: layer["max_zoom"] ?? 25, // Bit of a hack, but seems to work - scheme: layer.url.includes("{-y}") ? "tms" : "xyz" + scheme: layer.url.includes("{-y}") ? "tms" : "xyz", } } @@ -251,7 +259,7 @@ export default class RasterLayerHandler { "{width}": "" + size, "{height}": "" + size, "{zoom}": "{z}", - "{-y}": "{y}" + "{-y}": "{y}", } for (const key in toReplace) { diff --git a/src/UI/Popup/AddNewPoint/AddNewPoint.svelte b/src/UI/Popup/AddNewPoint/AddNewPoint.svelte index 8d7e36cd9..745464060 100644 --- a/src/UI/Popup/AddNewPoint/AddNewPoint.svelte +++ b/src/UI/Popup/AddNewPoint/AddNewPoint.svelte @@ -172,12 +172,12 @@ <Tr t={Translations.t.general.add.zoomInFurther} /> </div> {:else if $isLoading} - <div class="w-full h-full p-2 flex items-center justify-center"> - <div class="alert"> - <Loading> - <Tr t={Translations.t.general.add.stillLoading} /> - </Loading> - </div> + <div class="flex h-full w-full items-center justify-center p-2"> + <div class="alert"> + <Loading> + <Tr t={Translations.t.general.add.stillLoading} /> + </Loading> + </div> </div> {:else if selectedPreset === undefined} <!-- First, select the correct preset --> diff --git a/src/UI/Reviews/ReviewForm.svelte b/src/UI/Reviews/ReviewForm.svelte index dfc3da937..55a30af95 100644 --- a/src/UI/Reviews/ReviewForm.svelte +++ b/src/UI/Reviews/ReviewForm.svelte @@ -60,7 +60,7 @@ const review: Omit<Review, "sub"> = { rating: confirmedScore, opinion: opinion.data, - metadata: { nickname, is_affiliated: isAffiliated.data } + metadata: { nickname, is_affiliated: isAffiliated.data }, } try { await reviews.createReview(review) @@ -73,7 +73,6 @@ </script> <ReviewPrivacyShield hiddenIfNotAllowed {reviews} guistate={state.guistate}> - {#if uploadFailed} <div class="alert flex"> <ExclamationTriangle class="h-6 w-6" /> @@ -92,21 +91,27 @@ {#if question} {question} {:else} - <SpecialTranslation {feature} {layer} {state} t={Translations.t.reviews.question} {tags} /> + <SpecialTranslation + {feature} + {layer} + {state} + t={Translations.t.reviews.question} + {tags} + /> {/if} </div> <StarsBar on:click={(e) => { - confirmedScore = e.detail.score - score = confirmedScore - console.log("Confirmed score is:", confirmedScore) - }} + confirmedScore = e.detail.score + score = confirmedScore + console.log("Confirmed score is:", confirmedScore) + }} on:hover={(e) => { - score = e.detail.score - }} + score = e.detail.score + }} on:mouseout={() => { - score = null - }} + score = null + }} score={score ?? confirmedScore ?? 0} starSize="w-8 h-8" /> @@ -127,9 +132,9 @@ <ExclamationTriangle class="h-12 w-12" /> <Tr t={t.too_long.Subs({ - max: FeatureReviews.REVIEW_OPINION_MAX_LENGTH, - amount: $opinion?.length ?? 0, - })} + max: FeatureReviews.REVIEW_OPINION_MAX_LENGTH, + amount: $opinion?.length ?? 0, + })} /> </div> {/if} diff --git a/src/UI/Reviews/ReviewPrivacyShield.svelte b/src/UI/Reviews/ReviewPrivacyShield.svelte index f5aabd7b9..fe026a277 100644 --- a/src/UI/Reviews/ReviewPrivacyShield.svelte +++ b/src/UI/Reviews/ReviewPrivacyShield.svelte @@ -1,27 +1,29 @@ -<script lang="ts">/** - * Due to privacy, we cannot load reviews unless allowed in the privacy policy - */ -import FeatureReviews from "../../Logic/Web/MangroveReviews" -import { MenuState } from "../../Models/MenuState" +<script lang="ts"> + /** + * Due to privacy, we cannot load reviews unless allowed in the privacy policy + */ + import FeatureReviews from "../../Logic/Web/MangroveReviews" + import { MenuState } from "../../Models/MenuState" -export let guistate: MenuState -export let reviews: FeatureReviews -export let hiddenIfNotAllowed: boolean = false -let allowed = reviews.loadingAllowed + export let guistate: MenuState + export let reviews: FeatureReviews + export let hiddenIfNotAllowed: boolean = false + let allowed = reviews.loadingAllowed </script> {#if $allowed} <slot /> -{:else if !hiddenIfNotAllowed && $allowed !== null } - <div class="low-interaction flex flex-col rounded mx-1"> - +{:else if !hiddenIfNotAllowed && $allowed !== null} + <div class="low-interaction mx-1 flex flex-col rounded"> Reviews are disabled due to your privacy settings. <button on:click={() => reviews.loadingAllowed.set(true)} class="primary"> Load reviews once </button> - <button class="as-link self-end" on:click={() => guistate.openUsersettings("mangrove-reviews-allowed")}> + <button + class="as-link self-end" + on:click={() => guistate.openUsersettings("mangrove-reviews-allowed")} + > Edit your privacy settings </button> </div> {/if} - diff --git a/src/UI/SpecialVisualisations/SettingsVisualisations.ts b/src/UI/SpecialVisualisations/SettingsVisualisations.ts index d80e6fe08..8d1242039 100644 --- a/src/UI/SpecialVisualisations/SettingsVisualisations.ts +++ b/src/UI/SpecialVisualisations/SettingsVisualisations.ts @@ -24,7 +24,9 @@ export class SettingsVisualisations { docs: "A component to set the language of the user interface", constr(state: SpecialVisualizationState): SvelteUIElement { const availableLanguages = Locale.showLinkToWeblate.map((showTranslations) => - showTranslations ? LanguageUtils.usedLanguagesSorted : (state?.theme?.language ?? LanguageUtils.usedLanguagesSorted) + showTranslations + ? LanguageUtils.usedLanguagesSorted + : state?.theme?.language ?? LanguageUtils.usedLanguagesSorted ) return new SvelteUIElement(LanguagePicker, { assignTo: state.userRelatedState.language, diff --git a/src/UI/SpecialVisualisations/UISpecialVisualisations.ts b/src/UI/SpecialVisualisations/UISpecialVisualisations.ts index 55ab2a23c..1c6c2da11 100644 --- a/src/UI/SpecialVisualisations/UISpecialVisualisations.ts +++ b/src/UI/SpecialVisualisations/UISpecialVisualisations.ts @@ -29,7 +29,7 @@ class QuestionViz implements SpecialVisualizationSvelte { }, { name: "blacklisted-labels", - doc: "One or more ';'-separated labels of questions which should _not_ be included. Default: 'hidden'" + doc: "One or more ';'-separated labels of questions which should _not_ be included. Default: 'hidden'", }, ] svelteBased = true @@ -46,7 +46,7 @@ class QuestionViz implements SpecialVisualizationSvelte { ?.split(";") ?.map((s) => s.trim()) ?.filter((s) => s !== "") - const blacklist = (args[1]) + const blacklist = args[1] ?.split(";") ?.map((s) => s.trim()) ?.filter((s) => s !== "") diff --git a/src/UI/SpecialVisualizations.ts b/src/UI/SpecialVisualizations.ts index 30cb9fa7d..a212ae011 100644 --- a/src/UI/SpecialVisualizations.ts +++ b/src/UI/SpecialVisualizations.ts @@ -1,7 +1,11 @@ import { FixedUiElement } from "./Base/FixedUiElement" import BaseUIElement from "./BaseUIElement" import { default as FeatureTitle } from "./Popup/Title.svelte" -import { RenderingSpecification, SpecialVisualization, SpecialVisualizationState } from "./SpecialVisualization" +import { + RenderingSpecification, + SpecialVisualization, + SpecialVisualizationState, +} from "./SpecialVisualization" import { HistogramViz } from "./Popup/HistogramViz" import { UploadToOsmViz } from "./Popup/UploadToOsmViz" import { MultiApplyViz } from "./Popup/MultiApplyViz" @@ -36,11 +40,8 @@ import { UISpecialVisualisations } from "./SpecialVisualisations/UISpecialVisual import { SettingsVisualisations } from "./SpecialVisualisations/SettingsVisualisations" import { ReviewSpecialVisualisations } from "./SpecialVisualisations/ReviewSpecialVisualisations" import { DataImportSpecialVisualisations } from "./SpecialVisualisations/DataImportSpecialVisualisations" -import TagrenderingManipulationSpecialVisualisations - from "./SpecialVisualisations/TagrenderingManipulationSpecialVisualisations" -import { - WebAndCommunicationSpecialVisualisations -} from "./SpecialVisualisations/WebAndCommunicationSpecialVisualisations" +import TagrenderingManipulationSpecialVisualisations from "./SpecialVisualisations/TagrenderingManipulationSpecialVisualisations" +import { WebAndCommunicationSpecialVisualisations } from "./SpecialVisualisations/WebAndCommunicationSpecialVisualisations" import ClearGPSHistory from "./BigComponents/ClearGPSHistory.svelte" import AllFeaturesStatistics from "./Statistics/AllFeaturesStatistics.svelte" @@ -405,7 +406,7 @@ export default class SpecialVisualizations { docs: "Show general statistics about the elements currently in view. Intended to use on the `current_view`-layer", args: [], - constr: (state) => new SvelteUIElement(AllFeaturesStatistics, { state }) + constr: (state) => new SvelteUIElement(AllFeaturesStatistics, { state }), }, { diff --git a/src/UI/Statistics/AllFeaturesStatistics.svelte b/src/UI/Statistics/AllFeaturesStatistics.svelte index 1357349e2..2016edc1c 100644 --- a/src/UI/Statistics/AllFeaturesStatistics.svelte +++ b/src/UI/Statistics/AllFeaturesStatistics.svelte @@ -7,12 +7,10 @@ * An element showing s */ export let state: ThemeViewState - let layers = state.theme.layers.filter(l => l.isNormal()) - + let layers = state.theme.layers.filter((l) => l.isNormal()) </script> <Accordion> - {#each layers as layer (layer.id)} <LayerStatistics {state} {layer} /> {/each} diff --git a/src/UI/Statistics/LayerStatistics.svelte b/src/UI/Statistics/LayerStatistics.svelte index 0f5c29cd5..6006f5ce9 100644 --- a/src/UI/Statistics/LayerStatistics.svelte +++ b/src/UI/Statistics/LayerStatistics.svelte @@ -18,12 +18,16 @@ let elements: Feature[] = state.perLayer.get(layer.id).GetFeaturesWithin($bbox) $: elements = state.perLayer.get(layer.id).GetFeaturesWithin($bbox) - let trs = layer.tagRenderings.filter(tr => tr.question) + let trs = layer.tagRenderings.filter((tr) => tr.question) </script> -<AccordionItem paddingDefault="p-2" inactiveClass="text-black" defaultClass="w-full flex-grow justify-start"> +<AccordionItem + paddingDefault="p-2" + inactiveClass="text-black" + defaultClass="w-full flex-grow justify-start" +> <div slot="header" class="flex items-center gap-x-2"> - <div class="w-8 h-8 inline-block"> + <div class="inline-block h-8 w-8"> <DefaultIcon {layer} /> </div> <Tr t={layer.name} /> @@ -35,12 +39,15 @@ {:else if elements.length === 0} No features in view {:else} - <div class="flex flex-wrap w-full gap-y-4 gap-x-4"> - + <div class="flex w-full flex-wrap gap-x-4 gap-y-4"> {#each trs as tr} - <ToSvelte construct={() => new TagRenderingChart(elements, tr, { - chartclasses: "w-full self-center",includeTitle: true - }).SetClass(tr.multiAnswer ? "w-128": "w-96") } /> + <ToSvelte + construct={() => + new TagRenderingChart(elements, tr, { + chartclasses: "w-full self-center", + includeTitle: true, + }).SetClass(tr.multiAnswer ? "w-128" : "w-96")} + /> {/each} </div> {/if} diff --git a/src/UI/Studio/CollapsedTagRenderingPreview.svelte b/src/UI/Studio/CollapsedTagRenderingPreview.svelte index 381bcfa31..0c827d845 100644 --- a/src/UI/Studio/CollapsedTagRenderingPreview.svelte +++ b/src/UI/Studio/CollapsedTagRenderingPreview.svelte @@ -10,9 +10,7 @@ import QuestionPreview from "./QuestionPreview.svelte" import SchemaBasedMultiType from "./SchemaBasedMultiType.svelte" import { EditJsonState } from "./EditLayerState" - import type { - QuestionableTagRenderingConfigJson - } from "../../Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson" + import type { QuestionableTagRenderingConfigJson } from "../../Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson" import { AccordionItem } from "flowbite-svelte" import { ExclamationTriangle } from "@babeard/svelte-heroicons/solid/ExclamationTriangle" @@ -29,7 +27,7 @@ export let expanded = new UIEventSource(false) - let errors = state.messagesFor(path).mapD(msgs => msgs.filter(msg => msg.level === "error")) + let errors = state.messagesFor(path).mapD((msgs) => msgs.filter((msg) => msg.level === "error")) const subparts: ConfigMeta[] = state .getSchemaStartingWith(schema.path) @@ -92,10 +90,10 @@ } catch (e) { console.log( "Warning: could not translate a title for " + - `${singular} ${i} with function ` + - schema.hints.title + - " and value " + - JSON.stringify(value) + `${singular} ${i} with function ` + + schema.hints.title + + " and value " + + JSON.stringify(value) ) } return Translations.T(`${singular} ${i}`) @@ -152,8 +150,8 @@ {:else} <Tr cls="font-bold" t={Translations.T(value?.question ?? value?.render)} /> {#if $errors.length > 0} - <div class="alert w-fit inline"> - <ExclamationTriangle class="w-6 h-6 inline" />{$errors.length} + <div class="alert inline w-fit"> + <ExclamationTriangle class="inline h-6 w-6" />{$errors.length} </div> {/if} {/if} diff --git a/src/UI/StudioGUI.svelte b/src/UI/StudioGUI.svelte index 86ca452ac..57588d4ba 100644 --- a/src/UI/StudioGUI.svelte +++ b/src/UI/StudioGUI.svelte @@ -76,7 +76,8 @@ let selfLayers = layers.mapD( (ls) => ls.filter( - (l) => l.owner === uid.data && l.id.toLowerCase().includes(layerFilterTerm.data.toLowerCase()) + (l) => + l.owner === uid.data && l.id.toLowerCase().includes(layerFilterTerm.data.toLowerCase()) ), [uid, layerFilterTerm] ) @@ -93,7 +94,8 @@ let officialLayers = layers.mapD( (ls) => ls.filter( - (l) => l.owner === undefined && l.id.toLowerCase().includes(layerFilterTerm.data.toLowerCase()) + (l) => + l.owner === undefined && l.id.toLowerCase().includes(layerFilterTerm.data.toLowerCase()) ), [uid, layerFilterTerm] ) @@ -106,7 +108,8 @@ let selfThemes = themes.mapD( (ls) => ls.filter( - (l) => l.owner === uid.data && l.id.toLowerCase().includes(themeFilterTerm.data.toLowerCase()) + (l) => + l.owner === uid.data && l.id.toLowerCase().includes(themeFilterTerm.data.toLowerCase()) ), [uid, themeFilterTerm] ) @@ -123,7 +126,8 @@ let officialThemes = themes.mapD( (ls) => ls.filter( - (l) => l.owner === undefined && l.id.toLowerCase().includes(themeFilterTerm.data.toLowerCase()) + (l) => + l.owner === undefined && l.id.toLowerCase().includes(themeFilterTerm.data.toLowerCase()) ), [uid, themeFilterTerm] ) @@ -340,11 +344,7 @@ Selecting a layer will create a copy in your account. You will not change the version that is in MapComplete </div> - <ChooseLayerToEdit - {osmConnection} - layerIds={officialLayers} - on:layerSelected={editLayer} - /> + <ChooseLayerToEdit {osmConnection} layerIds={officialLayers} on:layerSelected={editLayer} /> </div> {:else if state === "edit_theme"} <div class="m-4 flex flex-col"> @@ -374,11 +374,7 @@ <h3>Themes by other contributors</h3> <ChooseLayerToEdit {osmConnection} layerIds={otherThemes} on:layerSelected={editTheme} /> <h3>Official themes by MapComplete</h3> - <ChooseLayerToEdit - {osmConnection} - layerIds={officialThemes} - on:layerSelected={editTheme} - /> + <ChooseLayerToEdit {osmConnection} layerIds={officialThemes} on:layerSelected={editTheme} /> </div> {:else if state === "loading"} <div class="h-8 w-8"> diff --git a/src/assets/contributors.json b/src/assets/contributors.json index 7963217e4..130c5403a 100644 --- a/src/assets/contributors.json +++ b/src/assets/contributors.json @@ -1,11 +1,11 @@ { "contributors": [ { - "commits": 9176, + "commits": 9299, "contributor": "Pieter Vander Vennet" }, { - "commits": 515, + "commits": 520, "contributor": "Robin van der Linde" }, { @@ -28,6 +28,10 @@ "commits": 33, "contributor": "Christian Neumann" }, + { + "commits": 32, + "contributor": "Midgard" + }, { "commits": 31, "contributor": "Andrews Leruth" @@ -44,10 +48,6 @@ "commits": 29, "contributor": "riQQ" }, - { - "commits": 26, - "contributor": "Midgard" - }, { "commits": 26, "contributor": "Joost" @@ -60,6 +60,10 @@ "commits": 24, "contributor": "Ward" }, + { + "commits": 21, + "contributor": "Osmwithspace" + }, { "commits": 21, "contributor": "wjtje" @@ -97,7 +101,7 @@ "contributor": "ToastHawaii" }, { - "commits": 13, + "commits": 14, "contributor": "danieldegroot2" }, { @@ -112,10 +116,6 @@ "commits": 12, "contributor": "Bavo Vanderghote" }, - { - "commits": 11, - "contributor": "Osmwithspace" - }, { "commits": 11, "contributor": "Flo Edelmann" @@ -152,6 +152,10 @@ "commits": 7, "contributor": "OliNau" }, + { + "commits": 6, + "contributor": "Languages add-on" + }, { "commits": 6, "contributor": "David Haberthür" @@ -160,10 +164,6 @@ "commits": 5, "contributor": "tiptoptom" }, - { - "commits": 4, - "contributor": "Languages add-on" - }, { "commits": 4, "contributor": "Daniele Santini" @@ -280,6 +280,10 @@ "commits": 2, "contributor": "Stanislas Gueniffey" }, + { + "commits": 1, + "contributor": "Weblate Admin" + }, { "commits": 1, "contributor": "Malte" diff --git a/src/assets/language_in_country.json b/src/assets/language_in_country.json index 4b1c29b7e..bfdb96928 100644 --- a/src/assets/language_in_country.json +++ b/src/assets/language_in_country.json @@ -236,9 +236,9 @@ "fr" ], "GQ": [ - "pt", "fr", - "es" + "es", + "pt" ], "GR": [ "el" diff --git a/src/assets/schemas/layerconfigmeta.json b/src/assets/schemas/layerconfigmeta.json index 03977542e..a3c3f1285 100644 --- a/src/assets/schemas/layerconfigmeta.json +++ b/src/assets/schemas/layerconfigmeta.json @@ -12468,7 +12468,7 @@ }, { "if": "value=regex", - "then": "<b>regex</b> Validates a regex" + "then": "<b>regex</b> Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." } ] }, @@ -13805,7 +13805,7 @@ }, { "if": "value=regex", - "then": "<b>regex</b> Validates a regex" + "then": "<b>regex</b> Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." } ] }, @@ -15190,7 +15190,7 @@ }, { "if": "value=regex", - "then": "<b>regex</b> Validates a regex" + "then": "<b>regex</b> Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." } ] }, @@ -16579,7 +16579,7 @@ }, { "if": "value=regex", - "then": "<b>regex</b> Validates a regex" + "then": "<b>regex</b> Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." } ] }, @@ -17970,7 +17970,7 @@ }, { "if": "value=regex", - "then": "<b>regex</b> Validates a regex" + "then": "<b>regex</b> Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." } ] }, @@ -19359,7 +19359,7 @@ }, { "if": "value=regex", - "then": "<b>regex</b> Validates a regex" + "then": "<b>regex</b> Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." } ] }, diff --git a/src/assets/schemas/layoutconfigmeta.json b/src/assets/schemas/layoutconfigmeta.json index 74ebd006c..538761b89 100644 --- a/src/assets/schemas/layoutconfigmeta.json +++ b/src/assets/schemas/layoutconfigmeta.json @@ -15115,7 +15115,7 @@ }, { "if": "value=regex", - "then": "<b>regex</b> Validates a regex" + "then": "<b>regex</b> Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." } ] }, @@ -16489,7 +16489,7 @@ }, { "if": "value=regex", - "then": "<b>regex</b> Validates a regex" + "then": "<b>regex</b> Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." } ] }, @@ -17912,7 +17912,7 @@ }, { "if": "value=regex", - "then": "<b>regex</b> Validates a regex" + "then": "<b>regex</b> Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." } ] }, @@ -19337,7 +19337,7 @@ }, { "if": "value=regex", - "then": "<b>regex</b> Validates a regex" + "then": "<b>regex</b> Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." } ] }, @@ -20763,7 +20763,7 @@ }, { "if": "value=regex", - "then": "<b>regex</b> Validates a regex" + "then": "<b>regex</b> Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." } ] }, @@ -22188,7 +22188,7 @@ }, { "if": "value=regex", - "then": "<b>regex</b> Validates a regex" + "then": "<b>regex</b> Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." } ] }, @@ -36926,7 +36926,7 @@ }, { "if": "value=regex", - "then": "<b>regex</b> Validates a regex" + "then": "<b>regex</b> Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." } ] }, @@ -38351,7 +38351,7 @@ }, { "if": "value=regex", - "then": "<b>regex</b> Validates a regex" + "then": "<b>regex</b> Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." } ] }, @@ -39827,7 +39827,7 @@ }, { "if": "value=regex", - "then": "<b>regex</b> Validates a regex" + "then": "<b>regex</b> Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." } ] }, @@ -41303,7 +41303,7 @@ }, { "if": "value=regex", - "then": "<b>regex</b> Validates a regex" + "then": "<b>regex</b> Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." } ] }, @@ -42780,7 +42780,7 @@ }, { "if": "value=regex", - "then": "<b>regex</b> Validates a regex" + "then": "<b>regex</b> Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." } ] }, @@ -44256,7 +44256,7 @@ }, { "if": "value=regex", - "then": "<b>regex</b> Validates a regex" + "then": "<b>regex</b> Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." } ] }, diff --git a/src/assets/schemas/questionabletagrenderingconfigmeta.json b/src/assets/schemas/questionabletagrenderingconfigmeta.json index d5ef2b807..d93c14b72 100644 --- a/src/assets/schemas/questionabletagrenderingconfigmeta.json +++ b/src/assets/schemas/questionabletagrenderingconfigmeta.json @@ -675,7 +675,7 @@ }, { "if": "value=regex", - "then": "<b>regex</b> Validates a regex" + "then": "<b>regex</b> Only used when your input should be a valid regex. This validator is only used as helper for Studio and should not be used in a mapcomplete-theme." } ] }, diff --git a/src/assets/translators.json b/src/assets/translators.json index f528b9cf9..0ea29c4a7 100644 --- a/src/assets/translators.json +++ b/src/assets/translators.json @@ -17,7 +17,7 @@ "contributor": "Anonymous" }, { - "commits": 122, + "commits": 128, "contributor": "mcliquid" }, { @@ -25,7 +25,7 @@ "contributor": "Allan Nordhøy" }, { - "commits": 89, + "commits": 92, "contributor": "mike140" }, { @@ -45,7 +45,7 @@ "contributor": "Jiří Podhorecký" }, { - "commits": 53, + "commits": 57, "contributor": "Supaplex" }, { @@ -108,6 +108,10 @@ "commits": 16, "contributor": "macpac" }, + { + "commits": 15, + "contributor": "Pau Nofuentes" + }, { "commits": 15, "contributor": "Ettore Atalan" @@ -148,6 +152,10 @@ "commits": 12, "contributor": "Piotr Strebski" }, + { + "commits": 11, + "contributor": "Weblate Admin" + }, { "commits": 11, "contributor": "Manuel Tassi" @@ -188,10 +196,6 @@ "commits": 10, "contributor": "Irina" }, - { - "commits": 9, - "contributor": "Weblate Admin" - }, { "commits": 9, "contributor": "Krzysztof Chorzempa" @@ -368,6 +372,10 @@ "commits": 4, "contributor": "Jan Zabel" }, + { + "commits": 3, + "contributor": "ceirios" + }, { "commits": 3, "contributor": "Gábor" diff --git a/src/land.ts b/src/land.ts index cf73b2bd1..8b34ae6a1 100644 --- a/src/land.ts +++ b/src/land.ts @@ -5,7 +5,7 @@ import { LocalStorageSource } from "./Logic/Web/LocalStorageSource" console.log("Authorizing...") if (QueryParameters.wasInitialized("error")) { -// error=access_denied&error_description=The+resource+owner+or+authorization+server+denied+the+request. + // error=access_denied&error_description=The+resource+owner+or+authorization+server+denied+the+request. alert("Access was denied") const previousLocation = LocalStorageSource.get("location_before_login") window.location.href = previousLocation.data ?? "./"