iOS - NSLocalizedString仅返回密钥字符串

Bre*_*ett 8 localization objective-c nslocalizedstring ios

我在调试我的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); 
Run Code Online (Sandbox Code Playgroud)

仍然是值"KEY"打印,但是,path是一条有效的道路.

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

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

我也删除/清理了十几次应用程序.

小智 10

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

NSString *value = NSLocalizedStringFromTable(@"key", @"File", nil);
Run Code Online (Sandbox Code Playgroud)