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

Vue-i18n动态加载翻译消息前如何不显示任何内容?

Vue-i18n 未加载翻译时显示空白的实现方案

有几种可行的方式实现需求,以下是具体方案:

方法一:利用Vue-i18n内置的missing钩子

这是最全局的解决方案,当翻译键不存在时,直接返回空字符串。

Vue 3 + Vue-i18n v9 示例:

import { createI18n } from 'vue-i18n'

const i18n = createI18n({
  locale: 'zh-CN',
  fallbackLocale: 'zh-CN',
  // 找不到翻译时返回空字符串
  missing: (locale, key) => ''
})

Vue 2 + Vue-i18n v8 示例:

import VueI18n from 'vue-i18n'

Vue.use(VueI18n)

const i18n = new VueI18n({
  locale: 'zh-CN',
  fallbackLocale: 'zh-CN',
  missing: (locale, key) => ''
})

方法二:结合加载状态做条件渲染

在组件内通过响应式变量标记翻译是否加载完成,仅在加载完成后显示翻译内容。

<template>
  <!-- 未加载完成时显示空白 -->
  <span v-if="isTransLoaded">{{ $t('common.submit') }}</span>
  <span v-else></span>
</template>

<script setup>
import { ref, onMounted } from 'vue'
import { useI18n } from 'vue-i18n'

const { loadLocaleMessages } = useI18n()
const isTransLoaded = ref(false)

onMounted(async () => {
  // 从服务器获取翻译数据
  const transData = await fetch('/api/translations/zh-CN').then(res => res.json())
  // 加载翻译消息
  await loadLocaleMessages('zh-CN', transData)
  // 标记加载完成
  isTransLoaded.value = true
})
</script>

方法三:自定义翻译函数封装$t

封装Vue-i18n的翻译函数,判断如果返回的是原始翻译键(即未找到对应翻译),则返回空字符串。

// 封装自定义useI18n
import { useI18n as useVueI18n } from 'vue-i18n'

export function useI18n() {
  const { t: originalT, ...rest } = useVueI18n()
  
  const t = (key, ...args) => {
    const result = originalT(key, ...args)
    // 如果翻译结果等于原始键,说明未找到翻译,返回空
    return result === key ? '' : result
  }
  
  return { t, ...rest }
}

在组件中使用这个自定义的useI18n即可:

<script setup>
import { useI18n } from '@/utils/i18n' // 引入自定义的useI18n

const { t } = useI18n()
</script>

<template>
  <span>{{ t('common.submit') }}</span>
</template>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:10:25