我使用Twig Date扩展来获取工作时间_diff。
{{ photo.getCreationDate|time_diff }}
我想把它变成多语言。我看过文件,上面写着
要获得可翻译的输出,请给出Symfony''Component''Translation''TranslatorInterface作为构造函数论点返回的字符串格式为diff.ago.XXX或diff.in.XXX,其中XXX可以是任何有效单位:秒、分钟、小时、,天、月、年。
我不知道该怎么做,但似乎对我不起作用。
这就是我在控制器中尝试的方式。
$trick=new twig_Environment(new TranslatorInterface());$trick->addExtension(新twig_Extension_Extension_Date());
我得到下一个错误
错误:无法实例化接口Symfony''组件''翻译''翻译器接口
Twig_Environment构造函数正在等待Twig_LoaderInterface对象,而不是TranslatorInterface。
应该如何翻译time_diff输出?
感谢
您阅读的是Twig文档,而不是Symfony2文档,即使两者都是由SenioLabs制作的。
如果使用Symfony全栈框架,Symfony''Component''Translation''TranslatorInterface已被定义为Twig扩展的构造函数参数。
为了确保这一点,请查看上的文件
你应该看到这样的东西:
*'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扩展中。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位置。如果您在自己的Bundle中工作,即与AppBundle不同,请调整位置。当然,根据你想要的语言,调整";fr";(如"de"、"es"…)。为什么"。xliff";扩大当然,您可以创建一个";。yml";文件。但是使用";。xliff";允许你利用我接下来给你的建议。
然后,如果我继续用法语翻译的例子,打开你的"date.fr.fliff";文件并复制/粘贴KnpTimeBundle提供的翻译。
如果必须的话,不要忘记清除开发缓存。
如果你想在Twig模板中进行翻译,只需使用过滤器而不更改任何内容(不要试图添加第二个过滤器"|trans"):
{{ user.createdAt|time_diff }}
当然,将";user.createdAt";你需要什么。
如果您愿意,只需在应用程序中实现KnpTimeBundle即可为您完成所有这些工作。否则,我想你可以复制/粘贴KnpTimeBundle为大量不同语言提供的翻译文件,只需注意替换它们的文件名即可;time.fr.xliff";通过";date.fr.xliff";,这是Symfony2包中可用的Twig Extension所需要的。
对于任何使用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请确保清除缓存以加载新翻译。