Go to the first, previous, next, last section, table of contents.


ÇÁ·Î±×·¡¸ÓÀÇ °üÁ¡

GNU gettext¿¡ µé¾î ÀÖ´Â ÇöÀç¿Í °°Àº ¸Þ¼¼Áö ¸ñ·ÏÀÌ ±¸ÇöµÈ ÇÑ °¡Áö ¸ñÀûÀº, ¼³Ä¡ÇÏ´Â »ç¶÷ÀÌ ½Ã½ºÅÛ ¸Þ¼¼Áö ¸ñ·ÏÀ» »ç¿ëÇÏ°í ½ÍÀ» ¶§ ±×·¸°Ô Çϱâ À§ÇÔÀ̾ú´Ù. ±×·¯¹Ç·Î ¿ì¸®´Â ¸ÕÀú ¿ì¸®°¡ ÀÌ¹Ì ¾Ë°í ÀÖ´Â ¸î °¡Áö ¹æ¹ýµéÀ» »ìÆìºÁ¾ß ÇÒ °ÍÀÌ´Ù. POSIX À§¿øȸÀÇ »ç¶÷µéÀº ¿ì¸®°¡ ¾Æ·¡¿¡¼­ ¼³¸íÇÒ °ÅÀÇ °ø½ÄÀûÀΠǥÁØÀÇ ÇÑ °¡Áö¿¡ ´ëÇØ ÀÇ°ßÀ» ÀÏÄ¡ÇÏÁö ¸øÇß´Ù. »ç½Ç ±× »ç¶÷µéÀº ¾î¶² °Í¿¡ ´ëÇؼ­µµ ÀÇ°ßÀÏ ÀÏÄ¡ÇÒ ¼ö ¾ø¾ú°í, ±× ¾î´À °Íµµ ÀÎÅÍÆäÀ̽ºÀÇ »ç¿ë¿¹¸¦ Æ÷ÇÔÇÏ´Â °ÍÁ¶Â÷ °áÁ¤ÇÏÁö ¸øÇß´Ù. ÁÖ¿ä À¯´Ð½º °ø±ÞÀÚµéÀº °¡Àå Áß¿äÇÑ µÎ°¡Áö ½ºÆåÁß ¾î´À°ÍÀ» »ç¿ëÇÏ´À³Ä¿¡ µû¶ó µÎ°³·Î °¥·È´Ù: ÇÑ °¡Áö´Â X/OpenÀÇ catgetsÀÌ°í ¶Ç Çϳª´Â UniforumsÀÇ gettext ÀÎÅÍÆäÀ̽ºÀÌ´Ù. ¿ì¸®´Â µÎ°¡Áö ¸ðµÎ¸¦ ¼³¸íÇÏ°í, ³ªÁß¿¡ ÀÌ µô·¹¸¶¿¡ ´ëÇÑ ¿ì¸®ÀÇ ¹æ¹ýÀ» ¼³¸íÇÏ°Ú´Ù.

catgets¿¡ ´ëÇÏ¿©

catgets´Â X/Open Portability Guide, Volume 3, XSI Supplementary Definitions, Chapter 5¿¡ Á¤ÀǵǾî ÀÖ´Ù. ÇÏÁö¸¸ ¸î¸î À¯´Ð½º °ø±ÞÀÚµéÀº ÀÌ Ç¥ÁØÀ» ±×´ë·Î µû¸¥´Ù¸é ³Ê¹« ´À¸± °ÍÀ̶ó°í »ý°¢Çؼ­ ÀÌ Ç¥ÁØÀÇ ÃÖÃÊ ¹öÀü¿¡ ´ëÇØ À¯´Ð½º °ø±ÞÀÚµé ÀڽŵéÀÌ Á÷Á¢ ±¸ÇöÇß´Ù. ¹°·Ð ÀÌ Çö»óÀº Ç÷§Æû µ¶¸³ÀûÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¶§ÀÇ ¹®Á¦·Î À̾îÁ³´Ù: catgets¸¦ »ç¿ëÇÏ´õ¶óµµ À¯ÀÏÇÑ ÀÎÅÍÆäÀ̽º¸¦ º¸ÀåÇÏÁö ¸øÇÑ´Ù.

ÇÑ °¡Áö ¿©±â¿¡ ´ëÇÑ °³ÀÎÀûÀÎ ÀÇ°ßÀ¸·Î, ¿ÀÁ÷ ¸î¸î À§¿øȸ ¸â¹ö¸¸ÀÌ ÀÌ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÒ ¼ö ÀÖ¾ú´Ù. ±×µéÀº Á¤¸»·Î ÀÌ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇؼ­ ÇÁ·Î±×·¥ÇÏ·Á°í ÇÏÁö ¾Ê¾Ò´Ù. catgets´Â ºü¸£°í, ¸Þ¸ð¸®¸¦ Àý¾àÇϵµ·Ï ±¸ÇöµÇ¾ú°í, »ç¿ëÀÚ´Â catgets¿¡ ¸¸Á·ÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ÇÁ·Î±×·¡¸ÓµéÀº catgets¸¦ Áõ¿ÀÇÑ´Ù (ÃÖ¼ÒÇÑ ³ª¿Í ¸î¸î ´Ù¸¥ »ç¶÷µéÀº ±×·¸´Ù...)

ÇÏÁö¸¸ ÇÑ °¡Áö Àؾ´Â ¾È µÈ´Ù: ±× »ç¶÷µéÀÌ ÃÖ¼ÒÇÑ °ü°èµÇ¾î ÀÖ´Â Unix(tm)¿¡ ´ëÇÑ ¸ðµç ±Ç¸®°¡ (catgets ½ºÆåÀ» ³½ °÷À̱⵵ ÇÑ) X/OpenÀ¸·Î ³Ñ¾î°¡´Â µ¥ µû¸¥ ¹®Á¦ÀÌ´Ù. ÀÌ·¸°Ô µÇ¸é ÀÌ ÀÎÅÍÆäÀ̽º°¡ ¹Ì·¡ÀÇ À¯´Ð½º Ç¥ÁØÀÌ µÉ ¼öµµ ÀÖ°í (¿¹¸¦ µé¾î Spec1170) ¸ðµç À¯´Ð½º ±¸Çö¹°ÀÇ (±¸Çö¹°, ÀÌ ±¸Çö¹°Àº Unix¶ó´Â À̸§À» ¾º¿ìµµ·Ï Çã¶ôµÈ OSµéÀÌ´Ù) ÀϺΰ¡ µÉ ¼ö ÀÖ´Ù.

ÀÎÅÍÆäÀ̽º

catgetsÀÇ ÀÎÅÍÆäÀ̽º´Â ÆÄÀÏ Á¢±Ù°ú °ü·ÃµÈ 3°³ÀÇ ÇÔ¼ö·Î ±¸¼ºµÇ¾î ÀÖ´Ù: »ç¿ëÇÒ ¸ñ·ÏÀ» ¿©´Â catopen, ¸Þ¼¼Áö Å×À̺íÀ» Á¢±ÙÇÏ´Â catgets, ±×¸®°í ÀÛ¾÷ÀÌ ³¡³µÀ» °æ¿ì¿¡ ¾²´Â catcloseÀÌ´Ù. ÀÌ ÇÔ¼öµé¿¡ ´ëÇÑ ÇÁ·ÎÅäŸÀÔ°ú ÇÊ¿äÇÑ Á¤Àǹ®µéÀº <nl_types.h> Çì´õ ÆÄÀÏ¿¡ ÀÖ´Ù.

catopenÀº ´ÙÀ½°ú °°ÀÌ ¾²ÀδÙ:

nl_catd catd = catopen ("catalog_name", 0);

ÀÌ ÇÔ¼ö´Â ¸ñ·ÏÀÇ À̸§À» ÀÎÀÚ·Î ¹Þ´Â´Ù. ÀÌ À̸§Àº º¸Åë ÇÁ·Î±×·¥À̳ª ÆÐÅ°ÁöÀÇ À̸§ÀÌ´Ù. µÎ¹ø° ÀÎÀÚ´Â catgets Ç¥ÁØ¿¡¼­ ÁöÁ¤µÇ¾î ÀÖÁö ¾Ê´Ù. ³ª´Â ÀÌ µÎ¹ø° ÀÎÀÚ°¡ ¿©·¯ °¡Áö ½Ã½ºÅÛµé »çÀÌ¿¡ µ¿ÀÏÇÏ°Ô ±¸ÇöµÇ¾î ÀÖ´ÂÁöµµ ¾ËÁö ¸øÇÑ´Ù. ±×·¯¹Ç·Î º¸Åë ÀÌ °ªÀ¸·Î 0À» »ç¿ëÇ϶ó°í Á¶¾ðÇÑ´Ù. ¸®ÅÏ°ªÀº ¸Þ¼¼Áö ¸ñ·ÏÀÇ ÇÚµé·Î, openÀÌ ¸®ÅÏÇÏ´Â ÆÄÀÏÀÇ ÇÚµé°ú µ¿ÀÏÇÏ´Ù.

ÀÌ ÇÚµéÀº ¹°·Ð ´ÙÀ½°ú °°ÀÌ catgets ÇÔ¼ö¿¡¼­ »ç¿ëµÈ´Ù:

char *translation = catgets (catd, set_no, msg_id, "original string");

ù¹ø° Àμö´Â ¸ñ·Ï µð½ºÅ©¸³ÅÍÀÌ´Ù. µÎ¹ø° Àμö´Â ÀÌ ¸ñ·Ï¿¡ µé¾î ÀÖ´Â ¸Þ¼¼ÁöÀÇ ÁýÇÕÀ» ÁöÁ¤Çϴµ¥, ÀÌ ¸ñ·Ï ¾È¿¡¼­ msg_id¿¡ ¼³¸íµÈ ¸Þ¼¼Áö¸¦ ¾òÀ» ¼ö ÀÖ´Ù. Áï catgets´Â ´ÙÀ½°ú °°ÀÌ ¼¼ ´Ü°è¿¡ °ÉÃÄ ¹ø¿ª¹®À» ã´Â´Ù:

¸ñ·Ï À̸§ => ¸Þ¼¼Áö ÁýÇÕ ¹øÈ£ => ¸Þ¼¼Áö °íÀ¯¹øÈ£ => ¹ø¿ª¹®

³× ¹ø° ÀÎÀÚ´Â ¹ø¿ª¹®À» ã´Âµ¥ ¾²ÀÌÁö ¾Ê´Â´Ù. ³×¹ø° ÀÎÀÚ´Â À§ÀÇ ´Ü°èÁß¿¡ Çϳª¶óµµ ½ÇÆÐÇßÀ» ¶§ ±âº»°ªÀ¸·Î »ç¿ëµÈ´Ù. ¹Ýµå½Ã ±â¾ïÇØ¾ß ÇÒ Áß¿äÇÑ Á¡Àº catgetsÀÇ ¸®ÅÏ Å¸ÀÔÀÌ char *ÀÌÁö¸¸ ±× ¸®ÅÏµÈ ¹®ÀÚ¿­À» ¹Ù²Ù¾î¼­´Â ¾È µÈ´Ù. ÀÌ Å¸ÀÔÀÌ const char *À̸é ÁÁ°ÚÁö¸¸, ºÒÇàÈ÷µµ catgets Ç¥ÁØÀº 1988³â¿¡ ANSI C Ç¥Áغ¸´Ù 1³â Àü¿¡ ¹ßÇ¥µÇ¾ú´Ù.

ÀÌ 3°¡Áö ÇÔ¼öÁß¿¡ ¸¶Áö¸· ÇÔ¼ö´Â ´©±¸³ª ¿¹»óÇÒ ¼ö ÀÖ´Â ´ë·Î µ¿ÀÛÇÑ´Ù:

catclose (catd);

ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÑ µÚ¿¡´Â ÀÌ µð½ºÅ©¸³Å͸¦ »ç¿ëÇÑ ¾î¶² catgetsµµ »ç¿ëÇÒ ¼ö ¾ø´Ù.

catgets ÀÎÅÍÆäÀ̽ºÀÇ ¹®Á¦?!

