他们的确是密切相关,但它们并不完全一样。
根据the documentation linked by Ankur:
的LanguageID
参数指定的语言ID(相同的值被用作在微软的Win32 LANGID
值)。
LANGID值形成Win32 LCID值的部分。你可以通过学习the documentation for LCIDs看到这一点:
每个区域都有一个唯一的标识,即由一个语言标识符和排序顺序标识的32位值。
所以这两个值不是完全可以互换的。通过改变排序顺序标识符(LCID值的另一部分),最终可以得到多个LCID值,这些值都代表相同的语言(即,具有相同的LANGID)。
将这两者视为等价物可能在大多数情况下都有效(这可以解释视觉检查的结果),但它也可能会中断。我建议不要依赖假设,并做一些必要的额外工作来确保您与文档一致,并且您的代码是健壮的。
Win32 SDK头提供了一些宏,可以帮助您在LCID和LANGID之间进行相互转换。您可以在标题中查看这些信息并将它们转换为C#帮助程序函数。你有兴趣在这里的是:
使用的这些辅助功能之一将确保您得到有效的结果,当你调用接受LCID参数NLS API之一。
借调。 [USB LANGIDs](http://www.usb.org/developers/docs/USB_LANGIDs.pdf)似乎与[Microsoft指定的区域设置ID]配对(http://msdn.microsoft.com/en-us/ goglobal/bb964664.aspx)。 – 2013-03-15 06:07:03
他们似乎*配对,但实际的关系比这更复杂一点。如果你依赖它们是相同的,你的代码将在大多数情况下工作,但在某些情况下可能会失败。查看我的答案了解更多详情。 (cc @PeterHuene) – 2013-03-15 09:00:27