写点什么

获取 Windows 操作系统的语言版本

作者:dvlinker
  • 2022 年 6 月 26 日
  • 本文字数:3539 字

    阅读完需:约 12 分钟

获取Windows操作系统的语言版本

对于支持多语言版本的软件,是要运行在客户的 Windows 操作系统上的,是需要知道客户 Windows 操作系统的语言版本,比如简体中文操作系统、英文操作系统等。比如我们在制作支持多语言的安装包时,需要根据当前系统的语言,将启动安装时默认的语言设置为系统的语言,即如果当前使用的是简体中文操作系统,则默认使用中文简体,如果是英文操作系统,则要默认使用英文。本文就来讲述一下如何去获取 Windows 操作系统的语言版本。


1、系统提供的多个获取语言版本的 API 函数


Windows 系统提供了获取多个获取语言多个 API 函数:GetSystemDefaultLangID、GetUserDefaultLangID、GetSystemDefaultUILanguage 和 GetUserDefaultUILanguage。这几个 API 函数很是类似和,到底该用哪一个呢?我们可以查看 MSDN 上这几个函数的说明,这几个还是有很大区别的,最终还是要使用 GetUserDefaultUILanguage 函数的。

2、各个函数在 MSDN 上的说明


GetSystemDefaultLangID 在 MSDN 上的说明:

Returns the language identifier for the system locale. This is the language used when displaying text in programs that do not support Unicode. It is set by the Administrator under Control Panel > Clock, Language, and Region> Administrative tab.

由上述说明可知,GetSystemDefaultLangID 函数获取的语言是控制面板 -> 区域与语言选项 -> 管理标签页中设置的支持的非 Unicode 语言,即如下图所示:


GetUserDefaultLangID 在 MSDN 上的说明:

Returns the language identifier for the current user as set under Control Panel > Clock, Language, and Region > Formats tab > Format dropdown.


由上述文字可知,GetUserDefaultLangID 函数获取的语言是控制面板 -> 区域与语言选项 -> 格式标签页中设置的标准与格式语言,即如下图所示:


GetSystemDefaultUILanguage 在 MSDN 上的说明:

Retrieves the language identifier for the system default UI language of the operating system, also known as the "install language" on Windows Vista and later. For more information, see User Interface Language Management.


GetUserDefaultUILanguage 在 MSDN 上的说明:

Returns the language identifier for the user UI language for the current user. If the current user has not set a language, GetUserDefaultUILanguage returns the preferred language set for the system. If there is no preferred language set for the system, then the system default UI language (also known as "install language") is returned. For more information about the user UI language, see User Interface Language Management.


综上所述,GetSystemDefaultLangID 和 GetUserDefaultLangID 两函数获取的语言,受区域语言设置中设置的语言影响,所以这两个函数都不是我们想要的。我们需要获取的是 Windows 操作系统本身的语言版本。而 GetSystemDefaultUILanguage 的应用场景比较单一,使用 GetUserDefaultUILanguage 应该是最合适的。所以最终使用的是 GetUserDefaultUILanguage 函数。

3、获取操作系统语言的示例代码


获取 Windows 操作系统语言版本的示例代码如下:

