在组件外使用 VueI18n 的问题

新手上路,请多包涵

我正在尝试在组件外部使用 i18n 我找到了这个解决方案 https://github.com/dkfbasel/vuex-i18n/issues/16 告诉我使用 Vue.i18n.translate(‘str’),但是当我调用此发生错误 Cannot read property ‘translate’ of undefined.

我正在使用以下配置

主程序

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

国际化.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');

谁能帮我?

原文由 Alexandre Heinen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

要将 i18n 与 Vue 3 的组合 API 一起使用,但在组件的 setup() 之外, 您可以访问 其翻译 API(例如 t global--- 财产

例如在具有单元可测试组合函数的文件中:

 // 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

原文由 dtk 发布,翻译遵循 CC BY-SA 4.0 许可协议

你应该导入 i18n 而不是 Vue

 import i18n from './i18n'

i18n.tc('someMessage')

原文由 ittus 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