Впервые за три года работы с сайтами столкнулся с вопросом создания сайта wordpress на нескольких языках (в моем случае на трех — eng, fin, rus). Задачка вполне решаема. Есть здесь два пути, по которому нужно идти:
Использовать плагины WP
Без плагинов путем установки двух и более админок в одну папку домена
В моем случае камнем преткновения (он же и основная причина выбора способа) стал дизайн сайта. Дело в том, что я в header и footer при разработке дизайна загнал элементы, которые в зависимости от языковой версии должны меняться (картинки, информация, содержание слайдера и т.п.), а плагины WP не позволят полностью локализовать шаблон, т.к. в основном нацелены на работу с контентом при статичном содержании шапки и подвала.
И так, выбор пал на вариант №2 (установка без плагинов).
Основной недостаток этого способа — работа с несколькими админками (чем больше языков — тем запарнее и муторнее). В остальном данный способ позволяет сделать все, что душе угодно с вашими версиями сайта, а это как раз основное преимущество ?
От слов к делу. Выбранный способ так же подразделяется на два варианта:
Развернуть версию сайта на поддомене. Выглядеть это будет так — en.site.ru
Языковая версия будет размещаться в подпапке по адресу site.ru/en
Я выбрал вариант с подпапкой. Тут смотрите сами — оба варианта имеют право на существование.
Первым делом устанавливаем WordPress в количестве 3 штук (т.к. у меня 3 языка). Основной версией у меня была финская, поэтому папки en и ru я создал в ее корне. Структура папок выглядит следующим образом:
Даешь папкам en и ru по админке! В смысле в этих папках так же разворачиваем WP. Базы данных для каждой версии у меня разные. Так же в количестве 3-х штук.
Важный момент. При установке на хостинг не забудьте отредактировать .htaccess для версий в папках (у меня для ru и eng) иначе возможна неприятная кака. Если в стандартном варианте .htaccess выглядит так:
То для других версий необходимо в каждый .htaccess добавить папку размещения в пути (в моем примере русской версии добавлено /ru/):
Вторым делом создаем переключатели языков. По сути это всего-то дополнительное меню с пунктами eng fin rus, устанавливаемое стандартным способом. Каждый пункт меню — произвольная ссылка с относительными путями. Пути для всех трех версий будут выглядеть так: Ссылка на основную версию:
Для английской версии:
Аналогичный URL для русской версии — /ru/
Пожалуй на этом и все. Ничего сложного. Мы получили три полнофункциональной языковой версии сайта. Далее дело только за наполнением, стилями, картинками и т.д. Более того, все три версии можно свободно продвигать в поисковиках, заполнять различные meta-теги, устанавливать разные плагины в зависимости от языка и делать прочие разности ?
UPD: В одном из комментариев мне задали вопрос:
Добрый день. Спасибо за ваше решение. Для главной страницы и статики такой вариант будет работать. Вопрос в следующем, при таком варианте, возможно переключение между одинаковыми статьями/постами, только на разных языках? Например между 2 статьями: example.com/example-post example.com/пример-поста
Смотрите, для переключения между одинаковыми статьями, но на разных языках, я бы вам очень посоветовал хороший плагин — WPGlobus. Передо мной при работе с одним сайтом стоял вопрос либо сделать его так, как я написал в своем посте в блоге, т.е. с установкой нескольких систем управления, либо воспользоваться этим плагином. Т.к. концептуально мне главную страницу меня не нужно было на разных языковых версиях — я выбрал этот плагин и остался более чем доволен. Реализацию вы можете посмотреть на этом сайте: http://investtime.biz/ Откройте любую страницу и переключите язык в меню в шапке. Этот плагин решит ваш вопрос. Но если устанавливать две и более системы управления, то боюсь переключаться между 2 статьями (example.com/example-post и example.com/пример-поста) вряд ли получится простым способом. Если бы я сейчас решал ваш вопрос, то я бы сделал следующим образом: — отказался от решения установки нескольких систем управления — установил бы одну версию сайта и плагин WPGlobus — статику на главной менял бы с помощью JS с таким условием (например):
Вот такие дела. Надеюсь, натолкнул вас на верные мысли.
blogo-daru.ru
Управление несколькими языками в WordPress
Зачем использовать Polylang?
В зависимости от того, что вы хотите сделать, инструментов WordPress по умолчанию может быть достаточно. Например, вы можете создать сообщение на заданном языке и создать тот же пост на другом языке, приписывая правильный тег, чтобы отличить его. Это всего лишь пример, но если вы хотите, чтобы все было просто, вы и это можете сделать.
Однако это не полное решение. Преимущество использования Polylang заключается в том, что плагин не просто позволит вам переводить ваши сообщения. Фактически, если ваша тема переведена на правильный язык, ваши посетители увидят весь переведенный веб-сайт. Используя мой пример, когда вы читаете блог на французском языке, вы увидите переведенную боковую панель и подвал сайта.
Polylang — это мощный инструмент, который поможет вам создать многоязычный веб-сайт. После того, как вы настроили его, использование Polylang для перевода ваших сообщений так же просто, как в примере, который мы видели выше. Может быть, еще проще!
Установка Polylang
Вы можете бесплатно скачать плагин Polylang через WordPress.org. Он может быть установлен и активирован, как и любой другой плагин.
Управление доступными языками
У Polylang есть своя панель параметров, доступная из меню «Language» во вкладке «Настройки» панели администрирования. Мы рассмотрим первую вкладку этой панели, она называется «Language». Как следует из названия, она позволяет вам управлять языками, которые вы хотите использовать на своем веб-сайте.
Чтобы добавить новый язык, самым простым способом является раскрывающийся список с надписью «Выбрать язык». По умолчанию существует множество доступных языков, и, скорее всего, вы найдете тот, который вам нужен. Если вы не можете, вы все равно можете использовать его, создав свой собственный (его имя, локаль, код и направление).
Вы также можете выбрать порядок, в котором должны отображаться ваши языки в списке. Текстовое поле «Order» включает в себя число (вам нужнл установить его). Языки будут отсортированы с использованием этого числа в порядке возрастания.
После добавления языка вы можете редактировать его информацию. Эти параметры можно увидеть, наведя указатель мыши на язык в списке.
Настройка Polylang
Посетив вкладку «Настройки» на панели параметров Polylang, вы найдете несколько полезных опций для персонализации вашего многоязычного навыка.
Первый вариант, и, вероятно, самый важный — это язык по умолчанию, который вы хотите использовать для своего сайта. Это может быть любой язык, который вы добавили. Если у вас есть посетители, которые не поддерживают язык, они будут видеть этот язык по умолчанию.
Если ваш сайт не является новым, есть большие шансы, что у вас уже есть некоторые опубликованные сообщения. Поскольку вы установили Polylang после их создания, существующие сообщения не будут иметь языковой набор. Вы можете дать им всем настройки языка по умолчанию на этой вкладке.
На этой вкладке вы также найдете несколько дополнительных параметров, которые вы захотите проверить, а частности, предпочтение вашего URL-адреса.
Полностью переведенный сайт
Перевод Темы
Как упоминалось выше, Polylang делает больше, чем только перевод наших сообщений. Наши посетители могут иметь полный опыт работы на предпочитаемом языке.
Для этого вам понадобится переведенная тема. Если тема, которую вы используете, готова к переводу, вы должны найти в ней (возможно, в такой подпапке languages) файл POT. Этот файл содержит все строки, используемые в теме. Таким образом, вы можете перевести их на все языки, которые вы хотите.
Теперь, когда Polylang отображает правильный язык на вашем сайте, он будет отображать не только сообщения на этом языке, но и саму тему. Таким образом, ваши посетители не будут видеть французский текст на английской странице, например.
Обратите внимание: если вы используете тему WordPress по умолчанию, например Twenty Fifteen, когда вы добавляете новый язык в Polylang, он пытается загрузить и установить переводы этой темы на этом языке.
Динамический перевод строк
Мы не можем переводить все с помощью простого файла POT. Например, заголовки виджетов представляют собой строки, созданные пользователем (вами), поэтому, естественно, мы не можем использовать файл POT для их перевода. Однако есть еще один способ перевести их благодаря Polylang.
Перейдите на вторую вкладку панели параметров Polylang. Эта вкладка называется «Strings translations» и содержит различные строки, которые отображаются на вашем веб-сайте. По умолчанию Polylang генерирует несколько динамических строк. Вы найдете строки, такие как имя и описание сайта, вы можете даже перевести временные форматы.
Polylang также покажет все виджеты, которые вы используете. Их заголовки и содержимое (например, для виджета «Текст») можно перевести с помощью динамических строк. Стоит отметить, что при создании виджета, когда Polylang активен, теперь вы можете выбрать язык в настройках виджета.
На вкладке «Strings translations» Polylang перечисляет все зарегистрированные динамические строки на языке оригинала. Затем вы можете перевести их на языки, которые вы используете. Не только ваша тема может быть переведена, но и ваш динамический контент.
Регистрация собственных динамических строк
Если вы разрабатываете тему или плагин, вы можете сделать это «готовым к использованию Polylang», зарегистрировав свои собственные динамические строки. Например, это может быть полезно, если вам нужно отобразить строку, которую пользователи могут определить сами по себе. Регистрируя эти строки, эти же пользователи смогут предоставить их на нескольких языках.
Чтобы зарегистрировать строку, используйте функцию pll_register_string(). Как и с любой другой функцией, определенной другим плагином, вы должны проверить, существует ли эта функция со следующим тестом:
if (function_exists('pll_register_string')) { // Функция существует, делайте все, что хотите! }
Даже если Polylang установлен и активирован, эта функция может отсутствовать. Например, можно попытаться вызвать ее слишком рано, прежде чем она будет создана. Чтобы убедиться, что вы не вызываете ее слишком рано, обязательно вызовите ее после действия «plugins_loaded». Например, это так, если вы регистрируете свои строки непосредственно в файле вашей темы: functions.php
Теперь, когда мы увидели, как вызвать эту функцию, пришло время увидеть ее параметры. Эта функция исключает четыре параметра, но последние два являются необязательными.
Первый параметр — это имя строки. Это имя — способ описать это. См. текущую вкладку «Strings translations» для примеров ее использования. Например, строка типа «l, F j, Y» не всегда понятна, но с именем «Формат даты» это понятно.
Второй требуемый параметр — строка для перевода. Вы можете написать это на любом языке, который хотите, но старайтесь соответствовать остальной части вашей темы или плагина.
Третий параметр представляет группу, в которую должна быть помещена ваша строка. По умолчанию эта группа называется «polylang», но вы можете определить свою собственную группу, указав, например, имя своей темы. Имена групп могут отображаться вашими пользователями в списке зарегистрированных строк. Другим способом для ваших пользователей лучше понять, где отображается ваша строка (если несколько плагинов используют Polylang, ваши пользователи будут благодарить вас за указание, что это строка для вашего плагина, а не для другого).
Последний параметр будет полезен не всем, а только некоторым. По умолчанию это значение равно false. Если задано значение true, Polylang будет предоставлять многострочную текстовую область, позволяющую пользователю переводить строку вместо ввода текста в одну строку.
Получение зарегистрированных строк
После регистрации ваших строк ваши пользователи могут перевести их на вкладке «Strings translations». Но вам все равно нужен способ получить их, чтобы отобразить правильный перевод!
Для этого есть две функции. Первая из них pll__()(обратите внимание на два символа подчеркивания __() для функции WordPress). Вы даете ему строку для перевода и она возвращает ту же строку, переведенную на текущий язык.
Если Вы не хотите что-либо делать с этой переведенной строкой (например, вводить ее в функцию, например, sprintf ()), вы можете напрямую вывести с помощью pll_e().
pll_e('Это переведенная строка.');
Можно также использовать третью функцию: pll_translate_string(). Последнее исключает два параметра: строку для перевода и язык на который требуется перевод. Это может быть полезно, если вы хотите отобразить текст типа «Просмотр этого сообщения на [любом языке]» на целевом языке, например.
echo pll_translate_string('Посмотреть этот пост на французском языке', 'fr');
Перевод постов
Перевод сообщения
Теперь, когда вы установили Polylang, все ваши существующие сообщения должны быть на языке по умолчанию. Это означает, что они не появятся на других языках.
В списке сообщений вы найдете новые столбцы, представляющие состояние перевода на каждом добавленном языке. Если в строке сообщения отображается «плюс», это означает, что соответствующий перевод не существует. Вы можете добавить перевод, нажав на этот «плюс».
После этого ничего больше нам не нужно. Вы пишете свой перевод, как и любой другой пост и все! Есть ли у вас другое слово для этого, кроме «удивительного»?
Обратите внимание, что вы также можете добавить перевод в сообщение при его редактировании. В редакторе Polylang есть собственный блок, в котором перечислены существующие переводы для текущего сообщения. Из этого списка вы можете редактировать существующие переводы и добавлять другие.
Переводы категорий и тегов
До сих пор мы переводили нашу тему, виджеты и сообщения, но есть еще несколько вещей, которые мы не рассматривали: таксономии, такие как категории и теги. Мы можем перевести их, посетив вкладку «Категории» или «Теги» на панели администрирования. Вы сможете перевести их точно так же, как и сообщения.
Как только ваши категории и теги будут переведены, вы можете использовать их в своих сообщениях. Тем не менее, есть последняя опция Polylang, с которой я хочу поделиться с вами здесь: синхронизация между переводами.
На вкладке «Настройки» в конце страницы вы найдете некоторые флажки. Проверяя некоторые из них, вы можете активировать синхронизацию соответствующего элемента между всеми переводами ваших сообщений.
Например, предположим, что у вас есть категория под названием «Моя категория», переведенная на французском языке «Ma catégorie». Вы напишете сообщение в этой категории на русском языке, а также вы захотите перевести его на французский. В этом переводе не указывайте какую-либо категорию: если вы активировали синхронизацию таксономий, то категория «Ma catégorie» будет автоматически выбрана!
Покоряем мир!
В этой статье я описал большинство основных опций, которые я нахожу полезными в Polylang, но есть и другие, которые вы обязательно захотите проверить. Не стесняйтесь тестировать Polylang на локальном компьютере и протестировать некоторые варианты перед использованием этого плагина на вашем веб-сайте.
Если вы хотите узнать больше о параметрах, функциях и фильтрах, предоставляемых Polylang, вы можете посетить официальную документацию Polylang, которая очень хорошо написана.
На этом все!
Надеюсь вам эта статья будет полезной! До скорых встреч на страницах моего блога!
P.S. Не забывайте подписываться на новые статьи блога.