4.6. locale ªº³]©w

# setenv LC_CTYPE zh_TW.Big5
# setenv LANG zh_TW.Big5

Note: 5.x ªºÂ²Åé¨Ï¥ÎªÌ½Ð¥Î¡G

# setenv LC_CTYPE zh_CN.GBK
# setenv LANG zh_CN.GBK

4.x ªºÂ²Åé¨Ï¥ÎªÌ½Ð¥Î¡G

# setenv LC_CTYPE zh_CN.encCN
# setenv LANG zh_CN.eucCN

locale ¬O¤@²Õ C µ{¦¡»y¨¥³B²z¦ÛµM»y¨¥(¤å¦r)ªºµ{¦¡¤¶­±¡A ¤]¥i¥H²³æªº»¡¡Alocale ´N¬O¤@²Õ¦a°Ï©Ê»y¨¥ªº¸ê°T¡C ¥Ñ°ê®a»y¨¥©M¦U¦a²ß«U¼vÅT©Ò¨M©wªººD¨Ò¡A©Î¥Nªí¤@­Ó¦a²z°Ï°ìªº©w¸q©Ò²Õ¦¨¡A ³o¨ÇºD¨Ò¥]§t¤å¦r¡B¤é´Á¡B¼Æ¦r¡B³f¹ô®æ¦¡©M±Æ§Çµ¥µ¥¡C³o¥NªíµÛ locale ¥iÅýµ{¦¡ªº¿é¥X¥i¥Hª½±µ¤ÏÀ³¦a¤è°Ï°ì©Êªº¤å¤Æ¡CC »y¨¥ªº locale ©w¸q¡A¤À¬°¤U¦C¦U¤jÃþ¡G

¨ä¤¤»P¤@¯ë¨Ï¥ÎªÌ®§®§¬ÛÃöªº¡A¬O¦r¤¸©w¸q (LC_CTYPE) »P»y¨¥Åã¥Ü (LANG)¡CLC_CTYPE ª½±µÃö«Y¨ì¬Y¨Ç¦r¤¸©Î¤º½X¦b¥Ø«eªº locale ¤U¬O§_¥i¦C¦L¡H­n¦p¦óÂà´«¦r½X¡H¹ïÀ³¨ì­þ¤@­Ó¦r¡H.... µ¥µ¥¡CLANG «hÃö«Y¨ì³nÅ骺°T®§¿é¥X¬O¤£¬O²Å¦X¦a°ì©Ê¡A¨Ò¦p ¡G§Ú­Ì»Ý­nªº¬O¤¤¤å¡C¦Ó¤@­Ó¯u¥¿§¹¾ã¤ä´© locale ¨t²Î¡A ¬O·í¨Ï¥ÎªÌ¦b shell prompt ¤U¡Aª½±µ³]¦nÀô¹ÒÅܼƫá¡A «h°¨¤W´N¯à¤Á´«¨ì¨º­Ó»y¨¥¤F¡C·í LC_MESSAGES¡BLC_TIME¡BLC_NUMERIC¡B LC_MONETARY µ¥¨S¦³³]©wªº®É­Ô¡A·|ª½±µ¨ú¥Î LANG ªºÀô¹Ò³]©w­È¡C

