LOCALE - Linux手册页

时间:2019-08-20 18:01:59  来源:igfitidea点击:

Linux程序员手册 第7部分
更新日期: 2019-03-06

名称

locale-多语言支持的描述

语法

#include <locale.h>

说明

语言环境是一组语言和文化规则。这些涵盖了方面,例如消息的语言,不同的字符集,字典惯例等。一个程序需要能够确定其区域设置并采取相应的行动,以适应不同的文化。

标头声明在此任务中有用的数据类型,函数和宏。

它声明的函数是setlocale(3)来设置当前语言环境,而localeconv(3)来获取有关数字格式的信息。

程序可能需要不同的区域信息类别。它们被声明为宏。使用它们作为setlocale(3)函数的第一个参数,可以将其中一个设置为所需的语言环境:

LC_ADDRESS(GNU extension, since glibc 2.2)
更改描述用于描述位置和与地理相关的项目的格式(例如邮政地址)的设置。需要此信息的应用程序可以使用nl_langinfo(3)检索非标准元素,例如_NL_ADDRESS_COUNTRY_NAME(以语言环境的语言表示的国家名称)和_NL_ADDRESS_LANG_NAME(以语言环境的语言表示的语言名称),它们返回诸如" Deutschland"和" Deutsch"(用于德语语言环境)。 (其他元素名称在中列出。)
LC_COLLATE
此类别控制用于排序和正则表达式的排序规则,包括字符等效类和多字符排序元素。此语言环境类别更改了strcoll(3)和strxfrm(3)函数的行为,这些函数用于比较本地字母中的字符串。例如,德语锐利s被排序为" ss"。
LC_CTYPE
此类别确定将字节序列解释为字符(例如,单字节字符还是多字节字符),字符分类(例如,字母或数字)以及字符类的行为。在glibc系统上,此类别还确定iconv(1)和iconv(3)的字符音译规则。它更改了字符处理和分类函数(例如isupper(3)和toupper(3))以及多字节字符函数(例如mblen(3)或wctomb(3))的行为。
LC_IDENTIFICATION(GNU extension, since glibc 2.2)
更改与语言环境的元数据相关的设置。需要此信息的应用程序可以使用nl_langinfo(3)检索非标准元素,例如_NL_IDENTIFICATION_TITLE(此语言环境文档的标题)和_NL_IDENTIFICATION_TERRITORY(此语言环境文档所适用的地理区域),这可能会返回诸如"美国"和"美国"。 (其他元素名称在中列出。)
LC_MONETARY
此类别确定用于与货币相关的数值的格式。这将更改localeconv(3)返回的信息,该信息描述了数字的通常打印方式,并带有小数点和小数逗号等详细信息。该信息由strfmon(3)函数内部使用。
LC_MESSAGES
此类别影响显示消息的语言以及肯定或否定答案的外观。 GNU C库包含gettext(3),ngettext(3)和rpmatch(3)函数,以简化此信息的使用。如果将类别设置为C以外的有效语言环境,则GNU gettext函数家族还遵循环境变量LANGUAGE(包含用冒号分隔的语言环境列表)。此类别还影响catopen(3)的行为。
LC_MEASUREMENT(GNU extension, since glibc 2.2)
更改与语言环境中的测量系统相关的设置(即,公制与美国惯用单位)。应用程序可以使用nl_langinfo(3)检索非标准的_NL_MEASUREMENT_MEASUREMENT元素,该元素返回一个指向值为1(公制)或2(美国惯用单位)的字符的指针。
LC_NAME(GNU extension, since glibc 2.2)
更改描述用于寻址人员的格式的设置。需要此信息的应用程序可以使用nl_langinfo(3)检索非标准元素,例如_NL_NAME_NAME_MR(男性通用称呼)和_NL_NAME_NAME_MS(女性通用称呼)元素,它们返回诸如" Herr"和" Frau"(德语)的字符串-语言区域设置)。 (其他元素名称在中列出。)
LC_NUMERIC
此类别确定用于非货币数值的格式设置规则,例如,千位分隔符和基数字符(在大多数英语国家中为句点,在许多其他地区为逗号)。它会影响诸如printf(3),scanf(3)和strtod(3)之类的功能。也可以使用localeconv(3)函数读取此信息。
LC_PAPER(GNU extension, since glibc 2.2)
更改与标准纸张尺寸的尺寸有关的设置(例如,美国字母与A4)。需要尺寸的应用程序可以通过使用nl_langinfo(3)检索非标准的_NL_PAPER_WIDTH和_NL_PAPER_HEIGHT元素来获取它们,它们返回以毫米为单位指定尺寸的int值。
LC_TELEPHONE(GNU extension, since glibc 2.2)
更改描述电话服务使用格式的设置。需要此信息的应用程序可以使用nl_langinfo(3)检索非标准元素,例如_NL_TELEPHONE_INT_PREFIX(用于在此区域设置中调用数字的国际前缀),该元素将返回字符串,例如" 49"(对于德国)。 (其他元素名称在中列出。)
LC_TIME
此类别控制用于日期和时间值的格式。例如,欧洲大部分地区使用24小时制,而美国使用12小时制。此类别的设置影响诸如strftime(3)和strptime(3)之类的功能的行为。
LC_ALL
上述所有的。

