#vue.js #nuxt.js #vue-i18n #nuxt-i18n
#vue.js #nuxt.js #vue-i18n #nuxt-i18n
Вопрос:
У меня есть сайт на nuxtjs, там я использую nuxt-i18n с настройкой двух языков, английский язык по умолчанию. Если я устанавливаю второй язык и обновляю страницу (f5), возникает проблема при попытке переключить язык обратно на стандартный. Но со вторым языком все выглядит нормально.
В консоли много ошибок, таких как
[vue-i18n] Value of key 'auth.logout' is not a string! vue-i18n.esm.js:33
[vue-i18n] Cannot translate the value of keypath 'auth.logout'. Use the value of keypath as default. vue-i18n.esm.js:33
[vue-i18n] Value of key 'appbar.sorting.label' is not a string! vue-i18n.esm.js:33
[vue-i18n] Cannot translate the value of keypath 'appbar.sorting.label'. Use the value of keypath as default. vue-i18n.esm.js:33
[vue-i18n] Value of key 'appbar.sorting.create_asc' is not a string! vue-i18n.esm.js:33
[vue-i18n] Cannot translate the value of keypath 'appbar.sorting.create_asc'. Use the value of keypath as default. vue-i18n.esm.js:33
[vue-i18n] Value of key 'appbar.sorting.create_desc' is not a string! vue-i18n.esm.js:33
Также, если я загружу страницу с языком по умолчанию, а затем переключусь на второй язык, все будет работать нормально.
Для переключения языков я использую компонент.
<template>
<v-row>
<v-col cols="auto" id="language">
<v-select
v-model="current_language"
dense
:items="languages"
item-value="code"
item-text="name"
max-width="10"
>
<template v-slot:selection="{ item }">
<v-img :src="item.flag" max-height="32" max-width="32"></v-img>
<span class="ml-3">{{ item.name }}</span>
</template>
<template v-slot:item="{ item }">
<v-img :src="item.flag" max-height="32" max-width="32"></v-img>
<span class="ml-3">{{ item.name }}</span>
</template>
</v-select>
</v-col>
</v-row>
</template>
<script>
export default {
props: ["instant"],
data() {
return {
current_language: this.$i18n.locale,
languages: [
{
name: "English",
code: "en",
flag: "/img/usa-flag.png"
},
{
name: "Russian",
code: "ru",
flag: "/img/russia-flag.png"
}
]
};
},
watch: {
current_language(val) {
if (typeof this.instant != "undefined") {
this.$router.push({ path: this.switchLocalePath(val) });
}
}
},
methods: {
save() {
this.$router.push({ path: this.switchLocalePath(this.current_language) });
}
}
};
</script>
Комментарии:
1. Я предполагаю, что где-то должно быть какое-то сообщение об ошибке? Я имею в виду: 1. он либо делает то, что вы хотите (что не так), 2. это сбой (должен выдать вам ошибку) 3. или он просто никогда не выполняется… Может ли это быть третьим случаем? Также я вижу, что ваш
save
метод не отображается в шаблоне… Также: `Если я установлю второй язык и обновлю страницу (f5)», как вы это установите? меняете ли выdefault
в своем коде, вызываете ли другой URL, напримерmypage.com/fr/...
, или как вы это делаете?2. Я не уверен, что вы должны использовать
switchLocalePath
этот способ. В документах они используют довольно простую ссылку<nuxt-link :to="switchLocalePath('en')">English</nuxt-link>
в переключателе языка. Попробуйте!3. @Merc, привет! Действительно, теперь я вижу ошибку в консоли, но это не дает мне никакой подсказки. Когда я устанавливаю язык (кстати, я устанавливаю его, вызывая метод сохранения из родительского компонента через ссылки) Я получаю ошибки (см. udp. post)
4. @bmartins, я не могу понять, как интегрировать его с select.
5. Ну, похоже, что у вас переведены не все ваши строки: kazupon.github.io/vue-i18n/guide/… При переключении языка, который, вероятно, работает, приложение не имеет никаких допустимых переводов и возвращается к языку по умолчанию, как указано в консоли. Можете ли вы проверить свои переводы (возможно, они находятся в nuxt-config: i18n.nuxtjs.org/basic-usage или вы определили файлы: i18n.nuxtjs.org/options-reference#locales ).