iOS应用程序更改语言与自定义设置屏幕

问题描述:

我开发了基于导航控制器的多语言应用程序。该应用程序的主菜单也有和设置屏幕在下面。用户可以通过按下语言按钮切换到应用程序语言。我想刷新主菜单屏幕并设置屏幕语言当用户改变语言但我没有。iOS应用程序更改语言与自定义设置屏幕

settings screen

NSString *path = [[NSBundle mainBundle] pathForResource:@"nl" ofType:@"lproj"]; 
NSBundle *bundle = [NSBundle bundleWithPath:path]; 
NSString *englishWord = @"translate"; 
NSString *translation = [bundle localizedStringForKey:englishWord value:englishWord table:nil]; 
NSLog(@"%@ = %@", englishWord, translation); 

// nl.lproj/Localizable.strings: 
"translate" = "vertaal" 
+0

这是工作,谢谢basvk。但我使用NSLocalizedString()方法的所有本地化标题。我可以改变你说的吗? – hiwordls 2012-08-13 08:28:29

+0

创建一个简单的类,它将使用适当的语言(@“nl”,@“de”,@“fr”等)和另一个返回翻译后的单词的方法进行初始化。你必须用你的新类来替换所有的'NSLocalizedString()'函数调用。 (查找和替换) – basvk 2012-08-13 08:52:25

+0

非常感谢basvk – hiwordls 2012-08-13 09:09:29

您需要重新启动应用程序,如果你想改变语言。

为此,您可以使用本地通知来再次重新启动您的应用程序,并显示正确的消息,告诉用户您的应用程序将立即重新启动。

希望这说明可以帮助你......

+0

事实并非如此。 只需使用不同的'NSBundle',不需要重新启动(我非常反感)。 – basvk 2012-08-13 08:11:04

请记住,苹果阻碍了对应用程序的语言选择。最好的解决方案就是本地化您的视图并使用NSLocalizableString,并让应用程序中的语言遵循手机设置的语言。

在AppDelegate中创建一个方法(该方法返回从plist中加载的语言字典的字典)。 每当用户选择一种语言,相应地设置NSUserDefaults,并在应用程序委托中调用该方法。 现在在每个控制器的viewWillAppear中使用此方法,并获取所需的语言字典并加载您的视图。

-(NSMutableDictionary*)getCurrentLanguageDictionaryFromResource 
{ 
    NSString *defaultPath; 
    defaultPath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@.plist",[self getAppCurrentSettingsLanguage]] ofType:nil]; 
    if(languageDictionary !=nil) 
    { 
     [languageDictionary release]; 
     languageDictionary=nil; 
    } 
    languageDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:defaultPath]; 


    return languageDictionary; 
}