请注意
我不是在询问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];
这会为翻译文件添加“成本”,并将数字转换为正确的区域设置,但似乎我在这里使用了大量冗余内容。
答案 0 :(得分:8)
当你想到NSLocalizedStrings时 - 想想关键/价值。您可以使用键来玩一些技巧,就像第二个例子一样:
@"Cost: %f"
这是一个关键 - 值可能看起来像@" SomeOtherWord:%f", - %f后来仍然是格式字符串的一部分。
你给出的最后一个例子:
NSString *myString = [NSString stringWithFormat:@"%@: %f", NSLocalizedString(@"Cost"), 1234.56];
允许您单独翻译单词" Cost"重置字符串,这可能没什么问题 - 但可能不足以有效传达你所有语言的含义。也许有一种语言,你不会标记:价值,然后只是翻译"成本"并没有让你获得良好的本地化。
NSLocalizedString可以帮助解决大多数情况,但是本地化很难并且充满了特殊情况,因此您的代码也可能有特殊情况 - 只需尽量将这些与其他逻辑隔离开来。
编辑:解决实际问题的演变:
localizedStringWithFormat:
将更改格式说明符的替换方式。
来自Apple的NSString文档:
讨论
此方法等效于使用initWithFormat:locale:并将当前语言环境作为语言环境参数传递。