Sự khác biệt giữa việc sử dụng $ this-> t ('text') và t ('text') trong một plugin khối


7

Tôi đã nhận thấy trong nhiều hướng dẫn để xây dựng các plugin khối,

$this->t('text')

được sử dụng để tạo văn bản có thể dịch, đặc biệt là trong hàm dạng khối. Tuy nhiên sử dụng

t('text') 

không tạo ra bất kỳ lỗi nào. Có sự khác biệt nào giữa việc sử dụng một trong hai? Và nếu không có, thực hành tốt nhất là gì?


Câu trả lời:


6

Để chính xác cho câu hỏi của bạn: không có sự khác biệt trong việc thực hiện nội bộ.

Nhưng như một cách thực hành tốt nhất , bạn nên sử dụng $this->tthay vì toàn cầu tbất cứ khi nào có thể. Nếu bạn kiểm tra chức năng, tsẽ trả về một đối tượng TranslatizableMarkup mới .

Nếu lớp của bạn nói $this->tkhông được xác định, bạn có thể thêm StringTranslationTrait để thêm hành vi hoặc thêm nó làm phụ thuộc.

Sử dụng đặc điểm này sẽ thêm các phương thức t () và formatPlural () vào lớp. Chúng phải được sử dụng cho mọi chuỗi có thể dịch, tương tự như cách mã thủ tục phải sử dụng các hàm toàn cầu t () và \ Drupal :: dịch () -> formatPlural (). Điều này cho phép các công cụ trích xuất chuỗi để tìm các chuỗi có thể dịch.

Nếu lớp có khả năng tiêm dịch vụ từ container, nó sẽ tiêm dịch vụ 'string_translation' và gán nó cho $ this-> stringTranslation.

Vì vậy, như một quy tắc thực hành tốt nhất, bạn thường không muốn trộn quy trình trong OOP trừ khi hoàn toàn không thể tránh khỏi (ví dụ: các hàm PHP gốc).


4

Tài liệu cho t () nêu:

Khi có thể, sử dụng \Drupal\Core\StringTranslation\StringTranslationTrait::t(). Nếu không thì tạo một \Drupal\Core\StringTranslation\TranslatableMarkupđối tượng mới trực tiếp.

Nó không giải thích lý do cho việc này, nhưng nếu bạn xem bình luận trên trang tài liệu , nó sẽ cho bạn một lý do để sử dụng phương pháp đặc điểm đó hoặc lớp đó.

Các lớp có thể được kiểm tra riêng với PHPUnit, chạy mà không có lõi bootstrapping, nhưng t()chức năng chỉ khả dụng khi lõi được bootstrapping.
Sử dụng $this->t()StringTranslationTraitcho phép bản dịch bị chế giễu, do đó lớp có thể được kiểm tra độc lập với PHPUnit.

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.