如何删除系统语言环境,与如何删除不必要的语言环境??
我最近收到以下错误:
locale: Cannot set LC_ALL to default locale: No such file or directory
我系统中唯一的语言环境: en
$ grep -r en /var/lib/locales/supported.d/*
/var/lib/locales/supported.d/local: en_US ISO-8859-1
/var/lib/locales/supported.d/local: en_US.UTF-8 UTF-8
$ locale -a | grep en
en_US
en_US.iso88591
en_US.utf8
但不是en
,正如抱怨的那样perl
:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "",
LC_ALL = (unset),
LC_MEASUREMENT = "en",
LC_PAPER = "en",
LC_MONETARY = "en",
LC_NAME = "en",
LC_ADDRESS = "en",
LC_NUMERIC = "en",
LC_TELEPHONE = "en",
LC_IDENTIFICATION = "en",
LC_TIME = "en",
LANG = "C"
所以我通过以下方式添加语言环境 en
:
% locale-gen en
Generating locales (this might take a while)...
en_AG.UTF-8... done
en_AU.UTF-8... done
en_BW.UTF-8... done
en_CA.UTF-8... done
en_DK.UTF-8...^C
我不想要上述任何语言环境(仅en_US
),但现在我无法摆脱它们——我按照
https://serverfault.com/questions/394610/remove-a-locale-in-中的步骤操作ubuntu
但是当谈到最后一步时,我仍然得到:
% locale-gen
Generating locales (this might take a while)...
en_AG.UTF-8... done
en_AU.UTF-8... done
en_BW.UTF-8... done
en_CA.UTF-8... done
en_DK.UTF-8...^C
如何删除所有上述语言环境并仅保留en_US
?
结论与补充
/etc/locale.gen
感谢 Gunnar 的回答,对于那些额外的语言环境,它确实是由 , 中的条目引起的。只是 FTR,这就是发生locale-gen en
的变化/etc/locale.gen
:
$ sed '/^#/d; /en/p;' /etc/locale.gen
en_AG UTF-8
en_AG UTF-8
en_AU.UTF-8 UTF-8
en_AU.UTF-8 UTF-8
en_BW.UTF-8 UTF-8
en_BW.UTF-8 UTF-8
en_CA.UTF-8 UTF-8
en_CA.UTF-8 UTF-8
en_DK.UTF-8 UTF-8
en_DK.UTF-8 UTF-8
en_GB.UTF-8 UTF-8
en_GB.UTF-8 UTF-8
en_HK.UTF-8 UTF-8
en_HK.UTF-8 UTF-8
en_IE.UTF-8 UTF-8
en_IE.UTF-8 UTF-8
en_IL UTF-8
en_IL UTF-8
en_IN UTF-8
en_IN UTF-8
en_NG UTF-8
en_NG UTF-8
en_NZ.UTF-8 UTF-8
en_NZ.UTF-8 UTF-8
en_PH.UTF-8 UTF-8
en_PH.UTF-8 UTF-8
en_SC.UTF-8 UTF-8
en_SC.UTF-8 UTF-8
en_SG.UTF-8 UTF-8
en_SG.UTF-8 UTF-8
en_US.UTF-8 UTF-8
en_US.UTF-8 UTF-8
en_ZA.UTF-8 UTF-8
en_ZA.UTF-8 UTF-8
en_ZM UTF-8
en_ZM UTF-8
en_ZW.UTF-8 UTF-8
en_ZW.UTF-8 UTF-8
作为比较,这是默认的样子(即,没有上述任何额外的语言环境):
$ sed '/^#/d;' /etc/locale.gen; echo ---
---
您应该编辑
/etc/locale.gen
和评论您不想要的语言环境。然后运行不存在任何名称为 的语言环境
en
。您可能想要使用的是en_US.UTF-8
而不是en_US
. (后者启用 latin1 编码。)注意:以下某些命令需要 root 权限,请考虑使用
sudo
.基本信息
根据
man locale-gen
,语言环境设置在几个文件中。语言环境被编译(生成)到单个文件中。
Arch Wiki上有关语言环境的全面详细信息。
检查语言环境和语言环境
要列出可用(已知)的语言环境,请运行以下任何命令(输出差异很小)。
要检查(已经)生成的语言环境,请运行以下命令。
要检查当前使用的语言环境,请运行以下任何命令(输出差异很小)。
设置和生成(新)语言环境
语言环境通常通过取消注释中的行来设置
/etc/locale.gen
,之后locale-gen
需要运行。这将为 in和 under
/usr/lib/locale/locale-archive
中的每个未注释行编译(生成)语言环境,无论它们以前是否编译过。/etc/locale.gen
/var/lib/locales/supported.d/
或者,命令
将在生成所需的语言环境时取消注释相应的行,
locale-gen
并且只有这一行。注意: 的实现
locale-gen
取决于发行版。例如,上面的命令在 Ubuntu/Debian 中有效,但在 ArchLinux 中无效。删除语言环境
发布时
locale-gen
,已编译的存档将被删除,并且重新生成/etc/locale.gen
其中和以下的所有语言环境。/usr/lib/locale/locale-archive
该命令locale-gen --purge <locale>
不执行修饰符所建议的操作,而是执行相反的操作:它删除所有已编译的语言环境,但指定的语言环境除外。为了确保在locale-gen
发布或更新时只生成特定的语言环境/etc/locale.gen
,/usr/lib/locale/locale-archive
必须考虑。要删除 中的语言环境
/etc/locale.gen
,只需注释所需的行并使用 重新生成语言环境locale-gen
。删除下面的语言环境
/var/lib/locales/supported.d/
比较棘手。由于任何文件都/var/lib/locales/supported.d/<code>
依赖于包language-pack-<code>-base
,因此对前者的任何更改都将在后者更新时恢复。要解决这个问题,只需将更新文件的包保存在/var/lib/locales/supported.d/
. 在 Ubuntu/Debian 中实现此目的的命令如下。要更新保留的包,您必须取消标记它或简单地
--ignore-hold
.解决方法。一个更具侵入性但通用的解决方案
/var/lib/locales/supported.d/
是在其中设置具有“不可变(i)”属性的文件。因此,与其删除文件,不如清空它们。例如:设置语言环境
设置和生成语言环境不会设置系统语言环境。以下任何命令都可以实现此目的。
我的机器上安装了哪些语言环境?
您可以使用 locale 命令检查系统上生成和配置了哪些语言环境:
locale
...列出当前的语言环境配置locale -a
...列出您系统上生成的所有语言环境locale -a -v
...列出所有语言环境并显示有用的附加信息(例如包含语言环境信息数据文件的目录名称)上面的最后一个命令让您看到所有生成的语言环境都位于 中
/usr/lib/locale/
,如果不需要,您可以删除它们中的任何一个。每个语言环境信息包都是一个包含文本文件和其他目录的目录。支持的语言环境
您希望系统支持的所有语言环境都列在
/var/lib/locales/supported.d/
. 这些文件有两列,语言标签和字符映射。我希望我的系统只知道美国英语,所以我只有一个文件,名为
en
,它只包含一行:错误信息
如果在发出 locale 命令时显示错误消息,例如
确保文件
/etc/default/locale
存在且内容正确,例如:摆脱不需要的语言环境数据 - 一步一步
现在我们知道了开始清理系统语言环境信息的所有必要细节:
/var/lib/locales/supported.d/
,并删除所有不需要的语言环境(每行一个语言环境)/etc/default/locale
(参见上面的示例)rm -rfv /usr/lib/locale/*
locale-gen
就这样!重新启动您的计算机以使您的更改生效。然后从上面运行一个或多个 locale 命令示例,以确保结果符合预期。
参考:
https://www.linuxquestions.org/questions/blog/bittner-195120/remove-unwanted-locales-on-ubuntu-debian-3281/