Solution Technologies
Управление сайтом без ограничений

Руководство разработчика XS2

Скачать pdf-версию.

Часть 2. Решения на платформе XS2

Глава 13. Многоязычные сайты

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

  1. Полная идентичность – версии сайта полностью соответствуют друг другу и по структуре и по содержанию. Для такого сайта можно с уверенностью утверждать, что если в русской версии сайта в разделе A есть статья B, то в английской версии есть точно такая же статья в точно таком же разделе. При этом путь по сайту к статье А в русской версии полностью идентичен пути к ней в английской версии.
  2. Модульная идентичность – версии сайтов сходны лишь в общем наборе модулей, однако навигация и содержание могут сильно различаться. Для такого сайта можно утверждать, что, если в русской версии есть лента новостей, то она может быть и в английской, при этом новости, входящие в ленту в разных версиях, могут быть как идентичными, так и совершенно разными.

Для быстрого построения сайта с неограниченным количеством языковых версий можно использовать уже готовый бесплатный модуль XS2 "Многоязычность" ("multilang"). В нем реализован подход модульной идентичности, который является более гибким и более распространенным по сравнению с подходом полной идентичности.

Как работает этот модуль? К проекту подключается модуль "Многоязычность". Для каждой языковой версии сайта в модуле "Многоязычность" создается узел типа "language". В поле "Code" указывается язык версии. Рекомендуется использовать строковые двухбуквенные обозначения (ru, en, fr и т.п.). Затем в типе "language" по мере проектирования, разработки и развития проекта можно добавлять поля, хранящие статичные языковые фразы на соответствующем языке.

Статичные фразы – это те строки, которые на обычном, одноязычном сайте, вставляются непосредственно в шаблон или в процессор, а не хранятся в объектах. Например: «подробнее», «перейти», «отравить», «Вы не заполнили обязательное поле», «Спасибо, Ваше сообщение отправлено» и т.п. При создании шаблонов и процессоров многоязычного сайта в тех местах, где в одноязычном сайте была бы просто строка, нужно будет вставлять значение соответствующего поля узла "language".

В каждом модуле проекта, в котором будет иметься несколько языковых версий, создается тип узла "lang" c обязательным полем "Language". Поле "Language" имеет тип "lnk" и указывает на объекты типа "language" из модуля "multilang". В корне модуля для каждой языковой версии создается объект "lang" – а все остальные объекты добавляются уже в него или его потомков.

В многоязычном сайте для каждого метода при его выводе необходимо знать, какая языковая версия сейчас является текущей. Модуль "multilang" содержит всего один метод "set". Этот метод рассчитывает, что в первом параметре метода ($_THE.PARAMS[0]), в который его включили, передан код языка текущей версии. Таким образом, при разработке методов следует следить за передачей текущей языковой версии через первый параметр.

После включения метода set станут доступны следующие переменные:

  • $langProfile - объект language модуля multilang, соответствующий текущей языковой версии. Его можно использовать для доступа к статичным языковым фразам.
  • $langCondition - представляет собой массив, в котором для каждого модуля текущего проекта хранятся строки условий. Эти строки условий можно использовать в параметре condition некоторых функций XS2.API для того, чтобы возвращать объекты, относящиеся только к текущей языковой версии.
  • $langVersion -представляет собой массив, в котором для каждого модуля текущего проекта хранится объект lang, представляющий в данном модуле текущую языковую версию.

Рассмотрим на примере применение модуля "multilang". Предположим, что на сайте необходимо организовать две версии: русскую и английскую. В числе прочих модулей на данном сайте есть модуль "Новости" ("news"), являющийся стандартным бесплатным модулем XS2. Необходимо организовать в нем две языковых версии.

  • Шаг 1: Подключить к проекту модуль multilang. Создать в модуле два объекта language: один для русской версии (в поле Code указать «ru») и один для английской (в поле Code указать «en»).
  • Шаг 2: Подключить к проекту модуль news и добавить в него тип объекта lang. В типе объекта lang добавить поле Language типа lnk, ссылающееся на тип объекта language из модуля Многоязычность. Указать для типа lang, что он является группой и допускает дочерние объекты типа news.
  • Шаг 3: В модуле news добавить в корне два объекта типа lang: в первым в поле Language выбрать объект language с кодом ru, во втором – с кодом en. Далее новости можно добавлять в один из этих двух объектов в зависимости от того, к какой версии относится та или иная новость.
  • Шаг 4: Создать в типе объекта language модуля multilang поля для хранения фраз. Для новостей нам понадобится фраза «подробнее» и «все новости». Для них создадим строковые поля Details и AllNews соответственно.
  • Шаг 5: Включить в методы вывода новостей метод set модуля multilang с помощью конструкции {xs2Fetch mod=”multilang” met=”set”}.

В Листинге 32 представлен код метода, отвечающего за вывод списка 5 последних новостей в стандартном модуле "news" (/news/list), а в Листинге 33 - его модифицированная верся, учитывающая текущую языковую версию и выбирающая только новости на определенном языке.

Листинг 32
1.  {xs2GetNodes NType="news" var="news"}
2.  
3.  {section name="newsLoop" loop=$news max=$newsCount}
4.    {$news[newsLoop].NName}, {$news[newsLoop].Date}<br>
5.    {$news[newsLoop].Text|truncate:$truncateNews}<br>
6.    <a href="{xs2Href mod="news" obj="news" met="show" ¶
                 atr=$news[newsLoop].NodId}">подробнее</a>
7.    <hr>
8.  {/section}
9.  
10. <a href="{xs2Href mod="news" obj="news" ¶
                 met="archive"}">Все новости</a>

Листинг 33
1.  {xs2Fetch mod="multilang" met="set"}
2.  
3.  {xs2GetNodes NType="news" var="news" ¶
                 condition=$langCondition.news}
4.  
5.  {section name="nl" loop=$news max=$newsCount}
6.    {$news[nl].NName}, {$news[nl].Date}<br>
7.    {$news[nl].Text|truncate:$truncateNews}<br>
8.    <a href="
9.     /news/news/show/{$langProfile.Code}.
10.    {$news[nl].NodId}.htm">
11.     {$langProfile.Details}
12.   </a>
13.   <hr>
14. {/section}
15. 
16. <a href="{xs2Href mod="news" obj="news" ¶
                 met="archive"}">{$langProfile.AllNews}</a>

Введение

Основные характеристики системы XS2
Требование к хостинг-площадке, на которой устанавливается XS2.
Инструкции по установке XS2 на хостинг-площадке.

Часть 1. XS2 шаг за шагом

Модель данных в XS2: модуль, тип, узел, метод.
Как организовать простейшую структуру данных в XS2 и вывести узлы на главной странице сайта.
Множественный выборки узлов и их вывод на странице в цикле.
Создание второстепенной страницы и организация ссылок на нее.
Структура метода в XS2. Что такое процессор и как он взаимодействует в шаблоном внутри одного метода.
Дерево как универсальный способ организации узлов в XS2. Как настраивать вложенность узлов друг в друга.
Ссылки между узлами как основное средство построения альтернативных структур узлов.
Использование функция XS2 API для выполнения редакторских операций в коде методов.
Функция xs2Fetch и ее возможности при организации повторного использования методов.
Подробнее о взаимодействии процессора и шаблона в одном методе: передача данных между процессором и шаблоном.

Часть 2. Решения на платформе XS2

О чем пойдет речь во второй части, для кого она предназначена.
Как производить дополнительные манипуляции с узломпри его вставка, редактировании, удалении, копировании или перемещении.
Постраничный вывод как способ показа больших массивов данных в одном шаблоне.
Как с помощью XS2 быстро сделать сайт с поддержкой множества языковых версий.
Быстрое развертывание удобных пользовательских интерфейсов с технологией AJAX на платформе XS2.
Подробнее о том, как организовать сложные структуры данных в XS2 и производить в них поиск.
В следующих главах, которые будут публиковаться здесь по мере их написания, мы планируем рассказать о:
Copyright ©1998-2008 Солютекс. Все права защищены.
Этот сайт сделан в designLab | Работает на технологии XS2
Условия использования | О защите конфиденциальности