맥 OS X 환경에서 django로 다국어 기능 쓸 때 주의점.

맥 OS X (Mac OS X) Tiger (10.4.x)에서 python 과 django 를 이용하여 다국어 기능(i18n, gettext)을 쓰려고 할 때 오류가 발생합니다. po 파일을 생성하는 make-messages.py 에서는 환경 오류가, po 파일을 mo 파일로 변환하는 compile-messages.py 에서는 msgfmt 매개변수 오류가 납니다. ( django 에서 i18n 을 지원하는 것은 Django 국제화 문서를 참조하세요. )

해결 방법은 두 가지입니다. 원래 깔려 있는 gettext를 최신판으로 판올림 하거나 혹은 django 에서 문제가 되는 부분을 피해가는 겁니다.

1. django에서 문제가 되는 부분을 피해가는 방법

gettext 판올림이 귀찮다면 django 에 있는 문제만 피해가면 됩니다. 우선 gettext 0.10 에서는 확실히 오류가 발생합니다.

po 파일을 생성하는 make-messages.py 을 실행하면

`Python' unknown'

이런 오류가 납니다. 이건 직접 po 파일을 만들면 그만입니다. (make-messages.py 가 편하긴 합니다)

두 번째는 po 파일을 mo 파일로 변환하는 compile-messages.py 를 실행하면

$ /usr/lib/python2.5/site-packages/django/bin/compile-messages.py
processing file django.po in /생략/locale/ko/LC_MESSAGES
msgfmt: unrecognized option `--check-format'
Try `msgfmt --help' for more information.

굵게 표시한 내용으로 오류가 발생합니다.

msgfmt 을 이용하여 파일을 변환하려는데 --check-format 이라는 알 수 없는 매개변수를 썼다며 실행이 취소된 겁니다. msgfmt --help 이라고 쳐보면 실제로 존재하지 않고 -c 라는 놈이 존재합니다. 그러므로 compile-messages.py 안에서 저 부분을 고치면 됩니다.

이 파일은 django설치된경로/bin/compile-messages.py 에 있으며, 파일을 열어서 cmd = 'msgfmt --check-format -o "$djangocompilemo" "$djangocompilepo"' 이렇게 된 부분에서 --check-format 을 -c 로 바꾸십시오. 그러면 잘 변환되어 작동합니다.

2. gettext 판올림

이건 gettext 를 0.12 이상으로 판올림하면 위 두 문제 모두 해결됩니다. :) 전 DarwinPorts 라는 놈으로 처리했습니다. DarwinPorts를 설치한 뒤에 터미널에서

sudo port install gettext

이라고 치면 gettext 최신판을 받아다가 설치합니다.


똥과 일이 닮은 점

좌변기에 앉아 똥을 밀어냈다. 적잖은 똥이 오와 열을 맞춰 흐트러짐 없이 가지런히 밀려 나갔다. 끊김없이 나가는 느낌을 되집어 보건데 2000원 어치만큼 순대만 길게 뽑아낸 듯 하다. 매끄럽게 나간 걸 보면 기름진 똥인가보다. 그래도 이 정도 양이면 만만치 않겠구나 싶어서 휴지를 넉넉하게 뜯었다.

슥- 닦고 휴지가 거둔 성과를 눈으로 확인했다. 어라? 성과가 거의 없었다. 뭔가 싶어 휴지를 반으로 접고 다시 슥- 닦았는데 이번에는 더 성과가 없었다. 양은 많았지만 깔끔한 일처리를 한 탓에 뒷정리 할 것이 거의 없었던 것이다.

일도 이와 같다. 처리한 일이 산더미 같이 많다고 하더라도 일처리만 제대로 했다면 뒷정리 할 것은 거의 없다. 그러나 아무리 적은 일을 했더라도 일처리가 깔끔하지 못하면 구질 구질할 만큼 뒷정리 할 게 많다. 가끔 힘 조절을 잘못해서 똥꼬를 닦는 휴지를 손가락으로 뚫으면 똥꼬에 땀이 절로 맺히는 참사가 벌어진다. 마찬가지로 일 뒷정리를 잘못하면 마무리한 일보다 뒷정리에 더 많은 시간과 노력이 들어간다.

뒷정리. 말 그대로 앞서 한 일을 후에 정리하는 것이다. 평소 얼마만큼 열심히 일을 잘 처리했는지는 뒷정리에 들이는 노력 정도를 보면 알 수 있다. 최근 뒷정리를 하느라 고생한 나를 반성해보며 똥도 일도 평소에 잘 처리하여 뒷정리 하느라 고생하지 않기로, 다 된 줄 알았던 뒷정리를 다시 달려들어 뒷정리를 하지 않기로(마치 똥 덜 닦아서 다시 화장실에 들어가 닦아내듯이) 굳게 마음을 다잡아본다.