Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

MediaWiki

Глава 12 из книги "Архитектура приложений с открытым исходным кодом", том 2.
Оригинал: MediaWiki
Автор: Sumana Harihareswara, Guillaume Paumier
Перевод: А.Панин

12.5. Языки

Контекст и обоснование

Ключевым фактором успешного процесса создания и распространения свободной информации с участием всех желающих является предоставление этой информации на стольких языках, на скольких это возможно. Сайт Wikipedia доступен на более чем 280 языках и англоязычные статьи энциклопедии составляют менее чем 20% от всех статей. Так как сайт Wikipedia и родственные ему сайты существуют на таком огромном количестве языков, важно не только предоставлять читателям содержимое статей на их родном языке, но также предоставлять в их распоряжение локализованный интерфейс и эффективные инструменты ввода и преобразования текста для того, чтобы участники проекта могли добавлять информацию.

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

Приложение MediaWiki на данный момент локализовано с использованием более чем 350 языков, включая не латинские языки и языки с написанием справа налево (RTL), причем локализации имеют различный статус завершения. Интерфейс и содержимое могут использовать разные языки, а также быть смешаны.

Язык содержимого статей

Изначально приложение MediaWiki использовало кодировки в зависимости от используемых языков, что приводило к множеству проблем; например, сценарии, использующие другие языки, не могли использоваться в заголовках страниц. Вместо различных кодировок была применена кодировка UTF-8. Поддержка отличных от UTF-8 наборов символов была прекращена в 2005 году вместе с кардинальными изменениями схемы базы данных в версии MediaWiki 1.5; в данный момент текст статей должен использовать кодировку UTF-8.

Символы, не доступные на клавиатуре редактирующего статью участника, могут быть заданы и вставлены с помощью инструментов редактирования приложения MediaWiki (Edittools), элемента интерфейса, расположенного ниже окна редактирования; версия этих инструментов, работающая с использованием языка JavaScript, автоматически вставляет выбранный символ в окно редактирования. Расширение WikiEditor для приложения MediaWiki, разработанное в рамках кампании по улучшению пользовательских качеств приложения, объединяет список специальных символов с панелью инструментов редактирования. Другое расширение с названием Narayam предоставляет возможность использования дополнительных методов ввода и возможностей назначения клавиш для символов, не входящих в таблицу ASCII.

Язык интерфейса

Сообщения интерфейса хранились в массивах PHP в форме пар ключ-значение начиная с момента создания программного обеспечения под названием "Фаза III". Каждое сообщение идентифицируется с помощью уникального ключа, который ставится в соответствие различным значениям для различных языков. Ключи задаются разработчиками, вынужденными использовать префиксы для расширений; например, ключи сообщений для расширения UploadWizard начинаются с префикса mwe-uowiz-, где mwe расшифровывается как расширение MediaWiki (MediaWiki extension).

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

Например, определения являются неизменяемыми словами в английском языке, но в таких языках, как французский требуется согласование определений с существительными. Если пользователь указал свой пол на странице настроек профиля, для корректного обращения к пользователю в сообщениях интерфейса может использоваться модификатор {{GENDER:}}. Множество других модификаторов включает в свой состав модификатор {{PLURAL:}} для "простых" языковых групп и языков, таких, как арабский, использующих двойные, тройные или краткие записи чисел, а также модификатор {{GRAMMAR:}}, позволяющий выполнять функции грамматических преобразований для таких языков, как финский, грамматические особенности которого предполагают наличие различий или изменений форм слов.

Локализация сообщений

Локализованные сообщения интерфейса приложения MediaWiki находятся в файлах MessagesXx.php, где Xx является кодом ISO-639 для языка (т.е., для французского языка файл будет иметь название MessagesFr.php); используемые по умолчанию сообщения написаны на английском языке и находятся в файле MessagesEn.php. Расширения приложения MediaWiki используют аналогичную систему или хранят все локализованные сообщения в файле с именем <Название-расширения>.i18n.php. Вместе с переродами, файлы сообщений также включают такую специфическую для языков информацию, как форматы даты.

Передача переводов проекту обычно осуществляется путем отправки патчей для файлов исходного кода PHP с именами MessagesXx.php. В декабре 2003 года в рамках выпуска версии 1.1 приложения MediaWiki была представлена система "сообщений из базы данных", представляющая собой подмножество страниц wiki из пространства имен MediaWiki, хранящих сообщения интерфейса. Содержимое страницы wiki с названием MediaWiki:<Ключ-сообщения> является текстом сообщения, более приоритетным, чем значение из файла сообщений PHP. Локализованные версии сообщения хранятся в форме страниц с названиями MediaWiki:<Ключ-ссобщения>/<код-языка>; например, MediaWiki:Rollbacklink/de.

Эта возможность позволила опытным пользователям перевести (и изменить) сообщения интерфейса в рамках своей системы wiki, в ходе процесса не модифицируя поставляемые в составе приложения MediaWiki файлы интернационализации. В 2006 году Niklas Laxstrom создал специальный, значительно доработанный сайт на основе MediaWiki (на сегодняшний день располагающийся по адресу http://translatewiki.net), на котором переводчики могли без лишних сложностей локализовать сообщения интерфейса для всех языков, просто редактируя страницу wiki. После этого обновлялись файлы MessagesXx.php в репозитории исходного кода приложения MediaWiki, из которого они могли автоматически извлекаться любой системой wiki, а также обновляться с помощью расширения LocalisationUpdate. На сайтах организации MediaWiki сообщения из базы данных используются в данный момент только для изменения вида страниц, но не для локализации. Расширения приложения MediaWiki и некоторые такие сопутствующие приложения, как боты также локализуются с помощью сайта translatewiki.net.

Для облегчения понимания переводчиками контекста и значения сообщения интерфейса при разработке приложения MediaWiki хорошей практикой является предоставление документации для каждого сообщения. Эта документация хранится в специальном файле сообщений с кодом языка qqq, который не соответствует какому-либо из реально существующих языков. Документация для каждого сообщения выводится в интерфейсе перевода на сайте translatewiki.net. Другим полезным инструментом является код языка qqx; при его использовании в качестве аргумента параметра &uselang после запроса страницы wiki (т.е., при использовании запроса, аналогичного https://en.wikipedia.org/wiki/Special:RecentChanges?uselang=qqx) приложение MediaWiki выведет имена ключей сообщений вместо их значений при формировании пользовательского интерфейса; это очень полезно для идентификации того, какое сообщение следует перевести или изменить.

Зарегистрированные пользователи могут выбрать свой язык интерфейса на странице настроек в случае необходимости изменения стандартного языка интерфейса вебсайта. Приложение MediaWiki также поддерживает языки, выбираемые в случае неполадок: если сообщение не доступно для выбранного языка, будет выведено сообщение для наиболее схожего языка, который не обязательно должен являться английским. Например, в качестве замены бретонского языка используется французский язык.


Далее: Пользователи