背景资料
我使用GNOME Shell 3.14.4在Fedora 21上测试了该解决方案,但我相信它也可以应用于其他版本。
首先要了解的是GNOME桌面环境会覆盖系统范围的语言环境定义,因此不受的影响/etc/locale.conf
。另外,可能有些应用程序具有自己的语言环境配置,并且根本不使用系统或GNOME设置。在本指南中,我将描述一种根据您的需求和GNOME自定义语言环境设置的方法,并且从语言环境的角度来看,系统将保持一致。
检查当前语言环境状态
系统范围的设置
从《Fedora 21系统管理员指南》中:
系统范围的语言环境设置存储在/etc/locale.conf
文件中,该文件由systemd守护程序在早期引导时读取。/etc/locale.conf
每个服务或用户都将继承其中配置的语言环境设置,除非单个程序或单个用户覆盖它们。
要查看当前的语言环境状态,我们可以运行:
$ localectl status
System Locale: LANG=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
LC_PAPER=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
VC Keymap: us
X11 Layout: us
GNOME设置
$ gsettings get org.gnome.system.locale region
'en_US.UTF-8'
GNOME只有一种设置。通过快速查看gnome-control-center的源代码,似乎在set_localed_locale()
调用该函数时,它将所有以下类别(LC_TIME,LC_NUMERIC,LC_MONETARY,LC_MEASUREMENT,LC_PAPER)设置为中定义的相同区域设置org.gnome.system.locale region
。
如果不创建自定义语言环境,则混合不同的语言环境设置似乎是不可能的,但幸运的是,这并不是一项非常复杂的任务。
创建自定义语言环境
我认为最简单的解释方法是通过示例。在我的特定情况下,我希望有一个自定义语言环境,主要基于希伯来语(he_IL),但具有LC_NAME,en_US的 LC_MESSAGES first_weekday
和en_GB的 LC_TIME(已修改和first_workday
)。
抓取区域设置定义文件
您应该对要混合的语言环境有所了解。首先,我们需要找到相关的定义文件,可以在中找到/usr/share/i18n/locales/
。回到我的示例,我需要以下内容:he_IL,en_US和en_GB。我在家里建立了一个工作文件夹,并将所需文件复制到其中:
$ cd /usr/share/i18n/locales
$ mkdir -v ~/custom-locale ; cp -v he_IL en_US en_GB ~/custom-locale/
创建一个新的定义文件
我决定将我的语言环境称为hc_IL,并以he_IL为基础。以下各行创建了一个新文件hc_IL
,其内容来自,he_IL
并且在途中用hc_IL替换了文件中所有出现的字符串he_IL。
$ cd ~/custom-locale/
$ sed 's/he_IL/hc_IL/g' he_IL > hc_IL
修改新的定义文件
现在,我们可以根据需要自定义新的语言环境。~/custom-locale/hc_IL
用您喜欢的文本编辑器打开新创建的文件。我使用vim(对于语言环境定义文件,它具有适当的语法突出显示):
$ vim ~/custom-locale/hc_IL
对于那些还没有选择自己喜欢的编辑器并且vim不是他们想要的东西的人,可以使用gedit :)
$ gedit ~/custom-locale/hc_IL
文件结构不是很复杂。从本质上讲,它是按部分构造的。从locale(5)手册页中:
对于每个语言环境类别,语言环境定义都有一部分。每个部分都可以从另一个现有的语言环境复制,也可以从头开始定义。如果应复制类别,则定义中唯一有效的关键字是copy,后跟应复制的语言环境名称。
复制的概念非常有用。这样可以节省时间,并且生成的文件清晰简洁。例如,您可以拥有:
LC_MESSAGES
copy "en_US"
END LC_MESSAGES
可以通过以下方式访问语言环境定义文件的完整文档:
$ man 5 locale
虽然,如果您只想创建一个自定义语言环境(它是现有语言环境的混合),则无需了解每个细节。
就我而言,我修改了以下类别和关键字:
LC_IDENTIFICATION
title "Custom Hebrew locale"
source "mydomain.ws"
address "http:////www.mydomain.ws"
contact ""
email "admin@mydomain.ws"
tel ""
fax ""
language "Hebrew"
territory "Israel"
revision "1.0"
date "2015-04-21"
注意:LC_IDENTIFICATION部分中的所有“ category .. ”行均已使用进行了修改。因此,我们不再需要触摸它们。sed
LC_TIME
我从en_GB复制了完整的部分,并仅修改了指示一周的第一天和第一工作日的行:
first_weekday 1
first_workday 1
我留下的其余类别保持不变,或将其内容替换为copy指令,如下所示:
LC_NAME
copy "en_US"
END LC_NAME
就是这样,定义文件已准备就绪。不要忘记保存文件:)
编译并复制新的语言环境
使用以下命令作为root或使用sudo来完成新语言环境的编译。替换hc_IL
为您的语言环境:
$ sudo localedef -c -v -i hc_IL -f UTF-8 hc_IL.UTF-8
如果编译成功,则将已编译的语言环境数据添加到存档文件中/usr/lib/locale/locale-archive
。
将新的语言环境定义文件复制到语言环境定义目录。替换hc_IL
为您的语言环境:
$ sudo cp -v hc_IL /usr/share/i18n/locales/
激活新的语言环境
在这一步中,我们要配置系统和GNOME以使用新的语言环境。
系统范围的设置
/etc/locale.conf
以根用户身份编辑文件,并将以开头的每一行设置LC_
为新的语言环境。例如:
LANG=en_US.UTF-8
LC_NUMERIC=hc_IL.utf8
LC_TIME=hc_IL.utf8
LC_MONETARY=hc_IL.utf8
LC_PAPER=hc_IL.utf8
LC_MEASUREMENT=hc_IL.utf8
GNOME设置
要在GNOME中激活新的语言环境,请运行以下命令。替换hc_IL
为您的语言环境:
$ gsettings set org.gnome.system.locale region "hc_IL.utf8"
验证新设置
最后一步是验证一切是否按预期进行。要重新加载所有设置,对我来说最容易的是重新启动。
注意:一切都在带有GNOME 3.14的Fedora 21上进行了测试。其他Linux发行版可能需要其他或不同的步骤。
如果您发现说明有任何问题,请发表评论。