2013-10-03 86 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

相關問題