Изучаем Linux, 302 (смешанные среды): Локализация

Базовые основы локализации Samba в неанглоязычной среде

Если вы работаете в смешанной среде, в которой используются символы, отличные от английских, то необходимо иметь представление о символьных кодах и кодовых страницах языка используемой среды. Также необходимо понимать, что в средах Linux и Windows пространства имен интерпретируются по-разному. Хотя Samba поддерживает локализацию, при работе со старыми клиентами Windows или Samba версий 2.x, а также в случаях использования наборов символов, отличных от Unicode, необходимо выполнить дополнительные настройки. В зависимости от используемого языка операционной системы может возникнуть необходимость в компоновке и применении исправлений для библиотек перекодировки. Из этой статьи вы узнаете о том, как работать с локализацией в среде Linux.

Трейси Бост, консультант и преподаватель, Свободный писатель

Author photo - Tracy BostТрейси Бост - опытный разработчик программного обеспечения и проектировщик систем. Он специализируется на интеграции корпоративных приложений. Был сопредседателем рабочей группы по бизнес-правилам Организации по поддержке стандартов ипотечной отрасли (MISMO) и сопредседателем секции промышленных стандартов на симпозиуме RuleML2010. Работал в различных отраслях, в том числе в ипотеке, недвижимости и некоммерческом секторе.



28.06.2012

Об этой серии

Эта серия статьей поможет вам освоить задачи администрирования операционной системы Linux. Вы можете использовать материалы этих статей для подготовки к экзаменам программы LPIC третьего уровня (LPIC-3).

Чтобы посмотреть описания статей этой серии и получить ссылки на них, обратитесь к нашему перечню материалов для подготовки к экзаменам LPIC-3. Этот перечень постоянно дополняется новыми статьями по мере их готовности и содержит текущие (по состоянию на ноябрь 2010 года) цели экзаменов сертификации LPIC-3.

Краткий обзор

В этой статье рассматриваются следующие темы:

  • Символьные коды и кодовые страницы.
  • Работа Windows-клиентов с наборами символов.
  • Библиотеки перекодировки.
  • Настройка локализации Samba.

Эта статья поможет вам подготовиться к сдаче экзамена LPI 302 (специализация "Смешанные среды") и содержит материалы цели 312.6 темы 312. Цель имеет вес 1.


Предварительные требования

О факультативном экзамене LPI-302

Как и многие другие программы, программа сертификации Linux Professional Institute (LPIC) предусматривает различные уровни сертификации, где для получения каждого последующего уровня необходимо обладать более глубокими знаниями и практическим опытом. Экзамен LPI-302 – это факультативный экзамен третьего уровня программы LPIC, требующий продвинутых знаний в области системного администрирования Linux.

Для получения сертификата LPIC третьего уровня (LPIC-3) необходимо успешно сдать два экзамена первого уровня (101 и 102), два экзамена второго уровня (201 и 202), а также базовый экзамен 301 третьего уровня (LPIC-3). Если вы получили сертификат третьего уровня, вы можете сдавать факультативные экзамены по определенным специализациям, например, экзамен LPI-302.

Чтобы извлечь наибольшую пользу из наших статей, необходимо обладать продвинутыми знаниями о Linux и иметь работоспособный компьютер с Linux, на котором можно будет выполнять все встречающиеся команды. В частности, предполагается, что читатель умеет работать с командной строкой Linux и в общих чертах понимает назначение Samba (о чем рассказывалось в предыдущей статье "Изучаем Linux, 302: основные принципы"). Для выполнения примеров этой статьи на вашем компьютере должно быть инсталлировано программное обеспечение Samba. Ваш компьютер должен быть подключен к локальной сети и Интернету, и на нем должны быть проинсталлированы библиотеки компилятора GNU Compiler Collection. Для проверки работы с языком, отличного от английского, полезно иметь в сети клиента под управлением Windows.


Зачем нужна локализация

Весьма вероятно, что при работе с файлами и директориями в смешанной среде пользователи будут использовать собственные локальные настройки. Локальные настройки – это просто набор параметров, определяющих язык, страну и другие установки, которые пользователь может использовать в программной среде. Если программное обеспечение поддерживает работу с локальными настройками пользователя, то обычно это называется локализацией.

Создайте ваш собственный канал

Вы можете создать ваш собственный RSS, Atom или HTML канал обновлений и получать уведомления о новых или обновленных статьях нашего сайта. Для этого перейдите на страницу developerWorks RSS feeds, выберите зону Linux, установите флажок Статьи и введите в качестве ключевой фразы Linux Professional Institute, после чего выберите требуемый тип канала.

Символьные коды

Представьте, что вы просматриваете на вашем компьютере директории с помощью файлового менеджера Nautilus в Linux или с помощью Windows Explorer в Windows и встретили директорию с именем 01100001 01110000 01110000 01101100 01101001 01100011 01100001 01110100 01101001 01101111 01101110 01110011. Или, предположим, компьютер отображает имя директории в виде 97 112 112 108 105 99 97 116 105 111 110 115 или 61 70 70 6C 69 63 61 74 69 6F 6E 73. Если вы не умеете читать двоичный, десятичный или шестнадцатеричный код, или у вас под рукой нет программы-переводчика, то вы никогда не узнаете, что эта директория является общим файловым ресурсом с именем applications. Тем не менее, компьютер умеет понимать числа. Более того, числа – это единственное, что умеет понимать компьютер.

К счастью, вам не нужно изучать двоичную, десятичную, шестнадцатеричную или другие системы счисления для того, чтобы пользоваться компьютером, поскольку программы-трансляторы отображают уже преобразованные читаемые символы. В основе этих преобразований лежат таблицы символов. Таблица символов – это представление определенного символа в числовом формате, причем каждому символу сопоставлено определенное числовое значение. В таблице 1 представлена таблица символов ASCII (American Standard Code for Information Interchange), содержащая символы из названия директории нашего примера.

Таблица 1. Символьные коды ASCII для имени директории "applications"
Двоичное значениеДесятичное значениеШестнадцатеричное значениеОтображаемый символ
011000019761a
0111000011270p
0111000011270p
011011001086Cl
0110100110569i
011000119963c
011000019761a
0111010011674t
0110100110569i
011011111116Fo
011011101106En
0111001111573s

Этот пример будет полезен, если ваши локальные настройки работают с таблицей ASCII. Тем не менее, многие пользователи предпочитают использовать собственные локальные настройки для выбранной локализации.

Стандарт Unicode

Если вы работаете в современной операционной системе и используете новое программное обеспечение, то, вероятно, вам приходилось использовать Unicode, даже если вы не знакомы с этим стандартом. В наши дни редко можно встретить статью о локализации, в которой бы не упоминалось о Unicode. В настоящее время Unicode является стандартом кодировки, де-факто использующимся для локализации символов. Он разработан для замены различных таблиц кодировки на всех уровнях путем кодировки абстрактных символов всех известных языков:

  • Unicode используется по умолчанию в большинстве дистрибутивов Linux.
  • Unicode используется по умолчанию в Samba версии 3.x.
  • Unicode (UTF-16) используется по умолчанию на компьютерах Windows с конца 1990х.

UTF-8 – это наиболее широко используемая кодировка Unicode. В этой кодировке для каждого ASCII-символа используется один байт, что позволяет использовать те же коды символов, что и в ASCII. Тем не менее, для поддержки обратной совместимости системный администратор Linux должен уметь работать с различными кодовыми страницами, поскольку Unicode не всегда является лучшим или возможным решением для определенной среды, в которой используются символы, отличные от английских.

Вспомните те времена, когда компьютерные сети только начали появляться. Большинство программных продуктов было разработано с учетом только английского языка. По-существу, компьютеры без проблем могли отображать английские символы из стандартной ASCII-кодировки. В стандарте ASCII каждому английскому символу назначено десятичное число от 0 до 127, занимающее один байт. По мере возникновения необходимости использовать большее число символов (например, символы, которые содержатся в французском или испанском языках, или математических уравнениях) в таблицу ASCII был добавлен дополнительный бит, позволивший расширить ее дополнительными 128 символами, которым были присвоены десятичные числа от 128 до 255. Распространенными расширениями стандарта ASCII являются такие стандарты, как ISO Latin I, Extended Binary-Coded Decimal Interchange Code (EBCDIC, используется IBM) и Extended ASCII (используется Microsoft и в операционных системах DOS).

Но что, если пользователь работает в среде с использованием китайского, японского, венгерского, словацкого или другого языка, для которого символов из таблицы ASCII недостаточно? В работе с такими локальными настройками могут помочь различные кодовые страницы.