如果setlocale(3)的第二个参数是空字符串(对于默认语言环境),则使用以下步骤确定:

1.
如果存在非空环境变量LC_ALL,则使用LC_ALL的值。
2.
如果存在与上述类别之一名称相同的环境变量且该变量不为空,则将其值用于该类别。
3.
如果存在非空环境变量LANG,则使用LANG的值。

localeconv(3)函数返回的结构lconv中提供了有关本地数字格式的值,该函数具有以下声明:

struct lconv {

    /* Numeric (nonmonetary) information */

    char *decimal_point;     /* Radix character */
    char *thousands_sep;     /* Separator for digit groups to left
                                of radix character */
    char *grouping;     /* Each element is the number of digits in
                           a group; elements with higher indices
                           are further left.  An element with value
                           CHAR_MAX means that no further grouping
                           is done.  An element with value 0 means
                           that the previous element is used for
                           all groups further left. */

    /* Remaining fields are for monetary information */

    char *int_curr_symbol;   /* First three chars are a currency
                                symbol from ISO 4217.  Fourth char
                                is the separator.  Fifth char
                                is aq##代码##aq. */
    char *currency_symbol;   /* Local currency symbol */
    char *mon_decimal_point; /* Radix character */
    char *mon_thousands_sep; /* Like thousands_sep above */
    char *mon_grouping;      /* Like grouping above */
    char *positive_sign;     /* Sign for positive values */
    char *negative_sign;     /* Sign for negative values */
    char  int_frac_digits;   /* International fractional digits */
    char  frac_digits;       /* Local fractional digits */
    char  p_cs_precedes;     /* 1 if currency_symbol precedes a
                                positive value, 0 if succeeds */
    char  p_sep_by_space;    /* 1 if a space separates
                                currency_symbol from a positive
                                value */
    char  n_cs_precedes;     /* 1 if currency_symbol precedes a
                                negative value, 0 if succeeds */
    char  n_sep_by_space;    /* 1 if a space separates
                                currency_symbol from a negative
                                value */
    /* Positive and negative sign positions:
       0 Parentheses surround the quantity and currency_symbol.
       1 The sign string precedes the quantity and currency_symbol.
       2 The sign string succeeds the quantity and currency_symbol.
       3 The sign string immediately precedes the currency_symbol.
       4 The sign string immediately succeeds the currency_symbol. */
    char  p_sign_posn;
    char  n_sign_posn;
};

POSIX.1-2008 extensions to the locale API

POSIX.1-2008基于首次出现在GNU C库2.3版中的实现,对语言环境API的许多扩展进行了标准化。这些扩展旨在解决传统语言环境API与多线程应用程序以及必须处理多个语言环境的应用程序不能很好地混合的问题。

这些扩展采用新功能的形式,用于创建和操作语言环境对象(newlocale(3),freelocale(3),duplocale(3)和uselocale(3))以及带有后缀" _l"的各种新库函数(例如, toupper_l(3)),它扩展了传统的依赖于语言环境的API(例如toupper(3)),以允许指定在执行功能时应应用的语言环境对象。

环境

newlocale(3)和setlocale(3)使用以下环境变量,因此会影响所有未特权的本地化程序:

LOCPATH
用冒号(aq:aq)分隔的路径名列表,该路径名应用于查找区域设置数据。如果设置了此变量,则仅使用LOCPATH中的各个编译的语言环境数据文件和系统默认的语言环境数据路径;不使用任何可用的语言环境档案(请参阅localedef(1))。在取决于当前使用的语言环境的子目录下搜索各个编译的语言环境数据文件。例如,将en_GB.UTF-8用作类别时,将按以下顺序搜索以下子目录:en_GB.UTF-8en_GB.utf8en_GBen.UTF-8,en.utf8和en 。

文件

/usr/lib/locale/locale-archive
通常的默认语言环境存档位置。
/usr/lib/locale
编译的单个语言环境文件的通常默认路径。

遵循规范

POSIX.1-2001。

另外参见

iconv(1),locale(1),localedef(1),catopen(3),gettext(3),iconv(3),localeconv(3),mbstowcs(3),newlocale(3),ngettext(3), nl_langinfo(3),rpmatch(3),setlocale(3),strcoll(3),strfmon(3),strftime(3),strxfrm(3),uselocale(3),wcstombs(3),locale(5), charsets(7),unicode(7),utf-8(7)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/