Руководство по локализации

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Localization/Guide and the translation is 100% complete.

Other languages:
čeština • ‎Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎日本語 • ‎한국어 • ‎русский • ‎中文(中国大陆)‎

Часовой пояс

Для того чтобы сохранить время в соответствии с вашим месторасположением нужно настроить часовой пояс. Инструкции как сделать это в OpenRC и systemd можно найти в статье системное время.

Системная локаль

Что такое локаль?

Локаль — это набор информации, с помощью которого большинство программ устанавливает параметры, зависящие от страны и языка. Локали и их данные являются частью системной библиотеки. На большинстве систем они находятся в каталоге /usr/share/i18n/locales/. Общий шаблон имени локали — ab_CD, где ab — двух- или трехбуквенный код языка (как указано в ISO-639), а CD — двухбуквенный код страны (как указано в ISO-3166). К именам локалей часто добавляются варианты вроде @euro или @latin, например de_DE@euro или nan_TW@latin. Для получения более подробной информации, связанной с локалями, обратитесь к Wikipedia.

Переменное окружение локали

Переменные, контролирующие различные аспекты настроек локали приведены в таблице ниже. Все они принимают одно из имен локали в формате ab_CD о котором рассказывалось ранее.

Название переменной Описание
LANG Определяет все настройки локали сразу, при этом дальнейшую индивидуальную настройку можно настроить через LC_ * настройки ниже.
LC_COLLATE Определяет порядок следование алфавита. Эта настройка повлияет, например, как будет отображаться отсортированный список каталога.
LC_CTYPE Определяет свойства обрабатываемых символов для системы. Это определяет, какие символы рассматриваются как часть алфавита, цифры и так далее. Это также определяет используемый набор символов, если это применимо.
LC_MESSAGES Programs' localizations stored in /usr/share/locale/ for applications that use message based localization scheme (majority of Gnu programs, see next chapters for closer information which do, and how to get the programs, that don't, to work).
LC_MONETARY Defines currency units and formatting of currency type numeric values.
LC_NUMERIC Defines formatting of numeric values which aren't monetary. Affects things such as thousand separator and decimal separator.
LC_TIME Определяет формат даты и времени.
LC_PAPER Определяет размер листа, который будет использоватся по умолчанию.
LC_ALL Специальная переменная, которая переопределяет все другие переменные.
Заметка
Некоторые программы написаны таким образом, что ожидают традиционный английский порядок алфавита, в то время как некоторые другие локали, одна из них Эстонская, использует другой порядок. Поэтому рекомендуется явно установить LC_COLLATE в C при работе с общесистемными настройками.
Предупреждение
Не рекомендуется использовать переменную LC_ALL, так как она автоматически переопределяет все остальные переменные LC_* (не влияет на LANG). Это означает, что изменения, сделанные другим способом, не вступят в силу, пока LC_ALL не будет установлена в значение пустой строки. Лучше всего не устанавливать ее в файле запуска.

Наиболее типично, когда пользователи задают только LANG глобально.

Генерация нужных локалей

Большинству пользователей скорей всего потребуется одна или две локали для их системы. Добавление дополнительных локалей указывается в файле /etc/locale.gen.

Код Добавление локалей в /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

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

Файл /etc/env.d/02localeНастройка системной локали в файле /etc/env.d/02locale
LANG="de_DE.UTF-8"
LC_COLLATE="C"

Также возможно, и довольно распространено, особенно в более традиционной среде UNIX, оставлять глобальные установки неизмененными, то есть, в локали C. Пользователи по-прежнему могут установить нужную локаль в своем RC-файле оболочки:

Файл ~/.bashrcНастройка локали для пользователя
export LANG="de_DE.UTF-8"
export LC_COLLATE="C"

Другой способ настройки системы — оставить ее в локали C, но при этом включить отображение символов UTF-8. Этот вариант достигается посредством следующих установок в файле /etc/env.d/02locale:

Код Использование традиционной локали C, устанавливая UTF-8
LC_CTYPE=de_DE.UTF-8

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

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

Для общесистемной локали:

root #env-update && source /etc/profile

Для пользовательской локали:

user $source ~/.bashrc

После этого убейте процесс X-сервера нажав Ctrl+Alt+Backspace, выйдите из системы, а затем зайдите под учетной записью пользователя.

Теперь, убедитесь, что изменения вступили в силу:

user $locale

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/ и так далее). У некоторых языков есть несколько вариантов — поэкспериментируйте с ними, чтобы определить более подходящий.

Файл /etc/conf.d/keymapsУстановка раскладки клавиатуры для консоли
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-флаг nls (Native Language Support), собирайте эти программы с этим флагом. Строки сообщений находятся в файлах /usr/share/locale/<locale>/LC_MESSAGES/<package>.mo. Большинству программ, использующих NLS, также требуется библиотека gettext для извлечения и использования локализованных сообщений. Разумеется, при необходимости Portage установит ее автоматически.

После включения USE-флага nls может понадобиться переустановить некоторые пакеты:

root #emerge --ask --changed-use --deep --with-bdeps=y @world

LINGUAS

Существует еще один USE_EXPAND-флаг, который называется LINGUAS[1]. Он определяет, какие файлы локализации устанавливаются в программах на базе gettext. Переменную рекомендуется устанавливать в файле /etc/portage/make.conf:

root #nano -w /etc/portage/make.conf
## (Настройка переменной LINGUAS. Например, для германского, финского и английского:)
LINGUAS="de fi en"

Если переменная LINGUAS установлена в значение пустой строки (LINGUAS=""), большая часть файлов ebuild устанавливает только язык по умолчанию пакета, но не устанавливает файлы LC_MESSAGES.

Список установленных программ, использующих USE_EXPAND-флаг LINGUAS и поддерживаемых ими языков можно вывести следующим образом:

user $eix -I -U linguas

Список значений LINGUAS, которые возможно использовать предоставлен в /usr/portage/profiles/desc/linguas.desc:

user $grep -i french /usr/portage/profiles/desc/linguas.desc
fr - Французкая локаль
fr_CA - Французкая локаль для Канады
fr_FR - Французкая локаль для Франции

После установки USE_EXPAND-флага LINGUAS может понадобиться переустановить некоторые пакеты:

root #emerge --ask --changed-use --deep --with-bdeps=y @world
Заметка
LINGUAS как переменная USE_EXPAND постепенно заменяется переменной L10N (смотрите ниже). Это позволяет избежать концептуального конфликта со стандартным поведением gettext. После переходного периода, необходимого для преобразования пакетов, 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_" к нужным пакетам языков, как показано в следующем примере:

Файл /etc/portage/package.use
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 находится в файле /usr/portage/profiles/desc/l10n.desc:

user $grep -i portuguese /usr/portage/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

Смотрите также

Внешние ресурсы

Ссылки

  1. LINGUAS in Gentoo Development Guide

This article 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, nightmorph, klondike
They are listed here as the 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 the history page.