지역화는 문서화가 안 돼 있는 Bash 의 특징입니다.
지역화된 쉘 스크립트는 시스템의 로케일에 따라 정의된 언어로 텍스트를 출력해 줍니다. 독일의 베를린에 있는 리눅스 유저는 독일어로 된 스크립트의 출력을 얻을 수 있는 반면에 미국의 메릴랜드에 있는 그의 사촌은 똑같은 스크립트임에도 불구하고 영어로 된 출력을 얻을 수 있습니다.
사용자에게 에러나 프롬프트등을 지역화된 메세지로 보여주려면 다음에 나오는 형식을 쓰면 됩니다.
#!/bin/bash # localized.sh E_CDERROR=65 error() { printf "$@" >&2 exit $E_CDERROR } cd $var || error $"Can't cd to %s." "$var" read -p $"Enter the value: " var # ... |
bash$ bash -D localized.sh "Can't cd to %s." "Enter the value: " |
bash$ bash --dump-po-strings localized.sh #: a:6 msgid "Can't cd to %s." msgstr "" #: a:7 msgid "Enter the value: " msgstr "" |
자 이제 스크립트가 msgstr을 참고해서 특정 언어로 메세지를 번역하도록 languge.po를 빌드하면 됩니다. 예를 살펴 볼까요?
ko.po:
#: a:6 msgid "Can't cd to %s." msgstr "%s 디렉토리로 옮겨갈 수 없습니다." #: a:7 msgid "Enter the value: " msgstr "값을 넣으세요: " |
그 다음엔 msgfmt을 실행시키세요.
msgfmt -o localized.sh.mo ko.po
그러면 localized.sh.mo 파일이 생기는데 이 파일을 /usr/local/share/locale/ko/LC_MESSAGES 디렉토리에다 두고 스크립트의 첫 부분에 다음 두 줄을 추가해 주세요.
TEXTDOMAINDIR=/usr/local/share/locale TEXTDOMAIN=localized.sh |
이제 어떤 사용자가 이 스크립트를 한국어 환경에서 실행시킨다면 영어 메세지 대신에 한글 메세지를 보게 될 것입니다.
참고: Bash 예전 버전이나 다른 쉘에서 지역화를 하려면 gettext에 -s 옵션을 걸어서 사용해야 합니다. 이런 경우에 쉘 스크립트는 다음처럼 해 주면 됩니다.
#!/bin/bash # localized.sh E_CDERROR=65 error() { local format=$1 shift printf "$(gettext -s "$format")" "$@" >&2 exit $E_CDERROR } cd $var || error "Can't cd to %s." "$var" read -p "$(gettext -s "Enter the value: ")" var # ...
TEXTDOMAIN 과 TEXTDOMAINDIR 변수는 전체 환경으로 export 되어야 합니다.
---
이 부록은 Stephane Chazelas 가 작성해 주었습니다.