Merge master

This commit is contained in:
pietervdvn 2021-06-21 00:18:59 +02:00
commit b9fb18ee4c
45 changed files with 1651 additions and 854 deletions

View file

@ -115,7 +115,29 @@ export interface LayoutConfigJson {
roamingRenderings?: (TagRenderingConfigJson | string)[],
/**
* An override applied on all layers of the theme
* An override applied on all layers of the theme.
*
* E.g.: if there are two layers defined:
* ```
* "layers"[
* {"title": ..., "tagRenderings": [...], "osmSource":{"tags": ...}},
* {"title", ..., "tagRenderings", [...], "osmSource":{"tags" ...}}
* ]
* ```
*
* and overrideAll is specified:
* ```
* "overrideAll": {
* "osmSource":{"geoJsonSource":"xyz"}
* }
* then the result will be that all the layers will have these properties applied and result in:
* "layers"[
* {"title": ..., "tagRenderings": [...], "osmSource":{"tags": ..., "geoJsonSource":"xyz"}},
* {"title", ..., "tagRenderings", [...], "osmSource":{"tags" ..., "geoJsonSource":"xyz"}}
* ]
* ```
*
* If the overrideAll contains a list where the keys starts with a plus, the values will be appended (instead of discarding the old list)
*/
overrideAll?: any;

View file

@ -38,8 +38,8 @@ export class ExtraFunction {
]),
"Some advanced functions are available on **feat** as well:"
]).SetClass("flex-col").AsMarkdown();
private static readonly OverlapFunc = new ExtraFunction(
"overlapWith",
"Gives a list of features from the specified layer which this feature (partly) overlaps with. If the current feature is a point, all features that embed the point are given. The returned value is `{ feat: GeoJSONFeature, overlap: number}[]` where `overlap` is the overlapping surface are (in m²) for areas, the overlapping length (in meter) if the current feature is a line or `undefined` if the current feature is a point",

View file

@ -16,7 +16,7 @@ import RegisteringFeatureSource from "./RegisteringFeatureSource";
export default class FeaturePipeline implements FeatureSource {
public features: UIEventSource<{ feature: any; freshness: Date }[]>;
public features: UIEventSource<{ feature: any; freshness: Date }[]> = new UIEventSource<{feature: any; freshness: Date}[]>([]);
public readonly name = "FeaturePipeline"
@ -83,7 +83,8 @@ export default class FeaturePipeline implements FeatureSource {
selectedElement,
merged
));
this.features = source.features;
source.features.syncWith(this.features)
}
}

View file

@ -4,6 +4,7 @@ import State from "../../State";
import Hash from "../Web/Hash";
import MetaTagging from "../MetaTagging";
import ExtractRelations from "../Osm/ExtractRelations";
import FeatureSourceMerger from "./FeatureSourceMerger";
export default class MetaTaggingFeatureSource implements FeatureSource {
public readonly features: UIEventSource<{ feature: any; freshness: Date }[]> = new UIEventSource<{ feature: any; freshness: Date }[]>(undefined);
@ -14,6 +15,10 @@ export default class MetaTaggingFeatureSource implements FeatureSource {
const self = this;
this.name = "MetaTagging of " + source.name
if(allFeaturesSource.features === undefined){
throw ("Initialize the featuresource fully first!"+allFeaturesSource.name)
}
function update() {
const featuresFreshness = source.features.data
if (featuresFreshness === undefined) {

View file

@ -44,17 +44,16 @@ export class GeoOperations {
const coor = feature.geometry.coordinates;
for (const otherFeature of otherFeatures) {
if(feature.id === otherFeature.id){
continue;
}
if (otherFeature.geometry === undefined) {
console.error("No geometry for feature ", feature)
throw "List of other features contains a feature without geometry an undefined"
}
let otherFeatureBBox = BBox.get(otherFeature);
if (!featureBBox.overlapsWith(otherFeatureBBox)) {
continue;
}
if (this.inside(coor, otherFeature)) {
if (GeoOperations.inside(coor, otherFeature)) {
result.push({feat: otherFeature, overlap: undefined})
}
}
@ -64,6 +63,11 @@ export class GeoOperations {
if (feature.geometry.type === "LineString") {
for (const otherFeature of otherFeatures) {
if(feature.id === otherFeature.id){
continue;
}
const otherFeatureBBox = BBox.get(otherFeature);
const overlaps = featureBBox.overlapsWith(otherFeatureBBox)
if (!overlaps) {
@ -121,6 +125,18 @@ export class GeoOperations {
if (feature.geometry.type === "Polygon" || feature.geometry.type === "MultiPolygon") {
for (const otherFeature of otherFeatures) {
if(feature.id === otherFeature.id){
continue;
}
if(otherFeature.geometry.type === "Point"){
if (this.inside(otherFeature, feature)) {
result.push({feat: otherFeature, overlap: undefined})
}
continue;
}
const otherFeatureBBox = BBox.get(otherFeature);
const overlaps = featureBBox.overlapsWith(otherFeatureBBox)
if (!overlaps) {
@ -154,6 +170,10 @@ export class GeoOperations {
if (feature.geometry.type === "Point") {
return false;
}
if(pointCoordinate.geometry !== undefined){
pointCoordinate = pointCoordinate.geometry.coordinates
}
if (feature.geometry.type === "MultiPolygon") {
const coordinates = feature.geometry.coordinates[0];

View file

@ -3,7 +3,6 @@ import SimpleMetaTagger from "./SimpleMetaTagger";
import {ExtraFunction} from "./ExtraFunction";
import {Relation} from "./Osm/ExtractRelations";
import FeatureSource from "./FeatureSource/FeatureSource";
import State from "../State";
interface Params {
@ -48,32 +47,43 @@ export default class MetaTagging {
layerFuncs.set(layer.id, this.createRetaggingFunc(layer));
}
const featuresPerLayer = new Map<string, any[]>();
for (const feature of (allKnownFeatures.features?.data ?? features ?? [])) {
allKnownFeatures.features.addCallbackAndRun(newFeatures => {
const key = feature.feature._matching_layer_id;
if (!featuresPerLayer.has(key)) {
featuresPerLayer.set(key, [])
}
featuresPerLayer.get(key).push(feature.feature)
}
for (const feature of features) {
// @ts-ignore
const key = feature.feature._matching_layer_id;
const f = layerFuncs.get(key);
if (f === undefined) {
continue;
}
try {
f({featuresPerLayer: featuresPerLayer, memberships: relations}, feature.feature)
} catch (e) {
console.error(e)
const featuresPerLayer = new Map<string, any[]>();
for (const feature of (newFeatures.concat(features))) {
const key = feature.feature._matching_layer_id;
if (!featuresPerLayer.has(key)) {
featuresPerLayer.set(key, [])
}
featuresPerLayer.get(key).push(feature.feature)
}
}
for (const feature of features) {
// @ts-ignore
const key = feature.feature._matching_layer_id;
const f = layerFuncs.get(key);
if (f === undefined) {
continue;
}
try {
f({featuresPerLayer: featuresPerLayer, memberships: relations}, feature.feature)
} catch (e) {
console.error(e)
}
}
})
}
@ -105,7 +115,7 @@ export default class MetaTagging {
}
if (typeof result !== "string") {
// Make sure it is a string!
result = "" + result;
result = JSON.stringify(result);
}
feature.properties[key] = result;
} catch (e) {

View file

@ -144,6 +144,58 @@ export default class SpecialVisualizations {
return new VariableUiElement(source.map(data => data[neededValue] ?? "Loading..."));
}
},
{
funcName: "histogram",
docs:"Create a histogram for a list of given values, read from the properties.",
example: "`{histogram('some_key')}` with properties being `{some_key: ['a','b','a','c']} to create a histogram",
args:[
{
name: "key",
doc: "The key to be read and to generate a histogram from"
}
],
constr: (state: State, tagSource: UIEventSource<any>, args: string[]) =>{
return new VariableUiElement(
tagSource
.map(tags => tags[args[0]])
.map(listStr => {
try{
if("" === listStr ?? ""){
return "Nothing defined";
}
const list : string[] = JSON.parse(listStr)
if(list.length === 0){
return "No values given";
}
const counts = new Map<string, number>()
for (const key of list) {
if(key === null || key === undefined || key === ""){
continue;
}
if(!counts.has(key)){
counts.set(key, 1)
}else{
counts.set(key, counts.get(key) + 1)
}
}
const keys = Array.from(counts.keys())
keys.sort()
return "<ul>"+keys.map(key => `<li><b>${key}:</b> ${counts.get(key)}</li>`).join("")+"</ul>"
}catch{
return "Could not generate histogram" // TODO translate
}
})
)
}
},
{
funcName: "share_link",
docs: "Creates a link that (attempts to) open the native 'share'-screen",

View file

@ -1,4 +1,5 @@
import * as colors from "./assets/colors.json"
import {Util} from "leaflet";
export class Utils {
@ -10,8 +11,7 @@ export class Utils {
public static runningFromConsole = false;
public static readonly assets_path = "./assets/svg/";
private static knownKeys = ["addExtraTags", "and", "calculatedTags", "changesetmessage", "clustering", "color", "condition", "customCss", "dashArray", "defaultBackgroundId", "description", "descriptionTail", "doNotDownload", "enableAddNewPoints", "enableBackgroundLayerSelection", "enableGeolocation", "enableLayers", "enableMoreQuests", "enableSearch", "enableShareScreen", "enableUserBadge", "freeform", "hideFromOverview", "hideInAnswer", "icon", "iconOverlays", "iconSize", "id", "if", "ifnot", "isShown", "key", "language", "layers", "lockLocation", "maintainer", "mappings", "maxzoom", "maxZoom", "minNeededElements", "minzoom", "multiAnswer", "name", "or", "osmTags", "passAllFeatures", "presets", "question", "render", "roaming", "roamingRenderings", "rotation", "shortDescription", "socialImage", "source", "startLat", "startLon", "startZoom", "tagRenderings", "tags", "then", "title", "titleIcons", "type", "version", "wayHandling", "widenFactor", "width"]
private static extraKeys = ["nl", "en", "fr", "de", "pt", "es", "name", "phone", "email", "amenity", "leisure", "highway", "building", "yes", "no", "true", "false"]
@ -179,14 +179,39 @@ export class Utils {
console.log("Added custom layout ", location)
}
/**
* Copies all key-value pairs of the source into the target.
* If the key starts with a '+', the values of the list will be appended to the target instead of overwritten
* @param source
* @param target
* @constructor
*/
static Merge(source: any, target: any) {
for (const key in source) {
if (!source.hasOwnProperty(key)) {
continue
}
if (key.startsWith("+") || key.endsWith("+")) {
const trimmedKey = key.replace("+", "");
const sourceV = source[key];
const targetV = (target[trimmedKey] ?? [])
let newList: any[];
if (key.startsWith("+")) {
newList = sourceV.concat(targetV)
} else {
newList = targetV.concat(sourceV)
}
target[trimmedKey] = newList;
continue;
}
const sourceV = source[key];
const targetV = target[key]
if (typeof sourceV === "object") {
if (sourceV?.length !== undefined && targetV?.length !== undefined && key.startsWith("+")) {
target[key] = targetV.concat(sourceV)
} else if (typeof sourceV === "object") {
if (targetV === undefined) {
target[key] = sourceV;
} else {
@ -351,7 +376,6 @@ export class Utils {
}
private static tile2long(x, z) {
return (x / Math.pow(2, z) * 360 - 180);
}

View file

@ -168,7 +168,8 @@
"it": "Materiale: legno",
"ru": "Материал: дерево",
"zh_Hans": "材质:木",
"nb_NO": "Materiale: tre"
"nb_NO": "Materiale: tre",
"zh_Hant": "材質:木頭"
}
},
{
@ -183,7 +184,8 @@
"it": "Materiale: metallo",
"ru": "Материал: металл",
"zh_Hans": "材质:金属",
"nb_NO": "Materiale: metall"
"nb_NO": "Materiale: metall",
"zh_Hant": "材質:金屬"
}
},
{
@ -198,7 +200,8 @@
"it": "Materiale: pietra",
"ru": "Материал: камень",
"zh_Hans": "材质:石头",
"nb_NO": "Materiale: stein"
"nb_NO": "Materiale: stein",
"zh_Hant": "材質:石頭"
}
},
{
@ -213,7 +216,8 @@
"it": "Materiale: cemento",
"ru": "Материал: бетон",
"zh_Hans": "材质:混凝土",
"nb_NO": "Materiale: betong"
"nb_NO": "Materiale: betong",
"zh_Hant": "材質:水泥"
}
},
{
@ -228,7 +232,8 @@
"it": "Materiale: plastica",
"ru": "Материал: пластик",
"zh_Hans": "材质:塑料",
"nb_NO": "Materiale: plastikk"
"nb_NO": "Materiale: plastikk",
"zh_Hant": "材質:塑膠"
}
},
{
@ -243,7 +248,8 @@
"it": "Materiale: acciaio",
"ru": "Материал: сталь",
"zh_Hans": "材质:不锈钢",
"nb_NO": "Materiale: stål"
"nb_NO": "Materiale: stål",
"zh_Hant": "材質:鋼鐵"
}
}
],
@ -255,7 +261,8 @@
"hu": "Miből van a pad (ülő része)?",
"it": "Di che materiale è fatta questa panchina?",
"zh_Hans": "这个长椅(或座椅)是用什么材料做的?",
"ru": "Из какого материала сделана скамейка?"
"ru": "Из какого материала сделана скамейка?",
"zh_Hant": "這個長椅 (座位) 是什麼做的?"
}
},
{
@ -267,7 +274,8 @@
"hu": "Milyen irányba néz a pad?",
"it": "In che direzione si guarda quando si è seduti su questa panchina?",
"ru": "В каком направлении вы смотрите, когда сидите на скамейке?",
"zh_Hans": "坐在长椅上的时候你目视的方向是哪边?"
"zh_Hans": "坐在长椅上的时候你目视的方向是哪边?",
"zh_Hant": "坐在長椅時是面對那個方向?"
},
"render": {
"en": "When sitting on the bench, one looks towards {direction}°.",
@ -277,7 +285,8 @@
"hu": "A pad {direction}° felé néz.",
"it": "Quando si è seduti su questa panchina, si guarda verso {direction}°.",
"zh_Hans": "坐在长椅上的时候目视方向为 {direction}°方位。",
"ru": "Сидя на скамейке, вы смотрите в сторону {direction}°."
"ru": "Сидя на скамейке, вы смотрите в сторону {direction}°.",
"zh_Hant": "當坐在長椅時,那個人朝向 {direction}°。"
},
"freeform": {
"key": "direction",
@ -454,7 +463,8 @@
"it": "Questa panchina è stata controllata lultima volta in data {survey:date}",
"zh_Hans": "这个长椅于 {survey:date}最后一次实地调查",
"de": "Diese Bank wurde zuletzt überprüft am {survey:date}",
"ru": "Последний раз обследование этой скамейки проводилось {survey:date}"
"ru": "Последний раз обследование этой скамейки проводилось {survey:date}",
"zh_Hant": "這個長椅最後是在 {survey:date} 探查的"
},
"freeform": {
"key": "survey:date",
@ -497,7 +507,8 @@
"ru": "Скамейка",
"id": "Bangku",
"zh_Hans": "长椅",
"nb_NO": "Benk"
"nb_NO": "Benk",
"zh_Hant": "長椅"
},
"description": {
"en": "Add a new bench",
@ -509,7 +520,8 @@
"it": "Aggiungi una nuova panchina",
"ru": "Добавить новую скамейку",
"zh_Hans": "增加一个新的长椅",
"nb_NO": "Legg til en ny benk"
"nb_NO": "Legg til en ny benk",
"zh_Hant": "新增長椅"
}
}
]

View file

@ -10,7 +10,8 @@
"it": "Panchine alle fermate del trasporto pubblico",
"ru": "Скамейки на остановках общественного транспорта",
"zh_Hans": "在公交站点的长椅",
"nb_NO": "Benker"
"nb_NO": "Benker",
"zh_Hant": "大眾運輸站點的長椅"
},
"minzoom": 14,
"source": {
@ -33,7 +34,8 @@
"ru": "Скамейка",
"id": "Bangku",
"zh_Hans": "长椅",
"nb_NO": "Benk"
"nb_NO": "Benk",
"zh_Hant": "長椅"
},
"mappings": [
{
@ -52,7 +54,8 @@
"hu": "Pad megállóban",
"it": "Panchina alla fermata del trasporto pubblico",
"ru": "Скамейка на остановке общественного транспорта",
"zh_Hans": "在公交站点的长椅"
"zh_Hans": "在公交站点的长椅",
"zh_Hant": "大眾運輸站點的長椅"
}
},
{
@ -69,7 +72,8 @@
"hu": "Pad fedett helyen",
"it": "Panchina in un riparo",
"zh_Hans": "在庇护所的长椅",
"ru": "Скамейка в укрытии"
"ru": "Скамейка в укрытии",
"zh_Hant": "涼亭內的長椅"
}
}
]
@ -86,7 +90,8 @@
"it": "{name}",
"ru": "{name}",
"id": "{name}",
"zh_Hans": "{name}"
"zh_Hans": "{name}",
"zh_Hant": "{name}"
},
"freeform": {
"key": "name"
@ -100,7 +105,8 @@
"nl": "Leunbank",
"it": "Panca in piedi",
"zh_Hans": "站立长凳",
"ru": "Встаньте на скамейке"
"ru": "Встаньте на скамейке",
"zh_Hant": "站立長椅"
},
"freeform": {
"key": "bench",

View file

@ -5,7 +5,8 @@
"nl": "Fietsbibliotheek",
"fr": "Vélothèque",
"it": "Bici in prestito",
"ru": "Велосипедная библиотека"
"ru": "Велосипедная библиотека",
"zh_Hant": "單車圖書館"
},
"minzoom": 8,
"source": {
@ -17,7 +18,8 @@
"nl": "Fietsbibliotheek",
"fr": "Vélothèque",
"it": "Bici in prestito",
"ru": "Велосипедная библиотека"
"ru": "Велосипедная библиотека",
"zh_Hant": "單車圖書館"
},
"mappings": [
{
@ -45,7 +47,8 @@
"hu": "Létesítmény, ahonnan kerékpár kölcsönözhető hosszabb időre",
"it": "Una struttura dove le biciclette possono essere prestate per periodi di tempo più lunghi",
"de": "Eine Einrichtung, in der Fahrräder für längere Zeit geliehen werden können",
"ru": "Учреждение, где велосипед может быть арендован на более длительный срок"
"ru": "Учреждение, где велосипед может быть арендован на более длительный срок",
"zh_Hant": "能夠長期租用單車的設施"
},
"tagRenderings": [
"images",
@ -56,7 +59,8 @@
"fr": "Quel est le nom de cette vélothèque ?",
"it": "Qual è il nome di questo “bici in prestito”?",
"ru": "Как называется эта велосипедная библиотека?",
"nb_NO": "Hva heter dette sykkelbiblioteket?"
"nb_NO": "Hva heter dette sykkelbiblioteket?",
"zh_Hant": "這個單車圖書館的名稱是?"
},
"render": {
"en": "This bicycle library is called {name}",
@ -64,7 +68,8 @@
"fr": "Cette vélothèque s'appelle {name}",
"it": "Il “bici in prestito” è chiamato {name}",
"ru": "Эта велосипедная библиотека называется {name}",
"nb_NO": "Dette sykkelbiblioteket heter {name}"
"nb_NO": "Dette sykkelbiblioteket heter {name}",
"zh_Hant": "這個單車圖書館叫做 {name}"
},
"freeform": {
"key": "name"
@ -83,7 +88,8 @@
"it": "Quanto costa il prestito di una bicicletta?",
"ru": "Сколько стоит прокат велосипеда?",
"de": "Wie viel kostet das Ausleihen eines Fahrrads?",
"nb_NO": "Hvor mye koster det å leie en sykkel?"
"nb_NO": "Hvor mye koster det å leie en sykkel?",
"zh_Hant": "租用單車的費用多少?"
},
"render": {
"en": "Lending a bicycle costs {charge}",
@ -93,7 +99,8 @@
"it": "Il prestito di una bicicletta costa {charge}",
"ru": "Стоимость аренды велосипеда {charge}",
"de": "Das Ausleihen eines Fahrrads kostet {charge}",
"nb_NO": "Sykkelleie koster {charge}"
"nb_NO": "Sykkelleie koster {charge}",
"zh_Hant": "租借單車需要 {charge}"
},
"freeform": {
"key": "charge",
@ -117,7 +124,8 @@
"it": "Il prestito di una bicicletta è gratuito",
"de": "Das Ausleihen eines Fahrrads ist kostenlos",
"ru": "Прокат велосипедов бесплатен",
"nb_NO": "Det er gratis å leie en sykkel"
"nb_NO": "Det er gratis å leie en sykkel",
"zh_Hant": "租借單車免費"
}
},
{
@ -132,7 +140,8 @@
"nl": "Een fiets huren kost €20/jaar en €20 waarborg",
"fr": "Emprunter un vélo coûte 20 €/an et 20 € de garantie",
"it": "Il prestito di una bicicletta costa 20 €/anno più 20 € di garanzia",
"de": "Das Ausleihen eines Fahrrads kostet 20€ pro Jahr und 20€ Gebühr"
"de": "Das Ausleihen eines Fahrrads kostet 20€ pro Jahr und 20€ Gebühr",
"zh_Hant": "租借單車價錢 €20/year 與 €20 保證金"
}
}
]
@ -146,7 +155,8 @@
"it": "Chi può prendere in prestito le biciclette qua?",
"zh_Hans": "谁可以从这里借自行车?",
"de": "Wer kann hier Fahrräder ausleihen?",
"ru": "Кто здесь может арендовать велосипед?"
"ru": "Кто здесь может арендовать велосипед?",
"zh_Hant": "誰可以在這裡租單車?"
},
"multiAnswer": true,
"mappings": [
@ -159,7 +169,8 @@
"hu": "",
"it": "Sono disponibili biciclette per bambini",
"de": "Fahrräder für Kinder verfügbar",
"ru": "Доступны детские велосипеды"
"ru": "Доступны детские велосипеды",
"zh_Hant": "提供兒童單車"
}
},
{
@ -170,7 +181,8 @@
"fr": "Vélos pour adultes disponibles",
"it": "Sono disponibili biciclette per adulti",
"de": "Fahrräder für Erwachsene verfügbar",
"ru": "Доступны велосипеды для взрослых"
"ru": "Доступны велосипеды для взрослых",
"zh_Hant": "有提供成人單車"
}
},
{
@ -181,7 +193,8 @@
"fr": "Vélos pour personnes handicapées disponibles",
"it": "Sono disponibili biciclette per disabili",
"de": "Fahrräder für Behinderte verfügbar",
"ru": "Доступны велосипеды для людей с ограниченными возможностями"
"ru": "Доступны велосипеды для людей с ограниченными возможностями",
"zh_Hant": "有提供行動不便人士的單車"
}
}
]
@ -194,7 +207,8 @@
"title": {
"en": "Fietsbibliotheek",
"nl": "Bicycle library",
"ru": "Велосипедная библиотека"
"ru": "Велосипедная библиотека",
"zh_Hant": "自行車圖書館 ( Fietsbibliotheek)"
},
"tags": [
"amenity=bicycle_library"
@ -204,7 +218,8 @@
"en": "A bicycle library has a collection of bikes which can be lent",
"fr": "Une vélothèque a une collection de vélos qui peuvent être empruntés",
"it": "Una ciclo-teca o «bici in prestito» ha una collezione di bici che possno essere prestate",
"ru": "В велосипедной библиотеке есть велосипеды для аренды"
"ru": "В велосипедной библиотеке есть велосипеды для аренды",
"zh_Hant": "單車圖書館有一大批單車供人租借"
}
}
],

