Twig日期时间偏移翻译


Twig date time_diff translation

我使用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请确保清除缓存以加载新翻译