2015-09-18 17 views
6

Làm cách nào để nhận ngôn ngữ hệ thống thực tế? Dường như họ đặt hậu tố khu vực sau dấu gạch ngang cuối cùng. Vì vậy, trước cs hiện là cs-DE nếu ngôn ngữ là tiếng Séc và khu vực là tiếng Đức. Nhưng có một số ngôn ngữ không có hậu tố như ngôn ngữ GB là en-GB nhưng thiết lập theo vùng là tiếng Đức.AppleLanguages ​​iOS9 khác với iOS cũ hơn

NSUserDefaults* defs = [NSUserDefaults standardUserDefaults]; 
NSArray* language = [defs objectForKey:@"AppleLanguages"]; 
NSString* preferredLang = [language objectAtIndex:0]; 
NSLog(@"localeIdentifier: %@", preferredLang); 

Trả lời

9

Sử dụng phương pháp componentsFromLocaleIdentifier từ NSLocale lớp

Here is the documentation

Bạn có thể làm như thế này:

NSString* localeID = [NSLocale currentLocale].localeIdentifier; 
NSDictionary* components = [NSLocale componentsFromLocaleIdentifier:localeID]; 
NSString* languageID = components[NSLocaleLanguageCode]; 

EDIT

Bắt ngôn ngữ theo cách này sẽ tạo ra một số vấn đề nếu ngôn ngữ mà ứng dụng hiện đang dịch ated in không phải là ngôn ngữ của thiết bị. Thật vậy, components[NSLocaleLanguageCode] sẽ trả về ngôn ngữ của thiết bị.

Để nhận ngôn ngữ hiện tại của ứng dụng, bạn nên sử dụng [[NSBundle mainBundle] preferredLocalizations].firstObject.

Để có được khu vực của thiết bị, bạn vẫn có thể sử dụng components[NSLocaleCountryCode]

+0

localeID nên NSString Tôi gues – kubo

+0

thực sự, cố định;) – Imotep

5

Tôi vừa mới gặp sự cố này gần đây. Theo số Apple's documentation, bạn sẽ nhận được id ngôn ngữ với trình chỉ định khu vực giống như [language designator]-[region designator] trên iOS 9. Tôi tìm thấy giải pháp nếu bạn chỉ muốn có id ngôn ngữ, bạn có thể sử dụng
[[NSBundle mainBundle] preferredLocalizations].

1

Một giải pháp nữa, Nếu bất kỳ mà bạn thích,

NSArray *languages = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]; 
    NSString *currentLanguage = [languages objectAtIndex:0]; 


    if ([[currentLanguage componentsSeparatedByString:@"-"] count] == 2) 
      currentLanguage = [[currentLanguage componentsSeparatedByString:@"-"] objectAtIndex:0]; 

    // Only for chinese Language. 
    else if ([[currentLanguage componentsSeparatedByString:@"-"] count] == 3) 
     currentLanguage = [NSString stringWithFormat:@"%@-%@", [[currentLanguage componentsSeparatedByString:@"-"] objectAtIndex:0], 
          [[currentLanguage componentsSeparatedByString:@"-"] objectAtIndex:1] 
          ]; 

"currentLanguage" sẽ cung cấp cho bạn langauge hiện tại của bạn, do đó bạn có thể sử dụng nó cho Localize hay bất cứ tiếp tục sử dụng.

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