您的位置:首页 > 其它

字符集本地化(locale)与输入法系列讲座-----(4) Ubuntu Locale配置问题根源解决之道

2009-07-23 23:25 344 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: