[ Home | Freetime works | FreeBSD | KFUG ]

ÇÁ·Î±×·¥¼¼°è 1999³â 10¿ùÈ£

¿ÀÇ ¼Ò½º À¯´Ð½º¿¡¼­ÀÇ ÇÑ±Û ±¸Çö - ¸Þ½ÃÁöÀÇ ±¹Á¦È­

ÃÖÁØÈ£, Çѱ¹ FreeBSD »ç¿ëÀÚ ±×·ì

µé¾î°¡¸ç

À̹ø¿¡´Â À¯´Ð½º ÇÁ·Î±×·¥ÀÇ ±¹Á¦È­ÀÇ ¿©·¯°¡Áö ´Ü¸é Áß ¸Þ½ÃÁö ¹ø¿ª¿¡ ´ëÇÑ ¸éÀ» »ìÆìº¸ ÀÚ. ¸Þ½ÃÁö ¹ø¿ªÀº ´ç¸éÇÑ ÀÚ±¹ÀÇ ÀÔÃâ·ÂÀÇ ¹®Á¦°¡ ÇØ°áµÇ°í ³ª¸é ¹Ýµå½Ã °í·ÁÇØ¾ß ÇÒ »çÇ× Àε¥, »ç¶÷µéÀº ´ëºÎºÐ ÀÚ½ÅÀÇ ¾ð¾î·Î ÇÁ·Î±×·¥ÀÇ ¸Þ½ÃÁö°¡ ³ª¿À´Â °ÍÀ» ÁÁ¾ÆÇϱ⠶§¹®ÀÌ ±âµµ ÇÏ°í ¿µ¾î¿¡ Àͼ÷ÇÏÁö ¾ÊÀº »ç¶÷µµ ¸¹±â ¶§¹®ÀÌ´Ù. À̹ø ±â»ç¿¡¼­´Â ¿ÀÇ ¼Ò½º ÇÁ·Î±× ·¥¿¡¼­ ¸¹ÀÌ »ç¿ëµÇ´Â ¸Þ½ÃÁö ¹ø¿ª ½Ã½ºÅÛ¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸°í, ƯÈ÷ GNU gettext ½Ã½ºÅÛ ¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸ÀÚ.

ÀϹÝÀûÀ¸·Î ´Ù¸¥ ³ª¶ó ¾ð¾î³ª ¹®È­¸¦ À§ÇØ ÀÛ¼ºµÈ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱâ À§Çؼ­´Â ¸ÕÀú ÇØ ´ç ±¹°¡ ¾ð¾îÀÇ ÀÔÃâ·ÂÀÌ °¡´ÉÇÑÁöÀÇ ¹®Á¦¸¦ ÇØ°áÇØ¾ß ÇÑ´Ù. ¹°·Ð ÀÌ·± °ÍÀº ±âÁ¸¿¡ ±¸¼ºµÈ ½Ã½ºÅÛÀÇ °ÍÀ» ÀÌ¿ëÇÒ ¼öµµ Àִµ¥, °¡·É ¿ì¸®³ª¶óÀÇ °æ¿ì ÇÑ±Û Ã³¸®°¡ °¡´ÉÇÑ Å͹̳ÎÀ» »ç ¿ëÇÒ ¼ö ÀÖ´Ù¸é ÅÍ¹Ì³Î¿ë ¾îÇø®ÄÉÀ̼ÇÀÇ ÇÑ±Û Ãâ·Â ¹®Á¦¸¦ 8ºñÆ® Ŭ¸°(8bit-clean)ÀÇ ¹® Á¦¸¦ Á¦¿ÜÇϰí´Â °í·ÁÇÒ Çʿ䰡 ¾ø´Ù. ±× ´ÙÀ½¿¡ ÁÖ·Î ÇÏ´Â °ÍÀº ¸Þ½ÃÁöÀÇ ¹ø¿ªÀε¥, ¸Þ´º µîÀÇ »ç¿ëÀÚ ¸Þ½ÃÁö¸¦ ¹ø¿ªÇÏ´Â ÀÏÀÌ´Ù. ¿©±â¿¡´Â ¸¹Àº ¹®Á¦°¡ °³À﵃ ¼ö Àִµ¥, ¸Þ½ÃÁöÀÇ Ãâ·Â ¼ø¼­³ª ÇÁ·Î±×·¥ÀÇ ÄÚµù »óÅ µîÀÌ ¸¹Àº ¿µÇâÀ» ¹ÌÄ¡±â ¶§¹®ÀÌ´Ù. ¿ÏÀüÈ÷ ±¹Á¦È­µÇÁö ¾ÊÀº ÇÁ·Î±×·¥À̶ó¸é ÇØ´ç ±¹°¡¿¡¼­ ¹ø¿ªÀ» ÇÒ ¶§ ÀڽŵéÀÇ ¸Þ½ÃÁö ±¸Á¶¿¡ ¸Âµµ·Ï ÇÁ·Î±× ·¥À» ¸¹Àº ºÎºÐ ¼Õº¸¾Æ¾ß ÇÒ Çʿ䵵 Àִµ¥, ÀÌ´Â ¿øº» ¼Ò½º¸¦ °íÄ¡´Â ÀÏÀÌ µÈ´Ù. ÀÌ ÀÛ¾÷ Àº ÈǸ¢ÇÑ °á°ú¸¦ ¾òÀ» ¼ö ÀÖÁö¸¸ ÀÌÈÄÀÇ ¾÷µ¥ÀÌÆ® µî¿¡¼­ ¸¹Àº ¹®Á¦¸¦ ¾È°Ô µÈ´Ù. ±×·¯³ª ÀÌ·¯ÇÑ ±¹Á¦È­ ÀÛ¾÷À» º¸Á¶Çϱâ À§ÇÑ ¸Þ½ÃÁö ¹ø¿ª ½Ã½ºÅÛÀÌ Á¸ÀçÇÑ´Ù¸é, ¹ø¿ªÀÚ´Â ¿øº» ¼Ò ½º¿¡ ´ëÇÑ °í·Á³ª Á¢±Ù ¾øÀÌ ºÐ¸®µÈ ¸Þ½ÃÁö ÆÄÀÏ ¹ø¿ª¸¸À¸·Î ¿øÇÏ´Â ÀÛ¾÷À» ´Þ¼ºÇÒ ¼ö ÀÖ´Ù.