ÀÌ µð½ºÅ©¸³ÅÍ´Â Á¤¸»·Î ½¬¿öº¸Àδ٠-- ÀÌ µð½ºÅ©¸³ÅÍ°¡ ¿ì¸®°¡ ¹®Á¦°¡ ÀÖ´Ù°í ¸»ÇÏ·Á´Â ºÎºÐÀÌ´Ù. »ç½Ç ÀÌ ÀÎÅÍÆäÀ̽º´Â ¾Æ¹«·± ¹®Á¦¾øÀÌ »ç¿ëµÉ ¼öµµ ÀÖÁö¸¸, ¸Þ¼¼Áö ¸ñ·ÏÀ» ¸¸µå´Â ÀÛ¾÷ÀÌÀÌ °íÅ뽺·´´Ù. ±× ÀÌÀ¯´Â catgetsÀÇ ¼¼¹ø° ÀÎÀÚ¿¡ ÀÖ´Ù: À¯ÀÏÇÑ ¸Þ¼¼Áö ID°¡ ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ °ªÀº ¾î¶² ÇÑ °¡Áö ÁýÇÕ ³»¿¡¼­ ¸ðµç ¸Þ¼¼Áöµé¿¡ ´ëÇØ À¯ÀÏÇÑ ¼ýÀÚ °ªÀ» °¡Á®¾ß ÇÑ´Ù. ¾Æ¸¶ ¼Ò½º Äڵ带 ¹Ù²Ù¸é¼­ ÀÌ ¸®½ºÆ®¸¦ À¯ÁöÇØ¾ß ÇÒ ¶§ ¹®Á¦Á¡À» ¿¹»óÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¿©±âÀú±â¿¡¼­ »õ·Î¿î ¸Þ¼¼Áö¸¦ Ãß°¡ÇÏ°í, Áö¿ì°í ÇÒ °æ¿ì¸¦ »ý°¢ÇØ º¸ÀÚ. ¹°·Ð ÀÌ·± È¥¶õÀ» ¾ø¾Ö´Â ¸¹Àº µµ±¸µéÀÌ °³¹ßµÇ¾úÁö¸¸, ¾î¶² µµ±¸´Â Ãß°¡ÇÏ´Â ºÎºÐ¿¡¼­ Á¦´ë·Î µ¿ÀÛÇÏÁö ¾Ê°í ¶Ç ¾î¶² µµ±¸´Â Áö¿ì´Â ºÎºÐ¿¡¼­ ¹®Á¦¸¦ ÀÏÀ¸Å²´Ù. ¿ì¸®´Â ¶Ç ´Ù¸¥ Á¢±Ù¹æ¹ýÀÌ ¹®Á¦°¡ ¾ø´Ù°í ¸»ÇÏ·Á´Â °ÍÀº ¾Æ´ÏÁö¸¸, Àû¾îµµ catgetsº¸´Ù´Â ÈξÀ ´õ »ç¿ëÇϱ⠽±´Ù.

gettext¿¡ ´ëÇÏ¿©

gettext ÀÎÅÍÆäÀ̽ºÀÇ Á¤ÀÇ´Â ÇÑ À¯´ÏÆ÷·³ Á¦¾È¼­¿¡¼­ ³ª¿Í¼­ ÃÖ¼ÒÇÑ ÇÑ°³ÀÇ ÁÖ¿ä À¯´Ð½º °ø±ÞÀÚ(½ã)°¡ ÃÖ±ÙÀÇ °³¹ßÇ°µé¿¡¼­ »ç¿ëÇÏ°í ÀÖ´Ù. ±×·³¿¡µµ ºÒ±¸ÇÏ°í ¾î¶² °ø½ÄÀûÀΠǥÁØÀ¸·Î ÁöÁ¤µÇÁö´Â ¾Ê¾Ò´Ù.

ÀÌ ¹æ¹ýÀÇ Áß¿äÇÑ Á¡Àº Ç¥ÁØÀûÀÎ ÆÄÀÏ Ã³¸® ¹æ¹ý(¿­±â-»ç¿ëÇϱâ-´Ý±â)À» µû¸£Áö ¾Ê°í, ÇÁ·Î±×·¡¸Ó°¡ ±×·± ¸¹Àº ÀÛ¾÷, ƯÈ÷ À¯ÀÏÇÑ Å° ó¸®¿Í °°Àº ÀÛ¾÷À» ÇÏ´Â ºÎ´ãÀ» Áö¿ìÁö ¾Ê´Â´Ù. ¹°·Ð À¯ÀÏÇÑ Å°´Â ÇÊ¿äÇÏÁö¸¸, ÀÌ Å°´Â ±× ¸Þ¼¼Áö ÀÚüÀÌ´Ù(±× ¸Þ¼¼ÁöÀÇ ±æÀÌ°¡ ±æ´ø ª´ø °£¿¡). ÀÌ µÎ°¡Áö ¹æ¹ý¿¡ ´ëÇÑ º¸´Ù ÀÚ¼¼ÇÑ ºñ±³´Â See section µÎ°¡Áö ÀÎÅÍÆäÀ̽ºÀÇ ºñ±³.

´ÙÀ½¿¡¼­ ÀÌ ÀÎÅÍÆäÀ̽º¿¡ ´ëÇÑ º¸´Ù ÀÚ¼¼È÷ ¼³¸íÇÑ´Ù. ÀÌ ÀÎÅÍÆäÀ̽º´Â GNU gettext ¶óÀ̺귯¸®°¡ ¼±ÅÃÇÑ ÀÎÅÍÆäÀ̽ºÀ̹ǷΠÀÚ¼¼È÷ ¼³¸íÇØ ³õ¾Ò´Ù. ÀÌ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ°íÀÚ ÇÏ´Â ÇÁ·Î±×·¡¸Ó´Â ¾Æ·¡ ¼³¸í¿¡ °ü½ÉÀ» °¡Áú °ÍÀÌ´Ù.

ÀÎÅÍÆäÀ̽º

ÀÎÅÍÆäÀ̽º¿¡ ÇÊ¿äÇÑ ÃÖ¼ÒÇÑÀÇ ±â´ÉÀº (°¡) ÀÌ ¹®ÀÚ¿­ÀÌ ¾îµð¼­ ³ª¿Ô´ÂÁö¸¦ µµ¸ÞÀÎÀ» ¼±Åà (¸ðµç ÇÁ·Î±×·¥¿¡ ÇÑ°³ÀÇ µµ¸ÞÀÎÀ» ¾²´Â °Ç, ¸¸µé°í °ü¸®ÇÏ´Â µ¥ ¾î·Æ±â ¶§¹®¿¡ ÁÁÁö ¾Ê´Ù. ¾Æ¸¶µµ ÀÌ·¸°Ô ¸¸µé°í °ü¸®Çϱâ´Â ºÒ°¡´ÉÇÒ °ÍÀÌ´Ù), ±×¸®°í (³ª) ¼±ÅÃµÈ µµ¸ÞÀÎ ³»ÀÇ ¹®ÀÚ¿­À» Àд °ÍÀÌ´Ù.

¿©±â¿¡¼­´Â gettext ÀÎÅÍÆäÀ̽ºÀÇ ±âÃʸ¦ ¼³¸íÇÑ´Ù. gettext¿¡´Â »ç¿ëÇÒ µµ¸ÞÀÎÀ» Á¦ÇÑÇÏ´Â ÇÑ°³ÀÇ Àü¿ª µµ¸ÞÀÎÀÌ ÀÖ´Ù. ¹°·Ð ÀÌ µµ¸ÞÀÎÀº µû·Î ¼±ÅÃÇÒ ¼ö ÀÖ´Ù.

char *textdomain (const char *domain_name);

textdomainÀ¸·Î LC_MESSAGES ¹üÁÖÀÇ ÇöÀç Àü¿ª µµ¸ÞÀÎÀÇ »óŸ¦ ¹Ù²Ù°Å³ª »óŸ¦ ¾Ë¾Æº¼ ¼ö ÀÕ´Ù. ÀÎÀÚ´Â null·Î ³¡³ª´Â ¹®ÀÚ¿­·Î, ÆÄÀÏ À̸§À¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â ¹®ÀÚ·Î ÀÌ·ç¾îÁ®¾ß ÇÑ´Ù. ¸¸¾à domain_name ÀÎÀÚ°¡ NULLÀ̸é, ÀÌ ÇÔ¼ö´Â ÇöÀç °ªÀ» ¸®ÅÏÇÑ´Ù. ¾î¶² °ªÀÌ ÁöÁ¤µÇ¾î ÀÖÁö ¾ÊÀ¸¸é, ±âº» µµ¸ÞÀÎÀÇ À̸§ÀÌ ¸®ÅϵȴÙ: ÀÌ ±âº»µµ¸ÞÀÎÀÇ °ªÀº messagesÀÌ´Ù. textdomainÀÇ °ªÀº char *ÀÌÁö¸¸ ÀÌ ¸®ÅÏ ÁÖ¼Ò³»ÀÇ °ªÀ» ¹Ù²Ù¸é ¾È µÈ´Ù. ¶Ç, ±× °ªÀÌ Á¤¸»·Î »ç¿ë°¡´ÉÇÑÁö °Ë»çÇÏÁö ¾Ê´Â´Ù´Â °É ¸í½ÉÇØ¾ß ÇÑ´Ù. ¸¸¾à ¾î¶² À̸§À» »ç¿ëÇÒ ¼ö ¾ø´Â °æ¿ì¿¡´Â, ¸Þ¼¼Áö ¹ø¿ªÀº ÀϾÁö ¾ÊÀ» °É·Î »ç¿ëÇÒ ¼ö ¾ø´Ù´Â °É ¾Ë ¼ö ÀÖ´Ù..

textdomainÀ¸·Î °áÁ¤µÈ µµ¸ÞÀÎÀ» »ç¿ëÇÏ·Á¸é ´ÙÀ½À» »ç¿ëÇÑ´Ù.

char *gettext (const char *msgid);

ÀÌ ÇÔ¼ö´Â ´©±¸µç ¹«½¼ ÀÏÀ» ÇÏ´ÂÁö ¾Ë¾Æ ç ¼ö ÀÖ´Â °¡Àå °£´ÜÇÑ ÇÔ¼öÀÌ´Ù. msgid ¹®ÀÚ¿­¿¡ ´ëÇÑ ¹ø¿ªÀÌ ÇöÀç µµ¸ÞÀο¡ ÀÖÀ¸¸é ±× ¹ø¿ª¹®ÀÌ ¸®ÅϵȴÙ. ¹ø¿ª¹®ÀÌ ¾øÀ¸¸é ù¹ø° Àμö°ª ÀÚü°¡ ¸®ÅϵȴÙ. ÀÎÀÚ°¡ NULLÀÏ °æ¿ì ±× °á°ú´Â Á¤ÀǵÇÁö ¾Ê¾Ò´Ù.

ÇÑ °¡Áö ¸í½ÉÇØ¾ß ÇÒ Á¡Àº ¾î¶² µµ¸ÞÀÎÀ» »ç¿ëÇÒÁö ¸íÈ®È÷ ÁöÁ¤ÇÏÁö ¾Ê´Â´Ù´Â Á¡ÀÌ´Ù. ÇöÀç LC_MESSAGES ·ÎÄÉÀÏ¿¡ ´ëÇÑ µµ¸ÞÀÎ °ªÀÌ »ç¿ëµÈ´Ù. ¸¸¾à ÇÁ·Î±×·¥ ³»¿¡ ¶È°°Àº gettext È£Ãâ »çÀÌ¿¡ ÀÌ °ªÀÌ ´Þ¶óÁø´Ù¸é, ÀÌ µÎ¹øÀÇ È£ÃâÀº °¢°¢ ´Ù¸¥ ¸Þ¼¼Áö ¸ñ·ÏÀ» ÂüÁ¶ÇÑ´Ù.

°¡Àå ½¬¿î °æ¿ì, ±¹Á¦È­µÈ ÆÐÅ°Áö¿¡¼­ º¸Åë »ç¿ëµÇ´Â ¹æ¹ýÀº, ÀÏ´Ü teextdomainÀ» ½ÇÇàÇÑ ´ÙÀ½ µµ¸ÞÀÎÀ» À¯ÀÏÇÑ À̸§À¸·Î °áÁ¤ÇÏ´Â °ÍÀÌ´Ù. º¸Åë ±× µµ¸ÞÀÎ À̸§Àº ÆÐÅ°ÁöÀÇ À̸§ÀÌ µÈ´Ù. ÀÌ·¸°Ô ÇÏ¸é ¸ðµç ¹®ÀÚ¿­Àº gettext ÇÔ¼ö¸¦ Åë°úÇؼ­ ¹ø¿ªµÈ´Ù. ÀÌÁ¦, ÀÌ ÆÐÅ°Áö´Â ¿©·¯ºÐÀÇ ¸ð±¹¾î·Î ¸»ÇÏ°Ô µÈ´Ù.

¾Ö¸ÅÇÔÀ» ÇØ°áÇϱâ

ÇÑ °³ÀÇ µµ¸ÞÀÎ À̸§Àº ´ëºÎºÐÀÇ ÇÁ·Î±×·¥¿¡¼­ Àß µ¿ÀÛÇÏÁö¸¸, ÇÑ °³ ÀÌ»óÀÇ µµ¸ÞÀο¡¼­ ¹ø¿ª¹®À» °¡Á®¿Í¾ß ÇÏ´Â °æ¿ìµµ ÀÖ´Ù. ¹°·Ð textdomainÀ» ÀÌ¿ëÇØ ¿©·¯ °³ÀÇ µµ¸ÞÀÎ »çÀ̸¦ ¿Ô´Ù°¬´Ù ÇÒ ¼öµµ ÀÖÁö¸¸, ¾²±â¿¡ ÆíÇÏÁöµµ ¾Ê°í ºü¸£Áöµµ ¾Ê´Ù. °¡´ÉÇÑ »óȲ ÇÑ °¡Áö¸¦ Áö±Ý »ý°¢ÇÒ ¼ö ÀÖ´Ù: ¸ðµç ¿À·ù ¸Þ¼¼ÁöµéÀº error¶ó´Â º°µµÀÇ µµ¸ÞÀο¡ ³Ö´Â´Ù. ÀÌ·¸°Ô Çϸé ÀÌ ¿À·ù¸Þ¼¼Áö¿¡ ´ëÇÑ ¹ø¿ª¹®Àº ÇÑ °¡Áö¸¸ °®°í ÀÖÀ¸¸é µÈ´Ù. ¶Ç ´Ù¸¥ °æ¿ì´Â ¶óÀ̺귯¸®ÀÇ ¸Þ¼¼ÁöÀÇ °æ¿ìÀÌ´Ù. ÀÌ °æ¿ì´Â ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ µµ¸ÞÀο¡ °ü°è¾øÀÌ µ¿ÀÛÇØ¾ß ÇÑ´Ù.

