©³¤U³o½g¤å³¹¬O§Ú³Ìªñ¼gµ{¦¡ªº¤@ÂIÂI¤ß±o¡Aì¤å¤wµoªí©ó CLDP ¤W¡A¥]¬A¤F GNU/Linux I18N ªºÀô¹Ò²¤¶»P¬ÛÃöªºµ{¦¡¼g§@²¤¶¡C¦ý¦b¦¹§Ú¥uºK¿ý¤F¦³ Ãö GNU/Linux I18N Àô¹Ò²¤¶ªº³¡¤À¡A¦Ü©óµ{¦¡¼g§@³¡¤À¥t¦³ ±M¤å¤¶²Ð¡C §Æ±æ³o½g¤å³¹¹ï¦³¿³½ìªºªB¤Í¦³À°§U¡A¯àÅý¤j®a¯à¦¤é¶i¤J I18N ªº¥@¬É :-))
¥Ñ©ó§Ú©Òª¾«Ü¦³¡A©Ò¥H¤å³¹¤¤¥i¯à¦³«Ü¦h¿ù»~¡A ¦]¦¹¡A§Æ±æ¦U¦ì°ª¤â¯à¦h¦hµ¹§Ú§åµû»P«ØÄ³¡A ©ÎÀ°¦£§Ú±N¤£¨¬¤§³B¸É»ô¡AÅý³o½g¤å³¹§ó§¹¬ü¡C
¦b¦¹¥ýÁÂÁ¦U¦ì¡C
ÁªF¿« (Tung-Han Hsieh) <thhsieh@twcpro.phys.ntu.edu.tw>
³Ìªñ³oÓ¸ÜÃD¤j®a§n±o¦³ÂI¼F®`¡A¤j®a³£§Æ±æ GNU/Linux ¯à¦b¤¤¤å¤è±¦³©Ò¶i ¨B¡A¦U®a¦³¦U®aªº»¡ªk¡A²ö°J¤@¬O¡C¥Ñ©ó§Ú³Ìªñ±`»P CLE ªº group ¦³Ápô¡A ¦P®É¤]¥¿¦b¼g¤@¨Ç»P¤¤¤å¬ÛÃöªºµ{¦¡¡A¦]¦¹§Ú¤j²¤»¡¤@¤U¡u§ÚÌ¥¿¦b°µ¤°»ò¡v¡A Åý¤j®a°Ñ¦Ò¡C
§Ú§Æ±æ¤j®a¯à±N³o½g¤å³¹·í°µ§Þ³N©Ê¤å³¹¨ÓŪ¡A¤£n¦A¦³±¡ºü¤Æªº§åµû¡A²¦¹Ò §ÚÌnªº¬O solution, ±¡ºü¤Æªº§åµû¹ï§Ú̹ê¦b¨S¦³À°§U¡C°£¦¹¤§¥~¡A§ÚªºÆ[ ÂI¥i¯à¦³¿ù¡A¤]¥i¯à¹L¥÷¼ÖÆ[¡A¤]Åwªï¤j®a¯à´N§Þ³N¤è±µ¹¤©§Ú«ü±Ð¡C
¤G¡B I18N »P locale:
n±N GNU/Linux ¤¤¤å¤Æ¡A´ÂµÛ¼Ð·Ç¨«¤~¬Oªø»·¤§p¡C¦U¦ì¦pªG¦³¨£¹Lªñ¥N°Ó·~ª©ªº UNIX ´N·|¾å±o¡A¥¦Ì¡u¤¤¤å¤Æ¡v¤§¹ý©³¡A¥O¤HÅå¹Ä¡A½Ñ¦p¤¤¤å¿ï³æ¡B¤¤¤å°T®§ .... ±z¯à·Q¹³±o¨ì¡A©Î»¡¥u¯à¦b Win95/98/NT OS/2 .... µ¥¤WÀY¤~¨£±o¨ìªº ¤¤¤åÀô¹Ò¡A¥¦Ì³£¦³¡CµM¦Ó¡A¥¦Ìªº¤¤¤å¨Ã¤£¬O¹³¥Ø«e GNU/Linux ¤W±`¨£¨ìªº¨º¼Ë¡A ¥Ñ¤@°ïµ{¦¡¤C«÷¤K´ê¥X¨Óªº¡A¥¦Ì¥þ³¡³£¬O¿í´`¤@ӼзÇ: I18N ¡C
I18N ¬O InternationalizatioN (°ê»Ú¤Æ) ªºÁY¼g¡A²Ä¤@Ó¦r I »P³Ì«á¤@Ó¦r N ¤§¶¡¦³ 18 ªº¦r¥À¡A¬G¦W¡C I18N ¨Ã¤£¬O¥u¦³ªí±¤W±N X Window ¡u°ê»Ú¤Æ¡v ¦Ó¤w¡A¥¦¬O³þ°ò¦b³Ì©³¼hªº libc ¤W¡C libc ¥²¶·n¦³ locale ªº¤ä´©¡A¤~¯à¦V I18N °_¨B¡C
¤°»ò¬O locale? ²³æ»¡´N¬O¤@²Õ¡u¦a°Ï»y¨¥¡vªº¸ê°T¡C¥¦¥]¬A¤F (¸Ô¨£ man setlocale):
¨ä¤¤¡A»P¤@¯ë¨Ï¥ÎªÌ³Ì¦³Ãö«Yªº¡A¬O LC_CTYPE »P LC_MESSAGES ¡C LC_CTYPE ª½ ±µÃö«Y¨ì¬Y¨Ç¦r¤¸©Î¤º½X¦b¥Ø«eªº locale ¤U¬O§_¥i¦L? n¦p¦óÂà´«? ¹ïÀ³¨ì¨º ¤@Ó¦r? .... µ¥µ¥¡C LC_MESSAGES «hÃö«Y¨ì³nÅ骺°T®§¿é¥X¬O¤°»ò¼Ëªº»y¤å¡C¯u ¥¿§¹¾ãªº locale ¤ä´©¡A¬O·í§Ú̦b shell prompt ¤U¡Aª½±µ³]¦nÀô¹ÒÅܼơA«h§Ú ̰¨¤W´N¯à¤Á´«¨ì¨ºÓ»y¤å¤F¡C¨Ò¦p:
bash: export LC_CTYPE=zh_TW.Big5
¦³¤F locale ªº¡u¨ó©w¡v¡A¨Ï±o¥ô¦ó¦a°Ïªº»y¤å¡A¥un¦b¥[¤J¾A·íªº locale data ¤§«á¡A libc ´N¯à¥¿½T¦a³B²z¥¦¤F¡A¦Ó§Ú̪º¡u¤¤¤å¡v·íµM¤]¤£¨Ò¥~¡C¥Ñ©ó«e¤H»P CLE group ªº§V¤O¡A¥Ø«e§Ṳ́w¦³¦Û¤vªº locale data ¤F¡C¦³¦w¸Ë CLE ªºªB¤Í¥i ¥H¨ì /usr/share/locale ¤U¬Ý¬Ý¡A zh_TW.Big5 ´N¬O§Ú̪º locale data, ÁöµMÁÙ ¤£°÷§¹¾ã¡A¦ý¤w¯à work¡C
¥Ø«e GNU/Linux ¹ï©ó locale ªº¤ä´©¦p¦ó? ¥i¥H¤j·§¦a»¡¡A¦è¤è»y¨t®t¤£¦h¨S°ÝÃD¤F¡A ¦ýªF¤è»y¨tÁÙ¦³¤£¤Ö°ÝÃD¡C¦pªG±zªº GNU/Linux ¨t²Î¬O¥Î libc5 (¨Ò¦p Slackware 7.0.0 ¥H«eªºª©¥») ªº¸Ü¡A¨º®t¤£¦h¥i¥H»¡¤ä´©±o¬Û·í®t¡A´X¥G¥u¯à¾a¡u¤C«÷¤K´ê¡vªº¤è ªk¨Ó¦³«×¦a¨Ï¥Î¤¤¤å¡C¦pªG¬O¥Î libc6 (glibc2) ªº¸Ü¡A¨º´N¦³¬Û·íªº locale ¤ä´©¤F¡C
µM¦Ó¡A¥Ø¤´¦³«Ü¦h¨Ï¥Î glibc2 ªº¨t²Î³£¬O glibc-2.0.7, ³o¤@ª©¹ïªF¤è»y¨tªº¤ä ´©ÁÙ¤£°÷¦n¡A¯S§O¬O LC_CTYPE ¡A¥¦µLªk¿ë»{¡BÂà´«§Ú̪º Big5 ½X¡A¥²¶·nµ¥¨ì glibc-2.1 ¥H«á¡A¤~¯à§¹¥þ¸Ñ¨M³o¨Ç°ÝÃD¡C¦ý³o¨Ã¤£¬O»¡¨Ï¥Î glibc-2.0.7 ªº¼s ¤j¨Ï¥ÎªÌ³£¨S§Æ±æ¤F¡A¨Æ¹ê¤W¦³¤@Ó libwcsmbs ªº®M¥ó¡A¥¦¥i¥H±N glibc ¤¤¦³°Ý ÃDªº³¡¤À¨ú¥N±¼¡AÅý§Ú̪º LC_CTYPE ³¡¤À¥i¥H¡u´X¥G 90% ¥¿½T¡v¦a¤u§@¡C¦Ó³oÓ ®M¥ó´N¬O CLE-0.7 ªº¼Ð·Ç¤§¤@ (§@ªÌ«ö: CLE-0.7 ¦]¬°¤´¨Ï¥Î glibc-2.0.7, ¬G ¥²¶·¨Ï¥Î libwcsmbs ®M¥ó¡C¦ý¥Ø«eªº CLE-0.8 ¤w±Ä¥Î glibc-2.1.1, ¬G¤£¦A»Ýn ³oÓ®M¥ó¤F) ¡A¤]¬O«Ü«nªº¤@Ó³¡¤À¡AÁöµM¤j®a¥i¯à·P¨ü¤£¨ì¥¦ªº¦s¦b¡C
³Ìªñ glibc-2.1.1 ¤w¸g¥X¨Ó¡A§ÚÓ¤H¤w°µ¹Lªì¨B´ú¸Õ¡A LC_CTYPE ¦b§Ú̪º locale ¤U¤w¸g¥¿±`¡AÁöµM¤´¦³¨ä¥L°ÝÃD¦s¦b¡A¦ý³o¤w¬O¤@Ó¦n®ø®§¡A§Ú ¹wp¦b¥¼¨Óªº¤@¦~¤º¡Aµ¥¤j³¡¤Àªº GNU/Linux distribution ³£´«¸Ë¤F glibc-2.1 ¤§ «á¡A§ÚÌ´N¦³¤F³Ì©³¼hªº¡u¤¤¤å¤Æ¡v±ø¥ó¡C
¤T¡B X Window ªº³¡¤À:
±µµÛ§Ų́ӬݬݤW¼h¡A X Window ªº¡u¤¤¤å¤Æ¡v (©Î¡u°ê»Ú¤Æ¡v)¡C X11R6 ¤]¦³¤@ Ó locale ªº¥Ø¿ý¡A©ñ¦b /usr/X11R6/lib/X11/locale ùØÀY¡A¦pªG¬O¸Ë CLE ªºªB ¤Í¡A´N·|¨£¨ì¤@Ó zh_TW.Big5 ªº¥Ø¿ý¡A¨º´N¬O§Ú̪º XLC Locale data¡C¦b¡u¼Ð ·Ç¡vªº±¡ªp¤U¡A XLC Locale ¥²¶·¬[ºc¦b libc locale ¤§¤W¹B§@¡A¥¦ùØÀY°£¤F©w ¸q¤@¨Ç¦r¤¸¹ïÀ³¡A³Ì«nªº¬O¤º½X»P¦r«¬ªº¹ïÀ³¡C¥H§Ú̪º locale ¬°¨Ò¡A§ÚÌ»Ý n¨âºØ¦r«¬¡A¤@¬O¡u¥b§Î (³æ¦ì¤¸)¡v¡AÅã¥Ü ASCII ½X¥Î¡A¥t¤@¬O¡u¥þ§Î (Âù¦ì¤¸)¡v ¥Î¨ÓÅã¥Ü¤¤¤å¡CÁ|¤@Ó¨Ò¤l¡A¹³¥H¤U³o¤@¦ê¦r:
³o¬O¤@Ó abcd .... ´ú¸Õ¦r¦ê string! ¢Ý¢Ù¡I
¨º¨Çn¥Î¥þ§ÎÅã¥Ü? ¨º¨Çn¥Î¥b§ÎÅã¥Ü? ³o¥²¶·¾a libc ªº LC_CTYPE ¨Ó§PÂ_¡C¦] ¦¹¡A LC_CTYPE ¦pªG±¾±¼¡A¥i¥H»¡¤°»ò³£¨S»³¡C
§Ú¬Û«H¡A¦³¤F¤Wzªº¡u°t³Æ¡v«á¡A°ò¥»ªº I18N Àô¹Ò´N¤w¸g¨ã³Æ¤F¡C¦ý¤@©w¦³¤H·| °Ý: ¡u¬Ý°_¨Ó CLE ¦b¤Wz©Ò»¡ªº³£¨S°ÝÃD¡A¬°¤°»òÁÙ¬O¨ì³B³£¤£¬O¤¤¤å?¡v ¨S¿ù¡A ¨º¬O¦]¬°¥Ø«e GNU/Linux ¤W¤j³¡¤Àªºµ{¦¡ÁÙ¤£¬O¥Î I18N ªº¼Ð·Ç¦Ó¼gªº¡C¨Ò¦p¤j®a±`¥Î ªº Netscape, xcin-2.3, crxvt .... µ¥µ¥¡A¥¦Ì³£¬O¥Î¡u¦Û¤v¡vªº©Û³N¨Ó³B²z¤¤¤å¡A ³o¤]´N¬O¬°¤°»ò xcin-2.3 ¥u¯à¦b crxvt ¤W¿é¤J¡A¬°¤°»ò§ÚÌn¾a CXWin ¨Ó¬Ý¤¤¤å .... µ¥µ¥¡C³o¨Ç³£¤£¬O¥¿¸Ñ¡A¥u¬O¼È®Éªº¤@Ó¤â¬q¡A³Ì«á³£¬On©ñ±óªº¡C
¥Ø«e¡A¦³¶V¨Ó¶V¦hµ{¦¡±N´Â¦V I18N ¨Óµo®i¡A¦Ó§Ú̥ثe³Ì»Ýnªº¤u§@¡A´N¬O§Ë I18N ªº zh_TW.Big5 ³¡¤À¡CÁ|Ó¨Ò¤l¡A¥Ø«e CLE group ¥¿¦£©ó GNOME ªº¤¤¤å¤Æ¡A ¥¦ºâ¬O¥Ø«e I18N ¤Æ¬Û·í¹ý©³ªº¤@Ó X Disktop / Window Manager, Platin ¹wp ¦b¤U¤@ª©ªº CLE ´N¬O¥H GNOME ¬°¥D¡A¥un±N¨ä¤¤ªº°T®§³£Â½Ä¶¦¨¤¤¤å¡A°µ¦n LC_MESSAGES ªº¤u§@¡A¥¼¨Ó¦b GNOME ¤¤¡A±N¤£»Ýn¨Ì¾a CXWin, ¥´¶}«á´N¨ì³B³£ ¬O¤¤¤å¡C
¨ä¥Lªº GNU ³nÅé¤]¬O¡A¦³¥t¤@²Õ¤H°¨¥¿±N¤@¨Ç±`¨£«ü¥O¦p ls, cp µ¥ªº°T®§¤¤¤å ¤Æ¡A¨Ã±Nµ²ªG¦^³øµ¹ GNU, ´Á±æ¥¼¨Ó·sª©ªº GNU ³nÅ餤¡A¤¤¤å°T®§´N¬O¼Ð·Çªº¤@ ³¡¤À¡A§Ṳ́£¦A»Ýn¨C¦¸¤H®a§ó·sª©´N«æ«æ¦£¦£¦a°µ patch ¤F¡C
¤¤¤å¿é¤J´N¤ñ¸û½ÆÂø¡A°£¤F¤Wzªº I18N ¥H¥~¡AÁÙ¦³¤@Ó XIM (X Input Method) ¨ó©w¡C§ÚÌ¥²¶·n¦³ XIM server ¨Ó¨ú¥N¥Ø«eªº xcin (xcin-2.3.X), ¦Ó¥BÁÙn X Window ªºÀ³¥Îµ{¦¡¯à°÷¿í´` XIM ¨ó©w¡A¤~¯à°µ¨ì "Chinese Input Anywhere"¡C ¦ý³Â·Ðªº¬O¿í´` XIM ¨ó©wªºÀ³¥Îµ{¦¡¤´¤£¦h¡A³ÌµÛ¦Wªº´N¬O GNOME ¤UªºÀ³¥Îµ{¦¡, xemacs, ¥H¤Î¤@¨Ç X11R6 ©Òªþªº³nÅé (¦p xedit, ¥Ñ Xt ¤Î Xaw ´£¨Ñ I18N ¤ä´©)¡C ¦Ó¥Ø«e XCIN µo®ipµe (http://xcin.linux.org.tw) ©Òµo®i¤¤ªº xcin-2.5 (ftp://xcin.linux.org.tw/pub/xcin/xcin/xcin-2.5.X.tar.gz) ´N¬O¤@Ó XIM server, §Ú§Æ±æ³oÓ³nÅé¯à¦b±N¨Ó»P ¡u¦U¸ô¤H°¨¡v°t¦X¡A°µ¥X¤@ÂI°^Äm¡C
(§@ªÌ«ö: ¥Ø«e xcin-2.5.1 ¤w¸g¥¿¦¡µoªí¤F¡A ¥¦¤w¬Oº¡§¹¾ãªº XIM server ¡C¦Ó¥B¥ý«e´£¨ìªº¨º¨Ç¯Ê¥F I18N »P XIM ¤ä´©ªº±` ¥Î³nÅé¡A²{¦b³£¤w¦³¤ä´©¤F¡A¨Ò¦p rxvt-2.6, netscape-4.5/6, .... µ¥¡A¦Ó³o¨Ç ¦³¤ä´© I18N »P XIM ªº³nÅé¡A¥]¬A GNOME, ¤]¤w´ú¸Õ¹L¥i¥H¸g¥Ñ xcin-2.5 ¥¿½T¦a¿é ¤J¤¤¤å¤F)
¦]¦¹¡A¡u¤¤¤å¤Æ¡vªº¤u§@¡A¨Ã¤£¬O¨º»ò²³æ¦a»¡¡u¦]¬° GNU/Linux ¬O§K¶O¡B¨S¦³¤H¥I ¿úµ¹µ{¦¡³]p®v¡A©Ò¥H°µ¤£¦n¡v¡A©ÎªÌ»¡¡u§Ṳ́¤°ê¤H¤£¹Îµ²¡A¤j®a¤£ªÖ¦X§@µo ®iµ{¦¡¡v¡A©ÎªÌ»¡¡u GNU/Linux ¬O server ¾É¦V¡A¤£¾A¦X°µ¤¤¤å¡v .... µ¥µ¥¡C GNU/Linux ¥i¥Hµo®i¤¤¤å¡A¦Ó¥B¦³«Ü¦h¤H¥¿§V¤O¦a¦b¤u§@¡A¦ý¬O§ó«nªº¬O¡A§ÚÌÁÙ±o°t¦X°ê ¥~ (©Î»¡³nÅ骺ì³]pªÌ) ªº¸}¨B¡C«e±»¡¹L¡A§ÚÌn¦³§¹¾ã locale ¤ä´©ªº libc, ³o¤@¤Á¤~¦³§Æ±æ¡A§Ṳ́]»Ýn§Ú̱`¥Îªº³nÅé (¦p Netscape, window manager, ¬Æ¦Ü database, office ....) ªº³]pªÌı®©¨ì¡A¯u¥¿ªº¼Ð·Ç¬O I18N, ¬O locale, ¬O XIM, §Ṳ́~¯à¸ò¶i¡A±N¤¤¤å¤Æªº³¡¤À¥[¶i¥h¡C§ó«nªº¤@ÂI¡A§Ú̦ۤvªºµ{¦¡ ³]p®v¦b¼g³nÅé®É¡A¬O¤£¬O¤]¯à¿í´` I18N, locale, XIM??
¤¤¤å¤Æ¡A»Ýn¤@ӼзǡA¦Ó§Ú̧Ʊæ³oӼзǡA¬O¥@¬É³q¥Îªº¡A¦Ó¤£¬O§Ú̦ۤv¤C «÷¤K´ê¥X¨Óªº¡C§_«hªº¸Ü¡A§Ú̥û·³£n¦Û¤vª±¦Û¤vªº¡A¥Ã»·³£·|¨Æ¿¥\¥b¡A¥Ã»· ·|©ê«è¡u¬°¤°»ò GNU/Linux ªº¤¤¤å¤ä´©¤ñ¤£¤W Win95?¡v
¥|¡B¤¤¤å¦C¦L:
¤¤¤å¦C¦L»P¤WzªºÃö«Y¸û¤p¡A¦ý¤]¬O¤j®aÃö¤ßªº°ÝÃD¤§¤@¡A¦b¦¹§Ú¤]µy§@¤@¨Ç»¡©ú¡C
¦b UNIX ªº¥@¬É¡A´N§Ú©Òª¾¦Lªí¾÷¿é¥X³Ì±`¨£ªº´N¬O¨âÓ: ASCII ½X»P Postscript, ¦Ó Postscript ´N¬O¡u¹Ï§Î¦C¦L¡vªº¦@³q»y¨¥¡C¦]¦¹¡A·í§ÚÌn°µ¤¤¤å¦C¦L¡A´N¬On ´M¨D¡u¹Ï§Î¦C¦L¡vªº³~®|¡A¤]´N¬O§ä¤@Ó¡u¯à±N¤¤¤å¦rÀÉÂন Postscript ¿é¥X¡vªº µ{¦¡¡v¡C¥Ø«e¤j®a±`¨£ªº¡A¦p¶Ç²Îªº cnprint¡B CLE ¤¤¯àª½±µ¨Ï¥Î TTF ¦r«¬ªº bg5ps, ©Î¬O ChiTeX, CJK+LaTeX, lyx .... µ¥µ¥¡C
¦b¦¹µy·Lȱo¤@´£ªº¬O¡A¬[ºc¦b LaTeX ¨t²Î¤W¥H¤ä´©¤¤¤å±Æª©¦C¦Lªº CJK ®M¥ó ¦ü¥G¤wº¥º¥¦¨¬° Free Software / Open Source ©Ò¤½ »{ªº¼Ð·Ç¤§¤@¡A¨äì¦]¦p¤U:
§Ú·Q³o¤@ÂI«Üȱo¦¨¬°§ÚÌ¥¼¨Óµo®i¤¤¤å¦C¦Lªº¤@ӰѦҡC
§@ªÌ: ÁªF¿« (Tung-Han Hsieh)