ÀÌ·± ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ­ °¢ ¿î¿µÃ¼Á¦´Â °íÀ¯ÀÇ ¸Þ½ÃÁö ¹ø¿ª ½Ã½ºÅÛÀ» °®°í ÀÖ´Ù. À©µµ ¿ìÀÇ °æ¿ì ¸®¼Ò½ºÀÇ ÇüÅ·ΠÇÁ·Î±×·¥ÀÇ ¸Þ½ÃÁö¸¦ ºÐ¸®ÇØ ³¾ ¼ö ÀÖ°í, À¯´Ð½ºÀÇ °æ¿ìµµ catgets()³ª gettext()µîÀÇ ÀÎÅÍÆäÀ̽ºµîÀ» ÅëÇØ ¸Þ½ÃÁö¿Í ¼Ò½ºÀÇ ºÐ¸®¸¦ ÀÌ·ê ¼ö ÀÖ´Ù. ¹° ·Ð »ó´ç¼öÀÇ ÇÁ·Î±×·¥Àº ´Ü¼øÇÑ ¸Þ½ÃÁö ¹ø¿ª ÀÌ»óÀÇ ±¹Á¦È­¸¦ ¿ä±¸ÇÏ´Â °æ¿ì°¡ ÀÖÁö¸¸, ÀÌ ·± ¿ä¼ÒµéÀº ¾îÂ÷ÇÇ º°µµÀÇ ÀÛ¾÷ÀÌ ÇÊ¿äÇÏ´Ù.

¸Þ½ÃÁö ¹ø¿ªÀ» À§ÇÑ µµ±¸µé

±×·¯¸é ÀϹÝÀûÀ¸·Î À¯´Ð½º¿¡¼­ ¸¹ÀÌ »ç¿ëµÇ´Â ¸Þ½ÃÁö ¹ø¿ª ¹æ¹ý¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ.

X ¸®¼Ò½º

X ¸®¼Ò½º´Â X¾îÇø®ÄÉÀ̼ǿ¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ¿©·¯°¡Áö Á¤º¸¸¦ ÀÏ¹Ý ÅØ½ºÆ® Çü½ÄÀ¸·Î ´ã °í ÀÖ´Ù. ÀÌ ¸®¼Ò½º µ¥ÀÌÅͺ£À̽º´Â <¸®¼Ò½º Ű>: <¸®¼Ò½º °ª>ÀÇ ÇüÅ·ΠµÇ¾î Àִµ¥, º¸Åë ÀüÀÚ´Â X¿¡¼­ »ç¿ëÇÏ´Â À§Á¬°ú ±× ³»ºÎÀÇ Á¤ÇØÁø À̸§À̰í, ÈÄÀÚ´Â ¸®¼Ò½º¿¡ ÁöÁ¤ÇÒ ¼ö ÀÖ´Â °ªµéÀε¥, ÀÏ¹Ý ¹®ÀÚ¿­·Î ÁöÁ¤ÇÏ¸é µÇÁö¸¸ ±× Àǹ̴ ¸®¼Ò½º ۰¡ ¹«¾ùÀΰ¡¿¡ µû¶ó ´Ù¸£´Ù.

´ÙÀ½Àº ³Ý½ºÄÉÀÌÇÁ 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() ½Ã½ºÅÛÀº ¸Þ½Ã ÁöÀÇ ¿µ¹® ¿øº»ÀÌ Å°°¡ µÈ´Ù. »ç¿ëÀÚ°¡ ÁöÁ¤ÇÑ ÀÓÀÇÀÇ ¹®ÀÚ¿­À» Ű·Î ÇÏ´Â °ÍÀº Æí¸®ÇÒ ¼ö µµ ÀÖÁö¸¸ ¸Þ½ÃÁö°¡ °è¼Ó °»½ÅµÇ°í »ý°Ü³ª´Â »óȲ¿¡¼­´Â ¹ø¿ªµÈ ¸Þ½ÃÁö »Ó ¾Æ´Ï¶ó ¸Þ½ÃÁö Ű ÀÚü¸¦ °ü¸®ÇÏ´Â Àϵµ »ó´çÈ÷ Å« ÀÏÀÌ´Ù.

catgets

catgets() ÀÎÅÍÆäÀ̽º´Â X/Open Portability Guide, Volume 3, XSI Supplementary Definitions, Chapter 5¿¡ Á¤ÀǵǾî ÀÖ´Ù. Áö±Ýµµ catgets()´Â Ç¥ÁØÀ» ¸¸Á·ÇÏ´Â À¯´Ð½º ½Ã½ºÅÛ°ú ¸®´ª½º¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, ±× ½ÇÁ¦ ±¸ÇöÀº ½Ã½ºÅÛ¸¶´Ù ´Ù¸£´Ù. catgets()´Â ´ë¶ô ´ÙÀ½ÀÇ ¼ø¼­·Î µ¿ÀÛÇÑ´Ù.
    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¸¦ ºÎ¿©ÇÏ°í °ü¸®ÇÏ´Â ÀÛ¾÷À» »ó´çÈ÷ ¾î·Æ°Ô ÇÑ´Ù.

gettext

gettext() ÀÎÅÍÆäÀ̽º´Â UniForumÀÇ ÇÑ Á¦¾È¼­¿¡¼­ ½ÃÀÛÇÏ¿©, ¼Ö¶ó¸®½º¿¡¼­ óÀ½ »ç¿ëµÇ°í ÀÖÁö¸¸ ¾ÆÁ÷ Ç¥ÁØÀº ¾Æ´Ï´Ù. gettextÀÇ °¡Àå Å« Ư¡Àº ۰¡ ¹Ù·Î ¿ø¹® ¹®ÀÚ¿­À̶ó´Â °ÍÀÌ´Ù. gettextÀÇ µ¿ÀÛÀº ´ë·« ´ÙÀ½°ú °°´Ù.
    textdomain ("domain_name");
    char* msg = gettext ("msgid");
