2012-06-29 3 views
5

안녕하세요. 내 응용 프로그램에서 사용자가 설정 한 로케일에 따라 입력 주소를 표시해야합니다. 누구든지 포맷 작업을했거나 안드로이드 플랫폼에서 어떤 포인터를 가지고 있습니까?android의 로케일을 기반으로 한 주소 형식화

+0

가 나는 이유를 알 수 -1 등급 이 질문에. – shailbenq

답변

3

체크 아웃 googlei18n/libaddressinput: Google’s postal address library, powering Android and Chromium 프로젝트에는 두 개의 모듈이 있습니다 : android and : common. 로케일 인식 디스플레이를 위해 주소를 형식화하려면 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 국가 코드 여야합니다. 여기서는 형식 인터프리터가 주소 형식을 가져 오는 위치이기 때문입니다. 궁금하다면 형식 목록은 RegionDataConstants을 참조하십시오.

주소의 2 문자 CLDR 지역 코드를 설정합니다. AddressData # getPostalCountry()를 참조하십시오. 빌더에 전달 된 다른 값과 달리 지역 코드는 절대 null이 될 수 없습니다.

예 : US

801 CHESTNUT ST
ST. LOUIS, MO는 63,101

예 : JP

〒1600023
니시
3-2-11 니시 신주쿠 구 도쿄

+0

나는 이런 종류의 도서관을 찾고 있었는데, 그 해답을 많이 주셔서 감사합니다! –

1

나는 다른 플랫폼에서 상당히 현지화를 수행했습니다. Android의 현지화 안내는 다음과 같습니다. 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

관련 문제