Кодовые страницы

Кодовая страница – это сопоставление чисел и определенных символов в соответствии с тем набором символов, которые предполагается использовать в одной или нескольких локальных настройках. Традиционно кодовые страницы называют также кодированием, набором символов и набором кодированных символов. Хотя технически различные термины могут слегка отличаться, в этой статье термины кодовая страница, набор символов и кодирование тождественны.

Китайский, японский, словацкий и многие другие языки имеют собственные кодовые страницы. В таблице 2 перечислены некоторые наиболее распространенные кодовые страницы.

Таблица 2. Распространенные кодовые страницы
Кодовая страницаПредставление
850MS-DOS латинская 1 (Западноевропейская)
437DOS-US, OEM-US
932MS-DOS японская кодировка Shift-JIS
852Центральноевропейские языки, использующие латинский шрифт
1252Западноевропейские языки для Windows
950MS-DOS традиционный китайский
65001UTF-8 (Unicode)
28591ISO-8859-1

Работа с пространствами имен в среде с языком, отличным от английского

Поскольку Samba версии 2.x не имела поддержки Unicode, то вся поддержка наборов символов для различных языков заключалась в использовании кодовой страницы определенных локальных настроек. Старые Windows-клиенты используют однобайтовые кодовые страницы (в отличие от многобайтовых). Однако протокол Server Message Block (SMB)/Linux Common Internet File System (CIFS) не поддерживает перекодировку. Таким образом, при взаимодействии Samba и старых Windows-клиентов следует использовать одинаковые кодовые страницы.

Если в вашей среде необходимо использовать определенную кодовую страницу, то вы должны знать, что означают некоторые термины, использующиеся в Samba:

  • Кодировка UNIX – кодировка, использующаяся внутри Linux.
  • Кодировка DOS – кодировка, используемая Samba при взаимодействии со старыми Windows-клиентами.
  • Экранная кодировка – кодировка, используемая для вывода информации на экран.

Если на вашем компьютере с Linux установлена библиотека iconv (скорее всего, это так), то можно посмотреть доступные кодовые страницы, выполнив команду iconv -l, как показано в листинге 1.

Листинг 1. Часть списка доступных кодовых страниц
[tbost@samba ~]# iconv -l
The following list contain all the coded character sets known.  This does
not necessarily mean that all combinations of these names can be used for
the FROM and TO command line parameters.  One coded character set can be
listed with several different names (aliases).

  437, 500, 500V1, 850, 851, 852, 855, 856, 857, 860, 861, 862, 863, 864, 865,
  866, 866NAV, 869, 874, 904, 1026, 1046, 1047, 8859_1, 8859_2, 8859_3, 8859_4,
  8859_5, 8859_6, 8859_7, 8859_8, 8859_9, 10646-1:1993, 10646-1:1993/UCS4,
  ANSI_X3.4-1968, ANSI_X3.4-1986, ANSI_X3.4, ANSI_X3.110-1983, ANSI_X3.110,
  ARABIC, ARABIC7, ARMSCII-8, ASCII, ASMO-708, ASMO_449, BALTIC, BIG-5,
  BIG-FIVE, BIG5-HKSCS, BIG5, BIG5HKSCS, BIGFIVE, BRF, BS_4730, CA, CN-BIG5,
  CN-GB, CN, CP-AR, CP-GR, CP-HU, CP037, CP038, CP273, CP274, CP275, CP278,
  CP280, CP281, CP282, CP284, CP285, CP290, CP297, CP367, CP420, CP423, CP424,
  CP437, CP500, CP737, CP775, CP803, CP813, CP819, CP850, CP851, CP852, CP855,
  CP856, CP857, CP860, CP861, CP862, CP863, CP864, CP865, CP866, CP866NAV,
  CP868, CP869, CP870, CP871, CP874, CP875, CP880, CP891, CP901, CP902, CP903,
  CP904, CP905, CP912, CP915, CP916, CP918, CP920, CP921, CP922, CP930, CP932,

Для вывода текущих локальных настроек компьютера можно использовать команду locale. Если необходимо изменить локальные настройки, обратитесь к документации вашего дистрибутива, чтобы выяснить местоположение файла локальных настроек. После изменения локальных настроек необходимо перезагрузить компьютер. В листинге 2 приведен пример локальных настроек по умолчанию на компьютере под управлением Linux.

