¼ÒÇÁÆ®¿þ¾îÀÇ ±¹Á¦ÈÀϹÝÀûÀ¸·Î ¿ì¸®°¡ ¾²´Â ´ëºÎºÐÀÇ ÇÁ·Î±×·¥Àº ¹Ì±¹À» Áß½ÉÀ¸·Î ÇÑ ¿µ¾î±Ç ±¹°¡¿¡¼ ¿µ¾î¸¦ »ç¿ëÇÏ¿© ¸¸µé¾îÁø´Ù. µû¶ó¼ À̵é ÇÁ·Î±×·¥Àº »ç¿ëÀÚ°¡ ¿µ¾î¿¡ Àͼ÷ÇÑ °ÍÀ¸·Î °¡Á¤ÇÑ´Ù. ¹Ý¸é¿¡ ¿µ¾î¿¡ Ä£¼÷ÇÏÁö ¾ÊÀº ºñ¿µ¾î±Ç »ç¿ëÀÚµéÀº ÇÁ·Î±×·¥ »ç¿ë¿¡ ¾î·Á¿òÀ» ´À³¢¸ç, ¿µ¾î¸¦ ¹Ýµå½Ã ¹è¿ö¾ßÇÑ´Ù´Â ºÎ´ãÀ» °®°Ô µÈ´Ù. °Å±â¿¡´Ù ½Ã°£ÀÌ È帣¸é¼ Àü¼¼°èÀûÀÎ Á¤º¸ ±³·ù°¡ Ȱ¹ßÇØÁöÀÚ, ¿©·¯ ¹®È±Ç¿¡¼ ¾²ÀÏ ¼ö ÀÖ´Â ´ÜÀÏ ¼ÒÇÁÆ®¿þ¾î¿¡ ´ëÇÑ ¿å±¸°¡ Áõ´ëÇÏ°Ô µÇ¾ú´Ù. ÃÖ±Ù ÀϾ°í ÀÖ´Â ÀÎÅͳÝÀÇ ±Þ¼ºÀåÀº ÀÌ·¯ÇÑ ¿òÁ÷ÀÓÀ» °¡¼ÓÈÇϰí ÀÖ´Ù.
ÇÁ·Î±×·¥À» ¿©·¯ ¹®È±Ç¿¡¼ ¾µ ¼ö ÀÖµµ·Ï ¸¸µå´Â °úÁ¤¿¡´Â µÎ °¡Áö ´Ü°è°¡ ÀÖ´Ù. Çϳª´Â ÇÁ·Î±×·¥¿¡¼ ƯÁ¤ ¾ð¾î»Ó¸¸ ¾Æ´Ï¶ó ¿©·¯ ¾ð¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÏ´Â °úÁ¤À¸·Î, À̸¦ ±¹Á¦È (internationalization, ÁÙ¿©¼ i18n)¶ó ÇÑ´Ù. ¶Ç ÇÑ °¡Áö ´Ü°è´Â ÇöÁöÈ (localization, ÁÙ¿©¼ l10n)¶ó°í ÇÏ´Â °ÍÀ¸·Î, ÀÌ¹Ì ±¹Á¦ÈµÈ ¼ÒÇÁÆ®¿þ¾î°¡ ÇöÁöÀÇ ¹®ÈÀû °ü½À-À̸¦ ·ÎÄÉÀÏ(locale)À̶ó ÇÑ´Ù-À» Áö¿øÇϵµ·Ï ÇÏ´Â °ÍÀ» ¶æÇÑ´Ù. ·ÎÄÉÀÏ¿¡´Â ¹®ÀÚ ÄÚµå, ÀÔÃâ·Â ¹æ½Ä, °íÀ¯¾î ¸Þ½ÃÁö, ÈÆó, ³¯Â¥ Ç¥½Ã¹ý µîÀÌ ¸ðµÎ Æ÷ÇԵȴÙ. ¶Ç, ÀÌ µÎ °úÁ¤À» Æ÷°ýÇÏ´Â °ÍÀ¸·Î °íÀ¯¾î Áö¿ø (native language support, ÁÙ¿©¼ NLS)À̶õ ¸»À» ¾²±âµµ ÇÑ´Ù.
POSIX ȣȯ ½Ã½ºÅÛ¿¡¼ÀÇ ±¹Á¦È´Â ISO C-1989¿Í POSIX 1003.2, 1003.2b¿¡ Á¤ÀǵǾî ÀÖ´Ù. ÀÌ ¸ðµ¨Àº ÇöÁöÈ Á¤º¸¸¦ ´ã°í ÀÖ´Â ¿©¼¸ °³ÀÇ ¹üÁÖ·Î ±¸ºÐµÇ´Â ·ÎÄÉÀÏÀ» Á¤ÀÇÇÑ´Ù.
·ÎÄÉÀÏÀ» »ç¿ëÇϱâ À§ÇØ È£ÃâÇÏ´Â ÇÔ¼ö·Î, <locale.h>¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
char *setlocale(int category, const char *locale);
ù¹øÂ° Àμö´Â ¿©¼¸ °³ ¹üÁÖ Áß ÇϳªÀ̸ç, ¸ðµç °ÍÀ» Æ÷ÇÔÇÏ·Á°í ÇÒ ¶© LC_ALLÀ» ¾²¸é µÈ´Ù. µÎ¹øÂ° Àμö´Â ¾î¶² ·ÎÄÉÀÏÀ» »ç¿ëÇÒ °ÍÀÎÁö ÁöÁ¤ÇÑ´Ù. À̰ÍÀ» ""·Î ÇØµÎ¸é ¹üÁÖ¿Í °°Àº À̸§ÀÇ È¯°æ º¯¼ö³ª LANG µî¿¡ µû¶ó ·ÎÄÉÀÏÀÌ °áÁ¤µÈ´Ù. ƯÁ¤ ·ÎÄÉÀÏÀ» ¼³Á¤ÇϰíÀÚ ÇÒ ¶© "identifier"¸¦ ÁöÁ¤ÇØ ÁÖ¸é µÈ´Ù. À̰ÍÀº º¸Åë ISO 639 ¿¡ Á¤ÀÇµÈ ¾ð¾î ÄÚµå·Î¼, Çѱ¹¾îÀÇ °æ¿ì "ko", µ¶ÀϾîÀÇ °æ¿ì "de"°¡ µÈ´Ù.
¾Õ¼ ¸»ÇßµíÀÌ, ÀÏ¹Ý ÄÄÇ»ÅÍ »ç¿ëÀÚµéÀÌ °Þ´Â °¡Àå Å« ¹®Á¦´Â »ç¿ëÇÏ´Â ÇÁ·Î±×·¥ÀÇ ¸Þ½ÃÁö°¡ ³¸¼± ¾ð¾î·Î Ãâ·ÂµÈ´Ù´Â Á¡ÀÌ´Ù. ÀÌ Á¡À» ÇØ°áÇÏ´Â °¡Àå °£´ÜÇÑ ¹æ¹ýÀº ¼Ò½º ÄÚµå »óÀÇ ¸ðµç ¸Þ½ÃÁö¸¦ ¼öÀÛ¾÷À» ÅëÇØ °íÀ¯¾î·Î ¹Ù²Ù´Â °ÍÀ¸·Î, Áö±Ý±îÁö ´ëºÎºÐÀÇ ¼ÒÇÁÆ®¿þ¾î°¡ ÀÌ ¹æ¹ýÀ» ÅÃÇØ ¿Ô´Ù. ±×·¯³ª ¿øº» ÇÁ·Î±×·¥ÀÌ °»½ÅµÉ ¶§¸¶´Ù ¸¹Àº ¾çÀÇ ¹ø¿ª ¸Þ½ÃÁö¸¦ ´Ù½Ã ÀÔ·ÂÇÏ´Â µî ¼Ò¸ðÀûÀÎ ³ëµ¿ÀÌ ¸¹ÀÌ ÇÊ¿äÇϰí, ±×·³À¸·Î½á ¿ø¾îÆÇ°ú °íÀ¯¾îÆÇÀÇ ¹ßÇ¥ °£°ÝÀÌ ³Ê¹« ±æ¾îÁø´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù.
¿À´Ã³¯ À¯´Ð½º ȣȯ ½Ã½ºÅÛ »ó¿¡¼´Â ¼¼ °¡Áö ¹æ¹ýÀÌ ³Î¸® ¾Ë·ÁÁ® ÀÖ´Ù:
X À©µµ¿ì ½Ã½ºÅÛ¿¡¼ ¾²´Â ¹æ¹ýÀ¸·Î, ¹öưÀ̳ª ¸Þ´º¹Ù °°Àº À§Á¬°ú ¿¬°üµÈ ¸Þ½ÃÁö¸¦ ¾ÖÇø®ÄÉÀÌ¼Ç µðÆúÆ® ÆÄÀÏ¿¡ ´ã¾Æ ³õ°í ÆíÁýÇÒ ¼ö ÀÖ°Ô ÇÏ´Â °ÍÀÌ´Ù. ¼Ò½º ÆÄÀÏÀÇ ´Ü¼ø º¯°æº¸´Ù´Â Á¶±Ý ¹ßÀüµÈ ÇüÅÂÁö¸¸, X À©µµ¿ì¿¡¼¸¸ ¾µ ¼ö ÀÖ´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù.
ÀÌ ¹æ¹ýÀº X/Open Portability Guide 3±Ç¿¡ Á¤ÀǵǾî ÀÖÀ¸¸ç, ¿À´Ã³¯ °ÅÀÇ ¸ðµç À¯´Ð½º ½Ã½ºÅÛ »ó¿¡ ±¸ÇöµÇ¾î ÀÖ´Ù. ÇÏÁö¸¸ ¸î¸î À¯´Ð½º ÆÇ¸Å¾÷üµéÀÌ ±×µé¸¸ÀÇ µ¶ÀÚÀûÀÎ ¹öÀüÀ» °í¼öÇÔ¿¡ µû¶ó Ç¥ÁØÈ°¡ Áö¿¬µÇ°í ÀÖ´Ù. ÀÌ ¹æ¹ýÀÇ ±âº» °³³äÀº ¹ø¿ª °¡´ÉÇÑ ¸Þ½ÃÁö¸¶´Ù ¹øÈ£¸¦ ºÎ¿©ÇÏ´Â °ÍÀÌ´Ù. ¹ø¿ªÀÚ°¡ µ¥ÀÌÅÍ º£À̽º¿¡ ÀúÀåµÈ ¹ø¿ª¹®¿¡ ¹øÈ£¸¦ ¸Å°Ü ³õÀ¸¸é, ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ ¶§ catgets ÇÔ¼ö¸¦ ÅëÇØ ÀûÇÕÇÑ ¸Þ½ÃÁö°¡ ¼±ÅõȴÙ.
catgets ÀÎÅÍÆäÀ̽º´Â »ç¿ëÇϰíÀÚ ÇÏ´Â ¸Þ½ÃÁö ¸ñ·Ï ÆÄÀÏÀ» ¿©´Â µ¥ ¾²ÀÌ´Â catopen, ¸Þ½ÃÁö Ç¥¸¦ ÀÐ¾î ¿À´Â µ¥ ¾²ÀÌ´Â catgets, ¸ðµç ÀÏÀ» ¸¶Ä£ µÚ ¿¾ú´ø ÆÄÀÏÀ» ´Ý´Â catclose µî, ÆÄÀÏ ¾×¼¼½º¿¡ ¾²ÀÌ´Â ¼¼ °³ÀÇ ÇÔ¼ö·Î ÀÌ·ç¾îÁ® ÀÖ´Ù.. ÀÌ ÇÔ¼öµéÀÇ ¿øÇü(prototype)Àº <nl_types.h> ÆÄÀÏ¿¡ µé¾î ÀÖ´Ù.
catopen ÇÔ¼ö´Â ¾Æ·¡Ã³·³ ¾²ÀδÙ:
nl_catd catd = catopen("catalog_name", 0);
ù¹øÂ° Àμö´Â ¸ñ·ÏÀÇ À̸§À» ³ªÅ¸³»´Âµ¥, À̰ÍÀº ´ë°³ ÇÁ·Î±×·¥À̳ª ÆÐŰÁöÀÇ À̸§À» ÁöĪÇÑ´Ù. µÎ¹øÂ° Àμö´Â Ç¥Áؾȿ¡ Á¤ÀǵǾî ÀÖÁö ¾ÊÀ¸¹Ç·Î º¸Åë 0À» ¾´´Ù. ¸®ÅÏ °ªÀº ¸Þ½ÃÁö ¸ñ·Ï¿¡ ´ëÇÑ ±â¼úÀÚ (descriptor)À̸ç, open ÇÔ¼ö¿¡¼ ¸®ÅÏÇÏ´Â ÆÄÀÏ ±â¼úÀÚ¿Í ¾²ÀÓ»õ°¡ °°´Ù.
½ÇÁ¦·Î ¹ø¿ª¹®À» ¼±ÅÃÇÒ ¶§¿¡´Â catgets¸¦ »ç¿ëÇÑ´Ù.
char *translation = catgets(catd, set_no, msg_id, "original string");
ù¹øÂ° Àμö´Â ÆÄÀÏ ±â¼úÀÚ, µÎ¹øÂ° Àμö´Â msg_id¿¡ ÀÇÇØ ÁöÁ¤µÇ´Â ¸Þ½ÃÁö°¡ ¼ÓÇØ ÀÖ´Â ÁýÇÕÀ» ³ªÅ¸³½´Ù. ³×¹øÂ° Àμö´Â ¹ø¿ª¹®À» ã´Â µ¥ ½ÇÆÐÇßÀ» °æ¿ì ³»Á¤°ªÀ¸·Î ¾²ÀÌ´Â ¹®ÀÚ¿ÀÌ´Ù.
ÀÛ¾÷À» Á¾·áÇÒ ¶§¿¡´Â catcloseÀ» »ç¿ëÇÑ´Ù.
catclose(catd);
catgets´Â »ó´çÈ÷ °£´ÜÇϰí ÇÕ¸®ÀûÀÎ ¹æ¹ý°°Áö¸¸, ½ÇÁ¦·Î °¢ ¸Þ½ÃÁö¿¡ °íÀ¯ÇÑ ¹øÈ£ (msg_id)¸¦ ºÎ¿©Çϱâ¶õ ¿©°£ ¾î·Á¿î ÀÏÀÌ ¾Æ´Ï´Ù. ¹øÈ£¸¦ ±âÈ£·Î ġȯÇÑ´ÙµçÁö ÇÏ´Â ½Ãµµ°¡ ÀÖ¾úÀ¸³ª ±Ùº»ÀûÀÎ ÇØ°áÃ¥Àº µÇÁö ¸øÇß´Ù. µû¶ó¼ ÇöÀç ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏ´Â ÇÁ·Î±×·¥Àº ±×¸® ¸¹Áö ¾Ê´Ù.
ÀÌ ¹æ½ÄÀº ¿ø·¡ À¯´ÏÆ÷·³(Uniforum)¿¡¼ Á¦¾ÈµÇ¾úÀ¸¸ç, ±× ÈÄ ÁÖ¿ä À¯´Ð½º ÆÇ¸Å¾÷ü ÁßÀÇ ÇϳªÀÎ ½ã ¸¶ÀÌÅ©·Î½Ã½ºÅÛ (Sun Microsystems, Inc.)ÀÌ À̸¦ äÅÃÇÏ°í ±¸ÇöÇß´Ù. ±×·¯³ª ¾ÆÁ÷±îÁö °ø½ÄÀûÀΠǥÁØÀº ¹ßÇ¥µÇÁö ¾ÊÀº »óÅÂÀÌ´Ù.ÀÌ ¹æ¹ýÀÇ °¡Àå Å« Ư¡Àº ÀϹÝÀûÀÎ ÆÄÀÏ Ã³¸® °úÁ¤ (¿°í-¾²°í-´Ý´Â)À» ¸í½ÃÀûÀ¸·Î °ÅÄ¡Áö ¾ÊÀ¸¸ç, ¸Þ½ÃÁö ÀÚü¸¦ ID·Î ÇÑ´Ù´Â µ¥ ÀÖ´Ù.
ÀÌ ¹æ¹ýÀ» ¾²·Á¸é ¿ì¼± textdomain ÇÔ¼ö¸¦ ½á¼ ¿µ¿ª¸íÀ» ÃʱâÈÇÑ´Ù.
char *textdomain(const char *domain_name);
domain_nameÀº ´ë°³ ÇöÀç ÇÁ·Î±×·¥ÀÌ ¼ÓÇØ ÀÖ´Â ÆÐŰÁö¸¦ °¡¸®Å²´Ù. ¿©±â¿¡ NULLÀ» ÁöÁ¤ÇÏ¿© ÇÔ¼ö¸¦ È£ÃâÇϸé ÇöÀç °ªÀ» µ¹·ÁÁØ´Ù. ¸Þ½ÃÁö ¸ñ·ÏÀÌ ¼ÓÇØ ÀÖ´Â µð·ºÅ丮¸¦ ÁöÁ¤ÇØ ÁÙ Çʿ䰡 ÀÖÀ» ¶© bindtextdomainÀ» »ç¿ëÇÑ´Ù.
char *bindtextdomain(const char *domain_name, const char *dir_name);
ÇÑÆí °¡Àå ±âº»ÀûÀÎ ÇÔ¼öÀÇ ¿øÇüÀº ´ÙÀ½°ú °°´Ù:
const char *gettext(const char *msgid);
gettext ÇÔ¼ö´Â msgid¿Í ´ëÀÀµÇ´Â ¹ø¿ª¹®À» ¸ñ·Ï¿¡¼ Àоîµé¿© µ¹·Á ÁØ´Ù. ´ëÀÀÇÏ´Â ¹®ÀåÀ» ãÁö ¸øÇßÀ» ¶§¿¡´Â msgid¸¦ µ¹·Á ÁØ´Ù. ÀÌ¿Í °°ÀÌ gettext´Â °£´ÜÇÑ ÇÊÅÍ·Î µ¿ÀÛÇϱ⠶§¹®¿¡, ¹ø¿ªÇÒ ¹®ÀÚ¿À» µÑ·¯ ½Î´Â °Í¸¸À¸·Î ±¹Á¦ÈµÈ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÒ ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù.
±¹Á¦ÈµÈ ÇÁ·Î±×·¥ÀÌ ÀÏ´Ü ½ÇÇàµÇ¸é, ¾Æ·¡ÀÇ ¸Þ½ÃÁö ¸ñ·Ï ÆÄÀÏÀ» ÀÐ¾î µé¿© »ç¿ëÇÏ°Ô µÈ´Ù:
msg-path/locale/LC_MESSAGES/messasges.mo
msg-path´Â ÄÄÆÄÀÏ ½Ã °áÁ¤µÇ´Â °ªÀ¸·Î, º¸Åë /usr/local/share³ª /usr/share¸¦ °¡¸®Å²´Ù. localeÀº ÇöÀç ¼±ÅõǾî ÀÖ´Â ·ÎÄÉÀÏÀ» °¡¸®Å°¸ç, º¯¼ö LANGÀÇ °ªÀ» °®´Â´Ù.
.po ÆÄÀÏÀº ¼ö¸¹Àº ¿£Æ®¸®¸¦ ´ã°í ÀÖÀ¸¸ç, °¢ ¿£Æ®¸®´Â ¿ø·¡ÀÇ ¹ø¿ªµÇÁö ¾ÊÀº ¸Þ½ÃÁö¿Í ±×¿¡ ´ëÀÀÇÏ´Â ¹ø¿ª¹®À¸·Î ÀÌ·ç¾îÁ® ÀÖ´Ù. ¿£Æ®¸®ÀÇ ±¸Á¶´Â ´ÙÀ½°ú °°´Ù.
white-space
# translator-comments
#. automatic-comments
#: reference...
msgid untranslated-string
msgstr translated-string
°ø¹é ¹®ÀÚ¿Í ÁÖ¼®Àº ¹«½ÃµÈ´Ù. ÁÖ¼®¿¡´Â µÎ °¡Áö Á¾·ù°¡ Àִµ¥, Çϳª´Â ÁÖ¼® ±âÈ£ ¹Ù·Î µÚ¿¡ ¹®ÀÚ°¡ ¿À´Â °æ¿ìÀ̰í, ´Ù¸¥ Çϳª´Â ±×·¸Áö ¾ÊÀº °æ¿ìÀÌ´Ù. ÀüÀÚ´Â ÇÁ·Î±×·¥¿¡¼ ºÎ°¡ÇÑ °ÍÀ¸·Î, ¸Þ½ÃÁö ¸ñ·ÏÀ» °»½ÅÇÒ ¶§ º¸Á¸µÇÁö ¾Ê´Â´Ù. ¹Ý¸é ÈÄÀÚ´Â ¹ø¿ªÀÚ°¡ ºÎ°¡ÇÑ °ÍÀ¸·Î, º°µµÀÇ ¿É¼ÇÀÌ ÁÖ¾îÁöÁö ¾Ê´Â ÇÑ º¸Á¸µÈ´Ù. ¹®ÀÚ¿Àº C ¾ð¾îÀÇ ¹®¹ýÀ» Áö¿øÇÑ´Ù. µû¶ó¼ ´ÙÀ½°ú °°Àº ¹®ÀÚ¿ÀÌ °¡´ÉÇÏ´Ù.
msgid "%s: %d files found\n"
msgstr "%s: %d °³ÀÇ ÆÄÀÏÀ» ã¾Ò½À´Ï´Ù\n"
msgid ""
"Here is an example of how one might continue a very long string\n"
"for the common case the string represents multi-line output.\n"
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"));
...
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°¡ ¸¶Å©¸¦ ÀνÄÇÏ°í ¸Þ½ÃÁö¸¦ ÃßÃâÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§ÇÑ °ÍÀÌ´Ù.
ºñ¿µ¾î±Ç ¾ËÆÄºª ¹®ÀÚ¸¦ Ç¥ÇöÇϱâ À§ÇÑ 8ºñÆ® È®Àå ASCII ÄÚµåÀÌ´Ù. ´ëºÎºÐÀÇ À¯·´ ¾ð¾î´Â ÀÌ ¹®ÀÚ ÁýÇÕÀ» »ç¿ëÇϰí ÀÖ´Ù.
EUC´Â À¯´Ð½º¿¡¼ Çѱ¹¾î, Áß±¹¾î, ÀϺ»¾î µîÀÇ ¾Æ½Ã¾Æ±Ç ¹®ÀÚ¸¦ Áö¿øÇϱâ À§ÇÑ ¹æ¹ýÀÌ´Ù.À̰ÍÀº ISO-2022 ¹æ½Ä¿¡ ¸î°¡Áö Á¦¾àÀ» °¡ÇÑ °ÍÀ¸·Î, ÇÑ ·ÎÄÉÀÏÀÌ 4 °³ÀÇ ¹®ÀÚ ÁýÇÕÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. °¢ ¹®ÀÚ ÁýÇÕÀº ¹Ì¸® Á¤ÇØÁø 94, 94*94, 94*94*94, ... °³ÀÇ Á¶ÇÕ ÇüŸ¦ °¡Áú ¼ö ÀÖ´Ù. Çѱ¹¾îÀÇ °æ¿ì Á¶ÇÕ °¡´ÉÇÑ ±ÛÀÚÀÇ °³¼ö°¡ 11172ÀÚÀ̹ǷΠ2 ¹ÙÀÌÆ® (94*94=8836)·Î ¸ðµç ¹®ÀÚ¸¦ ¼ö¿ëÇÒ ¼ö ¾ø´Ù. µû¶ó¼ ÀÌ·± ¹æ½ÄÀ» ¾²´Â ÇöÀçÀÇ À¯´Ð½º ½Ã½ºÅÛ¿¡¼´Â 2¹ÙÀÌÆ® Á¶ÇÕÇü ÇѱÛÀ» »ç¿ëÇϱâ Èûµé´Ù. Àڸ𸶴٠2¹ÙÀÌÆ®¾¿ ºÎ¿©ÇÏ´Â ¹æ¹ý(ÃÖ´ë 6¹ÙÀÌÆ®)µµ ÀÖÀ¸³ª ÀϹÝÀûÀ¸·Î ¾²±â¿£ ¸Þ¸ð¸® ³¶ºñ°¡ ³Ê¹« Å©´Ù. ¶Ç ÇÑ °¡Áö ÀÌ ¹æ½ÄÀÇ ´ÜÁ¡Àº ÇÑÁßÀÏ ¼¼ ³ª¶óÀÇ Äڵ尡 ÀüÇô ȣȯ¼ºÀÌ ¾ø´Ù´Â Á¡ÀÌ´Ù. °°Àº ÇÑÀÚ ¹®È±ÇÀÓ¿¡µµ ºÒ±¸Çϰí ÄÚµåÇ¥ »ó¿¡¼ ÇÑÀÚÀÇ À§Ä¡°¡ ¸ðµÎ ´Ù¸£´Ù.
ÃÖ±Ù¿¡ °ø½Ä ¹ßÇ¥µÈ À¯´ÏÄÚµå 2.0Àº 2 ¹ÙÀÌÆ®ÀÇ ÄÚµå ¾È¿¡ Àü¼¼°è ÁÖ¿ä ¾ð¾î¸¦ ¹è¿ÇÑ ¹æ¹ýÀÌ´Ù. Çѱ¹¾îÀÇ °æ¿ì 11172ÀÚ°¡ ¸ðµÎ äÅõǾúÀ¸¸ç, Á¶ÇÕÇü Àڸ𰡠ÇÔ²² Á¦°øµÇ¾î °í¾îµµ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ÇÑÀÚÀÇ °æ¿ì ºÎ¼ö ¼ø¼¿¡ µû¶ó ¹èÄ¡µÇ¾úÀ¸¸ç, °¢ ³ª¶óÀÇ Äڵ尡 °ãÄ¡´Â ÀÏÀº ´õ ÀÌ»ó ¹ß»ýÇÏÁö ¾Ê´Â´Ù. ÀÌ ¹æ½ÄÀº Àü¼¼°èÀÇ ÁÖ¿ä ¾ð¾î¸¦ Ãæµ¹¾øÀÌ ÇÔ²² Ç¥ÇöÇÒ ¼ö ÀÖ´Â À¯ÀÏÇÑ ÄÚµåÀÌÁö¸¸ ¾ÆÁ÷ ³Î¸® ¾²ÀÌÁö´Â ¾Ê°í ÀÖ´Ù. ÇöÀç ¸®´ª½º¸¦ ºñ·ÔÇÑ ¸î¸î À¯´Ð½º¿¡¼ Áö¿øÇϰí ÀÖ´Ù.