резервные маршруты nuxt-i18n игнорируются - PullRequest
0 голосов
/ 18 февраля 2020

У меня многоязыковое приложение Nuxt, использующее nuxt-i18n с игнорируемыми маршрутами.

nuxt.config. js

…
seo: true,
parsePages: false,
strategy: 'prefix_except_default',
pages: {
  'cats': {
    en: '/cats',
    de: '/katzen',
    fr: false
  }
}
…

Итак, страница не доступен на французском языке.

Мой переключатель языка выглядит так - довольно просто:

LanguageSwitch. vue

computed: {
  availableLocales () {
    return this.$i18n.locales.filter(i => i.code !== this.$i18n.locale)
  }
}
<ul class="language-switch__list">
  <li class="language-switch__item" v-for="locale in availableLocales">
    <NuxtLink
     class="language-switch__link"
     rel="alternate" :key="locale.code"
     :to="switchLocalePath(locale.code)"
     :hreflang="locale.code" :lang="locale.code"
     active-class="none"
     exact>
     {{locale.name}}
    </NuxtLink>
  </li>
</ul>

Я изменил фильтр, чтобы удалить отсутствующие страницы / языки, такие как:

return this.$i18n.locales.filter(i => (i.code !== this.$i18n.locale) && (this.$nuxt.$route.path !== this.switchLocalePath(i.code)) )

Это работает, но я бы хотел лучшее решение. Вот мой вопрос: есть ли простой способ изменить маршруты на домашнюю страницу языка (/, / en, / de), если маршрут игнорируется?

1 Ответ

0 голосов
/ 21 февраля 2020

Я решил проблему, просто добавив в нее дополнительную функцию:

<nav id="language-switch" v-if="isOpen" class="language-switch__nav arrow arrow--top">
  <ul class="language-switch__list">
    <li class="language-switch__item" v-for="locale in availableLocales">
      <NuxtLink class="language-switch__link" rel="alternate" :key="locale.code" :to="switchLocalePathFallback(locale.code)" :hreflang="locale.code" :lang="locale.code" active-class="none" exact>{{locale.name}}</NuxtLink>
    </li>
  </ul>
</nav>
…
computed: {
  availableLocales () {
    return this.$i18n.locales.filter(i => (i.code !== this.$i18n.locale) )
  }
},
methods: {
  switchLocalePathFallback(code) {
    let langPath = this.switchLocalePath(code),
        path = langPath
    if(langPath == this.$nuxt.$route.path ) {
      path = this.$i18n.defaultLocale != code ? '/'+code : '/'
    }
    return path
  }
}
…

Не очень гибко, но у меня это работает.

...