Выпуск 14. Многоязыковые версии блога
Пятница, 22 сентября 2006 г.
Просмотров: 3301
Подписаться на комментарии по RSS
У меня часто спрашивают, можно ли приспособить WordPress для сайта с многоязыковым контентом. Например нужно сделать русскую и английскую версию. На сей счет есть несколько решений, сегодня об этом и поговорим.
Постановка задачи
Для того, чтобы определиться в какую сторону двигаться, попробуем определить варианты того, каким должен быть результат. Прежде всего нужно определиться будут ли языковые версии "существовать" вместе (с одним управлением) или всё-таки раздельно. От этого и будут зависеть варианты решения.
Варианты
Если вы хотите сохранить управление единым, то для создания многоязыкового сайта нужно решить вопрос о переключении языка со стороны пользователя. То есть это должно быть либо автоматическое определение языка браузера, либо пользователь сам должен выбрать соответствующую ссылку.
Второй вариант, это сделать полностью отдельную языковую версию.
Третий вариант предполагает использование автоматического перевода страниц сайта.
Делаем отдельно
На мой взгляд, это наиболее оптимальный вариант, поскольку с ним не требуется идти ни на какие ухищрения. Всё, что нужно сделать, так это поставить еще один WordPress. Например, можно поставить английскую версию блога в каталог /- http://сайт/en/ -/. При установке WordPress нужно будет только указать другой префикс таблиц базы данных, например /-wp_en_-/.
Делаем совместно
Самый сложный вариант, поскольку потребует от вас не только серьезно переработать шаблон, но и постоянно следить за тем, чтобы различные языковые версии текстов "не перемешались". Покажу как это можно сделать с помощью плагина Polyglot.
Суть его работы в следующем. Когда вы создаете текст записи, то отмечаете в нем различные языковые части, примерно так:
- <lang_ru>
- Русский текст
- </lang_ru>
- <lang_en>
- English text
- </lang_en>
- <lang_fr>
- France text
- </lang_fr>
Для того, чтобы пользователь мог переключиться на нужный язык, используется функция /-polyglot_list_langs-/:
- if(function_exists('polyglot_list_langs')){
- polyglot_list_langs(false);
- }
Параметр этой функции позволяет выводить флаги стран.
То есть теперь, пользоваетель переключится, скажем на /-EN-/ и увидит только:
- English text
Для того, чтобы изменения касались и названий рубрик, вы можете указать их языковой "признак" прямо в названии. Единственный минус это то, что в WordPress длина этого поля не может превышать 55 символов. Если этого недостаточно, то нужно вручную увеличить его до нужного значения через /-phpMyAdmin-/.
Точно также вы можете указывать языки и в заголовках записей.
Настройка Polyglot
В файле /-poliglot.php-/ нужно установить язык по умолчанию, а также указать все те, которые планируется использовать. Думаю, что особых проблем с этим не возникнет, поскольку эти настройки вынесены в начало файла (английский язык это /-us.png-/ или /-uk.png-/).
Если вы используете ЧПУ (постоянные ссылки), то можно прописать в /-.htaccess-/ дополнительное правило /-RewriteRule-/ (код смотрите в плагине).
Настройка шаблона
Понятно, что сам шаблон тоже придется переделывать, чтобы изменять изображения с текстом на нужном языке, а также все "служебные" надписи.
Для этого нужно с файле шаблона (например /-index.php-/) узнать текущий язык. Проще всего ввести дополнительную переменную, которая будет указывать на текущий язык (привожу сразу готовый код):
- <?php
- $def_lang = 'ru'; // язык по умолчанию в шаблоне
- if(function_exists('polyglot_list_langs')){
- global $lp_lang_pref;
- $def_lang = $lp_lang_pref;
- // отображаем флаги
- echo '<ul>';
- polyglot_list_langs(true);
- echo '</ul>';
- }
- ?>
Переменная /-$def_lang-/ теперь хранит у нас текущий язык. Причем, даже если вы отключите плагин, то эта переменная будет хранить язык по-умолчанию.
Дальше, как вы понимаете, дело техники
. При подключении, например изображения вы подставляете текущий язык в качестве, скажем каталога:
- <img src="<?php bloginfo('stylesheet_directory'); ?>
- /images/<?php echo $def_lang . '/' ?>image.jpg">
В этом примере путь для английской версии будет: /-http://сайт/.../images/en/image.jpg-/.
Для русской: /-http://сайт/.../images/ru/image.jpg-/
Будем считать, что всё ясно
.
Третий вариант
Вы можете разместить на своем сайте специальную форму он-лайн переводчика, и посетителю только останется выбрать свой язык. Всё остальное будет сделано автоматически. С точки зрения трудозатрат это это, наверное, самый простой способ. Другое дело, что качество перевода не ахти, поэтому вряд ли он устроит большинство пользователей. С другой стороны он просто идеален для тех, кто сам не полиглот
(типа меня) и создавать записи на иностраном языке просто не может.
Честно признаюсь, что этот способ я еще не опробовал, поэтому просто даю ссылочку, где это все реализованно и предлагается скачать готовый пример: http://www.mkbergman.com/. Для проверки выберите справа свой язык и посмотрите на результат. При выборе языка вы сразу видите через какой он-лайн переводчик будет произведен перевод.

