我正在使用树枝日期扩展来获得工作time_diff。
{{ photo.getCreationDate|time_diff }}
我想让它多语言。我已经看过文件了,上面写着
要获得可翻译的输出,请提供Symfony\Component\TranslatorInterface作为构造函数参数。返回的字符串格式为diff.ago.XXX或diff.in.XXX,其中XXX可以是任何有效单位:秒、分钟、小时、天、月、年。
我不知道怎么做,但似乎对我不起作用。
这就是我在控制器中尝试的方式。
$twig=新的twig_环境(新的TranslatorInterface())$小枝-
我得到下一个错误
错误:无法实例化接口Symfony\Component\Translation\TranslatorInterface
Twig_环境构造函数正在等待Twig_LoaderInterface对象,而不是TranslatorInterface。
应该如何做才能让我翻译时间差输出?
谢啦
您阅读的是细枝文档,而不是Symfony2,即使两者都是由SensioLabs制作的。
如果使用Symfony全栈框架,Symfony\Component\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没有现成的翻译文件,这取决于您的语言环境。为此,您必须制作(或者找到已经完成此操作并可以与您共享的人)。
首先,将此参数添加到服务中的细枝扩展。yml:
*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提供的大量不同语言的翻译文件,只需注意将其文件名time.fr.xliff替换为date.fr.xliff,这是需要的Symfony2包中提供树枝扩展。
对于任何使用Symfony4的人,都需要取消对config/packages/twig\u扩展中的一行的注释。yaml
文件:
services:
_defaults:
public: false
autowire: true
autoconfigure: true
#Twig\Extensions\ArrayExtension: ~
Twig\Extensions\DateExtension: ~
#Twig\Extensions\IntlExtension: ~
#Twig\Extensions\TextExtension: ~
然后,您需要添加翻译,正如他在回答中提到的@Mexcanoon。或者干脆用KnpTimeBundle代替。确保清除缓存以加载新翻译。