123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /* global interfaceConfig */
- import i18n from 'i18next';
- import XHR from 'i18next-xhr-backend';
- import { DEFAULT_LANG, languages } from './constants';
- import languagesR from '../../../../lang/languages.json';
- import mainR from '../../../../lang/main.json';
- import Browser from 'i18next-browser-languagedetector';
- import ConfigLanguageDetector from './ConfigLanguageDetector';
-
- /**
- * Default options to initialize i18next.
- *
- * @enum {string}
- */
- 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
- };
-
- /**
- * List of detectors to use in their order.
- *
- * @type {[*]}
- */
- const detectors = [ 'querystring', 'localStorage', 'configLanguageDetector' ];
-
- /**
- * Allow i18n to detect the system language from the browser.
- */
- if (interfaceConfig.LANG_DETECTION) {
- detectors.push('navigator');
- }
-
- /**
- * The language detectors.
- */
- const browser = new Browser(null, {
- order: detectors,
- lookupQuerystring: 'lang',
- lookupLocalStorage: 'language',
- caches: [ 'localStorage' ]
- });
-
- // adds a language detector that just checks the config
- browser.addDetector(ConfigLanguageDetector);
-
- i18n.use(XHR)
- .use(browser)
- .use({
- type: 'postProcessor',
- name: 'resolveAppName',
- process: (res, key) => i18n.t(key, { app: defaultOptions.app })
- })
- .init(defaultOptions);
-
- // adds default language which is preloaded from code
- i18n.addResourceBundle(DEFAULT_LANG, 'main', mainR, true, true);
- i18n.addResourceBundle(DEFAULT_LANG, 'languages', languagesR, true, true);
-
- export default i18n;
|