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)의 두 번째 인자가 자동 지정 로캘을 나타내는 빈 문자열 ""
이라면 다음 단계를 거쳐 결정한다.
-
널 아닌 환경 변수
LC_ALL
이 있으면LC_ALL
의 값을 쓴다. -
위 범주들 중 하나와 같은 이름의 환경 변수가 존재하고 널이 아니면 그 범주에 그 값을 쓴다.
-
널 아닌 환경 변수
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