2011-05-06 43 views
5

我试图更改应用程序语言,但是当我关闭一个应用程序并再次运行它时,我在main.h语言chages中运行此代码。这有可能在不重新启动的情况下更改语言?仅在iPhone上重新启动后才能更改语言

int main(int argc, char *argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    NSArray *languages = [NSArray arrayWithObject:@"en_GB"]; 
    [[NSUserDefaults standardUserDefaults] setObject:languages forKey:@"AppleLanguages"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
} 
+0

请查看我在下面的帖子回答:http://stackoverflow.com/a/20257557/306764 – 2014-04-21 16:21:51

回答

3

更新回答“如何改变语言的应用程序内”

NSLocalizedString()(及其变型)访问NSUserDefaults的了“AppleLanguages”键,以确定哪些用户对首选语言设置。这将返回一组语言代码,第一个是用户为其电话设置的语言代码,如果资源不适用于首选语言,则会使用后续语言代码作为后备代码。

如果您希望通过使用setObject:forKey:方法来设置您自己的语言列表,您可以重写自己的应用程序的全局设置。这将优先于全局设置的值,并返回到您的应用程序中执行本地化的任何代码。代码如下:

[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"de", @"en", @"fr", nil] forKey:@"AppleLanguages"]; 

注意:为了安全起见,请确保使用适当的预定义语言名称。

下面是代码片段,但您必须在项目中包含所有本地化文件。

@implementation LocalizeLanguage 

static NSBundle *bundle = nil; 

+(void)initialize { 
    NSUserDefaults* defs = [NSUserDefaults standardUserDefaults]; 
    NSArray* languages = [defs objectForKey:@"AppleLanguages"]; 
    NSString *current = [[languages objectAtIndex:0] retain]; 
    [self setLocalizeLanguage:current]; 
} 

/* 
    [LocalizeLanguage setLocalizeLanguage:@"en"]; 
    [LocalizeLanguage setLocalizeLanguage:@"fr"]; 
*/ 

+(void)setLocalizeLanguage:(NSString *)lang { 
    NSLog(@"preferredLang: %@", lang); 
    NSString *path = [[ NSBundle mainBundle ] pathForResource:lang ofType:@"lproj" ]; 
    bundle = [[NSBundle bundleWithPath:path] retain]; 
} 

+(NSString *)get:(NSString *)key alter:(NSString *)alternate { 
    return [bundle localizedStringForKey:key value:alternate table:nil]; 
} 

@end 
+3

好了,但我已经这样做了:),一切工作perfectlly罚款。我想添加一个在应用程序Settings.app中更改语言的可能性,所以当前的iPhone语言是英语时。但用户为我的应用程序设置了法语我的Settings.app我必须强制我的应用程序以法语本地化。我试图用我之前编写的代码来做到这一点,它的工作原理,但我需要重新启动应用程序后,这是我试图解决的问题。 – pawelini1 2011-05-06 14:10:27

+0

我已经更新了答案 - 但没有必要去做你想做的事情。 iOS支持操作系统内置的本地化 - 您只需提供适当的语言文件,用户就可以选择他想要的语言。但无论如何,这将为你工作 - 祝你好运! :) – Deminem 2011-05-06 19:29:33

+1

我得到了完全相同的问题! – 2012-03-15 19:33:29

相关问题