我正在使用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\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* */ 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 Extension :
*services.yml* twig.extension.date: class: Twig_Extensions_Extension_Date arguments: ["@translator"] // careful of quotes tags: - { name: twig.extension }
然后,在location \ app\Resources\translations中创建"date.fr.xliff".如果您正在使用自己的捆绑包(即不同的AppBundle),请调整位置.当然,根据您正在寻找的语言,调整"fr"(如"de","es"......).为什么".xliff"扩展?当然,您可以创建一个".yml"文件.但是使用".xliff"可以让你利用我接下来的建议.
然后,如果我继续使用法语翻译示例,请打开"date.fr.wliff"文件并复制/粘贴KnpTimeBundle提供的 翻译.
如果必须,请不要忘记清除开发缓存.
如果您正在寻找在Twig模板中进行的翻译,只需使用过滤器而不更改任何内容(不要尝试添加第二个过滤器"| trans"):
{{ user.createdAt|time_diff }}
当然,根据您的需要替换"user.createdAt".
如果您愿意,只需在您的应用程序中实现KnpTimeBundle即可为您完成所有这些操作.否则,我想你可以复制/粘贴KnpTimeBundle为大量不同语言提供的翻译文件,只需要用"date.fr.xliff"替换他们的文件名"time.fr.xliff",这是Symfony2包中提供的Twig Extension所需要的.