UCRT 区域设置名称、语言和国家/地区字符串

可通过多种方式将 locale 参数设置为 setlocale_wsetlocale_create_locale_wcreate_locale 函数。 可使用 Windows NLS API 支持的区域设置名称、语言、国家/地区代码和代码页来设定区域设置。 locale 参数采取以下格式之一:

locale :: "locale-name"
 | "language[_country-region[.code-page]]"
 | ".code-page"
 | "C"
 | ""
 | NULL

locale-name 是简易格式的 IETF 标准化字符串;例如,en-US 表示英语(美国),或 bs-Cyrl-BA 表示波斯尼亚语(西里尔文,波斯尼亚和黑塞哥维那)。 首选这些格式。 有关 Windows 操作系统版本支持的区域设置名称列表,请转到“[MS-LCID]:Windows 语言代码标识符 (LCID) 参考”中的附录 A:产品行为,参阅其中表内的“语言标记”列。 该资源列出了支持的语言、脚本和区域设置名称的地区部分。 若要了解采用非默认排序顺序的受支持的区域设置名称,请参阅排序顺序标识符 中的“区域设置名称”列。 在 Windows 10 或更高版本下,允许使用与有效的 BCP-47 语言标记对应的区域设置名称。 例如,jp-US 是一个有效的 BCP-47 标记,但实际上只有 US 对于区域设置功能有效。

使用语言字符串或语言字符串和国家/地区字符串创建区域设置时,language[_country-region[.code-page]] 格式将存储在类别的区域设置中。 语言字符串介绍了一系列受支持的语言字符串,国家/地区字符串列出了受支持的国家和地区字符串。 如果指定语言没有与指定国家/地区关联,指定国家/地区的默认语言存储在区域设置中。 建议不要将该格式的区域设置字符串嵌入到代码中或序列化到存储中:相比于区域设置名称格式,操作系统更新更改这些字符串的可能性更高。

code-page 是与区域设置关联的 ANSI/OEM 代码页。 通过语言或通过语言和国家/地区单独指定区域设置时,代码页已为你确定。 特殊值 .ACP 将指定国家/地区的 ANSI 代码页。 特殊值 .OCP 将指定国家/地区的 OEM 代码页。 例如,如果指定 "Greek_Greece.ACP" 作为区域设置,区域设置会存储为 Greek_Greece.1253(希腊语的 ANSI 代码页);如果指定 "Greek_Greece.OCP" 作为区域设置,它存储为 Greek_Greece.737(希腊语的 OEM 代码页)。 有关代码页的详细信息,请参阅代码页。 有关 Windows 支持的代码页列表,请参阅代码页标识符

如果你仅使用代码页指定区域设置,会使用 GetUserDefaultLocaleName 报告的用户的默认语言和国家/地区。 例如,如果指定 ".1254"(ANSI 土耳其语)作为系统上为英语(美国)配置的用户区域设置,则存储的区域设置是 English_United States.1254。 建议不要使用该格式,因为它可能导致不一致的行为。

Clocale 参数值为 C 转换指定最小的符合 ANSI 标准的环境。 C 区域设置假定每个 char 数据类型为 1 字节,并且其值始终小于 256。 如果 locale 指向一个空字符串,则区域设置是实现定义的本机环境。

使用 setlocale 类别,可以为 _wsetlocaleLC_ALL 函数同时指定所有区域设置类别。 这些类别可以全部设置为同一区域设置,你也可以使用具有该格式的区域设置参数分别设置每个类别:

LC-ALL-specifier :: locale
 | [LC_COLLATE=locale][;LC_CTYPE=locale][;LC_MONETARY=locale][;LC_NUMERIC=locale][;LC_TIME=locale]

你可以指定多个类别类型,由分号分隔。 未指定的类别类型使用当前的区域设置。 例如,该代码片段将所有类别的当前区域设置设为 de-DE,然后将类别 LC_MONETARY 设为 en-GB,将 LC_TIME 设为 es-ES

_wsetlocale(LC_ALL, L"de-DE");
_wsetlocale(LC_ALL, L"LC_MONETARY=en-GB;LC_TIME=es-ES");

UTF-8 支持

可以使用区域设置字符串中的 UTF-8 代码页启用 UTF-8 支持。 有关详细信息,请参阅 setlocale 的 UTF-8 支持部分

另请参阅

C 运行时库参考
_get_current_locale
setlocale_wsetlocale
_create_locale_wcreate_locale
语言字符串
国家/地区字符串