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