locale的设定及其LANG、LC_ALL、LANGUAGE环境变量的区别

2023-10-27

 例如zh_CN.GB2312、zh_CN.GB18030或者zh_CN.UTF-8。很多人都不明白这些古里古怪的表达方式。这个外星表达式规定了什么东西呢?这个问题稍后详述,现在只需要知道,这是locale的表达方式就可以了。


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

[oracle@game ~]$ 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=”en_US.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=en_US.UTF-8
[oracle@game ~]$

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)。

所以说,locale就是某一个地域内的人们的语言习惯和文化传统和生活习惯。一个地区的locale就是根据这几大类的习惯定义的,这些locale定 义文件放在/usr/share/i18n/locales目录下面,例如en_US, zh_CN and de_DE@euro都是locale的定义文件,这些文件都是用文本格式书写的,你可以用写字板打开,看看里边的内容,当然出了有限的注释以外,大部分 东西可能你都看不懂,因为是用的Unicode的字符索引方式。

[oracle@game ~]$ cd /usr/share/i18n/locales
[oracle@game locales]$ ls
aa_DJ ar_YE el_GR es_ES fr_CH iso14651_t1 ne_NP so_ET translit_hangul
aa_ER az_AZ el_GR@euro es_ES@euro fr_FR it_CH nl_BE so_KE translit_narrow
aa_ER@saaho be_BY en_AU es_GT fr_FR@euro it_IT nl_BE@euro so_SO translit_neutral
aa_ET bg_BG en_BW es_HN fr_LU it_IT@euro nl_NL sq_AL translit_small
af_ZA bn_BD en_CA es_MX fr_LU@euro iw_IL nl_NL@euro sr_CS translit_wide
am_ET bn_IN en_DK es_NI ga_IE ja_JP nn_NO st_ZA tr_TR
an_ES br_FR en_GB es_PA ga_IE@euro ka_GE no_NO sv_FI tt_RU
ar_AE br_FR@euro en_HK es_PE gd_GB kk_KZ oc_FR sv_FI@euro uk_UA
ar_BH bs_BA en_IE es_PR gez_ER kl_GL om_ET sv_SE ur_PK
ar_DZ byn_ER en_IE@euro es_PY gez_ER@abegede kn_IN om_KE ta_IN uz_UZ
ar_EG ca_ES en_IN es_SV gez_ET ko_KR pa_IN te_IN uz_UZ@cyrillic
ar_IN ca_ES@euro en_NZ es_US gez_ET@abegede kw_GB pl_PL tg_TJ vi_VN
ar_IQ cs_CZ en_PH es_UY gl_ES lg_UG POSIX th_TH wa_BE
ar_JO cy_GB en_SG es_VE gl_ES@euro lo_LA pt_BR ti_ER wa_BE@euro
ar_KW da_DK en_US et_EE gu_IN lt_LT pt_PT ti_ET wal_ET
ar_LB de_AT en_ZA eu_ES gv_GB lv_LV pt_PT@euro tig_ER xh_ZA
ar_LY de_AT@euro en_ZW eu_ES@euro he_IL mi_NZ ro_RO tl_PH yi_US
ar_MA de_BE es_AR fa_IR hi_IN mk_MK ru_RU translit_circle zh_CN
ar_OM de_BE@euro es_BO fi_FI hr_HR ml_IN ru_UA translit_cjk_compat zh_HK
ar_QA de_CH es_CL fi_FI@euro hu_HU mn_MN se_NO translit_cjk_variants zh_SG
ar_SA de_DE es_CO fo_FO hy_AM mr_IN sid_ET translit_combining zh_TW
ar_SD de_DE@euro es_CR fr_BE i18n ms_MY sk_SK translit_compat zu_ZA
ar_SY de_LU es_DO fr_BE@euro id_ID mt_MT sl_SI translit_font
ar_TN de_LU@euro es_EC fr_CA is_IS nb_NO so_DJ translit_fraction
[oracle@game locales]$

对于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总是和一定的字符集相联系的。下面举几个例子:

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

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

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

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

5、我说德语,身处德国,使用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是默认设定值。

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

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

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

