我在调试NSLocalizedString
实施时遇到了一些问题。应该很简单,但无论我做什么,该函数只返回KEY
字符串。
我正在使用XCode 4.5和iOS6,所以我:
File.strings
。"KEY" = "TestEnglish";
添加到我的英文File.strings
"KEY" = "TestSpanish";
File.strings
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
是有效路径。
有没有人知道怎么调试这个?我觉得我已经阅读了那里的每一个问题/答案,但没有一个建议有帮助。
我意识到当NSLocalizedString
字符串与密钥不匹配时会返回KEY
字符串,但我看不出如何调试我的应用可能与KEY不匹配的原因。
我还删除/清理过该应用程序十几次。
答案 0 :(得分:10)
如果您指定table:nil
,则NSBundle
会尝试从默认表(SOMELANG.lproj/Localizable.strings
中的那个)中获取本地化。如果您在其他地方进行了本地化,则应使用table:@"File"
明确指定表格(或以类似方式使用NSLocalizedStringFromTable()
宏:
NSString *value = NSLocalizedStringFromTable(@"key", @"File", nil);
答案 1 :(得分:1)
在我的情况下,问题出在字符串的情况下: &#34; bla.bla.blabla.Book <强>取值强>很多&#34;而Localizable.strings将其定义为&#34; bla.bla.blabla.Book s 很多&#34;
因此,请仔细检查密钥字符串是否正确。更好的是,复制粘贴。
答案 2 :(得分:0)
将InfoPlist.strings文件重命名为Localizable.strings(double clic),然后您将获得该密钥的正确字符串。