2012-06-29 10 views

cevap

3

googlei18n/libaddressinput: Google’s postal address library, powering Android and Chromium'a bakın. Projede iki modül var: android ve: common. Yalnızca aşağıdakilere gereksiniminiz vardır: yerel ayar farkında ekranı için adresi biçimlendirmek için ortak.

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); 
} 

NOT: formatlı tercüman adres formatını çeker çünkü bu nerede RegionCode, geçerli bir ISO2 ülke kodu olması gerekir. (Eğer merak ediyorsanız formatlar listesi için RegionDataConstants'a bakın.)

Adresin 2 harfli CLDR bölge kodunu ayarlar; AdresData # getPostalCountry(). oluşturucuya iletilen diğer değerlerden farklı olarak bölge kodu hiçbir zaman boş olamaz.

Örnek: ABD

801 KESTANE ST
ST. LOUIS, MO 63101

Örnek: JP

〒1600023
NishiShinjuku
3-2-11 NishiShinjuku SHINJUKU-KU TOKYO

+0

Bu tür kütüphaneyi araştırıyorum, cevap için çok teşekkürler! –

1

Diğer platformlarda biraz yerelleştirme yaptım. İşte Android için yerelleştirme için bir kılavuz: http://developer.android.com/guide/topics/resources/localization.html#using-framework

Bir yaklaşım, istediğiniz her yerel ayar için Adres düzenine karşılık gelen MessageFormat dizelerini depolamak için yerelleştirilmiş kaynakları kullanmak olacaktır. Buradan, küresel adres bloğu standartlarına bir başvuruya ve ihtiyacınız olan her yerel ayar için biçim dizeleri oluşturmanıza gerek duyarsınız.

+0

Teşekkürler, aynı Android lokalizasyonuna başvurduğum Adres API'sı var ama seçilen formata bağlı olarak adres formatı verilmiyor. – shailbenq

+1

Sanırım, mantığın zaten girilmiş bir posta adresinin bir yerel ayara ait olması ve onu biçimlendirmenin sabit bir yolu olması. Örneğin, Alman sözleşmelerinin bir ABD posta adresini ya da başka bir yolla ifade etmesinin bir anlamı yoktur. ContactsContract veritabanına erişiyorsanız, sadece StructuredPostal öğesinin biçimlendirilmiş adres alanını kullanın. – tiguchi

+0

Bu [Google örnek kodu] (http://developer.android.com/training/basics/location/geocoding.html) öneriye benzer bir fikir kullanarak bir adres satırı biçimlendiriyorlar. Daha kolay bir yol olup olmadığından emin değil. – James