Научная статья на тему 'Кодировка Web-публикации в Zope'

Кодировка Web-публикации в Zope Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
128
30
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
WEB-ПУБЛИКАЦИЯ ОБЪЕКТОВ / ЛОКАЛИЗАЦИЯ / ZOPE 2 / OBJECTS WEB-PUBLISHING / LOCALE

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Неудачин И.Г.

Исследуется проблема кодировки и русификации Web-публикации базовых объектов созданных в инфраструктуре Zope 2. Интегрируются предложенные в WWW меры для сервера, интерфейса управления и системы презентации.

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

Текст научной работы на тему «Кодировка Web-публикации в Zope»

Неудачин И.Г. ©

К.ф.м.н., доцент кафедры вычислительной техники Уральский федеральный университет

КОДИРОВКА WEB-ПУБЛИКАЦИИ В ZOPE

Аннотация

Исследуется проблема кодировки и русификации Web-публикации базовых объектов созданных в инфраструктуре Zope 2. Интегрируются предложенные в WWW меры для сервера, интерфейса управления и системы презентации.

Ключевые слова: Zope 2, Web-публикация объектов, локализация Keywords: Zope 2, objects Web-publishing, locale.

Кириллица в Zope. Актуальная проблема повышения глобального рейтинга российского университета [1, 23] решается, в том числе, путем Web-публикаций [2, 75]. Отсюда вытекает проблема адаптации сетевой инфраструктуры разработки приложений к русскому языку.

Сервер Web-приложений Zope дает объектную платформу разработки в отличие от обычных файл-ориентированных систем Web-публикации шаблонов страниц, таких, как PHP и ASP. Инфраструктура Zope позволяет разработчикам специализироваться в своей области, т. к. разделяет содержание, логику обработки данных и дизайн публикации объектов.

В Zope 2.6.0 появилась и продолжает развиваться поддержка unicode. Из-за особенностей реализации, сервер потерял возможность нормальной работы с

национальными языками (в т. ч. с русским) в режиме, отличном от unicode. Устраним ошибки в новом коде Zope и сделаем возможной полноценную работу с сервером в любой кодировке. Примеры этой работы реализованы в экземпляре сервера Zope 2.9.6, но имеют общий характер для других версий.

Войдите в экземпляр сервера Zope 2.9.6 и создайте папку ZopeRU с надписью title "Zope по-русски". В интерфейсе управления вы увидите вместо букв кириллицы их коды:

Zope по-русски

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

Свойства кодировки объектов. Свойства - это способ ассоциировать информацию с объектами в Zope. Многие объекты Zope, включая папки и документы, могут иметь свойства. Свойства (закладка представления Properties в интерфейсе управления), например, могут идентифицировать тип содержимого объекта (многие объекты Zope имеют свойство content type). Другое применение свойств - предоставлять метаданные (meta-data) об объекте, такие как автор объекта, его заголовок (title), статус, и т. д.

Свойства могут быть более сложными, чем строки; они могут быть числами, списками и иными структурами данных. Все свойства объекта управляются через вкладку Properties. Кодировка настраивается в свойствах корневого каталога. Добавим в код интерфейса управления Zope возможность явно указать кодировку страниц.

1. Войдите в корневую папку Root Folder сервера Zope. Выберите закладку Properties и заполните три окна ввода нового свойства внизу страницы. В поле Name введите имя свойства management_page_charset, а в поле Value - значение свойства, равное CP1251 (или

© Неудачин И.Г., 2015 г.

другую желаемую кодировку, например, koi8-r, utf-8) [3, 2]. В поле Type оставьте тип string и нажмите кнопку Add. Убедитесь, что свойство management_page_charset с заданными параметрами появилось в представлении Properties. Нажмите кнопку Save Changes и вернитесь к представлению Contents.

2. Проверим появление русских названий. Выберите объект - папку ZopeRU и на его закладке свойств Properties замените коды в названии Title на "Zope по-русски". Нажмите кнопку Save Changes. Убедитесь, что в папке корня правильно отображается название ZopeRU так как было введено "Zope по-русски", т. е. ZopeRU (Zope по-русски).

Если вместо русских букв появляются непонятные символы, проверьте кодировку страницы вашего Web-браузера в меню Вид/Кодировка. Она должна соответствовать значению поля Value в свойстве management_page_charset папки корня Zope - кириллица Windows.

