localizedStringWithFormat如何工作?

时间:2014-10-07 13:47:00

标签: ios objective-c nsstring nslocalizedstring stringwithformat

请注意

我不是在询问NSLocalizedString()宏。我问的是NSString类函数+ (instancetype)localizedStringWithFormat:(NSString *)format, ...

这是两件事。

问题

我正在尝试使用NSString类方法localizedStringWithFormat,但我无法理解我应该如何使用它。

无论我尝试什么,我似乎都没有使用Xcode 6 export for localization将翻译文件中的单词显示出来。我在这里尝试了前两种变化,但没有。

文档中的示例显示了......

NSString *myString = [NSString localizedStringWithFormat:@"%@:  %f", @"Cost", 1234.56];

这是否意味着我必须将翻译的单词与数字分开?即我不能只使用......

NSString *myString = [NSString localizedStringWithFormat:@"Cost:  %f", 1234.56];

如果我可以使用这个,那么翻译的短语是什么?翻译是什么?

如果没有,那么为什么要使用它呢?为什么不直接使用......

NSString *myString = [NSString stringWithFormat:@"%@:  %f", NSLocalizedString(@"Cost"), 1234.56];

最后一个有什么不同?

无论哪种方式,有人可以告诉我如何获得翻译的实际单词。

更新

好的,目前我正在使用一个愚蠢的工作,似乎是在滥用一切lol。

如果我......

NSString *myString = [NSString stringWithFormat:@"%@:  %f", NSLocalizedString(@"Cost"), 1234.56];

然后它翻译了“费用”这个词,但没有使用正确的数字区域设置。

如果我使用......

NSString *myString = [NSString localizedStringWithFormat:@"%@:  %f", @"Cost", 1234.56];
// or
NSString *myString = [NSString localizedStringWithFormat:@"Cost:  %f", 1234.56];

然后Xcode“导出本地化”完全忽略它,并且根本没有任何关于“成本”的内容被添加到翻译文件中,所以没有任何内容被翻译。

所以,我已经使用了......

[NSString localizedStringWithFormat:@"%@:  %f", NSLocalizedString(@"Cost", @"Cost context stuff..."), 1234.56];

这会为翻译文件添加“成本”,并将数字转换为正确的区域设置,但似乎我在这里使用了大量冗余内容。

1 个答案:

答案 0 :(得分:8)

当你想到NSLocalizedStrings时 - 想想关键/价值。您可以使用键来玩一些技巧,就像第二个例子一样:

@"Cost:  %f"

这是一个关键 - 值可能看起来像@" SomeOtherWord:%f", - %f后来仍然是格式字符串的一部分。

你给出的最后一个例子:

NSString *myString = [NSString stringWithFormat:@"%@:  %f", NSLocalizedString(@"Cost"), 1234.56];

允许您单独翻译单词" Cost"重置字符串,这可能没什么问题 - 但可能不足以有效传达你所有语言的含义。也许有一种语言,你不会标记:价值,然后只是翻译"成本"并没有让你获得良好的本地化。

NSLocalizedString可以帮助解决大多数情况,但是本地化很难并且充满了特殊情况,因此您的代码也可能有特殊情况 - 只需尽量将这些与其他逻辑隔离开来。

编辑:解决实际问题的演变:

localizedStringWithFormat:

将更改格式说明符的替换方式。

来自Apple的NSString文档:

  

讨论

     

此方法等效于使用initWithFormat:locale:并将当前语言环境作为语言环境参数传递。