Для настройки локалей я сначала запускаю сценарий sed , который создаст новую копию файла /etc/locale.gen на основе содержимого файла / usr / share / i18n / SUPPORTED. Каждая строка из входного файла будет скопирована, но она будет превращена в комментарий, если она не является записью языкового стандарта UTF-8 для языка, который я хочу сделать доступным в моей системе (например, английский, голландский, французский, и немецкий)
sed --regexp-extended --expression='
1 {
i\
# 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.\
\
}
/^(en|nl|fr|de)(_[[:upper:]]+)?(\.UTF-8)?(@[^[:space:]]+)?[[:space:]]+UTF-8$/! s/^/# /
' /usr/share/i18n/SUPPORTED > /etc/locale.gen
Затем я устанавливаю язык среды по умолчанию в базе данных debconf, например, на британский английский :
debconf-set-selections <<< 'locales locales/default_environment_locale select en_GB.UTF-8'
Затем я удаляю существующий файл / etc / default / locale (просто чтобы убедиться, что его старое содержимое не будет мешать моим новым настройкам), и запускаю команду dpkg-reconfigure, чтобы сгенерировать все локали, выбранные сценарием sed и создать новый файл '/ etc / default / locale' с помощью только одной записи, чтобы установить для переменной 'LANG' выбранную локаль среды по умолчанию:
rm --force --verbose /etc/default/locale
dpkg-reconfigure --frontend=noninteractive locales
Затем, в зависимости от моих требований, я могу захотеть запустить несколько команд update-locale , чтобы переопределить, например, переменные, которые влияют на форматирование значений, и установить для них другой языковой стандарт (например, ирландский английский ):
update-locale LC_NUMERIC='en_IE.UTF-8'
update-locale LC_TIME='en_IE.UTF-8'
update-locale LC_MONETARY='en_IE.UTF-8'
update-locale LC_PAPER='en_IE.UTF-8'
update-locale LC_NAME='en_IE.UTF-8'
update-locale LC_ADDRESS='en_IE.UTF-8'
update-locale LC_TELEPHONE='en_IE.UTF-8'
update-locale LC_MEASUREMENT='en_IE.UTF-8'
update-locale LC_IDENTIFICATION='en_IE.UTF-8'
(Я мог бы указать все эти параметры при одном вызове команды update-locale , но, очевидно, порядок, в котором записи записываются в файл '/ etc / default / locale', непредсказуем, если я это сделаю. предпочитаю, чтобы они всегда были в одном и том же порядке, поэтому я генерирую их один за другим.)
И, наконец, я могу захотеть запустить команду update-locale в последний раз, чтобы установить переменную LANGUAGE (т. Е. Список языков, на которых я хочу отображать переводимые текстовые сообщения):
update-locale LANGUAGE='en_GB:en_US:en'
File "/usr/share/apt-listchanges/ALChacks.py", line 32, in <module> sys.stderr.write(_("Can't set locale; make sure $LC_* and $LANG are correct!\n"))
...