如何在IB [iPhone SDK]中使用NSLocalizedString?

7
当我通过编程方式分配文本时,我可以使用NSLocalizedString(...),但是如果我直接在IB中编写文本(例如对于UILabel),该如何进行本地化?
5个回答

12

一个解决方案是创建多个本地化的nib文件。如果您的本地化需求非常简单,并且只是在开发结束时将资源交给专业软件本地化人员,那么这可能是最好的选择。

如果您正在开发过程中进行本地化,并且UI正在快速更改,则重复的nib文件可能会带来很大的麻烦,因为每次UI调整都必须在每个本地版本的nib中进行复制。为了避免这种情况,在您的视图控制器中需要编写一些代码来处理设置本地化字符串,通常是在视图控制器的-viewDidLoad方法中。确保每个具有本地化文本的控件都是IBOutlet,并在IB中将它们连接到您的视图控制器。然后,您的视图控制器的-viewDidLoad会看起来像这样:

- (void)viewDidLoad {
    [super viewDidLoad];
    hello.text = NSLocalizedString(@"Hello", @"Hello label");
    world.text = NSLocalizedString(@"world", @"world label");
    // ... etc
}

你需要在 -viewDidLoad 中完成此类型的视图设置,因为你的nib中的对象直到-init方法运行之后才完全创建。 -viewDidLoad-init方法运行之后但在视图变为可见之前运行。


6

3
你可以为每个语言环境创建多个.nib文件版本。还有一些工具可以让您轻松地编辑其中的字符串。苹果公司在这方面有相当不错的文档

2
我是一名有用的助手,可以翻译文本。
我正在寻找解决方案,不一定针对 iPhone,而是针对 XCode/IB 的一般情况。所有参考资料都没有涉及到你可能需要一个内部密钥来指示状态,并希望在标签或文本单元格中显示与该键对应的本地化字符串的事实。我没有找到关于如何存储例如共享用户默认设置中的键值的标准方法,并在标签中显示该键值的本地化字符串。
我找到了一个解决方案,它不需要很多编码并且符合ib中的绑定要求。
首先,您需要提供一个文件 Localizable.strings,例如包含一行
"MyKeyValue" = "Localized display label";

现在你可以使用如下代码进行键值本地化:NSLocalizedString(aKeyValue,nil)。

在标签中,你没有发现任何处理NSLocalizedString的值转换器。 因此,我创建了一个名为KeyToLocalizedStringTransformer的类来将键值转换为本地化字符串:

@interface KeyToLocalizedStringTransformer : NSValueTransformer {}

@implementation KeyToLocalizedStringTransformer

+ (Class)transformedValueClass
{
    return [NSString class];
}

+ (BOOL)allowsReverseTransformation
{
    return NO;
}

- (id)transformedValue:(id)aValue
{
    NSString *NLString = [NSString stringWithString:NSLocalizedString(aValue,nil)];
return NLString;
}

准备的最后一步是在 +initialize: 中注册转换器,例如:

NSValueTransformer *transformer = [[KeyToLocalizedStringTransformer alloc] init];
[NSValueTransformer setValueTransformer:transformer forName:@"KeyToLocalizedStringTransformer"];   

现在你可以在文本字段或单元格的绑定中使用值转换器(如果你只看到NSUnArchiveFromData等,请直接输入名称...)。对不起,这里没有IB的图片,因为我是新手,"没有声望":你必须想象绑定到共享用户默认控制器,Kontroller键:值,模型关键路径:MyStateKey和如上所述的值转换器。结果是,在nl重复的nib中不需要做任何事情,只需在Localizable.strings中翻译字符串即可。

0
从iOS 7和Xcode 5开始,应尽可能避免使用NSLocalizedString。首选方法称为“基本本地化”,并通过Storyboard工作。这将为您节省大量工作。如果您在谷歌上搜索“基本本地化”,您将找到足够的教程来帮助您入门。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接