forked from MapComplete/MapComplete
		
	Fix tests, refactoring kindof works now
This commit is contained in:
		
							parent
							
								
									813e96f8df
								
							
						
					
					
						commit
						1447863fa7
					
				
					 11 changed files with 307 additions and 254 deletions
				
			
		|  | @ -1,6 +1,6 @@ | ||||||
| import {AndOrTagConfigJson} from "./TagConfigJson"; | import {AndOrTagConfigJson} from "./TagConfigJson"; | ||||||
| import {And, Or, RegexTag, Tag, TagsFilter} from "../../Logic/Tags"; | import {And, Or, RegexTag, Tag, TagsFilter} from "../../Logic/Tags"; | ||||||
| import Translation from "../../UI/i18n/Translation"; | import {Translation} from "../../UI/i18n/Translations"; | ||||||
| 
 | 
 | ||||||
| import {Utils} from "../../Utils"; | import {Utils} from "../../Utils"; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| import Translation from "../../UI/i18n/Translation"; | import {Translation} from "../../UI/i18n/Translations"; | ||||||
| import {TagsFilter} from "../../Logic/Tags"; | import {TagsFilter} from "../../Logic/Tags"; | ||||||
| import {TagRenderingConfigJson} from "./TagRenderingConfigJson"; | import {TagRenderingConfigJson} from "./TagRenderingConfigJson"; | ||||||
| import Translations from "../../UI/i18n/Translations"; | import Translations from "../../UI/i18n/Translations"; | ||||||
|  |  | ||||||
|  | @ -1,6 +1,4 @@ | ||||||
| import {Utils} from "../Utils"; | import {Utils} from "../Utils"; | ||||||
| import {Util} from "leaflet"; |  | ||||||
| import indexOf = Util.indexOf; |  | ||||||
| 
 | 
 | ||||||
