2011-07-02 20 views
16

Nếu bạn có mã quốc gia US, FR (ISO-3166-1 alpha-2 mã quốc gia), làm thế nào để bạn lấy mã Locale (Locale.US, Locale.FRANCE) để làm một cái gì đó như thế này:Nếu bạn có mã quốc gia ISO `US`,` FR`, làm thế nào để bạn lấy mã Locale (`Locale.US`,` Locale.FRANCE`)?

System.out.println(DecimalFormat.getCurrencyInstance(Locale.US).format(12.34)); 
System.out.println(DecimalFormat.getCurrencyInstance(Locale.FRANCE).format(12.34)); 

$12.34 
12,34 € 

Trả lời

13

Bạn không thể, vì Ngôn ngữ được sử dụng để giữ ngôn ngữ chứ không phải quốc gia. Nó có thể giữ một ngôn ngữ cho một quốc gia cụ thể, và cho một biến thể cụ thể ở đất nước này, nhưng nó là một ngôn ngữ đầu tiên. Và không có mối quan hệ một-một giữa ngôn ngữ và một quốc gia. Hầu hết các ngôn ngữ đều được nói ở nhiều quốc gia và nhiều quốc gia có nhiều ngôn ngữ.

Nếu bạn có mã quốc gia cho ngôn ngữ, bạn có thể sử dụng new Locale(code). Nhưng với mã quốc gia, tất cả những gì bạn có thể làm là gọi số getAvailableLocales, lặp lại kết quả và tìm mã có mã quốc gia của bạn. Nhưng có thể có vài cái.

2

Bạn hoặc có thể tạo ra các miền địa phương,

new Locale("en", "US") 
new Locale("fr", "FR") 

hoặc

lặp qua Locale.getAvailableLocales() cho đến khi bạn tìm locale của bạn và sau đó sử dụng trường hợp đó.

1

Trong Java7 có số Locale.Builder, nhưng không phải là một cách dễ dàng. Bạn có thể, tuy nhiên tạo ra một phương pháp hữu ích:

  1. loop Locale.getAvailableLocales()
  2. cho mỗi lần kiểm tra nếu locale.getCountryCode().equals(countryCodeParam) và gửi lại
2

Một miền địa phương được quy định quan trọng nhất của mã ngôn ngữ ISO-639, có thể cũng mã quốc gia ISO-3166 và biến thể. Lớp Locale có các hàm tạo chỉ sử dụng mã ngôn ngữ hoặc mã quốc gia bổ sung hoặc một biến thể bổ sung.

Nếu bạn chỉ có mã quốc gia, trước tiên bạn cần bản đồ chuyển đổi mã thành mã ngôn ngữ - nhưng điều đó không nhất thiết tạo ra kết quả duy nhất, nhiều quốc gia sử dụng nhiều ngôn ngữ chính thức.

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