前言

CentOS 上,通过 locale 来设置运行环境语言。locale 就是某一个地域内的人们的语言习惯和文化传统和生活习惯, locale 是软件在运行时的语言环境, 它包括语言(Language), 地域 (Territory) 和字符集(Codeset)。一个 locale 的书写格式为: 语言[_地域[.字符集]]。

查看当前的语言

locale
LANG=zh_CN.UTF-8                                     # 本地语言默认值
LC_CTYPE="zh_CN.UTF-8"                           #语言符号及其分类(LC_CTYPE)
LC_NUMERIC=zh_CN.UTF-8                         #数字格式
LC_TIME=zh_CN.UTF-8                                #本地时间格式
LC_COLLATE="zh_CN.UTF-8"                       #比较和排序习惯
LC_MONETARY=zh_CN.UTF-8                     #货币单位
LC_MESSAGES="zh_CN.UTF-8"                   #信息主要是提示信息,错误信息,状态信息,标题,标签,按钮和菜单等
LC_PAPER=zh_CN.UTF-8                             #默认纸张尺寸大小
LC_NAME=zh_CN.UTF-8                              #姓名书写方式
LC_ADDRESS=zh_CN.UTF-8                        #地址书写方式
LC_TELEPHONE=zh_CN.UTF-8                    #电话号码书写方式
LC_MEASUREMENT=zh_CN.UTF-8              #度量衡表达方式
LC_IDENTIFICATION=zh_CN.UTF-8              #对locale自身包含信息的概述
LC_ALL=                                                      #设定或者强制设定语言

查看所有的语言

ls   /usr/share/i18n/locales
POSIX        en_HK           ik_CA               sat_IN
aa_DJ        en_IE           is_IS               sc_IT
aa_ER        en_IE@euro      iso14651_t1         sd_IN
aa_ER@saaho  en_IN           iso14651_t1_common  sd_IN@devanagari
aa_ET        en_NG           iso14651_t1_pinyin  se_NO
af_ZA        en_NZ           it_CH               shs_CA
am_ET        en_PH           it_IT               si_LK
an_ES        en_SG           it_IT@euro          sid_ET
ar_AE        en_US           iu_CA               sk_SK
ar_BH        en_ZA           iw_IL               sl_SI
ar_DZ        en_ZM           ja_JP               so_DJ
ar_EG        en_ZW           ka_GE               so_ET
ar_IN        es_AR           kk_KZ               so_KE
ar_IQ        es_BO           kl_GL               so_SO
ar_JO        es_CL           km_KH               sq_AL
ar_KW        es_CO           kn_IN               sq_MK
ar_LB        es_CR           ko_KR               sr_ME
ar_LY        es_CU           kok_IN              sr_RS
ar_MA        es_DO           ks_IN               sr_RS@latin
ar_OM        es_EC           ks_IN@devanagari    ss_ZA
ar_QA        es_ES           ku_TR               st_ZA
ar_SA        es_ES@euro      kw_GB               sv_FI
ar_SD        es_GT           ky_KG               sv_FI@euro
ar_SY        es_HN           lb_LU               sv_SE
ar_TN        es_MX           lg_UG               sw_KE
ar_YE        es_NI           li_BE               sw_TZ
as_IN        es_PA           li_NL               szl_PL
ast_ES       es_PE           lij_IT              ta_IN
ayc_PE       es_PR           lo_LA               ta_LK
az_AZ        es_PY           lt_LT               te_IN
be_BY        es_SV           lv_LV               tg_TJ
be_BY@latin  es_US           mag_IN              th_TH
bem_ZM       es_UY           mai_IN              ti_ER
ber_DZ       es_VE           mg_MG               ti_ET
ber_MA       et_EE           mhr_RU              tig_ER
bg_BG        eu_ES           mi_NZ               tk_TM
bho_IN       eu_ES@euro      mk_MK               tl_PH
bn_BD        fa_IR           ml_IN               tn_ZA
bn_IN        ff_SN           mn_MN               tr_CY
bo_CN        fi_FI           mni_IN              tr_TR
bo_IN        fi_FI@euro      mr_IN               translit_circle
br_FR        fil_PH          ms_MY               translit_cjk_compat
br_FR@euro   fo_FO           mt_MT               translit_cjk_variants
brx_IN       fr_BE           my_MM               translit_combining
bs_BA        fr_BE@euro      nan_TW@latin        translit_compat
byn_ER       fr_CA           nb_NO               translit_font
ca_AD        fr_CH           nds_DE              translit_fraction
ca_ES        fr_FR           nds_NL              translit_hangul
ca_ES@euro   fr_FR@euro      ne_NP               translit_narrow
ca_FR        fr_LU           nhn_MX              translit_neutral
ca_IT        fr_LU@euro      niu_NU              translit_small
crh_UA       fur_IT          niu_NZ              translit_wide
cs_CZ        fy_DE           nl_AW               ts_ZA
csb_PL       fy_NL           nl_BE               tt_RU
cv_RU        ga_IE           nl_BE@euro          tt_RU@iqtelif
cy_GB        ga_IE@euro      nl_NL               ug_CN
da_DK        gd_GB           nl_NL@euro          uk_UA
de_AT        gez_ER          nn_NO               unm_US
de_AT@euro   gez_ER@abegede  nr_ZA               ur_IN
de_BE        gez_ET          nso_ZA              ur_PK
de_BE@euro   gez_ET@abegede  oc_FR               uz_UZ
de_CH        gl_ES           om_ET               uz_UZ@cyrillic
de_DE        gl_ES@euro      om_KE               ve_ZA
de_DE@euro   gu_IN           or_IN               vi_VN
de_LU        gv_GB           os_RU               wa_BE
de_LU@euro   ha_NG           pa_IN               wa_BE@euro
doi_IN       he_IL           pa_PK               wae_CH
dv_MV        hi_IN           pap_AN              wal_ET
dz_BT        hne_IN          pl_PL               wo_SN
el_CY        hr_HR           ps_AF               xh_ZA
el_GR        hsb_DE          pt_BR               yi_US
el_GR@euro   ht_HT           pt_PT               yo_NG
en_AG        hu_HU           pt_PT@euro          yue_HK
en_AU        hy_AM           ro_RO               zh_CN
en_BW        i18n            ru_RU               zh_HK
en_CA        ia_FR           ru_UA               zh_SG
en_DK        id_ID           rw_RW               zh_TW
en_GB        ig_NG           sa_IN               zu_ZA