Русские буквы в Zope. Рекомендуется указывать в интерфейсе управления Zope кодировку, идентичную кодировке сервера. Вот меры по настройке нужной кодировки страниц портала.

1. Кодировка экземпляра задается в файле конфигурации ..,etc\zope.conf. Откроем файл конфигурации в текстовом редакторе для редактирования. Директива кодировки издателя Zpublisher по умолчанию закрыта символом комментария #

# default-zpublisher-encoding utf-8

Уберем символ комментария '#'. Для того чтобы кодировка по умолчанию для Web-браузера была CP1251, подставим ее на место utf-8

default-zpublisher-encoding CP1251

и сохраним файл после редактирования. Директива default-zpublisher-encoding задает набор символов для кодирования данных unicode, которые попадают в Zpublisher. Если не указано явно другое кодирование, то останется код по умолчанию iso-8859-15.

Перезапустим Zope. Сейчас браузер запомнит кодировку "Кириллица (Windows)" и разработчику, и посетителю не потребуется ее устанавливать вручную повторно при переключении страниц.

Кроме того, в форме редактирования Page Template появилось дополнительное поле Encoding для указания кодировки загружаемого файла. В этом поле указано значение CP1251.

2. Дополнительный способ - установить кодировку в заголовке каждой Web-страницы вашего портала. Копируйте в Examples. Редактируйте объект standard_html_header из корневой папки на закладке Edit, используя тег <meta>. Впишите тег <meta> в текст заголовка этого метода DTML на закладке Edit.

<html>

<head> <meta HTTP-EQUIV=”Content-type” CONTENT="text/html" CHARSET="windows-1251">

<title>dtml-title_or_id</title></head>

<body bgcolor="#FFFFFF">

Сохраните изменения кнопкой Save Changes. Браузер будет считывать задание CHARSET=windows-1251", и не потребуется настраивать кодировку страницы вручную. Такой подход опирается на метод заимствования Zope для классов объектов. Если сохранить в заготовках методов и документов DTML строку

<dtml-var standard_html_header>

то настройки standard_html_header из корневой папки будут действовать в новых объектах без явного указания.

Шаблон страницы Page Template по-русски. Если вы предпочитаете писать шаблоны страниц по-русски, это делается не в Web-браузере. Необходимо оформить текстовые страницы в любом редакторе на вашем компьютере, а затем загрузить их в новый объект Page Template, как это описано дальше. Редактировать Page Template с кириллицей и сохранять изменения Save Changes через Web-интерфейс внутри Zope не удастся. Лучше не пишите по-русски названия Title у шаблонов страниц - будет исключительная ситуация с потерей доступа к объекту.

1. Создайте на вашем компьютере текстовый файл с именем "RU.htm". Заполните его следующим содержанием:

<html>

<head>

<title tal:content="template/title">The titl e</titl e>

</head>

<body>

<h2><span tal: replace="here/title_or_id"> title или id KOHTeHTa</span>

<span tal:condition="template/title" tal:replace="template/title"> необязательный заголовок шаблона</span>

</h2>

Это Page Template, шаблон страницы

<em tal:content="template/id">template id</em>.

</body>

</html>

Сохраните файл и запомните, куда вы его записали. Можно проверить код в index.htm,

открыв файл в окне браузера___________________________________________________________

title или id контента необязательный заголовок шаблона

Это Page Template, шаблон страницы template id.

Браузер игнорирует теги tal: при выводе файла на экран.

2. Войдите в папку ZopeRU. Выберите шаблон страницы Page Template в списке объектов Add. Откроется форма добавления шаблона страницы Add Page Template. Введите в поле шаблона страницы Id обозначение имени "RU". Последний элемент формы добавления - кнопка просмотра Обзор.... Щелкните этой кнопкой. Браузер выведет диалоговое окно выбора файла. Выберите на диске созданный файл "RU.htm".

Нажмите Add и вернётесь в представление Contents папки ZopeRU с новым шаблоном RU. Не пользуйтесь кнопкой Add and Edit, т. к. сохранить изменения или загруженный текст в этом случае не удастся. Будет выдано сообщение об ошибке, например

Error Type: UnicodeDecodeError

Error Value: 'ascii' codec can't decode byte 0xd3 in position 199: ordinal not in range(128)

