8

请注意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]; 

这最后一个有什么不同?

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

更新

OK,现在我使用的是一个愚蠢的解决办法,只是似乎被滥用的一切笑。

如果我做...

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

@matt是的,我已经看到了。我无法获得翻译的文字。我试过了我能想到的所有东西,但是这些词似乎并没有出现在翻译文件中。我得到翻译的数字格式,然后是英文文本。 – Fogmeister 2014-10-07 13:52:07

+0

@matt是的,我们已经翻译成15种语言,每种语言约有50个字。这是唯一不起作用的位。我现在更新了这个问题。 – Fogmeister 2014-10-07 13:56:09

+0

@matt我不确定这些最后两条评论的含义是什么?我知道翻译取决于我。我知道语言环境与语言不同。这些事实都不能帮助我获得翻译的文本。 – Fogmeister 2014-10-07 13:57:04

回答

5

当你想到NSLocalizedStrings - 认为键/值。你可以玩一些花样配钥匙,就像你的第二个例子:

@"Cost: %f" 

这是一个关键 - 的价值可能会是一些看起来像@“SomeOtherWord:%F” - %F仍在使用之后是格式字符串的一部分。

的最后一个例子,你给:

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

允许你分开了“成本”这个词与串的复位,这可能是罚款的翻译 - 但可能不足以有效地传达你的意思在所有语言中。也许有一种语言,你不会标签:价值,然后只是翻译“成本”并没有让你良好的本地化。

NSLocalizedString可以帮助解决大多数情况,但是本地化很困难并且存在特殊情况,所以您的代码也可能有特殊情况 - 只是尽力保持与逻辑的其余部分隔离。

编辑:解决实际问题,因为它演变:

localizedStringWithFormat: 

会改变格式说明如何更换。

从苹果公司的NSString的文档:

讨论

这种方法相当于使用initWithFormat:区域:并通过当前的语言环境,语言环境参数。

+0

这就是我首先想到的(文本是关键)。但是,当我使用它时,没有任何内容被添加到翻译文件中以实际翻译它。 Xcode的本地化功能出口可能是一个错误吗? – Fogmeister 2014-10-07 15:28:46

+0

如果你分两步做,会发生什么?首先得到NSLocalizedString(key),然后做一个stringWithFormat :. XCode是否正确填充事物? – KirkSpaziani 2014-10-07 16:13:55

+0

尝试命令行版本:“xcodebuild -exportLocalizations”可能有一些有用的输出。或者可能,它是localizedStringWithFormat上的一个缺陷/缺失功能: – KirkSpaziani 2014-10-07 16:20:21