ÀÌ·¯ÇÑ ÀÌÀ¯·Î ¹®ÀÚ¿­À» °¡Á®¿À´Â ÇÔ¼ö°¡ µÎ °³°¡ ´õ ÀÖ´Ù.

char *dgettext (const char *domain_name, const char *msgid);
char *dcgettext (const char *domain_name, const char *msgid,
                 int category);

ÀÌ µÎ ÇÔ¼ö ¸ðµÎ ´Ù »õ·Î¿î ù¹ø° ÀÎÀÚ¸¦ ¹Þ´Âµ¥, ÀÌ ÀÎÀÚ´Â textdomainÀÇ ÀÎÀÚ¿¡ ÇØ´çÇÑ´Ù. dcgettextÀÇ ¼¼¹ø° ÀÎÀÚ´Â LC_MESSAGES ÀÌ¿ÜÀÇ ·ÎÄÉÀÏÀ» ¾µ °æ¿ì¸¦ À§ÇÑ °ÍÀÌ´Ù. ÇÏÁö¸¸ ³ª´Â ÀÌ dcgettext°¡ Á¤¸»·Î ¾µ¸ð°¡ ÀÖ´ÂÁö Àǹ®ÀÌ´Ù. domain_nameÀÌ NULLÀ̰ųª category°¡ ¾Ë·ÁÁø °ª ÀÌ¿ÜÀÇ °ªÀ» °¡Áö¸é, ±× °á°ú´Â Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù. ¶Ç dcgettext´Â ¼Ö¶ó¸®½º¿¡ ÀÖ´Â ¶Ç ´Ù¸¥ gettext¿¡´Â µé¾î ÀÖÁö ¾Ê´Ù.

¶Ç ´Ù¸¥ ¾Ö¸ÅÇÔÀÌ ¹ß»ýÇÒ ¼ö Àִµ¥, ÇÑ °³ ÀÌ»óÀÇ µµ¸ÞÀÎÀÌ °°Àº À̸§À» °¡Áö´Â °æ¿ìÀÌ´Ù. ÀÌ °æ¿ì´Â ÇÊ¿äÇÑ ¸Þ¼¼Áö ¸ñ·Ï ÆÄÀÏÀÌ µé¾î ÀÖ´Â °÷À» Á÷Á¢ ÁöÁ¤Çؼ­ ÇØ°áÇÒ ¼ö ÀÖ´Ù.

char *bindtextdomain (const char *domain_name,
                      const char *dir_name);

ÀÌ ÇÔ¼ö¸¦ ºÎ¸£¸é ÁÖ¾îÁø µµ¸ÞÀÎÀ» ÁöÁ¤µÈ µð·ºÅ丮 ³»ÀÇ ÆÄÀÏ(ÀÌ ÆÄÀÏÀÌ Á¤È®È÷ ¹«¾ùÀÎÁö´Â ¾Æ·¡¿¡ ¼³¸íÇÑ´Ù)À» »ç¿ëÇϵµ·Ï ÇÑ´Ù. ƯÈ÷ ½Ã½ºÅÛÀÇ ±âº» À§Ä¡¿¡ ÀÖ´Â ÆÄÀÏÀÌ ÁöÁ¤µÈ ÆÄÀÏ°ú ´Ù¸£¸é ¾²Áö ¾Ê´Â´Ù (textdomain¸¸ »ç¿ëÇÑ °æ¿ì). dir_nameÀ¸·Î NULL Æ÷ÀÎÅ͸¦ ³Ñ±â¸é domain_name°ú °ü°èÀÖ´Â ÆÄÀÏÀÌ ¸®ÅϵȴÙ. domain_nameÀÌ NULLÀÌ¸é ¾Æ¹« Àϵµ ÀϾÁö ¾Ê°í NULL Æ÷ÀÎÅÍ°¡ ¸®ÅϵȴÙ. ´Ù¸¥ ÇÔ¼öµé°ú ¸¶Âù°¡Áö·Î ¸®ÅÏ°ªÀ» ¹Ù²Ù¸é ¾È µÈ´Ù!

Áß¿äÇÑ Á¡ ÇÑ °¡Áö·Î, dir_name Àμö·Î »ó´ë °æ·Î¸¦ ¾²¸é ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ÀÌ °æ·Î´Â ÇöÀç µð·ºÅ丮¿¡ ´ëÇØ »ó´ëÀûÀ¸·Î °è»êµÇ±â ¶§¹®¿¡ ÇÁ·Î±×·¥ÀÌ chdir ¸í·ÉÀ» ¾²¸é °á°ú°¡ ´Þ¶óÁú ¼ö ÀÖ´Ù. »ó´ë °æ·Î´Â ÀÌ·± ¹®Á¦¿¡ ´ëÇÑ ÀÇÁ¸¼ºÀ» ¾ø¾Ö°í, µ¿ÀÛÇÏÁö ¾ÊÀ» °¡´É¼ºÀ» ¾ø¾Ö±â À§ÇØ Àý´ë ¾²Áö ¸»¾Æ¾ß ÇÑ´Ù.

¸Þ¼¼Áö ¸ñ·Ï ÆÄÀÏ Ã£±â

¿©·¯ °¡Áö ÆÐÅ°Áö¿¡ ´ëÇØ ¿©·¯ °¡Áö ¾ð¾î·Î µÈ ¹ø¿ª¹®µéÀÌ ÀúÀåµÇ±â ¶§¹®¿¡, ¸Þ¼¼Áö ¸ñ·Ï ÆÄÀÏ¿¡ ´ëÇÑ Á¤º¸¸¦ Ãß°¡ÇÒ ¹æ¹ýÀÌ ÀÖ¾î¾ß ÇÑ´Ù. À¯´Ð½º ȯ°æ¿¡¼­ º¸Åë »ç¿ëµÇ´Â ÆÄÀÏ À̸§³»¿¡ ÀúÀåÇÏ´Â °ÍÀÌ°í, ¿©±â¼­µµ ±×·¸°Ô ÇÑ´Ù. bindtextdomainÀÇ µÎ¹ø° ÀÎÀÚ¿¡ ÁÖ¾îÁø µð·ºÅ丮(ȤÀº ±âº» µð·ºÅ丮) ´ÙÀ½¿¡ ·ÎÄÉÀÏÀÇ À̸§°ú µµ¸ÞÀÎÀÇ À̸§ÀÌ ¿¬°áµÈ´Ù:

dir_name/locale/LC_category/domain_name.mo

dir_nameÀÇ ±âº»°ªÀº ½Ã½ºÅÛ¿¡ µû¶ó ´Ù¸£´Ù. GNU ¶óÀ̺귯¸®ÀÇ °æ¿ì, GNU °ü½À¿¡ ´Ù¸£´Â ÆÐÅ°ÁöµéÀÇ °æ¿ì, ÀÌ µð·ºÅ丮´Â:

/usr/local/share/locale

localeÀº À§ÀÇ LC_categoryÀÇ ·ÎÄÉÀÏ À̸§ÀÌ´Ù. gettext¿Í dgettext¿¡¼­ ÀÌ LC_category´Â ¾ðÁ¦³ª LC_MESSAGESÀÌ´Ù. dcgettext´Â ¼¼¹ø° ÀÎÀÚ·Î ÀÌ ·ÎÄÉÀÏÀ» ÁöÁ¤ÇÑ´Ù.(3) ·ÎÄÉÀÏÀÇ °ªÀº setlocale (LC_category, NULL)ÀÇ °á°ú¸¦ ÅëÇØ ¾Ë¾Æ ³½´Ù. (4)

gettext°¡ »ç¿ëÇÒ Ãâ·Â ¹®ÀÚÀÇ ¹®Àڼ ÁöÁ¤Çϱâ

gettext´Â ¸Þ¼¼Áö ¸ñ·Ï¿¡ µé¾î ÀÖ´Â ¹ø¿ª¹®¸¸ ã´Â °ÍÀÌ ¾Æ´Ï´Ù. gettext´Â ¹ø¿ª¹®À» ¿øÇÏ´Â Ãâ·Â ¹®ÀÚ¼ÂÀ¸·Î ±× ÀÚ¸®¿¡¼­ º¯È¯ÇØ ÁØ´Ù. ¹ø¿ªÀÚ°¡ ¸Þ¼¼Áö ¸ñ·ÏÀ» ¸¸µé ¶§ ¾´ ¹®Àڼ°ú ´Ù¸¥ ¹®Àڼ¿¡¼­ »ç¿ëÀÚ°¡ ÀÛ¾÷ÁßÀÏ ¶§ ÀÌ ±â´ÉÀÌ ¸Å¿ì À¯¿ëÇÏ°Ô ¾²ÀδÙ. ÀÌ ±â´ÉÀ¸·Î ¹®Àڼ¸¸ ´Ù¸¥ ¸Þ¼¼Áö ¸ñ·ÏÀ» ¿©·¯°³ ¹èÆ÷ÇÒ ÇÊ¿ä°¡ ¾ø¾îÁö°Ô µÇ¾ú´Ù.

Ãâ·Â ¹®ÀÚ¼ÂÀº ±âº»°ªÀ¸·Î nl_langinfo (CODESET)ÀÇ °ªÀε¥, ÀÌ´Â ÇöÀç ·ÎÄÉÀÏÀÇ LC_CTYPE¿¡ ÀÇÁ¸ÇÑ´Ù. ÇÏÁö¸¸ ¹®ÀÚ¿­À» ·ÎÄÉÀÏ µ¶¸³ÀûÀÎ ¹æ¹ý(¿¹¸¦ µé¾î UTF-8)À¸·Î ÀúÀåÇÑ ÇÁ·Î±×·¥ÀÇ °æ¿ì´Â gettext¿Í °ü·Ã ÇÔ¼öµéÀÌ Æ¯Á¤ ÀÎÄÚµùÀ¸·Î ¸®ÅÏÇϵµ·Ï bind_textdomain_codeset ÇÔ¼ö¸¦ ÀÌ¿ëÇØ ¿äûÇÒ ¼ö ÀÖ´Ù.

gettextÀÇ msgid ÀÎÀÚ´Â ¹®Àڼ º¯È¯°ú °ü°è°¡ ¾ø´Ù´Â Á¡¿¡ À¯ÀÇÇÑ´Ù. ¶Ç, gettext´Â msgid¿¡ ´ëÇÑ ¹ø¿ª¹®À» ãÁö ¸øÇÒ ¶§ msgid¸¦ ÀÖ´Â ±×´ë·Î ¸®ÅÏÇÑ´Ù -- ÇöÀç Ãâ·Â ¹®ÀÚ¼ÂÀÌ ¹«¾ùÀÎÁö¿Í °ü°è°¡ ¾ø´Ù. ±×·¯¹Ç·Î ¸ðµç msgid´Â US-ASCII ¹®ÀÚ¿­·Î ¸¸µé±â¸¦ ±ÇÇÑ´Ù.

Function: char * bind_textdomain_codeset (const char *domainname, const char *codeset)
bind_textdomain_codeset ÇÔ¼ö´Â domainname µµ¸ÞÀÎÀÇ ¸Þ¼¼Áö ¸ñ·Ï¿¡ ´ëÇÑ Ãâ·Â ¹®ÀÚ¼ÂÀ» ÁöÁ¤ÇÏ´Â µ¥ ¾²ÀδÙ. codeset ÀÎÀÚ´Â iconv_open ÇÔ¼ö¿¡¼­ ¾µ ¼ö ÀÖ´Â ¹®Àڼ À̸§À̰ųª, ³Î Æ÷ÀÎÅÍÀ̾î¾ß ÇÑ´Ù.

¸¸¾à codeset ÀÎÀÚ°¡ ³Î Æ÷ÀÎÅͶó¸é, bind_textdomain_codesetÀº domainnameÀÇ µµ¸ÞÀο¡ ¼±ÅÃµÈ ¹®ÀÚ¼ÂÀ» ¸®ÅÏÇÑ´Ù. ¸¸¾à ¾î¶² ¹®Àڼµµ ¼±ÅõÇÁö ¾ÊÀº °æ¿ì¿¡ NULLÀ» ¸®ÅÏÇÑ´Ù.

bind_textdomain_codeset ÇÔ¼ö´Â ¿©·¯¹ø ¾²ÀÏ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö°¡ µ¿ÀÏÇÑ domainname°ú ÇÔ²² ¿©·¯¹ø »ç¿ëµÉ °æ¿ì, ³ªÁß¿¡ »ç¿ëµÈ °ÍÀÌ Àü¿¡ »ç¿ëµÈ ¼³Á¤À» µ¤¾î¾²°Ô µÉ °ÍÀÌ´Ù.

