나는 프로젝트를 레이어로 나누었고 맨 아래 하나는 정적 라이브러리로 맨 위에 포함되어있다.내 응용 프로그램에서 지역화 된 문자열을 정적 라이브러리에로드 하시겠습니까?
사실 내 앱 (상위 레이어)에있는 번역을 사용하여 정적 라이브러리에 문자열을 현지화해야합니다.
어떻게 든 가능합니까?
나는 프로젝트를 레이어로 나누었고 맨 아래 하나는 정적 라이브러리로 맨 위에 포함되어있다.내 응용 프로그램에서 지역화 된 문자열을 정적 라이브러리에로드 하시겠습니까?
사실 내 앱 (상위 레이어)에있는 번역을 사용하여 정적 라이브러리에 문자열을 현지화해야합니다.
어떻게 든 가능합니까?
나는이 대신 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];
}
당신은 정적 라이브러리에 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 @"[]";
}
}
내 언어 번들이 같은 유사합니다. (
'Dictionaire'테이블 = 이름)여기
은 'en.lproj'내 Dictionnaire.strings 콘텐츠의 샘플입니다
여기 내가 이해하지 못하는 한 가지는 언어가 어디에 있는지입니다. 번들이 있습니까? 귀하의 정적 lib의 범위에, 또는 실제로 lib를 사용하는 응용 프로그램 내에 있습니까? 감사! –
languages.bundle을 정적 라이브러리에 통합하거나이 파일을 기본 프로젝트에 추가 할 수 있습니다. 내 코드에서는 내 기본 프로젝트에 추가하고 응용 프로그램이 시작되면 라이브러리의 폴더로 이동합니다. 이 파일을 수정할 수 있기를 원해요. –
이것 좀보세요 : http://www.galloway.me.uk/tutorials/ios-library-with-resources/ –