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

如何在翻译字符串中获取%count%的绝对值以解决日期间隔负号问题

解决方案

你当前的翻译字符串存在分支冲突问题:{1} the day after tomorrow的匹配阈值设置错误,值为1会同时命中{1} tomorrow和{1} the day after tomorrow两个分支,建议先将该规则调整为{2} the day after tomorrow。

方案1:兼容现有Choice格式(无需调整框架配置)

你当前使用的是管道分隔的Choice翻译格式,该语法本身不支持在翻译字符串内直接做数值运算,最简单的解决方式是调用翻译时额外传入一个绝对值参数,调整后的翻译字符串如下:

dateinterval: '{0} today|{1} tomorrow|{2} the day after tomorrow |{-1} yesterday|[2,Inf[ In %count% days|]-Inf,-2] %abs_count% days ago'

调用翻译方法时传入两个参数即可:

  • %count%:原始的正负日期间隔值,用于区间匹配
  • %abs_count%:提前用abs(count)计算得到的无符号间隔值,用于负区间的文本展示

方案2:ICU MessageFormat格式(支持翻译内直接处理绝对值)

如果你的项目支持ICU MessageFormat语法(Symfony 4.4+、Laravel 9+等主流框架均默认支持),可以直接在翻译规则内完成逻辑判断,不需要额外传参,配置示例如下:

dateinterval: "{count, select,
    0 {today}
    1 {tomorrow}
    2 {the day after tomorrow}
    -1 {yesterday}
    other {{count, plural,
        >1 {In # days}
        < -1 {# days ago}
    }}
}"

该语法会自动根据分支场景处理#占位符的输出,在小于-1的区间自动展示绝对值,不会携带负号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 06:15:03