Locales mini-HOWTO Peeter Joot, joot@ecf.toronto.edu v1.3, 1996³â 6¿ù 6ÀÏ ÀÌ ¸¸ ¿ë geoman@nownuri.net ÀÌ ¹®¼­´Â ¸®´ª½º¿¡¼­ locale ¸¦ ¾²±â À§ÇØ ¼³Á¤ÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù. ______________________________________________________________________ ¸ñÂ÷ 1. ¼Ò°³ 2. µµ´ëü ·ÎÄÉÀÏ(locale)À̶õ ¹«¾ùÀΰ¡? 3. ÁÖÀÇ »çÇ× 4. ¿©·¯ºÐ¿¡°Ô ÇÊ¿äÇÑ »çÇ× 5. ¸ðµç °ÍÀ» ÀνºÅçÇϱâ 6. ÀÌÁ¦ ¹«¾ùÀ» ÇÒ °ÍÀΰ¡? 7. catopen ¹ö±× °íÄ¡±â 8. Áú¹®°ú ´ä 8.1 msgcat Áú¹® 8.2 msgcat ´äº¯ 9. ³¡³»´Â ¸» ______________________________________________________________________ 1. ¼Ò°³ ¿©±â¼­ ³ª´Â localdef ¸¦ ÀνºÅçÇϱâ À§ÇÏ¿© ¹«¾ùÀ» ÇßÀ¸¸ç ¾î¶»°Ô localeÀ» ÄÄÆÄ ÀÏÇß´ÂÁö ±×¸®°í ±× °æÇè¿¡ ´ëÇؼ­ À̾߱â½ÄÀ¸·Î ÁøÇàÇÏ·Á°í ÇÑ´Ù. ³ª´Â ´ÜÁö Àç¹Ì·Î ÀÌ ÀÏ¿¡ ¶Ù¾îµé¾ú°í ´Ù¸¥ »ç¶÷µéµµ ÀÌ ÀÏ¿¡ Èï¹Ì¸¦ °¡Áú °ÍÀÌ ¶ó°í »ý°¢Çß´Ù. ÀÏ´Ü ¼³Á¤¸¸ µÇ¸é ¿©·¯ºÐÀÇ ¼±ÅÃÇÑ ·ÎÄÉÀÏÀ» °¡Áö°í NLS Áö¿øÀÇ ¾îÇø®ÄÉÀ̼ÇÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. Á¶±Ý ÀÖÀ¸¸é ·ÎÄÉÀÏ Áö¿øÀº Ç¥ÁØ ¹èÆ÷ÆÇÀÇ ÀϺΠ°¡ µÉ °ÍÀÌ°í ÀÌ ¹Ì´Ï ÇÏ¿ìÅõ ¹®¼­¿¡µµ ¸¹Àº ³»¿ëÀÌ Ãß°¡µÇ¸®¶ó º»´Ù. 2. µµ´ëü ·ÎÄÉÀÏ(locale)À̶õ ¹«¾ùÀΰ¡? ·ÎÄÉÀÏÀº ¿©·¯ºÐÀÌ ¿©·¯ºÐÀÇ ÇÁ·Î±×·¥ ¼ÓÀ¸·Î ÇϵåÄÚµùÀ» Çؼ­´Â ¾ÈµÇ´Â ¾ð¾î/¹® È­ °ü·ÃÀÇ »çÇ×À» ´Ù·é´Ù. ¸¸¾à ´Ù¾çÇÑ ·ÎÄÉÀÏÀ» ¼³Ä¡Çصξú´Ù¸é ´ÙÀ½ ȯ°æ º¯¼ö ¼³Á¤À» ÅëÇÏ¿© ·ÎÄÉÀÏÀ» Áö¿øÇÏ´Â ÇÁ·Î±×·¥ÀÇ ½ÇÇà ¹æ½ÄÀ» ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ±âº» ·ÎÄÉÀÏÀº C ¶Ç´Â POSIX À̸ç libc ¿¡ ÇϵåÄÚµùµÇ¾î ÀÖ´Ù. LANG ÀÌ ¼¼ÆÃÀ» ÅëÇØ ·ÎÄÉÀÏÀ» ¼³Á¤ÇÑ´Ù. ÇÏÁö¸¸ LC_xxxx ȯ°æ º¯¼ö¿¡ ÀÇÇØ º¯È­µÉ ¼ö ÀÖ´Ù. LC_COLLATE Á¤·Ä ¼ø¼­ LC_CTYPE ¹®ÀÚ Á¤ÀÇ, ´ë¹®ÀÚ, ¼Ò¹®ÀÚ,... À̵éÀº toupper, tolower, islower, isdigit µîÀÇ ÇÔ¼ö¿¡ »ç¿ëµÈ´Ù. LC_MONETARY ±Ý¾×À» Ç¥ÇöÇÏ´Â Çü½Ä Á¤º¸¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù. õ´ÜÀ§¸¦ ±¸ºÐÇÏ´Â ¹®ÀÚ, ¼Ò¼öÁ¡ ¹®ÀÚ, ±×¸®°í ±Ý¾× Ç¥½Ã ¹®ÀÚ, ±× À§Ä¡ µîÀÇ Á¤º¸¸¦ Á¦½ÃÇÑ´Ù. LC_NUMERIC ¼ýÀÚ¸¦ Ç¥ÇöÇÔ¿¡ ÀÖ¾î, õ´ÜÀ§, ¼Ò¼öÁ¡, ¼ýÀÚ ±×·ìÇÎÀ» ´Ù·é´Ù. LC_TIME ½Ã°£°ú ³¯Â¥ÀÇ Ç¥ÇöÇü½ÄÀ» ÁöÁ¤ÇÑ´Ù. ÁÖ¿Í ´Þ¿¡ ´ëÇÑ ¸íĪ°ú ¾à¾î¸¦ ´Ù·é ´Ù. LC_MESSAGES ¿¹/¾Æ´Ï¿À Ç¥Çö LC_ALL ·ÎÄÉÀÏÀ» ÁöÁ¤ÇÑ´Ù. ÇÏÁö¸¸ ´Ù¸¥ LC_xxxx À¸·Î º¯È­µÉ ¼ö ÀÖ´Ù. ¿©±â ¸î °¡Áö ·ÎÄÉÀÏ¿¡ ´ëÇÑ ¿¹°¡ ÀÖ´Ù. en_CA ¿µ¾î±Ç Ä«³ª´Ù en_US ¹Ì±¹ ¿µ¾î±Ç de_DE µ¶ÀÏÀÇ µ¶ÀϾî fr_FR ÇÁ¶û½ºÀÇ ÇÁ¶û½º¾î ¿©·¯ºÐÀÌ ÇÁ·Î±×·¥À» Â¥´Âµ¥ ÀÖ¾î ±×°ÍÀÌ ±¹Á¦ÀûÀ¸·Î »ç¿ëµÇ±â À§Çؼ­´Â ·ÎÄÉÀÏ À» ÀÌ¿ëÇØ¾ß ÇÑ´Ù. °¡Àå Áß¿äÇÑ ÀÌÀ¯ Áß Çϳª´Â ¸ðµç »ç¶÷ÀÌ ¿©·¯ºÐ°ú °°Àº ¹®ÀÚ ¸¦ »ç¿ëÇÏÁö´Â ¾Ê´Â´Ù´Â »ç½ÇÀÌ´Ù. ¿©·¯ºÐÀÇ ÇÁ·Î±×·¥¿¡¼­ ´ÙÀ½°ú °°Àº ½ÄÀ¸·Î »ç¿ëÇÏÁö ¸»¶ó. /* check for alphabetic characters */ if ( (( c >= 'a') && ( c <= 'z' )) || (( c >= 'A') && ( c <= 'Z' )) ) { ... } ¿©·¯ºÐÀÌ ÀÌ·¸°Ô ¸ðµç È­ÀÏÀ» ASCII È­ÀÏÀ̶ó°í¸¸ °¡Á¤ÇÏ°í ¸¸µç´Ù¸é »ç¿ëÀÚÀÇ ·ÎÄÉÀÏ¿¡ µû¸¥ ÄÚµå ÆäÀÌÁö Á¤ÀǸ¦ Á¸ÁßÇÏÁö ¾Ê°Ô µÇ´Â °ÍÀÌ´Ù. ¿¹¸¦ µé¾î µ¶ÀϾî ȯ°æ¿¡¼­ ¾²ÀÌ´Â ¿ò¶ó¿ìÇÁ ¹®ÀÚ µîÀÌ Á¦¿ÜµÈ´Ù°í ¸»ÇÒ ¼ö ÀÖ´Ù. ¿©·¯ºÐÀº ´ë½Å isalpha() °ú °°Àº ·ÎÄÉÀÏ ÀÎ½Ä ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ¿©·¯ºÐÀÌ US-ASCII ¾ËÆĺª ¹®ÀÚ¸¸À» ¿ä±¸ÇÑ´Ù ÇÒ Áö¶óµµ ¿©ÀüÈ÷ isalpha() ÇÔ¼ö¸¦ »ç¿ëÇϱ⠹ٶõ´Ù. ÇÏÁö¸¸ ¿ì¼± setlocalte(LC_TYPE,"C")¶ó°í ÇϵçÁö ¾Æ´Ï¸é LANG, LC_TYPE, LC_ALL µîÀÇ È¯°æ º¯¼ö¸¦ "C"·Î ¼³Á¤ÇÏ¸é µÈ´Ù. ·ÎÄÉÀÏÀº »ó´çÇÑ À¯¿¬¼ºÀ» Á¦°øÇϸç ÇÁ·Î±×·¡¸ÓµéÀÌ ASCII ±â¹ÝÀÇ C ÇÁ·Î±×·¥À» À߸ø ¸¸µé¾î¿Ô´Ù°í »ý°¢ÇÑ´Ù. ¿¹¸¦ µé¾î ¿©·¯ºÐÀº ¹®ÀÚÀÇ ÄÚµå À§Ä¡¸¦ °¡Á¤ÇÒ ¼ö ¾ø´Ù. ¿©·¯ºÐÀº A ¶ó´Â ¹®ÀÚÀÇ ÄÚµå À§Ä¡¸¦ 0x41 ÀÌ ¾Æ´Ñ 0xC1 À¸·Î Á¤ÀÇÇÏ´Â ¹®ÀÚÇ¥ È­ÀÏÀ» ¸¸µé ¼öµµ ÀÖ´Ù. ÀÌ°ÍÀº ¸ÞÀÎÇÁ·¹ÀÓ¿¡¼­ »ç¿ëµÈ´Â IBM ÄÚµå ÆäÀÌÁö 37¿¡¼­ÀÇ A °¡ °®´Â À§Ä¡ÀÌ´Ù. ±×¸®°í ÀüÀÚ´Â ¹Ù·Î US-ASCII, iso8859-x µî¿¡¼­ »ç¿ëµÇ°í ÀÖ´Â ¹æ½ÄÀÌ´Ù. ±âº»ÀûÀÎ ¾ÆÀ̵ð¾î´Â ¼­·Î ´Ù¸¥ »ç¶÷µéÀÌ ´Ù¸¥ ¾ð¾î¸¦ »ç¿ëÇϸç Á¤·Ä ¼ø¼­µµ ´Ù¸£ °í ´Ù¸¥ ÄÚµå ÆäÀÌÁö¸¦ »ç¿ëÇÏ¸ç ´Ù¸¥ ³ª¶ó¿¡ »ì°í ÀÖ´Ù´Â »ç½Ç·ÎºÎÅÍ ³ª¿Â´Ù. ¹Ù·Î ·ÎÄÉÀÏ°ú ·ÎÄÉÀÎ ÀÎ½Ä ÇÁ·Î±×·¥ÀÌ ±×·¯ÇÑ ¹®Á¦¿¡ ´ëÇÑ ÇØ°áÃ¥À» Á¦½ÃÇÏ°í ÀÖ ´Ù. ¸¹Àº ÀÛ¾÷ÀÌ ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï°í ´ÜÁö ÇÁ·Î±×·¥ ÀÛ¼º½Ã ¾à°£ ´Ù¸¥ »ç°í¹æ½ÄÀ» ¿ä±¸ÇÑ´Ù. 3. ÁÖÀÇ »çÇ× [] ³» ¸Ó½Å¿¡¼­ ·ÎÄÉÀÏÀ» ¼³Á¤Çϱâ À§ÇÏ¿© ¾à°£ÀÇ ¾÷±×·¹À̵尡 ÇÊ¿äÇß´Ù. ftp.tu-clausthal.de:/pub/linux/SLT/nls ¿¡´Â a.out ¹öÀüÀÇ ·ÎÄÉÀÏ°ú local- def( nlsutils-0.5.tar.gz È­ÀÏ ¾È¿¡ )ÀÌ µé¾îÀÖ´Ù. ELF ½Ã½ºÅÛÀÌ ¾Æ´Ï°Å³ª ELF ¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸·Á´Â »ç¶÷¿¡°Ô À¯¿ëÇÏ´Ù. ´Ù¸¥ °÷¿¡ ¾Æ¸¶µµ nls À¯Æ¿ ÆÐÅ°Áö°¡ ÀÖÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸ ãÁö ¸øÇß´Ù. µ¶¸³ÀûÀÎ ·ÎÄÉÀÏ, localdef°¡ ÀÖ´ÂÁö ¸ð¸£°ÚÀ¸¸ç ±×·¯ÇÑ libc ¸¦ °¡Áö°í ÀÖ´ÂÁöµµ ¸ð¸£°Ú´Ù. ÀÌ ÇÏ¿ìÅõ ¹®¼­´Â º»ÀÎÀÌ libc µîÀ» ¾÷±×·¹À̵åÇÑ °³ÀÎÀûÀÎ °æÇèÀÏ ºÐÀÌ´Ù. ¿©·¯ºÐÀÌ ÀÌ ÀÛ¾÷À» ÇÏ·Á¸é º»ÀÎó·³ ELF ½Ã½ºÅÛÀ» ¿î¿µÇϰųª ELF ½Ã½ºÅÛÀ¸ ·Î ¾÷±×·¹À̵åÇØ¾ß ÇÒ °ÍÀÌ´Ù. o º»ÀÎÀÌ ÇÑ ½Ã½ºÅÛ ¾÷±×·¹À̵å´Â a.out ¿¡¼­ ELF ¾÷±×·¹À̵åÇϱâ À§ÇØ ÇÊ¿äÇÑ °ÍµéÀ̾ú´Ù. ELF ½Ã½ºÅÛÀÌ ¾Æ´Ï¶ó¸é ¿©·¯ºÐÀº ÀÏ´Ü ÃÖ±Ù ELF HOWTO ¹®¼­¸¦ ±¸ ÇØ¾ß ÇÒ °ÍÀÌ´Ù. »ó´çÈ÷ ÁÁÀº ¹®¼­À̸ç libc, ld.so, ±×¸®°í ´Ù¸¥ ELF ½Ã½ºÅÛ ÀνºÅç, ¾÷±×·¹À̵忡 ´ëÇÑ ¸¹Àº Áö½ÄÀ» ÀüÇØÁÙ °ÍÀÌ´Ù. o ¿©·¯ºÐÀÌ ÀνºÅçÇÏ´Â ¸ðµç °Í¿¡ ´ëÇؼ­ ¸±¸®Áî ³ëÆ®³ª README ¸¦ Àо¶ó. ¿©±â¼­ º»ÀÎÀÌ ¸»ÇÑ ¹Ù¸¦ Á¦´ë·Î ÀÌÇØÇÏÁö ¸øÇϰųª ±×·Î ÀÎÇØ ½Ã½ºÅÛÀ» ¸ÁÃÆ ´Ù°í º»ÀÎÀ» ¿ø¸ÁÇÏÁö´Â ¸»±â ¹Ù¶õ´Ù. o »õ·Î¿î libc, ld.so ¸¦ À߸ø ¼³Ä¡ÇÏ´Â °æ¿ì ºÎÆà ÀÚü°¡ ¾ÈµÉ ¼ö ÀÖ´Ù. ÀÏ´ÜÀº ºÎÆ® µð½ºÅ©¸¦ Çϳª °¡Áö°í Áß¿äÇÑ ÀÚ·á´Â ¹é¾÷À» Çصδ °ÍÀÌ ÁÁ´Ù. 4. ¿©·¯ºÐ¿¡°Ô ÇÊ¿äÇÑ »çÇ× ¸î °³ÀÇ ÀڷḦ ´Ù¿î·Îµå¹ÞÀ» ÇÊ¿ä°¡ ÀÖ´Ù. locale ¼Ò½º È­ÀÏÀ» Á¦¿ÜÇÑ ´ëºÎºÐÀº sunsite.unc.edu, tsx-11.mit.edu, ¶Ç´Â ·ÎÄà ¹Ì·¯ »çÀÌÆ®¿¡¼­ ±¸ÇÒ ¼ö ÀÖ´Ù. [] ·ÎÄÉÀÏ, ¹®ÀÚÇ¥ ¼Ò½º - localdef ¸¦ °¡Áö°í ÄÄÆÄÀÏÇÏ°Ô µÉ °ÍÀÌ´Ù. [] libc-5.2.18.bin.tar.gz --- ELF C °øÀ¯ ¶óÀ̺귯¸®¿Í ¼öÇÐ ¶óÀ̺귯¸® [] libc-5.2.18.tar.gz --- ELF ¶óÀ̺귯¸®¿¡ ´ëÇÑ ¼Ò½º ÄÚµå. localdef ¸¦ ÄÄÆÄ ÀÏÇϱâ À§Çؼ­´Â ¹Ù·Î ÀÌ È­ÀÏÀÌ ÇÊ¿äÇÏ´Ù. [] make-3.74.tar.gz -- dirent ¹ö±×¸¦ °íÄ£ ¹öÀüÀÌ ÇÊ¿äÇÏ´Ù. [] release.libc-5.2.18 --- make ¿¡ ´ëÇÑ ÆÐÄ¡¸¦ Æ÷ÇÔÇÑ ¸±¸®Áî ³ëÆ® [] ld.so-1.7.12+ -- µ¿Àû ¸µÄ¿ [] ELF gcc-2.7.2+ --- ÄÄÆÄÀÏ¿¡ »ç¿ë [] ELF Ä¿³Î 1.1.92+ ¶Ç´Â ELF Ä¿³Î 1.3.40+ -- ÄÄÆÄÀÏ¿¡ »ç¿ë [] binutils 2.6.0.2+ --- ÄÄÆÄÀÏ¿¡ »ç¿ë ·ÎÄÉÀÏ ¼Ò½º¸¦ ¾òÀ» ¼ö ÀÖ´Â °÷Àº ¸¹´Ù. °ø°³ ·ÎÄÉÀÏ°ú ¹®ÀÚÇ¥¸¦ ´ÙÀ½°ú °°Àº »çÀÌÆ®¿¡¼­ ¾òÀ» ¼ö ÀÖ¾ú´Ù. dkuug.dk:/i18n/WG15-collection/locales > dkuug.dk:/i18n/WG15-collection/charmaps < ftp.dkuug.dk/i18n/WG15-collection/charmaps > 5. ¸ðµç °ÍÀ» ÀνºÅçÇϱâ ÀÌ°Í ¸ðµÎ°¡ º»ÀÎÀÌ ÀνºÅçÇÑ °ÍÀÌ´Ù. º»ÀÎÀº ÀÌ¹Ì ELF ½Ã½ºÅÛ( ÄÄÆÄÀÏ·¯, Ä¿³Î ) À» °¡Áö°í ÀÖ¾ú´Ù. 1. ¿ì¼±Àº tar xvzf binutils-2.6.0.2.bin.tar.gz -C / ÇÏ¿© ¹ÙÀ̳ʸ® À¯Æ¿¸®Æ¼¸¦ ¼³Ä¡ÇÏ¿´´Ù. 2. ´ÙÀ½À¸·Î´Â µ¿Àû ¸µÄ¿¸¦ ¼³Ä¡ÇÏ¿´´Ù. tar zxf ld.so-1.7.12.tar.gz -C /usr/src cd /usr/src/ld.so-1.7.12 sh instldso.sh 3. . ±× ´ÙÀ½ ³ª´Â lib ¸¦ ¼³Ä¡ÇÏ¿´´Ù. ÀÚ¼¼ÇÑ ¼³¸íÀº release.libc-5.2.18 À» º¸±â ¹Ù¶õ´Ù. rm -f /usr/lib/libc.so /usr/lib/libm.so rm -f /usr/include/iolibio.h /usr/include/iostdio.h rm -f /usr/include/ld_so_config.h /usr/include/localeinfo.h rm -rf /usr/include/netinet /usr/include/net /usr/include/pthread tar -xzf libc-5.2.18.bin.tar.gz -C / 4. »õ·Î¿î °øÀ¯ ¶óÀ̺귯¸®ÀÇ À§Ä¡¸¦ ¾Ë¸®±â À§ÇÏ¿© ldconfig -v ¸¦ ½ÇÇà 5. make °ú ´Ù¸¥ ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¹ö±× ÆÐÄ¡°¡ libc ¿¡ µé¾îÀÖ¾ú´Ù. ¿©±â¼­ ³ª´Â make ¸¦ ´Ù½Ã ÄÄÆÄÀÏÇÏ¿© ÀνºÅçÇÏ¿´´Ù. tar zxf make-3.74.tar.gz -C /usr/src cd /usr/src/make-3.74 patch < /whereever_you_put_it/release.libc-5.2.18 configure --prefix=/usr sh build.sh ../make install cd .. rm -rf make-2.74 6. ¿©±â¼­ localdef ¸¦ ÄÄÆÄÀÏÇÏ¿© ¼³Ä¡ÇÏ¿´´Ù. mkdir /usr/src/libc tar zxf libc-5.2.18.tar.gz -C /usr/src/libc cd /usr/src/libc cd include ln -s /usr/src/linux/include/asm . ln -s /usr/src/linux/include/linux . cd ../libc ./configure # ÀÌ µÎ °¡Áö make °úÁ¤ÀÌ ÇÊ¿äÇÑÁö´Â ¸ð¸£°ÚÀ¸³ª ¾ÈÀüÇÏ°Ô Çصεµ·Ï ÇÏÀÚ. make clean ; make depend cd locale make programs mv localedef /usr/local/bin mv locale /usr/local/bin 7. localdef °¡ ãÀ» ¼ö ÀÖ´Â °÷¿¡ ¹®ÀÚÇ¥¸¦ ¼³Ä¡ÇÑ´Ù. dkuug.dk FTP »çÀÌÆ®·Î ºÎÅÍ charmaps.tar, locales.tar ¶ó´Â È­ÀÏ·Î ±¸ÇÑ °ÍÀ» »ç¿ëÇÏ¿´´Ù. tar xf charmaps.tar -C /tmp mkdir /usr/share/nls mkdir /usr/share/nls/charmap mkdir /usr/share/locale mv /tmp/charmaps/* /usr/share/nls/charmap rm -rf /tmp/charmaps tar xf locales.tar -C /usr/share # put these where you want. ______________________________________________________________________ # ¾î¶² ·ÎÄÉÀÏ ¼Ò½º´Â `copy'¸¦ »ç¿ëÇÏ¸ç µû¶ó¼­ ´Ù¸¥ ·ÎÄÉÀÏ¿¡ ´ëÇÑ # ÀÇÁ¸¼ºÀ» °¡Áø´Ù. º»ÀÎÀº grep, cut, sed ¸¦ »ç¿ëÇÏ¿© makefile À» # ÀÌ·¸°Ô ÇØÁÖ¸é /usr/share/locale µð·ºÅ丮¿¡ ¸ðµç ·ÎÄÉÀÏ °´Ã¼¸¦ # ¸¸µé¾î ÁÙ °ÍÀÌ´Ù. # localedef -ci locales/en_DK -f ISO_8859-1:1987 en_DK localedef -ci locales/sv_SE -f ISO_8859-1:1987 sv_SE localedef -ci locales/fi_FI -f ISO_8859-1:1987 fi_FI localedef -ci locales/sv_FI -f ISO_8859-1:1987 sv_FI localedef -ci locales/ro_RO -f ISO_8859-1:1987 ro_RO localedef -ci locales/pt_PT -f ISO_8859-1:1987 pt_PT localedef -ci locales/no_NO -f ISO_8859-1:1987 no_NO localedef -ci locales/nl_NL -f ISO_8859-1:1987 nl_NL localedef -ci locales/fr_BE -f ISO_8859-1:1987 fr_BE localedef -ci locales/nl_BE -f ISO_8859-1:1987 nl_BE localedef -ci locales/da_DK -f ISO_8859-1:1987 da_DK localedef -ci locales/kl_GL -f ISO_8859-1:1987 kl_GL localedef -ci locales/it_IT -f ISO_8859-1:1987 it_IT localedef -ci locales/is_IS -f ISO_8859-1:1987 is_IS localedef -ci locales/fr_LU -f ISO_8859-1:1987 fr_LU localedef -ci locales/fr_FR -f ISO_8859-1:1987 fr_FR localedef -ci locales/de_DE -f ISO_8859-1:1987 de_DE localedef -ci locales/de_CH -f ISO_8859-1:1987 de_CH localedef -ci locales/fr_CH -f ISO_8859-1:1987 fr_CH localedef -ci locales/en_CA -f ISO_8859-1:1987 en_CA localedef -ci locales/fr_CA -f ISO_8859-1:1987 fr_CA localedef -ci locales/fo_FO -f ISO_8859-1:1987 fo_FO localedef -ci locales/et_EE -f ISO_8859-1:1987 et_EE localedef -ci locales/es_ES -f ISO_8859-1:1987 es_ES localedef -ci locales/en_US -f ISO_8859-1:1987 en_US localedef -ci locales/en_GB -f ISO_8859-1:1987 en_GB localedef -ci locales/en_IE -f ISO_8859-1:1987 en_IE localedef -ci locales/de_LU -f ISO_8859-1:1987 de_LU localedef -ci locales/de_BE -f ISO_8859-1:1987 de_BE localedef -ci locales/de_AT -f ISO_8859-1:1987 de_AT localedef -ci locales/sl_SI -f ISO_8859-2:1987 sl_SI localedef -ci locales/ru_RU -f ISO_8859-5:1988 ru_RU localedef -ci locales/pl_PL -f ISO_8859-2:1987 pl_PL localedef -ci locales/lv_LV -f BALTIC lv_LV localedef -ci locales/lt_LT -f BALTIC lt_LT localedef -ci locales/iw_IL -f ISO_8859-8:1988 iw_IL localedef -ci locales/hu_HU -f ISO_8859-2:1987 hu_HU localedef -ci locales/hr_HR -f ISO_8859-4:1988 hr_HR localedef -ci locales/gr_GR -f ISO_8859-7:1987 gr_GR ______________________________________________________________________ 6. ÀÌÁ¦ ¹«¾ùÀ» ÇÒ °ÍÀΰ¡? ÀÌ·¸°Ô ¼³Ä¡ÇÏ°í ³­ ÈÄ ¿©·¯ºÐÀº ·ÎÄÉÀÏÀ» »ç¿ëÇÒ ¼ö ÀÖ°Ô µÈ´Ù. ¿©±â ¾ÆÁÖ °£´ÜÇÑ ¿¹°¡ ÀÖ´Ù. ______________________________________________________________________ /* test.c : ·ÎÄÉÀÏÀÌ ·ÎµùµÇ°í »ç¿ëµÇ´ÂÁö Å×½ºÆ® */ #include #include #include main(){ time_t t; struct tm * _t; char buf[256]; time(&t); _t = gmtime(&t); setlocale(LC_TIME,""); strftime(buf,256,"%c",_t); printf("%s\n",buf); } ______________________________________________________________________ ·ÎÄÉÀÏ ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© ÇÏ¿© ÇöÀç ·ÎÄÉÀÏ È¯°æº¯¼ö°¡ ¾î¶²Áö ¾Ë¾Æº¼ ¼ö ÀÖ´Ù. ______________________________________________________________________ $ # ¼­·Î ´Ù¸¥ ¸î °¡Áö ·ÎÄÉÀÏ ¼³Á¤À» ÇÏ¿© À§ ÇÁ·Î±×·¥À» ¼öÇà½ÃŲ´Ù. $ gcc -s -o Test test.c $ # ·ÎÄÉÀÏÀÌ ¹«¾ùÀÎÁö ¾Ë¾Æº»´Ù. $ locale LANG=POSIX LC_COLLATE="POSIX" LC_CTYPE="POSIX" LC_MONETARY="POSIX" LC_NUMERIC="POSIX" LC_TIME="POSIX" LC_MESSAGES="POSIX" LC_ALL= $ # Áö·çÇϱâ ¦ÀÌ ¾ø´Â C ·ÎÄÉÀÏÀ» »ç¿ëÇÏ°í ÀÖ´Ù. -_- $ # ¿µ¾î±Ç Ä«³ª´Ù·Î ¹Ù²Ù¾îº¸ÀÚ. $ export LC_TIME=en_CA $ Test Sat 23 Mar 1996 07:51:49 PM $ # À̹ø¿¡´Â ÇÁ¶û½º¾î±Ç Ä«´Ù³ª·Î ¹Ù²Ù¾îº¸ÀÚ. $ export LC_TIME=fr_CA $ Test sam 23 mar 1996 19:55:27 ______________________________________________________________________ 7. catopen ¹ö±× °íÄ¡±â ·ÎÄÉÀÏÀ» ÀνºÅçÇÏ°Ô µÇ¸é ¸®´ª½º libc ¿¡ ÀÖ´Â catopen ¸í·É¿¡ ÀÖ´Â ¹ö±×(±â´É?) À» °íÄ¡°Ô µÈ´Ù. ¸Þ¼¼Áö ¸ñ·ÏÀ» »ç¿ëÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µç ÈÄ µ¶ÀÏ¾î ¸ñ·ÏÀ» /home/peeter/catalogs/de_DE ¿¡ ¸¸µé¾î ³ÖÀ¸¶ó. de_DE ·ÎÄÉÀÏÀ» ÀνºÅçÇϱâ Àü¿¡ ´ÙÀ½À» ¼öÇàÇÑ´Ù. export LC_MESSAGES=de_DE export NLSPATH=/home/peeter/catalogs/%L/%N.cat:$NLSPATH µ¶ÀÏ¾î ¸Þ¼¼Áö´Â ¿­¸®Áö ¾Ê°í catget ÀÇ ±âº» ¸Þ¼¼Áö°¡ »ç¿ëµÈ´Ù. ÀÌ ÀÌÀ¯´Â catopen ÀÌ ¿Ã¹Ù¸¥ ¸Þ¼¼Áö ¹üÁÖ¸¦ ¾ò¾î³»±â À§ÇØ setlocale ¸¦ È£ÃâÇÏ Çϴµ¥ setlocale Àº ȯ°æº¯¼ö°¡ Á¦´ë·Î ¼¼ÆõǾî ÀÖÀ½¿¡µµ ºÒ±¸ÇÏ°í ½ÇÆÐÇÏ ±â ¶§¹®ÀÌ´Ù. catopen Àº NLSPATHÀÇ ¸ðµç "%L"¿¡ ´ëÇÏ¿© C ·Î ±³Ã¼ÇÏ·Á°í ÇÑ´Ù. ·ÎÄÉÀÏÀ» ¼³Ä¡ÇÏÁö ¾Ê¾Æµµ ¿©·¯ºÐÀÇ ¸Þ¼¼Áö ¸ñ·ÏÀ» »ç¿ëÇÒ ¼ö´Â ÀÖ´Ù. ÇÏÁö¸¸ NLSPATH¸¦ Á¤È®È÷ ´ÙÀ½°ú °°ÀÌ ¸í½ÃÇØÁÖ¾î¾ß ÇÒ °ÍÀÌ´Ù. export NLSPATH=/home/peeter/catalogs/de_DE/%N.cat:$NLSPATH ÇÏÁö¸¸ ÀÌ·¸°Ô µÇ¸é ·ÎÄÉÀÏ ¹üÁÖ¿¡ ´ëÇÑ È¯°æº¯¼ö¸¦ »ç¿ëÇÒ Çʿ伺 ÀÚü°¡ »ç¶ó Áö´Â °ÍÀÌ´Ù. 8. Áú¹®°ú ´ä ÀÌ ¼½¼ÇÀº Áö±ÝÀ¸·Î¼­´Â FAQ ¶ó°í ÇÒ ¼ö ¾ø°ÚÁö¸¸ ¾ÕÀ¸·Î FAQ ·Î ÀÚ¶ó³¯ °ÍÀÌ´Ù. 8.1. msgcat Áú¹® ³ª´Â ¸®´ª½º »ç¿ëÀÚÀÌ¸ç ´ÙÀ½°ú °°Àº ½ÃÇè ÇÁ·Î±×·¥À» ¸¸µé¾ú´Ù. ______________________________________________________________________ #include #include #include #include main(int argc, char ** argv) { nl_catd catd; setlocale(LC_MESSAGES, ""); catd = catopen("msg", MCLoadBySet); fprintf(stderr,catgets(catd, 1, 1, "locale message fail\n")); catclose(catd); } ______________________________________________________________________ $ msg.m $set 1 1 locale message pass\n If I use absolute path in catopen like ³»°¡ ¸¸¾à catopen("/etc/locale/msg.cat",MCLoadBySet); ¿Í °°ÀÌ Àý´ë °æ·Î¸¦ »ç¿ëÇÏ¸é ¿ÇÀº °á°ú¸¦ ¾ò¾î³»Áö¸¸ À§Ã³·³ »ç¿ëÇÏ¸é °á°ú°ª -1 Áï ½ÇÆÐÇÏ°Ô µÈ´Ù. 8.2. msgcat ´äº¯ ÀÌ Áú¹®Àº Áö³­ ¼½¼Ç¿¡¼­ ´äº¯ÀÌ µÈ ¹®Á¦À̱ä ÇÏÁö¸¸ ¸î °¡Áö ºÎ°¡ÀûÀÎ Á¤º¸¸¦ ¸»ÇÒ ±âȸ¶ó°í »ý°¢ÇÑ´Ù. ¿©·¯ºÐÀÇ ¸Þ¼¼Áö ¸ñ·ÏÀ» ³ÖÀ» ¼ö ÀÖ´Â °÷Àº ¾ÆÁÖ ¸¹´Ù. ȯ°æº¯¼ö¿¡¼­ NLSPATH¸¦ ¸í½ÃÀûÀ¸·Î ¼³Á¤ÇÏÁö ¾Ê¾Ò´Ù ÇÏ´õ¶óµµ ´ÙÀ½°ú °°ÀÌ libc ¿¡ Á¤ÀǵǾî ÀÖ´Ù. ______________________________________________________________________ $ strings /lib/libc.so.5.2.18 | grep locale | grep %L /etc/locale/%L/%N.cat:/usr/lib/locale/%L/%N.cat:/usr /lib/locale/%N/%L:/usr/share/locale/%L/%N.cat:/usr/ local/share/locale/%L/%N.cat µû¶ó¼­ ´ÙÀ½ Áß Çϳª¸¦ ¼¼ÆÃÇØÁÖ¸é : $ export LC_MESSAGES=en_CA $ export LC_ALL=en_CA $ export LANG=en_CA À§¿¡¼­ º¸¿©Áø NLSPATH¿Í ȯ°æº¯¼ö¿¡ ÀÇ°ÅÇÏ¿© catopen("msg", MCLoadBySet); ´Â ´ÙÀ½ µð·ºÅ丮 Áß Çϳª¿¡ ¸Þ¼¼Áö ¸ñ·ÏÀÌ ÀÖ´Â °æ¿ì ÀÛµ¿ÇÏ°Ô µÈ´Ù. /etc/locale/en_CA/msg.cat /usr/lib/locale/en_CA/msg.cat /usr/lib/locale/msg/en_CA /usr/share/locale/en_CA/msg.cat /usr/local/share/locale/en_CA/msg.cat ______________________________________________________________________ This, however, will not work if you don't have the en_CA locale ÇÏÁö¸¸ ¿©·¯ºÐÀÌ en_CA ·ÎÄÉÀÏÀ» ¼³Ä¡ÇÏÁö ¾Ê¾Ò´Ù¸é Á¦´ë·Î µ¿ÀÛÇÏÁö ¾Ê´Â´Ù. ¿Ö³ÄÇϸé setlocale °¡ ½ÇÆÐÇÏ¿© catopen ·çƾÀÇ %LÀ» en_CA °¡ ¾Æ´Ñ C ·Î ±³Ã¼ Çϱ⠶§¹®ÀÌ´Ù. 9. ³¡³»´Â ¸» ÀÚ, ÀÌ°ÍÀÌ ÀüºÎ´Ù. ÀÌ ¹®¼­°¡ ¿©·¯ºÐ¿¡°Ô ¾à°£À̶ó°í µµ¿òÀÌ µÇ¾ú±â¸¦ ¹Ù¶õ´Ù. ·ÎÄÉÀÏ ÀÎ½Ä ÇÁ·Î±×·¥À» Â¥´Âµ¥ ´ëÇÑ ´Ù¸¥ Á¤º¸¸¦ ãÀ» ¼ö ÀÖ´Â °÷ÀÌ ¸¹ÀÌ ÀÖÀ» °ÍÀÌ´Ù. libc¿¡ ´ëÇÑ info ÆäÀÌÁö¿¡µµ ¾à°£ÀÇ Á¤º¸°¡ ÀÖ°í ¸ÇÆäÀÌÁö¿¡µµ ÀÖ´Ù. ¾à°£ À¥À» µ¹¾Æ´Ù´Ï´Ù º¸¸é ¸¹Àº Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖÀ¸¸®¶ó º»´Ù. ±¹Á¦È­µÈ ÇÁ·Î±×·¥¿¡ ´ëÇÑ ÁÁÀº Á¤º¸ ¿øõÀ» ã°Ô µÇ°í º»Àεµ ¾Ë±â ¹Ù¶õ´Ù¸é, ¿©±â´Ù Àû¾î³õ±â·Î ÇÏ°Ú´Ù.