Из статьи вы узнаете как в Linux, а именно Ubuntu и Debian, настроить locale для системы в целом и для пользователей по отдельности.
Locale (локаль) – это региональные настройки операционной системы.
Каждая GNU/Linux система поставляется с конкретными региональными настройками. Эти настройки влияют на язык:
- интерфейса,
- сообщений об ошибках;
- справочной информации;
- вывода консольных утилит.
Но locale влияет не только на язык. Дополнительно это влияет на формат чисел, даты и времени, денежной валюты и другого.
Определение текущей locale в системе
Во-первых давайте определим с какими региональными настройками вы работаете в данный момент. Другими словами, какая locale сейчас используется в вашей linux системе. Для этого нужно выполнить команду locale без дополнительных параметров:
alex@s-ubu:~$ locale LANG=ru_RU.UTF-8 LANGUAGE= LC_CTYPE="ru_RU.UTF-8" LC_NUMERIC="ru_RU.UTF-8" LC_TIME="ru_RU.UTF-8" LC_COLLATE="ru_RU.UTF-8" LC_MONETARY="ru_RU.UTF-8" LC_MESSAGES="ru_RU.UTF-8" LC_PAPER="ru_RU.UTF-8" LC_NAME="ru_RU.UTF-8" LC_ADDRESS="ru_RU.UTF-8" LC_TELEPHONE="ru_RU.UTF-8" LC_MEASUREMENT="ru_RU.UTF-8" LC_IDENTIFICATION="ru_RU.UTF-8" LC_ALL=
Так как, в примере, мы выполнили команду под пользователем alex, то утилита покажет региональные настройки для этого пользователя.
Имя локали состоит из нескольких частей. Вначале двумя маленькими символами обозначается язык, затем после нижнего подчеркивания идет название страны. Дальше идет кодировка, в современном мире чаще всего используется кодировка UTD-8. Примеры локалей:
- ru_RU.UTF-8 – Русский Россия;
- ru_UA.UTF-8 – Русский Украина;
- en_US.UTF-8 – Английский США;
- en_GB.UTF-8 – Английский Великобритания.
Разберём вывод предыдущей команды.
LANG – системная локаль для этого пользователя содержит значение ru_RU.UTF-8.
Дальше идут переменные, которыми могут пользоваться некоторые утилиты или подсистемы, рассмотрим некоторые из них:
- LANGUAGE – список резервных языков для перевода. Если приложение умеет это использовать и у приложения нет локализации для определённой локали, то оно может использовать запасную локаль;
- LC_NUMERIC – формат чисел, например 100 000 /100.000 / 100,000;
- LC_MONETARY – валюта и денежное форматирование.
Эти и другие переменные используются различными утилитами и подсистемами. Но обычно нет смысла использовать разные локали для этих подсистем.
Список сгенерированных locales в системе
В системе можно использовать только сгенерированные локали. Посмотреть какие сейчас сгенерированы можно так:
alex@s-ubu:~$ locale -a C C.utf8 POSIX ru_RU.utf8
Логали: C, C.utf8, POSIX – это синонимы. Они являются локалями используемыми по умолчанию, если не задана никакая другая локаль.
В системе есть ещё одна локаль – ru_RU.utf8. Эта локаль была сгенерирована при установки системы.
А если добавим опцию -v, то дополнительно увидим описание по каждой locale:
alex@s-ubu:~$ locale -a -v locale: ru_RU.utf8 archive: /usr/lib/locale/locale-archive ------------------------------------------------------------------------------- title | Russian locale for Russia source | RAP address | Sankt Jorgens Alle 8, DK-1615 Kobenhavn V, Danmark email | bug-glibc-locales@gnu.org language | Russian territory | Russia revision | 1.0 date | 2000-06-29 codeset | UTF-8 locale: C.utf8 directory: /usr/lib/locale/C.utf8 ------------------------------------------------------------------------------- title | C locale email | bug-glibc-locales@gnu.org revision | 2.1 date | 2022-01-30 codeset | UTF-8
Так как локали C и POSIX это псевдонимы к C.utf8, то в этом выводе они исключаются.
Генерация новых locales
Список locales находятся в файле – /etc/locale.gen. А чтобы сгенерировать новую локаль нужно разкоментировать нужные локали в этом файле, а затем выполнить от суперпользователя команду locale-gen. Давайте попробуем сгенерировать locale en_US.utf8:
alex@s-ubu:~$ sudo nano /etc/locale.gen en_US.UTF-8 UTF-8 ru_RU.UTF-8 UTF-8 alex@s-ubu:~$ sudo locale-gen Generating locales (this might take a while)... en_US.UTF-8... done ru_RU.UTF-8... done Generation complete.
Кстати, если мы укажем использовать локаль, которую не сгенерировали. То команда locale сообщит нам об ошибке:
$ locale locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory LANG=fr_FR.utf8 LANGUAGE= LC_CTYPE="fr_FR.utf8" LC_NUMERIC="fr_FR.utf8" LC_TIME="fr_FR.utf8" LC_COLLATE="fr_FR.utf8" LC_MONETARY="fr_FR.utf8" LC_MESSAGES="fr_FR.utf8" LC_PAPER="fr_FR.utf8" LC_NAME="fr_FR.utf8" LC_ADDRESS="fr_FR.utf8" LC_TELEPHONE="fr_FR.utf8" LC_MEASUREMENT="fr_FR.utf8" LC_IDENTIFICATION="fr_FR.utf8" LC_ALL=
В выводе видно, что мы пытаемся использовать локаль fr_FR.utf8, но забыли его сгенерировать.
Настройка различных locales разным пользователям
Для начала, если не настраивать локаль отдельным пользователям, то все они будут использовать локаль прописанную в файле /etc/default/locale:
alex@s-ubu:~$ cat /etc/default/locale LANG=ru_RU.UTF-8
Из вывода видно что все пользователи будут использовать локаль ru_RU.UTF-8.
Если пользователю нужно использовать другую локаль, то можно для него переопределить переменную LANG. Для этого можно использовать файл .bashrc в его домашнем каталоге, например:
alex@s-ubu:~$ nano .bashrc LANG=en_US.utf8 alex@s-ubu:~$ su - alex alex@s-ubu:~$ locale LANG=en_US.utf8 LANGUAGE= LC_CTYPE="en_US.utf8" LC_NUMERIC="en_US.utf8" LC_TIME="en_US.utf8" LC_COLLATE="en_US.utf8" LC_MONETARY="en_US.utf8" LC_MESSAGES="en_US.utf8" LC_PAPER="en_US.utf8" LC_NAME="en_US.utf8" LC_ADDRESS="en_US.utf8" LC_TELEPHONE="en_US.utf8" LC_MEASUREMENT="en_US.utf8" LC_IDENTIFICATION="en_US.utf8" LC_ALL=
Теперь все пользователи, кроме alex будут использовать локаль ru_RU.utf8, а alex будет использовать локаль en_US.utf8.
Перенастройка locales с помощью одной команды
В самом конце я покажу команду, с помощью которой можно сгенерировать нужные локали и убрать не нужные, а также выставить локаль по умолчанию. Это команда dpkg-reconfigure locales и запускать её нужно с правами администратора:
$ sudo dpkg-reconfigure locales
После выполнения команды вы увидите псевдографический интерфейс:
После выбора locales для генерации, вам нужно будет выбрать locale по умолчанию, которая пропишется в файл /etc/default/locale:
Итог
Мы познакомились с настройками locale в linux на примерах операционных систем Debian и Ubuntu.
Изучили команды:
- locale – для просмотра используемой и сгенерированных локалей;
- locale-gen – для генерации локалей;
- dpkg-reconfigure locales – для генерации локалей и установки локали по умолчанию.
А также узнали про системные файлы:
- /etc/default/locale – в нём прописана локаль по умолчанию;
- /etc/locale.gen – здесь содержится список доступных локалей для генерации;
- .bashrc – с помощью этого файла, в домашнем каталоге пользователя, можно переопределить локаль для пользователя.
Сводка
Имя статьи
Региональные настройки (locale) в Linux
Описание
Из статьи вы узнаете как в Linux, а именно Ubuntu и Debian, настроить locale для системы в целом и для пользователей по отдельности
Мы покажем вам, как настроить языковой стандарт системы на Debian 9. Системный языковой стандарт определяет язык и настройки конкретной страны для программ, запущенных в вашей системе и сеансах оболочки. Вы можете использовать локаль, чтобы увидеть время и дату, цифры, валюту и другие значения, отформатированные в соответствии с вашим языком или страной. Настройка языкового стандарта системы на Debian 9 – довольно простая задача, и ее можно настроить менее чем за 10 минут.
1. Проверьте текущий языковой стандарт системы на Debian 9
Первое, что вам нужно сделать, это подключиться к вашему серверу Linux через SSH. Вы можете войти в систему с правами root или если у вас есть системный пользователь с привилегиями sudo, вы можете войти в систему как этот пользователь. После входа в систему выполните следующую команду, чтобы проверить текущий язык системы:
locale
Вывод должен быть похож на приведенный ниже:
# locale LANG= LANGUAGE= 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
2. Проверьте, какие языковые системы включены
С помощью команды locale
вы можете видеть, какие языки используются в настоящее время для вашего активного сеанса терминала. В выводе выше устанавливается языковой стандарт системы.en_US.UTF-8
.
Перед настройкой другой языковой системы вы можете сначала проверить, какие языки включены и готовы к использованию на вашем Debian 9 VPS. Для этой цели вы можете использовать следующую команду:
locale -a
Вывод должен быть похож на приведенный ниже:
# locale -a С C.UTF-8 POSIX en_US.utf8
3. Создайте языковую систему для региона, в которой вы нуждаетесь
Если у вас нет языкового стандарта, который необходимо включить в вашей системе, его можно просто сгенерировать с помощью команды locale-gen
. Просто запустите следующую команду, чтобы создать язык для нужного вам региона:
dpkg-reconfigure locales
Выберите языковой стандарт, который вы хотите включить, и нажмите.OK
.
После нажатия OK
вы увидите следующий результат:
Generating locales (this might take a while)... en_GB.UTF-8... done en_US.UTF-8... done Generation complete.
4. Проверьте, включен ли языковой стандарт системы
Это подтверждает, что выбранный вами язык создан, и вы можете использовать ее в своей системе. Чтобы убедиться, что он включен, вы можете снова запустить следующую команду:
# locale -a С C.UTF-8 POSIX en_GB.utf8 en_US.utf8
Результат должен содержать язык системы, который вы выбрали и сгенерировали с помощью предыдущей команды.
5. Изменение языка вручную
Редактирование файла локали очень просто. Вы можете использовать свой любимый текстовый редактор для редактирования файла /etc/default/locale
. Если этот файл не существует, то для вашей системы в настоящий момент не устанавливается локаль. Вы можете создать его вручную и включить язык для своей системы. Вывод ниже показывает, как должен выглядеть файл:
cat /etc/default/locale # File generated by update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8
Замените язык en_US.UTF-8
, который хотите активировать в вашей системе, и сохраните файл. После сохранения файла выйдите из текущего сеанса, затем войдите в систему или откройте новый терминал, и ваш новый выбранный язык будет активным.
Примечание
Этот файл примера устанавливает переменную LANG только для вашей системы, которая охватывает язык для всех частей системы.
6. Изменение языка с помощью команды update-locale
Другим способом изменения языкового стандарта в вашей системе является использование команды update-locale
. Например, чтобы установить языковой стандарт системы en_GB.utf8
, выполните следующую команду:
update-locale LANG=en_GB.utf8
Снова перезапустите сеанс и проверьте текущий активный язык, чтобы убедиться, что тот, который вы хотите, настроен правильно.
# locale LANG=en_GB.utf8 LANGUAGE= LC_CTYPE="en_GB.utf8" LC_NUMERIC="en_GB.utf8" LC_TIME="en_GB.utf8" LC_COLLATE="en_GB.utf8" LC_MONETARY="en_GB.utf8" LC_MESSAGES="en_GB.utf8" LC_PAPER="en_GB.utf8" LC_NAME="en_GB.utf8" LC_ADDRESS="en_GB.utf8" LC_TELEPHONE="en_GB.utf8" LC_MEASUREMENT="en_GB.utf8" LC_IDENTIFICATION="en_GB.utf8" LC_ALL=
7. Изменение языкового стандарта для определенных частей операционной системы
Обновление переменной LANG
позволяет сразу изменить системный язык для всей системы. Если вы хотите настроить локаль для определенной части системы, вы должны отредактировать соответствующую переменную. Вот несколько полезных переменных:
- LC_MESSAGES – устанавливает язык для системных сообщений.
- LC_RESPONSE – устанавливает язык для диалогов, отображаемых на экране (например, диалоги «Да» или «Нет»).
- LC_NUMERIC – устанавливает формат чисел в зависимости от региона (например, десятичные числа и запятые, которые переключаются в некоторых странах).
- LC_TIME – устанавливает формат времени и даты.
- LC_COLLATE – устанавливает алфавитный порядок для строк (например, имена файлов).
- LC_MONETARY – устанавливает имя и символ валюты в зависимости от страны.
- LC_NAME – устанавливает формат имен (например, фамилия, отображаемая перед первым именем).
Для получения списка всех доступных переменных вы можете проверить справочную страницу системного времени по ссылке http://man7.org/linux/man-pages/man7/locale.7.html.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
В наших материалах тема региональных настроек Linux-систем ранее почти не поднималась. Подразумевалось, что система устанавливается читателями самостоятельно и все эти вопросы уже решены на стадии установки. Но бывают ситуации, когда нужно работать с уже готовой системой, например, VPS у зарубежного провайдера или в облачных системах типа Amazon или Azure. В этом случае появляется необходимость настроить систему для использования родного языка и привычных региональных настроек.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Начнем мы с одного распространенного заблуждения: очень часто под локализацией системы подразумевают только изменение языка интерфейса системы, забывая об остальных настройках. В тоже время локализация системы — это не столько язык интерфейса, вы можете оставить его английским или любым иным, по вашему пожеланию, а способность системы полноценно работать с документами и системами, использующими ваш родной язык.
Это, в первую очередь, поддержка символов национального алфавита, кодовых страниц и раскладок клавиатуры, форматов чисел, а также настроек даты и времени. Если данные настройки не выполнить или выполнить неправильно, то имена файлов и содержимое документов с использованием символов отличных от стандартного латинского алфавита могут быть искажены или испорчены. Также масса проблем может возникнуть в дальнейшем, например, при переходе на локализованную систему, когда имена уже существующих файлов или ссылок на них могут оказаться неверными или вовсе недействительными.
Ниже на рисунке прекрасный пример того, что бывает, если на нелокализованный сервер скриптом были залиты файлы с именами, содержащими национальные символы, в данном случае кириллицу.
При этом сам скрипт, в данном случае CMS, функционирует нормально и при скачивании с сайта файлы имеют нормальные имена на кириллице, но с ними практически невозможно работать на сервере, так как непонятно, что это за файлы (вместо имен кубики), и нет возможности скачать их на Windows-систему. Переименовать файлы также нет возможности, так как сразу получим массу битых ссылок по всему сайту.
Поэтому, самым правильным решением будет сразу же настроить сервер на работу с нужной локализацией и снять целый пласт потенциальных проблем, тем более, что сделать это несложно.
Debian
Для правильного отображения символов национальных алфавитов в определенной кодировке в Linux-системах предназначены локали (locales), узнать какие локали уже установлены в системе можно командой:
locale -a
Обычно установлена и используется английская локаль en_US.utf8, однако, если вы, например, приобрели VPS в Германии, может присутствовать только национальная локаль, в этом случае, кроме русской, также рекомендуется установить английскую локаль.
Для генерации и настройки локалей используйте команду:
dpkg-reconfigure locales
Откроется псевдографическая утилита, которая предложит выбрать используемые локали, добавляем ru_RU.utf8
Затем укажите используемую по умолчанию локаль, тем самым установив язык системы:
Большинство «инструкций» в интернете на этом заканчиваются, но установить локаль недостаточно, нужно еще настроить консоль, т.е. ту среду ввода-вывода с которой вы взаимодействуете. Иначе вы увидите примерно такую картину:
Для настройки консоли запустите следующую утилиту:
dpkg-reconfigure console-setup
Прежде всего зададим кодировку консоли, в современном Linux это UTF-8.
Затем используемые наборы символов, нам нужен комбинированный набор Latin; Slavic Cyrillic; Greek.
И используемый шрифт, здесь посоветовать что-то однозначно нельзя и следует исходить из личных предпочтений, в любом случае выбор можно всегда изменить, запустив утилиту повторно.
Ниже, чтобы облегчить вам выбор, представлены образцы шрифтов:
Остальные настройки, вроде размера шрифта и т.п. не представляют сложности и могут быть оставлены по умолчанию или выставлены в соответствии с собственными предпочтениями. Теперь можно выйти из системы и войти повторно или перезагрузить ее. После этого основным языком системы будет русский и символы кириллицы будут отображаться корректно.
Следующим шагом следует настроить клавиатуру:
dpkg-reconfigure keyboard-configuration
Выбираем тип клавиатуры, по умолчанию это 105-клавишная международная, менять эту настройку без особой необходимости не следует.
Так как система изначально была установлена с локалью en_US, то нам предлагаются американские раскладки, выбираем Другая.
Дальше проще: Страна — Русская и Раскладка — Русская.
Затем выбираем сочетание клавиш для переключения раскладок и отвечаем еще на ряд вопросов, отвечать на который можете по своему усмотрению. Советуем не спешить, там есть интересные возможности, например, клавиша временного переключения между раскладками:
Остался последний штрих — настройки даты и времени:
dpkg-reconfigure tzdata
И устанавливаем текущий часовой пояс, после чего система автоматически переведет часы.
Более подробно о соответствии пунктов tzdata и актуальных часовых поясов РФ можно прочитать в нашей статье: Перевод часов в РФ 26 октября 2014 года — проблемы и решения.
Ubuntu Server
В Ubuntu Server команда dpkg-reconfigure locales не имеет псевдографического интерфейса и при запуске настраивает уже сгенерированные локали. Поэтому придется нужные настройки выполнить вручную, прежде всего сгенерируем русскую локаль (здесь и далее обращаем внимание на регистр команд):
locale-gen ru_RU.utf8
Затем зададим локаль по умолчанию:
update-locale LANG=ru_RU.UTF8
После чего выполним их настройку:
dpkg-reconfigure locales
Следующим шагом будет настройка консоли:
dpkg-reconfigure console-setup
Здесь все настройки аналогичны Debian, выбираем кодировку, набор символов и настраиваем шрифты.
Теперь можно выйти и повторно войти в систему (или перезагрузиться), чтобы продолжить дальнейшую настройку на русском языке. Для полноценной локализации потребуется настроить клавиатуру:
dpkg-reconfigure keyboard-configuration
Мы не будем подробно останавливаться на настройках, так как работа этой утилиты подробно описана выше, в разделе о Debian.
Временные зоны также настраиваются аналогично командой:
dpkg-reconfigure tzdata
Как видим, локализация системы не представляет абсолютно никакой сложности и выполняется в считанные минуты, позволяя снять целый ряд потенциальных проблем, решить которые впоследствии будет гораздо труднее.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Asked
7 years, 5 months ago
Viewed
34k times
How can I set English as a default language in Debian ?
I’ve installed Debian in a different language.
$ sudo update-locale LANG=en_US.UTF-8 LANGUAGE=en_US
update-locale: Error: invalid locale settings: LANGUAGE=en_US LANG=en_US.UTF-8
Thomas Dickey
73.1k9 gold badges166 silver badges261 bronze badges
asked Aug 19, 2015 at 19:42
Using sudo dpkg-reconfigure locales
should work.
answered Aug 19, 2015 at 20:01
vlpvlp
2511 silver badge6 bronze badges
2
Edit file:
# vim /etc/default/locale
and write the following uncommented line:
# File generated by update-locale
LANG=en_US.UTF-8
and then comment the current uncommented lines and uncomment the line with en_US.UTF-8
(in the same file):
# en_US.ISO-8859-15 ISO-8859-15
en_US.UTF-8 UTF-8
# en_ZA ISO-8859-1
Save file and run:
# locale-gen
and restart the terminal.
For me, these steps work. I hope it helps you too.
answered Aug 31, 2019 at 22:00
simhumilecosimhumileco
4595 silver badges13 bronze badges
3
Can you start with the output of env | grep LANG
? Make sure those all point to the proper lang/country, then do the dpkg command as mentioned by @vlp
answered Aug 19, 2015 at 20:19
Jesse KJesse K
3611 silver badge10 bronze badges
Check the language environment variable: LC_LANG
.
An easier way is to set the LC_ALL
or LC_*
variable to the value en_GB.UTF-8
.
Jeff Schaller♦
65.2k34 gold badges106 silver badges241 bronze badges
answered Aug 19, 2015 at 20:43
SamanSaman
3712 gold badges5 silver badges13 bronze badges
Brief: Here’s a quick tutorial that shows the steps for changing the locales on Ubuntu and other Linux distributions from the command line.
It’s been some time since I wrote something on It’s FOSS. The truth is that I’ve been writing for a Spanish version of It’s FOSS. If you’ve not visited it and/or you’re a Spanish speaker, please visit It’s FOSS en Español and check all the Linux content in Spanish.
You may be wondering why I’m sharing this fact with you. It’s because this post includes this new page as an example.
At the time of doing a clean installation of your favorite Linux distro, the system asks you to choose a main language. Even though it’s not frequent, some people consider changing that language to a new one later on, like me for example.
See, I have to take screenshots in both Spanish (for It’s FOSS en Español) and in English (for It’s FOSS). This becomes a problem, because I have only one computer, and changing the user is not a fast solution for me.
That’s why I’d like to share with you this quick tip, where I’ll show you how to change your main system language with two simple lines in the terminal.
Let’s begin!
Changing Linux system language from the terminal
Let’s suppose you want to change your main language from English to Spanish.
Verify which language you have set as default (main language). For this, let’s use the locale command.
locale
You should see something like this.
[email protected]:~$ locale
LANG=en_US.UTF-8
LANGUAGE=
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=
Here you can see that the main language is English. Now to change it, use the dpkg command in this fashion:
sudo dpkg-reconfigure locales
Once you run the command before, you should see the next screen in your terminal.
Here, you should move using the up and down arrow until you reach the desired language. In my case, I desire Spanish, and more specific, Mexican Spanish because I’m Mexican.
Not all languages may have the options, but if yours have, opt for UTF-8.
Once your language has been found, press the SPACE KEY to mark it and then ENTER.
Finally, select this new language as your default by moving to it using the arrow key and pushing the ENTER KEY, in the last windows.
Once done, you should see a message like this in your terminal:
Generating locales (this might take a while)...
en_US.UTF-8... done
es_MX.UTF-8... done
Generation complete.
And that’s all! Now you’re able to change your default language as many times you want directly from the terminal.
Please let us know if you have any doubt about this topic in the comments section. Good look!
Brief: Here’s a quick tutorial that shows the steps for changing the locales on Ubuntu and other Linux distributions from the command line.
It’s been some time since I wrote something on It’s FOSS. The truth is that I’ve been writing for a Spanish version of It’s FOSS. If you’ve not visited it and/or you’re a Spanish speaker, please visit It’s FOSS en Español and check all the Linux content in Spanish.
You may be wondering why I’m sharing this fact with you. It’s because this post includes this new page as an example.
At the time of doing a clean installation of your favorite Linux distro, the system asks you to choose a main language. Even though it’s not frequent, some people consider changing that language to a new one later on, like me for example.
See, I have to take screenshots in both Spanish (for It’s FOSS en Español) and in English (for It’s FOSS). This becomes a problem, because I have only one computer, and changing the user is not a fast solution for me.
That’s why I’d like to share with you this quick tip, where I’ll show you how to change your main system language with two simple lines in the terminal.
Let’s begin!
Changing Linux system language from the terminal
Let’s suppose you want to change your main language from English to Spanish.
Verify which language you have set as default (main language). For this, let’s use the locale command.
locale
You should see something like this.
[email protected]:~$ locale
LANG=en_US.UTF-8
LANGUAGE=
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=
Here you can see that the main language is English. Now to change it, use the dpkg command in this fashion:
sudo dpkg-reconfigure locales
Once you run the command before, you should see the next screen in your terminal.
Here, you should move using the up and down arrow until you reach the desired language. In my case, I desire Spanish, and more specific, Mexican Spanish because I’m Mexican.
Not all languages may have the options, but if yours have, opt for UTF-8.
Once your language has been found, press the SPACE KEY to mark it and then ENTER.
Finally, select this new language as your default by moving to it using the arrow key and pushing the ENTER KEY, in the last windows.
Once done, you should see a message like this in your terminal:
Generating locales (this might take a while)...
en_US.UTF-8... done
es_MX.UTF-8... done
Generation complete.
And that’s all! Now you’re able to change your default language as many times you want directly from the terminal.
Please let us know if you have any doubt about this topic in the comments section. Good look!
Note: Some of the commands below require root privileges, consider the use of sudo
.
Basic info
According to man locale-gen
, locales are set in several files.
/etc/locale.gen
The main configuration file, which has a simple format: every line that is not empty and does not begin with a # is treated as a locale definition that is to be built.
/var/lib/locales/supported.d/
A directory containing locale.gen snippets provided by language-pack packages. Do not edit these manually, they will be overwritten on package upgrades.
Comprehensive details on locales at the Arch Wiki.
Checking locales and the locale
To check the (already) generated locales, run any of the following commands (with minor output differences).
locale -a
localedef --list-archive
localectl list-locales
To check the currently used locale, run any of the following commands (with minor output differences).
locale
localectl
Setting and generating (new) locales
Locales are typically set by uncommenting lines in /etc/locale.gen
, after which running locale-gen
is required.
nano /etc/locale.gen # uncomment desired lines (locales)
locale-gen
This will generate locales files for each uncommented line in /etc/locale.gen
(and under /var/lib/locales/supported.d/
), whether they were previously generated or not.
Alternatively, the command
locale-gen <locale>
will uncomment the corresponding line in locale-gen
while generating the desired locale and only this one.
Removing locales
To remove locales in /etc/locale.gen
, simply comment the desired lines and regenerate the locales using locale-gen
. The command locale-gen --purge <locale>
doesn’t do what the modifier suggests.
To remove locales under /var/lib/locales/supported.d/
is trickier. Since any file /var/lib/locales/supported.d/<code>
depends on the package language-pack-<code>-base
, any change on the former will be restored when the latter is updated.
Workaround. To prevent changes under /var/lib/locales/supported.d/
, set files in it with the «immutable (i)» attribute. So instead of removing files, empty them. For instance:
cd /var/lib/locales/supported.d/
rm <code> && touch <code> # <code> has been emptied
lsattr <code> # regular attributes
chattr +i <code> # adding (+) immutable
lsattr <code> # checking attributes
Setting the locale
Setting and generating locales does not set the system locale. Any of the following commands achieves this.
echo LANG=<code> | sudo tee /etc/locale.conf # reboot (might be ignored in Ubuntu)
localectl set-locale LANG=<code>