提问者:小点点

细枝日期时间差异翻译


我正在使用树枝日期扩展来获得工作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。

应该如何做才能让我翻译时间差输出?

谢啦


共2个答案

匿名用户

您阅读的是细枝文档,而不是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代替。确保清除缓存以加载新翻译。