我正试图为我的Nuxt前端设置本土化。每次我切换到英语,然后移动到我的网站的另一个子页,它确实重置为德文。
这是我的LanguageSelector
<template>
<div class="lang-dropdown">
<select v-model="$i18n.locale">
<option
v-for="lang in $i18n.locales"
:key="lang.code"
:value="lang.code"
onchange="changeLocale"
>
{{ lang.name }}
</option>
</select>
</div>
</template>
这是我的i18n配置文件
import de from '../locales/de.json'
import en from '../locales/en.json'
export default {
local: 'en',
fallbackLocale: 'de',
messages: { de, en },
strategy: 'prefix'
}
这是我的buildModules部分的Nuxt.config.js
['nuxt-i18n',
{
defaultLocale: 'de',
seo: true,
locales: [
{
code: 'de',
name: 'Deutsch',
iso: 'de-DE'
},
{
code: 'en',
name: 'English',
iso: 'en-US'
}
],
vueI18n: i18n
}]
发布于 2021-01-24 17:26:24
根据这句话,nuxtjs/i18n docs
在使用detectBrowserLanguage并希望在路由更改上持久化区域设置时,必须调用更新存储的locale的函数之一。调用setLocaleCookie( locale )只保存cookie区域设置,或者调用setLocale( locale )来持久化cookie区域设置并切换到指定区域设置的路由。否则,区域设置可能会在导航期间切换回保存的区域设置。
https://i18n.nuxtjs.org/lang-switcher
您应该使用$i18n.setLocale
而不是更改属性locale
。
使用setLocale
将更改存储所选区域设置的cookie
在您的例子中,这段代码应该可以工作。
<template>
<div class="lang-dropdown">
<select @change="(e) => $i18n.setLocale(e.target.value)">
<option
v-for="lang in $i18n.locales"
:key="lang.code"
:value="lang.code"
onchange="changeLocale"
>
{{ lang.name }}
</option>
</select>
</div>
</template>
发布于 2021-12-02 13:50:20
艾尔比马尼的答案是它在文档中说的话。不过,这对我没有用。所以我意识到我错了。例如,我有一个这样的链接:
<nuxt-link to="/about"> // instead of this I started using this;
<nuxt-link :to="localePath('/about')">
在localePath之前,它是在导航之后重置区域设置。在nuxt链接中添加localePath之后,它只需使用您更改的地区导航即可。
发布于 2022-08-25 12:01:08
在nuxt配置中设置:
i18n: {
...
strategy: 'no_prefix',
...
}
为了防止切换时总是使用相同的URL(不是/en/foo和/de/foo,而是只使用/foo),以保持您以前通过this.$i18n.setLocale('en');
设置的nuxt链接之间的区域设置。
https://stackoverflow.com/questions/65864526
复制相似问题