iPhone - 自定义语言设置

时间:2012-02-01 16:49:51

标签: iphone locale

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

// 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;
}

这甚至可能吗?

2 个答案:

答案 0 :(得分:0)

让用户第二次选择语言(他们在设置iPhone时第一次这样做)并不是一个好习惯。你最好从现在的语言环境中获取语言设置。

答案 1 :(得分:0)

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

而是在您的NIB文件中添加localizations和/或在项目中添加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 = @"これは日本語です。";
}