mapcomplete/UI/i18n/Translations.ts

90 lines
2.8 KiB
TypeScript
Raw Normal View History

2020-07-21 00:07:04 +02:00
import {FixedUiElement} from "../Base/FixedUiElement";
2020-11-06 01:58:26 +01:00
import AllTranslationAssets from "../../AllTranslationAssets";
import {Translation} from "./Translation";
2021-06-10 01:36:20 +02:00
import BaseUIElement from "../BaseUIElement";
2020-07-20 12:39:43 +02:00
export default class Translations {
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"
}
2020-11-06 01:58:26 +01:00
static t = AllTranslationAssets.t;
2021-06-10 01:36:20 +02:00
public static W(s: string | BaseUIElement): BaseUIElement {
if (typeof (s) === "string") {
return new FixedUiElement(s);
2020-07-20 12:39:43 +02:00
}
return s;
}
2020-10-27 01:01:34 +01:00
2021-03-13 19:07:38 +01:00
static T(t: string | any, context = undefined): Translation {
2020-10-27 01:01:34 +01:00
if(t === undefined){
return undefined;
}
if(typeof t === "string"){
2021-03-13 19:07:38 +01:00
return new Translation({"*":t}, context);
2020-10-27 01:01:34 +01:00
}
if(t.render !== undefined){
const msg = "Creating a translation, but this object contains a 'render'-field. Use the translation directly"
console.error(msg, t);
throw msg
}
2021-03-13 19:07:38 +01:00
return new Translation(t, context);
2020-10-27 01:01:34 +01:00
}
2020-10-14 12:15:09 +02:00
private static wtcache = {}
public static WT(s: string | Translation): Translation {
2020-10-12 01:25:27 +02:00
if(s === undefined){
return undefined;
}
if (typeof (s) === "string") {
2020-10-14 12:15:09 +02:00
if(Translations.wtcache[s]){
return Translations.wtcache[s];
}
const tr = new Translation({en: s});
Translations.wtcache[s]= tr;
return tr;
}
if (s instanceof Translation) {
return s;
}
2020-10-10 14:09:12 +02:00
console.error("Trying to Translation.WT, but got ",s)
throw "??? Not a valid translation"
2020-07-20 12:39:43 +02:00
}
2020-07-21 00:07:04 +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);
} 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)
}
}
2020-09-15 18:44:58 +02:00
}