【发布时间】:2012-08-13 07:59:55
【问题描述】:
我开发了多语言、基于导航控制器的应用程序。应用程序的主菜单也有下面的设置屏幕。用户可以通过按下语言按钮更改为应用程序语言。当用户更改语言时,我想刷新主菜单屏幕并设置屏幕语言但我没有。
【问题讨论】:
标签: iphone ios localization multilingual
我开发了多语言、基于导航控制器的应用程序。应用程序的主菜单也有下面的设置屏幕。用户可以通过按下语言按钮更改为应用程序语言。当用户更改语言时,我想刷新主菜单屏幕并设置屏幕语言但我没有。
【问题讨论】:
标签: iphone ios localization multilingual
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"
【讨论】:
NSLocalizedString() 函数调用。 (查找和替换)
请记住,Apple 不鼓励在应用中选择语言。最好的解决方案是只本地化你的视图并使用 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;
}
【讨论】:
如果您想更改语言,您需要重新启动应用程序。
为此,您可以使用本地通知再次重新启动您的应用程序,并向用户显示您的应用程序现在将重新启动的正确消息。
希望这个描述对你有所帮助......
【讨论】:
NSBundle,无需重新启动(我强烈反对这样做)。