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


ÇÁ·Î±×·¥ ¼Ò½º ÁغñÇϱâ

ÇÁ·Î±×·¡¸Ó¿¡°Ô ÇØ´çµÇ´Â ÀÏ·Î, C ¼Ò½º Äڵ带 ¹Ù²Ù´Â ÀÏÀº 3°¡Áö·Î ³ª´­ ¼ö ÀÖ´Ù. ù°·Î, ¸Þ¼¼Áö ¹ø¿ªÀÌ ÇÊ¿äÇÑ ¸ðµç ¸ðµâ¿¡ Áö¿ªÈ­ ÇÔ¼öµéÀ» ¾Ë·ÁÁà¾ß ÇÑ´Ù. µÎ¹ø°, ÇÁ·Î±×·¥ÀÌ ÃʱâÈ­ÇÒ ¶§, º¸Åë main ÇÔ¼ö¿¡¼­ GNU gettext°¡ Á¦´ë·Î ÀÛµ¿Çϵµ·Ï ½ÃÀÛÇØ¾ß ÇÑ´Ù. ¸¶Áö¸·À¸·Î, ÇÁ·Î±×·¥ ³»¿¡ ¹ø¿ªÀÌ ÇÊ¿äÇÑ ¹®ÀÚ¿­ÀÌ ¹«¾ùÀÎÁö ÆÇ´ÜÇÏ°í Ç¥½ÃÇÑ´Ù.

ÇÊ¿äÇÑ GNU gettext ÆÄÀϵéÀ» »ç¿ëÇÒ ¼ö ÀÖµµ·Ï, ÇÁ·Î±×·¥µé°ú ÆÐÅ°Áö¸¦ ÁغñÇØ ³õ¾Ò´Ù¸é, ±×¸®°í `Makefile' ÆÄÀÏÀ» ÁغñÇß´Ù¸é (see section °ü¸®ÀÚÀÇ °üÁ¡), ¹ø¿ªµÉ C ¹®ÀÚ¿­ÀÌ ÀÖ´Â °¢ C ¸ðµâÀº ´ÙÀ½°ú °°Àº ÁÙÀÌ µé¾î ÀÖ°Ô µÈ´Ù:

#include <libintl.h>

±× ¿Ü¿¡ C ¼Ò½º¿¡¼­ ´õ ¹Ù²ã¾ß ÇÒ »çÇ×µéÀº ÀÌ ÀåÀÇ ³ª¸ÓÁö Àý¿¡¼­ ¼³¸íÇÑ´Ù.

gettext¸¦ µ¿ÀÛ½ÃÅ°±â

·ÎÄÉÀÏ µ¥ÀÌŸ¸¦ ÃʱâÈ­ÇÏ´Â ¹æ¹ýÀº ¸ðµç ÇÁ·Î±×·¥¿¡¼­ °ÅÀÇ µ¿ÀÏÇÏ´Ù. ¾Æ·¡°¡ ±× ¿¹ÀÌ´Ù:

int
main (argc, argv)
     int argc;
     char argv;
{
  ...
  setlocale (LC_ALL, "");
  bindtextdomain (PACKAGE, LOCALEDIR);
  textdomain (PACKAGE);
  ...
}

PACKAGE¿Í LOCALEDIR´Â `config.h' ³»¿¡ ȤÀº ¸ÞÀÌÅ©ÆÄÀÏ·Î Á¤ÀÇÇØ¾ß ÇÑ´Ù. Áö±ÝÀ¸·Î¼± ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â gettext ¼Ò½º¸¦ ÂüÁ¶ÇÑ´Ù.