View file

@ -6,7 +6,8 @@
"fr": "Distributeur automatique de chambre à air de vélo",
"it": "Distributore automatico di camere daria per bici",
"de": "Fahrradschlauch-Automat",
"ru": "Торговый автомат для велосипедистов"
"ru": "Торговый автомат для велосипедистов",
"zh_Hant": "自行車內胎自動售貨機"
},
"title": {
"render": {
@ -15,7 +16,8 @@
"fr": "Distributeur automatique de chambre à air de vélo",
"it": "Distributore automatico di camere daria per bici",
"de": "Fahrradschlauch-Automat",
"ru": "Торговый автомат для велосипедистов"
"ru": "Торговый автомат для велосипедистов",
"zh_Hant": "自行車內胎自動售貨機"
},
"mappings": [
{
@ -65,7 +67,8 @@
"fr": "Distributeur automatique de chambre à air de vélo",
"it": "Distributore automatico di camere daria per bici",
"de": "Fahrradschlauch-Automat",
"ru": "Торговый автомат для велосипедистов"
"ru": "Торговый автомат для велосипедистов",
"zh_Hant": "自行車內胎自動售貨機"
},
"tags": [
"amenity=vending_machine",
@ -85,7 +88,8 @@
"fr": "Cette machine est-elle encore opérationelle ?",
"it": "Questo distributore automatico funziona ancora?",
"ru": "Этот торговый автомат все еще работает?",
"de": "Ist dieser Automat noch in Betrieb?"
"de": "Ist dieser Automat noch in Betrieb?",
"zh_Hant": "這個自動販賣機仍有運作嗎?"
},
"render": {
"en": "The operational status is <i>{operational_status</i>",
@ -93,7 +97,8 @@
"fr": "L'état opérationnel est <i>{operational_status}</i>",
"it": "Lo stato operativo è <i>{operational_status}</i>",
"de": "Der Betriebszustand ist <i>{operational_status</i>",
"ru": "Рабочий статус: <i> {operational_status</i>"
"ru": "Рабочий статус: <i> {operational_status</i>",
"zh_Hant": "運作狀態是 <i>{operational_status</i>"
},
"freeform": {
"key": "operational_status"
@ -109,7 +114,8 @@
"it": "Il distributore automatico funziona",
"ru": "Этот торговый автомат работает",
"zh_Hans": "这个借还机正常工作",
"de": "Dieser Automat funktioniert"
"de": "Dieser Automat funktioniert",
"zh_Hant": "這個自動販賣機仍運作"
}
},
{
@ -122,7 +128,8 @@
"it": "Il distributore automatico è guasto",
"ru": "Этот торговый автомат сломан",
"zh_Hans": "这个借还机已经损坏",
"de": "Dieser Automat ist kaputt"
"de": "Dieser Automat ist kaputt",
"zh_Hant": "這個自動販賣機沒有運作了"
}
},
{
@ -135,7 +142,8 @@
"it": "Il distributore automatico è spento",
"ru": "Этот торговый автомат закрыт",
"zh_Hans": "这个借还机被关闭了",
"de": "Dieser Automat ist geschlossen"
"de": "Dieser Automat ist geschlossen",
"zh_Hant": "這個自動販賣機已經關閉了"
}
}
]

View file

@ -8,7 +8,8 @@
"de": "Fahrrad-Café",
"it": "Caffè in bici",
"zh_Hans": "自行车咖啡",
"ru": "Велосипедное кафе"
"ru": "Велосипедное кафе",
"zh_Hant": "單車咖啡廳"
},
"minzoom": 13,
"source": {
@ -44,7 +45,8 @@
"de": "Fahrrad-Café",
"it": "Caffè in bici",
"zh_Hans": "自行车咖啡",
"ru": "Велосипедное кафе"
"ru": "Велосипедное кафе",
"zh_Hant": "單車咖啡廳"
},
"mappings": [
{
@ -57,7 +59,8 @@
"de": "Fahrrad-Café <i>{name}</i>",
"it": "Caffè in bici <i>{name}</i>",
"zh_Hans": "自行车咖啡 <i>{name}</i>",
"ru": "Велосипедное кафе <i>{name}</i>"
"ru": "Велосипедное кафе <i>{name}</i>",
"zh_Hant": "單車咖啡廳<i>{name}</i>"
}
}
]
@ -73,7 +76,8 @@
"de": "Wie heißt dieses Fahrrad-Café?",
"it": "Qual è il nome di questo caffè in bici?",
"zh_Hans": "这个自行车咖啡的名字是什么?",
"ru": "Как называется это байк-кафе?"
"ru": "Как называется это байк-кафе?",
"zh_Hant": "這個單車咖啡廳的名稱是?"
},
"render": {
"en": "This bike cafe is called {name}",
@ -83,7 +87,8 @@
"de": "Dieses Fahrrad-Café heißt {name}",
"it": "Questo caffè in bici è chiamato {name}",
"zh_Hans": "这家自行车咖啡叫做 {name}",
"ru": "Это велосипедное кафе называется {name}"
"ru": "Это велосипедное кафе называется {name}",
"zh_Hant": "這個單車咖啡廳叫做 {name}"
},
"freeform": {
"key": "name"
@ -98,7 +103,8 @@
"de": "Bietet dieses Fahrrad-Café eine Fahrradpumpe an, die von jedem benutzt werden kann?",
"it": "Questo caffè in bici offre una pompa per bici che chiunque può utilizzare?",
"zh_Hans": "这家自行车咖啡为每个使用者提供打气筒吗?",
"ru": "Есть ли в этом велосипедном кафе велосипедный насос для всеобщего использования?"
"ru": "Есть ли в этом велосипедном кафе велосипедный насос для всеобщего использования?",
"zh_Hant": "這個單車咖啡廳有提供給任何人都能使用的單車打氣甬嗎?"
},
"mappings": [
{
@ -110,7 +116,8 @@
"gl": "Este café de ciclistas ofrece unha bomba de ar",
"de": "Dieses Fahrrad-Café bietet eine Fahrradpumpe an, die von jedem benutzt werden kann",
"it": "Questo caffè in bici offre una pompa per bici liberamente utilizzabile",
"zh_Hans": "这家自行车咖啡为每个人提供打气筒"
"zh_Hans": "这家自行车咖啡为每个人提供打气筒",
"zh_Hant": "這個單車咖啡廳有提供給任何人都能使用的單車打氣甬"
}
},
{
@ -122,7 +129,8 @@
"gl": "Este café de ciclistas non ofrece unha bomba de ar",
"de": "Dieses Fahrrad-Café bietet keine Fahrradpumpe an, die von jedem benutzt werden kann",
"it": "Questo caffè in bici non offre una pompa per bici liberamente utilizzabile",
"zh_Hans": "这家自行车咖啡不为每个人提供打气筒"
"zh_Hans": "这家自行车咖啡不为每个人提供打气筒",
"zh_Hant": "這個單車咖啡廳並沒有為所有人提供單車打氣甬"
}
}
]
@ -135,7 +143,8 @@
"gl": "Hai ferramentas aquí para arranxar a túa propia bicicleta?",
"de": "Gibt es hier Werkzeuge, um das eigene Fahrrad zu reparieren?",
"it": "Ci sono degli strumenti per riparare la propria bicicletta?",
"zh_Hans": "这里有供你修车用的工具吗?"
"zh_Hans": "这里有供你修车用的工具吗?",
"zh_Hant": "這裡是否有工具修理你的單車嗎?"
},
"mappings": [
{
@ -147,7 +156,8 @@
"gl": "Hai ferramentas aquí para arranxar a túa propia bicicleta",
"de": "Dieses Fahrrad-Café bietet Werkzeuge für die selbständige Reparatur an",
"it": "Questo caffè in bici fornisce degli attrezzi per la riparazione fai-da-te",
"zh_Hans": "这家自行车咖啡为DIY修理者提供工具"
"zh_Hans": "这家自行车咖啡为DIY修理者提供工具",
"zh_Hant": "這個單車咖啡廳提供工具讓你修理"
}
},
{
@ -159,7 +169,8 @@
"gl": "Non hai ferramentas aquí para arranxar a túa propia bicicleta",
"de": "Dieses Fahrrad-Café bietet keine Werkzeuge für die selbständige Reparatur an",
"it": "Questo caffè in bici non fornisce degli attrezzi per la riparazione fai-da-te",
"zh_Hans": "这家自行车咖啡不为DIY修理者提供工具"
"zh_Hans": "这家自行车咖啡不为DIY修理者提供工具",
"zh_Hant": "這個單車咖啡廳並沒有提供工具讓你修理"
}
}
]
@ -172,7 +183,8 @@
"gl": "Este café de ciclistas arranxa bicicletas?",
"de": "Repariert dieses Fahrrad-Café Fahrräder?",
"it": "Questo caffè in bici ripara le bici?",
"zh_Hans": "这家自行车咖啡t提供修车服务吗"
"zh_Hans": "这家自行车咖啡t提供修车服务吗",
"zh_Hant": "這個單車咖啡廳是否能修理單車?"
},
"mappings": [
{
@ -184,7 +196,8 @@
"gl": "Este café de ciclistas arranxa bicicletas",
"de": "Dieses Fahrrad-Café repariert Fahrräder",
"it": "Questo caffè in bici ripara le bici",
"zh_Hans": "这家自行车咖啡可以修车"
"zh_Hans": "这家自行车咖啡可以修车",
"zh_Hant": "這個單車咖啡廳修理單車"
}
},
{
@ -196,7 +209,8 @@
"gl": "Este café de ciclistas non arranxa bicicletas",
"de": "Dieses Fahrrad-Café repariert keine Fahrräder",
"it": "Questo caffè in bici non ripara le bici",
"zh_Hans": "这家自行车咖啡不能修车"
"zh_Hans": "这家自行车咖啡不能修车",
"zh_Hant": "這個單車咖啡廳並不修理單車"
}
}
]
@ -210,7 +224,8 @@
"de": "Was ist die Webseite von {name}?",
"it": "Qual è il sito web di {name}?",
"ru": "Какой сайт у {name}?",
"zh_Hans": "{name}的网站是什么?"
"zh_Hans": "{name}的网站是什么?",
"zh_Hant": "{name} 的網站是?"
},
"render": "<a href='{website}' target='_blank'>{website}</a>",
"freeform": {
@ -226,7 +241,8 @@
"de": "Wie lautet die Telefonnummer von {name}?",
"it": "Qual è il numero di telefono di {name}?",
"ru": "Какой номер телефона у {name}?",
"zh_Hans": "{name}的电话号码是什么?"
"zh_Hans": "{name}的电话号码是什么?",
"zh_Hant": "{name} 的電話號碼是?"
},
"render": "<a href='tel:{phone}'>{phone}</a>",
"freeform": {
@ -243,7 +259,8 @@
"de": "Wie lautet die E-Mail-Adresse von {name}?",
"it": "Qual è lindirizzo email di {name}?",
"ru": "Какой адрес электронной почты у {name}?",
"zh_Hans": "{name}的电子邮箱是什么?"
"zh_Hans": "{name}的电子邮箱是什么?",
"zh_Hant": "{name} 的電子郵件地址是?"
},
"render": "<a href='mailto:{email}' target='_blank'>{email}</a>",
"freeform": {
@ -257,7 +274,8 @@
"nl": "Wanneer is dit fietscafé geopend?",
"fr": "Quand ce Café vélo est-t-il ouvert ?",
"it": "Quando è aperto questo caffè in bici?",
"zh_Hans": "这家自行车咖啡什么时候开门营业?"
"zh_Hans": "这家自行车咖啡什么时候开门营业?",
"zh_Hant": "何時這個單車咖啡廳營運?"
},
"render": "{opening_hours_table(opening_hours)}",
"freeform": {
@ -288,7 +306,8 @@
"gl": "Café de ciclistas",
"de": "Fahrrad-Café",
"it": "Caffè in bici",
"zh_Hans": "自行车咖啡"
"zh_Hans": "自行车咖啡",
"zh_Hant": "單車咖啡廳"
},
"tags": [
"amenity=pub",

View file

@ -5,7 +5,8 @@
"nl": "Fietsschoonmaakpunt",
"fr": "Service de nettoyage de vélo",
"it": "Servizio lavaggio bici",
"de": "Fahrrad-Reinigungsdienst"
"de": "Fahrrad-Reinigungsdienst",
"zh_Hant": "單車清理服務"
},
"title": {
"render": {
@ -13,7 +14,8 @@
"nl": "Fietsschoonmaakpunt",
"fr": "Service de nettoyage de vélo",
"it": "Servizio lavaggio bici",
"de": "Fahrrad-Reinigungsdienst"
"de": "Fahrrad-Reinigungsdienst",
"zh_Hant": "單車清理服務"
},
"mappings": [
{
@ -23,7 +25,8 @@
"nl": "Fietsschoonmaakpunt <i>{name}</i>",
"fr": "Service de nettoyage de vélo <i>{name}</i>",
"it": "Servizio lavaggio bici <i>{name}</i>",
"de": "Fahrrad-Reinigungsdienst<i>{name}</i>"
"de": "Fahrrad-Reinigungsdienst<i>{name}</i>",
"zh_Hant": "單車清理服務 <i>{name}</i>"
}
}
]
@ -50,7 +53,8 @@
"nl": "Fietsschoonmaakpunt",
"fr": "Service de nettoyage de vélo",
"it": "Servizio lavaggio bici",
"de": "Fahrrad-Reinigungsdienst"
"de": "Fahrrad-Reinigungsdienst",
"zh_Hant": "單車清理服務"
},
"tags": [
"amenity=bicycle_wash"

View file

@ -4,7 +4,8 @@
"en": "Monitoring stations",
"nl": "Telstation",
"fr": "Stations de contrôle",
"it": "Stazioni di monitoraggio"
"it": "Stazioni di monitoraggio",
"zh_Hant": "監視站"
},
"minzoom": 12,
"source": {
@ -21,7 +22,8 @@
"en": "Bicycle counting station",
"fr": "Station de comptage de vélo",
"it": "Stazione conta-biciclette",
"de": "Fahrradzählstation"
"de": "Fahrradzählstation",
"zh_Hant": "單車計數站"
},
"mappings": [
{
@ -31,7 +33,8 @@
"nl": "Fietstelstation {name}",
"fr": "Station de comptage de vélo {name}",
"it": "Stazione conta-biciclette {name}",
"de": "Fahrradzählstation {name}"
"de": "Fahrradzählstation {name}",
"zh_Hant": "單車計數站 {name}"
}
},
{
@ -41,7 +44,8 @@
"nl": "Fietstelstation {ref}",
"fr": "Station de comptage de vélo {ref}",
"it": "Stazione conta-bicicletta {ref}",
"de": "Fahrradzählstation {ref}"
"de": "Fahrradzählstation {ref}",
"zh_Hant": "單車計數站 {ref}"
}
}
]

View file

