2013-03-13 3 views
5

내 사용자가 언어/로케일 선택에 관심이 있습니다. 내 앱이 표시됩니다. 올바른 번들을로드하고 올바른 문자열 파일을 선택하는 방법을 알아 냈습니다. 그러나 여전히 일부 시스템 항목은 여전히 ​​사용 된 것 같습니다. 통제 할 수 없다. 스위치 컨트롤.iOS : 사용자의 로케일을 가짜로 만드는 방법이 있습니까?

이 앱이 사용자의 현재 시스템 설정이 아닌 특정 언어로 작동해야한다고 시스템에 알릴 방법이 있습니까?

+1

우와후 우. 'method_setImplementation (class_getInstanceMethod ([NSLocale class], @selector (currentLocale)), (IMP) spoofedImpl); –

+2

아무렇지도 않게 그것을 할 수있는 방법은 없습니까? – Mike

+0

NSLocale에 대한 카테고리를 생성하여 클래스 메소드에 대해 선택한 로케일을 반환 해 보았습니까? –

답변

5

최소한의 해킹 방법은 NSUserDefaults을 통해 이루어집니다. 로캘은 AppleLocale (로캘 ID는 문자열로)에 의해 결정되고 언어는 AppleLanguages (언어 ID 배열)의 첫 번째 일치 항목에 의해 결정됩니다. 앱이에 대해서만이 기본값 인 을 무시할 수 있습니다. 앱에 의해 재정의되었는지 확인하려면 [defaults persistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]] objectForKey:@"AppleLocale"]과 같은 것을 사용할 수 있습니다. 재정의를 제거하려면 -removeObjectForKey:을 사용하십시오.

어느 쪽을 선택하든 언어를 변경하면 아마도 relaunch the app이됩니다. OS X 및 iOS 앱은 런타임에 언어를 변경하도록 설계되지 않았습니다 (OS X에서는 새로 출시 된 앱에서만 언어 변경이 표시되고 iOS에서는 시스템이 언어 변경을 위해 모든 앱을 종료합니다).

이 기능을 추가하여 개발/테스트를 위해 스위칭 언어를보다 쉽게 ​​만들었습니다. 이것이 앱 스토어 리뷰 과정에서 실패할지 모르겠습니다.

+0

감사합니다. @tc. 이것은 아마도 멀리 떨어져있을 것 같지만 상세한 옵션을 고맙게 생각합니다. – Mike