Previous Next Table of Contents

8. X ÇÁ·Î±×·¡¹Ö, X ·ÎÄÉÀÏ ÀÌ¿ë Ãâ·Â

¾ÆÁ÷ ÀûÀº ¼öÀ̱â´Â ÇÏÁö¸¸ ¸®´ª½ºÀÇ ÀüÆÄ¿Í ´õºÒ¾î X À©µµ¿ì¿¡ ´ëÇÑ °ü½Éµµ Á¡Á¡ ´õ ÇØ°¡´Â µí ÇÑ ´À³¦À» ¹Þ½À´Ï´Ù.

¿ì¸®°¡ Çѱ¹ÀÎÀÎ ÀÌ»ó ÇÇÇÒ ¼ö ¾ø´Â ¹®Á¦´Â ¿ì¸®ÀÇ ±ÛÀÇ ¿Ã¹Ù¸¥ Ç¥ÇöÀ̶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. Àڱ⠳ª¶ó ¸»À» »ç¶ûÇÏÁö ¾Ê°Å³ª °ü½ÉÀ» °®°í ¹ßÀü½ÃÅ°Áö ¾Ê´Â ¹ÎÁ·Àº ÀÌ ¼¼»ó¿¡¼­ »ç¶óÁö´Â °Í ¾Æ´Ï°Ú½À´Ï±î? ±×¸®°í Àڱ⠸»À» °®Áö ¾Ê´Â ¹ÎÁ·ÀÌ µµ´ëü ¾î¶² ÀںνÉÀ» °¡Áú ¼ö ÀÖÀ»±î¿ä?

ÄÄÇ»ÅÍ Á¤º¸ ¹®È­ÀÇ ½Ã´ë¿¡ »ì°í ÀÖ´Â ¿ì¸®¿¡°Ô ÇѱÛÀº ¼±Á¶µéÀÇ ³ë·ÂÀ» À̾î¹Þ¾Æ ´õ¿í ´õ ¹ßÀü½ÃÅ°°í Çö´ëÈ­½ÃÄÑ¾ß ÇÒ »ì¾ÆÀÖ´Â ¾ð¾î¶ó´Â »ý°¢ÀÌ µì´Ï´Ù. ÃÖ¼ÒÇÑ ¹ßÀüÀº ¾È½ÃÅ°´õ¶óµµ ¾ÖÂøÀ» °®°í »ç¿ëÀº ÇØ¾ß ÇÒ °Í ¾Æ´Ï°Ú½À´Ï±î?

À©µµ±× »ç¿ëÀÚ ½ÃÀý ¹«ÁöÇÏ°Ôµµ Ç×»ó ÀÌ·± ¸»À» Àڽſ¡°Ô Çϸ鼭 ÄÄÇ»Å͸¦ »ç¿ëÇØ ¿Ô´ø °Í °°½À´Ï´Ù.

"ÇÑ±Û À©µµ¿ì´Â ¾ÈµÅ... ¿ª½Ã... ÇѱÛÈ­¸¸ ÇÏ¸é ¿µ ¾Æ´Ï¾ß... ÇÑ±Û ¾ÈµÅ..."

¿ô±â´Â »ç½ÇÀº ¾ûÅ͸®·Î ÇѱÛÈ­¸¦ ½ÃŲ M$ ÃøÀ̳ª ¹Ì±¹ °¡¼­ ³ª¶óÀÇ ±â¼úÀ» ÆȾƸ԰í ÀÖ´Â Çѱ¹ÀÇ ÄÄÇ»ÅÍ ±â¼úÀڵ鿡°Ô ºñ³­À» º¸³»´Â °ÍÀÌ ¾Æ´Ï¶ó "ÇѱÛ" ÀÚü¸¦ µé¸ÔÀÌ°í ÀÖ¾ú´Ù´Â °ÍÀÔ´Ï´Ù.

»ç½Ç 1 ¹ÙÀÌÆ® ¹®Àڱǿ¡¼­ ź»ýÇÑ ÄÄÇ»ÅͶó´Â ȯ°æ ¼Ó¿¡¼­ Èûµç ½Î¿òÀ» ÇÏ°í ÀÖ´Â °ÍÀÌ »ç½ÇÀÔ´Ï´Ù. Èûµç ÀÏÀÌÁö¸¸ ´©±¸³ª ÇÒ ¼ö ÀÖ´Â ÀÏÀ̶ó¸é ¹ú½á ´Ù¸¥ »ç¶÷µéÀÌ ´Ù ÇسõÀ» °Ì´Ï´Ù. Èûµç ÀÏÀ» Àß Ç϶ó°í ºñ½Ñ µ· µé¿©°¡¸ç ±ÍÁßÇÑ ½Ã°£À» ½ñ¾ÆºÎ¾î°¡¸ç ÇÁ·Î±×·¡¸Ó°¡ µÇ·Á´Â °Í ¾Æ´Ò±î¿ä?

