Вы здесь

Настройка многоязычных фасетов

0

Добрый день.

Есть многоязычный сайт, перевод организован с помощью набора модулей I18n.
Для перевода ноды задается новая нода уже с новым языком.
Для перевода терминов таксономии используется режим перевода "Локализуется. Общие термины для всех языков, но их имена и описания могут быть локализованы".
Ноды и термины таксономии переведены.
Модуль Facet API Translation также установлен.

И ничего не происходит. Как на русской, так и на английской версии страницы название элементов на фасете отображается на русском языке (см. рис.)

Русская версия
Русская версия

Английская версия
Английская версия

Никто не сталкивался с такой проблемой ?
Очень не хочется дублировать термины таксономии вместо локализации.

Версия Drupal: 
7.x
Категория: 
Multilingual
Связанные проекты: 
Facet APISearch APIViews
Вопрос задан 21.11.2015 - 18:43

У меня это уже в коде модуля реализовано.
И не работает, как надо.

Комментарий оставлен 21.11.2015 - 19:15

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

Комментарий оставлен 21.11.2015 - 19:55

Ну, я на это пойти не могу.
Попробуйте, если интересно, у себя - словарь таксономии с переводом через локализацию, несколько нод с переводом через i18n, которые бы ссылались на термины из этого словаря.
И попробуйте добиться, чтобы фасеты по терминам для англоязычной страницы показывались на английском, а для русскоязычной - на русском.

Комментарий оставлен 21.11.2015 - 20:01

я вас не прошу ваш сайт. вы же наверняка будете спрашивать - так сделайте на бесплатном хостинге базовую инсталляцию и реплицируйте вашу конфигурацию туда. так проще будет. я например первый раз слышу про фасет апи. а ставить самому лень. а посмотреть посмотрю

Комментарий оставлен 21.11.2015 - 21:41

Да я уже почти сделал, там с одной вещью осталось доразобраться.

Комментарий оставлен 21.11.2015 - 21:49

Если решите - напишите тут решение. Возможно, тоже скоро придетс с этим столкнуться.

Комментарий оставлен 22.11.2015 - 21:22

Ответы

0

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

В общем, доустанавливается модуль https://www.drupal.org/project/facetapi_bonus

В нем устанваливается Rewrite Facet Items. Это позволяет в своем модуле хуком hook_facet_items_alter переопределять названия фасетов. Например, если язык данной страницы - не русский, то выполняется хук, который заменяет русские названия терминов таксономии на их английские локализации

Например, у меня сделано так:

function yrv_facets_facet_items_alter(&$build, &$settings){
    global $language;
    if ($language->language != 'ru')
    {
        if ($settings->facet == "field_type:name") {
            foreach($build as $key => $item) {
                $build[$key]["#markup"] = _translate_term_name($item["#markup"], $language->language);
            }
        }
    }
}

_translate_term_name - это функция, которая для русского названия термина ищет в базе его английскую локализацию, либо перевод на другой язык. Готовую функцию для этого мне найти не удалось, поэтому пришлось писать свою.

Код функции пока вот такой.

function _translate_term_name($term_name, $language) {
    $query = db_select('locales_target', 'lt');
    $query->addExpression('convert(translation USING utf8)', 'trans');
    $query->join('locales_source', 'ls', 'lt.lid = ls.lid');
    $query->condition('lt.language', $language);
    $query->condition('ls.source', $term_name);

    $result = $query->execute()->fetchField();

    return $result;
}

С помощью SQL-запроса из таблиц выдергивается локализация.

Также здесь в закладке фильтров для индекса необходимо отключить фильтр Ignore case для поля, по которому строится фасет.

P.S. Оптимизацией данного решения я не занимался, повторюсь, скорее всего, оно не самое правильное и не самое грамотное, поэтому прошу сильно не минусовать.

Ответ дан 22.11.2015 - 22:09