{{| t}}와 {% trans %}의 차이점은 무엇입니까?


11

{% trans %}Symfony 문서 ( i18n Extension ) 에 따르면 Drupal 8 이 Twig에 gettext 지원을 추가하는 것을 지원합니다.

{{ |t }}내가 아는 한, 번역 가능한 문자열을 Drupal 템플릿에 추가하는 레거시 방법입니다. 에 따르면 문서 , t()현재 언어 나 지정된 언어로 문자열을 변환합니다.

둘 다 다국어 웹 사이트를 지원합니다.

  • 이러한 확장의 차이점은 무엇입니까?
  • 언제 다른 것을 사용해야합니까?

나는 복수를 위해 트랜스를 사용합니다. 그렇지 않으면 단순 t. 예 : "{% trans %} item {% 복수 수 %} items {% endtrans %}"

답변:


21

Drupal의 Twig 템플릿 파일 컨텍스트에서 사용되는 {{ |t }}필터와 {% trans %} ... {% endtrans %}블록 은 모두 Drupal 지역화 시스템의 일부입니다. 둘 중 하나로 처리 된 문자열의 번역은 같은 방식으로 localize.drupal.org를 통해 처리됩니다. 간단한 텍스트 문자열의 경우 서로 바꾸어 사용할 수 있지만 %trans블록에는 복잡한 문자열에 유용한 기능이 몇 가지 더 있습니다.

차이점은 t필터가 간단한 문자열 만 허용하고 %trans블록을 사용하면 문자열에 동적 자리 표시자를 사용할 수 있다는 것입니다. PHP t()함수를 사용하는 것과 매우 비슷 합니다.

몇 가지 예는 다음과 같습니다.

t필터 를 통한 간단한 문자열 변환 :

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

자리 표시자를 사용한 문자열 번역 :

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

자리 표시자는 기본적으로 이스케이프되지만 이스케이프 처리하지 {{ var|passthrough }}않거나 자리 표시 자로 형식화 할 수도 있습니다 {{ var|placeholder }}. 이것은 t () 함수에서 각각 @string,! string 및 % string을 사용하는 것과 같습니다.

%trans복수 문자열을 형식화하기 위해 블록을 사용할 수도 있습니다 .

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

간단한 문자열의 경우 |tvs 를 사용해야 할 때에 대한 규칙이 실제로 없습니다 %trans. 따라서 템플릿에서 가장 읽기 쉬운 것을 사용하는 것이 좋습니다. 필자의 경험에 따르면 |t짧은 문자열 에는 필터를 사용하는 %trans것이 좋지만 긴 텍스트 문자열 에는 블록이 더 쉽습니다.

사용에 대한 자세한 내용은 여기에서 찾을 수 있습니다 : https://www.drupal.org/node/2357633 여기 https://www.drupal.org/developing/api/8/localization


멋진 설명입니다. 감사합니다! do에 대한 설명은 심각하게 부족했습니다 (IMHO). 예제를 통한 더 철저한 설명은 많은 도움이되었고 몇 가지 아이디어를주었습니다. 특히 복수 문자열 예. 꽤 매끄 럽습니다!
Tyler Youngblood 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.