123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- /* global availableLangs */
- class Messages {
- constructor(json) {
- this.json = json;
- }
- getMessage(m, ...rest) {
- if (Object.prototype.hasOwnProperty.call(this.json, m)) {
- let message = this.json[m].message;
- return message.replace(/\$(\d+)/g, (...args) => {
- return rest[Number(args[1]) - 1];
- });
- }
- }
- }
- var defaultLang = "en_US";
- var getLang = function() {
- let lang = navigator.language || defaultLang;
- lang = lang.replace(/-/g, '_');
- //prioritize override language
- var url_string = window.location.href; //window.location.href
- var url = new URL(url_string);
- var override_lang = url.searchParams.get("lang");
- if (override_lang != null) {
- lang = override_lang;
- }
- if (Object.prototype.hasOwnProperty.call(availableLangs, lang)) {
- return lang;
- }
- lang = lang.split('_')[0];
- if (Object.prototype.hasOwnProperty.call(availableLangs, lang)) {
- return lang;
- }
- return defaultLang;
- }
- var fill = function(n, func) {
- switch(n.nodeType) {
- case 1: // Node.ELEMENT_NODE
- {
- const m = /^__MSG_([^_]*)__$/.exec(n.dataset.msgid);
- if (m) {
- var val = func(m[1]);
- if (val != undefined) {
- n.innerHTML = val
- }
- }
- n.childNodes.forEach(c => fill(c, func));
- break;
- }
- }
- }
- fetch(`./_locales/${getLang()}/messages.json`)
- .then((res) => {
- if (!res.ok) { return; }
- return res.json();
- })
- .then((json) => {
- var language = document.getElementById('language-switcher');
- var lang = `${getLang()}`
- language.innerText = availableLangs[lang].name + ' (' + lang + ')';
- var messages = new Messages(json);
- fill(document.body, (m) => {
- return messages.getMessage(m);
- });
- });
- // Populate language switcher list
- for (var lang in availableLangs) {
- var languageList = document.getElementById('supported-languages');
- var link = document.createElement('a');
- link.setAttribute('href', '?lang='+lang);
- link.setAttribute('class', "dropdown-item");
- link.innerText = availableLangs[lang].name + ' (' + lang + ')';
- languageList.lastChild.after(link);
- }
|