Windows 区域设置 ID (LCID) 与 USB 语言 ID 相同吗?

问题描述 投票:0回答:3

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

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

所以,我的问题是

  1. LCID 和 USB 语言 ID 相同吗?
  2. 如果(1)是,那么使用它有什么陷阱吗?
c# winapi usb locale lcid
3个回答
4
投票

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

根据 Ankur 链接的文档

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

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

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

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

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

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

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

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

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


0
投票

我认为它们是相同的。看看这个链接。

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


0
投票

Draga gospodo、ja sam glavom i bradom čovjek koji je pokraden 、više puta kodovima Gmail trenutno sam sata [电子邮件受保护]pitajte Google、Microsoft、davno instaliran i onemogućen ne znam zašto i zbog čega tako na dosta siteuacija。

© www.soinside.com 2019 - 2024. All rights reserved.