bind_textdomain_codeset ÇÔ¼ö´Â ¼±ÅÃµÈ ÄÚµå¼ÂÀÇ À̸§ÀÌ µé¾î ÀÖ´Â ¹®ÀÚ¿­À» °¡¸®Å³ °ÍÀÌ´Ù. ¹®ÀÚ¿­Àº ÇÔ¼ö ³»ºÎ¿¡ µé¾î ÀÖ°í »ç¿ëÀÚ¿¡ ÀÇÇØ º¯°æµÇ¾î¼­´Â ¾È µÈ´Ù. ¸¸¾à bind_textdomain_codeset »ç¿ëÁß¿¡ ¸Þ¸ð¸®°¡ ºÎÁ·ÇØ Áú °æ¿ì ¸®ÅÏ°ªÀº NULLÀÌ°í Àü¿ªº¯¼ö errno°¡ ¼¼ÆÃµÉ °ÍÀÌ´Ù.

º¹¼öÇüÀ» À§ÇÑ ÇÔ¼öµé

Áö±Ý±îÁö ¼³¸íµÈ gettext °è¿­ÀÇ ÇÔ¼öµé(±×¸®°í catgetsÀÇ ÇÔ¼öµé)Àº ½ÇÁ¦ ¼¼°è¿¡¼­ Áö±Ý±îÁöÀÇ Á¢±Ù¹æ½ÄµéÀ» ¸ðµÎ ¹«»öÄÉÇÏ´Â ÇÑ °¡Áö ¹®Á¦°¡ ÀÖ´Ù. ±×°ÍÀº º¹¼öÇüÀ» ó¸®ÇÏ´Â °ÍÀÌ´Ù.

±¹Á¦È­¸¦ »ý°¢Çϱâ Àü¿¡ (±×¸®°í, ¾ÈŸ±õ°Ôµµ »ý°¢ÇÑ ÀÌÈÄ¿¡µµ) À¯´Ð½º ¼Ò½º Äڵ带 »ìÆ캻 »ç¶÷µéÀº ´ÙÀ½°ú ºñ½ÁÇÑ Äڵ带 º» ÀûÀÌ ÀÖÀ» °ÍÀÌ´Ù:

  printf ("%d file%s deleted", n, n == 1 ? "" : "s");

»ç¶÷µéÀÌ ÀÌ Äڵ带 ±¹Á¦È­ÇÏ´Â °úÁ¤¿¡¼­ ºÒÆòÀ» Çϸé, »ç¶÷µéÀº ÀÌ¿Í °°Àº ¼ö½ÄÀ» ¿ÏÀüÈ÷ ¾ø¾Ö°Å³ª "file(s)"¿Í °°Àº ¹®ÀÚ¿­À» »ç¿ëÇÑ´Ù. ÀÌ µÎ °¡Áö ¸ðµÎ ºÎÀÚ¿¬½º·´°í »ç¿ëÇؼ­´Â ¾È µÇ´Â °ÍÀÌ´Ù. ÀÌ ¹®Á¦¸¦ ¿Ã¹Ù¸£°Ô ÇØ°áÇÑ Ã¹ ¹ø° ÇØ°á ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù:

   if (n == 1)
     printf ("%d file deleted", n);
   else
     printf ("%d files deleted", n);

ÇÏÁö¸¸, ÀÌ ¿ª½Ã ¹®Á¦¸¦ ÇØ°áÇÏÁö ¸øÇÑ´Ù. À§ ÄÚµå´Â ¸í»çÀÇ º¹¼öÇüÀÌ ´Ü¼øÈ÷ `s'¸¦ ÷°¡ÇÏ´Â °ÍÀÌ ¾Æ´Ñ ¾ð¾î¸¦ Á¦¿ÜÇÑ ¸ðµç ¾ð¾î¿¡¼­ Àû¿ëµÈ´Ù. ¿©±â¿¡¼­ ¶Ç ´Ù½Ã »ç¶÷µéÀº ÀÚ½ÅÀÇ ¾ð¾î¿¡ Àû¿ëµÇ´Â ±ÔÄ¢ÀÌ ¸ðµç ¾ð¾î¿¡¼­µµ ¸¶Âù°¡Áö¶ó°í ¹Ï´Â ¿À·ù¸¦ ¹üÇÑ´Ù. ÇÏÁö¸¸ º¹¼öÇüÀ» ó¸®ÇÏ´Â °ÍÀº ¾ð¾î¿¡ µû¶ó ¸Å¿ì ´Ù¸£´Ù. ¿¹¸¦ µé¾î, Rafal Maszkowski(<rzm@mat.uni.torun.pl>)Àº ´ÙÀ½°ú °°ÀÌ ¾Ë·Á ÁÖ¾ú´Ù:

Æú¶õµå¾î¿¡¼­´Â plik(file)¸¦ ´ÙÀ½°ú °°ÀÌ ¾´´Ù:

1 plik
2,3,4 pliki
5-21 pliko'w
22-24 pliki
25-31 pliko'w

¿Í °°ÀÌ ¾´´Ù (o'´Â 8859-2ÀÇ oacute¸¦ ¸»Çϸç okreska¶ó°í ÇÑ´Ù. aogonek¿Í ºñ½ÁÇÏ´Ù.)

¾ð¾îµé »çÀÌ¿¡ ´Ù¸¥ °ÍÀÌ µÎ °¡Áö°¡ ÀÖ´Ù (ȤÀº ÇÑ ¾îÁ· ¾È¿¡¼­µµ ´Ù¸£´Ù).

°á·ÐÀº ÀÀ¿ëÇÁ·Î±×·¥ °³¹ßÀÚ°¡ ÀÌ ¹®ÀÚ¸¦ ÄÚµå ³»¿¡¼­ ÇØ°áÇÏ·Á°í Çؼ­´Â ¾ÈµÈ´Ù´Â °ÍÀÌ´Ù. º¹¼öÇüÀÇ Ã³¸®´Â ƯÁ¤ ¾ð¾îÀÇ È¯°æ¿¡ ´ëÇؼ­¸¸ À¯¿ëÇϱ⠶§¹®¿¡ Áö¿ªÈ­ÀÇ ¹üÁÖ¿¡ µé¾î°£´Ù°í ºÁ¾ß ÇÒ °ÍÀÌ´Ù. Äڵ忡¼­ ÇØ°áÇÏ´Â ´ë½Å¿¡ È®ÀåµÈ gettext ÀÎÅÍÆäÀ̽º°¡ »ç¿ëµÇ¾î¾ß ÇÑ´Ù.

ÀÌ È®Àå ÇÔ¼öµéÀº ÇÑ °³ÀÇ Å° ´ë½Å¿¡, µÎ °³ÀÇ ¹®ÀÚ¿­°ú ¼ýÀÚ¸¦ Å°·Î ¹Þ´Â´Ù. ¿©±â¿¡ µé¾îÀÖ´Â ¾ÆÀ̵ð¾î´Â ¼ýÀÚ¿Í Ã¹ ¹ø° ¹®ÀÚ¿­À» Å°·Î »ç¿ëÇØ, ¹ø¿ªÀÚ°¡ ÁöÁ¤ÇÑ ±ÔÄ¢¿¡ µû¶ó ¿Ã¹Ù¸¥ º¹¼öÇüÀÌ ¼±Åõǵµ·Ï ÇÏ´Â °ÍÀÌ´Ù. µÎ °³ÀÇ ¹®ÀÚ¿­ ÀÎÀÚ´Â ¸Þ¼¼Áö ¸ñ·ÏÀÌ ¾øÀ» °æ¿ì¿¡ ¸®ÅÏ °ªÀ¸·Î »ç¿ëµÉ °ÍÀÌ´Ù (º¸ÅëÀÇ gettext ÇÔ¼öÀÇ µ¿ÀÛ ¹æ½Ä°ú °°´Ù). ÀÌ °æ¿ì¿¡ µ¶ÀÏ°è ¾ð¾îÀÇ ±ÔÄ¢ÀÌ »ç¿ëµÉ °ÍÀÌ°í ´Ü¼öÇü¿¡´Â ù ¹øÀç ¹®ÀÚ¿­ ÀÎÀÚ°¡ ¾²ÀÌ°í, º¹¼öÇüÀÇ °æ¿ì¿¡´Â µÎ ¹ø°°¡ ¾²ÀδÙ.

°á°úÀûÀ¸·Î ¾ð¾î ¸Þ¼¼Áö ¸ñ·ÏÀÌ ¾ø´Â ÇÁ·Î±×·¥ÀÇ °æ¿ì ÇÁ·Î±×·¥ÀÌ µ¶ÀÏ°è ¾ð¾î·Î ¾²ÀÎ °æ¿ì¿¡ ¿Ã¹Ù¸¥ ¹®ÀÚ¿­ÀÌ Ç¥½ÃµÇ°Ô µÈ´Ù. ÀÌ´Â ÇÑ °¡Áö Á¦ÇÑÁ¡ÀÌ µÇÁö¸¸ GNU C ¶óÀ̺귯¸®´Â (GNU gettext ÆÐÅ°Áöµµ ¸¶Âù°¡Áö·Î) GNU ÆÐÅ°ÁöÀÇ ÀϺηΠ°³¹ßµÇ¾ú°í, GNU ÇÁ·ÎÁ§Æ®ÀÇ ÄÚµù Ç¥ÁØÀº ÇÁ·Î±×·¥ÀÌ ¿µ¾î·Î ¸¸µé¾î Áöµµ·Ï ±ÔÁ¤ÇÏ°í Àֱ⠶§¹®¿¡, ÀÌ ÇØ°á¹æ¹ýÀº ±× ¸ñÀû¿¡´Â ºÎÇÕÇÑ´Ù.

Function: char * ngettext (const char *msgid1, const char *msgid2, unsigned long int n)
ngettext ÇÔ¼ö´Â gettext ÇÔ¼ö¿Í ºñ½ÁÇÏ°Ô ¸Þ¼¼Áö ¸ñ·ÏÀ» °°Àº ½ÄÀ¸·Î ã´Â´Ù. ÇÏÁö¸¸ ngettext´Â µÎ °³ÀÇ ÀÎÀÚ°¡ ´õ ÀÖ´Ù. msgid1 ÀÎÀÚ´Â ¹ø¿ªÇÒ ¹®ÀÚ¿­ÀÇ ´Ü¼öÇüÀÌ´Ù. ÀÌ ¹®ÀÚ¿­Àº ¸ñ·ÏÀ» ã´Â Å°·Îµµ ¾²ÀδÙ. msgid2 ÀÎÀÚ´Â º¹¼öÇüÀÌ´Ù. nÀº º¹¼öÇüÀ» °áÁ¤ÇÏ´Â µ¥ ¾²ÀδÙ. ¸Þ¼¼Áö ¸ñ·ÏÀ» ãÀ» ¼ö ¾ø´Â °æ¿ì¿¡ n == 1À̸é msgid1ÀÌ ¸®Åϵǰí, ±×·¸Áö ¾ÊÀº °æ¿ì msgid2¸¦ ¸®ÅÏÇÑ´Ù.

ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ¿¹´Â ´ÙÀ½°ú °°´Ù:

printf (ngettext ("%d file removed", "%d files removed", n), n);

nÀº printf ÇÔ¼ö¿¡µµ ³Ñ°ÜÁà¾ß ÇÑ´Ù´Â °Í¿¡ À¯ÀÇÇÑ´Ù. ngettext ÇÔ¼ö¿¡¸¸ ³Ñ°ÜÁÖ´Â °Í¸¸À¸·Î´Â ¾È µÈ´Ù.

Function: char * dngettext (const char *domain, const char *msgid1, const char *msgid2, unsigned long int n)
dngettext´Â ¸Þ¼¼Áö ¸ñ·ÏÀÌ ¼±ÅõǴ ¹æ¹ý¿¡¼­ dgettext ÇÔ¼ö¿Í ºñ½ÁÇÏ´Ù. Â÷ÀÌÁ¡Àº º¹¼öÇüÀ» À§ÇÑ µÎ °³ÀÇ ÀÎÀÚ¸¦ ´õ ¹Þ´Â´Ù´Â °ÍÀÌ´Ù. ÀÌ ÀÎÀÚ´Â ngettext¿Í °°Àº ¹æ½ÄÀ¸·Î ÀÌ¿ëµÈ´Ù.

Function: char * dcngettext (const char *domain, const char *msgid1, const char *msgid2, unsigned long int n, int category)
dcngettext´Â ¸Þ¼¼Áö ¸ñ·ÏÀÌ ¼±ÅõǴ ¹æ¹ý¿¡¼­ dcgettext ÇÔ¼ö¿Í ºñ½ÁÇÏ´Ù. Â÷ÀÌÁ¡Àº º¹¼öÇüÀ» À§ÇÑ µÎ °³ÀÇ ÀÎÀÚ¸¦ ´õ ¹Þ´Â´Ù´Â °ÍÀÌ´Ù. ÀÌ ÀÎÀÚ´Â ngettext¿Í °°Àº ¹æ½ÄÀ¸·Î ÀÌ¿ëµÈ´Ù.

±×·¯¸é, ÀÌ ÇÔ¼öµéÀÌ ¾î¶»°Ô º¹¼öÇü ¹®Á¦¸¦ ÇØ°áÇÏ´Â µ¥ ¾²À̴°¡? ¾ð¾îÇÐÀÚµéÀÌ °¡¸£ÃÄ ÁÖÁö ¾Ê´Â´Ù¸é (¾ÆÁ÷ ¾Æ¹«µµ °¡¸£ÃÄ ÁÖÁö ¾Ê¾Ò´Ù) º¹¼öÇüÀÇ Çü½ÄÀÌ ¸î °¡Áö¹Û¿¡ ¾ø´ÂÁö, ȤÀº ±× º¹¼öÇü ¼ýÀÚ°¡ Áö¿øÇÏ´Â ¾ð¾î°¡ »õ·Î »ý±æ ¶§¸¶´Ù ´Ã¾î ³¯Áö ¾Ë ¼ö ¾ø¾ú´Ù.

±×·¯¹Ç·Î ¿©±â¿¡¼­ ¸¸µé¾îÁø ¹æ¹ýÀº ¹ø¿ªÀÚ°¡ º¹¼öÇüÀ» ¾î¶»°Ô °áÁ¤ÇÒ Áö ±ÔÄ¢À» ÁöÁ¤ÇÏ´Â °ÍÀÌ´Ù. ±× Çü½ÄÀº °¢ ¾ð¾î¿¡ µû¶ó ´Ù¸£¹Ç·Î, ÀÌ ¹æ¹ýÀº º¹¼öÇü¿¡ ´ëÇÑ Á¤º¸¸¦ Äڵ忡 ÇϵåÄÚµùÇÏ´Â °æ¿ì¸¦ Á¦¿ÜÇϸé (ÀÌ °æ¿ì¿¡µµ ÀÌ ¹æ¹ýÀ» ½á¼­ »õ·Î¿î ¾ð¾î¸¦ Áö¿øÇÏ´Â µ¥ ¹®Á¦°¡ ¾øµµ·Ï ÇØ¾ß ÇÒ °ÍÀÌ´Ù) ¸ðµÎ Àû¿ëµÇ´Â ¹æ¹ýÀÌ´Ù.

º¹¼öÇü ¼±Åÿ¡ ´ëÇÑ Á¤º¸´Â PO ÆÄÀÏÀÇ Çì´õ Ç׸ñ(msgid ¹®ÀÚ¿­ÀÌ ºñ¾îÀÖ´Â Ç׸ñ)¿¡ µé¾î ÀÖ´Ù. º¹¼öÇü Á¤º¸´Â ´ÙÀ½°ú °°´Ù:

Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1;

nplurals=2 °ªÀº ÀÌ ¾ð¾î¿¡ ¾ó¸¶³ª ¸¹Àº º¹¼öÇüÀÌ µé¾î ÀÖ´ÂÁö¸¦ ÁöÁ¤ÇÏ´Â ½ÊÁø¼ö ¼öÀÌ´Ù. plural ´ÙÀ½¿¡ ¿À´Â ¹®ÀÚ¿­Àº C ¾ð¾î ¹®¹ýÀ» ¾²´Â ¼ö½ÄÀÌ´Ù. ¿¹¿ÜÀûÀ¸·Î À½¼ö´Â Çã¿ëµÇÁö ¾Ê°í, ¼ýÀÚ´Â ½ÊÁø¼ö¿©¾ß Çϸç, Çã¿ëµÇ´Â º¯¼ö´Â n»ÓÀÌ´Ù. ÀÌ ¼ö½ÄÀº ngettext, dngettext, ȤÀº dcngettext°¡ ¾²ÀÏ ¶§¸¶´Ù °è»êµÈ´Ù. ÀÌ ÇÔ¼ö¿¡ ³Ñ°ÜÁø ¼ýÀÚ °ªÀº ÀÌ ¼ö½Ä¿¡¼­ º¯¼ö nÀÌ »ç¿ëµÈ ¸ðµç °÷¿¡ ¾²¿©Áø´Ù. °á°ú°ªÀº 0º¸´Ù °°°Å³ª Ä¿¾ß Çϸç nplurals¿¡ ÁÖ¾îÁø °ªº¸´Ù ÀÛ¾Æ¾ß ÇÑ´Ù.

ÇöÀç ´ÙÀ½ ±ÔÄ¢ÀÌ ¾Ë·ÁÁ® ÀÖ´Ù. °¢ ¾ð¾î´Â ±× ¾îÁ·°ú ÇÔ²² ¿­°ÅµÇ¾î ÀÖ´Ù. ÇÏÁö¸¸ (¾Æ·¡ Ç¥¿¡¼­µµ ¾Ë ¼ö ÀÖµíÀÌ) ´ÙÀ½ ±ÔÄ¢ÀÌ Àüü ¾îÁ·¿¡ ´ëÇÏ¿© ¸ðµÎ Àû¿ëµÇ´Â ÀϹÝÀûÀÎ ±ÔÄ¢À̶ó´Â ¶æÀº °áÄÚ ¾Æ´Ï´Ù.(5)

ÇÑ °¡Áö Çü½Ä:
¾î¶² ¾ð¾îµéÀº ¿ÀÁ÷ ÇÑ °³ÀÇ ´Ü¼öÇü¸¸ Á¸ÀçÇÑ´Ù. ´Ü¼öÇü°ú º¹¼öÇüÀÇ ±¸ºÐÀº ¾ø´Ù. ÀÌ °æ¿ì¿¡ Çì´õ Ç׸ñÀº ´ÙÀ½°ú °°ÀÌ µÉ °ÍÀÌ´Ù:
Plural-Forms: nplurals=1; plural=0;
ÀÌ·¯ÇÑ ¾ð¾î´Â ´ÙÀ½°ú °°´Ù:
Finno-Ugric ¾îÁ·
Çë°¡¸®¾î
¾Æ½Ã¾Æ ¾îÁ·
ÀϺ»¾î, Çѱ¹¾î
ÅÍÅ°/¾ËŸÀÌ ¾îÁ·
ÅÍÅ°¾î
µÎ °¡Áö Çü½Ä, ´Ü¼öÇüÀº 1¿¡¸¸ ¾²ÀÌ´Â °æ¿ì
¿µ¾î°¡ »ç¿ëÇÏ´Â ¹æ½ÄÀ̱⠶§¹®¿¡ ´ëºÎºÐÀÇ ÇöÁ¸ÇÏ´Â ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÏ´Â ¹æ½ÄÀÌ´Ù. Çì´õ Ç׸ñÀº ´ÙÀ½°ú °°´Ù:
Plural-Forms: nplurals=2; plural=n != 1;
(ÁÖÀÇ: ºÒ¸®¾ð ½ÄÀÌ 0 ¾Æ´Ï¸é 1ÀÇ °ªÀ» °¡Áø´Ù´Â C ¼ö½ÄÀÇ Æ¯Â¡À» ÀÌ¿ëÇß´Ù.) ÀÌ·¯ÇÑ ¾ð¾î´Â ´ÙÀ½°ú °°´Ù:
µ¶ÀÏ ¾îÁ·
Danish, Dutch, ¿µ¾î, µ¶ÀϾî, ³ë¸£¿þÀ̾î, ½º¿þµ§¾î
Finno-Ugric ¾îÁ·
Estonian, Finnish
Latin/Greek ¾îÁ·
±×¸®½º¾î
Semitic ¾îÁ·
È÷ºê¸®¾î
Romanic ¾îÁ·
ÀÌÅ»¸®¾Æ¾î, Æ÷¸£Åõ°¥¾î, ½ºÆäÀξî
Àΰø ¾ð¾î
¿¡½ºÆä¶õÅä
µÎ °¡Áö Çü½Ä, ´Ü¼öÇüÀº 0°ú 1¿¡ »ç¿ëµÊ
¾îÁ·¿¡¼­ ¿¹¿ÜÀûÀÎ °æ¿ìÀÌ´Ù. Çì´õ Ç׸ñÀº ´ÙÀ½°ú °°´Ù:
Plural-Forms: nplurals=2; plural=n>1;
ÀÌ·¯ÇÑ ¾ð¾î´Â ´ÙÀ½°ú °°´Ù:
Romanic ¾îÁ·
ÇÁ¶û½º¾î, ºê¶óÁú½Ä Æ÷¸£Åõ°¥¾î
¼¼ °¡Áö Çü½Ä, 0¿¡ Ư¼öÇÑ °æ¿ì
Çì´õ Ç׸ñÀº ´ÙÀ½°ú °°´Ù:
Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;
ÇØ´ç ¾ð¾î´Â ´ÙÀ½°ú °°´Ù:
Baltic ¾îÁ·
¶óÆ®ºñ¾Æ¾î
¼¼ °¡Áö Çü½Ä, 1°ú 2¿¡ Ư¼öÇÑ °æ¿ì
Çì´õ Ç׸ñÀº ´ÙÀ½°ú °°´Ù:
Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;
ÀÌ·¯ÇÑ ¾ð¾î´Â ´ÙÀ½°ú °°´Ù:
Celtic
Gaeilge
¼¼ °¡Áö Çü½Ä, 1[2-9]·Î ³¡³ª´Â ¼ýÀÚ¿¡ Ư¼öÇÑ °æ¿ì
Çì´õ Ç׸ñÀº ´ÙÀ½°ú °°´Ù:
Plural-Forms: nplurals=3; \
    plural=n%10==1 && n%100!=11 ? 0 : \
           n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2;
ÀÌ·¯ÇÑ ¾ð¾î´Â ´ÙÀ½°ú °°´Ù:
Baltic ¾îÁ·
Lithuanian
¼¼°¡Áö Çü½Ä, 1, 2, 3, 4·Î ³¡³ª´Â ¼ö¿¡ Ư¼öÇÑ °æ¿ì, 1[1-4]·Î ³¡³ª´Â °æ¿ì Á¦¿Ü
Çì´õ Ç׸ñÀº ´ÙÀ½°ú °°´Ù:
Plural-Forms: nplurals=3; \
    plural=n%10==1 && n%100!=11 ? 0 : \
           n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;
ÀÌ·¯ÇÑ ¾ð¾î´Â ´ÙÀ½°ú °°´Ù:
Slavic family
Å©·Î¾ÆƼ¾Æ¾î, üÄÚ¾î, ·¯½Ã¾Æ¾î, Slovak, ¿ìÅ©¶óÀ̳ª¾î
¼¼ °¡Áö Çü½Ä, 1°ú 2, 3, 4·Î ³¡³ª´Â ¼ö¿¡ Ưº°ÇÑ °æ¿ì
Çì´õ Ç׸ñÀº ´ÙÀ½°ú °°´Ù:
Plural-Forms: nplurals=3; \
    plural=n==1 ? 0 : \
           n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;
ÀÌ·¯ÇÑ ¾ð¾î´Â ´ÙÀ½°ú °°´Ù:
Slavic ¾îÁ·
Æú¶õµå¾î
³× °¡Áö Çü½Ä, 1°ú 02, 03, 04·Î ³¡³ª´Â ¸ðµç ¼ö¿¡ ´ëÇؼ­ Ư¼öÇÑ °æ¿ì
Çì´õ Ç׸ñÀº ´ÙÀ½°ú °°´Ù:
Plural-Forms: nplurals=4; \
    plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;
ÀÌ·¯ÇÑ ¾ð¾î´Â ´ÙÀ½°ú °°´Ù:
Slavic ¾îÁ·
½½·Îº£´Ï¾Æ¾î

GUI ÇÁ·Î±×·¥¿¡¼­ gettext »ç¿ëÇϱâ

gettext ÇÔ¼ö°¡ Å« ¹®Á¦°¡ ÀÖ´Â ºÎºÐÀÌ ¹Ù·Î ±×·¡ÇÈ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º(GUI)¿¡¼­ »ç¿ëµÉ °æ¿ìÀÌ´Ù. ¹®Á¦´Â ¹ø¿ªµÇ¾ß ÇÒ ¹®ÀÚ¿­ÀÌ ¸Å¿ì ª´Ù´Â °ÍÀÌ´Ù. ÀÌ ¹®ÀÚ¿­µéÀº Ç®´Ù¿î ¸Þ´º¿¡ ³ªÅ¸³ª¾ß ÇÏ°í ±× ±æÀÌ¿¡ Á¦ÇÑÀ» ¹Þ´Â´Ù. ÇÏÁö¸¸ Àüü ¹®Àå¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â ¹®ÀÚ¿­À̳ª ÃÖ¼ÒÇÑ ¹®ÀåÀÇ Å« ºÎºÐÀÌ ÇÁ·Î±×·¥¿¡¼­ µÎ ¹ø ÀÌ»ó ³ªÅ¸³ªÁö¸¸, ¹ø¿ªÀÌ ´Ù¸¥ °æ¿ìµµ ÀÖ´Ù. ÀÌ´Â GUI ÇÁ·Î±×·¥¿¡¼­ ÀÚÁÖ ¾²ÀÌ´Â ÇÑ ´Ü¾î·Î µÈ ¹®ÀÚ¿­ÀÇ °æ¿ì ƯÈ÷ ±×·¸´Ù.

°á°úÀûÀ¸·Î ¸¹Àº »ç¶÷µéÀÌ gettext Á¢±Ù ¹æ½ÄÀÌ Æ²¸®°í ÀÌ·¯ÇÑ ¹®Á¦°¡ ¾ø´ÂcatgetsÀ» »ç¿ëÇØ¾ß ÇÑ´Ù°í ÁÖÀåÇÑ´Ù. ÇÏÁö¸¸ gettext ÇÔ¼ö¿¡¼­ ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ´Â ¾ÆÁÖ °£´ÜÇÏ°í °­·ÂÇÑ ¹æ¹ýÀÌ ÀÖ´Ù.

¿¹¸¦ µé¾î ´ÙÀ½ÀÇ °¡»óÀûÀÎ °æ¿ì¸¦ »ý°¢ÇØ º»´Ù. GUI ÇÁ·Î±×·¥ÀÌ ´ÙÀ½°ú °°Àº ¸Þ´º¹Ù¸¦ °¡Áö°í ÀÖ´Ù°í ÇÏÀÚ:

+------------+------------+--------------------------------------+
| File       | Printer    |                                      |
+------------+------------+--------------------------------------+
| Open     | | Select   |
| New      | | Open     |
+----------+ | Connect  |
             +----------+

File, Printer, Open, New, Select, ±×¸®°í Connect ¹®ÀÚ¿­À» ¹ø¿ªÇØ¾ß ÇÒ ¶§ gettext ÇÔ¼ö¸¦ ºÎ¸£´Â ºÎºÐÀÌ ÄÚµå ³»¿¡ ÀÖÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸ OpenÀ» ºÎ¸£´Â ºÎºÐÀº µÎ ±ºµ¥°¡ ÀÖÀ» °ÍÀÌ´Ù. ¹ø¿ªÀÌ ´Ù¸¦ ¼öµµ ÀÖ°í, ÀÌ °æ¿ì¿¡ À§¿¡¼­ ¼³¸íÇÑ µô·¹¸¶¿¡ ºüÁø´Ù.

ÇÑ °¡Áö ÇØ°á ¹æ¹ýÀº ÀΰøÀûÀ¸·Î ¹®ÀÚ¿­À» ±¸ºÐµÇµµ·Ï ´Ã¸®´Â °ÍÀÌ´Ù. ÇÏÁö¸¸ ¹ø¿ªÀÌ ¾ø´Ù¸é ¾î¶»°Ô ÇÒ °ÍÀΰ¡? ´Ã·ÁÁø ¹®ÀÚ¿­Àº Ç¥½ÃµÇ¾î¼­´Â ¾È µÈ´Ù. ±×·¯¹Ç·Î ¾à°£ ¼öÁ¤µÈ ¹öÀüÀÇ ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.

¹®ÀÚ¿­À» ´Ã¸®·Á¸é °øÅëµÈ ¹æ¹ýÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î À§ÀÇ ¿¹¿¡¼­ ¹®ÀÚ¿­Àº ´ÙÀ½°ú °°ÀÌ ¸¸µé¾î Áú ¼ö ÀÖ´Ù:

Menu|File
Menu|Printer
Menu|File|Open
Menu|File|New
Menu|Printer|Select
Menu|Printer|Open
Menu|Printer|Connect

ÀÌÁ¦ ¸ðµç ¹®ÀÚ¿­ÀÌ ´Þ¶óÁ³°í, gettext ´ë½Å¿¡ ´ÙÀ½ÀÇ °£´ÜÇÑ wrapper ÇÔ¼ö°¡ »ç¿ëµÈ´Ù. ¸ðµç °ÍÀÌ Àß µ¿ÀÛÇÑ´Ù:

  char *
  sgettext (const char *msgid)
  {
    char *msgval = gettext (msgid);
    if (msgval == msgid)
      msgval = strrchr (msgid, '|') + 1;
    return msgval;
  }

ÀÌ ÀÛÀº ÇÔ¼ö°¡ ÇÏ´Â ¿ªÇÒÀº ¹ø¿ª¹®ÀÌ ¾øÀ» °æ¿ì¸¦ ÆÇ´ÜÇÏ´Â °ÍÀÌ´Ù. ¸®ÅÏ °ªÀÌ ÀÔ·ÂÇÑ °ªÀÎÁö Æ÷ÀÎÅÍ ºñ±³¸¦ ÅëÇؼ­ ¸Å¿ì È¿À²ÀûÀ¸·Î ¾Ë¾Æ ³¾ ¼ö ÀÖ´Ù. ¹ø¿ª¹®ÀÌ ¾ø´Ù¸é ÀÔ·ÂÇÑ ¹®ÀÚ¿­ÀÌ ¸Þ´º Ç׸ñ¿¡ »ç¿ëÇÑ Çü½ÄÀÎ °ÍÀ» ¾Ë °ÍÀÌ°í | ¹®ÀÚ°¡ µé¾î ÀÖÀ» °ÍÀÌ´Ù. ¿ì¸®´Â ´Ü¼øÈ÷ ÀÌ ¹®ÀÚ°¡ ¸¶Áö¸·À¸·Î ³ªÅ¸³­ °÷À» ã°í ±× µÚ¿¡ ÀÖ´Â ¹®ÀÚµéÀ» ¸®ÅÏÇÑ´Ù. ±×°Í»ÓÀÌ´Ù!

¸¸¾à ÀÌ ´Ã¸° ¹®ÀÚ¿­ ÇüŸ¦ ÀÚÁÖ »ç¿ëÇÏ°í gettext¸¦ sgettext·Î (ÀÌ ÇÔ¼ö´Â GUIÀÇ ¾ÆÁÖ ÀϺÎÀÇ °æ¿ì¿¡¸¸ ¾²ÀÏ ¼ö ÀÖ´Ù) ´ëüÇÑ´Ù¸é ±¹Á¦È­ ÇÒ ¼ö ÀÖ´Â ÇÁ·Î±×·¥À» ¸¸µå´Â °Ô °¡´ÉÇÒ °ÍÀÌ´Ù.

´Ù¸¥ gettext ÇÔ¼öµé (dgettext, dcgettext¿Í ngettext °è¿­ ÇÔ¼öµé) ¿ª½Ã °°Àº ¹æ¹ýÀ¸·Î ÀÎÀÚÀÇ °¹¼ö´Â ´Ù¸£Áö¸¸ ¶Ç ´Ù¸¥ ¹öÀüÀÇ ÇÔ¼ö¸¦ ¸¸µé¾î ³¾ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

±×·¯¸é ´ç¿¬È÷ ¿Ö ±×·¯ÇÑ ÇÔ¼ö°¡ GNU gettext ÆÐÅ°Áö¿¡ ¾ø´Â °ÍÀϱî¶ó´Â Àǹ®ÀÌ µç´Ù. ÀÌ Àǹ®¿¡ ´ëÇÑ ´äÀ¸·Î µÎ °¡Áö ÀÌÀ¯°¡ ÀÖ´Ù.

ÇÑ °¡Áö ´õ ¸»ÇÒ °ÍÀÌ ÀÖ´Ù. À§¿¡¼­ ÇÊ¿äÇÑ ·¡ÆÛ ÇÔ¼ö¿¡¼­ ¹ø¿ª ¹®ÀÚ¿­ ÀÚü´Â ´Ã·ÁÁöÁö ¸»¾Æ¾ß ÇÑ´Ù. ´Ã·ÁÁø msgid´Â ³í¸®ÀûÀÎ °ÍÀÌ´Ù. ¹®ÀÚ¿­À» ±¸ºÐÇÒ ÇÊ¿ä´Â ¾øÀ¸¸ç (±× ¹®ÀÚ¿­µéÀº Å°·Î ¾²¿©Áö´Â °ÍÀÌ ¾Æ´Ï±â ¶§¹®ÀÌ´Ù) ÀÌ·¸°Ô ÇÔÀ¸·Î½á ¾à°£ÀÇ ¸Þ¸ð¸®¿Í µð½ºÅ© °ø°£À» Àý¾àÇÑ´Ù.

*gettext ÇÔ¼ö¸¦ ÃÖÀûÈ­Çϱâ

¿©±â¼­, GNU gettext¸¦ »ç¿ëÇÒ¶§ »ý±â´Â ÁÁÀº Á¡¿¡ ´ëÇØ ¾ê±âÇÑ´Ù. ¸î¸î µ¶ÀÚµéÀº ±¹Á¦È­µÈ ÇÁ·Î±×·¥¿¡¼­ ¾î¶² ¹®ÀÚ¿­ÀÌ ¹Ýº¹¹® ¾È¿¡¼­ ¹ø¿ªµÉ °æ¿ì, ¼Óµµ°¡ ´À·ÁÁú ¼ö ÀÖ´Ù°í ÁöÀûÇÒ ¼öµµ ÀÖ´Ù. ±× ¹Ýº¹¹® ¾È¿¡¼­ ¹®ÀÚ¿­ÀÌ °æ¿ì¿¡ µû¶ó ¹Ù²ð ¶§´Â ¾î¿ ¼ö ¾øÁö¸¸, ¹®ÀÚ¿­ÀÌ ¾ðÁ¦³ª °°Àº °æ¿ì´Â ½Ã°£³¶ºñÀÏ »ÓÀÌ´Ù. ´ÙÀ½ ¿¹¸¦ º¸ÀÚ:

{
  while (...)
    {
      puts (gettext ("Hello world"));
    }
}

¿©·¯¹ø ½ÇÇàµÇ´Â »çÀÌ¿¡ ·ÎÄÉÀÏÀÌ ¹Ù²îÁö ¾Ê´Â ÇÑ, ¹ø¿ªµÈ ¹®ÀÚ¿­ÀÇ °ªµµ Ç×»ó °°´Ù. ÇÑ °¡Áö ¹æ¹ýÀº:

{
  str = gettext ("Hello world");
  while (...)
    {
      puts (str);
    }
}

ÇÏÁö¸¸ ÀÌ ¹æ¹ýÀº ¸ðµç °æ¿ì¿¡ ´ëÇØ »ç¿ëÇÒ ¼ö ¾ø°í (¿¹¸¦ µé¾î ·ÎÄÉÀÏ ¼±ÅÃÀÌ ´Þ¶óÁú °æ¿ì) Àбâ ÁÁÁöµµ ¾Ê´Ù.

ÀÌ·¯ÇÑ ÀÌÀ¯·Î, GNU gettext´Â ÀÌÀüÀÇ ¹ø¿ª °á°ú¿¡ ´ëÇؼ­ ij½ÌÇÑ´Ù. °°Àº ¹ø¿ªÀÌ µÎ ¹ø ¿äûµÇ¸é¼­ Áß°£¿¡ »õ·Î¿î ¸Þ¼¼Áö ¸ñ·ÏÀ» ÀоîµéÀÌÁö ¾Ê¾Ò´Ù¸é, gettext´Â µÎ ¹ø°ÀÇ °æ¿ì °á°ú¸¦ ÇÑ ¹øÀÇ Ä³½¬ °Ë»öÀ¸·Î ã¾Æ³¾ °ÍÀÌ´Ù.

µÎ°¡Áö ÀÎÅÍÆäÀ̽ºÀÇ ºñ±³

°è¼ÓÇÒ ¾ê±â´Â ¾à°£ ÆÈÀÌ ¾ÈÀ¸·Î ±Á´Â ¾ê±â´Ù. À§¿¡¼­ ¸»ÇÑ ¹Ù¿Í °°ÀÌ ¿ì¸®´Â GNU gettext¸¦ À¯´ÏÆ÷·³ÀÇ Á¦¾È¼­¿¡ ¸Â°Ô ±¸ÇöÇß°í ±×·²¸¸ÇÑ ÀÌÀ¯°¡ ÀÖ¾ú´Ù. ÇÏÁö¸¸ ¾î¶»°Ô ÀÌ·± °áÁ¤À» ³»¸®°Ô µÇ¾ú´ÂÁö ¾Ë·ÁÁà¾ß ÇÒ °ÍÀÌ´Ù.

¸Ç óÀ½¿¡ ¿ì¸®´Â °³¹ß °úÁ¤¿¡ ´ëÇØ »ý°¢Çß´Ù. ¿ì¸®°¡ gettext¿¡ µé¾î ÀÖ´Â °íÀ¯¾î Áö¿ø ±â´ÉÀ» »ç¿ëÇØ ÀÀ¿ë ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¶§, º¸Åë ÀÌ·¸°Ô ÇÑ´Ù. ÀÏ´Ü »ç¿ëÀÚ¿¡°Ô Ãâ·ÂµÇ´Â, Áï ¹ø¿ªµÇ¾ß ÇÏ´Â ¹®ÀÚ¿­À» ¸¸³ª¸é "..." ´ë½Å¿¡ gettext("...")¸¦ »ç¿ëÇÑ´Ù. ¿ì¸®´Â °¢ ¼Ò½º ÆÄÀÏÀÇ ½ÃÀÛ ºÎºÐ¿¡ (ȤÀº ±âº» Çì´õ ÆÄÀÏ¿¡) ÀÌ·¸°Ô Á¤ÀÇÇÑ´Ù.

#define gettext(String) (String)

ÀÌ Á¤ÀÇ´Â ½Ã½ºÅÛÀÌ C ¶óÀ̺귯¸® ³»¿¡ gettext ÇÔ¼ö¸¦ Áö¿øÇÏ¸é ¾²Áö ¾ÊÀ» ¼ö ÀÖ´Ù. ÀÏ´Ü ÀÌ Äڵ带 ÄÄÆÄÀÏÇÏ¸é °á°ú´Â NLS Äڵ尡 »ç¿ëµÇÁö ¾ÊÀº °Í°ú µ¿ÀÏÇÏ´Ù. GNU gettext Äڵ带 »ìÆ캸¸é gettext("...") ´ë½Å¿¡ _("...")¸¦ »ç¿ëÇÞ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÌ·¸°Ô ÇÏ¸é ¹®ÀÚ¿­À» ¹ø¿ªÇϱâ À§ÇØ ´õ ½á¾ß ÇÒ ±ÛÀÚÀÇ °¹¼ö¸¦ 3ÀÚ·Î ÁÙÀÏ ¼ö ÀÖ´Ù.

ÀÌÁ¦ »ý»êÀûÀÎ ÇÁ·Î±×·¥ÀÌ ÇÊ¿äÇϹǷÎ, ¾ÕÀÇ Á¤Àǹ®À» ÀÌ·¸°Ô ¹Ù²Û´Ù

#define _(String) (String)

ȤÀº

#include <libintl.h>
#define _(String) gettext (String)

¸¶Áö¸·À¸·Î, ¹ø¿ªÇÒ ¼ö ÀÖ´Â ¹®ÀÚ¿­ÀÌ µé¾î ÀÖ´Â ¸ðµç ¼Ò½º Äڵ忡 ´ëÇØ `xgettext' ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°¸é µÈ´Ù: ¿ì¸®´Â »ç¿ë°¡´ÉÇÑ ¹ø¿ª¹®µé¿¡ ÀÇÁ¸ÇÏÁö ¾ÊÀ¸¸é¼­ µ¿ÀÛÇÏ´Â ÇÁ·Î±×·¥ÀÌ ÀÖÁö¸¸, ÀÌ ÇÁ·Î±×·¥Àº ¾ðÁ¦µçÁö »ç¿ë°¡´ÉÇÑ ¹ø¿ª¹®ÀÌ »ý±â¸é ±× ¹ø¿ª¹®À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

°°Àº °úÁ¤ÀÌ gettext_noop¿¡ »ç¿ëµÈ´Ù (see section ¹ø¿ªµÉ ¼ö ÀÖ´Â ¹®ÀÚ¿­ÀÇ Æ¯º°ÇÑ °æ¿ì). ÀÏ´Ü gettext_noop¸¦ ¾Æ¹«°Íµµ ÇÏÁö ¾Ê´Â ¸ÅÅ©·Î·Î Á¤ÀÇÇÑ´Ù. ±× ´ÙÀ½¿¡ ´ÙÀ½ Äڵ带 »ç¿ëÇÒ ¼ö ÀÖ´Ù:

#define gettext_noop(String) (String)
#define N_(String) gettext_noop (String)

N_Àº _¿Í ºñ½ÁÇÑ °£·«ÇÑ ÇüÅÂÀÌ´Ù. GNU gettext `po/' µð·ºÅ丮ÀÇ `Makefile'Àº ±âº»ÀûÀ¸·Î ÀÌ °£·«ÇÑ ÇüŵéÀ» ¾Ë°í ÀÖÀ¸¹Ç·Î ¿©±âÀÇ Á¦¾ÈÀ» ±×´ë·Î µû¸£´Â ÆíÀÌ ´õ ½¬¿ï °ÍÀÌ´Ù.

catgets¸¦ »ý°¢ÇØ º¸ÀÚ. °¡Àå Å« ¹®Á¦´Â ÇÁ·Î±×·¡¸ÓÀÇ ÀÏÀÌ´Ù. ¾ðÁ¦µçÁö ¹ø¿ªµÉ ¼ö ÀÖ´Â ¹®ÀÚ¿­À» ¸¸³ª¸é ¾î¶² ¼ýÀÚ(ȤÀº Á¤ÀÇµÈ »ó¼ö)¸¦ ÁöÁ¤ÇØ¾ß ÇÏ°í, ÀÌ ¼ýÀÚ¸¦ ¸Þ¼¼Áö ¸ñ·Ï ÆÄÀÏ¿¡µµ ÁöÁ¤ÇØ¾ß ÇÑ´Ù. ÇÁ·Î±×·¡¸Ó´Â Áߺ¹Çؼ­ Ç׸ñÀ» ¾²Áö ¾Êµµ·Ï, Áߺ¹µÈ ¸Þ¼¼Áö ID¸¦ ¾²Áö ¾Êµµ·Ï ÇÏ´Â °Í±îÁö ½Å°æÀ» ½á¾ß ÇÑ´Ù. GNU gettext ÇÁ·Î±×·¥°ú °°Àº ÁúÀ» °¡Áø ¸Þ¼¼Áö ¸ñ·ÏÀ» ¸¸µå·Á¸é ±× ¹®ÀÚ¿­¿¡ ´ëÇÑ ¼³¸í°ú ¼Ò½º ÄÚµåÀÇ À§Ä¡¸¦ ¸Þ¼¼Áö ¸ñ·Ï¿¡ ÁÖ¼®À¸·Î ³Ö¾î¾ß ÇÑ´Ù. ÀÌ·± ÀÏÀº °ÅÀÇ ºÒ°¡´ÉÇÑ ÀÓ¹«(Mission: Impossible)ÀÌ´Ù.

ÇÏÁö¸¸ »ç¶÷µéÀº ¾î¶² Á¡¿¡¼­´Â catgets¿¡ ÀåÁ¡ÀÌ ÀÖ´Ù°íµµ ¸»ÇÑ´Ù. ¾î¶² ¹®ÀÚ¿­ ³»ÀÇ ´Ü¾î°¡ Àִµ¥, ÀÌ ¹®ÀÚ¿­ÀÌ ¿©·¯ À§Ä¡¿¡¼­ »ç¿ëµÇ°í, ±× ´Ü¾î°¡ °æ¿ì¿¡ µû¶ó ´Ù¸£°Ô ¹ø¿ªÇØ¾ß °æ¿ìÀÌ´Ù. ¿¹¸¦ µé¾î:

printf ("%s: %d", gettext ("number"), number_of_errors)

printf ("you should see %d %s", number_count,
        number_count == 1 ? gettext ("number") : gettext ("numbers"))

¿©±â¿¡¼­ ¿ì¸®´Â "number" ¶ó´Â ¹®ÀÚ¿­¿¡ ´ëÇØ µÎ¹ø ¹ø¿ªÇØ¾ß ÇÑ´Ù. ¼³·É ¿µ¾î ÀÌ¿ÜÀÇ ¾ð¾î¸¦ ¸ð¸¥´Ù°í Çصµ ÀÌ µÎ ´Ü¾î°¡ ´Ù¸¥ Àǹ̸¦ °¡Áø´Ù´Â °É ¾Ë ¼ö ÀÖ´Ù. µ¶ÀϾ¼­´Â ù ¹ø°´Â "Anzahl"(¹øÈ£)·Î ¹ø¿ªµÇ°í, µÎ¹ø°´Â "Zahl"(°¹¼ö)·Î ¹ø¿ªµÈ´Ù.

¿©±â¿¡¼­ À§ÀÇ ¿¹´Â Á¤¸» ¿¹¿ÜÀûÀÎ °æ¿ì¶ó°í ¸»ÇÒ ¼ö ÀÖ´Ù. ±×¸®°í ½ÇÁ¦·Î ±×·¸´Ù! ÀÌ ¹®Á¦¿¡¼­ ¿ì¸® ¿ª½Ã ÀÌ·¯ÇÑ °æ¿ì´Â ¿¹¿ÜÀûÀ̶ó°í ´À³¢°í ÀÖ°í, ÀÌ ¹®Á¦´Â ±×·¸°Ô Áß¿äÇÏÁö ¾Ê´Ù°í °áÁ¤À» ³»·È´Ù. À§ÀÇ ¹®Á¦¿¡ ´ëÇÑ ÇØ°áÃ¥Àº ¸Å¿ì ½±´Ù:

printf ("%s %d", gettext ("number:"), number_of_errors)

printf (number_count == 1 ? gettext ("you should see %d number")
                          : gettext ("you should see %d numbers"),
        number_count)

¿ì¸®´Â ÀÌ·± ¹æ¹ýÀ¸·Î ¸ðµç Ãæµ¹À» ÇÇÇØ°¥ ¼ö ÀÖ´Ù°í ¹Ï´Â´Ù. À§ ¹æ¹ýÀÌ ¾î·Æ´Ù¸é Ãæµ¹ÀÌ »ý±â´Â ¹®ÀÚ¿­À» Á¶±Ý ´Ù¸£°Ô ¹Ù²Ü ¼öµµ ÀÖ´Ù. ¾î·µç ÀÌ ¹®Á¦¿¡ ´ëÇÑ ÇØ°áÀÌ ºÒ°¡´ÉÇÏÁö´Â ¾Ê´Ù.

catgets¿¡¼­´Â ¿©·¯ ¹ø¿ª¿¡ ´ëÇؼ­ °°Àº Ç׸ñÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ gettext´Â ÀÌ °æ¿ì¿¡ ´ëÇØ ¶Ç ´Ù¸¥, È®Àå °¡´ÉÇÑ ¾Ö¸ÅÇÔÀ» ÇØ°áÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇÑ´Ù: See section ¾Ö¸ÅÇÔÀ» ÇØ°áÇϱâ.

ÇÁ·Î±×·¥¿¡ libintl.a »ç¿ëÇϱâ

`libintl.h'ÀÇ ¹öÀü 0.9.4´Â ´Üµ¶À¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. Áï, º°µµÀÇ ÇÔ¼ö¸¦ ¾²Áö ¾Ê°íµµ `libintl.h'¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. `Makefile'Àº $(prefix)¸¦ »ç¿ëÇØ ¼±ÅÃµÈ µð·ºÅ丮¿¡ Çì´õ ÆÄÀÏ°ú ¶óÀ̺귯¸®¸¦ ¼³Ä¡ÇÑ´Ù.

ÇÑ °¡Áö ¿¹¿Ü´Â HP-UX 10.01 ½Ã½ºÅÛÀÌ´Ù. ¿©±â¿¡¼­´Â C ¶óÀ̺귯¸®¿¡ alloca ÇÔ¼ö°¡ ¾ø´Ù (±×¸®°í HP ÄÄÆÄÀÏ·¯´Â alloca¸¦ ÀζóÀÎÇÏÁö ¸øÇÑ´Ù). ÇÏÁö¸¸ ÀÌ·± ¹Ùº¸°°Àº ½Ã½ºÅÛ¶§¹®¿¡ Àüü ¶óÀ̺귯¸®¸¦ ´Ù½Ã ÀÛ¼ºÇ϶ó´Â °Ç ¾Æ´Ï´Ù. ±× ´ë½Å¿¡ libintl.a¸¦ »ç¿ëÇÏ´Â ¸ðµç ÆÐÅ°Áö¿¡ alloca ÇÔ¼ö¸¦ Æ÷ÇÔÇÑ´Ù.

gettext °í¼ö°¡ µÇ±â

GNU gettext ¶óÀ̺귯¸®ÀÇ ±â´ÉÀ» ¿ÏÀüÈ÷ È°¿ëÇÏ·Á¸é, ºÐ¸í ¼Ò½ºÄڵ带 Àд °ÍÀÌ ÁÁ´Ù. ÇÏÁö¸¸ (º¹ÀâÇϱ⵵ ÇÑ) Äڵ带 ÀÐÀ» ½Ã°£ÀÌ ¾ø´Â »ç¶÷µéÀÌ ¾Ë¾ÆµÎ¸é ÁÁÀ» ¸¸ÇÑ °ÍÀº:

ÇÁ·Î±×·¡¸Ó ÀåÀ» À§ÇÑ Àӽà ¸Þ¸ð

Àӽà - µÎ°³ÀÇ °¡´ÉÇÑ ±¸Çö

¾ð¾î¿¡ °ü°è¾ø´Â ¸Þ¼¼Áö 󸮸¦ À§ÇÑ ¹æ¹ýÀ¸·Î µÎ°¡Áö°¡ °æÀïÇÏ°í ÀÖ´Ù: X/OpenÀÇ catgets¿Í, UniforumÀÇ gettextÀÌ´Ù. catgets ¹æ¹ýÀº ¸Þ¼¼Áö¸¦ ¼ýÀÚ·Î À妽ºÇÑ´Ù; gettext ¹æ¹ýÀº ±× ¸Þ¼¼ÁöÀÇ ¿µ¾î ¹®ÀÚ¿­·Î À妽ºÇÑ´Ù. catgets ¹æ¹ýÀº ´õ ¿À·¡µÇ¾ú°í ´õ ¸¹Àº À¯´Ð½º º¥´õµéÀÌ Áö¿øÇÑ´Ù. gettext ¹æ¹ýÀº ½ãÀÌ Áö¿øÇÏ°í, COSE multi-vendor initiative°¡ Áö¿øÇÑ´Ù´Â ¸»À» µéÀº ÀûÀÌ ÀÖ´Ù. ÀÌ µÎ°¡Áö ¹æ¹ýÀº ¸ðµÎ POSIX Ç¥ÁØÀÌ ¾Æ´Ï´Ù; POSIX.1 À§¿øȸ´Â ÀÌ ºÐ¾ß¿¡ ´ëÇØ ¾î¶°ÇÑ ÇÕÀǵµ º¸Áö ¸øÇß´Ù.

