6

我正在用 C# 开发一个工具,它允许用户为 USB 设备配置 USB 字符串描述符。字符串描述符之一是语言 ID。我希望 UI 显示语言名称列表而不是神秘的语言 ID。我找不到任何可以让我获得 USB {语言 ID - 语言名称} 映射的 API。

当我查看 Windows 语言环境 ID (LCID) 时,LCID 和 USB 语言 ID 似乎是相同的(从我比较的几个条目推断)。

所以,我的问题是

  1. LCID 和 USB 语言 ID 是否相同?
  2. 如果 (1) 为“是”,使用它是否有任何陷阱?
4

2 回答 2

3

它们确实密切相关,但并不完全相同。

根据Ankur 链接的文档

LanguageID参数指定语言 ID(使用与 Microsoft Win32 值相同的LANGID值)。

LANGID 值构成Win32 LCID 值的一部分。您可以通过研究LCID 的文档来了解这一点:

每个语言环境都有一个唯一标识符,一个由语言标识符和排序顺序标识符组成的 32 位值。

所以这两个值不能完全互换。通过改变排序顺序标识符(LCID 值的另一部分),您可以得到多个 LCID 值,它们都代表相同的语言(即具有相同的 LANGID)。

将两者视为等效可能在大多数情况下都有效(这解释了您的目视检查结果),但它也可能会中断。我建议不要依赖假设并做一些额外的工作来确保您与文档一致并且您的代码是健壮的。

Win32 SDK 标头提供了一些宏来帮助您在 LCID 和 LANGID 之间进行相互转换。您可以在标题中查找这些并将它们转换为 C# 帮助函数。您在这里感兴趣的是:

  • 接受一个语言标识符 (LANGID) 和一个排序顺序标识符,并将它们组合起来生成一个 LCID。由于您不关心排序顺序标识符,因此您可以使用它来指示该语言的默认排序顺序。MAKELCIDSORT_DEFAULT

  • ,它从 LCID 值中提取语言标识符 (LANGID)。LANGIDFROMLCID

使用这些辅助函数之一将确保您在调用接受 LCID 参数的 NLS API 之一时获得有效结果。

于 2013-03-15T08:54:10.597 回答
1

我认为他们是一样的。看看这个链接。

http://msdn.microsoft.com/en-us/library/windows/hardware/ff540156(v=vs.85).aspx

于 2013-03-15T06:04:10.503 回答