[iphone] NSLocale currentLocale은 항상 사용자의 현재 언어가 아닌 “en_US”를 반환합니다.

iPhone 앱을 국제화하는 과정에 있습니다. 사용자의 현재 로케일에 따라 특정보기를 프로그래밍 방식으로 변경해야합니다. iPhone 시뮬레이터 또는 실제 하드웨어의 언어 선호도가 무엇이든 상관없이 locale항상 “en_US”로 평가되기 때문에 미쳐 가겠습니다.

NSString *locale = [[NSLocale currentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);

미친 것은 나머지 응용 프로그램이 예상대로 작동한다는 것입니다. Localization.strings 파일에서 올바른 문자열이 선택되어 인터페이스에서 사용되며 선택한 로케일에 대한 올바른 .xib 파일이 사용됩니다.

나는 또한 다음을 시도했지만 아무 소용이 없으며 동일한 결과를 얻었습니다.

NSString *locale = [[NSLocale autoupdatingCurrentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);

내가 놓친 간단한 것이 있습니까? 선호 또는 수입?

내가했던 것 :

Darren의 답변에서 알 수 있듯이 내가 찾고있는 기본 설정은 NSLocale에있는 것이 아니라 여기에 있습니다.

NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* languages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* preferredLanguage = [languages objectAtIndex:0];
NSLog(@"preferredLanguage: %@", preferredLang);

Peter의 대답이 더 나은 해결책 인 것 같습니다.

NSArray* preferredLanguages = [NSLocale preferredLanguages];
NSLog(@"preferredLanguages: %@", preferredLanguages);



답변

문서화되지 않은 키를 사용하여 기본값을 직접 쿼리하는 대신 NSLocale 클래스 에 선호 언어 배열을 요청하십시오 .


답변

[NSLocale currentLocale]언어가 아닌 장치의 지역 형식 설정을 기반으로합니다. 지역이 미국으로 설정되어 있으면 사용중인 언어에 관계없이 en_US가 표시됩니다.


답변

현재 장치 언어를 얻으려면 대신 다음을 사용하십시오.

NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];

여기에 설명 된대로 :
iOS에서 현재 장치 언어를 얻습니까?


답변

우리에게 문제는 개발 계획에서 응용 프로그램 언어와 응용 프로그램 영역을 재정의한다는 것입니다. 구성표 옵션 (구성표 편집-> 옵션)에서 응용 프로그램 언어가 시스템 언어로 설정되어 있는지 확인합니다.


답변

나를 위해, 둘 다

NSString *localeString = [[NSLocale currentLocale] localeIdentifier];

NSArray *array = [NSLocale preferredLanguages];
self.label.text = array[0];

시뮬레이터에있을 때 동일한 결과를 얻을 수 있습니다.


답변

프랑스어로 설정된 장치에서 월 이름 서식이 영어로 나오는 문제가 발생했습니다.

내 해결책은 이것을 사용하는 것입니다.

    NSLocale *locale = [NSLocale localeWithLocaleIdentifier:[[NSLocale preferredLanguages] objectAtIndex:0] ];
    [self.monthNameFormatter setLocale:locale];
    [self.monthNameFormatter setDateFormat:@"MMMM"];
    [self.monthNameFormatter stringFromDate:myDate];


답변

“en_US”를 제외하고 “en_US”의 복사 본인 “en”지역화가있는 경우 시뮬레이터는 언어 설정을 자동으로 따르기 시작하지만 “en_US”가 옵션이 되 자마자 항상 상관없이 선택합니다. 설정의.