使用Vue.extend时使用来自SFC的I18n转换消息

时间:2018-12-14 15:31:59

标签: javascript vue.js vuejs2 vue-component vue-i18n

我正在开发要迁移到VueJS的应用程序,因此某些部分正在使用旧的jQuery代码。

所以我试图使用jQuery附加VueJS组件,所以我做了

import copyToClipboard from '../components/_base/VCopyToClipboard';

const CopyToClipboard = Vue.extend(copyToClipboard);
  $(event.currentTarget).find('.dns-challenge-row').each((index, element) =>     {
    const component = new CopyToClipboard({
      propsData: {
        targetId: $(element).find('code').attr('id'),
      },
    }).$mount();

    $(element).append(component.$el);
  });

当我在附加了此组件的页面上进行任何操作时,一切正常,但i18n返回错误

  

无法转换键路径'tooltip.default'的值。将keypath的值用作默认值。

仅供参考,我的翻译消息是使用i18n关键字直接在SFC内部定义的

i18n: {
  messages: {
    en: {
      tooltip: {
        default: 'Copy content',
        success: 'Copied',
      },
    },
    fr: {
      tooltip: {
        default: 'Copier le contenu',
        success: 'Copié',
      },
    },
  },
},

然后我使用this.$t('tooltip.default')

在证监会内直接使用

我的i18n就像文档中所说的那样被导入,但是在我用来创建组件的vue.js之后加载。

import {
  Vue,
} from './vue';
import VueI18n from 'vue-i18n';
import en from '../../translations/en';
import fr from '../../translations/fr';

Vue.use(VueI18n);

export default new VueI18n({
  locale: document.getElementsByTagName('html')[0].getAttribute('lang'),
  messages: {
    en,
    fr,
  },
});

vue.js文件是我在其中放置所有Vue.use()定义,路由器和其他内容的文件,用于在另一个文件中创建Vue实例

vueSetup(new Vue({
  el: '#app',
  components: {
    ...
  },
  i18n: i18n,
  router: router,
  store: store,
}));

您有解决此问题的想法吗?

我尝试在vue组件之前加载i18n,但没有成功,我看到很多GitHub问题,但都出现了此错误,但不像我的情况。

1 个答案:

答案 0 :(得分:0)

只需导入i18n实例并将其添加到新的组件实例中

const CopyToClipboard = Vue.extend(copyToClipboard);
  $(event.currentTarget).find('.dns-challenge-row').each((index, element) =>     {
    const component = new CopyToClipboard({
      i18n: i18n,
      propsData: {
        targetId: $(element).find('code').attr('id'),
      },
    }).$mount();

    $(element).append(component.$el);
});