@后边是修正项,例如可以看到两个德国的 locale:/usr/share/i18n/locales/de_DE@euro 和/usr/share/i18n/locales/de_DE。

语言字符集

例如中文就有好几个字符集:zh_CN.GB2312 zh_CN.GB18030 zh_CN.UTF-8 zh_TW.BIG5,点后面就就是对应的字符集

带修正值的字符集,deDE.UTF-8@euro 德语德国.UTF-8 字符集@按照欧洲习惯加以修正,注意不是 de*DE@euro.UTF-8,所以完全的 locale 表达方式是 [语言[*地域][.字符集][@修正值]。

其中,与中文输入关系最密切的就是 LC_CTYPE,LC_CTYPE 规定了系统内有效的字符以及这些字符的分类,诸如什么是大写字母,小写字母,大小写转换,标点符号、可打印字符和其他的字符属性等方面。

而 locale 定 义 zh_CN 中最最重要的一项就是定义了汉字(Class“hanzi”)这一个大类,当然也是用 Unicode 描述的,这就让中文字符在 Linux 系统中成为合法的有效字符,而且不论它们是用什么字符集编码的。

变量优先级

设定 locale 就是设定 12 大类的 locale 分类属性,即 12 个 LC_*。除了这 12 个变量可以设定以外,还有两个变量:LC_ALL 和 LANG。

它们之间有一个优先级的关系:LCALL > LC* >LANG。LC_ALL 是优先级最高设定或者强制设定,而 LANG 是默认设定值。

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

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

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

4、假如你设定了 LANG = zhCN.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。

设置建议

1、如果需要一个纯中文的系统的话,设定 LC_ALL= zh_CN.UTF-8,或者 LANG=zh_CN.UTF-8 都可以。

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

3、如果什么都不设置,也就是 LCALL,LANG 和 LC*均不指定特定值的话,系统将采用 POSIX 作为 lcoale,也就是 C locale。