You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wiki/client/modules/localization.js

66 lines
2.0 KiB

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 ns = {}
return cb(ns, {status: '200'})
// 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)
}
}