Приветствую, наконец то я добрался до этой задачи и нашел решение, не используя сторонние модули.
Предназначено для тех кто делает мультиязычный сайт с каталогом, построенном на views, и в качестве фильтра использует аргументы в пути страницы и настраивает заголовки и хлебные крошки внутренних страниц от значений этих аргументов.
Одно из решений не очень простое, смысл которого в перехвате хука построения запроса к Views и изменения аргументов (перевод) в этом хуке.
Второй способ достаточно простой:
Сводится к изменению файла views.inc
На 502 строке Views 3 находится функция _build_arguments(), вот ее и будем править:
Здесь мы пытаемся из имени аргумента получить термин таксономии и перевести его, а если аргумент не термин, то переводим его как строку.
Этим кодом мы перевели пункты хлебных крошек, которые построены на аргументах.
Теперь переведем внутренние пункты хлебных крошек, которые основываются на заголовке самой страницы во Views:
Комментарии
Приветствую, наконец то я добрался до этой задачи и нашел решение, не используя сторонние модули.
Предназначено для тех кто делает мультиязычный сайт с каталогом, построенном на views, и в качестве фильтра использует аргументы в пути страницы и настраивает заголовки и хлебные крошки внутренних страниц от значений этих аргументов.
Одно из решений не очень простое, смысл которого в перехвате хука построения запроса к Views и изменения аргументов (перевод) в этом хуке.
Второй способ достаточно простой:
Сводится к изменению файла views.inc
На 502 строке Views 3 находится функция _build_arguments(), вот ее и будем править:
Переписываем (у меня 560 строка):
<?php
$substitutions['%' . ($position + 1)] = $arg_title;
?>
Заменяем на:
<?php
$term = taxonomy_get_term_by_name($arg_title);
if ($term[0]!=null) {
$tt = tt("taxonomy:term:".$term[0]->tid.":name",$term[0]->name);
$substitutions['%' . ($position + 1)] = $tt;
} else {
$substitutions['%' . ($position + 1)] = t($arg_title);
}
?>
Здесь мы пытаемся из имени аргумента получить термин таксономии и перевести его, а если аргумент не термин, то переводим его как строку.
Этим кодом мы перевели пункты хлебных крошек, которые построены на аргументах.
Теперь переведем внутренние пункты хлебных крошек, которые основываются на заголовке самой страницы во Views:
Строка:
<?php
$breadcrumb = !empty($argument->options['breadcrumb'])? $argument->options['breadcrumb'] : $title;
?>
Меняется на:
<?php
$breadcrumb = !empty($argument->options['breadcrumb'])? t($argument->options['breadcrumb']) : t($title);
?>
И переводим заголовки страниц:
Строку:
<?php
$this->build_info['title'] = $title;
?>
Меняем на:
<?php
$this->build_info['title'] = t($title);
?>
Резюме: На самом деле я в ступоре, почему такие простые методы мультиязычности Views до сих пор не реализованы разработчиками.
спасибо за решение!
Да, спасибо, очень помогло.
А разработчики и вправду могли сделать такие простые вещи как
$this->build_info['title'] = t($title);
?>