Как получить текущую локаль приложения?

Мне нужно получить текущую локаль. Не пользовательская локаль, а моя локаль приложения.

допустим, мое приложение имеет две локализации (в настройках проекта): английский (по умолчанию) и французский. Если пользователь устанавливает французский язык на iPhone, мое приложение будет отображать французский интерфейс. Если пользователь устанавливает немецкий язык на iPhone, мое приложение будет отображать английский интерфейс (потому что английский язык по умолчанию).

Итак, как мне получить текущую локаль приложения, которая отображается правильно сейчас? Спасибо заранее.

5 ответов


выбранный ответ возвращает текущий язык устройства, но не фактический язык, используемый в приложении. Если вы не предоставляете локализацию для предпочтительного языка в своем приложении:

NSString *language = NSBundle.mainBundle.preferredLocalizations.firstObject;

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);

там может быть более простой способ, чем этот (см. другие ответы), но этот-самый надежный, и как общий принцип локализации приложения с помощью strings - файл не устаревает, этот метод будет работать.

как правило, вам не нужно получать языковой стандарт приложения (но читайте дальше, это возможно!) Если вы хотите локализованный текст, вы используете NSLocalizedString(). Если вам нужно локализовать изображения, вы используете локализованные ресурсы и т. д. Однако есть причины, по которым я можно подумать, что было бы неплохо получить "локаль приложения", как вы ее называете: например, для аналитики (вы хотите знать, на каком языке используется ваше приложение) или для предоставления последовательного одноязычного интерфейса Пользователю, если вы используете серверную связь (например, для локализации сообщений об ошибках сервера на том же языке, который пользователь видит внутри приложения.)

если вы хотите получить локализацию приложения, которое в настоящее время видно, я полагаю, у вас есть Localizable.strings файл для каждой поддерживаемой локали. Итак, в файл строк Englisch вы можете добавить строку

"lang" = "en";

и во французском строковом файле вы добавляете строку

"lang" = "fr";

тогда вы всегда можете получить локаль приложения, позвонив NSLocalizedString("lang") (swift) или NSLocalizedString(@"lang") (цель-C). И, конечно, всякий раз, когда вы добавляете новую локализацию в свое приложение, вы должны установить запись "lang" в новый файл строк локализации.


в Swift 3 Используйте:

let language = Bundle.main.preferredLocalizations.first


вы можете получить код страны, от языка, таким образом,

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

получить код страны, например,es (Испания), fr (Франция) и др.

вы можете отобразить этот код для выбора интерфейса.

надеюсь, это поможет вам.


вы можете получить выбранный язык, используя следующий код.

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

надеюсь, это поможет вам.