我想在不重新启动的情况下更改应用程序内的应用程序语言。
两种语言都有 Localized.strings 文件。我所有的 XIB 和主 Storyboard 也是如此。
下面的代码只能在重新启动应用程序后更改语言
main.m:
int main(int argc, char *argv[])
{
NSString *currLang = [[NSUserDefaults standardUserDefaults] stringForKey:@"Lang"];
if (!currLang) {
NSString *languageCode = [[NSLocale preferredLanguages] objectAtIndex:0];
if ([languageCode isEqualToString:@"ru"]) {
[[NSUserDefaults standardUserDefaults] setValue:languageCode forKey:@"Lang"];
}
else [[NSUserDefaults standardUserDefaults] setValue:@"en" forKey:@"Lang"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
currLang = nil;
currLang = [[NSUserDefaults standardUserDefaults] stringForKey:@"Lang"];
if ([currLang isEqualToString:@"ru"]) {
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"ru", @"en", nil]
forKey:@"AppleLanguages"];
}
else
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", @"ru", nil]
forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
该方法有 2 个按钮(英语和俄语):
- (IBAction)changeLang:(UIButton *)sender
{
if ([sender isEqual:btnSetRuLang]) {
if ([[userDefaults stringForKey:@"Lang"] isEqualToString:@"ru"]) {
return;
}
[userDefaults setValue:@"ru" forKey:@"Lang"];
[userDefaults synchronize];
}
else {
if ([[userDefaults stringForKey:@"Lang"] isEqualToString:@"en"]) {
return;
}
[userDefaults setValue:@"en" forKey:@"Lang"];
[userDefaults synchronize];
}
NSString *currLang = [userDefaults stringForKey:@"Lang"];
NSString *alertBody;
if ([currLang isEqualToString:@"ru"]) {
[userDefaults setObject:[NSArray arrayWithObjects:@"ru", @"en", nil]
forKey:@"AppleLanguages"];
alertBody = @"Перезапустите приложение для смены языка";
}
else {
[userDefaults setObject:[NSArray arrayWithObjects:@"en", @"ru", nil]
forKey:@"AppleLanguages"];
alertBody = @"Restart application for change language";
}
[userDefaults synchronize];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Hom" message:alertBody delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alertView show];
}
那么,我应该如何在不重新启动应用程序的情况下更改语言?
谢谢。
最佳答案
我在我的一个应用程序中做了同样的事情,当用户更改语言时,我做了同样的事情,并通过调用 setNeedsDisplay 重新加载导航堆栈中的所有 View Controller ,这会使用新的语言设置再次呈现 View 。
编辑
对于 View Controller 的每个实例,调用[self setNeedsDisplay]
,或者您可以用 View Controller 的实例替换 self。
关于ios - 如何更改应用程序内的应用程序语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18094282/