2012-12-20 2 views
1

현재 응용 프로그램 언어를 어떻게 검색합니까? 나는 NSLocale 사용자 환경 설정에 대해 이야기하는 것이 아닙니다.iOS 응용 프로그램에서 사용중인 언어 감지

내 앱에는 현재 두 가지 지원 언어가 있습니다. 기본 'en'과 특정 'it'.

실제로 어느 것이 실제로 사용되고 있는지 알고 싶었습니다. 관련성이있는 경우 추가 설명으로 두 가지 지원되는 언어에 대해서만 웹 서비스를 제공합니다. 서비스를 호출 할 때 언어 매개 변수를 전달해야합니다. 현재 내가이 일을하고, 작동,하지만 난 완전히 싫어 :

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

if (![preferredLanguage isEqualToString:@"it"] && ![preferredLanguage isEqualToString:@"en"]) { 
    return @"en"; 
} 
return preferredLanguage; 

내가 여물보고 한 NSLocaleclassUIApplication하지만 유용한 아무것도 찾을 관리하지 않았다.

또한 NSBundle에는 몇 가지 현지화 방법이 있지만 모두 어느 것이 사용 중인지에 대해 구체적이지는 않습니다.

+0

Gwendal의 제안은 승인. 그러나, 나는 당신이 사용하는 방법을 싫어하는 이유를 볼 수 없습니다. [docs] [1]에 따르면이 방법은 > 문자열의 배열로 사용자의 언어 기본 설정 순서를 반환하는 방법입니다. 왜 다른 언어를 찾으십니까? [1] : https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSLocale_Class/Reference/Reference.html –

답변

1

저는 보통 "en", "fr"등으로 설정된 "HTTPAcceptLanguage"와 같은 Localizable.strings에 특수 키를 예약합니다. 이제 응용 프로그램이 표시하는 언어에 대해 NSLocalizedString (@ "HTTPAcceptLanguage", nil).

+0

멋진데 작동합니다. 다른 제안을 듣기 위해 더 많은 시간을내어주십시오. 그런 다음 대답으로 표시 할 수 있습니다. – Leonardo

+0

귀하의 목표는 앱에서 사용하는 것과 동일한 언어로 서버가 응답을 제공하고 어떤 비용으로도 현지화 불일치를 피하기위한 것이므로 의도를 정확히 표현하기 때문에 솔루션이 최적이라고 생각합니다. 하지만 시간이 필요합니다 :-) –

3

[[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]은 앱이 지원하는 현지화를 항상 반환하므로 더 좋을 것입니다. 나중에 추가 수표가 필요하지 않습니다.

사실, 코드에 버그가 있습니다. 사용자 환경 설정의 첫 번째 언어가 앱에서 지원하는 언어가 아닌 경우 iOS는 앱에서 지원하는 언어를 찾을 때까지 계속 목록을 다운시킵니다. 따라서 사용자의 환경 설정이 "fr", "it", "en", ... 인 경우 iOS는 it 버전의 리소스를로드합니다. 그러나 코드는 en으로 되돌아갑니다.

(사용자가 언어 순서를 변경하기 위해이 그것을 그렇게 apparently possible있어 아이폰 OS에. 아마도 그것은 쉽게 OS X에 더 중요하지만, 그것이 어떻게 작동하는지 명백하지 않습니다.)

+0

이 방법은 문제가 있습니다 : 번들은 fr_FR, fr_CA, en_UK 등과 같은 것을 반환 할 수 있습니다. 반대로 NSLocalizedString 기법은 서버가 iOS와 동일한 언어 지원을 가질 수 없음을 분명히합니다 또한 각 iOS 로켈 식별자에 대해 서버 언어를 명시 적으로 쉽게 선택할 수 있습니다. –

관련 문제