是否可以限制系统上的英语区域设置集?

是否可以限制系统上的英语区域设置集?

在 Debian 和 Ubuntu 上是否可以限制必须配置的区域设置?

我知道/var/lib/locales/supported.d/local/var/lib/locales/supported.d/en管理正在配置哪些区域设置,但在事后(即在 )后或多或少缺乏手动修改它,apt-get dist-upgrade我还没有找到任何方法将其限制为en_US.*所需的区域设置。

因此,每当软件包language-pack-enlanguage-pack-en-base触及时(从我所看到的来看,它们通常会同步更新),我会得到这样的信息:

Setting up language-pack-en (1:14.04+20150219) ...
Setting up language-pack-en-base (1:14.04+20150219) ...
Generating locales...
  en_AG.UTF-8... done
  en_AU.UTF-8... done
  en_BW.UTF-8... done
  en_CA.UTF-8... done
  en_DK.UTF-8... done
  en_GB.UTF-8... done
  en_HK.UTF-8... done
  en_IE.UTF-8... done
  en_IN.UTF-8... done
  en_NG.UTF-8... done
  en_NZ.UTF-8... done
  en_PH.UTF-8... done
  en_SG.UTF-8... done
  en_US.UTF-8... up-to-date
  en_ZA.UTF-8... done
  en_ZM.UTF-8... done
  en_ZW.UTF-8... done
Generation complete.

不幸的是,一些升级似乎覆盖了上述两个文件,从而重置了我对它们所做的修改。

相反,我们想看到的是:

Setting up language-pack-en (1:14.04+20150219) ...
Setting up language-pack-en-base (1:14.04+20150219) ...
Generating locales...
  en_US.UTF-8... up-to-date
Generation complete.

我怎样才能做到这一点?

答案1

与 Debian

你可以做:

dpkg-reconfigure -plow locales

使用Ubuntu

Debian 解决方案不适用于 Ubuntu,可能是因为该locales软件包来自langpack-locales源而不是glibceglibc。但您可以选择language-pack-*安装哪个包。

为了更精细的配置,您可能需要修改/var/lib/locales/supported.d目录下的文件(例如,/var/lib/locales/supported.d/en基于en- 的语言环境);例如,您可以删除与不需要的区域设置相对应的行。然后跑dpkg-reconfigure locales警告: 这些文件不是配置文件,这意味着您的更改可能会在dpkg软件包升级期间被覆盖。您可以通过告诉dpkg将覆盖转移到不同的文件来避免这种情况:

cp -a /var/lib/locales/supported.d/en /var/lib/locales/en.upstream
dpkg-divert --local --divert /var/lib/locales/en.upstream --add /var/lib/locales/supported.d/en

上面的转移代码故意将转移的文件放在supported.d目录之外,因为语言环境系统合并了全部目录中的文件supported.d

或者,您可以删除language-pack-*安装不需要的语言环境的软件包,并指定其他语言环境/var/lib/locales/supported.d/local(使用相同的格式);看到Ubuntu 关于(重新)生成语言环境的帮助了解更多信息。然而,这些language-pack-*包不仅编译语言环境,还提供翻译,您可能会错过它们。

答案2

添加@vinc17的答案:为了防止dpkg覆盖对文件的更改/var/lib/locales/supported.d/en,只需使用dpkg-divert,例如这样:

cp -a /var/lib/locales/supported.d/en /var/lib/locales/en.upstream
dpkg-divert --local --divert /var/lib/locales/en.upstream --add /var/lib/locales/supported.d/en

注意:上面的代码故意将转移的文件放在supported.d目录之外,因为语言环境系统合并了全部目录中的文件supported.d

答案3

解决方法。为了防止更改/var/lib/locales/supported.d/,请使用以下命令在其中设置文件“不可变 (i)” 属性。因此,不要删除文件,而是清空它们。例如(假定 root 权限):

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

扩展细节这里

相关内容