¼ÒÇÁÆ®¿þ¾îÀÇ ±¹Á¦È­

¹æÁØ¿µ
¼­¿ï ±Ýõ±¸ µ¶»êµ¿ 904-39
¿¬¼¼´ëÇб³ ÀüÀÚ°øÇаú
e-mail: bangjy@nownuri.nowcom.co.kr

Abstract:
´Ù±¹¾î Áö¿ø ¼ÒÇÁÆ®¿þ¾î¿¡ °ü½ÉÀÖ´Â ÇÁ·Î±×·¡¸ÓµéÀ» À§ÇØ ¸î¸î °íÀ¯¾î ¸Þ½ÃÁö ó¸® ¹æ½ÄÀ» ¼Ò°³Çϰí, ±× Áß gettext ¹æ½ÄÀ» ÀÌ¿ëÇÏ¿© °£´ÜÇÑ ±¹Á¦È­ °úÁ¤À» º¸ÀδÙ. ¾Æ¿ï·¯ À¯´ÏÄÚµå¿Í °°Àº ¹®ÀÚ ÁýÇÕ¿¡ °üÇØ¼­µµ ¼³¸íÇÑ´Ù.
Keywords:
internalization, localization, locale, gettext

1 ¼­·Ð

ÀϹÝÀûÀ¸·Î ¿ì¸®°¡ ¾²´Â ´ëºÎºÐÀÇ ÇÁ·Î±×·¥Àº ¹Ì±¹À» Áß½ÉÀ¸·Î ÇÑ ¿µ¾î±Ç ±¹°¡¿¡¼­ ¿µ¾î¸¦ »ç¿ëÇÏ¿© ¸¸µé¾îÁø´Ù. µû¶ó¼­ À̵é ÇÁ·Î±×·¥Àº »ç¿ëÀÚ°¡ ¿µ¾î¿¡ Àͼ÷ÇÑ °ÍÀ¸·Î °¡Á¤ÇÑ´Ù. ¹Ý¸é¿¡ ¿µ¾î¿¡ Ä£¼÷ÇÏÁö ¾ÊÀº ºñ¿µ¾î±Ç »ç¿ëÀÚµéÀº ÇÁ·Î±×·¥ »ç¿ë¿¡ ¾î·Á¿òÀ» ´À³¢¸ç, ¿µ¾î¸¦ ¹Ýµå½Ã ¹è¿ö¾ßÇÑ´Ù´Â ºÎ´ãÀ» °®°Ô µÈ´Ù. °Å±â¿¡´Ù ½Ã°£ÀÌ È帣¸é¼­ Àü¼¼°èÀûÀÎ Á¤º¸ ±³·ù°¡ Ȱ¹ßÇØÁöÀÚ, ¿©·¯ ¹®È­±Ç¿¡¼­ ¾²ÀÏ ¼ö ÀÖ´Â ´ÜÀÏ ¼ÒÇÁÆ®¿þ¾î¿¡ ´ëÇÑ ¿å±¸°¡ Áõ´ëÇÏ°Ô µÇ¾ú´Ù. ÃÖ±Ù ÀϾ°í ÀÖ´Â ÀÎÅͳÝÀÇ ±Þ¼ºÀåÀº ÀÌ·¯ÇÑ ¿òÁ÷ÀÓÀ» °¡¼ÓÈ­Çϰí ÀÖ´Ù.

