如何更改语言环境环境变量?

Mar*_*tin 17 environment-variables locale

我已经生成了en_US.utf8et_EE.iso88591ru_RU.utf8本地化文件。现在,如果我尝试将任何语言环境变量更改为ru_RU.utf8en_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"
# 
Run Code Online (Sandbox Code Playgroud)

但是,如果我更改LANG=变量,则除LANGUAGE=LC_ALL= 之外的所有其他变量都采用LANG=变量的值。有没有办法分别修改每个语言环境变量?另外,语言环境变量不是常规的 shell 变量,而是更像是语言环境实用程序的参数,我是否正确?

Gil*_*il' 18

您可以独立设置任何语言环境类别。LANG仅适用于未明确设置的类别。

LANGLC_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"
Run Code Online (Sandbox Code Playgroud)

或直接

$ export LC_TIME=ru_RU.utf8
$ locale | grep LC_TIME
LC_TIME="ru_RU.utf8"
Run Code Online (Sandbox Code Playgroud)


slm*_*slm 7

在基于 Fedora/CentOS/RHEL 的发行版下,我相信您可以将区域设置更改为locale -a在此系统文件中运行命令时显示的区域设置之一:

/etc/sysconfig/i18n
Run Code Online (Sandbox Code Playgroud)

例如在我的 Fedora 14 系统上:

$ more /etc/sysconfig/i18n 
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
Run Code Online (Sandbox Code Playgroud)

在 GNOME 下,您可以运行帮助应用程序:

system-config-language
Run Code Online (Sandbox Code Playgroud)

这带来了这个GUI:

             ss of lang。 桂

我认为 Debian/Ubuntu 发行版略有不同。我相信这是这个文件:

/etc/default/locale
Run Code Online (Sandbox Code Playgroud)

我相信它们是环境变量,但并不完全确定应用程序如何使用它们。

参考