it-swarm-ru.tech

Как установить / изменить локаль в 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 работает нормально. Нужно ли устанавливать дополнительные пакеты, чтобы сделать эту работу, или я делаю это совершенно неправильно?

67
Hongli Lai

Правка /etc/default/locale и ​​установите содержимое:

LANG="nl_NL.UTF-8"

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

# locale -a

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

# locale-gen

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

Более подробная информация доступна на вики Debian .

77
David Pashley

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

68
pgs

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

В моем случае мне нужно было en_US.UTF-8 программно (то есть неинтерактивно), установленный в Docker-контейнере. 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

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

17
Czar

Ни один из этих ответов не работал для меня на контейнере 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.

6
qris

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

3
SamB

Для тех, кто, как и я, на 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

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

1
SebMa

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

aptitude install language-pack-en
1
valentt