ÀϹÝÀûÀ¸·Î µµ¸ÞÀÎÀº ÆÐŰÁö À̸§À̸ç, dcgettext()¿Í °°Àº º°µµÀÇ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ´Ù¸¥ µµ¸ÞÀÎÀÇ ¹ø¿ª¹®À» Àá½Ã ÂüÁ¶ÇÒ ¼öµµ ÀÖ´Ù. ¶Ç µÎ°³ ÀÌ»óÀÇ µµ¸ÞÀÎÀÌ °°Àº À̸§À» °®´Â °æ¿ì¸¦ ¸·±â À§ÇØ µð·ºÅ丮º°·Î ´Ù¸£°Ô ÀúÀåµÈ ¸Þ½ÃÁö ÆÄÀÏÀ» bindtextdomain()À¸·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

GNU¿¡¼­´Â gettext¸¦ ÀÚ½ÅÀÇ ¹æ¹ý´ë·Î ±¸ÇöÇϰí À̸¦ ¸Þ½ÃÁö ¹ø¿ª ½Ã½ºÅÛÀ» »ç¿ëÇϰí ÀÖ´Ù. ¼Ö¶ó¸®½º¿Í GNU gettext´Â ´ë·«ÀûÀÎ °³³äÀº °°Áö¸¸ ±× ±¸Çö ¹æ¹ýÀÌ ¼­·Î ´Ù¸£´Ù´Â Á¡À» ¸í½ÉÇØ µÎÀÚ.

GNU gettext

±×·³ ÀÌÁ¦ GNU gettext¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ. GNU gettext´Â GNU »çÀÌÆ®¿¡ ±¸ÇÒ ¼ö ÀÖÀ¸¸ç, ÇöÀç ¹öÀüÀº 0.10.35Àε¥, ¾÷µ¥ÀÌÆ®µÈÁö »ó´çÈ÷ ¿À·¡ µÇ¾ú°í ¾ÆÁ÷ ¹öÀü ¹øÈ£µµ ³·Áö¸¸ ÃæºÐÈ÷ ¾ÈÁ¤ÀûÀ̰í Àß ¿î¿µµÇ´Â ½Ã½ºÅÛÀ̹ǷΠ¿î¿µ»ó¿¡¼­ º°·Î °ÆÁ¤ÇÒ °ÍÀº ¾ø´Ù. gettextÀº prep.ai.mit.eduÀÇ GNU¾ÆÄ«À̺ê¿Í ±× ¹Ì·¯ »çÀÌÆ®¿¡¼­ ±¸ÇÒ ¼ö ÀÖ´Ù.
      ftp://prep.ai.mit.edu/gnu/gettext/gettext-0.10.35.tar.gz
¼³Ä¡´Â ÀϹÝÀûÀÎ GNU ¾îÇø®ÄÉÀ̼Çó·³ ÇÏ¸é µÈ´Ù. catgets()¸¦ »ç¿ëÇÏ´Â ½Ã½ºÅÛ µî¿¡¼­´Â °øÁ¸À» À§ÇÑ ¸î°¡Áö ¿É¼ÇÀ» ÁÙ ¼öµµ Àִµ¥, È¥¶õ°ú ºÒÆíÀ» ÀÏÀ¸Å³ ¼ö ÀÖÀ¸¹Ç·Î ±×´ë·Î ¼³Ä¡ÇÏ´Â °ÍÀÌ ÁÁ°Ú´Ù. ¸¹Àº ¸®´ª½º ½Ã½ºÅÛ¿¡¼­´Â gettext¸¦ Ç¥ÁØ ½Ã½ºÅÛ ÆÐŰÁö·Î Á¦°øÇϰí ÀÖÀ¸¸ç(·¡µåÇÞ 5.2µîÀº gettext-0.10À» °®°í Àִµ¥ ÀÌ °æ¿ì¿¡´Â ¹Ýµå½Ã ¾÷±×·¹À̵åÇϱ⠹ٶõ´Ù), FreeBSD¿¡¼­´Â Æ÷Æ®¿¡¼­ miscÄ«Å×°í¸®¿¡ gettext¶ó´Â ÆÐŰÁö°¡ ÀÖÀ¸¹Ç·Î À̸¦ ¼³Ä¡Çϱ⠹ٶõ´Ù.

¿ø¸®

GNU 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/ÇÁ·Î±×·¥ -------'
Ç¥: gettextÀÇ µ¿ÀÛ ¿ø¸®

Á¶±Ý º¹ÀâÇØ º¸ÀÏÁö ¸ð¸£°ÚÁö¸¸, ´ë·«ÀûÀÎ È帧Àº 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ÆÄÀÏÀÇ »ý¼º, ¹ø¿ª, °ü¸®, À¯Áö¸¦ Æí¸®ÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù.

¸Þ½ÃÁö ¹ø¿ªÇϱâ

ÀÌÁ¦ ¸Þ½ÃÁö ¹ø¿ªÀÇ ¿¹¸¦ µé¾î º¸ÀÚ. ´ÙÀ½°ú °°Àº CÇÁ·Î±×·¥ÀÌ ÀÖ´Ù°í ÇØ º¸ÀÚ.
    #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¸¦ »ç¿ëÇÏ¿© ¸Þ½ÃÁö¸¦ ±¹Á¦È­Çϱâ À§Çؼ­´Â ´ÙÀ½ÀÇ ¼ø¼­¸¦ ¹â¾Æ¾ß ÇÑ´Ù.

libintlÀ» »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Áغñ

¼Ò½º¿¡ ´ÙÀ½À» Ãß°¡ÇÑ´Ù.
    #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¸¦ ã°Ô µÈ´Ù.

