在脚本中使用 vue-i18n

Ham*_*ter 0 vue.js vue-i18n

我有一个简单的项目代码和框

我使用/vue-i18n

你好世界模板:

<h1>{{msg}}</h1>
Run Code Online (Sandbox Code Playgroud)

脚本

data() {
    return {
      msg: `{{ $t("welcomeMsg") }}`
    }
  }
Run Code Online (Sandbox Code Playgroud)

插件/i18n.js :

const messages = {
  en: {
    welcomeMsg: "Welcome to Your Vue.js App",
  },
  es: {
    welcomeMsg: "Bienvenido a tu aplicación Vue.js",
  }
};
Run Code Online (Sandbox Code Playgroud)

问题:如何从msg:{{ $t("welcomeMsg") }}这样的脚本中使用 vue-i18n ?

PS: this.$t("welcomeMsg")这是工作,但没有翻译!

Dec*_*oon 7

对于 ES6 模板字符串,您需要使用${ }语法而不是{{ }}

msg: `${this.$t("welcomeMsg")}`
Run Code Online (Sandbox Code Playgroud)

但是这里不需要使用模板字符串(除非你想在消息之前或之后添加额外的文本);只需这样做:

msg: this.$t("welcomeMsg")
Run Code Online (Sandbox Code Playgroud)

最后,如果您不打算修改msg,那么它应该是一个计算属性:

computed: {
  msg() {
    return this.$t("welcomeMsg")
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 在 Vue 3 中导入您的脚本: `import i18n from '@/i18n'` 并在 script 标签内使用 `i18n.global.t('message')` 。 (3认同)
  • +1表示“它应该是一个计算属性” - 我将它们放在我的数据部分中,在某些情况下不起作用 (2认同)
  • 我尝试使用它,但出现错误“TypeError:无法读取未定义的属性'$t'”。知道为什么“this”是“未定义”吗? (2认同)
  • 如何在vue 3中使用它? (2认同)

小智 7

除了 user115014 的评论之外,这就是您在 Vue3 中通过组合 api 使用它的方式。

import {useI18n} from "vue-i18n";
        
const i18n = useI18n();
const translatedMessage = i18n.t("welcomeMsg");
Run Code Online (Sandbox Code Playgroud)