--- description: 'FreeBSD поддерживает локализацию на множество языков, позволяя пользователям просматривать, вводить или обрабатывать данные на языках, отличных от английского' next: books/handbook/cutting-edge params: path: /books/handbook/l10n/ part: 'Часть III. Администрирование системы' prev: books/handbook/virtualization showBookMenu: 'true' tags: ["i18n", "L10n", "localization", "Locale", "LANG", "MM_CHARSET", "cap_mkdb"] title: 'Глава 25. Локализация — использование и настройка i18n/L10n' weight: 29 --- [[l10n]] = Локализация - использование и настройка i18n/L10n :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :sectnumoffset: 25 :partnums: :source-highlighter: rouge :experimental: :images-path: books/handbook/l10n/ ifdef::env-beastie[] ifdef::backend-html5[] :imagesdir: ../../../../images/{images-path} endif::[] ifndef::book[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] toc::[] endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] [[l10n-synopsis]] == Обзор FreeBSD — это распределённый проект с пользователями и участниками по всему миру. Поэтому FreeBSD поддерживает локализацию на множество языков, позволяя пользователям просматривать, вводить и обрабатывать данные на языках, отличных от английского. Доступны многие основные языки, включая, но не ограничиваясь: китайский, немецкий, японский, корейский, французский, русский и вьетнамский. Термин "internationalization" был сокращён до i18n, где число 18 обозначает количество букв между первой и последней буквами слова "internationalization". L10n использует ту же схему сокращения, но от слова "localization". Методы, протоколы и приложения i18n/L10n позволяют пользователям работать на предпочитаемых ими языках. Эта глава рассказывает о возможностях интернационализации и локализации в FreeBSD. Прочтите эту главу, чтобы узнать: * Как формируются названия локалей. * Как установить локаль для входной оболочки. * Как настроить консоль для неанглийских языков. * Как настроить Xorg для разных языков. * Как найти приложения, соответствующие стандарту i18n. * Где найти дополнительную информацию по настройке конкретных языков. Прежде чем читать эту главу, необходимо: * Знать, как crossref:ports[ports,устанавливать дополнительные сторонние приложения]. [[using-localization]] == Использование локализации Настройки локализации основаны на трёх компонентах: коде языка, коде страны и кодировке. Названия локалей формируются из этих частей следующим образом: [.programlisting] .... LanguageCode_CountryCode.Encoding .... _ЯзыковойКод_ и _КодСтраны_ используются для определения страны и конкретного варианта языка. crossref:l10n[locale-lang-country,Распространённые языковые коды и коды стран] содержит несколько примеров __ЯзыковойКод_КодСтраны__: [[locale-lang-country]] .Часто используемые коды языков и стран [cols="1,1", frame="none", options="header"] |=== | КодЯзыка_КодСтраны | Описание |en_US |Английский, Соединённые Штаты |ru_RU |Русский, Россия |zh_TW |Традиционный китайский, Тайвань |=== Полный список доступных локалей можно получить, набрав: [source, shell] .... % locale -a | more .... Для определения текущих настроек локали: [source, shell] .... % locale .... Языковые наборы символов, такие как ISO8859-1, ISO8859-15, KOI8-R и CP437, описаны в man:multibyte[3]. Актуальный список наборов символов доступен в http://www.iana.org/assignments/character-sets[Реестре IANA]. Некоторые языки, такие как китайский или японский, не могут быть представлены с использованием символов ASCII и требуют расширенной кодировки с использованием широких или многобайтовых символов. Примерами широких или многобайтовых кодировок являются EUC и Big5. Старые приложения могут ошибочно принимать эти кодировки за управляющие символы, в то время как новые приложения обычно распознают их правильно. В зависимости от реализации, пользователям может потребоваться скомпилировать приложение с поддержкой широких или многобайтовых символов или правильно его настроить. [NOTE] ==== FreeBSD использует совместимые с Xorg кодировки локалей. ==== Остальная часть этого раздела описывает различные методы настройки локали в системе FreeBSD. Следующий раздел будет посвящен вопросам поиска и компиляции приложений с поддержкой i18n. [[setting-locale]] === Установка локали для входной оболочки Настройки локали настраиваются либо в файле [.filename]#~/.login_conf# пользователя, либо в стартовом файле его оболочки: [.filename]#~/.profile#, [.filename]#~/.bashrc# или [.filename]#~/.cshrc#. Должны быть установлены две переменные окружения: * `LANG`, который устанавливает локаль * `MM_CHARSET`, который устанавливает MIME-кодировку, используемую приложениями В дополнение к настройкам оболочки пользователя, эти переменные также должны быть установлены для конкретной конфигурации приложений и конфигурации Xorg. Доступны два метода для задания необходимых переменных: метод crossref:l10n[login-class,класса входа], который является рекомендуемым, и метод crossref:l10n[startup-file,файла запуска]. В следующих двух разделах показано, как использовать оба метода. [[login-class]] ==== Метод классов входа Этот первый метод является рекомендуемым, так как он устанавливает необходимые переменные окружения для названия локали и MIME-кодировок символов для всех возможных командных оболочек. Данную настройку может выполнить как каждый пользователь в отдельности, так и суперпользователь для всех пользователей сразу. Этот минимальный пример устанавливает обе переменные для кодировки Latin-1 в файле [.filename]#.login_conf# домашнего каталога отдельного пользователя: [.programlisting] .... me:\ :charset=ISO-8859-1:\ :lang=de_DE.ISO8859-1: .... Вот пример файла [.filename]#~/.login_conf# пользователя, который устанавливает переменные для традиционного китайского в кодировке BIG-5. Требуется больше переменных, так как некоторые приложения некорректно обрабатывают локали для китайского, японского и корейского языков: [.programlisting] .... #Users who do not wish to use monetary units or time formats #of Taiwan can manually change each variable me:\ :lang=zh_TW.Big5:\ :setenv=LC_ALL=zh_TW.Big5,LC_COLLATE=zh_TW.Big5,LC_CTYPE=zh_TW.Big5,LC_MESSAGES=zh_TW.Big5,LC_MONETARY=zh_TW.Big5,LC_NUMERIC=zh_TW.Big5,LC_TIME=zh_TW.Big5:\ :charset=big5:\ :xmodifiers="@im=gcin": #Set gcin as the XIM Input Server .... Или суперпользователь может настроить локализацию для всех пользователей системы. Следующие переменные в [.filename]#/etc/login.conf# используются для установки локали и набора символов MIME: [.programlisting] .... language_name|Account Type Description:\ :charset=MIME_charset:\ :lang=locale_name:\ :tc=default: .... Итак, предыдущий пример с Latin-1 будет выглядеть так: [.programlisting] .... german|German Users Accounts:\ :charset=ISO-8859-1:\ :lang=de_DE.ISO8859-1:\ :tc=default: .... Подробнее об этих переменных смотрите в man:login.conf[5]. Обратите внимание, что там уже есть предопределённый класс _russian_. При редактировании файла [.filename]#/etc/login.conf# не забудьте выполнить следующую команду для обновления базы данных возможностей: [source, shell] .... # cap_mkdb /etc/login.conf .... [NOTE] ==== Для конечного пользователя команда `cap_mkdb` должна быть выполнена для его файла [.filename]#~/.login_conf#, чтобы изменения вступили в силу. ==== ===== Утилиты, изменяющие классы входа в систему В дополнение к ручному редактированию [.filename]#/etc/login.conf# доступно несколько утилит для установки локали для вновь создаваемых пользователей. При использовании `vipw` для добавления новых пользователей укажите _language_, чтобы задать локаль: [.programlisting] .... user:password:1111:11:language:0:0:User Name:/home/user:/bin/sh .... При использовании `adduser` для добавления новых пользователей язык по умолчанию может быть предварительно настроен для всех новых пользователей или указан для отдельного пользователя. Если все новые пользователи используют один и тот же язык, укажите `defaultclass=_language_` в [.filename]#/etc/adduser.conf#. Чтобы переопределить этот параметр при создании пользователя, введите требуемую локаль в этом запросе: [source, shell] .... Enter login class: default []: .... или указать локаль для установки при вызове `adduser`: [source, shell] .... # adduser -class language .... Если `pw` используется для добавления новых пользователей, укажите локаль следующим образом: [source, shell] .... # pw useradd user_name -L language .... Для изменения класса входа существующего пользователя можно использовать `chpass`. Запустите её от имени суперпользователя и укажите имя пользователя для редактирования в качестве аргумента. [source, shell] .... # chpass user_name .... [[startup-file]] ==== Метод файла запуска оболочки Этот второй метод не рекомендуется, так как каждая используемая оболочка требует ручной настройки, причём у каждой оболочки свой файл конфигурации и разный синтаксис. Например, чтобы установить немецкий язык для оболочки `sh`, можно добавить следующие строки в [.filename]#~/.profile# для настройки оболочки только этого пользователя. Эти же строки можно добавить в [.filename]#/etc/profile# или [.filename]#/usr/share/skel/dot.profile#, чтобы настроить эту оболочку для всех пользователей: [.programlisting] .... LANG=de_DE.ISO8859-1; export LANG MM_CHARSET=ISO-8859-1; export MM_CHARSET .... Однако имя файла конфигурации и используемый синтаксис отличаются для оболочки `csh`. Вот эквивалентные настройки для [.filename]#~/.login#, [.filename]#/etc/csh.login# или [.filename]#/usr/share/skel/dot.login#: [.programlisting] .... setenv LANG de_DE.ISO8859-1 setenv MM_CHARSET ISO-8859-1 .... Чтобы усложнить ситуацию, синтаксис, необходимый для настройки Xorg в [.filename]#~/.xinitrc#, также зависит от оболочки. Первый пример приведён для оболочки `sh`, а второй — для `csh`: [.programlisting] .... LANG=de_DE.ISO8859-1; export LANG .... [.programlisting] .... setenv LANG de_DE.ISO8859-1 .... [[setting-console]] === Настройка консоли Доступно несколько локализованных шрифтов для консоли. Чтобы просмотреть список доступных шрифтов, введите `ls /usr/share/syscons/fonts`. Для настройки шрифта консоли укажите _font_name_ без суффикса [.filename]#.fnt# в файле [.filename]#/etc/rc.conf#: [.programlisting] .... font8x16=font_name font8x14=font_name font8x8=font_name .... Раскладки клавиатуры (keymap) и карты экрана (screenmap) можно настроить добавлением следующих команд в [.filename]#/etc/rc.conf#: [.programlisting] .... scrnmap=screenmap_name keymap=keymap_name keychange="fkey_number sequence" .... Чтобы просмотреть список доступных карт экрана, введите `ls /usr/share/syscons/scrnmaps`. Не указывайте суффикс [.filename]#.scm# при указании _screenmap_name_. Обычно требуется карта экрана с соответствующим сопоставленным шрифтом в качестве обходного решения для расширения 8-го бита до 9-го в матрице символов шрифта адаптера VGA, чтобы буквы были выведены из области псевдографики, если экранный шрифт использует столбец 8-го бита. Чтобы просмотреть список доступных раскладок клавиатуры, введите `ls /usr/share/syscons/keymaps`. При указании _keymap_name_ не включайте суффикс [.filename]#.kbd#. Для проверки раскладок без перезагрузки используйте man:kbdmap[1]. Запись `keychange` обычно требуется для программирования функциональных клавиш в соответствии с выбранным типом терминала, так как последовательности функциональных клавиш нельзя определить в keymap. Затем установите правильный тип консольного терминала в [.filename]#/etc/ttys# для всех записей виртуальных терминалов. В crossref:l10n[locale-charset,Определенные типы терминалов для наборов символов] приведены доступные типы терминалов: [[locale-charset]] .Определенные типы терминалов для наборов символов [cols="1,1", frame="none", options="header"] |=== | Набор символов | Тип терминала |ISO8859-1 или ISO8859-15 |`cons25l1` |ISO8859-2 |`cons25l2` |ISO8859-7 |`cons25l7` |KOI8-R |`cons25r` |KOI8-U |`cons25u` |CP437 (VGA default) |`cons25` |US-ASCII |`cons25w` |=== Для языков с широкими или многобайтовыми символами установите консоль для этого языка из коллекции портов FreeBSD. Доступные порты перечислены в crossref:l10n[locale-console,Доступные консоли из коллекции портов]. После установки обратитесь к [.filename]#pkg-message# или man-страницам порта для получения инструкций по настройке и использованию. [[locale-console]] .Доступная консоль из коллекции портов [cols="1,1", frame="none", options="header"] |=== | Язык | Расположение порта |Традиционный китайский (BIG-5) |package:chinese/big5con[] |Китайский/Японский/Корейский |package:chinese/cce[] |Китайский/Японский/Корейский |package:chinese/zhcon[] |Японский |package:chinese/kon2[] |Японский |package:japanese/kon2-14dot[] |Японский |package:japanese/kon2-16dot[] |=== Если moused включен в [.filename]#/etc/rc.conf#, может потребоваться дополнительная настройка. По умолчанию курсор мыши драйвера man:syscons[4] занимает диапазон `0xd0`-`0xd3` в наборе символов. Если язык использует этот диапазон, измените диапазон курсора, добавив следующую строку в [.filename]#/etc/rc.conf#: [.programlisting] .... mousechar_start=3 .... === Настройка Xorg В главе crossref:x11[x11,Система X Window] описана установка и настройка Xorg. При настройке локализации в Xorg дополнительные шрифты и методы ввода доступны в коллекции портов FreeBSD. Настройки интернационализации для конкретных приложений, такие как шрифты и меню, можно настроить в [.filename]#~/.Xresources#, что должно позволить пользователям видеть выбранный язык в меню графических приложений. Протокол X Input Method (XIM) является стандартом Xorg для ввода неанглийских символов. В crossref:l10n[locale-xim,Доступные методы ввода] приведены приложения для ввода, доступные в коллекции портов FreeBSD. Также доступны дополнительные приложения Fcitx и Uim. [[locale-xim]] .Доступные методы ввода [cols="1,1", frame="none", options="header"] |=== | Язык | Метод ввода |Китайский |package:chinese/gcin[] |Китайский |package:chinese/ibus-chewing[] |Китайский |package:chinese/ibus-pinyin[] |Китайский |package:chinese/oxim[] |Китайский |package:chinese/scim-fcitx[] |Китайский |package:chinese/scim-pinyin[] |Китайский |package:chinese/scim-tables[] |Японский |package:japanese/ibus-anthy[] |Японский |package:japanese/ibus-mozc[] |Японский |package:japanese/ibus-skk[] |Японский |package:japanese/im-ja[] |Японский |package:japanese/kinput2[] |Японский |package:japanese/scim-anthy[] |Японский |package:japanese/scim-canna[] |Японский |package:japanese/scim-honoka[] |Японский |package:japanese/scim-honoka-plugin-romkan[] |Японский |package:japanese/scim-honoka-plugin-wnn[] |Японский |package:japanese/scim-prime[] |Японский |package:japanese/scim-skk[] |Японский |package:japanese/scim-tables[] |Японский |package:japanese/scim-tomoe[] |Японский |package:japanese/scim-uim[] |Японский |package:japanese/skkinput[] |Японский |package:japanese/skkinput3[] |Японский |package:japanese/uim-anthy[] |Корейский |package:korean/ibus-hangul[] |Корейский |package:korean/imhangul[] |Корейский |package:korean/nabi[] |Корейский |package:korean/scim-hangul[] |Корейский |package:korean/scim-tables[] |Вьетнамский |package:vietnamese/xvnkb[] |Вьетнамский |package:vietnamese/x-unikey[] |=== [[l10n-compiling]] == Поиск приложений с поддержкой i18n Приложения i18n разрабатываются с использованием наборов i18n в библиотеках. Это позволяет разработчикам написать один простой файл и перевести отображаемые меню и тексты на каждый язык. Коллекция портов FreeBSD (link:https://ports.FreeBSD.org[FreeBSD Ports Collection]) включает множество приложений со встроенной поддержкой широких или многобайтовых символов для различных языков. Такие приложения содержат в своих названиях `i18n` для удобства идентификации. Однако они не всегда поддерживают нужный язык. Некоторые приложения могут быть скомпилированы с указанием конкретной кодировки. Обычно это делается в [.filename]#Makefile# порта или путем передачи значения в configure. Для получения дополнительной информации о том, как определить необходимое значение configure или параметры компиляции при сборке порта, обратитесь к документации по i18n в исходном коде соответствующего порта FreeBSD или к [.filename]#Makefile# порта. [[lang-setup]] == Настройка локали для определённых языков Этот раздел содержит примеры настройки локализации системы FreeBSD для русского языка. Далее приведены дополнительные ресурсы для локализации других языков. [[ru-localize]] === Русский язык (КОИ8-R кодировка) В этом разделе показаны конкретные настройки, необходимые для локализации системы FreeBSD на русский язык. Подробное описание каждого типа настроек приведено в crossref:l10n[using-localization,Использование локализации]. Чтобы установить эту локаль для регистрационной оболочки, добавьте следующие строки в файл [.filename]#~/.login_conf# каждого пользователя: [.programlisting] .... me:My Account:\ :charset=KOI8-R:\ :lang=ru_RU.KOI8-R: .... Для настройки консоли добавьте следующие строки в [.filename]#/etc/rc.conf#: [.programlisting] .... keymap="ru.utf-8" scrnmap="utf-82cp866" font8x16="cp866b-8x16" font8x14="cp866-8x14" font8x8="cp866-8x8" mousechar_start=3 .... Для каждой записи `ttyv` в [.filename]#/etc/ttys# используйте `cons25r` в качестве типа терминала. Для настройки печати необходим специальный выходной фильтр для преобразования из KOI8-R в CP866, так как большинство принтеров с русскими символами используют аппаратную кодовую страницу CP866. FreeBSD включает стандартный фильтр для этой цели — [.filename]#/usr/libexec/lpr/ru/koi2alt#. Чтобы использовать этот фильтр, добавьте следующую запись в [.filename]#/etc/printcap#: [.programlisting] .... lp|Russian local line printer:\ :sh:of=/usr/libexec/lpr/ru/koi2alt:\ :lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs: .... Обратитесь к man:printcap[5] для более подробного объяснения. Для настройки поддержки русских имён файлов в монтируемых файловых системах MS-DOS(R) добавьте параметр `-L` и указание локали при добавлении записи в [.filename]#/etc/fstab#: [.programlisting] .... /dev/ad0s2 /dos/c msdos rw,-Lru_RU.KOI8-R 0 0 .... Обратитесь к man:mount_msdosfs[8] для получения дополнительной информации. Для настройки русских шрифтов в Xorg установите пакет package:x11-fonts/xorg-fonts-cyrillic[]. Затем проверьте раздел `"Files"` в [.filename]#/etc/X11/xorg.conf#. Следующая строка должна быть добавлена _перед_ всеми остальными записями `FontPath`: [.programlisting] .... FontPath "/usr/local/lib/X11/fonts/cyrillic" .... Дополнительные кириллические шрифты доступны в Коллекции портов. Чтобы активировать русскую раскладку клавиатуры, добавьте следующее в раздел `"Keyboard"` файла [.filename]#/etc/xorg.conf#: [.programlisting] .... Option "XkbLayout" "us,ru" Option "XkbOptions" "grp:toggle" .... Убедитесь, что `XkbDisable` закомментирован в этом файле. Для `grp:toggle` используйте kbd:[Right Alt], для `grp:ctrl_shift_toggle` — kbd:[Ctrl+Shift]. Для `grp:caps_toggle` используйте kbd:[CapsLock]. Прежняя функция kbd:[CapsLock] остаётся доступной только в режиме LAT при использовании kbd:[Shift+CapsLock]. `grp:caps_toggle` не работает в Xorg по неизвестной причине. Если на клавиатуре есть клавиши «Windows(R)» и некоторые неалфавитные клавиши отображаются неправильно, добавьте следующую строку в файл [.filename]#/etc/xorg.conf#: [.programlisting] .... Option "XkbVariant" ",winkeys" .... [NOTE] ==== Русская раскладка XKB может не работать с нелокализованными приложениями. Минимально локализованные приложения должны вызывать функцию `XtSetLanguageProc (NULL, NULL, NULL);` в начале программы. ==== См. http://koi8.pp.ru/xwin.html[http://koi8.pp.ru/xwin.html] для получения дополнительных инструкций по локализации приложений Xorg. Более общую информацию о кодировке KOI8-R можно найти на http://koi8.pp.ru/[http://koi8.pp.ru/]. === Дополнительные ресурсы для конкретных языков В этом разделе приведены дополнительные ресурсы для настройки других локалей. Традиционный китайский для Тайваня:: Проект FreeBSD-Taiwan предлагает руководство на китайском языке по FreeBSD по адресу http://netlab.cse.yzu.edu.tw/\~statue/freebsd/zh-tut/[http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/]. Локализация на греческий язык:: Полная статья о поддержке греческого языка в FreeBSD доступна https://www.FreeBSD.org/doc/gr/articles/greek-language-support/[здесь], только на греческом, как часть официальной документации FreeBSD на греческом языке. Японская и корейская локализация:: Для японского языка обратитесь к http://www.jp.FreeBSD.org/[http://www.jp.FreeBSD.org/], а для корейского — к http://www.kr.FreeBSD.org/[http://www.kr.FreeBSD.org/]. Неанглоязычная документация FreeBSD:: Некоторые участники проекта FreeBSD перевели части документации FreeBSD на другие языки. Они доступны по ссылкам на link:https://www.FreeBSD.org/[веб-сайте FreeBSD] или в [.filename]#/usr/share/doc#.