DWORD dwLangID = GetUserDefaultUILanguage(); if ( dwLangID == 0x0804 ){	// 简体中文}else if ( dwLangID == 0x0411 ){	// 日语}else {	// 英语}
复制代码

在大家实际使用时,只要找到软件要支持的多语言中各个语种的 id,添加相应的处理即可。

4、多国语言的语言 id 列表


可以到 VC6 对应的 2001 版本的 msdn 中,搜索 GetSystemDefaultLangID 函数(只有该函数的页面中有“Language Identifiers”的超链接),通过页面中的链接找到“Language Identifiers”点进去,在弹出的页面中,找到“Table of Language Identifiers”即可:


下面给出各个语种的语言列表:(下面将常见国家的语种标注出来了,比如简体中文、韩文、日文等)

Identifier Language

0x0000 Language Neutral

0x007f The language for the invariant locale (LOCALE_INVARIANT). See MAKELCID.

0x0400 Process or User Default Language

0x0800 System Default Language

0x0436 Afrikaans

0x041c Albanian

0x0401 Arabic (Saudi Arabia)

0x0801 Arabic (Iraq)

0x0c01 Arabic (Egypt)

0x1001 Arabic (Libya)

0x1401 Arabic (Algeria)

0x1801 Arabic (Morocco)

0x1c01 Arabic (Tunisia)

0x2001 Arabic (Oman)

0x2401 Arabic (Yemen)

0x2801 Arabic (Syria)

0x2c01 Arabic (Jordan)

0x3001 Arabic (Lebanon)

0x3401 Arabic (Kuwait)

0x3801 Arabic (U.A.E.)

0x3c01 Arabic (Bahrain)

0x4001 Arabic (Qatar)

0x042b Windows 2000/XP: Armenian. This is Unicode only.

0x042c Azeri (Latin)

0x082c Azeri (Cyrillic)

0x042d Basque

0x0423 Belarusian

0x0402 Bulgarian

0x0455 Burmese

0x0403 Catalan

0x0404 Chinese (Taiwan)

0x0804 Chinese (PRC)

0x0c04 Chinese (Hong Kong SAR, PRC)

0x1004 Chinese (Singapore)

0x1404 Windows 98/Me, Windows 2000/XP: Chinese (Macau SAR)

0x041a Croatian

0x0405 Czech

0x0406 Danish

0x0465 Windows XP: Divehi. This is Unicode only.

0x0413 Dutch (Netherlands)

0x0813 Dutch (Belgium)

0x0409 English (United States)

0x0809 English (United Kingdom)

0x0c09 English (Australian)

0x1009 English (Canadian)

0x1409 English (New Zealand)

0x1809 English (Ireland)

0x1c09 English (South Africa)

0x2009 English (Jamaica)

0x2409 English (Caribbean)

0x2809 English (Belize)

0x2c09 English (Trinidad)

0x3009 Windows 98/Me, Windows 2000/XP: English (Zimbabwe)

0x3409 Windows 98/Me, Windows 2000/XP: English (Philippines)

0x0425 Estonian

0x0438 Faeroese

0x0429 Farsi

0x040b Finnish

0x040c French (Standard)

0x080c French (Belgian)

0x0c0c French (Canadian)

0x100c French (Switzerland)

0x140c French (Luxembourg)

0x180c Windows 98/Me, Windows 2000/XP: French (Monaco)

0x0456 Windows XP: Galician

0x0437 Windows 2000/XP: Georgian. This is Unicode only.

0x0407 German (Standard)

0x0807 German (Switzerland)

0x0c07 German (Austria)

0x1007 German (Luxembourg)

0x1407 German (Liechtenstein)

0x0408 Greek

0x0447 Windows XP: Gujarati. This is Unicode only.

0x040d Hebrew

0x0439 Windows 2000/XP: Hindi. This is Unicode only.

0x040e Hungarian

0x040f Icelandic

0x0421 Indonesian

0x0410 Italian (Standard)

0x0810 Italian (Switzerland)

0x0411 Japanese

0x044b Windows XP: Kannada. This is Unicode only.

0x0457 Windows 2000/XP: Konkani. This is Unicode only.

0x0412 Korean

0x0812 Windows 95, Windows NT 4.0 only: Korean (Johab)

0x0440 Windows XP: Kyrgyz.

0x0426 Latvian

0x0427 Lithuanian

0x0827 Windows 98 only: Lithuanian (Classic)

0x042f FYRO Macedonian

0x043e Malay (Malaysian)

0x083e Malay (Brunei Darussalam)

0x044e Windows 2000/XP: Marathi. This is Unicode only.

0x0450 Windows XP: Mongolian

0x0414 Norwegian (Bokmal)

0x0814 Norwegian (Nynorsk)

0x0415 Polish

0x0416 Portuguese (Brazil)

0x0816 Portuguese (Portugal)

0x0446 Windows XP: Punjabi. This is Unicode only.

0x0418 Romanian

0x0419 Russian

0x044f Windows 2000/XP: Sanskrit. This is Unicode only.

0x0c1a Serbian (Cyrillic)

0x081a Serbian (Latin)

0x041b Slovak

0x0424 Slovenian

0x040a Spanish (Spain, Traditional Sort)

0x080a Spanish (Mexican)

0x0c0a Spanish (Spain, International Sort)

0x100a Spanish (Guatemala)

0x140a Spanish (Costa Rica)

0x180a Spanish (Panama)

0x1c0a Spanish (Dominican Republic)

0x200a Spanish (Venezuela)

0x240a Spanish (Colombia)

0x280a Spanish (Peru)

0x2c0a Spanish (Argentina)

0x300a Spanish (Ecuador)

0x340a Spanish (Chile)

0x380a Spanish (Uruguay)

0x3c0a Spanish (Paraguay)

0x400a Spanish (Bolivia)

0x440a Spanish (El Salvador)

0x480a Spanish (Honduras)

0x4c0a Spanish (Nicaragua)

0x500a Spanish (Puerto Rico)

0x0430 Sutu

0x0441 Swahili (Kenya)

0x041d Swedish

0x081d Swedish (Finland)

0x045a Windows XP: Syriac. This is Unicode only.

0x0449 Windows 2000/XP: Tamil. This is Unicode only.

0x0444 Tatar (Tatarstan)

0x044a Windows XP: Telugu. This is Unicode only.

0x041e Thai

0x041f Turkish

0x0422 Ukrainian

0x0420 Windows 98/Me, Windows 2000/XP: Urdu (Pakistan)

0x0820 Urdu (India)

0x0443 Uzbek (Latin)

0x0843 Uzbek (Cyrillic)

0x042a Windows 98/Me, Windows NT 4.0 and later: Vietnamese

发布于: 刚刚阅读数: 2
用户头像

dvlinker

关注

宁静致远 2022.06.19 加入

CSDN博客专家,C++高级软件工程师。从事C++软件开发十多年,通过数年的软件开发实践,积累了大量的实战经验,特别在C++软件调试及异常排查方面积累了丰富经验。现任C++高级软件工程师,并担任C++软件开发培训讲师!

评论

发布
暂无评论
获取Windows操作系统的语言版本_操作系统语言_dvlinker_InfoQ写作社区