@ -7,7 +7,8 @@
"gl": "Aparcadoiro de bicicletas",
"de": "Fahrrad-Parkplätze",
"hu": "Kerékpáros parkoló",
"it": "Parcheggio bici"
"it": "Parcheggio bici",
"zh_Hant": "單車停車場"
},
"minzoom": 17,
"source": {
@ -33,7 +34,8 @@
"gl": "Aparcadoiro de bicicletas",
"de": "Fahrrad-Parkplätze",
"hu": "Kerékpáros parkoló",
"it": "Parcheggio bici"
"it": "Parcheggio bici",
"zh_Hant": "單車停車場"
},
"tags": [
"amenity=bicycle_parking"
@ -48,7 +50,8 @@
"gl": "Aparcadoiro de bicicletas",
"de": "Fahrrad-Parkplätze",
"hu": "Kerékpáros parkoló",
"it": "Parcheggio bici"
"it": "Parcheggio bici",
"zh_Hant": "單車停車場"
}
},
"tagRenderings": [
@ -62,7 +65,9 @@
"gl": "Que tipo de aparcadoiro de bicicletas é?",
"de": "Was ist die Art dieses Fahrrad-Parkplatzes?",
"hu": "Milyen típusú ez a kerékpáros parkoló?",
"it": "Di che tipo di parcheggio bici si tratta?"
"it": "Di che tipo di parcheggio bici si tratta?",
"ru": "К какому типу относится эта велопарковка?",
"zh_Hant": "這是那種類型的單車停車場?"
},
"render": {
"en": "This is a bicycle parking of the type: {bicycle_parking}",
@ -71,7 +76,8 @@
"gl": "Este é un aparcadoiro de bicicletas do tipo: {bicycle_parking}",
"de": "Dies ist ein Fahrrad-Parkplatz der Art: {bicycle_parking}",
"hu": "Ez egy {bicycle_parking} típusú kerékpáros parkoló",
"it": "È un parcheggio bici del tipo: {bicycle_parking}"
"it": "È un parcheggio bici del tipo: {bicycle_parking}",
"zh_Hant": "這個單車停車場的類型是:{bicycle_parking}"
},
"freeform": {
"key": "bicycle_parking",
@ -89,7 +95,8 @@
"gl": "De roda (Stands) <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>",
"de": "Fahrradbügel <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>",
"hu": "\"U\" <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>",
"it": "Ad arco <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>"
"it": "Ad arco <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>",
"zh_Hant": "單車架 <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>"
}
},
{
@ -101,7 +108,8 @@
"gl": "Aros <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>",
"de": "Metallgestänge <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>",
"hu": "Kengyeles <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>",
"it": "Ferma-ruota <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>"
"it": "Ferma-ruota <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>",
"zh_Hant": "車輪架/圓圈 <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>"
}
},
{
@ -112,7 +120,8 @@
"fr": "Support guidon <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>",
"gl": "Cadeado para guiador <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>",
"de": "Halter für Fahrradlenker <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>",
"it": "Blocca manubrio <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>"
"it": "Blocca manubrio <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>",
"zh_Hant": "車把架 <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>"
}
},
{
@ -122,7 +131,8 @@
"nl": "Rek <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>",
"fr": "Râtelier <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>",
"gl": "Cremalleira <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>",
"de": "Gestell <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>"
"de": "Gestell <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>",
"zh_Hant": "車架<img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>"
}
},
{
@ -133,7 +143,8 @@
"fr": "Superposé <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>",
"gl": "Dobre cremalleira <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>",
"de": "Zweistufig <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>",
"hu": "Kétszintű <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>"
"hu": "Kétszintű <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>",
"zh_Hant": "兩層<img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>"
}
},
{
@ -144,7 +155,8 @@
"fr": "Abri <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>",
"gl": "Abeiro <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>",
"de": "Schuppen <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>",
"hu": "Fészer <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>"
"hu": "Fészer <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>",
"zh_Hant": "車棚 <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>"
}
},
{
@ -154,7 +166,8 @@
"nl": "Paal met ring <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>",
"fr": "Bollard <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>",
"it": "Colonnina <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>",
"de": "Poller <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>"
"de": "Poller <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>",
"zh_Hant": "柱子 <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>"
}
},
{
@ -164,7 +177,8 @@
"nl": "Een oppervlakte die gemarkeerd is om fietsen te parkeren",
"fr": "Zone au sol qui est marquée pour le stationnement des vélos",
"it": "Una zona del pavimento che è marcata per il parcheggio delle bici",
"de": "Ein Bereich auf dem Boden, der für das Abstellen von Fahrrädern gekennzeichnet ist"
"de": "Ein Bereich auf dem Boden, der für das Abstellen von Fahrrädern gekennzeichnet ist",
"zh_Hant": "樓層當中標示為單車停車場的區域"
}
}
]
@ -175,7 +189,8 @@
"en": "What is the relative location of this bicycle parking?",
"nl": "Wat is de relatieve locatie van deze parking??",
"fr": "Quelle est la position relative de ce parking à vélo ?",
"it": "Qual è la posizione relativa di questo parcheggio bici?"
"it": "Qual è la posizione relativa di questo parcheggio bici?",
"zh_Hant": "這個單車停車場的相對位置是?"
},
"mappings": [
{
@ -186,7 +201,8 @@
"fr": "Parking souterrain",
"it": "Parcheggio sotterraneo",
"ru": "Подземная парковка",
"de": "Tiefgarage"
"de": "Tiefgarage",
"zh_Hant": "地下停車場"
}
},
{
@ -197,7 +213,8 @@
"fr": "Parking souterrain",
"it": "Parcheggio sotterraneo",
"ru": "Подземная парковка",
"de": "Tiefgarage"
"de": "Tiefgarage",
"zh_Hant": "地下停車場"
}
},
{
@ -208,7 +225,8 @@
"fr": "Parking en surface",
"hu": "Felszíni parkoló",
"it": "Parcheggio in superficie",
"de": "Ebenerdiges Parken"
"de": "Ebenerdiges Parken",
"zh_Hant": "地面停車場"
}
},
{
@ -219,7 +237,8 @@
"fr": "Parking en surface",
"hu": "Felszíni parkoló",
"it": "Parcheggio in superficie",
"de": "Ebenerdiges Parken"
"de": "Ebenerdiges Parken",
"zh_Hant": "地面層停車場"
},
"hideInAnwser": true
},
@ -231,7 +250,8 @@
"fr": "Parking sur un toit",
"hu": "Tetőparkoló",
"it": "Parcheggio sul tetto",
"ru": "Парковка на крыше"
"ru": "Парковка на крыше",
"zh_Hant": "屋頂停車場"
}
}
]
@ -245,7 +265,8 @@
"de": "Ist dieser Parkplatz überdacht? Wählen Sie auch \"überdacht\" für Innenparkplätze.",
"fr": "Ce parking est-il couvert ? Sélectionnez aussi \"couvert\" pour les parkings en intérieur.",
"hu": "Fedett ez a parkoló? (Beltéri parkoló esetén is válaszd a \"fedett\" opciót.)",
"it": "È un parcheggio coperto? Indicare “coperto” per parcheggi allinterno."
"it": "È un parcheggio coperto? Indicare “coperto” per parcheggi allinterno.",
"zh_Hant": "這個停車場是否有車棚?如果是室內停車場也請選擇\"遮蔽\"。"
},
"condition": {
"and": [
@ -263,7 +284,8 @@
"de": "Dieser Parkplatz ist überdacht (er hat ein Dach)",
"fr": "Ce parking est couvert (il a un toit)",
"hu": "A parkoló fedett",
"it": "È un parcheggio coperto (ha un tetto)"
"it": "È un parcheggio coperto (ha un tetto)",
"zh_Hant": "這個停車場有遮蔽 (有屋頂)"
}
},
{
@ -275,7 +297,8 @@
"de": "Dieser Parkplatz ist nicht überdacht",
"fr": "Ce parking n'est pas couvert",
"hu": "A parkoló nem fedett",
"it": "Non è un parcheggio coperto"
"it": "Non è un parcheggio coperto",
"zh_Hant": "這個停車場沒有遮蔽"
}
}
]
@ -288,7 +311,8 @@
"nl": "Hoeveel fietsen kunnen in deze fietsparking (inclusief potentiëel bakfietsen)?",
"gl": "Cantas bicicletas caben neste aparcadoiro de bicicletas (incluídas as posíbeis bicicletas de carga)?",
"de": "Wie viele Fahrräder passen auf diesen Fahrrad-Parkplatz (einschließlich möglicher Lastenfahrräder)?",
"it": "Quante biciclette entrano in questo parcheggio per bici (incluse le eventuali bici da trasporto)?"
"it": "Quante biciclette entrano in questo parcheggio per bici (incluse le eventuali bici da trasporto)?",
"zh_Hant": "這個單車停車場能放幾台單車 (包括裝箱單車)"
},
"render": {
"en": "Place for {capacity} bikes",
@ -296,7 +320,8 @@
"nl": "Plaats voor {capacity} fietsen",
"gl": "Lugar para {capacity} bicicletas",
"de": "Platz für {capacity} Fahrräder",
"it": "Posti per {capacity} bici"
"it": "Posti per {capacity} bici",
"zh_Hant": "{capacity} 單車的地方"
},
"freeform": {
"key": "capacity",
@ -310,7 +335,8 @@
"nl": "Wie mag er deze fietsenstalling gebruiken?",
"fr": "Qui peut utiliser ce parking à vélo ?",
"it": "Chi può usare questo parcheggio bici?",
"de": "Wer kann diesen Fahrradparplatz nutzen?"
"de": "Wer kann diesen Fahrradparplatz nutzen?",
"zh_Hant": "誰可以使用這個單車停車場?"
},
"render": {
"en": "{access}",
@ -319,7 +345,8 @@
"nl": "{access}",
"it": "{access}",
"ru": "{access}",
"id": "{access}"
"id": "{access}",
"zh_Hant": "{access}"
},
"freeform": {
"key": "access",
@ -335,7 +362,8 @@
"nl": "Publiek toegankelijke fietsenstalling",
"fr": "Accessible publiquement",
"it": "Accessibile pubblicamente",
"de": "Öffentlich zugänglich"
"de": "Öffentlich zugänglich",
"zh_Hant": "公開可用"
}
},
{
@ -344,7 +372,8 @@
"en": "Access is primarily for visitors to a business",
"nl": "Klanten van de zaak of winkel",
"fr": "Accès destiné principalement aux visiteurs d'un lieu",
"it": "Accesso destinato principalmente ai visitatori di unattività"
"it": "Accesso destinato principalmente ai visitatori di unattività",
"zh_Hant": "通行性主要是為了企業的顧客"
}
},
{
@ -353,7 +382,8 @@
"en": "Access is limited to members of a school, company or organisation",
"nl": "Private fietsenstalling van een school, een bedrijf, ...",
"fr": "Accès limité aux membres d'une école, entreprise ou organisation",
"it": "Accesso limitato ai membri di una scuola, una compagnia o unorganizzazione"
"it": "Accesso limitato ai membri di una scuola, una compagnia o unorganizzazione",
"zh_Hant": "通行性僅限學校、公司或組織的成員"
}
}
]
@ -366,7 +396,8 @@
"gl": "Este aparcadoiro de bicicletas ten espazo para bicicletas de carga?",
"de": "Gibt es auf diesem Fahrrad-Parkplatz Plätze für Lastenfahrräder?",
"fr": "Est-ce que ce parking à vélo a des emplacements pour des vélos cargo ?",
"it": "Questo parcheggio dispone di posti specifici per le bici da trasporto?"
"it": "Questo parcheggio dispone di posti specifici per le bici da trasporto?",
"zh_Hant": "這個單車停車場有地方放裝箱的單車嗎?"
},
"mappings": [
{
@ -377,7 +408,8 @@
"gl": "Este aparcadoiro ten espazo para bicicletas de carga.",
"de": "Dieser Parkplatz bietet Platz für Lastenfahrräder",
"fr": "Ce parking a de la place pour les vélos cargo",
"it": "Questo parcheggio ha posto per bici da trasporto"
"it": "Questo parcheggio ha posto per bici da trasporto",
"zh_Hant": "這個停車場有地方可以放裝箱單車"
}
},
{
@ -388,7 +420,8 @@
"gl": "Este aparcadoiro ten espazos designados (oficiais) para bicicletas de carga.",
"de": "Dieser Parkplatz verfügt über ausgewiesene (offizielle) Plätze für Lastenfahrräder.",
"fr": "Ce parking a des emplacements (officiellement) destinés aux vélos cargo.",
"it": "Questo parcheggio ha posti destinati (ufficialmente) alle bici da trasporto."
"it": "Questo parcheggio ha posti destinati (ufficialmente) alle bici da trasporto.",
"zh_Hant": "這停車場有設計 (官方) 空間給裝箱的單車。"
}
},
{

View file

@ -12,7 +12,9 @@
"fr": "Quel est le numéro de téléphone de {name} ?",
"de": "Was ist die Telefonnummer von {name}?",
"nb_NO": "Hva er telefonnummeret til {name}?",
"ru": "Какой номер телефона у {name}?"
"ru": "Какой номер телефона у {name}?",
"sv": "Vad är telefonnumret till {name}?",
"zh_Hant": "{name} 的電話號碼是什麼?"
},
"render": "<a href='tel:{phone}'>{phone}</a>",
"freeform": {
@ -40,7 +42,9 @@
"fr": "Quelle est l'adresse courriel de {name} ?",
"en": "What is the email address of {name}?",
"nb_NO": "Hva er e-postadressen til {name}?",
"ru": "Какой адрес электронной почты у {name}?"
"ru": "Какой адрес электронной почты у {name}?",
"id": "Apa alamat surel dari {name}?",
"zh_Hant": "{name} 的電子郵件地址是什麼?"
},
"freeform": {
"key": "email",
@ -54,7 +58,9 @@
"fr": "Quel est le site web de {name} ?",
"gl": "Cal é a páxina web de {name}?",
"nb_NO": "Hva er nettsiden til {name}?",
"ru": "Какой сайт у {name}?"
"ru": "Какой сайт у {name}?",
"id": "Apa situs web dari {name}?",
"zh_Hant": "{name} 網址是什麼?"
},
"render": "<a href='{website}' target='_blank'>{website}</a>",
"freeform": {
@ -67,7 +73,9 @@
"nl": "Zijn er extra zaken die je niet in de bovenstaande vragen kwijt kon? Zet deze in de description<span style='font-size: small'>Herhaal geen antwoorden die je reeds gaf</span>",
"fr": "Y a-t-il quelque chose de pertinent que vous n'avez pas pu donner à la dernière question ? Ajoutez-le ici.<br/><span style='font-size: small'>Ne répétez pas des réponses déjà données</span>",
"en": "Is there still something relevant you couldn't give in the previous questions? Add it here.<br/><span style='font-size: small'>Don't repeat already stated facts</span>",
"nb_NO": "Er det noe mer som er relevant du ikke kunne opplyse om i tidligere svar? Legg det til her.<br/><span style='font-size: small'>Ikke gjenta fakta som allerede er nevnt</span>"
"nb_NO": "Er det noe mer som er relevant du ikke kunne opplyse om i tidligere svar? Legg det til her.<br/><span style='font-size: small'>Ikke gjenta fakta som allerede er nevnt</span>",
"ru": "Есть ли еще что-то важное, о чем вы не смогли рассказать в предыдущих вопросах? Добавьте это здесь.<br/><span style='font-size: small'>Не повторяйте уже изложенные факты</span>",
"zh_Hant": "有什麼相關的資訊你無法在先前的問題回應的嗎?請加在這邊吧。<br/><span style='font-size: small'>不要重覆答覆已經知道的事情</span>"
},
"render": "{description}",
"freeform": {
@ -81,7 +89,8 @@
"de": "Was sind die Öffnungszeiten von {name}?",
"nl": "Wat zijn de openingsuren van {name}?",
"nb_NO": "Hva er åpningstidene for {name})",
"ru": "Какое время работы у {name}?"
"ru": "Какое время работы у {name}?",
"zh_Hant": "{name} 的開放時間是什麼?"
},
"render": {
"de": "<h3>Öffnungszeiten</h3>{opening_hours_table(opening_hours)}",
@ -89,7 +98,8 @@
"en": "<h3>Opening hours</h3>{opening_hours_table(opening_hours)}",
"nl": "<h3>Openingsuren</h3>{opening_hours_table(opening_hours)}",
"nb_NO": "<h3>Åpningstider</h3>{opening_hours_table(opening_hours)}",
"ru": "<h3>Часы работы</h3>{opening_hours_table(opening_hours)}"
"ru": "<h3>Часы работы</h3>{opening_hours_table(opening_hours)}",
"zh_Hant": "<h3>開放時間</h3>{opening_hours_table(opening_hours)}"
},
"freeform": {
"key": "opening_hours",

View file

@ -13,7 +13,8 @@
"ru": "Открытая карта AED (Автоматизированных внешних дефибрилляторов)",
"ja": "オープンAEDマップ",
"zh_Hant": "開放AED地圖",
"nb_NO": "Åpne AED-kart"
"nb_NO": "Åpne AED-kart",
"sv": "Öppna AED-karta"
},
"maintainer": "MapComplete",
"icon": "./assets/themes/aed/logo.svg",
@ -28,7 +29,8 @@
"it": "Su questa mappa. si possono trovare e segnalare i defibrillatori nelle vicinanze",
"ru": "На этой карте вы можете найти и отметить ближайшие дефибрилляторы",
"ja": "この地図では近くにある除細動器(AED)を見つけてマークします",
"zh_Hant": "在這份地圖上,你可以找到與標記附近的除顫器"
"zh_Hant": "在這份地圖上,你可以找到與標記附近的除顫器",
"sv": "På denna karta kan man hitta och markera närliggande defibrillatorer"
},
"language": [
"en",
@ -43,7 +45,8 @@
"ru",
"ja",
"zh_Hant",
"nb_NO"
"nb_NO",
"sv"
],
"version": "2020-08-29",
"startLat": 0,

View file

@ -11,7 +11,8 @@
"it": "Mappa libera dellarte",
"ru": "Открытая карта произведений искусства",
"ja": "オープン アートワーク マップ",
"zh_Hant": "開放藝術品地圖"
"zh_Hant": "開放藝術品地圖",
"sv": "Öppen konstverkskarta"
},
"description": {
"en": "Welcome to Open Artwork Map, a map of statues, busts, grafittis and other artwork all over the world",
@ -36,6 +37,7 @@
"ru",
"ja",
"zh_Hant",
"sv",
"es",
"nb_NO"
],
@ -374,7 +376,7 @@
"fr": "Sur quel site web pouvons-nous trouver plus d'informations sur cette œuvre d'art?",
"de": "Auf welcher Website gibt es mehr Informationen über dieses Kunstwerk?",
"it": "Su quale sito web è possibile trovare altre informazioni riguardanti questopera?",
"ru": "На каком сайте можно найти больше информации об этой работе?",
"ru": "Есть ли сайт с более подробной информацией об этой работе?",
"ja": "この作品についての詳しい情報はどのウェブサイトにありますか?",
"zh_Hant": "在那個網站能夠找到更多藝術品的資訊?"
},

View file

@ -29,7 +29,8 @@
"nl": "Deze kaart toont alle zitbanken die in OpenStreetMap gekend zijn: individuele banken en banken bij bushaltes. Met een OpenStreetMap-account can je informatie verbeteren en nieuwe zitbanken in toevoegen.",
"it": "Questa mappa mostra tutte le panchine che sono state aggiunte su OpenStreetMap: panchine individuali e quelle alle fermate del trasporto pubblico o nei ripari. Se disponi di un account OpenStreetMap puoi mappare delle nuove panchine o modificare i dettagli di quelle esistenti.",
"ru": "На этой карте показаны все скамейки, записанные в OpenStreetMap: отдельные скамейки, а также скамейки, относящиеся к остановкам общественного транспорта или навесам. Имея учетную запись OpenStreetMap, вы можете наносить на карту новые скамейки или редактировать информацию о существующих скамейках.",
"ja": "このマップには、OpenStreetMapに記録されているすべてのベンチが表示されます。個々のベンチ、および公共交通機関の停留所または避難場所に属するベンチです。OpenStreetMapアカウントを使用すると、新しいベンチをマップしたり、既存のベンチの詳細を編集したりできます。"
"ja": "このマップには、OpenStreetMapに記録されているすべてのベンチが表示されます。個々のベンチ、および公共交通機関の停留所または避難場所に属するベンチです。OpenStreetMapアカウントを使用すると、新しいベンチをマップしたり、既存のベンチの詳細を編集したりできます。",
"zh_Hant": "這份地圖顯示開放街圖上所有記錄的長椅:單獨的長椅,屬於大眾運輸站點或涼亭的長椅。只要有開放街圖帳號,你可以新增長椅或是編輯既有長椅的詳細內容。"
},
"language": [
"en",

View file

@ -5,28 +5,32 @@
"nl": "Fietstelstations",
"it": "Stazioni di monitoraggio biciclette",
"ru": "Станции мониторинга велосипедов",
"ja": "自転車監視ステーション"
"ja": "自転車監視ステーション",
"zh_Hant": "自行車監視站"
},
"shortDescription": {
"en": "Bike monitoring stations with live data from Brussels Mobility",
"nl": "Fietstelstations met live data van Brussels Mobiliteit",
"it": "Stazioni di monitoraggio bici con dati in tempo reale forniti da Bruxelles Mobility",
"ru": "Станции мониторинга велосипедов с оперативными данными от Brussels Mobility",
"ja": "Brussels Mobilityのライブデータを使用した自転車モニタリングステーション"
"ja": "Brussels Mobilityのライブデータを使用した自転車モニタリングステーション",
"zh_Hant": "布魯塞爾車行資料的即時單車監視站資料"
},
"description": {
"en": "This theme shows bike monitoring stations with live data",
"nl": "Dit thema toont fietstelstations met live data",
"it": "Questo tema mostra le stazioni di monitoraggio bici con dati dal vivo",
"ru": "В этой теме показаны станции мониторинга велосипедов с данными в реальном времени",
"ja": "このテーマでは、ライブデータのある自転車監視ステーションを示します"
"ja": "このテーマでは、ライブデータのある自転車監視ステーションを示します",
"zh_Hant": "這個主題顯示單車監視站的即時資料"
},
"language": [
"en",
"nl",
"it",
"ru",
"ja"
"ja",
"zh_Hant"
],
"hideFromOverview": true,
"maintainer": "",

View file

@ -14,13 +14,15 @@
"it": "Trova aree dove passare la notte con il tuo camper",
"ru": "Найти места остановки, чтобы провести ночь в автофургоне",
"ja": "キャンパーと夜を共にするキャンプサイトを見つける",
"fr": "Trouver des sites pour passer la nuit avec votre camping-car"
"fr": "Trouver des sites pour passer la nuit avec votre camping-car",
"zh_Hant": "露營者尋找渡過夜晚的場地"
},
"description": {
"en": "This site collects all official camper stopover places and places where you can dump grey and black water. You can add details about the services provided and the cost. Add pictures and reviews. This is a website and a webapp. The data is stored in OpenStreetMap, so it will be free forever and can be re-used by any app.",
"it": "Questo sito raccoglie tutti i luoghi ufficiali dove sostare con il camper e aree dove è possibile scaricare acque grigie e nere. Puoi aggiungere dettagli riguardanti i servizi forniti e il loro costo. Aggiungi foto e recensioni. Questo è al contempo un sito web e una web app. I dati sono memorizzati su OpenStreetMap in modo tale che siano per sempre liberi e riutilizzabili da qualsiasi app.",
"ru": "На этом сайте собраны все официальные места остановки кемперов и места, где можно сбросить серую и черную воду. Вы можете добавить подробную информацию о предоставляемых услугах и их стоимости. Добавлять фотографии и отзывы. Это веб-сайт и веб-приложение. Данные хранятся в OpenStreetMap, поэтому они будут бесплатными всегда и могут быть повторно использованы любым приложением.",
"ja": "このWebサイトでは、すべてのキャンピングカーの公式停車場所と、汚水を捨てることができる場所を収集します。提供されるサービスとコストに関する詳細を追加できます。写真とレビューを追加します。これはウェブサイトとウェブアプリです。データはOpenStreetMapに保存されるので、永遠に無料で、どんなアプリからでも再利用できます。"
"ja": "このWebサイトでは、すべてのキャンピングカーの公式停車場所と、汚水を捨てることができる場所を収集します。提供されるサービスとコストに関する詳細を追加できます。写真とレビューを追加します。これはウェブサイトとウェブアプリです。データはOpenStreetMapに保存されるので、永遠に無料で、どんなアプリからでも再利用できます。",
"zh_Hant": "這個網站收集所有官方露營地點,以及那邊能排放廢水。你可以加上詳細的服務項目與價格,加上圖片以及評價。這是網站與網路 app資料則是存在開放街圖因此會永遠免費而且可以被所有 app 再利用。"
},
"language": [
"en",
@ -49,7 +51,8 @@
"it": "Aree camper",
"ru": "Площадки для кемпинга",
"ja": "キャンプサイト",
"fr": "Campings"
"fr": "Campings",
"zh_Hant": "露營地"
},
"minzoom": 10,
"source": {
@ -66,7 +69,8 @@
"it": "Area camper {name}",
"ru": "Место для кемпинга {name}",
"ja": "キャンプサイト {name}",
"fr": "Camping {name}"
"fr": "Camping {name}",
"zh_Hant": "露營地 {name}"
},
"mappings": [
{
@ -80,7 +84,8 @@
"it": "Area camper senza nome",
"ru": "Место для кемпинга без названия",
"ja": "無名のキャンプサイト",
"fr": "Camping sans nom"
"fr": "Camping sans nom",
"zh_Hant": "沒有名稱的露營地"
}
}
]
@ -90,7 +95,8 @@
"it": "Aree camper",
"ru": "площадки для кемпинга",
"ja": "キャンプサイト",
"fr": "campings"
"fr": "campings",
"zh_Hant": "露營地"
},
"tagRenderings": [
"images",
@ -100,7 +106,8 @@
"it": "Questo luogo è chiamato {name}",
"ru": "Это место называется {name}",
"ja": "この場所は {name} と呼ばれています",
"fr": "Cet endroit s'appelle {nom}"
"fr": "Cet endroit s'appelle {nom}",
"zh_Hant": "這個地方叫做 {name}"
},
"question": {
"en": "What is this place called?",
@ -108,7 +115,8 @@
"ru": "Как называется это место?",
"it": "Come viene chiamato questo luogo?",
"ja": "ここは何というところですか?",
"fr": "Comment s'appelle cet endroit ?"
"fr": "Comment s'appelle cet endroit ?",
"zh_Hant": "這個地方叫做什麼?"
},
"freeform": {
"key": "name"
@ -120,7 +128,8 @@
"it": "Ha una tariffa questo luogo?",
"ru": "Взимается ли в этом месте плата?",
"ja": "ここは有料ですか?",
"fr": "Cet endroit est-il payant ?"
"fr": "Cet endroit est-il payant ?",
"zh_Hant": "這個地方收費嗎?"
},
"mappings": [
{
@ -133,7 +142,8 @@
"en": "You need to pay for use",
"it": "Devi pagare per usarlo",
"ru": "За использование нужно платить",
"ja": "使用料を支払う必要がある"
"ja": "使用料を支払う必要がある",
"zh_Hant": "你要付費才能使用"
}
},
{
@ -150,7 +160,8 @@
"ru": "Можно использовать бесплатно",
"ja": "無料で使用可能",
"fr": "Peut être utilisé gratuitement",
"nb_NO": "Kan brukes gratis"
"nb_NO": "Kan brukes gratis",
"zh_Hant": "可以免費使用"
}
},
{
@ -166,7 +177,8 @@
"it": "Questo luogo costa {charge}",
"ru": "Это место взимает {charge}",
"ja": "この場所は{charge} が必要",
"nb_NO": "Dette stedet tar {charge}"
"nb_NO": "Dette stedet tar {charge}",
"zh_Hant": "這個地方收費 {charge}"
},
"question": {
"en": "How much does this place charge?",
@ -174,7 +186,8 @@
"ru": "Сколько это место взимает?",
"ja": "ここはいくらかかりますか?",
"fr": "Combien coûte cet endroit ?",
"nb_NO": "pø"
"nb_NO": "pø",
"zh_Hant": "這個地方收多少費用?"
},
"freeform": {
"key": "charge"
@ -190,7 +203,8 @@
"en": "Does this place have a sanitary dump station?",
"it": "Questo luogo ha una stazione per lo scarico delle acque?",
"ru": "В этом кемпинге есть место для слива отходов из туалетных резервуаров?",
"ja": "この場所に衛生的なゴミ捨て場はありますか?"
"ja": "この場所に衛生的なゴミ捨て場はありますか?",
"zh_Hant": "這個地方有衛生設施嗎?"
},
"mappings": [
{
@ -204,7 +218,8 @@
"it": "Questo luogo ha una stazione per lo scarico delle acque",
"ru": "В этом кемпинге есть место для слива отходов из туалетных резервуаров",
"ja": "この場所には衛生的なゴミ捨て場がある",
"fr": "Cet endroit a une station de vidange sanitaire"
"fr": "Cet endroit a une station de vidange sanitaire",
"zh_Hant": "這個地方有衛生設施"
}
},
{
@ -217,7 +232,8 @@
"en": "This place does not have a sanitary dump station",
"it": "Questo luogo non ha una stazione per lo scarico delle acque",
"ru": "В этом кемпинге нет места для слива отходов из туалетных резервуаров",
"ja": "この場所には衛生的なゴミ捨て場がない"
"ja": "この場所には衛生的なゴミ捨て場がない",
"zh_Hant": "這個地方沒有衛生設施"
}
}
]
@ -227,13 +243,15 @@
"en": "{capacity} campers can use this place at the same time",
"it": "{capacity} camper possono usare questo luogo al contempo",
"ru": "{capacity} кемперов могут использовать это место одновременно",
"ja": "{capacity} 人が同時に使用できます"
"ja": "{capacity} 人が同時に使用できます",
"zh_Hant": "{capacity} 露營者能夠同時使用這個地方"
},
"question": {
"en": "How many campers can stay here? (skip if there is no obvious number of spaces or allowed vehicles)",
"it": "Quanti camper possono stare qua? (non rispondere se non cè un numero chario di spazi o veicoli ammessi)",
"ru": "Сколько кемперов может здесь остановиться? (пропустите, если нет очевидного количества мест или разрешенных транспортных средств)",
"ja": "ここには何人のキャンパーが泊まれますか?(許可された車両の数や駐車スペースが明らかでない場合は省略)"
"ja": "ここには何人のキャンパーが泊まれますか?(許可された車両の数や駐車スペースが明らかでない場合は省略)",
"zh_Hant": "多少露營者能夠待在這裡?(如果沒有明顯的空間數字或是允許車輛則可以跳過)"
},
"freeform": {
"key": "capacity",
@ -247,7 +265,8 @@
"it": "Questo luogo ha laccesso a internet?",
"ru": "Предоставляет ли это место доступ в Интернет?",
"ja": "この場所はインターネットにアクセスできますか?",
"fr": "Cet endroit offre-t-il un accès à Internet ?"
"fr": "Cet endroit offre-t-il un accès à Internet ?",
"zh_Hant": "這個地方有提網路連線嗎?"
},
"mappings": [
{
@ -261,7 +280,8 @@
"id": "Akses Web tersedia",
"ru": "Есть доступ в Интернет",
"it": "Cè laccesso a internet",
"ja": "インターネットアクセスがある"
"ja": "インターネットアクセスがある",
"zh_Hant": "這裡有網路連線"
}
},
{
@ -276,7 +296,8 @@
"id": "Akses Web tersedia",
"ru": "Есть доступ в Интернет",
"it": "Cè laccesso a internet",
"ja": "インターネットアクセスがある"
"ja": "インターネットアクセスがある",
"zh_Hant": "這裡有網路連線"
},
"hideInAnswer": true
},
@ -291,7 +312,8 @@
"id": "Tiada akses Web",
"ru": "Нет доступа в Интернет",
"it": "Non cè laccesso a internet",
"ja": "インターネットにアクセスできない"
"ja": "インターネットにアクセスできない",
"zh_Hant": "這裡沒有網路連線"
}
}
]
@ -301,7 +323,8 @@
"en": "Do you have to pay for the internet access?",
"it": "Occorre pagare per avere laccesso a internet?",
"ru": "Нужно ли платить за доступ в Интернет?",
"ja": "インターネット接続にお金はかかりますか?"
"ja": "インターネット接続にお金はかかりますか?",
"zh_Hant": "你需要為網路連線付費嗎?"
},
"mappings": [
{
@ -314,7 +337,8 @@
"en": "You need to pay extra for internet access",
"it": "Occorre pagare un extra per avere laccesso a internet",
"ru": "За доступ в Интернет нужно платить дополнительно",
"ja": "インターネット接続には別途料金が必要です"
"ja": "インターネット接続には別途料金が必要です",
"zh_Hant": "你需要額外付費來使用網路連線"
}
},
{
@ -327,7 +351,8 @@
"en": "You do not need to pay extra for internet access",
"it": "Non occorre pagare per laccesso a internet",
"ru": "Вам не нужно платить дополнительно за доступ в Интернет",
"ja": "インターネット接続に追加料金を支払う必要はありません"
"ja": "インターネット接続に追加料金を支払う必要はありません",
"zh_Hant": "你不需要額外付費來使用網路連線"
}
}
],
@ -388,7 +413,8 @@
"ru": "Официальный сайт: <a href='{website}'>{website}</a>",
"it": "Sito web ufficiale: <a href='{website}'>{website}</a>",
"ja": "公式Webサイト: <a href='{website}'>{website}</a>",
"nb_NO": "Offisiell nettside: <a href='{website}'>{website}</a>"
"nb_NO": "Offisiell nettside: <a href='{website}'>{website}</a>",
"zh_Hant": "官方網站:<a href='{website}'>{website}</a>"
},
"freeform": {
"type": "url",
@ -400,14 +426,16 @@
"it": "Questo luogo ha un sito web?",
"ru": "Есть ли у этого места веб-сайт?",
"ja": "ここにはウェブサイトがありますか?",
"nb_NO": "Har dette stedet en nettside?"
"nb_NO": "Har dette stedet en nettside?",
"zh_Hant": "這個地方有網站嗎?"
}
},
{
"question": {
"en": "Does this place offer spots for long term rental?",
"ru": "Предлагает ли эта площадка места для долгосрочной аренды?",
"ja": "ここには長期レンタルのスポットがありますか?"
"ja": "ここには長期レンタルのスポットがありますか?",
"zh_Hant": "這個地方有提供長期租用嗎?"
},
"mappings": [
{
@ -419,7 +447,8 @@
"then": {
"en": "Yes, there are some spots for long term rental, but you can also stay on a daily basis",
"ru": "Да, здесь есть места для долгосрочной аренды, но вы можете остановиться и на сутки",
"ja": "はい、長期レンタルのスポットもあり、日常的に滞在することもできます"
"ja": "はい、長期レンタルのスポットもあり、日常的に滞在することもできます",
"zh_Hant": "有,這個地方有提供長期租用,但你也可以用天計算費用"
}
},
{
@ -431,7 +460,8 @@
"then": {
"en": "No, there are no permanent guests here",
"ru": "Нет, здесь нет постоянных гостей",
"ja": "いいえ、ここには長期滞在者はいません"
"ja": "いいえ、ここには長期滞在者はいません",
"zh_Hant": "沒有,這裡沒有永久的客戶"
}
},
{
@ -443,7 +473,8 @@
"then": {
"en": "It is only possible to stay here if you have a long term contract(this place will disappear from this map if you choose this)",
"ru": "Здесь можно остановиться, только если у вас долгосрочный контракт (это место исчезнет с этой карты, если вы выберете это)",
"ja": "長期契約をしている場合のみ宿泊可能です(これを選択すると、この場所はこの地図から消えます)"
"ja": "長期契約をしている場合のみ宿泊可能です(これを選択すると、この場所はこの地図から消えます)",
"zh_Hant": "如果有長期租用合約才有可能待下來(如果你選擇這個地方則會在這份地圖消失)"
}
}
]
@ -453,12 +484,14 @@
"en": "More details about this place: {description}",
"ru": "Более подробная информация об этом месте: {description}",
"ja": "この場所の詳細:{description}",
"nb_NO": "Flere detaljer om dette stedet: {description}"
"nb_NO": "Flere detaljer om dette stedet: {description}",
"zh_Hant": "這個地方更詳細的資訊: {description}"
},
"question": {
"en": "Would you like to add a general description of this place? (Do not repeat information previously asked or shown above. Please keep it objective - opinions go into the reviews)",
"ru": "Хотели бы вы добавить общее описание этого места? (Не повторяйте информацию, которая уже написана выше или на которую вы уже ответили ранее. Пожалуйста, будьте объективны - мнения должны быть в отзывах)",
"ja": "この場所の一般的な説明を追加しますか?(前に問い合わせた情報や上記の情報を繰り返し入力しないでください。客観的な意見はレビューに反映されます)"
"ja": "この場所の一般的な説明を追加しますか?(前に問い合わせた情報や上記の情報を繰り返し入力しないでください。客観的な意見はレビューに反映されます)",
"zh_Hant": "你想要為這個地方加一般的敘述嗎?(不要重覆加先前問過或提供的資訊,請保持敘述性-請將意見留在評價)"
},
"freeform": {
"key": "description",
@ -499,7 +532,8 @@
"title": {
"en": "camper site",
"ru": "площадка для кемпинга",
"ja": "キャンプサイト"
"ja": "キャンプサイト",
"zh_Hant": "露營地"
},
"description": {
"en": "Add a new official camper site. These are designated places to stay overnight with your camper. They might look like a real camping or just look like a parking. They might not be signposted at all, but just be defined in a municipal decision. A regular parking intended for campers where it is not expected to spend the night, is -not- a camper site ",

View file

@ -366,6 +366,10 @@
},
{
"#": "Length",
"question": {
"en": "How long is this climbing route (in meters)?",
"nl": "Hoe lang is deze klimroute (in meters)?"
},
"render": {
"de": "Diese Route ist {climbing:length} Meter lang",
"en": "This route is {climbing:length} meter long",
@ -380,6 +384,10 @@
},
{
"#": "Difficulty",
"question": {
"en": "What is the difficulty of this climbing route according to the french/belgian system?",
"nl": "Hoe moeilijk is deze klimroute volgens het Franse/Belgische systeem?"
},
"render": {
"de": "Die Schwierigkeit ist {climbing:grade:french} entsprechend des französisch/belgischen Systems",
"en": "The difficulty is {climbing:grade:french} according to the french/belgian system",
@ -394,17 +402,29 @@
],
"hideUnderlayingFeaturesMinPercentage": 0,
"icon": {
"render": "./assets/themes/climbing/climbing_route.svg"
"render": "circle:white;./assets/themes/climbing/climbing_route.svg"
},
"width": {
"render": "4"
},
"iconSize": {
"render": "20,20,center"
"render": "28,28,center"
},
"color": {
"render": "#0f0"
}
},
"presets": [
{
"title": {
"en": "Climbing route"
},
"tags": [
"sport=climbing",
"climbing=route"
]
}
],
"wayHandling": 2
},
{
"id": "climbing",
@ -433,7 +453,46 @@
"de": "Klettermöglichkeit",
"ja": "登坂教室",
"nb_NO": "Klatremulighet"
}
},
"mappings": [
{
"if": "climbing=crag",
"then": {
"en": "Climbing crag"
}
},
{
"if": {
"and": [
{
"or": [
"climbing=area",
"climbing=site"
]
},
"name~*"
]
},
"then": {
"en": "Climbing area <b>{name}</b>",
"nl": "Klimsite <b>{name}</b>"
}
},
{
"if": "climbing=site",
"then": {
"en": "Climbing site",
"nl": "Klimsite"
}
},
{
"if": "name~*",
"then": {
"nl": "Klimgelegenheid <b>{name}</b>",
"en": "Climbing opportunity <b>{name}</b>"
}
}
]
},
"description": {
"nl": "Een klimgelegenheid",
@ -445,6 +504,23 @@
"tagRenderings": [
"images",
"questions",
{
"#": "Contained routes",
"render": "<h3>Contains the following routes</h3> <ul>{_contained_climbing_routes}</ul>",
"condition": "_contained_climbing_routes~*"
}, {
"#": "Contained routes length hist",
"render": {
"en": "<h3>Length overview</h3>{histogram(_length_hist)}"
}
},
{
"#": "Contained routes hist",
"render": {
"en": "<h3>Difficulties overview</h3>{histogram(_difficulty_hist)}"
}
},
{
"#": "name",
"render": {
@ -483,6 +559,28 @@
}
]
},
{
"#": "Type",
"question": "What kind of climbing opportunity is this?",
"mappings": [
{
"if": "climbing=boulder",
"then": {
"en": "A climbing boulder - a single rock or cliff with one or a few climbing routes which can be climbed safely without rope"
}
},
{
"if": "climbing=crag",
"then": {
"en": "A climbing crag - a single rock or cliff with at least a few climbing routes"
}
},
{
"if": "climbing=area",
"then": "A climbing area with one or more climbing crags and/or boulders"
}
]
},
"reviews"
],
"hideUnderlayingFeaturesMinPercentage": 0,
@ -519,7 +617,13 @@
}
}
],
"wayHandling": 2
"wayHandling": 2,
"calculatedTags": [
"_contained_climbing_routes_properties=feat.overlapWith('climbing_route').map(f => f.feat.properties).map(p => {return {id: p.id, name: p.name, 'climbing:grade:french': p['climbing:grade:french'], 'climbing:length': p['climbing:length']} })",
"_contained_climbing_routes=JSON.parse(feat.properties._contained_climbing_routes_properties ?? '[]').map(p => `<li><a href='#${p.id}'>${p.name ?? 'climbing route'}</a> (<b>${p['climbing:grade:french'] ?? 'unknown difficulty'}</b>, ${p['climbing:length'] ?? 'unkown length'} meter)</li>`).join('')",
"_difficulty_hist=JSON.parse(feat.properties._contained_climbing_routes_properties ?? '[]').map(p => p['climbing:grade:french'])",
"_length_hist=JSON.parse(feat.properties._contained_climbing_routes_properties ?? '[]').map(p => p['climbing:length'])"
]
},
{
"id": "maybe_climbing",
@ -533,13 +637,18 @@
"minzoom": 19,
"source": {
"osmTags": {
"or": [
"leisure=sports_centre",
"barrier=wall",
"barrier=retaining_wall",
"natural=cliff",
"natural=rock",
"natural=stone"
"and": [
{
"or": [
"leisure=sports_centre",
"barrier=wall",
"barrier=retaining_wall",
"natural=cliff",
"natural=rock",
"natural=stone"
]
},
"climbing="
]
}
},
@ -606,6 +715,15 @@
"ja": "ここでは登ることができる",
"nb_NO": "Klatring er mulig her"
}
},
{
"if": "climbing=no",
"then": {
"en": "Climbing is not possible here",
"de": "Hier kann nicht geklettert werden",
"ja": "ここでは登ることができない",
"nb_NO": "Klatring er ikke mulig her"
}
}
]
}
@ -643,6 +761,102 @@
"type": "url"
}
},
{
"#": "Access from containing feature",
"mappings": [
{
"if": "_embedding_feature:access=yes",
"then": {
"en": "<span class='subtle'>The <a href='#{_embedding_feature:id}'>containing feature</a> states that this is</span> publicly accessible<br/>{_embedding_feature:access:description}"
}
},
{
"if": "_embedding_feature:access=permit",
"then": {
"en": "<span class='subtle'>The <a href='#{_embedding_feature:id}'>containing feature</a> states that </span> a permit is needed to access<br/>{_embedding_feature:access:description}"
}
},
{
"if": "_embedding_feature:access=customers",
"then": {
"en": "<span class='subtle'>The <a href='#{_embedding_feature:id}'>containing feature</a> states that this is</span> only accessible to customers<br/>{_embedding_feature:access:description}"
}
},
{
"if": "_embedding_feature:access=members",
"then": {
"en": "<span class='subtle'>The <a href='#{_embedding_feature:id}'>containing feature</a> states that this is</span> only accessible to club members<br/>{_embedding_feature:access:description}"
}
},
{
"if": "_embedding_feature:access=no",
"then": "Not accessible as stated by <a href='#{_embedding_feature:id}'>the containing feature</a>"
}
],
"condition": "_embedding_feature:access~*"
},
{
"#": "Access",
"question": {
"en": "Who can access here?"
},
"mappings": [
{
"if": "access=yes",
"then": {
"en": "Publicly accessible to anyone"
}
},
{
"if": "access=permit",
"then": {
"en": "You need a permit to access here"
}
},
{
"if": "access=customers",
"then": {
"en": "Only custumers"
}
},
{
"if": "access=members",
"then": {
"en": "Only club members"
}
},
{
"if": "access=no",
"then": "Not accessible"
}
],
"condition": {
"and": [
"climbing!=no",
"office=",
"club=",
{
"or": [
"sport=climbing",
"climbing:sport=yes"
]
},
{
"or": [
"access~*",
"_embedding_feature:access="
]
}
]
}
},
{
"#": "Access description (without _embedding_feature:access:description)",
"render": "{access:description}",
"freeform": {
"key": "access:description"
}
},
{
"#": "Avg length?",
"render": {
@ -656,10 +870,13 @@
"climbing!~route",
"office=",
"club=",
"climbing:toprope!=no",
{
"or": [
"climbing=sport",
"climbing=traditional"
"sport=climbing",
"climbing:sport=yes",
"climbing=traditional",
"climbing=gym"
]
}
]
@ -684,10 +901,10 @@
"ja": "ここで一番簡単なルートのレベルは、フランスのランク評価システムで何ですか?"
},
"render": {
"de": "Die leichteste Route hat hier die Schwierigkeit {climbing:grade:french} (französisch/belgisches System)",
"en": "The minimal difficulty is {climbing:grade:french} according to the french/belgian system",
"nl": "De minimale klimmoeilijkheid is {climbing:grade:french} volgens het Franse/Belgische systeem",
"ja": "フランス/ベルギーのランク評価システムでは、最小の難易度は{climbing:grade:french}です"
"de": "Die leichteste Route hat hier die Schwierigkeit {climbing:grade:french:min} (französisch/belgisches System)",
"en": "The minimal difficulty is {climbing:grade:french:min} according to the french/belgian system",
"nl": "De minimale klimmoeilijkheid is {climbing:grade:french:min} volgens het Franse/Belgische systeem",
"ja": "フランス/ベルギーのランク評価システムでは、最小の難易度は{climbing:grade:french:min}です"
},
"freeform": {
"key": "climbing:grade:french:min"
@ -696,7 +913,13 @@
"and": [
"climbing!~route",
"office=",
"club="
"club=",
{
"or": [
"climbing:sport=yes",
"sport=climbing"
]
}
]
}
},
@ -709,10 +932,10 @@
"ja": "フランスのランク評価によると、ここで一番難しいルートのレベルはどれくらいですか?"
},
"render": {
"de": "Die schwerste Route hat hier die Schwierigkeit {climbing:grade:french} (französisch/belgisches System)",
"en": "The maximal difficulty is {climbing:grade:french} according to the french/belgian system",
"nl": "De maximale klimmoeilijkheid is {climbing:grade:french} volgens het Franse/Belgische systeem",
"ja": "フランス/ベルギーのランク評価システムでは、最大の難易度は{climbing:grade:french}です"
"de": "Die schwerste Route hat hier die Schwierigkeit {climbing:grade:french:min} (französisch/belgisches System)",
"en": "The maximal difficulty 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}です"
},
"freeform": {
"key": "climbing:grade:french:max"
@ -721,7 +944,13 @@
"and": [
"climbing!~route",
"office=",
"club="
"club=",
{
"or": [
"climbing:sport=yes",
"sport=climbing"
]
}
]
}
},
@ -777,7 +1006,12 @@
],
"condition": {
"and": [
"sport=climbing",
{
"or": [
"climbing:sport=yes",
"sport=climbing"
]
},
"office=",
"club="
]
@ -823,7 +1057,12 @@
],
"condition": {
"and": [
"sport=climbing",
{
"or": [
"climbing:sport=yes",
"sport=climbing"
]
},
"office=",
"club="
]
@ -871,7 +1110,12 @@
],
"condition": {
"and": [
"sport=climbing",
{
"or": [
"climbing:sport=yes",
"sport=climbing"
]
},
"office=",
"club="
]
@ -917,7 +1161,12 @@
],
"condition": {
"and": [
"sport=climbing",
{
"or": [
"climbing:sport=yes",
"sport=climbing"
]
},
"office=",
"club="
]
@ -934,7 +1183,12 @@
"condition": {
"and": [
"leisure=sports_centre",
"climbing:sport=yes",
{
"or": [
"climbing:sport=yes",
"sport=climbing"
]
},
"office=",
"club="
]
@ -970,5 +1224,15 @@
}
]
}
]
],
"overrideAll": {
"calculatedTags+": [
"_embedding_feature_properties=feat.overlapWith('climbing').map(f => f.feat.properties).filter(p => p !== undefined).map(p => {return{access: p.access, id: p.id, name: p.name, climbing: p.climbing, 'access:description': p['access:description']}})",
"_embedding_features_with_access=JSON.parse(feat.properties._embedding_feature_properties ?? '[]').filter(p => p.access !== undefined)[0]",
"_embedding_feature:access=JSON.parse(feat.properties._embedding_features_with_access ?? '{}').access",
"_embedding_feature:access:description=JSON.parse(feat.properties._embedding_features_with_access ?? '{}')['access:description']",
"_embedding_feature:id=JSON.parse(feat.properties._embedding_features_with_access ?? '{}').id",
"_layer=feat._layer_id"
]
}
}

