2012-12-16 36 views
7

Vì vậy, trong ứng dụng của tôi, tôi đang cố gắng để có được các thiết bị hiện đang thiết lập ngôn ngữ và từ viết tắt của nó. Vì vậy, tôi làm điều này:Vấn đề ngôn ngữ NSLocale

NSString *fullLanguage = [[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:[[NSLocale preferredLanguages] objectAtIndex:0]]; 
NSString *abrlanguage = [[NSLocale preferredLanguages] objectAtIndex:0]; 

Tuy nhiên một số người dùng báo cáo rằng ngôn ngữ là trở về một cái gì đó như: en_UK hoặc một cái gì đó tương tự, mà lần lượt là rối tung lên các chức năng của ứng dụng của tôi.

Dù sao là có một cách để có được sự hiện thiết lập ngôn ngữ của thiết bị không phân biệt nếu các thiết bị thiết lập khu vực?

Cảm ơn!

+0

Tôi mong nó chỉ nói "en" mà không cần bất kỳ thông tin khu vực thêm đằng sau nó. –

Trả lời

22

Để lấy mã ngôn ngữ, sử dụng:

NSString *languageCode = [[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode]; 
NSLog(@"%@", languageCode); // Prints "en" 

Để có được tên đầy đủ của ngôn ngữ:

NSString *languageName = [[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:languageCode]; 
NSLog(@"%@", languageName); // Prints "English" 

Lưu ý rằng bạn đang sử dụng mã vùng (trong đó cung cấp cho các biến thể khu vực ngôn ngữ) và có thể dễ dàng hơn như thế này:

NSString *regionCode = [[NSLocale currentLocale] objectForKey:NSLocaleIdentifier]; 
NSLog(@"%@", regionCode); // Prints "en_US" 

Mã vùng bắt đầu bằng ngôn ngữ mã uage, theo sau là dấu gạch dưới và sau đó là biến thể theo vùng. (Điều này được chuẩn hóa theo tài liệu của Apple.)

Ngoài ra, nếu bạn sử dụng currentLocale, hãy biết rằng nó không được cập nhật khi tùy chọn người dùng được thay đổi. Sử dụng autoupdatingCurrentLocale thay vào đó nếu bạn muốn giữ nó đồng bộ nếu chúng thay đổi.

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