Intl.Collator对日语进行排序-为什么排序器不首先优先考虑日语字符?

八月

与朋友一起工作时,我们正致力于排序,我们希望使用Intl.Collat​​or 的最佳实践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项目演示,并且似乎已完成并由ICU强制执行了类似的排序。用日语订购似乎也很困难

在此处输入图片说明

我的同事将其发布为外卖,我觉得这篇文章有点感动

好的,我认为我对问题的理解更好,基本上日语有四个有效的字符集,其中之一是罗马字符,因此用日语进行排序将对每个字符集进行内部排序,而不是在彼此之间进行排序。罗马字符排在这四组中的第一位(原因是unicode)。

^这种解释正确吗?还是有一种更好的更合适的方式来订购日语,在这种情况下优先考虑日语字符的优先顺序(虽然这样的声音虽然不好,但是让我感到惊讶的是日本人还可以在自己的语言结尾使用自己的语言)。文章还详细讨论了该问题,但我不确定是否找到了订购日语的新方法

伊利亚斯

由于日语有四种有效的字符集,因此仅在每个字符集中进行排序,然后以预定的方式将每个字符集彼此相对地排序:

  1. 中文
  2. 片假名
  3. 平假名
  4. 汉子

注意:罗马字,只是罗马字符集。

您可以自己尝试:

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]))

我们确实看到结果与我们期望的一致:字符集首先彼此相对排序,而更细化的排序仅在每个字符集内发生。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章