로케일은 여러분이 여러분의 프로그램 속으로 하드코딩을 해서는 안되는 언어/문 화 관련의 사항을 다룬다. 만약 다양한 로케일을 설치해두었다면 다음 환경 변수 설정을 통하여 로케일을 지원하는 프로그램의 실행 방식을 선택할 수 있다.
기본 로케일은 C 또는 POSIX 이며 libc 에 하드코딩되어 있다.
이 세팅을 통해 로케일을 설정한다. 하지만 LC_xxxx 환경 변수에 의해 변화될 수 있다.
정렬 순서
문자 정의, 대문자, 소문자,... 이들은 toupper, tolower, islower, isdigit 등의 함수에 사용된다.
금액을 표현하는 형식 정보를 포함하고 있다. 천단위를 구분하는 문자, 소수점 문자, 그리고 금액 표시 문자, 그 위치 등의 정보를 제시한다.
숫자를 표현함에 있어, 천단위, 소수점, 숫자 그룹핑을 다룬다.
시간과 날짜의 표현형식을 지정한다. 주와 달에 대한 명칭과 약어를 다룬 다.
예/아니오 표현
로케일을 지정한다. 하지만 다른 LC_xxxx 으로 변화될 수 있다. 여기 몇 가지 로케일에 대한 예가 있다.
영어권 카나다
미국 영어권
독일의 독일어
프랑스의 프랑스어
여러분이 프로그램을 짜는데 있어 그것이 국제적으로 사용되기 위해서는 로케일 을 이용해야 한다. 가장 중요한 이유 중 하나는 모든 사람이 여러분과 같은 문자 를 사용하지는 않는다는 사실이다. 여러분의 프로그램에서 다음과 같은 식으로 사용하지 말라.
/* check for alphabetic characters */ if ( (( c >= 'a') && ( c <= 'z' )) || (( c >= 'A') && ( c <= 'Z' )) ) { ... }
여러분이 이렇게 모든 화일을 ASCII 화일이라고만 가정하고 만든다면 사용자의 로케일에 따른 코드 페이지 정의를 존중하지 않게 되는 것이다.
예를 들어 독일어 환경에서 쓰이는 움라우프 문자 등이 제외된다고 말할 수 있다. 여러분은 대신 isalpha() 과 같은 로케일 인식 함수를 사용해야 한다. 여러분이 US-ASCII 알파벳 문자만을 요구한다 할 지라도 여전히 isalpha() 함수를 사용하기 바란다. 하지만 우선 setlocalte(LC_TYPE,"C")라고 하든지 아니면 LANG, LC_TYPE, LC_ALL 등의 환경 변수를 "C"로 설정하면 된다. 로케일은 상당한 유연성을 제공하며 프로그래머들이 ASCII 기반의 C 프로그램을 잘못 만들어왔다고 생각한다.
예를 들어 여러분은 문자의 코드 위치를 가정할 수 없다. 여러분은 A 라는 문자의 코드 위치를 0x41 이 아닌 0xC1 으로 정의하는 문자표 화일을 만들 수도 있다. 이것은 메인프레임에서 사용된는 IBM 코드 페이지 37에서의 A 가 갖는 위치이다. 그리고 전자는 바로 US-ASCII, iso8859-x 등에서 사용되고 있는 방식이다. 기본적인 아이디어는 서로 다른 사람들이 다른 언어를 사용하며 정렬 순서도 다르 고 다른 코드 페이지를 사용하며 다른 나라에 살고 있다는 사실로부터 나온다. 바로 로케일과 로케인 인식 프로그램이 그러한 문제에 대한 해결책을 제시하고 있 다. 많은 작업이 필요한 것은 아니고 단지 프로그램 작성시 약간 다른 사고방식을 요구한다.