Локализация 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];