ÇÁ·Î±×·¥À» ¿©·¯ ¹®È­±Ç¿¡¼­ ¾µ ¼ö ÀÖµµ·Ï ¸¸µå´Â °úÁ¤¿¡´Â µÎ °¡Áö ´Ü°è°¡ ÀÖ´Ù. Çϳª´Â ÇÁ·Î±×·¥¿¡¼­ ƯÁ¤ ¾ð¾î»Ó¸¸ ¾Æ´Ï¶ó ¿©·¯ ¾ð¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÏ´Â °úÁ¤À¸·Î, À̸¦ ±¹Á¦È­ (internationalization, ÁÙ¿©¼­ i18n)¶ó ÇÑ´Ù. ¶Ç ÇÑ °¡Áö ´Ü°è´Â ÇöÁöÈ­ (localization, ÁÙ¿©¼­ l10n)¶ó°í ÇÏ´Â °ÍÀ¸·Î, ÀÌ¹Ì ±¹Á¦È­µÈ ¼ÒÇÁÆ®¿þ¾î°¡ ÇöÁöÀÇ ¹®È­Àû °ü½À-À̸¦ ·ÎÄÉÀÏ(locale)À̶ó ÇÑ´Ù-À» Áö¿øÇϵµ·Ï ÇÏ´Â °ÍÀ» ¶æÇÑ´Ù. ·ÎÄÉÀÏ¿¡´Â ¹®ÀÚ ÄÚµå, ÀÔÃâ·Â ¹æ½Ä, °íÀ¯¾î ¸Þ½ÃÁö, È­Æó, ³¯Â¥ Ç¥½Ã¹ý µîÀÌ ¸ðµÎ Æ÷ÇԵȴÙ. ¶Ç, ÀÌ µÎ °úÁ¤À» Æ÷°ýÇÏ´Â °ÍÀ¸·Î °íÀ¯¾î Áö¿ø (native language support, ÁÙ¿©¼­ NLS)À̶õ ¸»À» ¾²±âµµ ÇÑ´Ù.

2 ±¹Á¦È­ ¸ðµ¨

POSIX ȣȯ ½Ã½ºÅÛ¿¡¼­ÀÇ ±¹Á¦È­´Â ISO C-1989¿Í POSIX 1003.2, 1003.2b¿¡ Á¤ÀǵǾî ÀÖ´Ù. ÀÌ ¸ðµ¨Àº ÇöÁöÈ­ Á¤º¸¸¦ ´ã°í ÀÖ´Â ¿©¼¸ °³ÀÇ ¹üÁÖ·Î ±¸ºÐµÇ´Â ·ÎÄÉÀÏÀ» Á¤ÀÇÇÑ´Ù.

LC_CTYPE
¹®ÀÚ ¼¼Æ®¸¦ ÁöÁ¤ÇÑ´Ù.
LC_COLLATE
Á¤·Ä ¼ø¼­¸¦ ÁöÁ¤ÇÑ´Ù.
LC_TIME
³¯Â¥¿Í ½Ã°£ Ç¥½Ã Çü½ÄÀ» ÁöÁ¤ÇÑ´Ù. ´Þ°ú ¿äÀÏÀÇ À̸§µµ Æ÷ÇԵȴÙ.
LC_NUMERIC
¼ýÀÚ Ç¥½Ã Çü½ÄÀ» ÁöÁ¤ÇÑ´Ù.
LC_MONETARY
È­Æó Ç¥½Ã Çü½ÄÀ» ÁöÁ¤ÇÑ´Ù.
LC_MESSAGES
¸Þ½ÃÁö·Î »ç¿ëÇÒ ¾ð¾î¸¦ ÁöÁ¤ÇÑ´Ù. °¡Àå Áß½ÉÀÌ µÇ´Â ºÎºÐÀÌ´Ù.

2.1 setlocale ÇÔ¼ö

·ÎÄÉÀÏÀ» »ç¿ëÇϱâ À§ÇØ È£ÃâÇÏ´Â ÇÔ¼ö·Î, <locale.h>¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.

ù¹øÂ° Àμö´Â ¿©¼¸ °³ ¹üÁÖ Áß ÇϳªÀ̸ç, ¸ðµç °ÍÀ» Æ÷ÇÔÇÏ·Á°í ÇÒ ¶© LC_ALLÀ» ¾²¸é µÈ´Ù. µÎ¹øÂ° Àμö´Â ¾î¶² ·ÎÄÉÀÏÀ» »ç¿ëÇÒ °ÍÀÎÁö ÁöÁ¤ÇÑ´Ù. À̰ÍÀ» ""·Î ÇØµÎ¸é ¹üÁÖ¿Í °°Àº À̸§ÀÇ È¯°æ º¯¼ö³ª LANG µî¿¡ µû¶ó ·ÎÄÉÀÏÀÌ °áÁ¤µÈ´Ù. ƯÁ¤ ·ÎÄÉÀÏÀ» ¼³Á¤ÇϰíÀÚ ÇÒ ¶© "identifier"¸¦ ÁöÁ¤ÇØ ÁÖ¸é µÈ´Ù. À̰ÍÀº º¸Åë ISO 639 ¿¡ Á¤ÀÇµÈ ¾ð¾î ÄÚµå·Î¼­, Çѱ¹¾îÀÇ °æ¿ì "ko", µ¶ÀϾîÀÇ °æ¿ì "de"°¡ µÈ´Ù.

