import Vue from 'vue' import VueI18n from 'vue-i18n' import * as en from 'locales/en.json' import axios from 'axios' // import * as fr from 'locales/fr.json' Vue.use(VueI18n) const messages = { en: { ...en.default } } export const i18n = new VueI18n({ locale: 'en', fallbackLocale: 'en', messages }) const loadedLanguages = ['en'] // our default language that is preloaded function setI18nLanguage (lang) { i18n.locale = lang // axios.defaults.headers.common['Accept-Language'] = lang // document.querySelector('html').setAttribute('lang', lang) return lang } export function loadLanguageAsync (lang) { // If the same language if (i18n.locale === lang) { return Promise.resolve(setI18nLanguage(lang)) } // If the language was already loaded if (loadedLanguages.includes(lang)) { return Promise.resolve(setI18nLanguage(lang)) } // If the language hasn't been loaded yet // return import(/* webpackChunkName: "lang-[request]" */ `sites/default/files/lang/${lang}.json`).then( return axios.get(`/sites/default/files/lang/${lang}.json`) .then(({ data }) => { console.log(`webpack import ${lang} messages`, data) i18n.setLocaleMessage(lang, data) loadedLanguages.push(lang) return setI18nLanguage(lang) }) }