远程登录 VPS 语言错误

Dec 2, 2016 15:58 · 497 words · 1 minute read Ubuntu

当使在 VPS 上安装软件的时候,经常遇到同一个警告,如下:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = "en_US:",
	LC_ALL = (unset),
	LC_CTYPE = "zh_CN.UTF-8",
	LANG = "en_US"
    are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US").
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

那是因为安装软件时,都会去执行一个 update-locale 的命令,用来更新 locale

这个命令是一个脚本,用 perl 写的,可以用 whereis update-locale 查到,位置在 /usr/sbin/update-locale

上述报错并不是因为 update-locale 命令而引起,update-locale 这段脚本没有问题,而是因为perl。

可以使用以下命令测试:

perl -e exit

其实,真正的原因是 perl 为系统使用 zh_CN.UTF-8,但系统并没有安装 zh_CN.UTF-8

这种情况一般是vps比较常见,因为一般都是用 ssh 的方式连接到 vps 上的 sshd 有这个机制,会把客户机上的语言环境带到远程的机器上。

客户机一般都会设置 zh_CN.UTF-8 语言,用来显示中文,而远端的vps一般就只有en_US.UTF-8,zh_CN.UTF-8一旦带过去就会报找不到的错误。

所以安装一个中文语言,perl就不会报错了。

$ sudo locale-gen zh_CN zh_CN.UTF-8
Generating locales...
  zh_CN.GB2312... done
  zh_CN.UTF-8... done
Generation complete.
$ sudo dpkg-reconfigure locales
Generating locales...
  en_US.UTF-8... done
  zh_CN.GB2312... up-to-date
  zh_CN.UTF-8... up-to-date
Generation complete.

这个时候,还可以使用 locale 当前有哪些语言:

$ locale

参考