在组件外部使用VueI18n时出现问题

qyzbxkaa  于 2023-02-09  发布在  Vue.js
关注(0)|答案(4)|浏览(634)

我试图在组件外部使用i18n,我发现这个解决方案https://github.com/dkfbasel/vuex-i18n/issues/16告诉使用Vue.i18n.translate('str '),但当我调用它时,发生了错误Cannot read property' translate 'of undefined。
我使用以下配置

    • 主文件. js**
import i18n from './i18n/i18n';
new Vue({
    router,
    store,
    i18n: i18n,
    render: h => h(App)
}).$mount('#app')
    • 国际标准协会**
import Vue from 'vue'
import VueI18n from 'vue-i18n'
import i18nData from './i18nData'
Vue.use(VueI18n);
export default new VueI18n({
  locale: 'en',
  messages: i18nData,
});
    • i18n数据. js**
export default {
    en: {
        //my messages
    }
}

然后我试着用这个

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

有人能帮帮我吗?

vxbzzdmp

vxbzzdmp1#

要在组件的setup()之外使用i18n with Vue 3's composition API,您可以在其global属性上访问其转换API(如t函数)。
例如,在具有单元可测试的组合函数的文件中:

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

myss37ts2#

您应该导入i18n而不是Vue

import i18n from './i18n'

i18n.tc('someMessage')
k3bvogb1

k3bvogb13#

通过导入i18 n,然后使用i18n.global中的“t”,可以在元件外部使用VueI 18 n *,。
t”不需要“
$”,您可以使用i18n.global.locale更改区域设置**。

import i18n from '../i18n';

const { t } = i18n.global;

i18n.global.locale = 'en-US'; // Change "Locale"

const data = { 
  name: t('name'), // "t" doesn't need "$"
  description: t('description'), // "t" doesn't need "$"
};
8tntrjer

8tntrjer4#

我设法让它这样工作:

import router from '../router';

翻译文本:

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

获取当前语言:

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

相关问题