新安装的 Ubuntu 20.04 上出现未知语言环境消息

新安装的 Ubuntu 20.04 上出现未知语言环境消息

Ubuntu 20.04.4 LTS 服务器系统产生有关区域设置的奇怪错误消息。

服务器 20.04:

$ LC_ALL=en_US.ISO8859-1
en_US.ISO8859-1: unknown locale
$ echo $LC_ALL
en_US.UTF-8

我有一个脚本将 LC_ALL 值设置为此语言环境。这应该很容易修复,只需注释掉 LC_ALL= 行或将其设置为我的服务器正在使用的语言环境之一即可。

$ locale -a
C
C.UTF-8
POSIX
en_US.utf8

但这让我很烦...为什么会出现“未知语言环境”消息?我配置了其他 Ubuntu 服务器(大部分是 18.04),不会出现此错误。示例:

服务器 18.04:

$ LC_ALL=en_US.ISO8859-1
/usr/share/i18n
$ echo $LC_ALL
en_US.ISO8859-1
$ locale -a
C
C.UTF-8
POSIX
en_US.utf8

我尝试了一些建议的命令,但都无法解决问题或找出可能的原因。我尝试过:

  • locale-gen
  • dpkg-reconfigure locales
  • 已验证的内容/etc/default/locale
  • 已验证的内容/etc/environment
  • 删除并重建/usr/lib/locale/locale-archive

一些文章还提到审查或编辑条目,/var/lib/locales/supported.d但该目录在我的任何 Ubuntu 服务器上都不存在。

所以我的解决方案是注释掉问题脚本中的 LC_ALL 行。但这并不能回答问题。为什么我在其他几台服务器上都没有收到错误,而只在新服务器上收到错误?这可能是 20.04 中的一些新行为吗?我至少还有一台 20.04 服务器没有收到此错误,但我认为它是从 18.04 升级而来的,而不是全新安装的 20.04。

有任何想法吗?

TIA。史蒂夫

编辑 (1):有一种想法(但并未解释为什么它在其他 Ubuntu 服务器上有效)是,问题脚本中的语言环境名称可能设计用于不同的操作系统。我注意到它使用的是 LC_ALL="en_US.ISO8859-1",但 Ubuntu 中的相同语言环境称为“en_US ISO8859-1”(ISO 部分前有一个空格,而不是句点)。

编辑 (2):我尝试了 Gunnar 的建议,但问题没有解决。在尝试此操作之前,我已使用 sudo 将其设置为 root。

$ locale-gen en_US
Generating locales (this might take a while)...
  en_US.ISO-8859-1... done
Generation complete.

$ locale -a
C
en_US
en_US.iso88591
en_US.utf8
POSIX

$ LC_ALL="en_US.ISO8859-1"
en_US.ISO8859-1: unknown locale

需要注意的是,当我使用“locale -a”时,我的其他 Ubuntu 服务器没有将“en_US.iso88591”列为已安装/生成的语言环境之一,但我没有收到未知语言环境错误。

我可以看到生成的 latin1 语言环境显示为“en_US.iso88591”,而不是我所拥有的“en_US.ISO8859-1”,所以我可以尝试更改它以匹配,但这不是重点。我拥有的脚本已在其他 Ubuntu 18.04 服务器上运行了至少 24 个月,没有出现我在新安装的 20.04 服务器上看到的错误。

编辑(3):@Gunnar:三个地方都没有运气

$ LC_ALL="en_US.ISO8859-1"
en_US.ISO8859-1: unknown locale
$ LC_ALL="en_US.iso88591"
en_US.iso88591: unknown locale
$ LC_ALL="en_US"
en_US: unknown locale

更新:重新启动似乎无法解决“未知语言环境”消息。我们发现,在安装了 Ubuntu 20.04.4 的三台服务器上,所有服务器都显示此消息。另一方面,没有任何一台 Ubuntu 18.04.6 服务器产生此错误。尽管我们从未(据我们所知)在任何服务器上激活过“en_US.ISO8859-1”语言环境。

作为解决方案,我们只需从设置为“LC_ALL=en_US.ISO8859-1”的 shell 脚本中删除该行,从而避免消息显示在屏幕上。

这仍然不能解释为什么 18.04 服务器似乎都接受名称“en_US.ISO8859-1”作为有效的 LC_ALL 值,而在 20.04 服务器上却报告“未知区域设置”。但我怀疑我对一个可能永远不会使用的设置过于痴迷。

答案1

如果您确实出于某种原因想要使用 latin1 区域设置而不是 UTF-8 区域设置,则需要先生成它。

sudo locale-gen en_US

相关内容