3 ¸Þ½ÃÁö ó¸® ¹æ½Ä

¾Õ¼­ ¸»ÇßµíÀÌ, ÀÏ¹Ý ÄÄÇ»ÅÍ »ç¿ëÀÚµéÀÌ °Þ´Â °¡Àå Å« ¹®Á¦´Â »ç¿ëÇÏ´Â ÇÁ·Î±×·¥ÀÇ ¸Þ½ÃÁö°¡ ³¸¼± ¾ð¾î·Î Ãâ·ÂµÈ´Ù´Â Á¡ÀÌ´Ù. ÀÌ Á¡À» ÇØ°áÇÏ´Â °¡Àå °£´ÜÇÑ ¹æ¹ýÀº ¼Ò½º ÄÚµå »óÀÇ ¸ðµç ¸Þ½ÃÁö¸¦ ¼öÀÛ¾÷À» ÅëÇØ °íÀ¯¾î·Î ¹Ù²Ù´Â °ÍÀ¸·Î, Áö±Ý±îÁö ´ëºÎºÐÀÇ ¼ÒÇÁÆ®¿þ¾î°¡ ÀÌ ¹æ¹ýÀ» ÅÃÇØ ¿Ô´Ù. ±×·¯³ª ¿øº» ÇÁ·Î±×·¥ÀÌ °»½ÅµÉ ¶§¸¶´Ù ¸¹Àº ¾çÀÇ ¹ø¿ª ¸Þ½ÃÁö¸¦ ´Ù½Ã ÀÔ·ÂÇÏ´Â µî ¼Ò¸ðÀûÀÎ ³ëµ¿ÀÌ ¸¹ÀÌ ÇÊ¿äÇϰí, ±×·³À¸·Î½á ¿ø¾îÆÇ°ú °íÀ¯¾îÆÇÀÇ ¹ßÇ¥ °£°ÝÀÌ ³Ê¹« ±æ¾îÁø´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù.

¿À´Ã³¯ À¯´Ð½º ȣȯ ½Ã½ºÅÛ »ó¿¡¼­´Â ¼¼ °¡Áö ¹æ¹ýÀÌ ³Î¸® ¾Ë·ÁÁ® ÀÖ´Ù:

3.1 ¾ÖÇø®ÄÉÀÌ¼Ç µðÆúÆ® ÆÄÀÏ

X À©µµ¿ì ½Ã½ºÅÛ¿¡¼­ ¾²´Â ¹æ¹ýÀ¸·Î, ¹öưÀ̳ª ¸Þ´º¹Ù °°Àº À§Á¬°ú ¿¬°üµÈ ¸Þ½ÃÁö¸¦ ¾ÖÇø®ÄÉÀÌ¼Ç µðÆúÆ® ÆÄÀÏ¿¡ ´ã¾Æ ³õ°í ÆíÁýÇÒ ¼ö ÀÖ°Ô ÇÏ´Â °ÍÀÌ´Ù. ¼Ò½º ÆÄÀÏÀÇ ´Ü¼ø º¯°æº¸´Ù´Â Á¶±Ý ¹ßÀüµÈ ÇüÅÂÁö¸¸, X À©µµ¿ì¿¡¼­¸¸ ¾µ ¼ö ÀÖ´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù.

3.2 catgets

