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

<p>я написал веб-приложение, для которого пользовательский интерфейс на голландском языке. я использую системные процедуры даты и времени для форматирования строк даты в приложении. тем не менее, строки даты, которые системные форматы представлены на английском языке, но я хочу, чтобы они были на голландском языке, поэтому мне нужно установить язык системы. как мне это сделать в debian? я пытался установить <code>lc\_all=nl\_nl</code> но, похоже, это не имеет никакого эффекта:</p><pre><code>$ date sat aug 15 14:31:31 utc 2009 $ lc\_all=nl\_nl date sat aug 15 14:31:36 utc 2009 </code></pre><p>я помню, что настройка lc\_all в моей настольной системе ubuntu работает нормально. нужно ли устанавливать дополнительные пакеты, чтобы сделать эту работу, или я делаю это совершенно неправильно?</p>

<p>правка <code>/etc/default/locale</code> и установите содержимое:</p><pre><code>lang="nl\_nl.utf-8" </code></pre><p>вы можете проверить, какие локали вы создали в данный момент, используя:</p><pre><code># locale -a </code></pre><p>вы можете генерировать больше, редактируя <code>/etc/locale.gen</code> и раскомментируйте строки для локалей, которые вы хотите включить. затем вы можете сгенерировать их, запустив:</p><pre><code># locale-gen </code></pre><p>вы можете найти список поддерживаемых локалей в <code>/usr/share/i18n/supported</code></p><p>более подробная информация доступна на <a href="http://wiki.debian.org/locale">вики debian</a> .</p>

<p>вам может потребоваться установить пакет <code>locales</code>. это спросит вас, какие локали генерировать. если он уже установлен, то <code>dpkg-reconfigure locales</code> позволит вам генерировать больше локалей.</p>

<p>ответы здесь неполные, как и в большинстве других. после объединения информации из нескольких мест для меня сработало (1) убедиться, что требуемая локаль была доступна (сгенерировать ее, если ее нет), затем (2) установить переменные среды, связанные с локалью, в желаемую локаль.</p><p>в моем случае мне нужно было <code>en\_us.utf-8</code> программно (то есть неинтерактивно), установленный в docker-контейнере. ff выполнил то, что мне нужно, но в интерактивной оболочке все должно работать нормально.</p><pre><code>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 </code></pre><p>на той же оболочке вам нужно будет сделать <code>source ~/.bashrc</code>, чтобы env vars вступили в силу немедленно. вы можете проверить правильность настройки локали, вызвав <code>locale</code>.</p><pre><code>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 </code></pre><p>было много записей вопросов и ответов по этому вопросу, но только некоторые из них были действительно полезными. кредит, где кредит должен:</p><ul> <li> <a href="https://unix.stackexchange.com/a/247019/21289">https://unix.stackexchange.com/a/247019/21289</a> </li> <li> <a href="https://perlgeek.de/en/article/set-up-a-clean-utf8-environment">https://perlgeek.de/en/article/set-up-a-clean-utf8-environment</a> </li> </ul>

<p>ни один из этих ответов не работал для меня на контейнере lxc, установленном с:</p><pre><code>lxc-create -n sse-master -t download -n sse-master -- \ -d debian -r jessie --arch i386 </code></pre><p>я всегда получал следующий вывод от <code>locale-gen</code>, то есть не генерирует никаких локалей (ни один не указан):</p><pre><code>$ 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. </code></pre><p>я также смог генерировать локали вручную следующим образом:</p><pre><code>sudo localedef -i en\_us -f utf-8 en\_us.utf-8 sudo localedef -i en\_gb -f utf-8 en\_gb.utf-8 </code></pre><p>но это не было постоянным решением: я обнаружил, что работает <code>locale-gen</code> без <code>--keep-existing</code> удалит все такие сгенерированные вручную локали, то есть каждую локаль, не указанную (и не закомментированную) в <code>/etc/locale.gen</code>.</p>

<p>для веб-приложения может быть лучше использовать <strong>setlocale</strong> () <em> внутри </em> программы, а не требовать, чтобы система по умолчанию локаль должна быть установлена соответствующим образом снаружи. менее свободные концы таким образом.</p>

<p>для тех, кто, как и я, на ubuntu 14.04 lts, почему-то не имеет <code>/etc/locale.gen</code> файл, вы можете добавить новую локаль в <code>/var/lib/locales/supported.d/local</code> и затем запустите:</p><p><code>sudo dpkg-reconfigure locales</code></p><p>вы также можете добавить французский (например) языковой стандарт таким образом (вместо редактирования <code>/var/lib/locales/supported.d/local</code>):</p><p><code>sudo locale-gen fr\_fr fr\_fr.utf-8</code></p><p>добавить и сгенерировать <code>iso-8859-1</code> а также <code>utf-8</code> кодовые наборы <code>fr\_fr</code> locale и, наконец, введите:</p><p><code>sudo dpkg-reconfigure locales</code></p><p>закончить работу</p>

<p>но сначала вам нужно установить необходимый языковой пакет. на моем немецком vps не было предустановленного пакета для английского языка. итак, сначала вы убедитесь, что он установлен:</p><pre><code>aptitude install language-pack-en </code></pre>