อะไรคือความแตกต่างระหว่าง {{| t}} และ {% trans%}


11

ฉันสังเกตเห็นว่า Drupal 8 รองรับ{% trans %}ซึ่งตามเอกสาร Symfony ( ส่วนขยาย i18n ) เพิ่มการสนับสนุน gettext ให้กับ Twig

{{ |t }}เท่าที่ฉันรู้เป็นวิธีดั้งเดิมในการเพิ่มสตริงที่แปลได้ในเทมเพลต Drupal อ้างอิงถึงเอกสาร , t()แปลสตริงภาษาปัจจุบันหรือภาษาที่กำหนด

ทั้งรองรับเว็บไซต์หลายภาษา

  • ส่วนขยายเหล่านั้นแตกต่างกันอย่างไร
  • เมื่อใดที่ฉันควรใช้อันใดอันหนึ่งอีกอันหนึ่ง?

ฉันใช้ทรานส์สำหรับพหูพจน์ มิฉะนั้นจะง่าย ตัวอย่างเช่น "{% trans%} รายการ {% จำนวนพหูพจน์%} รายการ {% endtrans%}"

คำตอบ:


21

ทั้ง{{ |t }}ตัวกรองและ{% trans %} ... {% endtrans %}บล็อกเมื่อใช้ในบริบทของไฟล์เทมเพลต Twig ใน Drupal เป็นส่วนหนึ่งของระบบแปลภาษา Drupal และการแปลสำหรับสตริงที่ประมวลผลด้วยอันใดอันหนึ่งจะได้รับการจัดการในลักษณะเดียวกันและผ่าน localize.drupal.org สำหรับสตริงข้อความธรรมดาพวกเขาสามารถใช้แทนกันได้อย่างไรก็ตาม%transบล็อกมีคุณสมบัติที่มีประโยชน์เพิ่มเติมสำหรับสตริงที่ซับซ้อน

ความแตกต่างก็คือtตัวกรองจะอนุญาตให้ใช้สตริงอย่างง่ายเท่านั้นในขณะที่การใช้%transบล็อกอนุญาตให้ใช้ตัวยึดตำแหน่งแบบไดนามิกในสตริง ชอบใช้t()ฟังก์ชั่นphp มาก

นี่คือตัวอย่างบางส่วน:

การแปลสตริงอย่างง่ายผ่านtตัวกรอง:

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

การแปลสตริงด้วยตัวยึดตำแหน่ง:

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

ตัวยึดจะถูกหลีกเลี่ยงตามค่าเริ่มต้น แต่ยังสามารถแยกซ้าย{{ var|passthrough }}หรือไม่ใช้รูปแบบเป็นตัวยึดตำแหน่ง{{ var|placeholder }}ได้ นี่เทียบเท่ากับการใช้ @ string,! string และ% string ในฟังก์ชัน t () ตามลำดับ

คุณยังสามารถใช้%transบล็อกเพื่อจัดรูปแบบสตริงพหูพจน์

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

สำหรับสตริงง่ายมีจริงๆไม่มีกฎระเบียบเกี่ยวกับเมื่อคุณควรใช้กับ|t %transดังนั้นฉันขอแนะนำให้ใช้สิ่งที่อ่านง่ายที่สุดในเทมเพลตของคุณ จากประสบการณ์ของฉันในการใช้|tตัวกรองใช้งานได้ดีกับสตริงสั้น ๆ ในขณะที่%transบล็อกนั้นง่ายขึ้นสำหรับสตริงข้อความที่ยาวขึ้น

ข้อมูลเพิ่มเติมเกี่ยวกับการใช้งานสามารถดูได้ที่นี่: https://www.drupal.org/node/2357633และที่นี่https://www.drupal.org/developing/api/8/localization


คำอธิบายที่ยอดเยี่ยม ขอขอบคุณ! คำอธิบายสิ่งที่ต้องทำนั้นขาดไปอย่างรุนแรง (IMHO) คำอธิบายที่ละเอียดยิ่งขึ้นของคุณพร้อมตัวอย่างช่วยฉันออกมามากมาย โดยเฉพาะตัวอย่างสตริงพหูพจน์ มันเนียนดี!
Tyler Youngblood
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.