Встановлення користувацьких мов у Gnome3 (у Fedora 20)


15

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

Я намагався дотримуватися цих підказок: Налаштування локалів в ініціалізації оболонок, які не використовуються сеансом GNOME, і навіть імітували помилку в Locale - ArchWiki , створюючи .pam_environmentфайл, але locales все ще є тими, які встановлені 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Хтось знає, як встановити користувацькі s у Gnome3?

Відповіді:


9

Довідкова інформація

Я протестував рішення на 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, схоже, що коли 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"
    

    Примітка: Усі рядки " категорії .. " в розділі 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файл як корінь і встановіть кожен рядок, який починається з 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 для оболонок та локальних програм (графічні та консольні) та переконайтеся, що вони поводяться так, як очікувалося з новою локальною. Наприклад, якщо ви налаштували LC_TIME, ви можете запустити dateкоманду для перевірки формату дати:

    $ date +%x
    21/04/15
    

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

Будь ласка, прокоментуйте, якщо ви виявите проблеми з інструкціями.


Я можу підтвердити це на Fedora 22 за допомогою Кориці. Він, швидше за все, також буде працювати з GNOME.
Dee'Kej

1
Я впевнений, що якщо вони дуже стараються, вони все-таки зможуть зробити налаштування власних локальних приміщень трохи складніше.
5heikki

Я люблю GNOME, але це смішно. Принаймні, залиште спосіб, коли користувачі живлення можуть встановлювати параметри локалі так, як вони хочуть. Я хочу, щоб у більшості речей був локальний пункт США, але мій принтер використовує папір формату A4 ...
static_rtti
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.