Wie um zu überprüfen, ob eine übersetzung Element existiert in Twig/Symfony2?
Hier ist mein makro zum drucken eines sidebar-Element. Jeder title
atttribute bauen suchen 'tip.' ~ route
Element in messages.it.yml
.
Selbst wenn die trans-Element ist nicht vorhanden Zweig immer wieder die Zeichenfolge übergeben, um trans
filter. Zum Beispiel:
tip:
dashboard: Dashboard
Vorlage:
{% _self.sideitem('dashboard', 'home') %} //<a title="Dashboard">...
{% _self.sideitem('fail', 'home') %} //<a title="tip.fail">...
{% macro sideitem(route, icon) %}
{% set active = (route == app.request.get('_route')) %}
{% set icon = icon ? 'icon-' ~ icon ~ (active ? ' icon-white' : '') : '' %}
<li class="{{ active ? 'active' : '' }}">
<a href="{{ path(route) }}" title="{{ ('tip.' ~ route)|trans }}">
<i class="{{ icon }}"></i> {{ ('nav.' ~ route)|trans }}
</a>
</li>
{% endmacro %}
Wie kann ich prüfen, ob eine trans-Position vorhanden ist, bevor Sie tatsächlich drucken?
BEARBEITEN: ein brutaler workaround könnte sein (code nicht getestet):
<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>
- Es gibt keine solche option nativ. Eine Möglichkeit wäre zu prüfen, ob die Ausgabe von
('nav.' ~ route)|trans
ist das gleiche, als('nav.' ~ route)
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Lösung, die ich kam, war dieses:
Dieser prüft nur, ob das Ergebnis der übersetzung Schlüssel unterscheidet sich von der übersetzung Schlüssel selbst. Wenn einer Taste keine übersetzung, die "trans" - filter gibt die übersetzung Schlüssel.
Können Sie twig-Erweiterung zu bestätigen übersetzung vorhanden ist oder nicht.
$locale = $translator->getLocale();
.getCatalog()
Methode argument bleiben kann null, in diesem Fall verwendet die Methode die Instanz, die die locale...Habe ich analysiert Ihr problem und schaute durch die Standard-Übersetzer, der in Symfony2.
Es verwendet die Methode trans() umgesetzt wird wie diese.
Für Sie die beste Abhilfe wäre, neu zu definieren diese Methode den Wert false zurück, wenn Sie es erwarten.
Erzählt die lange Geschichte kurz zu machen:
Schreiben Sie Ihre Klasse, implementiert TranslatorInterface und erweitert
Übersetzer
Neu definieren Methode trans() es
Definieren service als
translator
mit Ihrer Klasse (Sie ersetzenStandard-übersetzer, die mit Ihrer)
Dass es
Ich hoffe es hilft 😉
versuchen, weisen Sie der Zeichenfolge 'nav.' ~ route auf die variable, und als Nächstes übersetzen Sie die variable.