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

如何实现Vue i18n对v-for循环的字符串数组动态多语言翻译

问题原因

你之前的写法失效是因为 data 选项的返回值是组件初始化阶段一次性计算的静态值,$t() 方法在此时只会返回当前locale对应的字符串,后续locale切换时不会触发data的重新计算,因此翻译不会更新。

解决方案1(最推荐):模板内执行翻译

把数组中存储的text字段改为翻译key,在v-for渲染的模板阶段再调用$t方法执行翻译,翻译逻辑会随locale变化自动响应:

修改后的组件配置:

export default {
  name: "HelloWorld",
  data() {
    return {
      items: [
        {
          // 存储翻译key而非翻译后的静态字符串
          textKey: "whatsNext.components",
          name: "vuetifyjs vuetify-loader",
        },
        {
          textKey: "whatsNext.selectLayout",
          name: "vuetifyjs vuetify",
        },
        {
          textKey: "whatsNext.frequentQuestion",
          name: "vuetifyjs awesome-vuetify",
        },
      ],
    };
  },
};

修改后的模板代码:

<template>
  <div v-for="item in items" :key="item.name">
    <!-- 渲染时动态调用翻译方法 -->
    {{ $t(item.textKey) }}
  </div>
</template>

解决方案2:将items定义为计算属性

如果你的数组配置需要做额外逻辑处理,可以把整个items放到computed计算属性中,计算属性会随i18n的locale响应式更新:

export default {
  name: "HelloWorld",
  computed: {
    items() {
      return [
        {
          text: this.$t("whatsNext.components"),
          name: "vuetifyjs vuetify-loader",
        },
        {
          text: this.$t("whatsNext.selectLayout"),
          name: "vuetifyjs vuetify",
        },
        {
          text: this.$t("whatsNext.frequentQuestion"),
          name: "vuetifyjs awesome-vuetify",
        },
      ]
    }
  }
}

模板无需修改,直接用v-for="item in items"即可正常响应语言切换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:36:03