Установите пользовательские локали в Gnome3 (на Fedora 20)

Я создал свои собственные пользовательские locale и поместил их в /etc/locale.conf который успешно вступает в силу, если я /etc/locale.conf систему на виртуальной консоли (Ctrl + Alt + F2). Однако в моей сессии Gnome3 эти переменные не заданы. Для терминальных приложений я мог просто разместить их в .bashrc но это не поможет мне с графическими приложениями, такими как Thunderbird и Pidgin.

Я попытался следовать этим подсказкам: Настройки locale в инициализации оболочки, не используемые сеансом GNOME, и даже эмулируют ошибку в Locale – ArchWiki , создав файл .pam_environment , но языковые настройки по-прежнему установлены Gnome3. В настройках Gnome есть диалог конфигурации, но он позволяет устанавливать очень ограниченный набор предопределенных сочетаний locale и не настраивать их.

Соответствующие файлы в моем домашнем каталоге:

 user@localhost:~$ ls -lah .dmrc .pam_environment .session .xsession .xsessionrc lrwxrwxrwx. 1 user user 16 12. Jun 08:57 .dmrc -> /etc/locale.conf lrwxrwxrwx. 1 user user 16 11. Jun 20:23 .pam_environment -> /etc/locale.conf lrwxrwxrwx. 1 user user 16 12. Jun 09:09 .session -> /etc/locale.conf lrwxrwxrwx. 1 user user 16 12. Jun 09:07 .xsession -> /etc/locale.conf lrwxrwxrwx. 1 user user 9 13. Jun 11:22 .xsessionrc -> .xsession -rw-rw-r--. 1 user user 66 13. Jun 11:13 .profile user@localhost:~$ cat .profile source /etc/locale.conf 

Содержимое /etc/locale.conf :

 LANG="en_US.utf8" LC_TIME="de_MY.utf8" # NB: de_MY LC_MONETARY="de_DE.utf8" LC_PAPER="de_DE.utf8" LC_NAME="de_DE.utf8" LC_ADDRESS="de_DE.utf8" LC_TELEPHONE="de_DE.utf8" LC_MEASUREMENT="de_DE.utf8" LC_IDENTIFICATION="de_DE.utf8" 

Кто-нибудь знает, как установить пользовательские locale в Gnome3?

Исходная информация

Я протестировал решение на Fedora 21 с помощью GNOME Shell 3.14.4, но я считаю, что он может быть применен и к другим версиям.

Первое, что нужно понять, это то, что среда рабочего стола GNOME переопределяет общесистемные определения локали и, следовательно, не влияет на /etc/locale.conf . Кроме того, могут быть приложения, которые имеют собственную конфигурацию локали и вообще не используют настройки системы или GNOME. В этом руководстве я опишу способ настройки параметров языкового стандарта в соответствии с вашими потребностями и GNOME, и система будет согласована с точки зрения локали.


Проверка текущего состояния локали

Общесистемные настройки

Руководство пользователя системного администратора Fedora 21 :

Общесистемные настройки локали хранятся в файле /etc/locale.conf , который читается при начальной загрузке с помощью демона systemd . Настройки локали, настроенные в /etc/locale.conf , наследуются каждой службой или пользователем, если отдельные программы или отдельные пользователи не переопределяют их.

Чтобы увидеть текущий статус локали, вы можете запустить:

 $ localectl status System Locale: LANG=en_US.UTF-8 LC_NUMERIC=en_US.UTF-8 LC_TIME=en_US.UTF-8 LC_MONETARY=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_MEASUREMENT=en_US.UTF-8 VC Keymap: us X11 Layout: us 

Настройки GNOME

 $ gsettings get org.gnome.system.locale region 'en_US.UTF-8' 

GNOME имеет только одну настройку. Давая быстрый взгляд на исходный код gnome-control-center, кажется, что когда set_localed_locale() функция set_localed_locale() , она устанавливает все следующие категории (LC_TIME, LC_NUMERIC, LC_MONETARY, LC_MEASUREMENT, LC_PAPER) в одну и ту же локаль, определенную в org.gnome.system.locale region .

Смешение разных настроек языкового стандарта кажется невозможным без создания пользовательской локали, но, к счастью, это не очень сложная задача.


Создание пользовательского локали

Я думаю, что самый простой способ объяснить – пример. В моем конкретном случае я хотел иметь пользовательский язык, в основном на основе иврита ( he_IL ), но с LC_NAME, LC_MESSAGES из en_US и LC_TIME (с измененными first_weekday и first_workday ) из en_GB .

Сбор файлов определения локалей

Вы должны иметь представление о том, какие локали вы хотите смешивать. Сначала нам нужно найти связанные файлы определений, которые можно найти в /usr/share/i18n/locales/ . Вернемся к моему примеру, мне понадобилось следующее: he_IL , en_US и en_GB . Я установил рабочую папку в своем доме и скопировал в нее необходимые файлы:

 $ cd /usr/share/i18n/locales $ mkdir -v ~/custom-locale ; cp -v he_IL en_US en_GB ~/custom-locale/ 

