61 lines
1.6 KiB
JavaScript
61 lines
1.6 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) {
|
||
|
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)
|
||
|
return res;
|
||
|
i++;
|
||
|
token = tokens[i];
|
||
|
}
|
||
|
}
|
||
|
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;
|
||
|
}
|