Language hack для любой CMSВ названии этой статьи нет опечатки: речь идёт не о языковом пакете, а именно о языковом хаке, позволяющем сделать многоязычным практически любой сайт, не вдаваясь в особенности его CMS.
Всё, что для этого нужно - это:
1. Придумать какую-то разметку, отделяющую фрагменты текста на одних языках от фрагментов на других и от фрагментов, не требующих перевода, и какой-нибудь способ дать скрипту понять, что от него требуется тот или иной язык. 2. Найти и переписать на сайте все текстовые фрагменты (самая объёмная и кропотливая работа, не требующая, впрочем, особого интеллекта - её можно поручить кому-нибудь попроще). 3. Перехватить вывод HTML-кода веб-страницы и изъять из него все фрагменты кроме нужного языка.
Вот как это делаю я на двуязычном русско-английском сайте:
1. В качестве разметки я использую последовательности символов "{R}", "{E}" и "{A}". Например, заключённое в отдельный тэг <span> слово "Контакты", которое должно в английской версии сайта выглядеть как "Contacts", записывается так: <span>{R}Контакты{E}Contacts{A}</span> Понятно, что затем в английской версии я должен удалить всё между "{R}" и следующей открывающейся фигурной скобкой, в русской - всё между "{E}" и "{", и затем в обеих версиях подчистить оставшиеся "{R}", "{E}" и "{A}". В качестве параметра, задающего переключение с русской версии на английскую, лично я использую поддомен-синоним en.MyDomain.com, и в самом начале выполнения /index.php определяю задающую язык константу E следующим образом: define( "E", ( preg_match("/^en./", $_SERVER["HTTP_HOST"]) ) ); Это проще всего, если у вас есть возможность добавлять поддомены в качестве синонимов к основному сайту. Но можно и просто хранить языковый параметр в сессии, извлекая его инструкцией типа такой: if(!isset($_SESSION)) session_start(); При этом в скрипте, вызываемом для переключения с русского языка на английский, запишем: if(!isset($_SESSION)) session_start(); а в скрипте, производящем обратное переключение - соответственно, if(!isset($_SESSION)) session_start();
2. Ну вы поняли. Найдите кого-нибудь, кому не лень и озадачьте его заменой всех найденных на сайте текстовых фрагментов (как в дизайне и скриптах, так и в базе данных) по вышеописанной схеме {R}{E}{A}
3. Вот теперь - самое сложное. Нужно точно определить, в каком месте CMS сайта начинает вывод HTML-кода и в каком заканчивает. Простой поиск в коде практически любой современной CMS фрагментов "<html" и "</html>", скорее всего, завалит вас огромным количеством этих фрагментов во всевозможных темплейтах, из которых CMS собирает готовые веб-страницы. Перспективнее всего открыть файл /index.php и попытаться найти начало и конец вывода в нём. Как правило, в этом файле будет сначала подключение файла с настройками, затем определение, что же именно запросил пользователь, и лишь затем обработка и вывод информации. Идите по дереву подгружаемых файлов - как правило, они подгружаются функциями include(), include_once(), require() или require_once(). Если в качестве аргумента у функции какая-то переменная или неизвестная вам константа - временно добавьте в код её вывод на экран, чтобы посмотреть, какой именно файл инклюдится. Добавляйте по мере продвижения временные инструкции типа die("PREVED");, чтобы определить, начался уже вывод собственно HTML или всё ещё выводятся хидеры, закончился или ещё нет.
Определив начало и конец вывода HTML-кода, добавьте перед началом инструкцию: ob_start(); , а после конца вывода - следующий код: echo lang( ob_get_clean() ); Собственно, на этом и всё! Удачи вам! |
|||||||
|