Я использую сервер 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
Я дополнительно использую 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
На самом деле, мои вопросы состоит из двух частей: конечная цель должна быть применяться localedef
чаще, чем необходимый и я думал что, делая мою локаль распознанной dpkg-reconfigure locales
решает это. К сожалению, это, кажется, не имеет место.
Следующее описание ТОЛЬКО для предоставления доступа к некоторой локали доступной для 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
.