AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1154895
Accepted
xpt
xpt
Asked: 2019-06-30 09:01:16 +0800 CST2019-06-30 09:01:16 +0800 CST 2019-06-30 09:01:16 +0800 CST

如何删除系统语言环境

  • 772

如何删除系统语言环境,与如何删除不必要的语言环境??

我最近收到以下错误:

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 ---


---
configuration system locale removing
  • 3 3 个回答
  • 3779 Views

3 个回答

  • Voted
  1. Gunnar Hjalmarsson
    2019-06-30T09:55:27+08:002019-06-30T09:55:27+08:00

    您应该编辑/etc/locale.gen和评论您不想要的语言环境。然后运行

    sudo locale-gen
    

    不存在任何名称为 的语言环境en。您可能想要使用的是en_US.UTF-8而不是en_US. (后者启用 latin1 编码。)

    • 6
  2. Best Answer
    vitaminace33
    2020-10-11T03:44:47+08:002020-10-11T03:44:47+08:00

    注意:以下某些命令需要 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
    

    要检查(已经)生成的语言环境,请运行以下命令。

    localedef --list-archive
    

    要检查当前使用的语言环境,请运行以下任何命令(输出差异很小)。

    locale
    localectl
    

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

    语言环境通常通过取消注释中的行来设置/etc/locale.gen,之后locale-gen需要运行。

    nano /etc/locale.gen # uncomment desired lines (locales)
    locale-gen
    

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

    或者,命令

    locale-gen <locale>
    

    将在生成所需的语言环境时取消注释相应的行,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 中实现此目的的命令如下。

    apt-mark language-pack-<code>-base
    

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

    解决方法。一个更具侵入性但通用的解决方案/var/lib/locales/supported.d/是在其中设置具有“不可变(i)”属性的文件。因此,与其删除文件,不如清空它们。例如:

    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
    

    设置语言环境

    设置和生成语言环境不会设置系统语言环境。以下任何命令都可以实现此目的。

    echo LANG=<code> | sudo tee /etc/locale.conf # reboot (might be ignored in Ubuntu)
    localectl set-locale LANG=<code>
    
    • 6
  3. Paulo Coghi
    2021-11-28T10:43:30+08:002021-11-28T10:43:30+08:00

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

    您可以使用 locale 命令检查系统上生成和配置了哪些语言环境:

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

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


    支持的语言环境

    您希望系统支持的所有语言环境都列在/var/lib/locales/supported.d/. 这些文件有两列,语言标签和字符映射。

    我希望我的系统只知道美国英语,所以我只有一个文件,名为en,它只包含一行:

    en_US UTF-8
    

    错误信息

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

    locale: Cannot set LC_ALL to default locale: No such file or directory
    

    确保文件/etc/default/locale存在且内容正确,例如:

    LANG="en_US"
    LANGUAGE="en_US:en"
    

    摆脱不需要的语言环境数据 - 一步一步

    现在我们知道了开始清理系统语言环境信息的所有必要细节:

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

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


    参考:

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

    • 1

相关问题

  • 如何为公共计算机配置 Ubuntu?

  • 如何设置默认启用网络?

  • 有没有办法让 Debootstrap 自动配置语言环境?

  • 如何在键盘上映射未映射的键?[关闭]

  • 保持多个工作站同步

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve