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

如何从Vue-i18n中获取配置的回退区域设置字符串并遍历回退区域设置?

如何从Vue-i18n中获取配置的回退区域设置字符串并遍历回退区域设置?

我明白你的困扰——在Vue 3的vue-i18n非legacy模式下,fallbackLocale返回的是FallbackLocales类型,这个类型支持更灵活的回退配置(比如针对不同区域设置不同回退链),所以没法直接用for...in遍历。不过别担心,我们可以用vue-i18n内置的方法轻松解决这个问题,完美适配你的API翻译场景。

最优解决方案:使用resolveFallbackLocale获取回退链数组

vue-i18n提供了resolveFallbackLocale方法,它会根据当前的locale和你配置的fallback规则,自动返回一条完整的可遍历回退locale字符串数组。不管你当初把fallbackLocale配置成字符串、数组还是对象,这个方法都能处理。

具体实现代码如下:

import { useI18n } from "vue-i18n";

// 注意这里要获取i18n实例本身
const { locale, i18n } = useI18n();

const myRecord: Record<string, string> = { "en": "title", "de": "titel" };

function getContent(): string {
  // 先检查当前locale是否存在于翻译记录中
  if (locale.value in myRecord) {
    return myRecord[locale.value];
  }

  // 获取当前locale对应的完整回退链数组
  const fallbackChain = i18n.resolveFallbackLocale(locale.value);
  
  // 遍历回退链,找到第一个匹配的翻译
  for (const fallbackLoc of fallbackChain) {
    if (fallbackLoc in myRecord) {
      return myRecord[fallbackLoc];
    }
  }

  // 所有locale都未匹配到的情况
  throw new Error('missing translation...');
}

手动处理类型的备选方案

如果你不想依赖实例方法,也可以手动判断fallbackLocale的类型,将其转换成可遍历的数组:

import { useI18n } from "vue-i18n";

const { locale, fallbackLocale } = useI18n();

const myRecord: Record<string, string> = { "en": "title", "de": "titel" };

function getContent(): string {
  if (locale.value in myRecord) {
    return myRecord[locale.value];
  }

  // 将fallbackLocale转换为数组
  let fallbackArray: string[] = [];
  const fallbackVal = fallbackLocale.value;

  if (typeof fallbackVal === 'string') {
    fallbackArray = [fallbackVal];
  } else if (Array.isArray(fallbackVal)) {
    fallbackArray = fallbackVal;
  } else if (typeof fallbackVal === 'object') {
    // 处理对象式回退配置,匹配当前locale对应的回退链
    fallbackArray = fallbackVal[locale.value] || [];
  }

  // 遍历回退数组
  for (const fallbackLoc of fallbackArray) {
    if (fallbackLoc in myRecord) {
      return myRecord[fallbackLoc];
    }
  }

  throw new Error('missing translation...');
}

不过这种方法需要自己处理所有可能的类型情况,不如resolveFallbackLocale省心,毕竟官方方法已经封装了所有边界情况的处理。

备注:内容来源于stack exchange,提问作者baitendbidz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:52:59