2014-10-19 15 views
5

Tôi muốn ứng dụng của mình kiểm tra ngôn ngữ mà điện thoại đang sử dụng. Câu lệnh if này có nghĩa vụ phải làm điều đó:Cách kiểm tra ngôn ngữ thiết bị trong Android?

if (Locale.getDefault().getLanguage().equals("en")) { 
    yourYesResponse = "That is great " + usersName + "!"; 
} 
else if (Locale.getDefault().getLanguage().equals("fr")) { 
    yourYesResponse = "C\'est bon " + usersName + "!"; 
} 

Nhưng ngay cả khi thiết bị của tôi được đặt sang tiếng Pháp, nó vẫn hiển thị tiếng Anh. Có điều gì sai trái với tuyên bố này và nếu có, thì sao?

EDIT: Cảm ơn bạn đã trợ giúp. Tôi đánh giá cao nó.

+0

Bạn không thể sử dụng [Localizing with Resources] (http://developer.android.com/guide/topics/resources/localization.html)? – nhaarman

+1

Xin lỗi tôi vẫn đang học phát triển Java và Android. Nhưng tôi sẽ xem xét điều đó. –

Trả lời

3

Bạn có thể giải quyết điều này bằng cách khai báo tệp tài nguyên chuỗi cho từng ngôn ngữ.

Tạo thư mục tài nguyên có tên là values-fr và values-en và thêm tệp có tên strings.xml vào cả hai thư mục.

File string.xml trong các giá trị-en:

<resources> 
<string name="good">That is great </string> 
</resources> 

Và bạn tải các tài nguyên như thế này:

yourYesResponse = getResources().getText(R.string.good) + usersName + "!"; 

Niek đã nhanh hơn ...

5

Để có được ngôn ngữ điện thoại, bạn có thể sử dụng này:

Locale.getDefault().getDisplayLanguage(); 

hay,

Locale.getDefault().getLanguage(); //to get usual language code 
5

Đối với có ngôn ngữ hệ thống:

Locale.getDefault().getDisplayLanguage(); 
4

Sử dụng:

Locale.getDefault().getLanguage().contentEquals("en") 

String#equals() không chỉ so sánh nội dung của chuỗi, mà còn kiểm tra xem đối tượng kia cũng là một thể hiện của String. Các String#contentEquals()methods chỉ so sánh nội dung (chuỗi ký tự) và không không kiểm tra xem đối tượng kia cũng là một thể hiện của String. Nó có thể là bất cứ điều gì miễn là nó là một thực hiện của CharSequence hoặc một thể hiện của StringBuffer.

2

Thường locale được cung cấp với fr_FR định dạng followig nơi fr đầu tiên là mã ngôn ngữ và thứ hai là mã quốc gia, đó là lý do tại sao bạn nên sử dụng

Locale.getDefault().getLanguage().startsWith("fr") 

nhưng Android Cách thứ nhất là sử dụng resources

getString(R.string.hello, userName); 

Đã chỉnh sửa: Ok, xấu hổ với tôi, tôi không nhận thấy rằng bạn gọi getLanguage(), nhưng phần thứ hai là chính xác.

1

Cách Android để thực hiện việc này, đang sử dụng tài nguyên xml, như được giải thích trong Localizing with Resources.

giá trị/strings.xml:

<resources> 
    <string name="yes_response">That is great, %s!</string> 
</resources> 

giá trị-fr/chuỗi.xml:

<resources> 
    <string name="yes_response">C\'est bon, %s!</string> 
</resources> 

Code:

yourYesResponse = context.getString(R.string.yes_response, usersName); 

Động lực:

Đó là thực tế tốt để sử dụng khuôn khổ nguồn Android để tách các khía cạnh cục bộ của bạn ứng dụng càng nhiều càng tốt từ lõi Java chức năng:

  • Bạn có thể đặt hầu hết hoặc tất cả các nội dung của giao diện người dùng ứng dụng của bạn vào các tập tin tài nguyên, như được mô tả trong tài liệu này và trong Tài Cung cấp.
  • Hành vi của giao diện người dùng, trên một mặt khác là , được điều khiển bởi mã Java của bạn. Ví dụ: nếu người dùng nhập dữ liệu cần được định dạng hoặc sắp xếp khác nhau tùy thuộc vào ngôn ngữ, thì bạn sẽ sử dụng Java để xử lý dữ liệu theo chương trình. Tài liệu này không bao gồm cách bản địa hóa mã Java của bạn.
2

Như tất cả mọi người đã giải thích rằng i18N (XML chuỗi trong các ngôn ngữ khác nhau) phải được sử dụng để đạt được điều đơn giản này nhưng nếu bạn đang tìm kiếm ngôn ngữ người dùng cho một số ngôn ngữ khác mục đích sau đó xin vui lòng sử dụng một trong những điều này.

Locale.getDefault().getLanguage(); 

Điều này sẽ cung cấp mã iso ngôn ngữ tức là "de", "ru".

HOẶC

Resources.getSystem().getConfiguration().locale; 

này trả về đối tượng Tài nguyên chia sẻ toàn cầu cung cấp quyền truy cập vào tài nguyên hệ thống mà thôi.

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