沙特用户收到英文通知“Order (Ahmad) failed.”,显示成“Order (Ahmad(.failed”,括号方向反了,投诉 6 次。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,阿拉伯语名字是 RTL 字符,拼进 LTR 句子后,双向算法按段落方向重排了相邻的标点。字符串拼接没有加方向隔离符,模板也没有声明 dir。浏览器只能按第一个强字符猜方向。
「RTL 文本拼接」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。改完顺手把文档补一句,省得下次自己重新推一遍。
\u2066Ahmad\u2069 <p dir="auto">Order (<span dir="rtl">أحمد</span>) failed.</p>
监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
具体做法是,在 RTL 片段两侧加 U+2066 和 U+2069 隔离符;模板按内容语言设置 dir 属性;标点放在独立节点 不要紧贴变量;用阿拉伯语名字和英文名字各渲染一次 对比标点位置。
最后用这个标准收尾,通知里的括号和句号回到句尾,阿拉伯语名字本身顺序正确。