³]©w Locale ªº¦r¤¸©w¸q¬°¥xÆW¦a°Ïªº Big5 ÁcÅ餤¤å½X©w¸q¡A ¦³¤F¥¿½Tªº locale ªº©w¸q«á¡A¨Ï±o¥ô¦ó¦a°Ïªº»y¤å¡A¥u­n¦b¥[¤J¾A·íªº locale data ¤§«á¡AC Library ´N¯à¥¿½T¦a³B²z³nÅéÅã¥Ü°T®§¡A ¦Ó§Ú­Ì¨Ï¥Îªº¤¤¤å·íµM¤]¤£¨Ò¥~¡A¦Ó¥Ø«e±`¥Îªº¤¤¤å locale data ´N¬O zh_TW.Big5¡A¥Nªíªº´N¬O¤¤¤å»y¨t(zh)¥xÆW¦a°Ï(TW) ¨Ï¥ÎBig5½s½X¨t²Î(Big5)¡C

Note: locale ©R¦W³W«h¡G»y¨¥_¦a°Ï¦W.¦r¤¸½s½X¦WºÙ

·í¤@­Óµ{¦¡±Ò°Ê®É¡A¨t²Î·|¹w³]µ¹¥¦¤@­Óªì©l locale¡AºÙ¬° POSIX ©Î C locale¡C¦b¦¹ locale ¤U¡Aµ{¦¡ªºªí²{·|»P¶Ç²Îªº C »y¨¥¤¤¤@¼Ë¡A ¨Ï¥Î­^¤å°µ°T®§¿é¥X¡A¥u¯à³B²z­^¤åµ¥ ASCII ½Xµ¥µ¥¡C ¦pªG¸Óµ{¦¡¦³¤ä´© I18N¡A¤]´N¬O»¡¥¦¦³«ö·Ó I18N ªº¼Ð·Ç¨Ó¼g¡A «h¥¦¦b±Ò°Ê«á´N·|°¨¤W©I¥s¨t²Î¨ç¦¡¨Ó§ïÅÜ¥¦ªº locale¡A ¦p¦¹¥¦´N·n¨­¤@ÅÜ¡AÅܦ¨¥i¥H³B²z¸Ó locale ©Ò¥Nªíªº¦a°Ï»y¤å¤F¡C

zh_TW.Big5 ¬O¥Ø«e¥xÆW¤º¼sªx¨Ï¥Îªº locale¡A zh ¬OµØ»y(Chinese)¡A1998 ¦~ ISO639 ¸Ì­±¥H¨â­Ó­^¤å¦r¥À¨Ó¥Nªí»y¨¥½s½X¡A ³o­ÓÁY¼g¾Úµ§ªÌ©Òª¾¨S¦³¥ô¦ó§t¸q¡A¦Ó TW ¥Nªíªº´N¬O¥xÆW(Taiwan) ¦a°ÏªºÁY¼g¡A³Ì«áªº Big5 «h¬O½s½X¤è¦¡¡C

locale ³]©wÀɦb½sĶ«á¡A «h¬OÀx¦s¦b /usr/share/locale/ ¥Ø¿ý¤U¡A ¥H zh_TW.Big5 locale ¬°¨Ò¡A¸Ó¥Ø¿ý¤¤´N¥]§t¤F LC_COLLATE¡BLC_CTYPE¡B LC_TIME¡C

¦Ó LC_MESSAGES «h¬OÀx¦s¦b /usr/local/share/locale/zh_TW/LC_MESSAGES/ ©Î¬O /usr/X11R6/share/locale/zh_TW.Big5/ ©³¤U¡C¥Ñ©ó LC_MESSAGES Ãþ§O´xºÞªº¬Oµ{¦¡°T®§¿é¥X©Ò¥Îªº»y¨¥¡A ¦Ó¥B¤£¦Pµ{¦¡¶¡ªº°T®§³£¤£·|¤@¼Ë¡A¦]¦¹¥¦¤£¯à¹³¨ä¥LÃþ§O¤@¼Ë¡A ¥u´£¨Ñ³æ¤@¤@­Ó¸ê®ÆÀɧY¥i¡C¬Û¤Ïªº¡A ¦b³oùةұĨúªº¤è¦¡¬O¥Ñ¦UÀ³¥Îµ{¦¡¦Û¦æ´£¨Ñ¥¦­Ìªº°T®§¸ê®ÆÀÉ¡A ¨Ã²Î¤@©ñ¦b¦U locale ªº LC_MESSAGES ªº¥Ø¿ý¤U¡C¨Ò¦p mutt µ{¦¡¡A ¨ä°T®§ªº³¡¤À°£¤F­^¤å¥H¥~¡A¥i¯àÁÙ¦P®É´£¨Ñ¤FÁcÅ餤¤å¡B²Å餤¤å¡B ¤é¤å¡Bªk¤å µ¥Â½Ä¶¡A¦]¦¹¡A¦b¥H¤W³o¨Ç»y¤å©Ò¥Nªíªº locale ¤¤¡A ¨ä©³¤Uªº LC_MESSAGES ¥Ø¿ý¤¤³£·|¦³¤@¥÷ÄÝ©ó mutt µ{¦¡ªº°T®§¸ê®ÆÀÉ¡C ´«¥y¸Ü»¡¡A¦b I18N ¬[ºc¤U¡Aµ{¦¡°T®§³¡¤À¬O»Pµ{¦¡¤ÀÂ÷ªº¡A ¦p¦¹¤~¯à¤À§O¹ï¦U locale °µ ``°Ï°ì¤Æ'' (§Y½Ķ¦¨¦U¦a°Ïªº»y¨¥)¡C ¦p¦¹¡A·í mutt ¦b°õ¦æ®É¡A¨t²Î·|®Ú¾Ú¥Ø«e¥¦ªº LC_MESSAGES locale ³]©w¥h§ä§ä¬Ý¦³¨S¦³¥¦ªº°T®§¸ê®ÆÀɦs¦b¡A¦³ªº¸Ü´N¥H¸Ó»y¨¥°µ°T®§¿é¥X¡A §_«hªº¸Ü«h¥H C locale ªº¤è¦¡ (§Y­^¤å) ¨Ó¿é¥X°T®§¡C

¥H¤W©Ò¦³ªº locale Ãþ§O¤¤¡A°£¤F LANG ¤§¥~¡A³Ì­«­nªº´N¬O LC_CTYPE ¤F¡C¦¹Ãþ§O´xºÞªº¬O¸Ó locale ¤¤©Ò¦³¦r¤¸ªº³B²z¤è¦¡¡C ¤@­ÓÀ³¥Îµ{¦¡­Y­n¯à³Q ``°Ï°ì¤Æ'' ¦¨¬Y¦a°Ïªº»y¤å¡A ­º­n¤u§@´N¬O­n¯à³B²z¸Ó¦a°Ïªº¤å¦r¡C¨Ò¦p¨C­Ó¦rªº¤º½X¦p¦ó½s½X¡H ¬O³æ¤@ byte ÁÙ¬O¥Ñ¦h­Ó bytes ²Õ¦¨ªº¡H«ç¼Ëªº½s½X¤~¬O¦Xªk¥i¥Îªº¡H ³o­Ó¦r¬O¤£¬O¥i¥H¦L¡H¬O¤£¬O¼Æ¦r¡H­Yµ¹©w¥ô·Nªº¤å¦r¦r¦ê¡A ­n¦p¦ó¯à°Ï¤À¥X¤@­Ó­Ó¦rµ¥µ¥¡C¦]¦¹¡A¦¹Ãþ§O²o¯Aªº¼h­±¬Û·í¼s¡A °£¤Fµ{¦¡¥»¨­ªº¤å¦r³B²z¯à¤O¥H¥~¡A¬Æ¦Ü¨ì X Window ¤¤ªº¤å¦rÅã¥Ü (§Y XOM: X Output Method)¡B¤å¦r¿é¤J (§Y XIM: X Input Method) µ¥µ¥¡A ³£»P¥¦¦³Ãö¡C¦]¦¹¡A·í­n¶}©l¨Ï¥Î¤@­Ó¤ä´© I18N ªºµ{¦¡¤§«e¡A ¤@©w­n¥ý³]¦n LC_CTYPE ³o­Ó locale Ãþ§O¡C

¥²¶·«ü©w zh_TW.Big5 ³o­Ó locale Àô¹ÒÅܼƵ¹ Shell¡AShell ¤~¯à¥¿½Tªº³B²z¤¤¤å°T®§¡A¤@¯ë¦Ó¨¥¥u­n«ü©w locale ªº¦r¤¸©w¸q LC_CTYPE ¬° zh_TW.Big5 §Y¥iÅý Shell ¥¿½Tªº³B²z¤¤¤å¡A­Y­nÅý Shell ªº¿é¥X°T®§¤]Åã¥Ü¤¤¤å¡A«h¥i±N locale °T®§Åã¥Ü LANG ¤]³]©w¬°¤¤¤åªº locale data¡C

¦Ü©ó­n³]©w stty pass8 ªº­ì¦]¬O¡A¥xÆW¦a°Ï©Ò³q¦æªº Big5 ½s½X¡A ¤Î¤j³°¦a°Ï©Ò¨Ï¥Îªº GB ½s½X¡A¨ä¶}ÀYªº¦ì¤¸´X¥G³£¬O¤j©ó 128 ªº¼Æ­È¡A ¤]´N¬O©Ò¿× non-ASCII ½Xªº½d³ò(ASCII ¬O«ü¤p©ó 128 ªº½s½X)¡C ¤¤¤å°ÝÃD´N¦b³o¸Ì¡A³\¦hµ{¦¡¥Ñ©ó¦U¦¡¦U¼Ëªº­ì¦]¡A ¨Ã¥¼¦Ò¼{¨ì¿é¤Jªº¸ê®Æ¥i¯à¬O non-ASCII ½Xªº°ÝÃD¡A µ{¦¡©¹©¹°²³]¤F¦o©Ò­n³B²zªº¸ê®Æ³£¬O ASCII ½X (¦]¬°¤j³¡¤À³nÅ鬰¥~°ê¤Hµo®iªº)¡A§óÁV¿|ªº¬O¡A ·íµ{¦¡¹J¨ì non-ASCII ½X®É¡A±`±`°²³]¦o¤£¦s¦b¡A ¦Ó±N¥¦ªº²Ä¤K­Ó¦ì¤¸ºI¥h¡A³o¬O©Ò¿×ªº 8-bit ¿é¤J¤¤¤å®É¡A ¨C¨C±N²Ä¤K¦ì¤¸¬å±¼¡A©Ò¥H¤¤¤å³£Åܦ¨¶Ã½X¡C¦]¦¹¥²¶·«ü©w stty pass8¡A ĵ§i Shell ¤£­n±N¿é¤Jªº²Ä¤K­Ó¦ì¤¸ºI±¼¡A³o¼Ë¤~¯à¥¿½TÅã¥Ü¤¤¤å¡C

ENABLE_STARTUP_LOCALE «h¬O a.out ¿òª«¡A¥L·|±j¨î ld.so ¸ü¤Jµ{¦¡«e¡A ¥ý©I¥s setlocale()¡A¦b 3.x «e´N§â³o­Ó ugly hack ®³±¼¤F¡C

Ãö©ó¦r¤¸ªº¤ÀÃþ»P½s½X¡A¤@­Ó locale ©Ò¥]§tªº¦Xªk¦r¤¸»P¨ä½s½X¤è¦¡¡A ºÙ¤§¬°¦r¶°(character set)¡C¥H zh_TW.Big5 locale ¬°¨Ò¡A ¨ä¹ê¥¦¤º³¡¥]§t¤F¨â­Ó sub-character set¡A¤@­Ó¬O ASCII ¥Î¨Óªí¥Ü¤@½sªº­^¤å¡B¼Æ¦r¡B¹q¸£ºD¥Î²Å¸¹ µ¥µ¥¡A¥t¤@­Ó´N¬O¥H Big5 ½s½X¤è¦¡ªº¡A«UºÙªº¥þ§Î¦r¡A¥]¬A¤F¤¤¤å¦r¡B ¥þ§Î­^¤å¡B¼Æ¦r¡B¥H¤Î²Å¸¹ µ¥¡C«eªÌ¨C­Ó¦r¤¸ªºªø«×¬O¤@­Ó byte¡A¦Ó«áªÌ¨C­Ó¦r¤¸ªºªø«×«h¬O¨â­Ó byte¡C

¦b locale ªº³]©w¤¤¡A¥H LC_CTYPE ³Ì¬°­«­n¡A LC_CTYPE ¥]§t¤F¦r¤¸¤º½X¸ê°T¡A ª½±µ¼vÅT³¡¥÷ C ¨ç¦¡¶¤¦r¤¸ªº³B²zµ²ªG¡A¥]¬A¡G

zh_TW.Big5 LC_CTYPE locale ªº³]©wÀɦb /usr/src/share/mklocale/zh_TW.Big5.src¡A ¦b LC_CTYPE ªº³]©wÀɤ¤¡A¥¦±N©Ò¦³ªº¦r¤¸¤ÀÃþ¦¨¥H¤U´XºØ¡G

UPPER: «÷­µ¦rªº¤j¼g¦r¡C
LOWER: «÷­µ¦rªº¤p¼g¦r¡C
ALPHA: ©Ò¦³ªº«÷­µ¦r¥À¡C
DIGIT: ªü©Ô§B¼Æ¦r¡C
SPACE: ªÅ¹j¦r¤¸¡A¦pªÅ¥Õ (space)¡B´«¦æ¡Btab ...¦r¤¸µ¥¡C
XDIGIT: ¥Nªí¤Q¤»¶i¦ì¼Æ¦rªº¦r¤¸¡C
BLANK: ªÅ¥Õ¦r¤¸¡A³q±`¥u¥]¬AªÅ¥Õ (space) »P tab ¨â­Ó¡C
CNTRL: ¹q¸£ªº±±¨î¦r¤¸¡C
PUNCT: ¼ÐÂI²Å¸¹¡C
GRAPH: ©Ò¦³¦³µ§µeªº¦r¤¸¡A¤£¥]¬AªÅ¥Õ»PªÅ®æ¡C
PRINT: ©Ò¦³¥i¥H¦L¥Xªº¦r¤¸¡A¥]¬AªÅ¥Õ (blank) ¦r¤¸¡C
TOUPPER: ¤p¼g«÷­µ¦r¥ÀÂà¤j¼g«÷­µ¦r¥Àªº¹ïÀ³ªí¡C
TOLOWER: ¤j¼g«÷­µ¦r¥ÀÂà¤p¼g«÷­µ¦r¥Àªº¹ïÀ³ªí¡C