¹ø¿ª Áغñ

¹ø¿ªÀÇ ´ë»óÀÌ µÇ´Â ¹®ÀÚ¿­Àº gettext()¶Ç´Â À§¿¡¼­ ¸ÅÅ©·Î·Î Á¤ÀÇÇÑ _()À¸·Î µÑ·¯½×À¸¸é µÈ´Ù. gettextµµ ÇϳªÀÇ ÇÔ¼ö¶ó´Â Á¡¿¡ ÁÖÀÇÇÏÀÚ.
    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 , 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 ""
ÁöÁ¤ÇØÁØ ¹®ÀÚ¿­ÀÌ ¸ðµÎ msgid·Î ÁöÁ¤µÇ¾ú´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÌÁ¦ ¹ø¿ªÀÚ°¡ ÇØ¾ß ÇÒ ÀÏÀÌ »ý°å´Âµ¥, ¹Ù·Î msgstrÀ» msgidÀÇ ¹ø¿ª ³»¿ëÀ¸·Î Àû¾îÁÖ´Â °ÍÀÌ´Ù. ¾ÕÀÇ ÁÖ¼®¹®µé(#À¸·Î ½ÃÀÛÇÏ´Â Çà)Àº ÅÛÇø®Æ®·Î ¸¸µé¾îÁÖ´Â °ÍÀε¥, Àû´çÇÑ ³»¿ëÀ» Àû¾îÁÖ¸é µÇ°í, À§ ÆÄÀÏÀÇ Çì´õ ºÎºÐÀº GNU ÇÁ·ÎÁ§Æ®ÀÇ »ê¹°À» À§ÇÑ °ÍÀ̹ǷÎ(µû¶ó¼­ ÀúÀÛ±ÇÀÚ°¡ FSF·Î µÇ¾î ÀÖ´Ù) À̸¦ µû¸£Áö ¾ÊÀº ¾îÇø®ÄÉÀ̼ÇÀÇ °æ¿ì À̸¦ Àû¾îÁÖÁö ¾Ê°Å³ª, --omit-header¿É¼ÇÀ» Ãß°¡·Î ÁÖ¸é µÈ´Ù. °¡Àå ù¹ø ¸Þ¼¼ÁöÀÇ °æ¿ì ¹ø¿ªÀÚ¿Í ¹ø¿ª ÆÀ µîÀ» Àû¾îÁÖ°Ô µÇ´Âµ¥, Language-TeamÀÇ °æ¿ì ¾Æ·¡¿¡¼­ ¼³¸íÇÏ°Ô µÉ ¹ø¿ª ÆÀÀ» ³ªÅ¸³»°Ô µÈ´Ù. ±Ç¸® Æ÷±â °¢¼­¸¦ Á¦ÃâÇÑ ¹ø¿ªÀÚ¶ó¸é(3.2ÀýÀ» º¸±â ¹Ù¶õ´Ù) ÇØ´ç ¾ð¾î ÆÀ°ú ¸ÞÀϸµ ¸®½ºÆ® ÁÖ¼Ò¸¦ Àû¾îÁÖ¸é µÈ´Ù. Çѱ¹¾îÀÇ °æ¿ì
    "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

moÆÄÀÏ ¼³Ä¡

ÀÌÁ¦ ¹ø¿ª¹®À» ÄÄÆÄÀÏÇÏ¿´´Ù. Áö±ÝÀº LOCALEDIRÀ» .À¸·Î ÁöÁ¤ÇÏ¿´À¸¹Ç·Î(test.c¸¦ º¸¶ó), ÇöÀç µð·ºÅ丮 ¾Æ·¡¿¡ ¾ð¾î/LC_MESSAGE µð·ºÅ丮¿¡ µµ¸ÞÀÎ.mo ¶õ À̸§ÀÇ ÆÄÀÏ·Î ³õ¾ÆµÎ¸é µÈ´Ù.
    # mkdir -p ko/LC_MESSAGES
    # cp test.mo ko/LC_MESSAGES

½ÇÇà

ÀÌÁ¦ ½ÇÁ¦·Î µÇ´ÂÁö ½ÃÇèÇØ º¸ÀÚ. ¸ÕÀú ÇØ¾ß ÇÒ ÀÏÀº test.c¸¦ ÄÄÆÄÀÏÇÏ¿© ½ÇÇà ÆÄÀÏÀ» ¾ò¾î³»´Â ÀÏÀÌ´Ù.
    # 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¿¡¼­ Á¤ÇÑ ¾ð¾î¸íÀ» »ç¿ëÇÏ¸é µÈ´Ù.

±âŸ ¹®Á¦

¹ø¿ªÀ» À§ÇØ ÇÁ·Î±×·¥À» ÁغñÇÏ´Â °úÁ¤À̳ª, ¹ø¿ª °úÁ¤À» ÅëÇØ °¢ ÀýÂ÷°¡ ºÒÆíÇÏ´Ù°í ´À³¤´Ù¸é EmacsÀÇ po-mode¸¦ »ç¿ëÇÏÀÚ. ½ÇÁ¦·Î gettextÀÇ info¸Å´º¾óµµ po-modeÁß½ÉÀ¸·Î ¼³¸íµÇ¾î ÀÖ°í, ½ÇÁ¦·Î »ç¿ëÇØ º¸¸é ¾ÆÁÖ Æí¸®ÇÏ´Ù.

¿©·¯°¡Áö ¹®Á¦°¡ ÀÖ°ÚÁö¸¸ ¸î°¡Áö¿¡ ´ëÇØ¼­¸¸ »ý°¢ÇØ º¸ÀÚ.

¸Þ¼¼ÁöÀÇ ¹ø¿ª

¸Þ½ÃÁö´Â µÇµµ·ÏÀ̸é ÀϰüµÇ°Ô ¹ø¿ªÇØ¾ß ÇÑ´Ù. ÇÏÁö¸¸ msgid¿¡ ³ªÅ¸³­ ¹®ÀÚ¿­Àº ""À¸·Î ¿¬°áµÉ ¼ö ÀÖÀ¸¹Ç·Î, ¿©·¯ÁÙ¿¡ °ÉÃÄ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
    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 Çѱ¹¾îÆÀ ¸ÞÀϸµ ¸®½ºÆ®¿¡¼­ ·ùâ¿ì¾¾¿Í ³ª´« ¸ÞÀÏ¿¡¼­ ¾Ë ¼ö ÀÖ´Ù).

