Мой сайт о WordPress и PHP
 
22 сентября 2006

Выпуск 14. Многоязыковые версии блога

Читали 3805 раз
Рубрика: E-mail рассылка
Навигация: Главная » WordPress » E-mail рассылка

У меня часто спрашивают, можно ли приспособить 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/. Для проверки выберите справа свой язык и посмотрите на результат. При выборе языка вы сразу видите через какой он-лайн переводчик будет произведен перевод.

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

9 комментариев к “Выпуск 14. Многоязыковые версии блога”

  1. Volkman:

    Мне пришлось решать аналогичную проблему и после прокачки всех, в том числе перечисленных здесь методов, пошел по другому пути. Изначально я решил, что в принципе делать абсолютно симметричный двуязычный сайт мне не по силам чисто по времени. Т.е. вариант с метками блоков текста не проходил. Ставить второй WP посчитал бессмысленным. Тогда решение следующее:

    1) делаем почти пустой плагин, например "ааа.php". Там объявляем переменную языка. И, возможно, что-то еще.

    2)Ставим заранее заготовленное расширение Wp-Style, которое позволяет писать шаблоны на целые ветви иерархии - семейства категорий (рубрик) и записей.

    3) Пишем (или качаем) англоязычные шаблоны для синглов и категорий. Маркируем их в соотетствии с WP-Style. В начале шаблона переобозначаем переменную языка на английский (русский стоит, например, по умолчанию). Хотя обычно это удобнее сделать и прямо в header.php.
    Т.е. идея проста - есть категории с записями русские и есть английские. В момент, когда уже известна категория запроса, мы можем определить переменную языка. Общие шаблоны header, footer, sidebar, comments дописываем, опрашивая переменную языка.
    4) 404 страницу делаем двуязычной (и русский и английский)
    5) Для UTF я написал примитивный определитель языка слова запроса по перому символу. И выдача, соответсвенно, идет либо русская, либо английская.
    6)Все. Вроде, ничего не забыл. Как это выглядит, можешь взглянуть на мегалите.ру

  2. олежа:

    вот еще есть решение http://rephrase.net/box/word/multiply/

  3. олежа:

    только этот плагин (Multiply) адекватно встал у меня на WP версии 2.0.2, а в 2.0.4 — он отключает плагины у дефолтного журнала, точнее, плагины активированы, но у них отсутствует управление в админ-панели.

    в общем, нужно потестировать этот плагин на поздних версиях WP, особенно на вашей сборке. В целом, плагин очень полезный, поскольку создаваемые журналы используют одну панель управления, один набор шаблонов (активируемых по желанию), разные стили и персональные настройки.

  4. Norman:

    Господа, подскажите как быть в ситуации, когда блог должен быть исключительно англоязычным, а вот админку хочется видеть на родном языке?

  5. Максим:

    Для этого нужно использовать только английский текст в файлах главного каталога и wp-includes. В принфипе можно попробовать "поженить" переведенную русскую версию и оригинальный английский.

  6. Ложкин:

    Я придумал еще один способ - напрочь ректальный :lol: , но тоже решающий задачу. Модифицируем тему: все выводимые блоки текста дублируем и помещаем в контейнеры div class="rus" и div class="eng" (рассматривается двуязычный вариант). Теперь подключаем переключатель css.
    И в одной таблице указываем блокам .eng{display: none}, в другой - то же самое для блоков .rus
    На выходе получаем вдвое больший размер контента, неудобную рсс-ленту и проблемы с отключенными у пользователя JS,CSS.
    Но таки решаем задачу :lol:

  7. Иллюстратор:

    Делаем отдельно
    На мой взгляд, это наиболее оптимальный вариант, поскольку с ним не требуется идти ни на какие ухищрения. Всё, что нужно сделать, так это поставить еще один WordPress. Например, можно поставить английскую версию блога в каталог http://сайт/en/ . При установке WordPress нужно будет только указать другой префикс таблиц базы данных, например wp_en_.

    Тут больше ничего не надо делать? ато у меня при попытке установить выдает ошибку (public_html/en/wp-config.php on line 20)

  8. Иллюстратор:

    Понял ошибку, проблема была в скопированном конфиг файле в русского вордпресса, с англ версии сделал конфиг, все заработало

  9. Guralyuk:

    Подключил вариант "Делаем отдельно". Работает. А как там поставить переключатель с языка на язык на титульную страницу?


Оставьте комментарий! (Вы согласны с правилами)

 

:mrgreen: :neutral: :twisted: :arrow: :shock: :smile: :???: :cool: :evil: :grin: :idea: :oops: :razz: :roll: :wink: :cry: :eek: :lol: :mad: :sad: :!: :?:

При добавлении кода (html, php) заменяйте < на &lt; и > на &gt;.
Внимание: антиспам - зверь! Копируйте своё сообщение перед отправкой. На всякий случай.