LC_ALLÀ» ¾²´Â °Ô ÀûÇÕÇÏÁö ¾ÊÀ» °æ¿ìµµ ÀÖ´Ù. LC_ALLÀº ¸ðµç ·ÎÄÉÀÏ ¹üÁÖ¸¦ Æ÷ÇÔÇÏ°í ƯÈ÷ LC_CTYPE±îÁö Æ÷ÇÔÇÑ´Ù. LC_CTYPE ¹üÁÖ´Â isalnum µî°ú °°ÀÌ `ctype.h'¿¡ Á¤ÀǵǾî ÀÖÀ¸¸é¼­ °÷¿¡¼­ ¹®ÀÚÀÇ Á¾·ù¸¦ ÆǺ°ÇÏ´Â µ¥ ¾²À̴µ¥, ¾î¶² ¾ð¾î¸¦ ÀÔ·Â¹Þ¾Æ Ã³¸®ÇÏ´Â ÇÁ·Î±×·¥ÀÇ °æ¿ì´Â À߸ø µ¿ÀÛÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î @,{c}(c-cedilla ¹®ÀÚ)¸¦ »ç¿ëÇÑ ¼Ò½º ÄÚµå´Â ÇÁ¶û½º¿¡¼­´Â µ¿ÀÛÇÏÁö¸¸ ¹Ì±¹¿¡¼­´Â µ¿ÀÛÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Ù.

¾î¶² ½Ã½ºÅÛ¿¡¼­´Â LC_ALL ·ÎÄÉÀÏÀ» »ç¿ëÇÒ °æ¿ì scanf ÇÔ¼ö¸¦ »ç¿ëÇØ ¼ýÀÚ¸¦ ÀоîµéÀÏ ¶§ ¹®Á¦°¡ ¹ß»ýÇϱ⵵ ÇÑ´Ù. Ç¥ÁØ¿¡¼­´Â ¿©·¯ °¡Áö Çü½Ä¿¡ °üÇØ ¾ê±â ÇÏÁö¸¸, "C" ·ÎÄÉÀÏ¿¡ ÀÖ´Â Çü½ÄÀº ÆÇ´ÜÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ¾î¶² ½Ã½ºÅÛ¿¡¼­´Â "C" ·ÎÄÉÀÏ Æ÷¸ËÀÇ ¼ýÀÚ¸¦ °ÅºÎÇϱ⵵ ÇÑ´Ù. ¾î¶² °æ¿ì¿¡´Â ±× Ç¥½Ã Çü½Ä¸¸ º¸°í´Â "C" ·ÎÄÉÀÏÀÎÁö ·ÎÄÉÀÏ¿¡ µû¸¥ Çü½ÄÀÎÁö ¾Ë¾Æ³»´Â °Íµµ ºÒ°¡´ÉÇÑ ±× Ç¥½Ã Çü½Ä ÀÚü¿¡ ¹®Á¦°¡ ÀÖÀ» ¼öµµ ÀÖ´Ù. ÀÌ·± »óȲÀº ¼ö¿¡¼­ õ ´ÜÀ§·Î ±¸ºÐÇؼ­ Âï´Â Á¡ÀÌ ÀÖÀ» °æ¿ì¿¡ ¹ß»ýÇÑ´Ù. ¾î¶² ·ÎÄÉÀÏ¿¡¼­´Â ±× °ü½À¿¡ µû¶ó '.'À¸·Î »ç¿ëÇϱ⵵ Çϴµ¥, ÀÌ Á¡À» "C" ·ÎÄÉÀÏ¿¡¼­ ¼Ò¼öÁ¡À¸·Î »ç¿ëµÈ´Ù.

±×·¯¹Ç·Î ¾î¶² °æ¿ì¿¡´Â À§ ÄÚµåÀÇ LC_ALL ÁÙÀ» ¿©·¯ °³ÀÇ setlocale ÁÙ·Î ¹Ù²Ü ÇÊ¿ä°¡ ÀÖ´Ù.

{
  ...
  setlocale (LC_CTYPE, "");
  setlocale (LC_MESSAGES, "");
  ...
}

POSIX¸¦ µû¸£´Â ¸ðµç ½Ã½ºÅÛ¿¡¼­´Â LC_CTYPE, LC_COLLATE, LC_MONETARY, LC_NUMERIC, ±×¸®°í LC_TIMEÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸î¸î Çö´ëÀûÀÎ ½Ã½ºÅÛ¿¡¼­´Â LC_MESSAGES ·ÎÄÉÀϵµ Àִµ¥, ÀÌ°ÍÀº XPG2¸¦ µû¸£´Â Á» ¿À·¡µÈ ½Ã½ºÅÛ¿¡¼­´Â LC_RESPONSES¶ó°í ºÒ¸®¿î´Ù.

LC_CTYPEÀ» ¹Ù²Ù¸é <ctype.h> Ç¥ÁØ Çì´õ¿¡ ¼±¾ðµÈ ÇÔ¼öµé¿¡µµ ¿µÇâÀ» ³¢Ä£´Ù´Â µ¥ À¯ÀÇÇØ¾ß ÇÑ´Ù. ¸¸¾à À̵é ÇÔ¼öµéÀÌ ¿µÇâÀ» ¹ÞÁö ¸»¾Æ¾ß ÇÒ °æ¿ì¿¡´Â (¿¹¸¦ µé¾î ÄÄÆÄÀÏ·¯ÀÇ Æļ­), C ·ÎÄÉÀÏ·Î °íÁ¤µÇ¾î ÀÖ´Â ´ëü ÇÔ¼öµéÀ» ¾µ ¼ö ÀÖ´Ù. À̵é ÇÔ¼ö´Â gettext ¼Ò½º ¹èÆ÷º»ÀÇ c-ctype,h¿Í <c-ctype.c ÆÄÀÏ¿¡ µé¾î ÀÖ´Ù.

ȯ°æº¯¼ö¿¡ µû¸¥ ·ÎÄÉÀÏ°ú C ·ÎÄÉÀÏ »çÀ̸¦ ¿Ô´Ù°¬´ÙÇÒ ¼öµµ ÀÖÀ¸³ª, ÀÌ·± ¹æ¹ýÀº º¸Åë ÇÇÇÏ°Ô µÈ´Ù. ¿Ö³ÄÇÏ¸é ¸ÕÀú setlocale È£ÃâÀº ¸¹Àº ½Ã°£À» Àâ¾Æ¸Ô°í, °Å´ëÇÑ ÇÁ·Î±×·¥ ¼Ò½ºÀÇ ¾îµð¿¡¼­ ·ÎÄÉÀÏÀ» ÀüȯÇØ¾ß ÇÒ Áö ¾Ö¸ÅÇÏ°í, ¶Ç ·ÎÄÉÀÏÀ» ÀüȯÇÏ´Â °ÍÀº ¾²·¹µå¿¡ ¾ÈÀüÇÏÁö ¸øÇϱ⠶§¹®ÀÌ´Ù.

¼Ò½º Äڵ忡¼­ ¾î¶»°Ô Ç¥½ÃÇϴ°¡

C ¼Ò½º ¾È¿¡ µé¾î ÀÖ´Â ¹ø¿ªÀÌ ÇÊ¿äÇÑ ¹®ÀÚ¿­Àº ¸ðµÎ ¹ø¿ªÀÌ °¡´ÉÇÏ´Ù°í Ç¥½ÃÇØ¾ß ÇÑ´Ù. ÀÌ Ç¥½Ã´Â ÀÎÀÚ°¡ Çϳª»ÓÀÎ ¾î¶² ÇÔ¼ö, ȤÀº ¾î¶² Àüó¸® ¸ÅÅ©·ÎÀÇ ÀÎÀÚ·Î ¹ø¿ªµÉ ¼ö ÀÖ´Â ¹®ÀÚ¿­À» ³Ö´Â °ÍÀÌ´Ù. ¹ø¿ªÀ» ÀǹÌÇÏ´Â ±×·¯ÇÑ ÇÔ¼ö ȤÀº ¸ÅÅ©·Î´Â ¸î °³¹Û¿¡ ¾ø´Âµ¥, ±× À̸§À» Ç¥½Ã Å°¿öµå(marking keyword)¶ó°í ÇÑ´Ù. ÀÌ Ç¥½Ã´Â ¹®ÀÚ¿­¿¡ ´ëÇØ ¹«½¼ 󸮸¦ ÇÏ·Á´Â ºÎºÐÀÌ ¾Æ´Ï¶ó, ¹®ÀÚ¿­ ÀÚü¿¡ Æ÷ÇԵȴÙ. ÀÌ Á¢±Ù ¹æ¹ýÀÌ ´õ ÁÁ´Ù. ´ëÇ¥ÀûÀÎ ¿¹´Â Çü½Ä¿¡ ¸ÂÃç ¸¸µé¾îÁö´Â ¿À·ù ¸Þ¼¼ÁöÀÌ´Ù. ÀÌ Çü½Ä ¹®ÀÚ¿­Àº ¹ø¿ªµÇ¾ß ÇÔÀº ¹°·Ð, ±× Çü½Ä ³»¿¡ `%s'À̶ó°í ÁöÁ¤Çؼ­ »ðÀԵǴ ¹®ÀÚ¿­µµ ¹ø¿ªµÇ¾ß ÇÑ´Ù. sprintfÀÇ °á°ú´Â ¾ÆÁÖ ¿©·¯ °¡Áö°¡ µÉ ¼ö ÀÖ°ÚÁö¸¸ ±× ¸ðµç °æ¿ì¸¦ `error_string_out()' ·çƾ¿¡¼­ ¿­°ÅÇÏ´Â ÀÏÀº ºÎÀûÀýÇÏ´Ù.

Ç¥½Ã ÀÛ¾÷Àº µÎ °¡Áö ¸ñÇ¥°¡ ÀÖ´Ù. ÇÑ °¡Áö ¸ñÇ¥´Â ÇÁ·Î±×·¥ÀÌ ½ÇÇàÇÒ ¶§ ¹ø¿ª¹®À» ¾ò¾î³»±â À§ÇÑ °ÍÀÌ´Ù. ÀÌ Å°¿öµå´Â ÇÊ¿ä¿¡ µû¶ó, ¶Ç °¡´ÉÇÑ °æ¿ì¶ó¸é ÀÎÀÚ°¡ µÇ´Â ¹®ÀÚ¿­¿¡ ´ëÇØ ÀûÀýÇÑ ¹ø¿ª¹®À» µ¿ÀûÀ¸·Î ¸®ÅÏÇÏ´Â ·çƾÀ¸·Î ¹Ù²ð °ÍÀÌ´Ù. ´ëºÎºÐÀÇ Áö¿ªÈ­ °¡´ÉÇÑ ¹®ÀÚ¿­Àº ¸ðµÎ ½ÇÇàÁ÷Àü¿¡, Áï º¯¼ö¿¡ µé¾î Àְųª ÇÔ¼öÀÇ ÀÎÀÚ·Î ÁÖ¾îÁø´Ù. ÇÏÁö¸¸ ÀÌ°ÍÀÌ ÀüºÎ´Â ¾Æ´Ï°í, ¹ø¿ªµÉ ¼ö ÀÖ´Â ¹®ÀÚ¿­Áß ¾î¶² °ÍÀº ±¸Á¶ÀûÀÎ µ¥ÀÌŸ ŸÀÔÀÇ ÃʱⰪÀ¸·Î ³õ¿©Áø´Ù. See section ¹ø¿ªµÉ ¼ö ÀÖ´Â ¹®ÀÚ¿­ÀÇ Æ¯º°ÇÑ °æ¿ì.

