我将制作一个多语言的iPad应用程序,我希望用户选择一个首选的语言。所以我的问题是,如何在运行时更改我的应用程序语言?我不想改变iPad语言。
答案 0 :(得分:3)
Apple指南不推荐。
我的解决方案(用户应该手动重新启动应用程序;“动态”处理语言切换“你应该重新加载包括XIB在内的所有资源”):
// 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;
}
答案 1 :(得分:1)
这已被问过几次。对此没有很好的解决方案,这是非常重要的(例如,当您更改语言时,iOS会重新启动)。有些人通过替换NSLocalizedString调用以及更改NIB加载来实现此目的,以便指定要使用的本地化版本。请参阅示例this other SO question。