在组件外部使用VueI18n的问题

时间:2019-07-16 02:59:50

标签: vue.js vuejs2 vue-i18n

我正在尝试在组件外部使用i18n,我发现此解决方案https://github.com/dkfbasel/vuex-i18n/issues/16告诉使用Vue.i18n.translate('str'),但是当我调用此方法时发生错误,无法读取属性'翻译”未定义。

我正在使用以下配置

main.js

import i18n from './i18n/i18n';
new Vue({
    router,
    store,
    i18n: i18n,
    render: h => h(App)
}).$mount('#app')

i18n.js

import Vue from 'vue'
import VueI18n from 'vue-i18n'
import i18nData from './i18nData'
Vue.use(VueI18n);
export default new VueI18n({
  locale: 'en',
  messages: i18nData,
});

i18nData.js

export default {
    en: {
        //my messages
    }
}

然后我尝试使用此

import Vue from 'vue';
Vue.i18n.translate('someMessage');

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:4)

您应该导入i18n而不是Vue

import i18n from './i18n'

i18n.tc('someMessage')

答案 1 :(得分:3)

要使用 i18n with Vue 3's composition API,但在组件的 setup() 之外,you can access 在其 global propertyGithub.com: Strobosco: Titanicfullstack 其翻译 API(例如 t 函数)。

E。 G。在具有单元可测试组合函数的文件中:

// i18n/index.js

import { createI18n } from 'vue-i18n'
import en from './en.json'

  ...

export default createI18n({
  datetimeFormats: {en: {...}},
  locale: 'en',
  messages: { en }
})
// features/utils.js

//import { useI18n } from 'vue-i18n'
//const { t } = useI18n() // Uncaught SyntaxError: Must be called at the top of a `setup` function

import i18n from '../i18n'

const { t } = i18n.global

答案 2 :(得分:0)

我设法使它工作:

import router from '../router';

翻译文本:

let translatedMessage = router.app.$t('someMessage');

获取当前语言:

let language = router.app.$i18n.locale;