9
votes

Comment vérifier si un élément de traduction existe dans Twig / Symfony2?

Voici ma macro pour imprimer une barre latérale. Chaque titre code> attribute est la construction de '" ~ itinéraire code> élément dans messages.it.yml code>.

Même si l'élément trans "fort> n'existe pas strong> Twig renvoie toujours la chaîne transmise à trans code> filtre. Par exemple: p> xxx pré>

modèle: p> xxx pré>

Comment puis-je vérifier si un élément trans Avant de l'imprimer effectivement? strong> em> p>

EDIT STRY>: une solution de contournement brutale pourrait être (code non testé): p>

<li class="{{ active ? 'active' : '' }}">
    {% set look    = ('tip.' ~ route) %}
    {% set foreign = look|trans %}
    {% set has     = not(look == foreign) %}

    <a href="{{ path(route) }}" {{ not has ? '' : 'title="' ~ foreign ~ '"'  }} >
        <i class="{{ icon }}"></i> {{ ('nav.' ~ route)|trans }}
    </a>
 </li>


1 commentaires

Il n'y a pas une telle option de manière native. Une possibilité serait de vérifier si la sortie de ('NAV.' ~ ~ Itinéraire) | Trans est la même que ('Nav.' ~ Itinéraire) .


4 Réponses :


0
votes

Essayez d'attribuer la chaîne 'NAV.' ~ Route de la variable, et ensuite traduire la variable.


0 commentaires

1
votes

J'ai analysé votre problème et j'ai examiné le traducteur par défaut utilisé dans Symfony2.

Il utilise la méthode Trans () qui est implémenté comme Ceci . < / p>

Pour vous, la meilleure solution de contournement serait de redéfinir cette méthode pour renvoyer false, lorsque vous l'attendez.

Raconter la longue histoire:

  1. écrire votre classe, qui implémente le translatorinterface et s'étend Traducteur

  2. méthode redéfinle trans () là

  3. Définir le service sous forme de traducteur avec votre classe (il remplacera Traducteur par défaut avec le vôtre)

    C'est ça

    J'espère que cela aide;)


0 commentaires

13
votes

La solution que j'ai proposée était celle-ci:

{% if "#{var}.something"|trans != "#{var}.something" %}


1 commentaires

Ceci n'est correct que lorsque vous utilisez des clés et non une langue de référence par défaut.



5
votes

Vous pouvez utiliser une extension de branche pour confirmer la traduction existant ou non. xxx


1 commentaires

+1 Ceci peut être préférable à d'autres approches énumérées ici, car ce ne sera pas des erreurs de traduction du profileur Triger. Notez que vous n'avez pas besoin de la ligne $ locale = $ traducteur-> getLocale (); . GetCatalog () L'argument de la méthode peut rester null, dans ce cas, la méthode utilise la locale de l'instance ...