Измените язык приложения iOS на лету

Я пишу приложение iOS, где хочу, чтобы пользователь мог менять язык пользовательского интерфейса независимо от языка iPhone или iPad. Вопрос в том, как я могу перезагрузить соответствующий файл NIB для отображаемого в настоящее время вида при изменении языка и как загрузить соответствующий файл .strings, чтобы NSLocalizedString работал надлежащим образом?

Ответ 1

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

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

Ответ 2

Лично мне не нравится идея передачи файлов NIB переводчикам. Вместо этого я проектирую NIB, поэтому достаточно места для неанглийских языков (как правило, им потребуется на 50% больше места для текста), а затем я сохраняю все текстовые ресурсы в файлах Localizable.strings.

Затем в моем коде я устанавливаю текст для каждого элемента управления пользовательского интерфейса.

[_myButton setTitle:NSLocalizedString(@"My button title", 
                                      @"My description for translation file, e.g. including chars limit")
           forState:UIControlStateNormal];

Я считаю, что это упрощает управление процессом перевода.

Чтобы ответить на исходный вопрос, вы должны поместить этот код в функцию viewWillAppear вашего UIView, чтобы убедиться, что он перезагружается каждый раз, когда пользовательский интерфейс снова появляется.