QTranslate
qTranslate - плагин к WordPress который позволяет делать мультиязычный блог.
Содержание
- 1 qTranslate X
- 2 Ошибка в PHP логе
- 3 Все ниже относится к старому плагину и возможно больше НЕ АКТУАЛЬНО!
- 3.1 Проблема с WP выше 3.8.1
- 3.2 Добавление русского языка
- 3.3 Вопросики вместо месяца в дате
- 3.4 Определение текущего языка
- 3.5 Решение проблемы с Главной (Home)страницей в меню (В НОВОЙ ВЕРСИИ УЖЕ НЕ ТРЕБУЕТСЯ!!)
- 3.6 Многоязычное меню
- 3.7 Название сайта
- 3.8 Название в виджете Текст сайдбара
- 3.9 Баг с переводом tail-ов галерей
- 3.10 Флаги переключения языка
- 3.11 Нашел на одном блоге кусок кода сокращающий имя функции
- 3.12 Изменение прямых ссылок в теме
- 3.13 Использование с WordPress SEO
- 3.14 Изменение параметров темы
qTranslate X
Внимание, плагин qtranslate умер и ему на замену пришел qTranslate X он полностью аналогичен
Ошибка в PHP логе
PHP Warning: Parameter 2 to qtranxf_postsFilter() expected to be a reference, value given in /home/domains/mysite.com/public_html/wp-includes/class-wp-hook.php on line 287
Решение тут
В следующем файле:
\wp-content\plugins\qtranslate-x\qtranslate-frontend.php
в строке 523 вы найдете
function qtranxf_postsFilter($posts, &$query) {
удалите «&» из этой строки, поэтому это должно выглядеть так:
function qtranxf_postsFilter($posts,$query) {
конфликт qTranslate-X и RusToLat
Плагин qTranslate-X конфликтует с плагином RusToLat, так как плагин RusToLat очень простой, то мы перепишем именно его, меняем строку
Plugin Name: RusToLat
на
Plugin Name: RusToLat-qTranslateX
а строку
add_action('sanitize_title', 'sanitize_title_with_translit', 0);
меняем на
//add_action('sanitize_title', 'sanitize_title_with_translit', 0); add_filter('sanitize_title', 'sanitize_title_with_translit', 2);
Все ниже относится к старому плагину и возможно больше НЕ АКТУАЛЬНО!
Проблема с WP выше 3.8.1
Плагин протестирован до 3.8.1, WP уже обновился а плагин нет и работать не хочет.
Решение, меняем строку в файле qtranslate/qtranslate.php:
define('QT_SUPPORTED_WP_VERSION', '3.8.1');
на текущую версию WP:
define('QT_SUPPORTED_WP_VERSION', '3.8.3');
Или более радикально, в файле qtranslate/qtranslate_wphacks.php комментируем строки
/* if($GLOBALS['wp_version'] != QT_SUPPORTED_WP_VERSION) { if(!(isset($_REQUEST['qtranslateincompatiblemessage'])&&$_REQUEST['qtranslateincompatiblemessage']=="shown")) { echo '<div class="updated" id="qtrans_imsg">'.__('The qTranslate Editor has disabled itself because it hasn\'t been tested with your Wordpress version yet...И там дальше... } $init_editor = false; } */
Добавление русского языка
Код языка: ru Флаг: ru.png Название: Russian Локаль: ru_RU Формат даты:%A %B %e%q, %Y Формат времени: %I:%M %p Сообщение о недоступности: Извините, но эта статья доступна только на %LANG:, : и %.
Вопросики вместо месяца в дате
Удаляем:
Формат даты: Формат времени:
В предыдущем пункте. В:
Дополнительные настройки Преобразование Даты/Времени STRFTIME вместо даты с заменой форматов предопределенных для каждого языка. В зависимости от выбранного режима, дополнительные настройки в теме могут быть необходимы.
Определение текущего языка
<?php echo qtrans_getLanguage(); ?>
Возвращает ru на русском, en на английском и т.д. Удобно добавлять к имени баннера.
Решение проблемы с Главной (Home)страницей в меню (В НОВОЙ ВЕРСИИ УЖЕ НЕ ТРЕБУЕТСЯ!!)
Переходило на страницу языка по умолчанию.
Требуется добавить в файл functions.php в теме следующий фильтр:
add_filter('walker_nav_menu_start_el', 'qtrans_in_nav_el', 10, 4); function qtrans_in_nav_el($item_output, $item, $depth, $args){ $attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : ; $attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : ; $attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : ; // Determine integration with qTranslate Plugin if (function_exists('qtrans_convertURL')) { $attributes .= ! empty( $item->url ) ? ' href="' . qtrans_convertURL(esc_attr( $item->url )) .'"' : ; } else { $attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : ; } $item_output = $args->before; $item_output .= '<a'. $attributes .'>'; $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after; $item_output .= '</a>'; $item_output .= $args->after; return $item_output; }
Многоязычное меню
В стандартном меню пишем в "Текст ссылки" например для главной:
<!--:ru-->Главная<!--:--><!--:en-->Home<!--:-->
Название сайта
Используем теги в Общие настройки -> Заголовок сайта:
[:ru]Мой сайт[:en]My site
Название в виджете Текст сайдбара
Аналогично в Заголовок пишем:
[:ru]Заголовок[:en]Title
В теле меняем так:
<!--:ru-->Текст для перевода<!--:--><!--:en-->Text to translate<!--:-->
Это работает со всем, даже с картинками.
Баг с переводом tail-ов галерей
Приходится менять движок WP!!!! После обновления движка придется опять править файлы!!!
В файле wp-includes/post-template.php меняем в функции wp_get_attachment_link() строку:
$post_title = esc_attr($_post->post_title);
на
$post_title = esc_attr(__($_post->post_title));
В файле wp-includes/media.php меняем:
1. в функции wp_get_attachment_image() строку:
'title' => trim(strip_tags( $attachment->post_title) ),
на
'title' => trim(strip_tags( __($attachment->post_title) )),
2. в функции gallery_shortcode() строку:
" . wptexturize($attachment->post_excerpt) . "
на
" . wptexturize(__($attachment->post_excerpt)) . "
Флаги переключения языка
В требуемое место темы где мы хотим установить переключатель плагинов добавляем строку:
<?php qtrans_generateLanguageSelectCode('image'); ?>
В место 'image' можно использовать 'text', 'both', 'dropdown'.
Так же, что бы флаги были расположены в одну линию, в css добавляем:
#qtranslate-chooser { list-style:none; padding-left: 0px; } #qtranslate-chooser li { list-style: none; float:left; padding-right:4px; }
Нашел на одном блоге кусок кода сокращающий имя функции
if( function_exists( 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage' ) ): function q_translate( $s ) { return qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $s ); } endif; // Пример использования $phrase = '<!--:ru-->Для перевода<!--:--><!--:en-->From translation<!--:-->'; echo q_translate( $prhase );
Изменение прямых ссылок в теме
Было в теме:
<a href="/test/">Тестовая ссылка</a>
Надо сделать:
<a href="<?php if( function_exists ('qtrans_convertURL')){echo qtrans_convertURL('/test/');}else{echo('/test/');}; ?>">Тестовая ссылка</a>
Использование с WordPress SEO
В файл functions.php добавляем:
// Enable qTranslate for WordPress SEO function qtranslate_filter($text) { return __($text); } add_filter('wpseo_title', 'qtranslate_filter', 10, 1); add_filter('wpseo_metadesc', 'qtranslate_filter', 10, 1); add_filter('wpseo_metakey', 'qtranslate_filter', 10, 1);
В фаил header.php
<title><?php echo wp_title('|', true, 'right'); ?></title>
Изменение параметров темы
Если в теме где то есть переменная например $text которую надо обработать с помощью плагина QTranslate надо обрамить ее конструкцией __(). Например было (переменной $text присавивается какая то функция):
$text = any_function();
Надо сделать:
$text = __(any_function());