2010-11-22 4 views
4

これは私の問題です:私は別の言語とアルファベットで動作するように指定されている代替連絡先アプリを書いています。スウェーデン語で名前を照会するとき、ウムラウト文字を使用する名前は私には論理的ではなく、ユニコードに論理的にソートされています。Androidの連絡先:不正確なローカライズされた照合/ソート

スウェーデン語のスタイル:A、B、C、... 、Z、Å、Ä、Ö。

クエリ結果:A、A、A、B、...、N、O、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の上の問題としてこれを追加しました。

+1

デバイスのロケール設定が正しいですか? SQLiteDatabase.setLocaleを使用してみてください – Mikpa

+1

データベースはAndroidシステムで管理されており、setLocale(Locale l)は静的関数ではありません。 doc(2.2)を解釈しているので、LOCALIZEDの照合順序はこの並べ替えを管理できるはずですが、ドキュメンテーションはありません(docはXXXにリンクが必要です:P) – emolaus

答えて

1

Gaah。このようなものだ表示されます:バニラの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コードサイトでこれをissueとしました。レビューアにコメントされました。

関連する問題