More translations!
This commit is contained in:
parent
369c19a58a
commit
7e768c1472
6 changed files with 77 additions and 32 deletions
|
@ -463,7 +463,7 @@ class TagRendering extends UIElement implements TagDependantUIElement {
|
||||||
|
|
||||||
return "<div class='question'>" +
|
return "<div class='question'>" +
|
||||||
"<span class='question-text'>" + question + "</span>" +
|
"<span class='question-text'>" + question + "</span>" +
|
||||||
(question !== "" ? "<br/>" : "") +
|
(this._question.IsEmpty() ? "" : "<br/>") +
|
||||||
"<div>" + this._questionElement.Render() + "</div>" +
|
"<div>" + this._questionElement.Render() + "</div>" +
|
||||||
this._skipButton.Render() +
|
this._skipButton.Render() +
|
||||||
this._saveButton.Render() +
|
this._saveButton.Render() +
|
||||||
|
@ -471,10 +471,11 @@ class TagRendering extends UIElement implements TagDependantUIElement {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.IsKnown()) {
|
if (this.IsKnown()) {
|
||||||
const html = this.RenderAnwser().Render();
|
const answer = this.RenderAnwser()
|
||||||
if (html == "") {
|
if (answer.IsEmpty()) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
const html = answer.Render();
|
||||||
let editButton = "";
|
let editButton = "";
|
||||||
if (this._userDetails.data.loggedIn && this._question !== undefined) {
|
if (this._userDetails.data.loggedIn && this._question !== undefined) {
|
||||||
editButton = this._editButton.Render();
|
editButton = this._editButton.Render();
|
||||||
|
|
|
@ -31,11 +31,12 @@ export class ImageUploadFlow extends UIElement {
|
||||||
this._uploadOptions = uploadOptions;
|
this._uploadOptions = uploadOptions;
|
||||||
this.ListenTo(this._isUploading);
|
this.ListenTo(this._isUploading);
|
||||||
|
|
||||||
const licensePicker = new DropDown("The picture is published ",
|
const licensePicker = new DropDown(
|
||||||
|
Translations.general.picture.licenseIntro,
|
||||||
[
|
[
|
||||||
{value: "CC0", shown: "in the public domain"},
|
{value: "CC0", shown: Translations.general.picture.publicDomain},
|
||||||
{value: "CC-BY-SA 4.0", shown: "with a CC-BY-SA license"},
|
{value: "CC-BY-SA 4.0", shown:Translations.general.picture.ccbysa},
|
||||||
{value: "CC-BY 4.0", shown: "with a CC-BY license"}
|
{value: "CC-BY 4.0", shown:Translations.general.picture.ccby}
|
||||||
],
|
],
|
||||||
preferedLicense
|
preferedLicense
|
||||||
);
|
);
|
||||||
|
@ -67,7 +68,7 @@ export class ImageUploadFlow extends UIElement {
|
||||||
|
|
||||||
"<div class='imageflow-file-input-wrapper'>" +
|
"<div class='imageflow-file-input-wrapper'>" +
|
||||||
"<img src='./assets/camera-plus.svg' alt='upload image'/> " +
|
"<img src='./assets/camera-plus.svg' alt='upload image'/> " +
|
||||||
"<span class='imageflow-add-picture'>"+Translations.general.uploadAPicture.R()+"</span>" +
|
"<span class='imageflow-add-picture'>"+Translations.general.picture.uploadAPicture.R()+"</span>" +
|
||||||
"<div class='break'></div>" +
|
"<div class='break'></div>" +
|
||||||
"</div>" +
|
"</div>" +
|
||||||
|
|
||||||
|
|
|
@ -3,27 +3,31 @@ import {UIElement} from "../UIElement";
|
||||||
import {InputElement} from "./InputElement";
|
import {InputElement} from "./InputElement";
|
||||||
import instantiate = WebAssembly.instantiate;
|
import instantiate = WebAssembly.instantiate;
|
||||||
import {FixedUiElement} from "../Base/FixedUiElement";
|
import {FixedUiElement} from "../Base/FixedUiElement";
|
||||||
|
import Translations from "../i18n/Translations";
|
||||||
|
|
||||||
export class DropDown<T> extends InputElement<T> {
|
export class DropDown<T> extends InputElement<T> {
|
||||||
|
|
||||||
private readonly _label: string;
|
private readonly _label: UIElement;
|
||||||
private readonly _values: { value: T; shown: UIElement }[];
|
private readonly _values: { value: T; shown: UIElement }[];
|
||||||
|
|
||||||
private readonly _value;
|
private readonly _value;
|
||||||
|
|
||||||
constructor(label: string,
|
constructor(label: string | UIElement,
|
||||||
values: { value: T, shown: string | UIElement }[],
|
values: { value: T, shown: string | UIElement }[],
|
||||||
value: UIEventSource<T> = undefined) {
|
value: UIEventSource<T> = undefined) {
|
||||||
super(undefined);
|
super(undefined);
|
||||||
this._value = value ?? new UIEventSource<T>(undefined);
|
this._value = value ?? new UIEventSource<T>(undefined);
|
||||||
this._label = label;
|
this._label = Translations.W(label);
|
||||||
this._values = values.map(v => {
|
this._values = values.map(v => {
|
||||||
return {
|
return {
|
||||||
value: v.value,
|
value: v.value,
|
||||||
shown: v.shown instanceof UIElement ? v.shown : new FixedUiElement(v.shown)
|
shown: Translations.W(v.shown)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
for (const v of this._values) {
|
||||||
|
this.ListenTo(v.shown._source);
|
||||||
|
}
|
||||||
this.ListenTo(this._value)
|
this.ListenTo(this._value)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -60,7 +64,7 @@ export class DropDown<T> extends InputElement<T> {
|
||||||
|
|
||||||
}
|
}
|
||||||
return "<form>" +
|
return "<form>" +
|
||||||
"<label for='dropdown-" + this.id + "'>" + this._label + "</label>" +
|
"<label for='dropdown-" + this.id + "'>" + this._label.Render() + "</label>" +
|
||||||
"<select name='dropdown-" + this.id + "' id='dropdown-" + this.id + "'>" +
|
"<select name='dropdown-" + this.id + "' id='dropdown-" + this.id + "'>" +
|
||||||
options +
|
options +
|
||||||
"</select>" +
|
"</select>" +
|
||||||
|
|
|
@ -2,6 +2,7 @@ import {UIElement} from "../UIElement";
|
||||||
import {UIEventSource} from "../UIEventSource";
|
import {UIEventSource} from "../UIEventSource";
|
||||||
import {InputElement} from "./InputElement";
|
import {InputElement} from "./InputElement";
|
||||||
import {FixedUiElement} from "../Base/FixedUiElement";
|
import {FixedUiElement} from "../Base/FixedUiElement";
|
||||||
|
import Translations from "../i18n/Translations";
|
||||||
|
|
||||||
|
|
||||||
export class TextField<T> extends InputElement<T> {
|
export class TextField<T> extends InputElement<T> {
|
||||||
|
@ -35,12 +36,8 @@ export class TextField<T> extends InputElement<T> {
|
||||||
this.mappedValue.addCallback((t) => this.value.setData(options.toString(t)));
|
this.mappedValue.addCallback((t) => this.value.setData(options.toString(t)));
|
||||||
|
|
||||||
|
|
||||||
options.placeholder = options.placeholder ?? "";
|
this._placeholder = Translations.W(options.placeholder ?? "");
|
||||||
if (options.placeholder instanceof UIElement) {
|
this.ListenTo(this._placeholder._source);
|
||||||
this._placeholder = options.placeholder
|
|
||||||
} else {
|
|
||||||
this._placeholder = new FixedUiElement(options.placeholder);
|
|
||||||
}
|
|
||||||
this._toString = options.toString ?? ((t) => ("" + t));
|
this._toString = options.toString ?? ((t) => ("" + t));
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,13 +5,18 @@ import {FixedUiElement} from "./Base/FixedUiElement";
|
||||||
import {Geocoding} from "../Logic/Geocoding";
|
import {Geocoding} from "../Logic/Geocoding";
|
||||||
import {Basemap} from "../Logic/Basemap";
|
import {Basemap} from "../Logic/Basemap";
|
||||||
import {VariableUiElement} from "./Base/VariableUIElement";
|
import {VariableUiElement} from "./Base/VariableUIElement";
|
||||||
|
import Translation from "./i18n/Translation";
|
||||||
|
import Locale from "./i18n/Locale";
|
||||||
|
import Translations from "./i18n/Translations";
|
||||||
|
|
||||||
|
|
||||||
export class SearchAndGo extends UIElement {
|
export class SearchAndGo extends UIElement {
|
||||||
|
|
||||||
private _placeholder = new UIEventSource("Search a location...")
|
private _placeholder = new UIEventSource<Translation>(Translations.general.search.search)
|
||||||
private _searchField = new TextField<string>({
|
private _searchField = new TextField<string>({
|
||||||
placeholder: new VariableUiElement(this._placeholder),
|
placeholder: new VariableUiElement(
|
||||||
|
this._placeholder.map(uiElement => uiElement.InnerRender(), [Locale.language])
|
||||||
|
),
|
||||||
fromString: str => str,
|
fromString: str => str,
|
||||||
toString: str => str
|
toString: str => str
|
||||||
}
|
}
|
||||||
|
@ -41,12 +46,12 @@ export class SearchAndGo extends UIElement {
|
||||||
private RunSearch() {
|
private RunSearch() {
|
||||||
const searchString = this._searchField.GetValue().data;
|
const searchString = this._searchField.GetValue().data;
|
||||||
this._searchField.Clear();
|
this._searchField.Clear();
|
||||||
this._placeholder.setData("Searching...");
|
this._placeholder.setData(Translations.general.search.searching);
|
||||||
const self = this;
|
const self = this;
|
||||||
Geocoding.Search(searchString, this._map, (result) => {
|
Geocoding.Search(searchString, this._map, (result) => {
|
||||||
|
|
||||||
if (result.length == 0) {
|
if (result.length == 0) {
|
||||||
this._placeholder.setData("Niets gevonden");
|
this._placeholder.setData(Translations.general.search.nothing);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,16 +61,15 @@ export class SearchAndGo extends UIElement {
|
||||||
[bb[1], bb[3]]
|
[bb[1], bb[3]]
|
||||||
]
|
]
|
||||||
self._map.map.fitBounds(bounds);
|
self._map.map.fitBounds(bounds);
|
||||||
this._placeholder.setData("Search a location...");
|
this._placeholder.setData(Translations.general.search.search);
|
||||||
},
|
},
|
||||||
() => {
|
() => {
|
||||||
this._placeholder.setData("Something went wrong. Try again.");
|
this._placeholder.setData(Translations.general.search.error);
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
InnerRender(): string {
|
InnerRender(): string {
|
||||||
// "<img class='search' src='./assets/search.svg' alt='Search'> " +
|
|
||||||
return this._searchField.Render() +
|
return this._searchField.Render() +
|
||||||
this._goButton.Render();
|
this._goButton.Render();
|
||||||
|
|
||||||
|
|
|
@ -24,15 +24,53 @@ export default class Translations {
|
||||||
en: "Click here to login with OpenStreetMap",
|
en: "Click here to login with OpenStreetMap",
|
||||||
nl: "Klik hier op je aan te melden met OpenStreetMap"
|
nl: "Klik hier op je aan te melden met OpenStreetMap"
|
||||||
}),
|
}),
|
||||||
uploadAPicture: new Translation({
|
|
||||||
en: "Add a picture",
|
|
||||||
nl: "Voeg een foto toe"
|
|
||||||
|
|
||||||
})
|
search: {
|
||||||
|
search: new Translation({
|
||||||
|
en: "Search a location",
|
||||||
|
nl: "Zoek naar een locatie"
|
||||||
|
}),
|
||||||
|
searching: new Translation({
|
||||||
|
en: "Searching...",
|
||||||
|
nl: "Aan het zoeken..."
|
||||||
|
}),
|
||||||
|
nothing: new Translation({
|
||||||
|
en: "Nothing found...",
|
||||||
|
nl: "Niet gevonden..."
|
||||||
|
}),
|
||||||
|
error: new Translation({
|
||||||
|
en: "Something went wrong...",
|
||||||
|
nl: "Niet gelukt..."
|
||||||
|
})
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
picture: {
|
||||||
|
uploadAPicture: new Translation({
|
||||||
|
en: "Add a picture",
|
||||||
|
nl: "Voeg een foto toe"
|
||||||
|
|
||||||
|
}),
|
||||||
|
licenseIntro: new Translation({
|
||||||
|
en: "Your picture is published",
|
||||||
|
nl: "Je foto wordt gepubliceerd"
|
||||||
|
}),
|
||||||
|
publicDomain: new Translation({
|
||||||
|
en: "in the public domain",
|
||||||
|
nl: "in het publiek domein"
|
||||||
|
}),
|
||||||
|
ccby: new Translation({
|
||||||
|
en: "with a CC-BY license",
|
||||||
|
nl: "met een CC-BY licentie"
|
||||||
|
}),
|
||||||
|
ccbysa: new Translation({
|
||||||
|
en: "with a CC-BY-SA license",
|
||||||
|
nl: "met een CC-BY-SA licentie"
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static W(s: string | UIElement):
|
public static W(s: string | UIElement): UIElement {
|
||||||
UIElement {
|
|
||||||
if (s instanceof UIElement) {
|
if (s instanceof UIElement) {
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue