Qual è la differenza tra {{| t}} e {% trans%}?


11

Noto che Drupal 8 supporta {% trans %}che, secondo la documentazione di Symfony ( l'estensione i18n ), aggiunge il supporto gettext a Twig.

{{ |t }}, per quanto ne so, è il modo legacy di aggiungere stringhe traducibili nei template di Drupal. Secondo la documentazione , t()traduce una stringa nella lingua corrente o in una determinata lingua.

Entrambi supportano un sito Web multilingue.

  • Quali sono le differenze tra queste estensioni?
  • Quando dovrei usarne uno rispetto all'altro?

Uso trans per i plurali. Altrimenti semplice t. Ad esempio "{% trans%} item {% plural count%} items {% endtrans%}"

Risposte:


21

Sia il {{ |t }}filtro che i {% trans %} ... {% endtrans %}blocchi, se utilizzati nel contesto del file modello Twig in Drupal, fanno parte del sistema di localizzazione Drupal. E la traduzione per le stringhe elaborate con una delle due viene gestita allo stesso modo e tramite localize.drupal.org. Per semplici stringhe di testo possono essere utilizzate in modo intercambiabile, tuttavia il %transblocco ha alcune funzioni utili aggiuntive per stringhe complesse.

La differenza è che il tfiltro consente solo stringhe semplici, mentre l'uso di un %transblocco consente l'uso di segnaposto dinamici nella stringa. Proprio come usare la t()funzione php .

Ecco alcuni esempi:

Semplice traduzione delle stringhe tramite tfiltro:

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

Traduzione stringa con segnaposto:

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

I segnaposto vengono salvati per impostazione predefinita, ma possono anche essere lasciati senza caratteri di escape {{ var|passthrough }}o formattati come segnaposto {{ var|placeholder }}. Ciò equivale all'utilizzo di @string,! String e% string nella funzione t () rispettivamente.

Puoi anche usare i %transblocchi per formattare stringhe plurali.

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

Per stringhe semplici non ci sono regole su quando usare |tvs %trans.. Quindi consiglierei di usare ciò che è più facile da leggere nel tuo modello. Nella mia esperienza l'uso del |tfiltro funziona bene per stringhe brevi, mentre il %transblocco è più semplice per stringhe di testo più lunghe.

Ulteriori informazioni sull'utilizzo sono disponibili qui: https://www.drupal.org/node/2357633 e qui https://www.drupal.org/developing/api/8/localization


Spiegazione eccezionale. Grazie! La spiegazione su do era gravemente carente (IMHO). La tua spiegazione più approfondita con esempi mi ha aiutato molto e mi ha dato un paio di idee. Soprattutto l'esempio di stringa plurale. È piuttosto elegante!
Tyler Youngblood,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.