2011-12-05 53 views
1

我打算制作一个多语言的iPad应用程序,我希望用户选择一个首选的语言。所以我的问题是,如何在运行时更改我的应用程序语言?我不想改变iPad语言。iOS应用程序自定义本地化设置

回答

1

这已被问了几次。对此,没有很好的解决方案,这不是微不足道的(例如,注意iOS更改语言时会重启)。有些人通过替换NSLocalizedString调用以及更改NIB加载来实现此目的,以便指定要使用的本地化版本。例如参见this other SO question

+0

感谢您的答复。 – Krrish

3

这是不推荐由苹果指引。

我的解决方案(用户需要手动重新启动应用程序,来处理语言切换“对飞”,你应该重新加载所有资源,包括XIBs)是:

// Use "nil" to fallback to system settings 
void loadCustomLocalization(NSString * locCode) { 
    NSString * appleLanguages = @"AppleLanguages"; 
    if (locCode) { 
    [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:locCode] forKey:appleLanguages]; 
    } else { 
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:appleLanguages]; 
    } 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

void loadLocalization() { 
    const int result = [[[NSUserDefaults standardUserDefaults] stringForKey:@"language"] intValue]; 
    NSString * language = 0; 
    switch (result) { 
    case 1: language = @"ru"; break; 
    case 2: language = @"en"; break; 
    } 
    loadCustomLocalization(language); 
} 

int main(int argc, char *argv[]) { 
    loadLocalization(); 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
}