跳转到内容

C 编程/locale.h

来自维基教科书,自由的教科书

在计算中,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
华夏公益教科书