как только вы попытаетесь сохранить код шаблона с кириллицей Save Changes.

3. Щелкните закладку Test и посмотрите, как браузер интерпретировал текст из файла "RU.htm".

Zope по-русски

Это Page Template, шаблон страницы RU.

Тег tal:replace="here/title_or_id" выдал заголовок папки "Zope по-русски", а тег <em tal:content="template/id">template id</em> показал имя RU шаблона страницы курсивом. Тест прошел успешно, т. к. название папки, в которой находится шаблон действительно "Zope по-русски",

Редактировать Page Template с кириллицей при этих настройках можно только в текстовом файле на вашем ПК. Задача - сделать этот код динамическим, решена. Если изменится заголовок папки (сайта), то это будет автоматически учтено без вмешательства Web-дизайнера или администратора.

Решение проблемы с кодировкой внутри Zope. Интересно, что указание кодировок, фактически, уже есть: давно известно, что для корректной работы сервера обязательно должна быть задана локаль (в т. ч. кодировка). Также естественно, указывать в этом случае кодировку в тегах meta и в заголовках на страницах интерфейса управления Zope (иначе некоторые браузеры отказываются нормально посылать запросы). В простейшем случае предполагается совпадение этих двух кодировок.

Сообщение об ошибке UnicodeDecodeError содержит комментарий того, что встретился код, который вышел за пределы диапазона значений 0..127, доступного 'ascii'.

1. У необязательного параметра кодировки "encoding" в преобразованиях unicode есть значение по умолчанию.

encoding = "ascii" # Значение по умолчанию из _PyUnicode_Init()

Оно обычно равно ascii, но его можно поменять, отредактировав файл Zope2_9_6\Python\Lib\site.py (файл скрипта находится в установке Zope) и проставив там желаемую кодировку. Модуль site.py добавления в sys.path путей поиска сторонних пакетов содержит описание функции setencoding(), которая устанавливает unicode кодирование строки. Значение по умолчанию - 'ascii', но если есть желание экспериментировать, его можно изменить [4, 4].

Нужная вам функция setencoding() указания кодировки выглядит вот так: def setencoding():

encoding = "ascii" # Default value set by _PyUnicode_Init()

if 0:

# Enable to support locale aware default string encodings.

import locale

loc = locale.getdefaultlocale()

if loc[1]:

encoding = loc[1]

if 0:

# Enable to switch off string to Unicode coercion

# and implicit Unicode to string conversion.

encoding = "undefined"

if encoding != "ascii":

# On Non-Unicode builds this

# will raise an AttributeError...

# Needs Python Unicode build !

sys.setdefaultencoding(encoding)

Поставьте 1 в первом операторе if, т. е. if 1: вместо if 0:

В этом случае безусловно будет выполняться опертор loc = locale.getdefaultlocale(). Последний (т. к. выполняется условие encoding != "ascii") задает кодировку sys.setdefaultencoding(encoding) из локали соответствующего модуля locale.

2. Если ваш Python не поддерживает модуль locale, или если запрашиваемый locale не будет распознан вашей системой, то возникнет ошибка, и Zope не стартует.

Локаль сервера задана по умолчанию. Если локаль не указана явно, то сервер игнорирует какие-либо установки локали (Default: unset). Для неанглоязычных серверов это может оказаться фатальным: не будет работать поиск посредством ZCatalog и

форматирование с использованием StructuredText. Кроме того, начиная с версии Zope 2.6.0, будет невозможно использовать страницы управления свойствами [5, 116].

Настроим русские локали. Откройте файл конфигурации экземпляра сервера etc\zope.conf в любом текстовом редакторе. Для настройки locale найдите в файле zope.conf строку

# locale fr_FR

Команда не выполняется, т. к. закрыта символом # и, поэтому является комментарием. Уберите символ # и задайте русскую локализацию [6, 2].

locale Russian_Russia.1251

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

Выполните тестирование в загруженном из текстового файла шаблоне Page Template с идентификатором RU, в который добавьте заголовок "ZPT по-русски". Когда вы сохраните изменения кнопкой Save Changes, не появится сообщение об ошибке.

После тестирования на вкладке Test в нашем случае получен правильный результат. Тест прошел, т. к. название папки, в которой находится шаблон действительно "Zope по-русски", а главное заключается в том, что кириллица в шаблоне и в его заголовке "ZPT по-русски" не вызвало ошибок при сохранении объекта.

