Несколько фокусов с CMS Joomla! Реализация двуязычного сайта с постраничным переключением языков
- Опубликовано: 25.02.2017
- Автогенерация и отображение эскизов фотоальбомов модулем RokBox
- Доработка горизонтального меню-списка для динамического разворачивания подпунктов
- Единая кнопка «Сохранить изменения» для корзины Интернет-магазина VirtueMart
- Изменение/снятие ограничений на длину строки поиска и его попутная доработка
- Исправление ссылки на главную/домашнюю в горизонтальном меню старого стиля
- Модернизация сайтов на Joomla! старых версий 1.5/2.5 до актуальной 3.6
- Отображение заглушки «сайт в разработке» для всех и всего сайта для избранных
- Подсветка пункта меню типа «внешняя ссылка», или Как сделать ссылки на категории VirtueMart
- Преобразование адресов сайта в дружественные (SEF) для внешних нужд
- Реализация двуязычного сайта с постраничным переключением языков
- Удаление значка печати из списка статей при сохранении его на странице статьи
Реализация двуязычного сайта с постраничным переключением языков
В моей практике я крайне редко сталкиваюсь с необходимостью реализовать двуязычный (и тем более многоязычный) сайт. Если не считать два совершенно разных официальных сайта фирмы, где я работаю, русскоязычный и англоязычный, разнесённые даже по разным доменам, то сталкивался с такой задачей я всего пару раз: на этом своём сайте (у него есть не только основная русскоязычная часть, но и урезанная англоязычная), и на одном из недавних проектов, в результате которого и родилось описание этого «фокуса» с Joomla. Ещё раз отмечу, что речь идёт не о тривиальной задаче создать два сайта на разных языках, разнесённые по разным доменам/папкам (то есть, фактически, два разных Joomla-сайта), а о задаче создать единый двуязычный сайт с постраничным соответствием/переключением языков.
Также необходимо отметить, что речь идёт о Joomla версии 1.5.x, так как в Joomla 1.6 и старше описанная задача может решаться гораздо проще. В по-прежнему же популярной «старой» Joomla 1.5.x для подобной задачи ответ один – JoomFish. К сожалению, я ничего не могу сказать про этот компонент управления многоязыковым содержимым – времени разбираться в нём у меня не было, да и число страниц у сайта было не таким больши́м, чтобы применять такое «тяжёлое» решение. Поэтому данный «фокус» с Joomla использует только её штатные средства.
Итак, для реализации двуязычного сайта с постраничным переключением языков (русский/английский) нам понадобятся:
- Русскоязычные и англоязычные разделы (например, «Продукция» и “Production”) и категории (например, «Кабельная продукция» и “Cable Production”) с однозначным соответствием друг другу.
- Русскоязычные и англоязычные материалы с однозначным соответствием друг другу, с суффиксом языка в псевдониме (например, tvcableproductionru и tvcableproductionen), отнесённые к соответствующим разделам и категориям.
- Русскоязычные и англоязычные меню с однозначным соответствием друг другу (например, «Верхнее меню» и “Top Menu”), с суффиксом языка в псевдонимах пунктов меню (например, те же tvcableproductionru и tvcableproductionen, если пункты меню ссылаются на конкретные материалы).
- Русскоязычные и англоязычные модули вывода меню, текстов и т. п. с однозначным соответствием друг другу, с выводом не на всех страницах, а только на относящихся к меню соответствующего языка (например, модуль «Верхнее меню» должен выводиться только на русскоязычных страницах верхнего меню и любого другого русскоязычного меню).
- Шаблон дизайна с позициями для вывода меню («Верхнее меню» и “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;?>
Собственно, и всё, в общих чертах должно быть понятно, а с остальным либо сами разберётесь, либо спросите у меня в комментариях. 😊