2010-04-15 11 views
1

.NET 프레임 워크를 사용하면 다양한 로케일에 대한 정보를 쉽게 얻을 수 있습니다. Win32 C++ API는 알아 내기가 조금 더 어렵습니다.CultureInfo.TwoLetterISOLanguageName의 C++ Win32 API

Win32에서 정수 로케일 ID가 주어진 2 문자 ISO 언어 이름을 가져 오는 동일한 기능이 있습니까?

C#에서 내가 할 거라고 :

System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo(1034); 
string iso = ci.TwoLetterISOLanguageName; 
// iso == "es" now. 

코드는 XP 및 최신에서 실행해야합니다.

답변

3

이전 답글에서이 답변으로 안내해 주신 Trevor에게 감사드립니다.

LOCALE_SISO639LANGNAME 매개 변수를 사용하여 GetLocaleInfo으로 전화하십시오.

+0

음,이 질문에 대한 대답은 아닙니다. 이 옵션은 두 글자가 아닌 세 글자의 언어 약어를 요구합니다. 이 옵션은 Windows XP에서는 사용할 수 없으며 Vista 이상에서만 사용할 수 있습니다. –

+1

Adrian, 모든 계산에서 정확하지 않습니다. 좀 더주의 깊게 읽으면 LOCALE_SISO639LANGNAME이 Windows NT 4 및 Win98에서 다시 지원되며 두 자의 약어가 제공됩니다. LOCALE_SISO639LANGNAME2 매개 변수 (뒤에 "2"가 표시됨)는 Vista 전용이며 3 자로 된 약어를 ​​제공합니다. 부당한 이유로 귀하의 투표를 취소하십시오. –

0

이것은 Win API가 XP 이후로 많이 발전한 분야 중 하나입니다. XP로 돌아갈 수있는 기능을 찾을 수있을 것 같지 않습니다. .NET 프레임 워크에는 자체적으로 내장 테이블이 있습니다 (적어도 Vista 이전 버전의 경우). GetUserDefaultLocaleName은 XP에서조차도 사용할 수 없으며, 원하는대로 정확하게 수행하지 못합니다. 그렇더라도 XP에서는 최신 버전과 완전히 같지 않을 것입니다.

자신 만의 테이블을 포함해야 할 수도 있습니다.

+0

이 답변은 실제로 해결책을 제시하지는 않지만 실제로 존재합니다. 아래 내 대답을 참조하십시오. –

1

GetLocaleInfo 기능을 참조하십시오. LOCALE_SABBREVCTRYNAME 및 LOCALE_SABBREVLANGNAME과 같은 값이 2 개 있습니다. ISO 3166이 2 문자를 사용한다고해도 Windows 7에 대한 빠른 테스트를 수행했으며 둘 다 3 개의 문자열을 반환했습니다. LOCALE_SABBREVLANGNAME 문서는 2 문자 ISO 3166 코드로 시작하고 하위 언어에 세 번째 문자를 추가한다고 설명합니다.

+0

Trevor, 답변 해 주셔서 감사합니다. 올바른 해결책을 찾기위한 키워드를 제공해 주셨습니다. http://blogs.msdn.com/michkap/archive/2005/02/17/375235.aspx : 분명히 ,이 몇 가지 언어에 대한 중요의 LOCALE_SABBREVLANGNAME 당신은 대부분의 시간을 설명하는 방식으로 작동 LOCALE_SISO639LANGNAME 매개 변수로 GetLocaleInfo를 호출하면 원하는 결과를 얻을 수 있습니다. http://msdn.microsoft.com/en-us/library/dd373848(VS.85).aspx –