Очевидно, что решения, основанные, например, на
[[NSLocale preferredLanguages] objectAtIndex:0]
, обычно работают нормально и возвращают текущий язык устройства.
Но в некоторых случаях это может вводить в заблуждение:
Если приложение, в котором вы хотите получить это значение, уже изменило язык, например, с таким кодом:
NSString *lg = @"en"; // or anything like @"en", @"fr", etc.
[[NSUserDefaults standardUserDefaults]
setObject:[NSArray arrayWithObjects:lg, nil]
forKey:@"AppleLanguages"]
В этом случае [NSLocale предпочитаемый язык] фактически возвращает предпочтительный набор языков (и использованный) в этом конкретном приложении, а не текущий язык устройства!
И ... в этом случае единственный способ правильно получить фактический текущийЯзык устройства (а не тот, который был ранее установлен в приложении) должен сначала очистить ключ @ "appleLanguages" в NSUserDefaults, например так:
[[NSUserDefaults standardUserDefaults]removeObjectForKey:@"AppleLanguages"];
Затем [NSLocale предпочитаемый язык] теперь возвращает правильное значение.
Надеюсь, эта помощь.