在 Ubuntu 中删除语言环境

Rya*_*yan 4 ubuntu localization

我不小心添加了一个语言环境,例如 sudo locale-gen zh_TW

例如语言环境 -a

zh_TW
Run Code Online (Sandbox Code Playgroud)

但是如何去除呢?

Oli*_*ver 9

您还可以使用dpkg-reconfigure locales.


Pau*_*ghi 7

我的机器上安装了哪些语言环境?

您可以使用 locale 命令检查系统上生成并配置了哪些区域设置:

  • locale...列出当前区域设置配置
  • locale -a...列出您系统上生成的所有区域设置
  • locale -a -v...列出所有区域设置并显示有用的附加信息(例如包含区域设置信息数据文件的目录名称)

上面的最后一个命令使您看到所有生成的区域设置都位于 中/usr/lib/locale/,如果不需要,您可以删除其中任何一个。每个语言环境信息包都是一个包含文本文件和其他目录的目录。

-

支持的语言环境

您希望系统支持的所有区域设置都列在/var/lib/locales/supported.d/. 这些文件有两列:语言标签和字符映射表。

我希望我的系统只识别美国英语,因此我只有一个名为 的文件en,其中仅包含一行:

en_US UTF-8
Run Code Online (Sandbox Code Playgroud)

-

错误信息

如果发出 locale 命令时显示错误消息,例如

locale: Cannot set LC_ALL to default locale: No such file or directory
Run Code Online (Sandbox Code Playgroud)

确保文件/etc/default/locale存在并具有正确的内容,例如:

LANG="en_US"
LANGUAGE="en_US:en"
Run Code Online (Sandbox Code Playgroud)

-

摆脱不需要的区域设置数据 - 一步一步

现在我们知道了开始清理系统区域设置信息的所有必要细节:

  1. 编辑 中的区域设置文件/var/lib/locales/supported.d/,并删除所有不需要的区域设置(每行一个区域设置)
  2. 创建和编辑/etc/default/locale(参见上面的示例)
  3. 删除所有生成的区域设置数据:rm -rfv /usr/lib/locale/*
  4. 重新生成新的语言环境:locale-gen

就这样!重新启动计算机以使更改生效。然后运行上面的一个或多个区域设置命令示例,以确保结果符合预期。

-

参考:

https://www.linuxquestions.org/questions/blog/bittner-195120/remove-unwanted-locales-on-ubuntu-debian-3281/


mgo*_*ven 5

我认为您可以通过编辑/var/lib/locales/supported.d/local和删除该语言环境来做到这一点。然后运行locale-gen以重新生成已编译的语言环境。

  • 在我的 Ubuntu 20.04 实例中没有这样的文件夹...... (2认同)

vit*_*e33 5

注意:下面的一些命令需要 root 权限,请考虑使用sudo.

基本信息

根据man locale-gen,区域设置在多个文件中设置。

/etc/locale.gen

主配置文件的格式很简单:每一行不为空且不以 # 开头的行都被视为要构建的语言环境定义。

/var/lib/locales/supported.d/

包含语言包提供的 locale.gen 片段的目录。不要手动编辑它们,它们将在软件包升级时被覆盖。

语言环境被编译(生成)到单个文件中。

/usr/lib/locale/locale-archive

通常的默认区域设置存档位置。

Arch Wiki上有关语言环境的全面详细信息。

检查语言环境和语言环境

要列出可用(已知)区域设置,请运行以下任意命令(输出略有差异)。

locale -a
localectl list-locales
Run Code Online (Sandbox Code Playgroud)

要检查(已)生成的区域设置,请运行以下命令。

localedef --list-archive
Run Code Online (Sandbox Code Playgroud)

要检查当前使用的区域设置,请运行以下任意命令(输出略有差异)。

locale
localectl
Run Code Online (Sandbox Code Playgroud)

设置和生成(新)语言环境

区域设置通常通过取消注释行来设置/etc/locale.gen,之后locale-gen需要运行。

nano /etc/locale.gen # uncomment desired lines (locales)
locale-gen
Run Code Online (Sandbox Code Playgroud)

这将为 中和 下的/usr/lib/locale/locale-archive每个未注释的行编译(生成)语言环境,无论它们之前是否已编译。/etc/locale.gen/var/lib/locales/supported.d/

或者,命令

locale-gen <locale>
Run Code Online (Sandbox Code Playgroud)

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>都依赖于 package language-pack-<code>-base,因此当后者更新时,前者的任何更改都将被恢复。要解决此问题,只需将更新文件的包保存在/var/lib/locales/supported.d/. 在 Ubuntu/Debian 中实现此目的的命令如下。

apt-mark language-pack-<code>-base
Run Code Online (Sandbox Code Playgroud)

要更新保留的包,您必须取消标记或简单地--ignore-hold.

解决方法。一种更具侵入性但通用的防止更改的解决方案是使用“immutable (i)”属性/var/lib/locales/supported.d/设置其中的文件。因此,不要删除文件,而是清空它们。例如:

cd /var/lib/locales/supported.d/
rm <code> && touch <code> # <code> has been emptied
lsattr <code>    # regular attributes
chattr +i <code> # adding (+) immutable
lsattr <code>    # checking attributes
Run Code Online (Sandbox Code Playgroud)

设置区域设置

设置和生成区域设置不会设置系统区域设置。以下任何命令都可以实现此目的。

echo LANG=<code> | sudo tee /etc/locale.conf # reboot (might be ignored in Ubuntu)
localectl set-locale LANG=<code>
Run Code Online (Sandbox Code Playgroud)