Another sanity check, another bunch of fixed layers; add tagrendering-steal possibility, add some styling to TV-theme

This commit is contained in:
pietervdvn 2021-11-10 18:42:31 +01:00
parent 10ac6a72e2
commit 746273f594
57 changed files with 602 additions and 940 deletions

View file

@ -1,16 +1,18 @@
import * as known_layers from "../assets/generated/known_layers_and_themes.json"
import {Utils} from "../Utils";
import LayerConfig from "../Models/ThemeConfig/LayerConfig";
import BaseUIElement from "../UI/BaseUIElement";
import Combine from "../UI/Base/Combine";
import Title from "../UI/Base/Title";
import List from "../UI/Base/List";
import {AllKnownLayouts} from "./AllKnownLayouts";
import {isNullOrUndefined} from "util";
import {Layer} from "leaflet";
import {TagRenderingConfigJson} from "../Models/ThemeConfig/Json/TagRenderingConfigJson";
import SharedTagRenderings from "./SharedTagRenderings";
import {LayerConfigJson} from "../Models/ThemeConfig/Json/LayerConfigJson";
import WithContextLoader from "../Models/ThemeConfig/WithContextLoader";
export default class AllKnownLayers {
public static inited = (_ => {
WithContextLoader.getKnownTagRenderings = (id => AllKnownLayers.getTagRendering(id))
return true
})()
// Must be below the list...
public static sharedLayers: Map<string, LayerConfig> = AllKnownLayers.getSharedLayers();
@ -64,7 +66,7 @@ export default class AllKnownLayers {
return sharedLayers;
}
private static getSharedLayersJson(): Map<string, any> {
private static getSharedLayersJson(): Map<string, LayerConfigJson> {
const sharedLayers = new Map<string, any>();
for (const layer of known_layers.layers) {
sharedLayers.set(layer.id, layer);
@ -73,4 +75,41 @@ export default class AllKnownLayers {
return sharedLayers;
}
/**
* Gets the appropriate tagRenderingJSON
* Allows to steal them from other layers.
* This will add the tags of the layer to the configuration though!
* @param renderingId
*/
static getTagRendering(renderingId: string): TagRenderingConfigJson {
if(renderingId.indexOf(".") < 0){
return SharedTagRenderings.SharedTagRenderingJson.get(renderingId)
}
const [layerId, id] = renderingId.split(".")
const layer = AllKnownLayers.getSharedLayersJson().get(layerId)
if(layer === undefined){
if(Utils.runningFromConsole){
// Probably generating the layer overview
return <TagRenderingConfigJson> {
id: "dummy"
}
}
throw "Builtin layer "+layerId+" not found"
}
const renderings = layer?.tagRenderings ?? []
for (const rendering of renderings) {
if(rendering["id"] === id){
const found = <TagRenderingConfigJson> JSON.parse(JSON.stringify(rendering))
if(found.condition === undefined){
found.condition = layer.source.osmTags
}else{
found.condition = {and: [found.condition, layer.source.osmTags]}
}
return found
}
}
throw `The rendering with id ${id} was not found in the builtin layer ${layerId}. Try one of ${Utils.NoNull(renderings.map(r => r["id"])).join(", ")}`
}
}

View file

@ -43,4 +43,5 @@ export default class SharedTagRenderings {
return dict;
}
}

View file

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

View file

@ -173,10 +173,47 @@ export default class TagRenderingConfig {
throw `${context}: A question is defined, but no mappings nor freeform (key) are. The question is ${this.question.txt} at ${context}`
}
if (this.freeform && this.render === undefined) {
throw `${context}: Detected a freeform key without rendering... Key: ${this.freeform.key} in ${context}`
if (this.freeform) {
if(this.render === undefined){
throw `${context}: Detected a freeform key without rendering... Key: ${this.freeform.key} in ${context}`
}
for (const ln in this.render.translations) {
const txt :string = this.render.translations[ln]
if(txt === ""){
throw context+" Rendering for language "+ln+" is empty"
}
if(txt.indexOf("{"+this.freeform.key+"}") >= 0){
continue
}
if(txt.indexOf("{canonical("+this.freeform.key+")") >= 0){
continue
}
if(this.freeform.type === "opening_hours" && txt.indexOf("{opening_hours_table(") >= 0){
continue
}
if(this.freeform.type === "wikidata" && txt.indexOf("{wikipedia("+this.freeform.key) >= 0){
continue
}
if(this.freeform.key === "wikidata" && txt.indexOf("{wikipedia()") >= 0){
continue
}
throw `${context}: The rendering for language ${ln} does not contain the freeform key {${this.freeform.key}}. This is a bug, as this rendering should show exactly this freeform key!\nThe rendering is ${txt} `
}
}
if (this.id === "questions" && this.render !== undefined) {
for (const ln in this.render.translations) {
const txt :string = this.render.translations[ln]
if(txt.indexOf("{questions}") >= 0){
continue
}
throw `${context}: The rendering for language ${ln} does not contain {questions}. This is a bug, as this rendering should include exactly this to trigger those questions to be shown!`
}
}
if (this.render && this.question && this.freeform === undefined) {
throw `${context}: Detected a tagrendering which takes input without freeform key in ${context}; the question is ${this.question.txt}`
}
@ -238,7 +275,7 @@ export default class TagRenderingConfig {
public IsKnown(tags: any): boolean {
if (this.condition &&
!this.condition.matchesProperties(tags)) {
// Filtered away by the condition
// Filtered away by the condition, so it is kindof known
return true;
}
if (this.multiAnswer) {

View file

@ -6,6 +6,10 @@ import {Utils} from "../../Utils";
export default class WithContextLoader {
protected readonly _context: string;
private readonly _json: any;
public static getKnownTagRenderings : ((id: string) => TagRenderingConfigJson)= function(id) {
return SharedTagRenderings.SharedTagRenderingJson.get(id)
}
constructor(json: any, context: string) {
this._json = json;
@ -71,7 +75,7 @@ export default class WithContextLoader {
continue;
}
let sharedJson = SharedTagRenderings.SharedTagRenderingJson.get(renderingId)
let sharedJson = WithContextLoader.getKnownTagRenderings(renderingId)
if (sharedJson === undefined) {
const keys = Array.from(SharedTagRenderings.SharedTagRenderingJson.keys());
throw `Predefined tagRendering ${renderingId} not found in ${context}.\n Try one of ${keys.join(

View file

@ -44,6 +44,11 @@ export default class DefaultGUI {
this.SetupUIElements();
this.SetupMap()
if(state.layoutToUse.customCss !== undefined && window.location.pathname.indexOf("index") >= 0){
Utils.LoadCustomCss(state.layoutToUse.customCss)
}
}
public setupClickDialogOnMap(filterViewIsOpened: UIEventSource<boolean>, state: FeaturePipelineState) {

View file

@ -17,6 +17,7 @@ import {Translation} from "../i18n/Translation";
import {Utils} from "../../Utils";
import {SubstitutedTranslation} from "../SubstitutedTranslation";
import MoveWizard from "./MoveWizard";
import Toggle from "../Input/Toggle";
export default class FeatureInfoBox extends ScrollableFullScreen {
@ -51,13 +52,13 @@ export default class FeatureInfoBox extends ScrollableFullScreen {
private static GenerateContent(tags: UIEventSource<any>,
layerConfig: LayerConfig): BaseUIElement {
let questionBoxes: Map<string, BaseUIElement> = new Map<string, BaseUIElement>();
let questionBoxes: Map<string, QuestionBox> = new Map<string, QuestionBox>();
const allGroupNames = Utils.Dedup(layerConfig.tagRenderings.map(tr => tr.group))
if (State.state.featureSwitchUserbadge.data) {
for (const groupName of allGroupNames) {
const questions = layerConfig.tagRenderings.filter(tr => tr.group === groupName)
const questionBox = new QuestionBox(tags, questions, layerConfig.units);
const questionBox = new QuestionBox({tagsSource: tags, tagRenderings: questions, units:layerConfig.units});
questionBoxes.set(groupName, questionBox)
}
}
@ -75,7 +76,20 @@ export default class FeatureInfoBox extends ScrollableFullScreen {
const questionBox = questionBoxes.get(tr.group)
questionBoxes.delete(tr.group)
renderingsForGroup.push(questionBox)
if(tr.render !== undefined){
const renderedQuestion = new TagRenderingAnswer(tags, tr, tr.group + " questions", "", {
specialViz: new Map<string, BaseUIElement>([["questions", questionBox]])
})
const possiblyHidden = new Toggle(
renderedQuestion,
undefined,
questionBox.currentQuestion.map(i => i !== undefined)
)
renderingsForGroup.push(possiblyHidden)
}else{
renderingsForGroup.push(questionBox)
}
} else {
let classes = innerClasses
let isHeader = renderingsForGroup.length === 0 && i > 0

View file

@ -1,7 +1,6 @@
import {UIEventSource} from "../../Logic/UIEventSource";
import TagRenderingQuestion from "./TagRenderingQuestion";
import Translations from "../i18n/Translations";
import State from "../../State";
import Combine from "../Base/Combine";
import BaseUIElement from "../BaseUIElement";
import {VariableUiElement} from "../Base/VariableUIElement";
@ -14,71 +13,88 @@ import Lazy from "../Base/Lazy";
* Generates all the questions, one by one
*/
export default class QuestionBox extends VariableUiElement {
public readonly skippedQuestions: UIEventSource<number[]>;
public readonly currentQuestion: UIEventSource<number | undefined>;
constructor(tagsSource: UIEventSource<any>, tagRenderings: TagRenderingConfig[], units: Unit[]) {
constructor(options: { tagsSource: UIEventSource<any>, tagRenderings: TagRenderingConfig[], units: Unit[] }) {
const skippedQuestions: UIEventSource<number[]> = new UIEventSource<number[]>([])
tagRenderings = tagRenderings
const tagsSource = options.tagsSource
const units = options.units
const tagRenderings = options.tagRenderings
.filter(tr => tr.question !== undefined)
.filter(tr => tr.question !== null);
.filter(tr => tr.question !== null)
super(tagsSource.map(tags => {
if (tags === undefined) {
return undefined;
const tagRenderingQuestions = tagRenderings
.map((tagRendering, i) =>
new Lazy(() => new TagRenderingQuestion(tagsSource, tagRendering,
{
units: units,
afterSave: () => {
// We save and indicate progress by pinging and recalculating
skippedQuestions.ping();
},
cancelButton: Translations.t.general.skip.Clone()
.SetClass("btn btn-secondary mr-3")
.onClick(() => {
skippedQuestions.data.push(i);
skippedQuestions.ping();
})
}
)));
const skippedQuestionsButton = Translations.t.general.skippedQuestions
.onClick(() => {
skippedQuestions.setData([]);
})
const currentQuestion: UIEventSource<number | undefined> = tagsSource.map(tags => {
if (tags === undefined) {
return undefined;
}
for (let i = 0; i < tagRenderingQuestions.length; i++) {
let tagRendering = tagRenderings[i];
if (skippedQuestions.data.indexOf(i) >= 0) {
continue;
}
if (tagRendering.IsKnown(tags)) {
continue;
}
if (tagRendering.condition &&
!tagRendering.condition.matchesProperties(tags)) {
// Filtered away by the condition, so it is kindof known
continue;
}
const tagRenderingQuestions = tagRenderings
.map((tagRendering, i) =>
new Lazy(() => new TagRenderingQuestion(tagsSource, tagRendering,
{
units: units,
afterSave: () => {
// We save and indicate progress by pinging and recalculating
skippedQuestions.ping();
},
cancelButton: Translations.t.general.skip.Clone()
.SetClass("btn btn-secondary mr-3")
.onClick(() => {
skippedQuestions.data.push(i);
skippedQuestions.ping();
})
}
)));
const skippedQuestionsButton = Translations.t.general.skippedQuestions
.onClick(() => {
skippedQuestions.setData([]);
})
// this value is NOT known - this is the question we have to show!
return i
}
return undefined; // The questions are depleted
}, [skippedQuestions])
const allQuestions: BaseUIElement[] = []
for (let i = 0; i < tagRenderingQuestions.length; i++) {
let tagRendering = tagRenderings[i];
if (tagRendering.IsKnown(tags)) {
continue;
}
if (skippedQuestions.data.indexOf(i) >= 0) {
continue;
}
// this value is NOT known - we show the questions for it
if (State.state.featureSwitchShowAllQuestions.data || allQuestions.length == 0) {
allQuestions.push(tagRenderingQuestions[i])
}
super(currentQuestion.map(i => {
const els: BaseUIElement[] = []
if (i !== undefined) {
els.push(tagRenderingQuestions[i])
}
if (skippedQuestions.data.length > 0) {
allQuestions.push(skippedQuestionsButton)
els.push(skippedQuestionsButton)
}
return new Combine(allQuestions).SetClass("block mb-8")
}, [skippedQuestions])
return new Combine(els).SetClass("block mb-8")
})
)
this.skippedQuestions = skippedQuestions;
this.currentQuestion = currentQuestion
}
}

View file

@ -12,7 +12,9 @@ import TagRenderingConfig from "../../Models/ThemeConfig/TagRenderingConfig";
export default class TagRenderingAnswer extends VariableUiElement {
constructor(tagsSource: UIEventSource<any>, configuration: TagRenderingConfig,
contentClasses: string = "", contentStyle: string = "") {
contentClasses: string = "", contentStyle: string = "", options?:{
specialViz: Map<string, BaseUIElement>
}) {
if (configuration === undefined) {
throw "Trying to generate a tagRenderingAnswer without configuration..."
}
@ -35,7 +37,7 @@ export default class TagRenderingAnswer extends VariableUiElement {
return undefined;
}
const valuesToRender: BaseUIElement[] = trs.map(tr => new SubstitutedTranslation(tr, tagsSource))
const valuesToRender: BaseUIElement[] = trs.map(tr => new SubstitutedTranslation(tr, tagsSource, options?.specialViz))
if (valuesToRender.length === 1) {
return valuesToRender[0];
} else if (valuesToRender.length > 1) {

View file

@ -224,7 +224,7 @@ Note that these values can be prepare with javascript in the theme by using a [c
link.href = location;
link.media = 'all';
head.appendChild(link);
console.log("Added custom layout ", location)
console.log("Added custom css file ", location)
}
/**

View file

@ -244,9 +244,9 @@
},
{
"render": {
"en": "Space between barriers (along the length of the road): {spacing} m",
"nl": "Ruimte tussen barrières (langs de lengte van de weg): {spacing} m",
"de": "Abstand zwischen den Barrieren (entlang der Straße): {spacing} m"
"en": "Space between barriers (along the length of the road): {width:separation} m",
"nl": "Ruimte tussen barrières (langs de lengte van de weg): {width:separation} m",
"de": "Abstand zwischen den Barrieren (entlang der Straße): {width:separation} m"
},
"question": {
"en": "How much space is there between the barriers (along the length of the road)?",
@ -271,9 +271,9 @@
},
{
"render": {
"en": "Width of opening: {opening} m",
"nl": "Breedte van de opening: {opening} m",
"de": "Breite der Öffnung: {opening} m"
"en": "Width of opening: {width:opening} m",
"nl": "Breedte van de opening: {width:opening} m",
"de": "Breite der Öffnung: {width:opening} m"
},
"question": {
"en": "How wide is the smallest opening next to the barriers?",

View file

@ -45,27 +45,6 @@
"tagRenderings": [
"images",
{
"render": {
"en": "Backrest",
"de": "Rückenlehne",
"fr": "Dossier",
"nl": "Rugleuning",
"es": "Respaldo",
"hu": "Háttámla",
"id": "Sandaran",
"it": "Schienale",
"ru": "Спинка",
"zh_Hans": "靠背",
"zh_Hant": "靠背",
"nb_NO": "Rygglene",
"fi": "Selkänoja",
"pl": "Oparcie",
"pt_BR": "Encosto",
"pt": "Encosto"
},
"freeform": {
"key": "backrest"
},
"mappings": [
{
"if": "backrest=yes",

View file

@ -116,26 +116,38 @@
"id": "bench_at_pt-name"
},
{
"render": {
"en": "Stand up bench",
"de": "Stehbank",
"fr": "Banc assis debout",
"nl": "Leunbank",
"it": "Panca in piedi",
"zh_Hans": "站立长凳",
"ru": "Встаньте на скамейке",
"zh_Hant": "站立長椅"
"id": "bench_at_pt-bench_type",
"question": {
"en": "What kind of bench is this?",
"nl": "Wat voor soort bank is dit?"
},
"freeform": {
"key": "bench",
"addExtraTags": []
},
"condition": {
"and": [
"bench=stand_up_bench"
]
},
"id": "bench_at_pt-bench"
"mappings": [
{
"if": "bench=yes",
"then": {
"en": "There is a normal, sit-down bench here"
}
},
{
"if": "bench=stand_up_bench",
"then": {
"en": "Stand up bench",
"de": "Stehbank",
"fr": "Banc assis debout",
"nl": "Leunbank",
"it": "Panca in piedi",
"zh_Hans": "站立长凳",
"ru": "Встаньте на скамейке",
"zh_Hant": "站立長椅"
}
},
{
"if": "bench=no",
"then": {
"en": "There is no bench here"
}
}
]
}
],
"mapRendering": [

View file

@ -81,15 +81,15 @@
"pt": "Esta máquina de venda automática ainda está operacional?"
},
"render": {
"en": "The operational status is <i>{operational_status</i>",
"en": "The operational status is <i>{operational_status}</i>",
"nl": "Deze verkoopsautomaat is <i>{operational_status}</i>",
"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>",
"zh_Hant": "運作狀態是 <i>{operational_status</i>",
"pt_BR": "O estado operacional é: <i>{operational_status</i>",
"pt": "O estado operacional é: <i>{operational_status</i>"
"de": "Der Betriebszustand ist <i>{operational_status}</i>",
"ru": "Рабочий статус: <i> {operational_status}</i>",
"zh_Hant": "運作狀態是 <i>{operational_status}</i>",
"pt_BR": "O estado operacional é: <i>{operational_status}</i>",
"pt": "O estado operacional é: <i>{operational_status}</i>"
},
"freeform": {
"key": "operational_status"

View file

@ -72,35 +72,50 @@
"tagRenderings": [
"images",
{
"question": "How much does it cost to use the cleaning service?",
"render": "Using the cleaning service costs {charge}",
"question": {
"en": "How much does it cost to use the cleaning service?"
},
"render": {
"en": "Using the cleaning service costs {service:bicycle:cleaning:charge}"
},
"condition": "amenity!=bike_wash",
"freeform": {
"key": "service:bicycle:cleaning:charge",
"addExtraTags": [
"service:bicycle:cleaning:fee=yes"
]
],
"inline": true
},
"mappings": [
{
"if": "service:bicycle:cleaning:fee=no&service:bicycle:cleaning:charge=",
"then": "The cleaning service is free to use"
"then": {
"en": "The cleaning service is free to use"
}
},
{
"if": "service:bicycle:cleaning:fee=no&",
"then": "Free to use",
"if": "service:bicycle:cleaning:fee=no",
"then": {
"en": "Free to use"
},
"hideInAnswer": true
},
{
"if": "service:bicycle:cleaning:fee=yes",
"then": "The cleaning service has a fee"
"then": {
"en": "The cleaning service has a fee, but the amount is not known"
}
}
],
"id": "bike_cleaning-service:bicycle:cleaning:charge"
},
{
"question": "How much does it cost to use the cleaning service?",
"render": "Using the cleaning service costs {charge}",
"question": {
"en": "How much does it cost to use the cleaning service?"
},
"render": {
"en": "Using the cleaning service costs {charge}"
},
"condition": "amenity=bike_wash",
"freeform": {
"key": "charge",
@ -111,16 +126,22 @@
"mappings": [
{
"if": "fee=no&charge=",
"then": "Free to use cleaning service"
"then": {
"en": "Free to use cleaning service"
}
},
{
"if": "fee=no&",
"then": "Free to use",
"if": "fee=no",
"then": {
"en": "Free to use"
},
"hideInAnswer": true
},
{
"if": "fee=yes",
"then": "The cleaning service has a fee"
"then": {
"en": "The cleaning service has a fee"
}
}
],
"id": "bike_cleaning-charge"

View file

@ -231,8 +231,8 @@
"de": "Dieses Fahrradgeschäft heißt {name}",
"it": "Questo negozio di biciclette è chiamato {name}",
"ru": "Этот магазин велосипедов называется {name}",
"pt_BR": "Esta loja de bicicletas se chama {nome}",
"pt": "Esta loja de bicicletas se chama {nome}"
"pt_BR": "Esta loja de bicicletas se chama {name}",
"pt": "Esta loja de bicicletas se chama {name}"
},
"freeform": {
"key": "name"
@ -664,32 +664,7 @@
}
]
},
{
"question": "How much does it cost to use the cleaning service?",
"render": "Using the cleaning service costs {charge}",
"freeform": {
"key": "service:bicycle:cleaning:charge",
"addExtraTags": [
"service:bicycle:cleaning:fee=yes"
]
},
"mappings": [
{
"if": "service:bicycle:cleaning:fee=no&service:bicycle:cleaning:charge=",
"then": "The cleaning service is free to use"
},
{
"if": "service:bicycle:cleaning:fee=no&",
"then": "Free to use",
"hideInAnswer": true
},
{
"if": "service:bicycle:cleaning:fee=yes",
"then": "The cleaning service has a fee"
}
],
"id": "bike_cleaning-service:bicycle:cleaning:charge"
}
"bike_cleaning.bike_cleaning-service:bicycle:cleaning:charge"
],
"presets": [
{

View file

@ -23,8 +23,7 @@
},
"description": {
"en": "A charging station",
"nl": "Oplaadpunten",
"de": "Eine Ladestation"
"nl": "Oplaadpunten"
},
"tagRenderings": [
"images",
@ -33,8 +32,7 @@
"#": "Allowed vehicle types",
"question": {
"en": "Which vehicles are allowed to charge here?",
"nl": "Welke voertuigen kunnen hier opgeladen worden?",
"de": "Welche Fahrzeuge dürfen hier geladen werden?"
"nl": "Welke voertuigen kunnen hier opgeladen worden?"
},
"multiAnswer": true,
"mappings": [
@ -43,8 +41,7 @@
"ifnot": "bicycle=no",
"then": {
"en": "<b>Bcycles</b> can be charged here",
"nl": "<b>Fietsen</b> kunnen hier opgeladen worden",
"de": "<b>Fahrräder</b> können hier geladen werden"
"nl": "<b>Fietsen</b> kunnen hier opgeladen worden"
}
},
{
@ -52,8 +49,7 @@
"ifnot": "motorcar=no",
"then": {
"en": "<b>Cars</b> can be charged here",
"nl": "<b>Elektrische auto's</b> kunnen hier opgeladen worden",
"de": "<b>Autos</b> können hier geladen werden"
"nl": "<b>Elektrische auto's</b> kunnen hier opgeladen worden"
}
},
{
@ -61,8 +57,7 @@
"ifnot": "scooter=no",
"then": {
"en": "<b>Scooters</b> can be charged here",
"nl": "<b>Electrische scooters</b> (snorfiets of bromfiets) kunnen hier opgeladen worden",
"de": "<b> Roller</b> können hier geladen werden"
"nl": "<b>Electrische scooters</b> (snorfiets of bromfiets) kunnen hier opgeladen worden"
}
},
{
@ -70,8 +65,7 @@
"ifnot": "hgv=no",
"then": {
"en": "<b>Heavy good vehicles</b> (such as trucks) can be charged here",
"nl": "<b>Vrachtwagens</b> kunnen hier opgeladen worden",
"de": "<b>Lastkraftwagen</b> (LKW) können hier geladen werden"
"nl": "<b>Vrachtwagens</b> kunnen hier opgeladen worden"
}
},
{
@ -79,8 +73,7 @@
"ifnot": "bus=no",
"then": {
"en": "<b>Buses</b> can be charged here",
"nl": "<b>Bussen</b> kunnen hier opgeladen worden",
"de": "<b>Busse</b> können hier geladen werden"
"nl": "<b>Bussen</b> kunnen hier opgeladen worden"
}
}
]
@ -89,13 +82,11 @@
"id": "access",
"question": {
"en": "Who is allowed to use this charging station?",
"nl": "Wie mag er dit oplaadpunt gebruiken?",
"de": "Wer darf diese Ladestation benutzen?"
"nl": "Wie mag er dit oplaadpunt gebruiken?"
},
"render": {
"en": "Access is {access}",
"nl": "Toegang voor {access}",
"de": "Zugang ist {access}"
"nl": "Toegang voor {access}"
},
"freeform": {
"key": "access",
@ -144,13 +135,11 @@
"id": "capacity",
"render": {
"en": "{capacity} vehicles can be charged here at the same time",
"nl": "{capacity} voertuigen kunnen hier op hetzelfde moment opgeladen worden",
"de": "{capacity} Fahrzeuge können hier gleichzeitig geladen werden"
"nl": "{capacity} voertuigen kunnen hier op hetzelfde moment opgeladen worden"
},
"question": {
"en": "How much vehicles can be charged here at the same time?",
"nl": "Hoeveel voertuigen kunnen hier opgeladen worden?",
"de": "Wie viele Fahrzeuge können hier gleichzeitig geladen werden?"
"nl": "Hoeveel voertuigen kunnen hier opgeladen worden?"
},
"freeform": {
"key": "capacity",
@ -161,8 +150,7 @@
"id": "Available_charging_stations (generated)",
"question": {
"en": "Which charging connections are available here?",
"nl": "Welke aansluitingen zijn hier beschikbaar?",
"de": "Welche Ladestationen gibt es hier?"
"nl": "Welke aansluitingen zijn hier beschikbaar?"
},
"multiAnswer": true,
"mappings": [
@ -263,8 +251,7 @@
},
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Chademo_type4.svg'/> <span><b>Chademo</b></span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Chademo_type4.svg'/> <span><b>Chademo</b></span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Chademo_type4.svg'/> <span><b>Chademo</b></span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Chademo_type4.svg'/> <span><b>Chademo</b></span></div>"
},
"hideInAnswer": true
},
@ -273,8 +260,7 @@
"ifnot": "socket:type1_cable=",
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 with cable</b> (J1772)</span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 met kabel</b> (J1772)</span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Typ 1 mit Kabel</b> (J1772)</span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 met kabel</b> (J1772)</span></div>"
},
"hideInAnswer": {
"or": [
@ -312,8 +298,7 @@
},
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 with cable</b> (J1772)</span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 met kabel</b> (J1772)</span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Typ 1 mit Kabel</b> (J1772)</span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 met kabel</b> (J1772)</span></div>"
},
"hideInAnswer": true
},
@ -322,8 +307,7 @@
"ifnot": "socket:type1=",
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 <i>without</i> cable</b> (J1772)</span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 <i>zonder</i> kabel</b> (J1772)</span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Typ 1 <i>ohne</i> Kabel</b> (J1772)</span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 <i>zonder</i> kabel</b> (J1772)</span></div>"
},
"hideInAnswer": {
"or": [
@ -361,8 +345,7 @@
},
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 <i>without</i> cable</b> (J1772)</span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 <i>zonder</i> kabel</b> (J1772)</span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Typ 1 <i>ohne</i> Kabel</b> (J1772)</span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 <i>zonder</i> kabel</b> (J1772)</span></div>"
},
"hideInAnswer": true
},
@ -371,8 +354,7 @@
"ifnot": "socket:type1_combo=",
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Type 1 CCS</b> (aka Type 1 Combo)</span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Typ 1 CCS</b> (auch bekannt als Typ 1 Combo)</span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</span></div>"
},
"hideInAnswer": {
"or": [
@ -410,8 +392,7 @@
},
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Type 1 CCS</b> (aka Type 1 Combo)</span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Typ 1 CCS</b> (auch bekannt als Typ 1 Combo)</span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</span></div>"
},
"hideInAnswer": true
},
@ -420,8 +401,7 @@
"ifnot": "socket:tesla_supercharger=",
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>"
},
"hideInAnswer": {
"or": [
@ -459,8 +439,7 @@
},
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>"
},
"hideInAnswer": true
},
@ -469,8 +448,7 @@
"ifnot": "socket:type2=",
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Type 2</b> (mennekes)</span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Type 2</b> (mennekes)</span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Typ 2</b> (Mennekes)</span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Type 2</b> (mennekes)</span></div>"
},
"hideInAnswer": {
"or": [
@ -508,8 +486,7 @@
},
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Type 2</b> (mennekes)</span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Type 2</b> (mennekes)</span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Typ 2</b> (Mennekes)</span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Type 2</b> (mennekes)</span></div>"
},
"hideInAnswer": true
},
@ -518,8 +495,7 @@
"ifnot": "socket:type2_combo=",
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Type 2 CCS</b> (mennekes)</span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Type 2 CCS</b> (mennekes)</span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Typ 2 CCS</b> (Mennekes)</span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Type 2 CCS</b> (mennekes)</span></div>"
},
"hideInAnswer": {
"or": [
@ -557,8 +533,7 @@
},
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Type 2 CCS</b> (mennekes)</span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Type 2 CCS</b> (mennekes)</span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Typ 2 CCS</b> (Mennekes)</span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Type 2 CCS</b> (mennekes)</span></div>"
},
"hideInAnswer": true
},
@ -567,8 +542,7 @@
"ifnot": "socket:type2_cable=",
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Type 2 with cable</b> (mennekes)</span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Type 2 met kabel</b> (J1772)</span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Typ 2 mit Kabel</b> (Mennekes)</span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Type 2 met kabel</b> (J1772)</span></div>"
},
"hideInAnswer": {
"or": [
@ -606,8 +580,7 @@
},
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Type 2 with cable</b> (mennekes)</span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Type 2 met kabel</b> (J1772)</span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Typ 2 mit Kabel</b> (Mennekes)</span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Type 2 met kabel</b> (J1772)</span></div>"
},
"hideInAnswer": true
},
@ -616,8 +589,7 @@
"ifnot": "socket:tesla_supercharger_ccs=",
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (a branded type2_css)</span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (Typ 2 CSS)</span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</span></div>"
},
"hideInAnswer": {
"or": [
@ -655,8 +627,7 @@
},
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (a branded type2_css)</span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (Typ 2 CSS)</span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</span></div>"
},
"hideInAnswer": true
},
@ -769,8 +740,7 @@
"ifnot": "socket:USB-A=",
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> to charge phones and small electronics</span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> om GSMs en kleine electronica op te laden</span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> zum Laden von Smartphones oder Elektrokleingeräten</span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> om GSMs en kleine electronica op te laden</span></div>"
}
},
{
@ -782,8 +752,7 @@
},
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> to charge phones and small electronics</span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> om GSMs en kleine electronica op te laden</span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> zum Laden von Smartphones und Elektrokleingeräten</span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> om GSMs en kleine electronica op te laden</span></div>"
},
"hideInAnswer": true
},
@ -835,8 +804,7 @@
"ifnot": "socket:bosch_5pin=",
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect with 5 pins</b> and cable</span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect met 5 pinnen</b> aan een kabel</span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect mit 5 Pins</b> und Kabel</span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect met 5 pinnen</b> aan een kabel</span></div>"
},
"hideInAnswer": {
"or": [
@ -870,8 +838,7 @@
},
"then": {
"en": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect with 5 pins</b> and cable</span></div>",
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect met 5 pinnen</b> aan een kabel</span></div>",
"de": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect mit 5 Pins</b> und Kabel</span></div>"
"nl": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect met 5 pinnen</b> aan een kabel</span></div>"
},
"hideInAnswer": true
}
@ -2893,21 +2860,14 @@
},
"question": {
"en": "When is this charging station opened?",
"nl": "Wanneer is dit oplaadpunt beschikbaar??",
"de": "Wann ist diese Ladestation geöffnet?",
"it": "Quali sono gli orari di apertura di questa stazione di ricarica?",
"ja": "この充電ステーションはいつオープンしますか?",
"nb_NO": "Når åpnet denne ladestasjonen?",
"ru": "В какое время работает эта зарядная станция?",
"zh_Hant": "何時是充電站開放使用的時間?"
"nl": "Wanneer is dit oplaadpunt beschikbaar??"
},
"mappings": [
{
"if": "opening_hours=24/7",
"then": {
"en": "24/7 opened (including holidays)",
"nl": "24/7 open - ook tijdens vakanties",
"de": "durchgehend geöffnet (auch an Feiertagen)"
"nl": "24/7 open - ook tijdens vakanties"
}
}
]
@ -3016,8 +2976,7 @@
"ifnot": "payment:app=no",
"then": {
"en": "Payment is done using a dedicated app",
"nl": "Betalen via een app van het netwerk",
"de": "Bezahlung mit einer speziellen App"
"nl": "Betalen via een app van het netwerk"
}
},
{
@ -3025,8 +2984,7 @@
"ifnot": "payment:membership_card=no",
"then": {
"en": "Payment is done using a membership card",
"nl": "Betalen via een lidkaart van het netwerk",
"de": "Bezahlung mit einer Mitgliedskarte"
"nl": "Betalen via een lidkaart van het netwerk"
}
}
]
@ -3037,8 +2995,7 @@
"#": "In some cases, charging is free but one has to be authenticated. We only ask for authentication if fee is no (or unset). By default one sees the questions for either the payment options or the authentication options, but normally not both",
"question": {
"en": "What kind of authentication is available at the charging station?",
"nl": "Hoe kan men zich aanmelden aan dit oplaadstation?",
"de": "Welche Authentifizierung ist an der Ladestation möglich?"
"nl": "Hoe kan men zich aanmelden aan dit oplaadstation?"
},
"multiAnswer": true,
"mappings": [
@ -3047,8 +3004,7 @@
"ifnot": "authentication:membership_card=no",
"then": {
"en": "Authentication by a membership card",
"nl": "Aanmelden met een lidkaart is mogelijk",
"de": "Authentifizierung durch eine Mitgliedskarte"
"nl": "Aanmelden met een lidkaart is mogelijk"
}
},
{
@ -3056,8 +3012,7 @@
"ifnot": "authentication:app=no",
"then": {
"en": "Authentication by an app",
"nl": "Aanmelden via een applicatie is mogelijk",
"de": "Authentifizierung durch eine App"
"nl": "Aanmelden via een applicatie is mogelijk"
}
},
{
@ -3065,8 +3020,7 @@
"ifnot": "authentication:phone_call=no",
"then": {
"en": "Authentication via phone call is available",
"nl": "Aanmelden door te bellen naar een telefoonnummer is mogelijk",
"de": "Authentifizierung per Anruf ist möglich"
"nl": "Aanmelden door te bellen naar een telefoonnummer is mogelijk"
}
},
{
@ -3074,8 +3028,7 @@
"ifnot": "authentication:short_message=no",
"then": {
"en": "Authentication via SMS is available",
"nl": "Aanmelden via SMS is mogelijk",
"de": "Authentifizierung per Anruf ist möglich"
"nl": "Aanmelden via SMS is mogelijk"
}
},
{
@ -3083,8 +3036,7 @@
"ifnot": "authentication:nfc=no",
"then": {
"en": "Authentication via NFC is available",
"nl": "Aanmelden via NFC is mogelijk",
"de": "Authentifizierung über NFC ist möglich"
"nl": "Aanmelden via NFC is mogelijk"
}
},
{
@ -3092,8 +3044,7 @@
"ifnot": "authentication:money_card=no",
"then": {
"en": "Authentication via Money Card is available",
"nl": "Aanmelden met Money Card is mogelijk",
"de": "Authentifizierung über Geldkarte ist möglich"
"nl": "Aanmelden met Money Card is mogelijk"
}
},
{
@ -3101,8 +3052,7 @@
"ifnot": "authentication:debit_card=no",
"then": {
"en": "Authentication via debit card is available",
"nl": "Aanmelden met een betaalkaart is mogelijk",
"de": "Authentifizierung per Debitkarte ist möglich"
"nl": "Aanmelden met een betaalkaart is mogelijk"
}
},
{
@ -3110,8 +3060,7 @@
"ifnot": "authentication:none=no",
"then": {
"en": "Charging here is (also) possible without authentication",
"nl": "Hier opladen is (ook) mogelijk zonder aan te melden",
"de": "Das Aufladen ist hier (auch) ohne Authentifizierung möglich"
"nl": "Hier opladen is (ook) mogelijk zonder aan te melden"
}
}
],
@ -3126,13 +3075,11 @@
"id": "Auth phone",
"render": {
"en": "Authenticate by calling or SMS'ing to <a href='tel:{authentication:phone_call:number}'>{authentication:phone_call:number}</a>",
"nl": "Aanmelden door te bellen of te SMS'en naar <a href='tel:{authentication:phone_call:number}'>{authentication:phone_call:number}</a>",
"de": "Authentifizierung durch Anruf oder SMS an <a href='tel:{authentication:phone_call:number}'>{authentication:phone_call:number}</a>"
"nl": "Aanmelden door te bellen of te SMS'en naar <a href='tel:{authentication:phone_call:number}'>{authentication:phone_call:number}</a>"
},
"question": {
"en": "What's the phone number for authentication call or SMS?",
"nl": "Wat is het telefoonnummer dat men moet bellen of SMS'en om zich aan te melden?",
"de": "Wie lautet die Telefonnummer für den Authentifizierungsanruf oder die SMS?"
"nl": "Wat is het telefoonnummer dat men moet bellen of SMS'en om zich aan te melden?"
},
"freeform": {
"key": "authentication:phone_call:number",
@ -3149,24 +3096,21 @@
"id": "maxstay",
"question": {
"en": "What is the maximum amount of time one is allowed to stay here?",
"nl": "Hoelang mag een voertuig hier blijven staan?",
"de": "Was ist die Höchstdauer des Aufenthalts hier?"
"nl": "Hoelang mag een voertuig hier blijven staan?"
},
"freeform": {
"key": "maxstay"
},
"render": {
"en": "One can stay at most <b>{canonical(maxstay)}</b>",
"nl": "De maximale parkeertijd hier is <b>{canonical(maxstay)}</b>",
"de": "Die maximale Parkzeit beträgt <b>{canonical(maxstay)}</b>"
"nl": "De maximale parkeertijd hier is <b>{canonical(maxstay)}</b>"
},
"mappings": [
{
"if": "maxstay=unlimited",
"then": {
"en": "No timelimit on leaving your vehicle here",
"nl": "Geen maximum parkeertijd",
"de": "Keine Höchstparkdauer"
"nl": "Geen maximum parkeertijd"
}
}
],
@ -3183,22 +3127,11 @@
"id": "Network",
"render": {
"en": "Part of the network <b>{network}</b>",
"nl": "Maakt deel uit van het <b>{network}</b>-netwerk",
"de": "Teil des Netzwerks <b>{network}</b>",
"it": "{network}",
"ja": "{network}",
"nb_NO": "{network}",
"ru": "{network}",
"zh_Hant": "{network}"
"nl": "Maakt deel uit van het <b>{network}</b>-netwerk"
},
"question": {
"en": "Is this charging station part of a network?",
"nl": "Is dit oplaadpunt deel van een groter netwerk?",
"de": "Ist diese Ladestation Teil eines Netzwerks?",
"it": "A quale rete appartiene questa stazione di ricarica?",
"ja": "この充電ステーションの運営チェーンはどこですか?",
"ru": "К какой сети относится эта станция?",
"zh_Hant": "充電站所屬的網路是?"
"nl": "Is dit oplaadpunt deel van een groter netwerk?"
},
"freeform": {
"key": "network"
@ -3208,16 +3141,14 @@
"if": "no:network=yes",
"then": {
"en": "Not part of a bigger network",
"nl": "Maakt geen deel uit van een groter netwerk",
"de": "Nicht Teil eines größeren Netzwerks"
"nl": "Maakt geen deel uit van een groter netwerk"
}
},
{
"if": "network=none",
"then": {
"en": "Not part of a bigger network",
"nl": "Maakt geen deel uit van een groter netwerk",
"de": "Nicht Teil eines größeren Netzwerks"
"nl": "Maakt geen deel uit van een groter netwerk"
},
"hideInAnswer": true
},
@ -3239,13 +3170,11 @@
"id": "Operator",
"question": {
"en": "Who is the operator of this charging station?",
"nl": "Wie beheert dit oplaadpunt?",
"de": "Wer ist der Betreiber dieser Ladestation?"
"nl": "Wie beheert dit oplaadpunt?"
},
"render": {
"en": "This charging station is operated by {operator}",
"nl": "Wordt beheerd door {operator}",
"de": "Diese Ladestation wird betrieben von {operator}"
"nl": "Wordt beheerd door {operator}"
},
"freeform": {
"key": "operator"
@ -3259,8 +3188,7 @@
},
"then": {
"en": "Actually, {operator} is the network",
"nl": "Eigenlijk is {operator} het netwerk waarvan het deel uitmaakt",
"de": "Eigentlich ist {operator} das Netzwerk"
"nl": "Eigenlijk is {operator} het netwerk waarvan het deel uitmaakt"
},
"addExtraTags": [
"operator="
@ -3273,13 +3201,11 @@
"id": "phone",
"question": {
"en": "What number can one call if there is a problem with this charging station?",
"nl": "Wat is het telefoonnummer van de beheerder van dit oplaadpunt?",
"de": "Welche Nummer kann man anrufen, wenn es ein Problem mit dieser Ladestation gibt?"
"nl": "Wat is het telefoonnummer van de beheerder van dit oplaadpunt?"
},
"render": {
"en": "In case of problems, call <a href='tel:{phone}'>{phone}</a>",
"nl": "Bij problemen, bel naar <a href='tel:{phone}'>{phone}</a>",
"de": "Bei Problemen, anrufen unter <a href='tel:{phone}'>{phone}</a>"
"nl": "Bij problemen, bel naar <a href='tel:{phone}'>{phone}</a>"
},
"freeform": {
"key": "phone",
@ -3290,13 +3216,11 @@
"id": "email",
"question": {
"en": "What is the email address of the operator?",
"nl": "Wat is het email-adres van de operator?",
"de": "Wie ist die Email-Adresse des Betreibers?"
"nl": "Wat is het email-adres van de operator?"
},
"render": {
"en": "In case of problems, send an email to <a href='mailto:{email}'>{email}</a>",
"nl": "Bij problemen, email naar <a href='mailto:{email}'>{email}</a>",
"de": "Bei Problemen senden Sie eine E-Mail an <a href='mailto:{email}'>{email}</a>"
"nl": "Bij problemen, email naar <a href='mailto:{email}'>{email}</a>"
},
"freeform": {
"key": "email",
@ -3307,13 +3231,11 @@
"id": "website",
"question": {
"en": "What is the website where one can find more information about this charging station?",
"nl": "Wat is de website waar men meer info kan vinden over dit oplaadpunt?",
"de": "Wie ist die Webseite des Betreibers?"
"nl": "Wat is de website waar men meer info kan vinden over dit oplaadpunt?"
},
"render": {
"en": "More info on <a href='{website}'>{website}</a>",
"nl": "Meer informatie op <a href='{website}'>{website}</a>",
"de": "Weitere Informationen auf <a href='{website}'>{website}</a>"
"nl": "Meer informatie op <a href='{website}'>{website}</a>"
},
"freeform": {
"key": "website",
@ -3325,13 +3247,11 @@
"id": "ref",
"question": {
"en": "What is the reference number of this charging station?",
"nl": "Wat is het referentienummer van dit oplaadstation?",
"de": "Wie lautet die Kennung dieser Ladestation?"
"nl": "Wat is het referentienummer van dit oplaadstation?"
},
"render": {
"en": "Reference number is <b>{ref}</b>",
"nl": "Het referentienummer van dit oplaadpunt is <b>{ref}</b>",
"de": "Die Kennziffer ist <b>{ref}</b>"
"nl": "Het referentienummer van dit oplaadpunt is <b>{ref}</b>"
},
"freeform": {
"key": "ref"
@ -3343,8 +3263,7 @@
"id": "Operational status",
"question": {
"en": "Is this charging point in use?",
"nl": "Is dit oplaadpunt operationeel?",
"de": "Ist dieser Ladepunkt in Betrieb?"
"nl": "Is dit oplaadpunt operationeel?"
},
"mappings": [
{
@ -3359,8 +3278,7 @@
},
"then": {
"en": "This charging station works",
"nl": "Dit oplaadpunt werkt",
"de": "Diese Ladestation funktioniert"
"nl": "Dit oplaadpunt werkt"
}
},
{
@ -3375,8 +3293,7 @@
},
"then": {
"en": "This charging station is broken",
"nl": "Dit oplaadpunt is kapot",
"de": "Diese Ladestation ist kaputt"
"nl": "Dit oplaadpunt is kapot"
}
},
{
@ -3391,8 +3308,7 @@
},
"then": {
"en": "A charging station is planned here",
"nl": "Hier zal binnenkort een oplaadpunt gebouwd worden",
"de": "Hier ist eine Ladestation geplant"
"nl": "Hier zal binnenkort een oplaadpunt gebouwd worden"
}
},
{
@ -3407,8 +3323,7 @@
},
"then": {
"en": "A charging station is constructed here",
"nl": "Hier wordt op dit moment een oplaadpunt gebouwd",
"de": "Hier wird eine Ladestation gebaut"
"nl": "Hier wordt op dit moment een oplaadpunt gebouwd"
}
},
{
@ -3423,8 +3338,7 @@
},
"then": {
"en": "This charging station has beed permanently disabled and is not in use anymore but is still visible",
"nl": "Dit oplaadpunt is niet meer in gebruik maar is wel nog aanwezig",
"de": "Diese Ladestation wurde dauerhaft deaktiviert und wird nicht mehr benutzt, ist aber noch sichtbar"
"nl": "Dit oplaadpunt is niet meer in gebruik maar is wel nog aanwezig"
}
}
]
@ -3433,24 +3347,21 @@
"id": "Parking:fee",
"question": {
"en": "Does one have to pay a parking fee while charging?",
"nl": "Moet men parkeergeld betalen tijdens het opladen?",
"de": "Muss man beim Laden eine Parkgebühr bezahlen?"
"nl": "Moet men parkeergeld betalen tijdens het opladen?"
},
"mappings": [
{
"if": "parking:fee=no",
"then": {
"en": "No additional parking cost while charging",
"nl": "Geen extra parkeerkost tijdens het opladen",
"de": "Keine zusätzlichen Parkgebühren beim Laden"
"nl": "Geen extra parkeerkost tijdens het opladen"
}
},
{
"if": "parking:fee=yes",
"then": {
"en": "An additional parking fee should be paid while charging",
"nl": "Tijdens het opladen moet er parkeergeld betaald worden",
"de": "Beim Laden ist eine zusätzliche Parkgebühr zu entrichten"
"nl": "Tijdens het opladen moet er parkeergeld betaald worden"
}
}
],
@ -3469,7 +3380,11 @@
},
{
"id": "questions",
"group": "technical"
"group": "technical",
"render": {
"en": "<h3>Technical questions</h3>The questions below are very technical. Feel free to ignore them<br/>{questions}",
"nl": "<h3>Technische vragen</h3>De vragen hieronder zijn erg technisch - sla deze over indien je hier geen tijd voor hebt<br/>{questions}"
}
}
],
"mapRendering": [
@ -3545,9 +3460,7 @@
],
"title": {
"en": "charging station with a normal european wall plug <img src='./assets/layers/charging_station/TypeE.svg' style='width: 2rem; height: 2rem; float: left; background: white; border-radius: 1rem; margin-right: 0.5rem'/> (meant to charge electrical bikes)",
"nl": "laadpunt met gewone stekker(s) <img src='./assets/layers/charging_station/TypeE.svg' style='width: 2rem; height: 2rem; float: left; background: white; border-radius: 1rem; margin-right: 0.5rem'/> (bedoeld om electrische fietsen op te laden)",
"de": "Ladestation",
"ru": "Зарядная станция"
"nl": "laadpunt met gewone stekker(s) <img src='./assets/layers/charging_station/TypeE.svg' style='width: 2rem; height: 2rem; float: left; background: white; border-radius: 1rem; margin-right: 0.5rem'/> (bedoeld om electrische fietsen op te laden)"
},
"preciseInput": {
"preferredBackground": "map"
@ -3601,23 +3514,20 @@
{
"question": {
"en": "All vehicle types",
"nl": "Alle voertuigen",
"de": "Alle Fahrzeugtypen"
"nl": "Alle voertuigen"
}
},
{
"question": {
"en": "Charging station for bicycles",
"nl": "Oplaadpunten voor fietsen",
"de": "Ladestation für Fahrräder"
"nl": "Oplaadpunten voor fietsen"
},
"osmTags": "bicycle=yes"
},
{
"question": {
"en": "Charging station for cars",
"nl": "Oplaadpunten voor auto's",
"de": "Ladestation für Autos"
"nl": "Oplaadpunten voor auto's"
},
"osmTags": {
"or": [
@ -3634,8 +3544,7 @@
{
"question": {
"en": "Only working charging stations",
"nl": "Enkel werkende oplaadpunten",
"de": "Nur funktionierende Ladestationen"
"nl": "Enkel werkende oplaadpunten"
},
"osmTags": {
"and": [
@ -3652,8 +3561,7 @@
{
"question": {
"en": "All connectors",
"nl": "Alle types",
"de": "Alle Anschlüsse"
"nl": "Alle types"
}
},
{
@ -3673,8 +3581,7 @@
{
"question": {
"en": "Has a <div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div> connector",
"nl": "Heeft een <div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div>",
"de": "Hat einen <div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div> Stecker"
"nl": "Heeft een <div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div>"
},
"osmTags": "socket:chademo~*"
},
@ -3702,8 +3609,7 @@
{
"question": {
"en": "Has a <div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> connector",
"nl": "Heeft een <div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>",
"de": "Hat einen <div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> Stecker"
"nl": "Heeft een <div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>"
},
"osmTags": "socket:tesla_supercharger~*"
},
@ -3791,15 +3697,11 @@
],
"human": {
"en": " minutes",
"nl": " minuten",
"de": " Minuten",
"ru": " минут"
"nl": " minuten"
},
"humanSingular": {
"en": " minute",
"nl": " minuut",
"de": " Minute",
"ru": " минута"
"nl": " minuut"
}
},
{
@ -3815,15 +3717,11 @@
],
"human": {
"en": " hours",
"nl": " uren",
"de": " Stunden",
"ru": " часов"
"nl": " uren"
},
"humanSingular": {
"en": " hour",
"nl": " uur",
"de": " Stunde",
"ru": " час"
"nl": " uur"
}
},
{
@ -3836,15 +3734,11 @@
],
"human": {
"en": " days",
"nl": " day",
"de": " Tage",
"ru": " дней"
"nl": " day"
},
"humanSingular": {
"en": " day",
"nl": " dag",
"de": " Tag",
"ru": " день"
"nl": " dag"
}
}
]
@ -3880,9 +3774,7 @@
],
"human": {
"en": "Volts",
"nl": "volt",
"de": "Volt",
"ru": "Вольт"
"nl": "volt"
}
}
],
@ -3951,9 +3843,7 @@
],
"human": {
"en": "kilowatt",
"nl": "kilowatt",
"de": "Kilowatt",
"ru": "киловатт"
"nl": "kilowatt"
}
},
{
@ -3963,9 +3853,7 @@
],
"human": {
"en": "megawatt",
"nl": "megawatt",
"de": "Megawatt",
"ru": "мегаватт"
"nl": "megawatt"
}
}
],

View file

@ -678,7 +678,11 @@
},
{
"id": "questions",
"group": "technical"
"group": "technical",
"render": {
"en": "<h3>Technical questions</h3>The questions below are very technical. Feel free to ignore them<br/>{questions}",
"nl": "<h3>Technische vragen</h3>De vragen hieronder zijn erg technisch - sla deze over indien je hier geen tijd voor hebt<br/>{questions}"
}
}
],
"mapRendering": [

View file

@ -182,13 +182,6 @@
"id": "defibrillator-access"
},
{
"render": {
"en": "There is no info about the type of device",
"nl": "Er is geen info over het soort toestel",
"fr": "Il n'y a pas d'information sur le type de dispositif",
"it": "Non vi sono informazioni riguardanti il tipo di questo dispositivo",
"de": "Es gibt keine Informationen über den Gerätetyp"
},
"question": {
"en": "Is this a a regular automatic defibrillator or a manual defibrillator for professionals only?",
"nl": "Is dit een gewone automatische defibrillator of een manueel toestel enkel voor professionals?",
@ -196,15 +189,24 @@
"it": "Si tratta di un normale defibrillatore automatico o un defibrillatore manuale riservato ai professionisti?",
"de": "Ist dies ein normaler automatischer Defibrillator oder ein manueller Defibrillator nur für Profis?"
},
"freeform": {
"key": "defibrillator"
},
"condition": {
"and": [
"access=no"
]
},
"mappings": [
{
"if": "defibrillator=",
"then": {
"en": "There is no info about the type of device",
"nl": "Er is geen info over het soort toestel",
"fr": "Il n'y a pas d'information sur le type de dispositif",
"it": "Non vi sono informazioni riguardanti il tipo di questo dispositivo",
"de": "Es gibt keine Informationen über den Gerätetyp"
},
"hideInAnswer": true
},
{
"if": "defibrillator=manual",
"then": {
@ -225,6 +227,13 @@
"ru": "Это обычный автоматический дефибриллятор",
"de": "Dies ist ein normaler automatischer Defibrillator"
}
},
{
"if": "defibrillator~",
"then": {
"en": "This is a special type of defibrillator: {defibrillator}"
},
"hideInAnswer": true
}
],
"id": "defibrillator-defibrillator"
@ -308,9 +317,9 @@
"render": {
"nl": "<i>Meer informatie over de locatie (in het Engels):</i><br/>{defibrillator:location:en}",
"en": "<i>Extra information about the location (in English):</i><br/>{defibrillator:location:en}",
"fr": "<i>Informations supplémentaires à propos de l'emplacement (en anglais) :</i><br/>{defibrillator:location}",
"fr": "<i>Informations supplémentaires à propos de l'emplacement (en anglais) :</i><br/>{defibrillator:location:en}",
"it": "<i>Informazioni supplementari circa la posizione (in inglese):</i><br/>{defibrillator:location:en}",
"de": "<i>Zusätzliche Informationen über den Standort (auf Englisch):</i><br/>{defibrillator:location}"
"de": "<i>Zusätzliche Informationen über den Standort (auf Englisch):</i><br/>{defibrillator:location:en}"
},
"question": {
"en": "Please give some explanation on where the defibrillator can be found (in English)",
@ -331,9 +340,9 @@
"render": {
"nl": "<i>Meer informatie over de locatie (in het Frans):</i><br/>{defibrillator:location:fr}",
"en": "<i>Extra information about the location (in French):</i><br/>{defibrillator:location:fr}",
"fr": "<i>Informations supplémentaires à propos de l'emplacement (en Français) :</i><br/>{defibrillator:location}",
"fr": "<i>Informations supplémentaires à propos de l'emplacement (en Français) :</i><br/>{defibrillator:location:fr}",
"it": "<i>Informazioni supplementari circa la posizione (in francese):</i><br/>{defibrillator:location:fr}",
"de": "<i>Zusätzliche Informationen zum Standort (auf Französisch):</i><br/>{defibrillator:Standort:fr}"
"de": "<i>Zusätzliche Informationen zum Standort (auf Französisch):</i><br/>{defibrillator:location:fr}"
},
"question": {
"en": "Please give some explanation on where the defibrillator can be found (in French)",

View file

@ -65,11 +65,11 @@
"de": "Ist diese Trinkwasserstelle noch in Betrieb?"
},
"render": {
"en": "The operational status is <i>{operational_status</i>",
"en": "The operational status is <i>{operational_status}</i>",
"nl": "Deze waterkraan-status is <i>{operational_status}</i>",
"it": "Lo stato operativo è <i>{operational_status}</i>",
"fr": "L'état opérationnel est <i>{operational_status</i>",
"de": "Der Betriebsstatus ist <i>{operational_status</i>"
"fr": "L'état opérationnel est <i>{operational_status}</i>",
"de": "Der Betriebsstatus ist <i>{operational_status}/i>"
},
"freeform": {
"key": "operational_status"

View file

@ -409,11 +409,11 @@
"de": "Wie ist diese Kamera montiert?"
},
"render": {
"en": "Mounting method: {mount}",
"en": "Mounting method: {camera:mount}",
"nl": "Montage: {camera:mount}",
"fr": "Méthode de montage : {mount}",
"it": "Metodo di montaggio: {mount}",
"de": "Montageart: {mount}"
"fr": "Méthode de montage : {camera:mount}",
"it": "Metodo di montaggio: {camera:mount}",
"de": "Montageart: {camera:mount}"
},
"freeform": {
"key": "camera:mount"

View file

@ -454,8 +454,7 @@
"en": "<img src=\"./assets/layers/tree_node/Onroerend_Erfgoed_logo_without_text.svg\" style=\"width:0.85em;height:1em;vertical-align:middle\" alt=\"\"/> Onroerend Erfgoed ID: <a href=\"https://id.erfgoed.net/erfgoedobjecten/{ref:OnroerendErfgoed}\">{ref:OnroerendErfgoed}</a>",
"it": "<img src=\"./assets/layers/tree_node/Onroerend_Erfgoed_logo_without_text.svg\" style=\"width:0.85em;height:1em;vertical-align:middle\" alt=\"\"/> Onroerend Erfgoed ID: <a href=\"https://id.erfgoed.net/erfgoedobjecten/{ref:OnroerendErfgoed}\">{ref:OnroerendErfgoed}</a>",
"ru": "<img src=\"./assets/layers/tree_node/Onroerend_Erfgoed_logo_without_text.svg\" style=\"width:0.85em;height:1em;vertical-align:middle\" alt=\"\"/> Onroerend Erfgoed ID: <a href=\"https://id.erfgoed.net/erfgoedobjecten/{ref:OnroerendErfgoed}\">{ref:OnroerendErfgoed}</a>",
"fr": "<img src=\"./assets/layers/tree_node/Onroerend_Erfgoed_logo_without_text.svg\" style=\"width:0.85em;height:1em;vertical-align:middle\" alt=\"\"/> Identifiant Onroerend Erfgoed : <a href=\"https://id.erfgoed.net/erfgoedobjecten/{ref:OnroerendErfgoed}\">{ref:OnroerendErfgoed}</a>",
"de": ""
"fr": "<img src=\"./assets/layers/tree_node/Onroerend_Erfgoed_logo_without_text.svg\" style=\"width:0.85em;height:1em;vertical-align:middle\" alt=\"\"/> Identifiant Onroerend Erfgoed : <a href=\"https://id.erfgoed.net/erfgoedobjecten/{ref:OnroerendErfgoed}\">{ref:OnroerendErfgoed}</a>"
},
"question": {
"nl": "Wat is het ID uitgegeven door Onroerend Erfgoed Vlaanderen?",

View file

@ -484,7 +484,7 @@
"fr": "Étage {level}",
"pl": "Znajduje się na {level} piętrze",
"sv": "Ligger på {level}:e våningen",
"pt": "Está no {vel}º andar",
"pt": "Está no {level}º andar",
"eo": "En la {level}a etaĝo",
"hu": "{level}. emeleten található",
"it": "Si trova al piano numero {level}"

View file

@ -128,7 +128,7 @@
"it": "Questo luogo è chiamato {name}",
"ru": "Это место называется {name}",
"ja": "この場所は {name} と呼ばれています",
"fr": "Cet endroit s'appelle {nom}",
"fr": "Cet endroit s'appelle {name}",
"zh_Hant": "這個地方叫做 {name}",
"nl": "Deze plaats heet {name}",
"pt_BR": "Este lugar é chamado de {name}",

View file

@ -1335,7 +1335,7 @@
"it": "Qual è il livello della via più difficile qua, secondo il sistema di classificazione francese?"
},
"render": {
"de": "Die schwerste Route hat hier die Schwierigkeit {climbing:grade:french:min} (französisch/belgisches System)",
"de": "Die schwerste Route hat hier die Schwierigkeit {climbing:grade:french:max} (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}です",

View file

@ -102,7 +102,7 @@
},
"render": {
"en": "The hydrant color is {colour}",
"ja": "消火栓の色は{color}です",
"ja": "消火栓の色は{colour}です",
"nb_NO": "Brannhydranter er {colour}",
"ru": "Цвет гидранта {colour}",
"fr": "La borne est {colour}",
@ -262,22 +262,12 @@
{
"id": "hydrant-state",
"question": {
"en": "Update the lifecycle status of the hydrant.",
"en": "Is this hydrant still working?",
"ja": "消火栓のライフサイクルステータスを更新します。",
"fr": "Mettre à jour létat de la borne.",
"de": "Aktualisieren Sie den Lebenszyklusstatus des Hydranten.",
"it": "Aggiorna lo stato di funzionamento dellidrante."
},
"render": {
"en": "Lifecycle status",
"ja": "ライフサイクルステータス",
"fr": "État",
"de": "Lebenszyklus-Status",
"it": "Stato di funzionamento"
},
"freeform": {
"key": "disused:emergency"
},
"mappings": [
{
"if": {
@ -286,7 +276,7 @@
]
},
"then": {
"en": "The hydrant is (fully or partially) working.",
"en": "The hydrant is (fully or partially) working",
"ja": "消火栓は(完全にまたは部分的に)機能しています。",
"ru": "Гидрант (полностью или частично) в рабочем состоянии.",
"fr": "La borne est en état, ou partiellement en état, de fonctionner.",
@ -302,7 +292,7 @@
]
},
"then": {
"en": "The hydrant is unavailable.",
"en": "The hydrant is unavailable",
"ja": "消火栓は使用できません。",
"fr": "La borne est hors-service.",
"de": "Der Hydrant ist nicht verfügbar.",
@ -317,7 +307,7 @@
]
},
"then": {
"en": "The hydrant has been removed.",
"en": "The hydrant has been removed",
"ja": "消火栓が撤去されました。",
"ru": "Гидрант демонтирован.",
"fr": "La borne a été retirée.",

View file

@ -0,0 +1,3 @@
.technical.questions {
display: none
}

View file

@ -3,6 +3,7 @@
"credits": "Commissioned theme for <a href='https://www.toerismevlaanderen.be/'>Toerisme Vlaandere</a>",
"maintainer": "MapComplete",
"version": "0.0.1",
"customCss": "./assets/themes/toerisme_vlaanderen/custom.css",
"language": [
"en",
"nl"

View file

@ -325,7 +325,7 @@
},
{
"id": "fixme",
"render": "<b>Fixme description</b>{render}",
"render": "<b>Fixme description</b>{fixme}",
"question": {
"en": "What should be fixed here? Please explain"
},

View file

@ -1482,6 +1482,11 @@ video {
line-height: 1.75rem;
}
.text-lg {
font-size: 1.125rem;
line-height: 1.75rem;
}
.text-sm {
font-size: 0.875rem;
line-height: 1.25rem;
@ -1497,11 +1502,6 @@ video {
line-height: 1.5rem;
}
.text-lg {
font-size: 1.125rem;
line-height: 1.75rem;
}
.text-4xl {
font-size: 2.25rem;
line-height: 2.5rem;
@ -1998,12 +1998,6 @@ li::marker {
padding: 0.15em 0.3em;
}
.question form {
display: inline-block;
max-width: 90vw;
width: 100%;
}
.invalid {
box-shadow: 0 0 10px #ff5353;
height: -webkit-min-content;

View file

@ -12,7 +12,13 @@
padding: 1em;
border-radius: 1em;
font-size: larger;
overflow-wrap: initial;
}
.question form {
display: inline-block;
max-width: 90vw;
width: 100%;
}
.question svg {

View file

@ -289,12 +289,6 @@ li::marker {
padding: 0.15em 0.3em;
}
.question form {
display: inline-block;
max-width: 90vw;
width: 100%;
}
.invalid {
box-shadow: 0 0 10px #ff5353;
height: min-content;

View file

@ -133,11 +133,11 @@
},
"Space between barrier (cyclebarrier)": {
"question": "Wie groß ist der Abstand zwischen den Barrieren (entlang der Straße)?",
"render": "Abstand zwischen den Barrieren (entlang der Straße): {spacing} m"
"render": "Abstand zwischen den Barrieren (entlang der Straße): {width:separation} m"
},
"Width of opening (cyclebarrier)": {
"question": "Wie breit ist die kleinste Öffnung neben den Barrieren?",
"render": "Breite der Öffnung: {opening} m"
"render": "Breite der Öffnung: {width:opening} m"
},
"bicycle=yes/no": {
"mappings": {
@ -180,8 +180,7 @@
"then": "Rückenlehne: Nein"
}
},
"question": "Hat diese Bank eine Rückenlehne?",
"render": "Rückenlehne"
"question": "Hat diese Bank eine Rückenlehne?"
},
"bench-colour": {
"mappings": {
@ -257,8 +256,12 @@
"bench_at_pt": {
"name": "Sitzbänke bei Haltestellen",
"tagRenderings": {
"bench_at_pt-bench": {
"render": "Stehbank"
"bench_at_pt-bench_type": {
"mappings": {
"1": {
"then": "Stehbank"
}
}
},
"bench_at_pt-name": {
"render": "{name}"
@ -342,7 +345,7 @@
}
},
"question": "Ist dieser Automat noch in Betrieb?",
"render": "Der Betriebszustand ist <i>{operational_status</i>"
"render": "Der Betriebszustand ist <i>{operational_status}</i>"
}
},
"title": {
@ -923,312 +926,6 @@
}
}
},
"charging_station": {
"description": "Eine Ladestation",
"filter": {
"0": {
"options": {
"0": {
"question": "Alle Fahrzeugtypen"
},
"1": {
"question": "Ladestation für Fahrräder"
},
"2": {
"question": "Ladestation für Autos"
}
}
},
"1": {
"options": {
"0": {
"question": "Nur funktionierende Ladestationen"
}
}
},
"2": {
"options": {
"0": {
"question": "Alle Anschlüsse"
},
"3": {
"question": "Hat einen <div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div> Stecker"
},
"7": {
"question": "Hat einen <div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> Stecker"
}
}
}
},
"presets": {
"0": {
"title": "Ladestation"
}
},
"tagRenderings": {
"Auth phone": {
"question": "Wie lautet die Telefonnummer für den Authentifizierungsanruf oder die SMS?",
"render": "Authentifizierung durch Anruf oder SMS an <a href='tel:{authentication:phone_call:number}'>{authentication:phone_call:number}</a>"
},
"Authentication": {
"mappings": {
"0": {
"then": "Authentifizierung durch eine Mitgliedskarte"
},
"1": {
"then": "Authentifizierung durch eine App"
},
"2": {
"then": "Authentifizierung per Anruf ist möglich"
},
"3": {
"then": "Authentifizierung per Anruf ist möglich"
},
"4": {
"then": "Authentifizierung über NFC ist möglich"
},
"5": {
"then": "Authentifizierung über Geldkarte ist möglich"
},
"6": {
"then": "Authentifizierung per Debitkarte ist möglich"
},
"7": {
"then": "Das Aufladen ist hier (auch) ohne Authentifizierung möglich"
}
},
"question": "Welche Authentifizierung ist an der Ladestation möglich?"
},
"Available_charging_stations (generated)": {
"mappings": {
"5": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Chademo_type4.svg'/> <span><b>Chademo</b></span></div>"
},
"6": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Typ 1 mit Kabel</b> (J1772)</span></div>"
},
"7": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Typ 1 mit Kabel</b> (J1772)</span></div>"
},
"8": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Typ 1 <i>ohne</i> Kabel</b> (J1772)</span></div>"
},
"9": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Typ 1 <i>ohne</i> Kabel</b> (J1772)</span></div>"
},
"10": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Typ 1 CCS</b> (auch bekannt als Typ 1 Combo)</span></div>"
},
"11": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Typ 1 CCS</b> (auch bekannt als Typ 1 Combo)</span></div>"
},
"12": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>"
},
"13": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>"
},
"14": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Typ 2</b> (Mennekes)</span></div>"
},
"15": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Typ 2</b> (Mennekes)</span></div>"
},
"16": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Typ 2 CCS</b> (Mennekes)</span></div>"
},
"17": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Typ 2 CCS</b> (Mennekes)</span></div>"
},
"18": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Typ 2 mit Kabel</b> (Mennekes)</span></div>"
},
"19": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Typ 2 mit Kabel</b> (Mennekes)</span></div>"
},
"20": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (Typ 2 CSS)</span></div>"
},
"21": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (Typ 2 CSS)</span></div>"
},
"26": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> zum Laden von Smartphones oder Elektrokleingeräten</span></div>"
},
"27": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> zum Laden von Smartphones und Elektrokleingeräten</span></div>"
},
"30": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect mit 5 Pins</b> und Kabel</span></div>"
},
"31": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect mit 5 Pins</b> und Kabel</span></div>"
}
},
"question": "Welche Ladestationen gibt es hier?"
},
"Network": {
"mappings": {
"0": {
"then": "Nicht Teil eines größeren Netzwerks"
},
"1": {
"then": "Nicht Teil eines größeren Netzwerks"
}
},
"question": "Ist diese Ladestation Teil eines Netzwerks?",
"render": "Teil des Netzwerks <b>{network}</b>"
},
"OH": {
"mappings": {
"0": {
"then": "durchgehend geöffnet (auch an Feiertagen)"
}
},
"question": "Wann ist diese Ladestation geöffnet?"
},
"Operational status": {
"mappings": {
"0": {
"then": "Diese Ladestation funktioniert"
},
"1": {
"then": "Diese Ladestation ist kaputt"
},
"2": {
"then": "Hier ist eine Ladestation geplant"
},
"3": {
"then": "Hier wird eine Ladestation gebaut"
},
"4": {
"then": "Diese Ladestation wurde dauerhaft deaktiviert und wird nicht mehr benutzt, ist aber noch sichtbar"
}
},
"question": "Ist dieser Ladepunkt in Betrieb?"
},
"Operator": {
"mappings": {
"0": {
"then": "Eigentlich ist {operator} das Netzwerk"
}
},
"question": "Wer ist der Betreiber dieser Ladestation?",
"render": "Diese Ladestation wird betrieben von {operator}"
},
"Parking:fee": {
"mappings": {
"0": {
"then": "Keine zusätzlichen Parkgebühren beim Laden"
},
"1": {
"then": "Beim Laden ist eine zusätzliche Parkgebühr zu entrichten"
}
},
"question": "Muss man beim Laden eine Parkgebühr bezahlen?"
},
"Type": {
"mappings": {
"0": {
"then": "<b>Fahrräder</b> können hier geladen werden"
},
"1": {
"then": "<b>Autos</b> können hier geladen werden"
},
"2": {
"then": "<b> Roller</b> können hier geladen werden"
},
"3": {
"then": "<b>Lastkraftwagen</b> (LKW) können hier geladen werden"
},
"4": {
"then": "<b>Busse</b> können hier geladen werden"
}
},
"question": "Welche Fahrzeuge dürfen hier geladen werden?"
},
"access": {
"question": "Wer darf diese Ladestation benutzen?",
"render": "Zugang ist {access}"
},
"capacity": {
"question": "Wie viele Fahrzeuge können hier gleichzeitig geladen werden?",
"render": "{capacity} Fahrzeuge können hier gleichzeitig geladen werden"
},
"email": {
"question": "Wie ist die Email-Adresse des Betreibers?",
"render": "Bei Problemen senden Sie eine E-Mail an <a href='mailto:{email}'>{email}</a>"
},
"maxstay": {
"mappings": {
"0": {
"then": "Keine Höchstparkdauer"
}
},
"question": "Was ist die Höchstdauer des Aufenthalts hier?",
"render": "Die maximale Parkzeit beträgt <b>{canonical(maxstay)}</b>"
},
"payment-options": {
"override": {
"mappings+": {
"0": {
"then": "Bezahlung mit einer speziellen App"
},
"1": {
"then": "Bezahlung mit einer Mitgliedskarte"
}
}
}
},
"phone": {
"question": "Welche Nummer kann man anrufen, wenn es ein Problem mit dieser Ladestation gibt?",
"render": "Bei Problemen, anrufen unter <a href='tel:{phone}'>{phone}</a>"
},
"ref": {
"question": "Wie lautet die Kennung dieser Ladestation?",
"render": "Die Kennziffer ist <b>{ref}</b>"
},
"website": {
"question": "Wie ist die Webseite des Betreibers?",
"render": "Weitere Informationen auf <a href='{website}'>{website}</a>"
}
},
"units": {
"0": {
"applicableUnits": {
"0": {
"human": " Minuten",
"humanSingular": " Minute"
},
"1": {
"human": " Stunden",
"humanSingular": " Stunde"
},
"2": {
"human": " Tage",
"humanSingular": " Tag"
}
}
},
"1": {
"applicableUnits": {
"0": {
"human": "Volt"
}
}
},
"3": {
"applicableUnits": {
"0": {
"human": "Kilowatt"
},
"1": {
"human": "Megawatt"
}
}
}
}
},
"crossings": {
"description": "Übergänge für Fußgänger und Radfahrer",
"name": "Kreuzungen",
@ -1737,14 +1434,16 @@
"defibrillator-defibrillator": {
"mappings": {
"0": {
"then": "Dies ist ein manueller Defibrillator für den professionellen Einsatz"
"then": "Es gibt keine Informationen über den Gerätetyp"
},
"1": {
"then": "Dies ist ein manueller Defibrillator für den professionellen Einsatz"
},
"2": {
"then": "Dies ist ein normaler automatischer Defibrillator"
}
},
"question": "Ist dies ein normaler automatischer Defibrillator oder ein manueller Defibrillator nur für Profis?",
"render": "Es gibt keine Informationen über den Gerätetyp"
"question": "Ist dies ein normaler automatischer Defibrillator oder ein manueller Defibrillator nur für Profis?"
},
"defibrillator-defibrillator:location": {
"question": "Bitte geben Sie einige Erläuterungen dazu, wo der Defibrillator zu finden ist (in der lokalen Sprache)",
@ -1752,11 +1451,11 @@
},
"defibrillator-defibrillator:location:en": {
"question": "Bitte geben Sie einige Erläuterungen dazu, wo der Defibrillator zu finden ist (auf Englisch)",
"render": "<i>Zusätzliche Informationen über den Standort (auf Englisch):</i><br/>{defibrillator:location}"
"render": "<i>Zusätzliche Informationen über den Standort (auf Englisch):</i><br/>{defibrillator:location:en}"
},
"defibrillator-defibrillator:location:fr": {
"question": "Bitte geben Sie einige Erläuterungen dazu, wo der Defibrillator zu finden ist (auf Französisch)",
"render": "<i>Zusätzliche Informationen zum Standort (auf Französisch):</i><br/>{defibrillator:Standort:fr}"
"render": "<i>Zusätzliche Informationen zum Standort (auf Französisch):</i><br/>{defibrillator:location:fr}"
},
"defibrillator-description": {
"question": "Gibt es nützliche Informationen für Benutzer, die Sie oben nicht beschreiben konnten? (leer lassen, wenn nein)",
@ -1860,7 +1559,7 @@
}
},
"question": "Ist diese Trinkwasserstelle noch in Betrieb?",
"render": "Der Betriebsstatus ist <i>{operational_status</i>"
"render": "Der Betriebsstatus ist <i>{operational_status}/i>"
},
"render-closest-drinking-water": {
"render": "<a href='#{_closest_other_drinking_water_id}'>Ein weiterer Trinkwasserbrunnen befindet sich in {_closest_other_drinking_water_distance} Meter</a>"
@ -2771,7 +2470,7 @@
}
},
"question": "Wie ist diese Kamera montiert?",
"render": "Montageart: {mount}"
"render": "Montageart: {camera:mount}"
},
"direction. We don't ask this for a dome on a pole or ceiling as it has a 360° view": {
"question": "In welche Himmelsrichtung ist diese Kamera ausgerichtet?"
@ -3064,8 +2763,7 @@
"render": "Name: {name}"
},
"tree_node-ref:OnroerendErfgoed": {
"question": "Wie lautet die Kennung der Onroerend Erfgoed Flanders?",
"render": ""
"question": "Wie lautet die Kennung der Onroerend Erfgoed Flanders?"
},
"tree_node-wikidata": {
"question": "Was ist das passende Wikidata Element zu diesem Baum?",

View file

@ -133,11 +133,11 @@
},
"Space between barrier (cyclebarrier)": {
"question": "How much space is there between the barriers (along the length of the road)?",
"render": "Space between barriers (along the length of the road): {spacing} m"
"render": "Space between barriers (along the length of the road): {width:separation} m"
},
"Width of opening (cyclebarrier)": {
"question": "How wide is the smallest opening next to the barriers?",
"render": "Width of opening: {opening} m"
"render": "Width of opening: {width:opening} m"
},
"bicycle=yes/no": {
"mappings": {
@ -180,8 +180,7 @@
"then": "Backrest: No"
}
},
"question": "Does this bench have a backrest?",
"render": "Backrest"
"question": "Does this bench have a backrest?"
},
"bench-colour": {
"mappings": {
@ -257,8 +256,19 @@
"bench_at_pt": {
"name": "Benches at public transport stops",
"tagRenderings": {
"bench_at_pt-bench": {
"render": "Stand up bench"
"bench_at_pt-bench_type": {
"mappings": {
"0": {
"then": "There is a normal, sit-down bench here"
},
"1": {
"then": "Stand up bench"
},
"2": {
"then": "There is no bench here"
}
},
"question": "What kind of bench is this?"
},
"bench_at_pt-name": {
"render": "{name}"
@ -342,7 +352,7 @@
}
},
"question": "Is this vending machine still operational?",
"render": "The operational status is <i>{operational_status</i>"
"render": "The operational status is <i>{operational_status}</i>"
}
},
"title": {
@ -423,6 +433,38 @@
"title": "Bike cleaning service"
}
},
"tagRenderings": {
"bike_cleaning-charge": {
"mappings": {
"0": {
"then": "Free to use cleaning service"
},
"1": {
"then": "Free to use"
},
"2": {
"then": "The cleaning service has a fee"
}
},
"question": "How much does it cost to use the cleaning service?",
"render": "Using the cleaning service costs {charge}"
},
"bike_cleaning-service:bicycle:cleaning:charge": {
"mappings": {
"0": {
"then": "The cleaning service is free to use"
},
"1": {
"then": "Free to use"
},
"2": {
"then": "The cleaning service has a fee, but the amount is not known"
}
},
"question": "How much does it cost to use the cleaning service?",
"render": "Using the cleaning service costs {service:bicycle:cleaning:charge}"
}
},
"title": {
"mappings": {
"0": {
@ -1714,6 +1756,9 @@
"question": "What power output does a single plug of type <div style='display: inline-block'><b><b>Type 2 with cable</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> offer?",
"render": "<div style='display: inline-block'><b><b>Type 2 with cable</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> outputs at most {socket:type2_cable:output}"
},
"questions": {
"render": "<h3>Technical questions</h3>The questions below are very technical. Feel free to ignore them<br/>{questions}"
},
"ref": {
"question": "What is the reference number of this charging station?",
"render": "Reference number is <b>{ref}</b>"
@ -2468,14 +2513,19 @@
"defibrillator-defibrillator": {
"mappings": {
"0": {
"then": "This is a manual defibrillator for professionals"
"then": "There is no info about the type of device"
},
"1": {
"then": "This is a manual defibrillator for professionals"
},
"2": {
"then": "This is a normal automatic defibrillator"
},
"3": {
"then": "This is a special type of defibrillator: {defibrillator}"
}
},
"question": "Is this a a regular automatic defibrillator or a manual defibrillator for professionals only?",
"render": "There is no info about the type of device"
"question": "Is this a a regular automatic defibrillator or a manual defibrillator for professionals only?"
},
"defibrillator-defibrillator:location": {
"question": "Please give some explanation on where the defibrillator can be found (in the local language)",
@ -2591,7 +2641,7 @@
}
},
"question": "Is this drinking water spot still operational?",
"render": "The operational status is <i>{operational_status</i>"
"render": "The operational status is <i>{operational_status}</i>"
},
"render-closest-drinking-water": {
"render": "<a href='#{_closest_other_drinking_water_id}'>There is another drinking water fountain at {_closest_other_drinking_water_distance} meter</a>"
@ -3679,7 +3729,7 @@
}
},
"question": "How is this camera placed?",
"render": "Mounting method: {mount}"
"render": "Mounting method: {camera:mount}"
},
"direction. We don't ask this for a dome on a pole or ceiling as it has a 360° view": {
"mappings": {

View file

@ -39,8 +39,7 @@
"then": "Respaldo: No"
}
},
"question": "¿Este banco tiene un respaldo?",
"render": "Respaldo"
"question": "¿Este banco tiene un respaldo?"
},
"bench-material": {
"mappings": {

View file

@ -30,8 +30,7 @@
"1": {
"then": "Selkänoja: ei"
}
},
"render": "Selkänoja"
}
},
"bench-colour": {
"mappings": {

View file

@ -89,8 +89,7 @@
"then": "Dossier : Non"
}
},
"question": "Ce banc dispose-t-il d'un dossier ?",
"render": "Dossier"
"question": "Ce banc dispose-t-il d'un dossier ?"
},
"bench-colour": {
"mappings": {
@ -166,8 +165,12 @@
"bench_at_pt": {
"name": "Bancs des arrêts de transport en commun",
"tagRenderings": {
"bench_at_pt-bench": {
"render": "Banc assis debout"
"bench_at_pt-bench_type": {
"mappings": {
"1": {
"then": "Banc assis debout"
}
}
},
"bench_at_pt-name": {
"render": "{name}"
@ -777,14 +780,16 @@
"defibrillator-defibrillator": {
"mappings": {
"0": {
"then": "C'est un défibrillateur manuel pour professionnel"
"then": "Il n'y a pas d'information sur le type de dispositif"
},
"1": {
"then": "C'est un défibrillateur manuel pour professionnel"
},
"2": {
"then": "C'est un défibrillateur automatique manuel"
}
},
"question": "Est-ce un défibrillateur automatique normal ou un défibrillateur manuel à usage professionnel uniquement ?",
"render": "Il n'y a pas d'information sur le type de dispositif"
"question": "Est-ce un défibrillateur automatique normal ou un défibrillateur manuel à usage professionnel uniquement ?"
},
"defibrillator-defibrillator:location": {
"question": "Veuillez indiquez plus précisément où se situe le défibrillateur (dans la langue local)",
@ -792,11 +797,11 @@
},
"defibrillator-defibrillator:location:en": {
"question": "Veuillez indiquez plus précisément où se situe le défibrillateur (en englais)",
"render": "<i>Informations supplémentaires à propos de l'emplacement (en anglais) :</i><br/>{defibrillator:location}"
"render": "<i>Informations supplémentaires à propos de l'emplacement (en anglais) :</i><br/>{defibrillator:location:en}"
},
"defibrillator-defibrillator:location:fr": {
"question": "Veuillez indiquez plus précisément où se situe le défibrillateur (en français)",
"render": "<i>Informations supplémentaires à propos de l'emplacement (en Français) :</i><br/>{defibrillator:location}"
"render": "<i>Informations supplémentaires à propos de l'emplacement (en Français) :</i><br/>{defibrillator:location:fr}"
},
"defibrillator-description": {
"question": "Y a-t-il des informations utiles pour les utilisateurs que vous n'avez pas pu décrire ci-dessus ? (laisser vide sinon)",
@ -900,7 +905,7 @@
}
},
"question": "Ce point d'eau potable est-il toujours opérationnel ?",
"render": "L'état opérationnel est <i>{operational_status</i>"
"render": "L'état opérationnel est <i>{operational_status}</i>"
},
"render-closest-drinking-water": {
"render": "<a href='#{_closest_other_drinking_water_id}'>Une autre source deau potable est à {_closest_other_drinking_water_distance} mètres a>"
@ -1660,7 +1665,7 @@
}
},
"question": "Comment cette caméra est-elle placée ?",
"render": "Méthode de montage : {mount}"
"render": "Méthode de montage : {camera:mount}"
},
"direction. We don't ask this for a dome on a pole or ceiling as it has a 360° view": {
"mappings": {

View file

@ -26,8 +26,7 @@
"then": "Háttámla: Nem"
}
},
"question": "Van háttámlája ennek a padnak?",
"render": "Háttámla"
"question": "Van háttámlája ennek a padnak?"
},
"bench-colour": {
"mappings": {

View file

@ -80,8 +80,7 @@
"then": "Sandaran: Tidak"
}
},
"question": "Apakah bangku ini memiliki sandaran?",
"render": "Sandaran"
"question": "Apakah bangku ini memiliki sandaran?"
},
"bench-colour": {
"render": "Warna: {colour}"

View file

@ -89,8 +89,7 @@
"then": "Schienale: No"
}
},
"question": "Questa panchina ha lo schienale?",
"render": "Schienale"
"question": "Questa panchina ha lo schienale?"
},
"bench-colour": {
"mappings": {
@ -166,8 +165,12 @@
"bench_at_pt": {
"name": "Panchine alle fermate del trasporto pubblico",
"tagRenderings": {
"bench_at_pt-bench": {
"render": "Panca in piedi"
"bench_at_pt-bench_type": {
"mappings": {
"1": {
"then": "Panca in piedi"
}
}
},
"bench_at_pt-name": {
"render": "{name}"
@ -745,17 +748,6 @@
"render": "Oggetto relativo alle bici"
}
},
"charging_station": {
"tagRenderings": {
"Network": {
"question": "A quale rete appartiene questa stazione di ricarica?",
"render": "{network}"
},
"OH": {
"question": "Quali sono gli orari di apertura di questa stazione di ricarica?"
}
}
},
"defibrillator": {
"name": "Defibrillatori",
"presets": {
@ -788,14 +780,16 @@
"defibrillator-defibrillator": {
"mappings": {
"0": {
"then": "Questo è un defibrillatore manuale per professionisti"
"then": "Non vi sono informazioni riguardanti il tipo di questo dispositivo"
},
"1": {
"then": "Questo è un defibrillatore manuale per professionisti"
},
"2": {
"then": "È un normale defibrillatore automatico"
}
},
"question": "Si tratta di un normale defibrillatore automatico o un defibrillatore manuale riservato ai professionisti?",
"render": "Non vi sono informazioni riguardanti il tipo di questo dispositivo"
"question": "Si tratta di un normale defibrillatore automatico o un defibrillatore manuale riservato ai professionisti?"
},
"defibrillator-defibrillator:location": {
"question": "Indica più precisamente dove si trova il defibrillatore (in lingua locale)",
@ -1556,7 +1550,7 @@
}
},
"question": "Com'è posizionata questa telecamera?",
"render": "Metodo di montaggio: {mount}"
"render": "Metodo di montaggio: {camera:mount}"
},
"direction. We don't ask this for a dome on a pole or ceiling as it has a 360° view": {
"mappings": {

View file

@ -72,17 +72,6 @@
"render": "アートワーク"
}
},
"charging_station": {
"tagRenderings": {
"Network": {
"question": "この充電ステーションの運営チェーンはどこですか?",
"render": "{network}"
},
"OH": {
"question": "この充電ステーションはいつオープンしますか?"
}
}
},
"food": {
"tagRenderings": {
"friture-take-your-container": {

View file

@ -88,8 +88,7 @@
"then": "Rygglene: Nei"
}
},
"question": "Har denne beken et rygglene?",
"render": "Rygglene"
"question": "Har denne beken et rygglene?"
},
"bench-colour": {
"mappings": {
@ -175,16 +174,6 @@
}
}
},
"charging_station": {
"tagRenderings": {
"Network": {
"render": "{network}"
},
"OH": {
"question": "Når åpnet denne ladestasjonen?"
}
}
},
"ghost_bike": {
"name": "Spøkelsessykler",
"title": {

View file

@ -132,11 +132,11 @@
},
"Space between barrier (cyclebarrier)": {
"question": "Hoeveel ruimte is er tussen de barrières (langs de lengte van de weg)?",
"render": "Ruimte tussen barrières (langs de lengte van de weg): {spacing} m"
"render": "Ruimte tussen barrières (langs de lengte van de weg): {width:separation} m"
},
"Width of opening (cyclebarrier)": {
"question": "Hoe breed is de smalste opening naast de barrières?",
"render": "Breedte van de opening: {opening} m"
"render": "Breedte van de opening: {width:opening} m"
},
"bicycle=yes/no": {
"mappings": {
@ -179,8 +179,7 @@
"then": "Rugleuning ontbreekt"
}
},
"question": "Heeft deze zitbank een rugleuning?",
"render": "Rugleuning"
"question": "Heeft deze zitbank een rugleuning?"
},
"bench-colour": {
"mappings": {
@ -256,8 +255,13 @@
"bench_at_pt": {
"name": "Zitbanken aan bushaltes",
"tagRenderings": {
"bench_at_pt-bench": {
"render": "Leunbank"
"bench_at_pt-bench_type": {
"mappings": {
"1": {
"then": "Leunbank"
}
},
"question": "Wat voor soort bank is dit?"
},
"bench_at_pt-name": {
"render": "{name}"
@ -1828,6 +1832,9 @@
"question": "Welk vermogen levert een enkele stekker van type <div style='display: inline-block'><b><b>Type 2 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>?",
"render": "<div style='display: inline-block'><b><b>Type 2 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> levert een vermogen van maximaal {socket:type2_cable:output}"
},
"questions": {
"render": "<h3>Technische vragen</h3>De vragen hieronder zijn erg technisch - sla deze over indien je hier geen tijd voor hebt<br/>{questions}"
},
"ref": {
"question": "Wat is het referentienummer van dit oplaadstation?",
"render": "Het referentienummer van dit oplaadpunt is <b>{ref}</b>"
@ -2556,14 +2563,16 @@
"defibrillator-defibrillator": {
"mappings": {
"0": {
"then": "Dit is een manueel toestel enkel voor professionals"
"then": "Er is geen info over het soort toestel"
},
"1": {
"then": "Dit is een manueel toestel enkel voor professionals"
},
"2": {
"then": "Dit is een gewone automatische defibrillator"
}
},
"question": "Is dit een gewone automatische defibrillator of een manueel toestel enkel voor professionals?",
"render": "Er is geen info over het soort toestel"
"question": "Is dit een gewone automatische defibrillator of een manueel toestel enkel voor professionals?"
},
"defibrillator-defibrillator:location": {
"question": "Gelieve meer informatie te geven over de exacte locatie van de defibrillator (in de plaatselijke taal)",

View file

@ -31,8 +31,7 @@
"then": "Oparcie: Nie"
}
},
"question": "Czy ta ławka ma oparcie?",
"render": "Oparcie"
"question": "Czy ta ławka ma oparcie?"
},
"bench-colour": {
"mappings": {

View file

@ -31,8 +31,7 @@
"then": "Encosto: Não"
}
},
"question": "Este assento tem um escosto?",
"render": "Encosto"
"question": "Este assento tem um escosto?"
},
"bench-colour": {
"mappings": {
@ -189,7 +188,7 @@
}
},
"question": "Esta máquina de venda automática ainda está operacional?",
"render": "O estado operacional é: <i>{operational_status</i>"
"render": "O estado operacional é: <i>{operational_status}</i>"
}
},
"title": {
@ -493,7 +492,7 @@
},
"bike_shop-name": {
"question": "Qual o nome desta loja de bicicletas?",
"render": "Esta loja de bicicletas se chama {nome}"
"render": "Esta loja de bicicletas se chama {name}"
},
"bike_shop-phone": {
"question": "Qual é o número de telefone de {name}?"

View file

@ -31,8 +31,7 @@
"then": "Encosto: Não"
}
},
"question": "Este assento tem um escosto?",
"render": "Encosto"
"question": "Este assento tem um escosto?"
},
"bench-colour": {
"mappings": {
@ -189,7 +188,7 @@
}
},
"question": "Esta máquina de venda automática ainda está operacional?",
"render": "O estado operacional é: <i>{operational_status</i>"
"render": "O estado operacional é: <i>{operational_status}</i>"
}
},
"title": {
@ -505,7 +504,7 @@
},
"bike_shop-name": {
"question": "Qual o nome desta loja de bicicletas?",
"render": "Esta loja de bicicletas se chama {nome}"
"render": "Esta loja de bicicletas se chama {name}"
},
"bike_shop-phone": {
"question": "Qual o número de telefone de {name}?"

View file

@ -105,8 +105,7 @@
"then": "Без спинки"
}
},
"question": "Есть ли у этой скамейки спинка?",
"render": "Спинка"
"question": "Есть ли у этой скамейки спинка?"
},
"bench-colour": {
"mappings": {
@ -182,8 +181,12 @@
"bench_at_pt": {
"name": "Скамейки на остановках общественного транспорта",
"tagRenderings": {
"bench_at_pt-bench": {
"render": "Встаньте на скамейке"
"bench_at_pt-bench_type": {
"mappings": {
"1": {
"then": "Встаньте на скамейке"
}
}
},
"bench_at_pt-name": {
"render": "{name}"
@ -267,7 +270,7 @@
}
},
"question": "Этот торговый автомат все еще работает?",
"render": "Рабочий статус: <i> {operational_status</i>"
"render": "Рабочий статус: <i> {operational_status}</i>"
}
},
"title": {
@ -634,57 +637,6 @@
}
}
},
"charging_station": {
"presets": {
"0": {
"title": "Зарядная станция"
}
},
"tagRenderings": {
"Network": {
"question": "К какой сети относится эта станция?",
"render": "{network}"
},
"OH": {
"question": "В какое время работает эта зарядная станция?"
}
},
"units": {
"0": {
"applicableUnits": {
"0": {
"human": " минут",
"humanSingular": " минута"
},
"1": {
"human": " часов",
"humanSingular": " час"
},
"2": {
"human": " дней",
"humanSingular": " день"
}
}
},
"1": {
"applicableUnits": {
"0": {
"human": "Вольт"
}
}
},
"3": {
"applicableUnits": {
"0": {
"human": "киловатт"
},
"1": {
"human": "мегаватт"
}
}
}
}
},
"crossings": {
"presets": {
"1": {
@ -732,7 +684,7 @@
},
"defibrillator-defibrillator": {
"mappings": {
"1": {
"2": {
"then": "Это обычный автоматический дефибриллятор"
}
}

View file

@ -16,8 +16,7 @@
"then": "靠背:无"
}
},
"question": "这个长椅有靠背吗?",
"render": "靠背"
"question": "这个长椅有靠背吗?"
},
"bench-colour": {
"mappings": {
@ -92,8 +91,12 @@
"bench_at_pt": {
"name": "在公交站点的长椅",
"tagRenderings": {
"bench_at_pt-bench": {
"render": "站立长凳"
"bench_at_pt-bench_type": {
"mappings": {
"1": {
"then": "站立长凳"
}
}
},
"bench_at_pt-name": {
"render": "{name}"

View file

@ -89,8 +89,7 @@
"then": "靠背:無"
}
},
"question": "這個長椅是否有靠背?",
"render": "靠背"
"question": "這個長椅是否有靠背?"
},
"bench-colour": {
"mappings": {
@ -166,8 +165,12 @@
"bench_at_pt": {
"name": "大眾運輸站點的長椅",
"tagRenderings": {
"bench_at_pt-bench": {
"render": "站立長椅"
"bench_at_pt-bench_type": {
"mappings": {
"1": {
"then": "站立長椅"
}
}
},
"bench_at_pt-name": {
"render": "{name}"
@ -251,7 +254,7 @@
}
},
"question": "這個自動販賣機仍有運作嗎?",
"render": "運作狀態是 <i>{operational_status</i>"
"render": "運作狀態是 <i>{operational_status}</i>"
}
},
"title": {
@ -445,17 +448,6 @@
"render": "單車停車場"
}
},
"charging_station": {
"tagRenderings": {
"Network": {
"question": "充電站所屬的網路是?",
"render": "{network}"
},
"OH": {
"question": "何時是充電站開放使用的時間?"
}
}
},
"ghost_bike": {
"name": "幽靈單車",
"title": {

View file

@ -39,7 +39,7 @@
}
},
"question": "Em que nível se encontra este elemento?",
"render": "Está no {vel}º andar"
"render": "Está no {level}º andar"
},
"opening_hours": {
"question": "Qual é o horário de funcionamento de {name}?",

View file

@ -473,7 +473,7 @@
},
"6": {
"question": "Welche Schwierigkeit hat hier die schwerste Route (französisch/belgisches System)?",
"render": "Die schwerste Route hat hier die Schwierigkeit {climbing:grade:french:min} (französisch/belgisches System)"
"render": "Die schwerste Route hat hier die Schwierigkeit {climbing:grade:french:max} (französisch/belgisches System)"
},
"7": {
"mappings": {
@ -874,8 +874,7 @@
"then": "Der Hydrant wurde entfernt."
}
},
"question": "Aktualisieren Sie den Lebenszyklusstatus des Hydranten.",
"render": "Lebenszyklus-Status"
"question": "Aktualisieren Sie den Lebenszyklusstatus des Hydranten."
},
"hydrant-type": {
"mappings": {

View file

@ -905,17 +905,16 @@
"hydrant-state": {
"mappings": {
"0": {
"then": "The hydrant is (fully or partially) working."
"then": "The hydrant is (fully or partially) working"
},
"1": {
"then": "The hydrant is unavailable."
"then": "The hydrant is unavailable"
},
"2": {
"then": "The hydrant has been removed."
"then": "The hydrant has been removed"
}
},
"question": "Update the lifecycle status of the hydrant.",
"render": "Lifecycle status"
"question": "Is this hydrant still working?"
},
"hydrant-type": {
"mappings": {

View file

@ -97,7 +97,7 @@
},
"caravansites-name": {
"question": "Comment s'appelle cet endroit ?",
"render": "Cet endroit s'appelle {nom}"
"render": "Cet endroit s'appelle {name}"
},
"caravansites-sanitary-dump": {
"mappings": {
@ -686,8 +686,7 @@
"then": "La borne a été retirée."
}
},
"question": "Mettre à jour létat de la borne.",
"render": "État"
"question": "Mettre à jour létat de la borne."
},
"hydrant-type": {
"mappings": {

View file

@ -829,8 +829,7 @@
"then": "Lidrante è stato rimosso."
}
},
"question": "Aggiorna lo stato di funzionamento dellidrante.",
"render": "Stato di funzionamento"
"question": "Aggiorna lo stato di funzionamento dellidrante."
},
"hydrant-type": {
"mappings": {

View file

@ -655,7 +655,7 @@
}
},
"question": "消火栓の色は何色ですか?",
"render": "消火栓の色は{color}です"
"render": "消火栓の色は{colour}です"
},
"hydrant-state": {
"mappings": {
@ -669,8 +669,7 @@
"then": "消火栓が撤去されました。"
}
},
"question": "消火栓のライフサイクルステータスを更新します。",
"render": "ライフサイクルステータス"
"question": "消火栓のライフサイクルステータスを更新します。"
},
"hydrant-type": {
"mappings": {

View file

@ -11,7 +11,7 @@
"start": "npm run start:prepare && npm-run-all --parallel start:parallel:*",
"strt": "npm run start:prepare && npm run start:parallel:parcel",
"start:prepare": "ts-node scripts/generateLayerOverview.ts --no-fail && npm run increase-memory",
"start:parallel:parcel": "node --max_old_space_size=8000 $(which parcel) serve *.html UI/** Logic/** assets/*.json assets/svg/* assets/generated/* assets/layers/*/*.svg assets/layers/*/*.jpg assets/layers/*/*.png assets/tagRenderings/*.json assets/themes/*/*.svg assets/themes/*/*.jpg assets/themes/*/*.png vendor/* vendor/*/*",
"start:parallel:parcel": "node --max_old_space_size=8000 $(which parcel) serve *.html UI/** Logic/** assets/*.json assets/svg/* assets/generated/* assets/layers/*/*.svg assets/layers/*/*.jpg assets/layers/*/*.png assets/layers/*/*.css assets/tagRenderings/*.json assets/themes/*/*.svg assets/themes/*/*.css assets/themes/*/*.jpg assets/themes/*/*.png vendor/* vendor/*/*",
"start:parallel:tailwindcli": "tailwindcss -i index.css -o css/index-tailwind-output.css --watch",
"generate:css": "tailwindcss -i index.css -o css/index-tailwind-output.css",
"test": "ts-node test/TestAll.ts",

View file

@ -188,7 +188,7 @@ class LayerOverviewUtils {
allTranslations
.filter(t => t.tr.translations[neededLanguage] === undefined && t.tr.translations["*"] === undefined)
.forEach(missing => {
themeErrorCount.push("The theme " + theme.id + " should be translation-complete for " + neededLanguage + ", but it lacks a translation for " + missing.context)
themeErrorCount.push("The theme " + theme.id + " should be translation-complete for " + neededLanguage + ", but it lacks a translation for " + missing.context+".\n\tThe full translation is "+missing.tr.translations)
})
}