  Locales mini-HOWTO

  Peeter Joot, joot@ecf.toronto.edu <mailto: joot@ecf.toronto.edu>

  v1.3, 1996 6 6
            geoman@nownuri.net <mailto: 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 <ftp:// 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
  <ftp.dkuug.dk/i18n/WG15-collection/locales <ftp://
  ftp.dkuug.dk/i18n/WG15-collection/locales>>
  dkuug.dk:/i18n/WG15-collection/charmaps <
  ftp.dkuug.dk/i18n/WG15-collection/charmaps <ftp://
  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  ణ  ְ
   ִ.  ణ  ƴٴϴ     
   .  ȭ α׷    õ ã ǰ
  ε ˱ ٶٸ,   ϰڴ.