1 ¹ÙÀÌÆ® ¹®ÀÚº¸´Ù´Â ¾à°£ ¾î·Á¿î °úÁ¤À» °ÅÄ¡Áö¸¸ ±×·¸°Ô ¾î·Á¿î °Íµµ ¾Æ´Õ´Ï´Ù. ¿¹Àü¿¡ µµ±× ½ÃÀý¿¡´Â ÇÑ±Û ÀÔÃâ·Â ¸ðµÎ¸¦ ¸Å¹ø ¸¸µé¾î¼­ »ç¿ëÇß´ø ±â¾ïµµ ³³´Ï´Ù. ¾ÆÁÖ °£´ÜÈ÷ ÇÑ±Û ±â´É ÀÚü¸¦ ³»ÀåÇعö¸®´Ï ¼Ó ÆíÇÒ ¼ö ÀÖ¾úÁö¸¸ Áö±ÝÀÇ ¼ÒÇÁÆ®¿þ¾î °³¹ß »óȲ¿¡´Â ÀüÇô ¸ÂÁö ¾Ê´Â ±¸´Ú´Ù¸® ¹æ½ÄÀ¸·Î º¯È­ÇÏ°í ¸»¾Ò½À´Ï´Ù.

X À©µµ¿ì°¡ Á¦°øÇÏ°í ÀÖ´Â ¸¹Àº ±â´ÉµéÀ» ÃæºÐÈ÷ È°¿ëÇϸ鼭 ÇѱÛÀ» ½±°Ô Ç¥ÇöÇÒ ¼ö ÀÖ´Â ¹æ¹ý¿¡ ´ëÇؼ­ ÀÏ´ÜÀº Ãâ·Â¿¡ °üÇÑ ºÎºÐÀ» ´Ù½Ã ÇÑ ¹ø ¼Ò°³Çص帳´Ï´Ù.

8.1 X À©µµ¿ì ÀÚüÀÇ ·ÎÄÉÀÏ ±â´ÉÀ» »ç¿ëÇÑ ÇÑ±Û Ãâ·Â

X À©µµ¿ì¿¡¼­ÀÇ ÇÑ±Û Ãâ·Â ¹æ½Ä¿¡ ´ëÇÏ¿©

¿ì¼± Àú¼öÁØÀÇ ¹æ¹ýÀº ÇÑÅÒ, ±×¸®°í ÇѱÛÈ­µÈ À©µµ¿ì °ü¸®Àڵ鿡¼­ »ç¿ëÇÏ°í ÀÖ´Â ¹æ½ÄÀ¸·Î¼­ °í¼öÁØÀÇ ¹æ¹ý°ú ±¸º°µÇ´Â ±âÁØÀº ¹Ù·Î X À©µµ¿ì ½Ã½ºÅÛÀÌ Á¦°øÇÏ°í ÀÖ´Â ±¹Á¦È­(I18N, Internationalization)¿Í Áö¿ªÈ­(L10N, Localization) ±â¼úÀ» »ç¿ëÇϴ°¡ ¿©ºÎ¿¡ ´Þ·ÁÀÖ½À´Ï´Ù. XDrawString16 ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¼Ò°³ÇØ µå¸° ÀûÀÌ ÀÖ´Â °ÍÀ¸·Î ¾Ð´Ï´Ù. ±× ±ÛÀ» ÀÐÁö ¾ÊÀ¸¼Ì´Ù¸é ±× ±ÛÀ» ¸ÕÀú Àо½Ã±â ¹Ù¶ø´Ï´Ù.

Àú¼öÁØÀÇ ¹æ¹ýÀº ÇÑ±Û ¹®ÀÚ¿­( char Çü )À» Çѱ۰ú ¿µ¹®À¸·Î ³ª´©¾î¼­( ¹ÙÀÌÆ®ÀÇ ÃÖ»óÀ§ ºñÆ®¸¦ º¸°í ÆÇ´Ü ) ÇÑ±Û ºÎºÐÀº XChar2b Çü ¹è¿­¿¡ ³Ö¾î¼­ 2 ¹ÙÀÌÆ®¿ë ÇÔ¼öÀÎ XDrawString16 ÇÔ¼ö·Î Ãâ·ÂÇÏ°í ¿µ¹® ºÎºÐÀº µû·Î 1 ¹ÙÀÌÆ® Àü¿ë ÇÔ¼öÀÎ XDrawString ÇÔ¼ö·Î Ãâ·ÂÇÏ´Â ¹æ½ÄÀ» »ç¿ëÇÕ´Ï´Ù.

Àú¼öÁØÀ̹ǷΠ»ó´çÈ÷ ¹ø°Å·Ó´Ù°í ÇÏÁö ¾ÊÀ» ¼ö ¾ø½À´Ï´Ù. Çѱ۰ú ¿µ¹®À» ¼¯¾î¼­ ¾²´Â °æ¿ì¿¡´Â Á¤¸» ½Å°æ¾µ ÀÏÀÌ ¸¹½À´Ï´Ù. ¹®ÀÚ¿­À» Àо ÀÏÀÏÀÌ ÇѱÛÀÌ Ãâ·ÂµÇ´Â È­¸é ÆøÀ» °è»êÇÏ°í ±× ´ÙÀ½¿¡ ¿µ¹®À» Ãâ·ÂÇÏ°í ±× ÆøÀ» °è»êÇÑ ÈÄ ´Ù½Ã ÇѱÛÀ» Ãâ·ÂÇÏ°í...

