Як встановити / змінити локаль на 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-адреси сервера?
Scoop

Відповіді:


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 / список не існує. Потрібно відредагувати /etc/locale.gen або запустити натомість dpkg-переконфігурувати локалі.
pgs

Отримайте +1 цю відповідь для опису
локального роду

На це мені знадобилося 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ви зможете генерувати більше локалів.


Це генерує лише локалі, а не встановлює системні настройки за замовчуванням.
Девід Пашлі

16
НІ, остаточне питання локалів перенастроювання dpkg полягає у виборі локалі за замовчуванням.
pgs

2
Мені довелося це запустити, sudoяк в sudo dpkg-reconfigure locales.
Олексій Юрша

Якщо це сервер, доступ до якого здійснюється через ssh, на сторінці вікі Debian у локалі рекомендується залишити локальний код за замовчуванням NONE.
Пол Рудьо

1
Це саме те, що мені було потрібно: встановіть усі локалі лише за кілька натискань клавіш. Дуже дякую!
aexl

11

Відповіді тут неповні, як і в більшості інших. Після з’єднання інформації з кількох місць, що для мене працювало, це (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

Було багато запитань і запитань щодо цієї теми, але лише кілька справді були корисними. Кредит, у якому належить отримати кредит:


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.


3

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


1
Якщо система не потребує потрібного локалу, setlocaleвона не працюватиме.
Хрещений батько

1

Але спочатку потрібно встановити необхідний мовний пакет. У моєму німецькому VPS не було встановлено пакету англійської мови. Тому спочатку перевірте, чи встановлено він:

aptitude install language-pack-en

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.