为什么在生成语言环境时会收到“错误:错误条目 'en_US '”?

为什么在生成语言环境时会收到“错误:错误条目 'en_US '”?

代码胜于雄辩:

root@myhost # locale-gen
Generating locales (this might take a while)...

(这里略过一点)

error: Bad entry 'en_GB '
  en_GB.UTF-8... done

(这里略过一点)

  en_SG.UTF-8... done
error: Bad entry 'en_US '
  en_US.ISO-8859-1... done
  en_US.UTF-8... done
error: Bad entry 'en_US.iso88591 '
error: Bad entry 'en_US.iso885915 '
  en_ZA.UTF-8... done

(这里略过一点)

Generation complete.

为什么我会收到这些错误以及如何避免它们?

笔记:

  • 我使用 Linux Mint 18.2,但这种情况是在(近?)过去的 Mint 18.1 的某个时刻开始发生的。我认为它们都基于 Ubuntu 16.04。
  • 我在 ; 下没有找到包含这些“坏条目”(末尾有或没有额外空格)的文件/etc。具体来说不是/etc/locale.gen

附加信息:

相关内容/etc/locale.gen

# grep -v "#" /etc/locale.gen | sed "s/$/+/" | grep "en_"
en_GB.UTF-8 UTF-8+
en_US ISO-8859-1+
en_US.UTF-8 UTF-8+

答案1

locale-gen是一个(写得不是很好的)bash脚本。该错误由以下人员报告:

is_entry_ok() {
  if [ -n "$locale" -a -n "$charset" ] ; then
    true
  else
    echo "error: Bad entry '$locale $charset'"
    false
  fi
}

所以,这里的问题是$charset空的。

要生成的语言环境列表是/etc/locale.gen/var/lib/locales/supported.d.

可能其中一个文件本身en_US不包含字符集名称。

由于您/etc/locale.gen没有en_SG.UTF-8,因此您很可能在 中有文件/var/lib/locale/supported.d,并且这些文件可能具有格式错误的行。一旦确定了罪魁祸首,您就可以dpkg -S在其路径上查看它来自哪个包(如果有)。

答案2

编辑:此解决方法可能不是最佳解决方案;但它确实有效。

基于@StephaneChazelas'回答,我发现问题出在/var/lib/locales/supported.d/mintlocale- 一个特定于我的发行版 Linux Mint 的文件。它是错误生成的,大多数(不是全部)行没有字符集字段,例如:

en_GB
en_GB.iso88591
en_GB.UTF-8 UTF-8

(跳过)

en_US
en_US.iso88591
en_US.iso885915
en_US.UTF-8 UTF-8

所以我需要做的是为所有内容生成第二个字段。基本上,这就是我所做的:

sed -i -r '/^[a-zA-Z_]*$/d' mintlocale
sed -i -r 's/.([^. ]+)$/.\1 \1/' mintlocale
sed -i -r 's/ iso8859([0-9]+)$/ISO-8859-\1/' mintlocale

因此,删除没有 .charset 后缀的行,在空格后复制 .charset 后缀,并更改 ISO 8859 字符集格式以匹配我们的内容/usr/shared/i18n/charmaps/(否则我们会收到其他错误)。

最后,我重新运行locale-gen,没有任何错误。

笔记:我不能 100% 确定是否删除无字符集行,因此欢迎对此发表评论。

相关内容