Переключение языка WordPress с языковой кнопкой в ​​навигации

Я создал тему WordPress, которая должна быть на немецком и английском языках. В навигации у меня есть кнопка, которая должна менять язык в зависимости от того, какой язык они используют в настоящее время. (Если они просматривают английскую страницу, она должна отображать «Deutsch» и наоборот.)

Я использую qTranslate Plus и решил отображать код языка в URL (/ de или / en). Моя основная проблема заключается в том, что я нахожусь на пользовательской странице (WordPress-страница с шаблоном) (/ custom-page) и меняю язык, который не меняется на немецкий, хотя в исходном коде ссылка отображает / de / custom-page , Он полностью игнорирует код языка и снова выводит меня на / custom-страницу. Так что, похоже, лишает языковой код.

Это стандартное поведение WordPress и если да, то как его отключить?
Также есть ли лучший, более надежный способ изменить язык? Будет ли сохранение языка в сеансе работать?

Примечание: «Скрыть непереведенный контент» и «Скрыть информацию о языке URL для языка по умолчанию». не проверены.

Заранее спасибо,
Питер

2

Решение

У меня была похожая проблема на сайте, над которым я работал. Я установил это расширение, которое, казалось, решило некоторые проблемы с URL

https://wordpress.org/plugins/qtranslate-slug/

в качестве альтернативы, вы можете нацелить кнопку с помощью javascript / jQuery, используя условные операторы для определения html lang attr. Что-то вроде этого:

   var lang = document.documentElement.lang;
if (lang == 'en-US'){
$('button').html('your button text')
}
1

Другие решения

qTranslate не поддерживается хорошо. Если вы только начали внедрять его, я думаю, вы должны попробовать другие плагины. Вот несколько замен для qTranslate:
mqTranslate а также zTranslate. Оба — вилки qTranslate, поэтому вы ничего не должны терять.

Что касается вашего вопроса, вы можете просто скрыть текущий язык с помощью css, используя lang selector:

:lang(current languagecode) {
display: none;
/*the other way to hide things*/
text-indent: 9999px;
overflow: hidden;
}

Надеюсь это поможет.

С уважением.

1

В двух моих установках wordpress (3.8.1, обновленных до 4.0) я заметил, что mqtranslate (тот же код) не переводит содержимое при использовании маршрутизации на основе URL, что похоже на вашу проблему.

Я только что установил «qtranslate plus» на свежем wp 4.0, и он работал, как и ожидалось, с маршрутизацией на основе URL (но, похоже, испортил формат даты в заголовке поста).

Поэтому я думаю, что проблема может заключаться в том, что номер версии не работает вместе с qtranslate.
может быть, preg_match-code в строке 173 ppqtranslate_core.php не дает правильного результата.

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

  1. перенаправьте поддомен * .site.com на ip вашего сервера в административной панели вашего провайдера домена (или en.site.com для одного языка, если ваш провайдер не разрешает использовать подстановочный знак *)
  2. настройте субдомен на своем веб-сервере (en.site.com) для маршрутизации в тот же каталог, что и исходный сайт. просто добавьте следующий код (отредактируйте имя домена и путь к webroot) в ваш httpd.conf (или apache2.conf на некоторых серверах)

Добавьте к httpd.conf:

<VirtualHost *:80>
ServerName "en.site.com"ServerAdmin webmaster@localhost
DocumentRoot /the/path/to/your/html/
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /the/path/to/your/html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

и перезапустите веб-сервер с

/etc/init.d/httpd restart

после этого доменного перевода должен работать.

0
По вопросам рекламы [email protected]