如何在类样式组件(vue 3)中使用vue-i18 n

eqzww0vc  于 2023-10-23  发布在  Vue.js
关注(0)|答案(1)|浏览(196)

我正在尝试将vue 2迁移到vue 3,这是“类样式组件”。
使用vue-i18 n。我可以在Vue 3中使用Vue-i18 n吗?
package.json

"dependencies": {

    "vue": "^3.3.4",
    "vue-class-component": "^8.0.0-0",
    "vue-i18n": "^9.5.0",
    "vue-property-decorator": "^10.0.0-rc.3",

我在浏览器控制台中遇到以下错误。

Uncaught SyntaxError: Must be called at the top of a `setup` function
    at createCompileError (message-compiler.esm-browser.js:99:19)
    at createI18nError (vue-i18n.mjs:101:12)
    at useI18n (vue-i18n.mjs:2294:15)
    at TestXXXXXX.vue:20:9

它说“必须在setup函数的顶部调用”。是否可以在班级风格组件中使用“设置功能”?
下面是我的代码示例。

<script lang="ts">

import { useI18n } from 'vue-i18n';

@Component({
  i18n: useI18n()
})
export default class TestXXXXXX extends Vue {
:

有人能帮帮我吗?先谢了。

kxkpmulp

kxkpmulp1#

尽管我的评论,它仍然可以使用vue-i18nvue-class-component。在Vue3中,useI18n需要在设置函数的顶部使用,如错误消息中所述。vue-class-component导出一个设置函数,你可以用不同的方式使用它,我们将使用它。下面是如何做到这一点。
首先,您需要创建app并安装vue-i18n
在你的main.ts或任何你的应用程序的入口:

import { createApp } from "vue";
import App from "./App.vue";
import { createI18n } from "vue-i18n";

const i18n = createI18n({
  locale: "en",
  legacy: false,
  messages: { // add your messages here
    en: {
      common: {
        message: "Hello world!",
      },
    },
  },
});

createApp(App).use(i18n).mount("#app");

现在你可以在你的项目中使用$tuseI18n,下面是如何做到这一点:
在您的App.vue中:

<template>
  <HelloWorld msg="common.message"/> <!-- The traduction key -->
</template>

<script lang="ts">
import { Options, Vue } from 'vue-class-component';
import HelloWorld from './components/HelloWorld.vue';

@Options({
  components: {
    HelloWorld,
  },
})
export default class App extends Vue {}
</script>

现在在组件HelloWorld.vue中,有两种使用方法:

<template>
  <div>
    <h1>{{ $t(msg) }}</h1>
    <h2>{{ i18n.t('common.message') }}</h2>
  </div>
</template>

<script lang="ts">
import { Options, Vue, setup } from 'vue-class-component';
import { useI18n } from 'vue-i18n'

@Options({
  props: {
    msg: String
  }
})
export default class HelloWorld extends Vue {
  msg!: string      

  i18n = setup(() => {
    return useI18n()
  })
}
</script>

我强烈建议你不要使用vue-class-component,而是更多地使用composition APIVue3Typescript
希望对你有帮助:)

相关问题