S2.08.1Locale-sensitive collation设计研究

字母顺序随语言不同

别名: 语言敏感排序 · 本地化排序 · locale-aware sorting · collation tailoring

概念解释

语言敏感排序(locale-sensitive collation)是按读者所用语言及具体排序用途比较字符串,而不是按 Unicode 码点、UTF-8 字节或英语字母表排列。Unicode Collation Algorithm(UCA)提供可比较任意 Unicode 字符串的基础顺序,Common Locale Data Repository(CLDR)再用 collation tailoring 表达语言和用途差异。同一批名称在瑞典语、德语或英语界面里可能出现不同顺序;有些语言还同时存在标准、电话簿或其他排序方式。因此“字母顺序”不是文本本身携带的唯一属性,而是数据、locale、排序类型和比较选项共同产生的视图。

机制

排序器先把字符映射为分层的 collation weights,再依次比较主要、次要和更细的差异。UCA 给出完整基线,CLDR tailoring 可以改变字母位置,把字符序列视为 contraction,或让一个字符展开成多个排序元素,以符合当地约定。locale 只有语言时仍可能经过脚本、地区和根数据的回退;请求的排序类型不存在时也会回退,所以“系统 locale 已设好”不等于实际拿到了预期规则。面向人的显示顺序应由显式 locale 与 collation type 生成,而搜索匹配应使用针对搜索的比较配置。数据库主键、外键和去重标识则必须依靠不可变 ID 或明确的规范化标识,不能依赖会随 locale、库版本或 tailoring 改变的显示排序键。

怎么研究

可建立跨 locale 的黄金数据集,包含当地字母、组合字符、连字符、数字、混合脚本以及真实人名或地名,并由熟悉该语言的参与者审阅预期相邻关系。对实现的验证应记录请求 locale、解析后的实际 locale、collation type、库与 CLDR/UCA 版本,再进行成对比较、全列表排序和版本升级差异测试。用户研究可让参与者在按其语言排序的长列表中定位条目,测量定位时间、误选和返回搜索的比例;同一任务以码点序、错误 locale 和正确 tailoring 对照。研究报告需把“符合库输出”与“符合目标社群的查找习惯”分开,尤其不能用英语数据集证明其他语言的排序可用。

边界

locale 并不总能唯一决定顺序:同一语言可能有地区差异、电话簿等用途差异,组织也可能采用受法规或行业目录约束的约定。用户生成内容可能语言未知或混合多种脚本,此时只能声明产品采用的策略,并为无法自然归类的内容提供搜索或其他入口。排序规则与数据会随 Unicode、CLDR 或运行库升级;新的字符通常能被放入完整顺序,但既有结果也可能变化。要求分页、审计或跨节点完全复现时,需要锁定排序实现与数据版本,并加入唯一、稳定的末级 tie-breaker;不能把 locale 排序键持久化为跨版本身份。

怎么落地

  • 为每个可见列表显式传入内容语言、排序类型和比较选项;记录解析后的实际配置,对不支持的 tailoring 监控回退,而不是默默使用服务器默认 locale。
  • 用本地化排序器生成显示顺序,并以稳定记录 ID 作最后的确定性 tie-breaker。游标分页要把排序配置版本纳入契约,升级时重建游标或明确迁移窗口。
  • 为查询另建 search collator、转写或检索索引,并按产品需求决定哪些差异可忽略;不要复用显示排序结果做精确标识、权限判断或唯一性约束。
  • 用目标语言的真实样本做升级快照和人工审阅,检查首尾、相邻关系、混合脚本、数字、空值与新增字符;再以列表定位任务确认用户能按预期找到条目。

延伸

  • 同组S2.08.2 中文可按拼音、笔画或部首排序 · S2.08.3 大小写与变音符号影响排序结果 · S2.08.4 索引导航需随语言切换
  • 相邻S1.02.1 镜像的对象是布局与方向,不是全部图形 · S2.01.4 周起始日随地区不同
  • 站内检索Unicode Collation Algorithm · CLDR collation tailoring · locale-sensitive sorting

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/S2.08.1