39 lines
1.1 KiB
JavaScript
39 lines
1.1 KiB
JavaScript
// Vue plugin to globally expose a '$t' method that calls common/i18n.t.
|
|
// Can be anywhere inside vue as 'this.$t' or '$t' in templates.
|
|
|
|
import moment from 'moment';
|
|
import i18n from '@/../../common/script/i18n';
|
|
|
|
function loadLocale (i18nData) {
|
|
// Load i18n strings
|
|
i18n.strings = i18nData.strings;
|
|
|
|
// Load Moment.js locale
|
|
const { language } = i18nData;
|
|
|
|
if (language && i18nData.momentLang && language.momentLangCode) {
|
|
// Make moment available under `window` so that the locale can be set
|
|
window.moment = moment;
|
|
|
|
// Execute the script and set the locale
|
|
const head = document.getElementsByTagName('head')[0];
|
|
const script = document.createElement('script');
|
|
script.type = 'text/javascript';
|
|
script.text = i18nData.momentLang;
|
|
head.appendChild(script);
|
|
moment.locale(language.momentLangCode);
|
|
}
|
|
}
|
|
|
|
export default {
|
|
install (Vue, { i18nData }) {
|
|
if (i18nData) loadLocale(i18nData);
|
|
|
|
Vue.prototype.$loadLocale = loadLocale;
|
|
|
|
Vue.prototype.$t = function translateString (...args) {
|
|
return i18n.t.apply(null, [...args]);
|
|
};
|
|
},
|
|
};
|