【问题标题】:Custom Intl.Collators?自定义国际校对者?
【发布时间】:2015-03-21 18:18:53
【问题描述】:

是否可以为 Javascript 创建自定义 Intl.Collator 对象?假设我有:

var letters = [ "a", "n", "ñ", "x" ]

如果我对它们进行排序,ñ 默认会走到最后:

letters.sort() // [ "a", "n", "x", "ñ" ]

但是,使用新的Intl.Collator,我可以这样做:

letters.sort(Intl.Collator('es').compare)

按西班牙语 (es) 规则排序,并将 ñ 放在 n 之后。

[ "a", "n", "ñ", "x" ] 

现在,假设出于某种原因我想自己写一个Collator,那会把ñ 放在第一位?

[ "ñ", "a", "n", "x" ] 

我找不到任何有关为 Intl.Collator 自定义新规则集的信息。

这可能吗?

更新

是的,有可能。

更新:

我在 ECMAscript i18n 标准2 中找到了有关如何创建自定义语言环境的建议:

function MyCollator​(locales, options) {
  Intl​.Collator​.call​(this, locales, options);
  // initialize MyCollator properties
}
MyCollator​.prototype = Object​.create​(Intl​.Collator​.prototype);
MyCollator​.prototype​.constructor = MyCollator;
// add methods to MyCollator​.prototype
var collator = new MyCollator​("de-u-co-phonebk");
a​.sort​(collator​.compare);

【问题讨论】:

  • 您想为任意符号定义任意顺序吗?
  • 我最近为此类问题创建了一个新的ecmascript-intl,但我不想假设它应该替换您当前的哪个标签。如果您愿意,请使用它。
  • 谢谢@hippietrail,我已经添加了。

标签: javascript unicode internationalization collation ecmascript-intl


【解决方案1】:

您可以使用“灵敏度”选项获得您想要的结果。

Intl.Collator.prototype 不可写。

您可以使用排序和字符创建和排列以设置您自己的排序顺序。

$convert[character]= sortOrder ;

数组结构取决于目的。
使用这种结构,您必须再次将结果转换回来。

$letters = [$convert[a],$convert[n],$convert[ñ],$convert[x]);

这个可能在大多数情况下效果最好。

$letters = [[$convert[a],a],[$convert[n],n],[$convert[ñ],[ñ],[$convert[x],x]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 2011-09-27
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    相关资源
    最近更新 更多