nuxt-i18n 后备忽略路由
nuxt-i18n fallback ignored routes
我有一个使用 nuxt-i18n 并忽略路由的多语言 Nuxt 应用程序。
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>
我已经更改了过滤器以删除丢失的 pages/languages,就像这样:
return this.$i18n.locales.filter(i => (i.code !== this.$i18n.locale) && (this.$nuxt.$route.path !== this.switchLocalePath(i.code)) )
可行,但我想要一个更好的解决方案。这是我的问题:如果路由被忽略,是否有一种简单的方法可以更改到语言主页(/,/en,/de)的路由?
我通过简单地包装一个额外的函数解决了这个问题:
<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
}
}
…
不太灵活,但对我有用。
我有一个使用 nuxt-i18n 并忽略路由的多语言 Nuxt 应用程序。
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>
我已经更改了过滤器以删除丢失的 pages/languages,就像这样:
return this.$i18n.locales.filter(i => (i.code !== this.$i18n.locale) && (this.$nuxt.$route.path !== this.switchLocalePath(i.code)) )
可行,但我想要一个更好的解决方案。这是我的问题:如果路由被忽略,是否有一种简单的方法可以更改到语言主页(/,/en,/de)的路由?
我通过简单地包装一个额外的函数解决了这个问题:
<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
}
}
…
不太灵活,但对我有用。