Как сделать локаль "de_DE.CP1252" доступной для "локали dpkg-configure"?

Я использую UB 16.04 LTS Server, и сегодня была выпущена и установлена ​​новая версия языкового пакета:

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

Я также использую PostgreSQL 11 с базами данных, опираясь на набор символов windows-1252 по историческим причинам:

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,

Другие вопросы по тегам