Sự khác biệt giữa {{| t}} và {% trans%} là gì?


11

Tôi nhận thấy rằng Drupal 8 hỗ trợ {% trans %}, theo tài liệu của Symfony ( Phần mở rộng i18n ), thêm hỗ trợ gettext cho Twig.

{{ |t }}, theo như tôi biết, là cách kế thừa để thêm các chuỗi có thể dịch vào các mẫu Drupal. Theo tài liệu , t()dịch một chuỗi sang ngôn ngữ hiện tại hoặc một ngôn ngữ nhất định.

Cả hai đều hỗ trợ trang web đa ngôn ngữ.

  • Sự khác biệt giữa các phần mở rộng là gì?
  • Khi nào tôi nên sử dụng cái này hơn cái kia?

Tôi sử dụng trans cho số nhiều. Nếu không thì đơn giản t. Ví dụ: "{% trans%} mục {% số nhiều%} mục {% endtrans%}"

Câu trả lời:


20

Cả {{ |t }}bộ lọc và {% trans %} ... {% endtrans %}khối, khi được sử dụng trong ngữ cảnh của tệp mẫu Twig trong Drupal, là một phần của hệ thống bản địa hóa Drupal. Và bản dịch cho các chuỗi được xử lý với một trong hai được xử lý theo cùng một cách và thông qua localize.drupal.org. Đối với các chuỗi văn bản đơn giản, chúng có thể được sử dụng thay thế cho nhau, tuy nhiên %transkhối có một số tính năng hữu ích bổ sung cho các chuỗi phức tạp.

Sự khác biệt là tbộ lọc chỉ cho phép các chuỗi đơn giản, trong khi sử dụng một %transkhối cho phép sử dụng các trình giữ chỗ động trong chuỗi. Rất giống như sử dụng t()chức năng php .

Dưới đây là một vài ví dụ:

Dịch chuỗi đơn giản qua tbộ lọc:

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

Chuỗi dịch với giữ chỗ:

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

Trình giữ chỗ được thoát theo mặc định, nhưng cũng có thể bị bỏ mặc - không được giải thoát {{ var|passthrough }}hoặc được định dạng như một trình giữ chỗ {{ var|placeholder }}. Điều này tương đương với việc sử dụng @ chuỗi ,! Chuỗi và% chuỗi trong hàm t ().

Bạn cũng có thể sử dụng %transcác khối để định dạng chuỗi số nhiều.

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

Đối với các chuỗi đơn giản, thực sự không có quy tắc nào về thời điểm bạn nên sử dụng |tso với %trans. Vì vậy, tôi khuyên bạn nên sử dụng bất cứ thứ gì dễ đọc nhất trong mẫu của bạn. Theo kinh nghiệm của tôi, việc sử dụng |tbộ lọc hoạt động tốt đối với các chuỗi ngắn, trong khi đó %transkhối dễ dàng hơn đối với các chuỗi văn bản dài hơn.

Thông tin thêm về cách sử dụng có thể được tìm thấy ở đây: https://www.drupal.org/node/2357633 và tại đây https://www.drupal.org/developing/api/8/localization


Giải thích tuyệt vời. Cảm ơn bạn! Giải thích về làm là thiếu trầm trọng (IMHO). Giải thích kỹ lưỡng hơn của bạn với các ví dụ đã giúp tôi rất nhiều và cho tôi một vài ý tưởng. Đặc biệt là ví dụ chuỗi số nhiều. Điều đó thật hấp dẫn!
Tyler Youngblood
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.