Id объекта на родном языке. Можно научить Zope понимать русский (и другие) языки в поле имени объекта Id. При добавлении объекта в Zope необходимо задавать его имя Id, которое должно состоять из символов ascii. Zope проверяет символы и выдаёт ошибку, если Id не соответствует этим требованиям.

Проверку можно отключить в скрипте ObjectManager.py, который находится в каталоге платформы, а не экземпляра Zope [7, 2].

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

.. .\Zope\lib\python\OFS\ObjectManager.py

Требуется изменить описание функции checkValidId:

def checkValidId(self, id, allow_dup=0):

if bad_id(id) is not None: raise BadRequest, (

'The id "%s" contains characters illegal in URLs.' % escape(id))

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

def checkValidId(self, id, allow_dup=0):

if bad_id(id) is not None:

# raise BadRequest, (

# 'The id "%s" contains characters illegal in URLs.'

# % escape(id)) pass

После чего следует перезапустить экземпляр сервера. Проверим, поменяв Id каталога ZopeRU на "Zope по-русски" и стерев название. Поместите внутрь "Zope по-русски" копию шаблона страницы RU с новым именем "ZPT по-русски" без заголовка Title. Test шаблона страницы "ZPT по-русски" выдаст:_______________________________________________________

Zope по-русски

Это Page Template, шаблон страницы ZPT по-русски.

Добавьте метод DTML с русским идентификатором "DTML по-русски" и посмотрите

его на закладке View.__________________________________________________________________

Zope по-русски

This is the DTML по-русски Document in the Zope по-русски Folder.

Аналогичный результат получен для объекта публикации DTML Document. Мы тестировали четыре базовых объекта публикации контента: Folder, Page Template, DTML Method (рисунок):

Рис. Объекты с русскими идентификаторами

Тест не вызвал ошибок. Теперь Zope позволяет создавать объекты на любом языке, включая русский. Всё проверено в ZOPE 2.9.6 и работает без сообщений об ошибках для Windows XP Professional.

Недостаток - в адресной строке браузера не отображаются русские символы из имени объекта, а только их коды. Например,

http://localhost:8080/ZPT%20%EF%EE-%F0%F3%F1%F1%EA%E8

вместо

http://localhost:8080/ZPT по-русски

Возможные отрицательные последствия изменения ObjectManager.py в настоящее время не обнаружены.

Заключение. Систематизированы меры поддержки русской локализации платформы Web-публикации объектов Zope. Эти меры позволяют применять кириллицу во внутреннем интерфейсе управления и на страницах внешнего представления контента сервера в браузере. Проводится дальнейшее тестирование настроек русского языка в инфраструктуре Web-публикации объектов Zope.

Литература

1. Неудачин И.Г., Рогович В.И. - Алгоритм оптимизации места университета в мировых рейтингах // Актуальные проблемы гуманитарных и естественных наук. - 2013. - №06. - с. 23-29.

2. Неудачин ИГ. - ИНДИКАТОРЫ ГЛОБАЛЬНОГО WEB-РЕЙТИНГА УНИВЕРСИТЕТОВ // Теоретические и методологические проблемы современного образования: Материалы XVIII Международной научно-практической конференции 3 октября 2014 г. / Науч.- инф. издат. центр «Институт стратегических исследований». - Москва: Изд-во «Институт стратегических исследований». - 2014. - с. 75-78.

3. Новое в Zope-2.6.0 // Обработка Unicode [Электронный ресурс]. - Режим доступа:

http ://old .neural.ru/Products/Zope/Zope-2.6.0/print_html

4. Что делать, если в Zope проблемы с кодировкой [Электронный ресурс]. - Режим доступа: http://habrahabr.ru/post/144121/

5. Орлов А. Краткое руководство пользователя пакета [Электронный ресурс]. - Режим доступа: http://linux.yaroslavl.ru/docs/altlinux/master22_u/ ch13.html

6. Ласто В. Первое включение Блога на хосте [Электронный ресурс]. - Режим доступа: http://lasto.com/lastoblog/first.htm

7. Zope понимает ID на Русском [Электронный ресурс]. - Режим доступа:

http://mymir.ru/~bouillon/blog/Zope понимает ID на Русском

i Надоели баннеры? Вы всегда можете отключить рекламу.