我创建了自己的自定义locale
并将它们放置在/etc/locale.conf
其中,如果我登录到虚拟控制台(Ctrl+Alt+F2),它们就会成功生效。不过,在我的 Gnome3 会话中,这些变量并未设置。对于终端应用程序,我可以将它们放在 中,.bashrc
但这对我使用 Thunderbird 和 Pidgin 等图形应用程序没有帮助。
我尝试遵循这些提示:GNOME 会话未使用 shell 初始化中的区域设置甚至模拟了这个错误语言环境 - ArchWiki通过创建一个.pam_environment
文件,但locale
s仍然是Gnome3设置的。 Gnome 设置中有一个配置对话框,但它只允许设置一组非常有限的预定义locale
组合,并且无法自定义它们。
我的主目录中的相关文件:
user@localhost:~$ ls -lah .dmrc .pam_environment .session .xsession .xsessionrc
lrwxrwxrwx. 1 user user 16 12. Jun 08:57 .dmrc -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 11. Jun 20:23 .pam_environment -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 12. Jun 09:09 .session -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 12. Jun 09:07 .xsession -> /etc/locale.conf
lrwxrwxrwx. 1 user user 9 13. Jun 11:22 .xsessionrc -> .xsession
-rw-rw-r--. 1 user user 66 13. Jun 11:13 .profile
user@localhost:~$ cat .profile
source /etc/locale.conf
内容/etc/locale.conf
:
LANG="en_US.utf8"
LC_TIME="de_MY.utf8" # NB: de_MY
LC_MONETARY="de_DE.utf8"
LC_PAPER="de_DE.utf8"
LC_NAME="de_DE.utf8"
LC_ADDRESS="de_DE.utf8"
LC_TELEPHONE="de_DE.utf8"
LC_MEASUREMENT="de_DE.utf8"
LC_IDENTIFICATION="de_DE.utf8"
有谁知道如何locale
在 Gnome3 中设置自定义?
答案1
背景资料
我在 Fedora 21 上使用 GNOME Shell 3.14.4 测试了该解决方案,但我相信它也可以应用于其他版本。
首先要了解的是,GNOME 桌面环境会覆盖系统范围的区域设置定义,因此不受/etc/locale.conf
.此外,有些应用程序可能有自己的区域设置配置,并且根本不使用系统或 GNOME 设置。在本指南中,我将描述一种根据您的需要自定义区域设置的方法,从区域设置的角度来看,GNOME 和系统将保持一致。
检查当前区域设置状态
系统范围设置
系统范围的区域设置存储在该
/etc/locale.conf
文件中,该文件在早期启动时由系统守护进程。中配置的区域设置/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 控制中心的源代码看起来,当set_localed_locale()
调用该函数时,它将以下所有类别(LC_TIME、LC_NUMERIC、LC_MONETARY、LC_MEASURMENT、LC_PAPER)设置为org.gnome.system.locale region
.
如果不创建自定义区域设置,混合不同的区域设置似乎是不可能的,但幸运的是,这不是一个非常复杂的任务。
创建自定义区域设置
我认为最简单的解释方法是举例。在我的具体情况下,我想要一个自定义区域设置,主要基于希伯来语(他_IL) 但 LC_NAME, LC_MESSAGES 来自zh_CN和 LC_TIME (修改后的first_weekday
和first_workday
)来自en_GB。
获取语言环境定义文件
您应该知道要混合哪些区域设置。首先我们需要找到相关的定义文件,可以在/usr/share/i18n/locales/
.回到我的例子,我需要以下内容:他_IL,zh_CN和en_GB。我在家里建立了一个工作文件夹并将所需的文件复制到其中:
$ cd /usr/share/i18n/locales
$ mkdir -v ~/custom-locale ; cp -v he_IL en_US en_GB ~/custom-locale/
创建新的定义文件
我决定打电话给我的语言环境hc_IL并采取了他_IL作为基础。以下几行创建一个新文件hc_IL
,其中的内容he_IL
将替换所有出现的字符串他_IL文件里面有hc_IL。
$ cd ~/custom-locale/
$ sed 's/he_IL/hc_IL/g' he_IL > hc_IL
修改新定义文件
现在我们可以根据需要自定义新的区域设置。使用您喜欢的文本编辑器打开新创建的文件~/custom-locale/hc_IL
。我用维姆(它对语言环境定义文件具有正确的语法突出显示):
$ vim ~/custom-locale/hc_IL
对于那些还没有选择自己喜欢的编辑器的人维姆不是他们喜欢的,可以使用编辑器:)
$ gedit ~/custom-locale/hc_IL
文件结构不是很复杂。本质上,它是由部分构建的。从语言环境(5)手册页:
区域设置定义对于每个区域设置类别都有一个部分。每个部分都可以从另一个现有语言环境复制,也可以从头开始定义。如果要复制类别,则定义中唯一有效的关键字是复制后跟应复制的区域设置的名称。
的概念复制非常有用。它节省了时间,并且生成的文件清晰简洁。例如,您可以不复制整个部分,而是:
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 "[email protected]" tel "" fax "" language "Hebrew" territory "Israel" revision "1.0" date "2015-04-21"
笔记:一切 ”类别..” 中的行LC_IDENTIFICATION在使用 . 文件创建期间已修改部分
sed
。所以我们不需要再碰它们了。LC_TIME
我复制了完整的部分en_GB并仅修改指示一周第一天和第一个工作日的行:
first_weekday 1 first_workday 1
其余类别我保留原样或将其内容替换为复制指令如下:
LC_NAME copy "en_US" END LC_NAME
就这样,定义文件就准备好了。不要忘记保存文件:)
编译并复制新的语言环境
使用以下命令完成新语言环境的编译根或使用须藤。替换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 Shell 和语言环境相关应用程序(图形和控制台)并检查它们在新语言环境中的行为是否符合预期。例如,如果您自定义了 LC_TIME,您可以运行
date
命令来验证日期格式:$ date +%x 21/04/15
笔记:一切都在 Fedora 21 和 GNOME 3.14 上进行了测试。其他 Linux 发行版可能需要额外或不同的步骤。
如果您发现说明有任何问题,请发表评论。