关于locale的设定
|
|
关于locale的设定
locale是国际化与本土化过程中的一个非常重要的概念,个人认为,对于中文用户来说,通常会涉及到的国际化或者本土化,大致包含三个方面:看中文,写中文,与window中文系统的兼容和通信。从实际经验上看来,locale的设定与看中文关系不大,但是与写中文,及window分区的挂载方式有很密切的关系。本人认为就像一个纯英文的Windows能够浏览中文,日文或者意大利文网页一样,你不需要设定locale就可以看中文。那么,为什么要设定locale呢?什么时候会用到locale呢? 一、为什么要设定locale 在下文本人会偶尔把字符集比喻成密码本,个人觉得对于一些东西比较容易理解,假如你不习惯的话,把全文copy到任何文本编辑器,用字符集替换密码本即可。 那有时候网页显示乱码或者都是方框是怎么回事呢?个人认为,显示乱码是因为设定的字符集不对(或者没有相应的字符集),例如网页是用UTF-8编码的,你非要用GB2312去看,而系统根据GB2312去找字体,然后在屏幕上显示,当然是一堆的乱码,也就是说你用一个错误的密码本去翻译发给你的电报,当然内容那叫一个乱;至于有些时候浏览的网页能显示一部分汉字,但有很多的地方是方框,能够显示汉字说明浏览器已经正确的判断出了网页的编码,并在字体库里面找到了相应的文字,但是并不是每个字体库都包含某个字符集全部的字体的缘故,有些时候会显示不完全,找一个比较全的支持较多字符集的字体就可以了。 既然我能够浏览中文网页,那为什么我还要设定locale呢? 其实你有没有想过这么一个问题,为什么gentoo官方论坛上中文论坛的网页是用UTF-8编码的(虽然大家一直强烈建议用GB2312编码),但是新浪网就是用GB2312编码的呢?而Xorg的官方网页竟然是ISO-8859-15编码的,我没有设定这个locale怎么一样的能浏览呢?这个问题就像是你有所有的密码本,不论某个网站是用什么字符集编码的,你都可以用你手里的密码本把他们翻译过来,但问题是虽然你能浏览中文网页,但是在整个操作系统里面流动的还是英文字符。所以,就像你能听懂英语,也能听懂中文。 当你决定要写什么东西的时候,首先要决定的一件事情是用那种语言,对于计算机来说就是你要是用哪一种字符集,你就必须告诉你的linux系统,你想用那一本密码本去写你想要写的东西。知道为什么需要用GB2312字符集去浏览新浪了吧,因为新浪的网页是用GB2312写的。 为了让你的Linux能够输入中文,就需要把系统的locale设定成中文的(严格说来是locale中的语言类别LC_CTYPE ),例如zh_CN.GB2312、zh_CN.GB18030或者zh_CN.UTF-8。很多人都不明白这些古里古怪的表达方式。这个外星表达式规定了什么东西呢?这个问题稍后详述,现在只需要知道,这是locale的表达方式就可以了。 二、到底什么是locale? 这个用户环境可以按照所涉及到的文化传统的各个方面分成几个大类,通常包括用户所使用的语言符号及其分类(LC_CTYPE),数字(LC_NUMERIC),比较和排序习惯(LC_COLLATE),时间显示格式(LC_TIME),货币单位(LC_MONETARY),信息主要是提示信息,错误信息, 状态信息, 标题, 标签, 按钮和菜单等(LC_MESSAGES),姓名书写方式(LC_NAME),地址书写方式(LC_ADDRESS),电话号码书写方式(LC_TELEPHONE),度量衡表达方式(LC_MEASUREMENT),默认纸张尺寸大小(LC_PAPER)和locale对自身包含信息的概述(LC_IDENTIFICATION)。 所以说,locale就是某一个地域内的人们的语言习惯和文化传统和生活习惯。一个地区的locale就是根据这几大类的习惯定义的,这些locale定义文件放在/usr/share/i18n/locales目录下面,例如en_US, zh_CN and de_DE@euro都是locale的定义文件,这些文件都是用文本格式书写的,你可以用写字板打开,看看里边的内容,当然出了有限的注释以外,大部分东西可能你都看不懂,因为是用的Unicode的字符索引方式。 对于de_DE@euro的一点说明,@后边是修正项,也就是说你可以看到两个德国的locale: 上面我们说到了zh_CN.GB18030的前半部分,后半部分是什么呢?大部分Linux用户都知道是系统采用的字符集。 三、什么是字符集? 四、zh_CN.GB2312到底是在说什么? 1、我说中文,身处中华人民共和国,使用国标2312字符集来表达字符。 2、我说中文,身处中华人民共和国,使用国标18030字符集来表达字符。 3、我说中文,身处中华人民共和国台湾省,使用国标Big5字符集来表达字符。 4、我说英文,身处大不列颠,使用ISO-8859-1字符集来表达字符。 5、我说德语,身处德国,使用UTF-8字符集,习惯了欧洲风格。 注意不是de_DE@euro.UTF-8,所以完全的locale表达方式是 生成的locale放在/usr/lib/locale/目录中,并且每个locale都对应一个文件夹,也就是说创建了de_DE@euro.UTF-8 locale之后,就生成/usr/lib/locale/de_DE@euro.UTF-8/目录,里面是具体的每个locale的内容。 五、怎样去自定义locale File: /etc/locales.build zh_CN/GB18030 上面是我的locales.build文件,依次的说明是这样的: en_US/ISO-8859-1:生成名为en_US的locale,采用ISO-8859-1字符集,并且把这个locale作为英文_美国locale类的默认值,其实它和en_US.ISO-8859-1/ISO-8859-1没有任何区别。 en_US.UTF-8/UTF-8:生成名为en_US.UTF-8的locale,采用UTF-8字符集。 zh_CN/GB18030:生成名为zh_CN的locale,采用GB18030字符集,并且把这个locale作为中文_中国locale类的默认值,其实它和zh_CN.GB18030/GB18030没有任何区别。 zh_CN.GBK/GBK:生成名为zh_CN.GBK的locale,采用GBK字符集。 关于默认locale,默认locale可以简写成en_US或者zh_CN的形式,只是为了表达简单而已没有特别的意义。 Gentoo在locale定义的时候掩盖了一些东西,也就是locale的生成工具:localedef。 $localedef -f 字符集 -i locale定义文件 生成的locale的名称 上面的定义方法和在locales.build中设定zh_CN.UTF-8/UTF-8的结果是一样一样的。 六、locale的五脏六腑 刚刚生成了几个locale,但是为了让它们生效,必须告诉Linux系统使用那(几)个locale。这就需要对locale的内部机制有一点点的了解。在前面我已经提到过,locale把按照所涉及到的文化传统的各个方面分成12个大类,这12个大类分别是: 其中,与中文输入关系最密切的就是 LC_CTYPE, LC_CTYPE 规定了系统内有效的字符以及这些字符的分类,诸如什么是大写字母,小写字母,大小写转换,标点符号、可打印字符和其他的字符属性等方面。而locale定义zh_CN中最最重要的一项就是定义了汉字(Class “hanzi”)这一个大类,当然也是用Unicode描述的,这就让中文字符在Linux系统中成为合法的有效字符,而且不论它们是用什么字符集编码的。 LC_CTYPE copy "i18n" class "hanzi"; / 在en_US的locale定义中,并没有定义汉字,所以汉字不是有效字符。所以如果要输入中文必须使用支持中文的locale,也就是zh_XX,如zh_CN,zh_TW,zh_HK等等。 另外非常重要的一点就是这些分类是彼此独立的,也就是说LC_CTYPE,LC_COLLATE和 LC_MESSAGES等等分类彼此之间是独立的,可以根据用户的需要设定成不同的值。这一点对很多用户是有利的,甚至是必须的。例如,我就需要一个能够输入中文的英文环境,所以我可以把LC_CTYPE设定成zh_CN.GB18030,而其他所有的项都是en_US.UTF-8。 七、怎样设定locale呢? 设定locale就是设定12大类的locale分类属性,即 12个LC_*。除了这12个变量可以设定以外,为了简便起见,还有两个变量:LC_ALL和LANG。它们之间有一个优先级的关系: 所以,locale是这样设定的: |
关于locale的设定相关推荐
- 在MobaXterm使用命令tree出现乱码解决办法locale的设定及LANG、LC_CTYPE、LC_ALL环境变量
乱码情况 正常tree命令下的显示情况 root@test-2288H-V5:/home/test# tree . |-- CommandLine.h |-- Makefile |-- README. ...
- linux系统locale的设定
locale 是国际化与本土化过程中的一个非常重要的概念,个人认为,对于中文用户来说,通常会涉及到的国际化或者本土化,大致包含三个方面:看中文,写中文,与 window中文系统的兼容和通信.从实际经验 ...
- ssh 与 locale
1 我的 ubuntu 11.10 使用 zh_CN.UTF-8 ,导致连接到 ssh 服务器上显示中文,本来是很方便的,但是最近要监控某些功能,需要ssh 服务器(en_US.UTF-8)显示英文 ...
- 简单解决Ubuntu修改locale的问题
本文针对的问题是"Ubuntu 安装中文语言包""Ubuntu Server中文问题","Ubuntu更改语言环境","Ubunt ...
- linux命令-locale字符显示
locale这个单词中文翻译成地区或者地域,其实这个单词包含的意义要宽泛很多.Locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境. 这个用户 ...
- (转)Locale 详解
locale 是国际化与本土化过程中的一个非常重要的概念,个人认为,对于中文用户来说,通常会涉及到的国际化或者本土化,大致包含三个方面:看中文,写中文,与 window中文系统的兼容和通信.从实际经验 ...
- java 环境变量 locale_locale的设定及其LANG、LC_ALL、LANGUAGE环境变量的区别 zz
locale 是国际化与本土化过程中的一个非常重要的概念,个人认为,对于中文用户来说,通常会涉及到的国际化或者本土化,大致包含三个方面:看中文,写中文,与 window中文系统的兼容和通信.从实际经验 ...
- java 环境变量 locale_locale的设定及其LANG、LC_ALL、LANGUAGE环境变量的区别
locale这个单词中文翻译成地区或者地域,其实这个单词包含的意义要宽泛很多.Locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境. [ora ...
- linux locale设置
说明: Locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境. 1.locale分类 语言符号及其分类(LC_CTYPE),数字 (L ...
- Linux的Locale
Locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境.用户环境可以按照所涉及到的文化传统的各个方面分成12个大类,这12个大类分别是: 语言符 ...
最新文章
- 顺序表-顺序表表示集合-差集(for + while ,不断遍历)
- 主业失利,跨界捞金,飞科的算盘能如意吗?
- 互联网1分钟 |1105
- 一文搞懂mysql:mysql学习目录链接大全
- Pytorch教程(十八)tensor的保存为csv,并加载
- “QMYSQL: Unable to allocate a MYSQL object“ 解决方法
- P4770:你的名字(SAM、线段树合并)
- 20172310《程序设计与数据结构》(上)课程总结
- 数据传输服务 DTS > 产品简介 > 功能特性 > 数据订阅(旧版)
- ArcGIS 字段计算器取前几位和替换操作
- BXP无盘XP2000系统安装详解
- 多页pdf怎样合并成一页?
- laravel文档工具
- z-blogPHP在西部数码虚拟主机上遇到WTS-WAF错误拦截情况,协商好久他们还是妥协了...
- 51ditu:地图基础知识
- linux-raid (二) faulty 和 multipath
- Java分别获取指定日期的年月日
- js中foreach有三种写法,你知道吗
- TP-LINK wn822n USB型无线网卡win10环境下驱动程序
- 如何看手相 男左女右(转)
热门文章
- 概率论与数理统计公式
- 【小程序】报getUserProfile:fail can only be invoked by user TAP gesture.
- 电子邮件链接格式html主题,html创建电子邮件链接的方法
- ios android 跨平台工具,15个很优秀的跨平台的移动开发工具
- 大众点评数据爬虫思路[更新版]
- 高德导航在天地图显示
- 饥饿的小易 小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃。最开始小易在一个初始位置x_0。对于小易所处的当前位置x,他只能通过神秘的力量移动到 4 * x + 3或者8 * x + 7。因
- 【流媒体协议】图解 FLV 协议 快速入门
- phpcms之 文件下载的页面
- 红​字​和​蓝​字​冲​销(红字冲正、蓝字冲正)