Google AdSense (text)

hidden logo stop

Moving

거지 같은 이글루스 광고노출 정책이 싫어서,
새 보금자리(http://blog.leocat.kr/)로 이사감.

[R] R 3.0.0+ 버전에서 한글/영문 locale 전환 Computer & Program

R이 3.0으로 버전업 하면서 오류 메시지 같은 내용을 locale에 맞게 번역해 주는 내용이 추가된 것 같다.

> a
에러: 객체 'a'를 찾을 수 없습니다
> # 원래 영문 오류 메시지는 아래와 같다.
> a
Error: object 'a' not found
> # 인코딩이 EUC-KR 등인 Windows에서는 한글이 깨져 보인다고도 한다.
> # 위 오류는 Mac에서 확인한 내용

우아~ 한글 번역에 힘써주셔서 감사합니다. 그런데.. 이게 문제가 될 때가 있다. 개발을 하면서도 많이 느끼는거지만, 오류가 났을 때 한글로 메시지가 나오면 어떤 오류인지 검색을 할 수 없다는 것이다. 한글이 우수하지만 사용하는 인구수가 너무 적어서, 검색되는 자료 자체가 워낙 희귀(?)하다. 그리고 대부분 오류 메시지는 정형화 되어 있기 때문에 영어권이 아니라도 영문 오류 메시지를 그대로 복사해서 검색하면 각종 언어로 된 자료들이 발견될 때가 많다. (물론 R 같은 경우는 영어가 많겠지만, 한국어 자료도 종종 발견된다.) 때문에 오류 메시지처럼 정형화할 수 있는 내용은 영문을 그대로 사용하는 것이 나을 때가 많다.

오류 메시지나 기타 내용을 locale에 상관 없이 영문 그대로 사용하고 싶은 경우, Windows 버전에서는 "Message translations" 옵션 없이 설치를 하면 영문을 그대로 사용할 수 있다.



그런데 Mac용 R의 설치버전에는 이런 옵션이 없다. TㅅT 이런 경우는 R을 실행한 다음 Sys.setlocale() 명령으로 시스템 설정을 바꿔주면 된다. (모든 OS 버전에서도 가능하다.) 하지만 설정이 저장되는 것이 아니라서, R을 실행할 때 마다 명령을 실행시켜줘야 한다. 그래도, 필요할 때 마다 켜고 끌 수 있으니 귀찮아도 쓸만하다. (환경변수를 바꾸는 방법이 있으면 나중에 포스팅 예정)

일단 현재 설정된 locale을 확인해 보자.

> Sys.getlocale()
[1] "ko_KR.UTF-8/ko_KR.UTF-8/ko_KR.UTF-8/C/ko_KR.UTF-8/ko_KR.UTF-8"
> Sys.getlocale("LC_ALL")
[1] "ko_KR.UTF-8/ko_KR.UTF-8/ko_KR.UTF-8/C/ko_KR.UTF-8/ko_KR.UTF-8"
> Sys.getlocale("LC_CTYPE")
[1] "ko_KR.UTF-8"

locale 설정은 "LC_ALL", "LC_COLLATE", "LC_CTYPE", "LC_MONETARY", "LC_NUMERIC", "LC_TIME"로 나뉘어져 있다. 그리고 Windows가 아닌 일부 시스템에서는 "LC_MESSAGES", "LC_PAPER", "LC_MEASUREMENT" 등도 지원한다고 한다. Sys.getlocale() 명령의 결과는 순서대로 "LC_ALL", "LC_COLLATE", "LC_CTYPE", "LC_MONETARY", "LC_NUMERIC", "LC_TIME", "LC_MESSAGES" 순이다.

"LC_ALL"은 "LC_COLLATE", "LC_CTYPE", "LC_MONETARY", "LC_TIME"를 의미한다. "LC_NUMERIC"이나 "LC_MESSAGES"는 포함되지 않는다. "LC_COLLATE"는 정렬 등 문자열 비교를 위한 설정이고, "LC_CTYPE"은 character set 설정이다. "LC_MONETARY"는 통화(원, 달러 등)관련 설정이고, "LC_TIME"은 날짜관련 설정이다. ("LC_NUMERIC"은 숫자처리 관련된 설정인 것 같은데, 문서가 정확하게 이해가 가지 않는다. TㅅT worning도 있고.. 바꾸면 좀 꼬일 수 있다는 얘기인가??)

> Sys.setlocale("LC_COLLATE", "C")
[1] "C"
> Sys.getlocale()
[1] "C/ko_KR.UTF-8/ko_KR.UTF-8/C/ko_KR.UTF-8/ko_KR.UTF-8"
> Sys.setlocale("LC_CTYPE", "C")
[1] "C"
> Sys.getlocale()
[1] "C/C/ko_KR.UTF-8/C/ko_KR.UTF-8/ko_KR.UTF-8"
> Sys.setlocale("LC_MONETARY", "C")
[1] "C"
> Sys.getlocale()
[1] "C/C/C/C/ko_KR.UTF-8/ko_KR.UTF-8"
> Sys.setlocale("LC_TIME", "C")
[1] "C"
> Sys.getlocale()
[1] "C/C/C/C/C/ko_KR.UTF-8"
> Sys.setlocale("LC_MESSAGES", "C")
[1] "C"
> # 하나로 통일되면 짧게 보여준다.
> Sys.getlocale()
[1] "C"

> # 값을 지정해 주지 않으면 default로 돌아온다.
> Sys.setlocale("LC_MONETARY")
[1] "ko_KR.UTF-8"
> Sys.getlocale()
[1] "C/C/ko_KR.UTF-8/C/C/C"
> Sys.setlocale("LC_COLLATE", "ko_KR.UTF-8")
[1] "ko_KR.UTF-8"
> Sys.getlocale()
[1] "ko_KR.UTF-8/C/ko_KR.UTF-8/C/C/C"
> Sys.setlocale("LC_CTYPE", "en_GB")
[1] "en_GB"
> Sys.getlocale()
[1] "ko_KR.UTF-8/en_GB/ko_KR.UTF-8/C/C/C"
> Sys.setlocale("LC_ALL", "ko_KR.UTF-8")
[1] "ko_KR.UTF-8/ko_KR.UTF-8/ko_KR.UTF-8/C/ko_KR.UTF-8/C"
> Sys.getlocale()
[1] "ko_KR.UTF-8/ko_KR.UTF-8/ko_KR.UTF-8/C/ko_KR.UTF-8/C"


에러 메시지 없이 정상적으로 값이 변경된다면 아래처럼 오류메시지가 바뀌는 것을 볼 수 있다.

> a
에러: 객체 'a'를 찾을 수 없습니다
> Sys.setlocale("LC_CTYPE", "C")
[1] "C"
> a
Error: object 'a' not found


- 참고
[Ihelp-urquestion] R-3.0.0 한글/영어 전환법
R: Query or Set Aspects of the Locale
Localization of messages - R Installation and Administration

핑백

  • Sigel's house made of ice 。。。 : [R] 환경변수 설정 2013-10-25 20:37:48 #

    ... 지난번 R에서 지역(locale) 설정</a>에 이어서, 이번엔 환경변수를 설정하는 방법이다. <a href="http://entireboy.egloos.com/4835219" target="_blank">R에서 지역(locale) 설정 포스트는 R이 한글 번역을 지원하면서 오류 ... more

덧글

  • 질문 2017/04/07 13:40 # 삭제 답글

    제가 맥에 R을 깔았는데 처음부터 영문으로 나오는데 혹시 한글로 바꾸는 법은 없을까요 ????
댓글 입력 영역

Google AdSense (text/image)