4、假如你设定了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是这样设定的: 

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

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

3、假如你高兴的话,可以把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字符集) 罗马的地址书写方式,美国的纸张设定……。估计没人这么干吧。

4、假如你什么也不做的话,也就是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有关的变量的默认值,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

locale的设定及其LANG、LC_ALL、LANGUAGE环境变量的区别 的相关文章

  • Oracle PL/SQL 将行类型作为构造函数参数传递

    是否可以将 table rowtype 作为构造函数中的参数传递 我有这样的东西 这有效 CREATE OR REPLACE TYPE shape AS OBJECT name VARCHAR2 30 area NUMBER CONSTRU
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • 如何在 Hibernate 中使用 Oracle 查询提示

    我试图在 Hibernate 中使用 Oracle 提示来调用强制索引 但在 Hibernate 3 6 10 Final 中没有找到任何合适的 API 我以某种方式尝试了 Hibernate 标准中的预测 proList add Proj
  • 当在 python linux 中执行命令 os.system() 时,在 python 中给出响应 yes/no

    考虑一个像这样的命令 yum install boto 当我在终端中执行时 要继续 会询问我是 否 我可以像这样用 python 回应它吗 os system yum install boto Next Yes 将通过相同的 python
  • 命名互斥体的 Mono 替代方案

    在 Windows NET 上 命名的互斥体可用于同步多个进程 不幸的是 Mono 在 Linux 上不太支持这一点 他们的发行说明 http www mono project com Release Notes Mono 2 8 Shar
  • 如何使用 nohup 获取正在运行的程序列表

    我正在通过 SSH 连接访问运行 CentOS linux 发行版 的服务器 由于我无法始终保持登录状态 因此我使用 nohup command 来运行我的程序 我找不到如何获取我开始使用 nohup 的所有程序的列表 工作 只有在我注销之
  • 如何将命令输出作为多个参数传递给另一个命令

    我想将命令的每个输出作为多个参数传递给第二个命令 例如 grep pattern input returns file1 file2 file3 我想复制这些输出 例如 cp file1 file1 bac cp file2 file2 b
  • 我可以在 Ubuntu 上使用 Homebrew 吗?

    我只是尝试使用 Homebrew 和 Linuxbrew 在我的 Ubuntu 服务器上安装软件包 但都失败了 这就是我尝试安装它们的方法 sudo apt get install build essential curl git m4 r
  • GCC 详细模式输出解释

    我是 Linux 新手 谁能向我解释一下我的 hello world 程序的以下详细模式输出 另外 这些文件是做什么用的crt1 o crti o crtend o crtbegin o and crtn o and lc and lgcc
  • Oracle/PHP - ORA-00911 更新时的无效字符

    我正在运行一个 PHP 脚本 该脚本从 Oracle 数据库实例更新表 首先 我收到一个 JSON 对象 lot KLMHA17N9N00 requestor B10078 id FRESHLOT username B26696 passw
  • 如何在 Ubuntu/Linux 发行版中安装 Tesseract-OCR 3.03?

    我和一个朋友有兴趣为 CV 项目训练 tesseract OCR 引擎 我们尝试使用一些包装器 例如 PyTesser 和 pyocr 但结果目前不如我们需要的那么准确 因此 我们希望尝试训练超立方体以更好地实现我们的目的 即识别食品标签上
  • 每个虚拟主机的错误日志?

    在一台运行 Apache 和 PHP 5 的 Linux 服务器上 我们有多个带有单独日志文件的虚拟主机 我们似乎无法分离 phperror log虚拟主机之间 覆盖此设置
  • 使用 JPA 时如何在部署时设置序列的架构名称?

    出于安全原因 我们的 Oracle 数据库对象通常属于与登录用户不同的架构 例如 表位于 xx core 中 我们登录的用户是 xx app yy 在我的 persistence xml 中 我定义了一个 orm 文件 以便我可以在部署时指
  • 删除 Python 中某些操作的 root 权限

    在我的 Python 脚本中 我执行了一些需要 root 权限的操作 我还创建并写入文件 我不想由 root 独占所有 而是由运行我的脚本的用户独占所有 通常 我使用以下命令运行脚本sudo 有办法做到上述吗 您可以使用以下方式在 uid
  • sudo pip install python-Levenshtein 失败,错误代码 1

    我正在尝试在 Linux 上安装 python Levenshtein 库 但每当我尝试通过以下方式安装它时 sudo pip install python Levenshtein 我收到此错误 命令 usr bin python c 导入
  • 设置 Vim 背景颜色

    当我尝试更改背景颜色时 vimrc或者直接在 Vim 中使用以下命令 set background dark 这根本不影响我的背景 也没有light选项 不过 当我运行 gvim 时 看起来还不错 有没有办法在不更改 Konsole 设置的
  • tar.gz 和 tgz 是同一个东西吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我创建了 tgz 文件tar czvf filecommand then 我最终得到了一个 tgz 文件 我想知道它和tar gz 之间的
  • 使用 hcitool 扫描低功耗蓝牙?

    当我运行此命令时 BLE 设备扫描仅持续 5 秒 sudo timeout 5s hcitool i hci0 lescan 输出显示在终端屏幕中 但是 当我将输出重定向到文件以保存广告设备的地址时 每次运行该命令时 我都会发现该文件是空的
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • ARM 的内核 Oops 页面错误错误代码

    Oops 之后的错误代码给出了有关 ARM EX 中的恐慌的信息 Oops 17 1 PREEMPT SMP在这种情况下 17 给出了信息 在 x86 中它代表 bit 0 0 no page found 1 protection faul