¾Æ¹«°Íµµ Ç¥ÁØÀÌ ¾Æ´Ï´Ù. POSIX.1 À§¿øȸ´Â gettext¸¦ »ç¿ëÇÒ Áö catgets(XPG)¸¦ »ç¿ëÇÒÁö¿¡ ´ëÇØ ÀÇ°ßÀÌ ¾ù°¥·È´Ù. °á±¹ À§¿øȸ´Â ¾Æ¹« °á·ÐÀ» ³»¸®Áö ¸øÇß°í ¸Þ¼¼Áö ½Ã½ºÅÛ¿¡ °üÇؼ­´Â Ç¥ÁØÀÇ ÀϺΰ¡ µÇÁö ¸øÇß´Ù. ³ª´Â POSIX Ç¥ÁØ¿¡ XPG3 ¸Þ¼¼Áö ÀÎÅÍÆäÀ̽º°¡ "...ÀÌ¹Ì ±¸ÇöµÈ ¸Þ¼¼Áö ½Ã½ºÅÛÀÇ ÇÑ °¡Áö ¿¹·Î¼­..." Æ÷Ç﵃ °ÍÀ̶ó°í ¹Ï´Â´Ù.

POSIX À§¿øȸ´Â ¾ÆÁÖ Á¶½É½º·´±â ¶§¹®¿¡, ¾î¶² ´Ù¸¥ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏÁö ¸»°í ¾î¶² ƯÁ¤ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇ϶ó°í ¸»ÇÏÁö´Â ¾ÊÀ» °ÍÀÌ´Ù. ÀÌ ÁÖÁ¦¿¡ °üÇؼ­´Â Programming for Internationalized FAQ¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù.

Àӽà - catgets¿¡ ´ëÇØ

catgets¸¦ ±â¹ÝÀ¸·Î »ç¿ëÇÏ´Â ¹®Á¦¿¡ °üÇØ µÚ´Ê°Ô ¸î °¡Áö ÅäÀÇ°¡ ÀÖ¾ú´Ù. ³ª´Â ÀÌ Åä·Ð¿¡ ´ëÇÑ µÎ°¡Áö ¹ÝÀÀÀ» ¾Ë¸®°í ¾Ç¸¶°¡ Á¶±Ý ´õ ÁÁ¾ÆÇÏ´Â °ÍÀ» ¼±ÅÃÇÒ °ÍÀÌ´Ù (¿ªÀÚ ÁÖ: play devil's advocate for a little bit).

³ª´Â catgets°¡ Á¶±Ý ´õ Àß ¼³°èµÇ¾ß ÇÑ´Ù´Â Á¡¿¡´Â ºÎÀÎÇÏÁö ¾Ê´Â´Ù. catgets´Â ÀÌ¹Ì ÁöÀûµÇ¾î ¿Â ¹Ù¿Í °°ÀÌ ³Ê¹« Á¦ÇÑÀÌ ¸¹´Ù.

ÇÏÁö¸¸, ÀÏ°ü¼º°ú Ç¥ÁØ¿¡ ´ëÇØ ¾ê±âÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. À¯´Ð½º ¼ÒÇÁÆ®¿þ¾î¸¦ ¸¸µé ¶§ ÈçÈ÷ ¹ß»ýÇÏ´Â ¹®Á¦´Â À¯´Ð½º Ç÷§Æûµé »çÀÌÀÇ Æ÷Æà °¡´É¼º ¹®Á¦ÀÌ´Ù. ¸ðµç À¯´Ð½º º¥´õ´Â Àڱ⠿üÁ¦¸¦ º¸°í Çâ»ó½Ãų ¼ö ÀÖ´Â ºÎºÐÀ» ã´Â °Íó·³ º¸ÀδÙ. ÀǽÉÇÒ ³ªÀ§ ¾øÀÌ ÀÌ·± ¼öÁ¤Àº ±â¼ú Çõ½ÅÀ» À§ÇØ ÇÊ¿äÇÏ°í, ¹®Á¦¸¦ ÇØ°áÇÑ´Ù. ÇÏÁö¸¸, ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚ´Â ¼ö¸¹Àº Ç÷§Æûµé »çÀÌ¿¡ ÀÌ·± º¯È­¿¡ ´ëÀÀÇÏ´Â µ¥ ³Ê¹« ¸¹Àº ½Ã°£À» ¼Ò¸ðÇÑ´Ù.

±×¸®°í ÀÌ·¯ÇÑ ¹®Á¦´Â À¯´Ð½º º¥´õµéÀÌ ±×µé ½Ã½ºÅÛ¿¡ ´ëÇÑ Ç¥ÁØÈ­¸¦ ½ÃÀÛÇϵµ·Ï ¸¸µé¾ú´Ù. ÀÌ ¹®Á¦°¡ Spec1170°¡ ³ª¿Àµµ·Ï ÀÚ±ØÇÑ °ÍÀÌ´Ù. ¸ðµç ÁÖ¿ä À¯´Ð½º º¥´õ´Â ÀÌ Ç¥ÁØÀ» Áö¿øÇÏ´Â µ¥ Âü°¡Çß°í, ¸ðµç À¯´Ð½º ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚ´Â ±â»µÇϸ鼭 ÀÌ Ç¥ÁØÀ» µû¸£´Â ¼ÒÇÁÆ®¿þ¾î¸¦ ÀÛ¼ºÇÏ°í ±×³É °¢ Ç÷§Æû¿¡ µû¶ó ´Ù½Ã ÄÄÆÄÀÏÇÏ¸é µÇ´Â (autoconf¸¦ »ç¿ëÇÒ ÇÊ¿ä¾øÀÌ) ³¯À» ±â´Ù·È´Ù.

³»°¡ ¾Æ´Â ¹Ù·Î´Â, Spec1170Àº ´ë·« X/Open Portability Guidelines ¹öÀü 4(XPG4)¿¡ ±âÃÊÇÏ°í ÀÖ´Ù. catgets¿Í °ü°èµÈ °ÍµéÀÌ XPG4¿¡ Á¤ÀǵǾî Àֱ⠶§¹®¿¡, catgets°¡ Spec1170ÀÇ ÀϺΰ¡ µÇ°í, ¸ðµç Unix ½Ã½ºÅÛÀÇ Ç¥ÁØ ÄÄÆ÷³ÍÆ®°¡ µÉ °ÍÀ̶ó°í ¹Ï°Ô µÇ¾ú´Ù.

Àӽà - ¿Ö ÇÑ °¡Áö¸¸ ±¸ÇöÇØ¾ß Çϳª

¸Þ¼¼Áö ¸ñ·ÏÀ» »ç¿ëÇϱâ À§ÇØ µÎ°¡Áö Á¾·ùÀÇ ½Ã½ºÅÛÀ» ¼³Ä¡ÇÏ´Â °Ç ³¶ºñ·Î º¸ÀÏ ¼öµµ ÀÖ´Ù. ¿ì¸®°¡ catgetsÀÇ ¾àÁ¡¿¡ ´ëÇØ ºñÆÇÇÑ´Ù¸é ¿ÏÀüÈ÷ »õ·Î¿î ½Ã½ºÅÛÀ» ¸¸µå´Â °Íº¸´Ù´Â catgets¸¦ (ȣȯ¼ºÀÌ ÀÖµµ·Ï) È®ÀåÇÏ´Â ÆíÀÌ ÁÁÁö ¾Ê´Â°¡. ¶Ç ´Ù¸¥ ÇÑÆíÀ¸·Î´Â ÇÑ°³ÀÇ ¿î¿µÃ¼Á¦¿¡ µÎ°¡Áö ¸Þ¼¼Áö ¸ñ·ÏÀÌ ¼­Ä¡µ· °æ¿ì¸¦ ¸¸³¯ ¼ö ÀÖ´Ù - ÇÑ°³´Â GNU gettext¸¦ ±¹Á¦È­ µµ±¸·Î »ç¿ëÇÏ´Â ÆÐÅ°Áö¿¡¼­ ¾²´Â ¸Þ¼¼Áö, ¶Ç Çϳª´Â ±× ¿ÜÀÇ ¼ÒÇÁÆ®¿þ¾îµéÀÌ (catgets) »ç¿ëÇÏ´Â ¸Þ¼¼Áö. ¾µµ¥¾øÀÌ ºÎÇ®¾î ÀÖ´Â °É±î?

´Ù¸¥ ¸Þ¼¼Áö ¸ñ·Ï Á¢±Ù ½Ã½ºÅÛÀ» ±¸ÇöÇÑ´Ù°í °¡Á¤ÇØ º¸ÀÚ. ¾î¶² ½Ã½ºÅÛÀ» ÃßõÇØ¾ß ÇÒ±î? ÃÖ¼ÒÇÑ ¸®´ª½º¿¡¼­´Â, °¡´ÉÇÑ ÇÑ ¸¹Àº ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚ¸¦ ²ø¾îµé¾î¾ß ÇÑ´Ù. Áï ¿ì¸®´Â °¡´ÉÇÑ ÇÑ ±×µéÀÇ ¼ÒÇÁÆ®¿þ¾î°¡ ½±°Ô Æ÷Æõǵµ·Ï ÇØ¾ß ÇÑ´Ù. ±×¸®°í ±×°ÍÀº catgets¿¡ ´ëÇÑ Áö¿øÀ» ¶æÇÑ´Ù. ¿ì¸®´Â libintl Äڵ带 ¿ì¸®ÀÇ libc ³»¿¡ ±¸ÇöÇßÁö¸¸, ¶Ç´Ù¸¥ ¸Þ¼¼Áö Á¢±Ù ¹æ¹ýµµ ¿ì¸® libc³»¿¡ Æ÷ÇÔÇØ¾ß ÇÑ´Ù´Â ¶æÀΰ¡? ±×¸®°í libintl + catgets°¡ ¾Æ´Ñ ¹æ¹ýÀ» ¾²·Á°í ÇÏ´Â »ç¶÷µéÀÇ °æ¿ì´Â ¾î¶°ÇÑ°¡. ±× »ç¶÷µéÀÌ ¼ÒÇÁÆ®¿þ¾î¸¦ ¶Ç´Ù¸¥ Ç÷§ÆûÀ¸·Î Æ÷ÆÃÇÒ °æ¿ì, front-end (libintl) ÄÚµå¿Í back-end (catgets°¡ ¾Æ´Ñ) Äڵ带 ¸ðµÎ Æ÷ÇÔÇØ¾ß ÇÑ´Ù.

ÇÏÁö¸¸ ¸Þ¼¼Áö ¸ñ·Ï Áö¿øÀº ºù»êÀÇ ÀÏ°¢¿¡ ºÒ°úÇÏ´Ù. ¿©·¯ °¡Áö ·ÎÄÉÀÏ ¹üÁֵ鿡 ´ëÇÑ µ¥ÀÌŸÀÇ °æ¿ì´Â ¾î´õÇÑ°¡. ÀÌ ·ÎÄÉÀÏ µ¥ÀÌŸµµ ¸¹Àº ¾àÁ¡ÀÌ ÀÖ´Ù. ¿ì¸®´Â À̰͵µ ¹ö¸®°í ¶È°°Àº ¸ñÀûÀÇ ¶Ç´Ù¸¥ ¶óÀ̺귯¸®¸¦ ¸¸µé¾î¾ß Çϴ°¡ (libintlÀ» ¸Þ¼¼Áö ¸ñ·Ï Áö¿ø ÀÌ»óÀ¸·Î È®ÀåÇØ¾ß Çϴ°¡)?

Áö±Ý±îÁö ¹ßÀüµÇ¾î ¿Â ¸¹Àº À¯´Ð½ºÀÇ ÀÏºÎ¿Í °°ÀÌ, ¿ì¸®´Â °ú°ÅÀÇ È£È¯¼ºÀ» ÁöÅ°¸é¼­ ¹Ì·¡ÀÇ Çõ½ÅÀ» À§ÇÑ ¾µ¸¸ÇÑ ±â´ÉÇâ»ó »çÀ̸¦ Àß Á¶È­ÇØ¾ß ÇÒ ³­Ã³ÇÑ ÀÔÀå¿¡ ³õ¿© ÀÖ´Ù.

Àӽà - ¸Þ¸ð

X/OpenÀº ¾ÆÁÖ ´Ê°Ô Ç¥ÁØÈ­¸¦ Åë°ú½ÃÄױ⠶§¹®¿¡, ¸¹Àº ±¸Çö¹°ÀÇ ÃÖÁ¾ ÇüŸ¦ º¸¸é Àú¸¶´Ù ´Ù¸£´Ù. ³»°¡ °¡Áø µÎ°³ÀÇ ½Ã½ºÅÛ(¿¾³¯ ¸®´ª½º catgets¿Í Ultrix-4)µµ ÀÌ»óÇÑ Â÷ÀÌÁ¡ÀÌ ÀÖ´Ù.

ÁÁ´Ù. ¸¶Áö¸·À¸·Î °íÄ£ °ÍÀ» Æ÷ÇÔ½ÃÄѼ­ GNU/¸®´ª½º libc gettext ÇÔ¼ö¸¦ ¸¸µå´Â µ¥ ½Ã°£À» ½ñ¾Æ¾ß ÇÑ´Ù. ÀÌÁ¦ ¹Ì·¡¿¡´Â gettext¸¦ °¡Áø ½Ã½ºÅÛÀº ¼Ö¶ó¸®½º¸¸ÀÌ ¾Æ´Ï´Ù.


Go to the first, previous, next, last section, table of contents.