diff --git a/Customizations/Layers/BikeCafes.ts b/Customizations/Layers/BikeCafes.ts index e69de29bb..29ff9ef27 100644 --- a/Customizations/Layers/BikeCafes.ts +++ b/Customizations/Layers/BikeCafes.ts @@ -0,0 +1,73 @@ +import {LayerDefinition} from "../LayerDefinition"; +import FixedText from "../Questions/FixedText"; +import {ImageCarouselWithUploadConstructor} from "../../UI/Image/ImageCarouselWithUpload"; +import Translations from "../../UI/i18n/Translations"; +import CafeName from "../Questions/bike/CafeName"; +import { Or, And, Tag, anyValueExcept, Regex } from "../../Logic/TagsFilter"; +import { PhoneNumberQuestion } from "../Questions/PhoneNumberQuestion"; +import Website from "../Questions/Website"; +import CafeRepair from "../Questions/bike/CafeRepair"; +import CafeDiy from "../Questions/bike/CafeDiy"; +import CafePump from "../Questions/bike/CafePump"; + + +export default class BikeCafes extends LayerDefinition { + private readonly repairsBikes = anyValueExcept("service:bicycle:repair", "no") + private readonly hasPump = new Tag("service:bicycle:pump", "yes") + private readonly diy = new Tag("service:bicycle:diy", "yes") + private readonly bikeServices = [ + this.diy, + this.repairsBikes, + this.hasPump + ] + private readonly to = Translations.t.cyclofix.cafe + + constructor() { + super(); + this.name = this.to.name; + this.icon = "./assets/bike/cafe.svg"; + this.overpassFilter = new And([ + new Or([ + new Regex("amenity", "^pub|bar|cafe") + ]), + new Or([ + ...this.bikeServices, + new Tag("pub", "cycling") + ]) + ]) + this.newElementTags = [ + new Tag("amenity", "pub"), + new Tag("pub", "cycling"), + ]; + this.maxAllowedOverlapPercentage = 10; + + this.minzoom = 13; + this.style = this.generateStyleFunction(); + this.title = new FixedText(this.to.title) + this.elementsToShow = [ + new ImageCarouselWithUploadConstructor(), + new CafeName(), + new PhoneNumberQuestion("{name}"), + new Website("{name}"), + new CafeRepair(), + new CafeDiy(), + new CafePump() + ]; + this.wayHandling = LayerDefinition.WAYHANDLING_CENTER_AND_WAY; + + } + + private generateStyleFunction() { + const self = this; + return function (properties: any) { + return { + color: "#00bb00", + icon: { + iconUrl: self.icon, + iconSize: [50, 50], + iconAnchor: [25,50] + } + }; + }; + } +} diff --git a/Customizations/Layers/BikeOtherShops.ts b/Customizations/Layers/BikeOtherShops.ts index 80d7c799a..5c8bacc6e 100644 --- a/Customizations/Layers/BikeOtherShops.ts +++ b/Customizations/Layers/BikeOtherShops.ts @@ -1,6 +1,6 @@ import { LayerDefinition } from "../LayerDefinition"; import Translations from "../../UI/i18n/Translations"; -import {And, Tag, Or} from "../../Logic/TagsFilter"; +import {And, Tag, Or, anyValueExcept} from "../../Logic/TagsFilter"; import { ImageCarouselWithUploadConstructor } from "../../UI/Image/ImageCarouselWithUpload"; import ShopRetail from "../Questions/bike/ShopRetail"; import ShopPump from "../Questions/bike/ShopPump"; @@ -14,13 +14,6 @@ import { PhoneNumberQuestion } from "../Questions/PhoneNumberQuestion"; import Website from "../Questions/Website"; -function anyValueExcept(key: string, exceptValue: string) { - return new And([ - new Tag(key, "*"), - new Tag(key, exceptValue, true) - ]) -} - export default class BikeOtherShops extends LayerDefinition { private readonly sellsBikes = new Tag("service:bicycle:retail", "yes") private readonly repairsBikes = anyValueExcept("service:bicycle:repair", "no") diff --git a/Customizations/Layouts/Cyclofix.ts b/Customizations/Layouts/Cyclofix.ts index 7aae50f81..728225766 100644 --- a/Customizations/Layouts/Cyclofix.ts +++ b/Customizations/Layouts/Cyclofix.ts @@ -6,6 +6,7 @@ import Translations from "../../UI/i18n/Translations"; import {DrinkingWater} from "../Layers/DrinkingWater"; import Combine from "../../UI/Base/Combine"; import BikeOtherShops from "../Layers/BikeOtherShops"; +import BikeCafes from "../Layers/BikeCafes"; export default class Cyclofix extends Layout { @@ -14,7 +15,7 @@ export default class Cyclofix extends Layout { "cyclofix", ["en", "nl", "fr"], Translations.t.cyclofix.title, - [new BikeServices(), new BikeShops(), new DrinkingWater(), new BikeParkings(), new BikeOtherShops()], + [new BikeServices(), new BikeShops(), new DrinkingWater(), new BikeParkings(), new BikeOtherShops(), new BikeCafes()], 16, 50.8465573, 4.3516970, diff --git a/Customizations/Questions/Website.ts b/Customizations/Questions/Website.ts index fff24cfbc..34051d343 100644 --- a/Customizations/Questions/Website.ts +++ b/Customizations/Questions/Website.ts @@ -8,7 +8,7 @@ export default class Website extends TagRenderingOptions { super({ question: Translations.t.general.questions.websiteOf.Subs({category: category}), freeform: { - renderTemplate: Translations.t.general.questions.websiteIs.Subs({category: category}), + renderTemplate: Translations.t.general.questions.websiteIs, template: "$phone$", key: "phone" } diff --git a/Customizations/Questions/bike/CafeDiy.ts b/Customizations/Questions/bike/CafeDiy.ts new file mode 100644 index 000000000..b72ff7bca --- /dev/null +++ b/Customizations/Questions/bike/CafeDiy.ts @@ -0,0 +1,18 @@ +import {TagRenderingOptions} from "../../TagRendering"; +import {Tag} from "../../../Logic/TagsFilter"; +import Translations from "../../../UI/i18n/Translations"; + + +export default class CafeDiy extends TagRenderingOptions { + constructor() { + const key = 'service:bicycle:diy' + const to = Translations.t.cyclofix.cafe.diy + super({ + question: to.question, + mappings: [ + {k: new Tag(key, "yes"), txt: to.yes}, + {k: new Tag(key, "no"), txt: to.no}, + ] + }); + } +} diff --git a/Customizations/Questions/bike/CafeName.ts b/Customizations/Questions/bike/CafeName.ts new file mode 100644 index 000000000..a834ac573 --- /dev/null +++ b/Customizations/Questions/bike/CafeName.ts @@ -0,0 +1,17 @@ +import {TagRenderingOptions} from "../../TagRendering"; +import Translations from "../../../UI/i18n/Translations"; + + +export default class CafeName extends TagRenderingOptions { + constructor() { + const to = Translations.t.cyclofix.cafe.qName + super({ + question: to.question, + freeform: { + key: "name", + renderTemplate: to.render, + template: to.template + } + }) + } +} diff --git a/Customizations/Questions/bike/CafePump.ts b/Customizations/Questions/bike/CafePump.ts new file mode 100644 index 000000000..a5754af63 --- /dev/null +++ b/Customizations/Questions/bike/CafePump.ts @@ -0,0 +1,18 @@ +import {TagRenderingOptions} from "../../TagRendering"; +import {Tag} from "../../../Logic/TagsFilter"; +import Translations from "../../../UI/i18n/Translations"; + + +export default class CafePump extends TagRenderingOptions { + constructor() { + const key = 'service:bicycle:pump' + const to = Translations.t.cyclofix.cafe.pump + super({ + question: to.question, + mappings: [ + {k: new Tag(key, "yes"), txt: to.yes}, + {k: new Tag(key, "no"), txt: to.no}, + ] + }); + } +} diff --git a/Customizations/Questions/bike/CafeRepair.ts b/Customizations/Questions/bike/CafeRepair.ts new file mode 100644 index 000000000..f46f64440 --- /dev/null +++ b/Customizations/Questions/bike/CafeRepair.ts @@ -0,0 +1,18 @@ +import {TagRenderingOptions} from "../../TagRendering"; +import {Tag} from "../../../Logic/TagsFilter"; +import Translations from "../../../UI/i18n/Translations"; + + +export default class CafeRepair extends TagRenderingOptions { + constructor() { + const key = 'service:bicycle:repair' + const to = Translations.t.cyclofix.cafe.repair + super({ + question: to.question, + mappings: [ + {k: new Tag(key, "yes"), txt: to.yes}, + {k: new Tag(key, "no"), txt: to.no} + ] + }); + } +} diff --git a/Customizations/Questions/bike/ShopDiy.ts b/Customizations/Questions/bike/ShopDiy.ts index 8ddbdf4e1..afc11105f 100644 --- a/Customizations/Questions/bike/ShopDiy.ts +++ b/Customizations/Questions/bike/ShopDiy.ts @@ -3,7 +3,7 @@ import {Tag} from "../../../Logic/TagsFilter"; import Translations from "../../../UI/i18n/Translations"; -export default class ShopPump extends TagRenderingOptions { +export default class ShopDiy extends TagRenderingOptions { constructor() { const key = 'service:bicycle:diy' const to = Translations.t.cyclofix.shop.diy diff --git a/Logic/TagsFilter.ts b/Logic/TagsFilter.ts index 021fdd8bd..0a2d3a556 100644 --- a/Logic/TagsFilter.ts +++ b/Logic/TagsFilter.ts @@ -111,6 +111,14 @@ export class Tag extends TagsFilter { } +export function anyValueExcept(key: string, exceptValue: string) { + return new And([ + new Tag(key, "*"), + new Tag(key, exceptValue, true) + ]) +} + + export class Or extends TagsFilter { public or: TagsFilter[] diff --git a/UI/i18n/Translations.ts b/UI/i18n/Translations.ts index 447b082a4..2d34a7f15 100644 --- a/UI/i18n/Translations.ts +++ b/UI/i18n/Translations.ts @@ -271,174 +271,246 @@ export default class Translations { }, services: { question: new T({ - en: 'Which services are available at this bike station?', - nl: 'Welke functies biedt dit fietspunt?', - fr: 'Quels services sont valables à cette station vélo?' + en: "Which services are available at this bike station?", + nl: "Welke functies biedt dit fietspunt?", + fr: "Quels services sont valables à cette station vélo?" }), pump: new T({ // Note: this previously read: a pump is available. It is not because the pump is present, that it is available (e.g. broken) - en: 'There is only a pump present', - nl: 'Er is enkel een pomp aanwezig', - fr: 'Il y a seulement une pompe' + en: "There is only a pump present", + nl: "Er is enkel een pomp aanwezig", + fr: "Il y a seulement une pompe" }), tools: new T({ - en: 'There are only tools (screwdrivers, pliers...) aanwezig', - nl: 'Er is enkel gereedschap aanwezig (schroevendraaier, tang...)', - fr: 'Il y a seulement des outils (tournevis, pinces...' + en: "There are only tools (screwdrivers, pliers...) aanwezig", + nl: "Er is enkel gereedschap aanwezig (schroevendraaier, tang...)", + fr: "Il y a seulement des outils (tournevis, pinces..." }), both: new T({ - en: 'There are both tools and a pump present', - nl: 'Er is zowel een pomp als gereedschap aanwezig', - fr: 'IL y a des outils et une pompe' + en: "There are both tools and a pump present", + nl: "Er is zowel een pomp als gereedschap aanwezig", + fr: "IL y a des outils et une pompe" }), }, stand: { question: new T({ - en: 'Does this bike station have a hook to suspend your bike with or a stand to elevate it?', - nl: 'Heeft dit herstelpunt een haak of standaard om je fiets op te hangen/zetten?', - fr: 'Est-ce que cette station vélo à un crochet pour suspendre son velo ou une accroche pour l\'élevé?' + en: "Does this bike station have a hook to suspend your bike with or a stand to elevate it?", + nl: "Heeft dit herstelpunt een haak of standaard om je fiets op te hangen/zetten?", + fr: "Est-ce que cette station vélo à un crochet pour suspendre son velo ou une accroche pour l'élevé?" }), - yes: new T({en: 'There is a hook or stand', nl: 'Er is een haak of standaard', fr: 'Oui il y a un crochet ou une accroche'}), - no: new T({en: 'There is no hook or stand', nl: 'Er is geen haak of standaard', fr: 'Non il n\'y pas de crochet ou d\'accroche'}), + yes: new T({en: "There is a hook or stand", nl: "Er is een haak of standaard", fr: "Oui il y a un crochet ou une accroche"}), + no: new T({en: "There is no hook or stand", nl: "Er is geen haak of standaard", fr: "Non il n'y pas de crochet ou d'accroche"}), } }, shop: { - name: new T({en: 'bike repair/shop', nl: 'fietszaak', fr: 'magasin ou réparateur de vélo'}), - - title: new T({en: 'Bike repair/shop', nl: 'Fietszaak', fr: 'Magasin et réparateur de vélo'}), - titleRepair: new T({en: 'Bike repair', nl: 'Fietsenmaker', fr: 'Réparateur de vélo'}), - titleShop: new T({en: 'Bike shop', nl: 'Fietswinkel', fr: 'Magasin de vélo'}), + name: new T({en: "bike repair/shop", nl: "fietszaak", fr: "magasin ou réparateur de vélo"}), + + title: new T({en: "Bike repair/shop", nl: "Fietszaak", fr: "Magasin et réparateur de vélo"}), + titleRepair: new T({en: "Bike repair", nl: "Fietsenmaker", fr: "Réparateur de vélo"}), + titleShop: new T({en: "Bike shop", nl: "Fietswinkel", fr: "Magasin de vélo"}), titleNamed: new T({ - en: 'Bike repair/shop {name}', - nl: 'Fietszaak {name}', - fr: 'Magasin et réparateur de vélo {name}' + en: "Bike repair/shop {name}", + nl: "Fietszaak {name}", + fr: "Magasin et réparateur de vélo {name}" }), titleRepairNamed: new T({ - en: 'Bike repair {name}', - nl: 'Fietsenmaker {name}', - fr: 'Réparateur de vélo {name}' + en: "Bike repair {name}", + nl: "Fietsenmaker {name}", + fr: "Réparateur de vélo {name}" + }), + titleShopNamed: new T({ + en: "Bike shop {name}", + nl: "Fietswinkel {name}", + fr: "Magasin de vélo {name}" }), - titleShopNamed: new T({en: 'Bike shop {name}', nl: 'Fietswinkel {name}', fr: 'Magasin de vélo {name}'}), retail: { question: new T({ - en: 'Does this shop sell bikes?', - nl: 'Verkoopt deze winkel fietsen?', - fr: 'Est-ce que ce magasin vend des vélos?' + en: "Does this shop sell bikes?", + nl: "Verkoopt deze winkel fietsen?", + fr: "Est-ce que ce magasin vend des vélos?" }), yes: new T({ - en: 'This shop sells bikes', - nl: 'Deze winkel verkoopt fietsen', - fr: 'Ce magasin vend des vélos' + en: "This shop sells bikes", + nl: "Deze winkel verkoopt fietsen", + fr: "Ce magasin vend des vélos" }), no: new T({ - en: 'This shop doesn\'t sell bikes', - nl: 'Deze winkel verkoopt geen fietsen', - fr: 'Ce magasin ne vend pas de vélo' + en: "This shop doesn't sell bikes", + nl: "Deze winkel verkoopt geen fietsen", + fr: "Ce magasin ne vend pas de vélo" }), }, repair: { question: new T({ - en: 'Does this shop repair bikes?', - nl: 'Verkoopt deze winkel fietsen?', - fr: 'Est-ce que ce magasin répare des vélos?' + en: "Does this shop repair bikes?", + nl: "Herstelt deze winkel fietsen?", + fr: "Est-ce que ce magasin répare des vélos?" }), - yes: new T({en: 'This shop repairs bikes', nl: 'Deze winkel herstelt fietsen', fr: 'Ce magasin répare des vélos'}), + yes: new T({en: "This shop repairs bikes", nl: "Deze winkel herstelt fietsen", fr: "Ce magasin répare des vélos"}), no: new T({ - en: 'This shop doesn\'t repair bikes', - nl: 'Deze winkel herstelt geen fietsen', - fr: 'Ce magasin ne répare pas les vélos' + en: "This shop doesn;t repair bikes", + nl: "Deze winkel herstelt geen fietsen", + fr: "Ce magasin ne répare pas les vélos" }), - sold: new T({en: 'This shop only repairs bikes bought here', nl: 'Deze winkel herstelt enkel fietsen die hier werden gekocht', fr: 'Ce magasin ne répare seulement les vélos achetés là-bas'}), - brand: new T({en: 'This shop only repairs bikes of a certain brand', nl: 'Deze winkel herstelt enkel fietsen van een bepaald merk', fr: 'Ce magasin ne répare seulement des marques spécifiques'}), + sold: new T({en: "This shop only repairs bikes bought here", nl: "Deze winkel herstelt enkel fietsen die hier werden gekocht", fr: "Ce magasin ne répare seulement les vélos achetés là-bas"}), + brand: new T({en: "This shop only repairs bikes of a certain brand", nl: "Deze winkel herstelt enkel fietsen van een bepaald merk", fr: "Ce magasin ne répare seulement des marques spécifiques"}), }, rental: { question: new T({ - en: 'Does this shop rent out bikes?', - nl: 'Verhuurt deze winkel fietsen?', - fr: 'Est-ce ce magasin loue des vélos?' + en: "Does this shop rent out bikes?", + nl: "Verhuurt deze winkel fietsen?", + fr: "Est-ce ce magasin loue des vélos?" }), - yes: new T({en: 'This shop rents out bikes', nl: 'Deze winkel verhuurt fietsen', fr: 'Ce magasin loue des vélos'}), + yes: new T({en: "This shop rents out bikes", nl: "Deze winkel verhuurt fietsen", fr: "Ce magasin loue des vélos"}), no: new T({ - en: 'This shop doesn\'t rent out bikes', - nl: 'Deze winkel verhuurt geen fietsen', - fr: 'Ce magasin ne loue pas de vélos' + en: "This shop doesn't rent out bikes", + nl: "Deze winkel verhuurt geen fietsen", + fr: "Ce magasin ne loue pas de vélos" }), }, pump: { question: new T({ - en: 'Does this shop offer a bike pump for use by anyone?', - nl: 'Biedt deze winkel een fietspomp aan voor iedereen?', - fr: 'Est-ce que ce magasin offre une pompe en accès libre?' + en: "Does this shop offer a bike pump for use by anyone?", + nl: "Biedt deze winkel een fietspomp aan voor iedereen?", + fr: "Est-ce que ce magasin offre une pompe en accès libre?" }), yes: new T({ - en: 'This shop offers a bike pump for anyone', - nl: 'Deze winkel biedt geen fietspomp aan voor eender wie', - fr: 'Ce magasin offre une pompe en acces libre' + en: "This shop offers a bike pump for anyone", + nl: "Deze winkel biedt geen fietspomp aan voor eender wie", + fr: "Ce magasin offre une pompe en acces libre" }), no: new T({ - en: 'This shop doesn\'t offer a bike pump for anyone', - nl: 'Deze winkel biedt een fietspomp aan voor iedereen', - fr: 'Ce magasin n\offre pas de pompe en libre accès' + en: "This shop doesn't offer a bike pump for anyone", + nl: "Deze winkel biedt een fietspomp aan voor iedereen", + fr: "Ce magasin n'offre pas de pompe en libre accès" }) }, qName: { - question: new T({en: 'What is the name of this bicycle shop?', nl: 'Wat is de naam van deze fietszaak?', fr: 'Quel est le nom du magasin de vélo?'}), - render: new T({en: 'This bicycle shop is called {name}', nl: 'Deze fietszaak heet {name}', fr: 'Ce magasin s\appelle {name}'}), - template: new T({en: 'This bicycle shop is called: $$$', nl: 'Deze fietszaak heet: $$$', fr: 'Ce magasin s\appelle {$$$'}) + question: new T({en: "What is the name of this bicycle shop?", nl: "Wat is de naam van deze fietszaak?", fr: "Quel est le nom du magasin de vélo?"}), + render: new T({en: "This bicycle shop is called {name}", nl: "Deze fietszaak heet {name}", fr: "Ce magasin s'appelle {name}"}), + template: new T({en: "This bicycle shop is called: $$$", nl: "Deze fietszaak heet: $$$", fr: "Ce magasin s'appelle $$$"}) }, secondHand: { - question: new T({en: 'Does this shop sell second-hand bikes?', nl: 'Verkoopt deze winkel tweedehands fietsen?', fr: 'Est-ce ce magasin vend des vélos d\'occasion'}), - yes: new T({en: 'This shop sells second-hand bikes', nl: 'Deze winkel verkoopt tweedehands fietsen', fr: 'Ce magasin vend des vélos d\'occasion'}), - no: new T({en: 'This shop doesn\'t sell second-hand bikes', nl: 'Deze winkel verkoopt geen tweedehands fietsen', fr: 'Ce magasin ne vend pas de vélos d\'occasion'}), - only: new T({en: 'This shop only sells second-hand bikes', nl: 'Deze winkel verkoopt enkel tweedehands fietsen', fr: 'Ce magasin vend seulement des vélos d\'occasion'}), + question: new T({en: "Does this shop sell second-hand bikes?", nl: "Verkoopt deze winkel tweedehands fietsen?", fr: "Est-ce ce magasin vend des vélos d'occasion"}), + yes: new T({en: "This shop sells second-hand bikes", nl: "Deze winkel verkoopt tweedehands fietsen", fr: "Ce magasin vend des vélos d'occasion"}), + no: new T({en: "This shop doesn't sell second-hand bikes", nl: "Deze winkel verkoopt geen tweedehands fietsen", fr: "Ce magasin ne vend pas de vélos d'occasion"}), + only: new T({en: "This shop only sells second-hand bikes", nl: "Deze winkel verkoopt enkel tweedehands fietsen", fr: "Ce magasin vend seulement des vélos d'occasion"}), }, diy: { question: new T({ - en: 'Are there tools here to repair your own bike?', - nl: 'Biedt deze winkel gereedschap aan om je fiets zelf te herstellen?', - fr: 'Est-ce qu\'il y a des outils pour réparer son vélo dans ce magasin?', + en: "Are there tools here to repair your own bike?", + nl: "Biedt deze winkel gereedschap aan om je fiets zelf te herstellen?", + fr: "Est-ce qu'il y a des outils pour réparer son vélo dans ce magasin?", }), yes: new T({ - en: 'This shop offers tools for DIY repair', - nl: 'Deze winkel biedt gereedschap aan om je fiets zelf te herstellen', - fr: 'Ce magasin offre des outils pour réparer son vélo soi-même' + en: "This shop offers tools for DIY repair", + nl: "Deze winkel biedt gereedschap aan om je fiets zelf te herstellen", + fr: "Ce magasin offre des outils pour réparer son vélo soi-même" }), no: new T({ - en: 'This shop doesn\'t offer tools for DIY repair', - nl: 'Deze winkel biedt geen gereedschap aan om je fiets zelf te herstellen', - fr: 'Ce magasin n\'offre pas des outils pour réparer son vélo soi-même' + en: "This shop doesn't offer tools for DIY repair", + nl: "Deze winkel biedt geen gereedschap aan om je fiets zelf te herstellen", + fr: "Ce magasin n'offre pas des outils pour réparer son vélo soi-même" }), } }, - nonBikeShop: { + cafe: { + name: new T({en: "bike cafe", nl: "fietscafé", fr: "TODO: fr"}), + title: new T({en: "Bike cafe", nl: "fietscafé", fr: "TODO: fr"}), + qName: { + question: new T({en: "What is the name of this bike cafe?", nl: "Wat is de naam van dit fietscafé?", fr: "TODO: fr"}), + render: new T({en: "This bike cafe is called {name}", nl: "Dit fietscafé heet {name}", fr: "TODO: fr"}), + template: new T({en: "This bike cafe is called: $$$", nl: "Dit fietscafé heet: $$$", fr: "TODO: fr"}) + }, + repair: { + question: new T({ + en: "Does this bike cafe repair bikes?", + nl: "Verkoopt dit fietscafé fietsen?", + fr: "TODO: fr?" + }), + yes: new T({en: "This bike cafe repairs bikes", nl: "Dit fietscafé herstelt fietsen", fr: "TODO: fr"}), + no: new T({ + en: "This bike cafe doesn;t repair bikes", + nl: "Dit fietscafé herstelt geen fietsen", + fr: "TODO: fr" + }) + }, + pump: { + question: new T({ + en: "Does this bike cafe offer a bike pump for use by anyone?", + nl: "Biedt dit fietscafé een fietspomp aan voor iedereen?", + fr: "TODO: fr" + }), + yes: new T({ + en: "This bike cafe offers a bike pump for anyone", + nl: "Dit fietscafé biedt geen fietspomp aan voor eender wie", + fr: "TODO: fr" + }), + no: new T({ + en: "This bike cafe doesn't offer a bike pump for anyone", + nl: "Dit fietscafé biedt een fietspomp aan voor iedereen", + fr: "TODO: fr" + }) + }, + diy: { + question: new T({ + en: "Are there tools here to repair your own bike?", + nl: "Biedt dit fietscafé gereedschap aan om je fiets zelf te herstellen?", + fr: "TODO: fr", + }), + yes: new T({ + en: "This bike cafe offers tools for DIY repair", + nl: "Dit fietscafé biedt gereedschap aan om je fiets zelf te herstellen", + fr: "TODO: fr" + }), + no: new T({ + en: "This bike cafe doesn't offer tools for DIY repair", + nl: "Dit fietscafé biedt geen gereedschap aan om je fiets zelf te herstellen", + fr: "TODO: fr" + }) + } + }, + nonBikeShop: { name: new T({ - en: 'shop that sells/repairs bikes', - nl: 'winkel die fietsen verkoopt/herstelt', - fr: 'TODO: fr' + en: "shop that sells/repairs bikes", + nl: "winkel die fietsen verkoopt/herstelt", + fr: "TODO: fr" }), title: new T({ - en: 'Shop that sells/repairs bikes', - nl: 'Winkel die fietsen verkoopt/herstelt', - fr: 'TODO: fr' + en: "Shop that sells/repairs bikes", + nl: "Winkel die fietsen verkoopt/herstelt", + fr: "TODO: fr" }), - titleRepair: new T({en: 'Shop that repairs bikes', nl: 'Winkel die fietsen herstelt', fr: 'TODO: fr'}), - titleShop: new T({en: 'Shop that sells bikes', nl: 'Winkel die fietsen verkoopt', fr: 'TODO: fr'}), - + titleRepair: new T({ + en: "Shop that repairs bikes", + nl: "Winkel die fietsen herstelt", + fr: "TODO: fr" + }), + titleShop: new T({ + en: "Shop that sells bikes", + nl: "Winkel die fietsen verkoopt", + fr: "TODO: fr" + }), + titleNamed: new T({ - en: '{name} (sells/repairs bikes)', - nl: '{name} (verkoopt/herstelt fietsen)', - fr: 'TODO: fr' + en: "{name} (sells/repairs bikes)", + nl: "{name} (verkoopt/herstelt fietsen)", + fr: "TODO: fr" }), titleRepairNamed: new T({ - en: '{name} (repairs bikes)', - nl: '{name} (herstelt fietsen)', - fr: 'TODO: fr' + en: "{name} (repairs bikes)", + nl: "{name} (herstelt fietsen)", + fr: "TODO: fr" + }), + titleShopNamed: new T({ + en: "{name} (sells bikes)", + nl: "{name} (verkoopt fietsen)", + fr: "TODO: fr" }), - titleShopNamed: new T({en: '{name} (sells bikes)', nl: '{name} (verkoopt fietsen)', fr: 'TODO: fr'}), }, drinking_water: { title: new T({