自从您最初提出这个问题以来,JavaScript 终于获得了一些不错的语言环境支持,包括排序规则。
阅读新内容EcmaScript 6 / 和谐 https://en.wikipedia.org/wiki/ECMAScript#ECMAScript_Harmony_.286th_Edition.29特征Intl https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#toc并且,具体来说,Intl.Collator https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Collator.
该文档实际上并没有非常清楚地表明芬兰语支持现代和传统排序顺序,但我已经尝试过了,而且确实如此。
要获取传统订单的整理器,您需要传递一个“花哨”的语言代码字符串:fi-u-co-trad
。对于“改革后”的排序顺序有fi-u-co-reformed
。这可以分解为:
-
fi
- 芬兰语的 ISO 639 语言代码。
-
u
- 启用 Unicode 功能/选项。 (没有详细记录)
-
co
- 排序规则选项。
-
trad
- 传统的排序顺序。我读到了有关西班牙语的此选项,但通过测试发现它也适用于芬兰语。 (没有详细记录)
-
reformed
- 改革排序顺序。似乎是“传统”的反义词。如果您两者都没有指定trad
nor reformed
你会得到default
,这可能是trad
在某些浏览器上和reformed
在其他人身上。
法典:
var surnames = ['Watanen', 'Vatanen', 'Virtanen'];
var traColl = new Intl.Collator('fi-u-co-trad');
var refColl = new Intl.Collator('fi-u-co-reformed');
var defColl = new Intl.Collator('fi');
console.log('traditional:', traColl.resolved.requestedLocale + ' -> ' + traColl.resolved.collation, surnames.sort(function (a, b) {
return traColl.compare(a,b);
}));
console.log('reformed:', refColl.resolved.requestedLocale + ' -> ' + refColl.resolved.collation, surnames.sort(function (a, b) {
return refColl.compare(a,b);
}));
console.log('default:', defColl.resolved.requestedLocale + ' -> ' + defColl.resolved.collation, surnames.sort(function (a, b) {
return defColl.compare(a,b);
}));
Outputs:
传统: fi-u-co-trad -> trad ["Vatanen", "Watanen", "Virtanen"]
改革: fi-u-co-reformed -> 改革 ["Vatanen", "Virtanen", "Watanen"]
默认值:fi -> 默认值[“Vatanen”,“Virtanen”,“Watanen”]
在 Google Chrome 中进行了测试,根据我在网上阅读的内容,它在这方面落后于 Firefox。