Locale
為什麼在生成語言環境時會出現“錯誤:錯誤條目 ’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+
編輯:這種解決方法可能不是最好的解決方案;但它確實有效。
根據@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
在它的路徑上使用它來查看它來自哪個包(如果有的話)。