Перевести пути маршрута vuejs - PullRequest
0 голосов
/ 28 декабря 2018

У меня получилось прекрасное представление о переводе путей маршрутов, которое уже не кажется таким умным :), как только я столкнулся с проблемой.Я надеюсь, что вы, ребята, увидите / найдете решение.

Это мой файл rout.js, в котором определены маршруты

export default [
    {
        path: '/:lang',
        component: {
            template: '<router-view></router-view>'
        },
        children: [
            {
                path: '',
                name: 'Home',
                component: load('Home')
            },
            {
                path: translatePath('contact'),
                name: 'Contact',
                component: load('Contact')
            },
            {
                path: translatePath('cookiePolicy'),
                name: 'CookiePolicy',
                component: load('CookiePolicy')
            },
        ]
    },
]

// and my simple function for translating paths
function translatePath(path) {
    let lang = Cookie.get('locale');

    let pathTranslations = {
        en: {
            contact: 'contact',
            cookiePolicy: 'cookie-policy',
        },
        sl: {
            contact: 'kontakt',
            cookiePolicy: 'piskotki',
        }
    };

    return pathTranslations[lang][path];
}

И это моя функция изменения языка в моем компоненте

setLocale(locale) {
    let selectedLanguage = locale.toLowerCase();
    this.$my.locale.setLocale(selectedLanguage); // update cookie locale
    console.log(this.$route.name);
    this.$router.replace({ name: this.$route.name, params: { lang: selectedLanguage } });
    location.reload();
},

Проблема в следующем.Когда пользователь выполняет функцию смены языка, я успешно изменяю параметр lang, но this.$route.name остается прежним на старом языке.Есть ли способ «перезагрузить» маршруты, так что будут новые маршруты маршрутов, которые будут включать надлежащий язык?

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать, и я будупредоставлять.Спасибо!

1 Ответ

0 голосов
/ 31 декабря 2018

Проверьте этот базовый пример, вы можете увидеть путь, который меняется в зависимости от выбранного языка.Это может быть улучшено с помощью некоторых плагинов перевода, таких как vue-i18n, а также может быть превращено в миксин для большей возможности повторного использования.

const Home = {
  template: '<div>Home</div>'
}
const Contact = {
  template: '<div>CONTACT ==> {{$route.path}}</div>'
}
const Cookie = {
  template: '<div>COOKIE ==> {{$route.path}}</div>'
}

const router = new VueRouter({
  routes: [{
      name: 'home',
      path: '/',
      component: Home
    },
    {
      name: 'contact',
      path: '/:pathTranslation',
      component: Contact
    },
    {
      name: 'cookies',
      path: '/:pathTranslation',
      component: Cookie
    }
  ]
})

new Vue({
  router,
  el: '#app',
  data: {
    lang: 'IT',
    translations: {
      IT: {
        contact: 'Contatti',
        cookies: 'Cookies IT',
      },
      EN: {
        contact: 'Contacts',
        cookies: 'Cookies EN',
      }
    }
  },
  watch: {
    lang: function(newLang) {
      this.goto(this.$route.name, newLang);
    }
  },
  methods: {
    goto(path, lang=null) {
      this.$router.replace({
        name: path,
        params: {
          pathTranslation: this.translations[lang || this.lang][path]
        }
      });
    }
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>
<script src="https://npmcdn.com/vue-router/dist/vue-router.js"></script>

<div id="app">
  <select v-model="lang">
    <option value="IT">IT</option>
    <option value="EN">EN</option>
  </select>
  <button @click="goto('contact')">To contact</button>
  <button @click="goto('cookies')">To cookies</button>
  <router-view></router-view>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...