| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | const _ = require('lodash')const dotize = require('dotize')const i18nBackend = require('i18next-node-fs-backend')const i18next = require('i18next')const path = require('path')const Promise = require('bluebird')/* global wiki */module.exports = {  engine: null,  namespaces: ['common', 'admin', 'auth', 'errors', 'git'],  init() {    this.engine = i18next    this.engine.use(i18nBackend).init({      load: 'languageOnly',      ns: this.namespaces,      defaultNS: 'common',      saveMissing: false,      preload: [wiki.config.site.lang],      lng: wiki.config.site.lang,      fallbackLng: 'en',      backend: {        loadPath: path.join(wiki.SERVERPATH, 'locales/{{lng}}/{{ns}}.json')      }    })    return this  },  getByNamespace(locale, namespace) {    if (this.engine.hasResourceBundle(locale, namespace)) {      let data = this.engine.getResourceBundle(locale, namespace)      return _.map(dotize.convert(data), (value, key) => {        return {          key,          value        }      })    } else {      throw new Error('Invalid locale or namespace')    }  },  loadLocale(locale) {    return Promise.fromCallback(cb => {      return this.engine.loadLanguages(locale, cb)    })  },  setCurrentLocale(locale) {    return Promise.fromCallback(cb => {      return this.engine.changeLanguage(locale, cb)    })  }}
 |