Довідкова інформація
Я протестував рішення на 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 можуть вимагати додаткових або різних кроків.
Будь ласка, прокоментуйте, якщо ви виявите проблеми з інструкціями.