Назад | Перейти на главную страницу

Как установить / изменить локаль в Debian?

Я написал веб-приложение с пользовательским интерфейсом на голландском языке. Я использую системные процедуры даты и времени для форматирования строк даты в приложении. Однако строки даты в системных форматах на английском языке, но я хочу, чтобы они были на голландском языке, поэтому мне нужно установить языковой стандарт системы. Как мне это сделать в Debian? Я пробовал установить LC_ALL=nl_NL но, похоже, это не имеет никакого эффекта:

$ date
Sat Aug 15 14:31:31 UTC 2009
$ LC_ALL=nl_NL date
Sat Aug 15 14:31:36 UTC 2009

Я помню, что настройка LC_ALL в моей настольной системе Ubuntu работает нормально. Нужно ли мне устанавливать дополнительные пакеты, чтобы эта работа работала, или я делаю это совершенно неправильно?

редактировать /etc/default/locale и установите для содержимого:

LANG="nl_NL.UTF-8"

Вы можете проверить, какие локали вы создали в настоящее время, используя:

# locale -a

Вы можете создать больше, отредактировав /etc/locale.gen и раскомментируя строки для локалей, которые вы хотите включить. Затем вы можете сгенерировать их, запустив:

# locale-gen

Вы можете найти список поддерживаемых локалей в /usr/share/i18n/SUPPORTED

Дополнительная информация доступна на Вики Debian.

Возможно, вам потребуется установить locales пакет. Это спросит вас, какие локали создавать. Если он уже установлен, то dpkg-reconfigure locales позволит вам создать больше языков.

Ответы здесь неполные, как и в большинстве других случаев. После сбора информации из нескольких мест у меня сработало следующее: (1) убедиться, что языковой стандарт, который я хотел, доступен (сгенерировать его, если его не было), затем (2) установить переменные среды, связанные с языковым стандартом, на желаемый языковой стандарт.

В моем случае мне понадобилось en_US.UTF-8 программно (то есть не интерактивно) устанавливается в контейнер докеров. FF выполнил то, что мне нужно, но он должен нормально работать в интерактивной оболочке.

apt-get update

# Install locales package
apt-get install -y locales

# Uncomment en_US.UTF-8 for inclusion in generation
sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen

# Generate locale
locale-gen

# Export env vars
echo "export LC_ALL=en_US.UTF-8" >> ~/.bashrc
echo "export LANG=en_US.UTF-8" >> ~/.bashrc
echo "export LANGUAGE=en_US.UTF-8" >> ~/.bashrc

В той же оболочке вам нужно будет сделать source ~/.bashrc чтобы env vars вступили в силу немедленно. Вы можете проверить правильность настройки локали, вызвав locale.

LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

На эту тему было много вопросов и ответов, но лишь немногие из них действительно были полезны. Кредит, по которому подлежит оплате:

Ни один из этих ответов не помог мне в контейнере LXC, установленном с:

lxc-create -n sse-master -t download -n sse-master -- \
    -d debian -r jessie --arch i386

Я всегда получал следующий вывод от locale-gen, т.е. не генерирует никаких локалей (не перечисленных):

$ sudo locale-gen
Generating locales (this might take a while)...
Generation complete.

Бег dpkg-reconfigure locales и выбор некоторых локалей не обновлялся /etc/locale.gen как я и ожидал.

Однако, когда я изменил этот файл вручную и раскомментировал нужные мне локали, тогда locale-gen начал работать исправно:

$ sudo locale-gen
Generating locales (this might take a while)...
  en_GB.UTF-8... done
  en_US.UTF-8... done
Generation complete.

Я также смог вручную сгенерировать локали следующим образом:

sudo localedef -i en_US -f UTF-8 en_US.UTF-8
sudo localedef -i en_GB -f UTF-8 en_GB.UTF-8

Но это не было постоянным решением: я обнаружил, что locale-gen без --keep-existing опция удалит все такие созданные вручную локали, то есть все локали, не перечисленные (и не прокомментированные) в /etc/locale.gen.

Для веб-приложения может быть лучше использовать setlocale() внутри программе, а не требовать, чтобы системный языковой стандарт по умолчанию был установлен надлежащим образом снаружи. Так будет меньше свободных концов.

Для тех, у кого, как и у меня, на Ubuntu 14.04 LTS почему-то нет /etc/locale.gen файл, вы можете добавить новую локаль в /var/lib/locales/supported.d/local а затем запустите:

sudo dpkg-reconfigure locales

Вы также можете добавить французский язык (например) таким же образом (вместо редактирования /var/lib/locales/supported.d/local):

sudo locale-gen fr_FR fr_FR.UTF-8

добавить и сгенерировать ISO-8859-1 и UTF-8 кодовые наборы fr_FR locale и, наконец, введите:

sudo dpkg-reconfigure locales

закончить работу

Но сначала вам нужно установить необходимый языковой пакет. На моем немецком VPS не было предустановленного английского языкового пакета. Итак, сначала вы убедитесь, что он установлен:

aptitude install language-pack-en