sudo dpkg-reconfigure locales
Generating locales...
en_AG.UTF-8... done
en_AU.UTF-8... done
en_BW.UTF-8... done
en_CA.UTF-8... done
en_DK.UTF-8... done
en_GB.UTF-8... done
en_HK.UTF-8... done
en_IE.UTF-8... done
en_IN.UTF-8... done
en_NG.UTF-8... done
en_NZ.UTF-8... done
en_PH.UTF-8... done
en_SG.UTF-8... done
en_US.UTF-8... up-to-date
en_ZA.UTF-8... done
en_ZM.UTF-8... done
en_ZW.UTF-8... done
Generation complete.
sudo update-locale LANG=en_US.UTF-8
即使用上述输出中的一个Locale值
/usr/share/initramfs-tools/hooks/root_locale
期望在/usr/lib/locale
目录中看到单独的区域设置目录,但locale-gen
默认配置为生成一个存档文件。sudo locale-gen --purge --no-archive
我看到你正在运行ubuntu11.10(oneric)@2011,尽管上面的答案可能已经解决了该版本的问题,但警告消息仍然存在,并且提供的答案在我的情况下没有解决问题:
从Ubuntu 14.04(trusty [Mint 17.1 ISO])的全新安装,并升级到ubuntu 18.04(bionic [Mint 19.3]),总共应用了6个升级。我忽略了持续的警告消息,因为它对我的系统运行或我对内核所做的任何更改都没有影响。
然而,我感到困惑,我找到了以下内容:
经仔细检查,我发现文件位于/usr/share/initramfs-tools/hooks/root_locale
(日期为2011年3月11日!),我推断该文件由../hook-functions
执行(在先前提到的Ubuntu releases found here和更多中找到的initramfs-tools
),在我的情况下,警告的来源在这里:
[ -r /etc/default/locale ] && . /etc/default/locale
[ -z "$ROOT_LOCALE" ] && ROOT_LOCALE=`echo $LANG | sed -e 's/UTF/utf/' -e 's/utf-8/utf8/'`
if [ -n "$ROOT_LOCALE" ] && [ -d /usr/lib/locale/$ROOT_LOCALE ]; then
[ "${verbose}" = "y" ] && echo "Adding locale: $ROOT_LOCALE"
mkdir -p "$DESTDIR/usr/lib/locale"
cp -r /usr/lib/locale/$ROOT_LOCALE "$DESTDIR/usr/lib/locale"
echo "ROOT_LOCALE=$ROOT_LOCALE" > $CONF
echo "export ROOT_LOCALE" >> $CONF
echo "export FSTYPE" >> $CONF
else
echo "Warning: No support for locale: $ROOT_LOCALE" >&2
fi
/usr/lib/locale/en_US.utf8
,在我的情况下解析失败。utf8
小写的问题,特别是在ubuntu 14 > 20中,locale-gen
只是将/etc/locale.gen
中的每一行解析给localedef
,参见Ubuntu man pages locale-gen from 16.04 to 20.04(并且没有上面提到的任何选项),而locale.gen
也没有一个使用utf8
小写的条目。echo $LANG
然后,将下面的en_US
更改为您的语言(例如fr_FR
)
cd /usr/lib/locale
localedef -f UTF-8 -i en_US ./en_US.utf8
这将创建以下结构:
ls /usr/lib/locale/en_US.utf8/
LC_ADDRESS LC_IDENTIFICATION LC_MONETARY LC_PAPER LC_COLLATE LC_MEASUREMENT LC_NAME LC_TELEPHONE LC_CTYPE LC_MESSAGES LC_NUMERIC LC_TIME
注意1:在Ubuntu版本16.04 > 20.04中,locale-gen
(shell脚本)和dpkg-reconfigure locales
(调用localedef
)只解析/etc/locale.gen
,而您的发行版可能提供不同的功能。
注意2:我不知道___/usr/share/initramfs-tools/hooks/root_locale___
是从哪里来的,因为在任何上述的版本中都找不到它,我只能推测它可能是Mint 17.1的一部分或者残留物,你的发行版可能不同。
/usr/share/initramfs-tools/hooks/root_locale
也没有 /usr/lib/locales
。你的回答真的是关于Ubuntu吗,还是你在其他Linux平台上? - Gunnar Hjalmarssonsudo apt reinstall locales
$ locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
C.UTF-8
POSIX
$ sudo dpkg-reconfigure locales
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
...
Generating locales (this might take a while)...
en_AG.UTF-8...[error] cannot open locale definition file `en_GB': No such file or directory
done
en_AU.UTF-8...[error] cannot open locale definition file `en_AU': No such file or directory
...
locales
后,我看到了正确的输出。$ locale -a
C
C.UTF-8
...
en_US.utf8
...
$ sudo dpkg-reconfigure locales
Generating locales (this might take a while)...
...
en_US.UTF-8... done
...
Generation complete.