iOS应用程序更改语言与自定义设置屏幕
问题描述:
我开发了基于导航控制器的多语言应用程序。该应用程序的主菜单也有和设置屏幕在下面。用户可以通过按下语言按钮切换到应用程序语言。我想刷新主菜单屏幕并设置屏幕语言当用户改变语言但我没有。iOS应用程序更改语言与自定义设置屏幕
答
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
事实并非如此。 只需使用不同的'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;
}
这是工作,谢谢basvk。但我使用NSLocalizedString()方法的所有本地化标题。我可以改变你说的吗? – hiwordls 2012-08-13 08:28:29
创建一个简单的类,它将使用适当的语言(@“nl”,@“de”,@“fr”等)和另一个返回翻译后的单词的方法进行初始化。你必须用你的新类来替换所有的'NSLocalizedString()'函数调用。 (查找和替换) – basvk 2012-08-13 08:52:25
非常感谢basvk – hiwordls 2012-08-13 09:09:29