如何获取当前语言环境的字母?

时间:2020-01-14 12:55:34

标签: android unicode localization locale

背景

今天我注意到,在Google's Contacts app上,如果您既有英语联系人又有希伯来语联系人,并且您将英语切换为主要语言环境,则第一个联系人是英语:

enter image description here

但是,如果您将希伯来语语言环境设置为主要语言环境,则第一个联系人将在希伯来语中:

enter image description here

问题

我看不到使用了哪些功能。我试图在Internet上搜索此行为及其行为,但找不到它。

比较字符的值将始终返回相同的结果,因此此处的顺序应更加动态。

我发现的东西

我认为这将对我有帮助:

val unicodeLocaleKeys = Locale.getDefault().unicodeLocaleKeys

但是它总是返回一个空集。

我也在诸如Character,Unicode *和String之类的类中搜索了此类函数。我认为它不存在。

问题

Google通讯录应用如何通过当前语言环境对联系人进行排序?

是否有可能获得特定语言环境使用的整个字符集?

也许可以比较字符,同时给出语言环境的优先级顺序(用户可以选择多个语言环境)?

1 个答案:

答案 0 :(得分:0)

也许您在找错东西。

Contact应用似乎没有内置的字母(按区域设置),而只是排序规则(本地排序)并显示第一个字符。可能会找到“符号”(Unicode类别)并将所有符号放在同一个 bin 中。

最终,您可以从Unicode获得脚本名称(和方向)。您可能会在几个地方获得字母(例如Wikipedia)。对于中文和其他丰富的字母表,此操作将失败。问题:“字母”是特定于语言的。在某些欧洲国家/地区,您可能会使用(某些)带重音符号的字符,或者将字符组解释为单个字符(在电话簿中也是如此)。

因此,如果您想保持简单:

  • 使用排序规则,仅使用第一个字符

  • 相同,但要删除重音符号,并尝试查找字母是否具有相同的字母顺序优先级:在这种情况下:忽略重音符号,否则:保留重音符号,例如Å - place in alphabet。也许用两个字母做同样的事情,例如ll

  • 找到一个处理此类复杂情况的库(并将定期进行更新)。这可能对中文和其他具有大量字符的语言有所帮助。


编辑:简而言之,应该使用:

而不是使用str1.compareTo(str2)对字符串进行常规排序。
Collator.getInstance().compare(str1,str2)