SETLOCALE(3)

명칭
setlocale, localeconv - C 용의 자연 언어의 정형

프로그램 라이브러리
libc

서식
<locale.h> char * setlocale(int category, const char *locale) struct lconv * localeconv(void)

해설
setlocale() 함수는, 특정의 routine의 집합에 대해, C 프로그램 라이브러리로 말하는 곳(중)의 자연 언어 정형의 스타일을 설정합니다. 각각의 스타일을 ‘로케일’ (이)라고 불러, C 캐릭터 라인으로서 건네받는 적절한 이름에 의해 호출합니다. localeconv() routine는, 현재의 로케일의 수치 정형용 파라미터를 돌려줍니다.

setlocale() 함수는, 몇개의 routine의 카테고리를 식별합니다. 이하는, 카테고리와 카테고리가 선택한 routine의 조입니다.

LC_ALL
    로케일 전체를 정리해 설정합니다.

LC_COLLATE
    캐릭터 라인 조합 routine용의 로케일을 설정합니다. 이것은 strcoll() 및 strxfrm() 에서의 알파벳순서를 제어합니다.

LC_CTYPE
    ctype(3), mbrune(3), multibyte(3) 및 rune(3) 의 각 함수의 로케일을 설정합니다. 이것은, 대문자와 소문자, 알파벳과 비알파벳 캐릭터 등의 식별을 제어합니다. 실제의 작업은 setrunelocale() 함수에 의해 행해집니다.

LC_MESSAGES
    메세지 카탈로그의 로케일을 설정합니다. catopen(3) 함수를 참조해 주세요.

LC_MONETARY
    통화치의 정형용 로케일을 설정합니다. 이것은 localeconv() 함수에 영향을 미칩니다.

LC_NUMERIC
    숫자를 정형하기 위한 로케일을 설정합니다. 이것은, localeconv() 에 의해 돌려주어지는 값을 제어하는데 더해, printf() 및 scanf() (와)과 같은 함수의 부동 소수점 입출력의 소수점 정형 방법도 제어합니다.

LC_TIME
    strftime() 함수를 사용해 일자와 시각을 정형하기 위한 로케일을 설정합니다.

디폴트에서는 3 개의 로케일만이 정의되고 있습니다. 하늘의 캐릭터 라인 "" (은)는 네이티브의 환경을 나타냅니다. 그리고 "C" 및 "POSIX" 로케일은 C 언어 환경을 나타냅니다. locale 인수가 NULL 의 경우에는, setlocale() (은)는 현재의 로케일을 되돌립니다. 디폴트에서는, C 프로그램은 "C" 로케일로 개시합니다. 로케일을 설정하는 유일한 프로그램 라이브러리내 함수는 setlocale() 입니다. 로케일은 다른 routine의 부작용으로서 변경될 것은 없습니다.

localeconv() 함수는, 숫자, 특히 통화치의 정형용 파라미터를 제공하는 구조체를 가리키는 포인터를 돌려줍니다.

    struct lconv {
    	char	*decimal_point;
    	char	*thousands_sep;
    	char	*grouping;
    	char	*int_curr_symbol;
    	char	*currency_symbol;
    	char	*mon_decimal_point;
    	char	*mon_thousands_sep;
    	char	*mon_grouping;
    	char	*positive_sign;
    	char	*negative_sign;
    	char	int_frac_digits;
    	char	frac_digits;
    	char	p_cs_precedes;
    	char	p_sep_by_space;
    	char	n_cs_precedes;
    	char	n_sep_by_space;
    	char	p_sign_posn;
    	char	n_sign_posn;
    };

개개의 필드에는 다음의 의미가 있습니다.

decimal_point
    통화값을 제외한, 소수점 캐릭터입니다.

thousands_sep
    통화값을 제외한, 소수점의 전의 자리수의 그룹간의 단락 캐릭터입니다.

grouping
    통화값을 제외한, 자리수의 그룹의 크기입니다. 이것은, char 형태의, 낮은 위의 자리수로부터 높은 위의 자리수 ( 오른쪽에서 왼쪽)까지의 그룹의 크기를 나타낸다 정수의 배열을 가리키는 포인터입니다. 그 리스트는, 0 또는 CHAR_MAX 그리고 끝납니다. 리스트가 0 으로 종료하는 경우에는, 0 의 전의 마지막 그룹의 크기를, 모든 자리수가 메워질 때까지 반복해 이용합니다. CHAR_MAX 그리고 종료하는 경우에는, 그 이상의 그룹화는 실행되지 않습니다.