°í¼öÁØÀÇ ¹æ¹ýÀº ¹Ù·Î X À©µµ¿ì ½Ã½ºÅÛÀÌ R5 ºÎÅÍ Áö¿øÇϱ⠽ÃÀÛÇÑ ±¹Á¦È­/Áö¿ªÈ­ ±â¹ýÀ» »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. °°Àº 1 ¹ÙÀÌÆ® ¹®ÀÚ±ÇÀ̶ó ÇÒ Áö¶óµµ ¿µ¾î¿¡ ¸ÂÃçÁø ASCII ¹®Àڷδ ºÒ°¡´ÉÇÑ À¯·´¾ð¾î( ÇÁ¶û½º¾î, µ¶ÀÏ¾î µî... )¿Í ¾ÖÃʺÎÅÍ ASCII·Î´Â Åõµ ¾ø´Â 2 ¹ÙÀÌÆ® ÀÌ»óÀÇ ¹®ÀÚ±ÇÀÎ Çѱ¹¾î, Áß±¹¾î, ÀϺ»¾î µî¿¡ ´ëÇÑ ½Ã½ºÅÛ Â÷¿øÀÇ Áö¿øÀÌ ³íÀǵǸ鼭 ÇÁ·Î±×·¡¸ÓµéÀÌ ½±°Ô ±¹Á¦ÀûÀÎ ÇÁ·Î±×·¥À» ¸¸µé ¼öÀÖµµ·Ï °í¹ÎÇÑ °á°úÀÔ´Ï´Ù. ±¹Á¦È­¶õ ÇÁ·Î±×·¥ÀÌ ¾î¶² ¾ð¾î ȯ°æ¿¡¼­µç »ç¿ëµÉ ¼ö ÀÖµµ·Ï À¯¿¬ÇÏ°Ô ÇÁ·Î±×·¡¹ÖÇÏ´Â °ÍÀ» ¸»ÇÏ¸ç ±×·¸°Ô ±¹Á¦È­µÈ ÇÁ·Î±×·¥À» ƯÁ¤ ¾ð¾î³ª ¹®È­¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÀûÀÀ½ÃÅ°´Â °ÍÀ» Áö¿ªÈ­¶ó°í ºÎ¸¨´Ï´Ù.

ÀÌ¹Ì ¼Ö¶ó¸®½º³ª HP-UX µî¿¡¼­ »ó¿ë X À©µµ¿ì¸¦ º¸½Å ºÐµéÀº ÀÌ°ÍÀÌ ¹«¾ùÀ» ¶æÇÏ´ÂÁö ¾Æ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. À©µµ±×95 °°Àº °ÍÀ» ÇÁ¶û½ºÆÇ, µ¶ÀϾîÆÇ, Çѱ¹¾îÆÇ, Áß±¹¾îÆÇ, ÀϺ»¾îÆÇ ÀÌ·¸°Ô ´ßÁúÀ» ÇØ°¡¸é¼­ µû·Îµû·Î ¸¸µå´Â °Í°ú´Â Â÷¿øÀÌ ´Ù¸¨´Ï´Ù. °£´ÜÇÑ ¼³Á¤ Çϳª·Î °°Àº X À©µµ¿ì ½Ã½ºÅÛÀÌ ¿©·¯ °³ÀÇ ¾ð¾î·Î µ¿ÀÛÇϵµ·Ï ¼³°èµÇ¾î ÀÖ½À´Ï´Ù. ·Î±×ÀÎ È­¸éºÎÅÍ°¡ ¾Æ¿¹ ´Þ¶óÁöÁö¿ä.

X À©µµ¿ì ½Ã½ºÅÛÀÌ Áö¿øÇÏ´Â I18N, L10N ÀÌ¿ëÇϱâ

ÀÌÁ¦ ¾Ë¾Æº¼ ³»¿ëÀº ¹Ù·Î °í¼öÁØÀÇ ÇÑ±Û Ãâ·Â¿¡ ´ëÇÑ °ÍÀÔ´Ï´Ù.

¾î¶² ÀýÂ÷¸¦ °ÅÃÄ¾ß ÇÏ´ÂÁö¿¡ ´ëÇؼ­ ¾Ë¾Æº¸µµ·Ï ÇսôÙ.

LOCALE µ¥ÀÌÅͺ£À̽º Áö¿øÀ» ´©°¡ Çϴ°¡?