±âŸ Á¤º¸

´Ù¸¥ ¾ð¾î¸¦ À§ÇÑ GNU gettext

gettext´Â ±âº»ÀûÀ¸·Î C ¶óÀ̺귯¸®ÀÇ ÇüÅ·Π»ç¿ëµÇ°í ÀÖÁö¸¸ C¿¡¼­¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù. ¹°·Ð C ¶óÀ̺귯¸®À̹ǷΠC++ ¿¡¼­µµ »ç¿ëÀÌ °¡´ÉÇϰí, ±× ¿Ü ´Ù¸¥ ¾ð¾î¸¦ À§ÇÑ ¹ÙÀεùµµ ¿©·µ ¸¶·ÃµÇ¾î ÀÖ´Ù.

perl

gettextÀÇ perl¹ÙÀεùÀº CPAN(Comprehensive Perl Archive Network)¿¡¼­ ¸î°¡Áö ¸ðµâ À» ãÀ» ¼ö ÀÖ´Ù. ÇÊÀÚ°¡ ¹ß°ßÇÑ °ÍÀº µÎ°¡ÁöÀ̸ç, ¸ðµÎ Locale Ä«Å×°í¸® ¾È¿¡ ÀÖ´Ù.
Locale-PGetText:
Locale::PGetText ¸ðµâÀº gettext()ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇØ Áִµ¥, ¸¸µé ¾îÁø ¸Þ½ÃÁö ÆÄÀÏÀº GNU gettextÀÇ moÇü½ÄÀ¸·Î ÀúÀåµÇ´Â °ÍÀÌ ¾Æ´Ï¶ó º°µµÀÇ µ¥ÀÌÅͺ£ÀÌ ½º·Î ÀúÀåµÈ´Ù. µû¶ó¼­ ±âÁ¸ÀÇ gettext¿Í´Â °ÅÀÇ È£È¯¼ºÀÌ ¾ø´Ù°í º¸¾Æµµ µÈ´Ù. Locale::PGetText·Î ÀÛ¼ºµÈ perl ÇÁ·Î±×·¥ÀÇ ¿¹´Â ´ÙÀ½°ú °°´Ù.
        #!/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·Î ÀÛ ¼ºÇÑ µ¿ÀÏÇÑ ÀÏÀ» ÇÏ´Â ¾îÇø®ÄÉÀ̼ÇÀÌ ÀÖÀ» °æ¿ì ¸Þ½ÃÁö¸¦ °øÀ¯ÇÒ ¼ö ÀÖ´Ù.

sh ½ºÅ©¸³Æ®
½©¿¡¼­´Â ´Ü¼øÈ÷ gettext¸í·ÉÀÇ °á°ú¸¦ ¹Þ¾Æ »ç¿ëÇÏ¸é µÈ´Ù.
        gettext [TEXTDOMAIN] msgid
	
ÀÇ Çü½ÄÀ¸·Î ¸Þ½ÃÁö Id¿¡ ÇØ´çÇÏ´Â ¸Þ½ÃÁö¸¦ ¾òÀ» ¼ö ÀÖ´Ù. µµ¸ÞÀÎÀº TEXTDOMAIN ȯ°æ º¯¼ö ¶Ç´Â gettextÀÇ Àμö·Î Á÷Á¢ ³Ñ±â¸é µÈ´Ù. LOCALEDIRÀº ȯ°æº¯¼ö TEXTDOMAINDIR·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

Tcl
gettext-0.10.35ÀÇ ¼Ò½º¸¦ ¹Þ¾Æ¼­ Ç®¾î º¸¸é misc/README-TclÆÄÀÏ¿¡ Tcl¿¡¼­ gettext¸¦ »ç¿ëÇϱâ À§ÇÑ È®Àå Á¤º¸¿Í ¼Ò½º¸¦ ¾òÀ» ¼ö ÀÖ´Ù. ÇÏÁö¸¸ Á¶±Ý ¿À·¡µÇ¾úÀ¸¹Ç·Î »ç¿ë¿¡ ÁÖÀÇÇϱ⠹ٶõ´Ù. ÀÌ È®ÀåÀ» »ç¿ëÇϸé gettext¶ó´Â ¸í·É¾î¸¦ »ç¿ëÇÏ¿© ¹ø¿ªµÈ ¸Þ½ÃÁö¸¦ ¾ò¾î¿Ã ¼ö ÀÖ´Ù.

python, Guile
ÃÖ±ÙÀÇ ÇÁ·Î±×·¥¿¡´Â ¾ÆÁ÷ ±¹³»¿¡¼­´Â »ý¼ÒÇÑ pythonÀ̶ó´Â ¾ð¾î¸¦ »ç¿ëÇÏ´Â °æ¿ìµµ ´Ã°í ÀÖ´Ù. pythonÀº ·¡µåÇÞ Á¦¾îÆÇ µî¿¡¼­ »ç¿ëÇÏ´Â ½ºÅ©¸³Æ® ¾ð¾îÀε¥, perl°ú ºñ½ÁÇÑ ¿ëµµ¸¦ °®°í ÀÖÀ¸¸ç °´Ã¼ÁöÇâÀû ¼º°ÝÀÌ °­ÇÏ´Ù.

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ÇÔ¼ö¿ÍÀÇ ¸µÅ©¸¦ Áö¿øÇÒ ¼ö ÀÖ´Â ´ë´Ù¼öÀÇ ¾ð¾î¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