int_curr_symbol
    표준으로 정해진 국제통화 기호입니다.

currency_symbol
    로컬인 통화 기호입니다.

mon_decimal_point
    통화치에 대한 소수점 캐릭터입니다.

mon_thousands_sep
    통화치내의 자리수의 그룹에 대한 단락지어 캐릭터입니다.

mon_grouping
    grouping 에 유사하고 있습니다만, 통화용입니다.

positive_sign
    비부의 통화치를 표기하는데 사용되는 캐릭터로, 통상은 하늘의 캐릭터 라인입니다.

negative_sign
    부의 통화치를 표현하는데 사용되는 캐릭터로, 통상은 마이너스 부호입니다.

int_frac_digits
    국제 스타일의 통화치에 있어서의 소수점 이하의 자리수입니다.

frac_digits
    로컬 스타일의 통화치에 있어서의 소수점 이하의 자리수입니다.

p_cs_precedes
    비부의 값에 대해서 통화치의 전에 통화 기호가 놓여지는 경우에는 1, 그렇지 않은 경우에는 0 입니다.

p_sep_by_space
    비부의 값에 대해서 통화 기호와 통화치의 사이에 공백이 삽입되고 있는 경우는 1, 그렇지 않은 경우에는 0 입니다.

n_cs_precedes
    부의 값에 대해서 p_cs_precedes (와)과 같습니다.

n_sep_by_space
    부의 값에 대해서 p_sep_by_space (와)과 같습니다.

p_sign_posn
    비부의 양 및 currency_symbol 에 관한 positive_sign 의 위치입니다. 코드는 다음과 같습니다.
    0   캐릭터 라인 전체를 둘러싸는 환괄호입니다.
    1   캐릭터 라인의 전입니다.
    2   캐릭터 라인의 다음에.
    3   currency_symbol 의 직전입니다.
    4   currency_symbol 의 직후입니다.

n_sign_posn
    부의 통화치에 대해서 p_sign_posn (와)과 같습니다.

전술했을 경우를 제외해, 필드의 값으로서의 하늘의 캐릭터 라인은, 결과의 길이가 제로인지, 또는 현재의 로케일내에는 없는 값으로 있는 것을 나타냅니다. (와)과 같이 CHAR_MAX 의 결과는 이용할 수 없는 값을 표기합니다.

반환값
setlocale() 함수는, 지정의 category (와)과 locale 의 편성이 의미를 만들어내지 않는 경우에는, NULL (을)를 돌려주어 로케일의 변경은 실패합니다. localeconv() 함수는, 후의 setlocale() 또는 localeconv() 의 호출로 변경될 가능성이 있는 정적 오브젝트를 가리키는 포인터를 돌려줍니다.

파일
$PATH_LOCALE/locale/category
/usr/share/locale/locale/category
    로케일 locale (와)과 카테고리 category 용무의 로케일 파일

관련 항목
colldef(1), mklocale(1), catopen(3), ctype(3), mbrune(3), multibyte(3), rune(3), strcoll(3), strxfrm(3), euc(4), utf2(4)

표준
setlocale() 및 localeconv() 함수는, isoC 에 적합하고 있습니다.

역사
setlocale() 및 localeconv() 함수는, 4.4BSD 그리고 처음 등장했습니다.

버그
현재의 실장은, LC_COLLATE, LC_CTYPE 및 LC_TIME 의 카테고리 이외에서는, "C" (와)과 "POSIX" 로케일만 서포트하고 있습니다.

localeconv() 에 있어서의 정연하게 하지 않는 통화 서포트에도 불구하고, 표준은, 일반화된 통화 포맷을 위한 함수를 집어 넣고 있지 않습니다.

우리가 리얼타임의 통화 변환 기능을 가질 때까지는, LC_MONETARY 의 사용은 잘못한 결과를 이끌 가능성이 있습니다. LC_NUMERIC 및 LC_TIME (은)는 개인적인 선택사항이며, 다른 카테고리로 덮어 가려야 하는 것이 아닙니다.