首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除系统区域设置

如何删除系统区域设置
EN

Ask Ubuntu用户
提问于 2019-06-29 17:01:16
回答 3查看 4.8K关注 0票数 7

如何删除系统区域设置,与如何删除不必要的区域设置?中要求的包区域设置相反?

最近我收到了以下错误:

代码语言:javascript
复制
locale: Cannot set LC_ALL to default locale: No such file or directory

系统中的只有 en区域设置:

代码语言:javascript
复制
$ 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抱怨的那样:

代码语言:javascript
复制
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

代码语言:javascript
复制
% 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中的步骤

但说到最后一步,我仍然得到:

代码语言:javascript
复制
% 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

Conclusion &补编

由于贡纳的回答,这确实是由/etc/locale.gen中的条目引起的,因为这些额外的区域设置。只有FTR,这就是locale-gen en/etc/locale.gen中所做的改变:

代码语言:javascript
复制
$ 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

作为比较,下面是默认设置(即,没有上述任何额外的区域设置):

代码语言:javascript
复制
$ sed '/^#/d;' /etc/locale.gen; echo ---


---
EN

回答 3

Ask Ubuntu用户

回答已采纳

发布于 2020-10-10 11:44:47

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

基本信息

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

/etc/locale.gen是主配置文件,它有一个简单的格式:不为空且不以#开头的每一行都被视为要构建的区域设置定义。/var/lib/locales/supported.d/包含语言包提供的locale.gen片段的目录.不要手动编辑这些文件,它们将在软件包升级时被覆盖。

区域设置被编译(生成)到一个文件中。

/usr/lib/locale/locale-archive通常默认的地区存档位置。

关于Arch Wiki地区的详细信息。

检查区域设置和区域设置

若要列出可用(已知)区域设置,请运行以下任何命令(输出差异较小)。

代码语言:javascript
复制
locale -a
localectl list-locales

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

代码语言:javascript
复制
localedef --list-archive

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

代码语言:javascript
复制
locale
localectl

设置和生成(新的)区域设置

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

代码语言:javascript
复制
nano /etc/locale.gen # uncomment desired lines (locales)
locale-gen

这将为/etc/locale.gen中的每个未注释行以及/var/lib/locales/supported.d/下的每个未注释行将(generate)编译(Generate)到D24中,不管它们以前是否已经编译过。

或者,命令

代码语言:javascript
复制
locale-gen 

将取消对locale-gen中相应行的注释,同时生成所需的区域设置,并且仅此一行。

注意:locale-gen的实现依赖于发行版。例如,上面的命令在Ubuntu/Debian中是有效的,但在ArchLinux中无效。

移除

在发出locale-gen时,将删除编译后的存档,并重新生成/etc/locale.gen/usr/lib/locale/locale-archive下的所有区域设置。命令locale-gen --purge 不执行修饰符建议的操作,相反:它移除所有已编译的区域设置,但指示的区域设置除外。为了确保在发出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/都依赖于包language-pack--base,所以在更新后者时,将恢复对前者的任何更改。要解决这个问题,只需保存/var/lib/locales/supported.d/下更新文件的包即可。在Ubuntu/Debian中实现这一目标的命令如下。

代码语言:javascript
复制
apt-mark language-pack--base

若要更新所持有的包,必须对其进行未标记或简单的--ignore-hold

解决办法。防止在/var/lib/locales/supported.d/下更改的更有侵扰性但更通用的解决方案是使用“不可变(I)”属性在其中设置文件。因此,与其删除文件,不如清空它们。例如:

代码语言:javascript
复制
cd /var/lib/locales/supported.d/
rm  && touch  #  has been emptied
lsattr     # regular attributes
chattr +i  # adding (+) immutable
lsattr     # checking attributes

设置区域设置

设置和生成区域设置不会设置系统区域设置。以下任何命令都可以实现这一点。

代码语言:javascript
复制
echo LANG= | sudo tee /etc/locale.conf # reboot (might be ignored in Ubuntu)
localectl set-locale LANG=
票数 6
EN

Ask Ubuntu用户

发布于 2019-06-29 17:55:27

您应该编辑/etc/locale.gen并注释您不想要的区域设置。那就跑

代码语言:javascript
复制
sudo locale-gen

不存在任何名称为en的区域设置。您可能希望使用的是en_US.UTF-8,而不是en_US。(后者支持latin1编码。)

票数 6
EN

Ask Ubuntu用户

发布于 2021-11-27 18:43:30

Which语言环境安装在我的计算机上?

可以使用locale命令检查系统上生成和配置的区域设置:

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

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

Supported语言环境

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

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

代码语言:javascript
复制
en_US UTF-8

Error消息

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

代码语言:javascript
复制
locale: Cannot set LC_ALL to default locale: No such file or directory

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

代码语言:javascript
复制
LANG="en_US"
LANGUAGE="en_US:en"

Get处理不需要的地区数据--一步一步地

现在,我们知道了开始清理系统的区域信息所需的所有细节:

  1. 编辑/var/lib/locales/supported.d/中的地区文件(S),并删除所有不需要的地区(每行一个地区)
  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
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1154895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档