ÀÌ ¹æ¹ýÀº X/Open Portability Guide 3±Ç¿¡ Á¤ÀǵǾî ÀÖÀ¸¸ç, ¿À´Ã³¯ °ÅÀÇ ¸ðµç À¯´Ð½º ½Ã½ºÅÛ »ó¿¡ ±¸ÇöµÇ¾î ÀÖ´Ù. ÇÏÁö¸¸ ¸î¸î À¯´Ð½º ÆÇ¸Å¾÷üµéÀÌ ±×µé¸¸ÀÇ µ¶ÀÚÀûÀÎ ¹öÀüÀ» °í¼öÇÔ¿¡ µû¶ó Ç¥ÁØÈ­°¡ Áö¿¬µÇ°í ÀÖ´Ù. ÀÌ ¹æ¹ýÀÇ ±âº» °³³äÀº ¹ø¿ª °¡´ÉÇÑ ¸Þ½ÃÁö¸¶´Ù ¹øÈ£¸¦ ºÎ¿©ÇÏ´Â °ÍÀÌ´Ù. ¹ø¿ªÀÚ°¡ µ¥ÀÌÅÍ º£À̽º¿¡ ÀúÀåµÈ ¹ø¿ª¹®¿¡ ¹øÈ£¸¦ ¸Å°Ü ³õÀ¸¸é, ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ ¶§ catgets ÇÔ¼ö¸¦ ÅëÇØ ÀûÇÕÇÑ ¸Þ½ÃÁö°¡ ¼±ÅõȴÙ.

catgets ÀÎÅÍÆäÀ̽º´Â »ç¿ëÇϰíÀÚ ÇÏ´Â ¸Þ½ÃÁö ¸ñ·Ï ÆÄÀÏÀ» ¿©´Â µ¥ ¾²ÀÌ´Â catopen, ¸Þ½ÃÁö Ç¥¸¦ ÀÐ¾î ¿À´Â µ¥ ¾²ÀÌ´Â catgets, ¸ðµç ÀÏÀ» ¸¶Ä£ µÚ ¿­¾ú´ø ÆÄÀÏÀ» ´Ý´Â catclose µî, ÆÄÀÏ ¾×¼¼½º¿¡ ¾²ÀÌ´Â ¼¼ °³ÀÇ ÇÔ¼ö·Î ÀÌ·ç¾îÁ® ÀÖ´Ù.. ÀÌ ÇÔ¼öµéÀÇ ¿øÇü(prototype)Àº <nl_types.h> ÆÄÀÏ¿¡ µé¾î ÀÖ´Ù.

catopen ÇÔ¼ö´Â ¾Æ·¡Ã³·³ ¾²ÀδÙ:

ù¹øÂ° Àμö´Â ¸ñ·ÏÀÇ À̸§À» ³ªÅ¸³»´Âµ¥, À̰ÍÀº ´ë°³ ÇÁ·Î±×·¥À̳ª ÆÐŰÁöÀÇ À̸§À» ÁöĪÇÑ´Ù. µÎ¹øÂ° Àμö´Â Ç¥Áؾȿ¡ Á¤ÀǵǾî ÀÖÁö ¾ÊÀ¸¹Ç·Î º¸Åë 0À» ¾´´Ù. ¸®ÅÏ °ªÀº ¸Þ½ÃÁö ¸ñ·Ï¿¡ ´ëÇÑ ±â¼úÀÚ (descriptor)À̸ç, open ÇÔ¼ö¿¡¼­ ¸®ÅÏÇÏ´Â ÆÄÀÏ ±â¼úÀÚ¿Í ¾²ÀÓ»õ°¡ °°´Ù.

½ÇÁ¦·Î ¹ø¿ª¹®À» ¼±ÅÃÇÒ ¶§¿¡´Â catgets¸¦ »ç¿ëÇÑ´Ù.

ù¹øÂ° Àμö´Â ÆÄÀÏ ±â¼úÀÚ, µÎ¹øÂ° Àμö´Â msg_id¿¡ ÀÇÇØ ÁöÁ¤µÇ´Â ¸Þ½ÃÁö°¡ ¼ÓÇØ ÀÖ´Â ÁýÇÕÀ» ³ªÅ¸³½´Ù. ³×¹øÂ° Àμö´Â ¹ø¿ª¹®À» ã´Â µ¥ ½ÇÆÐÇßÀ» °æ¿ì ³»Á¤°ªÀ¸·Î ¾²ÀÌ´Â ¹®ÀÚ¿­ÀÌ´Ù.

