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

Vue.js/Nuxt如何获取当前locale实现数组对象多语言翻译后随机选取

问题解决方法

你当前代码核心问题是tiprandom计算属性仅返回了随机选中的条目对象,没有调用你预先定义的多语言翻译方法,按以下方案修改即可实现需求:

最简修改方案

直接修改模板中的渲染逻辑,调用你已经写好的functionDicas方法传入随机选中的条目即可:

<template lang="html">
  <div class="loading-page" v-if="loading">
    <h1 class="title">Estamos preparando o terreno para você</h1>
    <img src="~/assets/media/photos/agronomy.png" />
    <!-- 仅修改这一行,传入随机条目到翻译方法 -->
    <p class="text">{{ functionDicas(tiprandom) }}</p>
  </div>
</template>

这个方案不需要修改其他逻辑,即可实现随机选取条目后自动匹配当前locale返回对应语言文本,切换语言时也会自动更新翻译内容。

计算属性封装方案(更推荐)

如果你希望后续调用更简洁,可以直接在tiprandom计算属性中完成翻译逻辑,模板无需修改:

computed: {
  tiprandom () {
    // 先随机选取条目
    const randomItem = this.dicas[Math.floor(Math.random()*this.dicas.length)]
    // 调用翻译方法返回对应语言文本
    return this.functionDicas(randomItem)
  },
  locale() {
    if (this.$i18n.locale == 'pt-br') {
      return 'pt_br'
    } else {
      return this.$i18n.locale
    }
  }
},

代码优化建议

你可以将翻译方法的判断逻辑简化为映射表,后续新增语言时不需要额外加if分支,适配后续对接API的扩展需求:

methods: {
  functionDicas(dica) {
    // 定义locale和字段的映射关系
    const localeFieldMap = {
      'pt_br': 'nome',
      'en': 'nome_en',
      'es': 'nome_es'
    }
    // 按当前locale取对应字段,找不到就默认返回葡萄牙语
    return dica[localeFieldMap[this.locale]] || dica.nome
  },
  // 其他原有方法保留
  start () {
    this.loading = true
  },
  finish () {
    this.loading = false
  }
}

以上逻辑完全适配你后续对接API拉取多语言数据的需求,后续只要将dicas数组替换为接口返回的多语言数组即可,不需要修改其他翻译逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:57:03