Rya*_*yan 4 ubuntu localization
我不小心添加了一个语言环境,例如 sudo locale-gen zh_TW
例如语言环境 -a
zh_TW
Run Code Online (Sandbox Code Playgroud)
但是如何去除呢?
我的机器上安装了哪些语言环境?
您可以使用 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)
-
摆脱不需要的区域设置数据 - 一步一步
现在我们知道了开始清理系统区域设置信息的所有必要细节:
/var/lib/locales/supported.d/,并删除所有不需要的区域设置(每行一个区域设置)/etc/default/locale(参见上面的示例)rm -rfv /usr/lib/locale/*locale-gen就这样!重新启动计算机以使更改生效。然后运行上面的一个或多个区域设置命令示例,以确保结果符合预期。
-
参考:
我认为您可以通过编辑/var/lib/locales/supported.d/local和删除该语言环境来做到这一点。然后运行locale-gen以重新生成已编译的语言环境。
注意:下面的一些命令需要 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)
| 归档时间: |
|
| 查看次数: |
7037 次 |
| 最近记录: |