Трансляция даты

Я использую расширение Twig Date для получения рабочего времени_дифф.

{{ photo.getCreationDate|time_diff }} 

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

Чтобы получить переводный вывод, в качестве аргумента конструктора укажите Symfony \ Component \ Translation \ TranslatorInterface. Возвращаемая строка форматируется как diff.ago.XXX или diff.in.XXX, где XXX может быть любой действующей единицей: секундой, минутой, часом, днем, месяцем, годом.

Я не уверен, как это сделать, но кажется, что это не работает для меня.

То, как я пытался в моем контроллере.

$ twig = new Twig_Environment (новый TranslatorInterface ()); $ twig-> addExtension (новый Twig_Extensions_Extension_Date ());

Я получаю следующую ошибку

Ошибка: не удается создать интерфейс Symfony \ Component \ Translation \ TranslatorInterface

Конструктор Twig_Environment ожидает объект Twig_LoaderInterface, а не TranslatorInterface.

Как это сделать, чтобы позволить мне переводить вывод time_diff?

благодаря

То, что вы читаете, это документация 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 <robinvdvleuten@gmail.com> */ 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 .

Не забудьте очистить кеш-память, если вам нужно.

Если вы хотите, чтобы перевод проходил в шаблоне Twig, просто используйте фильтр, не меняя ничего (не пытайтесь добавить второй фильтр «| trans»):

 {{ user.createdAt|time_diff }} 

Конечно, замените «user.createdAt» тем, что вам там нужно.

Если вы хотите, просто выполните KnpTimeBundle в своем приложении, чтобы сделать все это для вас. В противном случае, я думаю, вам будет удобно копировать / вставлять файлы перевода, предоставляемые KnpTimeBundle, на огромное количество разных языков, просто позаботьтесь о замене имени файла «time.fr.xliff» на «date.fr.xliff», который необходим для расширения Twig, доступного в пакете Symfony2.