  Locales mini-HOWTO
  Peeter Joot, joot@ecf.toronto.edu
  v1.3, 1996 6 6

  ѱ  :
		  		<geoman@nownuri.nowcom.co.kr>
					<freeyong@soback.kornet.nm.kr>

     locale    ϴ  Ѵ.

  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 ý
      ׷̵ؾ  ̴.

  []   ý ׷̵ a.out  ELF ׷̵ϱ  ʿ
     ͵̾. ELF ý ƴ϶  ϴ ֱ ELF HOWTO  
     ؾ  ̴.   ̸ libc, ld.so, ׸ ٸ ELF ý
     ν, ׷̵忡     ̴.

  []  νϴ  Ϳ ؼ  Ʈ README  о.
     ⼭   ٸ   ϰų ׷  ý 
     ٰ    ٶ.

  [] ο 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
  <ftp://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 <locale.h>
       #include <stdio.h>
       #include <time.h>

       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 <stdio.h>
       #include <locale.h>
       #include <features.h>
       #include <nl_types.h>

       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  ణ  ְ  ִ.
  ణ  ƴٴϴ       .
  ȭ α׷    õ ã ǰ ε ˱ ٶٸ,
    ϰڴ.

