gpt4 book ai didi

c# - Windows 区域设置 ID (LCID) 是否与 USB 语言 ID 相同?

转载 作者:太空狗 更新时间:2023-10-29 21:45:27 25 4
gpt4 key购买 nike

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

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

所以,我的问题是

  1. LCID 和 USB 语言 ID 是否相同?
  2. 如果对 (1) 的回答是肯定的,使用它有什么陷阱吗?

最佳答案

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

根据 the documentation linked by Ankur :

the LanguageID parameter specifies the language ID (the same values are used as in Microsoft Win32 LANGID values).

LANGID 值构成 Win32 LCID 值的部分。你可以通过学习看到这一点 the documentation for LCIDs :

Each locale has a unique identifier, a 32-bit value that consists of a language identifier and a sort order identifier.

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

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

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

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

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

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

关于c# - Windows 区域设置 ID (LCID) 是否与 USB 语言 ID 相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15425673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com