Ç¥½Ã ÀÛ¾÷ÀÇ µÎ¹ø° ¸ñÇ¥´Â xgettext°¡ ÇÁ·Î±×·¥ ¼Ò½º¸¦ ÀÐÀ¸¸é¼­ ¹ø¿ªµÉ ¼ö ÀÖ´Â ¸ðµç ¹®ÀÚ¿­À» »Ì¾Æ³»°í PO ÆÄÀÏ Æ²À» ¸¸µé ¼ö ÀÖµµ·Ï ÇÏ´Â °ÍÀÌ´Ù.

¹ø¿ª°¡´ÉÇÑ ¹®ÀÚ¿­À» Ç¥½ÃÇÏ´Â ÁÖ¿ä Å°¿öµå´Â `gettext'ÀÌ°í, ÀÌ Å°¿öµå´Â Àüü GNU gettext ÆÐÅ°Áö¸¦ ÀÏÄ´ À̸§ÀÌ µÇ¾ú´Ù. `gettext' Å°¿öµå¸¦ Á¶±Ý¹Û¿¡ »ç¿ëÇÏÁö ¾Ê´Â ÆÐÅ°ÁöÀÇ °æ¿ì¿¡´Â, ±×´ë·Î »ç¿ëÇÏ´Â ÆíÀÌ ½±´Ù. ÇÏÁö¸¸, gettext ÀÎÅÍÆäÀ̽º¸¦ ÀÚÁÖ »ç¿ëÇÏ´Â ÆÐÅ°ÁöÀÇ °æ¿ì, ÁÖ¿ä Å°¿öµå¸¦ ´õ ª°Ô, ´ú °Å½½¸®°Ô ÇÏ´Â À̸§À¸·Î ÇÏ´Â ÆíÀÌ ´õ Æí¸®ÇÏ´Ù. ½ÇÁ¦·Î ÆÐÅ°Áöµé¿¡¼­ ¸Å¿ì ¸¹Àº ¹®ÀÚ¿­¿¡ ´ëÇØ Å°¿öµå¸¦ ½á¾ß ÇÒ ÇÊ¿äµµ ÀÖ°í, ÇÁ·Î±×·¡¸Ó´Â ±× Å°¿öµå¸¦ º¸°í ÀÌ ÇÁ·Î±×·¥ ¼Ò½º°¡ ±¹Á¦È­µÇ¾î ÀÖ´Ù´Â »ç½ÇÀ» °è¼ÓÇؼ­ »ý°¢ÇÏ°Ô µÈ´Ù. °Ô´Ù°¡, ±ä Å°¿öµå´Â ÅؽºÆ®ÀÇ ¿­ ¼ö¸¦ ´õ ¸¹ÀÌ Â÷ÁöÇÏ´Â ¹®Á¦°¡ Àֱ⠶§¹®¿¡, 79 ȤÀº 80 ¿­ À̳»·Î À¯ÁöÇÏ·Á°í ³ë·ÂÇÏ´Â ÇÁ·Î±×·¥ ¼Ò½ºÀÇ °æ¿ì ´õ ¸¹Àº ÀÛ¾÷ÀÌ ÇÊ¿äÇÏ°Ô µÈ´Ù.

¸¹Àº ÆÐÅ°ÁöµéÀº `_'(ÇÑ°³ÀÇ ¹ØÁÙ)À» Å°¿öµå·Î »ç¿ëÇÏ°í, `gettext ("Translatable String")' ´ë½Å¿¡ `_("Translatable string")'À̶ó°í ¾´´Ù. ¶Ç GNU Ç¥ÁØ ÄÚµù ±ÔÄ¢¿¡¼­´Â º¸Åë Å°¿öµå¿Í °ýÈ£¸¦ ¿©´Â »çÀÌ¿¡ ºóÄ­À» Çϳª ³Öµµ·Ï µÇ¾î ÀÖÁö¸¸, ¿©±â¼­´Â Ưº°ÇÑ ¸ñÀûÀ̱⠶§¹®¿¡ ±×·¸°Ô ¾²Áö ¾Ê´Â´Ù. ÀÌ·¸°Ô ¹ø¿ªµÉ ¹®ÀÚ¿­À» ÁöÁ¤ÇÏ´Â µ¥ ½á¾ß ÇÒ ºÎ´ãÀº ´Ü ¼¼ ±ÛÀÚ·Î ÁÙ¿©Áø´Ù: ±× ±ÛÀÚ´Â ¹ØÁÙ°ú µÎ°³ÀÇ °ýÈ£¹®ÀÚÀÌ´Ù. ÇÏÁö¸¸, ³»ºÎÀûÀ¸·Î´Â GNU gettext¿¡¼­ ÀÌ·± ±ÔÄ¢À» »ç¿ëÇÏÁö¸¸, GNU gettext¿¡¼­ Çصµ Á÷Á¢ ÀÌ ±ÔÄ¢À» Á¦°øÇØ ÁÖÁö´Â ¾Ê´Â´Ù. ÁøÂ¥ Å°¿öµå´Â `gettext'¸¸ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, ¾ÆÁÖ ½±°Ô `gettext' ´ë½Å¿¡ `_'¸¦ ¾²µµ·Ï ¸¸µé ¼ö ÀÖ´Ù.

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

`#include <libintl.h>'¸¸À» »ç¿ëÇÏ´Â ´ë½Å¿¡ ÀÌ·¸°Ô ¾´´Ù.

³ªÁß¿¡ °ü¸®ÇϱⰡ »ó´ëÀûÀ¸·Î ½¬¿ï °ÍÀÌ´Ù. ¸¸¾à ÇÁ·Î±×·¡¸Ó°¡ ¹®ÀÚ¿­À» Ãß°¡Çϰųª ¼öÁ¤ÇÒ °æ¿ì, ±× »õ·Î¿î ȤÀº ¼öÁ¤ÇÑ ¹®ÀÚ¿­À» ¹ø¿ªÇØ¾ß ÇÏ´ÂÁö ¾Ë¾ÆºÁ¾ß ÇÏ°í, ¹ø¿ªÀÌ ÇÊ¿äÇÏ´Ù°í »ý°¢ÇÑ °æ¿ì `_()' ¾È¿¡ ³Ö´Â´Ù. `"%s: %d"'´Â ¹ø¿ªÀÌ ÇÊ¿äÇÏÁö ¾ÊÀº °æ¿ìÀÇ ÇÑ °¡Áö ¿¹ÀÌ´Ù!

¹ø¿ª °¡´ÉÇÑ ¹®ÀÚ¿­ Ç¥½Ã

PO ¸ðµå¿¡¼­, ¸î¸î ±â´ÉµéÀº ¹ø¿ªÀÚ¸¦ À§ÇÑ ±â´ÉÀÌ ¾Æ´Ï¶ó ÇÁ·Î±×·¡¸Ó¸¦ À§ÇÑ ±â´ÉÀÌ´Ù. ÀÌ ±â´ÉµéÀ» ÀÌ¿ëÇØ ÇÁ·Î±×·¥ ¼Ò½º ³»¿¡¼­ ¾î¶² ¹®ÀÚ¿­ÀÌ ¹ø¿ª°¡´ÉÇÑ ¹®ÀÚ¿­ÀÌ°í, ¾î¶² ¹®ÀÚ¿­ÀÌ ¹ø¿ªÇÏÁö ¸»¾Æ¾ß ÇÏ´Â ¹®ÀÚ¿­ÀÎÁö ´ëÈ­ÀûÀ¸·Î ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ±×³É ÀڱⰡ ÁÁ¾ÆÇÏ´Â ¾î¶² ¿¡µðÅ͸¦ »ç¿ëÇؼ­ ÀÌ·¯ÇÑ ¹®ÀÚ¿­À» ã¾Æ³»°í, Ç¥½ÃÇÏ´Â ÀÏÀº ½¬¿î ÀÛ¾÷ÀÌ´Ù. ±×·¡µµ, PO ¸ðµå¸¦ »ç¿ëÇϸé Á» ´õ ÆíÇÏ°Ô ÀÌ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Ù.

