Merge branch 'master' into develop

This commit is contained in:
Pieter Vander Vennet 2025-08-11 18:57:28 +02:00
commit 5d2f35dfe4
6 changed files with 460 additions and 13 deletions

View file

@ -1758,6 +1758,12 @@
"uk": "Карта",
"zh_Hans": "地图"
}
},
{
"if": "message=legal",
"then": {
"en": "Legal messages"
}
}
],
"multiAnswer": true

View file

@ -2961,6 +2961,12 @@
},
"9": {
"then": "<b>Typ 1 <i>bez</i> kabelu</b> (J1772)"
},
"40": {
"then": "<b>NACS</b>(Severoamerický nabíjecí systém)"
},
"41": {
"then": "<b>NACS</b>(Severoamerický nabíjecí systém)"
}
},
"question": "Jaké nabíjecí přípojky jsou zde k dispozici?"
@ -3611,6 +3617,23 @@
}
},
"question": "Lze si zde půjčit lezeckou obuv pro použití v tělocvičně?"
},
"bouldering_mat_rental": {
"mappings": {
"0": {
"then": "Lze si tu zdarma půjčit podložku pro bouldering"
},
"1": {
"then": "Podložku pro bouldering si tu lze pronajmout za {service:boulder_mat:rental:charge}"
},
"2": {
"then": "Lze si tu pronajmout podložku pro bouldering"
},
"3": {
"then": "<b>Nelze</b> si tu pronajmout podložku pro bouldering"
}
},
"question": "Lze si tu pronajmout podložku pro bouldering k použití v jiných lokalitách?"
}
},
"title": {
@ -4866,6 +4889,9 @@
}
},
"question": "Nabízí tato restaurace vegetariánskou variantu?"
},
"diets_title": {
"render": "Dietní možnosti"
}
}
},
@ -5845,6 +5871,20 @@
"question": "Použití zdarma"
}
}
},
"20": {
"options": {
"0": {
"question": "Je tu k dispozici vysoká židle pro malé děti"
}
}
},
"21": {
"options": {
"0": {
"question": "Má herní zónu pro děti"
}
}
}
}
},
@ -9919,6 +9959,44 @@
}
},
"question": "Jaká je odpovídající entita Wikidata?"
},
"kids_area": {
"mappings": {
"2": {
"then": "Má zónu pro děti uvnitř"
},
"3": {
"then": "Má zónu pro děti venku"
},
"4": {
"then": "Má zónu pro děti"
},
"1": {
"then": "Má zónu pro děti uvnitř i venku"
},
"0": {
"then": "Žádná zóna pro děti"
}
},
"question": "Je tu herní zóna pro děti"
},
"child_highchair": {
"mappings": {
"3": {
"then": "Jsou k dispozici dvě vysoké židle"
},
"0": {
"then": "Není k dispozici vysoká židle"
},
"1": {
"then": "Je k dispozici alespoň jedna vysoká židle"
},
"2": {
"then": "Je k dispozici jedna vysoká židle"
}
},
"question": "Je tu k dispozici vysoká židle pro batolata?",
"render": "Je k dispozici {highchair} vysokých židlí"
}
}
},
@ -10341,9 +10419,67 @@
"3": {
"then": "Veřejný přístup"
}
},
"question": "Je sauna veřejně přístupná?"
},
"charge_cost_rewritten": {
"renderings": {
"0": {
"mappings": {
"0": {
"then": "Sauna je zdarma"
}
},
"question": "Jaké je vstupné na {time}?",
"render": "vstupné na {time}: {charge}"
}
},
"rewrite": {
"into": {
"0": {
"1": "2 hodiny"
},
"1": {
"1": "4 hodiny"
},
"2": {
"1": "jeden den"
}
}
}
},
"has_sauna": {
"mappings": {
"0": {
"then": "Má saunu"
},
"1": {
"then": "Žádná sauna"
}
},
"question": "Má {title()} saunu?"
},
"sauna-header": {
"mappings": {
"0": {
"then": "Žádná sauna"
}
},
"render": "Informace o sauně"
},
"sauna-picture": {
"render": {
"special": {
"label": "Přidat obrázek sauny"
}
}
}
}
},
"name": "Sauny v jiných zařízeních",
"title": {
"render": "{name}"
},
"description": "Sauna je malá místnost nebo dům pro pobyt v suchém nebo vlhkém teple, nebo firma s jedním nebo více těmito a doplňkovými zařízeními."
},
"school": {
"filter": {
@ -10950,6 +11086,55 @@
"shops-name": {
"question": "Jak se jmenuje tento obchod?",
"render": "Tento obchod se jmenuje <i>{name}</i>"
},
"beauty_shop_type": {
"mappings": {
"2": {
"then": "Nabízí opalovací služby, například solária"
},
"3": {
"then": "Nabízí kosmetické služby, například makeup"
},
"4": {
"then": "Nabízí masáže"
},
"5": {
"then": "Nabízí odstraňování ochlupení voskem"
},
"6": {
"then": "Nabízí odstraňování ochlupení, např. laserem"
},
"7": {
"then": "Nabízí služby vylepšování obočí"
},
"8": {
"then": "Nabízí služby pedikúry"
},
"1": {
"then": "Nabízí služby péče o pleť"
},
"0": {
"then": "Nabízí nehtové služby, jako je manikúra, pedikúra a prodlužování nehtů"
}
},
"question": "Jaký druh salonu krásy je toto?"
},
"copyshop-binding-types": {
"mappings": {
"2": {
"then": "Tento obchod nabízí drátovou vazbu"
},
"3": {
"then": "Tento obchod nabízí tepelnou vazbu"
},
"0": {
"then": "Tento obchod nabízí hřebenovou vazbu"
},
"1": {
"then": "Tento obchod nabízí kroužkovou <i class='subtle'>(spirálovou)</i> vazbu"
}
},
"question": "Jaké druhy služby vazby se tu nabízejí?"
}
},
"title": {
@ -12892,6 +13077,17 @@
}
},
"render": "Toaleta přístupná na vozíku"
},
"handwashing-soap": {
"mappings": {
"1": {
"then": "Žádné mýdlo k mytí rukou"
},
"0": {
"then": "Je k dispozici mýdlo k mytí rukou"
}
},
"question": "Je tu k dispozici mýdlo k mytí rukou?"
}
},
"title": {
@ -14058,6 +14254,27 @@
"then": "Našli jsme odkaz na to, co vypadá jako účet mastodon, ale je neověřený. <a href='https://www.openstreetmap.org/profile/edit' target='_blank' rel='noopener'>Upravte popis svého profilu</a> a umístěte tam následující: <span class='code '>&lta href=\"{_mastodon_candidate}\" rel=\"me\"&gtMastodon&lt/a&gt"
}
}
},
"override_layer_sync_selection": {
"mappings": {
"0": {
"then": "Nepamatovat si nastavení vrstev (pro většinu vrstev)"
},
"1": {
"then": "Nikdy si nepamatovat, která vrstva je povolena, vždy používat výchozí hodnotu pro zobrazení/skrytí vrstvy"
},
"2": {
"then": "Pamatovat si, která vrstva je povolena, mezi návštěvami ze zařízení"
},
"3": {
"then": "Pamatovat si, která vrstva je povolena, v {_theme} mezi návštěvami a napříč zařízeními"
},
"4": {
"then": "Pamatovat si, která vrstva je povolena, ve všech tématech mezi návštěvami a napříč zařízeními"
}
},
"question": "Když se vrstva zakáže/povolí v nabídce filtru, má se zapamatovat mezi návštěvami?",
"questionHint": "Toto nastavení se projeví až po novém načtení stránky"
}
},
"title": {
@ -14411,7 +14628,20 @@
},
"visitor_information_centre": {
"description": "Turistické centrum nabízí informace o konkrétní atrakci nebo zajímavém místě, kde se nachází.",
"name": "Turistické informační centrum"
"name": "Turistické informační centrum",
"tagRenderings": {
"visitor-centre-name": {
"render": "Toto návštěvnické centrum se jmenuje <b>{name}</b>",
"question": "Jaký je název tohoto návštěvnického centra?"
}
},
"title": {
"mappings": {
"0": {
"then": "Informační kancelář"
}
}
}
},
"walls_and_buildings": {
"description": "Speciální zabudovaná vrstva poskytující všechny stěny a budovy. Tato vrstva je užitečná v předvolbách pro objekty, které lze umístit ke stěnám (např. AED, poštovní schránky, vchody, adresy, bezpečnostní kamery, …). Tato vrstva je ve výchozím nastavení neviditelná a uživatel ji nemůže přepínat.",
@ -14841,5 +15071,79 @@
},
"render": "větrná turbína"
}
},
"nesting_site": {
"description": "Člověkem vyrobené zařízení vybavené jedním nebo více hnízdy, sloužící jako umělá hnízdicí pomůcka pro divoká zvířata",
"name": "Umělá hnízdiště",
"presets": {
"0": {
"title": "hnízdiště"
},
"1": {
"title": "hnízdiště na stěně"
}
},
"tagRenderings": {
"nest_species": {
"question": "Pro jaké druhy je toto hnízdiště určeno?",
"render": "<h3>O hnízdících druzích</h3>{wikipedia(species:wikidata)}"
},
"nest_support": {
"mappings": {
"0": {
"then": "Připevněno na stěnu"
},
"1": {
"then": "Připevněno na sloup"
}
},
"question": "Jak je toto hnízdiště nainstalováno?"
}
},
"title": {
"render": "Hnízdiště"
}
},
"police_call_box": {
"tagRenderings": {
"building_colour": {
"questionHint": "Kromě střechy",
"render": "Tato budka je {building:colour}.",
"question": "Jakou barvu má tato budka?"
},
"police_box_style": {
"mappings": {
"0": {
"then": "Policejní budka ve stylu Edinburgh, Ebenezer MacRae"
},
"1": {
"then": "Policejní budka ve stylu TARDIS (Metropolitan Police, Glasgow), Gilbert Mackenzie Trench"
}
},
"question": "Jaký styl má tato budka?",
"render": "Jiný styl budky, autor: {architect}."
},
"roof_colour": {
"question": "Jakou barvu má střecha?",
"render": "Střecha je {roof:colour}."
}
},
"title": {
"render": "Policejní telefonní budka."
},
"name": "Policejní telefonní budky",
"presets": {
"0": {
"title": "policejní telefonní budka"
}
},
"description": "Typ telefonní budky historicky používaný policií."
},
"sauna": {
"name": "Sauna",
"title": {
"render": "{name}"
},
"description": "Sauna je malá místnost nebo dům pro pobyt v suchém nebo vlhkém teple, nebo firma s jedním nebo více těmito a doplňkovými zařízeními."
}
}
}

