Установка языка (i18n) как параметра маршрута (ex.com/en/home) Quasar framework (Vue JS)
Есть front где реализована мультиязычность (4-е языка). Использована библиотека i18n, смена языка происходит по нажатию на кнопку, запуск сайта осуществлялся с использованием locale: navigator.language.split('-')[0], с проверкой и выводом английского по дефолту (если нужного языка нет). Стоит задача по добавлению названия языка в маршрут (/en/home or /ru/home). Прошу вашей помощи, как это правильно реализовать, чтобы смена языка происходила вместе с изменением url. Взял за основу https://medium.com/hypefactors/add-i18n-and-manage-translations-of-a-vue-js-powered-website-73b4511ca69c и https://medium.com/i18n-and-l10n-resources-for-developers/the-ultimate-guide-to-vue-localization-with-vue-i18n-bf98b1d40c65, но так как у меня проект в оболочке "Quasar framework" не могу отловить ошибки, крашится роутинг между страницами. В Quasar есть два компонента отвечающих за роутинг: router.js и index.js + ко всему в моём проекте в index.js я использую Router.beforeEach (где стоит проверка токена авторизации, чтобы разграничить маршрутизацию авторизированных и не авторизированных пользователей). Что касается добавления языка в адрес использовал router.js Вот пример моего кода:
const { locale } = i18n;
const routes = [{
path: "/",
redirect: locale
},
{
path: '/:locale',
component: () => import('layouts/MainLayout.vue'),
beforeEnter(to, from, next){
const lang = to.params.lang
console.log(to);
console.log(from);
console.log(next);
if(!['enUS', 'ru', 'ua', 'ge'].includes(lang)) return next('en-us');
if(i18n.locale !== lang){
i18n.locale = lang
}
return next()
},
children: [
{
path: '',
component: () => import('pages/Preload.vue'),
meta: {
requiresAuth: false
}
},
{
path: '/auth_phone',
component: () => import('pages/AuthPhone.vue'),
meta: {
requiresAuth: false} ...
не работает и так тоже не вышло:
router.beforeEach((to, from, next) => {
if (to.params.locale === from.params.locale) {
next('en')
return
}
const { locale } = to.params
next('ru')
})