我正在使用Twig Date扩展来获得工作时间_diff。
{{ photo.getCreationDate|time_diff }}
我想让它成为多语言。我已经阅读了文档,它说
要获得可翻译的输出,请给出一个 Symfony \ Component \ Translation \ TranslatorInterface作为构造函数 论点。返回的字符串格式为diff.ago.XXX或 diff.in.XXX其中XXX可以是任何有效单位:秒,分钟,小时, 日,月,年。
我不知道怎么做,但似乎它对我不起作用。
这就是我在控制器中尝试的方式。
$ twig = new Twig_Environment(new TranslatorInterface()); $ twig-> addExtension(new Twig_Extensions_Extension_Date());
我收到下一个错误
错误:无法实例化接口 的Symfony \组件\翻译\ TranslatorInterface
Twig_Environment构造函数正在等待Twig_LoaderInterface对象,而不是TranslatorInterface。
如何让我翻译time_diff输出?
由于
答案 0 :(得分:17)
你读到的是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没有附带现成的翻译文件依赖于你的语言环境,你必须制作它(或找到已经完成此操作并且可以与你分享它的人)。
首先,将此参数添加到 services.yml 中的Twig扩展名中:
*services.yml*
twig.extension.date:
class: Twig_Extensions_Extension_Date
arguments: ["@translator"] // careful of quotes
tags:
- { name: twig.extension }
然后,在 \ app \ Resources \ translations 位置创建“date.fr.xliff”。如果您在自己的Bundle中工作,即AppBundle的不同,请调整位置。 当然,根据您正在寻找的语言,调整“fr”(如“de”,“es”......)。 为什么“.xliff”扩展?当然,您可以创建一个“.yml”文件。但是使用“.xliff”可以让你利用我接下来的建议。
然后,如果我继续使用法语翻译示例,请打开“date.fr.wliff”文件并复制/粘贴 translation provided by the KnpTimeBundle
如果必须,请不要忘记清除开发缓存。
如果您正在寻找在Twig模板中进行的翻译,只需使用过滤器而不更改任何内容(不要尝试添加第二个过滤器“| trans”):
{{ user.createdAt|time_diff }}
当然,根据您的需要替换“user.createdAt”。
如果您愿意,只需在您的应用程序中实现KnpTimeBundle即可为您完成所有这些操作。 否则,我想你可以复制/粘贴KnpTimeBundle为大量不同语言提供的翻译文件,只需要用“date.fr.xliff”替换他们的文件名“time.fr.xliff”,这是Symfony2包中提供的Twig扩展所需要的。
答案 1 :(得分:0)
对于使用Symfony4的任何人,您都需要在config/packages/twig_extensions.yaml
文件中取消注释:
services:
_defaults:
public: false
autowire: true
autoconfigure: true
#Twig\Extensions\ArrayExtension: ~
Twig\Extensions\DateExtension: ~
#Twig\Extensions\IntlExtension: ~
#Twig\Extensions\TextExtension: ~
然后,您需要添加其答案中提到的@Mexcanoon的翻译。或仅使用KnpTimeBundle。 确保您清除缓存以加载新的翻译。