QTranslate

Материал из rrv-wiki
Перейти к навигации Перейти к поиску

qTranslate - плагин к WordPress который позволяет делать мультиязычный блог.


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());