localizedStringWithFormat

localizedStringWithFormat

请注意

我不是在问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];

与最后一个有什么不同?

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

更新

好吧,此刻我正在使用一种愚蠢的方法,似乎只是在滥用一切,哈哈。

如果我做...
NSString *myString = [NSString stringWithFormat:@"%@:  %f", NSLocalizedString(@"Cost"), 1234.56];

然后,它翻译了单词“Cost”,但没有为数字使用正确的语言环境。

如果我用...
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];

这会在翻译文件中添加“费用”,并将数字转换为正确的语言环境,但似乎我在这里使用了很多多余的东西。

最佳答案

当您想到NSLocalizedStrings时,请考虑键/值。您可以使用该键玩一些花样,例如第二个示例:

@"Cost:  %f"
这是一个关键-值可能看起来像@“SomeOtherWord:%f”,-之后%f仍被用作格式字符串的一部分。
您给出的最后一个示例:
NSString *myString = [NSString stringWithFormat:@"%@:  %f", NSLocalizedString(@"Cost"), 1234.56];
允许您通过重置字符串来分离出“费用”一词的翻译,这可能很好-但可能不足以有效地传达所有语言的含义。也许有一种语言您不会使用Label:value,那么仅翻译“Cost”并不能使您获得良好的本地化。
NSLocalizedString可以在大多数情况下提供帮助,但是本地化很困难,并且充满了特殊情况,因此您的代码也可能具有特殊情况-尽力使它们与其余逻辑隔离。
编辑:解决实际问题,因为它演变:
localizedStringWithFormat:
将改变格式说明符的替换方式。
从Apple的NSString文档中:

关于ios - localizedStringWithFormat如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26237549/

10-10 16:22