Jaka jest różnica między {{| t}} a {% trans%}?

11

Zauważam, że obsługa Drupala 8, {% trans %}która zgodnie z dokumentacją Symfony ( rozszerzenie i18n ) dodaje obsługę gettext do Twiga.

{{ |t }}, o ile mi wiadomo, to klasyczny sposób dodawania tłumaczeń do szablonów Drupala. Zgodnie z dokumentacją , t()przekłada ciąg do języka potocznego lub danego języka.

Oba obsługują wielojęzyczną stronę internetową.

  • Jakie są różnice między tymi rozszerzeniami?
  • Kiedy powinienem używać jednego na drugim?
itsdarrylnorris
źródło
Używam trans dla liczby mnogiej. W przeciwnym razie proste t. Na przykład „{% trans%} item {% plural count%} items {% endtrans%}”

Odpowiedzi:

21

Zarówno {{ |t }}filtr, jak i {% trans %} ... {% endtrans %}bloki, gdy są używane w kontekście pliku szablonu Twig w Drupal, są częścią systemu lokalizacji Drupal. Tłumaczenie ciągów przetwarzanych za pomocą jednego z nich jest obsługiwane w ten sam sposób i za pośrednictwem localize.drupal.org. W przypadku prostych ciągów tekstu można ich używać zamiennie, jednak %transblok ma kilka dodatkowych przydatnych funkcji dla złożonych ciągów.

Różnica polega na tym, że tfiltr dopuszcza tylko proste ciągi, a użycie %transbloku pozwala na użycie dynamicznych symboli zastępczych w ciągu. Podobnie jak przy użyciu t()funkcji php .

Oto kilka przykładów:

Proste tłumaczenie ciągów przez tfiltr:

{{ 'Hello Stack Exchange!'|t }}

Tłumaczenie ciągów znaków z symbolem zastępczym:

{% trans %}Hello {{ user.name }}, today's date is {{ date|placeholder }}.{% endtrans %}

Symbole zastępcze są domyślnie oznaczone {{ var|passthrough }}znakiem ucieczki, ale można je również pozostawić bez kształtu lub sformatować jako symbol zastępczy {{ var|placeholder }}. Jest to równoważne z użyciem odpowiednio @string,! String i% string w funkcji t ().

Możesz także użyć %transbloków w celu sformatowania liczby mnogiej.

{% trans %}
  There is 1 comment.
{% plural count %}
  There are {{ count }} comments.
{% endtrans %}

W przypadku prostych ciągów są tam naprawdę nie ma reguły o tym, kiedy należy użyć |tVs. %trans. Polecam więc korzystanie z tego, co jest najłatwiejsze do odczytania w szablonie. Z mojego doświadczenia wynika, że |tfiltr działa dobrze w przypadku krótkich ciągów, podczas gdy %transblok jest łatwiejszy w przypadku dłuższych ciągów tekstu.

Więcej informacji na temat użytkowania można znaleźć tutaj: https://www.drupal.org/node/2357633 i tutaj https://www.drupal.org/developing/api/8/localization

eojthebrave
źródło
Niesamowite wyjaśnienie. Dziękuję Ci! Poważnie brakowało wyjaśnienia „do” (IMHO). Twoje dokładniejsze wyjaśnienie z przykładami bardzo mi pomogło i dało mi kilka pomysłów. Zwłaszcza przykład liczby mnogiej. To całkiem sprytne!
Tyler Youngblood,