Локализация iPhone для файлов XIB

Я только знакомлюсь с локализацией файлов XIB и мне было интересно, есть ли способ локализации строк в XIB, ссылаясь непосредственно на списки...

Ценю некоторые мысли..

4 ответа

Если вы не хотите локализовать файлы.xib напрямую, вы можете извлечь текст, который они содержат, в файлы.strings и, как только файлы.strings переведены, вставить их обратно в файл.xib для создания локализованных версий. Эти операции извлечения / ввода выполняются с использованием ibtool полезность.

Я нашел подробные инструкции о том, как сделать это на этом сайте.

Мой метод основывается на ответе @Clafou, однако он может быть более простым. Я просто установил IBOutlets для своих кнопок и строк меток (созданных на xib) в моем контроллере.h.

 @interface DetailViewController : UIViewController {


IBOutlet UILabel *TitleLabelMain;

}

Затем пошел к моему контроллеру.m и присвоил этим меткам и кнопкам значение с NSLocalizableStrings.

- (void)viewWillAppear:(BOOL)animated {

TitleLabelMain.text = NSLocalizedString(@"titleLabel",nil);

И, конечно, вам понадобится значение, определенное в Localizable.strings

"titleLabel" = "THIS TEXT IS LOCALIZED!";

Apple предложила способ сделать это, чтобы экспортировать строки в .strings файлы в .lproj связки, которые будут выключены структурой локализации Какао.

Xcode может генерировать .strings файлы из XIB, которые делают локализацию довольно простой.

Щелкните правой кнопкой мыши файл XIB в XCode и выберите Get Info, Выберите General вкладка и в нижней части нажмите Make File Localizable, Тогда вы сможете добавить локализации, нажав Add Localization на той же вкладке.

Я бы порекомендовал этот учебник для пошаговой информации (и красивые картинки).

Я думаю, что локализация XIBS напрямую не является хорошим вариантом. Я использую https://github.com/steipete/Aspects чтобы подключить метод UILabel для awakeFromNib и локализовать там текст. Пример:

 #define Localized(_v_) NSLocalizedString(_v_, nil)
 NSError *err = nil;
[UILabel aspect_hookSelector:@selector(awakeFromNib)
                 withOptions:AspectPositionAfter
                  usingBlock:^(id<AspectInfo> aspectInfo) {
                      UILabel *label = aspectInfo.instance;
                      NSString *lStr = Localized(label.text);
                      if (lStr) {
                          label.text = lStr;
                      }
} error:&err];
Другие вопросы по тегам