我使用 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
。