2016-02-23 19 views
7

Có cách nào để có được ngôn ngữ được cài đặt Hệ thống từ thiết bị Android hay không. Tôi đã thử với getAvailableLocales() từ android Get Available locales, nhưng nó không hoạt động cho các thiết bị như Asus, Carbon, Lava, Intex.Android Cách nhận các ngôn ngữ được cài đặt của hệ thống

Ví dụ, nếu tôi gọi getAvailableLocales() trong thiết bị Nexus của tôi có thể có được miền địa phương đó là có trong Settings-> Language&Input -> Language

Nhưng nếu tôi làm như vậy trên bất kỳ thiết bị Carbon, thay vì nhận được ngôn ngữ từ Settings-> Language&Input -> Language, tôi nhận được một khác nhau danh sách.

Tôi chỉ muốn danh sách ngôn ngữ được cài đặt trong thiết bị chứ không phải mọi ngôn ngữ được hệ điều hành hỗ trợ.

+1

Bạn có thể mở rộng ý nghĩa của "không hoạt động" cho các thiết bị đó không? Có phải nó đơn giản trả về một mảng trống, một mảng với _only_ 'Locale.US', nó có bị lỗi không, nó có phải là không trả về các ngôn ngữ mà bạn mong muốn có sẵn không? –

+0

Tôi đã cập nhật câu hỏi của mình, vui lòng kiểm tra –

+0

OK, tôi có thể hỏi _why_ bạn cần địa phương không? Bạn nên hiển thị mọi thứ với bất kỳ ngôn ngữ nào mà người dùng của bạn đã chọn (tức là ngôn ngữ mặc định) và ghi vào mạng hoặc bất kỳ thứ gì với 'Locale.US', như [được ghi trong tài liệu 'Locale'] (https://developer.android.com/reference/java/util/Locale.html). Tôi nhớ lại một cái gì đó như bạn đang gặp (ngôn ngữ được cài đặt! Ngôn ngữ), mặc dù tôi không chắc chắn những gì đang xảy ra với điều đó. –

Trả lời

3

Nếu bạn muốn hệ thống hỗ trợ miền địa phương, sử dụng

Locale.getAvailableLocales() 

Nếu bạn muốn hệ thống hỗ trợ và thiết bị kích hoạt miền địa phương

Resources.getSystem().getAssets().getLocales() 

Bằng việc sử dụng đầu tiên, bạn không thể chắc chắn về nếu tất cả các miền địa phương được hỗ trợ bởi thiết bị đó. Vì tất cả họ đều đến với ROM Android đó.

Nhưng hình ảnh thứ hai luôn là ảnh chắc chắn. Nguyên nhân chỉ cung cấp tất cả các ngôn ngữ (phông chữ) được cài đặt cho thiết bị cụ thể đó. Các ngôn ngữ (phông chữ) này được nhà sản xuất thiết bị đó đặt.

Tôi đã giải thích thêm trong số here

5

Phương thức Locale.getAvailableLocales() là bộ địa phương chung chung 'cơ sở'. Từ các tài liệu:

Hầu hết các lớp miền địa phương nhạy cảm cung cấp getAvailableLocales phương pháp riêng của họ, mà nên được ưa thích hơn phương pháp này mục đích chung.

Mỏ nhấn mạnh.

Bạn có thể nhận các ngôn ngữ có sẵn cho một trường hợp sử dụng cụ thể bằng cách truy vấn phương thức getAvailableLocales() trên lớp thích hợp. Cụ thể là:

+0

Tôi đã cập nhật câu hỏi của mình, vui lòng kiểm tra –

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