¹ø¿ª ÇÁ·ÎÁ§Æ®

gettext¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥Àº Á¡Á¡ Áõ°¡ÇÏ´Â Ãß¼¼¿¡ ÀÖ´Ù. gettext°¡ °³¹ßµÇ´ø Ãʱ⿡´Â GNU ÇÁ·ÎÁ§Æ®ÀÇ ¸î¸î ÇÁ·Î±×·¥¿¡¼­¸¸ Áö¿øÇÏ¿´Áö¸¸, ÀÌ ¶óÀ̺귯¸®°¡ ¾ÈÁ¤È­µÇ°í ³Î¸® »ç¿ëµÇ±â ½ÃÀÛÇϰí, GNOME/KDE¿Í °°Àº °Å´ëÇÑ ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÁ§Æ®µéÀÌ ¸Þ½ÃÁö ¹ø¿ª ½Ã½ºÅÛÀ¸·Î gettext¸¦ »ç¿ëÇϸ鼭 ÀÌ·¯ÇÑ ÇÁ·Î±×·¥µéÀº Å©°Ô ´Ã¾î³ª°Ô µÇ¾ú´Ù.

GNU ÇÁ·ÎÁ§Æ®¸¦ À§ÇÑ ¹ø¿ª ÆÀÀº gettext½Ã½ºÅÛÀÌ ¸¸µé¾îÁö´ø ½Ã±â¿¡ ±¸¼ºµÇ¾ú´Ù. ´Ù¸¸ ÀúÀÛ±ÇÀÇ ¹®Á¦ - GPL·Î µÈ ¼ÒÇÁÆ®¿þ¾î¿¡¼­ÀÇ ¸Þ¼¼ÁöÀÇ ¹ø¿ªÀÚ°¡ ¼ÒÇÁÆ®¿þ¾îÀÇ Á¦ÀÛÀÚ¿Í ¸¶Âù°¡Áö·Î ÀÚ½ÅÀÇ ¹ø¿ª¿¡ ´ëÇÑ µ¶Á¡ÀûÀÎ ±Ç¸®¸¦ ÁÖÀåÇÒ ¼ö ¾øµµ·Ï - ·Î ÁöÁ¤µÈ GNUÇÁ·ÎÁ§Æ®ÀÇ ÀúÀÛ¹°¿¡ ´ëÇØ¼­ ¹ø¿ªÀÚ´Â(´Ü¼øÇÑ ¸Þ½ÃÁö¿Í ¹®¼­¸¦ Æ÷ÇÔÇÏ¿©) ÀÚ½ÅÀÇ ±Ç¸®¸¦ Æ÷±âÇϰí À̸¦ Free Software FoundationÀ¸·Î ¾çµµÇϵµ·Ï ÇÏ¿´´Ù. µû¶ó¼­ °ø½Ä ¹ø¿ªÀÚµéÀº ¸ðµÎ ÀÚ½ÅÀÇ ¹ø¿ª¹°¿¡ ´ëÇÑ ±Ç¸® Æ÷±â °¢¼­(DISCLAIMER)¸¦ Richard Stallman¿¡°Ô Á¦ÃâÇϵµ·Ï ÇÏ¿´´Ù.

´ëºÎºÐÀÇ GNU ÇÁ·ÎÁ§Æ® ÆÐŰÁö´Â ¹ø¿ªÀÚÀÇ ±Ç¸® Æ÷±â °¢¼­°¡ ¾øÀÌ´Â ¹ø¿ªÀÚÀÇ ¹ø¿ª¹°À» ¹èÆ÷º»¿¡ Æ÷ÇÔ½ÃŰÁö ¾Ê´Â´Ù. ±Ç¸® Æ÷±â °¢¼­¸¦ ÀÛ¼ºÇÏ¿© Á¦ÃâÇÏ°í ½ÂÀιÞÀº ¹ø¿ªÀÚ´Â GNU ÇÁ·ÎÁ§Æ®ÀÇ ¿©·¯ ¹®¼­µéÀ» ÀÚÀ¯·Ó°Ô ¹ø¿ªÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ÃÖ±Ù Áõ°¡Çϰí ÀÖ´Â ºñ GNU ÇÁ·ÎÁ§Æ® ¾îÇø®ÄÉÀ̼ǵé(±×¸®°í GNU ÇÁ·ÎÁ§Æ®ÀÇ °ÍÀ̶ó ÀÎÁ¤µÇ´Â °æ¿ì¶óµµ Á¦ÀÛÀÚÀÇ Àǵµ¿¡ µû¶ó)¿¡¼­´Â ÀÌ·± ±Ç¸® Æ÷±â °¢¼­°¡ ÇÊ¿äÇÏÁö ¾Ê´Ù. ÀÌ·± °æ¿ì¿¡ ¸Þ½ÃÁöÀÇ ÀúÀ۱ǿ¡ ´ëÇØ¼­´Â ÆÐŰÁö °ü¸®ÀÚÀÇ Á¤Ã¥¿¡ µû¸£µµ·Ï µÇ¾î ÀÖ´Ù.

