localizedStringWithFormat如何工作?

Fog*_*ter 13 objective-c nsstring stringwithformat nslocalizedstring ios

请注意

我不是在问NSLocalizedString()宏.我问的是NSString班级功能+ (instancetype)localizedStringWithFormat:(NSString *)format, ....

这是两件不同的事情.

我正在尝试使用NSString类方法,localizedStringWithFormat但我无法弄清楚我应该如何使用它.

无论我尝试什么,我似乎都没有使用Xcode 6在翻译文件中出现这些词export for localization.我在这里尝试了前两种变化,但没有.

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

NSString *myString = [NSString localizedStringWithFormat:@"%@:  %f", @"Cost", 1234.56];
Run Code Online (Sandbox Code Playgroud)

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

NSString *myString = [NSString localizedStringWithFormat:@"Cost:  %f", 1234.56];
Run Code Online (Sandbox Code Playgroud)

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

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

NSString *myString = [NSString stringWithFormat:@"%@:  %f", NSLocalizedString(@"Cost"), 1234.56];
Run Code Online (Sandbox Code Playgroud)

最后一个有什么不同?

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

更新

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

如果我做...

NSString *myString = [NSString stringWithFormat:@"%@:  %f", NSLocalizedString(@"Cost"), 1234.56];
Run Code Online (Sandbox Code Playgroud)

然后它翻译了"成本"这个词,但没有使用正确的数字区域设置.

如果我用...

NSString *myString = [NSString localizedStringWithFormat:@"%@:  %f", @"Cost", 1234.56];
// or
NSString *myString = [NSString localizedStringWithFormat:@"Cost:  %f", 1234.56];
Run Code Online (Sandbox Code Playgroud)

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

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

[NSString localizedStringWithFormat:@"%@:  %f", NSLocalizedString(@"Cost", @"Cost context stuff..."), 1234.56];
Run Code Online (Sandbox Code Playgroud)

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

Kir*_*ani 9

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

@"Cost:  %f"
Run Code Online (Sandbox Code Playgroud)

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

你给出的最后一个例子:

NSString *myString = [NSString stringWithFormat:@"%@:  %f", NSLocalizedString(@"Cost"), 1234.56];
Run Code Online (Sandbox Code Playgroud)

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

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

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

localizedStringWithFormat:
Run Code Online (Sandbox Code Playgroud)

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

来自Apple的NSString文档:

讨论

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

  • 我从@HotLicks中发现`localizedStringWithFormat`根本没有翻译.它本地化数字格式等...即使它们具有相同的名称`localizedString`,它们实际上并不意味着相同的事情.我使用了你建议的方法,除了使用`localizedStringWithFormat ...`之外它现在都可以使用了:D (3认同)