请注意
我不是在问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/