2020-07-21 00:07:04 +02:00
|
|
|
import {FixedUiElement} from "../Base/FixedUiElement";
|
2020-11-06 01:58:26 +01:00
|
|
|
import {Translation} from "./Translation";
|
2021-06-10 01:36:20 +02:00
|
|
|
import BaseUIElement from "../BaseUIElement";
|
2022-01-29 02:45:59 +01:00
|
|
|
import * as known_languages from "../../assets/generated/used_languages.json"
|
2022-02-11 04:28:11 +01:00
|
|
|
import CompiledTranslations from "../../assets/generated/CompiledTranslations";
|
|
|
|
|
2020-07-20 12:39:43 +02:00
|
|
|
export default class Translations {
|
2020-07-21 23:31:41 +02:00
|
|
|
|
2022-02-11 04:28:11 +01:00
|
|
|
static t = CompiledTranslations.t;
|
2022-01-29 02:45:59 +01:00
|
|
|
private static knownLanguages = new Set(known_languages.languages)
|
2020-07-21 23:31:41 +02:00
|
|
|
constructor() {
|
|
|
|
throw "Translations is static. If you want to intitialize a new translation, use the singular form"
|
|
|
|
}
|
|
|
|
|
2021-06-10 01:36:20 +02:00
|
|
|
public static W(s: string | BaseUIElement): BaseUIElement {
|
2020-08-22 02:12:46 +02:00
|
|
|
if (typeof (s) === "string") {
|
|
|
|
return new FixedUiElement(s);
|
2020-07-20 12:39:43 +02:00
|
|
|
}
|
2021-09-09 00:05:51 +02:00
|
|
|
if (typeof s === "number") {
|
|
|
|
return new FixedUiElement("" + s)
|
2021-08-23 15:48:42 +02:00
|
|
|
}
|
2020-08-22 02:12:46 +02:00
|
|
|
return s;
|
|
|
|
}
|
|
|
|
|
2021-03-13 19:07:38 +01:00
|
|
|
static T(t: string | any, context = undefined): Translation {
|
2021-09-09 00:05:51 +02:00
|
|
|
if (t === undefined || t === null) {
|
2020-10-27 01:01:34 +01:00
|
|
|
return undefined;
|
|
|
|
}
|
2021-11-07 16:34:51 +01:00
|
|
|
if (typeof t === "number") {
|
|
|
|
t = "" + t
|
2021-10-22 02:16:07 +02:00
|
|
|
}
|
2021-09-09 00:05:51 +02:00
|
|
|
if (typeof t === "string") {
|
|
|
|
return new Translation({"*": t}, context);
|
2020-10-27 01:01:34 +01:00
|
|
|
}
|
2021-09-09 00:05:51 +02:00
|
|
|
if (t.render !== undefined) {
|
2020-10-27 01:01:34 +01:00
|
|
|
const msg = "Creating a translation, but this object contains a 'render'-field. Use the translation directly"
|
|
|
|
console.error(msg, t);
|
|
|
|
throw msg
|
|
|
|
}
|
2021-09-09 00:05:51 +02:00
|
|
|
if (t instanceof Translation) {
|
2021-07-01 02:26:45 +02:00
|
|
|
return t;
|
|
|
|
}
|
2021-03-13 19:07:38 +01:00
|
|
|
return new Translation(t, context);
|
2020-10-27 01:01:34 +01:00
|
|
|
}
|
|
|
|
|
2022-03-15 13:40:23 +01:00
|
|
|
/**
|
|
|
|
* 'Wrap Translation': given an object containing translations OR a string, returns a translation object
|
|
|
|
*
|
|
|
|
* const json: any = {"en": "English", "nl": "Nederlands"};
|
|
|
|
* const translation = Translations.WT(new Translation(json));
|
|
|
|
* translation.textFor("en") // => "English"
|
|
|
|
* translation.textFor("nl") // => "Nederlands"
|
|
|
|
*/
|
2020-08-22 02:12:46 +02:00
|
|
|
public static WT(s: string | Translation): Translation {
|
2021-09-09 00:05:51 +02:00
|
|
|
if (s === undefined || s === null) {
|
2020-10-12 01:25:27 +02:00
|
|
|
return undefined;
|
|
|
|
}
|
2020-08-22 02:12:46 +02:00
|
|
|
if (typeof (s) === "string") {
|
2021-11-08 15:08:24 +01:00
|
|
|
return new Translation({'*': s});
|
2020-08-22 02:12:46 +02:00
|
|
|
}
|
2020-10-09 20:10:21 +02:00
|
|
|
if (s instanceof Translation) {
|
2021-10-25 21:50:38 +02:00
|
|
|
return s.Clone() /* MUST CLONE HERE! */;
|
2020-10-09 20:10:21 +02:00
|
|
|
}
|
2021-09-09 00:05:51 +02:00
|
|
|
console.error("Trying to Translation.WT, but got ", s)
|
2020-10-09 20:10:21 +02:00
|
|
|
throw "??? Not a valid translation"
|
2020-07-20 12:39:43 +02:00
|
|
|
}
|
2020-07-21 00:07:04 +02:00
|
|
|
|
2020-07-26 02:01:34 +02:00
|
|
|
public static CountTranslations() {
|
|
|
|
const queue: any = [Translations.t];
|
|
|
|
const tr: Translation[] = [];
|
|
|
|
while (queue.length > 0) {
|
|
|
|
const item = queue.pop();
|
|
|
|
if (item instanceof Translation || item.translations !== undefined) {
|
|
|
|
tr.push(item);
|
2020-07-31 17:38:03 +02:00
|
|
|
} else if (typeof (item) === "string") {
|
|
|
|
console.warn("Got single string in translationgs file: ", item);
|
2020-07-26 02:01:34 +02:00
|
|
|
} else {
|
|
|
|
for (const t in item) {
|
|
|
|
const x = item[t];
|
|
|
|
queue.push(x)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const langaugeCounts = {};
|
|
|
|
for (const translation of tr) {
|
|
|
|
for (const language in translation.translations) {
|
|
|
|
if (langaugeCounts[language] === undefined) {
|
|
|
|
langaugeCounts[language] = 1
|
|
|
|
} else {
|
|
|
|
langaugeCounts[language]++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (const language in langaugeCounts) {
|
|
|
|
console.log("Total translations in ", language, langaugeCounts[language], "/", tr.length)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2022-01-29 02:45:59 +01:00
|
|
|
static isProbablyATranslation(transl: any) {
|
|
|
|
if(typeof transl !== "object"){
|
|
|
|
return false;
|
|
|
|
}
|
2022-03-08 01:05:54 +01:00
|
|
|
if(Object.keys(transl).length == 0){
|
|
|
|
// No translations found; not a translation
|
|
|
|
return false
|
|
|
|
}
|
2022-01-29 02:45:59 +01:00
|
|
|
// is a weird key found?
|
2022-03-08 01:05:54 +01:00
|
|
|
if(Object.keys(transl).some(key => !this.knownLanguages.has(key))){
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
2022-01-29 02:45:59 +01:00
|
|
|
}
|
2020-09-15 18:44:58 +02:00
|
|
|
}
|