¶Ç, PO ¸ðµå¸¦ ÀÌ¿ëÇϸé ÀڱⰡ ÇÁ·Î±×·¡¸Ó¶ó°í ´À³¢´Â ¹ø¿ªÀÚµé, ȤÀº ÀڱⰡ ¹ø¿ªÀÚ¶ó°íµµ ´À³¢´Â ÇÁ·Î±×·¡¸ÓµéÀº ÇÁ·Î±×·¥ ¼Ò½º¿¡¼­ ¹ø¿ª °¡´ÉÇÑ ¹®ÀÚ¿­À» Ç¥½ÃÇϸ鼭, µ¿½Ã¿¡ ¾î¶² ¾ð¾î¿¡ ´ëÇÑ ¹ø¿ª¹®À» ¸¸µé ¼ö ÀÖ´Ù.

¿©±â¿¡ ¼³¸íÇÏ°Ô µÉ PO ¸ðµå ¸í·ÉµéÀº, »ç¿ëÇϱâ Àü¿¡ ÀÌ ¸í·ÉµéÀÌ ´Ù·ç°Ô µÉ ÆÄÀϵ鿡 ´ëÇÑ À̸ƽº ű×(tags) Å×À̺íÀÌ ¸¸µé¾îÁ® ÀÖ¾î¾ß ÇÑ´Ù. ¸Å¿ì ½±°Ô ÇÒ ¼ö ÀÖ´Â ÀÏÀÌ´Ù. ¼Ð À©µµ¿ì¿¡¼­ ÇÁ·ÎÁ§Æ®ÀÇ ¸Ç À§ µð·ºÅ丮·Î À̵¿ÇÑ ´ÙÀ½, ´ÙÀ½°ú °°Àº ¸í·ÉÀ» ½ÇÇàÇÑ´Ù:

