ios localizable.strings файл для файлов xib?
-
27-10-2019 - |
Вопрос
Я перевожу проект iOS на португальский язык, и я создал файл pt.lproj/localizable.strings, и я добавил nslocalizedstring () в исходный код. Все работает! С одной небольшой проблемой - строки в файлах XIB не переводятся ... Я знаю, что это за дизайн.
Я видел, что команда iBtool может использоваться для разрыва строк из файла XIB с именем x и положить ее в файл, называемый x.strings ... но мой вопрос в том, есть ли способ вытащить строки из всех XIB Файлы и поместите их все в один файл .strings (например, localizable.strings? или даже другой, называемый xibs.strings, будет в порядке?)
Решение
У вас есть два варианта, как перевести файлы XIB. Одним из них вы подключаете элементы пользовательского интерфейса к выходам и устанавливаете свои строки в своем методе ViewDidload, используя NSLocalizedString
макросы.
Второй вариант - предоставить отдельный XIB для каждого языка, который поддерживает ваше приложение. Вам не нужно создавать их вручную, вы можете использовать ibtool
Команда (я предполагаю, что ваш исходный язык - английский, а цель - португальский):
ibtool --strings-file pt.lproj/Example.strings en.lproj/Example.xib –write pt.lproj/Example.xib
Чтобы собрать строки, найденные в вашем проекте, вы можете использовать genstrings
Команда - однако я рекомендую использовать это Скрипт Python Чтобы собрать все свои строки - он может хорошо справиться с ситуацией, когда вам нужно добавить/удалить строки в свое приложение, не переводив и/или вручную объединять все предыдущие строки
Редактировать
О, и я нашел статья что я узнал этот трюк от
Другие советы
Я сделал категорию, чтобы сделать это:
@implementation UIView (Localise)
- (void)localise
{
[self.subviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) {
[view localise];
if ([view isKindOfClass:[UILabel class]]) {
UILabel *label = (UILabel *)view;
[label setText:NSLocalizedString(label.text, nil)];
}
}];
}
Затем в ваших взглядах:
- (void)awakeFromNib
{
[super awakeFromNib];
[self localise];
}
Вам нужно будет добавить поддержку другим элементам пользовательского интерфейса (TextField.Placeholder = nSlocal ... Blah Blah), но это поможет Uilabel и детям.
Наверное, не отличная производительность, но делает работу.
Это будет зависеть от приложения и количества локализаций, но в целом я предпочитаю отдельные файлы .xib, потому что макет может измениться. Поместите локализованные файлы в pt.lproj/.