2013-10-03 3 views
0

다음과 같은 요구 사항이 있습니다. 내 응용 프로그램에서 언어 목록을 제공했습니다. 이제 사용자가 언어를 변경하면 모든 제목과 메시지가 특정 언어로 변경됩니다. 실제 흐름은 마치 내 앱에서 설정하기위한 하나의 화면 (보기)과 같습니다. 그 설정 화면에서 나는 언어 옵션을 제공했습니다. 이제 사용자가 내 응용 프로그램에서 모든 제목에서 언어를 선택하면 메시지는 내 응용 프로그램을 시작하지 않고 선택한 언어로 표시되어야합니다.iOS - 응용 프로그램을 다시 시작하지 않고 응용 프로그램 특정 언어를 변경하십시오.

이제 스페인어와 같은 언어를 선택하면 내 앱을 다시 시작하지 않아도 적용되지 않습니다. 즉 gpUserDataManager을 사용하는 응용 프로그램에 대해 전역 적으로 사용할 수 기능이 상기

-(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 불리는 인터페이스 인스턴스의 일부 아래에 주어진 함수 I를 이용했다. 그래서 언어를 선택하면이 구조체에 언어를 설정 한 다음 매핑을위한 미리 정의 된 plist 파일을 얻습니다. 사용자가 스페인어를 선택하면 위의 기능에서 기본 언어로 값 "es"를 설정합니다. 하지만이 변경 사항을 적용하려면 앱을 다시 시작해야합니다. 친절하게 나의 요구를 성취하는 방법을 도와주세요. 질문이 있으면이 질문을 거부하기 전에 알려주십시오.

+0

제목을 설정하고 메시지를 표시하기 위해 NSLocalizedString 함수를 사용했습니다. – Premal

답변

0

앱을 다시 시작하지 않으려면 this answer을 확인하십시오.

기본적으로 다른 번들을 사용해야하므로 NSLocalizedString 매크로 대신 NSLocalizedStringFromTableInBundle을 사용하고 선택한 언어의 올바른 번들을 지정하십시오.

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

관련 문제