我正在使用C#开发一个工具,允许用户为USB设备配置USB字符串描述符。字符串描述符之一是语言ID。我希望UI显示语言名称列表而不是隐藏语言ID。我找不到任何可以获得USB {语言ID - 语言名称}地图的API。
当我查看Windows区域设置ID(LCID)时,LCID和usb语言ID似乎是相同的(我比较的几个条目的推断)。
所以,我的问题是
答案 0 :(得分:3)
他们确实密切相关,但它们并不完全相同。
根据the documentation linked by Ankur:
LanguageID
参数指定语言ID(与Microsoft Win32LANGID
值中使用的值相同)。
LANGID值形成Win32 LCID值的部分。您可以通过研究the documentation for LCIDs:
来看到这一点每个语言环境都有一个唯一标识符,一个32位值,由一个语言标识符和一个排序顺序标识符组成。
所以这两个值不是完全可以互换的。通过改变排序顺序标识符(LCID值的另一部分),您最终可以得到多个LCID值,这些值都表示相同的语言(即具有相同的LANGID)。
将两者视为等效物可能在大部分时间都有效(这解释了视觉检查的结果),但它也可能会破裂。我建议不要依赖假设并做一些额外的工作,以确保您与文档保持一致,并且您的代码是健壮的。
Win32 SDK标头提供了一些宏来帮助您在LCID和LANGID之间进行转换。您可以在标头中查找这些内容并将它们转换为C#帮助程序函数。你感兴趣的是:
MAKELCID
macro接受语言标识符(LANGID)和排序顺序标识符,并将它们组合以生成LCID。由于您不关心排序顺序标识符,因此可以使用SORT_DEFAULT
来指示该语言的默认排序顺序。
LANGIDFROMLCID
macro,从LCID值中提取语言标识符(LANGID)。
使用其中一个辅助函数将确保在调用其中一个接受LCID参数的NLS API时获得有效结果。
答案 1 :(得分:1)