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

setlocale、_wsetlocale、_create_locale_wcreate_locale函数的区域设置参数可以使用 Windows NLS API 支持的区域设置名称、语言、国家/地区代码和代码页进行设置。 locale 参数采取以下格式:

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

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

语言[_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 代码页)。 有关代码页的详细信息,请参见 Code Pages。 有关 Windows 支持的代码页列表,请参阅 Code Page Identifiers(代码页标识符)

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

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

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

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

你可以指定多个类别类型,由分号分隔。 未指定的类别类型使用当前的区域设置。 例如,该代码片段将所有类别的当前区域设置设为 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 支持。 有关详细信息,请参阅 的 UTF-8 支持部分。

另请参阅

C Run-Time 库参考
_get_current_locale
setlocale、_wsetlocale
_create_locale、_wcreate_locale
语言字符串
国家/地区字符串