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 ¹®ÀÚ¿·Î ¸¸µé±â¸¦
±ÇÇÑ´Ù.
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 ÇÁ·ÎÁ§Æ®ÀÇ ÄÚµù Ç¥ÁØÀº ÇÁ·Î±×·¥ÀÌ ¿µ¾î·Î
¸¸µé¾î Áöµµ·Ï ±ÔÁ¤ÇÏ°í Àֱ⠶§¹®¿¡, ÀÌ ÇØ°á¹æ¹ýÀº ±× ¸ñÀû¿¡´Â ºÎÇÕÇÑ´Ù.
ngettext
ÇÔ¼ö´Â gettext
ÇÔ¼ö¿Í ºñ½ÁÇÏ°Ô ¸Þ¼¼Áö ¸ñ·ÏÀ» °°Àº
½ÄÀ¸·Î ã´Â´Ù. ÇÏÁö¸¸ ngettext
´Â µÎ °³ÀÇ ÀÎÀÚ°¡ ´õ ÀÖ´Ù.
msgid1 ÀÎÀÚ´Â ¹ø¿ªÇÒ ¹®ÀÚ¿ÀÇ ´Ü¼öÇüÀÌ´Ù. ÀÌ ¹®ÀÚ¿Àº ¸ñ·ÏÀ» ã´Â
Å°·Îµµ ¾²ÀδÙ. msgid2 ÀÎÀÚ´Â º¹¼öÇüÀÌ´Ù. nÀº º¹¼öÇüÀ»
°áÁ¤ÇÏ´Â µ¥ ¾²ÀδÙ. ¸Þ¼¼Áö ¸ñ·ÏÀ» ãÀ» ¼ö ¾ø´Â °æ¿ì¿¡ n == 1
À̸é
msgid1ÀÌ ¸®Åϵǰí, ±×·¸Áö ¾ÊÀº °æ¿ì msgid2
¸¦ ¸®ÅÏÇÑ´Ù.
ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ¿¹´Â ´ÙÀ½°ú °°´Ù:
printf (ngettext ("%d file removed", "%d files removed", n), n);
n˼ printf
ÇÔ¼ö¿¡µµ ³Ñ°ÜÁà¾ß ÇÑ´Ù´Â °Í¿¡ À¯ÀÇÇÑ´Ù.
ngettext
ÇÔ¼ö¿¡¸¸ ³Ñ°ÜÁÖ´Â °Í¸¸À¸·Î´Â ¾È µÈ´Ù.
dngettext
´Â ¸Þ¼¼Áö ¸ñ·ÏÀÌ ¼±ÅõǴ ¹æ¹ý¿¡¼ dgettext
ÇÔ¼ö¿Í ºñ½ÁÇÏ´Ù. Â÷ÀÌÁ¡Àº º¹¼öÇüÀ» À§ÇÑ µÎ °³ÀÇ ÀÎÀÚ¸¦ ´õ ¹Þ´Â´Ù´Â
°ÍÀÌ´Ù. ÀÌ ÀÎÀÚ´Â ngettext
¿Í °°Àº ¹æ½ÄÀ¸·Î ÀÌ¿ëµÈ´Ù.
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;ÀÌ·¯ÇÑ ¾ð¾î´Â ´ÙÀ½°ú °°´Ù:
Plural-Forms: nplurals=2; plural=n != 1;(ÁÖÀÇ: ºÒ¸®¾ð ½ÄÀÌ 0 ¾Æ´Ï¸é 1ÀÇ °ªÀ» °¡Áø´Ù´Â C ¼ö½ÄÀÇ Æ¯Â¡À» ÀÌ¿ëÇß´Ù.) ÀÌ·¯ÇÑ ¾ð¾î´Â ´ÙÀ½°ú °°´Ù:
Plural-Forms: nplurals=2; plural=n>1;ÀÌ·¯ÇÑ ¾ð¾î´Â ´ÙÀ½°ú °°´Ù:
Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;ÇØ´ç ¾ð¾î´Â ´ÙÀ½°ú °°´Ù:
Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;ÀÌ·¯ÇÑ ¾ð¾î´Â ´ÙÀ½°ú °°´Ù:
Plural-Forms: nplurals=3; \ plural=n%10==1 && n%100!=11 ? 0 : \ n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2;ÀÌ·¯ÇÑ ¾ð¾î´Â ´ÙÀ½°ú °°´Ù:
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;ÀÌ·¯ÇÑ ¾ð¾î´Â ´ÙÀ½°ú °°´Ù:
Plural-Forms: nplurals=3; \ plural=n==1 ? 0 : \ n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;ÀÌ·¯ÇÑ ¾ð¾î´Â ´ÙÀ½°ú °°´Ù:
Plural-Forms: nplurals=4; \ plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;ÀÌ·¯ÇÑ ¾ð¾î´Â ´ÙÀ½°ú °°´Ù:
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 ÆÐÅ°Áö¿¡ ¾ø´Â °ÍÀϱî¶ó´Â Àǹ®ÀÌ µç´Ù. ÀÌ Àǹ®¿¡ ´ëÇÑ ´äÀ¸·Î µÎ °¡Áö ÀÌÀ¯°¡ ÀÖ´Ù.
|
¸¦ »ç¿ëÇߴµ¥,
ÀÌ°ÍÀº ¹®¸Æ¿¡ ÀûÇÕÇÑ ¹®ÀÚÀ̱⵵ ÇÏ°í ¸Þ¼¼Áö ¹®ÀÚ¿¿¡ Àß ¾²ÀÌÁö ¾Ê´Â
¹®ÀÚÀ̱⵵ Çϱ⠶§¹®ÀÌ´Ù.
ÇÏÁö¸¸ ±× ¹®ÀÚ°¡ ¸Þ¼¼Áö ¹®ÀÚ¿¿¡ ÀÌ¿ëµÇ´Â °æ¿ì´Â ¾î¶»°Ô µÇ´Â°¡? ȤÀº
¼±ÅÃÇÑ ¹®ÀÚ°¡ ÄÄÆÄÀϵǴ ±â°è¿¡ Á¸ÀçÇÏÁö ¾Ê´Â ¹®ÀÚÀÏ °æ¿ì (¿¹¸¦ µé¾î,
|
´Â ISO C¿¡¼ ²À ÇÊ¿äÇÑ °ÍÀÌ ¾Æ´Ï´Ù; ÀÌ°ÍÀº ISO C
ÇÁ·Î±×·¡¹Ö ȯ°æ¿¡¼ `iso646.h' ÆÄÀÏÀÌ Á¸ÀçÇϱ⠶§¹®ÀÌ´Ù).
ÇÑ °¡Áö ´õ ¸»ÇÒ °ÍÀÌ ÀÖ´Ù. À§¿¡¼ ÇÊ¿äÇÑ ·¡ÆÛ ÇÔ¼ö¿¡¼ ¹ø¿ª ¹®ÀÚ¿ ÀÚü´Â ´Ã·ÁÁöÁö ¸»¾Æ¾ß ÇÑ´Ù. ´Ã·ÁÁø msgid´Â ³í¸®ÀûÀÎ °ÍÀÌ´Ù. ¹®ÀÚ¿À» ±¸ºÐÇÒ ÇÊ¿ä´Â ¾øÀ¸¸ç (±× ¹®ÀÚ¿µéÀº Å°·Î ¾²¿©Áö´Â °ÍÀÌ ¾Æ´Ï±â ¶§¹®ÀÌ´Ù) ÀÌ·¸°Ô ÇÔÀ¸·Î½á ¾à°£ÀÇ ¸Þ¸ð¸®¿Í µð½ºÅ© °ø°£À» Àý¾àÇÑ´Ù.
¿©±â¼, 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.h'ÀÇ ¹öÀü 0.9.4´Â ´Üµ¶À¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. Áï, º°µµÀÇ
ÇÔ¼ö¸¦ ¾²Áö ¾Ê°íµµ `libintl.h'¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. `Makefile'Àº
$(prefix)
¸¦ »ç¿ëÇØ ¼±ÅÃµÈ µð·ºÅ丮¿¡ Çì´õ ÆÄÀÏ°ú ¶óÀ̺귯¸®¸¦
¼³Ä¡ÇÑ´Ù.
ÇÑ °¡Áö ¿¹¿Ü´Â HP-UX 10.01 ½Ã½ºÅÛÀÌ´Ù. ¿©±â¿¡¼´Â C ¶óÀ̺귯¸®¿¡ alloca
ÇÔ¼ö°¡ ¾ø´Ù (±×¸®°í HP ÄÄÆÄÀÏ·¯´Â alloca
¸¦ ÀζóÀÎÇÏÁö ¸øÇÑ´Ù).
ÇÏÁö¸¸ ÀÌ·± ¹Ùº¸°°Àº ½Ã½ºÅÛ¶§¹®¿¡ Àüü ¶óÀ̺귯¸®¸¦ ´Ù½Ã ÀÛ¼ºÇ϶ó´Â °Ç
¾Æ´Ï´Ù. ±× ´ë½Å¿¡ libintl.a
¸¦ »ç¿ëÇÏ´Â ¸ðµç ÆÐÅ°Áö¿¡
alloca
ÇÔ¼ö¸¦ Æ÷ÇÔÇÑ´Ù.
gettext
°í¼ö°¡ µÇ±â
GNU gettext
¶óÀ̺귯¸®ÀÇ ±â´ÉÀ» ¿ÏÀüÈ÷ È°¿ëÇÏ·Á¸é, ºÐ¸í
¼Ò½ºÄڵ带 Àд °ÍÀÌ ÁÁ´Ù. ÇÏÁö¸¸ (º¹ÀâÇϱ⵵ ÇÑ) Äڵ带 ÀÐÀ» ½Ã°£ÀÌ
¾ø´Â »ç¶÷µéÀÌ ¾Ë¾ÆµÎ¸é ÁÁÀ» ¸¸ÇÑ °ÍÀº:
gettext
ÇÔ¼ö°¡ »ç¿ëÇÒ ¾ð¾î¸¦ »ç¿ëÇÒ °ÍÀÎÁö
¾î¶»°Ô ÆÇ´ÜÇÏ´ÂÁö ¾Ë¾Æ¾ß ÇÑ´Ù. ¿©±â º¸¿©ÁÖ´Â ¹æ¹ýµéÀº gettext
ÇÔ¼öÀÇ GNU ¹öÀü¿¡¼¸¸ Á¤È®È÷ µ¿ÀÛÇÑ´Ù.
dcgettext
ÇÔ¼ö¸¦ ¾µ ¶§¸¶´Ù °¡Àå Å« ¿ì¼±¼øÀ§¸¦ °®´Â ȯ°æ º¯¼öÀÇ
ÇöÀç °ªÀÌ °Ë»çµÇ°í »ç¿ëµÈ´Ù. ±× ¿ì¼±¼øÀ§´Â ´ÙÀ½ ¸®½ºÆ®¿¡ ¿ì¼±¼øÀ§°¡ Å«
°ÍºÎÅÍ ¿°ÅµÇ¾î ÀÖ´Ù.
LANGUAGE
LC_ALL
LC_xxx
, ¼±ÅÃµÈ ·ÎÄÉÀÏ¿¡ µû¶ó
LANG
LANGUAGE
ÀÇ °ªÀÌ ¹Ù²î¾úÀ» ¶§ ¾î¶»°Ô µÇ´ÂÁö »ý°¢ÇØ
º¸ÀÚ. À§¿¡ ¼³¸íµÈ °úÁ¤¿¡ µû¶ó dcgettext
ÇÔ¼ö¸¦ ¾²ÀÚ ¸¶ÀÚ º¯¼ö°¡
»õ·Î¿î °ªÀÌ µÇ¾ú´Ù´Â °É ¾Ë¾Æ³½´Ù. ÇÏÁö¸¸ ÀÌ °æ¿ì (¾Æ¸¶µµ) ¶Ç´Ù¸¥ ¸Þ¼¼Áö
¸ñ·Ï ÆÄÀÏÀÌ ÀÌ¹Ì ÀÐÇôÁ® ÀÖ´Ù. ´Ù¸¥ ¸»·Î Çϸé: »ç¿ëÇÒ ¾ð¾î°¡ ¹Ù²î¾ú´Ù.
ÇÑ °¡Áö ¹æ¹ýÀÌ ÀÖ´Ù. gcc-2.7.0 ÀÌ»óÀÇ Äڵ忡¼´Â ÃÖÀûÈ ¹æ¹ýÀÌ
Á¦°øµÈ´Ù. ÀÌ ÃÖÀûÈ´Â »õ·Î¿î ¸ñ·ÏÀÌ ÀÐÇôÁöÁö ¾ÊÀ¸¸é dcgettext
ÇÔ¼ö¸¦ ºÎ¸£Áö ¾Êµµ·Ï ÇÑ´Ù.. ÇÏÁö¸¸ dcgettext
¸¦ ºÎ¸£Áö ¾ÊÀ¸¸é
ÇÁ·Î±×·¥Àº LANGUAGE
º¯¼ö°¡ º¯Çß´Ù´Â °É ¾ËÁöµµ ¸øÇÒ °ÍÀÌ´Ù
(see section *gettext ÇÔ¼ö¸¦ ÃÖÀûÈÇϱâ). ÇØ°áÃ¥Àº ¸Å¿ì ½±´Ù. ´ÙÀ½ ÁÙÀ» ¾ð¾î¸¦
¹Ù²Ù´Â ºÎºÐ¿¡ Ãß°¡ÇÑ´Ù.
/* Change language. */ setenv ("LANGUAGE", "fr", 1); /* Make change known. */ { extern int _nl_msg_cat_cntr; ++_nl_msg_cat_cntr; }
_nl_msg_cat_cntr
º¯¼ö´Â `loadmsgcat.c' ÆÄÀÏ¿¡ Á¤ÀǵǾî
ÀÖ´Ù. ÇÁ·Î±×·¡¸Ó´Â ¿À·§µ¿¾È ½ÇÇàµÇ¸é¼ ½ÇÇà½Ã¿¡ »ç¿ëÀÚ°¡ »ç¿ëÇÒ ¾ð¾î¸¦
¼±ÅÃÇÏ´Â ÇÁ·Î±×·¥À» °³¹ßÇÒ ¶§¸¸ À§¿Í °°Àº ¹æ¹ýÀ» ¾µ °ÍÀÌ´Ù. ´ëÈÀûÀÌÁö
¾ÊÀº (¸ðµç Àڱ׸¶ÇÑ Unix µµ±¸µéó·³) ÇÁ·Î±×·¥µéÀº À§¿Í °°Àº ¹æ¹ýÀÌ ÀüÇô
ÇÊ¿ä¾ø´Ù.
¾ð¾î¿¡ °ü°è¾ø´Â ¸Þ¼¼Áö 󸮸¦ À§ÇÑ ¹æ¹ýÀ¸·Î µÎ°¡Áö°¡ °æÀïÇÏ°í ÀÖ´Ù:
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.