如何使Twig日期可翻译

时间:2012-04-19 07:39:25

标签: symfony twig

我在这样的树枝中显示一个DateTime对象:

<td>{{ transaction.getDate|date("F - d - Y") }}</td>

现在我希望这个月可以翻译, 例如,April - 20 - 2012应显示为:Avril - 20 - 2012

我可以这样做吗? 如果是这样,怎么样?

我正在研究Symfony2。

3 个答案:

答案 0 :(得分:9)

或使用The Intl Extension

{{ "now"|localizeddate('none', 'none', app.request.locale, "Europe/Paris", "cccc d MMMM Y") }}

会给你类似的东西:

jeudi 25 février 2016

要使用symfony 2启用,请添加到composer:

composer require twig/extensions

使用服务激活过滤器:

services:
    twig.extension.intl:
        class: Twig_Extensions_Extension_Intl
        tags:
            - { name: twig.extension }

答案 1 :(得分:2)

您可以获取月份部分然后进行翻译:

  {% set month      = transaction.getDate|date('F') %}
  {% set dayAndYear = transaction.getDate|date('d - Y') %}

  {{ '%s - %s'|format(month|trans, dayAndYear) }}

答案 2 :(得分:2)

另一种具有内联树枝解决方案和更易读的翻译消息文件的解决方案:

<td>{{ ('month.'~transaction.getDate|date("m"))|trans|raw~' - '~transaction.getDate|date("d - Y") }}</td>

在您的翻译文件中(取决于您设置的配置),例如在messages.fr.yml中进行法语翻译时,您必须添加以下行:

# messages.fr.yml
month.01: Janvier
month.02: Février
month.03: Mars
month.04: Avril
month.05: Mai
month.06: Juin
month.07: Juillet
month.08: Août
month.09: Septembre
month.10: Octobre
month.11: Novembre
month.12: Décembre

说明:

使用〜运算符将所有操作数转换为字符串并将它们连接起来 使用|操作员应用过滤器
使用trans函数来翻译
使用raw来表示日期是安全的(不需要转义html,js ......)

由于运算符优先级定义,所以请注意括号 http://twig.sensiolabs.org/doc/templates.html

运算符优先级如下,首先列出最低优先级运算符:b-and,b-xor,b-or,or,and,==,!=,&lt;,&gt;,&gt; = ,&lt; =,in,matches,starts with,ends with,...,+, - ,〜,*,/,//,%,is,**,|,[]和。:

第一部分括号的解释: (&#39;一个月&#39;〜transaction.getDate |日期(&#34; M&#34;))|反|原始

transaction.getDate | date(&#34; m&#34;)首先执行,因为|运算符在〜运算符上具有更高的优先级。 如果transaction.getDate的月份是may,则transaction.getDate | date(&#34; m&#34;)返回03字符串 过了一个月。&#39;是连接到这个字符串,然后我们有month.03

因为我们在括号之间设置了#month;&#39; ~transaction.getDate | date(&#34; m&#34;),所以只有在评估字符串month.03之后才应用过滤器trans。 ...