Я унаследовал проект, который уже использует этот подход к динамическому переключению с одной локализации на другую, когда дело доходит до перевода строк.
Суть прямолинейна.. на основе языка, выбранного пользователем. Определите файл локализованных строк (т.е. /path/to/app/Resources/Storyboard/en.lproj
), а затем используйте что-то вроде
NSLocalizedStringFromTableInBundle(text, @"", [LanguageGateway currentLocalizedBundle], nil)
чтобы локализовать строки. Все идет нормально.
Проблема возникает, когда я пытаюсь сделать то же самое с раскадровки. Я создал две локализованные версии моих раскадровки (вдохновение из этого учебника.. но основное различие заключалось в том, что я не мог выбрать use base internationalization
опция b/c Я просто не мог выбрать базовые файлы), а затем где-то в моем методе локализации у меня было это:
- (void)launchLocalized {
NSLog(@"switching to bundle %@", [LanguageGateway currentLocalizedBundle]);
storyBoard_ = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[LanguageGateway currentBundle]];
в моих журналах я получил это:
switching to bundle NSBundle </path/to/App.app/en.lproj> (not yet loaded)
Could not load the "aboutUsMenuButton.png" image referenced from a nib in the bundle with identifier "(null)"
Could not load the "feedbackMenuButton_ar.png" image referenced from a nib in the bundle with identifier "(null)"
поэтому, видимо, локализованный пучок занимает некоторое время, чтобы загрузить. и в результате происходит странность (т.е. он не может правильно отображать изображения, и все становится неудобно).
вопрос:, как я могу обойти это? есть ли способ избежать этого состояния гонки и ждать, пока пакет не будет загружен, прежде чем получать изображения из него? В большинстве учебных пособий (например, на которых я ссылался) они полагаются на выход из приложения, а затем меняют настройки языка телефона. Я не хочу, чтобы это произошло. Я хочу, чтобы использование позволяло переключать языки внутри самого приложения.