随机推荐

  • ThreadPoolTaskScheduler实现动态管理定时任务

    最近 有个项目有需要用到定时任务 所以做了一个动态管理定时任务的模块 本文将从项目背景 需求 选型 思路 具体实现等方面展开介绍 背景 有个支付类的项目 中间会产生一些中间态的订单 需要有个定时任务轮询确认订单状态 该类项目体量较小 单节点
  • [数据库] SQL语句select简单记录总结

    最近SQL语句写得比较多 也发现了自己的很多不足之处 在此先写一篇关于SQL语句的在线笔记 方便大家学习和后面的工作 SQL Server MySQL Oracle基本语法都类似 接下来我需要阅读 SQL Server性能优化与管理的艺术
  • 【漏洞一】检测到目标URL存在http host头攻击漏洞

    漏洞 检测到目标URL存在http host头攻击漏洞 原因 在项目中使用了 request getServerName 导致漏洞的出现 不要使用request中的serverName 也就是说host header可能会在攻击时被篡改 依
  • 回归分析常数项t值没有显著异于零怎么办_一文详解经典回归分析

    在如今机器学习 数据科学 人工智能热潮下 回归分析似乎成了家喻户晓的东西 实际上回归分析自Galton爵士提出以及Pearson和Fisher的理论的加持 经过一百多年的发展 早已成了发现客观规律的有力武器 回归分析的文章已经多得数不胜数了
  • Go语言中的函数字面量与匿名函数

    写在前面 习惯性的在写内容前说点儿什么 个人感觉Go语言中的函数字面量这个东西用着不是很顺手 所以想着总结一下 今天先从简单的开始 持续更新 给出概念 命名函数的作用范围是包级别的 这个大家都知道 如果想在程序的任意表达式中使用一个变量来表
  • 小谈移动端加密

    加密方式大致分为以下几种 哈希 散列函数 MD5 SHA1 SHA256 512 对称加密算法 DES 3DES AES 高级密码标准 美国国家安全局使用的加密算法 非对称加密算法 RSA 很多项目中都用到了MD5 它是一种不可逆算法 相同
  • 【数据结构初阶】单链表OJ题

    博客主页 CS semi主页 欢迎关注 点赞收藏 留言 系列专栏 数据结构初阶 代码仓库 Data Structure 家人们更新不易 你们的点赞和关注对我而言十分重要 友友们麻烦多多点赞 关注 你们的支持是我创作最大的动力 欢迎友友们私信
  • 透视投影(Perspective Projection)变换推导

    透视投影是3D固定流水线的重要组成部分 是将相机空间中的点从视锥体 frustum 变换到规则观察体 Canonical View Volume 中 待裁剪完毕后进行透视除法的行为 在算法中它是通过透视矩阵乘法和透视除法两步完成的 透视投影
  • 华为OD机试C++ 支持优先级的队列

    题目 你得构造一个特别的队列 其中元素有优先级 越高的优先级越先出队 如果两个元素数据相同 优先级也相同 那么就扔掉后来的那个 输入 一串数字组合 每个组合包括一个整数和它的优先级 输出 队列里面的整数 按优先级和入队时间排序 你只要处理合
  • 普通遍历查找和二分法查找的两种实现(循环、递归)

    以下代码使用java语言编写 但是思想各语言通用 普通遍历查找 普通遍历查找 public static int search int arr int target for int i 0 i lt arr length i if arr
  • Java之CMS GC的7个阶段

    CMS收集器的主要设计目标是 低应用停顿时间 它通过两种方式实现这一目标 不压缩老年代 而是使用空闲列表来管理回收空间 大部分标记清理工作与应用程序并发执行 主要问题 由于不压缩带来的老年代堆碎片 或者在对象分配率高的情况下 都可能导致Fu
  • shell环境变量以及set,env,export的区别

    一 shell环境变量的分类以及set env export的区别 set 显示 设置 shell变量 包括的私有变量以及用户变量 不同类的shell有不同的私有变量 bash ksh csh每中shell私有变量都不一样 env 显示 设
  • 锋利的jQuery(二)--选择器

    选择器是jQuery的根基 在jQuery中 对事件处理 遍历DOM和Ajax操作都依赖于选择器 2 1 jQuery选择器是什么1 CSS选择器 CSS是一项出色的技术 它使得网页的结构和表现样式完全分离 利用CSS选择器能轻松地对某个元
  • CSS hover 不生效的原因

    遇到hover不生效的情况可以检查以下方面 1 代码中类名是否写正确 这是最基础的情况 有时候会因为粗心或者代码量过多导致敲错类名或者引用错误类名 2 检查hover控制的层级关系是否正确 通常来讲如果直接通过 hover 类名的方式来控制
  • 关于EMMC和SD卡-设备驱动(1)

    eMMC和SD卡都是将闪存控制器和NAND Flash封装在一起 只是接口不同 eMMC一般是BGA封装 焊接在PCB上 SD卡单独封装 使用SDIO接口通讯 origin http blog csdn net Do or Die arti
  • 线程面试题之一:父子线程的同步

    子线程循环 10 次 接着主线程循环 100 次 接着又回到子线程循环 10 次 接着再回到主线程又循环 100 次 如此循环50次 试写出代码 注 在写本篇学习笔记时 本人学习和参考了网络文章 并做了借鉴 感谢各位前辈的分享 如果本文对您
  • ROS架构(一)——ROS架构设计

    ROS架构 一 ROS架构设计 目录 1 OS层 2 中间层 3 应用层 ROS架构 可以将其分为三个层次 OS层 中间层和应用层 1 OS层 众所周知 ROS并不是一个传统意义的操作系统 不能像Windows Linux那样直接运行在计算
  • 技术岗面试常见问题(更新中)

    这篇总结会不断更新 内容大致包括几方面 数据库 C C HTML 操作系统 计算机网络 文中题目转载汇集自各论坛大佬的总结和详解 目录 数据库 1 事务四大特性 2 事务并发带来的问题 3 事务的隔离级别 4 常见系统的默认隔离级别 5 聚
  • Prometheus 监控 Java 应用

    Prometheus 监控 Java 应用 Prometheus 监控 Java 应用有两种方式 一种是使用官方提供的jar包 然后嵌入到应用中 这种方式一般都是新项目 我认为也是最合适的一种 不过这种情况一般是理想而已 而除了这种方式 第
  • locale的设定及其LANG、LC_ALL、LANGUAGE环境变量的区别

    例如zh CN GB2312 zh CN GB18030或者zh CN UTF 8 很多人都不明白这些古里古怪的表达方式 这个外星表达式规定了什么东西呢 这个问题稍后详述 现在只需要知道 这是locale的表达方式就可以了 locale这个