ÇÁ·Î±×·¡¸Ó¿¡°Ô ÇØ´çµÇ´Â ÀÏ·Î, 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 ÆÄÀÏÀº ÇÁ·Î±×·¥ ¼Ò½º¿¡¼ ¹ø¿ªµÉ ¼ö ÀÖ´Â ¹®ÀÚ¿À» Ç¥½ÃÇÔ¿¡ µû¶ó ¼¼È÷ ³»¿ëÀÌ Ã¤¿öÁú °ÍÀÌ´Ù.
,(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.