[ Home | Freetime works | FreeBSD | KFUG ]
ÇÁ·Î±×·¥¼¼°è 1999³â 10¿ùÈ£ÀϹÝÀûÀ¸·Î ´Ù¸¥ ³ª¶ó ¾ð¾î³ª ¹®È¸¦ À§ÇØ ÀÛ¼ºµÈ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱâ À§Çؼ´Â ¸ÕÀú ÇØ ´ç ±¹°¡ ¾ð¾îÀÇ ÀÔÃâ·ÂÀÌ °¡´ÉÇÑÁöÀÇ ¹®Á¦¸¦ ÇØ°áÇØ¾ß ÇÑ´Ù. ¹°·Ð ÀÌ·± °ÍÀº ±âÁ¸¿¡ ±¸¼ºµÈ ½Ã½ºÅÛÀÇ °ÍÀ» ÀÌ¿ëÇÒ ¼öµµ Àִµ¥, °¡·É ¿ì¸®³ª¶óÀÇ °æ¿ì ÇÑ±Û Ã³¸®°¡ °¡´ÉÇÑ Å͹̳ÎÀ» »ç ¿ëÇÒ ¼ö ÀÖ´Ù¸é ÅÍ¹Ì³Î¿ë ¾îÇø®ÄÉÀ̼ÇÀÇ ÇÑ±Û Ãâ·Â ¹®Á¦¸¦ 8ºñÆ® Ŭ¸°(8bit-clean)ÀÇ ¹® Á¦¸¦ Á¦¿ÜÇϰí´Â °í·ÁÇÒ Çʿ䰡 ¾ø´Ù. ±× ´ÙÀ½¿¡ ÁÖ·Î ÇÏ´Â °ÍÀº ¸Þ½ÃÁöÀÇ ¹ø¿ªÀε¥, ¸Þ´º µîÀÇ »ç¿ëÀÚ ¸Þ½ÃÁö¸¦ ¹ø¿ªÇÏ´Â ÀÏÀÌ´Ù. ¿©±â¿¡´Â ¸¹Àº ¹®Á¦°¡ °³À﵃ ¼ö Àִµ¥, ¸Þ½ÃÁöÀÇ Ãâ·Â ¼ø¼³ª ÇÁ·Î±×·¥ÀÇ ÄÚµù »óÅ µîÀÌ ¸¹Àº ¿µÇâÀ» ¹ÌÄ¡±â ¶§¹®ÀÌ´Ù. ¿ÏÀüÈ÷ ±¹Á¦ÈµÇÁö ¾ÊÀº ÇÁ·Î±×·¥À̶ó¸é ÇØ´ç ±¹°¡¿¡¼ ¹ø¿ªÀ» ÇÒ ¶§ ÀڽŵéÀÇ ¸Þ½ÃÁö ±¸Á¶¿¡ ¸Âµµ·Ï ÇÁ·Î±× ·¥À» ¸¹Àº ºÎºÐ ¼Õº¸¾Æ¾ß ÇÒ Çʿ䵵 Àִµ¥, ÀÌ´Â ¿øº» ¼Ò½º¸¦ °íÄ¡´Â ÀÏÀÌ µÈ´Ù. ÀÌ ÀÛ¾÷ Àº ÈǸ¢ÇÑ °á°ú¸¦ ¾òÀ» ¼ö ÀÖÁö¸¸ ÀÌÈÄÀÇ ¾÷µ¥ÀÌÆ® µî¿¡¼ ¸¹Àº ¹®Á¦¸¦ ¾È°Ô µÈ´Ù. ±×·¯³ª ÀÌ·¯ÇÑ ±¹Á¦È ÀÛ¾÷À» º¸Á¶Çϱâ À§ÇÑ ¸Þ½ÃÁö ¹ø¿ª ½Ã½ºÅÛÀÌ Á¸ÀçÇÑ´Ù¸é, ¹ø¿ªÀÚ´Â ¿øº» ¼Ò ½º¿¡ ´ëÇÑ °í·Á³ª Á¢±Ù ¾øÀÌ ºÐ¸®µÈ ¸Þ½ÃÁö ÆÄÀÏ ¹ø¿ª¸¸À¸·Î ¿øÇÏ´Â ÀÛ¾÷À» ´Þ¼ºÇÒ ¼ö ÀÖ´Ù.
ÀÌ·± ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ °¢ ¿î¿µÃ¼Á¦´Â °íÀ¯ÀÇ ¸Þ½ÃÁö ¹ø¿ª ½Ã½ºÅÛÀ» °®°í ÀÖ´Ù. À©µµ ¿ìÀÇ °æ¿ì ¸®¼Ò½ºÀÇ ÇüÅ·ΠÇÁ·Î±×·¥ÀÇ ¸Þ½ÃÁö¸¦ ºÐ¸®ÇØ ³¾ ¼ö ÀÖ°í, À¯´Ð½ºÀÇ °æ¿ìµµ catgets()³ª gettext()µîÀÇ ÀÎÅÍÆäÀ̽ºµîÀ» ÅëÇØ ¸Þ½ÃÁö¿Í ¼Ò½ºÀÇ ºÐ¸®¸¦ ÀÌ·ê ¼ö ÀÖ´Ù. ¹° ·Ð »ó´ç¼öÀÇ ÇÁ·Î±×·¥Àº ´Ü¼øÇÑ ¸Þ½ÃÁö ¹ø¿ª ÀÌ»óÀÇ ±¹Á¦È¸¦ ¿ä±¸ÇÏ´Â °æ¿ì°¡ ÀÖÁö¸¸, ÀÌ ·± ¿ä¼ÒµéÀº ¾îÂ÷ÇÇ º°µµÀÇ ÀÛ¾÷ÀÌ ÇÊ¿äÇÏ´Ù.
´ÙÀ½Àº ³Ý½ºÄÉÀÌÇÁ 4.61 ÇÑ±ÛÆÇ¿¡ µé¾îÀÖ´Â X À§Á¬ ¸Þ½ÃÁöÀÇ ÇÑ ¿¹ÀÌ´Ù.
*menuBar*exit.labelString: Á¾·á
ÀÌ ¹®ÀÚ¿Àº ¸Þ´º ¹ÙÀÇ "ÆÄÀÏ" - "Á¾·á"¿¡ ³ªÅ¸³ª´Â ¹Ù·Î ±× ¸Þ½ÃÁöÀÌ´Ù. ÀÌ·± ¸Þ½ÃÁöµéÀº
ÇØ´ç ¾ð¾î·Î ¹ø¿ªÇÒ ¼ö ÀÖÁö¸¸, ´ÙÀ½°ú °°Àº °ÍÀº ¹ø¿ªÇÏ¸é ¾ÈµÈ´Ù.
Hanterm*vt100*scrollBar: True
À§´Â Hanterm¿¡¼ ½ºÅ©·Ñ¹ÙÀÇ Ç¥½Ã À¯¹«¸¦ ³ªÅ¸³»´Â °ÍÀÌ´Ù. ÀÌ·± °ªÀ» "Âü"À¸·Î ¹ø¿ªÇÏ
¸é ÇÁ·Î±×·¥ÀÌ ÀÌÇØÇÏÁö ¸øÇϰųª ¿Àµ¿ÀÛÀÇ ¿øÀÎÀÌ µÉ ¼ö ÀÖ´Ù.
XÀ©µµ¿ìÀÇ °æ¿ì ÀÌ·¯ÇÑ "¹ø¿ªÇÒ ¼ö ÀÖ´Â ¸Þ½ÃÁö"¿Í "¹ø¿ªÇÏ¸é ¾ÈµÇ´Â °ª"ÀÇ °æ°è°¡ ¸ðÈ£ÇÏ ´Ù. ¾î¶² °ªÀ» ¹ø¿ªÇÒ ¼ö ÀÖ´Â °ÍÀÎÁö¸¦ ÆÇ´ÜÇϱâ À§Çؼ´Â ÇÁ·Î±×·¥ÀÇ ¼Ò½º¸¦ ÂüÁ¶Çϰųª, ±âÁ¸ À§Á¬À» »ç¿ëÇÏ´Â °æ¿ì À§Á¬¿¡¼ ±âº»ÀûÀ¸·Î Á¦°øÇϴ ŰÀÎÁö¸¦ »ìÆìº¸´Â ÀÏÀÌ ÇÊ¿äÇÏ´Ù.
ÀÌ·± X¸®¼Ò½ºÀÇ ¹ø¿ªÀº ´ëºÎºÐÀÇ X¿ë ¾îÇø®ÄÉÀ̼ǿ¡¼ º¼ ¼ö ÀÖ´Ù. ¾ËÂ¥ ¸®´ª½º µî¿¡¼ º¼ ¼ö ÀÖ´Â xedit³ª xmessageÀÇ ¹ø¿ªÀº ÀÌ·¯ÇÑ ¹æ½ÄÀ¸·Î ÀÌ·ç¾îÁø °ÍÀε¥, ¹°·Ð ±×¿¡ ¾Õ ¼ ÇØ´ç ÇÁ·Î±×·¥ÀÌ ·ÎÄÉÀÏ ±â´ÉÀ» ÀÌ¿ëÇϵµ·Ï ÄÚµùµÇ¾î¾ß ÇÑ´Ù. XŸŶÀ» »ç¿ëÇÏ´Â ÇÁ·Î±× ·¥ÀÇ °æ¿ì¶ó¸é Athena À§Á¬À̳ª Motif À§Á¬ µîÀÇ Â÷À̰¡ ¾øÀÌ main()ÇÔ¼öÀÇ ¾ÕºÎºÐ¿¡¼
setlocale(LC_ALL, "");
XtSetLanguageProc(NULL, 0, 0);
À§ Äڵ带 ³Ö¾î X¾îÇø®ÄÉÀ̼ÇÀÌ ·ÎÄÉÀÏ ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇØ¾ß ÇÑ´Ù. ÀÌ·¸°Ô ÇÑ
°æ¿ì ¹ø¿ªµÈ ¸®¼Ò½º ÆÄÀÏÀº XAPPLRESDIRȯ°æº¯¼ö°¡ ÁöÁ¤ÇÏ´Â °÷¿¡ ³õ¾Æ¾ß Çϴµ¥,
X11R6½Ã½ºÅÛ°ú ÀÌ¿¡ ±â¹ÝÇÑ ¸®´ª½ºÀÇ XFree86½Ã½ºÅÛ¿¡¼ ÀϹÝÀûÀ¸·Î´Â
/usr/X11R6/lib/X11/ko/app-defaults/ ¾Æ·¡¿¡ ³õ°Ô µÈ´Ù. FreeBSD¶ó¸é
/usr/X11R6/lib/X11/ko_KR.EUC/app-defaults/ ÀÌ´Ù.
³Ý½ºÄÉÀÌÇÁÀÇ °æ¿ì´Â ¸®¼Ò½º ÆÄÀÏÀÌ XÀ©µµ¿ì À§Á¬ÀÇ °¢ ¸Þ½ÃÁö ¹ø¿ª°ú ÇÔ²² °øÅëÀûÀ¸·Î »ç ¿ëÇÏ´Â ¸Þ½ÃÁöÀÇ ¹ø¿ªÀ» ºÐ¸®ÇØ ³õ¾Ò´Ù. ÇÑ±Û ³Ý½ºÄÉÀÌÇÁ°¡ ¼³Ä¡µÇ¾î ÀÖ´Ù¸é ¸®¼Ò½º ÆÄÀÏ À» ¿¾îº¼ ¶§(¾ËÂ¥³ª ÆÄ¿ö, ¿¢¼¿ ¸®´ª½º µîÀ̶ó¸é /usr/X11R6/lib/X11/ko/app-defaults/Netscape, FreeBSDÀÇ °æ¿ì¿¡´Â /usr/local/lib/netscape/ko_KR.EUC/Netscape),
*strings.xxxx: ....
°ú °°Àº ¸Þ½ÃÁö¸¦ ¸¹ÀÌ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. À̰ÍÀº Ç÷§Æû °øÅë ¸Þ½ÃÁö(Cross Platform -
XP)¶ó°í ÇÏ´Â °ÍÀ¸·Î XŸŶ°ú´Â Á÷Á¢ÀûÀÎ »ó°üÀÌ ¾øÀÌ ³Ý½ºÄÉÀÌÇÁÀÇ °¢ Ç÷§Æû¿¡¼ °øÀ¯
ÇÏ´Â ¸Þ½ÃÁöµéÀÌ´Ù.
ÀÌ·± ¹æ¹ýÀº XÀ©µµ¿ì ½Ã½ºÅÛÀÌ ±âº»ÀûÀ¸·Î Áö¿øÇÏ´Â ±â´ÉÀ̹ǷΠº°µµÀÇ ºÎ´ã ¾øÀÌ X¾îÇà ¸®ÄÉÀ̼ǿ¡¼´Â À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, ÅÍ¹Ì³Î¿ë ¾îÇø®ÄÉÀÌ¼Ç µî¿¡¼´Â ÀÌ¿ëÇÒ ¼ö ¾ø´Ù´Â °ÍÀÌ ´ÜÁ¡À¸·Î ÀÛ¿ëÇÑ´Ù.
¸Þ½ÃÁöÀÇ ±¸ºÐ ±âÁØ ÇØ´ç ¾ð¾îÀÇ ¸Þ½ÃÁö ¹ø¿ªÀº µ¥ÀÌÅͺ£À̽ºÀÇ ÇüÅ·Πǥ½ÃÇÒ ¼ö Àִµ¥, Ű´Â ½Ã½ºÅÛ¿¡ µû¶ó Á¤ÇØÁö´Â °ªÀ̰í, °ªÀº ¹ø¿ªµÈ ¸Þ½ÃÁöÀÌ´Ù. ÀÌ °æ¿ì Ű´Â ¾î¶² °ªÀ¸·Î °áÁ¤ÇÏ°Ô µÉ±î? ÀÌ°Í Àº ¹ø¿ª ½Ã½ºÅÛÀ» ±¸ºÐÇÒ ¼ö ÀÖ´Â Áß¿äÇÑ ¿ä¼ÒÀ̱⵵ ÇÏ´Ù. À©µµ¿ìÀÇ °æ¿ì¶ó¸é »ç¿ëÀÚ°¡ Áö Á¤ÇÑ ÀÓÀÇÀÇ ¹®ÀÚ¿À» Ű·Î ºÎ¿©ÇÏ°Ô µÇ°í, XÀ©µµ¿ìÀÇ ¸®¼Ò½º ½Ã½ºÅÛÀº ÇØ´ç À§Á¬ÀÇ À̸§, catgets()½Ã½ºÅÛÀÇ °æ¿ì »ç¿ëÀÚ°¡ ÁöÁ¤ÇÑ ÀÓÀÇÀÇ ¹®ÀÚ¿, ±×¸®°í gettext() ½Ã½ºÅÛÀº ¸Þ½Ã ÁöÀÇ ¿µ¹® ¿øº»ÀÌ Å°°¡ µÈ´Ù. »ç¿ëÀÚ°¡ ÁöÁ¤ÇÑ ÀÓÀÇÀÇ ¹®ÀÚ¿À» Ű·Î ÇÏ´Â °ÍÀº Æí¸®ÇÒ ¼ö µµ ÀÖÁö¸¸ ¸Þ½ÃÁö°¡ °è¼Ó °»½ÅµÇ°í »ý°Ü³ª´Â »óȲ¿¡¼´Â ¹ø¿ªµÈ ¸Þ½ÃÁö »Ó ¾Æ´Ï¶ó ¸Þ½ÃÁö Ű ÀÚü¸¦ °ü¸®ÇÏ´Â Àϵµ »ó´çÈ÷ Å« ÀÏÀÌ´Ù.
nl_catd catd = catopen ("catalog_name", 0);
char *translation = catgets (catd, set_no, msg_id, "original string");
catclose (catd);
Áï catopen()À¸·Î ¸Þ½ÃÁö īŻ·Î±×¸¦ ¿°í, catgets()·Î ¿µ¹® ¿ø¹®¿¡ ´ëÇÑ ¹ø¿ª
¹®ÀÚ¿À» ¾ò°í, ´Ù »ç¿ëÇÏ°í ³ª¸é catclose()·Î ´Ý´Â ±¸Á¶ÀÌ´Ù. catgets()´Â
°£ÆíÇϰí Å« ¹®Á¦ ¾øÀÌ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, ¿ø¹® ¸Þ½ÃÁö¿¡ ´ëÇØ º°µµ·Î ¸Þ½ÃÁö
Id¸¦ ºÎ¿©ÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ Å« ¹®Á¦ÀÌ´Ù. (ÇÏÁö¸¸ ¸Þ½ÃÁö¿¡ ´ëÇØ º°µµÀÇ Id¸¦
ºÎ¿©ÇÏ´Â °ÍÀº ¸¹Àº ¸Þ½ÃÁö ½Ã½ºÅÛ¿¡¼ »ç¿ëÇÏ´Â ½Ã½ºÅÛÀÌ´Ù) ÀÌ´Â ¹ø¿ªÀÚ ¶Ç´Â
ÇÁ·Î±×·¡¸Ó°¡ ¸Þ½ÃÁö Id¸¦ ºÎ¿©ÇÏ°í °ü¸®ÇÏ´Â ÀÛ¾÷À» »ó´çÈ÷ ¾î·Æ°Ô ÇÑ´Ù.
textdomain ("domain_name");
char* msg = gettext ("msgid");
ÀϹÝÀûÀ¸·Î µµ¸ÞÀÎÀº ÆÐŰÁö À̸§À̸ç, dcgettext()¿Í °°Àº º°µµÀÇ ÇÔ¼ö¸¦
»ç¿ëÇÏ¿© ´Ù¸¥ µµ¸ÞÀÎÀÇ ¹ø¿ª¹®À» Àá½Ã ÂüÁ¶ÇÒ ¼öµµ ÀÖ´Ù. ¶Ç µÎ°³ ÀÌ»óÀÇ
µµ¸ÞÀÎÀÌ °°Àº À̸§À» °®´Â °æ¿ì¸¦ ¸·±â À§ÇØ µð·ºÅ丮º°·Î ´Ù¸£°Ô ÀúÀåµÈ
¸Þ½ÃÁö ÆÄÀÏÀ» bindtextdomain()À¸·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.
GNU¿¡¼´Â gettext¸¦ ÀÚ½ÅÀÇ ¹æ¹ý´ë·Î ±¸ÇöÇϰí À̸¦ ¸Þ½ÃÁö ¹ø¿ª ½Ã½ºÅÛÀ» »ç¿ëÇϰí ÀÖ´Ù. ¼Ö¶ó¸®½º¿Í GNU gettext´Â ´ë·«ÀûÀÎ °³³äÀº °°Áö¸¸ ±× ±¸Çö ¹æ¹ýÀÌ ¼·Î ´Ù¸£´Ù´Â Á¡À» ¸í½ÉÇØ µÎÀÚ.
ftp://prep.ai.mit.edu/gnu/gettext/gettext-0.10.35.tar.gz
¼³Ä¡´Â ÀϹÝÀûÀÎ GNU ¾îÇø®ÄÉÀ̼Çó·³ ÇÏ¸é µÈ´Ù. catgets()¸¦ »ç¿ëÇÏ´Â
½Ã½ºÅÛ µî¿¡¼´Â °øÁ¸À» À§ÇÑ ¸î°¡Áö ¿É¼ÇÀ» ÁÙ ¼öµµ Àִµ¥, È¥¶õ°ú ºÒÆíÀ»
ÀÏÀ¸Å³ ¼ö ÀÖÀ¸¹Ç·Î ±×´ë·Î ¼³Ä¡ÇÏ´Â °ÍÀÌ ÁÁ°Ú´Ù. ¸¹Àº ¸®´ª½º ½Ã½ºÅÛ¿¡¼´Â
gettext¸¦ Ç¥ÁØ ½Ã½ºÅÛ ÆÐŰÁö·Î Á¦°øÇϰí ÀÖÀ¸¸ç(·¡µåÇÞ 5.2µîÀº
gettext-0.10À» °®°í Àִµ¥ ÀÌ °æ¿ì¿¡´Â ¹Ýµå½Ã ¾÷±×·¹À̵åÇϱ⠹ٶõ´Ù),
FreeBSD¿¡¼´Â Æ÷Æ®¿¡¼ miscÄ«Å×°í¸®¿¡ gettext¶ó´Â ÆÐŰÁö°¡ ÀÖÀ¸¹Ç·Î À̸¦
¼³Ä¡Çϱ⠹ٶõ´Ù.
¿ø C ¼Ò½º ------------> PO mode ---> Ç¥½ÃµÈ C ¼Ò½º ------.
|
.---------<--- GNU gettext ¶óÀ̺귯¸® |
.--- make <---+ |
| `---------<--------------------+-----------'
| |
| .-----<--- PACKAGE.pot <--- xgettext <---' .---<--- PO ¿ä¾à¹®
| | | ^
| | `---. |
| `---. +---> PO ¸ðµå ---.
| +----> msgmerge ------> LANG.pox --->--------' |
| .---' |
| | |
| `-------------<---------------. |
| +--- LANG.po <-- »õ·Î¿î LANG.pox <--'
| .--- LANG.gmo <--- msgfmt <---'
| |
| `---> ¼³Ä¡ -----> /.../LANG/PACKAGE.mo ----.
| +---> "¾È³çÇϼ¼¿ä, ¿©·¯ºÐ!"
`-------> ¼³Ä¡ -----> /.../bin/ÇÁ·Î±×·¥ -------'
|
Á¶±Ý º¹ÀâÇØ º¸ÀÏÁö ¸ð¸£°ÚÁö¸¸, ´ë·«ÀûÀÎ È帧Àº C ¼Ò½º¿¡ ¹ø¿ªÇÒ ¹®ÀÚ¿À» Ç¥½ÃÇϰí, ¿©±â¿¡¼ xgettext¸¦ »ç¿ëÇÏ¿© ¸Þ½ÃÁö ¹ø¿ªÀ» À§ÇÑ ÅÛÇø®Æ® ÆÄÀÏ(pot)¸¦ ÃßÃâÇϰí. À̸¦ °¢ ¾ð¾î ¹ø¿ªÀÚ°¡ ¹ø¿ªÇÑ´Ù(po). ¾÷±×·¹À̵åµÈ ÇÁ·Î±×·¥ÀÇ °æ¿ì¶ó¸é »õ·Î ¹ø¿ª¹°À» ÃßÃâÇϰí À̸¦ msgmergeÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© ±âÁ¸ÀÇ ¹ø¿ª¹®À» À¯ÁöÇÏ¸ç »õ ¹ø¿ª¹°·Î ¹Ù²Ü ¼ö ÀÖ´Ù.
¹ø¿ªµÈ ¸Þ½ÃÁö ÆÄÀÏ(LANG.po)´Â msgfmtÇÁ·Î±×·¥À» ÅëÇØ ½Ã½ºÅÛ °íÀ¯ÀÇ ¹ÙÀ̳ʸ® Æ÷¸ËÀÎ moÇü½ÄÀ¸·Î ¹Ù²ï´Ù(¿©±â¼ GNU½ºÅ¸ÀÏÀÇ moÆÄÀÏÀº gmo¶ó°í ºÎ¸¥´Ù). ÀÌ´Â ÇØ´ç ·ÎÄÉÀÏÀÇ ¹ø¿ª¹°À» ÁöÁ¤ÇÏ´Â µð·ºÅ丮¿¡ ÀúÀåµÇ°í, ÇÁ·Î±×·¥Àº ÄÄÆÄÀÏÇÑ ÈÄ libintl.a¿Í ¸µÅ©µÇ¾î ¸¸µé¾îÁø´Ù. ÀÌÈÄ »ç¿ëÀÚ´Â LANGȯ°æº¯¼ö¸¦ ÇØ´ç ¾ð¾î·Î ÁöÁ¤Çϰí ÇÁ·Î±×·¥À» ½ÇÇàÇϱ⸸ ÇÏ¸é µÈ´Ù.
ÀÌ·¯ÇÑ ±¸Á¶´Â ¸î°¡ÁöÀÇ Æ¯Â¡ÀÌ ÀÖ´Ù.
µû¶ó¼ ¹ø¿ªÀÚ´Â ¸Þ½ÃÁö Id¿¡ »ó°ü¾øÀÌ ¿µ¹® ¸Þ½ÃÁö¸¦ Á÷Á¢ ¹ø¿ªÇÏ¸é µÇ°í, ÇÁ·Î±×·¡¸Ó¿Í »ó°ü¾øÀÌ ¹ø¿ª ÆÄÀÏÀ» À¯ÁöÇϰí Å×½ºÆ®ÇØ º¼ ¼ö ÀÖ´Ù. ½ÇÁ¦·Î mo ÆÄÀÏÀº ÇÁ·Î±×·¥ ½ÇÇà ½Ã°£¿¡ ÀоîµéÀ̹ǷΠÀÌ¹Ì ÄÄÆÄÀÏµÇ¾î ¼³Ä¡µÈ ÇÁ·Î±×·¥¿¡¼ ¹ø¿ªÀÚ´Â msgfmtÀ¸·Î »õ·Î¿î mo¸¦ »ý¼ºÇÏ¿© ¼³Ä¡¸¸ Çϰí Å×½ºÆ®ÇÒ ¼ö ÀÖ´Ù.
ÀÌ·¯ÇÑ ½Ã½ºÅÛÀÇ ÀÛ¾÷À» Æí¸®ÇÏ°Ô Çϱâ À§ÇÏ¿© GNU emacsÀÇ po-mode¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. po-mode¸¦ »ç¿ëÇϸé poÆÄÀÏÀÇ »ý¼º, ¹ø¿ª, °ü¸®, À¯Áö¸¦ Æí¸®ÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù.
#include
main()
{
int i, total;
printf("Hello World!\n");
for(i=1,total=0; i<=10; i++) total+=i;
printf("Total sum of 1~10 is %d\n", total);
}
ÀÌ ÇÁ·Î±×·¥À» GNU gettext¸¦ »ç¿ëÇÏ¿© ¸Þ½ÃÁö¸¦ ±¹Á¦ÈÇϱâ À§Çؼ´Â ´ÙÀ½ÀÇ
¼ø¼¸¦ ¹â¾Æ¾ß ÇÑ´Ù.
#include
#define _(String) gettext (String)
main()
{
...
setlocale (LC_ALL, "");
bindtextdomain (DOMAIN, LOCALEDIR);
textdomain (DOMAIN);
...
libintl.h´Â gettext°ü·Ã ÇÔ¼ö¸¦ ´ã°í ÀÖ´Ù. ±×¸®°í ¸Þ½ÃÁö¸¦ ¾ò±â À§Çؼ´Â
gettextÇÔ¼ö¸¦ »ç¿ëÇϴµ¥, ¸¹ÀÌ »ç¿ëÇÏ°Ô µÇ¹Ç·Î °£ÆíÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖµµ·Ï
_()À¸·Î ¸ÅÅ©·Î¸¦ ¸¸µé¾î »ç¿ëÇÑ´Ù. µû¶ó¼ ÀÌÈÄ ¹ø¿ªÇÏ°Ô µÉ ÅØ½ºÆ®´Â ¸ðµÎ
_()À¸·Î ¹À¸¸é µÈ´Ù.
setlocale()Àº ÇöÀç ÁöÁ¤ÇÑ ·ÎÄÉÀÏÀ» ÃʱâÈÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ±×·¯³ª Áß¿äÇÑ °ÍÀº LANGȯ°æº¯¼öÀÇ ÁöÁ¤ À¯¹ÂÀÌÁö, ÇØ´ç ·ÎÄÉÀÏÀÌ Á¸ÀçÇÏ´ÂÁöÀÇ ¿©ºÎ°¡ ¾Æ´Ï´Ù. µû¶ó¼ »ç½Ç setlocale()ÇÔ¼ö°¡ ½ÇÆÐÇÏ´õ¶óµµ gettext()´Â µ¿ÀÛÇÑ´Ù. ÀÌ´Â ½Ã½ºÅÛ¿¡¼ ·ÎÄÉÀÏ Áö¿øÀÌ ¾ø°Å³ª, ÀÖ´õ¶óµµ ÇØ´ç ·ÎÄÉÀÏÀÌ ¾ø´Â °æ¿ì¶óµµ Á¦´ë·Î µ¿ÀÛÇϵµ·Ï ÇÑ´Ù.
bindtextdomain()Àº ÁöÁ¤ÇÑ µð·ºÅ丮¿¡¼ ÁöÁ¤ÇÑ µµ¸ÞÀÎÀÇ ¸Þ½ÃÁö ÆÄÀÏÀ» ã¾Æ ¿¾îµÐ´Ù. ÀÌ´Â °°Àº µµ¸ÞÀÎÀ» °®´Â ¸ÞÁö½Ã°¡ ¿©·¯ Á¾·ù ÀÖÀ»¶§, ÁöÁ¤µÈ µð·ºÅ丮¿¡¼ ãµµ·Ï ÇÑ´Ù. ÀϹÝÀûÀÎ gettext¾îÇø®ÄÉÀ̼ǿ¡¼´Â /usr/local/share/localeµð·ºÅ丮 ¾Æ·¡¿¡¼ µµ¸ÞÀÎ.mo¸¦ ã´Â´Ù. ¸®´ª½º´Â ÀϹÝÀûÀ¸·Î /usr/share/locale ¾Æ·¡¿¡¼ ãÀ¸¸ç, FreeBSD³ª ´Ù¸¥ À¯´Ð½ºÀÇ °æ¿ì¿¡´Â /usr/local/share/locale ¾Æ·¡ÀÌ´Ù. ÁöÁ¤µÈ ¾ð¾î¿Í µµ¸ÞÀÎ ÇÏ¿¡¼ ¸Þ½ÃÁö ÆÄÀÏÀº ¸®´ª½ºÀÇ °æ¿ì /usr/share/locale/¾ð¾î/LC_MESSAGES/µµ¸ÞÀÎ.mo ¸¦ ã°Ô µÈ´Ù.
textdomain()Àº ¾ÕÀ¸·Î gettext()°¡ ¸Þ½ÃÁö¸¦ ¾ò¾î³¾ µµ¸ÞÀÎÀ» Á¤ÇÑ´Ù. ¹Ì¸® bindtextdomain()À¸·Î ÁöÁ¤µÈ ¸Þ½ÃÁö ÆÄÀÏÀ» ¿¬°áÇØ µÎ´Â ÀÏÀÌ ÇÊ¿äÇϸç, µµ¸ÞÀÎ ¸íÀº ÀÓÀÇ·Î Á¤ÇÏ¸é µÇÁö¸¸ º¸Åë ¾îÇø®ÄÉÀÌ¼Ç À̸§ÀÌ µÈ´Ù. ¿©±â¼ LOCALEDIRÀº "."À¸·Î, DOMAINÀº "test"·Î ÇØ µÎÀÚ. LOCALEDIRÀ» ÇöÀç µð·ºÅ丮·Î µÎ¸é ÇöÀç µð·ºÅ丮¿¡ ko/LC_MESSAGE/µµ¸ÞÀÎ.mo¸¦ ã°Ô µÈ´Ù.
printf("test world");
¶ó´Â ¹®ÀÚ¿Àº
print(_("test world"));
¶Ç´Â
print(gettext("test world"));
À¸·Î ¹Ù²Ù¾î ÁÖ¸é µÈ´Ù. ÀÌ·¯ÇÑ ÀÛ¾÷Àº ÇÁ·Î±×·¡¸ÓÀÇ ¸òÀÌ´Ù. ÀÌ·± ÀÛ¾÷Àº
»ó´çÈ÷ ±ÍÂúÀ» ¼ö Àִµ¥, EmacsÀÇ po-mode¸¦ »ç¿ëÇϸé TAGSÁ¤º¸(etags¸í·ÉÀ¸·Î
EmacsÀÇ c-mode¿¡¼ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¼Ò½º ÆÄÀÏÀÇ ÇÔ¼ö ¶Ç´Â ¸ÅÅ©·Î Á¤º¸¸¦
ÀúÀåÇØ µÑ ¼ö ÀÖ´Ù)¸¦ »ç¿ëÇÏ¿© po-mode°¡ ¹ø¿ª °¡´ÉÇÑ ¹®ÀÚ¿À»
ÈÞ¸®½ºÆ½(heuristic)À¸·Î ã¾Æ Ç¥½ÃÇØ ÁÙ ¼ö ÀÖÀ¸¹Ç·Î, °¡´ÉÇÏ¸é ¼öÀÛ¾÷À¸·Î
ÇÏ´Â °Íº¸´Ù po-modeÀÇ µµ¿òÀ» ¾òµµ·Ï ÇÏÀÚ.
ÀÌÁ¦ ´ÙÀ½°ú °°ÀÌ test.c¸¦ ¹Ù²Ü ¼ö ÀÖ´Ù.
#include
#include
#define _(String) gettext (String)
main()
{
int i, total;
setlocale (LC_ALL, "");
bindtextdomain ("test", ".");
textdomain ("test");
printf(_("Hello World!\n"));
for(i=1,total=0; i<=10; i++) total+=i;
printf(_("Total sum of 1~10 is %d\n"), total);
}
¹ø¿ªÀ» À§ÇÑ Áغñ´Â ´Ù µÇ¾ú´Ù. ÀÌÁ¦ ÇÊ¿äÇÑ °ÍÀº ¸Þ½ÃÁö ÆÄÀÏÀε¥, po-mode¸¦
»ç¿ëÇÏ¿© ¸¸µé ¼öµµ ÀÖ°í, xgettext¸í·ÉÀ» »ç¿ëÇÏ¿© ¸¸µé ¼öµµ ÀÖ´Ù.
xgettext¸¦ »ç¿ëÇÏ¿© ¸¸µé·Á¸é ´ÙÀ½ ¸í·ÉÀ» ÁÖ¸é µÈ´Ù.
xgettext --keyword=_ -d test test.c
ÀÌ´Â gettext()°¡ _()À¸·Î ´ë½Å »ç¿ëµÇ¾ú°í, µµ¸ÞÀÎÀº test·Î ÁöÁ¤Ç϶ó´Â
ÀǹÌÀÌ´Ù. ÀÌÈÄ¿¡´Â ¼Ò½º°¡ µÇ´Â .c, .cc, .hµîÀ» Àû¾îÁÖ¸é µÈ´Ù. ±×·¯¸é
test.po°¡ Ãâ·ÂµÇ¸ç, ³»¿ëÀº ´ÙÀ½°ú °°´Ù.
# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # FIRST AUTHORÁöÁ¤ÇØÁØ ¹®ÀÚ¿ÀÌ ¸ðµÎ msgid·Î ÁöÁ¤µÇ¾ú´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÌÁ¦ ¹ø¿ªÀÚ°¡ ÇØ¾ß ÇÒ ÀÏÀÌ »ý°å´Âµ¥, ¹Ù·Î msgstrÀ» msgidÀÇ ¹ø¿ª ³»¿ëÀ¸·Î Àû¾îÁÖ´Â °ÍÀÌ´Ù. ¾ÕÀÇ ÁÖ¼®¹®µé(#À¸·Î ½ÃÀÛÇÏ´Â Çà)Àº ÅÛÇø®Æ®·Î ¸¸µé¾îÁÖ´Â °ÍÀε¥, Àû´çÇÑ ³»¿ëÀ» Àû¾îÁÖ¸é µÇ°í, À§ ÆÄÀÏÀÇ Çì´õ ºÎºÐÀº GNU ÇÁ·ÎÁ§Æ®ÀÇ »ê¹°À» À§ÇÑ °ÍÀ̹ǷÎ(µû¶ó¼ ÀúÀÛ±ÇÀÚ°¡ FSF·Î µÇ¾î ÀÖ´Ù) À̸¦ µû¸£Áö ¾ÊÀº ¾îÇø®ÄÉÀ̼ÇÀÇ °æ¿ì À̸¦ Àû¾îÁÖÁö ¾Ê°Å³ª, --omit-header¿É¼ÇÀ» Ãß°¡·Î ÁÖ¸é µÈ´Ù. °¡Àå ù¹ø ¸Þ¼¼ÁöÀÇ °æ¿ì ¹ø¿ªÀÚ¿Í ¹ø¿ª ÆÀ µîÀ» Àû¾îÁÖ°Ô µÇ´Âµ¥, Language-TeamÀÇ °æ¿ì ¾Æ·¡¿¡¼ ¼³¸íÇÏ°Ô µÉ ¹ø¿ª ÆÀÀ» ³ªÅ¸³»°Ô µÈ´Ù. ±Ç¸® Æ÷±â °¢¼¸¦ Á¦ÃâÇÑ ¹ø¿ªÀÚ¶ó¸é(3.2ÀýÀ» º¸±â ¹Ù¶õ´Ù) ÇØ´ç ¾ð¾î ÆÀ°ú ¸ÞÀϸµ ¸®½ºÆ® ÁÖ¼Ò¸¦ Àû¾îÁÖ¸é µÈ´Ù. Çѱ¹¾îÀÇ °æ¿ì, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 1999-09-13 17:20+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: ENCODING\n" #: test.c:15 msgid "Hello World!\n" msgstr "" #: test.c:19 #, c-format msgid "Total sum of 1~10 is %d\n" msgstr ""
"Language-Team: Korean \n"
¶ó°í Àû¾îÁÖ¸é µÇÁö¸¸, °ø½Ä ¹ø¿ªÀÚ¸¦ ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â ÆÄÀÏÀÇ °æ¿ì¿¡´Â
Àû¾îÁÖÁö ¾Ê´Â ÆíÀÌ ÁÁ´Ù.
°¢ ¸Þ½ÃÁö ¾Õ¿¡ ºÙ´Â ÁÖ¼®¹® Áß #: µÚÀÇ °ÍÀº »ç¿ëµÈ ¼Ò½º ÆÄÀϰú À§Ä¡¸¦ ³ªÅ¸³»°í, #, µÚ¿¡´Â ¸Þ½ÃÁö¿¡ ´ëÇÑ ¼Ó¼ºÀ» ³ªÅ¸³½´Ù. fuzzy·Î Ç¥½ÃµÇ¾î ÀÖ´Ù¸é msgid¿Í msgstrÀÇ ³»¿ëÀÌ ÀÏÄ¡ÇÏÁö ¾Ê´Â ¹ø¿ª¹®ÀÓÀ» ³ªÅ¸³»¸ç ÀÌ´Â ¹ø¿ªÀÚ°¡ »ìÆìº¸°í ÇØ°áÇØ¾ß Çϰí, ¹ø¿ªÀÚ°¡ Á¦´ë·Î °íÃÆ´Ù¸é fuzzy¸¦ Áö¿ì¸é µÈ´Ù. c-formatÀ¸·Î ÁöÁ¤µÇ¾î ÀÖ´Â °ÍÀº msgid°¡ CÀÇ printf()µî¿¡¼ »ç¿ëÇÏ´Â ¼½Ä ¹®ÀÚ¿À̶ó´Â ÀǹÌÀÌ´Ù. ¿©±â¿¡¼´Â %d³ª %sµîÀÇ À§Ä¡¿Í ¼ø¼¿¡ ÁÖÀÇÇÏ¿© ¹ø¿ªÇØ¾ß ÇÑ´Ù.
´ÙÀ½°ú °°ÀÌ ¹ø¿ªÇÏ¿´´Ù°í ÇÏÀÚ.
#: test.c:15
msgid "Hello World!\n"
msgstr "¾È³çÇϼ¼¿ä!\n"
#: test.c:19
msgid "Total sum of 1~10 is %d\n"
msgstr "1-10±îÁöÀÇ ÇÕ°è´Â %dÀÔ´Ï´Ù\n"
¹ø¿ªÀÌ Á¾·áµÇ¾úÀ¸¸é moÆÄÀÏÀ» ¸¸µé¾î¾ß ÇÑ´Ù. ÀÌ´Â msgfmtÀ¸·Î ÇÒ ¼ö Àִµ¥,
¸ÕÀú Àß µÇ¾ú´ÂÁö °Ë»çºÎÅÍ ÇØ º¸ÀÚ.
# msgfmt --check --statistics test.po
¹ø¿ªµÈ ¸Þ½ÃÁö 2°³, ÆÛÁö ¹ø¿ª¹® 1°³.
À§ ³»¿ëÀº ÃÑ ¸Þ½ÃÁö Áß ¹ø¿ªµÈ °ÍÀÌ 2°³, fuzzy·Î Ç¥½ÃµÈ °ÍÀÌ 1°³¶ó´Â
ÀǹÌÀÌ´Ù. fuzzy·Î µÈ °ÍÀº ¹ø¿ªÀ¸·Î ÀÎÁ¤ÇÏÁö ¾ÊÀ¸¹Ç·Î µÇµµ·ÏÀÌ¸é ¸ðµç
¹®Àå(¿©±â¼ fuzzy·Î µÈ °ÍÀº °¡Àå óÀ½ Çì´õ msgid)À» ¹ø¿ªÇÏ¿© fuzzy³ª
¹ø¿ªµÇÁö ¾ÊÀº ¸Þ½ÃÁö°¡ ¾øµµ·Ï ÇØ¾ß ÇÑ´Ù.
¹ø¿ªµÇÁö ¾ÊÀº ¹®ÀåÀÌ ¾ø°Å³ª ´õ ÀÌ»ó ÇØ°áÇÒ ¼ö ¾ø´Ù¸é(¹ø¿ªÀ» ²À ÇØ¾ß ÇÑ´Ù´Â °¹Ú°ü³ä¿¡¼ ÀÌ»óÇÏ°Ô ¹ø¿ªÇϱ⺸´Ù´Â ¾ÈÇÏ´Â ÆíÀÌ ³ªÀ»¼öµµ ÀÖ´Ù) ÀÌÁ¦ moÆÄÀÏÀ» ¸¸µé¾î º¸ÀÚ.
# msgfmt -o test.mo test.po
# mkdir -p ko/LC_MESSAGES
# cp test.mo ko/LC_MESSAGES
# cc -o test test.c -lintl
gettext°ü·Ã ÇÔ¼ö¸¦ À§Çؼ libintl.a¿Í ¸µÅ©ÇÏ¸é µÈ´Ù. libc5 ÀÌÀüÀÇ
¸®´ª½ºÀÇ °æ¿ì gettext¸¦ ¼³Ä¡ÇÏ¿´À» ¶§ libintlÀÌ º¸Åë /usr/lib¿¡ ÀÖÀ¸¹Ç·Î
º°µµÀÇ ¸µÅ© °æ·Î¸¦ ÁöÁ¤ÇÏÁö ¾Ê¾Æµµ µÇ°í, glibc 2ÀÌ»óÀ» »ç¿ëÇÏ´Â °æ¿ì¶ó¸é
gettext°¡ C¶óÀ̺귯¸®¿¡ Æ÷ÇԵǾî ÀÖÀ¸¹Ç·Î ¾Æ¿¹ -lintlÀ» ÁÖÁö ¾Ê¾Æµµ
ÃæºÐÇÏÁö¸¸, FreeBSD³ª ´Ù¸¥ À¯´Ð½ºÀÇ °æ¿ì Çì´õ¿Í ¶óÀ̺귯¸®¸¦
/usr/local¾Æ·¡¿¡¼ ã¾Æ¾ß ÇÑ´Ù. ±×·± °æ¿ì ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏÇÏÀÚ.
# cc -o test test.c -I/usr/local/include -L/usr/local/lib -lintl
ÀÏ´Ü ¿µ¹® ¸Þ½ÃÁö·Î Àß µÇ´ÂÁö ½ÃÇèÇØ º¸±â À§ÇØ ´ÙÀ½°ú °°ÀÌ ÇØ º¸ÀÚ.
# env LANG=C ./test
Hello World!
Total sum of 1~10 is 55
´ÙÀ½Àº ko·ÎÄÉÀÏ »ó¿¡¼ Çѱ¹¾î·Î ¹ø¿ªµÈ ¸Þ½ÃÁö°¡ Àß ³ª¿À´ÂÁö »ìÆìº¸ÀÚ.
½ÇÁ¦·Î setlocale()ÀÇ ¼º°ø ¿©ºÎ°¡ gettextÀÇ ½ÇÇà ¿©ºÎ¸¦ °áÁ¤ÇÏÁö ¾ÊÀ¸¹Ç·Î,
¾î¶² ¿î¿µÃ¼Á¦¿¡¼µµ LANG=ko·Î ÁöÁ¤ÇÏ¸é µÈ´Ù. FreeBSD¿¡¼ÀÇ Á¦´ë·Î µÈ
·ÎÄÉÀϸíÀº ko_KR.EUCÀÌ°í ¸®´ª½º¿¡¼µµ ko_KR.eucKRµîÀ» »ç¿ëÇÏÁö¸¸ ¸ðµÎ ko·Î
ÁÙ¿© ½áµµ µÇ°í, ±æ°Ô ½áµµ µÈ´Ù.
# env LANG=ko ./test
¾È³çÇϼ¼¿ä!
1-10±îÁöÀÇ ÇÕ°è´Â 55ÀÔ´Ï´Ù
Àß µÇ´Â°¡? µåµð¾î °£´ÜÇÑ ÇÁ·Î±×·¥ Çϳª¸¦ ±¹Á¦ÈÇÏ¿´´Ù!
´Ù¸¥ ¾ð¾î·Î ¹ø¿ªÇÏ´Â °æ¿ì ÇØ´ç ¾ð¾î µð·ºÅ丮 ¾Æ·¡¿¡ µÎ¸é µÈ´Ù. ÀÌ µð·ºÅ丮¸íÀº º¸Åë ISO 639¿¡¼ Á¤ÇÑ ¾ð¾î¸íÀ» »ç¿ëÇÏ¸é µÈ´Ù.
¿©·¯°¡Áö ¹®Á¦°¡ ÀÖ°ÚÁö¸¸ ¸î°¡Áö¿¡ ´ëÇØ¼¸¸ »ý°¢ÇØ º¸ÀÚ.
msgid "hello"
¿Í
msgid "he"
"llo"
´Â »ç½Ç µ¿ÀÏÇÑ ¸Þ½ÃÁöÀÌ´Ù. µû¶ó¼ msgid¿Í msgstrÀÇ ÁÙ ¼ö°¡ ´Þ¶óµµ º°·Î
±¸¾Ö¹ÞÀ» ÇÊ¿ä´Â ¾ø´Ù. po-modeÀÇ po-normalize¸¦ »ç¿ëÇϸé ÀÌ·¯ÇÑ poÆÄÀÏÀ»
Á¤ÇØÁø Çü½Ä¿¡ ¸Âµµ·Ï Á¤±ÔȽÃų ¼ö ÀÖ´Ù.
static const char *messages[] = {
"some very meaningful message",
"and another one"
};
...
string
= index > 1 ? "a default message" : messages[index];
"a default message"´Â ¹ø¿ª¿¡ ¹®Á¦°¡ ¾ø´Ù. ÇÏÁö¸¸
À§¿Í °°Àº ¹è¿ ³»ÀÇ ¸Þ½ÃÁö´Â ¾î¶»°Ô ¹ø¿ªÇØ¾ß ÇÒ±î? ¿©·¯°¡Áö ¹æ¹ýÀÌ ÀÖ°ÚÁö¸¸
°¡Àå ÁÁÀº °ÍÀº gettext_noop()¿Í °°Àº °ÍÀ» »ç¿ëÇÏ¿© ´Ü¼øÈ÷ ¹ø¿ªÀ» À§ÇÑ Ç¥½Ã¸¸
Çϰí, ½ÇÁ¦ ¸Þ½ÃÁö ¹ø¿ªÀº ¹è¿ÀÇ ³»¿ëÀ» »ç¿ëÇÏ´Â °÷¿¡¼ ½ÇÁ¦ gettext()¸¦
ºÒ·¯ ÇØ°áÇÒ ¼ö ÀÖ´Ù.
#define gettext_noop(String) (String)
static const char *messages[] = {
gettext_noop ("some very meaningful message"),
gettext_noop ("and another one")
};
...
string
= index > 1 ? gettext ("a default message") : gettext (messages[index]);
xgettext¸¦ ºÎ¸¦¶§ --keyword¿¡ gettext_noopÀ» Ãß°¡ÇÒ ÇÊ¿ä´Â ¾ø´Ù.
xgettext´Â ±âº»ÀûÀ¸·Î gettext_noop()¸¦ ÀνÄÇϱ⠶§¹®ÀÌ´Ù. gettext()´Â
¹®ÀÚ¿À» ¹Þ¾Æ ¹ø¿ª¹®À» ³Ñ°ÜÁÖ´Â ÇÔ¼öÀÌÁö, Ưº°È÷ »ó¼ö µî°ú´Â °ü·ÃÀÌ
¾ø´Ù´Â »ç½Ç¿¡ À¯ÀÇÇÏÀÚ.
"%d of %d"
´Â ´ÙÀ½°ú °°ÀÌ ¹ø¿ªµÉ ¼ö ÀÖ´Ù.
"%d Áß %d °³"
¿©±â¼ ÁÖÀÇÇØ¾ß ÇÏ´Â °ÍÀº %dÀÇ À§Ä¡°¡ ù¹øÂ°¿Í µÎ¹øÂ° °ÍÀÌ Æ²¸®°í, ¹ø¿ªÇÒ
°æ¿ì ¾î¼øÀÌ ´Þ¶óÁö¹Ç·Î ¼ø¼¸¦ ¹Ù²Ù¾î¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ±×·¯³ª À§
»óÅ¿¡¼´Â ±×·± ÀÏÀ» ÇÒ ¼ö°¡ ¾ø´Ù.
ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ printf()ÀÇ ¼½Ä ¹®ÀÚ¿¿¡¼ Á¦°øÇÏ´Â ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. Áï ¼ø¼¸¦ ÁöÁ¤ÇÏ´Â °ÍÀÌ´Ù.
"%2$d Áß %1$d °³"
ÀÌ·¸°Ô ÇÏ¸é ¹®ÀÚ¿ÀÇ ¼ø¼¸¦ µÚÁýÀ» ¼ö ÀÖ´Ù. msgfmtÀÇ ÇÔ¼ö´Â ÀÌ Ç¥±â¸¦
ÀÌÇØÇϰí ÀÖÀ¸¸ç, ´ëºÎºÐÀÇ C¶óÀ̺귯¸®¿¡¼ Áö¿øÀÌ °¡´ÉÇÏÁö¸¸ µÇÁö ¾Ê´Â
°æ¿ìµµ ÀÖ´Ù(ÇÊÀÚ°¡ º» ¿©·¯ À¯´Ð½ºµé¿¡¼´Â Àß µÇ¾ú´Ù. ÀÌ ¹®Á¦¿¡ ´ëÇØ¼´Â
GNU Çѱ¹¾îÆÀ ¸ÞÀϸµ ¸®½ºÆ®¿¡¼ ·ùâ¿ì¾¾¿Í ³ª´« ¸ÞÀÏ¿¡¼ ¾Ë ¼ö ÀÖ´Ù).
#!/usr/bin/perl
use Locale::PGetText;
Locale::PGetText::setLocaleDir('.');
Locale::PGetText::setLanguage('ko');
print gettext("Hello world");
¸Þ½ÃÁö po ÆÄÀÏÀº XText¸í·ÉÀ¸·Î ÃßÃâÇØ ³»°í, ¸Þ½ÃÁö µ¥ÀÌÅͺ£À̽º´Â MsgFmt¸í·ÉÀ¸·Î
¸¸µé¾î³¾ ¼ö ÀÖ´Ù. ¹ø¿ªÀÇ ´ë»óÀÌ µÉ ¹®ÀÚ¿Àº gettext()ÇÔ¼ö ¾È¿¡ ¾²¸é µÈ´Ù.
XText < gtest.pl > test.po
MsgFmt ...
ÀÌ¿Í ´Þ¸® gettext.pmÀº GNU gettext¸¦ À§ÇÑ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÑ´Ù. À̰ÍÀÇ ¿¹´Â ´ÙÀ½°ú
°°´Ù.
#!/usr/bin/perl
use POSIX; # for setlocale()
use Locale::gettext;
bindtextdomain("gtest", ".");
textdomain("gtest");
print gettext("Welcome to my program"), "\n";
¸Þ½ÃÁö ÆÄÀÏÀº PGetText¸ðµâÀÇ XText·Î ÃßÃâÇÒ ¼ö ÀÖ´Ù. ¹ø¿ªÇÑ °ÍÀ» msgfmt·Î ÄÄÆÄÀÏÇÏ
¿© Àû´çÇÑ ·ÎÄÉÀÏ µð·ºÅ丮¿¡ ÀúÀåÇϸé À§ ÇÁ·Î±×·¥ÀÇ ¸Þ½ÃÁö¸¦ ´Ù¸¥ ¾ð¾î·Î º¼ ¼ö ÀÖ´Ù.
ÀÌ ¸ðµâÀÇ ÀåÁ¡Àº ±âÁ¸ÀÇ µ¥ÀÌÅͺ£À̽ºµµ ÀÐÀ» ¼ö ÀÖ´Ù´Â °ÍÀ¸·Î, µµ¸ÞÀθ¸ °°´Ù¸é C·Î ÀÛ
¼ºÇÑ µ¿ÀÏÇÑ ÀÏÀ» ÇÏ´Â ¾îÇø®ÄÉÀ̼ÇÀÌ ÀÖÀ» °æ¿ì ¸Þ½ÃÁö¸¦ °øÀ¯ÇÒ ¼ö ÀÖ´Ù.
gettext [TEXTDOMAIN] msgid
ÀÇ Çü½ÄÀ¸·Î ¸Þ½ÃÁö Id¿¡ ÇØ´çÇÏ´Â ¸Þ½ÃÁö¸¦ ¾òÀ» ¼ö ÀÖ´Ù. µµ¸ÞÀÎÀº TEXTDOMAIN ȯ°æ
º¯¼ö ¶Ç´Â gettextÀÇ Àμö·Î Á÷Á¢ ³Ñ±â¸é µÈ´Ù. LOCALEDIRÀº ȯ°æº¯¼ö
TEXTDOMAINDIR·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.
pythonÀÇ gettext¹ÙÀεùÀº py-gnome¿¡¼ ±¸ÇÒ ¼ö ÀÖ´Ù.
ftp://ftp.daa.com.au/pub/james/python/
Guile(GNU's Ubiquitous Intelligent Language for Extension)Àº Scheme¾ð¾îÀÇ
È®Àå ¶óÀ̺귯¸®ÀÌ´Ù. GuileÀÇ gettext¹ÙÀεùÀº
ftp://ftp.cygnus.com/pub/tromey/guile-gettext.tar.gz
¿¡¼ ±¸ÇÒ ¼ö ÀÖ´Ù. À̿ܿ¡µµ gettext¸¦ Áö¿øÇÏ´Â ¾ð¾î´Â ¸¹Àºµ¥, »ç½Ç
gettextÀº CÇÔ¼öÀÇ Çü½ÄÀ¸·Î ±¸ÇöµÇ¾î ÀÖÀ¸¹Ç·Î, CÇÔ¼ö¿ÍÀÇ ¸µÅ©¸¦ Áö¿øÇÒ ¼ö
ÀÖ´Â ´ë´Ù¼öÀÇ ¾ð¾î¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
GNU ÇÁ·ÎÁ§Æ®¸¦ À§ÇÑ ¹ø¿ª ÆÀÀº gettext½Ã½ºÅÛÀÌ ¸¸µé¾îÁö´ø ½Ã±â¿¡ ±¸¼ºµÇ¾ú´Ù. ´Ù¸¸ ÀúÀÛ±ÇÀÇ ¹®Á¦ - GPL·Î µÈ ¼ÒÇÁÆ®¿þ¾î¿¡¼ÀÇ ¸Þ¼¼ÁöÀÇ ¹ø¿ªÀÚ°¡ ¼ÒÇÁÆ®¿þ¾îÀÇ Á¦ÀÛÀÚ¿Í ¸¶Âù°¡Áö·Î ÀÚ½ÅÀÇ ¹ø¿ª¿¡ ´ëÇÑ µ¶Á¡ÀûÀÎ ±Ç¸®¸¦ ÁÖÀåÇÒ ¼ö ¾øµµ·Ï - ·Î ÁöÁ¤µÈ GNUÇÁ·ÎÁ§Æ®ÀÇ ÀúÀÛ¹°¿¡ ´ëÇØ¼ ¹ø¿ªÀÚ´Â(´Ü¼øÇÑ ¸Þ½ÃÁö¿Í ¹®¼¸¦ Æ÷ÇÔÇÏ¿©) ÀÚ½ÅÀÇ ±Ç¸®¸¦ Æ÷±âÇϰí À̸¦ Free Software FoundationÀ¸·Î ¾çµµÇϵµ·Ï ÇÏ¿´´Ù. µû¶ó¼ °ø½Ä ¹ø¿ªÀÚµéÀº ¸ðµÎ ÀÚ½ÅÀÇ ¹ø¿ª¹°¿¡ ´ëÇÑ ±Ç¸® Æ÷±â °¢¼(DISCLAIMER)¸¦ Richard Stallman¿¡°Ô Á¦ÃâÇϵµ·Ï ÇÏ¿´´Ù.
´ëºÎºÐÀÇ GNU ÇÁ·ÎÁ§Æ® ÆÐŰÁö´Â ¹ø¿ªÀÚÀÇ ±Ç¸® Æ÷±â °¢¼°¡ ¾øÀÌ´Â ¹ø¿ªÀÚÀÇ ¹ø¿ª¹°À» ¹èÆ÷º»¿¡ Æ÷ÇÔ½ÃŰÁö ¾Ê´Â´Ù. ±Ç¸® Æ÷±â °¢¼¸¦ ÀÛ¼ºÇÏ¿© Á¦ÃâÇÏ°í ½ÂÀιÞÀº ¹ø¿ªÀÚ´Â GNU ÇÁ·ÎÁ§Æ®ÀÇ ¿©·¯ ¹®¼µéÀ» ÀÚÀ¯·Ó°Ô ¹ø¿ªÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ÃÖ±Ù Áõ°¡Çϰí ÀÖ´Â ºñ GNU ÇÁ·ÎÁ§Æ® ¾îÇø®ÄÉÀ̼ǵé(±×¸®°í GNU ÇÁ·ÎÁ§Æ®ÀÇ °ÍÀ̶ó ÀÎÁ¤µÇ´Â °æ¿ì¶óµµ Á¦ÀÛÀÚÀÇ Àǵµ¿¡ µû¶ó)¿¡¼´Â ÀÌ·± ±Ç¸® Æ÷±â °¢¼°¡ ÇÊ¿äÇÏÁö ¾Ê´Ù. ÀÌ·± °æ¿ì¿¡ ¸Þ½ÃÁöÀÇ ÀúÀ۱ǿ¡ ´ëÇØ¼´Â ÆÐŰÁö °ü¸®ÀÚÀÇ Á¤Ã¥¿¡ µû¸£µµ·Ï µÇ¾î ÀÖ´Ù.
¸¹Àº »ç¶÷µéÀº ÀÌ·¯ÇÑ GNUÀÇ Á¤Ã¥ÀÌ ¹ø¿ª ¼Óµµ¸¦ ÀúÇϽÃŰ°í »õ·Î¿î »ç¶÷µéÀÇ Âü¿©¸¦ ¸Á¼³ÀÌ°Ô ¸¸µå´Â ¿äÀÎÀ̶ó°í ÇÑ´Ù. ½ÇÁ¦·Î ÇÊÀÚµµ fileutilsÀÇ ¹ø¿ªÀ» ½ÃÀÛÇϱâ Àü¿¡ Richard Stallman¿¡°Ô ÆíÁö·Î(ÀüÀÚ¿ìÆíÀÌ ¾Æ´Ñ ½ÇÁ¦ ±¹Á¦¿ìÆíÀ¸·Î) DISCLAIMER¸¦ ÀÛ¼ºÇÏ°í ¼ÕÀ¸·Î »çÀÎÇØ¼ º¸³»¾ß Çß´Ù. ÀÌ´Â ¾îÂî º¸¸é ¸ðµç ¸é¿¡¼ ¿Ïº®ÇÏ°í ½ÍÀº GNUÀÇ Á¤Ã¥ÀÇ »ê¹°ÀÌ¶ó º¼ ¼ö Àִµ¥, ÇÊÀÚµµ ¸¹ÀÌ ¸Á¼³¿´Áö¸¸ Çѹø¸¸ ¼ö°íÇÏ¸é µÇ´Â ÀÏÀ̹ǷΠ±×¸® Å« ºÎ´ãÀº ¾Æ´Ï¾ú´Ù°í »ý°¢ÇÑ´Ù. ±×·¯³ª ¸ðµç ¸Þ½ÃÁö ¹ø¿ª¿¡ ÀÌ·± ÀÏÀÌ ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï´Ù. ÀÚ½ÅÀÌ ¸Þ½ÃÁö ¹ø¿ª¿¡ ´ëÇÑ ¿Á¤¸¸ ÀÖ´Ù¸é, DISCLAIMER¸¦ º¸³»Áö ¾Ê¾Æµµ Âü¿©ÇÒ ¼ö ÀÖ´Â ¿©·¯ ¹ø¿ª ÇÁ·ÎÁ§Æ®¿¡ Áö±Ýµµ ¾ó¸¶µçÁö Âü¿©ÇÒ ¼ö ÀÖ´Ù.

±×¸²: GNU ÀÚÀ¯ ¹ø¿ª ÇÁ·ÎÁ§Æ® ȨÆäÀÌÁö: http://www.iro.umontreal.ca/contrib/po/HTML/
¿©±â¼ °¢ ±¹°¡º°/ÇÁ·ÎÁ§Æ®º° ¸Þ½ÃÁöÀÇ ÅÛÇø®Æ®¿Í ¹ø¿ª »óȲÀ» ¾òÀ» ¼ö ÀÖ´Ù.
Çѱ¹¾î ÆÀÀº 1995³â ¹æÁØ¿µ(bangjy@geocities.com)¾¾¿¡ ÀÇÇØ °á¼ºµÇ¾î - ½ÇÁ¦ÀûÀ¸·Î´Â È¥ÀÚ¿¡ ÀÇÇÑ °ü½É°ú ³ë·ÂÀ̾úÁö¸¸ - ÇöÀç¿¡ À̸£°í ÀÖ´Ù. Çѱ¹¾î ÆÀÀº Áß°£ Á¤µµ µÇ´Â ¹ø¿ª ¼º°ú¸¦ ¿Ã¸®°í Àִµ¥, ±×¸® ¹ø¿ªÀÌ È°¹ßÇÑ »óÅ´ ¾Æ´Ï´Ù. ¹æÁØ¿µ¾¾°¡ ±º´ë¸¦ °£ ÈÄ ¾à°£ÀÇ °ø¹éÀÌ ÀÖ¾úÀ¸³ª, ÇÊÀÚ°¡ À̸¦ À̾î¹Þ¾Æ ÇöÀç±îÁö °ü¸®Çϰí ÀÖ´Ù. Çѱ¹¾îÆÀÀÇ È¨ÆäÀÌÁö´Â ÃÖ±Ù¿¡ »çÀÌÆ®¸¦ ¿Å±â°í »õ·ÎÀÌ ±¸¼ºµÇ¾ú´Ù. µµ¸ÞÀÎÀº ½Ã¹Î³×Æ®¿öÅ©ÀÇ ±è¹Ù·Î´ÔÀÇ µµ¿òÀ» ¾ò¾ú´Ù.

±×¸²: ¹ø¿ªÆÀ Çѱ¹¾îÆÀ ȨÆäÀÌÁö: http://translation.gnu.or.kr
Çѱ¹¾î ¹ø¿ªÆÀ¿¡¼´Â DISCLAIMER¸¦ ³½ ÀÚ¿øÀڵ鿡 ÀÇÇÑ GNU ÇÁ·ÎÁ§Æ® ¾îÇø®ÄÉÀ̼ÇÀÇ ¹ø¿ª Áß½ÉÀ¸·Î ÀÌ·ç¾îÁö°í ÀÖ¾úÁö¸¸ ÃÖ±Ù¿¡ gettext¸¦ »ç¿ëÇÏ´Â ¾îÇø®ÄÉÀ̼ÇÀÌ Å©°Ô Áõ°¡Çϸé¼, ±×¸®°í DISCLAIMER¸¦ ³½ ÀÚ¿øÀÚµéÀÇ ¼ö°¡ 1³â¿¡ ÇѸí Á¤µµ·Î Áõ°¡ÇÏ´Â Çö »óȲ ¶§¹®¿¡ ¿©·¯°¡Áö º¯È°¡ »ý°å´Ù. »ç½Ç ¹ø¿ªÆÀÀÌ º°µµ·Î ±¸¼ºµÈ °ÍÀº GNU ÇÁ·ÎÁ§Æ® ¹®¼¿Í ¸Þ½ÃÁöÀÇ ¹ø¿ªµµ Áß¿äÇÑ ÀÏÀ̱⠶§¹®ÀÌÁö¸¸, ÀÌ·¯ÇÑ ÇÁ¸® ¼ÒÇÁÆ®¿þ¾îÀÇ ¹ø¿ª¿¡ ÀÖ¾î¼ µû·Îµû·Î ¿òÁ÷ÀÌ´Â ¹ø¿ªÀڵ鿡°Ô ÀϰüµÇ°í ¹®ÀÇÀÇ Áß½ÉÀÌ µÉ ¼ö ÀÖ´Â Á¸Àç°¡ µÇ´Â Àϵµ ¸¶Âù°¡Áö·Î Áß¿äÇÏ´Ù°í »ý°¢ÇÑ´Ù. Çѱ¹¾î ÆÀÀº ÇöÀç ±×·¯ÇÑ ÀÏÀ» ÇÒ ¼ö ÀÖµµ·Ï ³ë·ÂÇϰí ÀÖ´Ù. ½ÇÁ¦ ¾î¶² ÆÐŰÁöÀÇ ¸Þ½ÃÁö¸¦ ¹ø¿ªÇϰí Àְųª, ÀÌ·¯ÇÑ ÀÛ¾÷¿¡ °ü½ÉÀÖ´Â ºÐÀº Çѱ¹¾î ÆÀÀÇ ¸ÞÀϸµ ¸®½ºÆ®ÀÎ ko@li.org¿¡ °¡ÀÔÇϱ⠹ٶõ´Ù. °¡ÀÔ ÀýÂ÷´Â Çѱ¹¾î ÆÀ ȨÆäÀÌÁö¿¡¼ Àß ¼³¸íÇϰí ÀÖ´Ù.
±×¸®°í ¹Ýµå½Ã gettext¸¦ ÅëÇÑ ¸Þ½ÃÁö ¹ø¿ªÀÌ ¾Æ´Ï¶óµµ ³ª¸§´ë·ÎÀÇ ¹ø¿ª ½Ã½ºÅÛÀ» °®Ãß°í ÀÖ¾î ¸Þ½ÃÁö¸¦ ¹ø¿ªÇØ¾ß ÇÏ´Â ÇÁ·ÎÁ§Æ®µéµµ ¸¹ÀÌ ÀÖ´Ù. nvi³ª vimÀÇ ¸Þ´º ½Ã½ºÅÛµµ ±×·¸°í, ¼Ò¼öÀÌÁö¸¸ tcsh°ú °°ÀÌ catgets()¸¦ »ç¿ëÇÏ´Â ½Ã½ºÅÛµµ ¿©ÀüÈ÷ Á¸ÀçÇϸç, ¸Þ½ÃÁö »Ó ¾Æ´Ï¶ó ¸Å´º¾ó µîÀÇ ¹®¼µµ °°ÀÌ ¹ø¿ªÇØ¾ß ÇÒ Çʿ伺ÀÌ ÇÁ¸® ¼ÒÇÁÆ®¿þ¾î°¡ ±¹Á¦ÀûÀ¸·Î Á¡Á¡ ³Î¸® »ç¿ëµÇ¸é¼ Ä¿Áö°í ÀÖ´Ù. ÀÚ½ÅÀÌ ÁÁ¾ÆÇϰųª °ü½É ÀÖ´Â ÇÁ·Î±×·¥ÀÌ ±¹Á¦ÈµÇ¾î Áö¿ªÈ¸¦ ±â´Ù¸®°í ÀÖ´Ù¸é, Áö±Ý Âü¿©ÇÏ´Â °ÍÀ» ½É°¢ÇÏ°Ô °í·ÁÇØ º¸±â ¹Ù¶õ´Ù.
$Id: index.shtml,v 1.1.1.1 2001/05/23 03:11:33 cjh Exp $
[ Home | Freetime works | FreeBSD | KFUG ]