Комментариев: 9
Мне пришлось решать аналогичную проблему и после прокачки всех, в том числе перечисленных здесь методов, пошел по другому пути. Изначально я решил, что в принципе делать абсолютно симметричный двуязычный сайт мне не по силам чисто по времени. Т.е. вариант с метками блоков текста не проходил. Ставить второй WP посчитал бессмысленным. Тогда решение следующее:
1) делаем почти пустой плагин, например "ааа.php". Там объявляем переменную языка. И, возможно, что-то еще.
2)Ставим заранее заготовленное расширение Wp-Style, которое позволяет писать шаблоны на целые ветви иерархии - семейства категорий (рубрик) и записей.
3) Пишем (или качаем) англоязычные шаблоны для синглов и категорий. Маркируем их в соотетствии с WP-Style. В начале шаблона переобозначаем переменную языка на английский (русский стоит, например, по умолчанию). Хотя обычно это удобнее сделать и прямо в header.php.
Т.е. идея проста - есть категории с записями русские и есть английские. В момент, когда уже известна категория запроса, мы можем определить переменную языка. Общие шаблоны header, footer, sidebar, comments дописываем, опрашивая переменную языка.
4) 404 страницу делаем двуязычной (и русский и английский)
5) Для UTF я написал примитивный определитель языка слова запроса по перому символу. И выдача, соответсвенно, идет либо русская, либо английская.
6)Все. Вроде, ничего не забыл. Как это выглядит, можешь взглянуть на мегалите.ру
вот еще есть решение http://rephrase.net/box/word/multiply/
только этот плагин (Multiply) адекватно встал у меня на WP версии 2.0.2, а в 2.0.4 — он отключает плагины у дефолтного журнала, точнее, плагины активированы, но у них отсутствует управление в админ-панели.
в общем, нужно потестировать этот плагин на поздних версиях WP, особенно на вашей сборке. В целом, плагин очень полезный, поскольку создаваемые журналы используют одну панель управления, один набор шаблонов (активируемых по желанию), разные стили и персональные настройки.
Господа, подскажите как быть в ситуации, когда блог должен быть исключительно англоязычным, а вот админку хочется видеть на родном языке?
Для этого нужно использовать только английский текст в файлах главного каталога и wp-includes. В принфипе можно попробовать "поженить" переведенную русскую версию и оригинальный английский.
Я придумал еще один способ - напрочь ректальный
, но тоже решающий задачу. Модифицируем тему: все выводимые блоки текста дублируем и помещаем в контейнеры div class="rus" и div class="eng" (рассматривается двуязычный вариант). Теперь подключаем переключатель css.
И в одной таблице указываем блокам .eng{display: none}, в другой - то же самое для блоков .rus
На выходе получаем вдвое больший размер контента, неудобную рсс-ленту и проблемы с отключенными у пользователя JS,CSS.
Но таки решаем задачу
Тут больше ничего не надо делать? ато у меня при попытке установить выдает ошибку (public_html/en/wp-config.php on line 20)
Понял ошибку, проблема была в скопированном конфиг файле в русского вордпресса, с англ версии сделал конфиг, все заработало
Подключил вариант "Делаем отдельно". Работает. А как там поставить переключатель с языка на язык на титульную страницу?