手册页部分 5: 标准、环境和宏

退出打印视图

更新时间: 2014 年 7 月
 
 

locale(5)

名称

locale - 用户环境的子集,该子集取决于语言和文化习惯

描述

locale 定义了用户环境的子集,该子集取决于语言和文化习惯。它由一个或多个类别组成。每个类别都由其名称标识,用于控制系统组件行为的特定方面。类别名称对应于以下环境变量名称:

LC_CTYPE

字符分类和大小写转换。

LC_COLLATE

整理顺序。

LC_TIME

日期和时间格式。

LC_NUMERIC

数字格式。

LC_MONETARY

货币格式。

LC_MESSAGES

信息性和诊断性信息与交互式响应的格式。

标准实用程序的行为基于当前语言环境,如每个实用程序的 "ENVIRONMENT VARIABLES"(环境变量)部分中所定义。一些 C 语言函数的行为也会基于当前语言环境而改变,如最后对 setlocale(3C) 的调用所定义的那样。

由实现提供的语言环境之外的语言环境可以由应用程序通过 localedef(1) 实用程序创建。使用环境变量时用于指定语言环境的值将是创建语言环境时指定为 localedefname 操作数的字符串。字符串 “C” 和 “POSIX” 保留为 POSIX 语言环境的标识符。

应用程序可以通过调用具有相应值的 setlocale() 函数来选择所需的语言环境。如果调用带空字符串的函数,例如:

setlocale(LC_ALL, "");

将使用对应环境变量的值。如果取消设置环境变量或者将环境变量设置为空字符串,则 setlocale() 函数将设置相应的环境。

语言环境定义

语言环境可以使用 localedef 实用程序接受的文件格式进行说明。

语言环境定义文件必须包含一个或多个语言环境类别源定义,且不得包含同一语言环境类别的多个定义。

类别源定义由类别头、类别正文和类别尾部组成。类别头包含类别的字符串命名,以字符 LC_ 开头。类别尾部包含字符串 END,后跟一个或多个空白字符和对应类别头中使用的字符串。

类别正文包含一行或多行文本。每行包含一个标识符,后面跟可选的一个或多个操作数。标识符是标识特定语言环境元素或整理元素的关键字。语言环境内的每个关键字必须具有一个唯一名称(即两个类别不能有名称相同的关键字)。关键字不能以字符 LC_ 开头。必须用一个或多个空白字符将标识符与操作数隔开。

操作数必须是字符、整理元素或字符串。字符串必须使用双引号 () 括起来。字符串中的文本双引号前面必须带有 <转义字符>,如下所述。当关键字后跟多个操作数时,必须使用分号 (;) 分隔这些操作数。分号前后都允许使用空白字符。

文件中的第一个类别头前面可以有用于修改注释字符的行。它具有以下格式,从第 1 列开始:

"comment_char %c\n",<comment character>

