2014-09-11 3 views

답변

0

나는이 대신 NSLocalizedString를 사용하는 번들로부터 문자열을로드 할 관리 방법 :

+ (NSString *)getTranslationFromAppBundleForString:(NSString *)originalText { 

    NSString * lang = [[NSLocale preferredLanguages] objectAtIndex:0]; 
    NSString * bundlePath = [[NSBundle mainBundle] pathForResource:lang ofType:@"lproj"]; 
    NSBundle * bundle = [NSBundle bundleWithPath:bundlePath]; 

    return [bundle localizedStringForKey:originalText value:originalText table:nil]; 
} 
0

당신은 정적 라이브러리에 LanguageAgent을 만드는 것이 라이브러리에 번들 ressource를 추가 할 수 있습니다. 그런 다음이 함수를 사용하여 localizedString을 가져옵니다. . 내 응용 프로그램에서 나는 다른 테이블에 의해 언어를 분리 (당신은 당신의 언어 번들에 1 개 이상의 테이블을 가질 수있다 'Dictionaire'라는 이름의 테이블은 아래 그림을 참조

-(NSString*) myLocalizedStringForKey:(NSString*) key ofTable:(NSString*)tableName { 
    //I save selected language in my NSUserDefaults. 
    NSString *selectedLanguage = [[NSUserDefaults standardUserDefaults] stringForKey:@"DefaultLanguage"]; 

    if (selectedLanguage == nil) { 
     [[NSUserDefaults standardUserDefaults] setValue:@"en" forKey:@"DefaultLanguage"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
     selectedLanguage = [[NSUserDefaults standardUserDefaults] stringForKey:@"DefaultLanguage"]; 
    } 

    NSString *langBundleNew = [[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingFormat:@"/langs/Languages.bundle/%@.lproj/",selectedLanguage]; //use your path to the Languages.bundle here. 

    if ([[NSFileManager defaultManager] fileExistsAtPath:langBundleNew]) { 
     NSBundle *aBundle = (NSBundle*)[self.dictLangueBundle objectForKey:selectedLanguage]; 
     NSString* str=[aBundle localizedStringForKey:key value:@"[string not defined]" table:tableName]; 
     return str; 
    } else { 
     return @"[]"; 
    } 
} 

내 언어 번들이 같은 유사합니다. (

enter image description here

'Dictionaire'테이블 = 이름)

enter image description here 여기

은 'en.lproj'내 Dictionnaire.strings 콘텐츠의 샘플입니다

+0

여기 내가 이해하지 못하는 한 가지는 언어가 어디에 있는지입니다. 번들이 있습니까? 귀하의 정적 lib의 범위에, 또는 실제로 lib를 사용하는 응용 프로그램 내에 있습니까? 감사! –

+0

languages.bundle을 정적 라이브러리에 통합하거나이 파일을 기본 프로젝트에 추가 할 수 있습니다. 내 코드에서는 내 기본 프로젝트에 추가하고 응용 프로그램이 시작되면 라이브러리의 폴더로 이동합니다. 이 파일을 수정할 수 있기를 원해요. –

+0

이것 좀보세요 : http://www.galloway.me.uk/tutorials/ios-library-with-resources/ –

관련 문제