first commit
This commit is contained in:
74
resources/frontend/core/i18n/index.js
Normal file
74
resources/frontend/core/i18n/index.js
Normal file
@@ -0,0 +1,74 @@
|
||||
import Vue from 'vue';
|
||||
import VueI18n from 'vue-i18n';
|
||||
import { getModuleList, ModuleLoaderInterceptor } from '@/moduleLoader';
|
||||
import merge from 'lodash/merge';
|
||||
import veeValidateEn from 'vee-validate/dist/locale/en.json';
|
||||
import veeValidateRu from 'vee-validate/dist/locale/ru.json';
|
||||
import moment from 'moment';
|
||||
import * as Sentry from '@sentry/vue';
|
||||
|
||||
export function getLangCookie() {
|
||||
const v = document.cookie.match('(^|;) ?lang=([^;]*)(;|$)');
|
||||
return v ? v[2] : null;
|
||||
}
|
||||
|
||||
// Set root domain cookie, ex: *.cattr.app
|
||||
export function setLangCookie(lang) {
|
||||
const rootDomain = location.hostname.split('.').reverse().splice(0, 2).reverse().join('.');
|
||||
document.cookie = 'lang=' + lang + '; domain=' + rootDomain;
|
||||
}
|
||||
|
||||
// Get the browser language
|
||||
export function getUserLang() {
|
||||
return typeof navigator.language !== 'undefined' && navigator.language.length
|
||||
? navigator.language.substring(0, 2).toLowerCase()
|
||||
: 'en';
|
||||
}
|
||||
|
||||
Vue.use(VueI18n);
|
||||
|
||||
let messages = {
|
||||
en: require('./locales/en'),
|
||||
ru: require('./locales/ru'),
|
||||
};
|
||||
|
||||
let pluralizationRules = {};
|
||||
|
||||
ModuleLoaderInterceptor.on('loaded', () => {
|
||||
const modules = Object.values(getModuleList()).map(i => {
|
||||
return i.moduleInstance;
|
||||
});
|
||||
|
||||
modules.forEach(m => {
|
||||
const moduleMessages = m.getLocalizationData();
|
||||
merge(messages, moduleMessages);
|
||||
merge(pluralizationRules, m.getPluralizationRules());
|
||||
});
|
||||
});
|
||||
|
||||
merge(messages, {
|
||||
en: {
|
||||
validation: veeValidateEn.messages,
|
||||
},
|
||||
ru: {
|
||||
validation: veeValidateRu.messages,
|
||||
},
|
||||
});
|
||||
|
||||
merge(pluralizationRules, require('./pluralizationRules'));
|
||||
|
||||
const locale = getLangCookie() || getUserLang();
|
||||
|
||||
Sentry.setTag('locale', locale);
|
||||
|
||||
moment.locale(locale);
|
||||
|
||||
const i18n = new VueI18n({
|
||||
locale: locale,
|
||||
fallbackLocale: 'en',
|
||||
silentFallbackWarn: true,
|
||||
messages,
|
||||
pluralizationRules,
|
||||
});
|
||||
|
||||
export default i18n;
|
||||
Reference in New Issue
Block a user