arch linux简体中文,Locale (简体中文)

本文介绍了如何在Arch Linux中配置区域设置,包括列出、生成和启用区域设置,重点讲解了LANG、LC_ALL等环境变量的设置方法,以及解决终端不支持UTF-8等问题的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

翻译状态:本文是 Locale 的翻译。上次翻译日期:2021-03-31。如果英文版本有所更改,则您可以帮助同步翻译。

区域设置 显示本地化的文字、货币、时间、日期、特殊字符等包含地域属性的内容。

生成区域设置

区域设置的名称通常用 [language][_TERRITORY][.CODESET][@modifier] 的格式表示,language 是 ISO 639 语言代码, territory 是 ISO 3166 国家代码, codeset 是 字符集 或 ISO-8859-1、UTF-8 这样的编码方式。请参考

要列出所有启用的区域设置,使用:

$ locale -a

启用一个区域设置前,需要先生成它。在 /etc/locale.gen 中取消对应的注释,然后执行 locale-gen。注释掉某行,则会移除对应的区域设置。请启用所有用户都可能使用的区域设置及相关#变量。

例如对于使用美式英语和中国简体的用户:

/etc/locale.gen

...

#en_SG ISO-8859-1

en_US.UTF-8 UTF-8

#en_US ISO-8859-1

...

#zh_CN.GBK GBK

zh_CN.UTF-8 UTF-8

#zh_CN GB2312

...

编辑完成以后,通过下面的命令生成 Locale:

# locale-gen

注意:

每次更新 locale-gen 会自动运行。[1]

建议优先使用 UTF-8。[2]

设置当前区域

想要显示正在使用的 Locale 和相关的环境变量,运行:

$ locale

要使用的区域设置(从前面生成的区域设置中选择)设置在 locale.conf 文件中。每一个 locale.conf 文件都必须包含一些环境变量赋值语句,其格式与 locale 命令输出的格式相同。

要查看已经生成的区域设置:

$ localedef --list-archive

$ localectl list-locales

系统区域设置

要设置整个系统使用的区域设置,需要在 /etc/locale.conf 中写入 LANG 变量,以下的 zh_CN.UTF-8 应为 /etc/locale.gen 中某个未注释条目的第一列:

locale.conf

LANG=zh_CN.UTF-8

或者使用:

# localectl set-locale LANG=zh_CN.UTF-8

在用户会话中覆盖系统区域设置

系统使用的区域设置可以通过用户编辑自己的 ~/.config/locale.conf(更一般地,$XDG_CONFIG_HOME/locale.conf 或 $HOME/.config/locale.conf)来覆盖。

这些 locale.conf 文件的优先级定义在 /etc/profile.d/locale.sh 中。

提示:

设置用户级区域设置 ,能让 /var/log 中的日志以英语输出而在用户环境中使用所选语言。

建立 /etc/skel/.config/locale.conf 文件,可以让所有通过 useradd 命令和 -m 选项创建的新用户自动拥有一份相应的 ~/.config/locale.conf。

立即启用新设置

locale.conf 的变更会在下次登录时生效,要立刻应用新的设置的话,可以运行:

$ unset LANG

$ source /etc/profile.d/locale.sh

注意: LANG 变量必须先被 unset,否则 locale.sh 不会从 locale.conf 中更新变量。只有新增的或被修改的命令会被自动更新,从 locale.conf 被移除的变量在注销前依然存在。

其它用例

和区域设置相关的变量也能像其他的环境变量一样传递给其它程序。

例如在开发和测试某个程序时,可以这样运行:

$ LANG=C ./my_application.sh

类似的,也可以通过设置环境变量让当前 shell 中运行的程序使用特定的区域设置(例如安装系统时):

$ export LANG=C

变量

locale.conf 文件支持以下环境变量。

LC_ADDRESS

LC_CTYPE

LC_IDENTIFICATION

LC_MEASUREMENT

LC_MESSAGES

LC_MONETARY

LC_NAME

LC_NUMERIC

LC_PAPER

LC_TELEPHONE

LC_* 列表,

LANG:默认的区域设置

这个变量的值会覆盖掉所有未设置的 LC_* 变量的值。

提示: 假设您是西班牙的英语使用者,并且您希望程序根据西班牙的惯例处理数字和日期,仅消息为英语。您可以将 LANG 设置为 es_ES.UTF-8,并将 LC_MESSAGES(用于消息翻译的用户界面)设置为 en_US.UTF -8。

LANGUAGE:后备区域设置

使用 gettext 翻译的软件会按照 LANGUAGE 选择使用的语言。用户通过这个变量指定一个区域设置列表,如果前面的区域设置缺少翻译,会自动使用后面的区域设置显示界面。例如一个澳大利亚用户可能更希望在没有合适的澳大利亚英语翻译时回退到英式英语而不是美式英语:

locale.conf

LANG=en_AU.UTF-8

LANGUAGE=en_AU:en_GB:en

LC_TIME:时间和日期格式

如果 LC_TIME 设置成 en_US.UTF-8,日期的格式为 "MM/DD/YYYY"。要使用 ISO 8601 标准的日期格式( "YYYY-MM-DD" ) ,使用:

locale.conf

LC_TIME=en_DK.UTF-8

en_US.UTF-8 开始如预期般显示 12 小时格式的时间。如果要使用 24 小时制,请使用 LC_TIME=en_GB.UTF-8。

注意: 使用此变量来格式化日期不是对程序的强制要求。例如,Firefox 在版本 57 后停止使用 LC_TIME(Bug 1429578)。

LC_COLLATE:排序格式

这个变量的值决定排序和正则表达式的格式顺序。

例如将它设置为 C 可以让 ls 命令首先列出点开头的文件,然后是大写字母开头的文件和小写字母开头的文件:

locale.conf

LC_COLLATE=C

另见 [3]。

为了避免潜在的问题,Arch Linux 曾经在 /etc/profile 中设置 LC_COLLATE=C,这个方法已经过时了。

LC_ALL:测试和排除问题

这个变量的值会覆盖掉 LANG 和所有 LC_* 变量的值,无论它们是否设置。

只有 LC_ALL 不能出现在 locale.conf 文件中:它只能为了测试和排除问题而设置,例如在 /etc/profile 中。

疑难解答

我的终端不支持 UTF-8

这里列出了一些(不是全部)支持 UTF-8 的终端:

gnustep-terminal

konsole

xterm - 启动时使用参数 -u8,或者配置资源 xterm*utf8: 2。

Gnome-terminal / rxvt-unicode 不支持 UTF-8

你必须在 UTF-8 的区域设置下运行它们才会有作用。按照上面的方法启用 en_US.UTF-8(或者其它使用 UTF-8 的区域设置)并将它设置成默认区域设置后重启系统。

我的系统的语言还是不对

可能其它文件设置了本该由 locale.conf 设置的区域设置(例如 ~/.pam_environment),详见 定义环境变量。

如果使用了桌面环境,可能是被桌面环境修改。例如 GNOME 的语言设置会覆盖 locale.conf 中的设置。

KDE Plasma 也通过系统设置修改界面的语言,如果按本文修改后还是原来的区域设置,请删除 ~/.config/plasma-localerc (之前是:~/.config/plasma-locale-settings.sh)。

LightDM 将自动使用 ~/.dmrc 中。也可能从那里检索到意料外的的区域设置。

另见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值