'use strict'; // axios import axios from 'axios'; // i18n import VueI18n from 'vue-i18n'; Vue.use(VueI18n); // Moments import moment from 'moment'; Vue.filter('formatDate', function(value) { if (value) { return moment(String(value)).format('LL'); } }); // Markdown window.marked = require('marked'); // i18n import messages from '../../public/js/langs/en.json'; import pluralization from './pluralization.js'; export default { i18n: new VueI18n({ locale: 'en', // set locale fallbackLocale: 'en', messages: {'en': messages}, pluralizationRules: pluralization, }), loadedLanguages : ['en'], // our default language that is preloaded _setI18nLanguage (lang) { this.i18n.locale = lang; axios.defaults.headers.common['Accept-Language'] = lang; document.querySelector('html').setAttribute('lang', lang); }, _loadLanguageAsync (lang) { if (this.i18n.locale !== lang) { if (!this.loadedLanguages.includes(lang)) { return axios.get(`js/langs/${lang}.json`).then(msgs => { this.i18n.setLocaleMessage(lang, msgs.data); this.loadedLanguages.push(lang); return this.i18n; }); } } return Promise.resolve(this.i18n); }, loadLanguage: function(lang, set) { return this._loadLanguageAsync(lang).then(i18n => { if (set) { this._setI18nLanguage(lang); } moment.locale(lang === 'zh' ? 'zh-cn' : lang); return i18n; }); } };