Руководство по локализации
Часовой пояс
Для того, чтобы сохранить время в соответствии с вашим местоположением, нужно настроить часовой пояс. Инструкции, как сделать это в OpenRC и systemd можно найти в статье Системное время.
Системная локаль
Что такое локаль?
Локаль — это набор информации, с помощью которого большинство программ устанавливает параметры, зависящие от страны и языка. Локали и их данные являются частью системной библиотеки. На большинстве систем они находятся в каталоге /usr/share/i18n/locales/. Общий шаблон имени локали — ab_CD
, где ab
— двух– или трехбуквенный код языка (как указано в ISO-639), а CD
— двухбуквенный код страны (как указано в ISO-3166). К именам локалей часто добавляются варианты вроде @euro
или @latin
, например de_DE@euro
или nan_TW@latin
. Для получения более подробной информации, связанной с локалями, обратитесь к Википедии.
Переменное окружение локали
Переменные, контролирующие различные аспекты настроек локали приведены в таблице ниже. Все они принимают одно из имен локали в формате ab_CD
о котором рассказывалось ранее.
Название переменной | Описание |
---|---|
LANG | Определяет все настройки локали сразу, при этом дальнейшую индивидуальную настройку можно настроить через LC_ * настройки ниже. |
LC_COLLATE | Определяет порядок следование алфавита. Эта настройка повлияет, например, как будет отображаться отсортированный список каталога. |
LC_CTYPE | Определяет свойства обрабатываемых символов для системы. Это определяет, какие символы рассматриваются как часть алфавита, цифры и так далее. Это также определяет используемый набор символов, если это применимо. |
LC_MESSAGES | У тех программ, которые используют схему локализации основанную на сообщениях, локализация программ располагается в фйле /usr/share/locale/ (основное число программ GNU). |
LC_MONETARY | Определяет денежные единицы и форматирование числовых значений валюты. |
LC_NUMERIC | Определяет форматирование не денежных числовых значений. Влияет на такие вещи, как разделитель тысяч и десятичных чисел. |
LC_TIME | Определяет формат даты и времени. |
LC_PAPER | Определяет размер листа, который будет использоваться по умолчанию. |
LC_ALL | Специальная переменная, которая переопределяет все другие переменные. |
Некоторые программы написаны таким образом, что они ожидают традиционный английский порядок алфавита, в то время как некоторые другие локали, например, Эстонская, использует другой порядок. Поэтому рекомендуется явно установить LC_COLLATE на C при работе с общесистемными настройками.
Не рекомендуется использовать переменную LC_ALL, так как она автоматически переопределяет все остальные переменные LC_* (не влияет на LANG). Это означает, что изменения, сделанные другим способом, не вступят в силу, пока LC_ALL не будет установлена в значение пустой строки. Лучше всего не устанавливать ее в файле запуска.
Наиболее типично, когда пользователи задают только LANG глобально.
Генерация нужных локалей
Большинству пользователей скорей всего потребуется одна или две локали для их системы. Добавление дополнительных локалей указывается в файле /etc/locale.gen.
en_GB ISO-8859-1
en_GB.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE@euro ISO-8859-15
При использовании символа валюты Евро (€) на локалях, не основанных на UTF-8, используйте значение
@euro
из /usr/share/i18n/SUPPORTED.Далее запустите locale-gen. Это сгенерирует все локали, перечисленные в файле /etc/locale.gen, и запишет их в архив локалей (/usr/lib/locale/locale-archive).
root #
locale-gen
* Generating 4 locales (this might take a while) with 1 jobs * (1/4) Generating en_GB.ISO-8859-1 ... [ ok ] * (2/4) Generating en_GB.UTF-8 ... [ ok ] * (3/4) Generating de_DE.ISO-8859-1 ... [ ok ] * (4/4) Generating de_DE.ISO-8859-15@euro ... [ ok ] * Generation complete
Убедитесь в том, что выбранные локали действительно доступны, запустив locale -a.
user $
locale -a
C POSIX de_DE de_DE.iso88591 de_DE.iso885915@euro de_DE@euro deutsch en_GB en_GB.iso88591 en_GB.utf8 german
Просмотреть файл /usr/lib/locale/locale-archive можно с помощью команды localedef.
user $
localedef --list-archive
Его содержимое без изменений можно отобразить с помощью команды strings.
user $
strings /usr/lib/locale/locale-archive | less
Настройка локали
OpenRC
Когда используется OpenRC настройки локали сохраняются в переменном окружении. Они, как правило, настраиваются в /etc/env.d/02locale (для всей системы) и в ~/.bashrc (для конкретного пользователя). Больше информации можно найти в статье UTF-8. Системные настройки локали (/etc/env.d/02locale) можно изменять с помощью eselect locale. Например, так можно установить LANG в значение C
:
root #
eselect locale list
Available targets for the LANG variable: [1] C [2] POSIX [3] en_US [4] en_US.iso885915 [5] en_US.utf8 [ ] (free form)
root #
eselect locale set 1
Конечно, можно отредактировать файл вручную для более точной настройки переменных локали.
Команда выше перечисляет суффикс в нижнем регистре без дефисов, glibc понимает обе формы суффикса, многие другие программы — нет. Наиболее распространённым примером является X. Поэтому лучше всегда использовать UTF-8, нежели utf8.
LANG="de_DE.UTF-8"
LC_COLLATE="C.UTF-8"
В некоторых случаях пользователи могут заметить глюки неанглийских символов в таких приложениях, как Krusader (https://bugs.kde.org/show_bug.cgi?id=371582). Удаление или комментирование строки LC_ALL=""
в /etc/env.d/02locale должно устранить проблему.
Также возможно, и довольно распространено, особенно в более традиционной среде UNIX, оставлять глобальные установки неизмененными, то есть, в локали C
. Пользователи по-прежнему могут установить нужную локаль в своем конфигурационном файле оболочки:
export LANG="de_DE.UTF-8"
export LC_COLLATE="C.UTF-8"
export LANG="de_DE.UTF-8"
export LC_COLLATE="C.UTF-8"
Другой способ настройки системы — оставить ее в локали C
, но при этом включить отображение символов UTF-8. Этот вариант достигается посредством следующих установок в файле /etc/env.d/02locale:
LC_CTYPE=de_DE.UTF-8
Вышеприведенный фрагмент кода позволяет отображать правильно локализованные имена файлов без необходимости полностью использовать выбранный язык.
После того, как настроите нужную локаль, не забудьте обновить переменное окружение, чтобы система была в курсе изменений.
Для общесистемной локали:
root #
env-update && source /etc/profile
Для пользовательской локали:
user $
source ~/.bashrc
После этого убейте процесс X-сервера нажав Ctrl+Alt+Backspace, выйдите из системы, а затем зайдите под учетной записью пользователя.
Теперь, убедитесь, что изменения вступили в силу:
user $
locale
Значения переменных окружения локали, которые были явно установлены, например, при помощи "export" (в bash), перечислены без двойных кавычек. Те переменные, чьи значения были унаследованы от других переменных окружения локали, содержат свои значения в двойных кавычках.
systemd
В systemd локаль настраивается с помощью команды localectl. Поверьте список доступных локалей:
root #
localectl list-locales
Затем установите требуемую локаль:
root #
localectl set-locale LANG=de_DE.utf8
И в конце проверьте результат:
root #
localectl | grep "System Locale"
System Locale: LANG=de_DE.utf8
Раскладка клавиатуры для консоли
OpenRC
Раскладка клавиатуры, используемая консолью, устанавливается в файле /etc/conf.d/keymaps с помощью переменной keymap. Допустимые значения можно найти в каталоге /usr/share/keymaps/YOUR_ARCH/. Каталог архитектуры i386 содержит подкаталоги, соответствующие различным раскладкам (qwerty/, azerty/ и так далее). У некоторых языков есть несколько вариантов — поэкспериментируйте с ними, чтобы определить более подходящий.
keymap="de"
#keymap="de-latin1"
#keymap="de-latin1-nodeadkeys"
systemd
В systemd раскладка для консоли может быть установлена с помощью команды localectl. Сперва проверьте доступные раскладки:
root #
localectl list-keymaps
Далее установите необходимую раскладку для консоли:
root #
localectl set-keymap it
В конце проверьте, что раскладка для консоли была установлена правильно:
root #
localectl | grep "VC Keymap"
VC Keymap: it
Раскладка клавиатуры для X сервера
OpenRC
Раскладка клавиатуры X-сервера устанавливается в файле /etc/X11/xorg.conf.d/30-keyboard.conf в параметре XkbLayout. Подробнее читайте в руководстве Xorg и в статье о переключении раскладки клавиатуры.
systemd
В systemd раскладка для сервера X11 может быть установлена с помощью команды localectl. Сперва проверьте доступные раскладки для X11:
root #
localectl list-x11-keymap-layouts
Далее установите необходимую раскладку для X11:
root #
localectl set-x11-keymap it
В конце проверьте, что раскладка для X11 была установлена правильно:
root #
localectl | grep "X11 Layout"
X11 Layout: it
Поддержка родного языка
Для того, чтобы локализация, ориентированная на сообщения работала в программах, которые ее поддерживают и у которых есть nls
USE-флаг, собирайте эти программы с этим флагом. Строки сообщений находятся в файлах /usr/share/locale/<locale>/LC_MESSAGES/<package>.mo. Большинству программ, использующих Native Language Support (NLS), также требуется библиотека gettext для извлечения и использования локализованных сообщений. Разумеется, при необходимости Portage установит ее автоматически.
После включения USE-флага nls
может понадобиться переустановить некоторые пакеты:
root #
emerge --ask --changed-use --deep --with-bdeps=y @world
LINGUAS
LINGUAS заставляет пакеты неявно пропускать локали. При его использовании пакетный менеджер не может определить, какие локали были пропущены. Не используйте LINGUAS, если вы собираетесь распространять бинарные пакеты..
Существует также дополнительная переменная LINGUAS, которая используется некоторыми системами сборки на основе gettext для того, чтобы управлять, какие файлы локализации будут собираться и устанавливаться. Переменная принимает разделённый пробелами список кодов языков, и рекомендуется устанавливать ее в /etc/portage/make.conf:
root #
nano -w /etc/portage/make.conf
## (Настройка переменной LINGUAS. Например, для германского, финского и английского:) LINGUAS="de fi en"
Обратите внимание, что есть большая разница между неустановленной переменной LINGUAS и установленной в пустое значение: неустановленная LINGUAS означает, что будут установлены все доступные языки. Напротив, LINGUAS=""
будет означать, что большая часть ebuild установит только язык по умолчанию, но ни один из файлов LC_MESSAGES
.
Неправильная установка LINGUAS может привести к неполному переводу некоторых программ, например, KDE Plasma и ее приложений. Попробуйте удалить LINGUAS и пересобрать связанные пакеты, если вы столкнулись с этой проблемой.
L10N
Еще одна переменная USE_EXPAND, которая называется L10N, определяет, какую дополнительную поддержку локализации следует установить. Обычно это нужно для загрузки пакетами дополнительных пакетов языков. Подобно переменной LINGUAS, в этой переменной указываются коды языков, разделенные пробелами. Ее можно установить в файле /etc/portage/make.conf:
root #
nano -w /etc/portage/make.conf
## (Добавьте переменную L10N. Например, для немецкого и бразильско-португальского) L10N="de pt-BR"
Для того, чтобы установить эту переменную для конкретного пакета, отредактируйте файл /etc/portage/package.use и приставьте "l10n_" к нужным пакетам языков, как показано в следующем примере:
app-text/aspell l10n_de l10n_pt-BR
Обратите внимание, что, хотя распространенные двухбуквенные коды языков (например de
или fr
) идентичны в переменных LINGUAS и L10N, более сложные коды используют другой синтаксис, поскольку переменная L10N использует IETF language tags (также известный как BCP 47). Например, pt_BR
и sr@latin
в LINGUAS становятся pt-BR
и sr-Latn
в L10N, соответственно.
Список возможных значений L10N находится в файле /var/db/repos/gentoo/profiles/desc/l10n.desc:
user $
grep -i portuguese /var/db/repos/gentoo/profiles/desc/l10n.desc
pt - Portuguese pt-BR - Portuguese (Brazil) pt-PT - Portuguese (Portugal)
После установки переменной USE_EXPAND L10N может понадобиться переустановить некоторые пакеты:
root #
emerge --ask --changed-use --deep --with-bdeps=y @world
Смотрите также
- Настройка локалей (Руководство Gentoo)
- Раскладка клавиатуры в статье Evdev
- X resources
- Localization/Guide/The Euro symbol — how to display the Euro symbol (€) for the console and in X.
Внешние ресурсы
- Локали и интернационализация (gnu.org)
- Переменная USE_EXPAND L10N заменяет LINGUAS
- Michał Górny: Почему переменная LINGUAS трижды неверна!
- [gentoo-dev] [RFC] Как разобраться с путаницей LINGUAS?
- [gentoo-dev] [RFC] Генеральный план решения проблем LINGUAS
Ссылки
This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Alexander Holler, Steven Lucy, Benny Chuang, Lars Weiler, Tobias Scherbaum, Flammie Pirinen, , Francisco Blas Izquierdo Riera (klondike)
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.