将三个字母的语言代码转换为语言标识符(LANGID)

Jon*_*nas 5 c++ winapi internationalization

有没有在Win32 API中的一些方法来转换一个三个字母的语言代码,通过返回GetLocaleInfo()LOCALE_SABBREVLANGNAME指定到相应的LANGIDLCID?也就是说,与GetLocaleInfo()正常情况"反向"进行?

我要做的是解析资源DLL正在使用什么样的语言,到目前为止,没有涉及DLL的任何内容,使用格式的dll名称nameLNG.dll,其中LNG是三个字母的语言代码,似乎假设存在这样的函数,这是最简单的方法.

如果这不容易做到,我想Plan B就是给我们的语言DLL一个版本信息资源,在那里指定他们各自的文化,然后在应用程序中,阅读他们使用的文化.

Ser*_*ier 2

不幸的是,没有直接的 Win32 API 可以为您提供包含 3 个字母缩写的 LANGID。

看来CLanguageSupport今天是你的朋友了:-) 它已经实现了你的 B 计划,根据版本信息资源的内容查找 LANGID。

您正在寻找的代码片段是 int 函数

LANGID CLanguageSupport::GetLangIdFromFile(LPCTSTR pszFilename)
Run Code Online (Sandbox Code Playgroud)

当然,缺点是版本信息和 DLL 名称可能不匹配。但在测试过程中你很快就会发现它。如果您让appTranslator等工具为您创建 DLL,那么您一定是安全的。