代码之家  ›  专栏  ›  技术社区  ›  Nick Heiner

Windows:从区域设置字符串获取LCID?

  •  3
  • Nick Heiner  · 技术社区  · 14 年前

    我有表示语言环境的字符串数据,比如“fr”或“en”。我需要把它转换成适当的LCID值,比如 0x80c 0x409

    我在Windows 7上使用C++。

    2 回复  |  直到 11 年前
        1
  •  4
  •   Hans Passant    14 年前

    这些是LCID值,不知道LID是什么意思。您可以从GetLocaleInfoEx()中获取它们,它在Vista及更高版本中提供。您需要传递一个区域名称,如“en-US”,这是确定语言区域所必需的。例如:

    #include "stdafx.h"
    #include <windows.h>
    #include <assert.h>
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        LCID lcid = 0;
        BOOL ok = GetLocaleInfoEx(L"en-US", LOCALE_RETURN_NUMBER | LOCALE_ILANGUAGE, (LPWSTR)&lcid, sizeof(lcid));
        assert(ok);
        wprintf(L"LCID = %04x\n", lcid);
        return 0;
    }
    

    输出:LCID=0409

        2
  •  1
  •   Andreas Rejbrand    14 年前

    显然不在Windows API中。实际上,我找不到任何合适的函数 here 也不是 here .

    我想最好的办法是添加一个包含所有缩写及其LCID的资源文本文件,然后自己编写一个LocaleStringToLCID函数。但我想知道你在哪里能找到这两个字母的缩写。MSDN页面 http://msdn.microsoft.com/en-us/library/aa912040.aspx 仅使用全长和TLA区域设置字符串。也许在这里: http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes

    更新

    我现在看到OP发布的链接, http://msdn.microsoft.com/en-us/library/aa912040.aspx ,适用于Windows Mobile,而不是桌面操作系统!因此,我也看了错误的文件!