Создание нового файла определения

Я решил назвать свой язык hc_IL и взял he_IL в качестве основы. Следующие строки создают новый файл hc_IL с содержимым от he_IL и на пути заменяют все вхождения строки he_IL внутри файла на hc_IL .

 $ cd ~/custom-locale/ $ sed 's/he_IL/hc_IL/g' he_IL > hc_IL 

Изменение файла нового определения

Теперь мы можем настроить новый язык для наших нужд. Откройте вновь созданный файл ~/custom-locale/hc_IL с помощью вашего любимого текстового редактора. Я использую vim (у него есть соответствующая подсветка синтаксиса для файлов определения локали):

 $ vim ~/custom-locale/hc_IL 

Для тех, кто еще не выбрал свой любимый редактор, а vim не является их чашкой чая, можно использовать gedit 🙂

 $ gedit ~/custom-locale/hc_IL 

Структура файла не очень сложна. По существу, он построен из разделов. Из локали (5) страницы руководства:

Определение локали имеет одну часть для каждой категории локали. Каждая часть может быть скопирована из другого существующего языка или может быть определена с нуля. Если необходимо скопировать категорию, единственное допустимое ключевое слово в определении – это копия, за которой следует имя локали, которое должно быть скопировано.

Понятие копирования очень полезно. Это экономит время, и полученный файл ясен и краток. Например, вместо копирования целых разделов вы можете:

 LC_MESSAGES copy "en_US" END LC_MESSAGES 

Полную документацию по файлу определения локали можно получить через:

 $ man 5 locale 

Хотя, если вы просто хотите создать пользовательскую локаль, которая представляет собой смесь существующих, нет необходимости понимать каждую деталь.

В моем случае я изменил следующие категории и ключевые слова:

  • LC_IDENTIFICATION

     title "Custom Hebrew locale" source "mydomain.ws" address "http:////www.mydomain.ws" contact "" email "admin@mydomain.ws" tel "" fax "" language "Hebrew" territory "Israel" revision "1.0" date "2015-04-21" 

    Примечание. Все строки « category .. » в разделе LC_IDENTIFICATION были изменены во время создания файла с помощью sed . Поэтому нам больше не нужно их трогать.

  • LC_TIME

    Я скопировал полный раздел из en_GB и изменил только строки, обозначающие первый день недели и первый рабочий день:

     first_weekday 1 first_workday 1 
  • Остальные категории, которые я оставил, как они, или заменили их содержимое директивой копирования, как в:

     LC_NAME copy "en_US" END LC_NAME 

Вот и все, файл определения готов. Не забудьте сохранить файл 🙂

Скомпилировать и скопировать новый язык

Компиляция нового языкового стандарта выполняется с использованием следующей команды: root или sudo . Замените hc_IL на свой язык:

 $ sudo localedef -c -v -i hc_IL -f UTF-8 hc_IL.UTF-8 

Если компиляция успешна, скомпилированные данные локали добавляются в файл архива /usr/lib/locale/locale-archive .

Скопируйте новый файл определения локали в каталог определений локалей. Замените hc_IL на свой язык:

 $ sudo cp -v hc_IL /usr/share/i18n/locales/ 

Активация нового языка

На этом этапе мы хотим настроить систему и GNOME на использование новой локали.

Общесистемные настройки

Отредактируйте файл /etc/locale.conf как root и установите каждую строку, начинающуюся с LC_ в новую локаль. Например:

 LANG=en_US.UTF-8 LC_NUMERIC=hc_IL.utf8 LC_TIME=hc_IL.utf8 LC_MONETARY=hc_IL.utf8 LC_PAPER=hc_IL.utf8 LC_MEASUREMENT=hc_IL.utf8 

Настройки GNOME

Чтобы активировать новую локаль в GNOME, выполните следующую команду. Замените hc_IL на свой язык:

 $ gsettings set org.gnome.system.locale region "hc_IL.utf8" 

Проверка новых настроек

Последний шаг – проверить, что все работает так, как ожидалось. Чтобы перезагрузить все настройки, самым легким для меня было перезагрузить компьютер.

  • См. Раздел «Проверка текущего состояния локали», чтобы проверить правильность конфигурации системы.
  • Используйте GNOME Shell и зависящие от языка приложения (графические и консольные) и убедитесь, что они ведут себя так, как ожидалось, с новой локалью. Например, если вы настроили LC_TIME, вы можете запустить команду date для проверки формата даты:

     $ date +%x 21/04/15 

Примечание. Все было протестировано на Fedora 21 с GNOME 3.14. В других дистрибутивах Linux могут потребоваться дополнительные или разные шаги.

Прокомментируйте, если вы найдете какие-либо проблемы с инструкциями.