Поддержка Плагины qTranslate и контент, недоступный для выбранного языка

  • Здравствуйте, сообщество.

    Возникла проблема с qTranslate, видел множество подобных тем, но ни поиск по форуму ни гугл проблему не решили.

    В чем проблема:
    Есть сайт, на нем есть записи на 2 языках — русский и англ (не все записи доступны на обоих языках, часть из них только на русском, часть — только на английском).
    Задача — скрыть в русском разделе записи вида «Эта запись доступна только in english» и записи вида «Sorry, this entry is only available in Русский.» в англ. разделе.

    Галочка в настройках «Скрыть контент, который не доступен для выбранного языка. » не работает, но там так и написано, мол, если qTranslate установлен — работать не будет.

    Как тогда решить проблему? Всем большое спасибо за ответы.

Просмотр 8 ответов — с 1 по 8 (всего 8)
  • Не силен в php, но интуиция подсказывает, что решение стоит искать здесь:

    // get content
    	$content = qtrans_split($text);
    	// find available languages
    	$available_languages = array();
    	foreach($content as $language => $lang_text) {
    		$lang_text = trim($lang_text);
    		if(!empty($lang_text)) $available_languages[] = $language;
    	}
    
    	// if no languages available show full text
    	if(sizeof($available_languages)==0) return $text;
    	// if content is available show the content in the requested language
    	if(!empty($content[$lang])) {
    		return $content[$lang];
    	}
    	// content not available in requested language (bad!!) what now?
    	if(!$show_available){
    		// check if content is available in default language, if not return first language found. (prevent empty result)
    		if($lang!=$q_config['default_language'])
    			return "(".$q_config['language_name'][$q_config['default_language']].") ".qtrans_use($q_config['default_language'], $text, $show_available);
    		foreach($content as $language => $lang_text) {
    			$lang_text = trim($lang_text);
    			if(!empty($lang_text)) {
    				return "(".$q_config['language_name'][$language].") ".$lang_text;
    			}
    		}
    	}
    	// display selection for available languages
    	$available_languages = array_unique($available_languages);
    	$language_list = "";
    	if(preg_match('/%LANG:([^:]*):([^%]*)%/',$q_config['not_available'][$lang],$match)) {
    		$normal_seperator = $match[1];
    		$end_seperator = $match[2];
    		// build available languages string backward
    		$i = 0;
    		foreach($available_languages as $language) {
    			if($i==1) $language_list  = $end_seperator.$language_list;
    			if($i>1) $language_list  = $normal_seperator.$language_list;
    			$language_list = "<a href=\"".qtrans_convertURL('', $language)."\">".$q_config['language_name'][$language]."</a>".$language_list;
    			$i++;
    		}
    	}
    	return "<p>".preg_replace('/%LANG:([^:]*):([^%]*)%/', $language_list, $q_config['not_available'][$lang])."</p>";

    Буду благодарен, если кто-то подскажет, где поправить.

    Галочка в настройках «Скрыть контент, который не доступен для выбранного языка. » не работает, но там так и написано, мол, если qTranslate установлен — работать не будет.

    ??? Вы что-то путаете.

    И да, именно так и работает. Посты другого языка не выводятся в ленте.

    А фразы типа «Эта запись доступна только in english» показывается ТОЛЬКО если перейти сменить язык в конкретной записи\странице.

    SeVlad, нет, не путаю:

    Скрыть контент, который не доступен для выбранного языка.
    Когда включено, статьи будут скрыты, если контент отсутствует для выбранного языка. Если флажок не установлен, появится сообщение с указанием всех языков. Эта функция не будет работать корректно, если вы установили qTranslate на блог с существующими настройками.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    В интерфейсе плагина неточный перевод. Исходный текст:

    This function will not work correctly if you installed qTranslate on a blog with existing entries. In this case you will need to take a look at «Convert Database» under «Advanced Settings».

    Следует читать так:

    Эта функция не будет работать корректно, если вы установили qTranslate на блог с существующими записями. В этом случае воспользуйтесь опцией «Преобразование базы данных» в разделе «Дополнительные настройки».

    но там так и написано, мол, если qTranslate установлен — работать не будет.

    Этого там не написано.

    Возможно, перевод и правда не точный, но все равно проблему эта настройка не решает. И такая ситуация не только у меня.

    Эта функция не будет работать корректно, если вы установили qTranslate

    Вы логику включите — функция плагина не будет работать если установлен этот плагин? Абсурд же.

    но все равно проблему эта настройка не решает.

    На десятке сайтов, где я использовал этот плагин всё работает. Как работает ещё на сотнях и тысячах сайтов других пользователей плагина.

    Итого — будем пререкаться или решать проблему?

    SeVlad ни в коем случае не думал с вами пререкаться. Опыт работы с wp минимален, отсюда такие вопросы.

    Галочка что стоит, что не стоит — в списке всех материалов русской версии все равно отображаются записи, доступные только на английском. «Эта запись доступна только in english»

    Галочка что стоит, что не стоит — в списке всех материалов русской версии все равно отображаются записи,

    Что бы грешить на плагин (и заодно найти причину) нужно
    1. Отключить все плагины, кроме QT и вернуть тему на дефолтную (по умолчанию).
    2. Почистить кеш ВП если использовались плагины кеширования.
    3. Убедиться что используется оф. ВП с не изменёнными файлами и соответствующая версия QT

    В этом состоянии всё работает как надо.
    Теперь включая по-очереди плагины\темы ищите виновного.

    Если Вы вдруг видите непорядок после выполнения пп.1-3 — попробуйте добавить пост на всех языках и посмотрите. Вот тут уже точно всё должно быт ОК.
    Значит проблема со старыми постами — проверяйте их.

Просмотр 8 ответов — с 1 по 8 (всего 8)
  • Тема «qTranslate и контент, недоступный для выбранного языка» закрыта для новых ответов.