IPhone: NSLocalizedString в построителе интерфейса?

Есть ли способ вставить NSLocalizedString в конструктор интерфейса. Например, установите текст метки в локализованную строку вместо статической строки?

Мне очень жаль создавать свойство для каждого элемента, для которого требуется локализованная строка.

Ответы

Ответ 2

Даже если этот пост старый, для тех, кто заинтересован в автоматической локализации ваших файлов IB, проверьте это: https://github.com/angelolloqui/AGi18n

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я являюсь разработчиком библиотеки

Ответ 3

Вы можете использовать расширенные атрибуты 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 Строка вашей строки в локализованной

enter image description here

Ответ 4

Чтобы избежать создания группы категорий, создайте только один, который классифицирует 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