基料的英文译语怎么说-beij
2023年4月2日发(作者:10066)
locale详解
locale是国际化与本⼟化过程中的⼀个⾮常重要的概念,个⼈认为,对于中⽂⽤户来说,通常会涉及到的国际化或者本⼟化,⼤致包含三个
⽅⾯:看中⽂,写中⽂,与window中⽂系统的兼容和通信。从实际经验上看来,locale的设定与看中⽂关系不⼤,但是与写中⽂,及
window分区的挂载⽅式有很密切的关系。本⼈认为就像⼀个纯英⽂的Windows能够浏览中⽂,⽇⽂或者意⼤利⽂⽹页⼀样,你不需要设三人行必有我师焉翻译 定
locale就可以看中⽂。那么,为什么要设定locale呢?什么时候会⽤到locale呢?
Tags:locale设定原因解释⼀、为什么要设定locale正如前⾯我所讲的,设定lo震组词 cale与你能否浏览中⽂的⽹页没有直接的关系,即便你把
locale设置成en_-8859-1这样⼀个标准的英⽂locale你照样可以浏览中⽂的⽹页,只要你的系统⾥⾯有相应的字符集(这个都不⼀定
需要)和合适的字体(如simsun),浏览器就可以把⽹页翻译成中⽂给你看。具体的过程是⽹络把⽹页传送到你的机器上之后,浏览器会
判断相应的编码的字符集,根据⽹页采⽤的字符集,去字体库⾥⾯找合适的字体,然后由⽂字渲染⼯具把相应的⽂字在屏幕上显⽰出来。
在下⽂本⼈会偶尔把字符集⽐喻成密码本,个⼈觉得对于⼀些东西⽐较容易理解,假如你不习惯的话,把全⽂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_2312、zh_18030或者zh_-8。很多⼈都不明⽩这些古⾥古怪的表达⽅式。这个外星表达式规定了什么东西
呢?这个问题稍后详述,现在只需要知道,这是locale的表达⽅式就可以了。
⼆、到底什么是locale?locale这个单词中⽂翻译成地区或者地域,其实这个单词包含的意义要宽泛很多。Locale是根据计算机⽤户所使⽤
的语⾔,所在国家或者地区,以及当地的⽂化传统所定义的⼀个软件运⾏时的语⾔环境。
这个⽤户环境可以按照所涉及到的⽂化传统的各个⽅⾯分成⼏个⼤类,通常包括⽤户所使⽤的语⾔
⽂档冲亿季,好礼乐相随miniipad移动硬盘拍⽴得百度书包
符号及其分类(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_CNandde_DE@euro都是locale的定义⽂件,这些⽂件都是⽤⽂
本格式书写的,你可以⽤写字板打开,看看⾥边的内容,当然出了有限的注释以外,⼤部分东西可能你都看不懂,因为是⽤的Unicode的字
符索引⽅式。
对于de_DE@euro的⼀点说明,@后边是修正项,也就是说你可以看到两个德国的locale:
/usr/share/i18n/locales/de_DE@euro/usr/share/i18n/locales/de_DE打开这两个locale定义,你就会知道它们的差别在于de_DE@euro使
⽤的是欧洲的排序、⽐较和缩进习惯,⽽de_DE⽤的是德国的标准习惯。
上⾯我们说到了zh_18030的前半部分,后半部分是什么呢?⼤部分Linux⽤户都知道是系统采⽤的字符集。
三、什么是字符集?字符集就是字符,尤其是⾮英语字符在系统内的编码⽅式,也就是通常所说的内码,所有的字符集都放
在/usr/share/i18n/charmaps,所有的字符集也都是⽤Unico一枝春 de编号索引的。Unicode⽤统⼀的编号来索引⽬前已知的全部的符号。⽽字符集
则是这些符号的编码⽅式,或者说是在⽹络传输,计算机内部通信的时候,对于不同字符的表达⽅式,Unicode是⼀个静态的概念,字符集
是⼀个动态的概念,是每⼀个字符传递或传输的具体形式。就像Unicode编号U59D0是代表姐姐的“姐”字,但是具体的这个字是⽤两个字节
表⽰,三个字节,还是四个字节表⽰,是字符集的问题。例如:UTF-8字符集就是⽬前流⾏的对字符的编码⽅式,UTF-8⽤⼀个字节表⽰常
⽤的拉丁字母,⽤两个字节表⽰常⽤的符号,包括常⽤的中⽂字符,⽤三个表⽰不常⽤的字符,⽤四个字节表⽰其他的古灵精怪的字符。⽽
GB2312字符集就是⽤两个字节表⽰所有的字符。需要提到⼀点的是Unicode除了⽤编号索引全部字符以外,本⾝是⽤四个字节存储全部字
符,这⼀点在谈到挂载windows分区的时候是⾮常重要的⼀个概念。所以说你也可以把Unicode看作是⼀种字符集(我不知道它和UTF-32
的关系,反正UTF-32就是⽤四个字节表⽰所有的字符的),但是这样表述符号是⾮常浪费资源的,因为在计算机世界绝⼤部分时候⽤到的
是⼀个字节就可以搞定的26个字母⽽已。所以才会有UTF-8,UTF-16等等,要不然⼤同世界多好,省了这许多⿇烦。
四、zh_2312到底是在说什么?Locale是软件在运⾏时的语⾔环境,它包括语⾔(Language),地域(Territory)和字符集(Codeset)。⼀
个locale的书写格式为:语⾔[_地域[.字符集]].所以说呢,locale总是和⼀定的字符集相联系的。下⾯举⼏个例⼦:
1、我说中⽂,⾝处中华⼈民共和国,使⽤国标2312字符集来表达字符。zh_2312=中⽂_中华⼈民共和国+国标2312字符集。
2、我说中⽂待到重阳日 还来就菊花 ,⾝处中华⼈民共和国,使⽤国标18030字符集来表达字符。zh_18030=中⽂_中华⼈民共和国+国标18030字符集。
3、我说中⽂,⾝处中华⼈民共和国台湾省,使⽤国标Big5字符集来表达字符。zh_5=中⽂_台湾.⼤五码字符集
4、我说英⽂,⾝处⼤不列颠,使⽤ISO-8859-1字符集来表达字符。en_-8859-1=英⽂_⼤不
列颠.ISO-8859-1字符集5、我说德语,⾝处德国,使⽤UTF-8字符集,习惯了欧洲风格。de_-8@euro=德语_德国.UTF-8字符集
@按照欧洲习惯加以修正
注意不是[email]de_DE@[/email]-8,所以完全的locale表达⽅式是[语⾔[_地域][.字符集][@修正值]
⽣成的locale放在/usr/lib/locale/⽬录中,并且每个locale都对应⼀个⽂件夹,也就是说创建了[email]de_DE@[/email]-8locale之
后,就⽣成/usr/lib/locale/de_DE@-8/⽬录,⾥⾯是具体的每个locale的内容。
五、怎样去⾃定义locale在gentoo⽣成locale还是很容易的,⾸先要在USE⾥⾯加⼊userlocales⽀持,然后编辑⽂件,这个⽂
件⽤来指⽰glibc⽣成locale⽂件。很多⼈不明⽩每⼀个条⽬是什么意思。其实根据上⾯的说明现在应该很明确了。
File:/etc/n_US/ISO-8859-1en_-8/UTF-8
zh_CN/GB18030zh_/GBKzh_2312/GB2312zh_-8/UTF-8
上⾯是我的⽂件,依次的说明是这样的:
en_US/ISO-8859-1:⽣成名为en_US的locale,采⽤ISO-8859-1字符集,并且把这个locale作为英⽂_美国locale类的默认值,其实它和
en_-8859-1/ISO-8859-1没有任何区别。
en_-8/UTF-8:⽣成名为en_-8的locale,采⽤UTF-8字符集。
zh_CN/GB18030:⽣成名为zh_CN的locale,采⽤GB18030字符集,并且把这个locale作为中⽂_中国locale类的默认值,其实它和
zh_18030/GB18030没有任何区别。
zh_/GBK:⽣成名为zh_的locale,采⽤GBK字符集。zh_2312/GB2312:⽣成名为zh_2312的locale,采
⽤GB2312字符集。zh_-8/UTF-8:⽣成名为zh_-8的locale,采⽤UTF-8字符集。
关于默认locale,默认locale可以简写成en_US或者zh_CN的形式,只是为了表达简单⽽已没有特别的意义。
Gentoo在locale定义的时候掩盖了⼀些东西,也就是locale的⽣成⼯具:localedef。在编译完glibc之后你可以⽤这个localedef再补充⼀些
locale,就会更加理解locale了。具体的可以看localedef的manpage。
$localedef-f字符集-ilocale定义⽂件⽣成的locale的名称例如$localedef-fUTF-8-izh_CNzh_-8
上⾯的定义⽅法和在中设定zh_-8/UTF-8的结果是⼀样⼀样的。
六、locale的五脏六腑
刚刚⽣成了⼏个locale,但是为了让它们⽣效,必须告诉Linux系统使⽤那(⼏)个locale。这就需要
对locale的内部机制有⼀点点的了解。在前⾯我已经提到过,locale把按照所涉及到的⽂化传统的各个⽅⾯分成12个⼤类,这12个⼤类分别
是: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)。
其中,与中⽂输⼊关系最密切的就是LC_CTYPE,LC_CTYPE规定了系统内有效的字符以及这些字符的分类,诸如什么是⼤写字母,
⼩写字母,⼤⼩写转换,标点符号、可打印字符和其他的字符属性等⽅⾯。⽽locale定义zh_CN中最最重要的⼀项就是定义了汉字
(Class“hanzi”)这⼀个⼤类,当然也是⽤Unicode描述的,这就让中⽂字符在Linux系统中成为合法的有效字符,⽽且不论它们是⽤什么字符
集编码的。
LC_CTYPE%Thisisacopyofthe\"i18n\"LC_CTYPEwiththefollowingmodifications:-Additionalclasses:hanzi
copy\"i18n\"
class\"hanzi\";/%..;/..;/;;;;;;;/;;;;;;;/;;;ENDLC_CTYPE
在en_US的locale定义中,并没有定义汉字,所以汉字不是有效字符。所以如果要输⼊中⽂必须使⽤⽀持中⽂的locale,也就是zh_XX,如
zh_CN,zh_TW,zh_HK等等。
另外⾮常重要的⼀点就是这些分类是彼此独⽴的,也就是说LC_CTYPE,LC_COLLATE和LC_MESSAGES等等分类彼此之间是独⽴的最美经典诗词歌赋 ,
可以根据⽤户的需要设定成不同的值。这⼀点对很多⽤户是有利的,甚⾄是必须的。例如,我就需要⼀个能够输⼊中⽂的英⽂环境,所以我
可以把LC_CTYPE设定成zh_18030,⽽其他所有的项都是en_-8。
七、怎样设定locale呢?
设定locale就是设定12⼤类的locale分类属性,即12个LC_*。除了这12个变量可以设定以外,为了简便起见,还有两个变量:LC_ALL和
LANG。它们之间有⼀个优先级的关系:LC_ALL>LC_*>LANG可以这么说,LC_ALL是最上级设定或者强制设定,⽽LANG是默认设定
值。1、如果你设定了LC_ALL=zh_-8,那么不管LC_*和LANG设定成什么值,它们都会被强制服从LC_ALL的设定,成
为zh_-8。2、假如你设定了LANG=zh_-8,⽽其他的LC_*=en_-8,并且没有设定LC_ALL的话,那么系统的
locale设定以LC_*=en_-8。3、假如你设定了LANG=zh_-8,⽽其他的L咏煤炭古诗带拼音 C_*,和LC_ALL均未设定的话,系统会将LC_*设
定成默认值,也就是LANG的值
zh_-8。4、假如你设定了LANG=zh_-8,⽽其他的LC_CTYPE=en_-8,其他的LC_*,和LC_ALL均未设定的
话,那么系统的locale设定将是:LC_CTYPE=en_-8,其余的LC_COLLATE,LC_MESSAGES等等均会采⽤默认值,也就
是LANG的值,也就是LC_COLLATE=LC_MESSAGES=……=LC_PAPER=LANG=zh_-8。
所以,locale是这样设定的:1、如果你需要⼀个纯中⽂的系统的话,设定LC_ALL=zh_,或者LANG=zh_都可以,当
然你可以两个都设定,但正如上⾯所讲,LC_ALL的值将覆盖所有其他的locale设定,不要作⽆⽤功。2、如果你只想要⼀个可以输⼊中⽂
的环境,⽽保持菜单、标题,系统信息等等为英⽂界⾯,那么只需要设定LC_CTYPE=zh_,LANG=en_就可以了。这
样LC_CTYPE=zh_,⽽LC_COLLATE=LC_MESSAGES=……=LC_PAPER=LANG=
en_。3、假如你⾼兴的话,可以把12个LC_*⼀⼀设定成你需要的值,打造⼀个古灵精怪的
更多推荐
locale是什么意思ale在线翻译读音例句
发布评论