2012-02-01 104 views
0

在我的应用程序中,用户可以选择一种语言,所以我希望我的应用程序相应地更改语言,但它不起作用。我在网上找到了这个代码:iPhone - 自定义语言设置

// Force languages 
NSString * lang=[[NSUserDefaults standardUserDefaults] stringForKey:@"idioma"]; 
NSLog(@"language %@",[[NSUserDefaults standardUserDefaults] stringForKey:@"AppleLanguages"]); 
if ([lang isEqualToString:@"castella"]) { 

    [[NSUserDefaults standardUserDefaults] 
    setObject:[NSArray arrayWithObject:@"es"] 
    forKey:@"AppleLanguages"]; 
} //else just default user lang 

此代码无效。我想我只是设置了另一个偏好设置。我真的想修改语言环境。我有一些本地化的字符串,也有一些NIB文件,所以我想将西班牙语添加到首选位置的首选语言环境列表中,但我并不真正了解如何执行此操作。

在应用程序的设置中,我可以选择语言。这不仅仅是出于我的存根;区域性语言在这里很重要,有时iPhone不提供对它们的支持,但我为翻译提供了支持。


从我决定放弃与区域设置搞乱的答案,但有可能呈现出不同的NIB文件(从en.proj或es.proj)?我已经有了第一部分:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
     NSString * lang=[[NSUserDefaults standardUserDefaults] stringForKey:@"idioma"]; 

     if ([lang isEqualToString:@"castella"]) { 
      //Load NIB filer from "es.proj". 
     } 
    } 
    return self; 
} 

这是可能的吗?

回答

0

区域设置应该由用户在iPhone设置中设置,我认为如果你从你的应用强制这个参数,你会离开你的沙盒,你的应用可能会被拒绝。

相反,在您的项目中添加localizations到您的NIB文件和/或Localizable.strings。您的应用会自动显示用户的最佳语言。

如果您仍然想要更改应用程序内的语言,请不要尝试更改区域设置,而只需更改您在应用程序中显示在屏幕上的内容。

您可以保存在[NSUserDefaults standardUserDefaults]所需的语言,并表示根据该参数您的标签:

if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"language"] isEqualToString:@"English"]) { 
    aLabel.text = @"This is English."; 
} else if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"language"] isEqualToString:@"Italian"]) { 
    aLabel.text = @"Questo e' italiano."; 
} else if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"language"] isEqualToString:@"Japanese"]) { 
    aLabel.text = @"これは日本語です。"; 
} 
+0

thnks,如果它可以被拒绝,然后我不想这样做,但我怎么能显示从es.proj或从en.proj的笔尖记入一些用户默认设置 – vallllll 2012-02-01 17:11:05

+0

iOS根据用户设置自动显示最佳选择。这意味着如果您的用户选择“es”语言,您的应用程序会显示您的NIB文件的“es”版本。 – Beppe 2012-02-01 17:21:53

+0

我对es有所了解,但它只是一个例子,对于一些罕见的语言,它并不是如此,有没有办法绕过它? – vallllll 2012-02-01 17:25:25

0

让用户第二次选择语言并不是一个好习惯(他们第一次在设置iPhone时这么做)。您最好选择当前的语言环境并从那里获取语言设置。