注释字符缺省为井号 (#)。第一个位置中的空白行和包含 <注释字符> 的行将被忽略。

文件中的第一个类别头前面可以有用于修改要在文件中使用的转义符的行。它具有以下格式,从第 1 列开始:

"escape_char %c\n",<escape character>

转义符缺省为反斜杠。

将转义符作为行的最后一个字符可以续行;输入中的这种续行符将被丢弃。虽然实现不需要接受连续行中长度超过 {LINE_MAX} 个字节的部分,但它不会对连续行的累计长度施加限制。注释行无法使用转义的换行符进行续行。

单个字符、字符串中的字符和整理字符必须使用符号名称表示,如下面所定义。此外,字符可以使用该字符自身表示,或者表示为八进制、十六进制或十进制常量。使用非符号表示法时,所得到的语言环境定义在很多情况下无法在各系统之间移植。左尖括号 (<) 是保留符号,表示符号名称的开始,用于表示自身时,前面必须加转义字符。以下规则适用于字符表示形式:

  1. 字符可以通过括在尖括号(<>)内的符号名称表示。该符号名称(包括尖括号)必须与通过 localedef – f 选项指定的字符映射文件中定义的符号名称完全一致,并将替换为由与字符映射文件中的符号名称关联的值确定的字符值。使用字符映射文件中没有的符号名称将会导致错误,除非类别是 LC_CTYPE 或 LC_COLLATE,在这种情况下将会导致警告(有关由于错误和警告导致的操作的说明,请参见 localedef(1))。如果 collating-elementcollating-symbol 部分中指定的符号名称与字符映射文件(如果存在)中的符号名称重复,则是错误做法。在符号名称中使用转义符或右尖括号无效,除非该字符的前面带有转义符。

    示例:

    <C>;<c-cedilla> "<M><a><y>"
  2. 一个字符可以用该字符自身表示,在这种情况下,该字符的值与实现相关。在字符串中,双引号字符、转义符和右尖括号字符必须进行转义(前面带有转义符),才能解释为该字符自身。在字符串外部,以下字符

    ,     ;     <     > escape_char

    必须进行转义才能解释为该字符自身。

    示例:

    c       "May"
  3. 字符可以表示为八进制常量。八进制常量指定为转义符后跟两个或更多个八进制数字。每个常量表示一个字节值。多字节值可以用按字节顺序指定的串联常量表示,最后一个常量指定字符的最低有效字节。

    示例:

    \143;\347;\143\150    "\115\141\171"
  4. 字符可以表示为十六进制常量。十六进制常量指定为转义符后跟 x,再跟两个或更多个十六进制数字。每个常量表示一个字节值。多字节值可以用按字节顺序指定的串联常量表示,最后一个常量指定字符的最低有效字节。

    示例:

    \x63;\xe7;\x63\x68    "\x4d\x61\x79"
  5. 字符可以表示为十进制常量。十进制常量指定为转义字符后跟 d,再跟两个或更多个十进制数字。每个常量表示一个字节值。多字节值可以用按字节顺序指定的串联常量表示,最后一个常量指定字符的最低有效字节。

    示例:

    \d99;\d231;\d99\d104   "\d77\d97\d121"

    无论是使用符号名称、字符自身,还是八进制、十进制或十六进制常量,只能指定为其创建语言环境定义的字符集中存在的字符。如果存在字符映射文件,则只能使用八进制、十进制或十六进制常量指定字符映射文件中定义的字符。可以指定字符映射文件中不存在的符号名称,但这些名称将被忽略,如上面的第 1 项下所述。

LC_CTYPE

LC_CTYPE 类别定义字符分类、大小写转换和其他字符属性。此外,可以通过表示省略号的三个相邻句点 (...) 表示一系列字符。指定的省略号将解释为以下含义:省略号前面和后跟的值之间的所有值表示有效字符。指定的省略号仅在单编码字符集(即一组相同大小的字符)中有效。省略号将解释为在列表中包括以下所有字符,即编码值大于省略号前面字符的编码值、小于省略号后跟字符的编码值的所有字符。

示例:

\x30;...;\x39;

在字符类中包括编码值介于端点之间的所有字符。

可以识别以下关键字。在说明中,术语“自动包括”意味着包括或省略所引用的任何字符都不属于错误。

字符类 digitxdigitlowerupperspace 具有一组自动包括的字符。仅当字符值(即编码)不同于实现缺省值时,才需要指定这些字符。

upper

定义要归类为大写字母的字符。

在 POSIX 语言环境中,包括 26 个大写字母:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

在语言环境定义文件中,不能指定为关键字 cntrldigitpunctspace 指定的字符。大写字母 AZ 自动包括在此类中。

lower

定义要归类为小写字母的字符。在 POSIX 语言环境中,包括 26 个小写字母:

a b c d e f g h i j k l m n o p q r s t u v w x y z

在语言环境定义文件中,不能指定为关键字 cntrldigitpunctspace 指定的字符。可移植字符集中的小写字母 az 自动包括在此类中。

alpha

定义要归类为字母的字符。

在 POSIX 语言环境中,包括 upperlower 类中的所有字符。

在语言环境定义文件中,不能指定为关键字 cntrldigitpunctspace 指定的字符。归类为 upperlower 的字符自动包括在此类中。

digit

定义要归类为数字的字符。

在 POSIX 语言环境中,仅包括

0 1 2 3 4 5 6 7 8 9

字符。

在语言环境定义文件中,只能指定数字 0123456789(以数值的连续升序顺序指定)。可移植字符集中的数字 09 自动包括在此类中。

定义字符类 digit 仅需要十个字符;可以指定定义数字的字符;不能在此处指定替代数字(例如印地语或日文汉字)。

alnum

定义要归类为字母和数字的字符。只能指定为 alphadigit 关键字指定的字符。为关键字 alphadigit 指定的字符自动包括在此类中。

space

定义要归类为空格字符的字符。

在 POSIX 语言环境中,至少包括字符 SPACEFORMFEEDNEWLINECARRIAGE RETURNTABVERTICAL TAB

在语言环境定义文件中,不能指定为关键字 upperloweralphadigitgraphxdigit 指定的字符。可移植字符集中的 SPACEFORMFEEDNEWLINECARRIAGE RETURNTABVERTICAL TAB 字符以及 blank 类中包括的任何字符都自动包括在此类中。

cntrl

定义要归类为控制字符的字符。

在 POSIX 语言环境中,不包括 alphaprint 类中的字符。

在语言环境定义文件中,不能指定为关键字 upperloweralphadigitpunctgraphprintxdigit 指定的字符。

punct

定义要归类为标点字符的字符。

在 POSIX 语言环境中,不包括空格字符,也不包括 alphadigitcntrl 类中的任何字符。

在语言环境定义文件中,不能指定为关键字 upperloweralphadigitcntrlxdigit 指定的字符或指定为空格字符的字符。

graph

定义要归类为可列显字符的字符,不包括空格字符。

在 POSIX 语言环境中,包括 alphadigitpunct 类中的所有字符;不包括 cntrl 类中的字符。

在语言环境定义文件中,为关键字 upperloweralphadigitxdigitpunct 指定的字符自动包括在此类中。不能指定为关键字 cntrl 指定的字符。

print

定义要归类为可列显字符的字符,包括空格字符。

在 POSIX 语言环境中,包括 graph 类中的所有字符;不包括 cntrl 类中的字符。

在语言环境定义文件中,为关键字 upperloweralphadigitxdigitpunct 指定的字符和空格字符自动包括在此类中。不能指定为关键字 cntrl 指定的字符。

xdigit

定义要归类为十六进制数字的字符。

在 POSIX 语言环境中,仅包括:

0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f

字符。

在语言环境定义文件中,只能指定为类 digit 定义的字符(以数值的连续升序顺序指定),后跟表示十六进制数字 10 到 15(包括这两个数字)的由六个字符组成的一个或多个字符集,每个字符集都按升序排列(例如 A, B, C, D, E, F, a, b, c, d, e, f)。可移植字符集中的数字 09、大写字母 AF 和小写字母 af 自动包括在此类中。

定义字符类 xdigit 要求此处同时包括字符类 digit 中包括的字符。

blank

定义要归类为空白字符的字符。

在 POSIX 语言环境中,仅包括空格字符和制表符。

在语言环境定义文件中,空格字符和制表符自动包括在此类中。

charclass

以分号分隔的字符串形式定义一个或多个语言环境特定的字符类名称。随后可以在 LC_CTYPE 定义中定义每个指定的字符类。字符类名称由可移植文件名字符集中的字母数字字符组成,至少一个字节,至多 {CHARCLASS_NAME_MAX} 个字节。字符类名称的第一个字符不能是数字。该名称不能与本文档中定义的任何 LC_CTYPE 关键字相同。

charclass-name

定义要归类为属于指定语言环境特定的字符类的字符。在 POSIX 语言环境中,指定的语言环境特定的字符类不需要存在。如果用 charclass 关键字定义了类名称,但随后未将任何字符分配给该名称,这不算是错误;它表示该类不包含任何属于它的字符。charclass-name 可以用作 wctype(3C) 函数的 property 参数,在正则表达式和 shell 模式匹配括号表达式中使用,以及供 tr(1) 命令使用。

toupper

定义小写字母与大写字母之间的映射。

在 POSIX 语言环境中,至少以下 26 个小写字符:

a b c d e f g h i j k l m n o p q r s t u v w x y z

将映射到对应的 26 个大写字符:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

在语言环境定义文件中,操作数由分号分隔的字符对组成。每个字符对中的字符由逗号分隔,并且该对用括号括起。每对中的第一个字符是小写字母,第二个字符是对应的大写字母。只能指定为关键字 lowerupper 指定的字符。可移植字符集中的小写字母 az 及其对应的大写字母 AZ 自动包括在此映射中,但仅当语言环境定义中省略了 toupper 关键字时才会包括。

tolower

定义大写字母与小写字母之间的映射。

在 POSIX 语言环境中,至少以下 26 个大写字符:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

将映射到对应的 26 个小写字符:

a b c d e f g h i j k l m n o p q r s t u v w x y z

在语言环境定义文件中,操作数由分号分隔的字符对组成。每个字符对中的字符由逗号分隔,并且该对用括号括起。每对中的第一个字符是大写字母,第二个字符是对应的小写字母。只能指定为关键字 lowerupper 指定的字符。如果语言环境定义中省略了 tolower 关键字,则该映射将是为 toupper 指定的映射的反向映射。

LC_COLLATE

LC_COLLATE 类别为大量实用程序(例如 sort(1)uniq(1) 等)、正则表达式匹配(请参见 regex(5))以及 strcoll(3C)strxfrm(3C)wcscoll(3C)wcsxfrm(3C) 函数提供整理序列定义。

整理序列定义用于定义语言环境中的整理元素(字符和多字符整理元素)之间的相对顺序。此顺序以整理值表示,即通过为每个元素分配一个或多个整理值(也称为整理权重)。提供了以下功能:

  1. 多字符整理元素。指定多字符整理元素(即要整理为一个实体的两个或更多个字符的序列)。

  2. 用户定义的整理元素顺序。每个整理元素将分配一个用于定义其在字符(或基本)整理序列中的顺序的整理值。此顺序用于正则表达式和模式匹配,还用作排序的整理权重(除非另外显式指定了整理权重)。

  3. 多个权重和等效类。可以为整理元素分配一个或多个要在排序中使用的整理权重(上限为 {COLL_WEIGHTS_MAX})。以下将第一个权重称为主权重。

  4. 一对多映射.将单个字符映射到一个整理元素字符串。

  5. 等效类定义。两个或更多个整理元素具有相同的整理值(主权重)。

  6. 按权重排序。比较两个字符串以确定其相对顺序时,这两个字符串将先拆分为一系列整理元素。然后,将根据元素的相对主权重比较每个后续元素对中的元素。如果该权重相等且分配有多个权重,则将根据后续相对权重重新比较整理元素对,直至一对整理元素的比较结果不相同或权重用尽。

在整理序列定义中可识别以下关键字。以下各部分中详细介绍了这些关键字。

copy

指定用作此类别定义的现有语言环境的名称。如果指定了此关键字,则不能指定其他关键字。

collating-element

定义用于表示多字符整理元素的整理元素符号。此关键字是可选的。

collating-symbol

定义要在整理顺序声明中使用的整理符号。此关键字是可选的。

order_start

定义整理规则。此声明后跟一个或多个整理顺序声明,用于为整理元素分配字符整理值和整理权重。

order_end

指定整理顺序声明到此结束。

collating-element 关键字

除了字符集中的整理元素,collating-element 关键字也用于定义多字符整理元素。语法为:

"collating-element %s from \"%s\"\n",<collating-symbol>,<string>

<collating-symbol> 操作数是符号名称,括在尖括号(<>) 内,并且不得与当前字符映射文件(如果有)中的任何符号名称或此整理定义中定义的任何其他符号名称重复。该字符串操作数是由两个或更多个将整理为一个实体的字符组成的字符串。通过此关键字定义的 <collating-element> 将仅识别为 LC_COLLATE 类别。

示例:

collating-element <ch> from “<c><h>”
collating-element <e-acute> from “<acute><e>”
collating-element <ll> from “ll

collating-symbol 关键字

此关键字用于定义要在整理序列声明中使用的符号;即,用在 order_startorder_end 关键字之间。语法为:

"collating-symbol %s\n",<collating-symbol>

<collating-symbol> 是符号名称,括在尖括号(<>)内,并且不得与当前字符映射文件(如果有)中的任何符号名称或此整理定义中定义的任何其他符号名称重复。

通过此关键字定义的 collating-symbol 将仅识别为 LC_COLLATE 类别。

示例:

collating-symbol <UPPER_CASE>
collating-symbol <HIGH>

collating-symbol 关键字定义可以与字符顺序序列中的相对位置关联的符号名称。虽然此类符号名称不表示任何整理元素,但它可用作权重。

order_start 关键字

order_start 关键字必须位于整理顺序条目之前,同时定义此整理序列定义和其他整理规则的权重数目。

order_start 关键字的语法为:

"order_start %s;%s;...;%s\n",<sort-rules>,<sort-rules>

order_start 关键字的操作数是可选的。如果存在,则操作数定义要在比较字符串时应用的规则。操作数的数目定义为每个元素分配多少个权重。如果不存在任何操作数,则将假定使用一个 forward 操作数。如果存在,则第一个操作数定义在使用第一个(主)权重比较字符串时要应用的规则;第二个操作数定义在使用第二个权重比较字符串时要应用的规则,依此类推。各个操作数使用分号分隔 (;)。每个操作数由逗号 (,) 分隔的一个或多个整理指令组成。如果操作数的数目超过 {COLL_WEIGHTS_MAX} 限制,则实用程序将发出一条警告消息。支持以下指令:

forward

指定权重级别的比较操作从字符串开头向字符串结尾执行。

backward

指定权重级别的比较操作从字符串末尾向字符串开头执行。

position

指定权重级别的比较操作将考虑字符串中不受 IGNORE 影响的元素的相对位置。从比较的开始位置起,在受 IGNORE 影响的整理元素之后最先出现不受 IGNORE 影响的元素的那个字符串首先整理。如果两个字符串在同一相对位置包含不受 IGNORE 影响的字符,则由分配给元素的整理值确定排序顺序。在相等的情况下,将按照相同方式检查不受 IGNORE 影响的后续字符。

指令 forwardbackward 互斥。

示例:

order_start	forward;backward

如果未指定任何操作数,则假定使用单个 forward 操作数。

整理顺序

order_start 关键字后跟整理标识符条目。整理元素条目的语法为:

"%s %s;%s;...;%s\n"<collating-identifier>,<weight>,<weight>,...

每个 collating-identifier 都包含上面的“语言环境定义”中所述的一个字符、一个 <collating-element>、一个 <collating-symbol>、一个省略号或特殊符号 UNDEFINED。所指定的整理元素顺序将确定字符顺序序列,这样每个整理元素比较的元素都少于其后跟元素的数目。NUL 字符的比较优先级低于任何其他字符。

<collating-element> 用于指定多字符整理元素,并指示通过 <collating-element> 指定的字符序列将作为一个单元整理且该序列的相对顺序由元素位置指定。

<collating-symbol> 用于定义要在权重使用的元素在相对顺序中的位置。不使用 <collating-symbol> 指定权重。

省略号指定一系列要将根据其编码字符值进行整理的字符。省略号解释为,当前编码字符集中编码字符集值大于上一行中字符的值、小于下一行中字符的编码字符集值的所有元素,将放置在字符整理顺序中的上一个字符和下一个字符之间,并根据其编码字符集值按升序排列。以省略号开头解释为上一行指定了空字符,以省略号结尾解释为下一行指定了当前编码字符集中最高的编码字符集值。如果上一行或下一行未指定当前编码字符集中的字符,则省略号将视为无效。使用省略号会将定义与特定的编码字符集相关联,并可能会阻止该定义在不同实现之间移植。

符号 UNDEFINED 解释为包括未显式指定或通过省略号指定的所有编码字符集值。此类字符将按照该符号指示的位置插入字符整理顺序中,并根据其编码字符集值按升序排列。如果未指定 UNDEFINED 符号,并且当前编码字符集包含此部分中未指定的字符,则实用程序将发出一条警告消息,并将此类字符放置在字符整理顺序结尾。

每个 collation-element 的可选操作数用于定义整理元素的主权重、次权重或后续权重。第一个操作数指定相对主权重,第二个操作数指定相对次权重,依此类推。可以为两个或更多个 collation-element 分配相同的权重;如果这些元素具有相同的主权重,则它们属于同一等效类。整理的行为方式如下,对于每个权重级别,受 IGNORE 影响的元素将被删除,除非使用 order_start 关键字为相应的级别指定了 position 整理指令。然后,根据元素的相对权重比较每个后续元素对。如果两个字符串的比较结果为相等,则将对下一个权重级别重复该过程,直到达到上限 {COLL_WEIGHTS_MAX}。

权重使用上述“语言环境定义”中说明的字符、<collating-symbol>、<collating-element>、省略号或特殊符号 IGNORE 表示。单个字符、<collating–symbol> 或 <collating–element> 表示在字符或符号的字符整理序列中的相对位置,而不是字符自身。因此,不为权重分配绝对值,而是基于整理元素在字符整理序列中的顺序,使用分配给该整理元素的相对顺序值表示特定权重。

一对多映射通过指定两个或更多个串联的字符或符号名称来指示。如果为字符 <eszet> 指定了字符串 “<s><s>” 作为权重,则执行比较时就像出现的所有 <eszet> 字符都替换为 <s><s>(假定 <s> 具有整理权重 <s>)。如果必须将 <eszet> 和 < s><s> 定义为等效类,则必须为字符串 ss 定义整理元素。

通过省略号指定的所有字符缺省情况下将会分配唯一的权重,该权重等于字符的相对顺序。通过显式或隐式 UNDEFINED 特殊符号指定的字符缺省情况下将会分配相同的主权重(即,属于同一等效类)。作为权重的省略号会解释为,该序列中的每个字符都有唯一权重,该权重等于字符整理序列中该字符的相对顺序。如果整理元素既不是省略号也不是特殊符号 UNDEFINED,则使用省略号作为权重将会视为错误。

将特殊关键字 IGNORE 作为权重表示,当在指定 IGNORE 的级别使用权重比较字符串时,将忽略整理元素,就像该字符串不包含整理元素一样。在正则表达式和模式匹配中,受其主权重的 IGNORE 影响的所有字符将构成一个等效类。

所有空操作数将解释为整理元素自身。

例如,顺序声明:

<a>	 <a>;<a>

等效于:

<a>

如果整理元素为省略号,则可以使用省略号作为操作数,并且该省略号将解释为通过省略号定义的每个字符的值。

此部分中定义的整理顺序定义正则表达式中方括号表达式的解释方式。

示例:

order_start
forward;backward
UNDEFINED
IGNORE;IGNORE
<LOW>
<space>
<LOW>;<space>
. . .
<LOW>;. . .
<a>
<a>;<a>
<a-acute>
<a>;<a-acute>
<a-grave>
<a>;<a-grave>
<A>
<a>;<A>
<A-acute>
<a>;<A-acute>
<A-grave>
<a>;<A-grave>
<ch>
<ch>;<ch>
<Ch>
<ch>;<Ch>
<s>
<s>;<s>
<eszet>
"<s><s>";"<eszet><eszet>"
order_end

此示例的解释如下:

  1. UNDEFINED 意味着,整理时将忽略此定义中未指定的所有字符(未显式指定或通过省略号指定);对于正则表达式,将首先对这些字符进行排序。

  2. <space> 和 <a> 之间的所有字符具有相同的主等效类,各个字符的次权重基于其序数编码值。

  3. 基于大写字符或小写字符 a 的所有字符属于相同的主等效类。

  4. 多字符整理元素 <ch> 由整理符号 <ch> 表示,属于与多字符整理元素 <Ch> 相同的主等效类。

order_end 关键字

整理顺序条目必须使用 order_end 关键字结尾。

LC_MONETARY

LC_MONETARY 类别定义用于设置货币数值信息格式的规则和符号。通过 localeconv(3C) 函数可获取这些信息

在语言环境的此类别中定义了以下项。定义语言环境时,这些项的名称是 localedef(1) 实用程序可识别的关键字。这些名称也类似于 <locale.h> 中定义的 lconv 结构的成员名称。对于未指定的整数项,localeconv 函数返回 {CHAR_MAX};对于未指定或大小为零的字符串项,则返回空字符串 ("")。

在语言环境定义文件中,这些操作数是字符串。对于某些关键字,字符串只能包含整数。未提供的关键字、设置为空字符串的字符串值 ("") 或者设置为 –1 的整数关键字用于指示该值在语言环境中不可用。

int_curr_symbol

国际货币符号。操作数是一个由四个字符组成的字符串,前三个字符包含根据 ISO 4217 标准指定的字母式国际货币符号。第四个字符是用于将国际货币符号与货币数量隔开的字符。

currency_symbol

用作本地货币符号的字符串。

mon_decimal_point

操作数是包含某个符号的字符串,该符号在货币格式的数量中用作十进制分隔符(基数字符)。

mon_thousands_sep

操作数是包含某个符号的字符串,该符号在货币格式的数量中用作划分十进制分隔符左侧数字的分隔符。

mon_grouping

定义货币格式的数量中每组数字的大小。操作数是使用分号分隔的一系列整数。每个整数指定每一组中数字的个数,第一个整数定义紧接在十进制分隔符前面的组的大小,后续整数定义后续组。如果最后一个整数不是 –1,则上一个组(如果有)的大小将重复用于其余数字。如果最后一个整数是 –1,则不执行进一步的分组。

下面是 mon_grouping 关键字的一个解释示例。假定要设置格式的值为 123456789mon_thousands_sep',下表显示了相应结果。第三列显示了 ISO C 标准的等效字符串,localeconv 函数将使用该字符串来适应此分组。

mon_grouping   Formatted Value  ISO C String

3;-1           123456'789       "\3\177"
3              123'456'789      "\3"
3;2;-1         1234'56'789      "\3\2\177"
3;2            12'34'56'789     "\3\2"
-1             1234567898       "\177"

在这些示例中,{CHAR_MAX} 的八进制值为 177。

positive_sign

用于指示非负值格式的货币数量的字符串。

negative_sign

用于指示负值格式的货币数量的字符串。

int_frac_digits

表示使用 int_curr_symbol 时写入货币格式的数量中的小数数字(即十进制分隔符右侧的数字)个数的整数。

frac_digits

表示使用 currency_symbol 时写入货币格式的数量中的小数数字(即十进制分隔符右侧的数字)个数的整数。

p_cs_precedes

在遵循 SUSv3 标准的应用程序中,如果 currency_symbol 位于具有非负值的货币数量值之前,则是设置为 1 的整数,如果该符号位于值之后,则是设置为 0 的整数。

在不遵循 SUSv3 标准的应用程序中,如果 currency_symbolint_currency_symbol 位于具有非负值的货币数量值之前,则是设置为 1 的整数,如果该符号位于值之后,则是设置为 0 的整数。

p_sep_by_space

在遵循 SUSv3 标准的应用程序中,如果未使用空格将 currency_symbol 与具有非负值的货币数量值隔开,则是设置为 0 的整数,如果使用了空格将该符号与值隔开,则是设置为 1 的整数,如果使用了空格将该符号与符号字符串(如果相邻)隔开,则是设置为 2 的整数。

在不遵循 SUSv3 标准的应用程序中,如果未使用空格将 currency_symbolint_curr_symbol 与具有非负值的货币数量值隔开,则是设置为 0 的整数,如果使用了空格将该符号与值隔开,则是设置为 1 的整数,如果使用了空格将该符号与符号字符串(如果相邻)隔开,则是设置为 2 的整数。

n_cs_precedes

在遵循 SUSv3 标准的应用程序中,如果 currency_symbol 位于具有负值的货币数量值之前,则是设置为 1 的整数,如果该符号位于值之后,则是设置为 0 的整数。

在不遵循 SUSv3 标准的应用程序中,如果 currency_symbolint_currency_symbol 位于具有负值的货币数量值之前,则是设置为 1 的整数,如果该符号位于值之后,则是设置为 0 的整数。

n_sep_by_space

在遵循 SUSv3 标准的应用程序中,如果未使用空格将 currency_symbol 与具有负值的货币数量值隔开,则是设置为 0 的整数,如果使用了空格将该符号与值隔开,则是设置为 1 的整数,如果使用了空格将该符号与符号字符串(如果相邻)隔开,则是设置为 2 的整数。

在不遵循 SUSv3 标准的应用程序中,如果未使用空格将 currency_symbolint_curr_symbol 与具有负值的货币数量值隔开,则是设置为 0 的整数,如果使用了空格将该符号与值隔开,则是设置为 1 的整数,如果使用了空格将该符号与符号字符串(如果相邻)隔开,则是设置为 2 的整数。

p_sign_posn

设置为某个值的整数,指示如何定位具有非负值的货币数量的 positive_sign。可识别下列 p_sign_posnn_sign_posn 整数值:

在遵循 SUSv3 标准的应用程序中:

0

使用括号将数量和 currency_symbol 括起来。

1

符号字符串位于数量和 currency_symbol 之前。

2

符号字符串位于数量和 currency_symbol 之后。

3

符号字符串位于 currency_symbol 之前。

4

符号字符串位于 currency_symbol 之后。

不遵循 SUSv3 标准的应用程序中:

0

使用括号将数量和 currency_symbolint_curr_symbol 括起来。

1

符号字符串位于数量和 currency_symbolint_curr_symbol 之前。

2

符号字符串位于数量和 currency_symbolint_curr_symbol 之后。

3

符号字符串位于 currency_symbolint_curr_symbol 之前。

4

符号字符串位于 currency_symbolint_curr_symbol 之后。

n_sign_posn

设置为某个值的整数,指示如何定位负值格式的货币数量的 negative_sign

int_p_cs_precedes

如果 int_curr_symbol 位于具有非负值的货币数量值之前,则是设置为 1 的整数,如果该符号位于值之后,则是设置为 0 的整数。

int_n_cs_precedes

如果 int_curr_symbol 位于具有负值的货币数量值之前,则是设置为 1 的整数,如果该符号位于值之后,则是设置为 0 的整数。

int_p_sep_by_space

如果未使用空格将 int_curr_symbol 与具有非负值的货币数量值隔开,则是设置为 0 的整数,如果使用了空格将该符号与值隔开,则是设置为 1 的整数,如果使用了空格将该符号与符号字符串(如果相邻)隔开,则是设置为 2 的整数。

int_n_sep_by_space

如果未使用空格将 int_curr_symbol 与具有负值的货币数量值隔开,则是设置为 0 的整数,如果使用了空格将该符号与值隔开,则是设置为 1 的整数,如果使用了空格将该符号与符号字符串(如果相邻)隔开,则是设置为 2 的整数。

int_p_sign_posn

设置为某个值的整数,指示如何定位国际货币格式的正货币数量的 positive_sign。可识别下列 int_p_sign_posnint_n_sign_posn 整数值:

0

使用括号将数量和 int_curr_symbol 括起来。

1

符号字符串位于数量和 int_curr_symbol 之前。

2

符号字符串位于数量和 int_curr_symbol 之后。

3

符号字符串位于 int_curr_symbol 之前。

4

符号字符串位于 int_curr_symbol 之后。

int_n_sign_posn

设置为某个值的整数,指示如何定位国际货币格式的负货币数量的 negative_sign

下面显示了各种组合的结果:

p_sep_by_space
2
1
0
p_cs_precedes= 1
p_sign_posn= 0
($1.25)
($1.25)
($1.25)
p_sign_posn= 1
+$1.25
+$1.25
+$1.25
p_sign_posn= 2
$1.25+
$1.25+
$1.25+
p_sign_posn= 3
+$1.25
+$1.25
+$1.25
p_sign_posn= 4
$+1.25
$+1.25
$+1.25
p_cs_precedes= 0
p_sign_posn= 0
(1.25 $)
(1.25 $)
(1.25$)
p_sign_posn= 1
+1.25 $
+1.25 $
+1.25$
p_sign_posn= 2
1.25$ +
1.25 $+
1.25$+
p_sign_posn= 3
1.25+ $
1.25 +$
1.25+$
p_sign_posn= 4
1.25$ +
1.25 $+
1.25$+

下面列出了 POSIX 语言环境的货币格式定义。代码列表描述了 localedef(1) 输入,表给出了相同信息,但添加了 localeconv(3C)nl_langinfo(3C) 格式。POSIX 语言环境中未指定所有值。

LC_MONETARY
# This is the POSIX locale definition for
# the LC_MONETARY category.
#
int_curr_symbol       ""
currency_symbol       ""
mon_decimal_point     ""
mon_thousands_sep     ""
mon_grouping          -1
positive_sign         ""
negative_sign         ""
int_frac_digits       -1
frac_digits           -1
p_cs_precedes         -1
p_sep_by_space        -1
n_cs_precedes         -1
n_sep_by_space        -1
p_sign_posn           -1
n_sign_posn           -1
int_p_cs_precedes     -1
int_p_sep_by_space    -1
int_n_cs_precedes     -1
int_n_sep_by_space    -1
int_p_sign_posn       -1
int_n_sign_posn       -1
#
END LC_MONETARY

条目 n/a 指示 POSIX 语言环境中未提供该值。

LC_NUMERIC

LC_NUMERIC 类别定义将用于设置非货币数值信息格式的规则和符号。通过 localeconv(3C)函数可获取这些信息。

在语言环境的此类别中定义了以下项。定义语言环境时,这些项的名称是 localedef 实用程序可识别的关键字。这些名称也类似于 <locale.h> 中定义的 lconv 结构的成员名称。对于未指定的整数项,localeconv() 函数返回 {CHAR_MAX};对于未指定或大小为零的字符串项,则返回空字符串 (“”)。

在语言环境定义文件中,这些操作数是字符串。对于某些关键字,字符串只能包含整数。未提供的关键字、设置为空字符串的字符串值 (“”) 或者设置为 –1 的整数关键字用于指示该值在语言环境中不可用。可以识别以下关键字:

decimal_point

操作数是包含某个符号的字符串,该符号在非货币格式的数值数量中用作十进制分隔符(基数字符)。此关键字不能省略并且不能设置为空字符串。在相应标准将 decimal_point 限制为单字节的环境中,指定多字节操作数的结果为未指定。

thousands_sep

操作数是包含某个符号的字符串,该符号在非货币格式的数值数量中用作划分十进制分隔符左侧数字的分隔符。在相应标准将 thousands_sep 限制为单字节的环境中,指定多字节操作数的结果为未指定。

grouping

定义非货币格式的数量中每组数字的大小。操作数是使用分号分隔的一系列整数。每个整数指定每一组中数字的个数,第一个整数定义紧接在十进制分隔符前面的组的大小,后续整数定义后续组。如果最后一个整数不是 −1,则上一个组(如果有)的大小将重复用于其余数字。如果最后一个整数是 –1,则不执行进一步的分组。下面列出了 POSIX 语言环境的非货币数值格式定义。代码列表描述了 localedef 输入,表给出了相同信息,但添加了 localeconv 值和 nl_langinfo 常量。

LC_NUMERIC
# This is the POSIX locale definition for
# the LC_NUMERIC category.
#
decimal_point	"<period>"
thousands_sep	""
grouping	-1
#
END LC_NUMERIC
POSIX 语言环境
langinfo
localeconv()
localedef
常量
decimal_point
"."
RADIXCHAR
"."
.
thousands_sep
n/a
THOUSEP
""
""
grouping
n/a
-
""
−1

条目 n/a 指示 POSIX 语言环境中未提供该值。

LC_TIME

LC_TIME 类别定义 date(1) 支持的字段描述符的解释方式,并影响 strftime(3C)wcsftime(3C)strptime(3C)nl_langinfo(3C) 函数的行为。由于 C 语言访问和语言环境定义的接口大不相同,因此对其分别进行了说明。对于语言环境定义,可识别下列必需关键字:

abday

定义缩写工作日名称,与 %a 字段描述符(strftime()wcsftime()strptime() 函数中的转换规范)对应。操作数由七个分号分隔的字符串组成,每一个都括在双引号中。第一个字符串是与星期日对应的那一天的缩写名称,第二个字符串是与星期一对应的那一天的缩写名称,依此类推。

day

定义完整工作日名称,与 %A 字段描述符对应。操作数由七个分号分隔的字符串组成,每一个都括在双引号中。第一个字符串是与星期日对应的那一天的完整名称,第二个字符串是与星期一对应的那一天的完整名称,依此类推。

abmon

定义缩写月份名称,与 %b 字段描述符对应。操作数由十二个分号分隔的字符串组成,每一个都括在双引号中。第一个字符串是一年中第一个月(一月)的缩写名称,第二个字符串是第二个月的缩写名称,依此类推。

mon

定义完整月份名称,与 %B 字段描述符对应。操作数由十二个分号分隔的字符串组成,每一个都括在双引号中。第一个字符串是一年中第一个月(一月)的完整名称,第二个字符串是第二个月的完整名称,依此类推。

d_t_fmt

定义相应日期和时间表示形式,与 %c 字段描述符对应。操作数由一个字符串组成,可以包含字符和字段描述符的任意组合。此外,该字符串还可以包含转义序列 \\、\a\b\f\n\r\t\v

date_fmt

定义相应日期和时间表示形式,与 %C 字段描述符对应。操作数由一个字符串组成,可以包含字符和字段描述符的任意组合。此外,该字符串还可以包含转义序列 \\\a\b\f\n\r\t\v

d_fmt

定义相应日期表示形式,与 %x 字段描述符对应。操作数由一个字符串组成,可以包含字符和字段描述符的任意组合。此外,该字符串还可以包含转义序列 \\\a\b\f\n\r\t\v

t_fmt

定义相应时间表示形式,与 %X 字段描述符对应。操作数由一个字符串组成,可以包含字符和字段描述符的任意组合。此外,该字符串还可以包含转义序列 \\\a\b\f\n\r\t\v

am_pm

定义上午下午字符串的相应表示形式,与 %p 字段描述符对应。操作数由两个分号分隔的字符串组成,每一个都括在双引号中。第一个字符串表示上午指定方式,最后一个字符串表示下午指定方式。

t_fmt_ampm

am_pm 的 12 小时时钟格式定义相应时间表示形式,与 %r 字段描述符对应。操作数由一个字符串组成,可以包含字符和字段描述符的任意组合。如果该字符串为空,则语言环境中不支持 12 小时格式。

era

定义语言环境中的每个时代如何计数和显示年份。操作数由分号分隔的字符串组成。每个字符串都是具有下列格式的时代说明段:

direction:offset:start_date:end_date:era_name:era_format

其中的各部分遵循下面的定义。可以有多个时代说明段,具体数量取决于用户需要描述多少个不同的时代。

时代的开始时间可能不是最早的时间点,例如公元前基督教时代的开始时间为公元 1 年的 1 月 1 日的前一天,由此延续到更早的时间。

direction

+ 字符。+ 字符指示接近 start_date 的年份的数字小于接近 end_date 的年份的数字。 字符指示接近 start_date 的年份的数字大于接近 end_date 的年份的数字。

offset

时代中最接近 start_date 的年份的数字,与 %Eg%Ey 字段描述符对应。

start_date

yyyy/mm/dd 格式的日期,其中 yyyymmdd 分别是时代开始的年份、月份和日期数字。公元 1 年之前的年份以负数表示。

end_date

start_date 格式相同的时代结束日期,或者为两个特殊值 –* 或 +* 之一。值 –* 指示结束日期为时间的起点。值 +* 指示结束日期为时间的终点。

era_name

表示时代名称的字符串,与 %EC 字段描述符对应。

era_format

用于设置时代中年份的格式的字符串,与 %EG%EY 字段描述符对应。

era_d_fmt

定义采用替代时代表示法的日期格式,与 %Ex 字段描述符对应。

era_t_fmt

定义语言环境的相应替代时间格式,与 %EX 字段描述符对应。

era_d_t_fmt

定义语言环境的相应替代日期和时间格式,与 %Ec 字段描述符对应。

alt_digits

定义数字的替代符号,与 %O 字段描述符修饰符对应。操作数由分号分隔的字符串组成,每一个都括在双引号中。第一个字符串是与零对应的替代符号,第二个字符串是与一对应的符号,依此类推。最多可以指定 100 个替代符号字符串。%O 修饰符指示将使用与通过字段描述符指定的值对应的字符串代替该值。

LC_TIME C 语言访问

可以访问以下信息。这些信息对应于 <langinfo.h> 中定义的常量并用作 nl_langinfo(3C) 函数的参数。

ABDAY_x

缩写的工作日名称(例如 Sun),其中 x 是 1 到 7 之间的一个数字。

DAY_x

完整的工作日名称(例如 Sunday),其中 x 是 1 到 7 之间的一个数字。

ABMON_x

缩写的月份名称(例如 Jan),其中 x 是 1 到 12 之间的一个数字。

MON_x

完整的月份名称(例如 January),其中 x 是 1 到 12 之间的一个数字。

D_T_FMT

相应的日期和时间表示形式。

D_FMT

相应的日期表示形式。

T_FMT

相应的时间表示形式。

AM_STR

相应的上午后缀。

PM_STR

相应的下午后缀。

T_FMT_AMPM

AM_STRPM_STR. 的 12 小时时钟格式的相应时间表示形式。

ERA

时代说明段,用于描述语言环境中的每个时代如何计数和显示年份。每个时代说明段都具有下列格式:

direction:offset:start_date:end_date:era_name:era_format

其中的各部分遵循下面的定义。可以有多个时代说明段,具体数量取决于用户需要描述多少个不同的时代。时代说明段使用分号分隔。

时代的开始时间可能不是最早的时间点,例如公元前基督教时代的开始时间为公元 1 年的 1 月 1 日的前一天,由此延续到更早的时间。

direction

+ 或 – 字符。+ 字符指示接近 start_date 的年份的数字小于接近 end_date 的年份的数字。– 字符指示接近 start_date 的年份的数字大于接近 end_date 的年份的数字。

offset

时代中最接近 start_date 的年份的数字。

start_date

yyyy/mm//dd 格式的日期,其中 yyyymmdd 分别是时代开始的年份、月份和日期数字。公元 1 年之前的年份以负数表示。

end_date

start_date 格式相同的时代结束日期,或者为两个特殊值 –*+* 之一。值 –* 指示结束日期为时间的起点。值 +* 指示结束日期为时间的终点。

era_name

时代名称,与 %EC 转换规范对应。

era_format

时代中年份的格式,与 %EY%EY 转换规范对应。

ERA_D_FMT

年代日期格式。

ERA_T_FMT

语言环境的相应替代时间格式,与 %EX 字段描述符对应。

ERA_D_T_FMT

语言环境的相应替代日期和时间格式,与 %Ec 字段描述符对应。

ALT_DIGITS

数字的替代符号,与 %O 转换规范修饰符对应。该值由分号分隔的符号组成。第一个符号是对应于零的替代符号,第二个符号是对应于一的符号,依此类推。最多可以指定 100 个替代符号。下表显示了上述项与以下函数使用的转换说明符之间的对应关系:date(1)strftime(3C)wcsftime(3C)strptime(3C)

localedef
langinfo
转换
关键字
常量
说明符
abday
ABDAY_x
%a
day
DAY_x
%A
abmon
ABMON_x
%b
mon
MON
%B
d_t_fmt
D_T_FMT
%c
date_fmt
DATE_FMT
%C
d_fmt
D_FMT
%x
t_fmt
T_FMT
%X
am_pm
AM_STR
%p
am_pm
PM_STR
%p
t_fmt_ampm
T_FMT_AMPM
%r
era
ERA
%EC, %Eg,
%EG, %Ey, %EY
era_d_fmt
ERA_D_FMT
%Ex
era_t_fmt
ERA_T_FMT
%EX
era_d_t_fmt
ERA_D_T_FMT
%Ec
alt_digits
ALT_DIGITS
%O

LC_TIME 常规信息

尽管 POSIX 语言环境中的某些字段描述符(例如月份的名称)的第一个字母显示为大写,但在其他语言环境中不需要为大写。如果这些输出要在句子的开头使用,则使用这些字段的程序可能需要调整大写。

LC_TIME 中对 abdaydaymonabmon 的说明隐含了采用公历风格的日历(一周包含 7 天、一年包含 12 个月、闰年等等)。本文档集不介绍其他日历类型的时间字符串的格式设置。

如“语言环境定义”中的 datestrftime(3C) 所指定的那样,与可选关键字对应的字段描述符由一个修饰符和后跟的传统字段描述符(例如 %Ex)组成。如果实现不支持可选关键字,或者没有为当前语言环境指定可选关键字,则这些字段描述符将视为传统字段描述符。例如,假定以下关键字:

alt_digits	"0th" ; "1st" ; "2nd" ; "3rd" ; "4th" ; "5th" ; \
"6th" ; "7th" ; "8th" ; "9th" ; "10th">
d_fmt	"The %Od day of %B in %Y"

在 7/4/1776,%x 字段描述符将生成 “The 4th day of July in 1776”,而 7/14/1789 的结果为 “The 14 day of July in 1789”。上述示例仅用于描述目的。%O 修饰符主要用于提供 date 格式的日文汉字数字或印地语数字。

LC_MESSAGES

LC_MESSAGES 类别定义肯定性和否定性响应的格式和值。

以下关键字会识别为语言环境定义文件的一部分。nl_langinfo(3C) 函数接受前四个关键字的大写版本。

yesexpr

操作数由一个扩展的正则表达式组成(请参见 regex(5)),该表达式描述了需要肯定性或否定性响应的问题的可接受肯定性响应。

noexpr

操作数由一个扩展的正则表达式组成,该表达式描述对需要肯定性或否定性响应的问题的可接受否定性响应。

yesstr

操作数由一个固定字符串(不是正则表达式)组成,应用程序可以使用该字符串编写一条列出可接受的肯定性响应的消息,例如在提示符中显示的消息。

nostr

操作数由一个固定字符串组成,应用程序可以使用该字符串编写一条列出可接受的否定性响应的消息。POSIX 语言环境的肯定性和否定性响应的格式和值如下所示;该代码列表描述了 localedef 输入,表给出了相同信息,但添加了 nl_langinfo() 常量。

LC_MESSAGES
# This is the POSIX locale definition for
# the LC_MESSAGES category.
#
yesexpr "<circumflex><left-square-bracket><y><Y>\
        <right-square-bracket>"
#
noexpr  "<circumflex><left-square-bracket><n><N>\
        <right-square-bracket>"
#
yesstr	"yes"
nostr	"no"
END LC_MESSAGES
localedef 关键字
langinfo 常量
POSIX 语言环境值
yesexpr
YESEXPR
"^[yY]"
noexpr
NOEXPR
"^[nN]"
yesstr
YESSTR
"yes"
nostr
NOSTR
"no"

在遵循 SUSv3 标准的应用程序中,未提供有关 yesstrnostr 的信息。

另请参见

date(1)locale(1)localedef(1)sort(1)tr(1)uniq(1)localeconv(3C)nl_langinfo(3C)setlocale(3C)strcoll(3C)strftime(3C)strptime(3C)strxfrm(3C)wcscoll(3C)wcsftime(3C)wcsxfrm(3C)wctype(3C)attributes(5)charmap(5)extensions(5)regex(5)