0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文详解Linux下的Locale

马哥Linux运维 来源:马哥Linux运维 2023-02-11 10:25 次阅读

locale这个单词中文翻译成地区或者地域,其实这个单词包含的意义要宽泛很多。Locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境。

locale把按照所涉及到的文化传统的各个方面分成12个大类,这12个大类分别是:

语言符号及其分类(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:/usr/share/i18n/locales /de_DE@euro和/usr/share/i18n/locales/de_DE。打开这两个locale定义,你就会知道它们的差别在于 de_DE@euro使用的是欧洲的排序、比较和缩进习惯,而de_DE用的是德国的标准习惯。

上面我们说到了zh_CN.GB18030的前半部分,后半部分是什么呢?大部分Linux用户都知道是系统采用的字符集。

zh_CN.GB2312到底是在说什么?Locale是软件在运行时的语言环境, 它包括语言(Language), 地域 (Territory) 和字符集(Codeset)。一个locale的书写格式为: 语言[_地域[.字符集]]。所以说呢,locale总是和一定的字符集相联系的。下面举几个例子:

我说中文,身处中华人民共和国,使用国标2312字符集来表达字符。zh_CN.GB2312=中文_中华人民共和国+国标2312字符集。

我说中文,身处中华人民共和国,使用国标18030字符集来表达字符。zh_CN.GB18030=中文_中华人民共和国+国标18030字符集。

我说中文,身处中华人民共和国台湾省,使用国标Big5字符集来表达字符。zh_TW.BIG5=中文_台湾.大五码字符集

我说英文,身处大不列颠,使用ISO-8859-1字符集来表达字符。en_GB.ISO-8859-1=英文_大不列颠.ISO-8859-1字符集

我说德语,身处德国,使用UTF-8字符集,习惯了欧洲风格。de_DE.UTF-8@euro=德语_德国.UTF-8字符集@按照欧洲习惯加以修正,注意不是de_DE@euro.UTF-8,所以完全的locale表达方式是 [语言[_地域][.字符集] [@修正值]。

其中,与中文输入关系最密切的就是LC_CTYPE,LC_CTYPE规定了系统内有效的字符以及这些字符的分类, 诸如什么是大写字母,小写字母,大小写转换,标点符号、可打印字符和其他的字符属性等方面。而locale定 义zh_CN中最最重要的一项就是定义了汉字(Class“hanzi”)这一个大类,当然也是用Unicode描述的,这就让中文字符在Linux系统 中成为合法的有效字符,而且不论它们是用什么字符集编码的。

怎样设定locale呢?

设定locale就是设定12大类的locale分类属性,即12个LC_。除了这12个变量可以设定以外,为了简便起见,还有两个变量:LC_ALL和LANG。它们之间有一个优先级的关系:LC_ALL > LC_ >LANG。可以这么说,LC_ALL是最上级设定或者强制设定,而LANG是默认设定值。

如果你设定了LC_ALL=zh_CN.UTF-8,那么不管LC_*和LANG设定成什么值,它们都会被强制服从LC_ALL的设定,成为 zh_CN.UTF-8。

假如你设定了LANG=zh_CN.UTF-8,而其他的LC_=en_US.UTF-8,并且没有设定LC_ALL的话,那么系统的locale设定以LC_=en_US.UTF-8。

假如你设定了LANG=zh_CN.UTF-8,而其他的LC_,和LC_ALL均未设定的话,系统会将LC_设定成默认值,也就是LANG的值zh_CN.UTF-8。

假如你设定了LANG=zh_CN.UTF-8,而其他的LC_CTYPE=en_US.UTF-8,其他的LC_*,和LC_ALL均未设定的话, 那么系统的locale设定将是:LC_CTYPE=en_US.UTF-8,其余的 LC_COLLATE,LC_MESSAGES等等均会采用默认值,也就是 LANG的值,也就是LC_COLLATE=LC_MESSAGES=……= LC_PAPER=LANG=zh_CN.UTF-8。

所以,locale是这样设定的:

如果你需要一个纯中文的系统的话,设定LC_ALL= zh_CN.XXXX,或者LANG=zh_CN.XXXX都可以,当然你可以两个都设定,但正如上面所讲,LC_ALL的值将覆盖所有其他的locale设定,不要作无用功。

如果你只想要一个可以输入中文的环境,而保持菜单、标题,系统信息等等为英文界面,那么只需要设定 LC_CTYPE=zh_CN.XXXX,LANG=en_US.XXXX就可以了。这样LC_CTYPE=zh_CN.XXXX,而LC_COLLATE=LC_MESSAGES=……= LC_PAPER=LANG=en_US.XXXX。

假如你高兴的话,可以把12个LC_*一一设定成你需要的值,打造一个古灵精怪的系统:LC_CTYPE=zh_CN.GBK/GBK(使用中文编码内码GBK字符集);LC_NUMERIC=en_GB.ISO-8859-1(使用大不列颠的数字系统) LC_MEASUREMEN=de_DE@euro.ISO-8859-15(德国的度量衡使用ISO-8859-15字符集) 罗马的地址书写方式,美国的纸张设定……。估计没人这么干吧。

假如你什么也不做的话,也就是LC_ALL,LANG和LC_*均不指定特定值的话,系统将采用POSIX作为lcoale,也就是C locale。

另外LANG和LANGUAGE有什么区别呢?

LANG - Specifies the default locale for all unset locale variables

LANGUAGE - Most programs use this for the language of its interface

LANGUAGE是设置应用程序的界面语言。而LANG是优先级很低的一个变量,它指定所有与locale有关的变量的默认值。
审核编辑:陈陈

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11310

    浏览量

    209616

原文标题:Linux下的Locale详解

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    LinuxVim使用详解【PDF】

    LinuxVim使用详解【PDF】
    发表于 08-18 21:56

    详解linuxsystem()函数

    对于linuxsystem()函数的深度理解
    发表于 02-02 06:09

    linuxvim使用详解

    linuxvim使用科普教程,供大家学习使用。
    发表于 03-16 15:41 0次下载

    Locale 详解

    locale 详解 locale 是国际化与本土化过程中的个非常重要的概念,个人认为,对于中文用户来说,通常会涉及到的国际化或者本土化,大致包含三个方面:看中文,写中文,与 wind
    发表于 11-07 11:24 0次下载

    详解蓝牙模块原理与结构

    电子发烧友网站提供《详解蓝牙模块原理与结构.pdf》资料免费下载
    发表于 11-26 16:40 94次下载

    详解linux的分页模型

    linux的逻辑地址=线性地址。也就是,我们编码使用的是线性地址,之后只需要经过个分页机制就可以把这个地址转为物理地址了。所以我们更重要的可能是去说明一下
    的头像 发表于 05-18 08:59 2133次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>详解</b><b class='flag-5'>linux</b>的分页模型

    详解精密封装威廉希尔官方网站

    详解精密封装威廉希尔官方网站
    的头像 发表于 12-30 15:41 1672次阅读

    详解分立元件门电路

    详解分立元件门电路
    的头像 发表于 03-27 17:44 3219次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>详解</b>分立元件门电路

    详解pcb和smt的区别

    详解pcb和smt的区别
    的头像 发表于 10-08 09:31 3381次阅读

    详解pcb地孔的作用

    详解pcb地孔的作用
    的头像 发表于 10-30 16:02 1673次阅读

    详解pcb不良分析

    详解pcb不良分析
    的头像 发表于 11-29 17:12 1185次阅读

    详解pcb的msl等级

    详解pcb的msl等级
    的头像 发表于 12-13 16:52 9764次阅读

    详解pcb微带线设计

    详解pcb微带线设计
    的头像 发表于 12-14 10:38 3346次阅读

    详解pcb的组成和作用

    详解pcb的组成和作用
    的头像 发表于 12-18 10:48 1569次阅读

    详解pcb回流焊温度选择与调整

    详解pcb回流焊温度选择与调整
    的头像 发表于 12-29 10:20 1675次阅读