| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | import i18next from 'i18next'import Backend from 'i18next-chained-backend'import LocalStorageBackend from 'i18next-localstorage-backend'import i18nextXHR from 'i18next-xhr-backend'import VueI18Next from '@panter/vue-i18next'import _ from 'lodash'/* global siteConfig, graphQL */import localeQuery from 'gql/common/common-localization-query-translations.gql'export default {  VueI18Next,  init() {    i18next      .use(Backend)      .init({        backend: {          backends: [            LocalStorageBackend,            i18nextXHR          ],          backendOptions: [            {              expirationTime: 1000 * 60 * 60 * 24 // 24h            },            {              loadPath: '{{lng}}/{{ns}}',              parse: (data) => data,              ajax: (url, opts, cb, data) => {                let langParams = url.split('/')                graphQL.query({                  query: localeQuery,                  variables: {                    locale: langParams[0],                    namespace: langParams[1]                  }                }).then(resp => {                  let ns = {}                  if (_.get(resp, 'data.localization.translations', []).length > 0) {                    resp.data.localization.translations.forEach(entry => {                      _.set(ns, entry.key, entry.value)                    })                  }                  return cb(ns, {status: '200'})                }).catch(err => {                  console.error(err)                  return cb(null, {status: '404'})                })              }            }          ]        },        defaultNS: 'common',        lng: siteConfig.lang,        load: 'currentOnly',        lowerCaseLng: true,        fallbackLng: siteConfig.lang,        ns: ['common', 'auth']      })    return new VueI18Next(i18next)  }}
 |