2012-06-29 55 views

Trả lời

3

Khám phá googlei18n/libaddressinput: Google’s postal address library, powering Android and Chromium. Có hai mô-đun trong dự án: android và: common. Bạn chỉ cần: phổ biến để định dạng địa chỉ cho hiển thị nhận biết ngôn ngữ.

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

GHI CHÚ: Khu vực Mã phải là mã quốc gia iso2 hợp lệ, vì đây là nơi thông dịch viên định dạng kéo định dạng địa chỉ. (Xem RegionDataConstants để biết danh sách các định dạng, nếu bạn tò mò.)

Đặt mã vùng CLDR gồm 2 chữ cái của địa chỉ; xem AddressData # getPostalCountry(). Không giống như các giá trị khác được chuyển đến trình tạo mã , mã vùng không bao giờ có thể rỗng.

Ví dụ: US

801 CHESTNUT ST
ST. Louis, MO 63101

Ví dụ: JP

〒1600023
NISHISHINJUKU
3-2-11 NISHISHINJUKU Shinjuku-ku TOKYO

+0

Tôi đã tìm kiếm loại thư viện này, cảm ơn rất nhiều vì câu trả lời! –

1

Tôi đã thực hiện một chút công bằng bản địa hóa trên các nền tảng khác. Dưới đây là hướng dẫn bản địa hóa cho Android: http://developer.android.com/guide/topics/resources/localization.html#using-framework

Một cách tiếp cận sẽ là sử dụng tài nguyên cục bộ để lưu trữ chuỗi MessageFormat tương ứng với bố cục Địa chỉ cho từng ngôn ngữ bạn muốn. Từ đó, bạn sẽ cần tham chiếu đến các tiêu chuẩn khối địa chỉ toàn cầu và tạo chuỗi định dạng cho từng ngôn ngữ bạn cần.

+0

Cảm ơn, tôi đang đề cập đến cùng một bản địa hóa Android nó có API địa chỉ nhưng không có định dạng địa chỉ nào được cung cấp dựa trên ngôn ngữ được chọn. – shailbenq

+1

Tôi nghĩ lý do là địa chỉ bưu điện đã nhập "thuộc" vào một ngôn ngữ và có cách định dạng cố định. Nó không có ý nghĩa nhiều ví dụ để thể hiện một địa chỉ bưu chính của Hoa Kỳ bởi các công ước Đức hoặc cách khác xung quanh. Nếu bạn đang truy cập cơ sở dữ liệu ContactsContract thì chỉ cần sử dụng trường địa chỉ được định dạng của thực thể StructuredPostal. – tiguchi

+0

Trong [mã ví dụ của Google] này (http://developer.android.com/training/basics/location/geocoding.html), chúng định dạng một dòng địa chỉ bằng cách sử dụng ý tưởng tương tự như đề xuất của tôi. Không chắc chắn nếu có một cách dễ dàng hơn. – James

Các vấn đề liên quan