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
相关产品推荐
相关产品推荐

