hedera-web/js/vn/locale.js

102 lines
2.0 KiB
JavaScript
Raw Normal View History

2018-02-05 12:58:17 +00:00
var yaml = require('js-yaml');
vnLocaleStrings = {};
2016-09-26 09:28:47 +00:00
/**
* Class to manage the internationalization.
2022-05-26 06:08:31 +00:00
*/
2016-09-26 09:28:47 +00:00
module.exports =
{
language: null
,defaultLang: 'en'
2022-11-11 19:31:17 +00:00
,init: function() {
if (this.language)
return;
var language = this.defaultLang;
var languages = navigator.languages;
if (languages && languages.length > 0)
language = languages[0];
else if (navigator.language)
language = navigator.language;
2022-11-11 19:31:17 +00:00
this.language = language.substr(0, 2);
}
2022-11-11 19:31:17 +00:00
,load: function(path, callback) {
this.init();
var data = {
path: path,
callback: callback,
defOk: false,
orgOk: this.defaultLang === this.language
};
2022-11-11 19:31:17 +00:00
data.def = this.createRequest(data, true, this.defaultLang);
if (!data.orgOk)
2022-11-11 19:31:17 +00:00
data.org = this.createRequest(data, false, this.language);
}
2022-11-11 19:31:17 +00:00
,createRequest: function(data, isDef, lang) {
var langFile = data.path +'/locale/'+ lang +'.yml'+ Vn.getVersion();
2022-11-11 19:31:17 +00:00
var request = new XMLHttpRequest();
request.open('get', langFile, true);
request.onreadystatechange =
2022-11-11 19:31:17 +00:00
this.onRequestReady.bind(this, request, data, isDef);
request.send();
return request;
}
2022-11-11 19:31:17 +00:00
,onRequestReady: function(request, data, isDef) {
if (request.readyState != 4)
return;
2022-11-11 19:31:17 +00:00
if (isDef) {
this.loadFromRequest(request);
data.defOk = true;
2022-11-11 19:31:17 +00:00
} else
data.orgOk = true;
2022-11-11 19:31:17 +00:00
if (data.orgOk && data.defOk) {
if (data.org != null)
2022-11-11 19:31:17 +00:00
this.loadFromRequest(data.org)
if (data.callback)
2022-11-11 19:31:17 +00:00
data.callback();
}
}
2022-11-11 19:31:17 +00:00
,loadFromRequest: function(request) {
if (request.status !== 200)
return false;
try {
2022-11-11 19:31:17 +00:00
this.add(yaml.safeLoad(request.responseText));
return true;
2022-11-11 19:31:17 +00:00
} catch (e) {
console.error(e);
}
return false
}
2022-11-11 19:31:17 +00:00
,loadScript: function(path, callback) {
this.init();
Vn.includeJs(path +'/locale/'+ this.language, callback);
}
2022-11-11 19:31:17 +00:00
,add: function(translations) {
2016-09-27 06:18:20 +00:00
for (var str in translations)
vnLocaleStrings[str] = translations[str];
}
}
2022-11-11 19:31:17 +00:00
window._ = function(stringId) {
2016-09-26 09:28:47 +00:00
var string = vnLocaleStrings[stringId];
return string ? string : stringId;
}