View file

@ -278,7 +278,7 @@
"then": "Azulejo (spansk dekorativt flisebeklædning)"
},
"11": {
"then": "flisebeklædning"
"then": "Flisebeklædning"
},
"2": {
"then": "Maleri"
@ -303,6 +303,12 @@
},
"9": {
"then": "Relief"
},
"12": {
"then": "Træudskæring"
},
"13": {
"then": "Digt"
}
},
"question": "Hvilken slags kunstværk er det?",
@ -2299,7 +2305,12 @@
"name": "Parkeringsbåse"
},
"pharmacy": {
"name": "Apoteker"
"name": "Apoteker",
"presets": {
"0": {
"title": "et apotek"
}
}
},
"picnic_table": {
"name": "Bord- og bænkesæt",
@ -2564,6 +2575,9 @@
},
"3": {
"then": "Hunde er tilladt og kan løbe frit rundt"
},
"4": {
"then": "Hunde er kun tilladt udenfor"
}
},
"question": "Er hunde tilladt i denne virksomhed?"
@ -2598,6 +2612,9 @@
},
"4": {
"then": "Dette sted tilbyder internetadgang via kabel"
},
"5": {
"then": "Dette sted tilbyder både trådløst internet og internetadgang via en terminal eller computer."
}
},
"question": "Tilbyder dette sted internetadgang?"
@ -2778,6 +2795,23 @@
}
},
"question": "Hvad er den tilsvarende Wikidata-enhed?"
},
"has_toilets": {
"mappings": {
"0": {
"then": "Har toiletter"
},
"1": {
"then": "Har ingen toiletter"
},
"2": {
"then": "Toiletterne er markeret separat på kortet"
}
},
"question": "Har {title()} toiletter?"
},
"mastodon": {
"question": "Hvad er Mastodon-handle for {title()}?"
}
}
},
@ -2930,6 +2964,11 @@
"0": {
"then": "Cykeludlejningsbutik"
}
},
"mappings+": {
"0": {
"then": "Denne butik bruges ikke længere. Den står tom"
}
}
}
}
@ -2943,8 +2982,12 @@
},
"presets": {
"0": {
"title": "en butik"
"title": "en butik",
"description": "Du kan senere specificere, hvad denne butik sælger."
}
},
"title": {
"render": "Butik"
}
},
"shower": {
@ -4146,5 +4189,76 @@
},
"render": "vindmølle"
}
},
"trolley_bay": {
"presets": {
"0": {
"description": "En plads til parkering af indkøbsvogne.",
"title": "en indkøbsvognplads"
}
},
"name": "Pladser til indkøbsvogne",
"description": "Find pladser til indkøbsvogne."
},
"ice_cream": {
"presets": {
"0": {
"title": "en isbar"
}
}
},
"scouting_group": {
"tagRenderings": {
"association": {
"question": "Hvilken spejderorganisation tilhører {name}?",
"render": "Spejderorganisationen bag denne gruppe er {brand}"
},
"name": {
"render": "Navnet på denne gruppe er {name}"
},
"start_date": {
"question": "Hvornår blev denne gruppe grundlagt?"
}
}
},
"campsite": {
"tagRenderings": {
"capacity_persons": {
"question": "Hvor mange mennesker kan bo her?"
},
"fee": {
"mappings": {
"0": {
"then": "Campingpladsen er gratis at benytte"
},
"1": {
"then": "Det koster et gebyr."
}
},
"question": "Skal der betales et gebyr?"
},
"charge_person_day": {
"question": "Hvad er prisen pr. person pr. dag?",
"render": "Gebyr pr. person pr. dag: {charge}"
},
"charge_day": {
"question": "Hvad er prisen pr. dag?",
"render": "Pris pr. dag: {charge}"
},
"name": {
"render": "Navnet på denne campingplads er {navn}"
},
"group_only": {
"question": "Er denne campingplads kun for grupper?",
"mappings": {
"0": {
"then": "Denne campingplads er udelukkende for grupper"
},
"1": {
"then": "Denne campingplads er ikke udelukkende for grupper"
}
}
}
}
}
}

