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

Vue项目使用i18n翻译后如何在译文后追加自定义字符

问题场景

Vue 项目集成 vue-i18n 实现国际化时,需要在不改动原有翻译词条的前提下,给翻译返回结果追加自定义字符。原有可正常运行的代码如下:

<v-text-field
  v-bind:placeholder="$t('wordCapitalTitle')"
/>

上述代码可正常获取翻译值Title作为placeholder内容,需求是将显示值调整为Title*。直接拼接字符时出现异常:最终显示为wordCapitalTitle*,未正确读取翻译内容。

错误原因

出现wordCapitalTitle*的核心原因是把自定义字符写在了$t()方法的入参内部,比如写成$t('wordCapitalTitle*'),此时i18n会将wordCapitalTitle*作为完整的翻译key去匹配词条,匹配不到时就会直接返回原始key字符串,导致显示异常。

实现方案

模板内直接拼接(最简便)

$t()方法本身会返回翻译后的字符串结果,直接在绑定表达式中对返回值做字符串拼接即可,不要修改传入的翻译key:

<!-- 模板字符串写法 -->
<v-text-field
  v-bind:placeholder="`${$t('wordCapitalTitle')}*`"
/>

<!-- 加号拼接写法,效果一致 -->
<v-text-field
  v-bind:placeholder="$t('wordCapitalTitle') + '*'"
/>

计算属性封装(适合复用场景)

如果同一个拼接后的值需要在模板多处使用,可以将逻辑抽到计算属性中,避免重复书写:

computed: {
  requiredTitlePlaceholder() {
    return this.$t('wordCapitalTitle') + '*'
  }
}

模板中直接绑定计算属性:

<v-text-field
  v-bind:placeholder="requiredTitlePlaceholder"
/>

全局方法封装(适合通用规则场景)

如果项目中存在大量类似「翻译结果+固定后缀」的需求(比如所有必填表单项都要追加*),可以注册全局通用方法减少重复代码:

// 全局注册带后缀的翻译方法
Vue.prototype.$tAppend = function (translateKey, suffix = '') {
  return this.$t(translateKey) + suffix
}

使用时直接传入翻译key和需要追加的后缀即可:

<v-text-field
  v-bind:placeholder="$tAppend('wordCapitalTitle', '*')"
/>

提示:所有方案都不会修改原有翻译词条,也不会影响i18n本身的语言切换、变量插值等原有逻辑,切换语言时后缀会跟随翻译结果正常显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 19:03:32