À¯´Ð½º ½Ã½ºÅÛÀÇ ·ÎÄÉÀÏ Áö¿øÀº ÀÏ´Ü X À©µµ¿ì ½Ã½ºÅÛÀÌ ¾Æ´Ñ ANSI/POSIX ±Ô°Ý Â÷¿øÀÇ Áö¿øÀÌ ÀÖ½À´Ï´Ù. ´ëºÎºÐÀÇ »ó¿ë À¯´Ð½º³ª ¾Æ´Â ¹Ù ¾øÁö¸¸ FreeBSD ¿Í °°Àº ¿î¿µÃ¼Á¦¿¡¼­ Áö¿øÇÏ°í ÀÖ´Â °ÍÀ¸·Î ¾Ë°í ÀÖ½À´Ï´Ù. Áö±Ý ÇöÀç GNU NLS ÆÀ¿¡¼­ ¿­½ÉÈ÷ ÇÁ·Î±×·¥ ¸Þ¼¼Áö Áö¿ªÈ­¸¦ ÇÏ°í °è½Å ºÐµéÀÇ °á°ú°¡ Á¶¸¸°£ ¿ì¸® °ç¿¡ ¿À°Ô µÇ°ÚÁö¿ä? ±× ºÐµé¿¡°Ô °Ý·Á¸¦ º¸³À´Ï´Ù.

¸®´ª½º´Â ¾ÆÁ÷ C ¶óÀ̺귯¸®¿¡ ´ëÇؼ­ Á¦´ë·Î ¸ð¸£±â ¶§¹®¿¡ È®½ÇÇÏ°Ô ¸»¾¸µå¸± ¼ö ¾ø½À´Ï´Ù. C ¶óÀ̺귯¸® 5.4.X ¿¡¼­ ·ÎÄÉÀÏ¿¡ ´ëÇÑ Áö¿øÀÌ ÀÖ´Ù°í´Â ÇÏ´Â °Í °°Àºµ¥ Á¦´ë·Î È®ÀÎÀÌ µÇÁú ¾Ê´Âµ¥´Ù°¡ ÀúÀÇ °ü½É ¿µ¿ªÀ» ·Î¿ì·¹º§ ÇÁ·Î±×·¡¹ÖÀÌ ¾Æ´Ï¶ó¼­...

µÎ¹ø°·Î´Â ¿î¿µÃ¼Á¦ ÀÚüÀÇ Áö¿ø°ú´Â ¿ÏÀü º°µµ·Î X À©µµ¿ì ÀÚüÀûÀ¸·Î ÇØ°áÇØÁÖ´Â ¹æ½ÄÀÌ ÀÖ½À´Ï´Ù. ¹Ù·Î ¿À´Ã X À©µµ¿ì ÀÚü°¡ Áö¿øÇÏ´Â ·ÎÄÉÀÏ Áö¿øÀ» »ç¿ëÇÏ¿© ÇØ°áÇÒ °ÍÀÔ´Ï´Ù. ÀüÀÚ³ª ÈÄÀÚ ¸ðµÎ Áß¿äÇѵ¥ ÀÏ´Ü X À©µµ¿ì ÀÚüÀûÀ¸·Îµµ Áö¿øÀ» ÇØÁشٴ °ÍÀº ¾î¶² Ç÷§Æ÷¿ÈÀΰ¡¿¡ »ó°ü¾øÀÌ °°Àº X À©µµ¿ì¸¸ µ¹¾Æ°£´Ù¸é ¾îµð¼­µç ¿©·¯ºÐÀÇ ÇÁ·Î±×·¥ÀÌ Á¦´ë·Î µ¿ÀÛÇϸ®¶õ º¸ÀåÀ» ¹ÞÀ» ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖ½À´Ï´Ù.

¸®´ª½º C ¶óÀ̺귯¸®¿¡ ´ëÇÑ ¿¬±¸´Â ½Ã°£À» ³»¼­ Á» ´õ ÇغÁ¾ß ÇÒ °Í °°½À´Ï´Ù. ¸¹Àº »ç¶÷µéÀÌ ¶Ù¾îµé¾îÁֱ⸦ ¹Ù¶ö »ÓÀÔ´Ï´Ù. ¸®´ª½º´Â °³¹æ üÁ¦À̹ǷΠÀÚ¿øÀÚ°¡ ¸¹Àº °÷ÀÇ ºÐÀ§±â¸¦ µû¸£Áö ¾Ê°Ú¾î¿ä? ¾Æ½Ã¾ÆÀÇ ÀþÀºÀ̵éÀÌ ¸¹ÀÌ ¶Ù¾îµé ¼ö·Ï ¸®´ª½º ÀÚü´Â ±¹Á¦ÀûÀÎ ¿î¿µÃ¼Á¦·Î ´Ù½Ã ž ¼ö ÀÖÀ¸¸®¶ó º¾´Ï´Ù.

¿©·¯ºÐÀÇ X À©µµ¿ì ½Ã½ºÅÛÀ» Á¡°ËÇÕ´Ï´Ù.

