如何使语言环境“de_DE.CP1252”可用于“dpkg-reconfigure locales”?

如何使语言环境“de_DE.CP1252”可用于“dpkg-reconfigure locales”?

我使用 UB 16.04 LTS 服务器,今天新版本的区域设置-软件包已发布并安装:

Start-Date: 2019-02-21  09:44:05
Commandline: /usr/bin/apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold dist-upgrade
Upgrade: [...], locales:amd64 (2.23-0ubuntu10, 2.23-0ubuntu11), [...]
End-Date: 2019-02-21  09:44:45

windows-1252另外,由于历史原因,我还使用依赖字符集的数据库 PostgreSQL 11 :

Name  |  Owner   | Encoding |   Collate    |    Ctype     |   Access[...]
------+----------+----------+--------------+--------------+--------------
[...] | postgres | WIN1252  | de_DE.CP1252 | de_DE.CP1252 |

为了使其可用,使用以下命令:

localedef -f CP1252 -i /usr/share/i18n/locales/de_DE /usr/lib/locale/de_DE.CP1252

而使用locale-gen则会出现以下错误:

locale-gen de_DE.CP1252
Error: 'de_DE.CP1252' is not a supported language or locale

现在的问题是,很可能在locales安装了新的包之后,我手动添加的包被自动删除,并且依赖该语言环境的数据库的访问失败:

2019-02-21 09:42:45.109 CET [27039] FATAL:  Datenbank-Locale ist inkompatibel mit Betriebssystem
2019-02-21 09:42:45.109 CET [27039] DETAIL:  Die Datenbank wurde mit LC_COLLATE »de_DE.CP1252« initialisiert, was von setlocale() nicht erkannt wird.

据我了解,所有被识别和启用的语言环境dpkg-reconfigure locales都已被保留,而我的自定义语言环境未列出。

我猜应用程序提供了文件中的所有语言环境/usr/share/i18n/SUPPORTED?我是否也需要手动添加自定义语言环境?类似下面的代码似乎不起作用,新行未显示:

de_DE.CP1252 CP1252
de_DE.UTF-8 UTF-8

答案1

实际上,我的问题包括两个部分:最终目标是不需要localedef比必要的更频繁地应用,我认为让我的语言环境被识别可以dpkg-reconfigure locales解决这个问题。遗憾的是,事实似乎并非如此。

dpkg-重新配置区域设置

以下描述只是为了使某些语言环境可用dpkg-reconfigure locales,它不能完全解决我的问题,我在另一个问题中提到过。在我执行了以下所述步骤后,每次执行时,创建的目录localedef /usr/share/i18n/locales/de_DE /usr/lib/locale/de_DE.CP1252仍然会被删除。dpkg-reconfigure locales

另一个答案该文件引起了/etc/locale.gen我的注意,其中包含以下文档:

# This file lists locales that you wish to have built. You can find a list
# of valid supported locales at /usr/share/i18n/SUPPORTED, and you can add
# user defined locales to /usr/local/share/i18n/SUPPORTED. If you change
# this file, you need to rerun locale-gen.

因此我创建了/usr/local/share/i18n/SUPPORTED以下条目并dpkg-reconfigure locales包含了我感兴趣的语言环境:

de_DE.CP1252 CP1252

在此处输入图片描述

该文件/etc/locale.gen随后也包含我的语言环境作为最后一行:

# zu_ZA.UTF-8 UTF-8
de_DE.CP1252 CP1252

对于该文件中的所有其他行,禁用我的语言环境也会dpkg-reconfigure locales将该行更改为注释:

# zu_ZA.UTF-8 UTF-8
# de_DE.CP1252 CP1252

因此,重要的似乎是在文件中提供语言环境,/usr/local/share/i18n/SUPPORTED而不是在包中默认提供/usr/share/i18n/SUPPORTED

相关内容