我有一个iPhone应用程序,其中有一个按钮可以在运行时更改显示语言。我查看了NSLocalizedString(),它将根据系统首选项返回适当的字符串。除了硬编码所有显示字符串并根据用户语言选择在运行时返回之外,还有哪些选择?任何指针都将不胜感激。
我有一个iPhone应用程序,其中有一个按钮可以在运行时更改显示语言。我查看了NSLocalizedString(),它将根据系统首选项返回适当的字符串。除了硬编码所有显示字符串并根据用户语言选择在运行时返回之外,还有哪些选择?任何指针都将不胜感激。
根据用户 "object2.0" 的帖子,我整理了一些示例代码,供您在应用程序中使用,以便在运行时更改 UI 语言。
主要的本地化类执行了较难的工作:
-(NSString *) localized:(NSString *) key
{
GameInfo *gameInfo = [GameInfo sharedInstance];
// langCode should be set as a global variable somewhere
NSString *path = [[NSBundle mainBundle] pathForResource:langCode ofType:@"lproj"];
NSBundle* languageBundle = [NSBundle bundleWithPath:path];
return [languageBundle localizedStringForKey:key value:@"" table:nil];
}
假设你在一个名为utils的全局类中有这个函数,使用以下代码调用该函数(例如将单词“Settings”输出)。
NSLog( [utils localized:@"Settings"] );
更改语言的方法:[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:langCode, nil] forKey:@"AppleLanguages"];
使用此功能可以强制设置语言顺序。
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en",@"de",..., nil] forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLocalizedString();
展示本地化字符串...
正确的“用户体验”是让用户通过系统偏好设置选择他们的语言,而不是通过您的应用程序(或您的应用程序的设置面板等)。无法针对每个应用程序覆盖此设置,您也不希望任何应用程序更改系统范围的设置。