70 lines
1.8 KiB
JavaScript
70 lines
1.8 KiB
JavaScript
import * as en_GB from '@cf/lang/en_GB.json';
|
|
|
|
/**
|
|
* @param {string} lang IETH language tag (i.e. en_GB)
|
|
* @returns Map<string, string | string[]>
|
|
*/
|
|
export default function init(lang) {
|
|
let i18n = new Object();
|
|
let language;
|
|
|
|
// TODO: dynamic imports seem to fail here; it can't find the file.
|
|
// try {
|
|
// language = import(`../lang/${lang}.json`);
|
|
// } catch (error) {
|
|
// throw error;
|
|
// }
|
|
|
|
language = en_GB;
|
|
|
|
i18n.lang = language;
|
|
i18n.lang_code = lang;
|
|
i18n.string = function(/* @type string */ key, ...args) {
|
|
const tokens = key.split('.');
|
|
|
|
let i = 0;
|
|
let token = tokens[i];
|
|
let res = this.lang;
|
|
while (true) {
|
|
res = res[token];
|
|
if (res === undefined) {
|
|
console.warn(`${key} not found for language ${this.lang_code}`);
|
|
return key;
|
|
}
|
|
if (typeof res === 'string' || res instanceof String)
|
|
break;
|
|
i++;
|
|
token = tokens[i];
|
|
}
|
|
|
|
i = 1;
|
|
while (true) {
|
|
if (args.length < i || !res.includes('%' + i))
|
|
break;
|
|
res = res.replaceAll('%' + i, args[i - 1]);
|
|
i++;
|
|
}
|
|
|
|
return res;
|
|
}
|
|
i18n.stringArray = function(/* @type string */ key) {
|
|
const tokens = key.split('.');
|
|
|
|
let i = 0;
|
|
let token = tokens[i];
|
|
let res = this.lang;
|
|
while (true) {
|
|
res = res[token];
|
|
if (res === undefined) {
|
|
console.warn(`${key} not found for language ${this.lang_code}`);
|
|
return key;
|
|
}
|
|
if (Array.isArray(res))
|
|
return res;
|
|
i++;
|
|
token = tokens[i];
|
|
}
|
|
}
|
|
|
|
return i18n;
|
|
}
|