2010-06-25 12 views
4

iPhone 시뮬레이터의 설정 앱을 사용하여 언어를 전환하는 것은 PITA 방식의 현지화 조정 방법입니다. 응용 프로그램을 다시 시작하지 않고 디버깅 설정을 사용하여 내 응용 프로그램에서 현지화 (en/fr/es/etc)를 즉시 전환 할 수있는 방법을 찾으려고합니다.테스트를 위해 우선 문자열 우선 순위 지정 우선 순위 변경

NSBundle은 로컬 리 제이션 된 리소스를 임의의 로컬 리 제이션에서 요청하는 방법을 제공합니다.

- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension inDirectory:(NSString *)subpath forLocalization:(NSString *)localizationName 

그러나 문자열 관리 서브 시스템에 해당하는 항목이 없습니다. thesequestions에서 등록 된 기본값을 재정의 할 수 있다는 소리가 들립니다. 등록 된 기본값은 바보 같고 앱을 다시 시작해야합니다.

다른 전략이 있습니까? 디버그 빌드에서 자체 작업을 수행 한 NSLocalizedString을 래핑 한 경우 주어진 .strings 파일을로드하는 데 필요한 최단 경로는 무엇입니까? 직접 쓰지 않고 구문 분석하지 않고 문자열 테이블에 액세스 할 수있는 프로그래밍 방식이 있습니까?

감사합니다.

답변

3

this answer이 제안한 미묘한 트릭을 사용하면 문제를 해결할 수 있습니다. 로컬라이제이션 "오버라이드"를 알고있는 함수에서 NSLocalizedString()을 감쌀 수 있으며, 설정 여부에 따라 문자열을 가져 오는 방법을 선택할 수 있습니다. 재정의 (override)를 원할 때 지역화 디렉토리에서 "하위 번들"을 만든 다음 해당 번들에서 문자열을 가져올 수 있습니다. 여기의 요지이다 :

if (CurrentLocalization != nil) { 
    NSBundle * locBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:CurrentLocalization ofType:@"lproj"]]; 
    return [locBundle localizedStringForKey:key value:nil table:nil]; 
} else { 
    return NSLocalizedString(key, @""); 
}  

-1

AppleLanguages의 기본 설정은 우선 언어가 가장 우선적 인 우선 언어로 구성된 배열로 설정하십시오. 예를 들어 영어 만 신경 쓰는 경우 '("en");'

+0

헤이 Grah 빠른 답장을 보내 주셔서 감사합니다. 나는 그 사람이되는 것을 정말로 싫어하지만, 나는 앱 재시작을 필요로하지 않는 on-the-fly 솔루션을 찾고 있었고, 이전의 관련 질문에 대한 대답에 연결되어 있음을 주목했다. 문자열 plist를 직접 구문 분석해야 할 것 같습니다. –

+0

@quixoto 당신이 프로그래밍 방식으로'AppleLanguages' 기본값을 업데이트한다면, 어떤 문자열 테이블이 사용되는지 영향을 미치지 않는다고 말하는 것입니까? –

+0

그랬지만, 앱을 다시 시작한 후에야 그렇게 보였다. 아마도 로캘 하위 시스템은 응용 프로그램 시작 시간에 문자열 테이블을 초기화/캐시합니까? –