Intl.Collat or排序日 - 为什么不和核对日文字符的第一优先级?

问题描述 投票:1回答:1

和朋友一起合作,我们是在深入整理,我们想用排序基于语言环境的Intl.Collator compare的最佳实践。

对于所有的语言环境,这按预期工作,其中文字或语言的文本优先于其他人,但日本似乎是不同的。

function letterSort(lang, letters) {
  letters.sort(new Intl.Collator(lang).compare);
  return letters;
}

console.log('EN sort:');
console.log(letterSort('en', ['a', '手に', '大人', 'b', '学校', '#', '金魚', 'きんぎょ', 'キンギョ']));

// =>["#", "a", "b", "きんぎょ", "キンギョ", "大人", "学校", "手に", "金魚"]

console.log('ZH sort:');
console.log(letterSort('zh', ['a', '手に', '大人', 'b', '学校', '#', '金魚', 'きんぎょ', 'キンギョ']));

// => ["#", "大人", "金魚", "手に", "学校", "a", "b", "きんぎょ", "キンギョ"]

console.log('JP sort:');
console.log(letterSort('ja', ['a', '手に', '大人', 'b', '学校', '#', '金魚', 'きんぎょ', 'キンギョ']));

// => ["#", "a", "b", "きんぎょ", "キンギョ", "大人", "学校", "手に", "金魚"]

在上面的代码中,你会发现英语和中国,这两个分别将优先自己的文字。日本,但是,其实不然。

一些挖后,我能发现有一个ICU Project Demo,它似乎是一个类似的顺序完成,并由ICU执行。它也好像ordering in Japanese is a tough problem

enter image description here

我的同事发表在这个为外卖和文章中,我觉得倒是它一点点

好吧,我想我明白这个问题比较好,基本上日本有四个有效的字符集,他们是罗马字符在日本这样的排序将每个字符内本身,而不是相互之间设置排序之一。和罗马字放在第一位的四套(事业的Unicode)的。

^是这样解释是否正确?或者是有顺序,其中日文字符得到第一优先的日本更好更合适的方式(听起来好像是不好的做法,虽然,但我很惊讶日本人都还可以与各种各样的一端有自己的语言)。该文章关于具体问题的会谈很好,但我不知道是否有日本订购的新发现的途径

javascript internationalization
1个回答
2
投票

由于有四个有效字符集日语作为语言,排序仅在各组的发生,然后将各组相对命令彼此以预定的方式:

  1. Rōmaji
  2. Katakana
  3. Hiragana
  4. Kanji

注:罗马字,仅仅是罗马字符集。

你可以自己尝试一下:

function letterSort(lang, letters) {
  letters.sort(new Intl.Collator(lang).compare);
  return letters;
}

const kanji = ['南', '北', '打'];
const hiragana = ['ぬ', 'ち', 'よ'];
const katakana = ['シ', 'イ', 'ホ'];
const romaji = ['a', 'c', 'b'];

console.log(letterSort('ja', [...kanji, ...hiragana, ...katakana, ...romaji]))

我们看到的结果是符合什么了我们预期:字符集相对第一梳理自己彼此,而更精细的排序仅在每个字符集出现。


推荐问答