NAME

locale - 다언어 지원 설명

SYNOPSIS

#include <locale.h>

DESCRIPTION

로캘이란 언어와 문화적 규칙들의 집합이다. 메시지에 쓸 언어, 여러 문자 집합, 사전 순서 관행 같은 면들을 포함한다. 프로그램이 다양한 문화에 이식 가능하려면 자기 로캘을 알아내서 그에 맞게 동작할 수 있어야 한다.

<locale.h> 헤더에 그에 필요한 데이터 타입, 함수, 매크로 등이 선언돼 있다.

선언돼 있는 함수는 현재 로캘을 설정하는 setlocale(3)과 수 형식에 대한 정보를 얻는 localeconv(3)다.

프로그램에서 필요할 만한 다양한 로캘 정보 범주가 매크로로 선언돼 있다. 이를 setlocale(3) 함수 첫 번째 인자로 써서 다음 중 하나를 원하는 로캘로 설정할 수 있다.

LC_ADDRESS (GNU 확장, glibc 2.2부터)
위치와 지리 관련 사항을 기술하는 데 쓰는 (가령 우편 주소의) 형식을 기술하는 설정들을 바꾼다. 응용에서 이 정보가 필요하면 nl_langinfo(3)를 이용해 _NL_ADDRESS_COUNTRY_NAME(로캘 언어로 된 국가 이름)이나 _NL_ADDRESS_LANG_NAME(로캘 언어로 된 언어 이름) 같은 비표준 항목들을 얻을 수 있다. 예를 들어 (독일어 로캘이라면) "Deutschland"와 "Deutsch" 같은 문자열이 반환된다. (<langinfo.h>에서 그 외 항목들을 볼 수 있다.)
LC_COLLATE
이 범주는 정렬과 정규표현식에서 쓰는 순서 규칙들을 다룬다. 문자 동치류와 다문자 조합 요소 등이 포함된다. 이 로캘 범주는 지역별 알파벳으로 문자열을 비교하는 데 쓰는 strcoll(3)strxfrm(3) 함수의 동작을 바꾼다. 예를 들어, 독일어의 에스체트가 "ss"인 것처럼 정렬되게 한다.
LC_CTYPE
이 범주는 바이트열을 (단일 또는 다중 바이트) 문자로 해석하는 동작, (알파벳 또는 숫자 같은) 문자 분류, 문자 유형들의 동작에 영향을 준다. glibc 시스템에선 이 분류가 iconv(1)iconv(3)의 문자 변환 규칙에도 영향을 준다. isupper(3)toupper(3) 같은 문자 처리 및 분류 함수, 그리고 mblen(3)이나 wctomb(3) 같은 다중 바이트 문자 함수들의 동작 방식을 바꾼다.
LC_IDENTIFICATION (GNU 확장, glibc 2.2부터)
로캘 메타데이터와 관련된 설정들을 바꾼다. 응용에서 이 정보가 필요하면 nl_langinfo(3)를 이용해 _NL_IDENTIFICATION_TITLE(이 로캘 문서의 제목)이나 _NL_IDENTIFICATION_TERRITORY(이 로캘 문서가 적용되는 지리적 영역) 같은 비표준 항목들을 얻을 수 있다. 예를 들어 "English locale for USA"와 "USA" 같은 문자열이 반환된다. (<langinfo.h>에서 그 외 항목들을 볼 수 있다.)
LC_MONETARY
이 범주는 통화 관련 수치에 쓰는 형식을 정한다. ....
LC_MESSAGES
....
LC_MEASUREMENT (GNU 확장, glibc 2.2부터)
로캘 내의 (미터법이나 미국 단위계 같은) 측정 체계와 관련된 설정들을 바꾼다. 응용에서 이 정보가 필요하면 nl_langinfo(3)를 이용해 비표준 항목 _NL_MEASUREMENT_MEASUREMENT를 얻을 수 있다. 1(미터법) 또는 2(미국 단위계) 값인 문자에 대한 포인터가 반환된다.
LC_NAME (GNU 확장, glibc 2.2부터)
사람을 지칭하는 형식을 기술하는 설정들을 바꾼다. 응용에서 이 정보가 필요하면 nl_langinfo(3)를 이용해 _NL_NAME_NAME_MR(남성에 대한 일반적 호칭)나 _NL_NAME_NAME_MS(여성에 대한 일반적 호칭) 같은 비표준 항목들을 얻을 수 있다. 예를 들어 (독일 로캘이라면) "Herr"나 "Frau" 같은 문자열이 반환된다. (<langinfo.h>에서 그 외 항목들을 볼 수 있다.)
LC_NUMERIC
....
LC_PAPER (GNU 확장, glibc 2.2부터)
(미국 레터지나 A4 같은) 종이 표준 크기와 관련된 설정을 바꾼다. 응용에서 이 정보가 필요하면 nl_langinfo(3)를 이용해 비표준인 _NL_PAPER_WIDTH_NL_PAPER_HEIGHT 항목을 얻을 수 있다. 치수를 밀리미터 단위로 나타낸 int 값이 반환된다.
LC_TELEPHONE (GNU 확장, glibc 2.2부터)
전화 서비스에서 쓰는 형식을 기술하는 설정들을 바꾼다. 응용에서 이 정보가 필요하면 nl_langinfo(3)를 이용해 NL_TELEPHONE_INT_PREFIX(이 로캘의 번호를 호출하는 데 쓰는 나라 번호) 같은 비표준 항목들을 얻을 수 있다. 예를 들어 (독일이라면) "49" 같은 문자열이 반환된다. (<langinfo.h>에서 다른 항목들을 볼 수 있다.)
LC_TIME
....
LC_ALL
위 모두.

setlocale(3)의 두 번째 인자가 자동 지정 로캘을 나타내는 빈 문자열 ""이라면 다음 단계를 거쳐 결정한다.

  1. 널 아닌 환경 변수 LC_ALL이 있으면 LC_ALL의 값을 쓴다.

  2. 위 범주들 중 하나와 같은 이름의 환경 변수가 존재하고 널이 아니면 그 범주에 그 값을 쓴다.

  3. 널 아닌 환경 변수 LANG이 있으면 LANG의 값을 쓴다.

....

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 '\0'. */
    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의 로캘 API 확장

....

....

ENVIRONMENT

....

LOCPATH
....

FILES

/usr/lib/locale/locale-archive
로캘 아카이브의 일반적인 기본 경로.
/usr/lib/locale
컴파일된 로캘 파일들의 일반적인 기본 경로.

CONFORMING TO

POSIX.1-2001.

SEE ALSO

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)


2021-03-22