View file

@ -7,20 +7,23 @@
"nl",
"de",
"ja",
"nb_NO"
"nb_NO",
"zh_Hant"
],
"title": {
"en": "Ghost bikes",
"nl": "Witte Fietsen",
"de": "Geisterrad",
"ja": "ゴーストバイク",
"nb_NO": "Spøkelsessykler"
"nb_NO": "Spøkelsessykler",
"zh_Hant": "幽靈單車"
},
"description": {
"en": "A <b>ghost bike</b> is a memorial for a cyclist who died in a traffic accident, in the form of a white bicycle placed permanently near the accident location.<br/><br/>On this map, one can see all the ghost bikes which are known by OpenStreetMap. Is a ghost bike missing? Everyone can add or update information here - you only need to have a (free) OpenStreetMap account.",
"nl": "Een <b>Witte Fiets</b> of <b>Spookfiets</b> is een aandenken aan een fietser die bij een verkeersongeval om het leven kwam. Het gaat om een fiets die volledig wit is geschilderd en in de buurt van het ongeval werd geinstalleerd.<br/><br/>Op deze kaart zie je alle witte fietsen die door OpenStreetMap gekend zijn. Ontbreekt er een Witte Fiets of wens je informatie aan te passen? Meld je dan aan met een (gratis) OpenStreetMap account.",
"de": "Ein <b>Geisterrad</b> ist ein Denkmal für einen Radfahrer, der bei einem Verkehrsunfall ums Leben kam, in Form eines weißen Fahrrades, das dauerhaft in der Nähe des Unfallortes aufgestellt ist.<br/><br/> Auf dieser Karte kann man alle Geisterräder sehen, die OpenStreetMap kennt. Fehlt ein Geisterrad? Jeder kann hier Informationen hinzufügen oder aktualisieren - Sie benötigen lediglich einen (kostenlosen) OpenStreetMap-Account.",
"ja": "<b>ゴーストバイク</b>は、交通事故で死亡したサイクリストを記念するもので、事故現場の近くに恒久的に置かれた白い自転車の形をしています。<br/><br/>このマップには、OpenStreetMapで知られているゴーストバイクがすべて表示されます。ゴーストバイクは行方不明ですか?誰でもここで情報の追加や更新ができます。必要なのは(無料の)OpenStreetMapアカウントだけです。"
"ja": "<b>ゴーストバイク</b>は、交通事故で死亡したサイクリストを記念するもので、事故現場の近くに恒久的に置かれた白い自転車の形をしています。<br/><br/>このマップには、OpenStreetMapで知られているゴーストバイクがすべて表示されます。ゴーストバイクは行方不明ですか?誰でもここで情報の追加や更新ができます。必要なのは(無料の)OpenStreetMapアカウントだけです。",
"zh_Hant": "<b>幽靈單車</b>是用來紀念死於交通事故的單車騎士,在事發地點附近放置白色單車。<br/><br/>在這份地圖上面,你可以看到所有在開放街圖已知的幽靈單車。有缺漏的幽靈單車嗎?所有人都可以在這邊新增或是更新資訊-只有你有(免費)開放街圖帳號。"
},
"icon": "./assets/themes/ghostbikes/logo.svg",
"startZoom": 1,

View file

