字符集本地化(locale)與輸入法系列講座-----(4) Ubuntu Locale配置問題根源解決之道

1. No such file 用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

2. perl warning, please check if supported 在apt-get install/remove的時候出現

perl: warning: Please check that your locale settings: LC_ALL = (unset), LC__FASTMSG = "true", LC_MESSAGES = "", LANG = "zh_CN" are supported and installed

相關命令

locale 查看現在的locale配置 環境

localepurge 配置需要的locale(如果沒有這個命令,用apt-get install localepurge安裝

locale-gen 生成需要的locale文件

         參數 --purge用來刪除所有舊的配置,在出現問題時很有用

相關的文件

其實在man locale-gen和man locale 查找

 

解決 問題

很簡單,重新生成所有的locale配置

第一步:配置自己想要的locale。普遍推薦的方法是拷貝所有ubuntu支持的locale到自己的配置文件裏,然後編輯。

cp /usr/share/i18n/SUPPORTED /var/lib/locales/supported.d/local

vi /var/lib/locales/supported.d/local,用dd命令刪啊刪,只留下en_系列和zh_系列, 或者其他你要的locale

 

如:
root@xjl-desktop:~# more /var/lib/locales/supported.d/local
en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8



rm /var/lib/locales/supported.d/en

rm /var/lib/locales/supported.d/zh 這兩個文件跟local一樣功能,也可以把en系列寫在en文件裏,zh系列寫在zh文件裏,分類方便而已。我既然都寫在local裏,這兩個就用不着了。

第二步:重新生成locale支持文件

locale-gen --purge

會將/usr/lib/locale/裏面的locale支持文件刪掉,重新生成。如果設置 的locale沒有生成過,或者設置 的時候拼寫錯誤,在這個目錄找不到同名的支持文件就會提示 No such file了。

第三步:配置locale環境。

敲locale把輸出的那些環境變量拷貝到/etc/default/locale裏面,自己手工修改。

如:

 

root@xjl-desktop:~# more /etc/default/locale
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE=zh_CN.UTF-8
LC_MONETARY=en_US.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=
LANGUAGE=en_US:en
GST_ID3_TAG_ENCODING=GBK
LANG=en_US.UTF-8

 

可以設的值就是/var/lib/locales/supported.d/local裏面包括的值,或者生成在/usr/lib/locale/裏面的文件夾名稱。

第四步:退出重新登錄,再敲locale看看,沒錯誤了。

root@xjl-desktop:~# locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE=zh_CN.UTF-8
LC_MONETARY=en_US.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=

 

 

appendix:

一、locale的五臟六腑

1、 語言符號及其分類(LC_CTYPE)
2、 數字(LC_NUMERIC)
3、 比較和排序習慣(LC_COLLATE)
4、 時間顯示格式(LC_TIME)
5、 貨幣單位(LC_MONETARY)
6、 信息主要是提示信息,錯誤信息, 狀態信息, 標題, 標籤, 按鈕和菜單等(LC_MESSAGES)
7、 姓名書寫方式(LC_NAME)
8、 地址書寫方式(LC_ADDRESS)
9、 電話號碼書寫方式(LC_TELEPHONE)
10、度量衡表達方式(LC_MEASUREMENT)
11、默認紙張尺寸大小(LC_PAPER)
12、對locale自身包含信息的概述(LC_IDENTIFICATION)。


locale 的設定:
LC_ALL和LANG 優先級的關係:LC_ALL > LC_* >LANG
1、如果需要一個純中文的系統的話,設定LC_ALL= zh_CN.XXXX,或者LANG =zh_CN.XXXX都可以。
2、如果只想要一個可以輸入中文的環境,而保持菜單、標題,系統信息等等爲英文界面,那麼只需要設定 LC_CTYPE=zh_CN.XXXX,LANG =en_US.XXXX就可以了。
3、假如什麼也不做的話,也就是LC_ALL,LANG 和LC_*均不指定特定值的話,系統將採用POSIX作爲lcoale,也就是C locale

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章