/* global $, require, config, interfaceConfig */ import i18n from 'i18next'; import XHR from 'i18next-xhr-backend'; import jqueryI18next from 'jquery-i18next'; import languagesR from "../../lang/languages.json"; import mainR from "../../lang/main.json"; import languages from "../../service/translation/languages"; const DEFAULT_LANG = languages.EN; const defaultOptions = { compatibilityAPI: 'v1', compatibilityJSON: 'v1', fallbackLng: DEFAULT_LANG, load: "unspecific", resGetPath: 'lang/__ns__-__lng__.json', ns: { namespaces: ['main', 'languages'], defaultNs: 'main' }, lngWhitelist : languages.getLanguages(), fallbackOnNull: true, fallbackOnEmpty: true, useDataAttrOptions: true, app: interfaceConfig.APP_NAME }; function initCompleted() { $("[data-i18n]").localize(); } function getLangFromQuery() { var query = window.location.search.substring(1); var vars = query.split("&"); for (var i=0;i { return i18n.t(key, {app: options.app}); } }) .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 (lang) { if(!lang) lang = DEFAULT_LANG; i18n.setLng(lang, defaultOptions, initCompleted); } getCurrentLanguage () { return i18n.lng(); } translateElement (selector, options) { // i18next expects undefined if options are missing, check if its null selector.localize( options === null ? undefined : options); } generateTranslationHTML (key, options) { let optAttr = options ? ` data-i18n-options='${JSON.stringify(options)}'` : ""; let text = i18n.t(key, options === null ? undefined : options); return `${text}`; } addLanguageChangedListener(listener) { i18n.on('languageChanged', listener); } } export default new Translation();