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

Vue.js 3 i18n是否支持在翻译键中编写条件语句?

Vue.js 3 i18n 翻译键中的条件语句支持方案

Vue.js 3 配套的 vue-i18n@9+ 完全支持在翻译键中编写条件逻辑,无需依赖复数化,针对不同复杂度的场景有两种常用实现方式:

1. 内联条件块语法

对于简单的存在性判断(比如你示例中的非零值渲染),可以直接在翻译字符串中使用 vue-i18n 内置的条件块语法:

简洁写法(自动判断值是否存在/非空)

{
  "TIME": {
    "COMPRESSED_FORMAT": "{d}{d}d{/d} {h}{h}h{/h} {m}{m}m{/m} {s}{s}s{/s}"
  }
}

当传入的d/h/m/s参数为非零、非空值时,对应的部分会自动渲染;若参数不存在或为空,则跳过该段内容。

显式条件判断写法

如果需要更明确的逻辑判断(比如大于某个值才显示),可以用{#if}块语法:

{
  "TIME": {
    "COMPRESSED_FORMAT": "{#if d > 0}{d}d {/if}{#if h > 0}{h}h {/if}{#if m > 0}{m}m {/if}{#if s > 0}{s}s{/if}"
  }
}

2. 函数式翻译

针对复杂逻辑(比如多分支判断、字符串拼接规则复杂),可以直接将翻译值定义为函数,在函数内实现完整逻辑:

// i18n 配置中的 messages 定义
const messages = {
  zh: {
    TIME: {
      COMPRESSED_FORMAT: ({ d, h, m, s }) => {
        const parts = [];
        d && parts.push(`${d}天`);
        h && parts.push(`${h}小时`);
        m && parts.push(`${m}分钟`);
        s && parts.push(`${s}秒`);
        return parts.join(' ');
      }
    }
  }
};

在组件中调用时,直接传入参数即可:

<template>
  <p>{{ $t('TIME.COMPRESSED_FORMAT', { d: 2, h: 3 }) }}</p>
</template>

无论是使用选项式API还是组合式API(useI18n),以上两种方式都能正常工作。复杂逻辑优先推荐函数式翻译,可读性和维护性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:20:42