Ответ 1
У этого сообщения могут быть некоторые подсказки для вас:
http://blog.wilshipley.com/2009/10/pimp-my-code-part-17-lost-in.html
Есть ли способ вставить NSLocalizedString в конструктор интерфейса. Например, установите текст метки в локализованную строку вместо статической строки?
Мне очень жаль создавать свойство для каждого элемента, для которого требуется локализованная строка.
У этого сообщения могут быть некоторые подсказки для вас:
http://blog.wilshipley.com/2009/10/pimp-my-code-part-17-lost-in.html
Даже если этот пост старый, для тех, кто заинтересован в автоматической локализации ваших файлов IB, проверьте это: https://github.com/angelolloqui/AGi18n
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я являюсь разработчиком библиотеки
Вы можете использовать расширенные атрибуты Runtime User Defined Runtime:
http://cupobjc.blogspot.com.es/2014/04/interfaz-builder-localization.html
Сначала определите новую категорию для UILabel:
#import "UILabel+Localized.h"
@implementation UILabel (Localized)
-(void) setTextLocalized:(NSString *)aText{
[self setText:NSLocalizedString(aText, nil)];
}
@end
Затем в построителе интерфейса пользовательские атрибуты времени выполнения:
textLocalized Строка вашей строки в локализованной
Чтобы избежать создания группы категорий, создайте только один, который классифицирует NSObject, а затем проверяет isKindOfClass, как было предложено. См. Код ниже:
#import "NSObject+Localized.h"
@implementation NSObject (Localized)
///
/// This method is used to translate strings in .xib files.
/// Using the "User Defined Runtime Attributes" set an entry like:
/// Key Path: textLocalized
/// Type: String
/// Value: {THE TRANSLATION KEY}
///
-(void) setTextLocalized:(NSString *)key
{
if ([self isKindOfClass:[UILabel class]])
{
UILabel *label = (UILabel *)self;
[label setText:NSLocalizedString(key, nil)];
}
else if ([self isKindOfClass:[UIButton class]])
{
UIButton *button = (UIButton *)self;
[button setTitle:NSLocalizedString(key, nil) forState:UIControlStateNormal];
}
else if ([self isKindOfClass:[UIBarButtonItem class]])
{
UIBarButtonItem *button = (UIBarButtonItem *)self;
[button setTitle:NSLocalizedString(key, nil)];
}
}
@end
NSLocalizedString не является рекомендуемым способом локализации файлов Interface Builder. Проверьте ibtool
:
http://www.bdunagan.com/2009/03/15/ibtool-localization-made-easy/
Я сделал то же, что и @OAK. Вот полный код.