Я написал веб-приложение с пользовательским интерфейсом на голландском языке. Я использую системные процедуры даты и времени для форматирования строк даты в приложении. Однако строки даты в системных форматах на английском языке, но я хочу, чтобы они были на голландском языке, поэтому мне нужно установить языковой стандарт системы. Как мне это сделать в 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