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

65

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

Хунли Лай
источник
Есть ли способ сделать это автоматически на основе назначенного IP-адреса сервера?
Совок
2
Установка Debian не локал стандартный способ : sudo dpkg-reconfigure locales.
Поль Ружье,

Ответы:

72

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

LANG="nl_NL.UTF-8"

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

# locale -a

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

# locale-gen

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

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

Дэвид Пашли
источник
9
/ var / lib / belocs / list не существует. Вам нужно отредактировать /etc/locale.gen или вместо этого запустить dpkg-переконфигурировать локали.
pgs
+1 этот ответ для описания locale-gen, но, как и в предыдущем комментарии, в моей системе нет такого файла, как / var / lib / belocs / list
telent
Мне понадобилось 5 часов, чтобы найти этот ответ, который в итоге оказался идеальным. Более того, он позволяет создавать псевдонимы: en_US UTF-8 и it_IT UFT-8 позволили мне иметь мои локали в UTF-8 по умолчанию, что замечательно, если у вас есть PHP-код, который зависит от локалей
Cec
Есть ли команда или пакет, который может редактировать и устанавливать содержимое / etc / default / locale?
Карл Моррисон
Смотрите ответ ниже от царя. Вы можете сделать это следующим образом: sed -i 's / ^ # * (en_US.UTF-8) / \ 1 /' /etc/locale.gen
Тобиас Гертнер
66

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

PGS
источник
Это только генерирует локали, но не устанавливает систему по умолчанию.
Дэвид Пашли
16
НЕТ, последний вопрос о локалях dpkg -configure - выбрать локаль по умолчанию.
Pgs
2
Я должен был запустить его sudoкак в sudo dpkg-reconfigure locales.
Алекс Юрша
Если это сервер, доступ к которому осуществляется через ssh, на вики-странице Debian в локалях рекомендуется оставить языковой стандарт по умолчанию равным NONE.
Поль Ружье,
1
Это было именно то, что мне нужно: установить все локали всего за несколько нажатий клавиш. Спасибо вам большое!
aexl
11

Ответы здесь неполные, как и в большинстве других. После объединения информации из нескольких мест для меня сработало (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

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

самодержец
источник
6

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

qris
источник
3

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

Самба
источник
1
Если в системе нет требуемой локали, setlocaleэто не сработает.
Крестный отец
1

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

aptitude install language-pack-en
valentt
источник
1

Для тех, кто, как и я, в 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локали и, наконец, набрать:

sudo dpkg-reconfigure locales

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

SebMa
источник