【问题标题】:Use vue-i18n inside script在脚本中使用 vue-i18n
【发布时间】:2020-02-23 03:37:38
【问题描述】:

我有一个简单的项目codesandbox

我用/vue-i18n

Hello World 模板:

<h1>{{msg}}</h1>

还有脚本

data() {
    return {
      msg: `{{ $t("welcomeMsg") }}`
    }
  }

插件/i18n.js:

const messages = {
  en: {
    welcomeMsg: "Welcome to Your Vue.js App",
  },
  es: {
    welcomeMsg: "Bienvenido a tu aplicación Vue.js",
  }
};

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

P.S: this.$t("welcomeMsg") 这是工作,但不要翻译!

【问题讨论】:

    标签: vue.js vue-i18n


    【解决方案1】:

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

    msg: `${this.$t("welcomeMsg")}`
    

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

    msg: this.$t("welcomeMsg")
    

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

    computed: {
      msg() {
        return this.$t("welcomeMsg")
      }
    }
    

    【讨论】:

    • +1 表示“它应该是一个计算属性” - 我将它们放在我的数据部分中,在某些情况下不起作用
    • 我尝试使用它,但收到错误“TypeError: Cannot read property '$t' of undefined”。知道为什么“this”是“未定义”吗?
    • 一次就可以正常使用,但是当我更改语言时,直到我重新加载页面后,该单词才会被翻译。
    • @HyungTaeCarapetoFigur 如果您使用计算属性,它将自动更新,但作为数据属性则不会。
    • @DecadeMoon 谢谢。但是我通过在模板中编写必要的逻辑解决了我的问题。
    猜你喜欢
    • 2022-08-09
    • 2019-08-29
    • 2019-10-14
    • 2019-04-19
    • 2021-06-02
    • 2020-03-22
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多