¸¹Àº »ç¶÷µéÀº ÀÌ·¯ÇÑ GNUÀÇ Á¤Ã¥ÀÌ ¹ø¿ª ¼Óµµ¸¦ ÀúÇϽÃŰ°í »õ·Î¿î »ç¶÷µéÀÇ Âü¿©¸¦ ¸Á¼³ÀÌ°Ô ¸¸µå´Â ¿äÀÎÀ̶ó°í ÇÑ´Ù. ½ÇÁ¦·Î ÇÊÀÚµµ fileutilsÀÇ ¹ø¿ªÀ» ½ÃÀÛÇϱâ Àü¿¡ Richard Stallman¿¡°Ô ÆíÁö·Î(ÀüÀÚ¿ìÆíÀÌ ¾Æ´Ñ ½ÇÁ¦ ±¹Á¦¿ìÆíÀ¸·Î) DISCLAIMER¸¦ ÀÛ¼ºÇÏ°í ¼ÕÀ¸·Î »çÀÎÇØ¼­ º¸³»¾ß Çß´Ù. ÀÌ´Â ¾îÂî º¸¸é ¸ðµç ¸é¿¡¼­ ¿Ïº®ÇÏ°í ½ÍÀº GNUÀÇ Á¤Ã¥ÀÇ »ê¹°ÀÌ¶ó º¼ ¼ö Àִµ¥, ÇÊÀÚµµ ¸¹ÀÌ ¸Á¼³¿´Áö¸¸ Çѹø¸¸ ¼ö°íÇÏ¸é µÇ´Â ÀÏÀ̹ǷΠ±×¸® Å« ºÎ´ãÀº ¾Æ´Ï¾ú´Ù°í »ý°¢ÇÑ´Ù. ±×·¯³ª ¸ðµç ¸Þ½ÃÁö ¹ø¿ª¿¡ ÀÌ·± ÀÏÀÌ ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï´Ù. ÀÚ½ÅÀÌ ¸Þ½ÃÁö ¹ø¿ª¿¡ ´ëÇÑ ¿­Á¤¸¸ ÀÖ´Ù¸é, DISCLAIMER¸¦ º¸³»Áö ¾Ê¾Æµµ Âü¿©ÇÒ ¼ö ÀÖ´Â ¿©·¯ ¹ø¿ª ÇÁ·ÎÁ§Æ®¿¡ Áö±Ýµµ ¾ó¸¶µçÁö Âü¿©ÇÒ ¼ö ÀÖ´Ù.

GNU ÀÚÀ¯ ¹ø¿ª ÇÁ·ÎÁ§Æ®

°¢ ±¹°¡/¾ð¾îÀÇ ¸Þ½ÃÁö¸¦ ¹ø¿ªÇϱâ À§Çؼ­ ¿©·¯ ÀÚ¿øÀÚµéÀ» Áß½ÉÀ¸·Î GNU ÀÚÀ¯ ¹ø¿ª ÇÁ·ÎÁ§Æ®(GNU Free Translation Project)°¡ ¸¸µé¾îÁ³´Ù. ¿©±â¿¡´Â °¢ ¾ð¾î¸¦ À§ÇÑ ÆÀÀÌ Á¸ÀçÇϸç, ÀÌ ÆÀÀº ½ÂÀιÞÀº ¹ø¿ªÀÚµéÀ» Áß½ÉÀ¸·Î ¸Þ½ÃÁö ¹ø¿ª¿¡ ´ëÇÑ ¿©·¯°¡Áö ±â¼úÀûÀÎ ¹®Á¦µé°ú ¹Ù¶÷Á÷ÇÑ ¸Þ½ÃÁö ¹ø¿ª¿¡ ´ëÇÑ °ÍÀ» ³íÀÇÇϰí ÀÖÁö¸¸ ²À ½ÂÀιÞÀº ¹ø¿ªÀÚ¿¡°Ô¸¸ Á¦ÇѵÇÁö´Â ¾Ê´Â´Ù. ÀÌ·± ¹ø¿ª ÇÁ·ÎÁ§Æ®ÀÇ È¨ÆäÀÌÁö´Â ¹ø¿ª ÇÁ·ÎÁ§Æ®ÀÇ ÄÚµð³×ÀÌÅÍÀÎ Francois Pinard¾¾°¡ ´ã´çÇϰí ÀÖ´Ù.

±×¸²: 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¿¡ °¡ÀÔÇϱ⠹ٶõ´Ù. °¡ÀÔ ÀýÂ÷´Â Çѱ¹¾î ÆÀ ȨÆäÀÌÁö¿¡¼­ Àß ¼³¸íÇϰí ÀÖ´Ù.

´Ù¸¥ ¹ø¿ª ÇÁ·ÎÁ§Æ®

À§¿¡¼­ ¸»ÇÑ °Í À̿ܿ¡ ¸¹Àº ¾îÇø®ÄÉÀ̼Ǻ°, ½Ã½ºÅÛº° ¹ø¿ª ÇÁ·ÎÁ§Æ®µéÀÌ ÀÖ´Ù. GNOME°ú KDEµî¿¡¼­´Â Áö±Ýµµ ¹ø¿ªÀÌ ÇÊ¿äÇÑ ¼ö¸¹Àº ¸Þ½ÃÁö¸¦ ½ñ¾Æ³»°í Àִµ¥, ÀÌ·± ÇÁ·ÎÁ§Æ®¿¡¼­´Â DISCLAIMER¸¦ ÇÊ¿ä·Î ÇÏÁö ¾ÊÀ» »Ó ´õ·¯ ¼ö¸¹Àº »ç¶÷µéÀÇ ¼ÕÀ» ÇÊ¿ä·Î Çϰí ÀÖ´Ù. ÇØ´ç ¹ø¿ª ÇÁ·ÎÁ§Æ®¿¡ ´ëÇØ¼­´Â ±× ÇÁ·ÎÁ§Æ®ÀÇ È¨ÆäÀÌÁö¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù.