ÀÛ¾÷À» Á¾·áÇÒ ¶§¿¡´Â catcloseÀ» »ç¿ëÇÑ´Ù.

catgets´Â »ó´çÈ÷ °£´ÜÇϰí ÇÕ¸®ÀûÀÎ ¹æ¹ý°°Áö¸¸, ½ÇÁ¦·Î °¢ ¸Þ½ÃÁö¿¡ °íÀ¯ÇÑ ¹øÈ£ (msg_id)¸¦ ºÎ¿©Çϱâ¶õ ¿©°£ ¾î·Á¿î ÀÏÀÌ ¾Æ´Ï´Ù. ¹øÈ£¸¦ ±âÈ£·Î ġȯÇÑ´ÙµçÁö ÇÏ´Â ½Ãµµ°¡ ÀÖ¾úÀ¸³ª ±Ùº»ÀûÀÎ ÇØ°áÃ¥Àº µÇÁö ¸øÇß´Ù. µû¶ó¼­ ÇöÀç ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏ´Â ÇÁ·Î±×·¥Àº ±×¸® ¸¹Áö ¾Ê´Ù.

3.3 gettext

ÀÌ ¹æ½ÄÀº ¿ø·¡ À¯´ÏÆ÷·³(Uniforum)¿¡¼­ Á¦¾ÈµÇ¾úÀ¸¸ç, ±× ÈÄ ÁÖ¿ä À¯´Ð½º ÆÇ¸Å¾÷ü ÁßÀÇ ÇϳªÀÎ ½ã ¸¶ÀÌÅ©·Î½Ã½ºÅÛ (Sun Microsystems, Inc.)ÀÌ À̸¦ äÅÃÇÏ°í ±¸ÇöÇß´Ù. ±×·¯³ª ¾ÆÁ÷±îÁö °ø½ÄÀûÀΠǥÁØÀº ¹ßÇ¥µÇÁö ¾ÊÀº »óÅÂÀÌ´Ù.ÀÌ ¹æ¹ýÀÇ °¡Àå Å« Ư¡Àº ÀϹÝÀûÀÎ ÆÄÀÏ Ã³¸® °úÁ¤ (¿­°í-¾²°í-´Ý´Â)À» ¸í½ÃÀûÀ¸·Î °ÅÄ¡Áö ¾ÊÀ¸¸ç, ¸Þ½ÃÁö ÀÚü¸¦ ID·Î ÇÑ´Ù´Â µ¥ ÀÖ´Ù.

ÀÌ ¹æ¹ýÀ» ¾²·Á¸é ¿ì¼± textdomain ÇÔ¼ö¸¦ ½á¼­ ¿µ¿ª¸íÀ» ÃʱâÈ­ÇÑ´Ù.

domain_nameÀº ´ë°³ ÇöÀç ÇÁ·Î±×·¥ÀÌ ¼ÓÇØ ÀÖ´Â ÆÐŰÁö¸¦ °¡¸®Å²´Ù. ¿©±â¿¡ NULLÀ» ÁöÁ¤ÇÏ¿© ÇÔ¼ö¸¦ È£ÃâÇϸé ÇöÀç °ªÀ» µ¹·ÁÁØ´Ù. ¸Þ½ÃÁö ¸ñ·ÏÀÌ ¼ÓÇØ ÀÖ´Â µð·ºÅ丮¸¦ ÁöÁ¤ÇØ ÁÙ Çʿ䰡 ÀÖÀ» ¶© bindtextdomainÀ» »ç¿ëÇÑ´Ù.

ÇÑÆí °¡Àå ±âº»ÀûÀÎ ÇÔ¼öÀÇ ¿øÇüÀº ´ÙÀ½°ú °°´Ù:

gettext ÇÔ¼ö´Â msgid¿Í ´ëÀÀµÇ´Â ¹ø¿ª¹®À» ¸ñ·Ï¿¡¼­ Àоîµé¿© µ¹·Á ÁØ´Ù. ´ëÀÀÇÏ´Â ¹®ÀåÀ» ãÁö ¸øÇßÀ» ¶§¿¡´Â msgid¸¦ µ¹·Á ÁØ´Ù. ÀÌ¿Í °°ÀÌ gettext´Â °£´ÜÇÑ ÇÊÅÍ·Î µ¿ÀÛÇϱ⠶§¹®¿¡, ¹ø¿ªÇÒ ¹®ÀÚ¿­À» µÑ·¯ ½Î´Â °Í¸¸À¸·Î ±¹Á¦È­µÈ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÒ ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù.

