123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- import i18next from 'i18next'
- import i18nextXHR from 'i18next-xhr-backend'
- import i18nextCache from 'i18next-localstorage-cache'
- import VueI18Next from '@panter/vue-i18next'
- import _ from 'lodash'
- /* global siteConfig, graphQL */
- import localeQuery from 'gql/common/common-locale-query.gql'
- export default {
- VueI18Next,
- init() {
- i18next
- .use(i18nextXHR)
- .use(i18nextCache)
- .init({
- backend: {
- 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 (resp.data.translations.length > 0) {
- resp.data.translations.forEach(entry => {
- _.set(ns, entry.key, entry.value)
- })
- }
- return cb(ns, {status: '200'})
- }).catch(err => {
- console.error(err)
- return cb(null, {status: '404'})
- })
- }
- },
- cache: {
- enabled: true,
- expiration: 60 * 60 * 1000
- },
- defaultNS: 'common',
- lng: siteConfig.lang,
- fallbackLng: siteConfig.lang,
- ns: ['common', 'auth']
- })
- return new VueI18Next(i18next)
- }
- }
|