Merge branch 'master' into develop

This commit is contained in:
pietervdvn 2022-03-02 15:13:07 +01:00
commit 16a39b0ea8
35 changed files with 824 additions and 38293 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

49
Docs/LanguagePicker.md Normal file
View file

@ -0,0 +1,49 @@
# The language-picker
(Originally published as diary-entry)
In my [little OpenStreetMap-editor](https://mapcomplete.osm.be) translations are provided by contributors on [hosted weblate](https://hosted.weblate.org/projects/mapcomplete/), where thousands of text snippets have been translated already in the past year - which is awesome.
However, the language picker was a bit dry: it used to have codes for every langauge, e.g. `nl`, `en`, `ja`, 'pt_BR', 'zh_Hant'... Quite boring and not really user-friendly - but easy to implement.
Today, I decided to give these an overhaul. I wanted to show proper language names in them. But: in which _language_ should we show the language overview?
Should we show the language option in the language itself? Or should the languages be shown in the _current language_? Showing in the _current language_ also means that the name of every language should be translated too - a huge task... Also, translating every language has the drawback that, if a user accidentally selects a language in a foreign writing system, they'll won't be able to find their language in all the "gibberish".
### Best of both worlds
I decided to offer the best of both worlds: in the menu, first language name is shown as the native speaker speaks it, followed by the language name in the _current language_ (except if both are the same)
This means that, in all circumstances, everyone can find their language.
But, where to fetch every language name in every language?
# Wikidata to the rescue
Of course, the internet must have a list of languages translated in every language. But where to find it or compile it?
I decided to have a look at one of the biggest repositories of knowledge: Wikidata. They do have an entry for every language (e.g. [Dutch](https://www.wikidata.org/wiki/Q7411)). To fetch every [modern language](https://www.wikidata.org/wiki/Q1288568), we turn to the SPARQL-endpoint with the following query:
``` sparql
SELECT ?lang ?label ?code
WHERE
{
?lang wdt:P31 wd:Q1288568.
?lang rdfs:label ?label.
?lang wdt:P424 ?code
}
```
This one fetches all languages and uses the labels in every language as their translation. With a Typescript these can be downloaded and used as translation.
## The messy real world
Of course, real life isn't as easy. There are dialects, differences in notation between Weblate and Wikipedia (e.g. `zh-hant` vs `zh-Hant`). But with a few exceptions, this can be fixed too. Some pragmatism doesn't hurt - even though it is nice that it works for most cases automatically.
[The full script is available here](https://github.com/pietervdvn/MapComplete/blob/develop/scripts/fetchLanguages.ts).
# Results
![](./Language-picker-english.png)
![](./Language-picker-Chinese.png)

View file

@ -86,7 +86,7 @@ export default class OsmFeatureSource {
}
private async LoadTile(z, x, y): Promise<void> {
if (z > 20) {
if (z > 25) {
throw "This is an absurd high zoom level"
}

View file

@ -2,7 +2,7 @@ import {Utils} from "../Utils";
export default class Constants {
public static vNumber = "0.16.3";
public static vNumber = "0.16.4";
public static ImgurApiKey = '7070e7167f0a25a'
public static readonly mapillary_client_token_v4 = "MLY|4441509239301885|b40ad2d3ea105435bd40c7e76993ae85"

View file

@ -367,7 +367,7 @@ export default class LayerConfig extends WithContextLoader {
extraProps.push(new Combine(["This layer will automatically load ", new Link(dep.neededLayer, "./" + dep.neededLayer + ".md"), " into the layout as it depends on it: ", dep.reason, "(" + dep.context + ")"]))
}
for (const revDep of layerIsNeededBy?.get(this.id) ?? []) {
for (const revDep of Utils.Dedup( layerIsNeededBy?.get(this.id) ?? [])) {
extraProps.push(new Combine(["This layer is needed as dependency for layer", new Link(revDep, "#" + revDep)]))
}

View file

@ -779,11 +779,11 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be
}
public static MapToObj<T>(d : Map<string, T>, onValue: ((t:T) => any) = undefined): object{
public static MapToObj<T>(d : Map<string, T>, onValue: ((t:T, key: string) => any) = undefined): object{
const o = {}
d.forEach((value, key) => {
if(onValue !== undefined){
value = onValue(value)
value = onValue(value, key)
}
o[key] = value;
})

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View file

@ -6,11 +6,15 @@
},
"source": {
"osmTags": {
"or": [
"amenity=bicycle_rental",
"bicycle_rental~*",
"service:bicycle:rental=yes",
"rental~.*bicycle.*"
"and": [
{
"or": [
"amenity=bicycle_rental",
"bicycle_rental~*",
"service:bicycle:rental=yes",
"rental~.*bicycle.*"
]
}
]
}
},

View file

@ -2,7 +2,7 @@
"id": "bike_repair_station",
"name": {
"en": "Bicycle pump and repair",
"nl": "Fietspomp and fietsherstel",
"nl": "Fietspomp en fietsherstel",
"fr": "Station velo (réparation, pompe à vélo)",
"gl": "Estación de bicicletas (arranxo, bomba de ar ou ambos)",
"de": "Fahrradstationen (Reparatur, Pumpe oder beides)",

View file

@ -1377,7 +1377,7 @@
},
"mappings": [
{
"if": "socket:socket:schuko:voltage=230 V",
"if": "socket:schuko:voltage=230 V",
"then": {
"en": "<b>Schuko wall plug</b> without ground pin (CEE7/4 type F) outputs 230 volt",
"nl": "<b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F) heeft een spanning van 230 volt"
@ -1412,7 +1412,7 @@
},
"mappings": [
{
"if": "socket:socket:schuko:current=16 A",
"if": "socket:schuko:current=16 A",
"then": {
"en": "<b>Schuko wall plug</b> without ground pin (CEE7/4 type F) outputs at most 16 A",
"nl": "<b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F) levert een stroom van maximaal 16 A"
@ -1447,7 +1447,7 @@
},
"mappings": [
{
"if": "socket:socket:schuko:output=3.6 kw",
"if": "socket:schuko:output=3.6 kw",
"then": {
"en": "<b>Schuko wall plug</b> without ground pin (CEE7/4 type F) outputs at most 3.6 kw A",
"nl": "<b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F) levert een vermogen van maximaal 3.6 kw A"
@ -1482,7 +1482,7 @@
},
"mappings": [
{
"if": "socket:socket:typee:voltage=230 V",
"if": "socket:typee:voltage=230 V",
"then": {
"en": "<b>European wall plug</b> with ground pin (CEE7/4 type E) outputs 230 volt",
"nl": "<b>Europese stekker</b> met aardingspin (CEE7/4 type E) heeft een spanning van 230 volt"
@ -1517,7 +1517,7 @@
},
"mappings": [
{
"if": "socket:socket:typee:current=16 A",
"if": "socket:typee:current=16 A",
"then": {
"en": "<b>European wall plug</b> with ground pin (CEE7/4 type E) outputs at most 16 A",
"nl": "<b>Europese stekker</b> met aardingspin (CEE7/4 type E) levert een stroom van maximaal 16 A"
@ -1552,7 +1552,7 @@
},
"mappings": [
{
"if": "socket:socket:typee:output=3 kw",
"if": "socket:typee:output=3 kw",
"then": {
"en": "<b>European wall plug</b> with ground pin (CEE7/4 type E) outputs at most 3 kw A",
"nl": "<b>Europese stekker</b> met aardingspin (CEE7/4 type E) levert een vermogen van maximaal 3 kw A"
@ -1563,7 +1563,7 @@
}
},
{
"if": "socket:socket:typee:output=22 kw",
"if": "socket:typee:output=22 kw",
"then": {
"en": "<b>European wall plug</b> with ground pin (CEE7/4 type E) outputs at most 22 kw A",
"nl": "<b>Europese stekker</b> met aardingspin (CEE7/4 type E) levert een vermogen van maximaal 22 kw A"
@ -1598,7 +1598,7 @@
},
"mappings": [
{
"if": "socket:socket:chademo:voltage=500 V",
"if": "socket:chademo:voltage=500 V",
"then": {
"en": "<b>Chademo</b> outputs 500 volt",
"nl": "<b>Chademo</b> heeft een spanning van 500 volt"
@ -1633,7 +1633,7 @@
},
"mappings": [
{
"if": "socket:socket:chademo:current=120 A",
"if": "socket:chademo:current=120 A",
"then": {
"en": "<b>Chademo</b> outputs at most 120 A",
"nl": "<b>Chademo</b> levert een stroom van maximaal 120 A"
@ -1668,7 +1668,7 @@
},
"mappings": [
{
"if": "socket:socket:chademo:output=50 kw",
"if": "socket:chademo:output=50 kw",
"then": {
"en": "<b>Chademo</b> outputs at most 50 kw A",
"nl": "<b>Chademo</b> levert een vermogen van maximaal 50 kw A"
@ -1703,7 +1703,7 @@
},
"mappings": [
{
"if": "socket:socket:type1_cable:voltage=200 V",
"if": "socket:type1_cable:voltage=200 V",
"then": {
"en": "<b>Type 1 with cable</b> (J1772) outputs 200 volt",
"nl": "<b>Type 1 met kabel</b> (J1772) heeft een spanning van 200 volt"
@ -1714,7 +1714,7 @@
}
},
{
"if": "socket:socket:type1_cable:voltage=240 V",
"if": "socket:type1_cable:voltage=240 V",
"then": {
"en": "<b>Type 1 with cable</b> (J1772) outputs 240 volt",
"nl": "<b>Type 1 met kabel</b> (J1772) heeft een spanning van 240 volt"
@ -1749,7 +1749,7 @@
},
"mappings": [
{
"if": "socket:socket:type1_cable:current=32 A",
"if": "socket:type1_cable:current=32 A",
"then": {
"en": "<b>Type 1 with cable</b> (J1772) outputs at most 32 A",
"nl": "<b>Type 1 met kabel</b> (J1772) levert een stroom van maximaal 32 A"
@ -1784,7 +1784,7 @@
},
"mappings": [
{
"if": "socket:socket:type1_cable:output=3.7 kw",
"if": "socket:type1_cable:output=3.7 kw",
"then": {
"en": "<b>Type 1 with cable</b> (J1772) outputs at most 3.7 kw A",
"nl": "<b>Type 1 met kabel</b> (J1772) levert een vermogen van maximaal 3.7 kw A"
@ -1795,7 +1795,7 @@
}
},
{
"if": "socket:socket:type1_cable:output=7 kw",
"if": "socket:type1_cable:output=7 kw",
"then": {
"en": "<b>Type 1 with cable</b> (J1772) outputs at most 7 kw A",
"nl": "<b>Type 1 met kabel</b> (J1772) levert een vermogen van maximaal 7 kw A"
@ -1830,7 +1830,7 @@
},
"mappings": [
{
"if": "socket:socket:type1:voltage=200 V",
"if": "socket:type1:voltage=200 V",
"then": {
"en": "<b>Type 1 <i>without</i> cable</b> (J1772) outputs 200 volt",
"nl": "<b>Type 1 <i>zonder</i> kabel</b> (J1772) heeft een spanning van 200 volt"
@ -1841,7 +1841,7 @@
}
},
{
"if": "socket:socket:type1:voltage=240 V",
"if": "socket:type1:voltage=240 V",
"then": {
"en": "<b>Type 1 <i>without</i> cable</b> (J1772) outputs 240 volt",
"nl": "<b>Type 1 <i>zonder</i> kabel</b> (J1772) heeft een spanning van 240 volt"
@ -1876,7 +1876,7 @@
},
"mappings": [
{
"if": "socket:socket:type1:current=32 A",
"if": "socket:type1:current=32 A",
"then": {
"en": "<b>Type 1 <i>without</i> cable</b> (J1772) outputs at most 32 A",
"nl": "<b>Type 1 <i>zonder</i> kabel</b> (J1772) levert een stroom van maximaal 32 A"
@ -1911,7 +1911,7 @@
},
"mappings": [
{
"if": "socket:socket:type1:output=3.7 kw",
"if": "socket:type1:output=3.7 kw",
"then": {
"en": "<b>Type 1 <i>without</i> cable</b> (J1772) outputs at most 3.7 kw A",
"nl": "<b>Type 1 <i>zonder</i> kabel</b> (J1772) levert een vermogen van maximaal 3.7 kw A"
@ -1922,7 +1922,7 @@
}
},
{
"if": "socket:socket:type1:output=6.6 kw",
"if": "socket:type1:output=6.6 kw",
"then": {
"en": "<b>Type 1 <i>without</i> cable</b> (J1772) outputs at most 6.6 kw A",
"nl": "<b>Type 1 <i>zonder</i> kabel</b> (J1772) levert een vermogen van maximaal 6.6 kw A"
@ -1933,7 +1933,7 @@
}
},
{
"if": "socket:socket:type1:output=7 kw",
"if": "socket:type1:output=7 kw",
"then": {
"en": "<b>Type 1 <i>without</i> cable</b> (J1772) outputs at most 7 kw A",
"nl": "<b>Type 1 <i>zonder</i> kabel</b> (J1772) levert een vermogen van maximaal 7 kw A"
@ -1944,7 +1944,7 @@
}
},
{
"if": "socket:socket:type1:output=7.2 kw",
"if": "socket:type1:output=7.2 kw",
"then": {
"en": "<b>Type 1 <i>without</i> cable</b> (J1772) outputs at most 7.2 kw A",
"nl": "<b>Type 1 <i>zonder</i> kabel</b> (J1772) levert een vermogen van maximaal 7.2 kw A"
@ -1979,7 +1979,7 @@
},
"mappings": [
{
"if": "socket:socket:type1_combo:voltage=400 V",
"if": "socket:type1_combo:voltage=400 V",
"then": {
"en": "<b>Type 1 CCS</b> (aka Type 1 Combo) outputs 400 volt",
"nl": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo) heeft een spanning van 400 volt"
@ -1990,7 +1990,7 @@
}
},
{
"if": "socket:socket:type1_combo:voltage=1000 V",
"if": "socket:type1_combo:voltage=1000 V",
"then": {
"en": "<b>Type 1 CCS</b> (aka Type 1 Combo) outputs 1000 volt",
"nl": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo) heeft een spanning van 1000 volt"
@ -2025,7 +2025,7 @@
},
"mappings": [
{
"if": "socket:socket:type1_combo:current=50 A",
"if": "socket:type1_combo:current=50 A",
"then": {
"en": "<b>Type 1 CCS</b> (aka Type 1 Combo) outputs at most 50 A",
"nl": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo) levert een stroom van maximaal 50 A"
@ -2036,7 +2036,7 @@
}
},
{
"if": "socket:socket:type1_combo:current=125 A",
"if": "socket:type1_combo:current=125 A",
"then": {
"en": "<b>Type 1 CCS</b> (aka Type 1 Combo) outputs at most 125 A",
"nl": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo) levert een stroom van maximaal 125 A"
@ -2071,7 +2071,7 @@
},
"mappings": [
{
"if": "socket:socket:type1_combo:output=50 kw",
"if": "socket:type1_combo:output=50 kw",
"then": {
"en": "<b>Type 1 CCS</b> (aka Type 1 Combo) outputs at most 50 kw A",
"nl": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo) levert een vermogen van maximaal 50 kw A"
@ -2082,7 +2082,7 @@
}
},
{
"if": "socket:socket:type1_combo:output=62.5 kw",
"if": "socket:type1_combo:output=62.5 kw",
"then": {
"en": "<b>Type 1 CCS</b> (aka Type 1 Combo) outputs at most 62.5 kw A",
"nl": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo) levert een vermogen van maximaal 62.5 kw A"
@ -2093,7 +2093,7 @@
}
},
{
"if": "socket:socket:type1_combo:output=150 kw",
"if": "socket:type1_combo:output=150 kw",
"then": {
"en": "<b>Type 1 CCS</b> (aka Type 1 Combo) outputs at most 150 kw A",
"nl": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo) levert een vermogen van maximaal 150 kw A"
@ -2104,7 +2104,7 @@
}
},
{
"if": "socket:socket:type1_combo:output=350 kw",
"if": "socket:type1_combo:output=350 kw",
"then": {
"en": "<b>Type 1 CCS</b> (aka Type 1 Combo) outputs at most 350 kw A",
"nl": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo) levert een vermogen van maximaal 350 kw A"
@ -2139,7 +2139,7 @@
},
"mappings": [
{
"if": "socket:socket:tesla_supercharger:voltage=480 V",
"if": "socket:tesla_supercharger:voltage=480 V",
"then": {
"en": "<b>Tesla Supercharger</b> outputs 480 volt",
"nl": "<b>Tesla Supercharger</b> heeft een spanning van 480 volt"
@ -2174,7 +2174,7 @@
},
"mappings": [
{
"if": "socket:socket:tesla_supercharger:current=125 A",
"if": "socket:tesla_supercharger:current=125 A",
"then": {
"en": "<b>Tesla Supercharger</b> outputs at most 125 A",
"nl": "<b>Tesla Supercharger</b> levert een stroom van maximaal 125 A"
@ -2185,7 +2185,7 @@
}
},
{
"if": "socket:socket:tesla_supercharger:current=350 A",
"if": "socket:tesla_supercharger:current=350 A",
"then": {
"en": "<b>Tesla Supercharger</b> outputs at most 350 A",
"nl": "<b>Tesla Supercharger</b> levert een stroom van maximaal 350 A"
@ -2220,7 +2220,7 @@
},
"mappings": [
{
"if": "socket:socket:tesla_supercharger:output=120 kw",
"if": "socket:tesla_supercharger:output=120 kw",
"then": {
"en": "<b>Tesla Supercharger</b> outputs at most 120 kw A",
"nl": "<b>Tesla Supercharger</b> levert een vermogen van maximaal 120 kw A"
@ -2231,7 +2231,7 @@
}
},
{
"if": "socket:socket:tesla_supercharger:output=150 kw",
"if": "socket:tesla_supercharger:output=150 kw",
"then": {
"en": "<b>Tesla Supercharger</b> outputs at most 150 kw A",
"nl": "<b>Tesla Supercharger</b> levert een vermogen van maximaal 150 kw A"
@ -2242,7 +2242,7 @@
}
},
{
"if": "socket:socket:tesla_supercharger:output=250 kw",
"if": "socket:tesla_supercharger:output=250 kw",
"then": {
"en": "<b>Tesla Supercharger</b> outputs at most 250 kw A",
"nl": "<b>Tesla Supercharger</b> levert een vermogen van maximaal 250 kw A"
@ -2277,7 +2277,7 @@
},
"mappings": [
{
"if": "socket:socket:type2:voltage=230 V",
"if": "socket:type2:voltage=230 V",
"then": {
"en": "<b>Type 2</b> (mennekes) outputs 230 volt",
"nl": "<b>Type 2</b> (mennekes) heeft een spanning van 230 volt"
@ -2288,7 +2288,7 @@
}
},
{
"if": "socket:socket:type2:voltage=400 V",
"if": "socket:type2:voltage=400 V",
"then": {
"en": "<b>Type 2</b> (mennekes) outputs 400 volt",
"nl": "<b>Type 2</b> (mennekes) heeft een spanning van 400 volt"
@ -2323,7 +2323,7 @@
},
"mappings": [
{
"if": "socket:socket:type2:current=16 A",
"if": "socket:type2:current=16 A",
"then": {
"en": "<b>Type 2</b> (mennekes) outputs at most 16 A",
"nl": "<b>Type 2</b> (mennekes) levert een stroom van maximaal 16 A"
@ -2334,7 +2334,7 @@
}
},
{
"if": "socket:socket:type2:current=32 A",
"if": "socket:type2:current=32 A",
"then": {
"en": "<b>Type 2</b> (mennekes) outputs at most 32 A",
"nl": "<b>Type 2</b> (mennekes) levert een stroom van maximaal 32 A"
@ -2369,7 +2369,7 @@
},
"mappings": [
{
"if": "socket:socket:type2:output=11 kw",
"if": "socket:type2:output=11 kw",
"then": {
"en": "<b>Type 2</b> (mennekes) outputs at most 11 kw A",
"nl": "<b>Type 2</b> (mennekes) levert een vermogen van maximaal 11 kw A"
@ -2380,7 +2380,7 @@
}
},
{
"if": "socket:socket:type2:output=22 kw",
"if": "socket:type2:output=22 kw",
"then": {
"en": "<b>Type 2</b> (mennekes) outputs at most 22 kw A",
"nl": "<b>Type 2</b> (mennekes) levert een vermogen van maximaal 22 kw A"
@ -2415,7 +2415,7 @@
},
"mappings": [
{
"if": "socket:socket:type2_combo:voltage=500 V",
"if": "socket:type2_combo:voltage=500 V",
"then": {
"en": "<b>Type 2 CCS</b> (mennekes) outputs 500 volt",
"nl": "<b>Type 2 CCS</b> (mennekes) heeft een spanning van 500 volt"
@ -2426,7 +2426,7 @@
}
},
{
"if": "socket:socket:type2_combo:voltage=920 V",
"if": "socket:type2_combo:voltage=920 V",
"then": {
"en": "<b>Type 2 CCS</b> (mennekes) outputs 920 volt",
"nl": "<b>Type 2 CCS</b> (mennekes) heeft een spanning van 920 volt"
@ -2461,7 +2461,7 @@
},
"mappings": [
{
"if": "socket:socket:type2_combo:current=125 A",
"if": "socket:type2_combo:current=125 A",
"then": {
"en": "<b>Type 2 CCS</b> (mennekes) outputs at most 125 A",
"nl": "<b>Type 2 CCS</b> (mennekes) levert een stroom van maximaal 125 A"
@ -2472,7 +2472,7 @@
}
},
{
"if": "socket:socket:type2_combo:current=350 A",
"if": "socket:type2_combo:current=350 A",
"then": {
"en": "<b>Type 2 CCS</b> (mennekes) outputs at most 350 A",
"nl": "<b>Type 2 CCS</b> (mennekes) levert een stroom van maximaal 350 A"
@ -2507,7 +2507,7 @@
},
"mappings": [
{
"if": "socket:socket:type2_combo:output=50 kw",
"if": "socket:type2_combo:output=50 kw",
"then": {
"en": "<b>Type 2 CCS</b> (mennekes) outputs at most 50 kw A",
"nl": "<b>Type 2 CCS</b> (mennekes) levert een vermogen van maximaal 50 kw A"
@ -2542,7 +2542,7 @@
},
"mappings": [
{
"if": "socket:socket:type2_cable:voltage=230 V",
"if": "socket:type2_cable:voltage=230 V",
"then": {
"en": "<b>Type 2 with cable</b> (mennekes) outputs 230 volt",
"nl": "<b>Type 2 met kabel</b> (J1772) heeft een spanning van 230 volt"
@ -2553,7 +2553,7 @@
}
},
{
"if": "socket:socket:type2_cable:voltage=400 V",
"if": "socket:type2_cable:voltage=400 V",
"then": {
"en": "<b>Type 2 with cable</b> (mennekes) outputs 400 volt",
"nl": "<b>Type 2 met kabel</b> (J1772) heeft een spanning van 400 volt"
@ -2588,7 +2588,7 @@
},
"mappings": [
{
"if": "socket:socket:type2_cable:current=16 A",
"if": "socket:type2_cable:current=16 A",
"then": {
"en": "<b>Type 2 with cable</b> (mennekes) outputs at most 16 A",
"nl": "<b>Type 2 met kabel</b> (J1772) levert een stroom van maximaal 16 A"
@ -2599,7 +2599,7 @@
}
},
{
"if": "socket:socket:type2_cable:current=32 A",
"if": "socket:type2_cable:current=32 A",
"then": {
"en": "<b>Type 2 with cable</b> (mennekes) outputs at most 32 A",
"nl": "<b>Type 2 met kabel</b> (J1772) levert een stroom van maximaal 32 A"
@ -2634,7 +2634,7 @@
},
"mappings": [
{
"if": "socket:socket:type2_cable:output=11 kw",
"if": "socket:type2_cable:output=11 kw",
"then": {
"en": "<b>Type 2 with cable</b> (mennekes) outputs at most 11 kw A",
"nl": "<b>Type 2 met kabel</b> (J1772) levert een vermogen van maximaal 11 kw A"
@ -2645,7 +2645,7 @@
}
},
{
"if": "socket:socket:type2_cable:output=22 kw",
"if": "socket:type2_cable:output=22 kw",
"then": {
"en": "<b>Type 2 with cable</b> (mennekes) outputs at most 22 kw A",
"nl": "<b>Type 2 met kabel</b> (J1772) levert een vermogen van maximaal 22 kw A"
@ -2680,7 +2680,7 @@
},
"mappings": [
{
"if": "socket:socket:tesla_supercharger_ccs:voltage=500 V",
"if": "socket:tesla_supercharger_ccs:voltage=500 V",
"then": {
"en": "<b>Tesla Supercharger CCS</b> (a branded type2_css) outputs 500 volt",
"nl": "<b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo) heeft een spanning van 500 volt"
@ -2691,7 +2691,7 @@
}
},
{
"if": "socket:socket:tesla_supercharger_ccs:voltage=920 V",
"if": "socket:tesla_supercharger_ccs:voltage=920 V",
"then": {
"en": "<b>Tesla Supercharger CCS</b> (a branded type2_css) outputs 920 volt",
"nl": "<b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo) heeft een spanning van 920 volt"
@ -2726,7 +2726,7 @@
},
"mappings": [
{
"if": "socket:socket:tesla_supercharger_ccs:current=125 A",
"if": "socket:tesla_supercharger_ccs:current=125 A",
"then": {
"en": "<b>Tesla Supercharger CCS</b> (a branded type2_css) outputs at most 125 A",
"nl": "<b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo) levert een stroom van maximaal 125 A"
@ -2737,7 +2737,7 @@
}
},
{
"if": "socket:socket:tesla_supercharger_ccs:current=350 A",
"if": "socket:tesla_supercharger_ccs:current=350 A",
"then": {
"en": "<b>Tesla Supercharger CCS</b> (a branded type2_css) outputs at most 350 A",
"nl": "<b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo) levert een stroom van maximaal 350 A"
@ -2772,7 +2772,7 @@
},
"mappings": [
{
"if": "socket:socket:tesla_supercharger_ccs:output=50 kw",
"if": "socket:tesla_supercharger_ccs:output=50 kw",
"then": {
"en": "<b>Tesla Supercharger CCS</b> (a branded type2_css) outputs at most 50 kw A",
"nl": "<b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo) levert een vermogen van maximaal 50 kw A"
@ -2807,7 +2807,7 @@
},
"mappings": [
{
"if": "socket:socket:tesla_destination:voltage=480 V",
"if": "socket:tesla_destination:voltage=480 V",
"then": {
"en": "<b>Tesla Supercharger (destination)</b> outputs 480 volt",
"nl": "<b>Tesla Supercharger (destination)</b> heeft een spanning van 480 volt"
@ -2842,7 +2842,7 @@
},
"mappings": [
{
"if": "socket:socket:tesla_destination:current=125 A",
"if": "socket:tesla_destination:current=125 A",
"then": {
"en": "<b>Tesla Supercharger (destination)</b> outputs at most 125 A",
"nl": "<b>Tesla Supercharger (destination)</b> levert een stroom van maximaal 125 A"
@ -2853,7 +2853,7 @@
}
},
{
"if": "socket:socket:tesla_destination:current=350 A",
"if": "socket:tesla_destination:current=350 A",
"then": {
"en": "<b>Tesla Supercharger (destination)</b> outputs at most 350 A",
"nl": "<b>Tesla Supercharger (destination)</b> levert een stroom van maximaal 350 A"
@ -2888,7 +2888,7 @@
},
"mappings": [
{
"if": "socket:socket:tesla_destination:output=120 kw",
"if": "socket:tesla_destination:output=120 kw",
"then": {
"en": "<b>Tesla Supercharger (destination)</b> outputs at most 120 kw A",
"nl": "<b>Tesla Supercharger (destination)</b> levert een vermogen van maximaal 120 kw A"
@ -2899,7 +2899,7 @@
}
},
{
"if": "socket:socket:tesla_destination:output=150 kw",
"if": "socket:tesla_destination:output=150 kw",
"then": {
"en": "<b>Tesla Supercharger (destination)</b> outputs at most 150 kw A",
"nl": "<b>Tesla Supercharger (destination)</b> levert een vermogen van maximaal 150 kw A"
@ -2910,7 +2910,7 @@
}
},
{
"if": "socket:socket:tesla_destination:output=250 kw",
"if": "socket:tesla_destination:output=250 kw",
"then": {
"en": "<b>Tesla Supercharger (destination)</b> outputs at most 250 kw A",
"nl": "<b>Tesla Supercharger (destination)</b> levert een vermogen van maximaal 250 kw A"
@ -2945,7 +2945,7 @@
},
"mappings": [
{
"if": "socket:socket:tesla_destination:voltage=230 V",
"if": "socket:tesla_destination:voltage=230 V",
"then": {
"en": "<b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla) outputs 230 volt",
"nl": "<b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo) heeft een spanning van 230 volt"
@ -2956,7 +2956,7 @@
}
},
{
"if": "socket:socket:tesla_destination:voltage=400 V",
"if": "socket:tesla_destination:voltage=400 V",
"then": {
"en": "<b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla) outputs 400 volt",
"nl": "<b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo) heeft een spanning van 400 volt"
@ -2991,7 +2991,7 @@
},
"mappings": [
{
"if": "socket:socket:tesla_destination:current=16 A",
"if": "socket:tesla_destination:current=16 A",
"then": {
"en": "<b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla) outputs at most 16 A",
"nl": "<b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo) levert een stroom van maximaal 16 A"
@ -3002,7 +3002,7 @@
}
},
{
"if": "socket:socket:tesla_destination:current=32 A",
"if": "socket:tesla_destination:current=32 A",
"then": {
"en": "<b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla) outputs at most 32 A",
"nl": "<b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo) levert een stroom van maximaal 32 A"
@ -3037,7 +3037,7 @@
},
"mappings": [
{
"if": "socket:socket:tesla_destination:output=11 kw",
"if": "socket:tesla_destination:output=11 kw",
"then": {
"en": "<b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla) outputs at most 11 kw A",
"nl": "<b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo) levert een vermogen van maximaal 11 kw A"
@ -3048,7 +3048,7 @@
}
},
{
"if": "socket:socket:tesla_destination:output=22 kw",
"if": "socket:tesla_destination:output=22 kw",
"then": {
"en": "<b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla) outputs at most 22 kw A",
"nl": "<b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo) levert een vermogen van maximaal 22 kw A"
@ -3083,7 +3083,7 @@
},
"mappings": [
{
"if": "socket:socket:USB-A:voltage=5 V",
"if": "socket:USB-A:voltage=5 V",
"then": {
"en": "<b>USB</b> to charge phones and small electronics outputs 5 volt",
"nl": "<b>USB</b> om GSMs en kleine electronica op te laden heeft een spanning van 5 volt"
@ -3118,7 +3118,7 @@
},
"mappings": [
{
"if": "socket:socket:USB-A:current=1 A",
"if": "socket:USB-A:current=1 A",
"then": {
"en": "<b>USB</b> to charge phones and small electronics outputs at most 1 A",
"nl": "<b>USB</b> om GSMs en kleine electronica op te laden levert een stroom van maximaal 1 A"
@ -3129,7 +3129,7 @@
}
},
{
"if": "socket:socket:USB-A:current=2 A",
"if": "socket:USB-A:current=2 A",
"then": {
"en": "<b>USB</b> to charge phones and small electronics outputs at most 2 A",
"nl": "<b>USB</b> om GSMs en kleine electronica op te laden levert een stroom van maximaal 2 A"
@ -3164,7 +3164,7 @@
},
"mappings": [
{
"if": "socket:socket:USB-A:output=5w",
"if": "socket:USB-A:output=5w",
"then": {
"en": "<b>USB</b> to charge phones and small electronics outputs at most 5w A",
"nl": "<b>USB</b> om GSMs en kleine electronica op te laden levert een vermogen van maximaal 5w A"
@ -3175,7 +3175,7 @@
}
},
{
"if": "socket:socket:USB-A:output=10w",
"if": "socket:USB-A:output=10w",
"then": {
"en": "<b>USB</b> to charge phones and small electronics outputs at most 10w A",
"nl": "<b>USB</b> om GSMs en kleine electronica op te laden levert een vermogen van maximaal 10w A"

View file

@ -177,7 +177,7 @@ function run(file, protojson) {
},
mappings: e.commonVoltages.map(voltage => {
return {
if: `socket:${e.key}:voltage=${voltage} V`,
if: `${e.key}:voltage=${voltage} V`,
then: {
en: `${e.description.get("en")} outputs ${voltage} volt`,
nl: `${e.description.get("nl")} heeft een spanning van ${voltage} volt`
@ -211,7 +211,7 @@ function run(file, protojson) {
},
mappings: e.commonCurrents.map(current => {
return {
if: `socket:${e.key}:current=${current} A`,
if: `${e.key}:current=${current} A`,
then: {
en: `${e.description.get("en")} outputs at most ${current} A`,
nl: `${e.description.get("nl")} levert een stroom van maximaal ${current} A`
@ -245,7 +245,7 @@ function run(file, protojson) {
},
mappings: e.commonOutputs.map(output => {
return {
if: `socket:${e.key}:output=${output}`,
if: `${e.key}:output=${output}`,
then: {
en: `${e.description.get("en")} outputs at most ${output} A`,
nl: `${e.description.get("nl")} levert een vermogen van maximaal ${output} A`

View file

@ -353,7 +353,7 @@
{
"if": "diet:vegetarian=yes",
"then": {
"en": "No vegetarian options are available",
"en": "Vegetarian options are available",
"nl": "Vegetarische opties zijn beschikbaar"
}
},

View file

@ -669,7 +669,8 @@
"en": "Payment is done using a dedicated app",
"nl": "Betalen via een app van het netwerk",
"hu": "Fizetés erre a célra szolgáló alkalmazással",
"zh_Hant": "使用專用應用程式付款"
"zh_Hant": "使用專用應用程式付款",
"de": "Die Bezahlung erfolgt über eine spezielle App"
}
},
{
@ -680,7 +681,8 @@
"en": "Payment is done using a membership card",
"nl": "Betalen via een lidkaart van het netwerk",
"hu": "Fizetési tagsági kártyával",
"zh_Hant": "使用會員卡付款"
"zh_Hant": "使用會員卡付款",
"de": "Die Bezahlung erfolgt mit einer Mitgliedskarte"
}
}
]
@ -826,7 +828,9 @@
"then": {
"en": "Located on the first basement level",
"nl": "Bevindt zich in de eerste kelderverdieping",
"zh_Hant": "位於地下一樓"
"zh_Hant": "位於地下一樓",
"de": "Ist im 1. Untergeschoss",
"hu": "Az első alagsori szinten"
}
}
]

View file

@ -2,15 +2,18 @@
"id": "bicycle_rental",
"title": {
"en": "Bicycle rental",
"nl": "Fietsverhuur"
"nl": "Fietsverhuur",
"de": "Fahrradverleih"
},
"shortDescription": {
"en": "A map with bicycle rental stations and bicycle rental shops",
"nl": "Een kaart met fietsverhuurpunten en fietsverhuurzaken"
"nl": "Een kaart met fietsverhuurpunten en fietsverhuurzaken",
"de": "Eine Karte mit Fahrradverleihstationen und Fahrradverleihern"
},
"description": {
"en": "On this map, you'll find the many bicycle rental stations as they are known by OpenStreetMap",
"nl": "Op deze kaart vind je verschillende fietsverhuurpunten en fietsverhuurzaken"
"nl": "Op deze kaart vind je verschillende fietsverhuurpunten en fietsverhuurzaken",
"de": "Auf dieser Karte finden Sie die vielen Fahrradverleihstationen, wie sie auf OpenStreetMap eingetragen wurden"
},
"maintainer": "",
"icon": "./assets/themes/bicycle_rental/logo.svg",

View file

@ -18,7 +18,7 @@
"description": {
"en": "A public bookcase is a small streetside cabinet, box, old phone booth or some other objects where books are stored. Everyone can place or take a book. This map aims to collect all these bookcases. You can discover new bookcases nearby and, with a free OpenStreetMap account, quickly add your favourite bookcases.",
"nl": "Een boekenruilkast is een kastje waar iedereen een boek kan nemen of achterlaten. Op deze kaart kan je deze boekenruilkasten terugvinden en met een gratis OpenStreetMap-account, ook boekenruilkasten toevoegen of informatie verbeteren",
"de": "Bücherschränke sind alte Schaltschränke, Telefonzellen oder andere Einrichtungen, zur Aufbewahrung von Büchern. Jeder kann Bücher abstellen oder mitnehmen. Die Karte zielt darauf ab, alle Orte mit Bücherschränken zu sammeln. Sie können neue Bücherschränke in der Nähe entdecken und mit einem kostenlosen OpenStreetMap-Konto schnell Ihre Lieblingsbücherschränke hinzufügen.",
"de": "Bücherschränke sind alte Schaltschränke, Telefonzellen oder andere Einrichtungen zur Aufbewahrung von Büchern. Jeder kann Bücher abgeben oder mitnehmen. Die Karte soll helfen, alle Orte mit Bücherschränken zu sammeln. Sie können neue Bücherschränke in der Nähe entdecken und mit einem kostenlosen OpenStreetMap-Konto schnell Ihre Lieblingsbücherschränke hinzufügen.",
"fr": "Une microbibliothèques, également appelée boite à livre, est un élément de mobilier urbain (étagère, armoire, etc) dans lequel sont stockés des livres et autres objets en accès libre. Découvrez les boites à livres prêt de chez vous, ou ajouter en une nouvelle à l'aide de votre compte OpenStreetMap.",
"ru": "Общественный книжный шкаф - это небольшой уличный шкаф, коробка, старый телефонный аппарат или другие предметы, где хранятся книги. Каждый может положить или взять книгу. Цель этой карты - собрать все эти книжные шкафы. Вы можете обнаружить новые книжные шкафы поблизости и, имея бесплатный аккаунт OpenStreetMap, быстро добавить свои любимые книжные шкафы.",
"ja": "公共の本棚とは、本が保管されている小さな街角のキャビネット、箱、古い電話のトランク、その他の物のことです。誰でも本を置いたり持ったりすることができます。このマップは、すべての公共の本棚を収集することを目的としています。近くで新しい本棚を見つけることができ、無料のOpenStreetMapアカウントを使えば、お気に入りの本棚を簡単に追加できます。",

View file

@ -13,7 +13,8 @@
},
"description": {
"en": "Pubs and bars",
"nl": "Cafés, kroegen en drinkgelegenheden"
"nl": "Cafés, kroegen en drinkgelegenheden",
"de": "Kneipen und Bars"
},
"maintainer": "",
"icon": "./assets/layers/cafe_pub/pub.svg",

View file

@ -104,7 +104,7 @@
]
},
"description": {
"de": "Ein Kletterverein oder eine Organisation",
"de": "Ein Kletterverein oder -organisation",
"nl": "Een klimclub of organisatie",
"en": "A climbing club or organisation",
"ja": "クライミングクラブや団体",
@ -196,7 +196,7 @@
"hu": "Mászószervezet"
},
"description": {
"de": "Eine Organisation, welche sich mit dem Klettern beschäftigt",
"de": "Eine Organisation, die sich mit dem Klettern beschäftigt",
"nl": "Een VZW die werkt rond klimmen",
"en": "An NGO working around climbing",
"ja": "登山に関わるNGO",
@ -1341,7 +1341,7 @@
"it": "Qual è il livello della via più difficile qua, secondo il sistema di classificazione francese?"
},
"render": {
"de": "Die schwerste Route hat hier die Schwierigkeit {climbing:grade:french:max} (französisch/belgisches System)",
"de": "Die schwierigste Route hat hier die Schwierigkeitsstufe {climbing:grade:french:max} (französisch/belgisches System)",
"en": "The highest grade is {climbing:grade:french:max} according to the french/belgian system",
"nl": "De maximale klimmoeilijkheid is {climbing:grade:french:max} volgens het Franse/Belgische systeem",
"ja": "フランス/ベルギーのランク評価システムでは、最大の難易度は{climbing:grade:french:max}です",

View file

@ -3,18 +3,21 @@
"title": {
"en": "Entrances",
"zh_Hant": "出入口",
"hu": "Épületek bejáratai"
"hu": "Épületek bejáratai",
"de": "Eingänge"
},
"icon": "./assets/layers/entrance/door.svg",
"description": {
"en": "A map showing all entrances, which surveys for important aspects for wheelchair users",
"zh_Hant": "顯示所有出入口的地圖,勘查對輪椅使用者重要的資訊",
"hu": "Épületek bejáratai mutató térkép, amely a kerekesszékkel közlekedőknek fontos szempontokat jeleníti meg"
"hu": "Épületek bejáratai mutató térkép, amely a kerekesszékkel közlekedőknek fontos szempontokat jeleníti meg",
"de": "Eine Karte mit allen Eingängen, die wichtige Aspekte für Rollstuhlfahrer erfasst"
},
"shortDescription": {
"en": "Survey entrances to help wheelchair routing",
"zh_Hant": "幫助輪椅導航來勘查出入口",
"hu": "Akadálymentes útvonaltervezést segítő bejáratok feltérképezése"
"hu": "Akadálymentes útvonaltervezést segítő bejáratok feltérképezése",
"de": "Eingänge prüfen, um die Rollstuhlnavigation zu verbessern"
},
"version": "2021-12-04",
"maintainer": "MapComplete",

View file

@ -7,7 +7,8 @@
"it": "Apri Carta Etimologica",
"ru": "Открытая этимологическая карта",
"zh_Hant": "開放詞源地圖",
"hu": "Etimológiai térkép"
"hu": "Etimológiai térkép",
"fr": "Open Etymology Map"
},
"shortDescription": {
"en": "What is the origin of a toponym?",
@ -15,7 +16,8 @@
"de": "Was ist der Ursprung eines Ortsnamens?",
"it": "Qual è lorigine di un toponimo?",
"zh_Hant": "地名的由來是?",
"hu": "Mi az eredete egy helynévnek?"
"hu": "Mi az eredete egy helynévnek?",
"fr": "Quelle est l'origine de ce toponyme ?"
},
"description": {
"en": "On this map, you can see what an object is named after. The streets, buildings, ... come from OpenStreetMap which got linked with Wikidata. In the popup, you'll see the Wikipedia article (if it exists) or a wikidata box of what the object is named after. If the object itself has a wikipedia page, that'll be shown too.<br/><br/><b>You can help contribute too!</b>Zoom in enough and <i>all</i> streets will show up. You can click one and a Wikidata-search box will popup. With a few clicks, you can add an etymology link. Note that you need a free OpenStreetMap account to do this.",
@ -48,7 +50,8 @@
"de": "Straßen ohne Informationen zur Namensherkunft",
"it": "Strade senza informazioni etimologiche",
"zh_Hant": "道路沒有詞源資訊",
"hu": "Etimológiai adat nélküli utcák"
"hu": "Etimológiai adat nélküli utcák",
"fr": "Route sans origine étymologique"
},
"minzoom": 18,
"source": {
@ -72,7 +75,8 @@
"de": "Parks und Waldflächen ohne Informationen zur Namensherkunft",
"it": "Parchi e foreste senza informazioni etimologiche",
"zh_Hant": "公園與森哥沒有詞源資訊",
"hu": "Etimológiai adat nélküli parkok és erdők"
"hu": "Etimológiai adat nélküli parkok és erdők",
"fr": "Parcs et forêts sans origine étymologique"
},
"minzoom": 18,
"source": {
@ -95,7 +99,9 @@
"override": {
"id": "education_institutions_without_etymology",
"=name": {
"en": "Education institutions without etymology information"
"en": "Education institutions without etymology information",
"de": "Bildungseinrichtungen ohne Informationen zur Etymologie",
"fr": "Institutions d'éducation sans origine étymologique"
},
"minzoom": 18,
"source": {
@ -120,7 +126,8 @@
"override": {
"id": "cultural_places_without_etymology",
"=name": {
"en": "Cultural places without etymology information"
"en": "Cultural places without etymology information",
"de": "Kulturelle Orte ohne etymologische Informationen"
},
"minzoom": 18,
"source": {
@ -146,7 +153,8 @@
"override": {
"id": "toursistic_places_without_etymology",
"=name": {
"en": "Toursistic places without etymology information"
"en": "Toursistic places without etymology information",
"de": "Touristische Orte ohne Angaben zur Etymologie"
},
"minzoom": 18,
"source": {
@ -171,7 +179,8 @@
"override": {
"id": "health_and_social_places_without_etymology",
"=name": {
"en": "Healtch and social places without etymology information"
"en": "Health and social places without etymology information",
"de": "Gesundheits- und Sozialeinrichtungen ohne etymologische Informationen"
},
"minzoom": 18,
"source": {
@ -195,7 +204,8 @@
"override": {
"id": "sport_places_without_etymology",
"=name": {
"en": "Sport places without etymology information"
"en": "Sport places without etymology information",
"de": "Sportstätten ohne etymologische Informationen"
},
"minzoom": 18,
"source": {

View file

@ -11,7 +11,8 @@
},
"description": {
"nl": "Restaurants en fast food",
"en": "Restaurants and fast food"
"en": "Restaurants and fast food",
"de": "Restaurants und Fast Food"
},
"maintainer": "",
"icon": "./assets/layers/food/restaurant.svg",

View file

@ -3,11 +3,13 @@
"title": {
"nl": "Friturenkaart",
"en": "Fries shops",
"fr": "Carte des friteries"
"fr": "Carte des friteries",
"de": "Pommes-frites-Läden"
},
"description": {
"en": "On this map, you'll find your favourite fries shop!",
"nl": "Op deze kaart vind je je favoriete frituur!"
"nl": "Op deze kaart vind je je favoriete frituur!",
"de": "Auf dieser Karte findest du deine Lieblings-Pommesbude!"
},
"maintainer": "",
"icon": "./assets/themes/fritures/logo.svg",

View file

@ -9,7 +9,8 @@
"description": {
"nl": "Dit thema helpt het GRB importeren.",
"en": "This theme is an attempt to help automating the GRB import.",
"hu": "Ez a sablon a flandriai GRB épületimportálás automatizlását kívánja megkönnyíteni."
"hu": "Ez a sablon a flandriai GRB épületimportálás automatizlását kívánja megkönnyíteni.",
"de": "Dieses Thema ist ein Versuch, die Automatisierung des GRB-Imports zu unterstützen."
},
"maintainer": "Pieter Vander Vennet",
"icon": "./assets/themes/grb_import/logo.svg",
@ -472,6 +473,13 @@
"id": "Import-button",
"render": "{import_way_button(osm-buildings,building=$building;man_made=$man_made; source:geometry:date=$_grb_date; source:geometry:ref=$_grb_ref; addr:street=$addr:street; addr:housenumber=$addr:housenumber; building:min_level=$_building:min_level, Upload this building to OpenStreetMap,,_is_part_of_building=true,1,_moveable=true)}",
"mappings": [
{
"#": "Failsafe",
"if": "_grb_ref=",
"then": {
"en": "Did not yet calculate the metatags... Reopen this popup"
}
},
{
"#": "Actually the same as below, except that the text shows 'add the address' too",
"if": {

View file

@ -1,13 +1,16 @@
{
"id": "mapcomplete-changes",
"title": {
"en": "Changes made with MapComplete"
"en": "Changes made with MapComplete",
"de": "Änderungen mit MapComplete"
},
"shortDescription": {
"en": "Shows changes made by MapComplete"
"en": "Shows changes made by MapComplete",
"de": "Zeigt Änderungen, die von MapComplete vorgenommen wurden"
},
"description": {
"en": "This maps shows all the changes made with MapComplete"
"en": "This maps shows all the changes made with MapComplete",
"de": "Diese Karte zeigt alle mit MapComplete vorgenommenen Änderungen"
},
"maintainer": "",
"icon": "./assets/svg/logo.svg",
@ -22,7 +25,8 @@
{
"id": "mapcomplete-changes",
"name": {
"en": "Changeset centers"
"en": "Changeset centers",
"de": "Schwerpunkte von Änderungssätzen"
},
"minzoom": 0,
"source": {
@ -36,35 +40,41 @@
],
"title": {
"render": {
"en": "Changeset for {theme}"
"en": "Changeset for {theme}",
"de": "Änderungssatz für {theme}"
}
},
"description": {
"en": "Shows all MapComplete changes"
"en": "Shows all MapComplete changes",
"de": "Zeigt alle MapComplete-Änderungen"
},
"tagRenderings": [
{
"id": "render_id",
"render": {
"en": "Changeset <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>"
"en": "Changeset <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>",
"de": "Änderungssatz <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>"
}
},
{
"id": "contributor",
"render": {
"en": "Change made by <a href='https://openstreetmap.org/user/{_last_edit:contributor}' target='_blank'>{_last_edit:contributor}</a>"
"en": "Change made by <a href='https://openstreetmap.org/user/{_last_edit:contributor}' target='_blank'>{_last_edit:contributor}</a>",
"de": "Geändert von <a href='https://openstreetmap.org/user/{_last_edit:contributor}' target='_blank'>{_last_edit:contributor}</a>"
}
},
{
"id": "theme",
"render": {
"en": "Change with theme <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>"
"en": "Change with theme <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>",
"de": "Änderung mit Thema <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>"
},
"mappings": [
{
"if": "theme~http.*",
"then": {
"en": "Change with <b>unofficial</b> theme <a href='https://mapcomplete.osm.be/theme.html?userlayout={theme}'>{theme}</a>"
"en": "Change with <b>unofficial</b> theme <a href='https://mapcomplete.osm.be/theme.html?userlayout={theme}'>{theme}</a>",
"de": "Änderung mit <b>inoffiziellem</b> Thema <a href='https://mapcomplete.osm.be/theme.html?userlayout={theme}'>{theme}</a>"
}
}
]
@ -328,7 +338,8 @@
}
],
"question": {
"en": "Themename contains {search}"
"en": "Themename contains {search}",
"de": "Themenname enthält {search}"
}
}
]
@ -344,7 +355,8 @@
}
],
"question": {
"en": "Made by contributor {search}"
"en": "Made by contributor {search}",
"de": "Erstellt von Mitwirkendem {search}"
}
}
]
@ -360,7 +372,8 @@
}
],
"question": {
"en": "<b>Not</b> made by contributor {search}"
"en": "<b>Not</b> made by contributor {search}",
"de": "<b> Nicht</b> erstellt von Mitwirkendem {search}"
}
}
]
@ -375,7 +388,8 @@
{
"id": "link_to_more",
"render": {
"en": "More statistics can be found <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>here</a>"
"en": "More statistics can be found <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>here</a>",
"de": "Weitere Statistiken finden Sie <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>hier</a>"
}
},
{

View file

@ -2,15 +2,18 @@
"id": "nature",
"title": {
"en": "Into nature",
"nl": "De Natuur in"
"nl": "De Natuur in",
"de": "In die Natur"
},
"shortDescription": {
"en": "A map for nature lovers, with interesting POI's",
"nl": "Deze kaart bevat informatie voor natuurliefhebbers"
"nl": "Deze kaart bevat informatie voor natuurliefhebbers",
"de": "Eine Karte für Naturliebhaber, mit interessanten Orten"
},
"description": {
"en": "On this map, one can find interesting infromation for tourists and nature lovers, such as ",
"nl": "Op deze kaart vind je informatie voor natuurliefhebbers, zoals info over het natuurgebied waar je inzit, vogelkijkhutten, informatieborden, ..."
"nl": "Op deze kaart vind je informatie voor natuurliefhebbers, zoals info over het natuurgebied waar je inzit, vogelkijkhutten, informatieborden, ...",
"de": "Auf dieser Karte findet man interessante Informationen für Touristen und Naturliebhaber, wie zum Beispiel "
},
"maintainer": "",
"icon": "./assets/themes/nature/logo.svg",

View file

@ -203,7 +203,33 @@
"bike_repair_station-valves"
]
},
"bicycle_rental",
{
"builtin": [
"bicycle_rental"
],
"override": {
"id": "charging_station_non_docking",
"minzoom": 14,
"source": {
"osmTags": {
"and+": [
"bicycle_rental!=docking_station"
]
}
}
}
},
{
"#": "All bicycle rental at a high zoom level, to avoid duplicates",
"builtin": "bicycle_rental",
"override": {
"name": null,
"filter": {
"sameAs": "charging_station_non_docking"
},
"minzoom": 18
}
},
{
"builtin": "playground",
"override": {

View file

@ -41,10 +41,10 @@
"about": "Egy adott téma esetében az OpenStreetMap egyszerű szerkesztése és hozzáadása",
"aboutMapcomplete": "<h3>A MapComplete-ről</h3><p>Arra használhatod, hogy egy <b>egy adott téma szerint</b> OpenStreetMap-adatokat adj hozzá az adatbázishoz. Válaszolj a kérdésekre, és a szerkesztéseid perceken belül mindenhol elérhetővé válnak. A témához tartozó elemeket, kérdéseket és nyelveket a <b>téma karbantartója</b> határozza meg .</p><h3>További információk</h3><p>A MapComplete mindig <b>felkínálja a következő lépést</b> ahhoz, hogy tanulhass az OpenStreetMapről.</p><ul><li>Weboldalba ágyazva az iframe egy teljes képernyős MapComplete-hez vezet</li><li>A teljes képernyős változat az OpenStreetMapről mutat adatokat</li><li>A megtekintés bejelentkezés nélkül is működik, de a szerkesztéshez OSM-fiók szükséges</li><li>Ha nem vagy bejelentkezve, kérjük, tedd meg</li><li>Miután válaszoltál egy kérdésre, új pontokat helyezhetsz a térképre</li><li>Egy idő után megjelennek a tényleges OSM-címkék, amelyek később a wikire hivatkoznak</li></ul><p></p><br><p>Észrevettél <b>egy problémát</b>? Új <b>funkciót szeretnél kérni</b>? Szeretnél <b>segíteni a fordításban</b>? Látogass el a <a href=\"https://github.com/pietervdvn/MapComplete\" target=\"_blank\">forráskódhoz</a> vagy a <a href=\"https://github.com/pietervdvn/MapComplete/issues\" target=\"_blank\">problémakövetőhöz (issue tracker)</a>. </p><p> Szeretnéd látni <b>a fejlődést</b>? Kövesd a szerkesztések számát az <a href=\"{osmcha_link}\" target=\"_blank\">OsmCha</a> módosításkészlet-elemzőn.</p>",
"add": {
"addNew": "Új {category} hozzáadása itt",
"addNew": "Új {category} hozzáadása",
"addNewMapLabel": "Új elem hozzáadásához kattints ide",
"confirmButton": "{category} hozzáadása itt.<br><div class=\"alert\">A hozzáadott objektum mindenki számára látható lesz</div>",
"confirmIntro": "<h3>Felrajzolsz ide egy {title} objektumot?</h3>Az itt létrehozandó pontot <b>mindenki láthatja majd</b>. Kérjük, csak valóban létező dolgokat rajzolj fel a térképre. Ezeket az adatokat sok alkalmazás használja.",
"confirmButton": "{category} hozzáadása.<br><div class=\"alert\">A hozzáadott objektum mindenki számára látható lesz</div>",
"confirmIntro": "<h3>Felrajzolsz egy {title} objektumot?</h3>Az itt létrehozandó pontot <b>mindenki láthatja majd</b>. Kérjük, csak valóban létező dolgokat rajzolj fel a térképre. Ezeket az adatokat sok alkalmazás használja.",
"disableFilters": "Minden szűrő kikapcsolása",
"disableFiltersExplanation": "Lehet, hogy a szűrő miatt egyes objektumok nem látszanak",
"hasBeenImported": "Ezt a pontot már importálták",
@ -60,7 +60,7 @@
"intro": "Olyan helyre kattintottál, ahol még nincs ismert adat.<br>",
"layerNotEnabled": "A {layer} réteg nincs engedélyezve. Pont hozzáadásához engedélyezd ezt a réteget",
"openLayerControl": "Rétegvezérlő-doboz megnyitása",
"pleaseLogin": "<a class=\"activate-osm-authentication\">Új pont hozzáadásához be kell jelentkezned</a>",
"pleaseLogin": "Új pont hozzáadásához be kell jelentkezned",
"presetInfo": "Az új érdekes pont (POI) címkéi: {tags}",
"stillLoading": "Az adatok betöltése folyamatban van. Kérjük, várj egy kicsit mielőtt új pontot adsz hozzá.",
"title": "Hozzáadsz egy új pontot?",
@ -92,8 +92,10 @@
"openOsmcha": "A téma {theme} legutóbbi szerkesztéseinek megtekintése",
"themeBy": "A téma karbantartója: {author}"
},
"back": "Vissza",
"backgroundMap": "Háttértérkép",
"cancel": "Mégse",
"confirm": "Megerősítés",
"customThemeIntro": "<h3>Egyéni témák</h3> Ezek korábban megnézett, felhasználó által létrehozott témák.",
"download": {
"downloadAsPdf": "A jelenlegi térkép letöltése PDF-ként",
@ -113,6 +115,8 @@
"title": "A látható adatok letöltése",
"uploadGpx": "Töltsd fel a nyomvonalaidat az OpenStreetMapre"
},
"example": "Példa",
"examples": "Példák",
"fewChangesBefore": "Kérjük, válaszolj néhány meglévő pontokra vonatkozó kérdésre, mielőtt új pontot adnál hozzá.",
"getStartedLogin": "A kezdéshez jelentkezz be az OpenStreetMap-fiókoddal,",
"getStartedNewAccount": " vagy <a href=\"https://www.openstreetmap.org/user/new\" target=\"_blank\">hozz létre új fiókot</a>",
@ -125,9 +129,11 @@
"zoomInToSeeThisLayer": "Nagyíts a réteg megtekintéséhez"
},
"loading": "Betöltés…",
"loadingTheme": "{theme} betöltése…",
"loginOnlyNeededToEdit": "ha szerkeszteni szeretnéd a térképet",
"loginToStart": "A kérdés megválaszolásához be kell jelentkezni",
"loginWithOpenStreetMap": "Bejelentkezés OpenStreetMap-fiókkal",
"logout": "Kijelentkezés",
"morescreen": {
"createYourOwnTheme": "Készítsd el saját MapComplete témád a semmiből",
"hiddenExplanation": "Ezeket a témákat csak az érheti el, akik ismeri a linket. {total_hidden} rejtett téma közül {hidden_discovered} témát ismersz.",
@ -137,6 +143,7 @@
"streetcomplete": "Egy másik, hasonló alkalmazás a <a class=\"underline hover:text-blue-800\" href=\"https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete\" target=\"_blank\">StreetComplete</a>."
},
"nameInlineQuestion": "Ezen {category} neve: $$$",
"next": "Következő",
"noNameCategory": "Név nélküli {category}",
"noTagsSelected": "Nincs kijelölt címke",
"number": "szám",
@ -166,6 +173,7 @@
"versionInfo": "{version} verzió létrehozva: {date}"
},
"pickLanguage": "Nyelv kiválasztása: ",
"poweredByOsm": "Motor: OpenStreetMap",
"questions": {
"emailIs": "Ezen {category} e-mail-címe: <a href=\"mailto:{email}\" target=\"_blank\">{email}</a>",
"emailOf": "Mi az e-mail-címe ennek ({category})?",
@ -257,6 +265,9 @@
"uploadingPicture": "Kép feltöltése folyamatban…",
"willBePublished": "A képed így lesz közzétéve: "
},
"importHelper": {
"allAttributesSame": "Ez a címke minden importálandó objektumon szerepel"
},
"index": {
"#": "Ezek a szövegek akkor jelennek meg a témagombok felett, ha nincs betöltve téma",
"featuredThemeTitle": "Kiemelt ezen a héten",
@ -305,7 +316,7 @@
"aboutOsm": {
"aboutOsm": {
"intro": "Az OpenStreetMap egy önkéntesek által épített, megosztott, globális adatbázis. Az OpenStreetMaphez minden földrajzi adat hozzáadható, amennyiben <b>a helyszínen ellenőrizhető</b>.<br> Az OpenStreetMap hatalmas és mély adattárrá nőtte ki magát: több ezer objektumkategória adatait tartalmazza. Egy-egy objektumnak is nagyon sok tulajdonsága lehet, amivel rengeteg finom részlet ábrázolható, például:",
"li0": "Az utcáknak nem csak egy mértani alakja van a térképen, hanem tartalmazhat adatokat az ott érvényes sebességkorlátozásról, a burkolatáról, arról, hogy van-e rajta közvilágítás, mi a neve, van-e esetleg Wikipédia-szócikk róla, melyik turistautak, kerékpár- és buszútvonalak vezetnek rajta végig és így tovább",
"li0": "Az utcáknak nem csak egy mértani alakja van a térképen, hanem tartalmazhat adatokat az ott érvényes sebességkorlátozásról, a burkolatáról, arról, hogy van-e rajta közvilágítás, mi a neve, van-e esetleg Wikipédia-szócikk róla, melyik turistautak, kerékpár- és buszútvonalak vezetnek erre és így tovább…",
"li1": "Az üzleteknél és egyéb létesítményeknél megadható a nyitvatartási idejük, a telefonszámuk, a weboldalukra mutató link, az általuk elfogadott fizetési módok, az árusított termékek vagy az általuk kínált szolgáltatások stb.",
"li2": "A mosdókon lehet információ az akadálymentességükről, az ott megtalálható pelenkázóasztalokról, arról, hogy kell-e fizetni a használatukért et caetera",
"li3": "és még sok-sok minden más…",

View file

@ -3293,7 +3293,7 @@
"then": "Some vegetarian options are available"
},
"2": {
"then": "No vegetarian options are available"
"then": "Vegetarian options are available"
},
"3": {
"then": "All dishes are vegetarian"

View file

@ -771,7 +771,7 @@
},
"bike_repair_station": {
"description": "Deze laag toont fietspompen en herstelpunten voor fietsen",
"name": "Fietspomp and fietsherstel",
"name": "Fietspomp en fietsherstel",
"presets": {
"0": {
"description": "Een fietspomp in de publieke ruimte zonder extra gereedschap. De fietspomp in je kelder telt dus niet.",

View file

@ -36,6 +36,9 @@
},
"3": {
"then": "Ist im ersten Stock"
},
"4": {
"then": "Ist im 1. Untergeschoss"
}
},
"question": "In welchem Stockwerk befindet sich dieses Objekt?",
@ -56,6 +59,18 @@
},
"question": "Welche Zahlungsmethoden werden hier akzeptiert?"
},
"payment-options-advanced": {
"override": {
"mappings+": {
"0": {
"then": "Die Bezahlung erfolgt über eine spezielle App"
},
"1": {
"then": "Die Bezahlung erfolgt mit einer Mitgliedskarte"
}
}
}
},
"phone": {
"question": "Was ist die Telefonnummer von {title()}?"
},

View file

@ -36,6 +36,9 @@
},
"3": {
"then": "Az első emeleten"
},
"4": {
"then": "Az első alagsori szinten"
}
},
"question": "Melyik szinten található ez a létesítmény?",

View file

@ -12,6 +12,11 @@
"shortDescription": "Eine Karte aller Sitzbänke",
"title": "Sitzbänke"
},
"bicycle_rental": {
"description": "Auf dieser Karte finden Sie die vielen Fahrradverleihstationen, wie sie auf OpenStreetMap eingetragen wurden",
"shortDescription": "Eine Karte mit Fahrradverleihstationen und Fahrradverleihern",
"title": "Fahrradverleih"
},
"bicyclelib": {
"description": "Fahrradbibliotheken sind Orte, um Fahrräder auszuleihen, oft gegen eine geringe Gebühr. Ein wichtiger Anwendungsfall sind Fahrradbibliotheken für Kinder, die es ihnen ermöglichen, auf ein größeres Fahrrad umzusteigen, wenn sie aus ihrem aktuellen Fahrrad herausgewachsen sind",
"title": "Fahrradbibliothek"
@ -22,10 +27,11 @@
"title": "Ferngläser"
},
"bookcases": {
"description": "Bücherschränke sind alte Schaltschränke, Telefonzellen oder andere Einrichtungen, zur Aufbewahrung von Büchern. Jeder kann Bücher abstellen oder mitnehmen. Die Karte zielt darauf ab, alle Orte mit Bücherschränken zu sammeln. Sie können neue Bücherschränke in der Nähe entdecken und mit einem kostenlosen OpenStreetMap-Konto schnell Ihre Lieblingsbücherschränke hinzufügen.",
"description": "Bücherschränke sind alte Schaltschränke, Telefonzellen oder andere Einrichtungen zur Aufbewahrung von Büchern. Jeder kann Bücher abgeben oder mitnehmen. Die Karte soll helfen, alle Orte mit Bücherschränken zu sammeln. Sie können neue Bücherschränke in der Nähe entdecken und mit einem kostenlosen OpenStreetMap-Konto schnell Ihre Lieblingsbücherschränke hinzufügen.",
"title": "Öffentliche Bücherschränke Karte"
},
"cafes_and_pubs": {
"description": "Kneipen und Bars",
"title": "Cafés und Kneipen"
},
"campersite": {
@ -265,7 +271,7 @@
"descriptionTail": "<p><strong>kletterspots.de</strong> wird betrieben von <a href='https://utopicode.de/?ref=kletterspots' target='_blank'>Christian Neumann</a>. Bitte <a href='https://utopicode.de/kontakt/?project=kletterspots&ref=kletterspots' target='blank'>melden Sie sich</a>, wenn Sie Feedback oder Fragen haben.</p><p>Das Projekt nutzt Daten des <a href='https://www.openstreetmap.org/' target='_blank'>OpenStreetMap</a> Projekts und basiert auf der freien Software <a href='https://github.com/pietervdvn/MapComplete' target='_blank'>MapComplete</a>.</p>",
"layers": {
"0": {
"description": "Ein Kletterverein oder eine Organisation",
"description": "Ein Kletterverein oder -organisation",
"name": "Kletterverein",
"presets": {
"0": {
@ -273,7 +279,7 @@
"title": "Kletterverein"
},
"1": {
"description": "Eine Organisation, welche sich mit dem Klettern beschäftigt",
"description": "Eine Organisation, die sich mit dem Klettern beschäftigt",
"title": "Eine Kletter-Organisation"
}
},
@ -501,7 +507,7 @@
},
"6": {
"question": "Welche Schwierigkeit hat hier die schwerste Route (französisch/belgisches System)?",
"render": "Die schwerste Route hat hier die Schwierigkeit {climbing:grade:french:max} (französisch/belgisches System)"
"render": "Die schwierigste Route hat hier die Schwierigkeitsstufe {climbing:grade:french:max} (französisch/belgisches System)"
},
"7": {
"mappings": {
@ -711,6 +717,11 @@
"description": "Eine Karte zum Anzeigen und Bearbeiten öffentlicher Trinkwasserstellen",
"title": "Trinkwasserstelle"
},
"entrances": {
"description": "Eine Karte mit allen Eingängen, die wichtige Aspekte für Rollstuhlfahrer erfasst",
"shortDescription": "Eingänge prüfen, um die Rollstuhlnavigation zu verbessern",
"title": "Eingänge"
},
"etymology": {
"description": "Auf dieser Karte können Sie sehen, wonach ein Objekt benannt ist. Die Straßen, Gebäude, ... stammen von OpenStreetMap, das mit Wikidata verknüpft wurde. In dem Popup sehen Sie den Wikipedia-Artikel (falls vorhanden) oder ein Wikidata-Feld, nach dem das Objekt benannt ist. Wenn das Objekt selbst eine Wikipedia-Seite hat, wird auch diese angezeigt.<br/><br/><b>Sie können auch einen Beitrag leisten!</b>Zoomen Sie genug hinein und <i>alle</i> Straßen werden angezeigt. Wenn Sie auf eine Straße klicken, öffnet sich ein Wikidata-Suchfeld. Mit ein paar Klicks können Sie einen Etymologie-Link hinzufügen. Beachten Sie, dass Sie dazu ein kostenloses OpenStreetMap-Konto benötigen.",
"layers": {
@ -723,6 +734,31 @@
"override": {
"=name": "Parks und Waldflächen ohne Informationen zur Namensherkunft"
}
},
"3": {
"override": {
"=name": "Bildungseinrichtungen ohne Informationen zur Etymologie"
}
},
"4": {
"override": {
"=name": "Kulturelle Orte ohne etymologische Informationen"
}
},
"5": {
"override": {
"=name": "Touristische Orte ohne Angaben zur Etymologie"
}
},
"6": {
"override": {
"=name": "Gesundheits- und Sozialeinrichtungen ohne etymologische Informationen"
}
},
"7": {
"override": {
"=name": "Sportstätten ohne etymologische Informationen"
}
}
},
"shortDescription": "Was ist der Ursprung eines Ortsnamens?",
@ -816,22 +852,26 @@
"title": "Fassadengärten"
},
"food": {
"description": "Restaurants und Fast Food",
"title": "Restaurants und Schnellimbisse"
},
"fritures": {
"description": "Auf dieser Karte findest du deine Lieblings-Pommesbude!",
"layers": {
"0": {
"override": {
"name": "Pommesbude"
}
}
}
},
"title": "Pommes-frites-Läden"
},
"ghostbikes": {
"description": "Ein <b>Geisterrad</b> ist ein weißes Fahrrad, dass zum Gedenken eines tödlich verunglückten Radfahrers vor Ort aufgestellt wurde.<br/><br/> Auf dieser Karte kann man alle Geisterräder sehen, die OpenStreetMap eingetragen sind. Fehlt ein Geisterrad? Jeder kann hier Informationen hinzufügen oder aktualisieren - Sie benötigen lediglich einen (kostenlosen) OpenStreetMap-Account.",
"title": "Geisterräder"
},
"grb": {
"description": "Dieses Thema ist ein Versuch, die Automatisierung des GRB-Imports zu unterstützen.",
"layers": {
"1": {
"tagRenderings": {
@ -928,11 +968,78 @@
"shortDescription": "Hydranten, Feuerlöscher, Feuerwachen und Rettungswachen.",
"title": "Hydranten, Feuerlöscher, Feuerwachen und Rettungswachen."
},
"mapcomplete-changes": {
"description": "Diese Karte zeigt alle mit MapComplete vorgenommenen Änderungen",
"layers": {
"0": {
"description": "Zeigt alle MapComplete-Änderungen",
"filter": {
"0": {
"options": {
"0": {
"question": "Themenname enthält {search}"
}
}
},
"1": {
"options": {
"0": {
"question": "Erstellt von Mitwirkendem {search}"
}
}
},
"2": {
"options": {
"0": {
"question": "<b> Nicht</b> erstellt von Mitwirkendem {search}"
}
}
}
},
"name": "Schwerpunkte von Änderungssätzen",
"tagRenderings": {
"contributor": {
"render": "Geändert von <a href='https://openstreetmap.org/user/{_last_edit:contributor}' target='_blank'>{_last_edit:contributor}</a>"
},
"render_id": {
"render": "Änderungssatz <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>"
},
"theme": {
"mappings": {
"0": {
"then": "Änderung mit <b>inoffiziellem</b> Thema <a href='https://mapcomplete.osm.be/theme.html?userlayout={theme}'>{theme}</a>"
}
},
"render": "Änderung mit Thema <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>"
}
},
"title": {
"render": "Änderungssatz für {theme}"
}
},
"1": {
"override": {
"tagRenderings": {
"link_to_more": {
"render": "Weitere Statistiken finden Sie <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>hier</a>"
}
}
}
}
},
"shortDescription": "Zeigt Änderungen, die von MapComplete vorgenommen wurden",
"title": "Änderungen mit MapComplete"
},
"maps": {
"description": "Auf dieser Karte findest du alle Karten, die OpenStreetMap kennt - typischerweise eine große Karte auf einer Informationstafel, die das Gebiet, die Stadt oder die Region zeigt, z.B. eine touristische Karte auf der Rückseite einer Plakatwand, eine Karte eines Naturschutzgebietes, eine Karte der Radwegenetze in der Region, ...) <br/><br/>Wenn eine Karte fehlt, können Sie diese leicht auf OpenStreetMap kartieren.",
"shortDescription": "Dieses Thema zeigt alle (touristischen) Karten, die OpenStreetMap kennt",
"title": "Eine Karte der Karten"
},
"nature": {
"description": "Auf dieser Karte findet man interessante Informationen für Touristen und Naturliebhaber, wie zum Beispiel ",
"shortDescription": "Eine Karte für Naturliebhaber, mit interessanten Orten",
"title": "In die Natur"
},
"observation_towers": {
"description": "Öffentlich zugänglicher Aussichtsturm",
"shortDescription": "Öffentlich zugänglicher Aussichtsturm",

View file

@ -545,6 +545,27 @@
"description": "Cette carte affiche les points d'accès public à de l'eau potable, et permet d'en ajouter facilement",
"title": "Eau potable"
},
"etymology": {
"layers": {
"1": {
"override": {
"=name": "Route sans origine étymologique"
}
},
"2": {
"override": {
"=name": "Parcs et forêts sans origine étymologique"
}
},
"3": {
"override": {
"=name": "Institutions d'éducation sans origine étymologique"
}
}
},
"shortDescription": "Quelle est l'origine de ce toponyme ?",
"title": "Open Etymology Map"
},
"facadegardens": {
"description": "Les <a href='https://nl.wikipedia.org/wiki/Geveltuin' target=_blank>jardins muraux</a> en ville napportent pas seulement paix et tranquillité mais contribuent à embellir la ville, favoriser la biodiversité, régule la température et assainit lair. <br/> Klimaan VZW et Mechelen Klimaatneutraal veulent cartographier les jardins muraux comme exemple pour les personnes souhaitant en construire ainsi que celles aimant la nature.<br/>Plus dinfos sur <a href='https://klimaan.be/' target=_blank>klimaan.be</a>.",
"layers": {

View file

@ -6,9 +6,24 @@ import * as wds from "wikidata-sdk"
import {Utils} from "../Utils";
import ScriptUtils from "./ScriptUtils";
import {existsSync, readFileSync, writeFileSync} from "fs";
import * as knownLanguages from "../assets/generated/used_languages.json"
import * as used_languages from "../assets/generated/used_languages.json"
const languageRemap = {
// MapComplete (or weblate) on the left, language of wikimedia on the right
"nb":"nb_NO",
"zh-hant":"zh_Hant",
"zh-hans":"zh_Hans",
"pt-br":"pt_BR"
}
async function fetch(target: string) {
const usedLanguages : Set<string> = new Set(used_languages.languages)
async function fetch(target: string){
const regular = await fetchRegularLanguages()
writeFileSync(target, JSON.stringify(regular, null, " "))
console.log("Written to "+target)
}
async function fetchRegularLanguages() {
ScriptUtils.fixUtils()
console.log("Fetching languages")
@ -24,23 +39,54 @@ async function fetch(target: string) {
// request the generated URL with your favorite HTTP request library
const result = await Utils.downloadJson(url, {"User-Agent": "MapComplete script"})
writeFileSync(target, JSON.stringify(result.results.bindings))
console.log("Written to "+target)
const bindings = result.results.bindings
const zh_hant = await fetchSpecial(18130932, "zh_Hant")
const zh_hans = await fetchSpecial(13414913, "zh_Hant")
const pt_br = await fetchSpecial( 750553, "pt_BR")
bindings.push(...zh_hant)
bindings.push(...zh_hans)
bindings.push(...pt_br)
return result.results.bindings
}
async function fetchSpecial(id: number, code: string) {
ScriptUtils.fixUtils()
console.log("Fetching languages")
const sparql = 'SELECT ?lang ?label ?code \n' +
'WHERE \n' +
'{ \n' +
' wd:Q'+id+' rdfs:label ?label. \n' +
'} '
const url = wds.sparqlQuery(sparql)
// request the generated URL with your favorite HTTP request library
const result = await Utils.downloadJson(url, {"User-Agent": "MapComplete script"})
const bindings = result.results.bindings
bindings.forEach(binding => binding["code"] = {value: code})
return bindings
}
function extract(data){
console.log("Got "+data.length+" entries")
const perId = new Map<string, Map<string, string>>();
for (const element of data) {
//const id = element.lang.value.substring(prefixL)
const id = element.code.value
const labelLang = element.label["xml:lang"]
let id = element.code.value
id = languageRemap[id] ?? id
let labelLang = element.label["xml:lang"]
labelLang = languageRemap[labelLang] ?? labelLang
const value = element.label.value
if(!perId.has(id)){
perId.set(id, new Map<string, string>())
}
perId.get(id).set(labelLang, value)
}
console.log("Got "+perId.size+" languages")
return perId
}
@ -48,38 +94,43 @@ function extract(data){
function getNativeList(langs: Map<string, Map<string, string>>){
const native = {}
langs.forEach((translations, key ) =>{
if(!usedLanguages.has(key)){
return
}
native[key] = translations.get(key)
})
return native
}
function getTranslationsIn(targetLanguage: string, perId: Map<string, Map<string, string>>, whitelist = undefined){
const langs = {}
perId.forEach((translations, langCode) => {
if(whitelist !== undefined && whitelist.indexOf(langCode) < 0){
return
}
langs[langCode] = translations.get(targetLanguage)
})
return langs;
}
function main(wipeCache = false){
async function main(wipeCache = false){
const cacheFile = "./assets/generated/languages-wd.json"
if(wipeCache || !existsSync(cacheFile)){
// await fetch(cacheFile);
console.log("Refreshing cache")
await fetch(cacheFile);
}else{
console.log("Reusing the cached file")
}
const data = JSON.parse(readFileSync( cacheFile, "UTF8"))
const perId = extract(data)
const nativeList = getNativeList(perId)
writeFileSync("./assets/language_native.json", JSON.stringify(nativeList))
writeFileSync("./assets/language_native.json", JSON.stringify(nativeList, null, " "))
const translations = Utils.MapToObj<Map<string, string>>(perId, (value, key) => {
if(!usedLanguages.has(key)){
return undefined // Remove unused languages
}
return Utils.MapToObj(value, (v, k ) => {
if(!usedLanguages.has(k)){
return undefined
}
return v
})
})
writeFileSync("./assets/language_translations.json",
JSON.stringify(Utils.MapToObj<Map<string, string>>(perId, value => Utils.MapToObj(value)), null, " "))
JSON.stringify(translations, null, " "))
}
main()//.then(() => console.log("Done!"))
const forceRefresh = process.argv[2] === "--force-refresh"
main(forceRefresh).then(() => console.log("Done!"))