#vue.js #vuetify.js #vue-cli #vue-cli-3 #vue-i18n
#vue.js #vuetify.js #vue-cli #vue-cli-3 #vue-i18n
Вопрос:
Я пытаюсь интернационализировать заголовок моей таблицы данных, используя Vuetify I18n.
Когда я перевожу свой обычный код, он работает корректно, но теперь мне нужно перевести заголовок моей таблицы данных, созданной с помощью Vuetify.
Я уже пытался добавить код this.$vuetify.t('$vuetify.activity.username')
or this.$t('$vuetify.activity.username')
в заголовок, но ничего не происходит. Язык всегда остается английским (en).
Кто-нибудь знает, как это исправить?
Я отправляю ниже свой код.
Заранее благодарю вас.
Activity.vue
export default {
data () {
return {
headers: [
{ text: 'ID', value: 'id', width: '1%', align: 'left' },
{ text: this.$vuetify.t('$vuetify.activity.username'), value: 'username', width: '1%' },
...
]
}
},
...
}
main.js
import messages from './assets/lang'
Vue.use(VueI18n)
const i18n = new VueI18n({
locale: 'en',
messages
})
// Vue.use(Vuetify)
Vue.use(Vuetify, {
lang: {
t: (key, ...params) => i18n.t(key, params)
}
})
./assets/lang/index.js
module.exports = {
en: {
...
$vuetify: {
dataIterator: {
rowsPerPageText: 'Items per page:',
...
},
...
activity: {
username: 'Username'
}
}
},
pt: {
...
$vuetify: {
dataIterator: {
rowsPerPageText: 'Itens por página:',
...
},
...
activity: {
username: 'Nome do usuário'
}
}
}
}
Комментарии:
1. В вашем main.js язык, который вы упомянули как ‘en’. Переводится ли это в ‘pt’, если вы задаете locale как ‘pt’?
2. Да, весь код преобразуется в ‘pt’, когда я устанавливаю locale как ‘pt’. К сожалению, просто заголовок таблицы данных, который не переводится.
Ответ №1:
Для Vuetify 2.x
<v-data-table :headers="headers" ...
И поместить в вычисляемые данные
computed: {
headers () {
return [
{
text: this.$t('title'),
align: 'left',
sortable: false,
value: 'title'
},
Для Vuetify 1.x
вы можете поместить свою функцию перевода в слот headerCell. Это не сработает, если вы поместите функцию в headers:
объект в Activity.vue, просто поместите туда свои ключи перевода и используйте шаблон со слотом.
<v-data-table>
....
<template slot="headerCell" slot-scope="props">
{{ $t(props.header.text) }}
</template>
....
Комментарии:
1. Прошу прощения за столь поздний ответ. Ваш пример сработал очень хорошо. Большое вам спасибо.
Ответ №2:
Вы можете поместить свой заголовок в вычисляемую функцию. При локальных изменениях заголовки будут обновлены
computed:{
headers(){
return [
{ text: 'ID', value: 'id', width: '1%', align: 'left' },
{ text: this.$vuetify.t('$vuetify.activity.username'), value: 'username', width: '1%' },
...
]
}
...
}