我有如下要求: 在我的应用程序中,我提供了语言列表。现在,当用户更改语言时,它应该将所有标题和消息更改为特定语言。实际流程就像,我有一个屏幕(视图)在我的应用程序中进行设置。在该设置屏幕中,我提供了语言选项。现在,当用户选择语言时,在我的应用程序中所有标题,消息应以所选语言显示而无需启动我的应用程序。
现在问题是当我选择语言例如西班牙语时,如果没有重新启动我的应用程序它就不会生效。我使用了以下功能:
-(void) SetUserLanguage
{
NSString *appDataFilePath = [[NSBundle mainBundle] pathForResource:@"UserLanguageList" ofType:@"plist"];
NSDictionary *appDataDictionary = [[NSDictionary alloc] initWithContentsOfFile:appDataFilePath];
NSString* langName = [appDataDictionary objectForKey:self.pstrUserLanguage];
if(langName == nil || [langName isEqualToString:@""])
{
langName = @"en";
}
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *langArray = [defaults objectForKey:@"AppleLanguages"];
NSArray *currentLangArray = [NSArray arrayWithObject:langName];
[defaults setObject:currentLangArray forKey:@"AppleLanguages"];
[defaults synchronize];
}
上面的函数是一个名为UserDataManager的接口的一部分,其实例可以使用gpUserDataManager全局用于应用程序。因此,在选择语言时,我将语言设置为此结构,然后我将我的预定plist文件用于映射。因此,当用户选择langugage西班牙语时,它将值“es”设置为上述函数中的首选语言。但要实现此更改,我需要重新启动我的应用程序。请帮助如何达到我的要求。如有任何疑问,请在拒绝此问题之前告诉我。
答案 0 :(得分:2)
TSLanguageManager会让你按照自己的要求行事。用法非常简单;
如果您想通过点击UIButton来更改语言,只需使用以下代码更改语言;
[TSLanguageManager setSelectedLanguage:kLMEnglish];
要根据新语言更改文字,
yourTextField.text = [TSLanguageManager localizedString:@"yourLocalizedString"];
请注意,您需要将所有本地化字符串保存在Localizable.strings文件中。
答案 1 :(得分:0)
如果您想避免重新启动应用,请查看this answer。
您基本上需要使用其他捆绑包,因此请使用NSLocalizedStringFromTableInBundle
而不是NSLocalizedString
宏,并为所选语言提供正确的捆绑包。