2006年3月4日

Gentoo 2006.0 預設語系支援

因為新安裝的 K8 Server,所以打算將環境改到 UTF-8 編碼上,想當然爾的作法就是:
ada@gentoo ~ $ export LC_ALL="zh_TW.UTF-8"
可惜事與願違,在檢查現行語系設定時出現了錯誤訊息(如下),經檢查後確認 Gentoo 2006.0 在預設語系上有做了些小小的改變。
ada@gentoo ~ $ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=zh_TW.UTF-8
LC_CTYPE="zh_TW.UTF-8"
LC_NUMERIC="zh_TW.UTF-8"
LC_TIME="zh_TW.UTF-8"
LC_COLLATE="zh_TW.UTF-8"
LC_MONETARY="zh_TW.UTF-8"
LC_MESSAGES="zh_TW.UTF-8"
LC_PAPER="zh_TW.UTF-8"
LC_NAME="zh_TW.UTF-8"
LC_ADDRESS="zh_TW.UTF-8"
LC_TELEPHONE="zh_TW.UTF-8"
LC_MEASUREMENT="zh_TW.UTF-8"
LC_IDENTIFICATION="zh_TW.UTF-8"
LC_ALL=zh_TW.UTF-8
首先與 Gentoo 2005.0 不同的是 glibc 預設啟用了 userlocales 選項,這表示在編譯 glibc 時會參考 /etc/locales.build 內的設定而選擇性的編譯出指定語系的支援。
gentoo ~ # emerge -pv glibc

These are the packages that I would merge, in order:

Calculating dependencies ...done! [ebuild R ] sys-libs/glibc-2.3.5-r2 -build -erandom -glibc-compat20 -glibc-omitfp -hardened -linuxthreads-tls (-multilib) +nls +nptl -nptlonly -pic -profile (-selinux) +userlocales 0 kB

Total size of downloads: 0 kB gentoo ~ #

然後在 /etc/locales.build 中的預設值僅提供歐、美等地主要國家的語系設定,換句話說當依照手冊完成系統建置時將發現無法透過指定 LC_ALL 或 LANG 環境變數的值而隨意切換系統語系。

解決的方法有二:

  1. 手動加入華文語系的支援並重新編譯 glibc 套件;
  2. 拿掉 glibc 的 userlocales 選項並重新編譯 glibc 套件。
目前系統暫時提供以下的語系支援,有需要時再重新編譯 glibc 套件即可。

新系統語系設定
en_US/ISO-8859-1
en_US.UTF-8/UTF-8
ja_JP.EUC-JP/EUC-JP
ja_JP.UTF-8/UTF-8
ja_JP/EUC-JP
zh_TW/BIG5
zh_CN.GB18030/GB18030
zh_CN.GBK/GBK
zh_CN.UTF-8/UTF-8
zh_CN/GB2312
zh_HK.UTF-8/UTF-8
zh_HK/BIG5-HKSCS