javascript - Intl.Collat​​or 对日语进行排序 - 为什么 collat​​or 不首先优先考虑日语字符?

标签 javascript internationalization

与一位 friend 合作,我们正在深入研究排序,我们希望使用Intl.Collator的最佳实践。 比较根据区域设置进行排序。

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

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

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

ok I think I understand the problem better, basically Japanese has four valid character sets one of them being roman characters so sorting in Japanese will sort each character set within itself and not amongst each other. And roman characters come first of the four sets (cause unicode).

^ 这个解释正确吗?或者是否有更好更合适的方式来排序日语,其中日语字符首先被优先考虑(虽然听起来这是不好的做法,但我很惊讶日本人愿意在最后拥有自己的语言)。文章也详细讨论了这个问题,但我不确定是否有新发现的订购日语的方法

最佳答案

由于日语作为一种语言有四种有效字符集,因此排序仅在每个集合内进行,然后每个集合以预定方式相对于彼此排序:

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

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

你可以自己尝试一下:

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

我们确实看到结果符合我们的预期:字符集首先相对于彼此进行排序,而更细粒度的排序仅在每个字符集中发生。

关于javascript - Intl.Collat​​or 对日语进行排序 - 为什么 collat​​or 不首先优先考虑日语字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54543528/

相关文章:

java - struts2 Web 应用程序中的 I18n 重定向问题

python - 特定语言环境的gettext

javascript - 将脚本中的变量字符串替换为 ajax

javascript - 了解 Backbone 和 Express 中的点击事件

javascript - 使用 AJAX 提交后如何删除创建评论表单?

jsf - 如何将 JSF 消息包放在 WAR 之外,以便无需重新部署即可对其进行编辑?

ruby-on-rails - 在 I18n 消息中使用 a/an

iphone - 从区域设置特定字符串获取 NSDecimalNumber?

javascript - 在函数上设置 jquery 验证标签

javascript - CKEditor 代码片段插件不适用于 ckeditor gem