ANSI ±Ô°Ý¿¡¼­ Á¤ÀÇÇÑ ¹Ù¿Í °°½À´Ï´Ù. C ¼ÐÀ» ¾²´Â ºÐµéÀº setenv LANG ko ¿Í °°Àº Ç¥ÇöÀ» ½áº¸½Å ÀûÀÌ ÀÖÀ» °Ì´Ï´Ù. ÀÌ ±ÛÀº ANSI ±Ô°ÝÀÇ setlocale ÇÔ¼ö¿¡ °ü·ÃµÈ ¸ðµç »çÇ×À» ÀÚ¼¼È÷ ¼³¸íÇϱâ À§ÇÑ °ÍÀº ¾Æ´Ï¹Ç·Î µû·Î °øºÎÇغ¸½Ã±â ¹Ù¶ø´Ï´Ù. ¾ÆÁÖ Áß¿äÇÑ À̽´ ÁßÀÇ ÇϳªÀÎ °ÍÀº ºÐ¸íÇÑ °Í °°½À´Ï´Ù.

ÀÏ´ÜÀº /usr/X11R6/lib/X11/locale µð·ºÅ丮¿Í ³»¿ëÀÌ ÀÖ´ÂÁö¸¦ È®ÀÎÇغ¸½Ê½Ã¿ä. ¸®´ª½º ¹èÆ÷ÆÇ¿¡¼­ X À©µµ¿ì ½Ã¸®Á Á¦´ë·Î ¼³Ä¡Çß´Ù¸é ÀÖ¾î¾ß ÇÒ ³»¿ëÀÔ´Ï´Ù.

 C/             iso8859-3/     iso8859-8/     ko/            th_TH.TACTIS/
 compose.dir    iso8859-4/     iso8859-9/     koi8-r/        zh/
 en_US.utf/     iso8859-5/     ja/            locale.alias   zh_TW/
 iso8859-1/     iso8859-6/     ja.JIS/        locale.dir
 iso8859-2/     iso8859-7/     ja.SJIS/       tbl_data/

ko ¶ó´Â µð·ºÅ丮°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ±× ¾È¿¡´Â XLC_LOCALE À̶ó´Â È­ÀÏÀÌ µé¾îÀÖ½À´Ï´Ù. ±× È­ÀÏ ¾È¿¡ Çѱ¹¾îÀÇ Ãâ·Â¿¡ ´ëÇÑ °ü·Ã Á¤º¸°¡ µé¾îÀÖ½À´Ï´Ù.

º¸ÅëÀº LANG ¼¼ÆÃÀÌ ¾ø´Â °æ¿ì ±âº»ÀûÀ¸·Î C µð·ºÅ丮¿¡ ÀÖ´Â ³»¿ëÀ» »ç¿ëÇÕ´Ï´Ù.

À§ È­ÀϵéÀÌ Á¦´ë·Î ÀÖ´Â °ÍÀ» È®ÀÎÇÑ ÈÄ¿¡ ²À ´ÙÀ½ ¼¼ÆÃÀ» ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù.

º»¼Ð °è¿­À̶ó¸é...

        export LANG=ko

C ¼Ð °è¿­À̶ó¸é...

        setenv LANG ko

³ªÁß¿¡ °°Àº ÇÁ·Î±×·¥¿¡ ´ëÇؼ­ ±×³É LANG ¼¼ÆÃÀ» Àç¹Ì»ï¾Æ ja ¶ó°í ¹Ù²ãº¸½Ê½Ã¿ä. ±×·¯¸é Àç¹ÌÀÖ´Â ÀÏÀÌ ¹ú¾îÁú °ÍÀÔ´Ï´Ù. ¿©·¯ºÐÀÌ ³×½ºÄÉÀÌÇÁ¿¡¼­ ¿É¼Ç ¸Þ´º¿¡¼­ ÄÚµù ¿É¼Ç¸¸ ¹Ù²ãÁÖ¸é ÅؽºÆ®ÀÇ ³»¿ëÀÌ Çѱ۷Πº¸¿´´Ù°¡ ÀϺ»¾î·Î º¸¿´´Ù ÇÏ´Â ¿ø¸®¸¦ ½±°Ô ÀÌÇØÇÏ½Ç ¼ö ÀÖÀ¸¸®¶ó º¾´Ï´Ù.

ÀÌÁ¦ºÎÅÍ ÇÁ·Î±×·¡¹ÖÀ» Çغ¾½Ã´Ù.

ÇÁ·Î±×·¡¹ÖÀ̶õ ÀüÇüÀûÀÎ ÆÐÅÏÀÌ ÀÖ°Ô ¸¶·ÃÀÌÁö¿ä. ±×¸®°í È®½ÇÇÑ ÆÐÅÏ( ¹°·Ð ÁÁÀº ÆÐÅÏ :> )À» ÀÍÇôµÎ´Â °ÍÀÌ ÁÁ½À´Ï´Ù.

¿¹Á¦¸¦ ¼Õ¼ö ŸÀÌÇÎÇØ º¸½Ã´Â °ÍÀÌ ÁÁÀ» °Ì´Ï´Ù. ÀÏ´Ü ÄÄÆÄÀÏÀ» Çغ¸°í Á¦´ë·Î µÈ´Ù´Â °ÍÀ» È®ÀÎÇϽñ⠹ٶø´Ï´Ù.

                        X Locale À» ÀÌ¿ëÇÑ ÇÑ±Û Ãâ·Â


