Как сделать локаль "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
,