问题描述
我有一个语言环境问题。 nautilus
和其他程序中的整理顺序已更改。当我启动GUI应用程序时,我在终端中出现了语言环境错误。
Gtk-WARNING **: Locale not supported by C library.
Using the fallback 'C' locale.
locale
命令会生成错误消息
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_AU
LANGUAGE=en_AU:en
LC_CTYPE="en_AU"
LC_NUMERIC="en_AU"
LC_TIME="en_AU"
LC_COLLATE=en_AU.UTF-8
LC_MONETARY="en_AU"
LC_MESSAGES=en_AU.UTF-8
LC_PAPER="en_AU"
LC_NAME="en_AU"
LC_ADDRESS="en_AU"
LC_TELEPHONE="en_AU"
LC_MEASUREMENT="en_AU"
LC_IDENTIFICATION="en_AU"
LC_ALL=
正如askubuntu question中所建议的那样,我运行了以下命令,但没有任何变化。
sudo apt-get install language-pack-en-base
sudo dpkg-reconfigure locales
我也尝试了askubuntu question中的建议……也没有变化。
apt-get install --reinstall locales
我认为它是从我通过IBus
暂时安装和卸载乌尔都语语言输入法编辑器开始的..它当然发生在同一天。
也许它与IBus有关,但在此之前我没有任何问题。
-
操作系统是10.04
最佳解决办法
我已经设法再次运行”normally”。
在尝试了很多包re-installs等之后,包括完全删除IBus(一切都没有效果),我开始认为它可能是由re-installing不修改的配置设置引起的。
我注意到locale
的输出相当没有UTF-8分配,所以我在最近安装的VM中检查了这一点…… LC_ *的所有条目(LC_ALL除外,它覆盖了所有其他条目)都是用.UTF-8
设置的后缀。所以我手动设置LC_ *值,如下所示。
我可能刚刚使用过LC_ALL="en_AU.UTF-8"
,但在阅读此内容时,我发现了如何自定义system date and time format,而LC_ALL
将覆盖我的自定义设置。
我不知道我是否使用过最合适的方法,但它有效!
修改后的文件是:/etc/default/locale
-
这显示了mod之前的内容:
LANG="en_AU.UTF-8" LANGUAGE="en_AU:en" LC_MESSAGES="en_AU.UTF-8"
-
这显示了mod之后的内容:
LANG="en_AU.UTF-8" LANGUAGE="en_AU:en" LC_CTYPE="en_AU.UTF-8" LC_NUMERIC="en_AU.UTF-8" LC_TIME="en_AU.UTF-8" LC_COLLATE=en_AU.UTF-8 LC_MONETARY="en_AU.UTF-8" LC_MESSAGES=en_AU.UTF-8 LC_PAPER="en_AU.UTF-8" LC_NAME="en_AU.UTF-8" LC_ADDRESS="en_AU.UTF-8" LC_TELEPHONE="en_AU.UTF-8" LC_MEASUREMENT="en_AU.UTF-8" LC_IDENTIFICATION="en_AU.UTF-8"
VM中的同一文件只包含这一行:
LANG="en_AU.UTF-8"
次佳解决办法
重新定义区域设置和重新配置可能足以解决问题:
sudo locale-gen en_AU.UTF-8
sudo dpkg-reconfigure locales
运行sudo dpkg-reconfigure locales
时,您可以通过单击spacebar
选择所需的区域设置,然后在点击Enter
之前使用↑
和↓
移动。
第三种解决办法
我也遇到了这个问题,如你所见,你的LC_ALL
是空的。我做了如下,它有助于:
$ sudo vim /etc/environment
并将LC_ALL
设置为en_US.UTF-8
,我的是:
LANG="en_US.UTF-8"
LC_MESSAGES="C"
LC_ALL="en_US.UTF-8"
然后重新启动,并运行locale
,它应该是这样的:
LANG=zh_CN.utf8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
第四种办法
如果您通过ssh远程连接到机器(例如从macosx设备),则需要在要连接的机器上设置这些变量
将以下内容添加到〜/.bash_profile中
#fix for locale issues when connecting to ubuntu servers
export LANG="en_US.utf8"
export LANGUAGE="en_US.utf8"
export LC_ALL="en_US.utf8"
第五种办法
我只想补充一点,我也需要编辑我的家庭档案:
gedit ~/.profile
所以在你的情况下,它看起来像:
...
LANG="en_AU.UTF-8"
LANGUAGE="en_AU:en"
注销+登录。一切都如预期。
第六种办法
几个月来我遇到了同样的问题,很多软件工具都警告说区域设置有问题,有些甚至拒绝运行。我想使用英语,但瑞典货币和数字设置。
最终对我有用的是编辑/etc/default/locale
,我删除了该文件中的所有内容。然后我开始使用Unity语言设置(Settings -> Language Support)
,设置一切(Ubuntu想要安装一些缺少的组件)并在完成后按下"Apply System-wide"
。
我的/etc/default/locale
现在看起来像这样。
LC_NUMERIC="sv_SE.UTF-8"
LC_TIME="sv_SE.UTF-8"
LC_MONETARY="sv_SE.UTF-8"
LC_PAPER="sv_SE.UTF-8"
LC_IDENTIFICATION="sv_SE.UTF-8"
LC_NAME="sv_SE.UTF-8"
LC_ADDRESS="sv_SE.UTF-8"
LC_TELEPHONE="sv_SE.UTF-8"
LC_MEASUREMENT="sv_SE.UTF-8"
LANGUAGE="en"
LANG="en_US.UTF-8"
这和我原来的文件之间的最大区别是LANGUAGE="en"
。
第七种办法
自发布以来已经有一段时间了,但最近我遇到了”locale”变量的问题,没有回答给我任何结果。也许我自己的经历可以帮助别人。
我的LANG变量是空的,这给了我一些问题。
$locale
输出:
LANG=
LANGUAGE=en_US
LC_CTYPE=POSIX
LC_NUMERIC=POSIX
LC_TIME=POSIX
LC_COLLATE=POSIX
LC_MONETARY=POSIX
LC_MESSAGES=POSIX
LC_PAPER=POSIX
LC_NAME=POSIX
LC_ADDRESS=POSIX
LC_TELEPHONE=POSIX
LC_MEASUREMENT=POSIX
LC_IDENTIFICATION=POSIX
LC_ALL=POSIX
我尝试了一些命令,如:
sudo locale-gen
sudo dpkg-reconfigure locales
没有成功。我尝试编辑/etc /default /locale并发现它已经是O.K:
$cat /etc/default/locale
输出:
LANG=en_US.UTF-8
LC_NUMERIC="es_CO.UTF-8"
LC_TIME="es_CO.UTF-8"
LC_MONETARY="es_CO.UTF-8"
LC_PAPER="es_CO.UTF-8"
LC_NAME="es_CO.UTF-8"
LC_ADDRESS="es_CO.UTF-8"
LC_TELEPHONE="es_CO.UTF-8"
LC_MEASUREMENT="es_CO.UTF-8"
LC_IDENTIFICATION="es_CO.UTF-8"
我的.pam_environment文件似乎也是正确的:
$cat .pam_environment
输出:
LANGUAGE=en_US:en
LANG=en_US.UTF-8
LC_NUMERIC=es_CO.UTF-8
LC_TIME=es_CO.UTF-8
LC_MONETARY=es_CO.UTF-8
LC_PAPER=es_CO.UTF-8
LC_NAME=es_CO.UTF-8
LC_ADDRESS=es_CO.UTF-8
LC_TELEPHONE=es_CO.UTF-8
LC_MEASUREMENT=es_CO.UTF-8
LC_IDENTIFICATION=es_CO.UTF-8
PAPERSIZE=letter
我不想在配置文件或bash文件中添加额外的东西,主要是因为虽然它可以解决问题但我不知道原因,这让我生气。
最后我想知道是否有什么东西已经覆盖了”locale”变量并运行了下一个命令:
$cat .bashrc | grep LANG
输出:
unset LANG
所以我在我的.bashrc文件中找到了两行原因(我没有粘贴整个文件):
unset LANG
export LC_ALL=POSIX
我不知道这些行是怎么或什么时候出现在我的bash文件上的,但是我完全确定我没有写它们,也许我的.bashrc在我使用一些web-development的东西时被替换了,我真的不知道知道,但是因为我知道这是无意的,并且有人不知道是什么导致了”locale”的不良行为,也许这可以帮助他们。无论如何评论这些线和重新启动解决了我的问题。 Here我回答了同样的问题,主要关注关于LANG变量的sublimeT3投诉。