2015-05-01 25 views
8

Tôi cần có ngôn ngữ hiện tại. Không phải miền địa phương của người dùng nhưng ngôn ngữ ứng dụng của tôi.Làm cách nào để có được ngôn ngữ ứng dụng hiện tại?

Giả sử ứng dụng của tôi có hai bản địa hóa (trong cài đặt dự án): tiếng Anh (mặc định) và tiếng Pháp. Nếu người dùng đặt ngôn ngữ tiếng Pháp trên iPhone thì ứng dụng của tôi sẽ hiển thị giao diện tiếng Pháp. Nếu người dùng đặt ngôn ngữ tiếng Đức trên iPhone thì ứng dụng của tôi sẽ hiển thị giao diện tiếng Anh (vì tiếng Anh là mặc định).

Vậy làm cách nào để có được ngôn ngữ ứng dụng hiện tại đang hiển thị ngay bây giờ? Cảm ơn trước.

Trả lời

17

Câu trả lời được lựa chọn trở về ngôn ngữ điện thoại hiện nay, nhưng không phải là ngôn ngữ thực tế được sử dụng trong các ứng dụng. Nếu bạn không cung cấp bản địa hóa cho ngôn ngữ ưa thích trong ứng dụng của mình

NSString *language = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0] 

NSLocale *locale = [NSLocale currentLocale]; 
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode]; 

NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
NSString *country = [usLocale displayNameForKey: NSLocaleCountryCode value: countryCode]; 



NSLog(@"country . %@",country); 
+0

Tuyệt vời! Có cách nào tôi có thể chuyển nó sang 'NSLocale'? – Alexandr

+0

http://stackoverflow.com/questions/6177309/nslocale-and-country-name –

+0

Ăn cắp câu trả lời của người khác không phải là điều chúng tôi làm trên Stack Overflow, đặc biệt là không có tín dụng. Nếu câu trả lời cho một câu hỏi khác có thể giải quyết nó thì hãy bỏ phiếu để đóng như trùng lặp. Đừng đánh cắp câu trả lời. – Fogmeister

2

Bạn có thể lấy mã quốc gia từ ngôn ngữ, theo cách này,

NSLocale *currentLocale = [NSLocale currentLocale]; // get the current locale. 
NSString *countryCode = [currentLocale objectForKey:NSLocaleCountryCode]; 

Nhận mã quốc gia, ví dụ es (Tây Ban Nha), fr (Pháp), v.v.

Bạn có thể ánh xạ mã này cho lựa chọn giao diện của mình.

Hy vọng điều này sẽ giúp bạn.

7

Trong Swift 3 sử dụng:

let language = Bundle.main.preferredLocalizations.first

0

bạn có thể nhận được ngôn ngữ được chọn bằng mã sau.

NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0]; 

if ([language isEqualToString:@"fr"]){//French 
    [do your stuff] 
} 
else{//English 

    [do your stuff] 
} 

List_of_ISO_639-1_codes

Hy vọng điều này sẽ giúp bạn.

+0

Như đã đề cập, điều này mang lại cho bạn ngôn ngữ hệ thống iPhone. [[NSBundle mainBundle] preferredLocalizations] .firstObject cung cấp "kết hợp tốt nhất" của ngôn ngữ ứng dụng với danh sách ngôn ngữ ưu tiên của người dùng. – osxdirk

19

Có thể có cách dễ dàng hơn điều này (xem câu trả lời khác), nhưng điều này là mạnh mẽ nhất, và miễn là nguyên tắc chung của việc bản địa hóa ứng dụng thông qua strings -file không bị lỗi thời, phương pháp này sẽ làm việc.

Nói chung, bạn không cần phải lấy ngôn ngữ ứng dụng (nhưng đọc tiếp, có thể!) Nếu bạn muốn văn bản được bản địa hóa, bạn sử dụng NSLocalizedString(). Nếu bạn cần bản địa hóa hình ảnh, bạn sử dụng tài nguyên được bản địa hóa, v.v. Tuy nhiên, có những lý do mà tôi có thể nghĩ đến điều đó sẽ giúp bạn có được "miền địa phương ứng dụng", như bạn gọi nó: ví dụ về phân tích (bạn muốn biết ngôn ngữ ứng dụng của bạn được sử dụng), hoặc để cung cấp giao diện một ngôn ngữ nhất quán cho người dùng nếu bạn sử dụng giao tiếp dựa trên máy chủ (ví dụ: để bản địa hóa thông báo lỗi máy chủ bằng cùng một ngôn ngữ mà người dùng nhìn thấy bên trong ứng dụng.)

Nếu bạn muốn bản địa hóa ứng dụng hiện đang hiển thị, tôi cho rằng bạn có tệp Localizable.strings cho từng ngôn ngữ được hỗ trợ.Vì vậy, trong Vietnamesisch chuỗi-file, bạn có thể thêm dòng

"lang" = "en"; 

và trong Pháp chuỗi-file bạn thêm dòng

"lang" = "fr"; 

sau đó, bạn luôn có thể nhận được các ứng dụng bản địa bằng cách gọi NSLocalizedString("lang") (nhanh) hoặc NSLocalizedString(@"lang") (mục tiêu-C). Và tất nhiên, bất cứ khi nào bạn thêm bản địa hóa mới vào ứng dụng của mình, bạn phải đặt mục nhập "lang" vào tệp chuỗi bản địa hóa mới.

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