Изменение языка для NSLocalizedString () во время выполнения - PullRequest
7 голосов
/ 05 июня 2009

У меня есть приложение для iPhone, в котором есть кнопка для изменения языка отображения во время выполнения. Я посмотрел на NSLocalizedString (), который будет возвращать соответствующие строки в соответствии с системными предпочтениями. Какие у меня варианты, а не жесткое кодирование всех отображаемых строк и возврат в зависимости от выбора языка пользователя во время выполнения? Любые указатели будут высоко оценены.

Ответы [ 4 ]

15 голосов
/ 26 мая 2011

Основываясь на публикации пользователя "object2.0", я собрал пример кода, который вы можете использовать в своем приложении для изменения языка интерфейса на лету.

Основной класс локализации, выполняющий тяжелую работу:

-(NSString *) localized:(NSString *) key
{
  GameInfo *gameInfo = [GameInfo sharedInstance];

  // langCode should be set as a global variable somewhere
  NSString *path = [[NSBundle mainBundle] pathForResource:langCode ofType:@"lproj"];

  NSBundle* languageBundle = [NSBundle bundleWithPath:path];
  return [languageBundle localizedStringForKey:key value:@"" table:nil];
}

Предполагая, что у вас есть эта функция в глобальном классе, называемом utils, вызовите эту функцию со следующим кодом (например, чтобы вывести слово «Настройки».

NSLog( [utils localized:@"Settings"] );

Чтобы изменить язык:

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:langCode, nil] forKey:@"AppleLanguages"];
5 голосов
/ 15 апреля 2011

Используйте для установки языкового порядка силой

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en",@"de",..., nil] forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];

затем используйте

NSLocalizedString();

чтобы показать локализованную строку ...

5 голосов
/ 01 мая 2011

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

вот пост, который я написал для этого http://learning -ios.blogspot.com / 2011/04 / advance-localization-in-ios-apps.html

и вот код одного примера приложения https://github.com/object2dot0/Advance-Localization-in-ios-apps

1 голос
/ 19 ноября 2009

Правильный «пользовательский опыт» для пользователя, чтобы выбрать свой язык с помощью панели системных настроек; не ваше приложение (или панель настроек вашего приложения и т. д.). Невозможно переопределить это приложение для каждого приложения, и вы не захотите, чтобы какое-либо приложение изменило настройки всей системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...