Листинг 2. Локальные настройки по умолчанию (Unicode UTF-8) на компьютере Linux
[tbost@samba ~]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Обратите внимание на то, что в листинге 2 локальные настройки имеют имена, позволяющие легко понять, что означает каждая из них (в отличие от многих общепринятых названий кодовых таблиц).

Работа с наборами символов

Старые методы кодовых страниц DOS, используемые в Windows 9х и Samba 2.x, поддерживают использование расширенных наборов символов, но только по отдельности. Например, нельзя одновременно использовать поддержку для испанского, английского и французского языков. Помните об этом ограничении, если перед вами стоит задача обеспечить поддержку нескольких локальных настроек в этих средах.

Если вы обновляете Samba с версии 2.х на версию 3.х или изменяете локальные настройки Samba по умолчанию после использования настроек, отличных от английских, то файлы, содержащие специальные символы, могут оказаться неузнаваемыми. Обычно имена этих файлов превращаются в бессвязный набор символов. Как правило, это касается символов умлаутов и ударений, поскольку они содержатся только в ранее использовавшейся кодовой странице.

Если вы собираетесь назвать сервер Samba, используя символы, отличные от английских, то убедитесь, что локальные настройки Samba совпадают с локальными настройками компьютера Linux. Именно здесь директива UNIX charset играет важную роль в правильном конфигурировании Samba.


Использование библиотек перекодировки

iconv (libiconv) – это распространяемая по лицензии GNU программа для преобразования символов из одной кодировки в другую. Для выполнения всех необходимых процедур по преобразованию символов Samba использует программу iconv, которая должна быть установлена на компьютере Linux. Хотя эти преобразования не всегда проходят безупречно, в целом программа неплохо справляется со своими обязанностями.

Если какой-либо символ отсутствует в таблице символов, то, вероятнее всего, имя файла будет преобразовано в бессвязный набор символов. Тем не менее, если определенный символ не поддерживается в одинаковых кодовых страницах для Linux или Windows, то, скорее всего, вместо него будет подставлен знак вопроса (?). Обычно в таких случаях в файл журнала Samba записываются события об ошибках, которые помогают разобраться с источником проблемы. При возникновении таких ситуаций необходимо более подробно разобраться в том, как коды символов преобразуются на сервере Samba с использованием определенных кодовых страниц.

Также может возникнуть необходимость в компиляции библиотеки libiconv, которая обеспечивает поддержку определенной кодовой страницы, или применении исправлений при использовании сложных многобайтовых символов. Например, такая необходимость может возникнуть при использовании японского языка. Кодовая страница CP932 (также известная как shift_jis и Windows-31J) – это кодовая страница Microsoft, используемая для японского языка. Библиотека libiconv содержит конвертер кодировки CP932, который преобразует кодовую страницу Windows 932 в Unicode. Тем не менее, для выполнения правильных преобразований необходимо установить исправление. В листинге 3 приведен пример, в котором устанавливается нужная библиотека.

Листинг 3. Применение исправления, компиляция и инсталляция библиотеки libiconv для кодовой страницы CP932
[tbost@samba ~]# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.tar.gz
[tbost@samba ~]#
 wget http://www2d.biglobe.ne.jp/~msyk/software/libiconv/libiconv-1.13-cp932.patch.gz
[tbost@samba ~]# tar -xvzf libiconv-1.13.tar.gz
[tbost@samba ~]# cd libiconv-1.13
[tbost@samba ~]# gzip -dc ../libiconv-1.13-cp932.patch.gz | patch -p1
[tbost@samba libiconv-1.13]# ./configure --prefix=/usr/local/lib/libiconv
[tbost@samba libiconv-1.13]# make
[tbost@samba libiconv-1.13]# sudo make install
[tbost@samba libiconv-1.13]# /usr/local/lib/libiconv/bin/iconv  -l | egrep -i '(-31j|-ms)'
EUC-JP-MS EUCJP-MS EUCJP-WIN EUCJPMS

В листинге 3 выполняется следующая последовательность действий:

  1. Загрузка исходного кода libiconv.
  2. Загрузка исправления для CP932.
  3. Распаковка исходного кода libiconv.
  4. Смена директории на только что созданную директорию libiconv-1.13.
  5. Задание в качестве директории для установки файлов директории /usr/local/lib/libiconv.
  6. Компиляция исходного кода и установка программы с использованием разрешений sudo.
  7. Проверка корректной установки исправления.

