繁体   English   中英

Twig date time_diff翻译

[英]Twig date time_diff translation

我正在使用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*

<?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没有附带现成的翻译文件依赖于您的语言环境,您必须制作它(或找到已经完成此操作并且可以与您共享的人)。

首先,将此参数添加到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所需要的。

对于使用Symfony4的任何人,您需要取消注释config/packages/twig_extensions.yaml文件中的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。 确保清除缓存以加载新的翻译

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM