ºÎ·Ï E. Áö¿ªÈ­(Localization)

Áö¿ªÈ­´Â ¹®¼­È­°¡ ¾È µÅ ÀÖ´Â 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: "
ÀÌ ¸ñ·ÏµéÀº Áö¿ªÈ­µÈ ÅؽºÆ®¸¦ º¸¿©ÁÝ´Ï´Ù.(-D ¿É¼ÇÀº ½ºÅ©¸³Æ®¸¦ ½ÇÇà½ÃÅ°Áö ¾Ê°í $ µÚ¿¡¼­ Å«µû¿ÈÇ¥·Î Äõ¿ìÆ®µÈ ¹®ÀÚ¿­µéÀ» º¸¿©ÁÝ´Ï´Ù.)

bash$ bash --dump-po-strings localized.sh
#: a:6
msgid "Can't cd to %s."
msgstr ""
#: a:7
msgid "Enter the value: "
msgstr ""
--dump-po-strings ¿É¼ÇÀº -D¿Í ´à¾ÒÁö¸¸ gettextÀÇ "po" Æ÷¸ËÀ» »ç¿ëÇÕ´Ï´Ù.

ÀÚ ÀÌÁ¦ ½ºÅ©¸³Æ®°¡ 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 °¡ ÀÛ¼ºÇØ ÁÖ¾ú½À´Ï´Ù.