iOS - NSLocalizedString仅返回密钥字符串

时间:2012-12-21 17:08:32

标签: ios objective-c localization nslocalizedstring

我在调试NSLocalizedString实施时遇到了一些问题。应该很简单,但无论我做什么,该函数只返回KEY字符串。

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

  1. 添加了一个名为File.strings
  2. 的新文件
  3. 在我的项目设置中,我添加了英语和西班牙语作为语言设置。
  4. 在文件检查器中点击“制作本地化”,并确保选择了英语和西班牙语选项,并且还选择了目标成员资格到目标。
  5. "KEY" = "TestEnglish";添加到我的英文File.strings
  6. 为我的西班牙语"KEY" = "TestSpanish";
  7. 添加了File.strings
  8. NSLog(@"Localization: %@\n", NSLocalizedString(@"KEY", nil));添加到我的.m文件中。
  9. 运行应用时,"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不匹配的原因。

    我还删除/清理过该应用程序十几次。

3 个答案:

答案 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),然后您将获得该密钥的正确字符串。