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

Рубрика: WordPress -> Архив рассылки
Пятница, 22 сентября 2006 г.
Просмотров: 3301
Подписаться на комментарии по RSS
]]>
]]>

У меня часто спрашивают, можно ли приспособить WordPress для сайта с многоязыковым контентом. Например нужно сделать русскую и английскую версию. На сей счет есть несколько решений, сегодня об этом и поговорим.

Постановка задачи

Для того, чтобы определиться в какую сторону двигаться, попробуем определить варианты того, каким должен быть результат. Прежде всего нужно определиться будут ли языковые версии "существовать" вместе (с одним управлением) или всё-таки раздельно. От этого и будут зависеть варианты решения.

Варианты

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

Второй вариант, это сделать полностью отдельную языковую версию.

Третий вариант предполагает использование автоматического перевода страниц сайта.

Делаем отдельно

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

Делаем совместно

Самый сложный вариант, поскольку потребует от вас не только серьезно переработать шаблон, но и постоянно следить за тем, чтобы различные языковые версии текстов "не перемешались". Покажу как это можно сделать с помощью плагина Polyglot.

Суть его работы в следующем. Когда вы создаете текст записи, то отмечаете в нем различные языковые части, примерно так:

  1.  <lang_ru>
  2.  Русский текст
  3.  </lang_ru>
  4.  <lang_en>
  5.  English text
  6.  </lang_en>
  7.  <lang_fr>
  8.  France text
  9.  </lang_fr>

Для того, чтобы пользователь мог переключиться на нужный язык, используется функция /-polyglot_list_langs-/:

  1.  if(function_exists('polyglot_list_langs')){
  2.   polyglot_list_langs(false);
  3.   }

Параметр этой функции позволяет выводить флаги стран.

То есть теперь, пользоваетель переключится, скажем на /-EN-/ и увидит только:

  1.  English text

Для того, чтобы изменения касались и названий рубрик, вы можете указать их языковой "признак" прямо в названии. Единственный минус это то, что в WordPress длина этого поля не может превышать 55 символов. Если этого недостаточно, то нужно вручную увеличить его до нужного значения через /-phpMyAdmin-/.

Точно также вы можете указывать языки и в заголовках записей.

Настройка Polyglot

В файле /-poliglot.php-/ нужно установить язык по умолчанию, а также указать все те, которые планируется использовать. Думаю, что особых проблем с этим не возникнет, поскольку эти настройки вынесены в начало файла (английский язык это /-us.png-/ или /-uk.png-/).

Если вы используете ЧПУ (постоянные ссылки), то можно прописать в /-.htaccess-/ дополнительное правило /-RewriteRule-/ (код смотрите в плагине).

Настройка шаблона

Понятно, что сам шаблон тоже придется переделывать, чтобы изменять изображения с текстом на нужном языке, а также все "служебные" надписи.

Для этого нужно с файле шаблона (например /-index.php-/) узнать текущий язык. Проще всего ввести дополнительную переменную, которая будет указывать на текущий язык (привожу сразу готовый код):

  1.  <?php
  2.  $def_lang = 'ru'; // язык по умолчанию в шаблоне
  3.  if(function_exists('polyglot_list_langs')){
  4.   global $lp_lang_pref;
  5.   $def_lang = $lp_lang_pref;
  6.   // отображаем флаги
  7.   echo '<ul>';
  8.   polyglot_list_langs(true);
  9.   echo '</ul>';
  10.   }
  11.  ?>

Переменная /-$def_lang-/ теперь хранит у нас текущий язык. Причем, даже если вы отключите плагин, то эта переменная будет хранить язык по-умолчанию.

Дальше, как вы понимаете, дело техники grin. При подключении, например изображения вы подставляете текущий язык в качестве, скажем каталога:

  1.  <img src="<?php bloginfo('stylesheet_directory'); ?>
  2.   /images/<?php echo $def_lang . '/' ?>image.jpg">

В этом примере путь для английской версии будет: /-http://сайт/.../images/en/image.jpg-/.

Для русской: /-http://сайт/.../images/ru/image.jpg-/

Будем считать, что всё ясно grin.

Третий вариант

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

Честно признаюсь, что этот способ я еще не опробовал, поэтому просто даю ссылочку, где это все реализованно и предлагается скачать готовый пример: http://www.mkbergman.com/. Для проверки выберите справа свой язык и посмотрите на результат. При выборе языка вы сразу видите через какой он-лайн переводчик будет произведен перевод.

]]>twitter.com Google Buzz google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru]]>
РЕКЛАМА Остекление и отделка балконов - сайдинг виниловый.

Комментариев: 9

Вы можете получать новые комментарии к этой записи по RSS или оформить подписку на все комментарии сайта. Или даже на все новые записи сайта. (Не знаете, как это сделать?)
  1. 2006-09-22 в 21:55:44 | Volkman

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

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

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

    3) Пишем (или качаем) англоязычные шаблоны для синглов и категорий. Маркируем их в соотетствии с WP-Style. В начале шаблона переобозначаем переменную языка на английский (русский стоит, например, по умолчанию). Хотя обычно это удобнее сделать и прямо в header.php.

    Т.е. идея проста - есть категории с записями русские и есть английские. В момент, когда уже известна категория запроса, мы можем определить переменную языка. Общие шаблоны header, footer, sidebar, comments дописываем, опрашивая переменную языка.

    4) 404 страницу делаем двуязычной (и русский и английский)

    5) Для UTF я написал примитивный определитель языка слова запроса по перому символу. И выдача, соответсвенно, идет либо русская, либо английская.

    6)Все. Вроде, ничего не забыл. Как это выглядит, можешь взглянуть на мегалите.ру

  2. 2006-09-29 в 09:42:37 | олежа

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

  3. 2006-09-29 в 09:54:48 | олежа

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

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

  4. 2006-10-05 в 17:26:31 | Norman

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

  5. 2006-10-05 в 20:37:59 | Максим

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

  6. 2006-10-17 в 00:42:30 | Ложкин

    Я придумал еще один способ - напрочь ректальныйLOL, но тоже решающий задачу. Модифицируем тему: все выводимые блоки текста дублируем и помещаем в контейнеры div class="rus" и div class="eng" (рассматривается двуязычный вариант). Теперь подключаем переключатель css.

    И в одной таблице указываем блокам .eng{display: none}, в другой - то же самое для блоков .rus

    На выходе получаем вдвое больший размер контента, неудобную рсс-ленту и проблемы с отключенными у пользователя JS,CSS.

    Но таки решаем задачу LOL

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

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

  8. 2006-12-02 в 14:31:55 | Иллюстратор

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

  9. 2007-02-23 в 16:13:46 | Guralyuk

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

Оставьте комментарий!

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки. Если вы зарегистрированы в Твиттере, то перед логином укажите «@», например: @maxsite

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



grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

(обязательно)