Locale

為什麼在生成語言環境時會出現“錯誤:錯誤條目 ’en_US’”?

  • July 4, 2017

程式碼勝於雄辯:

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+

編輯:這種解決方法可能不是最好的解決方案;但它確實有效。

根據@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% 確定刪除無字元集的行,因此歡迎對此發表評論。

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在它的路徑上使用它來查看它來自哪個包(如果有的話)。

引用自:https://unix.stackexchange.com/questions/375166