[Решено] Перевод полей Title и Breadcrumb во View

Главные вкладки

Аватар пользователя divined divined 14 декабря 2010 в 11:27

На рисунке в красных квадратах выделены поля, которые принимают значения из аргументов View.
На выходе эти поля не проходят через перевод.

Подскажите где найти в коде модуля Views эти поля и добавить функцию перевода.

Комментарии

Аватар пользователя divined divined 25 января 2012 в 15:42

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

Предназначено для тех кто делает мультиязычный сайт с каталогом, построенном на 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 до сих пор не реализованы разработчиками.

Аватар пользователя stillfinder stillfinder 25 декабря 2012 в 17:20

Да, спасибо, очень помогло.
А разработчики и вправду могли сделать такие простые вещи как

<?php
  $this->build_info['title'] = t($title);
?>