Поддержка Проблемы и решения Мультиязычный сайт (блог)

  • Здравствуйте!

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

    1. Естественно пробовал изначально всемозвожные плагины локализации и переводов. Из всех, более менее оказался подходящим qTranslate, но все таки не подошел, т.к. много недочетов и нюансов.

    2. После пробовал к примеру создать несколько версий одной и той же темы, на разных языках, с возможностью переключения на сайте, через плагины switch. Это уже было более близко к тому, что хотелось бы видить, но думаю, Вы понимаете недостатки и глючность такого метода.

    3. К выше написанному, пришлось создавать интересную возможность новых версий wordpress как создание сети сайтов или же просто по старинке создание поддемонов. Но в том случае, сайты создаются абсолютно разные в виде поддоменов или префикса к общему домену (supersite.com/ru или ru.supersite.ru), с индивидуальной и разными базой материалов, что конечно же не надо.

    В общем, я пока в раздумьях, как же реализовать подобное. Как пример, хочется привести знаменитый youtube. База одна, материалы общие, комментарии так же все вместе, но есть возможность просмотра на разных языках, в зависимости от места нахождения, языка браузера и т.п.

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

    Может кому удалось совершить подобное или есть какие-то идеи? Буду рад почитать!

Просмотр 15 ответов — с 46 по 60 (всего 96)
  • написать таки ответ на вопрос тоже не помешает

    Блин, напишу! Не заставляйте ребёнка бегать прежде, чем тот научится ползать. Чтобы написать что-то внятное, эту документацию, которую я понимаю с немалым напряжением и которая требует от меня постоянно наводить справки на десятке других страниц, надо ещё прочитать и усвоить. А после проверить, что усвоилось.
    Вообще-то я сюда, грешным делом, сам полезной информации почерпнуть пришёл. А выходит, что пошёл по шерсть, а вернулся стриженым, так, что ли? 😉

    я такой же вебмастер, как испанский лётчик. Я всего лишь вменяемый владелец сайта.

    Любой, взявшийся за ВП и оказавшийся на этом форуме уже есть вебмастер (квалификации только разные).

    не могу понять одного

    Я даже не буду это объяснять… Тут во всяком случае.

    Любой, взявшийся за ВП и оказавшийся на этом форуме уже есть вебмастер

    Ну да, ну да. Конечно. © Have a rocket, will fly. Купил скрипку, уже скрипач. Тут вон с утреца тоже один вйопмастер заглядывал, ога. Да куды там, выше бери — коммерсантъ!

    Модератор Yuri

    (@yube)

    Купил скрипку, уже скрипач.

    Нет еще. Скрипач — когда начал играть прилюдно. Какой — это уже другой вопрос.

    Ребят, я тут немного скрашу Ваш спор про пдф и задам вопросик. Не могу разобраться вот в чем. qTranslate не определяет корректно редирект, когда пользователь оставляет комментарий. После того, как кто-то отправляет сообщение, по умолчанию происходит редирект на пермалинк материала с номером сообщения ввида: «site.com/ololopost/#comment-2». Даже если пользователь посещает страницу на русском, по идеи, должен быть редирект такой: «site.com/ru/ololopost/#comment-2», но происходит, что он переадресовывает все равно на тот пермалинк, что указан у материала по умолчанию.

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

    Пробовал через добавления функции редиректа, ввида:

    add_action('comment_post_redirect', 'redirect_to');
    
    function redirect_to() {
        return 'URL redirect';
    }

    Но не могу врубиться как правильно отобразить в данном случае редирект к каждому посту в зависимости от языка…
    Быть может надо править post-comment.php в строках

    $location = empty($_POST['HTTP_REFERER']) ? get_comment_link($comment_id, array('type' => 'comment')) : $_POST['HTTP_REFERER'] . '#comment-' . $comment_id;
    $location = apply_filters('comment_post_redirect', $location, $comment);
    
    wp_safe_redirect( $location );
    exit;
    ?>

    ???

    Tsybin, если я правильно помню, то я просто через SERVER["REQUEST_URI"] (или SERVER["PHP_SELF"] 😉 ) решал подобное (не в коментах, а в каком-то плаге для обратной связи)

    Будь добр поподробнее, где дал указание?

    где дал указание?

    Давно было, точно ессно не помню. Суть приблиз такая — плагин после отправки формы возвращал на ту же страницу, но он брал её урл не из реального (PHP_SELF), а из возвращаемого ВП (читай — ожидаемого). Вот это я и менял.
    Да, в qTranslate у меня была схема: site.com/lang/

    Пум пум…ладно, спасибо за подсказку, буду искать!

    Нашел. Если кому пригодится, добавляем в functions.php:

    add_filter('comment_post_redirect', 'redirect_after_comment');
    function redirect_after_comment($location)
    {
    return $_SERVER["HTTP_REFERER"];
    }

    Теперь будет реферить сразу после добавления комментария на выбранный язык…

    Значит это, Tsybin и wp-user.php, как обещал, отвечаю на ваш вопрос не по окладу. 😉
    Tsybin:

    а какими синтаксисами или формулами вызвать перевод в php и скриптах в Рolylang, на примере если можно?

    wp-user.php:

    не-не, товариСЧ. Взялся за гуж… 🙂 Тем более что без этой инфы ты и сам ничего нормально сделать не сможешь.

    В общем, пресловутая инфа сводится, как чаще всего и бывает, к банальному RTFM. По гамбургскому счёту, как профессиональный переводчик я обязан был такие несложные вещи сообразить и сам ещё пару дней назад, но вот позорно протупил… Могу в чём-то ошибаться, потому как вынужденно занимаюсь не вполне своим делом, но уж пускай досужий и более опытный читатель исправит правды ради.

    1. Подключаемый модуль Polylang занимается сугубо тем, для чего и предназначен: управляет локализованным контентом. Проще говоря, он позволяет создавать для каждого языка свои новые записи в ячейках БД, после чего следит за тем, чтобы на локализованных страницах выборка делалась откуда положено, а не как попало. Ну и ещё добавляет чуть-чуть своего кода, благодаря которому появляется, скажем, языковое меню. Всё. Запоминаем раз и навсегда: Polylang (и, как я подозреваю, любой другой бесплатный модуль того же уровня сложности) — всего лишь простенький и эффективный локализационный инструмент. Ничего, кроме полуавтоматического создания нужных новых записей по заказу он не делает. Он даже оригинальный контент в новую запись почему-то не копирует (хотя это было бы логично, надо будет написать разработчику). Однако то, что делает, Polylang делает хорошо, избавляет от массы головной боли, и лично я им вполне доволен.
    2. Теперь о php. Никакого отношения к файлам на этом языке Polylang не имеет и иметь не должен. Совсем. Его епархия — БД, модуль для доступа к её записям использует сам WordPress и неистовый TinyMCE. То есть прежде, чем заниматься локализацией сайта (который контентом не является и представляет собой не записи в ячейках таблиц БД, а набор файлов на серверной площадке), оный сайт надлежит сначала интернационализировать. Применительно к WP это в первую очередь означает интернационализацию темы. За это отвечает, разумеется, её разработчик, о чём в доступной форме прямо сказано в Кодексе, и даже не в одном месте. Подробнее всего процедура описана в разделе I18n for WordPress Developers. Если вкратце, то код темы придётся размечать ручками. То же касается и интернационализации сценариев, только тут помимо рук понадобится ещё и качественная голова.
    3. А вот уже после того, как сайт будет должным образом интернационализирован, можно будет перейти к этапу локализации посредством предназначенных для этой цели профессиональных программам (это если использовать традиционный процесс, когда переводчик и программист-конструктор — совершенно разные лица). То есть получить из кода темы шаблоны .pot, из них понаделать нужное число .po, которые будут содержать перевод строковых литералов интерфейса (с ними-то и работают мои коллеги, занятые в сайтостроительстве), а уже из тех — .mo для включения в тему. Отдельно локализуются сценарии (для них ничего получать не надо).

    Добавлю пару слов касательно интернационализации, чтобы нарытое добро не пропадало. Самые-самые основы для тех, кому влом читать полезную, но здоровенную статью Кодекса, изложил сам разработчик Polylang в крошечной заметке How to internationalize a theme ?. Кое-что (в частности, грамотная обработка заглушек типа $count), осталось за рамками, так что отбояриваться от чтения Кодекса я бы не советовал.
    Некоторые создатели особо хитрых тем используют нестандартные решения, поэтому кто-нибудь при использовании Polylang может наткнуться на нечто, описанное в другой заметке француза — Translation with Evolution (from Elegantthemes).
    Тонкости по-настоящему профессиональной интернационализации тем WordPress знатно описал Герт де Декере в статье Loading WordPress language files the right way.
     
    Ну всё вроде, типа пацан сказал — пацан сделал. Документация вся в хытымылы, читайте себе вволю. 🙂

    Ну всё вроде, типа пацан сказал — пацан сделал.

    Да, отличный из тебя генератор контента. И много и интересно. Респект! Одно но — ещё бы по теме 🙂
    Нам-то всего-навсего было интересен СИНТАКСИС. В qTranslate я писал — есть 2 вида:

    1. <!--:en-->english text<!--:--><!--:ru-->русский текст<!--:-->
    2. [:en]english text[:ru]русский текст

    Оно же в ФАКе

    А какой синтаксис у Polylang?
    С тебя ждём буквально пару строк, не нужно поэм 😉

    С тебя ждём буквально пару строк, не нужно поэм 😉

    Нет, таки боюсь, что вопрос всё же не по окладу, и задавать его следует не мне, а разработчику. Лично у меня как у пользователя он пока не возникал, так что я даже не очень представляю, на что вам-то это потребовалось. Всё, что мог, я рассказал, а остального придётся ждать.

    СИНТАКСИС — PHP.

    Лично у меня как у пользователя он пока не возникал, так что я даже не очень представляю, на что вам-то это потребовалось.

    Ну например самое элементарное — «ручное» название виджета. И его содержания (того же текстового).
    Что и как надо заполнить в виджете чтобы показывалось в зависимости от языка?

    Для английского «english text»
    Для русского — «русский текст»

    Второе — название и описание сайта на разных языках — как делать?

    И это только поверхностно. При обрастании функционала это нужно сплошь и рядом (формы, надписи и тп).

    СИНТАКСИС — PHP.

    С каких пор у пхп есть синтаксис плагина ВП? 😉
    Есть? Ок. Ну и как же? Как реализовать выше сказанное? С пом. плагина ессно, не перелопачивая тему и вручную прописывая.. кстати ЧТО?.

Просмотр 15 ответов — с 46 по 60 (всего 96)
  • Тема «Мультиязычный сайт (блог)» закрыта для новых ответов.