*/
#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
/*
#include <locale.h>
*/
#include <X11/Xlocale.h>

void DrawCenteredMbString ( Display *, Window, XFontSet, GC, char*, int, int,
                                int, int, int );

int
main (argc, argv)
        int argc;
        char *argv[];
{
        Display *dpy;
        Window  w;
        XFontSet fontset;
        char **missing_charsets;
        int num_missing_charsets;
        char *default_string;
        int i;
        GC      gc;
        XEvent  xe;

        char *program_name = argv[0];

        if ( setlocale (LC_ALL,"") == NULL )       {
                (void) fprintf (stderr, "%s: cannot set locale.\n",
                program_name );
                exit (1);
        }

        if ( !XSupportsLocale () ) {
                (void) fprintf (stderr,"%s: X does not support locale %s.\n",
                program_name, setlocale( LC_ALL, NULL ) );
                exit (1);
        }

        if ( XSetLocaleModifiers("") == NULL )    {
                (void) fprintf (stderr,
                        "%s: Warning: cannot set locale modifiers.\n",
                        program_name);
        }

        dpy = XOpenDisplay ( NULL);
        w   = XCreateSimpleWindow ( dpy, RootWindow( dpy, 0 ), 50, 50,
                                        100, 50, 5, BlackPixel( dpy, 0 ),
                                        WhitePixel( dpy, 0 ) );
        gc = XCreateGC ( dpy, w, 0L, ( XGCValues * ) NULL );

        fontset = XCreateFontSet (dpy, "-*-*-*-*-*-*-16-*-*-*-*-*-*-*",
                        &missing_charsets, &num_missing_charsets,
                        &default_string);
        if ( num_missing_charsets > 0 ) {
                (void) fprintf (stderr,
                        "%s: The following charsets are missing:\n",
                        program_name);
                for ( i=0; i < num_missing_charsets; i++ )
                        (void)fprintf (stderr, "%s:   %s\n", program_name,
                                missing_charsets[i]);
                (void) fprintf (stderr, "%s: The string is %s", program_name,
                                default_string);
                (void) fprintf (stderr, 
                                "%s: of any characters from those sets.\n",
                                program_name);
                XFreeStringList (missing_charsets);
        }

        XSetLineAttributes ( dpy, gc, 5, LineSolid, CapRound, JoinRound );

        XSelectInput ( dpy, w, ExposureMask | ButtonPressMask 
                        | EnterWindowMask | LeaveWindowMask );

        XMapWindow ( dpy, w );

        XFlush ( dpy );

        while ( True )
        {
                XNextEvent ( dpy, &xe );

                switch ( xe.type )      {

                case Expose:
                        printf ("Expose À̺¥Æ®°¡ ¹ß»ýÇß½À´Ï´Ù.\n");
                        XSetForeground ( dpy, gc, BlackPixel( dpy, 0 ) );
                        DrawCenteredMbString ( dpy, w, fontset, gc, 
                                        "¾È³ç Hello",
                                        10, 0, 0, 100, 50 );
                        break;
                case ButtonPress:
                        printf ("¹öÆ°À» ´©¸£¼Ì½À´Ï´Ù!\n");
                        exit (1);
                        break;
                case EnterNotify:
                        printf ("¸¶¿ì½º°¡ â ¾ÈÀ¸·Î µé¾î¿Ô½À´Ï´Ù.\n");
                        XSetForeground ( dpy, gc, BlackPixel( dpy, 0 ) );
                        XDrawRectangle ( dpy, w, gc, 0, 0, 100, 50 );
                        break;
                case LeaveNotify:
                        printf ("¸¶¿ì½º°¡ â ¹ÛÀ¸·Î ³ª°¬½À´Ï´Ù.\n");
                        XSetForeground ( dpy, gc, WhitePixel( dpy, 0 ) );
                        XDrawRectangle ( dpy, w, gc, 0, 0, 100, 50 );
                        break;
                default:
                        printf ("¸ð¸£´Â À̺¥Æ®ÀÔ´Ï´Ù. ¹«½ÃÇÕ´Ï´Ù.\n");
                        break;
                }
        }
        return 0;
}

void
DrawCenteredMbString (dpy, w, fontset, gc, str, num_bytes, x, y, width, height )
        Display *dpy;
        Window w;
        XFontSet fontset;
        GC gc;
        char *str;
        int num_bytes;
        int x,y, width, height;
{
        XRectangle boundingbox;
        XRectangle dummy;
        int originx, originy;

        (void) XmbTextExtents (fontset, str, num_bytes, &dummy, &boundingbox);

        originx = x + ( width - boundingbox.width )/2 - boundingbox.x;
        originy = y + ( height - boundingbox.height)/2 - boundingbox.y;

        XmbDrawString (dpy, w, fontset, gc, originx, originy, str, num_bytes);
}

