【问题标题】:Android contacts: Incorrect localized collation/sortingAndroid 联系人:不正确的本地化整理/排序
【发布时间】:2011-05-13 19:56:10
【问题描述】:

这是我的问题:我正在编写一个替代联系人应用程序,该应用程序指定使用很多不同的语言和字母表。当用我自己的语言瑞典语查询名字时,使用元音变音字符的名字对我来说是不合逻辑的,但我想对 unicode 来说是合乎逻辑的:

应该是/瑞典风格:A、B、C、...、Z、Å、Ä、Ö。

查询结果:A, Å, Ä, B, ..., N, O, Ö, P, ...

我认为这对于任何偏离拉丁字母的语言来说都是一个问题。我所做的所有测试都在模拟器上。我的开发组正在对框架进行更改,因此也欢迎低级别的回答。

Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] {
       ContactsContract.Contacts._ID,
       ContactsContract.Contacts.DISPLAY_NAME,
       ContactsContract.Contacts.PHOTO_ID
       };
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
mCursor = managedQuery(uri, projection, null, null, sortOrder);

更新:我们目前正在调查这条赛道:Sort a String array,TBC... 我还在 Google Code 上添加了它作为问题。

【问题讨论】:

  • 您确定设备具有正确的区域设置吗?尝试使用 SQLiteDatabase.setLocale
  • 数据库是由安卓系统管理的,setLocale(Locale l) 不是静态函数。当我在解释文档(2.2)时,整理器 LOCALIZED 应该能够管理这种排序 - 但他们没有任何文档(文档说,需要 XXX 链接!:P)

标签: android sqlite localization contacts collation


【解决方案1】:

嘎嘎。看起来是这样的:

在 vanilla Java (SE-1.6) 中运行以下代码会生成所需的输出:

String strings[] = {"Åke", "Äskil", "Otto", "Adam", "Örjan", "Palle", "Nisse"};
Locale locale = new Locale("sv", "SE");
Collator collator = java.text.Collator.getInstance(locale);
java.util.Arrays.sort(strings, collator);

但 Android 中的相同代码对我不起作用。

编辑:我在 Android Google Code 网站上对此做了一个issue,它已被评论者评论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多