@ -9,12 +9,14 @@
"shortDescription": {
"en": "Surveillance cameras and other means of surveillance",
"nl": "Bewakingscameras en dergelijke",
"ja": "監視カメラおよびその他の監視手段"
"ja": "監視カメラおよびその他の監視手段",
"zh_Hant": "監視鏡頭與其他型式的監視"
},
"description": {
"en": "On this open map, you can find surveillance cameras.",
"nl": "Op deze open kaart kan je bewakingscamera's vinden.",
"ja": "このオープンマップでは、監視カメラを確認できます。"
"ja": "このオープンマップでは、監視カメラを確認できます。",
"zh_Hant": "在這份開放地圖,你可以找到監視鏡頭。"
},
"language": [
"en",

View file

@ -1,181 +1,294 @@
{
"image": {
"addPicture": "Add picture",
"uploadingPicture": "Uploading your picture…",
"uploadingMultiple": "Uploading {count} pictures…",
"pleaseLogin": "Please log in to add a picture",
"willBePublished": "Your picture will be published: ",
"cco": "in the public domain",
"ccbs": "under the CC-BY-SA-license",
"ccb": "under the CC-BY-license",
"uploadFailed": "Could not upload your picture. Are you connected to the Internet, and allow third party API's? The Brave browser or the uMatrix plugin might block them.",
"respectPrivacy": "Do not photograph people nor license plates. Do not upload Google Maps, Google Streetview or other copyrighted sources.",
"uploadDone": "<span class='thanks'>Your picture has been added. Thanks for helping out!</span>",
"dontDelete": "Cancel",
"doDelete": "Remove image",
"isDeleted": "Deleted"
"image": {
"addPicture": "Add picture",
"uploadingPicture": "Uploading your picture…",
"uploadingMultiple": "Uploading {count} pictures…",
"pleaseLogin": "Please log in to add a picture",
"willBePublished": "Your picture will be published: ",
"cco": "in the public domain",
"ccbs": "under the CC-BY-SA-license",
"ccb": "under the CC-BY-license",
"uploadFailed": "Could not upload your picture. Are you connected to the Internet, and allow third party API's? The Brave browser or the uMatrix plugin might block them.",
"respectPrivacy": "Do not photograph people nor license plates. Do not upload Google Maps, Google Streetview or other copyrighted sources.",
"uploadDone": "<span class='thanks'>Your picture has been added. Thanks for helping out!</span>",
"dontDelete": "Cancel",
"doDelete": "Remove image",
"isDeleted": "Deleted"
},
"centerMessage": {
"loadingData": "Loading data…",
"zoomIn": "Zoom in to view or edit the data",
"ready": "Done!",
"retrying": "Loading data failed. Trying again in {count} seconds…"
},
"index": {
"#": "These texts are shown above the theme buttons when no theme is loaded",
"title": "Welcome to MapComplete",
"intro": "MapComplete is an OpenStreetMap-viewer and editor, which shows you information about a specific theme.",
"pickTheme": "Pick a theme below to get started."
},
"general": {
"loginWithOpenStreetMap": "Login with OpenStreetMap",
"welcomeBack": "You are logged in, welcome back!",
"loginToStart": "Login to answer this question",
"search": {
"search": "Search a location",
"searching": "Searching…",
"nothing": "Nothing found…",
"error": "Something went wrong…"
},
"centerMessage": {
"loadingData": "Loading data…",
"zoomIn": "Zoom in to view or edit the data",
"ready": "Done!",
"retrying": "Loading data failed. Trying again in {count} seconds…"
"returnToTheMap": "Return to the map",
"save": "Save",
"cancel": "Cancel",
"skip": "Skip this question",
"oneSkippedQuestion": "One question is skipped",
"skippedQuestions": "Some questions are skipped",
"number": "number",
"osmLinkTooltip": "See this object on OpenStreetMap for history and more editing options",
"add": {
"addNew": "Add a new {category} here",
"title": "Add a new point?",
"intro": "You clicked somewhere where no data is known yet.<br/>",
"pleaseLogin": "<a class='activate-osm-authentication'>Please log in to add a new point</a>",
"zoomInFurther": "Zoom in further to add a point.",
"stillLoading": "The data is still loading. Please wait a bit before you add a new point.",
"confirmIntro": "<h3>Add a {title} here?</h3>The point you create here will be <b>visible for everyone</b>. Please, only add things on to the map if they truly exist. A lot of applications use this data.",
"confirmButton": "Add a {category} here.<br/><div class='alert'>Your addition is visible for everyone</div>",
"openLayerControl": "Open the layer control box",
"layerNotEnabled": "The layer {layer} is not enabled. Enable this layer to add a point"
},
"index": {
"#": "These texts are shown above the theme buttons when no theme is loaded",
"title": "Welcome to MapComplete",
"intro": "MapComplete is an OpenStreetMap-viewer and editor, which shows you information about a specific theme.",
"pickTheme": "Pick a theme below to get started."
"pickLanguage": "Choose a language: ",
"about": "Easily edit and add OpenStreetMap for a certain theme",
"nameInlineQuestion": "The name of this {category} is $$$",
"noNameCategory": "{category} without a name",
"questions": {
"phoneNumberOf": "What is the phone number of {category}?",
"phoneNumberIs": "The phone number of this {category} is <a href='tel:{phone}' target='_blank'>{phone}</a>",
"websiteOf": "What is the website of {category}?",
"websiteIs": "Website: <a href='{website}' target='_blank'>{website}</a>",
"emailOf": "What is the email address of {category}?",
"emailIs": "The email address of this {category} is <a href='mailto:{email}' target='_blank'>{email}</a>"
},
"general": {
"loginWithOpenStreetMap": "Login with OpenStreetMap",
"loginOnlyNeededToEdit": "to make changes to the map",
"welcomeBack": "You are logged in, welcome back!",
"loginToStart": "Login to answer this question",
"testing":"Testing - changes won't be saved",
"search": {
"search": "Search a location",
"searching": "Searching…",
"nothing": "Nothing found…",
"error": "Something went wrong…"
"loginWithOpenStreetMap": "Login with OpenStreetMap",
"loginOnlyNeededToEdit": "to make changes to the map",
"welcomeBack": "You are logged in, welcome back!",
"loginToStart": "Login to answer this question",
"testing": "Testing - changes won't be saved",
"search": {
"search": "Search a location",
"searching": "Searching…",
"nothing": "Nothing found…",
"error": "Something went wrong…"
},
"returnToTheMap": "Return to the map",
"openTheMap": "Open the map",
"save": "Save",
"cancel": "Cancel",
"skip": "Skip this question",
"oneSkippedQuestion": "One question is skipped",
"skippedQuestions": "Some questions are skipped",
"number": "number",
"osmLinkTooltip": "See this object on OpenStreetMap for history and more editing options",
"add": {
"addNew": "Add a new {category} here",
"title": "Add a new point?",
"intro": "You clicked somewhere where no data is known yet.<br/>",
"pleaseLogin": "<a class='activate-osm-authentication'>Please log in to add a new point</a>",
"zoomInFurther": "Zoom in further to add a point.",
"stillLoading": "The data is still loading. Please wait a bit before you add a new point.",
"confirmIntro": "<h3>Add a {title} here?</h3>The point you create here will be <b>visible for everyone</b>. Please, only add things on to the map if they truly exist. A lot of applications use this data.",
"warnVisibleForEveryone": "Your addition will be visible for everyone",
"openLayerControl": "Open the layer control box",
"layerNotEnabled": "The layer {layer} is not enabled. Enable this layer to add a point"
},
"pickLanguage": "Choose a language: ",
"about": "Easily edit and add OpenStreetMap for a certain theme",
"nameInlineQuestion": "The name of this {category} is $$$",
"noNameCategory": "{category} without a name",
"questions": {
"phoneNumberOf": "What is the phone number of {category}?",
"phoneNumberIs": "The phone number of this {category} is <a href='tel:{phone}' target='_blank'>{phone}</a>",
"websiteOf": "What is the website of {category}?",
"websiteIs": "Website: <a href='{website}' target='_blank'>{website}</a>",
"emailOf": "What is the email address of {category}?",
"emailIs": "The email address of this {category} is <a href='mailto:{email}' target='_blank'>{email}</a>"
},
"openStreetMapIntro": "<h3>An Open Map</h3><p>Wouldn't it be cool if there was a single map, which everyone could freely use and edit? A single place to store all geo-information? Then, all those websites with different, small and incompatible maps (which are always outdated) wouldn't be needed anymore.</p><p><b><a href='https://OpenStreetMap.org' target='_blank'>OpenStreetMap</a></b> is this map. The map data can be used for free (with <a href='https://osm.org/copyright' target='_blank'>attribution and publication of changes to that data</a>). On top of that, everyone can freely add new data and fix errors. This website uses OpenStreetMap as well. All the data is from there, and your answers and corrections are added there as well.</p><p>A ton of people and application already use OpenStreetMap: <a href='https://maps.me/' target='_blank'>Maps.me</a>, <a href='https://osmAnd.net' target='_blank'>OsmAnd</a>, but also the maps at Facebook, Instagram, Apple-maps and Bing-maps are (partly) powered by OpenStreetMap. If you change something here, it'll be reflected in those applications too - after their next update!</p>",
"attribution": {
"attributionTitle": "Attribution notice",
"attributionContent": "<p>All data is provided by <a href='https://osm.org' target='_blank'>OpenStreetMap</a>, freely reusable under <a href='https://osm.org/copyright' target='_blank'>the Open DataBase License</a>.</p>",
"themeBy": "Theme maintained by {author}",
"iconAttribution": {
"title": "Used icons"
},
"returnToTheMap": "Return to the map",
"openTheMap": "Open the map",
"save": "Save",
"cancel": "Cancel",
"skip": "Skip this question",
"oneSkippedQuestion": "One question is skipped",
"skippedQuestions": "Some questions are skipped",
"number": "number",
"osmLinkTooltip": "See this object on OpenStreetMap for history and more editing options",
"add": {
"addNew": "Add a new {category} here",
"title": "Add a new point?",
"intro": "You clicked somewhere where no data is known yet.<br/>",
"pleaseLogin": "<a class='activate-osm-authentication'>Please log in to add a new point</a>",
"zoomInFurther": "Zoom in further to add a point.",
"stillLoading": "The data is still loading. Please wait a bit before you add a new point.",
"confirmIntro": "<h3>Add a {title} here?</h3>The point you create here will be <b>visible for everyone</b>. Please, only add things on to the map if they truly exist. A lot of applications use this data.",
"warnVisibleForEveryone": "Your addition will be visible for everyone",
"openLayerControl": "Open the layer control box",
"layerNotEnabled": "The layer {layer} is not enabled. Enable this layer to add a point"
"mapContributionsBy": "The current visible data has edits made by {contributors}",
"mapContributionsByAndHidden": "The current visible data has edits made by {contributors} and {hiddenCount} more contributors",
"codeContributionsBy": "MapComplete has been built by {contributors} and <a href='https://github.com/pietervdvn/MapComplete/graphs/contributors' target='_blank'>{hiddenCount} more contributors</a>"
},
"sharescreen": {
"intro": "<h3>Share this map</h3> Share this map by copying the link below and sending it to friends and family:",
"addToHomeScreen": "<h3>Add to your home screen</h3>You can easily add this website to your smartphone home screen for a native feel. Click the 'add to home screen button' in the URL bar to do this.",
"embedIntro": "<h3>Embed on your website</h3>Please, embed this map into your website. <br/>We encourage you to do it - you don't even have to ask permission. <br/> It is free, and always will be. The more people using this, the more valuable it becomes.",
"copiedToClipboard": "Link copied to clipboard",
"thanksForSharing": "Thanks for sharing!",
"editThisTheme": "Edit this theme",
"editThemeDescription": "Add or change questions to this map theme",
"fsUserbadge": "Enable the login button",
"fsSearch": "Enable the search bar",
"fsWelcomeMessage": "Show the welcome message popup and associated tabs",
"fsLayers": "Enable the layer control",
"fsLayerControlToggle": "Start with the layer control expanded",
"fsAddNew": "Enable the 'add new POI' button",
"fsGeolocation": "Enable the 'geolocate-me' button (mobile only)",
"fsIncludeCurrentBackgroundMap": "Include the current background choice <b>{name}</b>",
"fsIncludeCurrentLayers": "Include the current layer choices",
"fsIncludeCurrentLocation": "Include current location"
},
"morescreen": {
"intro": "<h3>More thematic maps?</h3>Do you enjoy collecting geodata? <br/>There are more themes available.",
"requestATheme": "If you want a custom-built quest, request it in the issue tracker",
"streetcomplete": "Another, similar application is <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' class='underline hover:text-blue-800' class='underline hover:text-blue-800' target='_blank'>StreetComplete</a>.",
"createYourOwnTheme": "Create your own MapComplete theme from scratch"
},
"readYourMessages": "Please, read all your OpenStreetMap-messages before adding a new point.",
"presetInfo": "The new POI will have {tags}",
"fewChangesBefore": "Please, answer a few questions of existing points before adding a new point.",
"goToInbox": "Open inbox",
"getStartedLogin": "Login with OpenStreetMap to get started",
"getStartedNewAccount": " or <a href='https://www.openstreetmap.org/user/new' target='_blank'>create a new account</a>",
"noTagsSelected": "No tags selected",
"customThemeIntro": "<h3>Custom themes</h3>These are previously visited user-generated themes.",
"aboutMapcomplete": "<h3>About MapComplete</h3><p>With MapComplete you can enrich OpenStreetMap with information on a <b>single theme.</b> Answer a few questions, and within minutes your contributions will be available around the globe! The <b>theme maintainer</b> defines elements, questions and languages for the theme.</p><h3>Find out more</h3><p>MapComplete always <b>offers the next step</b> to learn more about OpenStreetMap.<ul><li>When embedded in a website, the iframe links to a full-screen MapComplete</li><li>The full-screen version offers information about OpenStreetMap</li><li>Viewing works without login, but editing requires an OSM login.</li><li>If you are not logged in, you are asked to log in</li><li>Once you answered a single question, you can add new points to the map</li><li>After a while, actual OSM-tags are shown, later linking to the wiki</li></ul></p><br/><p>Did you notice <b>an issue</b>? Do you have a <b>feature request</b>? Want to <b>help translate</b>? Head over to <a href='https://github.com/pietervdvn/MapComplete' target='_blank'>the source code</a> or <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>issue tracker.</a> </p><p> Want to see <b>your progress</b>? Follow the edit count on <a href='https://osmcha.org/?filters=%7B%22date__gte%22%3A%5B%7B%22label%22%3A%222021-01-01%22%2C%22value%22%3A%222021-01-01%22%7D%5D%2C%22editor%22%3A%5B%7B%22label%22%3A%22mapcomplete%22%2C%22value%22%3A%22mapcomplete%22%7D%5D%7D' target='_blank' >OsmCha</a>.</p>",
"backgroundMap": "Background map",
"layerSelection": {
"zoomInToSeeThisLayer": "Zoom in to see this layer",
"title": "Select layers"
},
"loadingCountry": "Determining country...",
"weekdays": {
"abbreviations": {
"monday": "Mon",
"tuesday": "Tue",
"wednesday": "Wed",
"thursday": "Thu",
"friday": "Fri",
"saturday": "Sat",
"sunday": "Sun"
},
"pickLanguage": "Choose a language: ",
"about": "Easily edit and add OpenStreetMap for a certain theme",
"nameInlineQuestion": "The name of this {category} is $$$",
"noNameCategory": "{category} without a name",
"questions": {
"phoneNumberOf": "What is the phone number of {category}?",
"phoneNumberIs": "The phone number of this {category} is <a href='tel:{phone}' target='_blank'>{phone}</a>",
"websiteOf": "What is the website of {category}?",
"websiteIs": "Website: <a href='{website}' target='_blank'>{website}</a>",
"emailOf": "What is the email address of {category}?",
"emailIs": "The email address of this {category} is <a href='mailto:{email}' target='_blank'>{email}</a>"
},
"openStreetMapIntro": "<h3>An Open Map</h3><p>Wouldn't it be cool if there was a single map, which everyone could freely use and edit? A single place to store all geo-information? Then, all those websites with different, small and incompatible maps (which are always outdated) wouldn't be needed anymore.</p><p><b><a href='https://OpenStreetMap.org' target='_blank'>OpenStreetMap</a></b> is this map. The map data can be used for free (with <a href='https://osm.org/copyright' target='_blank'>attribution and publication of changes to that data</a>). On top of that, everyone can freely add new data and fix errors. This website uses OpenStreetMap as well. All the data is from there, and your answers and corrections are added there as well.</p><p>A ton of people and application already use OpenStreetMap: <a href='https://maps.me/' target='_blank'>Maps.me</a>, <a href='https://osmAnd.net' target='_blank'>OsmAnd</a>, but also the maps at Facebook, Instagram, Apple-maps and Bing-maps are (partly) powered by OpenStreetMap. If you change something here, it'll be reflected in those applications too - after their next update!</p>",
"attribution": {
"attributionTitle": "Attribution notice",
"attributionContent": "<p>All data is provided by <a href='https://osm.org' target='_blank'>OpenStreetMap</a>, freely reusable under <a href='https://osm.org/copyright' target='_blank'>the Open DataBase License</a>.</p>",
"themeBy": "Theme maintained by {author}",
"iconAttribution": {
"title": "Used icons"
},
"mapContributionsBy": "The current visible data has edits made by {contributors}",
"mapContributionsByAndHidden": "The current visible data has edits made by {contributors} and {hiddenCount} more contributors",
"codeContributionsBy": "MapComplete has been built by {contributors} and <a href='https://github.com/pietervdvn/MapComplete/graphs/contributors' target='_blank'>{hiddenCount} more contributors</a>"
},
"sharescreen": {
"intro": "<h3>Share this map</h3> Share this map by copying the link below and sending it to friends and family:",
"addToHomeScreen": "<h3>Add to your home screen</h3>You can easily add this website to your smartphone home screen for a native feel. Click the 'add to home screen button' in the URL bar to do this.",
"embedIntro": "<h3>Embed on your website</h3>Please, embed this map into your website. <br/>We encourage you to do it - you don't even have to ask permission. <br/> It is free, and always will be. The more people using this, the more valuable it becomes.",
"copiedToClipboard": "Link copied to clipboard",
"thanksForSharing": "Thanks for sharing!",
"editThisTheme": "Edit this theme",
"editThemeDescription": "Add or change questions to this map theme",
"fsUserbadge": "Enable the login button",
"fsSearch": "Enable the search bar",
"fsWelcomeMessage": "Show the welcome message popup and associated tabs",
"fsLayers": "Enable the layer control",
"fsLayerControlToggle": "Start with the layer control expanded",
"fsAddNew": "Enable the 'add new POI' button",
"fsGeolocation": "Enable the 'geolocate-me' button (mobile only)",
"fsIncludeCurrentBackgroundMap": "Include the current background choice <b>{name}</b>",
"fsIncludeCurrentLayers": "Include the current layer choices",
"fsIncludeCurrentLocation": "Include current location"
},
"morescreen": {
"intro": "<h3>More thematic maps?</h3>Do you enjoy collecting geodata? <br/>There are more themes available.",
"requestATheme": "If you want a custom-built quest, request it in the issue tracker",
"streetcomplete": "Another, similar application is <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' class='underline hover:text-blue-800' class='underline hover:text-blue-800' target='_blank'>StreetComplete</a>.",
"createYourOwnTheme": "Create your own MapComplete theme from scratch"
},
"readYourMessages": "Please, read all your OpenStreetMap-messages before adding a new point.",
"presetInfo": "The new POI will have {tags}",
"fewChangesBefore": "Please, answer a few questions of existing points before adding a new point.",
"goToInbox": "Open inbox",
"getStartedLogin": "Login with OpenStreetMap to get started",
"getStartedNewAccount": " or <a href='https://www.openstreetmap.org/user/new' target='_blank'>create a new account</a>",
"noTagsSelected": "No tags selected",
"customThemeIntro": "<h3>Custom themes</h3>These are previously visited user-generated themes.",
"aboutMapcomplete": "<h3>About MapComplete</h3><p>With MapComplete you can enrich OpenStreetMap with information on a <b>single theme.</b> Answer a few questions, and within minutes your contributions will be available around the globe! The <b>theme maintainer</b> defines elements, questions and languages for the theme.</p><h3>Find out more</h3><p>MapComplete always <b>offers the next step</b> to learn more about OpenStreetMap.<ul><li>When embedded in a website, the iframe links to a full-screen MapComplete</li><li>The full-screen version offers information about OpenStreetMap</li><li>Viewing works without login, but editing requires an OSM login.</li><li>If you are not logged in, you are asked to log in</li><li>Once you answered a single question, you can add new points to the map</li><li>After a while, actual OSM-tags are shown, later linking to the wiki</li></ul></p><br/><p>Did you notice <b>an issue</b>? Do you have a <b>feature request</b>? Want to <b>help translate</b>? Head over to <a href='https://github.com/pietervdvn/MapComplete' target='_blank'>the source code</a> or <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>issue tracker.</a> </p><p> Want to see <b>your progress</b>? Follow the edit count on <a href='https://osmcha.org/?filters=%7B%22date__gte%22%3A%5B%7B%22label%22%3A%222021-01-01%22%2C%22value%22%3A%222021-01-01%22%7D%5D%2C%22editor%22%3A%5B%7B%22label%22%3A%22mapcomplete%22%2C%22value%22%3A%22mapcomplete%22%7D%5D%7D' target='_blank' >OsmCha</a>.</p>",
"backgroundMap": "Background map",
"layerSelection": {
"zoomInToSeeThisLayer": "Zoom in to see this layer",
"title": "Select layers"
},
"loadingCountry": "Determining country...",
"weekdays": {
"abbreviations": {
"monday": "Mon",
"tuesday": "Tue",
"wednesday": "Wed",
"thursday": "Thu",
"friday": "Fri",
"saturday": "Sat",
"sunday": "Sun"
},
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
},
"opening_hours": {
"error_loading": "Error: could not visualize these opening hours.",
"open_during_ph": "During a public holiday, this amenity is",
"opensAt": "from",
"openTill": "till",
"not_all_rules_parsed": "The opening hours of this shop are complicated. The following rules are ignored in the input element:",
"closed_until": "Closed until {date}",
"closed_permanently": "Closed for an unkown duration",
"open_24_7": "Opened around the clock",
"ph_not_known": " ",
"ph_closed": "closed",
"ph_open": "opened with different hours",
"ph_open_as_usual": "opened as usual"
}
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
},
"opening_hours": {
"error_loading": "Error: could not visualize these opening hours.",
"open_during_ph": "During a public holiday, this amenity is",
"opensAt": "from",
"openTill": "till",
"not_all_rules_parsed": "The opening hours of this shop are complicated. The following rules are ignored in the input element:",
"closed_until": "Closed until {date}",
"closed_permanently": "Closed for an unkown duration",
"open_24_7": "Opened around the clock",
"ph_not_known": " ",
"ph_closed": "closed",
"ph_open": "opened with different hours",
"ph_open_as_usual": "opened as usual"
}
},
"favourite": {
"panelIntro": "<h3>Your personal theme</h3>Activate your favourite layers from all the official themes",
"loginNeeded": "<h3>Log in</h3>A personal layout is only available for OpenStreetMap users",
"reload": "Reload the data"
"sharescreen": {
"intro": "<h3>Share this map</h3> Share this map by copying the link below and sending it to friends and family:",
"addToHomeScreen": "<h3>Add to your home screen</h3>You can easily add this website to your smartphone home screen for a native feel. Click the 'add to home screen button' in the URL bar to do this.",
"embedIntro": "<h3>Embed on your website</h3>Please, embed this map into your website. <br/>We encourage you to do it - you don't even have to ask permission. <br/> It is free, and always will be. The more people using this, the more valuable it becomes.",
"copiedToClipboard": "Link copied to clipboard",
"thanksForSharing": "Thanks for sharing!",
"editThisTheme": "Edit this theme",
"editThemeDescription": "Add or change questions to this map theme",
"fsUserbadge": "Enable the login button",
"fsSearch": "Enable the search bar",
"fsWelcomeMessage": "Show the welcome message popup and associated tabs",
"fsLayers": "Enable the layer control",
"fsLayerControlToggle": "Start with the layer control expanded",
"fsAddNew": "Enable the 'add new POI' button",
"fsGeolocation": "Enable the 'geolocate-me' button (mobile only)",
"fsIncludeCurrentBackgroundMap": "Include the current background choice <b>{name}</b>",
"fsIncludeCurrentLayers": "Include the current layer choices",
"fsIncludeCurrentLocation": "Include current location"
},
"reviews": {
"title": "{count} reviews",
"title_singular": "One review",
"name_required": "A name is required in order to display and create reviews",
"no_reviews_yet": "There are no reviews yet. Be the first to write one and help open data and the business!",
"write_a_comment": "Leave a review…",
"no_rating": "No rating given",
"posting_as": "Posting as",
"i_am_affiliated": "<span>I am affiliated with this object</span><br/><span class='subtle'>Check if you are an owner, creator, employee, …</span>",
"affiliated_reviewer_warning": "(Affiliated review)",
"saving_review": "Saving…",
"saved": "<span class='thanks'>Review saved. Thanks for sharing!</span>",
"tos": "If you create a review, you agree to <a href='https://mangrove.reviews/terms' target='_blank'>the TOS and privacy policy of Mangrove.reviews</a>",
"attribution": "Reviews are powered by <a href='https://mangrove.reviews/' target='_blank'>Mangrove Reviews</a> and are available under <a href='https://mangrove.reviews/terms#8-licensing-of-content' target='_blank'>CC-BY 4.0</a>.",
"plz_login": "Login to leave a review"
}
"morescreen": {
"intro": "<h3>More thematic maps?</h3>Do you enjoy collecting geodata? <br/>There are more themes available.",
"requestATheme": "If you want a custom-built quest, request it in the issue tracker",
"streetcomplete": "Another, similar application is <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' class='underline hover:text-blue-800' class='underline hover:text-blue-800' target='_blank'>StreetComplete</a>.",
"createYourOwnTheme": "Create your own MapComplete theme from scratch"
},
"readYourMessages": "Please, read all your OpenStreetMap-messages before adding a new point.",
"fewChangesBefore": "Please, answer a few questions of existing points before adding a new point.",
"goToInbox": "Open inbox",
"getStartedLogin": "Login with OpenStreetMap to get started",
"getStartedNewAccount": " or <a href='https://www.openstreetmap.org/user/new' target='_blank'>create a new account</a>",
"noTagsSelected": "No tags selected",
"customThemeIntro": "<h3>Custom themes</h3>These are previously visited user-generated themes.",
"aboutMapcomplete": "<h3>About MapComplete</h3><p>With MapComplete you can enrich OpenStreetMap with information on a <b>single theme.</b> Answer a few questions, and within minutes your contributions will be available around the globe! The <b>theme maintainer</b> defines elements, questions and languages for the theme.</p><h3>Find out more</h3><p>MapComplete always <b>offers the next step</b> to learn more about OpenStreetMap.<ul><li>When embedded in a website, the iframe links to a full-screen MapComplete</li><li>The full-screen version offers information about OpenStreetMap</li><li>Viewing works without login, but editing requires an OSM login.</li><li>If you are not logged in, you are asked to log in</li><li>Once you answered a single question, you can add new points to the map</li><li>After a while, actual OSM-tags are shown, later linking to the wiki</li></ul></p><br/><p>Did you notice <b>an issue</b>? Do you have a <b>feature request</b>? Want to <b>help translate</b>? Head over to <a href='https://github.com/pietervdvn/MapComplete' target='_blank'>the source code</a> or <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>issue tracker.</a> </p><p> Want to see <b>your progress</b>? Follow the edit count on <a href='https://osmcha.org/?filters=%7B%22date__gte%22%3A%5B%7B%22label%22%3A%222021-01-01%22%2C%22value%22%3A%222021-01-01%22%7D%5D%2C%22editor%22%3A%5B%7B%22label%22%3A%22mapcomplete%22%2C%22value%22%3A%22mapcomplete%22%7D%5D%7D' target='_blank' >OsmCha</a>.</p>",
"backgroundMap": "Background map",
"layerSelection": {
"zoomInToSeeThisLayer": "Zoom in to see this layer",
"title": "Select layers"
},
"weekdays": {
"abbreviations": {
"monday": "Mon",
"tuesday": "Tue",
"wednesday": "Wed",
"thursday": "Thu",
"friday": "Fri",
"saturday": "Sat",
"sunday": "Sun"
},
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
},
"opening_hours": {
"error_loading": "Error: could not visualize these opening hours.",
"open_during_ph": "During a public holiday, this amenity is",
"opensAt": "from",
"openTill": "till",
"not_all_rules_parsed": "The opening hours of this shop are complicated. The following rules are ignored in the input element:",
"closed_until": "Closed until {date}",
"closed_permanently": "Closed for an unkown duration",
"open_24_7": "Opened around the clock",
"ph_not_known": " ",
"ph_closed": "closed",
"ph_open": "opened"
},
"error_loading": "Error: could not load the histogram"
},
"favourite": {
"panelIntro": "<h3>Your personal theme</h3>Activate your favourite layers from all the official themes",
"loginNeeded": "<h3>Log in</h3>A personal layout is only available for OpenStreetMap users",
"reload": "Reload the data"
},
"reviews": {
"title": "{count} reviews",
"title_singular": "One review",
"name_required": "A name is required in order to display and create reviews",
"no_reviews_yet": "There are no reviews yet. Be the first to write one and help open data and the business!",
"write_a_comment": "Leave a review…",
"no_rating": "No rating given",
"posting_as": "Posting as",
"i_am_affiliated": "<span>I am affiliated with this object</span><br/><span class='subtle'>Check if you are an owner, creator, employee, …</span>",
"affiliated_reviewer_warning": "(Affiliated review)",
"saving_review": "Saving…",
"saved": "<span class='thanks'>Review saved. Thanks for sharing!</span>",
"tos": "If you create a review, you agree to <a href='https://mangrove.reviews/terms' target='_blank'>the TOS and privacy policy of Mangrove.reviews</a>",
"attribution": "Reviews are powered by <a href='https://mangrove.reviews/' target='_blank'>Mangrove Reviews</a> and are available under <a href='https://mangrove.reviews/terms#8-licensing-of-content' target='_blank'>CC-BY 4.0</a>.",
"plz_login": "Login to leave a review"
}
}

View file

@ -214,6 +214,9 @@
},
"bike_parking": {
"tagRenderings": {
"1": {
"question": "К какому типу относится эта велопарковка?"
},
"2": {
"mappings": {
"0": {
@ -229,9 +232,6 @@
},
"5": {
"render": "{access}"
},
"1": {
"question": "К какому типу относится эта велопарковка?"
}
}
},
@ -757,4 +757,4 @@
}
}
}
}
}

View file

@ -23,27 +23,31 @@
},
"3": {
"render": "材質:{material}",
"question": "這個長椅 (座位) 是什麼做的?",
"mappings": {
"5": {
"then": "材質:鋼鐵"
},
"4": {
"then": "材質:塑膠"
},
"3": {
"then": "材質:水泥"
},
"2": {
"then": "材質:石頭"
"0": {
"then": "材質:木頭"
},
"1": {
"then": "材質:金屬"
},
"0": {
"then": "材質:木頭"
"2": {
"then": "材質:石頭"
},
"3": {
"then": "材質:水泥"
},
"4": {
"then": "材質:塑膠"
},
"5": {
"then": "材質:鋼鐵"
}
}
},
"question": "這個長椅 (座位) 是什麼做的?"
},
"4": {
"question": "坐在長椅時是面對那個方向?",
"render": "當坐在長椅時,那個人朝向 {direction}°。"
},
"5": {
"render": "顏色:{colour}",
@ -78,313 +82,309 @@
"6": {
"question": "上一次探察長椅是什麼時候?",
"render": "這個長椅最後是在 {survey:date} 探查的"
},
"4": {
"render": "當坐在長椅時,那個人朝向 {direction}°。",
"question": "坐在長椅時是面對那個方向?"
}
},
"presets": {
"0": {
"description": "新增長椅",
"title": "長椅"
"title": "長椅",
"description": "新增長椅"
}
}
},
"bike_parking": {
"bench_at_pt": {
"name": "大眾運輸站點的長椅",
"title": {
"render": "長椅",
"mappings": {
"0": {
"then": "大眾運輸站點的長椅"
},
"1": {
"then": "涼亭內的長椅"
}
}
},
"tagRenderings": {
"2": {
"mappings": {
"4": {
"then": "屋頂停車場"
},
"3": {
"then": "地面層停車場"
},
"2": {
"then": "地面停車場"
},
"1": {
"then": "地下停車場"
},
"0": {
"then": "地下停車場"
}
},
"question": "這個單車停車場的相對位置是?"
},
"1": {
"mappings": {
"7": {
"then": "樓層當中標示為單車停車場的區域"
},
"6": {
"then": "柱子 <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>"
},
"5": {
"then": "車棚 <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>"
},
"4": {
"then": "兩層<img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>"
},
"3": {
"then": "車架<img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>"
},
"2": {
"then": "車把架 <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>"
},
"1": {
"then": "車輪架/圓圈 <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>"
},
"0": {
"then": "單車架 <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>"
}
},
"render": "這個單車停車場的類型是:{bicycle_parking}",
"question": "這是那種類型的單車停車場?"
"render": "{name}"
},
"2": {
"render": "站立長椅"
}
}
},
"bicycle_library": {
"name": "單車圖書館",
"title": {
"render": "單車圖書館"
},
"description": "能夠長期租用單車的設施",
"tagRenderings": {
"1": {
"question": "這個單車圖書館的名稱是?",
"render": "這個單車圖書館叫做 {name}"
},
"6": {
"question": "租用單車的費用多少?",
"render": "租借單車需要 {charge}",
"mappings": {
"1": {
"then": "這停車場有設計 (官方) 空間給裝箱的單車。"
},
"0": {
"then": "這個停車場有地方可以放裝箱單車"
}
},
"question": "這個單車停車場有地方放裝箱的單車嗎?"
},
"5": {
"mappings": {
"2": {
"then": "通行性僅限學校、公司或組織的成員"
"then": "租借單車免費"
},
"1": {
"then": "通行性主要是為了企業的顧客"
},
"0": {
"then": "公開可用"
"then": "租借單車價錢 €20/year 與 €20 保證金"
}
},
"render": "{access}",
"question": "誰可以使用這個單車停車場?"
},
"4": {
"render": "{capacity} 單車的地方",
"question": "這個單車停車場能放幾台單車 (包括裝箱單車)"
},
"3": {
"mappings": {
"1": {
"then": "這個停車場沒有遮蔽"
},
"0": {
"then": "這個停車場有遮蔽 (有屋頂)"
}
},
"question": "這個停車場是否有車棚?如果是室內停車場也請選擇\"遮蔽\"。"
}
},
"title": {
"render": "單車停車場"
},
"presets": {
"0": {
"title": "單車停車場"
}
},
"name": "單車停車場"
},
"bike_monitoring_station": {
"title": {
"mappings": {
"1": {
"then": "單車計數站 {ref}"
},
"0": {
"then": "單車計數站 {name}"
}
},
"render": "單車計數站"
},
"name": "監視站"
},
"bike_cleaning": {
"presets": {
"0": {
"title": "單車清理服務"
}
},
"title": {
"mappings": {
"0": {
"then": "單車清理服務 <i>{name}</i>"
}
},
"render": "單車清理服務"
},
"name": "單車清理服務"
},
"bike_cafe": {
"presets": {
"0": {
"title": "單車咖啡廳"
}
},
"tagRenderings": {
"8": {
"question": "何時這個單車咖啡廳營運?"
},
"7": {
"question": "{name} 的電子郵件地址是?"
},
"6": {
"question": "{name} 的電話號碼是?"
},
"5": {
"question": "{name} 的網站是?"
},
"4": {
"question": "誰可以在這裡租單車?",
"mappings": {
"1": {
"then": "這個單車咖啡廳並不修理單車"
},
"0": {
"then": "這個單車咖啡廳修理單車"
}
},
"question": "這個單車咖啡廳是否能修理單車?"
},
"3": {
"mappings": {
"1": {
"then": "這個單車咖啡廳並沒有提供工具讓你修理"
"then": "提供兒童單車"
},
"0": {
"then": "這個單車咖啡廳提供工具讓你修理"
}
},
"question": "這裡是否有工具修理你的單車嗎?"
},
"2": {
"mappings": {
"1": {
"then": "這個單車咖啡廳並沒有為所有人提供單車打氣甬"
"then": "有提供成人單車"
},
"0": {
"then": "這個單車咖啡廳有提供給任何人都能使用的單車打氣甬"
"2": {
"then": "有提供行動不便人士的單車"
}
},
"question": "這個單車咖啡廳有提供給任何人都能使用的單車打氣甬嗎?"
},
"1": {
"render": "這個單車咖啡廳叫做 {name}",
"question": "這個單車咖啡廳的名稱是?"
}
}
},
"title": {
"mappings": {
"0": {
"then": "單車咖啡廳<i>{name}</i>"
}
},
"render": "單車咖啡廳"
},
"name": "單車咖啡廳"
"presets": {
"0": {
"title": "自行車圖書館 ( Fietsbibliotheek)",
"description": "單車圖書館有一大批單車供人租借"
}
}
},
"bicycle_tube_vending_machine": {
"tagRenderings": {
"1": {
"mappings": {
"2": {
"then": "這個自動販賣機已經關閉了"
},
"1": {
"then": "這個自動販賣機沒有運作了"
},
"0": {
"then": "這個自動販賣機仍運作"
}
},
"render": "運作狀態是 <i>{operational_status</i>",
"question": "這個自動販賣機仍有運作嗎?"
}
"name": "自行車內胎自動售貨機",
"title": {
"render": "自行車內胎自動售貨機"
},
"presets": {
"0": {
"title": "自行車內胎自動售貨機"
}
},
"title": {
"render": "自行車內胎自動售貨機"
},
"name": "自行車內胎自動售貨機"
},
"bicycle_library": {
"presets": {
"0": {
"description": "單車圖書館有一大批單車供人租借",
"title": "自行車圖書館 ( Fietsbibliotheek)"
}
},
"tagRenderings": {
"7": {
"1": {
"question": "這個自動販賣機仍有運作嗎?",
"render": "運作狀態是 <i>{operational_status</i>",
"mappings": {
"0": {
"then": "這個自動販賣機仍運作"
},
"1": {
"then": "這個自動販賣機沒有運作了"
},
"2": {
"then": "有提供行動不便人士的單車"
},
"1": {
"then": "有提供成人單車"
},
"0": {
"then": "提供兒童單車"
"then": "這個自動販賣機已經關閉了"
}
},
"question": "誰可以在這裡租單車?"
},
"6": {
"mappings": {
"1": {
"then": "租借單車價錢 €20/year 與 €20 保證金"
},
"0": {
"then": "租借單車免費"
}
},
"render": "租借單車需要 {charge}",
"question": "租用單車的費用多少?"
},
"1": {
"render": "這個單車圖書館叫做 {name}",
"question": "這個單車圖書館的名稱是?"
}
}
},
"title": {
"render": "單車圖書館"
},
"name": "單車圖書館",
"description": "能夠長期租用單車的設施"
}
},
"bench_at_pt": {
"tagRenderings": {
"2": {
"render": "站立長椅"
},
"1": {
"render": "{name}"
"bike_cafe": {
"name": "單車咖啡廳",
"title": {
"render": "單車咖啡廳",
"mappings": {
"0": {
"then": "單車咖啡廳<i>{name}</i>"
}
}
},
"title": {
"mappings": {
"1": {
"then": "涼亭內的長椅"
},
"0": {
"then": "大眾運輸站點的長椅"
"tagRenderings": {
"1": {
"question": "這個單車咖啡廳的名稱是?",
"render": "這個單車咖啡廳叫做 {name}"
},
"2": {
"question": "這個單車咖啡廳有提供給任何人都能使用的單車打氣甬嗎?",
"mappings": {
"0": {
"then": "這個單車咖啡廳有提供給任何人都能使用的單車打氣甬"
},
"1": {
"then": "這個單車咖啡廳並沒有為所有人提供單車打氣甬"
}
}
},
"render": "長椅"
"3": {
"question": "這裡是否有工具修理你的單車嗎?",
"mappings": {
"0": {
"then": "這個單車咖啡廳提供工具讓你修理"
},
"1": {
"then": "這個單車咖啡廳並沒有提供工具讓你修理"
}
}
},
"4": {
"question": "這個單車咖啡廳是否能修理單車?",
"mappings": {
"0": {
"then": "這個單車咖啡廳修理單車"
},
"1": {
"then": "這個單車咖啡廳並不修理單車"
}
}
},
"5": {
"question": "{name} 的網站是?"
},
"6": {
"question": "{name} 的電話號碼是?"
},
"7": {
"question": "{name} 的電子郵件地址是?"
},
"8": {
"question": "何時這個單車咖啡廳營運?"
}
},
"name": "大眾運輸站點的長椅"
"presets": {
"0": {
"title": "單車咖啡廳"
}
}
},
"bike_cleaning": {
"name": "單車清理服務",
"title": {
"render": "單車清理服務",
"mappings": {
"0": {
"then": "單車清理服務 <i>{name}</i>"
}
}
},
"presets": {
"0": {
"title": "單車清理服務"
}
}
},
"bike_monitoring_station": {
"name": "監視站",
"title": {
"render": "單車計數站",
"mappings": {
"0": {
"then": "單車計數站 {name}"
},
"1": {
"then": "單車計數站 {ref}"
}
}
}
},
"bike_parking": {
"name": "單車停車場",
"presets": {
"0": {
"title": "單車停車場"
}
},
"title": {
"render": "單車停車場"
},
"tagRenderings": {
"1": {
"question": "這是那種類型的單車停車場?",
"render": "這個單車停車場的類型是:{bicycle_parking}",
"mappings": {
"0": {
"then": "單車架 <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>"
},
"1": {
"then": "車輪架/圓圈 <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>"
},
"2": {
"then": "車把架 <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>"
},
"3": {
"then": "車架<img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>"
},
"4": {
"then": "兩層<img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>"
},
"5": {
"then": "車棚 <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>"
},
"6": {
"then": "柱子 <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>"
},
"7": {
"then": "樓層當中標示為單車停車場的區域"
}
}
},
"2": {
"question": "這個單車停車場的相對位置是?",
"mappings": {
"0": {
"then": "地下停車場"
},
"1": {
"then": "地下停車場"
},
"2": {
"then": "地面停車場"
},
"3": {
"then": "地面層停車場"
},
"4": {
"then": "屋頂停車場"
}
}
},
"3": {
"question": "這個停車場是否有車棚?如果是室內停車場也請選擇\"遮蔽\"。",
"mappings": {
"0": {
"then": "這個停車場有遮蔽 (有屋頂)"
},
"1": {
"then": "這個停車場沒有遮蔽"
}
}
},
"4": {
"question": "這個單車停車場能放幾台單車 (包括裝箱單車)",
"render": "{capacity} 單車的地方"
},
"5": {
"question": "誰可以使用這個單車停車場?",
"render": "{access}",
"mappings": {
"0": {
"then": "公開可用"
},
"1": {
"then": "通行性主要是為了企業的顧客"
},
"2": {
"then": "通行性僅限學校、公司或組織的成員"
}
}
},
"6": {
"question": "這個單車停車場有地方放裝箱的單車嗎?",
"mappings": {
"0": {
"then": "這個停車場有地方可以放裝箱單車"
},
"1": {
"then": "這停車場有設計 (官方) 空間給裝箱的單車。"
}
}
}
}
}
}
}

View file

@ -1,10 +1,10 @@
{
"undefined": {
"website": {
"question": "Apa situs web dari {name}?"
},
"email": {
"question": "Apa alamat surel dari {name}?"
},
"website": {
"question": "Apa situs web dari {name}?"
}
}
}
}

View file

@ -9,12 +9,12 @@
"website": {
"question": "Какой сайт у {name}?"
},
"description": {
"question": "Есть ли еще что-то важное, о чем вы не смогли рассказать в предыдущих вопросах? Добавьте это здесь.<br/><span style='font-size: small'>Не повторяйте уже изложенные факты</span>"
},
"opening_hours": {
"question": "Какое время работы у {name}?",
"render": "<h3>Часы работы</h3>{opening_hours_table(opening_hours)}"
},
"description": {
"question": "Есть ли еще что-то важное, о чем вы не смогли рассказать в предыдущих вопросах? Добавьте это здесь.<br/><span style='font-size: small'>Не повторяйте уже изложенные факты</span>"
}
}
}
}

View file

@ -4,4 +4,4 @@
"question": "Vad är telefonnumret till {name}?"
}
}
}
}

