我已经生成了en_US.utf8,et_EE.iso88591和ru_RU.utf8本地化文件。现在,如果我尝试将任何语言环境变量更改为ru_RU.utf8或者en_US.utf8,那么这没有任何效果:
# locale -a
C
en_US.utf8
et_EE
et_EE.iso88591
POSIX
ru_RU.utf8
# LC_TIME=ru_RU.utf8
# locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
# LC_TIME="ru_RU.utf8"
# locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
#
但是,如果我改变语言=变量,然后是除语言=和LC_ALL=取值语言=多变的。有没有办法单独修改每个区域设置变量?另外,我是否正确地认为区域设置变量不是常规的 shell 变量,而更像是参数语言环境公用事业?
答案1
您可以独立设置任何区域设置类别。LANG
仅适用于未明确设置的类别。
LANG
和LC_xxx
是普通的环境变量。它们不是locale
实用程序的设置:locale
程序不参与任何区域设置处理,它只是一个报告当前和可用区域设置的小实用程序。
当您编写 时LC_TIME=ru_RU.utf8
,这不会设置环境变量,而只会设置 shell 变量。 Shell 变量是 shell 的内部变量,其他程序看不到它们。另一方面,环境变量由 shell 启动的程序继承。您还需要将变量导出到环境中:
$ LC_TIME=ru_RU.utf8
$ locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
$ export LC_TIME
$ locale | grep LC_TIME
LC_TIME="ru_RU.utf8"
或直接
$ export LC_TIME=ru_RU.utf8
$ locale | grep LC_TIME
LC_TIME="ru_RU.utf8"
答案2
locale -a
在基于 Fedora/CentOS/RHEL 的发行版下,我相信您可以将区域设置更改为在此系统文件中运行命令时显示的区域设置之一:
/etc/sysconfig/i18n
例如在我的 Fedora 14 系统上:
$ more /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
在 GNOME 下,您可以运行帮助应用程序:
system-config-language
这会弹出这个 GUI:
我认为 Debian/Ubuntu 发行版略有不同。我相信是这个文件:
/etc/default/locale
我相信它们是环境变量,但不完全确定应用程序如何使用它们(如果有的话)。
参考
答案3
至少在 RedHat 6 上,请注意,如果设置了 LC_ALL,则设置其他 LC_* 环境变量将不起作用,因为 LC_ALL 优先于所有其他 LC_* 环境变量。
[root@nbu76 bin]# LC_TIME=en_US.UTF-8
[root@nbu76 bin]# export LC_TIME
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_IE"
LC_NUMERIC="en_IE"
LC_TIME="en_IE"
...
LC_ALL=en_IE
[root@nbu76 bin]# unset LC_ALL
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME=en_US.UTF-8
...
LC_ALL=
[root@nbu76 bin]# export LC_TIME=en_IE
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME=en_IE
....
LC_ALL=
答案4
在Debian系统中,可以运行dpkg-reconfigure locales
来设置主要语言并使其他语言可用;然后可以运行update-locale
设置LANGUAGE
环境变量以/etc/default/locale
使用后备语言。