ÀÚ, ÄÄÆÄÀÏÀ» Çغ¸µµ·Ï ÇսôÙ. ¾à°£ÀÇ ÁÖÀÇ°¡ ÇÊ¿äÇÕ´Ï´Ù.

ÀÌ ÇÁ·Î±×·¥Àº ²À ¸®´ª½º¿¡¼­¸¸ ÄÄÆÄÀÏÇ϶õ ¹ýÀº ¾ø½À´Ï´Ù. ( È®ÀÎÀº ¾ÈÇßÁö¸¸... )

½Ã½ºÅÛ ¼öÁØ¿¡¼­ ·ÎÄÉÀÏÀ» Áö¿øÇÏ´Â °æ¿ì¿¡´Â ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏÇØ¾ß ÇÕ´Ï´Ù.

        gcc -o test_locale test.locale.c -lX11 -L/usr/X11/lib

¸®´ª½º ½Ã½ºÅÛÀÎ °æ¿ì¿¡´Â X À©µµ¿ì ÀÚüÀÇ ·ÎÄÉÀÏÀ» »ç¿ëÇÒ °ÍÀ̹ǷΠ´ÙÀ½°ú °°ÀÌ ÇØÁÖ¾î¾ß¸¸ ÇÕ´Ï´Ù.

        gcc -o test_locale test.locale.c -DX_LOCALE -lX11 -L/usr/X11/lib

¼ø¼­´ë·Î ¼³¸íÀ» Çغ¸µµ·Ï ÇÏ°Ú½À´Ï´Ù.

½Ã½ºÅÛÀÌ ·ÎÄÉÀÏÀ» Áö¿øÇϴ°¡?

setlocale ÇÔ¼ö¸¦ ½á¼­ ½Ã½ºÅÛ Â÷¿ø¿¡¼­ ¶Ç´Â X À©µµ¿ì ½Ã½ºÅÛ Â÷¿ø¿¡¼­ ·ÎÄÉÀÏÀ» Áö¿øÇÏ´ÂÁö ¿©ºÎ¿¡ ´ëÇؼ­ ¾Ë¾Æº¾´Ï´Ù. ½ÇÇàµÇ´Â Ç÷§Æ÷¿È¿¡¼­ ·ÎÄÉÀÏÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù¸é ´Ù¸¥ Á¶Ä¡¸¦ ÃëÇϵçÁö ¾Æ´Ï¸é ½ÇÇàÀ» ÁßÁöÇØ¾ß ÇÒ °ÍÀÔ´Ï´Ù. Á¦´ë·Î µÈ °á°ú°¡ ³ª¿ÀÁú ¾ÊÀ»Å״ϱî¿ä.

  setlocale (LC_ALL,"") == NULL ÀÌ ¹®ÀåÀ¸·Î È®ÀÎÀ» ÇÏ°í ÀÖ½À´Ï´Ù.

X À©µµ¿ì Â÷¿ø¿¡¼­ÀÇ ·ÎÄÉÀÏ Áö¿ø ¿©ºÎ È®ÀÎ

XSupportsLocale ÇÔ¼ö¿Í XSetLocaleModifiers ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ·ÎÄÉÀÏ Áö¿ø¿©ºÎ¸¦ ¹°¾îº¾´Ï´Ù.

ÈÄÀÚÀÇ ÇÔ¼ö´Â "X ÀÔ·Â ¼­¹ö"¿¡ °ü°èµÈ °ÍÀ̹ǷΠÁö±ÝÀ¸·Î¼­´Â ¼³¸íµå¸± ¼ö°¡ ¾ø°í »ó´çÈ÷ Àü¹®ÀûÀÎ ¾ê±â·Î ºüÁú °¡´É¼ºÀÌ ¸¹½À´Ï´Ù. Á¶¸¸°£¿¡ "X ÀÔ·Â ¼­¹ö" Á¦ÀÛ¿¡ ´ëÇؼ­ µû·Î ¼Ò°³¸¦ Çص帮±â·Î ÇÏ°Ú½À´Ï´Ù. ±Ã±ÝÁõÀ» Âü±â ¾î·Á¿î ºÐÀº ±×³É ¿À·¼¸® ÃâÆÇ»çÀÇ X À©µµ¿ì ½Ã¸®Áî Volume One Xlib ÇÁ·Î±×·¡¹Ö ¸Å´º¾óÀ» º¸½Ã¸é µË´Ï´Ù.

ÆùÆ®¼Â(FontSet)À̶ó´Â °³³ä....

ÆùÆ®¼ÂÀ̶ó´Â °³³äÀº ±ÛÀÚ ±×´ë·Î ÆùÆ®ÀÇ ÇÑ ¼¼Æ®¸¦ ¸»ÇÕ´Ï´Ù. ¾î¶² ƯÁ¤ ¾ð¾îÀÇ Äڵ忡 ¸Â´Â( ¿¹¸¦ µé¾î ASCII, ISO8859-1, EUC-KR, ISO-2022-KR µîµî ) ¹®ÀÚ ÆùÆ®µéÀÌ ÀÌ¹Ì ¸¶·ÃµÇ¾î ÀÖ¾î¾ß Ãâ·ÂÀ» ÇÒ ¼ö ÀÖ°ÚÁö¿ä? Áï ȯ°æ º¯¼ö LANG ÀÌ Áö½ÃÇÏ´Â ÄÚµù ½ºÅ¸ÀÏ¿¡ ¸Â´Â ÆùÆ®µéÀÇ ÇÑ ¼¼Æ®¸¦ ÁöÁ¤ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù.