View file

@ -1,20 +1,20 @@
{
"undefined": {
"opening_hours": {
"render": "<h3>開放時間</h3>{opening_hours_table(opening_hours)}",
"question": "{name} 的開放時間是什麼?"
},
"description": {
"question": "有什麼相關的資訊你無法在先前的問題回應的嗎?請加在這邊吧。<br/><span style='font-size: small'>不要重覆答覆已經知道的事情</span>"
},
"website": {
"question": "{name} 網址是什麼?"
"phone": {
"question": "{name} 的電話號碼是什麼?"
},
"email": {
"question": "{name} 的電子郵件地址是什麼?"
},
"phone": {
"question": "{name} 的電話號碼是什麼?"
"website": {
"question": "{name} 網址是什麼?"
},
"description": {
"question": "有什麼相關的資訊你無法在先前的問題回應的嗎?請加在這邊吧。<br/><span style='font-size: small'>不要重覆答覆已經知道的事情</span>"
},
"opening_hours": {
"question": "{name} 的開放時間是什麼?",
"render": "<h3>開放時間</h3>{opening_hours_table(opening_hours)}"
}
}
}
}

View file

@ -28,7 +28,7 @@
},
"3": {
"tagRenderings": {
"2": {
"5": {
"render": "<strong>{name}</strong>"
}
}

View file

@ -177,7 +177,7 @@
},
"description": "Eine Klettergelegenheit",
"tagRenderings": {
"2": {
"5": {
"render": "<strong>{name}</strong>",
"question": "Wie heißt diese Klettergelegenheit?",
"mappings": {
@ -212,6 +212,9 @@
},
"1": {
"then": "Hier kann geklettert werden"
},
"2": {
"then": "Hier kann nicht geklettert werden"
}
}
}
@ -222,19 +225,19 @@
"0": {
"question": "Gibt es eine (inoffizielle) Website mit mehr Informationen (z.B. Topos)?"
},
"1": {
"4": {
"render": "Die Routen sind durchschnittlich <b>{climbing:length}m</b> lang",
"question": "Wie lang sind die Routen (durchschnittlich) in Metern?"
},
"2": {
"5": {
"question": "Welche Schwierigkeit hat hier die leichteste Route (französisch/belgisches System)?",
"render": "Die leichteste Route hat hier die Schwierigkeit {climbing:grade:french} (französisch/belgisches System)"
"render": "Die leichteste Route hat hier die Schwierigkeit {climbing:grade:french:min} (französisch/belgisches System)"
},
"3": {
"6": {
"question": "Welche Schwierigkeit hat hier die schwerste Route (französisch/belgisches System)?",
"render": "Die schwerste Route hat hier die Schwierigkeit {climbing:grade:french} (französisch/belgisches System)"
"render": "Die schwerste Route hat hier die Schwierigkeit {climbing:grade:french:min} (französisch/belgisches System)"
},
"4": {
"7": {
"question": "Kann hier gebouldert werden?",
"mappings": {
"0": {
@ -251,7 +254,7 @@
}
}
},
"5": {
"8": {
"question": "Ist Toprope-Klettern hier möglich?",
"mappings": {
"0": {
@ -265,7 +268,7 @@
}
}
},
"6": {
"9": {
"question": "Ist hier Sportklettern möglich (feste Ankerpunkte)?",
"mappings": {
"0": {
@ -279,7 +282,7 @@
}
}
},
"7": {
"10": {
"question": "Ist hier traditionelles Klettern möglich (eigene Sicherung z.B. mit Klemmkleilen)?",
"mappings": {
"0": {
@ -293,7 +296,7 @@
}
}
},
"8": {
"11": {
"question": "Gibt es hier eine Speedkletter-Wand?",
"mappings": {
"0": {

View file

@ -434,21 +434,48 @@
}
},
"3": {
"question": "How long is this climbing route (in meters)?",
"render": "This route is {climbing:length} meter long"
},
"4": {
"question": "What is the difficulty of this climbing route according to the french/belgian system?",
"render": "The difficulty is {climbing:grade:french} according to the french/belgian system"
}
},
"presets": {
"0": {
"title": "Climbing route"
}
}
},
"3": {
"name": "Climbing opportunities",
"title": {
"render": "Climbing opportunity"
"render": "Climbing opportunity",
"mappings": {
"0": {
"then": "Climbing crag"
},
"1": {
"then": "Climbing area <b>{name}</b>"
},
"2": {
"then": "Climbing site"
},
"3": {
"then": "Climbing opportunity <b>{name}</b>"
}
}
},
"description": "A climbing opportunity",
"tagRenderings": {
"2": {
"3": {
"render": "<h3>Length overview</h3>{histogram(_length_hist)}"
},
"4": {
"render": "<h3>Difficulties overview</h3>{histogram(_difficulty_hist)}"
},
"5": {
"render": "<strong>{name}</strong>",
"question": "What is the name of this climbing opportunity?",
"mappings": {
@ -456,6 +483,16 @@
"then": "This climbing opportunity doesn't have a name"
}
}
},
"6": {
"mappings": {
"0": {
"then": "A climbing boulder - a single rock or cliff with one or a few climbing routes which can be climbed safely without rope"
},
"1": {
"then": "A climbing crag - a single rock or cliff with at least a few climbing routes"
}
}
}
},
"presets": {
@ -483,6 +520,9 @@
},
"1": {
"then": "Climbing is possible here"
},
"2": {
"then": "Climbing is not possible here"
}
}
}
@ -494,18 +534,51 @@
"question": "Is there a (unofficial) website with more informations (e.g. topos)?"
},
"1": {
"mappings": {
"0": {
"then": "<span class='subtle'>The <a href='#{_embedding_feature:id}'>containing feature</a> states that this is</span> publicly accessible<br/>{_embedding_feature:access:description}"
},
"1": {
"then": "<span class='subtle'>The <a href='#{_embedding_feature:id}'>containing feature</a> states that </span> a permit is needed to access<br/>{_embedding_feature:access:description}"
},
"2": {
"then": "<span class='subtle'>The <a href='#{_embedding_feature:id}'>containing feature</a> states that this is</span> only accessible to customers<br/>{_embedding_feature:access:description}"
},
"3": {
"then": "<span class='subtle'>The <a href='#{_embedding_feature:id}'>containing feature</a> states that this is</span> only accessible to club members<br/>{_embedding_feature:access:description}"
}
}
},
"2": {
"question": "Who can access here?",
"mappings": {
"0": {
"then": "Publicly accessible to anyone"
},
"1": {
"then": "You need a permit to access here"
},
"2": {
"then": "Only custumers"
},
"3": {
"then": "Only club members"
}
}
},
"4": {
"render": "The routes are <b>{climbing:length}m</b> long on average",
"question": "What is the (average) length of the routes in meters?"
},
"2": {
"5": {
"question": "What is the level of the easiest route here, accoring to the french classification system?",
"render": "The minimal difficulty is {climbing:grade:french} according to the french/belgian system"
"render": "The minimal difficulty is {climbing:grade:french:min} according to the french/belgian system"
},
"3": {
"6": {
"question": "What is the level of the most difficult route here, accoring to the french classification system?",
"render": "The maximal difficulty is {climbing:grade:french} according to the french/belgian system"
"render": "The maximal difficulty is {climbing:grade:french:max} according to the french/belgian system"
},
"4": {
"7": {
"question": "Is bouldering possible here?",
"mappings": {
"0": {
@ -522,7 +595,7 @@
}
}
},
"5": {
"8": {
"question": "Is toprope climbing possible here?",
"mappings": {
"0": {
@ -536,7 +609,7 @@
}
}
},
"6": {
"9": {
"question": "Is sport climbing possible here on fixed anchors?",
"mappings": {
"0": {
@ -550,7 +623,7 @@
}
}
},
"7": {
"10": {
"question": "Is traditional climbing possible here (using own gear e.g. chocks)?",
"mappings": {
"0": {
@ -564,7 +637,7 @@
}
}
},
"8": {
"11": {
"question": "Is there a speed climbing wall?",
"mappings": {
"0": {

View file

@ -165,7 +165,7 @@
},
"3": {
"tagRenderings": {
"2": {
"5": {
"render": "<strong>{name}</strong>"
}
}

View file

@ -111,7 +111,7 @@
},
"3": {
"tagRenderings": {
"2": {
"5": {
"render": "<strong>{name}</strong>"
}
}

View file

@ -448,7 +448,7 @@
},
"description": "登坂教室",
"tagRenderings": {
"2": {
"5": {
"render": "<strong>{name}</strong>",
"question": "この登坂教室の名前は何ですか?",
"mappings": {
@ -483,6 +483,9 @@
},
"1": {
"then": "ここでは登ることができる"
},
"2": {
"then": "ここでは登ることができない"
}
}
}
@ -493,19 +496,19 @@
"0": {
"question": "もっと情報のある(非公式の)ウェブサイトはありますか(例えば、topos)?"
},
"1": {
"4": {
"render": "ルートの長さは平均で<b>{climbing:length} m</b>です",
"question": "ルートの(平均)長さはメートル単位でいくつですか?"
},
"2": {
"5": {
"question": "ここで一番簡単なルートのレベルは、フランスのランク評価システムで何ですか?",
"render": "フランス/ベルギーのランク評価システムでは、最小の難易度は{climbing:grade:french}です"
"render": "フランス/ベルギーのランク評価システムでは、最小の難易度は{climbing:grade:french:min}です"
},
"3": {
"6": {
"question": "フランスのランク評価によると、ここで一番難しいルートのレベルはどれくらいですか?",
"render": "フランス/ベルギーのランク評価システムでは、最大の難易度は{climbing:grade:french}です"
"render": "フランス/ベルギーのランク評価システムでは、最大の難易度は{climbing:grade:french:max}です"
},
"4": {
"7": {
"question": "ここでボルダリングはできますか?",
"mappings": {
"0": {
@ -522,7 +525,7 @@
}
}
},
"5": {
"8": {
"question": "ここでtoprope登坂はできますか?",
"mappings": {
"0": {
@ -536,7 +539,7 @@
}
}
},
"6": {
"9": {
"question": "ここでは固定アンカー式のスポーツクライミングはできますか?",
"mappings": {
"0": {
@ -550,7 +553,7 @@
}
}
},
"7": {
"10": {
"question": "伝統的な登山はここで可能ですか(例えば、チョックのような独自のギアを使用して)",
"mappings": {
"0": {
@ -564,7 +567,7 @@
}
}
},
"8": {
"11": {
"question": "スピードクライミングウォールはありますか?",
"mappings": {
"0": {

View file

@ -182,6 +182,9 @@
},
"1": {
"then": "Klatring er mulig her"
},
"2": {
"then": "Klatring er ikke mulig her"
}
}
}
@ -189,7 +192,7 @@
}
},
"roamingRenderings": {
"4": {
"7": {
"question": "Er buldring mulig her?",
"mappings": {
"0": {

View file

@ -312,9 +312,11 @@
}
},
"3": {
"question": "Hoe lang is deze klimroute (in meters)?",
"render": "Deze klimroute is {climbing:length} meter lang"
},
"4": {
"question": "Hoe moeilijk is deze klimroute volgens het Franse/Belgische systeem?",
"render": "De klimmoeilijkheid is {climbing:grade:french} volgens het Franse/Belgische systeem"
}
}
@ -322,11 +324,22 @@
"3": {
"name": "Klimgelegenheden",
"title": {
"render": "Klimgelegenheid"
"render": "Klimgelegenheid",
"mappings": {
"1": {
"then": "Klimsite <b>{name}</b>"
},
"2": {
"then": "Klimsite"
},
"3": {
"then": "Klimgelegenheid <b>{name}</b>"
}
}
},
"description": "Een klimgelegenheid",
"tagRenderings": {
"2": {
"5": {
"render": "<strong>{name}</strong>",
"question": "Wat is de naam van dit Klimgelegenheid?",
"mappings": {
@ -352,19 +365,19 @@
}
},
"roamingRenderings": {
"1": {
"4": {
"render": "De klimroutes zijn gemiddeld <b>{climbing:length}m</b> lang",
"question": "Wat is de (gemiddelde) lengte van de klimroutes, in meter?"
},
"2": {
"5": {
"question": "Wat is het niveau van de makkelijkste route, volgens het Franse classificatiesysteem?",
"render": "De minimale klimmoeilijkheid is {climbing:grade:french} volgens het Franse/Belgische systeem"
"render": "De minimale klimmoeilijkheid is {climbing:grade:french:min} volgens het Franse/Belgische systeem"
},
"3": {
"6": {
"question": "Wat is het niveau van de moeilijkste route, volgens het Franse classificatiesysteem?",
"render": "De maximale klimmoeilijkheid is {climbing:grade:french} volgens het Franse/Belgische systeem"
"render": "De maximale klimmoeilijkheid is {climbing:grade:french:max} volgens het Franse/Belgische systeem"
},
"4": {
"7": {
"question": "Is het mogelijk om hier te bolderen?",
"mappings": {
"0": {
@ -381,7 +394,7 @@
}
}
},
"5": {
"8": {
"question": "Is het mogelijk om hier te toprope-klimmen?",
"mappings": {
"0": {
@ -395,7 +408,7 @@
}
}
},
"6": {
"9": {
"question": "Is het mogelijk om hier te sportklimmen/voorklimmen op reeds aangebrachte haken?",
"mappings": {
"0": {
@ -409,7 +422,7 @@
}
}
},
"7": {
"10": {
"question": "Is het mogelijk om hier traditioneel te klimmen? <br/><span class='subtle'>(Dit is klimmen met klemblokjes en friends)</span>",
"mappings": {
"0": {
@ -423,7 +436,7 @@
}
}
},
"8": {
"11": {
"question": "Is er een snelklimmuur (speed climbing)?",
"mappings": {
"0": {

View file

@ -350,7 +350,7 @@
},
"3": {
"tagRenderings": {
"2": {
"5": {
"render": "<strong>{name}</strong>"
}
}
@ -364,7 +364,7 @@
}
},
"roamingRenderings": {
"6": {
"9": {
"mappings": {
"0": {
"then": "Здесь можно заняться спортивным скалолазанием"
@ -522,4 +522,4 @@
"trees": {
"title": "Деревья"
}
}
}

View file

@ -1,9 +1,9 @@
{
"aed": {
"title": "Öppna AED-karta",
"description": "På denna karta kan man hitta och markera närliggande defibrillatorer"
},
"artworks": {
"title": "Öppen konstverkskarta"
},
"aed": {
"description": "På denna karta kan man hitta och markera närliggande defibrillatorer",
"title": "Öppna AED-karta"
}
}
}

View file

@ -91,15 +91,91 @@
"title": "單車圖書館",
"description": "單車圖書館是指每年支付小額費用,然後可以租用單車的地方。最有名的單車圖書館案例是給小孩的,能夠讓長大的小孩用目前的單車換成比較大的單車"
},
"bike_monitoring_stations": {
"title": "自行車監視站",
"shortDescription": "布魯塞爾車行資料的即時單車監視站資料",
"description": "這個主題顯示單車監視站的即時資料"
},
"bookcases": {
"title": "開放書架地圖",
"description": "公共書架是街邊箱子、盒子、舊的電話亭或是其他存放書本的物件,每一個人都能放置或拿取書本。這份地圖收集所有類型的書架,你可以探索你附近新的書架,同時也能用免費的開放街圖帳號來快速新增你最愛的書架。"
},
"campersite": {
"title": "露營地點",
"shortDescription": "露營者尋找渡過夜晚的場地",
"description": "這個網站收集所有官方露營地點,以及那邊能排放廢水。你可以加上詳細的服務項目與價格,加上圖片以及評價。這是網站與網路 app資料則是存在開放街圖因此會永遠免費而且可以被所有 app 再利用。",
"layers": {
"0": {
"name": "露營地",
"title": {
"render": "露營地 {name}",
"mappings": {
"0": {
"then": "沒有名稱的露營地"
}
}
},
"description": "露營地",
"tagRenderings": {
"1": {
"render": "這個地方叫做 {name}",
"question": "這個地方叫做什麼?"
},
"2": {
"question": "這個地方收費嗎?",
"mappings": {
"0": {
"then": "你要付費才能使用"
},
"1": {
"then": "可以免費使用"
}
}
},
"3": {
"render": "這個地方收費 {charge}",
"question": "這個地方收多少費用?"
},
"4": {
"question": "這個地方有衛生設施嗎?",
"mappings": {
"0": {
"then": "這個地方有衛生設施"
},
"1": {
"then": "這個地方沒有衛生設施"
}
}
},
"5": {
"render": "{capacity} 露營者能夠同時使用這個地方",
"question": "多少露營者能夠待在這裡?(如果沒有明顯的空間數字或是允許車輛則可以跳過)"
},
"6": {
"question": "這個地方有提網路連線嗎?",
"mappings": {
"0": {
"then": "這裡有網路連線"
},
"1": {
"then": "這裡有網路連線"
},
"2": {
"then": "這裡沒有網路連線"
}
}
},
"7": {
"question": "你需要為網路連線付費嗎?",
"mappings": {
"0": {
"then": "你需要額外付費來使用網路連線"
},
"1": {
"then": "你不需要額外付費來使用網路連線"
}
}
},
"8": {
"question": "這個地方有廁所嗎?",
"mappings": {
@ -111,103 +187,34 @@
}
}
},
"11": {
"question": "你想要為這個地方加一般的敘述嗎?(不要重覆加先前問過或提供的資訊,請保持敘述性-請將意見留在評價)",
"render": "這個地方更詳細的資訊: {description}"
"9": {
"render": "官方網站:<a href='{website}'>{website}</a>",
"question": "這個地方有網站嗎?"
},
"10": {
"question": "這個地方有提供長期租用嗎?",
"mappings": {
"2": {
"then": "如果有長期租用合約才有可能待下來(如果你選擇這個地方則會在這份地圖消失)"
"0": {
"then": "有,這個地方有提供長期租用,但你也可以用天計算費用"
},
"1": {
"then": "沒有,這裡沒有永久的客戶"
},
"0": {
"then": "有,這個地方有提供長期租用,但你也可以用天計算費用"
}
},
"question": "這個地方有提供長期租用嗎?"
},
"9": {
"question": "這個地方有網站嗎?",
"render": "官方網站:<a href='{website}'>{website}</a>"
},
"7": {
"mappings": {
"1": {
"then": "你不需要額外付費來使用網路連線"
},
"0": {
"then": "你需要額外付費來使用網路連線"
}
},
"question": "你需要為網路連線付費嗎?"
},
"6": {
"mappings": {
"2": {
"then": "這裡沒有網路連線"
},
"1": {
"then": "這裡有網路連線"
},
"0": {
"then": "這裡有網路連線"
"then": "如果有長期租用合約才有可能待下來(如果你選擇這個地方則會在這份地圖消失)"
}
},
"question": "這個地方有提網路連線嗎?"
}
},
"5": {
"question": "多少露營者能夠待在這裡?(如果沒有明顯的空間數字或是允許車輛則可以跳過)",
"render": "{capacity} 露營者能夠同時使用這個地方"
},
"4": {
"mappings": {
"1": {
"then": "這個地方沒有衛生設施"
},
"0": {
"then": "這個地方有衛生設施"
}
},
"question": "這個地方有衛生設施嗎?"
},
"3": {
"question": "這個地方收多少費用?",
"render": "這個地方收費 {charge}"
},
"2": {
"mappings": {
"1": {
"then": "可以免費使用"
},
"0": {
"then": "你要付費才能使用"
}
},
"question": "這個地方收費嗎?"
},
"1": {
"question": "這個地方叫做什麼?",
"render": "這個地方叫做 {name}"
"11": {
"render": "這個地方更詳細的資訊: {description}",
"question": "你想要為這個地方加一般的敘述嗎?(不要重覆加先前問過或提供的資訊,請保持敘述性-請將意見留在評價)"
}
},
"presets": {
"0": {
"title": "露營地"
}
},
"description": "露營地",
"title": {
"mappings": {
"0": {
"then": "沒有名稱的露營地"
}
},
"render": "露營地 {name}"
},
"name": "露營地"
}
},
"1": {
"tagRenderings": {
@ -224,9 +231,7 @@
}
}
}
},
"description": "這個網站收集所有官方露營地點,以及那邊能排放廢水。你可以加上詳細的服務項目與價格,加上圖片以及評價。這是網站與網路 app資料則是存在開放街圖因此會永遠免費而且可以被所有 app 再利用。",
"shortDescription": "露營者尋找渡過夜晚的場地"
}
},
"charging_stations": {
"title": "充電站",
@ -323,6 +328,10 @@
}
}
},
"ghostbikes": {
"title": "幽靈單車",
"description": "<b>幽靈單車</b>是用來紀念死於交通事故的單車騎士,在事發地點附近放置白色單車。<br/><br/>在這份地圖上面,你可以看到所有在開放街圖已知的幽靈單車。有缺漏的幽靈單車嗎?所有人都可以在這邊新增或是更新資訊-只有你有(免費)開放街圖帳號。"
},
"hailhydrant": {
"title": "消防栓、滅火器、消防隊、以及急救站。",
"shortDescription": "顯示消防栓、滅火器、消防隊與急救站的地圖。",
@ -362,8 +371,8 @@
},
"surveillance": {
"title": "被監視的監視器",
"description": "在這份開放地圖,你可以找到監視鏡頭。",
"shortDescription": "監視鏡頭與其他型式的監視"
"shortDescription": "監視鏡頭與其他型式的監視",
"description": "在這份開放地圖,你可以找到監視鏡頭。"
},
"toilets": {
"title": "開放廁所地圖",
@ -373,14 +382,5 @@
"title": "樹木",
"shortDescription": "所有樹木的地圖",
"description": "繪製所有樹木!"
},
"bike_monitoring_stations": {
"description": "這個主題顯示單車監視站的即時資料",
"shortDescription": "布魯塞爾車行資料的即時單車監視站資料",
"title": "自行車監視站"
},
"ghostbikes": {
"description": "<b>幽靈單車</b>是用來紀念死於交通事故的單車騎士,在事發地點附近放置白色單車。<br/><br/>在這份地圖上面,你可以看到所有在開放街圖已知的幽靈單車。有缺漏的幽靈單車嗎?所有人都可以在這邊新增或是更新資訊-只有你有(免費)開放街圖帳號。",
"title": "幽靈單車"
}
}
}

View file

@ -220,14 +220,18 @@ function MergeTranslation(source: any, target: any, language: string, context: s
const sourceV = source[key];
const targetV = target[key]
if (typeof sourceV === "string") {
if(targetV === undefined){
target[key] = source[key];
continue;
}
if (targetV[language] === sourceV) {
// Already the same
continue;
}
if (typeof targetV === "string") {
console.error("Could not add a translation to string ", targetV, ". The translation is", sourceV, " in " + context)
continue;
throw `At context ${context}: Could not add a translation. The target object has a string at the given path, whereas the translation contains an object.\n String at target: ${targetV}\n Object at translation source: ${JSON.stringify(sourceV)}`
}
targetV[language] = sourceV;
@ -240,7 +244,7 @@ function MergeTranslation(source: any, target: any, language: string, context: s
}
if (typeof sourceV === "object") {
if (targetV === undefined) {
throw "MergingTranslations failed: source object has a path that does not exist anymore in the target: " + context
target[language] = sourceV;
} else {
MergeTranslation(sourceV, targetV, language, context + "." + key);
}
@ -256,7 +260,7 @@ function mergeLayerTranslation(layerConfig: { id: string }, path: string, transl
const id = layerConfig.id;
translationFiles.forEach((translations, lang) => {
const translationsForLayer = translations[id]
MergeTranslation(translationsForLayer, layerConfig, lang, id)
MergeTranslation(translationsForLayer, layerConfig, lang, path+":"+id)
})
}

View file

@ -77,6 +77,33 @@ export default class UtilsSpec extends T {
console.log("Restored version has ", restored.length, "chars")
equal(str, restored)
}],
["TestMerge", () => {
const source = {
abc: "def",
foo: "bar",
list0: ["overwritten"],
"list1+": ["appended"]
}
const target = {
"xyz": "omega",
"list0": ["should-be-gone"],
"list1": ["should-be-kept"],
"list2": ["should-be-untouched"]
}
const result = Utils.Merge(source, target)
equal(result.abc, "def")
equal(result.foo, "bar")
equal(result.xyz, "omega")
equal(result.list0.length, 1)
equal(result.list0[0], "overwritten")
equal(result.list1.length, 2)
equal(result.list1[0], "should-be-kept")
equal(result.list1[1], "appended")
equal(result.list2.length, 1)
equal(result.list2[0], "should-be-untouched")
}]
]);
}