2013-10-03 54 views
0

我有如下要求: 在我的应用程序中,我提供了语言列表。现在当用户更改语言时,它应该将所有标题和消息更改为特定语言。实际流程就像,我有一个屏幕(视图)设置在我的应用程序。在该设置屏幕中,我提供了语言选项。现在,当用户选择语言,然后在我的应用程序中,所有标题,消息应该以选定语言显示,而无需启动我的应用程序。iOS - 通过编程更改应用程序特定的语言,无需重新启动应用程序

现在的问题是,当我选择语言,例如西班牙语,然后它不会生效,无需重新启动我的应用程序。

-(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文件进行映射。因此,当用户选择语言西班牙语时,它将值“es”设置为上述函数中的首选语言。但要产生这种变化的效果,我需要重新启动我的应用程序。请帮助如何达到我的要求。如果有任何疑问,请在拒绝此问题之前告诉我。

+0

请注意,对于设置标题和显示消息,我使用了NSLocalizedString函数。 – Premal

回答

0

如果你想避免重新启动你的应用程序,看看this answer

您基本上需要使用不同的包,因此请使用NSLocalizedStringFromTableInBundle而不是NSLocalizedString宏,并为所选语言提供正确的包。

2

TSLanguageManager会让你做你想问的问题。用法非常简单;

当你想通过点击一个UIButton来改变语言,只需使用下面的代码来改变语言;

[TSLanguageManager setSelectedLanguage:kLMEnglish]; 

要根据新的语言更改文本,

yourTextField.text = [TSLanguageManager localizedString:@"yourLocalizedString"]; 

请注意,你需要保持所有Localizable.strings文件本地化的字符串。

+0

对我来说没问题。只能说在iOS7中[userDefaults objectForKey:@“AppleLanguages”]返回“ES”,在iOS9中返回“ES-ES”,并且需要在TSLanguageManager中进行控制:selectedLanguage – Miguel

相关问题