¸ðƼÇÁ ÇÁ·Î±×·¡¹ÖÀ» Çغ¸½Å ºÐµéÀ̶ó¸é ÆùÆ®¼ÂÀ̶ó´Â °³³ä¿¡ ´ëÇؼ­ ¾î´À Á¤µµ ¾Æ½Ç °Ì´Ï´Ù. ÀÏ´ÜÀº X À©µµ¿ì ·ÎÄÉÀÏÀ» ÀÌ¿ëÇÏ´Â ¹æ½ÄÀº ÆùÆ®¼ÂÀ» »ç¿ëÇÑ´Ù´Â »ç½ÇÀ» Á¤È®È÷ ¾Æ¼Å¾ß ÇÕ´Ï´Ù. »ý°¢º¸´Ù »ó´çÈ÷ °£ÆíÇÏ°Ô ¸¸µì´Ï´Ù.

XCreateFontSet ÇÔ¼ö¸¦ ÀÌ¿ëÇÏÁö¿ä.

µÎ¹ø° Àμö·Î ±×³É -*-*-*-*-*-*-16-*-*-*-*-*-*-* À̶ó°í XLFD ¹æ½ÄÀÇ ÆùÆ®¸íÀ» ÁöÁ¤ÇØÁÖ¾úÀ¸¹Ç·Î 16 Æ÷ÀÎÆ® ÆùÆ®µéÀ» ã¾Æ³»¼­ ÆùÆ®¼Â¿¡ µî·ÏÇÏ°Ô µË´Ï´Ù. ¸¸¾à 16 Æ÷ÀÎÆ® ÆùÆ®°¡ ¾ø´Ù¸é °¡Àå °¡±î¿î ÆùÆ®¸¦ ã¾Æ¼­ X À©µµ¿ì ÀÚü°¡ ½ºÄÉÀϸµÀ» ÇØÁÝ´Ï´Ù. ÀÌ ¶§°¡ X À©µµ¿ìÀÇ °¡Àå Ãë¾àÇÑ ºÎºÐÀε¥... 2 ¹ÙÀÌÆ®±ÇÀÇ ¾öû³­ ¾çÀÇ ÆùÆ®¸¦ ½ºÄÉÀϸµÇÏ°Ô µÉ ¶§´Â ¸¶Ä¡ X ¼­¹ö°¡ ¸ØÃç¹ö¸®´Â µí ÇÑ Çö»óÀÌ ÀϾ´Ï´Ù. ÆùÆ®¸¦ ¸ðµÎ º¯È¯ÇÏ´À¶ó ¾öû³­ ½Ã°£À» ¼ÒºñÇÏ°í Àֱ⠶§¹®ÀÌÁö¿ä. À§ ¼ýÀÚ¸¦ 15³ª ´Ù¸¥ ¼ýÀÚ·Î ¹Ù²Ù¾î¼­ ÇÑ ¹ø Çغ¸½Ã±â ¹Ù¶ø´Ï´Ù. ±× Â÷ÀÌÀ» ´À³¢½Ç ¼öµµ ÀÖÀ» °Ì´Ï´Ù.

¹®ÀÚ¿­ÀÇ Ãâ·ÂÀº °£´ÜÈ÷ XmbDrawString ÇÔ¼ö ÀÌ¿ë

À§¿¡¼­´Â DrawCenteredMbString ¶ó´Â »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö ³»¿¡¼­ ¸ÖƼ ¹ÙÀÌÆ® ÄÚµù¿¡ »ç¿ëÇÏ´Â Ãâ·Â ÇÔ¼ö XmbDrawString ¸¦ »ç¿ëÇÏ¿´½À´Ï´Ù. À§¿¡¼­ º¸½Ã´Â ¹Ù¿Í °°ÀÌ ¿¾³¯¿¡ Àú¼öÁØ Ãâ·ÂÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ÇѱÛÀ» Çѱ۴ë·Î ¿µ¹®Àº ¿µ¹®´ë·Î µû·Î ´ßÁúÀ» ÇÒ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù. -_-

ÇÑ±Û ÄÚµùµÈ 2 ¹ÙÀÌÆ® ¹®ÀÚ¸¦ ±×³É ¾²¸é µË´Ï´Ù. ´ÜÁö À§¿¡¼­´Â ¹®ÀÚ Ãâ·Â À§Ä¡¸¦ Á¶Á¤Çϱâ À§ÇÏ¿© XmbTextExtents ÇÔ¼ö¿Í °°Àº °ÍÀ» »ç¿ëÇÏ¿´½À´Ï´Ù.


Previous Next Table of Contents