Updates i18next and bundles default translations.

This commit is contained in:
damencho 2016-10-26 11:39:51 -05:00 committed by hristoterezov
parent fab93a170e
commit 1f200b63a7
3 changed files with 35 additions and 49 deletions

View File

@ -105,6 +105,9 @@ export default {
APP.translation.translateElement(selectEl); APP.translation.translateElement(selectEl);
APP.translation.addLanguageChangedListener(
lng => selectInput[0].dataset.i18n = `languages:${lng}`);
UIUtil.showElement(wrapperId); UIUtil.showElement(wrapperId);
} }
// DEVICES LIST // DEVICES LIST

View File

@ -1,15 +1,15 @@
/* global $, require, config, interfaceConfig */ /* global $, require, config, interfaceConfig */
var i18n = require("i18next-client"); import i18n from 'i18next';
import XHR from 'i18next-xhr-backend';
import jqueryI18next from 'jquery-i18next';
var languages = require("../../service/translation/languages"); var languages = require("../../service/translation/languages");
var languagesR = require("json!../../lang/languages.json");
var mainR = require("json!../../lang/main.json");
var DEFAULT_LANG = languages.EN; var DEFAULT_LANG = languages.EN;
i18n.addPostProcessor(
"resolveAppName",
value => value.replace("__app__", interfaceConfig.APP_NAME));
var defaultOptions = { var defaultOptions = {
detectLngQS: "lang", compatibilityAPI: 'v1',
useCookie: false, compatibilityJSON: 'v1',
fallbackLng: DEFAULT_LANG, fallbackLng: DEFAULT_LANG,
load: "unspecific", load: "unspecific",
resGetPath: 'lang/__ns__-__lng__.json', resGetPath: 'lang/__ns__-__lng__.json',
@ -21,48 +21,11 @@ var defaultOptions = {
fallbackOnNull: true, fallbackOnNull: true,
fallbackOnEmpty: true, fallbackOnEmpty: true,
useDataAttrOptions: true, useDataAttrOptions: true,
app: interfaceConfig.APP_NAME, app: interfaceConfig.APP_NAME
getAsync: true,
defaultValueFromContent: false,
customLoad: function(lng, ns, options, done) {
var resPath = "lang/__ns__-__lng__.json";
if(lng === languages.EN)
resPath = "lang/__ns__.json";
var url = i18n.functions.applyReplacement(resPath,
{ lng: lng, ns: ns });
i18n.functions.ajax({
url: url,
success: function(data) {
i18n.functions.log('loaded: ' + url);
done(null, data);
},
error : function(xhr, status, error) {
if ((status && status == 200) ||
(xhr && xhr.status && xhr.status == 200)) {
// file loaded but invalid json, stop waste time !
i18n.functions.error('There is a typo in: ' + url);
} else if ((status && status == 404) ||
(xhr && xhr.status && xhr.status == 404)) {
i18n.functions.log('Does not exist: ' + url);
} else {
var theStatus = status ? status :
((xhr && xhr.status) ? xhr.status : null);
i18n.functions.log(theStatus + ' when loading ' + url);
}
done(error, {});
},
dataType: "json",
async : options.getAsync
});
}
// options for caching
// useLocalStorage: true,
// localStorageExpirationTime: 86400000 // in ms, default 1 week
}; };
function initCompleted() { function initCompleted() {
$("[data-i18n]").i18n(); $("[data-i18n]").localize();
} }
function getLangFromQuery() { function getLangFromQuery() {
@ -98,7 +61,21 @@ module.exports = {
options.lng = lang; options.lng = lang;
} }
i18n.init(options, initCompleted); i18n.use(XHR)
.use({
type: 'postProcessor',
name: "resolveAppName",
process:
function (res, key) {
return i18n.t(key, {app: interfaceConfig.APP_NAME});
}
})
.init(options, initCompleted);
// adds default language which is preloaded from code
i18n.addResourceBundle(DEFAULT_LANG, 'main', mainR, true, true);
i18n.addResourceBundle(
DEFAULT_LANG, 'languages', languagesR, true, true);
jqueryI18next.init(i18n, $, {useOptionsAttr: true});
}, },
setLanguage: function (lang) { setLanguage: function (lang) {
if(!lang) if(!lang)
@ -110,7 +87,7 @@ module.exports = {
}, },
translateElement: function (selector, options) { translateElement: function (selector, options) {
// i18next expects undefined if options are missing, check if its null // i18next expects undefined if options are missing, check if its null
selector.i18n( selector.localize(
options === null ? undefined : options); options === null ? undefined : options);
}, },
generateTranslationHTML: function (key, options) { generateTranslationHTML: function (key, options) {
@ -124,5 +101,8 @@ module.exports = {
str += "</span>"; str += "</span>";
return str; return str;
},
addLanguageChangedListener: function(listener) {
i18n.on('languageChanged', listener);
} }
}; };

View File

@ -21,7 +21,10 @@
"autosize": "^1.18.13", "autosize": "^1.18.13",
"bootstrap": "3.1.1", "bootstrap": "3.1.1",
"events": "*", "events": "*",
"i18next-client": "1.7.7", "i18next": "3.4.4",
"i18next-xhr-backend": "1.1.0",
"jquery-i18next": "1.1.0",
"json-loader": "0.5.4",
"jQuery-Impromptu": "trentrichardson/jQuery-Impromptu#v6.0.0", "jQuery-Impromptu": "trentrichardson/jQuery-Impromptu#v6.0.0",
"jquery": "~2.1.1", "jquery": "~2.1.1",
"jquery-contextmenu": "*", "jquery-contextmenu": "*",