| export abstract class TagsFilter { | export abstract class TagsFilter { | ||||||
|     abstract matches(tags: { k: string, v: string }[]): boolean |     abstract matches(tags: { k: string, v: string }[]): boolean | ||||||
|  | @ -298,21 +296,49 @@ export class And extends TagsFilter { | ||||||
|     } |     } | ||||||
|      |      | ||||||
|     isEquivalent(other: TagsFilter): boolean { |     isEquivalent(other: TagsFilter): boolean { | ||||||
|         if(other instanceof And){ |         if (!(other instanceof And)) { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
| 
 | 
 | ||||||
|             for (const selfTag of this.and) { |         for (const selfTag of this.and) { | ||||||
|                 let matchFound = false; |             let matchFound = false; | ||||||
|                 for (let i = 0; i < other.and.length && !matchFound; i++){ |             for (let i = 0; i < other.and.length && !matchFound; i++) { | ||||||
|                     let otherTag = other.and[i]; |                 let otherTag = other.and[i]; | ||||||
|                     matchFound = selfTag.isEquivalent(otherTag); |                 matchFound = selfTag.isEquivalent(otherTag); | ||||||
|                 } |             } | ||||||
|                 if(!matchFound){ |             if (!matchFound) { | ||||||
|                     return false; |                 return false; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         for (const selfTag of this.and) { | ||||||
|  |             let matchFound = false; | ||||||
|  |             for (const otherTag of other.and) { | ||||||
|  |                 matchFound = selfTag.isEquivalent(otherTag); | ||||||
|  |                 if (matchFound) { | ||||||
|  |                     break; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             return true; |             if (!matchFound) { | ||||||
|  |                 return false; | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|         return false; | 
 | ||||||
|  |         for (const otherTag of other.and) { | ||||||
|  |             let matchFound = false; | ||||||
|  |             for (const selfTag of this.and) { | ||||||
|  |                 matchFound = selfTag.isEquivalent(otherTag); | ||||||
|  |                 if (matchFound) { | ||||||
|  |                     break; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             if (!matchFound) { | ||||||
|  |                 return false; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         return true; | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -356,7 +382,7 @@ export class TagUtils { | ||||||
|             } |             } | ||||||
|             const neededValues : string[] = neededTags[neededKey]; |             const neededValues : string[] = neededTags[neededKey]; | ||||||
|             for (const neededValue of neededValues) { |             for (const neededValue of neededValues) { | ||||||
|                 if(indexOf(availableValues, neededValue) < 0){ |                 if (availableValues.indexOf(neededValue) < 0) { | ||||||
|                     return false; |                     return false; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  | @ -27,7 +27,6 @@ export default class QuestionBox extends UIElement { | ||||||
|             .map((tagRendering, i) => new TagRenderingQuestion(this._tags, tagRendering, |             .map((tagRendering, i) => new TagRenderingQuestion(this._tags, tagRendering, | ||||||
|                 () => { |                 () => { | ||||||
|                     // We save
 |                     // We save
 | ||||||
|                     self._skippedQuestions.data.push(i) |  | ||||||
|                     self._skippedQuestions.ping(); |                     self._skippedQuestions.ping(); | ||||||
|                 }, |                 }, | ||||||
|                 Translations.t.general.skip.Clone() |                 Translations.t.general.skip.Clone() | ||||||
|  |  | ||||||
|  | @ -18,6 +18,11 @@ export default class TagRenderingAnswer extends UIElement { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     InnerRender(): string { |     InnerRender(): string { | ||||||
|  |         if(this._configuration.condition !== undefined){ | ||||||
|  |             if(!this._configuration.condition.matchesProperties(this._tags.data)){ | ||||||
|  |                 return ""; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|         const tr = this._configuration.GetRenderValue(this._tags.data); |         const tr = this._configuration.GetRenderValue(this._tags.data); | ||||||
|         if(tr === undefined){ |         if(tr === undefined){ | ||||||
|             return ""; |             return ""; | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ import TagRenderingConfig from "../../Customizations/JSON/TagRenderingConfig"; | ||||||
| import {InputElement} from "../Input/InputElement"; | import {InputElement} from "../Input/InputElement"; | ||||||
| import {And, Tag, TagsFilter, TagUtils} from "../../Logic/Tags"; | import {And, Tag, TagsFilter, TagUtils} from "../../Logic/Tags"; | ||||||
| import ValidatedTextField from "../Input/ValidatedTextField"; | import ValidatedTextField from "../Input/ValidatedTextField"; | ||||||
| import Translation from "../i18n/Translation"; | import {Translation} from "../i18n/Translations"; | ||||||
| import {FixedInputElement} from "../Input/FixedInputElement"; | import {FixedInputElement} from "../Input/FixedInputElement"; | ||||||
| import {SubstitutedTranslation} from "../SpecialVisualizations"; | import {SubstitutedTranslation} from "../SpecialVisualizations"; | ||||||
| import {RadioButton} from "../Input/RadioButton"; | import {RadioButton} from "../Input/RadioButton"; | ||||||
|  | @ -18,8 +18,6 @@ import {Changes} from "../../Logic/Osm/Changes"; | ||||||
| import {VariableUiElement} from "../Base/VariableUIElement"; | import {VariableUiElement} from "../Base/VariableUIElement"; | ||||||
| import Translations from "../i18n/Translations"; | import Translations from "../i18n/Translations"; | ||||||
| import {FixedUiElement} from "../Base/FixedUiElement"; | import {FixedUiElement} from "../Base/FixedUiElement"; | ||||||
| import {Util} from "leaflet"; |  | ||||||
| import indexOf = Util.indexOf; |  | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Shows the question element. |  * Shows the question element. | ||||||
|  | @ -114,16 +112,13 @@ export default class TagRenderingQuestion extends UIElement { | ||||||
| 
 | 
 | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private SplitMultiAnswer(tags: TagsFilter) { |  | ||||||
| 
 |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     private GenerateMultiAnswer(elements: InputElement<TagsFilter>[], freeformField: InputElement<TagsFilter>): InputElement<TagsFilter> { |     private GenerateMultiAnswer(elements: InputElement<TagsFilter>[], freeformField: InputElement<TagsFilter>): InputElement<TagsFilter> { | ||||||
|         const possibleTags = elements.map(el => el.GetValue().data); |         const possibleTags = elements.map(el => el.GetValue().data); | ||||||
|         const checkBoxes = new CheckBoxes(elements); |         const checkBoxes = new CheckBoxes(elements); | ||||||
|         const inputEl = new InputElementMap<number[], TagsFilter>( |         const inputEl = new InputElementMap<number[], TagsFilter>( | ||||||
|             checkBoxes, |             checkBoxes, | ||||||
|             (t0, t1) => { |             (t0, t1) => { | ||||||
|  |                 console.log("IsEquiv?",t0, t1, t0?.isEquivalent(t1)) | ||||||
|                 return t0?.isEquivalent(t1) ?? false |                 return t0?.isEquivalent(t1) ?? false | ||||||
|             }, |             }, | ||||||
|             (indices) => { |             (indices) => { | ||||||
|  | @ -131,7 +126,8 @@ export default class TagRenderingQuestion extends UIElement { | ||||||
|                     return undefined; |                     return undefined; | ||||||
|                 } |                 } | ||||||
|                 const tags: TagsFilter[] = indices.map(i => elements[i].GetValue().data); |                 const tags: TagsFilter[] = indices.map(i => elements[i].GetValue().data); | ||||||
|                 return TagUtils.FlattenMultiAnswer(tags); |                 const multi = TagUtils.FlattenMultiAnswer(tags); | ||||||
|  |                 return multi; | ||||||
|             }, |             }, | ||||||
|             (tags: TagsFilter) => { |             (tags: TagsFilter) => { | ||||||
|                 // {key --> values[]}
 |                 // {key --> values[]}
 | ||||||
|  | @ -171,7 +167,7 @@ export default class TagRenderingQuestion extends UIElement { | ||||||
|                 if (freeformField) { |                 if (freeformField) { | ||||||
|                     if (freeformExtras.length > 0) { |                     if (freeformExtras.length > 0) { | ||||||
|                         freeformField.GetValue().setData(new Tag(this._configuration.freeform.key, freeformExtras.join(";"))); |                         freeformField.GetValue().setData(new Tag(this._configuration.freeform.key, freeformExtras.join(";"))); | ||||||
|                         indices.push(indexOf(elements, freeformField)) |                         indices.push(elements.indexOf(freeformField)) | ||||||
|                     } else { |                     } else { | ||||||
|                         freeformField.GetValue().setData(undefined); |                         freeformField.GetValue().setData(undefined); | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ import {UIEventSource} from "../Logic/UIEventSource"; | ||||||
| import {VariableUiElement} from "./Base/VariableUIElement"; | import {VariableUiElement} from "./Base/VariableUIElement"; | ||||||
| import LiveQueryHandler from "../Logic/Web/LiveQueryHandler"; | import LiveQueryHandler from "../Logic/Web/LiveQueryHandler"; | ||||||
| import {ImageCarousel} from "./Image/ImageCarousel"; | import {ImageCarousel} from "./Image/ImageCarousel"; | ||||||
| import Translation from "./i18n/Translation"; | import {Translation} from "./i18n/Translations"; | ||||||
| import Combine from "./Base/Combine"; | import Combine from "./Base/Combine"; | ||||||
| import {FixedUiElement} from "./Base/FixedUiElement"; | import {FixedUiElement} from "./Base/FixedUiElement"; | ||||||
| import Locale from "../UI/i18n/Locale"; | import Locale from "../UI/i18n/Locale"; | ||||||
|  |  | ||||||
|  | @ -3,104 +3,3 @@ import Locale from "./Locale" | ||||||
| import Combine from "../Base/Combine"; | import Combine from "../Base/Combine"; | ||||||
| import {Utils} from "../../Utils"; | import {Utils} from "../../Utils"; | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| export default class Translation extends UIElement { |  | ||||||
| 
 |  | ||||||
|     private static forcedLanguage = undefined; |  | ||||||
| 
 |  | ||||||
|     public Subs(text: any): Translation { |  | ||||||
|         const newTranslations = {}; |  | ||||||
|         for (const lang in this.translations) { |  | ||||||
|             let template: string = this.translations[lang]; |  | ||||||
|             for (const k in text) { |  | ||||||
|                 const combined = []; |  | ||||||
|                 const parts = template.split("{" + k + "}"); |  | ||||||
|                 const el: string | UIElement = text[k]; |  | ||||||
|                 if (el === undefined) { |  | ||||||
|                     continue; |  | ||||||
|                 } |  | ||||||
|                 let rtext: string = ""; |  | ||||||
|                 if (typeof (el) === "string") { |  | ||||||
|                     rtext = el; |  | ||||||
|                 } else { |  | ||||||
|                     Translation.forcedLanguage = lang; // This is a very dirty hack - it'll bite me one day
 |  | ||||||
|                     rtext = el.InnerRender(); |  | ||||||
|                 }    |  | ||||||
|                 for (let i = 0; i < parts.length - 1; i++) { |  | ||||||
|                     combined.push(parts[i]); |  | ||||||
|                     combined.push(rtext) |  | ||||||
|                 } |  | ||||||
|                 combined.push(parts[parts.length - 1]); |  | ||||||
|                 template = new Combine(combined).InnerRender(); |  | ||||||
|             } |  | ||||||
|             newTranslations[lang] = template; |  | ||||||
|         } |  | ||||||
|         Translation.forcedLanguage = undefined; |  | ||||||
|         return new Translation(newTranslations); |  | ||||||
| 
 |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|   |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     get txt(): string { |  | ||||||
|         if (this.translations["*"]) { |  | ||||||
|             return this.translations["*"]; |  | ||||||
|         } |  | ||||||
|         const txt = this.translations[Translation.forcedLanguage ?? Locale.language.data]; |  | ||||||
|         if (txt !== undefined) { |  | ||||||
|             return txt; |  | ||||||
|         } |  | ||||||
|         const en = this.translations["en"]; |  | ||||||
|         if (en !== undefined) { |  | ||||||
|             return en; |  | ||||||
|         } |  | ||||||
|         for (const i in this.translations) { |  | ||||||
|             return this.translations[i]; // Return a random language
 |  | ||||||
|         } |  | ||||||
|         console.error("Missing language ",Locale.language.data,"for",this.translations) |  | ||||||
|         return undefined; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     InnerRender(): string { |  | ||||||
|         return this.txt |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public readonly translations: object |  | ||||||
| 
 |  | ||||||
|     constructor(translations: object) { |  | ||||||
|         super(Locale.language) |  | ||||||
|         let count = 0; |  | ||||||
|         for (const translationsKey in translations) { |  | ||||||
|             count++; |  | ||||||
|         } |  | ||||||
|         this.translations = translations |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public replace(a: string, b: string) { |  | ||||||
|         if(a.startsWith("{") && a.endsWith("}")){ |  | ||||||
|             a = a.substr(1, a.length - 2); |  | ||||||
|         } |  | ||||||
|         const result= this.Subs({[a]: b}); |  | ||||||
|         return result; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public Clone() { |  | ||||||
|         return new Translation(this.translations) |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     FirstSentence() { |  | ||||||
|          |  | ||||||
|         const tr = {}; |  | ||||||
|         for (const lng in this.translations) { |  | ||||||
|             let txt = this.translations[lng]; |  | ||||||
|             txt = txt.replace(/\..*/, ""); |  | ||||||
|             txt = Utils.EllipsesAfter(txt, 255); |  | ||||||
|             tr[lng] = txt; |  | ||||||
|         } |  | ||||||
|          |  | ||||||
|         return new Translation(tr); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  | @ -1,9 +1,111 @@ | ||||||
| import Translation from "./Translation"; |  | ||||||
| import T from "./Translation"; |  | ||||||
| import {UIElement} from "../UIElement"; | import {UIElement} from "../UIElement"; | ||||||
| import {FixedUiElement} from "../Base/FixedUiElement"; | import {FixedUiElement} from "../Base/FixedUiElement"; | ||||||
|  | import Combine from "../Base/Combine"; | ||||||
|  | import Locale from "./Locale"; | ||||||
|  | import {Utils} from "../../Utils"; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | export class Translation extends UIElement { | ||||||
|  | 
 | ||||||
|  |     private static forcedLanguage = undefined; | ||||||
|  | 
 | ||||||
|  |     public Subs(text: any): Translation { | ||||||
|  |         const newTranslations = {}; | ||||||
|  |         for (const lang in this.translations) { | ||||||
|  |             let template: string = this.translations[lang]; | ||||||
|  |             for (const k in text) { | ||||||
|  |                 const combined = []; | ||||||
|  |                 const parts = template.split("{" + k + "}"); | ||||||
|  |                 const el: string | UIElement = text[k]; | ||||||
|  |                 if (el === undefined) { | ||||||
|  |                     continue; | ||||||
|  |                 } | ||||||
|  |                 let rtext: string = ""; | ||||||
|  |                 if (typeof (el) === "string") { | ||||||
|  |                     rtext = el; | ||||||
|  |                 } else { | ||||||
|  |                     Translation.forcedLanguage = lang; // This is a very dirty hack - it'll bite me one day
 | ||||||
|  |                     rtext = el.InnerRender(); | ||||||
|  |                 } | ||||||
|  |                 for (let i = 0; i < parts.length - 1; i++) { | ||||||
|  |                     combined.push(parts[i]); | ||||||
|  |                     combined.push(rtext) | ||||||
|  |                 } | ||||||
|  |                 combined.push(parts[parts.length - 1]); | ||||||
|  |                 template = new Combine(combined).InnerRender(); | ||||||
|  |             } | ||||||
|  |             newTranslations[lang] = template; | ||||||
|  |         } | ||||||
|  |         Translation.forcedLanguage = undefined; | ||||||
|  |         return new Translation(newTranslations); | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     get txt(): string { | ||||||
|  |         if (this.translations["*"]) { | ||||||
|  |             return this.translations["*"]; | ||||||
|  |         } | ||||||
|  |         const txt = this.translations[Translation.forcedLanguage ?? Locale.language.data]; | ||||||
|  |         if (txt !== undefined) { | ||||||
|  |             return txt; | ||||||
|  |         } | ||||||
|  |         const en = this.translations["en"]; | ||||||
|  |         if (en !== undefined) { | ||||||
|  |             return en; | ||||||
|  |         } | ||||||
|  |         for (const i in this.translations) { | ||||||
|  |             return this.translations[i]; // Return a random language
 | ||||||
|  |         } | ||||||
|  |         console.error("Missing language ",Locale.language.data,"for",this.translations) | ||||||
|  |         return undefined; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     InnerRender(): string { | ||||||
|  |         return this.txt | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public readonly translations: object | ||||||
|  | 
 | ||||||
|  |     constructor(translations: object) { | ||||||
|  |         super(Locale.language) | ||||||
|  |         let count = 0; | ||||||
|  |         for (const translationsKey in translations) { | ||||||
|  |             count++; | ||||||
|  |         } | ||||||
|  |         this.translations = translations | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public replace(a: string, b: string) { | ||||||
|  |         if(a.startsWith("{") && a.endsWith("}")){ | ||||||
|  |             a = a.substr(1, a.length - 2); | ||||||
|  |         } | ||||||
|  |         const result= this.Subs({[a]: b}); | ||||||
|  |         return result; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Clone() { | ||||||
|  |         return new Translation(this.translations) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     FirstSentence() { | ||||||
|  | 
 | ||||||
|  |         const tr = {}; | ||||||
|  |         for (const lng in this.translations) { | ||||||
|  |             let txt = this.translations[lng]; | ||||||
|  |             txt = txt.replace(/\..*/, ""); | ||||||
|  |             txt = Utils.EllipsesAfter(txt, 255); | ||||||
|  |             tr[lng] = txt; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         return new Translation(tr); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| export default class Translations { | export default class Translations { | ||||||
| 
 | 
 | ||||||
|     constructor() { |     constructor() { | ||||||
|  | @ -13,7 +115,7 @@ export default class Translations { | ||||||
| 
 | 
 | ||||||
|     static t = { |     static t = { | ||||||
|         image: { |         image: { | ||||||
|             addPicture: new T({ |             addPicture: new Translation({ | ||||||
|                 en: 'Add picture', |                 en: 'Add picture', | ||||||
|                 es: 'Añadir foto', |                 es: 'Añadir foto', | ||||||
|                 ca: 'Afegir foto', |                 ca: 'Afegir foto', | ||||||
|  | @ -23,7 +125,7 @@ export default class Translations { | ||||||
|                 de: "Bild hinzufügen" |                 de: "Bild hinzufügen" | ||||||
|             }), |             }), | ||||||
| 
 | 
 | ||||||
|             uploadingPicture: new T({ |             uploadingPicture: new Translation({ | ||||||
|                 en: 'Uploading your picture...', |                 en: 'Uploading your picture...', | ||||||
|                 nl: 'Bezig met een foto te uploaden...', |                 nl: 'Bezig met een foto te uploaden...', | ||||||
|                 es: 'Subiendo tu imagen ...', |                 es: 'Subiendo tu imagen ...', | ||||||
|  | @ -33,7 +135,7 @@ export default class Translations { | ||||||
|                 de: 'Ihr Bild hochladen...' |                 de: 'Ihr Bild hochladen...' | ||||||
|             }), |             }), | ||||||
| 
 | 
 | ||||||
|             uploadingMultiple: new T({ |             uploadingMultiple: new Translation({ | ||||||
|                 en: "Uploading {count} of your picture...", |                 en: "Uploading {count} of your picture...", | ||||||
|                 nl: "Bezig met {count} foto's te uploaden...", |                 nl: "Bezig met {count} foto's te uploaden...", | ||||||
|                 ca: "Pujant {count} de la teva imatge...", |                 ca: "Pujant {count} de la teva imatge...", | ||||||
|  | @ -43,7 +145,7 @@ export default class Translations { | ||||||
|                 de: "{count} Ihrer Bilder hochgeladen..." |                 de: "{count} Ihrer Bilder hochgeladen..." | ||||||
|             }), |             }), | ||||||
| 
 | 
 | ||||||
|             pleaseLogin: new T({ |             pleaseLogin: new Translation({ | ||||||
|                 en: 'Please login to add a picure', |                 en: 'Please login to add a picure', | ||||||
|                 nl: 'Gelieve je aan te melden om een foto toe te voegen', |                 nl: 'Gelieve je aan te melden om een foto toe te voegen', | ||||||
|                 es: 'Entra para subir una foto', |                 es: 'Entra para subir una foto', | ||||||
|  | @ -53,7 +155,7 @@ export default class Translations { | ||||||
|                 de: 'Bitte einloggen, um ein Bild hinzuzufügen' |                 de: 'Bitte einloggen, um ein Bild hinzuzufügen' | ||||||
|             }), |             }), | ||||||
| 
 | 
 | ||||||
|             willBePublished: new T({ |             willBePublished: new Translation({ | ||||||
|                 en: 'Your picture will be published: ', |                 en: 'Your picture will be published: ', | ||||||
|                 es: 'Tu foto será publicada: ', |                 es: 'Tu foto será publicada: ', | ||||||
|                 ca: 'La teva foto serà publicada: ', |                 ca: 'La teva foto serà publicada: ', | ||||||
|  | @ -63,7 +165,7 @@ export default class Translations { | ||||||
|                 de: 'Ihr Bild wird veröffentlicht: ' |                 de: 'Ihr Bild wird veröffentlicht: ' | ||||||
|             }), |             }), | ||||||
| 
 | 
 | ||||||
|             cco: new T({ |             cco: new Translation({ | ||||||
|                 en: 'in the public domain', |                 en: 'in the public domain', | ||||||
|                 ca: 'en domini públic', |                 ca: 'en domini públic', | ||||||
|                 es: 'en dominio público', |                 es: 'en dominio público', | ||||||
|  | @ -73,7 +175,7 @@ export default class Translations { | ||||||
|                 de: 'in die Public Domain' |                 de: 'in die Public Domain' | ||||||
|             }), |             }), | ||||||
| 
 | 
 | ||||||
|             ccbs: new T({ |             ccbs: new Translation({ | ||||||
|                 en: 'under the CC-BY-SA-license', |                 en: 'under the CC-BY-SA-license', | ||||||
|                 nl: 'onder de CC-BY-SA-licentie', |                 nl: 'onder de CC-BY-SA-licentie', | ||||||
|                 ca: 'sota llicència CC-BY-SA', |                 ca: 'sota llicència CC-BY-SA', | ||||||
|  | @ -82,7 +184,7 @@ export default class Translations { | ||||||
|                 gl: 'baixo a licenza CC-BY-SA', |                 gl: 'baixo a licenza CC-BY-SA', | ||||||
|                 de: 'unter der CC-BY-SA-Lizenz' |                 de: 'unter der CC-BY-SA-Lizenz' | ||||||
|             }), |             }), | ||||||
|             ccb: new T({ |             ccb: new Translation({ | ||||||
|                 en: 'under the CC-BY-license', |                 en: 'under the CC-BY-license', | ||||||
|                 ca: 'sota la llicència CC-BY', |                 ca: 'sota la llicència CC-BY', | ||||||
|                 es: 'bajo licencia CC-BY', |                 es: 'bajo licencia CC-BY', | ||||||
|  | @ -92,7 +194,7 @@ export default class Translations { | ||||||
|                 de: 'unter der CC-BY-Lizenz' |                 de: 'unter der CC-BY-Lizenz' | ||||||
|             }), |             }), | ||||||
| 
 | 
 | ||||||
|             uploadFailed: new T({ |             uploadFailed: new Translation({ | ||||||
|                 en: "Could not upload your picture. Do you have internet and are third party API's allowed? Brave browser or UMatrix might block them.", |                 en: "Could not upload your picture. Do you have internet and are third party API's allowed? Brave browser or UMatrix might block them.", | ||||||
|                 nl: "Afbeelding uploaden mislukt. Heb je internet? Gebruik je Brave of UMatrix? Dan moet je derde partijen toelaten.", |                 nl: "Afbeelding uploaden mislukt. Heb je internet? Gebruik je Brave of UMatrix? Dan moet je derde partijen toelaten.", | ||||||
|                 ca: "No s\'ha pogut carregar la imatge. Tens Internet i es permeten API de tercers? El navegador Brave o UMatrix podria bloquejar-les.", |                 ca: "No s\'ha pogut carregar la imatge. Tens Internet i es permeten API de tercers? El navegador Brave o UMatrix podria bloquejar-les.", | ||||||
|  | @ -102,7 +204,7 @@ export default class Translations { | ||||||
|                 de: "Wir konnten Ihr Bild nicht hochladen. Haben Sie Internet und sind API's von Dritten erlaubt? Brave Browser oder UMatrix blockieren evtl..", |                 de: "Wir konnten Ihr Bild nicht hochladen. Haben Sie Internet und sind API's von Dritten erlaubt? Brave Browser oder UMatrix blockieren evtl..", | ||||||
|             }), |             }), | ||||||
| 
 | 
 | ||||||
|             respectPrivacy: new T({ |             respectPrivacy: new Translation({ | ||||||
|                 en: "Do not photograph people nor license plates. Do not upload Google Maps, Google Streetview or other copyrighted sources.", |                 en: "Do not photograph people nor license plates. Do not upload Google Maps, Google Streetview or other copyrighted sources.", | ||||||
|                 ca: "Respecta la privacitat. No fotografiïs gent o matrícules", |                 ca: "Respecta la privacitat. No fotografiïs gent o matrícules", | ||||||
|                 es: "Respeta la privacidad. No fotografíes gente o matrículas", |                 es: "Respeta la privacidad. No fotografíes gente o matrículas", | ||||||
|  | @ -111,7 +213,7 @@ export default class Translations { | ||||||
|                 gl: "Respecta a privacidade. Non fotografes xente ou matrículas", |                 gl: "Respecta a privacidade. Non fotografes xente ou matrículas", | ||||||
|                 de: "Bitte respektieren Sie die Privatsphäre. Fotografieren Sie weder Personen noch Nummernschilder" |                 de: "Bitte respektieren Sie die Privatsphäre. Fotografieren Sie weder Personen noch Nummernschilder" | ||||||
|             }), |             }), | ||||||
|             uploadDone: new T({ |             uploadDone: new Translation({ | ||||||
|                 en: "<span class='thanks'>Your picture has been added. Thanks for helping out!</span>", |                 en: "<span class='thanks'>Your picture has been added. Thanks for helping out!</span>", | ||||||
|                 ca: "<span class='thanks'>La teva imatge ha estat afegida. Gràcies per ajudar.</span>", |                 ca: "<span class='thanks'>La teva imatge ha estat afegida. Gràcies per ajudar.</span>", | ||||||
|                 es: "<span class='thanks'>Tu imagen ha sido añadida. Gracias por ayudar.</span>", |                 es: "<span class='thanks'>Tu imagen ha sido añadida. Gracias por ayudar.</span>", | ||||||
|  | @ -120,21 +222,21 @@ export default class Translations { | ||||||
|                 gl: "<span class='thanks'>A túa imaxe foi engadida. Grazas por axudar.</span>", |                 gl: "<span class='thanks'>A túa imaxe foi engadida. Grazas por axudar.</span>", | ||||||
|                 de: "<span class='thanks'>Ihr Bild wurde hinzugefügt. Vielen Dank für Ihre Hilfe!</span>", |                 de: "<span class='thanks'>Ihr Bild wurde hinzugefügt. Vielen Dank für Ihre Hilfe!</span>", | ||||||
|             }), |             }), | ||||||
|             dontDelete: new T({ |             dontDelete: new Translation({ | ||||||
|                 "nl":"Terug", |                 "nl":"Terug", | ||||||
|                 "en":"Cancel", |                 "en":"Cancel", | ||||||
| 				"ca":"Cancel·lar", | 				"ca":"Cancel·lar", | ||||||
| 				"es":"Cancelar", | 				"es":"Cancelar", | ||||||
|                 "de": "Abbrechen" |                 "de": "Abbrechen" | ||||||
|             }), |             }), | ||||||
|             doDelete: new T({ |             doDelete: new Translation({ | ||||||
|                 "nl":"Verwijder afbeelding", |                 "nl":"Verwijder afbeelding", | ||||||
|                 "en":"Remove image", |                 "en":"Remove image", | ||||||
| 				"ca":"Esborrar imatge", | 				"ca":"Esborrar imatge", | ||||||
| 				"es":"Borrar imagen", | 				"es":"Borrar imagen", | ||||||
|                 "de": "Bild entfernen" |                 "de": "Bild entfernen" | ||||||
|             }), |             }), | ||||||
|             isDeleted: new T({ |             isDeleted: new Translation({ | ||||||
|                 "nl":"Verwijderd", |                 "nl":"Verwijderd", | ||||||
|                 "en":"Deleted", |                 "en":"Deleted", | ||||||
| 				"ca":"Esborrada", | 				"ca":"Esborrada", | ||||||
|  | @ -143,7 +245,7 @@ export default class Translations { | ||||||
|             }) |             }) | ||||||
|         }, |         }, | ||||||
|         centerMessage: { |         centerMessage: { | ||||||
|             loadingData: new T({ |             loadingData: new Translation({ | ||||||
|                 en: 'Loading data...', |                 en: 'Loading data...', | ||||||
|                 ca: 'Carregant dades...', |                 ca: 'Carregant dades...', | ||||||
|                 es: 'Cargando datos...', |                 es: 'Cargando datos...', | ||||||
|  | @ -152,7 +254,7 @@ export default class Translations { | ||||||
|                 gl: 'Cargando os datos...', |                 gl: 'Cargando os datos...', | ||||||
|                 de: 'Daten werden geladen...' |                 de: 'Daten werden geladen...' | ||||||
|             }), |             }), | ||||||
|             zoomIn: new T({ |             zoomIn: new Translation({ | ||||||
|                 en: 'Zoom in to view or edit the data', |                 en: 'Zoom in to view or edit the data', | ||||||
|                 ca: 'Amplia per veure o editar les dades', |                 ca: 'Amplia per veure o editar les dades', | ||||||
|                 es: 'Amplía para ver o editar los datos', |                 es: 'Amplía para ver o editar los datos', | ||||||
|  | @ -161,7 +263,7 @@ export default class Translations { | ||||||
|                 gl: 'Achégate para ollar ou editar os datos', |                 gl: 'Achégate para ollar ou editar os datos', | ||||||
|                 de: 'Vergrößern, um die Daten anzuzeigen oder zu bearbeiten' |                 de: 'Vergrößern, um die Daten anzuzeigen oder zu bearbeiten' | ||||||
|             }), |             }), | ||||||
|             ready: new T({ |             ready: new Translation({ | ||||||
|                 en: "Done!", |                 en: "Done!", | ||||||
|                 ca: "Fet.", |                 ca: "Fet.", | ||||||
|                 es: "Hecho.", |                 es: "Hecho.", | ||||||
|  | @ -171,7 +273,7 @@ export default class Translations { | ||||||
|                 de: "Erledigt!" |                 de: "Erledigt!" | ||||||
|             }), |             }), | ||||||
| 
 | 
 | ||||||
|             retrying: new T({ |             retrying: new Translation({ | ||||||
|                 en: "Loading data failed. Trying again... ({count})", |                 en: "Loading data failed. Trying again... ({count})", | ||||||
|                 ca: "La càrrega de dades ha fallat.Tornant-ho a intentar... ({count})", |                 ca: "La càrrega de dades ha fallat.Tornant-ho a intentar... ({count})", | ||||||
|                 es: "La carga de datos ha fallado.Volviéndolo a probar... ({count})", |                 es: "La carga de datos ha fallado.Volviéndolo a probar... ({count})", | ||||||
|  | @ -181,7 +283,7 @@ export default class Translations { | ||||||
| 
 | 
 | ||||||
|         }, |         }, | ||||||
|         general: { |         general: { | ||||||
|             loginWithOpenStreetMap: new T({ |             loginWithOpenStreetMap: new Translation({ | ||||||
|                 en: "Login with OpenStreetMap", |                 en: "Login with OpenStreetMap", | ||||||
|                 ca: "Entra a OpenStreetMap", |                 ca: "Entra a OpenStreetMap", | ||||||
|                 es: "Entra en OpenStreetMap", |                 es: "Entra en OpenStreetMap", | ||||||
|  | @ -191,7 +293,7 @@ export default class Translations { | ||||||
|                 de: "Anmeldung mit OpenStreetMap" |                 de: "Anmeldung mit OpenStreetMap" | ||||||
|             }), |             }), | ||||||
| 
 | 
 | ||||||
|             welcomeBack: new T({ |             welcomeBack: new Translation({ | ||||||
|                 en: "You are logged in, welcome back!", |                 en: "You are logged in, welcome back!", | ||||||
|                 ca: "Has entrat, benvingut.", |                 ca: "Has entrat, benvingut.", | ||||||
|                 es: "Has entrado, bienvenido.", |                 es: "Has entrado, bienvenido.", | ||||||
|  | @ -200,7 +302,7 @@ export default class Translations { | ||||||
|                 gl: "Iniciaches a sesión, benvido.", |                 gl: "Iniciaches a sesión, benvido.", | ||||||
|                 de: "Sie sind eingeloggt, willkommen zurück!" |                 de: "Sie sind eingeloggt, willkommen zurück!" | ||||||
|             }), |             }), | ||||||
|             loginToStart: new T({ |             loginToStart: new Translation({ | ||||||
|                 en: "Login to answer this question", |                 en: "Login to answer this question", | ||||||
|                 ca: "Entra per contestar aquesta pregunta", |                 ca: "Entra per contestar aquesta pregunta", | ||||||
|                 es: "Entra para contestar esta pregunta", |                 es: "Entra para contestar esta pregunta", | ||||||
|  | @ -249,7 +351,7 @@ export default class Translations { | ||||||
|                 }) |                 }) | ||||||
| 
 | 
 | ||||||
|             }, |             }, | ||||||
|             returnToTheMap: new T({ |             returnToTheMap: new Translation({ | ||||||
|                 en: "Return to the map", |                 en: "Return to the map", | ||||||
|                 ca: "Tornar al mapa", |                 ca: "Tornar al mapa", | ||||||
|                 es: "Volver al mapa", |                 es: "Volver al mapa", | ||||||
|  | @ -258,7 +360,7 @@ export default class Translations { | ||||||
|                 gl: "Voltar ó mapa", |                 gl: "Voltar ó mapa", | ||||||
|                 de: "Zurück zur Karte" |                 de: "Zurück zur Karte" | ||||||
|             }), |             }), | ||||||
|             save: new T({ |             save: new Translation({ | ||||||
|                 en: "Save", |                 en: "Save", | ||||||
|                 ca: "Desar", |                 ca: "Desar", | ||||||
|                 es: "Guardar", |                 es: "Guardar", | ||||||
|  | @ -267,7 +369,7 @@ export default class Translations { | ||||||
|                 gl: "Gardar", |                 gl: "Gardar", | ||||||
|                 de: "Speichern" |                 de: "Speichern" | ||||||
|             }), |             }), | ||||||
|             cancel: new T({ |             cancel: new Translation({ | ||||||
|                 en: "Cancel", |                 en: "Cancel", | ||||||
|                 ca: "Cancel·lar", |                 ca: "Cancel·lar", | ||||||
|                 es: "Cancelar", |                 es: "Cancelar", | ||||||
|  | @ -276,7 +378,7 @@ export default class Translations { | ||||||
|                 gl: "Desbotar", |                 gl: "Desbotar", | ||||||
|                 de: "Abbrechen" |                 de: "Abbrechen" | ||||||
|             }), |             }), | ||||||
|             skip: new T({ |             skip: new Translation({ | ||||||
|                 en: "Skip this question", |                 en: "Skip this question", | ||||||
|                 ca: "Saltar aquesta pregunta", |                 ca: "Saltar aquesta pregunta", | ||||||
|                 es: "Saltar esta pregunta", |                 es: "Saltar esta pregunta", | ||||||
|  | @ -285,7 +387,7 @@ export default class Translations { | ||||||
|                 gl: "Ignorar esta pregunta", |                 gl: "Ignorar esta pregunta", | ||||||
|                 de: "Diese Frage überspringen" |                 de: "Diese Frage überspringen" | ||||||
|             }), |             }), | ||||||
|             oneSkippedQuestion: new T({ |             oneSkippedQuestion: new Translation({ | ||||||
|                 en: "One question is skipped", |                 en: "One question is skipped", | ||||||
|                 ca: "Has ignorat una pregunta", |                 ca: "Has ignorat una pregunta", | ||||||
|                 es: "Has ignorado una pregunta", |                 es: "Has ignorado una pregunta", | ||||||
|  | @ -294,7 +396,7 @@ export default class Translations { | ||||||
|                 gl: "Ignoraches unha pregunta", |                 gl: "Ignoraches unha pregunta", | ||||||
|                 de: "Eine Frage wurde übersprungen" |                 de: "Eine Frage wurde übersprungen" | ||||||
|             }), |             }), | ||||||
|             skippedQuestions: new T({ |             skippedQuestions: new Translation({ | ||||||
|                 en: "Some questions are skipped", |                 en: "Some questions are skipped", | ||||||
|                 ca: "Has ignorat algunes preguntes", |                 ca: "Has ignorat algunes preguntes", | ||||||
|                 es: "Has ignorado algunas preguntas", |                 es: "Has ignorado algunas preguntas", | ||||||
|  | @ -303,7 +405,7 @@ export default class Translations { | ||||||
|                 gl: "Ignoraches algunhas preguntas", |                 gl: "Ignoraches algunhas preguntas", | ||||||
|                 de: "Einige Fragen wurden übersprungen" |                 de: "Einige Fragen wurden übersprungen" | ||||||
|             }), |             }), | ||||||
|             number: new T({ |             number: new Translation({ | ||||||
|                 en: "number", |                 en: "number", | ||||||
|                 ca: "nombre", |                 ca: "nombre", | ||||||
|                 es: "número", |                 es: "número", | ||||||
|  | @ -313,7 +415,7 @@ export default class Translations { | ||||||
|                 de: "Zahl" |                 de: "Zahl" | ||||||
|             }), |             }), | ||||||
| 
 | 
 | ||||||
|             osmLinkTooltip: new T({ |             osmLinkTooltip: new Translation({ | ||||||
|                 en: "See this object on OpenStreetMap for history and more editing options", |                 en: "See this object on OpenStreetMap for history and more editing options", | ||||||
|                 ca: "Mira aquest objecte a OpenStreetMap per veure historial i altres opcions d\'edició", |                 ca: "Mira aquest objecte a OpenStreetMap per veure historial i altres opcions d\'edició", | ||||||
|                 es: "Mira este objeto en OpenStreetMap para ver historial y otras opciones de edición", |                 es: "Mira este objeto en OpenStreetMap para ver historial y otras opciones de edición", | ||||||
|  | @ -323,7 +425,7 @@ export default class Translations { | ||||||
|                 de: "Dieses Objekt auf OpenStreetMap anschauen für die Geschichte und weitere Bearbeitungsmöglichkeiten" |                 de: "Dieses Objekt auf OpenStreetMap anschauen für die Geschichte und weitere Bearbeitungsmöglichkeiten" | ||||||
|             }), |             }), | ||||||
|             add: { |             add: { | ||||||
|                 addNew: new T({ |                 addNew: new Translation({ | ||||||
|                     en: "Add a new {category} here", |                     en: "Add a new {category} here", | ||||||
|                     ca: "Afegir {category} aquí", |                     ca: "Afegir {category} aquí", | ||||||
|                     es: "Añadir {category} aquí", |                     es: "Añadir {category} aquí", | ||||||
|  | @ -332,7 +434,7 @@ export default class Translations { | ||||||
|                     gl: "Engadir {category} aquí", |                     gl: "Engadir {category} aquí", | ||||||
|                     de: "Hier eine neue {category} hinzufügen" |                     de: "Hier eine neue {category} hinzufügen" | ||||||
|                 }), |                 }), | ||||||
|                 header: new T({ |                 header: new Translation({ | ||||||
|                     en: "<h2>Add a point?</h2>You clicked somewhere where no data is known yet.<br/>", |                     en: "<h2>Add a point?</h2>You clicked somewhere where no data is known yet.<br/>", | ||||||
|                     ca: "<h2>Vols afegir un punt?</h2>Has marcat un lloc on no coneixem les dades.<br/>", |                     ca: "<h2>Vols afegir un punt?</h2>Has marcat un lloc on no coneixem les dades.<br/>", | ||||||
|                     es: "<h2>Quieres añadir un punto?</h2>Has marcado un lugar del que no conocemos los datos.<br/>", |                     es: "<h2>Quieres añadir un punto?</h2>Has marcado un lugar del que no conocemos los datos.<br/>", | ||||||
|  | @ -341,7 +443,7 @@ export default class Translations { | ||||||
|                     gl: "<h2>Queres engadir un punto?</h2>Marcaches un lugar onde non coñecemos os datos.<br/>", |                     gl: "<h2>Queres engadir un punto?</h2>Marcaches un lugar onde non coñecemos os datos.<br/>", | ||||||
|                     de: "<h2>Punkt hinzufügen?</h2>Sie haben irgendwo geklickt, wo noch keine Daten bekannt sind.<br/>" |                     de: "<h2>Punkt hinzufügen?</h2>Sie haben irgendwo geklickt, wo noch keine Daten bekannt sind.<br/>" | ||||||
|                 }), |                 }), | ||||||
|                 pleaseLogin: new T({ |                 pleaseLogin: new Translation({ | ||||||
|                     en: "<a class='activate-osm-authentication'>Please log in to add a new point</a>", |                     en: "<a class='activate-osm-authentication'>Please log in to add a new point</a>", | ||||||
|                     ca: "<a class='activate-osm-authentication'>Entra per afegir un nou punt</a>", |                     ca: "<a class='activate-osm-authentication'>Entra per afegir un nou punt</a>", | ||||||
|                     es: "<a class='activate-osm-authentication'>Entra para añadir un nuevo punto</a>", |                     es: "<a class='activate-osm-authentication'>Entra para añadir un nuevo punto</a>", | ||||||
|  | @ -350,7 +452,7 @@ export default class Translations { | ||||||
|                     gl: "<a class='activate-osm-authentication'>Inicia a sesión para engadir un novo punto</a>", |                     gl: "<a class='activate-osm-authentication'>Inicia a sesión para engadir un novo punto</a>", | ||||||
|                     de: "<a class='activate-osm-authentication'>Bitte loggen Sie sich ein, um einen neuen Punkt hinzuzufügen</a>" |                     de: "<a class='activate-osm-authentication'>Bitte loggen Sie sich ein, um einen neuen Punkt hinzuzufügen</a>" | ||||||
|                 }), |                 }), | ||||||
|                 zoomInFurther: new T({ |                 zoomInFurther: new Translation({ | ||||||
|                     en: "Zoom in further to add a point.", |                     en: "Zoom in further to add a point.", | ||||||
|                     ca: "Apropa per afegir un punt.", |                     ca: "Apropa per afegir un punt.", | ||||||
|                     es: "Acerca para añadir un punto.", |                     es: "Acerca para añadir un punto.", | ||||||
|  | @ -359,7 +461,7 @@ export default class Translations { | ||||||
|                     gl: "Achégate para engadir un punto.", |                     gl: "Achégate para engadir un punto.", | ||||||
|                     de: "Weiter einzoomen, um einen Punkt hinzuzufügen." |                     de: "Weiter einzoomen, um einen Punkt hinzuzufügen." | ||||||
|                 }), |                 }), | ||||||
|                 stillLoading: new T({ |                 stillLoading: new Translation({ | ||||||
|                     en: "The data is still loading. Please wait a bit before you add a new point.", |                     en: "The data is still loading. Please wait a bit before you add a new point.", | ||||||
|                     ca: "Les dades es segueixen carregant. Espera una mica abans d\'afegir cap punt.", |                     ca: "Les dades es segueixen carregant. Espera una mica abans d\'afegir cap punt.", | ||||||
|                     es: "Los datos se siguen cargando. Espera un poco antes de añadir ningún punto.", |                     es: "Los datos se siguen cargando. Espera un poco antes de añadir ningún punto.", | ||||||
|  | @ -368,7 +470,7 @@ export default class Translations { | ||||||
|                     gl: "Os datos seguen a cargarse. Agarda un intre antes de engadir ningún punto.", |                     gl: "Os datos seguen a cargarse. Agarda un intre antes de engadir ningún punto.", | ||||||
|                     de: "Die Daten werden noch geladen. Bitte warten Sie etwas, bevor Sie einen neuen Punkt hinzufügen." |                     de: "Die Daten werden noch geladen. Bitte warten Sie etwas, bevor Sie einen neuen Punkt hinzufügen." | ||||||
|                 }), |                 }), | ||||||
|                 confirmIntro: new T({ |                 confirmIntro: new Translation({ | ||||||
|                     en: "<h3>Add a {title} here?</h3>The point you create here will be <b>visible for everyone</b>. Please, only add things on to the map if they truly exist. A lot of applications use this data.", |                     en: "<h3>Add a {title} here?</h3>The point you create here will be <b>visible for everyone</b>. Please, only add things on to the map if they truly exist. A lot of applications use this data.", | ||||||
|                     ca: "<h3>Afegir {title} aquí?</h3>El punt que estàs creant <b>el veurà tothom</b>. Només afegeix coses que realment existeixin. Moltes aplicacions fan servir aquestes dades.", |                     ca: "<h3>Afegir {title} aquí?</h3>El punt que estàs creant <b>el veurà tothom</b>. Només afegeix coses que realment existeixin. Moltes aplicacions fan servir aquestes dades.", | ||||||
|                     es: "<h3>Añadir {title} aquí?</h3>El punto que estás creando <b>lo verá todo el mundo</b>. Sólo añade cosas que realmente existan. Muchas aplicaciones usan estos datos.", |                     es: "<h3>Añadir {title} aquí?</h3>El punto que estás creando <b>lo verá todo el mundo</b>. Sólo añade cosas que realmente existan. Muchas aplicaciones usan estos datos.", | ||||||
|  | @ -377,7 +479,7 @@ export default class Translations { | ||||||
|                     gl: "<h3>Engadir {title} aquí?</h3>O punto que estás a crear <b>será ollado por todo o mundo</b>. Só engade cousas que realmente existan. Moitas aplicacións empregan estes datos.", |                     gl: "<h3>Engadir {title} aquí?</h3>O punto que estás a crear <b>será ollado por todo o mundo</b>. Só engade cousas que realmente existan. Moitas aplicacións empregan estes datos.", | ||||||
|                     de: "<h3>Hier einen {title} hinzufügen?</h3>Der Punkt, den Sie hier anlegen, wird <b>für alle sichtbar sein</b>. Bitte fügen Sie der Karte nur dann Dinge hinzu, wenn sie wirklich existieren. Viele Anwendungen verwenden diese Daten.", |                     de: "<h3>Hier einen {title} hinzufügen?</h3>Der Punkt, den Sie hier anlegen, wird <b>für alle sichtbar sein</b>. Bitte fügen Sie der Karte nur dann Dinge hinzu, wenn sie wirklich existieren. Viele Anwendungen verwenden diese Daten.", | ||||||
|                 }), |                 }), | ||||||
|                 confirmButton: new T({ |                 confirmButton: new Translation({ | ||||||
|                     en: "Add a {category} here", |                     en: "Add a {category} here", | ||||||
|                     ca: "Afegir {category} aquí", |                     ca: "Afegir {category} aquí", | ||||||
|                     es: "Añadir {category} aquí", |                     es: "Añadir {category} aquí", | ||||||
|  | @ -386,7 +488,7 @@ export default class Translations { | ||||||
|                     gl: "Engadir {category} aquí", |                     gl: "Engadir {category} aquí", | ||||||
|                     de: "Hier eine {category} hinzufügen" |                     de: "Hier eine {category} hinzufügen" | ||||||
|                 }), |                 }), | ||||||
|                 openLayerControl: new T({ |                 openLayerControl: new Translation({ | ||||||
|                     "en": "Open the layer control box", |                     "en": "Open the layer control box", | ||||||
| 					"ca": "Obrir el control de capes", | 					"ca": "Obrir el control de capes", | ||||||
| 					"es": "Abrir el control de capas", | 					"es": "Abrir el control de capas", | ||||||
|  | @ -394,7 +496,7 @@ export default class Translations { | ||||||
|                     "de": "Das Ebenen-Kontrollkästchen öffnen" |                     "de": "Das Ebenen-Kontrollkästchen öffnen" | ||||||
|                 }) |                 }) | ||||||
|                 , |                 , | ||||||
|                 layerNotEnabled: new T({ |                 layerNotEnabled: new Translation({ | ||||||
|                     "en": "The layer {layer} is not enabled. Enable this layer to add a point", |                     "en": "The layer {layer} is not enabled. Enable this layer to add a point", | ||||||
| 					"ca": "La capa {layer} no està habilitada. Fes-ho per poder afegir un punt a aquesta capa", | 					"ca": "La capa {layer} no està habilitada. Fes-ho per poder afegir un punt a aquesta capa", | ||||||
| 					"es": "La capa {layer} no está habilitada. Hazlo para poder añadir un punto en esta capa", | 					"es": "La capa {layer} no está habilitada. Hazlo para poder añadir un punto en esta capa", | ||||||
|  | @ -402,7 +504,7 @@ export default class Translations { | ||||||
|                     "de": "Die Ebene {layer} ist nicht aktiviert. Aktivieren Sie diese Ebene, um einen Punkt hinzuzufügen" |                     "de": "Die Ebene {layer} ist nicht aktiviert. Aktivieren Sie diese Ebene, um einen Punkt hinzuzufügen" | ||||||
|                 }) |                 }) | ||||||
|             }, |             }, | ||||||
|             pickLanguage: new T({ |             pickLanguage: new Translation({ | ||||||
|                 en: "Choose a language", |                 en: "Choose a language", | ||||||
|                 ca: "Tria idioma", |                 ca: "Tria idioma", | ||||||
|                 es: "Escoge idioma", |                 es: "Escoge idioma", | ||||||
|  | @ -411,7 +513,7 @@ export default class Translations { | ||||||
|                 gl: "Escoller lingua", |                 gl: "Escoller lingua", | ||||||
|                 de: "Wählen Sie eine Sprache" |                 de: "Wählen Sie eine Sprache" | ||||||
|             }), |             }), | ||||||
|             about: new T({ |             about: new Translation({ | ||||||
|                 en: "Easily edit and add OpenStreetMap for a certain theme", |                 en: "Easily edit and add OpenStreetMap for a certain theme", | ||||||
|                 ca: "Edita facilment i afegeix punts a OpenStreetMap d\'una temàtica determinada", |                 ca: "Edita facilment i afegeix punts a OpenStreetMap d\'una temàtica determinada", | ||||||
|                 es: "Edita facilmente y añade puntos en OpenStreetMap de un tema concreto", |                 es: "Edita facilmente y añade puntos en OpenStreetMap de un tema concreto", | ||||||
|  | @ -420,7 +522,7 @@ export default class Translations { | ||||||
|                 gl: "Editar doadamente e engadir puntos no OpenStreetMap dun eido en concreto", |                 gl: "Editar doadamente e engadir puntos no OpenStreetMap dun eido en concreto", | ||||||
|                 de: "OpenStreetMap für ein bestimmtes Thema einfach bearbeiten und hinzufügen" |                 de: "OpenStreetMap für ein bestimmtes Thema einfach bearbeiten und hinzufügen" | ||||||
|             }), |             }), | ||||||
|             nameInlineQuestion: new T({ |             nameInlineQuestion: new Translation({ | ||||||
|                 en: "The name of this {category} is $$$", |                 en: "The name of this {category} is $$$", | ||||||
|                 ca: "{category}: El seu nom és $$$", |                 ca: "{category}: El seu nom és $$$", | ||||||
|                 es: "{category}: Su nombre es $$$", |                 es: "{category}: Su nombre es $$$", | ||||||
|  | @ -429,7 +531,7 @@ export default class Translations { | ||||||
|                 gl: "{category}: O teu nome é $$$", |                 gl: "{category}: O teu nome é $$$", | ||||||
|                 de: "Der Name dieser {category} ist $$$" |                 de: "Der Name dieser {category} ist $$$" | ||||||
|             }), |             }), | ||||||
|             noNameCategory: new T({ |             noNameCategory: new Translation({ | ||||||
|                 en: "{category} without a name", |                 en: "{category} without a name", | ||||||
|                 ca: "{category} sense nom", |                 ca: "{category} sense nom", | ||||||
|                 es: "{category} sin nombre", |                 es: "{category} sin nombre", | ||||||
|  | @ -439,7 +541,7 @@ export default class Translations { | ||||||
|                 de: "{category} ohne Namen", |                 de: "{category} ohne Namen", | ||||||
|             }), |             }), | ||||||
|             questions: { |             questions: { | ||||||
|                 phoneNumberOf: new T({ |                 phoneNumberOf: new Translation({ | ||||||
|                     en: "What is the phone number of {category}?", |                     en: "What is the phone number of {category}?", | ||||||
|                     ca: "Quin és el telèfon de {category}?", |                     ca: "Quin és el telèfon de {category}?", | ||||||
|                     es: "Qué teléfono tiene {category}?", |                     es: "Qué teléfono tiene {category}?", | ||||||
|  | @ -448,7 +550,7 @@ export default class Translations { | ||||||
|                     gl: "Cal é o número de teléfono de {category}?", |                     gl: "Cal é o número de teléfono de {category}?", | ||||||
|                     de: "Wie lautet die Telefonnummer der {category}?" |                     de: "Wie lautet die Telefonnummer der {category}?" | ||||||
|                 }), |                 }), | ||||||
|                 phoneNumberIs: new T({ |                 phoneNumberIs: new Translation({ | ||||||
|                     en: "The phone number of this {category} is <a href='tel:{phone}' target='_blank'>{phone}</a>", |                     en: "The phone number of this {category} is <a href='tel:{phone}' target='_blank'>{phone}</a>", | ||||||
|                     ca: "El número de telèfon de {category} és <a href='tel:{phone}' target='_blank'>{phone}</a>", |                     ca: "El número de telèfon de {category} és <a href='tel:{phone}' target='_blank'>{phone}</a>", | ||||||
|                     es: "El número de teléfono de {category} es <a href='tel:{phone}' target='_blank'>{phone}</a>", |                     es: "El número de teléfono de {category} es <a href='tel:{phone}' target='_blank'>{phone}</a>", | ||||||
|  | @ -457,7 +559,7 @@ export default class Translations { | ||||||
|                     gl: "O número de teléfono de {category} é <a href='tel:{phone}' target='_blank'>{phone}</a>", |                     gl: "O número de teléfono de {category} é <a href='tel:{phone}' target='_blank'>{phone}</a>", | ||||||
|                     de: "Die Telefonnummer der {category} lautet <a href='tel:{phone}' target='_blank'>{phone}</a>" |                     de: "Die Telefonnummer der {category} lautet <a href='tel:{phone}' target='_blank'>{phone}</a>" | ||||||
|                 }), |                 }), | ||||||
|                 websiteOf: new T({ |                 websiteOf: new Translation({ | ||||||
|                     en: "What is the website of {category}?", |                     en: "What is the website of {category}?", | ||||||
|                     ca: "Quina és la pàgina web de {category}?", |                     ca: "Quina és la pàgina web de {category}?", | ||||||
|                     es: "Cual es la página web de {category}?", |                     es: "Cual es la página web de {category}?", | ||||||
|  | @ -466,7 +568,7 @@ export default class Translations { | ||||||
|                     gl: "Cal é a páxina web de {category}?", |                     gl: "Cal é a páxina web de {category}?", | ||||||
|                     de: "Was ist die Website der {category}?" |                     de: "Was ist die Website der {category}?" | ||||||
|                 }), |                 }), | ||||||
|                 websiteIs: new T({ |                 websiteIs: new Translation({ | ||||||
|                     en: "Website: <a href='{website}' target='_blank'>{website}</a>", |                     en: "Website: <a href='{website}' target='_blank'>{website}</a>", | ||||||
|                     ca: "Pàgina web: <a href='{website}' target='_blank'>{website}</a>", |                     ca: "Pàgina web: <a href='{website}' target='_blank'>{website}</a>", | ||||||
|                     es: "Página web: <a href='{website}' target='_blank'>{website}</a>", |                     es: "Página web: <a href='{website}' target='_blank'>{website}</a>", | ||||||
|  | @ -475,7 +577,7 @@ export default class Translations { | ||||||
|                     gl: "Páxina web: <a href='{website}' target='_blank'>{website}</a>", |                     gl: "Páxina web: <a href='{website}' target='_blank'>{website}</a>", | ||||||
|                     de: "Webseite: <a href='{website}' target='_blank'>{website}</a>", |                     de: "Webseite: <a href='{website}' target='_blank'>{website}</a>", | ||||||
|                 }), |                 }), | ||||||
|                 emailOf: new T({ |                 emailOf: new Translation({ | ||||||
|                         en: "What is the email address of {category}?", |                         en: "What is the email address of {category}?", | ||||||
|                         ca: "Quina és l\'adreça de correu-e de {category}?", |                         ca: "Quina és l\'adreça de correu-e de {category}?", | ||||||
|                         es: "¿Qué dirección de correu tiene {category}?", |                         es: "¿Qué dirección de correu tiene {category}?", | ||||||
|  | @ -485,7 +587,7 @@ export default class Translations { | ||||||
|                         de: "Wie lautet die E-Mail-Adresse der {category}?" |                         de: "Wie lautet die E-Mail-Adresse der {category}?" | ||||||
|                     } |                     } | ||||||
|                 ), |                 ), | ||||||
|                 emailIs: new T({ |                 emailIs: new Translation({ | ||||||
|                     en: "The email address of this {category} is <a href='mailto:{email}' target='_blank'>{email}</a>", |                     en: "The email address of this {category} is <a href='mailto:{email}' target='_blank'>{email}</a>", | ||||||
|                     ca: "L\'adreça de correu de {category} és <a href='mailto:{email}' target='_blank'>{email}</a>", |                     ca: "L\'adreça de correu de {category} és <a href='mailto:{email}' target='_blank'>{email}</a>", | ||||||
|                     es: "La dirección de correo de {category} es <a href='mailto:{email}' target='_blank'>{email}</a>", |                     es: "La dirección de correo de {category} es <a href='mailto:{email}' target='_blank'>{email}</a>", | ||||||
|  | @ -496,7 +598,7 @@ export default class Translations { | ||||||
|                 }), |                 }), | ||||||
| 
 | 
 | ||||||
|             }, |             }, | ||||||
|             openStreetMapIntro: new T({ |             openStreetMapIntro: new Translation({ | ||||||
|                 en: "<h3>An Open Map</h3>" + |                 en: "<h3>An Open Map</h3>" + | ||||||
|                     "<p>Wouldn't it be cool if there was a single map, which everyone could freely use and edit? " + |                     "<p>Wouldn't it be cool if there was a single map, which everyone could freely use and edit? " + | ||||||
|                     "A single place to store all geo-information? Then, all those websites with different, small and incompatible maps (which are always outdated) wouldn't be needed anymore.</p>" + |                     "A single place to store all geo-information? Then, all those websites with different, small and incompatible maps (which are always outdated) wouldn't be needed anymore.</p>" + | ||||||
|  | @ -553,7 +655,7 @@ export default class Translations { | ||||||
|             }), |             }), | ||||||
| 
 | 
 | ||||||
|             sharescreen: { |             sharescreen: { | ||||||
|                 intro: new T({ |                 intro: new Translation({ | ||||||
|                     en: "<h3>Share this map</h3> Share this map by copying the link below and sending it to friends and family:", |                     en: "<h3>Share this map</h3> Share this map by copying the link below and sending it to friends and family:", | ||||||
|                     ca: "<h3>Comparteix aquest mapa</h3> Comparteix aquest mapa copiant l\'enllaç de sota i enviant-lo a amics i família:", |                     ca: "<h3>Comparteix aquest mapa</h3> Comparteix aquest mapa copiant l\'enllaç de sota i enviant-lo a amics i família:", | ||||||
|                     es: "<h3>Comparte este mapa</h3> Comparte este mapa copiando el enlace de debajo y enviándolo a amigos y familia:", |                     es: "<h3>Comparte este mapa</h3> Comparte este mapa copiando el enlace de debajo y enviándolo a amigos y familia:", | ||||||
|  | @ -563,7 +665,7 @@ export default class Translations { | ||||||
|                     de: "<h3>Diese Karte teilen</h3> Sie können diese Karte teilen, indem Sie den untenstehenden Link kopieren und an Freunde und Familie schicken:", |                     de: "<h3>Diese Karte teilen</h3> Sie können diese Karte teilen, indem Sie den untenstehenden Link kopieren und an Freunde und Familie schicken:", | ||||||
| 
 | 
 | ||||||
|                 }), |                 }), | ||||||
|                 addToHomeScreen: new T({ |                 addToHomeScreen: new Translation({ | ||||||
|                     en: "<h3>Add to your home screen</h3>You can easily add this website to your smartphone home screen for a native feel. Click the 'add to home screen button' in the URL bar to do this.", |                     en: "<h3>Add to your home screen</h3>You can easily add this website to your smartphone home screen for a native feel. Click the 'add to home screen button' in the URL bar to do this.", | ||||||
|                     ca: "<h3>Afegir-lo a la pantalla d\'inici</h3>Pots afegir aquesta web a la pantalla d\'inici del teu smartphone per a que es vegi més nadiu. Apreta al botó 'afegir a l\'inici' a la barra d\'adreces URL per fer-ho.", |                     ca: "<h3>Afegir-lo a la pantalla d\'inici</h3>Pots afegir aquesta web a la pantalla d\'inici del teu smartphone per a que es vegi més nadiu. Apreta al botó 'afegir a l\'inici' a la barra d\'adreces URL per fer-ho.", | ||||||
|                     es: "<h3>Añadir a la pantalla de inicio</h3>Puedes añadir esta web en la pantalla de inicio de tu smartphone para que se vea más nativo. Aprieta el botón 'añadir a inicio' en la barra de direcciones URL para hacerlo.", |                     es: "<h3>Añadir a la pantalla de inicio</h3>Puedes añadir esta web en la pantalla de inicio de tu smartphone para que se vea más nativo. Aprieta el botón 'añadir a inicio' en la barra de direcciones URL para hacerlo.", | ||||||
|  | @ -572,7 +674,7 @@ export default class Translations { | ||||||
|                     nl: "<h3>Voeg toe aan je thuis-scherm</h3>Je kan deze website aan je thuisscherm van je smartphone toevoegen voor een native feel", |                     nl: "<h3>Voeg toe aan je thuis-scherm</h3>Je kan deze website aan je thuisscherm van je smartphone toevoegen voor een native feel", | ||||||
|                     de: "<h3>Zum Startbildschirm hinzufügen</h3> Sie können diese Website einfach zum Startbildschirm Ihres Smartphones hinzufügen, um ein natives Gefühl zu erhalten. Klicken Sie dazu in der URL-Leiste auf die Schaltfläche 'Zum Startbildschirm hinzufügen'.", |                     de: "<h3>Zum Startbildschirm hinzufügen</h3> Sie können diese Website einfach zum Startbildschirm Ihres Smartphones hinzufügen, um ein natives Gefühl zu erhalten. Klicken Sie dazu in der URL-Leiste auf die Schaltfläche 'Zum Startbildschirm hinzufügen'.", | ||||||
|                 }), |                 }), | ||||||
|                 embedIntro: new T({ |                 embedIntro: new Translation({ | ||||||
|                     en: "<h3>Embed on your website</h3>Please, embed this map into your website. <br/>We encourage you to do it - you don't even have to ask permission. <br/>  It is free, and always will be. The more people using this, the more valuable it becomes.", |                     en: "<h3>Embed on your website</h3>Please, embed this map into your website. <br/>We encourage you to do it - you don't even have to ask permission. <br/>  It is free, and always will be. The more people using this, the more valuable it becomes.", | ||||||
|                     ca: "<h3>Inclou-ho a la teva pàgina web</h3>Inclou aquest mapa dins de la teva pàgina web. <br/> T\'animem a que ho facis, no cal que demanis permís. <br/>  És de franc, i sempre ho serà. A més gent que ho faci servir més valuós serà.", |                     ca: "<h3>Inclou-ho a la teva pàgina web</h3>Inclou aquest mapa dins de la teva pàgina web. <br/> T\'animem a que ho facis, no cal que demanis permís. <br/>  És de franc, i sempre ho serà. A més gent que ho faci servir més valuós serà.", | ||||||
|                     es: "<h3>Inclúyelo en tu página web</h3>Incluye este mapa en tu página web. <br/> Te animamos a que lo hagas, no hace falta que pidas permiso. <br/> Es gratis, y siempre lo será. A más gente que lo use más valioso será.", |                     es: "<h3>Inclúyelo en tu página web</h3>Incluye este mapa en tu página web. <br/> Te animamos a que lo hagas, no hace falta que pidas permiso. <br/> Es gratis, y siempre lo será. A más gente que lo use más valioso será.", | ||||||
|  | @ -581,7 +683,7 @@ export default class Translations { | ||||||
|                     nl: "<h3>Plaats dit op je website</h3>Voeg dit kaartje toe op je eigen website.<br/>We moedigen dit zelfs aan - je hoeft geen toestemming te vragen.<br/> Het is gratis en zal dat altijd blijven. Hoe meer het gebruikt wordt, hoe waardevoller", |                     nl: "<h3>Plaats dit op je website</h3>Voeg dit kaartje toe op je eigen website.<br/>We moedigen dit zelfs aan - je hoeft geen toestemming te vragen.<br/> Het is gratis en zal dat altijd blijven. Hoe meer het gebruikt wordt, hoe waardevoller", | ||||||
|                     de: "<h3>Auf Ihrer Website einbetten</h3>Bitte, betten Sie diese Karte in Ihre Website ein. <br/>Wir ermutigen Sie, es zu tun - Sie müssen nicht einmal um Erlaubnis fragen. <br/> Es ist kostenlos und wird es immer sein. Je mehr Leute sie benutzen, desto wertvoller wird sie." |                     de: "<h3>Auf Ihrer Website einbetten</h3>Bitte, betten Sie diese Karte in Ihre Website ein. <br/>Wir ermutigen Sie, es zu tun - Sie müssen nicht einmal um Erlaubnis fragen. <br/> Es ist kostenlos und wird es immer sein. Je mehr Leute sie benutzen, desto wertvoller wird sie." | ||||||
|                 }), |                 }), | ||||||
|                 copiedToClipboard: new T({ |                 copiedToClipboard: new Translation({ | ||||||
|                     en: "Link copied to clipboard", |                     en: "Link copied to clipboard", | ||||||
| 					ca: "Enllaç copiat al portapapers", | 					ca: "Enllaç copiat al portapapers", | ||||||
| 					es: "Enlace copiado en el portapapeles", | 					es: "Enlace copiado en el portapapeles", | ||||||
|  | @ -589,7 +691,7 @@ export default class Translations { | ||||||
|                     nl: "Link gekopieerd naar klembord", |                     nl: "Link gekopieerd naar klembord", | ||||||
|                     de: "Link in die Zwischenablage kopiert" |                     de: "Link in die Zwischenablage kopiert" | ||||||
|                 }), |                 }), | ||||||
|                 thanksForSharing: new T({ |                 thanksForSharing: new Translation({ | ||||||
|                     en: "Thanks for sharing!", |                     en: "Thanks for sharing!", | ||||||
| 					ca: "Gràcies per compartir", | 					ca: "Gràcies per compartir", | ||||||
| 					es: "Gracias por compartir", | 					es: "Gracias por compartir", | ||||||
|  | @ -597,7 +699,7 @@ export default class Translations { | ||||||
|                     nl: "Bedankt om te delen!", |                     nl: "Bedankt om te delen!", | ||||||
|                     de: "Danke für das Teilen!" |                     de: "Danke für das Teilen!" | ||||||
|                 }), |                 }), | ||||||
|                 editThisTheme: new T({ |                 editThisTheme: new Translation({ | ||||||
|                     en: "Edit this theme", |                     en: "Edit this theme", | ||||||
| 					ca: "Editar aquest repte", | 					ca: "Editar aquest repte", | ||||||
| 					es: "Editar este reto", | 					es: "Editar este reto", | ||||||
|  | @ -605,7 +707,7 @@ export default class Translations { | ||||||
|                     nl: "Pas dit thema aan", |                     nl: "Pas dit thema aan", | ||||||
|                     de: "Dieses Thema bearbeiten" |                     de: "Dieses Thema bearbeiten" | ||||||
|                 }), |                 }), | ||||||
|                 editThemeDescription: new T({ |                 editThemeDescription: new Translation({ | ||||||
|                     en: "Add or change questions to this map theme", |                     en: "Add or change questions to this map theme", | ||||||
| 					ca: "Afegir o canviar preguntes d'aquest repte", | 					ca: "Afegir o canviar preguntes d'aquest repte", | ||||||
| 					es: "Añadir o cambiar preguntas de este reto", | 					es: "Añadir o cambiar preguntas de este reto", | ||||||
|  | @ -613,7 +715,7 @@ export default class Translations { | ||||||
|                     nl: "Pas vragen aan of voeg vragen toe aan dit kaartthema", |                     nl: "Pas vragen aan of voeg vragen toe aan dit kaartthema", | ||||||
|                     de: "Fragen zu diesem Kartenthema hinzufügen oder ändern" |                     de: "Fragen zu diesem Kartenthema hinzufügen oder ändern" | ||||||
|                 }), |                 }), | ||||||
|                 fsUserbadge: new T({ |                 fsUserbadge: new Translation({ | ||||||
|                     en: "Enable the login-button", |                     en: "Enable the login-button", | ||||||
| 					ca: "Activar el botó d'entrada", | 					ca: "Activar el botó d'entrada", | ||||||
| 					es: "Activar el botón de entrada", | 					es: "Activar el botón de entrada", | ||||||
|  | @ -621,7 +723,7 @@ export default class Translations { | ||||||
|                     nl: "Activeer de login-knop", |                     nl: "Activeer de login-knop", | ||||||
|                     de:" Anmelde-Knopf aktivieren" |                     de:" Anmelde-Knopf aktivieren" | ||||||
|                 }), |                 }), | ||||||
|                 fsSearch: new T({ |                 fsSearch: new Translation({ | ||||||
|                     en: "Enable the search bar", |                     en: "Enable the search bar", | ||||||
| 					ca: "Activar la barra de cerca", | 					ca: "Activar la barra de cerca", | ||||||
| 					es: "Activar la barra de búsqueda", | 					es: "Activar la barra de búsqueda", | ||||||
|  | @ -629,7 +731,7 @@ export default class Translations { | ||||||
|                     nl: "Activeer de zoekbalk", |                     nl: "Activeer de zoekbalk", | ||||||
|                     de: " Suchleiste aktivieren" |                     de: " Suchleiste aktivieren" | ||||||
|                 }), |                 }), | ||||||
|                 fsWelcomeMessage: new T({ |                 fsWelcomeMessage: new Translation({ | ||||||
|                     en: "Show the welcome message popup and associated tabs", |                     en: "Show the welcome message popup and associated tabs", | ||||||
| 					ca: "Mostra el missatge emergent de benvinguda i pestanyes associades", | 					ca: "Mostra el missatge emergent de benvinguda i pestanyes associades", | ||||||
| 					es: "Muestra el mensaje emergente de bienvenida y pestañas asociadas", | 					es: "Muestra el mensaje emergente de bienvenida y pestañas asociadas", | ||||||
|  | @ -637,7 +739,7 @@ export default class Translations { | ||||||
|                     nl: "Toon het welkomstbericht en de bijhorende tabbladen", |                     nl: "Toon het welkomstbericht en de bijhorende tabbladen", | ||||||
|                     de: "Popup der Begrüßungsnachricht und zugehörige Registerkarten anzeigen" |                     de: "Popup der Begrüßungsnachricht und zugehörige Registerkarten anzeigen" | ||||||
|                 }), |                 }), | ||||||
|                 fsLayers: new T({ |                 fsLayers: new Translation({ | ||||||
|                     en: "Enable thelayer control", |                     en: "Enable thelayer control", | ||||||
| 					ca: "Activar el control de capes", | 					ca: "Activar el control de capes", | ||||||
| 					es: "Activar el control de capas", | 					es: "Activar el control de capas", | ||||||
|  | @ -646,7 +748,7 @@ export default class Translations { | ||||||
|                     de: "Aktivieren der Layersteuerung" |                     de: "Aktivieren der Layersteuerung" | ||||||
|                 }), |                 }), | ||||||
| 
 | 
 | ||||||
|                 fsLayerControlToggle: new T({ |                 fsLayerControlToggle: new Translation({ | ||||||
|                     en: "Start with the layer control expanded", |                     en: "Start with the layer control expanded", | ||||||
|                     gl: "Comenza co control de capas expandido", |                     gl: "Comenza co control de capas expandido", | ||||||
| 					ca: "Iniciar el control de capes avançat", | 					ca: "Iniciar el control de capes avançat", | ||||||
|  | @ -654,7 +756,7 @@ export default class Translations { | ||||||
|                     nl: "Toon de laagbediening meteen volledig", |                     nl: "Toon de laagbediening meteen volledig", | ||||||
|                     de: "Mit der erweiterten Ebenenkontrolle beginnen" |                     de: "Mit der erweiterten Ebenenkontrolle beginnen" | ||||||
|                 }), |                 }), | ||||||
|                 fsAddNew: new T({ |                 fsAddNew: new Translation({ | ||||||
|                     en: "Enable the 'add new POI' button", |                     en: "Enable the 'add new POI' button", | ||||||
| 					ca: "Activar el botó d'afegir nou PDI'", | 					ca: "Activar el botó d'afegir nou PDI'", | ||||||
| 					es: "Activar el botón de añadir nuevo PDI'", | 					es: "Activar el botón de añadir nuevo PDI'", | ||||||
|  | @ -662,7 +764,7 @@ export default class Translations { | ||||||
|                     gl: "Activar o botón de 'engadir novo PDI'", |                     gl: "Activar o botón de 'engadir novo PDI'", | ||||||
|                     de: "Schaltfläche 'neuen POI hinzufügen' aktivieren", |                     de: "Schaltfläche 'neuen POI hinzufügen' aktivieren", | ||||||
|                 }), |                 }), | ||||||
|                 fsGeolocation: new T({ |                 fsGeolocation: new Translation({ | ||||||
|                     en: "Enable the 'geolocate-me' button (mobile only)", |                     en: "Enable the 'geolocate-me' button (mobile only)", | ||||||
| 					ca: "Activar el botó de 'geolocalitza'm' (només mòbil)", | 					ca: "Activar el botó de 'geolocalitza'm' (només mòbil)", | ||||||
| 					es: "Activar el botón de 'geolocalízame' (només mòbil)", | 					es: "Activar el botón de 'geolocalízame' (només mòbil)", | ||||||
|  | @ -670,21 +772,21 @@ export default class Translations { | ||||||
|                     nl: "Toon het knopje voor geolocalisatie (enkel op mobiel)", |                     nl: "Toon het knopje voor geolocalisatie (enkel op mobiel)", | ||||||
|                     de: "Die Schaltfläche 'Mich geolokalisieren' aktivieren (nur für Mobil)", |                     de: "Die Schaltfläche 'Mich geolokalisieren' aktivieren (nur für Mobil)", | ||||||
|                 }), |                 }), | ||||||
|                 fsIncludeCurrentBackgroundMap: new T({ |                 fsIncludeCurrentBackgroundMap: new Translation({ | ||||||
|                     en: "Include the current background choice <b>{name}</b>", |                     en: "Include the current background choice <b>{name}</b>", | ||||||
| 					ca: "Incloure l'opció de fons actual <b>{name}</b>", | 					ca: "Incloure l'opció de fons actual <b>{name}</b>", | ||||||
| 					es: "Incluir la opción de fondo actual <b>{name}</b>", | 					es: "Incluir la opción de fondo actual <b>{name}</b>", | ||||||
|                     nl: "Gebruik de huidige achtergrond <b>{name}</b>", |                     nl: "Gebruik de huidige achtergrond <b>{name}</b>", | ||||||
|                     de: "Die aktuelle Hintergrundwahl einschließen <b>{name}</b>", |                     de: "Die aktuelle Hintergrundwahl einschließen <b>{name}</b>", | ||||||
|                 }), |                 }), | ||||||
|                 fsIncludeCurrentLayers: new T({ |                 fsIncludeCurrentLayers: new Translation({ | ||||||
|                     en: "Include the current layer choices", |                     en: "Include the current layer choices", | ||||||
| 					ca: "Incloure les opcions de capa actual", | 					ca: "Incloure les opcions de capa actual", | ||||||
| 					es: "Incluir las opciones de capa actual", | 					es: "Incluir las opciones de capa actual", | ||||||
|                     nl: "Toon enkel de huidig getoonde lagen", |                     nl: "Toon enkel de huidig getoonde lagen", | ||||||
|                     de: "Die aktuelle Ebenenauswahl einbeziehen" |                     de: "Die aktuelle Ebenenauswahl einbeziehen" | ||||||
|                 }), |                 }), | ||||||
|                 fsIncludeCurrentLocation: new T({ |                 fsIncludeCurrentLocation: new Translation({ | ||||||
|                     en: "Include current location", |                     en: "Include current location", | ||||||
| 					es: "Incluir localización actual", | 					es: "Incluir localización actual", | ||||||
| 					ca: "Incloure localització actual", | 					ca: "Incloure localització actual", | ||||||
|  | @ -693,7 +795,7 @@ export default class Translations { | ||||||
|                 }) |                 }) | ||||||
|             }, |             }, | ||||||
|             morescreen: { |             morescreen: { | ||||||
|                 intro: new T({ |                 intro: new Translation({ | ||||||
|                     en: "<h3>More thematic maps?</h3>Do you enjoy collecting geodata? <br/>There are more themes available.", |                     en: "<h3>More thematic maps?</h3>Do you enjoy collecting geodata? <br/>There are more themes available.", | ||||||
|                     ca: "<h3>Més peticions</h3>T\'agrada captar dades? <br/>Hi ha més capes disponibles.", |                     ca: "<h3>Més peticions</h3>T\'agrada captar dades? <br/>Hi ha més capes disponibles.", | ||||||
|                     es: "<h3>Más peticiones</h3>Te gusta captar datos? <br/>Hay más capas disponibles.", |                     es: "<h3>Más peticiones</h3>Te gusta captar datos? <br/>Hay más capas disponibles.", | ||||||
|  | @ -703,7 +805,7 @@ export default class Translations { | ||||||
|                     de: "<h3>Weitere Quests</h3>Sammeln Sie gerne Geodaten? <br/>Es sind weitere Themen verfügbar." |                     de: "<h3>Weitere Quests</h3>Sammeln Sie gerne Geodaten? <br/>Es sind weitere Themen verfügbar." | ||||||
|                 }), |                 }), | ||||||
| 
 | 
 | ||||||
|                 requestATheme: new T({ |                 requestATheme: new Translation({ | ||||||
|                     en: "If you want a custom-built quest, request it <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>here</a>", |                     en: "If you want a custom-built quest, request it <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>here</a>", | ||||||
|                     ca: "Si vols que et fem una petició pròpia , demana-la <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>aquí</a>", |                     ca: "Si vols que et fem una petició pròpia , demana-la <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>aquí</a>", | ||||||
|                     es: "Si quieres que te hagamos una petición propia , pídela <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>aquí</a>", |                     es: "Si quieres que te hagamos una petición propia , pídela <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>aquí</a>", | ||||||
|  | @ -713,7 +815,7 @@ export default class Translations { | ||||||
|                     de: "Wenn Sie einen speziell angefertigte Quest wünschen, können Sie diesen <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>hier</a> anfragen", |                     de: "Wenn Sie einen speziell angefertigte Quest wünschen, können Sie diesen <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>hier</a> anfragen", | ||||||
|                 }), |                 }), | ||||||
| 
 | 
 | ||||||
|                 streetcomplete: new T({ |                 streetcomplete: new Translation({ | ||||||
|                     en: "Another, similar application is <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' target='_blank'>StreetComplete</a>", |                     en: "Another, similar application is <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' target='_blank'>StreetComplete</a>", | ||||||
|                     ca: "Una altra aplicació similar és <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' target='_blank'>StreetComplete</a>", |                     ca: "Una altra aplicació similar és <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' target='_blank'>StreetComplete</a>", | ||||||
|                     es: "Otra aplicación similar es <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' target='_blank'>StreetComplete</a>", |                     es: "Otra aplicación similar es <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' target='_blank'>StreetComplete</a>", | ||||||
|  | @ -722,7 +824,7 @@ export default class Translations { | ||||||
|                     gl: "Outra aplicación semellante é <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' target='_blank'>StreetComplete</a>", |                     gl: "Outra aplicación semellante é <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' target='_blank'>StreetComplete</a>", | ||||||
|                     de: "Eine andere, ähnliche Anwendung ist <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' target='_blank'>StreetComplete</a>", |                     de: "Eine andere, ähnliche Anwendung ist <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' target='_blank'>StreetComplete</a>", | ||||||
|                 }), |                 }), | ||||||
|                 createYourOwnTheme: new T({ |                 createYourOwnTheme: new Translation({ | ||||||
|                     en: "Create your own MapComplete theme from scratch", |                     en: "Create your own MapComplete theme from scratch", | ||||||
|                     ca: "Crea la teva pròpia petició completa de MapComplete des de zero.", |                     ca: "Crea la teva pròpia petició completa de MapComplete des de zero.", | ||||||
|                     es: "Crea tu propia petición completa de MapComplete desde cero.", |                     es: "Crea tu propia petición completa de MapComplete desde cero.", | ||||||
|  | @ -732,7 +834,7 @@ export default class Translations { | ||||||
|                     de: "Erstellen Sie Ihr eigenes MapComplete-Thema von Grund auf neu", |                     de: "Erstellen Sie Ihr eigenes MapComplete-Thema von Grund auf neu", | ||||||
|                 }) |                 }) | ||||||
|             }, |             }, | ||||||
|             readYourMessages: new T({ |             readYourMessages: new Translation({ | ||||||
|                 en: "Please, read all your OpenStreetMap-messages before adding a new point.", |                 en: "Please, read all your OpenStreetMap-messages before adding a new point.", | ||||||
|                 ca: "Llegeix tots els teus missatges d\'OpenStreetMap abans d\'afegir nous punts.", |                 ca: "Llegeix tots els teus missatges d\'OpenStreetMap abans d\'afegir nous punts.", | ||||||
|                 es: "Lee todos tus mensajes de OpenStreetMap antes de añadir nuevos puntos.", |                 es: "Lee todos tus mensajes de OpenStreetMap antes de añadir nuevos puntos.", | ||||||
|  | @ -741,7 +843,7 @@ export default class Translations { | ||||||
|                 gl: "Le todos a túas mensaxes do OpenStreetMap antes de engadir novos puntos.", |                 gl: "Le todos a túas mensaxes do OpenStreetMap antes de engadir novos puntos.", | ||||||
|                 de: "Bitte lesen Sie alle Ihre OpenStreetMap-Nachrichten, bevor Sie einen neuen Punkt hinzufügen" |                 de: "Bitte lesen Sie alle Ihre OpenStreetMap-Nachrichten, bevor Sie einen neuen Punkt hinzufügen" | ||||||
|             }), |             }), | ||||||
|             fewChangesBefore: new T({ |             fewChangesBefore: new Translation({ | ||||||
|                 en: "Please, answer a few questions of existing points before adding a new point.", |                 en: "Please, answer a few questions of existing points before adding a new point.", | ||||||
|                 ca: "Contesta unes quantes preguntes sobre punts existents abans d\'afegir-ne un de nou.", |                 ca: "Contesta unes quantes preguntes sobre punts existents abans d\'afegir-ne un de nou.", | ||||||
|                 es: "Contesta unas cuantas preguntas sobre puntos existentes antes de añadir nuevos.", |                 es: "Contesta unas cuantas preguntas sobre puntos existentes antes de añadir nuevos.", | ||||||
|  | @ -750,7 +852,7 @@ export default class Translations { | ||||||
|                 gl: "Responde unhas cantas preguntas sobre puntos existentes antes de engadir novos.", |                 gl: "Responde unhas cantas preguntas sobre puntos existentes antes de engadir novos.", | ||||||
|                 de: "Bitte beantworten Sie ein paar Fragen zu bestehenden Punkten, bevor Sie einen neuen Punkt hinzufügen." |                 de: "Bitte beantworten Sie ein paar Fragen zu bestehenden Punkten, bevor Sie einen neuen Punkt hinzufügen." | ||||||
|             }), |             }), | ||||||
|             goToInbox: new T({ |             goToInbox: new Translation({ | ||||||
|                 en: "Open inbox", |                 en: "Open inbox", | ||||||
|                 es: "Abrir mensajes", |                 es: "Abrir mensajes", | ||||||
|                 ca: "Obrir missatges", |                 ca: "Obrir missatges", | ||||||
|  | @ -759,7 +861,7 @@ export default class Translations { | ||||||
|                 gl: "Abrir mensaxes", |                 gl: "Abrir mensaxes", | ||||||
|                 de: "Posteingang öffnen" |                 de: "Posteingang öffnen" | ||||||
|             }), |             }), | ||||||
|             getStartedLogin: new T({ |             getStartedLogin: new Translation({ | ||||||
|                 en: "Login with OpenStreetMap to get started", |                 en: "Login with OpenStreetMap to get started", | ||||||
|                 es: "Entra en OpenStreetMap para empezar", |                 es: "Entra en OpenStreetMap para empezar", | ||||||
|                 ca: "Entra a OpenStreetMap per començar", |                 ca: "Entra a OpenStreetMap per començar", | ||||||
|  | @ -767,7 +869,7 @@ export default class Translations { | ||||||
|                 fr: "Connectez vous avec OpenStreetMap pour commencer", |                 fr: "Connectez vous avec OpenStreetMap pour commencer", | ||||||
|                 de: "Mit OpenStreetMap einloggen und loslegen" |                 de: "Mit OpenStreetMap einloggen und loslegen" | ||||||
|             }), |             }), | ||||||
|             getStartedNewAccount: new T({ |             getStartedNewAccount: new Translation({ | ||||||
|                 en: " or <a href='https://www.openstreetmap.org/user/new' target='_blank'>create a new account</a>", |                 en: " or <a href='https://www.openstreetmap.org/user/new' target='_blank'>create a new account</a>", | ||||||
|                 nl: " of <a href='https://www.openstreetmap.org/user/new' target='_blank'>maak een nieuwe account aan</a> ", |                 nl: " of <a href='https://www.openstreetmap.org/user/new' target='_blank'>maak een nieuwe account aan</a> ", | ||||||
|                 fr: " ou <a href='https://www.openstreetmap.org/user/new' target='_blank'>registrez vous</a>", |                 fr: " ou <a href='https://www.openstreetmap.org/user/new' target='_blank'>registrez vous</a>", | ||||||
|  | @ -776,20 +878,20 @@ export default class Translations { | ||||||
|                 gl: " ou <a href='https://www.openstreetmap.org/user/new' target='_blank'>crea unha nova conta</a>", |                 gl: " ou <a href='https://www.openstreetmap.org/user/new' target='_blank'>crea unha nova conta</a>", | ||||||
|                 de: " oder <a href='https://www.openstreetmap.org/user/new' target='_blank'>ein neues Konto anlegen</a>", |                 de: " oder <a href='https://www.openstreetmap.org/user/new' target='_blank'>ein neues Konto anlegen</a>", | ||||||
|             }), |             }), | ||||||
|             noTagsSelected: new T({ |             noTagsSelected: new Translation({ | ||||||
|                 en: "No tags selected", |                 en: "No tags selected", | ||||||
|                 es: "No se han seleccionado etiquetas", |                 es: "No se han seleccionado etiquetas", | ||||||
|                 ca: "No s\'han seleccionat etiquetes", |                 ca: "No s\'han seleccionat etiquetes", | ||||||
|                 gl: "Non se seleccionaron etiquetas", |                 gl: "Non se seleccionaron etiquetas", | ||||||
|                 de: "Keine Tags ausgewählt" |                 de: "Keine Tags ausgewählt" | ||||||
|             }), |             }), | ||||||
|             customThemeIntro: new T({ |             customThemeIntro: new Translation({ | ||||||
|                 en: "<h3>Custom themes</h3>These are previously visited user-generated themes.", |                 en: "<h3>Custom themes</h3>These are previously visited user-generated themes.", | ||||||
|                 nl: "<h3>Onofficiële themea's</h3>Je bezocht deze thema's gemaakt door andere OpenStreetMappers eerder", |                 nl: "<h3>Onofficiële themea's</h3>Je bezocht deze thema's gemaakt door andere OpenStreetMappers eerder", | ||||||
|                 gl: "<h3>Temas personalizados</h3>Estes son temas xerados por usuarios previamente visitados.", |                 gl: "<h3>Temas personalizados</h3>Estes son temas xerados por usuarios previamente visitados.", | ||||||
|                 de: "<h3>Kundenspezifische Themen</h3>Dies sind zuvor besuchte benutzergenerierte Themen" |                 de: "<h3>Kundenspezifische Themen</h3>Dies sind zuvor besuchte benutzergenerierte Themen" | ||||||
|             }), |             }), | ||||||
|             aboutMapcomplete: new T({ |             aboutMapcomplete: new Translation({ | ||||||
|                 en: "<h3>About MapComplete</h3>" + |                 en: "<h3>About MapComplete</h3>" + | ||||||
|                     "<p>MapComplete is an OpenStreetMap editor that is meant to help everyone to easily add information on a <b>single theme.</b></p>" + |                     "<p>MapComplete is an OpenStreetMap editor that is meant to help everyone to easily add information on a <b>single theme.</b></p>" + | ||||||
|                     "<p>Only features relevant to a single theme are shown with a few predefined questions, in order to keep things <b>simple and extremly user-friendly</b>." + |                     "<p>Only features relevant to a single theme are shown with a few predefined questions, in order to keep things <b>simple and extremly user-friendly</b>." + | ||||||
|  | @ -836,14 +938,14 @@ export default class Translations { | ||||||
|                     "<p>Fällt Ihnen ein Problem mit MapComplete auf? Haben Sie einen Feature-Wunsch? Wollen Sie beim Übersetzen helfen? " + |                     "<p>Fällt Ihnen ein Problem mit MapComplete auf? Haben Sie einen Feature-Wunsch? Wollen Sie beim Übersetzen helfen? " + | ||||||
|                     "Gehen Sie <a href='https://github.com/pietervdvn/MapComplete' target='_blank'>zum Quellcode</a> oder <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>zur Problemverfolgung</a>.</p>", |                     "Gehen Sie <a href='https://github.com/pietervdvn/MapComplete' target='_blank'>zum Quellcode</a> oder <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>zur Problemverfolgung</a>.</p>", | ||||||
|             }), |             }), | ||||||
|             backgroundMap: new T({ |             backgroundMap: new Translation({ | ||||||
|                 "en": "Background map", |                 "en": "Background map", | ||||||
| 				"ca": "Mapa de fons", | 				"ca": "Mapa de fons", | ||||||
| 				"es": "Mapa de fondo", | 				"es": "Mapa de fondo", | ||||||
|                 "nl": "Achtergrondkaart", |                 "nl": "Achtergrondkaart", | ||||||
|                 "de": "Hintergrundkarte" |                 "de": "Hintergrundkarte" | ||||||
|             }), |             }), | ||||||
|             zoomInToSeeThisLayer: new T({ |             zoomInToSeeThisLayer: new Translation({ | ||||||
|                 "en": "Zoom in to see this layer", |                 "en": "Zoom in to see this layer", | ||||||
| 				"ca": "Amplia per veure aquesta capa", | 				"ca": "Amplia per veure aquesta capa", | ||||||
| 				"es": "Amplía para ver esta capa", | 				"es": "Amplía para ver esta capa", | ||||||
|  | @ -852,49 +954,49 @@ export default class Translations { | ||||||
|             }), |             }), | ||||||
|             weekdays: { |             weekdays: { | ||||||
|                 abbreviations:{ |                 abbreviations:{ | ||||||
|                     monday: new T({ |                     monday: new Translation({ | ||||||
|                         "en": "Mon", |                         "en": "Mon", | ||||||
| 						"ca": "Dil", | 						"ca": "Dil", | ||||||
| 						"es": "Lun", | 						"es": "Lun", | ||||||
|                         "nl": "Maan", |                         "nl": "Maan", | ||||||
|                         "fr": "Lun", |                         "fr": "Lun", | ||||||
|                     }), |                     }), | ||||||
|                     tuesday: new T({ |                     tuesday: new Translation({ | ||||||
|                         "en": "Tue", |                         "en": "Tue", | ||||||
| 						"ca": "Dim", | 						"ca": "Dim", | ||||||
| 						"es": "Mar", | 						"es": "Mar", | ||||||
|                         "nl": "Din", |                         "nl": "Din", | ||||||
|                         "fr": "Mar", |                         "fr": "Mar", | ||||||
|                     }), |                     }), | ||||||
|                     wednesday: new T({ |                     wednesday: new Translation({ | ||||||
|                         "en": "Wed", |                         "en": "Wed", | ||||||
| 						"ca": "Dic", | 						"ca": "Dic", | ||||||
| 						"es": "Mie", | 						"es": "Mie", | ||||||
|                         "nl": "Woe", |                         "nl": "Woe", | ||||||
|                         "fr": "Mercr", |                         "fr": "Mercr", | ||||||
|                     }), |                     }), | ||||||
|                     thursday: new T({ |                     thursday: new Translation({ | ||||||
|                         "en": "Thu", |                         "en": "Thu", | ||||||
| 						"ca": "Dij", | 						"ca": "Dij", | ||||||
| 						"es": "Jue", | 						"es": "Jue", | ||||||
|                         "nl": "Don", |                         "nl": "Don", | ||||||
|                         "fr": "Jeudi", |                         "fr": "Jeudi", | ||||||
|                     }), |                     }), | ||||||
|                     friday: new T({ |                     friday: new Translation({ | ||||||
|                         "en": "Fri", |                         "en": "Fri", | ||||||
| 						"ca": "Div", | 						"ca": "Div", | ||||||
| 						"es": "Vie", | 						"es": "Vie", | ||||||
|                         "nl": "Vrij", |                         "nl": "Vrij", | ||||||
|                         "fr": "Vendr", |                         "fr": "Vendr", | ||||||
|                     }), |                     }), | ||||||
|                     saturday: new T({ |                     saturday: new Translation({ | ||||||
|                         "en": "Sat", |                         "en": "Sat", | ||||||
| 						"ca": "Dis", | 						"ca": "Dis", | ||||||
| 						"es": "Sab", | 						"es": "Sab", | ||||||
|                         "nl": "Zat", |                         "nl": "Zat", | ||||||
|                         "fr": "Sam", |                         "fr": "Sam", | ||||||
|                     }), |                     }), | ||||||
|                     sunday: new T({ |                     sunday: new Translation({ | ||||||
|                         "en": "Sun", |                         "en": "Sun", | ||||||
| 						"ca": "Diu", | 						"ca": "Diu", | ||||||
| 						"es": "Dom", | 						"es": "Dom", | ||||||
|  | @ -902,49 +1004,49 @@ export default class Translations { | ||||||
|                         "fr": "Dim", |                         "fr": "Dim", | ||||||
|                     }) |                     }) | ||||||
|                 }, |                 }, | ||||||
|                 monday: new T({ |                 monday: new Translation({ | ||||||
|                     "en": "Monday", |                     "en": "Monday", | ||||||
| 					"ca": "Dilluns", | 					"ca": "Dilluns", | ||||||
| 					"es": "Lunes", | 					"es": "Lunes", | ||||||
|                     "nl": "Maandag", |                     "nl": "Maandag", | ||||||
|                     "fr": "Lundi", |                     "fr": "Lundi", | ||||||
|                 }), |                 }), | ||||||
|                 tuesday: new T({ |                 tuesday: new Translation({ | ||||||
|                     "en": "Tuesday", |                     "en": "Tuesday", | ||||||
| 					"ca": "Dimarts", | 					"ca": "Dimarts", | ||||||
| 					"es": "Martes", | 					"es": "Martes", | ||||||
|                     "nl": "Dinsdag", |                     "nl": "Dinsdag", | ||||||
|                     "fr": "Mardi", |                     "fr": "Mardi", | ||||||
|                 }), |                 }), | ||||||
|                 wednesday: new T({ |                 wednesday: new Translation({ | ||||||
|                     "en": "Wednesday", |                     "en": "Wednesday", | ||||||
| 					"ca": "Dimecres", | 					"ca": "Dimecres", | ||||||
| 					"es": "Miércoles", | 					"es": "Miércoles", | ||||||
|                     "nl": "Woensdag", |                     "nl": "Woensdag", | ||||||
|                     "fr": "Mercredi", |                     "fr": "Mercredi", | ||||||
|                 }), |                 }), | ||||||
|                 thursday: new T({ |                 thursday: new Translation({ | ||||||
|                     "en": "Thursday", |                     "en": "Thursday", | ||||||
| 					"ca": "Dijous", | 					"ca": "Dijous", | ||||||
| 					"es": "Jueves", | 					"es": "Jueves", | ||||||
|                     "nl": "Donderdag", |                     "nl": "Donderdag", | ||||||
|                     "fr": "Jeudi", |                     "fr": "Jeudi", | ||||||
|                 }), |                 }), | ||||||
|                 friday: new T({ |                 friday: new Translation({ | ||||||
|                     "en": "Friday", |                     "en": "Friday", | ||||||
| 					"ca": "Divendres", | 					"ca": "Divendres", | ||||||
| 					"es": "Viernes", | 					"es": "Viernes", | ||||||
|                     "nl": "Vrijdag", |                     "nl": "Vrijdag", | ||||||
|                     "fr": "Vendredi", |                     "fr": "Vendredi", | ||||||
|                 }), |                 }), | ||||||
|                 saturday: new T({ |                 saturday: new Translation({ | ||||||
|                     "en": "Saturday", |                     "en": "Saturday", | ||||||
| 					"ca": "Dissabte", | 					"ca": "Dissabte", | ||||||
| 					"es": "Sábado", | 					"es": "Sábado", | ||||||
|                     "nl": "Zaterdag", |                     "nl": "Zaterdag", | ||||||
|                     "fr": "Samedi", |                     "fr": "Samedi", | ||||||
|                 }), |                 }), | ||||||
|                 sunday: new T({ |                 sunday: new Translation({ | ||||||
|                     "en": "Sunday", |                     "en": "Sunday", | ||||||
| 					"ca": "Diumenge", | 					"ca": "Diumenge", | ||||||
| 					"es": "Domingo", | 					"es": "Domingo", | ||||||
|  | @ -953,53 +1055,53 @@ export default class Translations { | ||||||
|                 }) |                 }) | ||||||
|             }, |             }, | ||||||
|             opening_hours: { |             opening_hours: { | ||||||
|                 open_during_ph: new T({ |                 open_during_ph: new Translation({ | ||||||
|                     "nl": "Op een feestdag is deze zaak", |                     "nl": "Op een feestdag is deze zaak", | ||||||
| 					"ca": "Durant festes aquest servei és", | 					"ca": "Durant festes aquest servei és", | ||||||
| 					"es": "Durante fiestas este servicio está", | 					"es": "Durante fiestas este servicio está", | ||||||
|                     "en":"During a public holiday, this amenity is" |                     "en":"During a public holiday, this amenity is" | ||||||
|                 }), |                 }), | ||||||
|                 opensAt: new T({ |                 opensAt: new Translation({ | ||||||
|                     "en": "from", |                     "en": "from", | ||||||
| 					"ca": "des de", | 					"ca": "des de", | ||||||
| 					"es": "desde", | 					"es": "desde", | ||||||
|                     "nl": "vanaf" |                     "nl": "vanaf" | ||||||
|                 }), openTill: new T({ |                 }), openTill: new Translation({ | ||||||
|                     "en": "till", |                     "en": "till", | ||||||
| 					"ca": "fins", | 					"ca": "fins", | ||||||
| 					"es": " hasta", | 					"es": " hasta", | ||||||
|                     "nl": "tot" |                     "nl": "tot" | ||||||
|                 }), |                 }), | ||||||
|                 not_all_rules_parsed: new T({ |                 not_all_rules_parsed: new Translation({ | ||||||
|                     "en": "The opening hours of this shop are complicated. The following rules are ignored in the input element:", |                     "en": "The opening hours of this shop are complicated. The following rules are ignored in the input element:", | ||||||
| 					"ca": "L'horari d'aquesta botiga és complicat. Les normes següents seran ignorades en l'entrada:", | 					"ca": "L'horari d'aquesta botiga és complicat. Les normes següents seran ignorades en l'entrada:", | ||||||
| 					"es": "El horario de esta tienda es complejo. Las normas siguientes serán ignoradas en la entrada:" | 					"es": "El horario de esta tienda es complejo. Las normas siguientes serán ignoradas en la entrada:" | ||||||
|                 }), |                 }), | ||||||
|                 closed_until: new T({ |                 closed_until: new Translation({ | ||||||
|                     "en": "Closed until {date}", |                     "en": "Closed until {date}", | ||||||
| 					"ca": "Tancat fins {date}", | 					"ca": "Tancat fins {date}", | ||||||
| 					"es": "Cerrado hasta {date}", | 					"es": "Cerrado hasta {date}", | ||||||
|                     "nl": "Gesloten - open op {date}" |                     "nl": "Gesloten - open op {date}" | ||||||
|                 }), |                 }), | ||||||
| 
 | 
 | ||||||
|                 closed_permanently: new T({ |                 closed_permanently: new Translation({ | ||||||
|                     "en": "Closed - no opening day known", |                     "en": "Closed - no opening day known", | ||||||
| 					"ca": "Tancat - sense dia d'obertura conegut", | 					"ca": "Tancat - sense dia d'obertura conegut", | ||||||
| 					"es": "Cerrado - sin día de apertura conocido", | 					"es": "Cerrado - sin día de apertura conocido", | ||||||
|                     "nl": "Gesloten" |                     "nl": "Gesloten" | ||||||
|                 }), |                 }), | ||||||
|                 ph_not_known: new T({ |                 ph_not_known: new Translation({ | ||||||
|                     "en": " ", |                     "en": " ", | ||||||
| 					"ca": " ", | 					"ca": " ", | ||||||
| 					"es": " ", | 					"es": " ", | ||||||
|                     "nl": " " |                     "nl": " " | ||||||
|                 }), |                 }), | ||||||
|                 ph_closed: new T({ |                 ph_closed: new Translation({ | ||||||
|                     "en": "closed", |                     "en": "closed", | ||||||
| 					"ca": "tancat", | 					"ca": "tancat", | ||||||
| 					"es": "cerrado", | 					"es": "cerrado", | ||||||
|                     "nl": "gesloten" |                     "nl": "gesloten" | ||||||
|                 }), ph_open: new T({ |                 }), ph_open: new Translation({ | ||||||
|                     "en": "opened", |                     "en": "opened", | ||||||
| 					"ca": "tancat", | 					"ca": "tancat", | ||||||
| 					"es": "abierto", | 					"es": "abierto", | ||||||
|  | @ -1010,7 +1112,7 @@ export default class Translations { | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         favourite: { |         favourite: { | ||||||
|             title: new T({ |             title: new Translation({ | ||||||
|                 en: "Personal theme", |                 en: "Personal theme", | ||||||
|                 nl: "Persoonlijk thema", |                 nl: "Persoonlijk thema", | ||||||
|                 es: "Interficie personal", |                 es: "Interficie personal", | ||||||
|  | @ -1018,28 +1120,28 @@ export default class Translations { | ||||||
|                 gl: "Tema personalizado", |                 gl: "Tema personalizado", | ||||||
|                 de: "Persönliches Thema" |                 de: "Persönliches Thema" | ||||||
|             }), |             }), | ||||||
|             description: new T({ |             description: new Translation({ | ||||||
|                 en: "Create a personal theme based on all the available layers of all themes", |                 en: "Create a personal theme based on all the available layers of all themes", | ||||||
|                 es: "Crea una interficie basada en todas las capas disponibles de todas las interficies", |                 es: "Crea una interficie basada en todas las capas disponibles de todas las interficies", | ||||||
|                 ca: "Crea una interfície basada en totes les capes disponibles de totes les interfícies", |                 ca: "Crea una interfície basada en totes les capes disponibles de totes les interfícies", | ||||||
|                 gl: "Crea un tema baseado en todas as capas dispoñíbeis de todos os temas", |                 gl: "Crea un tema baseado en todas as capas dispoñíbeis de todos os temas", | ||||||
|                 de: "Erstellen Sie ein persönliches Thema auf der Grundlage aller verfügbaren Ebenen aller Themen" |                 de: "Erstellen Sie ein persönliches Thema auf der Grundlage aller verfügbaren Ebenen aller Themen" | ||||||
|             }), |             }), | ||||||
|             panelIntro: new T({ |             panelIntro: new Translation({ | ||||||
|                 en: "<h3>Your personal theme</h3>Activate your favourite layers from all the official themes", |                 en: "<h3>Your personal theme</h3>Activate your favourite layers from all the official themes", | ||||||
|                 ca: "<h3>La teva interfície personal</h3>Activa les teves capes favorites de totes les interfícies oficials", |                 ca: "<h3>La teva interfície personal</h3>Activa les teves capes favorites de totes les interfícies oficials", | ||||||
|                 es: "<h3>Tu interficie personal</h3>Activa tus capas favoritas de todas las interficies oficiales", |                 es: "<h3>Tu interficie personal</h3>Activa tus capas favoritas de todas las interficies oficiales", | ||||||
|                 gl: "<h3>O teu tema personalizado</h3>Activa as túas capas favoritas de todos os temas oficiais", |                 gl: "<h3>O teu tema personalizado</h3>Activa as túas capas favoritas de todos os temas oficiais", | ||||||
|                 de: "<h3>Ihr persönliches Thema</h3>Aktivieren Sie Ihre Lieblingsebenen aus allen offiziellen Themen" |                 de: "<h3>Ihr persönliches Thema</h3>Aktivieren Sie Ihre Lieblingsebenen aus allen offiziellen Themen" | ||||||
|             }), |             }), | ||||||
|             loginNeeded: new T({ |             loginNeeded: new Translation({ | ||||||
|                 en: "<h3>Log in</h3>A personal layout is only available for OpenStreetMap users", |                 en: "<h3>Log in</h3>A personal layout is only available for OpenStreetMap users", | ||||||
|                 es: "<h3>Entrar</h3>El diseño personalizado sólo está disponible para los usuarios de OpenstreetMap", |                 es: "<h3>Entrar</h3>El diseño personalizado sólo está disponible para los usuarios de OpenstreetMap", | ||||||
|                 ca: "<h3>Entrar</h3>El disseny personalizat només està disponible pels usuaris d\' OpenstreetMap", |                 ca: "<h3>Entrar</h3>El disseny personalizat només està disponible pels usuaris d\' OpenstreetMap", | ||||||
|                 gl: "<h3>Iniciar a sesión</h3>O deseño personalizado só está dispoñíbel para os usuarios do OpenstreetMap", |                 gl: "<h3>Iniciar a sesión</h3>O deseño personalizado só está dispoñíbel para os usuarios do OpenstreetMap", | ||||||
|                 de: "<h3>Anmelden</h3>Ein persönliches Layout ist nur für OpenStreetMap-Benutzer verfügbar", |                 de: "<h3>Anmelden</h3>Ein persönliches Layout ist nur für OpenStreetMap-Benutzer verfügbar", | ||||||
|             }), |             }), | ||||||
|             reload: new T({ |             reload: new Translation({ | ||||||
|                 en: "Reload the data", |                 en: "Reload the data", | ||||||
|                 es: "Recargar datos", |                 es: "Recargar datos", | ||||||
|                 ca: "Recarregar dades", |                 ca: "Recarregar dades", | ||||||
|  |  | ||||||
|  | @ -262,6 +262,7 @@ | ||||||
|     font-size: smaller; |     font-size: smaller; | ||||||
|     border-radius: 0.3em; |     border-radius: 0.3em; | ||||||
|     border: 1px solid #ccc; |     border: 1px solid #ccc; | ||||||
|  |     word-break: initial; | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,17 +1,19 @@ | ||||||
| import {UIElement} from "../UI/UIElement"; | import {UIElement} from "../UI/UIElement"; | ||||||
|  | UIElement.runningFromConsole = true; | ||||||
|  | 
 | ||||||
| import {equal} from "assert"; | import {equal} from "assert"; | ||||||
| import Translation from "../UI/i18n/Translation"; |  | ||||||
| import T from "./TestHelper"; | import T from "./TestHelper"; | ||||||
| import {FromJSON} from "../Customizations/JSON/FromJSON"; | import {FromJSON} from "../Customizations/JSON/FromJSON"; | ||||||
| import {And, Tag} from "../Logic/Tags"; | import {And, Tag} from "../Logic/Tags"; | ||||||
| import Locale from "../UI/i18n/Locale"; | import Locale from "../UI/i18n/Locale"; | ||||||
| import Translations from "../UI/i18n/Translations"; | import Translations, {Translation} from "../UI/i18n/Translations"; | ||||||
| import {UIEventSource} from "../Logic/UIEventSource"; | import {UIEventSource} from "../Logic/UIEventSource"; | ||||||
| import {OH, OpeningHour} from "../Logic/OpeningHours"; | import {OH, OpeningHour} from "../Logic/OpeningHours"; | ||||||
| import PublicHolidayInput from "../UI/Input/OpeningHours/PublicHolidayInput"; | import PublicHolidayInput from "../UI/Input/OpeningHours/PublicHolidayInput"; | ||||||
| import {TagRendering} from "../UI/Popup/TagRendering"; | import TagRenderingConfig from "../Customizations/JSON/TagRenderingConfig"; | ||||||
|  | import EditableTagRendering from "../UI/Popup/EditableTagRendering"; | ||||||
|  | import {SubstitutedTranslation} from "../UI/SpecialVisualizations"; | ||||||
| 
 | 
 | ||||||
| UIElement.runningFromConsole = true; |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| new T([ | new T([ | ||||||
|  | @ -32,10 +34,34 @@ new T([ | ||||||
|         equal((and.and[1] as Tag).value, "y"); |         equal((and.and[1] as Tag).value, "y"); | ||||||
| 
 | 
 | ||||||
|     })], |     })], | ||||||
|  |     ["Is equivalent test", (() => { | ||||||
|  | 
 | ||||||
|  |         const t0 = new And([ | ||||||
|  |             new Tag("valves:special","A"), | ||||||
|  |             new Tag("valves","A") | ||||||
|  |         ]) | ||||||
|  |         const t1 = new And([ | ||||||
|  |             new Tag("valves","A") | ||||||
|  |         ]) | ||||||
|  |         const t2 = new And([ | ||||||
|  |             new Tag("valves","B") | ||||||
|  |         ]) | ||||||
|  |         equal(true, t0.isEquivalent(t0)) | ||||||
|  |         equal(true, t1.isEquivalent(t1)) | ||||||
|  |         equal(true, t2.isEquivalent(t2)) | ||||||
|  | 
 | ||||||
|  |         equal(false, t0.isEquivalent(t1)) | ||||||
|  |         equal(false, t0.isEquivalent(t2)) | ||||||
|  |         equal(false, t1.isEquivalent(t0)) | ||||||
|  |          | ||||||
|  |         equal(false, t1.isEquivalent(t2)) | ||||||
|  |         equal(false, t2.isEquivalent(t0)) | ||||||
|  |         equal(false, t2.isEquivalent(t1)) | ||||||
|  |     })], | ||||||
|     ["Parse translation map", (() => { |     ["Parse translation map", (() => { | ||||||
| 
 | 
 | ||||||
|         const json: any = {"en": "English", "nl": "Nederlands"}; |         const json: any = {"en": "English", "nl": "Nederlands"}; | ||||||
|         const translation = Translations.WT(FromJSON.Translation(json)); |         const translation = Translations.WT(new Translation(json)); | ||||||
|         Locale.language.setData("en"); |         Locale.language.setData("en"); | ||||||
|         equal(translation.txt, "English"); |         equal(translation.txt, "English"); | ||||||
|         Locale.language.setData("nl"); |         Locale.language.setData("nl"); | ||||||
|  | @ -43,7 +69,7 @@ new T([ | ||||||
|     })], |     })], | ||||||
|     ["Parse tag rendering", (() => { |     ["Parse tag rendering", (() => { | ||||||
|         Locale.language.setData("nl"); |         Locale.language.setData("nl"); | ||||||
|         const tr = FromJSON.TagRendering({ |         const tr = new TagRenderingConfig({ | ||||||
|             render: ({"en":"Name is {name}", "nl":"Ook een {name}"} as any), |             render: ({"en":"Name is {name}", "nl":"Ook een {name}"} as any), | ||||||
|             question: "Wat is de naam van dit object?", |             question: "Wat is de naam van dit object?", | ||||||
|             freeform: { |             freeform: { | ||||||
|  | @ -59,12 +85,12 @@ new T([ | ||||||
|             condition: "x=" |             condition: "x=" | ||||||
|         }, ""); |         }, ""); | ||||||
| 
 | 
 | ||||||
|         equal(true, tr.IsKnown({"noname": "yes"})); |         equal(undefined, tr.GetRenderValue({"foo": "bar"})); | ||||||
|         equal(true, tr.IsKnown({"name": "ABC"})); |         equal("Has no name", tr.GetRenderValue({"noname": "yes"})?.txt); | ||||||
|         equal(false, tr.IsKnown({"foo": "bar"})); |         equal("Ook een {name}", tr.GetRenderValue({"name": "xyz"})?.txt); | ||||||
|         equal("Has no name", tr.GetContent({"noname": "yes"})?.txt); |         equal("Ook een xyz", new SubstitutedTranslation( tr.GetRenderValue({"name": "xyz"}), | ||||||
|         equal("Ook een xyz", tr.GetContent({"name": "xyz"})?.txt); |             new UIEventSource<any>({"name":"xyz"})).InnerRender()); | ||||||
|         equal(undefined, tr.GetContent({"foo": "bar"})); |         equal(undefined, tr.GetRenderValue({"foo": "bar"})); | ||||||
| 
 | 
 | ||||||
|     })], |     })], | ||||||
|      |      | ||||||
|  | @ -110,10 +136,9 @@ new T([ | ||||||
|                 ] |                 ] | ||||||
|             }; |             }; | ||||||
| 
 | 
 | ||||||
|             const constr = FromJSON.TagRendering(def, "test"); |             const constr = new TagRenderingConfig(def, "test"); | ||||||
|             TagRendering.injectFunction(); |             const uiEl = new EditableTagRendering(new UIEventSource<any>( | ||||||
|             const uiEl = constr.construct(new UIEventSource<any>( |                 {leisure: "park", "access": "no"}), constr | ||||||
|                 {leisure: "park", "access": "no"}) |  | ||||||
|             ); |             ); | ||||||
|             const rendered = uiEl.InnerRender(); |             const rendered = uiEl.InnerRender(); | ||||||
|             equal(true, rendered.indexOf("Niet toegankelijk") > 0) |             equal(true, rendered.indexOf("Niet toegankelijk") > 0) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue