2012-06-29 6 views
5

こんにちは私のアプリケーションでは、ユーザーが設定したロケールに従って入力アドレスを表示する必要があります。誰かが働いているか、書式設定に取り組んでいるか、Androidプラットフォームでそれを指すポインタを持っていますか?アンドロイドのロケールに基づく住所書式

+0

私はのために-1評価の理由を知ることができますこの質問のために。 – shailbenq

答えて

3

googlei18n/libaddressinput: Google’s postal address library, powering Android and Chromiumを参照してください。プロジェクトには、アンドロイドと:コモンの2つのモジュールがあります。ロケール対応の表示のためにアドレスをフォーマットするには、commonが必要です。

import android.location.Address; 
import android.support.annotation.NonNull; 
import android.text.TextUtils; 
import com.google.i18n.addressinput.common.AddressData; 
import com.google.i18n.addressinput.common.FormOptions; 
import com.google.i18n.addressinput.common.FormatInterpreter; 
... 
public static String getFormattedAddress(@NonNull final Address address, 
             @NonNull final String regionCode) { 
    final FormatInterpreter formatInterpreter 
      = new FormatInterpreter(new FormOptions().createSnapshot()); 
    final AddressData addressData = (new AddressData.Builder() 
      .setAddress(address.getThoroughfare()) 
      .setLocality(address.getLocality()) 
      .setAdminArea(address.getAdminArea()) 
      .setPostalCode(address.getPostalCode()) 
      .setCountry(regionCode) // REQUIRED 
      .build()); 
    // Fetch the address lines using getEnvelopeAddress, 
    List<String> addressFragments = formatInterpreter.getEnvelopeAddress(addressData); 
    // join them, and send them to the thread. 
    return TextUtils.join(System.getProperty("line.separator"), 
      addressFragments); 
} 

注:フォーマット・インタプリタからアドレス形式を引っ張るところ、これがあるのでregionCodeは、有効なISO2の国コードでなければなりません。

アドレスの2文字のCLDRリージョンコードを設定します(詳細については、RegionDataConstantsを参照してください)。 AddressData#getPostalCountry()を参照してください。 ビルダーに渡される他の値とは異なり、リージョン・コードは決してnullにはなりません。

例:US

801 CHESTNUT ST
ST。 LOUIS、MO 63101

例:JP

〒1600023
西新宿
3-2-11西新宿都新宿区TOKYO

+0

私はこの種のライブラリを探してきました。ありがとうございました! –

1

私は他のプラットフォームでかなりのローカライズを行っています。 http://developer.android.com/guide/topics/resources/localization.html#using-framework

ローカライズされたリソースを使用して、必要な各ロケールのアドレスレイアウトに対応するMessageFormat文字列を格納する方法があります。そこから、グローバルアドレスブロック標準への参照が必要になり、必要な各ロケールの書式文字列を作成します。

+0

ありがとう、私は同じアンドロイドのローカリゼーションを参照していますが、アドレスAPIがありますが、アドレスのフォーマットは選択されたロケールに基づいて提供されていません。 – shailbenq

+1

私は、すでに入力された郵便住所がロケールに「所属」し、それを定式化する固定の方法があるという理由が考えられます。たとえば、ドイツの慣習やそれ以外の方法で米国の郵便住所を表現することは、あまり意味がありません。 ContactsContractデータベースにアクセスする場合は、StructuredPostalエンティティの書式付きアドレスフィールドを使用します。 – tiguchi

+0

この[Google example code](http://developer.android.com/training/basics/location/geocoding.html)では、私の提案と同様の考え方でアドレス行をフォーマットしています。簡単な方法があるかどうかはわかりません。 – James

関連する問題