跳到主要内容

语言感知的字符串比较

使用真实Unicode搜索排序器比较大小写、重音和中日文字

collator 返回内部排序器值,用作 ==、!=、<、<=、>、>= 的第三个参数。能力 commonCollatorSearch 表示本页的五语言搜索排序子集。三个选项为 case-sensitive、diacritic-sensitive、locale,可用表达式选择;两个敏感度默认 false,省略语言固定使用 en-US。

import { map } from 'sqsmap';
map.addSource('names', { type: 'geojson', data: {
  type: 'Feature', id: 7, properties: { name: 'Café' },
  geometry: { type: 'Point', coordinates: [0, 0] }
} });
map.addLayer({ id: 'matching', type: 'circle', source: 'names',
  filter: ['==', ['get', 'name'], 'CAFE', ['collator', {
    locale: 'fr-FR', 'case-sensitive': false, 'diacritic-sensitive': false
  }]],
  paint: { 'circle-color': '#00ff00', 'circle-radius': 8 }
});
map.jumpTo({ center: [0, 0], zoom: 2 });
await map.sqs.flush();

共同实现使用真实 Unicode 搜索排序数据,对应参考的 usage: search。大小写和重音四种组合、组合/预组合字符、德语字符及中日文字按该数据比较;不能将其用于假设为普通字典排序的场景。numeric 等未提供的选项明确拒绝。保留原两参数比较行为;三参数相等/不等在动态输入不是两个字符串时使用原普通比较,三参数大小关系要求字符串。

支持 en-US、zh-CN、de-DE、fr-FR、ja-JP。其他语言和 Unicode 扩展明确报能力不可用;不使用浏览器或系统默认语言。resolved-locale 单独按普通排序的语言解析返回实际公开语言标识,五项分别为 en-US、zh-CN、de、fr、ja,既不直接回显 de-DE,也不暴露内部搜索配置。

排序器是内部类型,typeof 返回 collator;词法变量和分支保留其身份,不能用普通 JSON 对象假装,也不能作为字符串、数字或 JSON 数据输出。动态状态、选项依赖、惰性变量和既有表达式预算共同适用。图层、源和输出候选失败保留已有显示及身份。

运行时为纯 Rust ICU4X 和固定官方 ICU 导出数据,离线运行;数据生成工具与下载不进入地图运行时。完整 Unicode 许可和数据来源 SHA 随 SDK 提供。语法及搜索/语言解析行为参考冻结 MapLibre 类型,本项目自行接入共同核心。

复制共同脚本 portable-collator.js,或运行完整网页。同脚本验证四敏感度、六比较、类型、语言解析、动态选项、失败原子性和真实绿点。其他语言、完整样式域、设备和正式发行仍待完成。

包含 collator、resolved-locale 或 number-format 的过滤器,在候选提交前执行实际惰性求值;动态语言或精度参数出错会明确返回 filter 错误并保留旧源/层。没有这些新算子的旧过滤器错误回退行为保留。