±¹Á¦È­µÈ ÇÁ·Î±×·¥ÀÌ ÀÏ´Ü ½ÇÇàµÇ¸é, ¾Æ·¡ÀÇ ¸Þ½ÃÁö ¸ñ·Ï ÆÄÀÏÀ» ÀÐ¾î µé¿© »ç¿ëÇÏ°Ô µÈ´Ù:

msg-path´Â ÄÄÆÄÀÏ ½Ã °áÁ¤µÇ´Â °ªÀ¸·Î, º¸Åë /usr/local/share³ª /usr/share¸¦ °¡¸®Å²´Ù. localeÀº ÇöÀç ¼±ÅõǾî ÀÖ´Â ·ÎÄÉÀÏÀ» °¡¸®Å°¸ç, º¯¼ö LANGÀÇ °ªÀ» °®´Â´Ù.

3.3.1 po ÆÄÀÏÀÇ ±¸Á¶

.po ÆÄÀÏÀº ¼ö¸¹Àº ¿£Æ®¸®¸¦ ´ã°í ÀÖÀ¸¸ç, °¢ ¿£Æ®¸®´Â ¿ø·¡ÀÇ ¹ø¿ªµÇÁö ¾ÊÀº ¸Þ½ÃÁö¿Í ±×¿¡ ´ëÀÀÇÏ´Â ¹ø¿ª¹®À¸·Î ÀÌ·ç¾îÁ® ÀÖ´Ù. ¿£Æ®¸®ÀÇ ±¸Á¶´Â ´ÙÀ½°ú °°´Ù.

°ø¹é ¹®ÀÚ¿Í ÁÖ¼®Àº ¹«½ÃµÈ´Ù. ÁÖ¼®¿¡´Â µÎ °¡Áö Á¾·ù°¡ Àִµ¥, Çϳª´Â ÁÖ¼® ±âÈ£ ¹Ù·Î µÚ¿¡ ¹®ÀÚ°¡ ¿À´Â °æ¿ìÀ̰í, ´Ù¸¥ Çϳª´Â ±×·¸Áö ¾ÊÀº °æ¿ìÀÌ´Ù. ÀüÀÚ´Â ÇÁ·Î±×·¥¿¡¼­ ºÎ°¡ÇÑ °ÍÀ¸·Î, ¸Þ½ÃÁö ¸ñ·ÏÀ» °»½ÅÇÒ ¶§ º¸Á¸µÇÁö ¾Ê´Â´Ù. ¹Ý¸é ÈÄÀÚ´Â ¹ø¿ªÀÚ°¡ ºÎ°¡ÇÑ °ÍÀ¸·Î, º°µµÀÇ ¿É¼ÇÀÌ ÁÖ¾îÁöÁö ¾Ê´Â ÇÑ º¸Á¸µÈ´Ù. ¹®ÀÚ¿­Àº C ¾ð¾îÀÇ ¹®¹ýÀ» Áö¿øÇÑ´Ù. µû¶ó¼­ ´ÙÀ½°ú °°Àº ¹®ÀÚ¿­ÀÌ °¡´ÉÇÏ´Ù.

4 GNU gettext¸¦ ÀÌ¿ëÇÑ ±¹Á¦È­ÀÇ ¿¹

GNU gettext´Â ¸Þ½ÃÁö ¹ø¿ª¿¡ ÇÊ¿äÇÑ ¸ðµç °ÍÀ» °¡Áö°í ÀÖ´Â °­·ÂÇÑ µµ±¸·Î¼­, ¸®´ª½º, ÇÁ¸®ºñ¿¡½ºµð, ¼Ö¶ó¸®½º µî ´ëºÎºÐÀÇ À¯´Ð½º ȯ°æÀ» Áö¿øÇÑ´Ù.