Преобразование существующих файлов и директорий

Если файлам и директориям уже были присвоены имена в какой-то кодировке, то для поддержки целостности системы имен вы можете захотеть преобразовать их в другую кодировку. Для этого можно использовать инструмент convmv, написанный на Perl.

В листинге 4 выполняется загрузка запакованного tarball-файла и извлечение его содержимого. Поскольку convmv – это сценарий Perl, то его не нужно компилировать. Последняя команда в листинге 4 указывает convmv рекурсивно преобразовать все файлы в кодировке iso-8859-8 (Latin/Hebrew) в кодировку Unicode UTF-8.

Листинг 4. Преобразование имен файлов с помощью convmv
[tbost@samba /]# wget http://www.j3e.de/linux/convmv/convmv-1.14.tar.gz
[tbost@samba /]# tar -xzvf convmv-1.14.tar.gz
[tbost@samba /]# cd convmv-1.14
[tbost@samba convmv-1.14]# sudo ./convmv -f iso-8859-8 -t utf8 
-r --notest --replace /applications

Настройка локализации Samba

Начиная с Samba версии 3 кодировкой по умолчанию является Unicode, что обеспечивает поддержку локализации без дополнительных настроек при условии, что все клиенты успешно работают с Unicode. Тем не менее, при использовании Samba версии 2.х или в случаях, когда в сети присутствуют старые Windows-клиенты, требуется внести дополнительные настройки в конфигурационный файл Samba, указав на необходимость использования нужных локальных настроек.

Когда все необходимые библиотеки перекодировки установлены, настройка Samba на использование локализации не представляет особых сложностей. Помните о том, что протокол CIFS изначально поддерживает символы, отличные от английских, и не нуждается в дополнительной настройке.

Включение символьных наборов

Предположим, вы хотите настроить в Samba поддержку Windows-клиента, использующего испанский язык (если вам нужны другие локальные настройки, используйте соответствующие параметры кодовых страниц DOS и UNIX). В этом случае конфигурация будет выглядеть следующим образом.

Для включения символьных наборов выполните следующие действия:

  1. Для безопасности сделайте резервную копию файла smb.conf.
  2. Откройте файл smb.conf в любом текстовом редакторе.
  3. В разделе глобальных параметров добавьте следующие директивы:

      #======================= Global Settings =======================
    
    [global]
    
    dos charset = CP850
    
    unix charset = ISO8859-1

    Эти параметры конфигурации представляют собой пример использования кодовой страницы 850 на Windows-клиентах в то время, как на сервере Samba используются локальные настройки IS08859-1. Ваша конфигурация, вероятно, будет использовать другие кодовые страницы и локальные настройки.

  4. Проверьте новую конфигурацию на предмет синтаксических ошибок или неподдерживаемых символов:

    [tbost@samba /]# testparm -v
    Load smb config files from /etc/samba/smb.conf
    rlimit_max: rlimit_max (1024) below minimum Windows limit (16384)
    Processing section "[homes]"
    Processing section "[printers]"
    Loaded services file OK.
    Server role: ROLE_STANDALONE
    Press enter to see a dump of your service definitions

    Вы должны увидеть сообщение Loaded services file OK. Если вы видите предупреждения или сообщения об ошибках, ссылающиеся на преобразование символов, то убедитесь, что библиотека libiconv поддерживает необходимую кодовую страницу.

  5. Перезапустите Samba или перезагрузите конфигурационный файл.

Теперь попробуйте подключиться к Windows-клиенту и просмотреть директории, содержащие символ ударения или другие символы, отличные от английских:

[tbost@samba /]# smbclient -U tbost  //windowsclientname/applications
Enter tbost's password:

Здесь windowslcientname – это NetBIOS-имя Windows-клиента в сети, а applications – имя общего файлового ресурса на Windows-клиенте. После того, как вы подключились к общему ресурсу, найдите директории, содержащие символы, отличные от английских, и убедитесь в том, что они отображаются корректно.

Ресурсы

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=823293
ArticleTitle=Изучаем Linux, 302 (смешанные среды): Локализация
publish-date=06282012