14

有什么方法可以在界面生成器中插入 NSLocalizedString。例如,将标签文本设置为本地化字符串而不是静态字符串?

我真的很讨厌为每个需要本地化字符串的项目创建一个属性。

4

6 回答 6

6

这篇文章可能会给你一些提示:

http://blog.wilshipley.com/2009/10/pimp-my-code-part-17-lost-in.html

于 2010-11-02T17:32:01.087 回答
2

即使这篇文章很旧,对于那些对自动本地化您的 IB 文件感兴趣的人,请查看:https ://github.com/angelolloqui/AGi18n

免责声明:我是图书馆的开发者

于 2013-03-19T09:24:59.063 回答
2

您可以使用高级用户定义的运行时属性:

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 你的字符串要本地化

在此处输入图像描述

于 2014-04-26T08:23:48.363 回答
2

为避免创建一堆类别,只需创建一个对 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
于 2014-06-19T23:50:21.193 回答
1

NSLocalizedString 不是本地化 Interface Builder 文件的推荐方法。签出ibtool

http://www.bdunagan.com/2009/03/15/ibtool-localization-made-easy/

于 2010-11-02T16:46:03.540 回答
0

我做了与@OAK 提到的相同的事情。这是完整的代码。

Interface Builder 本地化 HowTo

于 2014-09-30T20:09:48.070 回答