소스코드의 시작 부분에서 setlocale() 을 종종 보게 됩니다.
예전엔 무심코 지나쳤었는데, 이젠 꼼꼼하고 디테일하게 하나씩 알아나가야 할 것 같네요.
(점점 위대하신 분의 영향을 받는것 같습니다 ㅎㅎ)
프로그램의 국제화 (Internationalization, i18n)은 프로그램이 어떤 환경(?)에서 수행할 지 선택할 수 있도록 하는 것인데요,
설명이 좀 애매합니다
예를들어 언어의 경우, 출력 시 어떤 언어를 출력할 것인가도 위에서 언급한 환경 중 하나의 종류가 되겠습니다.
이러한 종류를 Category라고 부르는데요, Category 는 다음과 같습니다.
위 그림에서 ko_KR.UTF-8 은 로케일 값이구요, "locale -a" 명령을 통해 사용가능한 로케일의 이름을 알 수 있습니다.
각각의 Category에 로케일 값이 설정되어 있는데, LC_ALL에는 설정이 되어 있지 않네요.
LC_ALL 의 값을 설정하게 되면 LC_ALL의 값이 모든 다른 Category의 값으로 사용됩니다.
그리고 LC_ALL의 값을 없애면 다른 Category의 값들은 이전 값을 유지 합니다.
소스코드에서 setlocale(LC_ALL, "") 과 같은 코드를 사용하면, 시스템에 설정된 Category의 값을 그대로 이용하겠다는 의미가 되겠네요.
setlocale()을 호출하지 않으면 시스템에 설정된 Category의 값을 이용하지 않으므로 반드시 setlocale() 호출을 통해 프로그램에 locale 설정을 해야하겠습니다.
이 포스트는 아래의 링크를 참조하여 정리하였습니다.
자세한 설명이나 테스트 코드는 아래 링크를 참고하시면 됩니다.
로케일(Locale)에 관하여...
그리고 포스트에 틀린 내용이 있다면 코멘트 부탁드립니다!!
댓글 없음:
댓글 쓰기