View file

@ -1493,5 +1493,23 @@
}
},
"title": "Zimní údržba"
},
"sauna": {
"title": "Sauna",
"description": "Sauna",
"layers": {
"6": {
"override": {
"presets=": {
"0": {
"title": "salon krásy"
},
"1": {
"title": "masážní salon"
}
}
}
}
}
}
}
}

View file

@ -10,7 +10,9 @@
"intro": "MapComplete可以在Android App直接下載。我們也計畫在Fdroid發佈。",
"noPlayServices": "本應用無需 Google Play 服務即可運行",
"older": "檢視較舊的軟體構建",
"title": "MapComplete Android 應用"
"title": "MapComplete Android 應用",
"legacyHeader": "為較舊Android手機建構",
"legacyExplanation": "由於Google的限制並無法為更新與更舊的Android編譯相同的APK\n 版本。\n\n 如果你透過F-Droid、Google Play、Obtainium或是安裝「最新」的版本失敗\n 請為其他較舊Android版本使用其他版本。"
},
"centerMessage": {
"allFilteredAway": "檢視畫面當中沒有滿足過瀘條件的圖徵",
@ -946,4 +948,4 @@
"startsWithQ": "維基數據編號以 Q 開頭後面接數字"
}
}
}
}

View file

@ -87,10 +87,13 @@
* Side effect: sets the feedback, returns true/false if valid
* @param canonicalValue
*/
function validateRange(canonicalValue: number): boolean {
function validateRange(canonicalValue: number | string): boolean {
if (!range) {
return true
}
if(typeof canonicalValue === "string"){
canonicalValue = Number(canonicalValue)
}
if (canonicalValue < range.warnBelow) {
feedback.set(t.suspiciouslyLow)
}
@ -100,7 +103,7 @@
if (canonicalValue > range.max) {
let max: number | string | BaseUIElement = range.max
if (unit) {
max = unit.asHumanLongValue(max)
max = unit.asHumanLongValue(max, getCountry)
}
feedback.set(t.tooHigh.Subs({ max }))
return false
@ -108,7 +111,7 @@
if (canonicalValue < range.min) {
let min: number | string | BaseUIElement = range.min
if (unit) {
min = unit.asHumanLongValue(min)
min = unit.asHumanLongValue(min, getCountry)
}
feedback.set(t.tooLow.Subs({ min }))
return false
@ -131,7 +134,7 @@
}
if (selectedUnit.data) {
const canonicalValue = unit.valueInCanonical(v + selectedUnit.data)
const canonicalValue = unit.valueInCanonical(v + selectedUnit.data, getCountry)
if (validateRange(canonicalValue)) {
value.setData(unit.toOsm(v, selectedUnit.data))
} else {