sbis3-node-ws
Version:
Модуль позволяет использовать ядро интерфейсного фреймворка sbis3-ws(`core.js`) и модуль работы с данными (`Source.js`) в приложении на nodejs.
67 lines (58 loc) • 3.25 kB
JavaScript
(function() {
"use strict";
var global = (function() {return this || (0,eval)('this');}()),
define = global.define || (global.requirejs && global.requirejs.define),
// На препроцессоре грузим все языки
loadAllLangs = typeof document == 'undefined';
define("i18n", ['json', 'css'], function() {
return {
load: function(name, require, onLoad/*, conf*/) {
var names = name.split(';'),
curLang = $ws.single.i18n.getLang(),
langToLoad = loadAllLangs ? Object.keys($ws._const.availableLanguage) : [curLang],
pdef = new $ws.proto.ParallelDeferred();
// На клиенте, если язык неизвестен, просто вернем rk без загрузки каких-либо словарей
if (loadAllLangs || $ws.single.i18n.hasLang(curLang)) {
// На препроцессоре будем загружать нужный словарь для всех языков
// На клиенте - лишь нужный
$ws.helpers.forEach(langToLoad, function(curLang) {
$ws.single.i18n.setLang(curLang);
$ws.helpers.forEach(names, function(name) {
if ($ws.single.i18n.hasDict(name)) {
return;
}
(function(dictPath, dictName, curLang) {
var arr = [],
def = new $ws.proto.Deferred();
if ($ws._const.dictionary[dictName + '.' + curLang + '.json']) {
arr.push('json!' + dictPath);
}
if (!loadAllLangs) {
// Грузим только те css, о которых знал Джин при конвертации
if ($ws._const.dictionary[dictName + '.' + curLang + '.css']) {
arr.push('css!' + dictPath.replace('.json', '.css'));
}
var curCountry = curLang.substr(3, 2);
if ($ws._const.dictionary[dictName + '.' + curCountry + '.css']) {
arr.push('css!' + dictPath.replace(new RegExp(curLang, 'g'), curCountry).replace('.json', '.css'));
}
}
// Грузим только те словари, о которых знал Джин при конвертации
if (arr.length) {
pdef.push(def);
require(arr, function(json) {
$ws.single.i18n.setDict(json, dictName, curLang);
def.callback();
});
}
})($ws.helpers.requirejsPathResolver(name, 'i18n'), name, curLang);
});
});
}
pdef.done().getResult().addBoth(function() {
onLoad($ws.single.i18n.rk.bind($ws.single.i18n));
});
}
}
});
}());