C ++ Win32 API等效于CultureInfo.TwoLetterISOLanguageName

时间:2010-04-15 23:31:09

标签: c++ globalization

.NET框架可以轻松获取有关各种语言环境的信息; Win32 C ++ API有点难以理解。

在Win32中是否有等效函数来获取给定整数区域设置ID的双字母ISO语言名称?

在C#中我会这样做:

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

代码需要在XP及更新版本上运行。

3 个答案:

答案 0 :(得分:3)

感谢Trevor在早些时候的回复中指导我这个答案。

使用GetLocaleInfo参数调用LOCALE_SISO639LANGNAME

答案 1 :(得分:1)

请参阅GetLocaleInfo功能。您可能感兴趣的有两个LCType值:LOCALE_SABBREVCTRYNAME和LOCALE_SABBREVLANGNAME。我在Windows 7上进行了快速测试,两者都返回了3个字符串,即使ISO 3166使用2个字符。 LOCALE_SABBREVLANGNAME文档说明它以2个字符的ISO 3166代码开始,并为子语言添加第三个字符。

答案 2 :(得分:0)

这是Win API自XP以来发展很多的一个领域。我不认为你会找到一个功能,可以一直回到XP。我相信.NET框架有自己的内置表(至少对于Vista之前的版本)。 GetUserDefaultLocaleName甚至不能在XP上使用,并且这并不能完全满足您的需求,即使它确实如此,它在XP上可能也不会像在新版本上那样完整。

您可能需要包含自己的表格。