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

如何在i18n Trans组件中复用已有locale字符串避免重复内容?

解决方案

方案1:在翻译字符串中用插值复用companyName

修改翻译配置,通过i18n插值语法把companyName嵌入到welcome和contact中,同时保留标签占位符:

translation: {
   "companyName": "Stackoverflow",
   "welcome": "Welcome to <1>{{companyName}}</1>",
   "contact": "Contact to <1>{{companyName}}</1>"
}

之后在Trans组件里传递插值参数,保留原有标签结构即可:

<Trans i18nKey="welcome" values={{ companyName: $t('companyName') }}>
    Welcome to <strong>Stackoverflow</strong>
</Trans>
<Trans i18nKey="contact" values={{ companyName: $t('companyName') }}>
    Contact to <strong>Stackoverflow</strong>
</Trans>

这样companyName只需要定义一次,所有引用的地方都会同步更新。

方案2:自定义可复用的公司名称组件

创建一个封装公司名称的组件,比如命名为CompanyName.vue:

<template>
  <strong>{{ $t('companyName') }}</strong>
</template>

<script setup>
// 无需额外逻辑,直接复用翻译项
</script>

然后在Trans组件中直接使用这个组件:

<Trans i18nKey="welcome">
    Welcome to <CompanyName />
</Trans>
<Trans i18nKey="contact">
    Contact to <CompanyName />
</Trans>

同时调整翻译字符串,让标签占位符对应组件位置:

translation: {
   "companyName": "Stackoverflow",
   "welcome": "Welcome to <1></1>",
   "contact": "Contact to <1></1>"
}

这种方式既避免了文本重复,还能统一公司名称的样式。

方案3:翻译字符串嵌套翻译键(需库支持)

如果你的i18n库支持翻译键嵌套解析(比如vue-i18n),可以直接在翻译字符串里引用companyName:

translation: {
   "companyName": "Stackoverflow",
   "welcome": "Welcome to <1>{{ $t('companyName') }}</1>",
   "contact": "Contact to <1>{{ $t('companyName') }}</1>"
}

之后Trans组件无需额外传参,直接使用即可:

<Trans i18nKey="welcome">
    Welcome to <strong>Stackoverflow</strong>
</Trans>
<Trans i18nKey="contact">
    Contact to <strong>Stackoverflow</strong>
</Trans>

注意:该方式需要确认你的i18n库支持此语法,不同库的实现可能有差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:55:23