Интернационализация заголовка таблицы данных Vuetify

#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%' },
        ...
      ]
    }
...
}