Per*_*ids 18 fedora locale gnome3
我已经创建了自己的自定义locales 并将它们放入其中,/etc/locale.conf如果我登录虚拟控制台 (Ctrl+Alt+F2),它们将成功生效。不过,在我的 Gnome3 会话中,没有设置这些变量。对于终端应用我可以将它们放置在.bashrc但不会帮助我像雷鸟和Pidgin的图形应用程序。
我试图遵循这些提示:GNOME 会话未使用的 shell 初始化中的语言环境设置,甚至通过创建文件模拟了语言环境 - ArchWiki 中的错误.pam_environment,但locales 仍然是 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
Run Code Online (Sandbox Code Playgroud)
内容/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"
Run Code Online (Sandbox Code Playgroud)
有谁知道如何locale在 Gnome3 中设置 custom s?
dch*_*ome 11
我使用 GNOME Shell 3.14.4 在 Fedora 21 上测试了该解决方案,但我相信它也可以应用于其他版本。
首先要了解的是 GNOME 桌面环境会覆盖系统范围的语言环境定义,因此不受/etc/locale.conf. 此外,可能有些应用程序具有自己的语言环境配置并且根本不使用系统或 GNOME 设置。在本指南中,我将描述一种根据您的需要和 GNOME 自定义区域设置的方法,并且系统将从区域设置的角度保持一致。
系统范围的语言环境设置存储在
/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
Run Code Online (Sandbox Code Playgroud)
$ gsettings get org.gnome.system.locale region
'en_US.UTF-8'
Run Code Online (Sandbox Code Playgroud)
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_MESSAGESfirst_weekday和first_workday来自en_GB 的LC_TIME(带有修改的和)。
您应该知道要混合哪些语言环境。首先我们需要找到相关的定义文件,可以在/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/
Run Code Online (Sandbox Code Playgroud)
我决定调用我的语言环境hc_IL并以he_IL作为基础。以下几行创建一个新文件hc_IL,其内容来自he_IL并在途中将文件中所有出现的字符串he_IL替换为hc_IL。
$ cd ~/custom-locale/
$ sed 's/he_IL/hc_IL/g' he_IL > hc_IL
Run Code Online (Sandbox Code Playgroud)
现在我们可以根据需要自定义新的语言环境。~/custom-locale/hc_IL使用您喜欢的文本编辑器打开新创建的文件。我使用vim(它对语言环境定义文件有正确的语法高亮显示):
$ vim ~/custom-locale/hc_IL
Run Code Online (Sandbox Code Playgroud)
对于那些还没有选择他们最喜欢的编辑器并且vim不是他们的菜的人,可以使用gedit :)
$ gedit ~/custom-locale/hc_IL
Run Code Online (Sandbox Code Playgroud)
文件结构不是很复杂。本质上,它是由部分构成的。从locale(5)手册页:
语言环境定义对每个语言环境类别都有一个部分。每个部分都可以从另一个现有的语言环境中复制,也可以从头开始定义。如果应该复制类别,定义中唯一有效的关键字是copy后跟应该复制的语言环境的名称。
复制的概念非常有用。它节省了时间,生成的文件清晰简洁。例如,您可以拥有:
LC_MESSAGES
copy "en_US"
END LC_MESSAGES
Run Code Online (Sandbox Code Playgroud)
可以通过以下方式访问语言环境定义文件的完整文档:
$ man 5 locale
Run Code Online (Sandbox Code Playgroud)
但是,如果您只想创建一个自定义语言环境,它是现有语言环境的混合,则无需了解每个细节。
就我而言,我修改了以下类别和关键字:
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"
Run Code Online (Sandbox Code Playgroud)
注:所有的“类..在”线LC_IDENTIFICATION部分使用文件创建过程中已被修改sed。所以我们不需要再碰它们了。
LC_TIME
我从en_GB复制了完整的部分,只修改了指示一周的第一天和第一个工作日的行:
first_weekday 1
first_workday 1
Run Code Online (Sandbox Code Playgroud)其余的类别我保持原样,或者用copy指令替换它们的内容,如下所示:
LC_NAME
copy "en_US"
END LC_NAME
Run Code Online (Sandbox Code Playgroud)就是这样,定义文件准备好了。不要忘记保存文件:)
使用以下命令作为root或使用sudo完成新语言环境的编译。替换hc_IL为您的语言环境:
$ sudo localedef -c -v -i hc_IL -f UTF-8 hc_IL.UTF-8
Run Code Online (Sandbox Code Playgroud)
如果编译成功,则编译的语言环境数据将添加到存档文件中/usr/lib/locale/locale-archive。
将新的语言环境定义文件复制到语言环境定义目录。替换hc_IL为您的语言环境:
$ sudo cp -v hc_IL /usr/share/i18n/locales/
Run Code Online (Sandbox Code Playgroud)
在这一步中,我们要配置系统和 GNOME 以使用新的语言环境。
/etc/locale.conf以root身份编辑文件并将以 开头的每一行设置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
Run Code Online (Sandbox Code Playgroud)
要在 GNOME 中激活新的语言环境,请运行以下命令。替换hc_IL为您的语言环境:
$ gsettings set org.gnome.system.locale region "hc_IL.utf8"
Run Code Online (Sandbox Code Playgroud)
最后一步是验证一切是否按预期工作。重新加载所有设置对我来说最简单的是重新启动。
使用 GNOME Shell 和语言环境相关应用程序(图形和控制台)并检查它们在新语言环境下的行为是否符合预期。例如,如果您自定义了 LC_TIME,则可以运行以下date命令来验证日期格式:
$ date +%x
21/04/15
Run Code Online (Sandbox Code Playgroud)注意:一切都在 Fedora 21 和 GNOME 3.14 上进行了测试。其他 Linux 发行版可能需要额外的或不同的步骤。
如果您发现说明有任何问题,请发表评论。
| 归档时间: |
|
| 查看次数: |
5284 次 |
| 最近记录: |