GNU gettext°¡ ¼³Ä¡µÇ¾î ÀÖ´Ù°í °¡Á¤Çϰí, ´ÙÀ½°ú °°Àº ÇÁ·Î±×·¥À» ±¹Á¦È­ÇÏ·Á°í ÇÑ´Ù.

    main()
    {
        printf("Hello everyone!\n");
    }

ÃʱâÈ­¸¦ ÇÑ µÚ ¹ø¿ªÇÒ ¹®ÀåÀ» gettext·Î µÑ·¯ ½Î°í, ÇÊ¿äÇÑ Çì´õ ÆÄÀÏÀ» Æ÷ÇÔ½ÃÄÑ ÁÖ¸é ¾Æ·¡¿Í °°ÀÌ µÈ´Ù.

    #include <libintl.h>
    #include <locale.h>
    main()
    {
        setlocale(LC_ALL, "");

        bindtextdomain(PACKAGE, LOCALEDIR);
        textdomain(PACKAGE);

        printf(gettext("Hello everyone!\n");
    }

ÀÌÁ¦ xgettext¸¦ ½ÇÇàÇϸé Ç¥½ÃµÈ ¹®ÀÚ¿­ÀÌ po ÆÄÀÏ·Î ÃßÃâµÈ´Ù.

´ÙÀ½ ¸ÅÅ©·Î¸¦ ¾²¸é ÈξÀ Æí¸®ÇÏ´Ù:

    #define _(String) gettext(String)
    ...
    printf(_("Hello everyone!\n"));
    ...

4.1 ¹®Á¦Á¡ ¹× ÇØ°áÃ¥

    void func(int idx)
    { 
        const char *tab[] = {_("one"), _("two"), _("three")};

        puts(tab[idx]);
    }

¿Í

    void func(int idx)
    {
        const char *tab[] = {"one", "two", "three"};

        puts(_(tab[idx]);
    }

´À ¸ðµÎ Á¦´ë·Î ½ÇÇàµÇÁö ¾Ê´Â´Ù: ÀüÀÚ´Â ¹è¿­ÀÇ ÃʱⰪÀ» ¾Ë ¼ö ¾ø°í, ÈÄÀÚ´Â ¹®ÀÚ¿­ÀÌ ¸¶Å©µÇÁö ¾Ê¾Æ xgettext·Î ÃßÃâÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. ÀÌ ¹®Á¦´Â ´ÙÀ½°ú °°ÀÌ ÇÔÀ¸·Î½á ÇØ°áÇÒ ¼ö ÀÖ´Ù:

    void func(int idx)
    {
        const     char     *tab[]      =     {N_("one"),     N_("two"), 
N_("three")};

        puts(_(tab[idx]));
    }

N_Àº GNU ÆÐŰÁö¿¡¼­ ÈçÈ÷ ¾²ÀÌ´Â ¸ÅÅ©·Î·Î, ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ´Ù:

    #define N_(String) (String)

ÀÌ ¸ÅÅ©·Î´Â xgettext°¡ ¸¶Å©¸¦ ÀνÄÇÏ°í ¸Þ½ÃÁö¸¦ ÃßÃâÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§ÇÑ °ÍÀÌ´Ù.

5 È®Àå ¹®ÀÚ ÁýÇÕ

5.1 ISO-8859-1

ºñ¿µ¾î±Ç ¾ËÆÄºª ¹®ÀÚ¸¦ Ç¥ÇöÇϱâ À§ÇÑ 8ºñÆ® È®Àå ASCII ÄÚµåÀÌ´Ù. ´ëºÎºÐÀÇ À¯·´ ¾ð¾î´Â ÀÌ ¹®ÀÚ ÁýÇÕÀ» »ç¿ëÇϰí ÀÖ´Ù.

5.2 EUC(Extended Unix Code)

EUC´Â À¯´Ð½º¿¡¼­ Çѱ¹¾î, Áß±¹¾î, ÀϺ»¾î µîÀÇ ¾Æ½Ã¾Æ±Ç ¹®ÀÚ¸¦ Áö¿øÇϱâ À§ÇÑ ¹æ¹ýÀÌ´Ù.À̰ÍÀº ISO-2022 ¹æ½Ä¿¡ ¸î°¡Áö Á¦¾àÀ» °¡ÇÑ °ÍÀ¸·Î, ÇÑ ·ÎÄÉÀÏÀÌ 4 °³ÀÇ ¹®ÀÚ ÁýÇÕÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. °¢ ¹®ÀÚ ÁýÇÕÀº ¹Ì¸® Á¤ÇØÁø 94, 94*94, 94*94*94, ... °³ÀÇ Á¶ÇÕ ÇüŸ¦ °¡Áú ¼ö ÀÖ´Ù. Çѱ¹¾îÀÇ °æ¿ì Á¶ÇÕ °¡´ÉÇÑ ±ÛÀÚÀÇ °³¼ö°¡ 11172ÀÚÀ̹ǷΠ2 ¹ÙÀÌÆ® (94*94=8836)·Î ¸ðµç ¹®ÀÚ¸¦ ¼ö¿ëÇÒ ¼ö ¾ø´Ù. µû¶ó¼­ ÀÌ·± ¹æ½ÄÀ» ¾²´Â ÇöÀçÀÇ À¯´Ð½º ½Ã½ºÅÛ¿¡¼­´Â 2¹ÙÀÌÆ® Á¶ÇÕÇü ÇѱÛÀ» »ç¿ëÇϱâ Èûµé´Ù. Àڸ𸶴٠2¹ÙÀÌÆ®¾¿ ºÎ¿©ÇÏ´Â ¹æ¹ý(ÃÖ´ë 6¹ÙÀÌÆ®)µµ ÀÖÀ¸³ª ÀϹÝÀûÀ¸·Î ¾²±â¿£ ¸Þ¸ð¸® ³¶ºñ°¡ ³Ê¹« Å©´Ù. ¶Ç ÇÑ °¡Áö ÀÌ ¹æ½ÄÀÇ ´ÜÁ¡Àº ÇÑÁßÀÏ ¼¼ ³ª¶óÀÇ Äڵ尡 ÀüÇô ȣȯ¼ºÀÌ ¾ø´Ù´Â Á¡ÀÌ´Ù. °°Àº ÇÑÀÚ ¹®È­±ÇÀÓ¿¡µµ ºÒ±¸Çϰí ÄÚµåÇ¥ »ó¿¡¼­ ÇÑÀÚÀÇ À§Ä¡°¡ ¸ðµÎ ´Ù¸£´Ù.

5.3 Unicode(ISO 10646)

ÃÖ±Ù¿¡ °ø½Ä ¹ßÇ¥µÈ À¯´ÏÄÚµå 2.0Àº 2 ¹ÙÀÌÆ®ÀÇ ÄÚµå ¾È¿¡ Àü¼¼°è ÁÖ¿ä ¾ð¾î¸¦ ¹è¿­ÇÑ ¹æ¹ýÀÌ´Ù. Çѱ¹¾îÀÇ °æ¿ì 11172ÀÚ°¡ ¸ðµÎ äÅõǾúÀ¸¸ç, Á¶ÇÕÇü Àڸ𰡠ÇÔ²² Á¦°øµÇ¾î °í¾îµµ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ÇÑÀÚÀÇ °æ¿ì ºÎ¼ö ¼ø¼­¿¡ µû¶ó ¹èÄ¡µÇ¾úÀ¸¸ç, °¢ ³ª¶óÀÇ Äڵ尡 °ãÄ¡´Â ÀÏÀº ´õ ÀÌ»ó ¹ß»ýÇÏÁö ¾Ê´Â´Ù. ÀÌ ¹æ½ÄÀº Àü¼¼°èÀÇ ÁÖ¿ä ¾ð¾î¸¦ Ãæµ¹¾øÀÌ ÇÔ²² Ç¥ÇöÇÒ ¼ö ÀÖ´Â À¯ÀÏÇÑ ÄÚµåÀÌÁö¸¸ ¾ÆÁ÷ ³Î¸® ¾²ÀÌÁö´Â ¾Ê°í ÀÖ´Ù. ÇöÀç ¸®´ª½º¸¦ ºñ·ÔÇÑ ¸î¸î À¯´Ð½º¿¡¼­ Áö¿øÇϰí ÀÖ´Ù.