8

我在调试我的NSLocalizedString实现时遇到了一些麻烦。应该很简单,但是无论我做什么,该函数都只返回KEY字符串。

我正在使用 XCode 4.5 和 iOS6,所以我:

  1. 添加了一个名为File.strings.
  2. 在我的项目设置中,我添加了英语和西班牙语作为语言设置。
  3. 单击文件检查器中的“本地化”,并确保选择了英语和西班牙语选项,并且选择了我的目标的目标成员资格。
  4. 添加"KEY" = "TestEnglish";到我的英语File.strings
  5. 添加"KEY" = "TestSpanish";到我的西班牙语中File.strings
  6. 添加NSLog(@"Localization: %@\n", NSLocalizedString(@"KEY", nil));到我的.m文件中。

当我运行应用程序时,该值"KEY"始终显示在NSLog.

为了更深入地了解这一点,我也尝试了这个:

NSString *path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
NSString *str = [[NSBundle bundleWithPath:path] localizedStringForKey:@"KEY" value:@"" table:nil];
NSLog(@"Localization: %@\n", str); 

"KEY并且仍然打印了值" ,但是,path它是一个有效的路径。

有谁知道如何调试这个?我觉得我已经阅读了所有 SO 问题/答案,但没有任何建议有帮助。

我意识到当它无法匹配键时NSLocalizedString返回KEY字符串,但我不知道如何调试我的应用程序可能与键不匹配的原因。

我还删除/清理了应用程序大约十几次。

4

3 回答 3

10

如果您指定table:nilNSBundle则将尝试从默认表( 中的表SOMELANG.lproj/Localizable.strings)中获取本地化。如果您在其他地方进行了本地化,则应使用table:@"File"(或NSLocalizedStringFromTable()以类似方式使用宏)显式指定表:

NSString *value = NSLocalizedStringFromTable(@"key", @"File", nil);
于 2012-12-21T17:30:56.273 回答
1

将 InfoPlist.strings 文件重命名为 Localizable.strings(双击),然后您将获得该键的正确字符串。

于 2014-07-07T19:48:04.910 回答
1

在我的情况下,问题在于字符串的情况:“bla.bla.blabla.Book S lot”,而 Localizable.strings 将其定义为“bla.bla.blabla.Book s lot”

因此,请仔细检查密钥字符串的大小写是否正确。更好的是,复制粘贴。

于 2014-07-15T13:47:35.913 回答