在FormatJS/React-intl的消息中能否实现if/else条件判断逻辑?
FormatJS条件逻辑实现说明
FormatJS支持你需要的条件消息定义能力,它基于标准ICU消息格式实现,你可以使用select语法完成布尔值的分支判断,具体实现方式如下:
1. 调整消息定义写法
你只需要把消息字符串按ICU select语法改写即可:
// message string message = "{isDay, select, true {Day} other {Night}}";
2. React组件用法无需改动
原来的FormattedMessage调用方式保持不变,直接传入isDay布尔值即可:
<FormattedMessage id="message" values={{isDay: true}} />
语法说明
- 第一个参数为你要做判断的变量名,这里是
isDay - 第二个参数固定为
select,代表启用分支选择逻辑 - 后面依次列出匹配值对应的文案,
true {Day}表示当isDay为true时输出Day other {Night}为兜底分支,会匹配所有未明确列出的情况,正好对应isDay为false的场景
如果后续你需要处理更多状态的分支,只要在select后追加对应的匹配项即可,示例:
message = "{orderStatus, select, success {订单支付成功} pending {订单支付中} cancel {订单已取消} other {订单状态未知}}"
内容的提问来源于stack exchange,提问作者Carlton
相关产品推荐
相关产品推荐