±×¸®°í ¹Ýµå½Ã gettext¸¦ ÅëÇÑ ¸Þ½ÃÁö ¹ø¿ªÀÌ ¾Æ´Ï¶óµµ ³ª¸§´ë·ÎÀÇ ¹ø¿ª ½Ã½ºÅÛÀ» °®Ãß°í ÀÖ¾î ¸Þ½ÃÁö¸¦ ¹ø¿ªÇØ¾ß ÇÏ´Â ÇÁ·ÎÁ§Æ®µéµµ ¸¹ÀÌ ÀÖ´Ù. nvi³ª vimÀÇ ¸Þ´º ½Ã½ºÅÛµµ ±×·¸°í, ¼Ò¼öÀÌÁö¸¸ tcsh°ú °°ÀÌ catgets()¸¦ »ç¿ëÇÏ´Â ½Ã½ºÅÛµµ ¿©ÀüÈ÷ Á¸ÀçÇϸç, ¸Þ½ÃÁö »Ó ¾Æ´Ï¶ó ¸Å´º¾ó µîÀÇ ¹®¼­µµ °°ÀÌ ¹ø¿ªÇØ¾ß ÇÒ Çʿ伺ÀÌ ÇÁ¸® ¼ÒÇÁÆ®¿þ¾î°¡ ±¹Á¦ÀûÀ¸·Î Á¡Á¡ ³Î¸® »ç¿ëµÇ¸é¼­ Ä¿Áö°í ÀÖ´Ù. ÀÚ½ÅÀÌ ÁÁ¾ÆÇϰųª °ü½É ÀÖ´Â ÇÁ·Î±×·¥ÀÌ ±¹Á¦È­µÇ¾î Áö¿ªÈ­¸¦ ±â´Ù¸®°í ÀÖ´Ù¸é, Áö±Ý Âü¿©ÇÏ´Â °ÍÀ» ½É°¢ÇÏ°Ô °í·ÁÇØ º¸±â ¹Ù¶õ´Ù.

KLDP(¸®´ª½º Çѱ۹®¼­ ÇÁ·ÎÁ§Æ®): http://www.kldp.org
ÁÖ·Î ¸®´ª½º HOWTO¹®¼­¸¦ ´Ù·çÁö¸¸ ±×¿ÜÀÇ ¸¹Àº ¿ÀÇ ¼Ò½º °ü·Ã ¹®¼­µµ ¹Þ¾ÆµéÀ̰í ÀÖ´Ù. ¿ì¸®³ª¶ó¿¡¼­ °¡Àå Àß ¿î¿µµÇ´Â ÇÁ·ÎÁ§Æ®ÀÇ ÇϳªÀÌ´Ù.
FreeBSD Çѱ¹¾î ¹®¼­È­ ÇÁ·ÎÁ§Æ®: http://www.kr.freebsd.org/projects/doc-kr/
FreeBSDÀÇ °¢Á¾ ¹®¼­µéÀÇ ¹ø¿ªÀ» ÁÖÁ¦·Î Çϰí ÀÖ´Ù. ÇöÀç´Â ÇÚµåºÏÀÇ ¹ø¿ªÀ» Çϰí ÀÖÀ¸¸ç, Àüü ÇÚµåºÏÀÇ ¹Ý ÀÌ»óÀÌ ÀÌ¹Ì ¹ø¿ªµÇ¾î ÀÖ´Ù.
Debian-kr ÇÁ·ÎÁ§Æ®: http://www.debian-kr.org/
µ¥ºñ¾È GNU/Linux ¹èÆ÷º»ÀÇ Çѱ¹¾î Áö¿øÀ» À§ÇØ ±¸¼ºµÈ Debian-krÇÁ·ÎÁ§Æ®¿¡¼­µµ ȨÆäÀÌÁö³ª ¹®¼­ µîÀÇ ¹ø¿ªÀÌ ÇÊ¿äÇÏ´Ù. µ¥ºñ¾È ÇÁ·ÎÁ§Æ® Ȩ(www.debian.org)¿¡¼­´Â HTTPÀÇ ±â´ÉÀ» »ç¿ëÇØ Á¢¼ÓÇÏ´Â ºê¶ó¿ìÀú¿¡¼­ ¿ì¼±¼øÀ§·Î ÁöÁ¤ÇÑ ¾ð¾î¿¡ ´ëÇÑ È¨ÆäÀÌÁö¸¦ º¸¿©ÁÙ ¼ö Àִµ¥, Çѱ¹¾î·Î ³ªÅ¸³ª´Â ÆäÀÌÁö´Â ÀÌ ÇÁ·ÎÁ§Æ®¿¡¼­ ¹ø¿ªÇÑ °ÍÀÌ´Ù.

³¡À¸·Î

¸Þ½ÃÁöÀÇ ±¹Á¦È­ ½Ã½ºÅÛÀ» ÀÌ¿ëÇÑ Áö¿ªÈ­´Â ¾îÇø®ÄÉÀ̼ÇÀ» ¿µ¾î ÀÌ¿ÜÀÇ ±¹°¡¿¡¼­ »ç¿ëÇÏ °Ô ÇÏ´Â °¡Àå À¯¿ëÇϰí ÁÁÀº ¹æ¹ýÀÌ´Ù. ±×¸®°í ÃÖ±ÙÀÇ ¸¹Àº ¾îÇø®ÄÉÀ̼ÇÀº ÀÌ·¯ÇÑ ±¹Á¦È­ °æÇâÀ» µû¸£°í ÀÖÀ¸¹Ç·Î ¾à°£ÀÇ ³ë·Â°ú ¼ºÀǸ¸ ÀÖ´Ù¸é ¸Þ½ÃÁö ¹ø¿ªÀ» ÇÏ´Â °ÍÀº ±×¸® ¾î·Á ¿î ÀÏÀÌ ¾Æ´Ï´Ù. ƯÈ÷ ¿ÀÇ ¼Ò½º ¾îÇø®ÄÉÀ̼ÇÀÇ °æ¿ì¶ó¸é ¹ø¿ªÀÇ ³ë·ÂÀº ÀüÀûÀ¸·Î »ç¿ëÀÚ ¿¡°Ô ¸Ã°ÜÁö´Âµ¥, ÀÌ·± ÀÛ¾÷Àº ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¸¹Àº Áö½ÄÀÌ ¾øÀ̵µ ÇÒ ¼ö ÀÖ´Â ÀÏÀ̹ǷΠ»ç¿ëÀÚµéÀÇ ¸¹Àº µ¿ÂüÀ» ¹Ù¶õ´Ù.

Âü°íÀÚ·á

$Id: index.shtml,v 1.1.1.1 2001/05/23 03:11:33 cjh Exp $

[ Home | Freetime works | FreeBSD | KFUG ]


Copyright © 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 CHOI Junho, all rights reserved.
Please send spam/UCE here to register your mail to razor