有什么方法可以在界面生成器中插入 NSLocalizedString。例如,将标签文本设置为本地化字符串而不是静态字符串?
我真的很讨厌为每个需要本地化字符串的项目创建一个属性。
有什么方法可以在界面生成器中插入 NSLocalizedString。例如,将标签文本设置为本地化字符串而不是静态字符串?
我真的很讨厌为每个需要本地化字符串的项目创建一个属性。
即使这篇文章很旧,对于那些对自动本地化您的 IB 文件感兴趣的人,请查看:https ://github.com/angelolloqui/AGi18n
免责声明:我是图书馆的开发者
您可以使用高级用户定义的运行时属性:
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 String 你的字符串要本地化
为避免创建一堆类别,只需创建一个对 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 提到的相同的事情。这是完整的代码。