在我的 Ubuntu 20.04LTS 系统上,每当我运行locale
:
$ locale
...
LC_MESSAGES=C
...
尽管我的/etc/default/locale/
:
$ cat /etc/default/locale
# File generated by update-locale
LANG="en_US.UTF-8"
...
LC_MESSAGES=en_US.UTF-8
LC_MESSAGES
为什么当我通过检查时是“C” locale
?
答案1
“默认”意味着有其他优先级更高的设置locale
优先考虑。
区域设置是不是直接从 /etc/default 读取 - 它仅从环境变量$LC_MESSAGES
等中读取,而你正在编辑的文件仅用于设置这些环境变量在登录时。您在 中看到的内容env|grep ^LC
或多或少就是 所打印的内容locale
。
通常,该文件在登录过程的早期就被读取(通过 PAM),因此可以从各种其他来源覆盖生成的环境变量。例如,您可能手动设置了 LC_MESSAGES,或者您的 ~/.bashrc 或 ~/.profile 可能设置了export
不同的值,或者您通过 GNOME 登录,它从 GSettings 1检索了每个用户的设置。对于 SSH 连接,如果客户端启用了“SendEnv”,它可能会将客户端$LC_*
变量发送到服务器,这将覆盖 PAM 已设置的任何内容。
最后,如果$LC_ALL
环境变量恰好被设置(无论它来自哪里),它将优先于全部其他$LC_*
设置。
1 dconf-editor org.gnome.system.locale