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

时间:2009-07-07 19:17:29

标签: iphone localization

当我以编程方式分配文本时,我可以使用NSLocalizedString(....),但如果我直接在IB中写文本(比如UILabel)我该如何本地化呢?

5 个答案:

答案 0 :(得分:11)

一种解决方案是创建多个本地化的nib文件。如果您的本地化需求非常简单,并且您只是在开发结束时将资源转移到专业软件本地化程序,那么这可能效果最佳。

如果您在开发过程中进行本地化并且UI正在快速变化,那么重复的nib文件可能会非常麻烦,因为必须在每个本地版本的nib中复制每个UI tweek。为避免这种情况,您需要在视图控制器中编写一些代码来处理设置本地化字符串,通常在视图控制器的-viewDidLoad方法中。确保每个具有本地化文本的控件都是IBOutlet,并将它们连接到IB中的视图控制器。那么你的视图控制器的-viewDidLoad将如下所示:

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

您在-viewDidLoad中执行此类视图设置,因为在运行-init方法之后,之前的对象才会完全创建。 -viewDidLoad-init后但在您的视图可见之前运行。

答案 1 :(得分:6)

这是一个庞大而复杂的话题。一个好的起点是Introduction to Internationalization Programming Topics,还有Preparing Your Nib Files for Localization

答案 2 :(得分:3)

您可以为每个区域设置创建.nib文件的多个版本。还有一些工具可以让您轻松编辑其中的字符串。 Apple对此有pretty good documentation

答案 3 :(得分:2)

我也在寻找解决方案,不一定是针对iPhone,而是一般的XCode / IB。所有引用都没有涉及这样一个事实:您可能需要在内部指示一个状态,并希望在与该键对应的标签或文本单元格中为用户显示本地化字符串。我没有在第一步找到标准方法如何存储例如共享用户默认值中键的键值,并在标签中显示该键值的本地化字符串。

我找到了一个解决方案,它不需要很多编码,并且符合ib中的绑定。

首先提供一个Localizable.strings文件,例如包含

的行
"MyKeyValue" = "Localized display label";

现在您可以使用以下命令本地化键值:NSLocalizedString(aKeyValue,nil)。

在标签中,您没有找到任何处理NSLocalized String的值转换器。 所以我创建了一个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;
}

准备的最后一步是注册变压器,例如: in + initialize:

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

现在,您可以在文本字段或单元格的绑定中使用值转换器(如果只看到NSUnArchiveFromData,则只需键入名称等等)

抱歉没有来自IB的图片'因为我是新来的并且“没有声誉”:您必须想象绑定到共享用户默认控制器,Kontroller键:值,模型键路径:MyStateKey和值变换器为描述

因此,您不必在带有标签的nl重复笔尖中执行任何操作,只需在Localizable.strings中翻译字符串即可。

答案 4 :(得分:0)

来自iOS 7&在Xcode 5上,你应该尽可能避免使用NSLocalizedString。首选方法称为“基本本地化”,并通过Storyboard工作。它会为你节省很多工作。如果你谷歌进行'基础本地化',你会找到足够的教程来帮助你前进