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

如何在IB[iPhone SDK]中使用NSLocalizedString?,iphone,localization,Iphone,Localization,当我以编程方式分配文本时,我可以使用NSLocalizedString(..),但是如果我直接在IB中写入文本(比如UILabel),我如何对其进行本地化?您可以为每个语言环境创建.nib文件的多个版本。还有一些工具可以让您轻松编辑其中的字符串。苹果在这方面做得很好。这是一个庞大而复杂的话题。一个好的起点是,还有一个解决方案是创建多个本地化的nib文件。如果您的本地化需求非常简单,并且您只需在开发结束时将资源交给专业的软件本地化人员,那么这可能最有效 如果您在开发过程中进行本地化,并且UI变化很

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

您可以为每个语言环境创建.nib文件的多个版本。还有一些工具可以让您轻松编辑其中的字符串。苹果在这方面做得很好。

这是一个庞大而复杂的话题。一个好的起点是,还有一个解决方案是创建多个本地化的nib文件。如果您的本地化需求非常简单,并且您只需在开发结束时将资源交给专业的软件本地化人员,那么这可能最有效

如果您在开发过程中进行本地化,并且UI变化很快,那么重复的nib文件可能是一大难题,因为每个UI tweek都必须在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
之后但在视图可见之前运行。

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

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

首先提供一个可本地化的文件.strings,例如带有包含

"MyKeyValue" = "Localized display label";
现在可以使用:NSLocalizedString(aKeyValue,nil)本地化键值

在标签中,您没有找到任何处理本地化字符串的值转换器。 因此,我创建了一个类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;
}
准备的最后一步是注册变压器,例如在+初始化:

NSValueTransformer *transformer = [[KeyToLocalizedStringTransformer alloc] init];
[NSValueTransformer setValueTransformer:transformer forName:@"KeyToLocalizedStringTransformer"];   
现在,您可以在文本字段或单元格的绑定中使用值转换器(如果只看到nsunachivefromdata等,只需键入名称)

很抱歉,这里没有来自IB的图像,因为我是新来的,“没有声誉”:您必须想象绑定到共享用户默认控制器、Kontroller key:values、Model key Path:MyStateKey和所述的值转换器


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

从iOS 7&Xcode 5开始,尽可能避免使用NSLocalizedString。首选方法称为“基本本地化”,并通过故事板工作。这将为你节省很多工作。如果你在谷歌上搜索“基本本地化”,你会找到足够多的教程让你继续学习