Логотип StingRay

Социальные сети
FacebookInstagramRSSTwitterYouTubeВ контактеОдноклассники
FacebookInstagramRSSTwitterYouTubeВ контактеОдноклассники
Силуэт человека

Несколько фокусов с CMS Joomla! Реализация двуязычного сайта с постраничным переключением языков


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

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

Также необходимо отметить, что речь идёт о Joomla версии 1.5.x, так как в Joomla 1.6 и старше описанная задача может решаться гораздо проще. В по-прежнему же популярной «старой» Joomla 1.5.x для подобной задачи ответ один – JoomFish. К сожалению, я ничего не могу сказать про этот компонент управления многоязыковым содержимым – времени разбираться в нём у меня не было, да и число страниц у сайта было не таким больши́м, чтобы применять такое «тяжёлое» решение. Поэтому данный «фокус» с Joomla использует только её штатные средства.

Итак, для реализации двуязычного сайта с постраничным переключением языков (русский/английский) нам понадобятся:

  1. Русскоязычные и англоязычные разделы (например, «Продукция» и “Production”) и категории (например, «Кабельная продукция» и “Cable Production”) с однозначным соответствием друг другу.
  2. Русскоязычные и англоязычные материалы с однозначным соответствием друг другу, с суффиксом языка в псевдониме (например, tvcableproductionru и tvcableproductionen), отнесённые к соответствующим разделам и категориям.
  3. Русскоязычные и англоязычные меню с однозначным соответствием друг другу (например, «Верхнее меню» и “Top Menu”), с суффиксом языка в псевдонимах пунктов меню (например, те же tvcableproductionru и tvcableproductionen, если пункты меню ссылаются на конкретные материалы).
  4. Русскоязычные и англоязычные модули вывода меню, текстов и т. п. с однозначным соответствием друг другу, с выводом не на всех страницах, а только на относящихся к меню соответствующего языка (например, модуль «Верхнее меню» должен выводиться только на русскоязычных страницах верхнего меню и любого другого русскоязычного меню).
  5. Шаблон дизайна с позициями для вывода меню («Верхнее меню» и “Top Menu” должны выводиться в одной позиции, topmenu), текстов и т. п., а также со специальным обработчиком переключения языков:
$currentURL = &JFactory::getURI()->toString(array("path"));
$lang = substr($currentURL,strlen($currentURL) - 2, 2);
if (($lang != "ru") && ($lang != "en")) $lang = "ru";
if ($_GET["lang"] == "change")
 {
  if ($lang == "ru")
   $lang = "en";
  else
   $lang = "ru";
  $newURL = substr($currentURL, 0, strlen($currentURL) - 2).$lang;
  header("Location: ".$newURL);
  exit;
 };

<a href="<?php echo $currentURL;?>?lang=change">Ru/En</a>

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

© 2011 <?php if ($lang == "ru"):?>Я сам<?php else:?>Me Myself<?php endif;?>

Собственно, и всё, в общих чертах должно быть понятно, а с остальным либо сами разберётесь, либо спросите у меня в комментариях. 😊

Добавьте свой комментарий или войдите, чтобы подписаться/отписаться.
OpenId
Предпросмотр
Улыбка Подмигивание Дразнит Оскал Смех Огорчение Сильное огорчение Шок Сумасшествие Равнодушие Молчание Крутизна Злость Бешенство Смущение Сожаление Влюблённость Ангел Демон Задумчивость Рука-лицо Не могу смотреть Жирный Курсив Подчёркивание Зачёркивание Размер шрифта Гиперссылка Цитата
Загрузка…