跳转到内容

C 编程/locale.h

来自 Wikibooks,开放世界中的开放书籍

在计算机领域,locale.h 是 C 编程语言的一个头文件,用于本地化目的。该头文件提供两个关键函数:localeconvsetlocale。前者提供对当前区域设置的访问,而后者允许设置当前区域设置。该头文件还定义了 lconv 结构体,该结构体存储有关给定区域设置的信息,包括数字和货币显示的本地首选项。

#include <locale.h>

char *setlocale(int category, const char *locale);
struct lconv *localeconv(void);

setlocale() 函数

[编辑 | 编辑源代码]

setlocale() 函数用于设置或查询程序的当前区域设置。

如果 locale 不是 NULL,则程序的当前区域设置将根据参数进行修改。参数 category 决定程序当前区域设置的哪些部分应该被修改。

如果 localeNULL,则只查询当前区域设置,而不进行修改。

localeconv() 函数

[编辑 | 编辑源代码]

localeconv() 函数返回一个指向当前区域设置的 struct lconv 的指针。此结构体将在下面一节中显示,它包含与区域设置类别 LC_NUMERICLC_MONETARY 相关的所有值。程序还可以使用 printf()strfmon() 函数,它们的行为将根据实际使用的区域设置而有所不同。

lconv 结构体

[编辑 | 编辑源代码]

struct lconv 包含以下字段

数字(非货币)信息

[编辑 | 编辑源代码]
char *decimal_point;

基数字符。

char *thousands_sep;

基数字符左侧数字分组的间隔符。

char *grouping;

每个元素代表一组中的数字个数;索引越高的元素越靠左。值为 CHAR_MAX 的元素表示不再进行进一步分组。值为 0 的元素表示使用前面元素作为所有更靠左的分组。

货币信息

[编辑 | 编辑源代码]
char *int_curr_symbol;

前三个字符来自 ISO 4217 的货币符号。第四个字符是间隔符。第五个字符是 '\0'

char *currency_symbol;

本地货币符号。

char *mon_decimal_point;

与上面的 decimal_point 相同。

char *mon_thousands_sep;

与上面的 thousands_sep 相同。

char *mon_grouping;

与上面的 grouping 相同。

char *positive_sign;

正值的符号。

char *negative_sign;

负值的符号。

char  int_frac_digits;

国际小数位数。

char  frac_digits;

本地小数位数。

char  p_cs_precedes;

如果 currency_symbol 位于正值前面,则为 1,如果位于后面,则为 0

char  p_sep_by_space;

如果空格将 currency_symbol 与正值隔开,则为 1

char  n_cs_precedes;

如果 currency_symbol 位于负值前面,则为 1,如果位于后面,则为 0

char  n_sep_by_space;

如果空格将 currency_symbol 与负值隔开,则为 1

char  p_sign_posn;
char  n_sign_posn;

正负号的位置

  • 0:括号包围数量和 currency_symbol
  • 1:符号字符串位于数量和 currency_symbol 之前。
  • 2:符号字符串位于数量和 currency_symbol 之后。
  • 3:符号字符串紧挨着 currency_symbol 之前。
  • 4:符号字符串紧挨着 currency_symbol 之后。
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main(void)
{
    /* Locale is set to "C" before this. This call sets it
       to the "current locale" by reading environment variables: */
    setlocale(LC_ALL, "");

    const struct lconv * const currentlocale = localeconv();

    printf("In the current locale, the default currency symbol is: %s\n",
        currentlocale->currency_symbol);

    return EXIT_SUCCESS;
}

参考文献

[编辑 | 编辑源代码]
  1. locale.h by OpenGroup
  2. localeconv by OpenGroup
  3. setlocale by OpenGroup
华夏公益教科书