hedera-web/js/vn/locale.js

114 lines
2.0 KiB
JavaScript

var yaml = require('js-yaml');
vnLocaleStrings = {};
/**
* Class to manage the internationalization.
**/
module.exports =
{
language: null
,defaultLang: 'en'
,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;
this.language = language.substr (0, 2);
}
,load: function (path, callback)
{
this.init ();
var data = {
path: path,
callback: callback,
defOk: false,
orgOk: this.defaultLang === this.language
};
data.def = this.createRequest (data, true, this.defaultLang);
if (!data.orgOk)
data.org = this.createRequest (data, false, this.language);
}
,createRequest: function (data, isDef, lang)
{
var langFile = data.path +'/locale/'+ lang +'.yml'+ Vn.getVersion ();
var request = new XMLHttpRequest ();
request.open ('get', langFile, true);
request.onreadystatechange =
this.onRequestReady.bind (this, request, data, isDef);
request.send ();
return request;
}
,onRequestReady: function (request, data, isDef)
{
if (request.readyState != 4)
return;
if (isDef)
{
this.loadFromRequest (request);
data.defOk = true;
}
else
data.orgOk = true;
if (data.orgOk && data.defOk)
{
if (data.org != null)
this.loadFromRequest (data.org)
if (data.callback)
data.callback ();
}
}
,loadFromRequest: function (request)
{
if (request.status !== 200)
return false;
try {
this.add (yaml.safeLoad (request.responseText));
return true;
}
catch (e) {
console.error (e);
}
return false
}
,loadScript: function (path, callback)
{
this.init ();
Vn.includeJs (path +'/locale/'+ this.language, callback);
}
,add: function (translations)
{
for (var str in translations)
vnLocaleStrings[str] = translations[str];
}
}
window._ = function (stringId)
{
var string = vnLocaleStrings[stringId];
return string ? string : stringId;
}