FMaz008
FMaz008

Reputation: 11285

Symfony2+Twig, variable in translation return "A message must be a simple text"

When I was doing plain PHP, I was simply doing this:

printf(_("Hello %s !"), $name);

Now with Twig, I must use the trans tag. So I've copy/paste the documentation example, and here's my full template:

{% extends 'MyAppBundle::layout.html.twig' %}

{% block content %}
    <h1>
        {% trans %}
            Hello {{ name }}!
        {% endtrans %}
    </h1>
{% endblock %}

Why Symfony return the following exeption ?

A message must be a simple text in "MyAppBundle::home.html.twig"

500 Internal Server Error - Twig_Error_Syntax

Upvotes: 9

Views: 9120

Answers (3)

Thykof
Thykof

Reputation: 995

I have a similar issue: to pass my translation path to trans filter, I need to concatenate a string and a variable, then transform into lowercase.

Here {% trans %} and {% endtrans %} are not used, but trans filter instead:

<span>{{ ('statuses.' ~ status | lower) | trans }}</span>

Assuming in the translation there is:

- status:
  - failed: The task has failed

and in the template you pass the variable name with value FAILED.

Upvotes: 0

roverwolf
roverwolf

Reputation: 451

One missing bit with the previous answer is the "with" portion that is needed to do the replacement of the variable part of the message.

{% trans with {'%name%':name} %}Hello %name%!{% endtrans %}

Upvotes: 21

Problematic
Problematic

Reputation: 17678

The precise syntax for translations is a little different in Symfony2 than it is in standalone Twig. You'll want to check out the Symfony2 documentation for translations in twig templates, found here. The correct syntax would look something like this:

{% trans %}Hello %name%!{% endtrans %}

Upvotes: 11

Related Questions