NSLocalizedString未返回本地化文本XCode4

时间:2012-04-16 06:49:18

标签: macos cocoa localization nslocalizedstring

创建新的cocoa应用程序后,我添加了本地化字符串文件localizeFile.strings(英文)和localizeFile.strings(西班牙文)

在localizeFile.strings(英文)文件中,我添加了" TITLE" ="你好!&#34 ;;

在localizeFile.strings(西班牙语)文件中,我添加了" TITLE" =" Hola!";

在我的课堂上,我尝试使用以下语句访问操作中的本地化英语文本

-(IBAction)english:(id)sender
{
   // NSString *engText = [[NSBundle mainBundle] localizedStringForKey:@"TITLE" value:@"" table:nil];
    NSString *engText = NSLocalizedString(@"TITLE", nil);
    NSLog(@"engText %@",engText);
    [displayText setStringValue:engText];
}

-(IBAction)spanish:(id)sender
{
    NSString *spanText = NSLocalizedString(@"TITLE", nil);
      NSLog(@"spanText %@",spanText);
    [displayText setStringValue:spanText];
}

这里displayText是NSTextField,在同一个窗口中有两个动作。

我在控制台中看到,单击按钮时,engText TITLE而不是engText Hello。

有人可以指导我如何获取本地化字符串?请帮助

1 个答案:

答案 0 :(得分:3)

听起来应用程序不知道localizeFile.strings。您是否声明了应用程序的语言?您的创建个人资料中是否有复制规则?

修改

您可以在此处添加语言(红色箭头): enter image description here

第二次编辑

如果要使用未在系统级别设置的语言,可以执行以下操作:

    // Assume you have defined constants, e.g. 1 - English, 2 - Espanol, 3 - ....
    switch (language) {
        case kLangEn: // =1
            path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
            break:
        case kLangEs: // =2
            path = [[NSBundle mainBundle] pathForResource:@"es" ofType:@"lproj"];
            break:
           // etc.
    }
    NSBundle *languageBundle = [NSBundle bundleWithPathath];
    NSString *str = [languageBundle localizedStringForKey:key value:@"" table:nil];