VUE3 vue-i18n Must be called at the top of a `setup` function

lig
  • 2
新手上路,请多包涵

在请求网络接口后直接i18n后,报错

useI18n().t('menu.home')

Test.vue?a796:106 SyntaxError: Must be called at the top of a setup function

at createCompileError (message-compiler.esm-bundler.js?f92f:32)
at createI18nError (vue-i18n.esm-bundler.js?47e2:66)
at useI18n (vue-i18n.esm-bundler.js?47e2:2029)
at i18nRender (index.js?bf0f:52)
at i18n (RoleMenu.vue?a796:84)
at eval (RoleMenu.vue?a796:94)
回复
阅读 7.2k
2 个回答
lig
  • 2
新手上路,请多包涵

临时找到一个方案,使用 getCurrentInstance 的proxy,然后proxy.$t('opt.ok')

import {  getCurrentInstance} from 'vue'

  setup() {
            
          const { proxy }  = getCurrentInstance()
          const handleSelect = ({ key }) => {
                if (key === 'delete') {
                    batchDeleteRole(toRaw(state.selectedRowKeys)).then(res => {
                        if (res.success) {
                            table.value.refresh(true)
                          message.success(proxy.$t('opt.ok'))
                        } else {
                            message.error(res.message)
                        }
                    })
                }
            }
 }
  • 2
新手上路,请多包涵
// lang/index
import { createI18n } from 'vue-i18n'

// import 'default-passive-events'
import en from './en'
import cn from './cn'

const i18n = createI18n({
  legacy: !true,
  globalInjection: true,
  locale: localStorage.getItem('language') || 'cn',
  messages: {
    en,
    cn,
  },
})

export default i18n
import i18n from '@/lang/index'

const { t, } = i18n.global
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