etags src/*.[hc] lib/*.[hc]

À§ ¸í·ÉÀº `src/'¿Í `lib/' µð·ºÅ丮ÀÇ ¸ðµç `.h' ÆÄÀÏ°ú `.c' ÆÄÀϵ鿡 ´ëÇØ ÅÂ±× Å×À̺íÀ» ¸¸µç´Ù. ÀÌ ¸í·ÉÀº ¾ð±ÞµÈ ¸ðµç ÆÄÀÏÀ» Àо, ¸Ç À§ µð·ºÅ丮¿¡ `TAGS' ÆÄÀÏÀ» ¸¸µé °ÍÀÌ°í, ÀÌ ÆÄÀÏ ³»¿ëÀº À̸ƽº°¡ ÀÌÇØÇÒ ¼ö ÀÖ´Â Çü½ÄÀ¸·Î ¾²¿©Áø´Ù.

GNU coding standards¸¦ µû¸£´Â ÆÐÅ°ÁöÀÇ °æ¿ì, ¼Ò½º Äڵ尡 µé¾î ÀÖ´Â ¸ðµç ÆÄÀÏ¿¡ ´ëÇØ ÅÂ±× ÆÄÀÏÀ» ¸¸µå´Â, tags ȤÀº TAGS¶ó´Â Ÿ°ÙÀÌ ÀÖ´Ù.

ÀÏ´Ü `TAGS' ÆÄÀÏÀÌ ÁغñµÇ¸é, ´ÙÀ½ ¸í·ÉµéÀ» ÀÌ¿ëÇØ ¼Ò½ºÄÚµå ³»¿¡ ÀÖ´Â ¹ø¿ªµÉ ¼ö ÀÖ´Â ¹®ÀÚ¿­À» ÆíÇÏ°Ô Ç¥½ÃÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ÀÌ ¸í·ÉÀº PO ÆÄÀÏ À©µµ¿ì¿¡¼­ »ç¿ëÇØ¾ß Çϴµ¥, PO ÆÄÀÏÀÌ ¾Æ¿¹ ¾øÀ» ¼öµµ ÀÖ´Ù. ÀÌ°Ç ÀüÇô ¹®Á¦°¡ ¾ÈµÈ´Ù. ÀÌ ¸í·ÉÀ» ¾²±â À§ÇØ »õ·Ó°Ô ¾Æ¹«°Íµµ ¾²¿© ÀÖÁö ¾ÊÀº ºñ¾î ÀÖ´Â PO ÆÄÀÏÀ» ¿­¸é µÇ±â ¶§¹®ÀÌ´Ù. ÀÌ ºñ¾î ÀÖ´Â PO ÆÄÀÏÀº ÇÁ·Î±×·¥ ¼Ò½º¿¡¼­ ¹ø¿ªµÉ ¼ö ÀÖ´Â ¹®ÀÚ¿­À» Ç¥½ÃÇÔ¿¡ µû¶ó ¼­¼­È÷ ³»¿ëÀÌ Ã¤¿öÁú °ÍÀÌ´Ù.

,
ÇÁ·Î±×·¥ ¼Ò½º¿¡¼­ ¹ø¿ªÇÒ È帰¡ µÉ ¹®ÀÚ¿­À» ã´Â´Ù.
M-,
ÃÖ±ÙÀÇ ¹®ÀÚ¿­À» `_()'·Î Ç¥½ÃÇÑ´Ù.
M-.
ÃÖ±ÙÀÇ ¹®ÀÚ¿­À» °¡´ÉÇÑ ¿©·¯ °³ÀÇ Å°¿öµå ÁßÀÇ Çϳª·Î Ç¥½ÃÇÑ´Ù. prefix¿Í ÇÔ²² ÀÌ ¸í·ÉÀ» ¾²¸é ÀÌ Å°¿öµå¸¦ ¹Ù²Ü ¼ö ÀÖ´Ù.

,(po-tags-search) ¸í·ÉÀº ¹ø¿ªÇÒ Èĺ¸ ¹®ÀÚ¿­À» ãÀº ´ÙÀ½, ¶Ç ´Ù¸¥ À̸ƽº À©µµ¿ì¿¡ ±× ¹®ÀÚ¿­ÀÌ À©µµ¿ìÀÇ ¸Ç À§¿¡ ¿Àµµ·Ï ±× ÇÁ·Î±×·¥ ¼Ò½º¸¦ Ç¥½ÃÇÑ´Ù. ¸¸¾à ¹®ÀÚ¿­ÀÌ ÇÑ À©µµ¿ì¿¡ µé¾î°¡±â ³Ê¹« Å« °æ¿ì¿¡´Â ¸¶Áö¸· ºÎºÐÀÌ º¸À̵µ·Ï À§Ä¡ÇÑ´Ù. ¾î¶² °æ¿ìµç, Ä¿¼­´Â PO ÆÄÀÏ À©µµ¿ì¿¡ ±×´ë·Î ³²¾Æ ÀÖ´Ù. º¸¿©ÁØ ¹®ÀÚ¿­À» ´Ù¸¥ ¾ð¾î·Î ¹ø¿ªÇÒ ¼ö ÀÖ´Ù°í »ý°¢µÇ¸é, M-, ȤÀº M-.·Î Ç¥½ÃÇÒ ¼ö ÀÖ´Ù. ±×·¸Áö ¾ÊÀ¸¸é, ,À» ´­·¯¼­ ÀÌ ¹®ÀÚ¿­À» ¹«½ÃÇÏ°í ´ÙÀ½ ¹®ÀÚ¿­·Î ³Ñ¾î°¥ ¼ö ÀÖ´Ù.

3ÀÚ ÀÌ»óÀÇ ¹®ÀÚ¿­Àº ¹ø¿ªÀÇ È帷ΠÃë±ÞÇÑ´Ù. µÎ ÀÚ±îÁöÀÇ ¹®ÀÚ¿­µµ ¾ËÆĺªÀÌ Æ¯¼ö¹®ÀÚº¸´Ù ´õ ¸¹Àº °æ¿ì È帷ΠÃë±ÞÇÑ´Ù. ÀÌ ¸í·ÉÀº Ư¼ö¹®Àڷθ¸ ÀÌ·ç¾îÁø ¹®ÀÚ¿­À̳ª, ´Ü ÇѱÛÀÚ·Î µÈ ¹®ÀÚ¿­Àº È帷ΠÃë±ÞÇÏÁö ¾Ê´Â´Ù. ¶Ç ÀÌ ¸í·ÉÀº ÁÖ¼®¹® ³»ÀÇ ¹®ÀÚ¿­À̳ª ÀÌ¹Ì PO ¸ðµå°¡ ¾Ë°í ÀÖ´Â (¾Æ·¡¿¡ ¼³¸íÇÑ´Ù) Ç¥½Ã ¹æ¹ýÀ¸·Î Ç¥½ÃµÈ ¹®ÀÚ¿­µµ ¹«½ÃÇÑ´Ù.

À̸ƽº¿¡¼­ ¾î¶² `TAGS' ÆÄÀÏÀ» »ç¿ëÇÒ Áö ÁöÁ¤ÇÏÁö ¾Ê¾Ò´Ù¸é, ÀÌ ¸í·ÉÀ» óÀ½ ½ÇÇàÇÒ ¶§, `TAGS' ÆÄÀÏÀ» Çϳª ÁöÁ¤ÇØ¾ß ÇÑ´Ù°í ¹Ì´Ï¹öÆÛ¿¡¼­ ¾Ë·Á ÁØ´Ù. ³ªÁß¿¡ À̸ƽº ¸í·É¾î M-x visit-tags-table·Î »ç¿ëÇÒ `TAGS' ÆÄÀÏÀ» ¹Ù²Ü ¼ö ÀÖ´Ù. ÀÌ ¸í·ÉÀ» ¾²¸é »ç¿ëÇÏ°í ½ÍÀº Á¤È®ÇÑ `TAGS' ÆÄÀÏÀÇ À̸§À» ¹°¾îº¼ °ÍÀÌ´Ù. See section `Tag Tables' in The Emacs Editor.

, ¸í·ÉÀ» »ç¿ëÇÒ ¶§¸¶´Ù, ¾Õ¿¡¼­ ã¾Ò´ø ¹®ÀÚ¿­À» µÚ·Î ÇÑä °è¼ÓÇؼ­ `TAGS'¿¡ ¾²¿©Áø ÇÁ·Î±×·¥ ¼Ò½º¸¦ µû¶ó¼­, ´õ ÀÌ»ó ã¾Æº¼ ¼Ò½º ÆÄÀÏÀÌ ¾øÀ» ¶§±îÁö ã±â¸¦ °è¼ÓÇÑ´Ù. ÇÏÁö¸¸, ÀÌ ¸í·É¿¡ Á¢µÎ¾î¸¦ ÁÖ¸é (C-u ,), ÀÌ Ã£±â ÀÛ¾÷À» ù ¹ø° ÇÁ·Î±×·¥ ¼Ò½ººÎÅÍ ´Ù½Ã ½ÃÀÛÇÑ´Ù; ÇÏÁö¸¸ ÀÌ °æ¿ì¿¡ ¹æ±Ý ¹ø¿ª °¡´ÉÇÏ´Ù°í Ç¥½ÃÇÑ ¹®ÀÚ¿­Àº ÀÚµ¿À¸·Î Áö³ª°¥ °ÍÀÌ´Ù.

, ¸í·ÉÀ» »ç¿ëÇÑ´Ù°í Çؼ­ ´Ù¸¥ À̸ƽº ÅÂ±× ¸í·ÉÀ» ½ºÁö ¸øÇÏ´Â °Ç ¾Æ´Ï´Ù. ¿¹¸¦ µé¾î, º¸Åë tags-search ȤÀº tags-query-replace ¸í·ÉÀº , ã±â ¼ø¼­¿¡´Â ¿µÇâÀ» ÁÖÁö ¾Ê°í »ç¿ëµÉ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ÀÌ ¸í·É¾îÀÇ ±¸Çö»óÀÇ ¹®Á¦·Î, ÃÖÃÊÀÇ , ¸í·É(ȤÀº Á¢µÎ¾î¿Í ÇÔ²² »ç¿ëÇÑ , ¸í·É)Àº º¸Åë À̸ƽº ÅÂ±× Ã£±â ¸í·ÉÀ» ù¹ø° ÅÂ±× ÆÄÀÏ·Î ÃʱâÈ­ÇÒ °ÍÀ̹ǷÎ, ÀÌ ÀçÃʱâÈ­ ¸í·ÉÀº µÇµµ·Ï ¾²Áö ¸»¾Æ¾ß ÇÑ´Ù.

M-,(po-mark-translatable) ¸í·ÉÀº ÃÖ±Ù¿¡ ãÀº ¹®ÀÚ¿­À» `_' Å°¿öµå·Î Ç¥½ÃÇÑ´Ù. M-.(po-select-mark-and-mark) ¸í·ÉÀº ¹Ì´Ï¹öÆÛ¿¡¼­ Å°¿öµå¸¦ ŸÀÌÇÁÇÑ ´ÙÀ½ ±× Å°¿öµå¸¦ ¹®ÀÚ¿­À» Ç¥½ÃÇÒ Å°¿öµå·Î »ç¿ëÇÑ´Ù. ÀÌ µÎ ¸í·ÉÀº ÀÚµ¿À¸·Î ¹æ±Ý Ç¥½ÃµÈ ¹®ÀÚ¿­¿¡ ´ëÇÑ ¹ø¿ªµÇÁö ¾ÊÀº Ç׸ñÀ» »õ PO ÆÄÀÏ¿¡ ¸¸µé°í, ±× Ç׸ñÀ» ÇöÀç Ç׸ñÀ¸·Î ¸¸µç´Ù (¹ø¿ª ÀÛ¾÷À» ÇÏ°í ½Í´Ù¸é, Áï½Ã ÇÏ´Â ÆíÀÌ ´õ ½±´Ù). 80¿­º¸´Ù ´õ ±ä ¼Ò½º ¶óÀο¡¼­ M-, ȤÀº M-. ·Î ÇÁ·Î±×·¥ ¼Ò½º¸¦ °íÄ¡´Â Àϵµ °¡´ÉÇÏÁö¸¸ ±× ÁÙÀÇ µé¿©¾²±â°¡ ´Þ¶óÁú ¼ö ÀÖ´Ù. O ¸í·ÉÀ» PO ¸ðµå¿¡¼­ »ç¿ëÇϰųª, ¶Ç´Â ´Ù¸¥ À©µµ¿ì ¹Ù²Ù´Â ¸í·ÉÀ» À̸ƽº¿¡¼­ »ç¿ëÇؼ­ ÇÁ·Î±×·¥ ¼Ò½º·Î À̵¿ÇÑ ´ÙÀ½ ÇÊ¿äÇÑ ¼öÁ¤À» ÇÏ¸é µÈ´Ù. ´Ù½Ã PO ÆÄÀÏ À©µµ¿ì·Î µ¹¾Æ¿À·Á¸é, ¿¹¸¦ µé¾î ´ÙÀ½ ¹®ÀÚ¿­À» ,·Î °è¼Ó ãÀ¸·Á¸é ÀϹÝÀûÀÎ À̸ƽº ¸í·ÉÀ» ½á¾ß ÇÒ °ÍÀÌ´Ù.

M-. ¸í·ÉÀº ¸î°³ÀÇ ¼Óµµ Çâ»óÀ» À§ÇÑ ³»ºÎÀûÀÎ ¹æ¹ýÀÌ À־, ÀÌ Å°¿öµå¸¦ ¸Å¹ø ŸÀÌÇÁÇØ¾ß ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ù¹ø°´Â ÃßõµÇ´Â Å°¿öµå°¡ º¸ÀÌ°í, RETÀ» ´­·¯¼­ ±× Å°¿öµå¸¦ ±×´ë·Î »ç¿ëÇÑ´Ù. µÎ¹ø°´Â Å°¿öµåÀÇ ¾Õ ºÎºÐÀ» ´Ù¸¥ °Í°ú È¥µ¿µÇÁö¸¸ ¾Ê°Ô ŸÀÌÇÁÇϸé ÀÚµ¿À¸·Î ¾²°íÀÚ ÇÏ´Â ¸í·ÉÀ¸·Î ¿Ï¼º(completion)µÉ °ÍÀÌ´Ù. ÀÌ°ÍÀº PO ¸ðµå°¡ °¡´ÉÇÑ ¸ðµç Å°¿öµå¸¦ ¾Ë°í ÀÖ¾î¾ß ÇÑ´Ù´Â ¶æÀÌ°í, ÀÌ °æ¿ì À߸ø ŸÀÌÇÁµÈ Å°¿öµå´Â ¹Þ¾ÆµéÀÌÁö ¾Ê´Â´Ù.

Å°¿öµå¸¦ ŸÀÌÇÁÇÒ ¶§ ?¶ó°í ´äÇϸé, ÀÌ ¸í·ÉÀº ¸ðµç ¾Ë°í ÀÖ´Â Å°¿öµåµéÀ» º¸¿©ÁÖ°í, °Å±â¿¡¼­ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ÀÌ ¸í·É¿¡ Á¢µÎ¾î¸¦ ºÙÀ̸é (C-u M-.), ÀÌ ¸í·ÉÀº PO ÆÄÀÏ ¹öÆÛ È¤Àº ÇÁ·Î±×·¥ ¼Ò½º¸¦ °»½ÅÇؼ­, °£´ÜÇÑ Å°¿öµå °ü¸®¸¦ ´ë½Å ÇÒ °ÍÀÌ´Ù. ÀÌ °æ¿ì, ÀÌ ¸í·ÉÀº Å°¿öµå¸¦ ¹°¾îº¸°í, ³ªÁß¿¡ M-. ¸í·ÉÀ» ¾µ ¶§ »ç¿ëÇÒ ¼ö ÀÖ´Â ÇÑ °¡Áö Å°¿öµå°¡ µÈ´Ù. °Ô´Ù°¡ ÀÌ »õ·Î¿î Å°¿öµå´Â ÀÚµ¿À¸·Î ÃßõµÇ´Â Å°¿öµå°¡ µÇ¾î ³ªÁßÀÇ ¸í·É¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ¹Ì ¾Ë·ÁÁø Å°¿öµå¸¦ C-u M-.¿¡ ´ëÇÑ ´ë´äÀ¸·Î ŸÀÌÇÁÇϸé, ÃßõµÇ´Â Å°¿öµå¸¦ ¹Ù²Ü »ÓÀÌ°í ¾Æ¹«°Íµµ ÇÏÁö ¾Ê´Â´Ù.

M-.¸¦ ¾µ ¶§ ¾Ë·ÁÁø ¸ðµç Å°¿öµå´Â, , ¸í·ÉÀÌ ÀÌ¹Ì Ç¥½ÃµÈ ¹®ÀÚ¿­ÀÌ ÀÖ´Â °æ¿ì °Ç³Ê ¶Ù´Â ÀÏÀ» ÇÒ¶§ ÀÌ¿ëÇÑ´Ù. ¸¹Àº PO ÆÄÀÏÀÌ µ¿½Ã¿¡ ¿­·Á ÀÖ°í, °¢°¢ÀÌ µû·Îµû·Î Å°¿öµå¸¦ °®°í ÀÖ´Â °æ¿ì, ÇöÀç PO ¸ðµå¿¡¼­´Â ¾Ë·ÁÁø Å°¿öµå¸¦ Áö¿ì´Â ÇØ°á¹æ¹ýÀÌ ¾ø°í, (q¸¦ »ç¿ëÇØ) ÆÄÀÏÀ» Á¾·áÇÏ°í ´Ù½Ã »õ·Î ¿©´Â ¼ö¹Û¿¡ ¾ø´Ù. PO ÆÄÀÏÀÌ À̸ƽº À©µµ¿ì¿¡ »õ·Î µîÀåÇÒ °æ¿ì `gettext'¿Í `_'¸¸ÀÌ Å°¿öµå·Î ¾Ë·ÁÁ® ÀÖ°í, `gettext'°¡ M-. ¸í·ÉÀÇ ÃßõµÇ´Â Å°¿öµå°¡ µÈ´Ù. »ç½Ç `_'¸¦ ÃßõÇÏ´Â °ÍÀº ÁÁÁö ¸øÇѵ¥, M-, ¸í·ÉÀ¸·Î »ç¿ëÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù.

Å°¿öµå ¾Õ¿¡ ¿À´Â Ư¼ö ÁÖ¼®¹®

C ÇÁ·Î±×·¥¿¡¼­ printf¿Í °°Àº ÇÔ¼ö¿¡¼­µµ ¹®ÀÚ¿­ÀÌ »ç¿ëµÈ´Ù. ÀÌ Çü½Ä ¹®ÀÚ¿­¿¡¼­ Ưº°ÇÑ Á¡Àº %·Î ½ÃÀÛÇÏ´Â Çü½Ä ÁöÁ¤ÀÚ°¡ µé¾î°¥ ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. ´ÙÀ½°ú °°Àº Äڵ尡 ÀÖ´Ù°í °¡Á¤ÇÏÀÚ:

printf (gettext ("String `%s' has %d characters\n"), s, strlen (s));

À§ÀÇ ¹®ÀÚ¿­¿¡ ´ëÇØ °¡´ÉÇÑ µ¶ÀÏ¾î ¹ø¿ª¹®Àº ´ÙÀ½°ú °°ÀÌ ÇÒ ¼ö ÀÖ´Ù:

"%d Zeichen lang ist die Zeichenkette `%s'"

µ¶ÀϾ ¸ð¸¥´Ù°í Çصµ C ÇÁ·Î±×·¡¸Ó¶ó¸é ¿©±â¼­ ¹º°¡ À߸øµÇ¾ú´Ù´Â °É ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. µÎ°³ÀÇ Çü½Ä ÁöÁ¤ÀÚÀÇ ¼ø¼­°¡ ¹Ù²î¾úÁö¸¸, ´ç¿¬È÷ printfÀÇ ÀÎÀÚÀÇ ¼ø¼­´Â ¹Ù²îÁö ¾Ê´Â´Ù. ÀÌ ¹®ÀÚ¿­ÀÇ ±æÀÌ´Â ÁÖ¼Ò·Î Ãë±ÞµÉ °ÍÀ̱⠶§¹®¿¡ ¾Æ¸¶µµ ¹®Á¦¸¦ ÀÏÀ¸Å³ °ÍÀÌ´Ù.

½ÇÇà½Ã¿¡ ¿©±â¼­ »ý±â´Â ¿À·ù¸¦ ¸·±â À§ÇØ msgfmt µµ±¸´Â ÄÄÆÄÀÏ ½Ã¿¡ ¿ø ¹®ÀÚ¿­ÀÇ ÀÎÀÚ¿Í ¹ø¿ªµÉ ¹®ÀÚ¿­ÀÇ ÀÎÀÚÀÇ Å¸ÀÔ°ú °¹¼ö°¡ ¸Â´ÂÁö °Ë»çÇÑ´Ù. ¸¸¾à ¼ø¼­³ª ŸÀÔÀÌ ¸ÂÁö ¾Ê´Ù¸é °æ°í ¸Þ¼¼Áö°¡ ³ª¿À°í ½ÇÇà½Ã¿¡´Â ¹®Á¦¸¦ ¹ß»ýÇÏÁö ¾Ê´Â´Ù.

À§ÀÇ µ¶ÀÏ¾î ¹ø¿ª¿¡¼­ ´Ü¾îÀÇ ¼ø¼­¸¦ ¿Ã¹Ù¸£°Ô ÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ½á¾ß ÇÑ´Ù:

"%2$d Zeichen lang ist die Zeichenkette `%1$s'"

msgfmtÀÇ ·çƾÀº ÀÌ Æ¯º°ÇÑ Ç¥±â¸¦ ¾Ë°í ÀÖ´Ù.

¸ðµç ¹®ÀÚ¿­ÀÌ Çü½Ä ¹®ÀÚ¿­ÀÌ µÉ ÇÊ¿ä´Â ¾øÀ¸¹Ç·Î, msgfmtÀÌ `.po' ÆÄÀϳ»ÀÇ ¸ðµç ¹®ÀÚ¿­À» °Ë»çÇÏ´Â ÀÏÀº ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù. ¹®ÀÚ¿­ÀÌ Çü½Ä ÁöÁ¤ÀÚó·³ º¸ÀÌ´Â °É Æ÷ÇÔÇϸ鼭 printf¿¡ »ç¿ëµÇÁö ¾ÊÀº °æ¿ìµµ Àֱ⠶§¹®¿¡ ÀÌ·¸°Ô ÇÏ¸é ¹®Á¦¸¦ ÀÏÀ¸Å³ ¼ö ÀÖ´Ù.

Áï xgettext´Â Çü½Ä ¹®ÀÚ¿­Ã³·³ º¸ÀÌ´Â ¸Þ¼¼Áöµé¿¡ Ưº°ÇÑ Ç÷¡±×¸¦ ºÙÀδÙ. ¿©±â¿¡ È®½ÇÇÑ ±ÔÄ¢Àº ¾ø°í, ÈÞ¸®½ºÆ½¸¸ ÀÖ´Ù. `.po' ÆÄÀÏ ³»¿¡¼­ ÀÌ·¯ÇÑ Ç׸ñÀº #, ÁÖ¼® ÁÙ¿¡ c-formatÀ» ½á¼­ Ç¥½ÃµÈ´Ù (see section PO ÆÄÀÏÀÇ Çü½Ä).

ÀÌÁ¦ ÁÖÀDZíÀº µ¶ÀÚ´Â ¾ÆÁ÷µµ ¹®Á¦¸¦ ¹ß»ýÇÒ ¼ö ÀÖ´Ù°í ¸»ÇÒ °ÍÀÌ´Ù. ÀÌ ÈÞ¸®½ºÆ½ÀÌ À߸øµÉ °æ¿ìµµ ÀÖ´Ù. ±×°Ç »ç½ÇÀÌ°í ÇÁ·Î±×·¡¸ÓÀÇ °áÁ¤À» xgettext°¡ ¾Ë¾ÆÂ÷¸± ¼ö ÀÖ´Â ¹æ¹ýÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ¸¸¾à gettext Å°¿öµå°¡ ÀÖ´Â ÁÙÀ̳ª ¹Ù·Î À­ ÁÙ¿¡ xgettext:c-formatÀ̶ó´Â ´Ü¾î°¡ µé¾î ÀÖ´Â ÁÖ¼®¹®À» xgettext°¡ ãÀ¸¸é ¾î¶² °æ¿ì¶óµµ ±× ¹®ÀÚ¿­¿¡ c-format Ç÷¡±×¸¦ ºÙÀÏ °ÍÀÌ´Ù. ÀÌ·± Á¾·ùÀÇ ÁÖ¼®¹®Àº xgettext°¡ ¾î¶² ¹®ÀÚ¿­ÀÌ Çü½Ä ¹®ÀÚ¿­ÀÎÁö ¾ËÁö ¸øÇÒ °æ¿ì¿¡¸¸ ½á¾ß ÇϹǷΠ¹Ì¸® Å×½ºÆ®µÇ¾ß ÇÑ´Ù. ÁÖ¼®¹®ÀÌ gettext Å°¿öµå¿Í °°Àº ÁÙ¿¡ ÀÖÀ» ¶§ ¹ø¿ªµÉ ¹®ÀÚ¿­ ¾Õ¿¡ ¿Í¾ß ÇÑ´Ù´Â °Í¿¡ À¯ÀÇÇÏÀÚ.

À§¿Í °°Àº »óȲÀº »ó´çÈ÷ ÀÚÁÖ ¹ß»ýÇÑ´Ù. pritnf ÇÔ¼ö´Â Çü½Ä ÁöÁ¤ÀÚ°¡ µé¾î ÀÖÁö ¾ÊÀº ä ÀÚÁÖ ¾²ÀδÙ. ¹°·Ð fputs¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ÀÌ·± »óȲ¿¡¼­ xgettext´Â ÀÌ ¹®ÀÚ¿­ÀÌ Çü½Ä ¹®ÀÚ¿­À̶ó´Â °É ¾ËÁö ¸øÇÏ°í ¹ø¿ª¹®¿¡ Çü½Ä ÁöÁ¤ÀÚ°¡ ¿Ã °æ¿ì´Â ¾î¶»°Ô µÇ´Â°¡? printf ÇÔ¼ö´Â ¶Ç ´Ù¸¥ Àμö¸¦ ÀÐÀ¸·Á°í ÇÒ °ÍÀÌÁö¸¸ ¿ø·¡ ÇÁ·Î±×·¥ ÄÚµå´Â Àμö°¡ ¾øÀ» Å×´Ï, Àμö¸¦ ãÀ» ¼ö ¾øÀ» °ÍÀÌ´Ù.

xgettext´Â ¹°·Ð ¹Ý´ë·Î °áÁ¤À» À߸ø ³»¸± ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î Çü½Ä ¹®ÀÚ¿­·Î Ç¥½ÃµÈ ¹®ÀÚ¿­ÀÌ Çü½Ä ¹®ÀÚ¿­ÀÌ ¾Æ´Ñ °æ¿ìÀÌ´Ù. ÀÌ °æ¿ì¿¡ msgfmtÀº ³Ê¹« ¸¹Àº °æ°í ¸Þ¼¼Áö¸¦ ³¾ °ÍÀÌ°í `.po' ¹ø¿ªÀ» ¹æÇØÇÒ °ÍÀÌ´Ù. ÀÌ·¸°Ô xgettext°¡ À߸ø ÆÇ´ÜÇÏ´Â °æ¿ì¸¦ ¸·´Â ¹æ¹ýÀº À§¿¡¼­ »ç¿ëµÈ ¹æ¹ý°ú ºñ½ÁÇÏ°Ô, xgettext:no-c-format À̶ó´Â ¹®ÀÚ¿­ÀÌ µé¾î ÀÖ´Â ÁÖ¼®¹®À» ¾²¸é µÈ´Ù.

¾î¶² ¹®ÀÚ¿­ÀÌ c-formatÀ¸·Î Ç¥½ÃµÇ¾î ÀÖÀ» °æ¿ì »ç¿ëÀÚ°¡ ¹«¾ù¿¡ ÀÇÇØ ÀÌ·± ÆÇ´ÜÀÌ ³»·ÁÁ³´ÂÁö ¾Ë¾Æ³»´Â ÀÏÀº ¿Ã¹Ù¸£Áö ¾Ê´Ù. ¾î¶»°Ô --debug ¿É¼ÇÀÌ ÀÌ ¹®Á¦¸¦ ÇØ°áÇÒ ¶§ »ç¿ëµÇ´Â Áö´Â See section xgettext ÇÁ·Î±×·¥ ½ÇÇàÇϱâ.

¹ø¿ªµÉ ¼ö ÀÖ´Â ¹®ÀÚ¿­ÀÇ Æ¯º°ÇÑ °æ¿ì

ÁÖÀÇ ±í¿¡ ÀÐÀº µ¶ÀÚ´Â ¹ø¿ªµÉ ¼ö ÀÖ´Â ¹®ÀÚ¿­À» gettext³ª ÀÌ¿Í ºñ½ÁÇÑ °ÍÀ¸·Î ¾ðÁ¦³ª Ç¥½ÃÇÒ ¼ö´Â ¾ø´Ù´Â »ç½ÇÀ» ÁöÀûÇÒ °ÍÀÌ´Ù. ´ÙÀ½ °æ¿ì¸¦ »ý°¢ÇØ º¸ÀÚ:

{
  static const char *messages[] = {
    "some very meaningful message",
    "and another one"
  };
  const char *string;
  ...
  string
    = index > 1 ? "a default message" : messages[index];

  fputs (string);
  ...
}

"a default message"¸¦ Ç¥½ÃÇÏ´Â µ¥´Â ¹®Á¦°¡ ¾øÁö¸¸ messages¿¡¼­ ÃʱâÈ­µÈ ¹®ÀÚ¿­¿¡ Ç¥½ÃÇÏ´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù. ¾î¶»°Ô ÇØ¾ß Çϴ°¡? µÎ°¡Áö ÀÛ¾÷ÀÌ ÇÊ¿äÇÏ´Ù. ù°´Â xgettext ÇÁ·Î±×·¥ÀÌ Ã£À» ¼ö ÀÖµµ·Ï ¹®ÀÚ¿­À» Ç¥½ÃÇÏ´Â °ÍÀÌ°í (see section xgettext ÇÁ·Î±×·¥ ½ÇÇàÇϱâ), µÎ¹ø°´Â ½ÇÇà½Ã¿¡ ¹®ÀÚ¿­À» Ç¥½ÃÇϱâ Àü¿¡ ±× ¹®ÀÚ¿­À» ¹ø¿ªÇÏ´Â °ÍÀÌ´Ù.

ù¹ø° ÀÛ¾÷Àº no-op¶ó´Â À̸§ÀÇ »õ·Î¿î Å°¿öµå¸¦ ¸¸µé¾î¼­ ÇÒ ¼ö ÀÖ´Ù. µÎ¹øÀç´Â À§ÀÇ ¹è¿­¿¡¼­ ¹®ÀÚ¿­À» Á¢±ÙÇÏ´Â ¸ðµç ºÎºÐ¿¡ Ç¥½Ã¸¦ ÇÏ¸é µÈ´Ù. ±×·¯¹Ç·Î ÇÑ °¡Áö ÇØ°á ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù:

#define gettext_noop(String) (String)

{
  static const char *messages[] = {
    gettext_noop ("some very meaningful message"),
    gettext_noop ("and another one")
  };
  const char *string;
  ...
  string
    = index > 1 ? gettext ("a default message") : gettext (messages[index]);

  fputs (string);
  ...
}

fputs¿¡ ÀÇÇØ Ãâ·ÂµÇ´Â ¹®ÀÚ¿­ÀÌ ¾î¶² °æ¿ì¿¡µµ ¹ø¿ªµÇ´Â °ÍÀ» È®ÀÎÇÑ´Ù. ¾î¶»°Ô xgettext°¡ gettext_noop keyword¸¦ ¾Ë¾Æ³»´ÂÁö´Â section xgettext ÇÁ·Î±×·¥ ½ÇÇàÇϱ⿡ ¼³¸íµÇ¾î ÀÖ´Ù.

¹°·Ð À§ÀÇ ¹æ¹ýÀÌ À¯ÀÏÇÑ ¹æ¹ýÀº ¾Æ´Ï´Ù. ´ÙÀ½ ¹æ¹ýÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù:

#define gettext_noop(String) (String)

{
  static const char *messages[] = {
    gettext_noop ("some very meaningful message",
    gettext_noop ("and another one")
  };
  const char *string;
  ...
  string
    = index > 1 ? gettext_noop ("a default message") : messages[index];

  fputs (gettext (string));
  ...
}

ÇÏÁö¸¸, ÀÌ·¸°Ô ÇÏ¸é ¸î °¡Áö ´ÜÁ¡ÀÌ ÀÖ´Ù. ù°·Î ÇÁ·Î±×·¡¸Ó°¡ "a default message" ¹®ÀÚ¿­¿¡ ´ëÇØ gettext_noop¸¦ »ç¿ëÇÏ´Â Áö ½Å°æÀ» ½á¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ¾Ë ¼ö ¾ø´Â °á°ú¿¡ ´ëÇØ gettext¸¦ »ç¿ëÇÏ´Â °æ¿ì´Â ¸Å¿ì µå¹°´Ù. µÎ¹ø°·Î ÀÌ·± ÇØ°á¹æ¹ýÀº GNU gettextÀÇ ±¸Á¶»ó È¿À²ÀÌ ¶³¾îÁø´Ù.

ÇÑ °¡Áö ÁÁÀº Á¡Àº ¾î¶² °æ¿ì¿¡µµ Ãâ·Â¹®ÀÚ¿­ÀÌ Á¤¸»·Î ¹ø¿ªµÇ´ÂÁö È帧À» ºÐ¼®ÇÒ ÇÊ¿ä°¡ ¾ù´Ù´Â Á¡ÀÌ´Ù. ÇÏÁö¸¸, ÀÌ ºÐ¼®Àº º¸Åë ±×¸® ¾î·ÆÁö ¾Ê´Ù. ¸¸¾à ÀÌ·¯ÇÑ »óȲ¿¡ óÇÒ ¼ö¹Û¿¡ ¾ø´Ù¸é, ÀÌ µÎ¹ø° ¹æ¹ýÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.


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