Ответ 1
Что вы читаете, это документация Twig, а не Symfony2, даже если оба сделаны SensioLabs.
Если вы используете полнофункциональную инфраструктуру Symfony, Symfony\Component\Translation\TranslatorInterface уже определен как аргумент конструктора вашего расширения Twig.
Чтобы убедиться, посмотрите файл, расположенный по адресу \vendor\twig\extensions\lib\Twig\Extensions\Extension\date.php
Вы должны увидеть что-то вроде этого:
*\vendor\twig\extensions\lib\Twig\Extensions\Extension\date.php*
<?php
/**
* This file is part of Twig.
*
* (c) 2014 Fabien Potencier
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
use Symfony\Component\Translation\TranslatorInterface;
/**
* @author Robin van der Vleuten <[email protected]>
*/
class Twig_Extensions_Extension_Date extends Twig_Extension
{
public static $units = array(
'y' => 'year',
'm' => 'month',
'd' => 'day',
'h' => 'hour',
'i' => 'minute',
's' => 'second',
);
/**
* @var TranslatorInterface
*/
private $translator;
/**
* Constructor.
*
* @param TranslatorInterface $translator A TranslatorInterface instance.
*/
public function __construct(TranslatorInterface $translator = null)
{
$this->translator = $translator;
}
// etc.
Если это то, что у вас есть на вашей стороне, тогда вам нужно сделать сам перевод.
Symfony2 не поставляется с готовым-переведенным файлом в зависимости от вашего локали для этого, вы должны его сделать (или найти того, кто уже сделал это, и он в порядке, чтобы поделиться им с вами).
Сначала добавьте этот аргумент в расширение Twig в ваших services.yml:
*services.yml*
twig.extension.date:
class: Twig_Extensions_Extension_Date
arguments: ["@translator"] // careful of quotes
tags:
- { name: twig.extension }
Затем создайте "date.fr.xliff" в папке \app\Resources\translations. Адаптируйте местоположение, если вы работаете в своем собственном комплекте, то есть другом AppBundle. Конечно, в зависимости от языка, который вы ищете, адаптируйте "fr" (например, "de", "es"...). Почему расширение ".xliff"? Конечно, вы можете создать файл ".yml", например. Но использование ".xliff" позволяет вам воспользоваться тем, что я вам предлагаю.
Затем, если я продолжу пример с французским переводом, откройте файл "date.fr.wliff" и скопируйте/вставьте перевод, предоставляемый KnpTimeBundle.
Не забудьте очистить кэш-память dev, если вам нужно.
Если вы хотите, чтобы перевод проходил в шаблоне Twig, просто используйте фильтр, не меняя ничего (не пытайтесь добавить второй фильтр "| trans" ):
{{ user.createdAt|time_diff }}
Конечно, замените "user.createdAt" тем, что вам там нужно.
Если вы хотите, просто реализуйте KnpTimeBundle в своем приложении, чтобы сделать все это для вас. В противном случае, я полагаю, что вам нужно скопировать/вставить файлы перевода, предоставленные KnpTimeBundle, на огромное количество разных языков, просто позаботьтесь о замене имени файла "time.fr.xliff" на "date.fr.xliff", который необходим для расширения Twig, доступного в пакете Symfony2.