You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quasar:在单文件组件的组合式API中获取$t方法

在Quasar的<script setup>中使用翻译方法$t的解决方案

我懂你遇到的困扰——在Options API里写this.$t()毫无问题,但切换到<script setup>组合式API后,直接调用$t()就弹出"$t is not defined"的报错。这是因为<script setup>的作用域逻辑和Options API不同,它不会自动把组件实例上的属性(比如$t)暴露到全局作用域里,得用正确的方式获取翻译方法才行。

下面给你两种可行的解决方案:

方法一:使用Vue I18n的useI18n组合式函数(推荐)

Quasar的国际化功能基于Vue I18n实现,官方最推荐的方式就是通过useI18n组合式函数获取翻译能力,拿到的t函数和$t功能完全一致:

<script lang="ts" setup>
import { ref } from 'vue'
import { useI18n } from 'vue-i18n'

// 解构出翻译函数t
const { t } = useI18n()

// 正常使用翻译功能
const example = ref(t('your.translation.key'))
</script>

方法二:通过组件实例获取$t(不推荐)

如果你坚持想用$t的写法,可以通过Vue的getCurrentInstance获取组件实例,再访问proxy.$t。不过要注意,getCurrentInstance属于Vue内部API,后续版本可能有变动,所以优先选第一种方法:

<script lang="ts" setup>
import { ref, getCurrentInstance } from 'vue'

// 获取当前组件实例
const instance = getCurrentInstance()

// 确保实例存在后再调用$t
if (instance) {
  const example = ref(instance.proxy?.$t('your.translation.key'))
}
</script>

简单来说:<script setup>遵循Vue 3组合式API的设计思路,不会自动挂载组件实例属性到全局,必须通过明确的依赖导入(比如useI18n)来获取功能,这样代码也会更清晰易维护。

内容的提问来源于stack exchange,提问作者David Wolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 18:02:27