Trong các mô-đun cốt lõi và đôi khi các mẫu, tôi thấy các lớp của trình trợ giúp đang được sử dụng để dịch:
Mage::helper('someModule')->__('translate me');
Tại sao điều này thích hợp hơn:
$this->__('translate me');
Trong các mô-đun cốt lõi và đôi khi các mẫu, tôi thấy các lớp của trình trợ giúp đang được sử dụng để dịch:
Mage::helper('someModule')->__('translate me');
Tại sao điều này thích hợp hơn:
$this->__('translate me');
Câu trả lời:
Chỉ là lý thuyết, nhưng khi bạn gọi
$this->__('Foo')
trong một mẫu, tệp dịch thuật CSV của mô-đun nào Magento sẽ sử dụng để dịch Foo?
Không phải lúc nào cũng rõ người trợ giúp dịch thuật của mô-đun Magento cuối cùng sẽ gọi để dịch chuỗi / khóa. Vì Magento cho phép bạn sử dụng cùng một khóa trong các mô-đun khác nhau cho các chuỗi khác nhau, điều quan trọng là phải biết dữ liệu dịch thuật của mô-đun nào bạn đang sử dụng. Trong thực tế, nếu một mẫu được sử dụng trên nhiều mô-đun, việc sử dụng $this->__()
có thể bị "coi là có hại", vì nó sẽ trả về các giá trị khác nhau tùy thuộc vào ngữ cảnh khối mà hệ thống bố trí đã sử dụng mẫu trong đó.
Tôi đoán là các trình trợ giúp tiện lợi đã được thêm vào trước, nhưng các nhà phát triển xây dựng các mẫu nhanh chóng bắt đầu giúp đỡ để họ biết tệp dịch của mô-đun nào sẽ dịch một chuỗi và mô hình đó lan truyền đến kiểm tra khung. Dòng mã này, tự nó, là mơ hồ.
$this->__('Foo');
Nhưng bạn có thể chắc chắn dòng mã này sẽ sử dụng Mage_Catalog
thông tin bản địa hóa.
Mage::helper('catalog')->__('Foo')
Bởi vì bạn muốn sử dụng một mô-đun rõ ràng.
Nếu bạn sử dụng $this->__()
trong ngữ cảnh khối, mô-đun của khối được sử dụng để dịch. Vì vậy, nếu bạn muốn sử dụng một mô-đun đặc biệt, thì bạn phải sử dụngMage::helper('mymodule')->__()
Mage_Checkout::My Cart
cú pháp. Và điều quan trọng là mô-đun nào được sử dụng để dịch
Về cơ bản tôi sẽ nói điều tương tự như những người khác đã nói.
Nếu bạn sử dụng, Mage::helper(...)
bạn chắc chắn rằng một người trợ giúp cụ thể được sử dụng để dịch.
Ví dụ: hãy lấy Mage_Adminhtml_Block_Catalog_Product_Grid
khối.
Đối với các tiêu đề cột có điều này : 'header'=> Mage::helper('catalog')->__('Name'),
. nếu thay vì trình trợ giúp danh mục $this->__
sẽ được sử dụng, văn bản sẽ được dịch bằng Mage_Adminhtml
mô-đun.
Nhưng đây là trường hợp logic đằng sau việc sử dụng các trình trợ giúp có tên có ý nghĩa.
Tôi chỉ muốn chỉ ra một trường hợp sử dụng $this->__('..')
thay vì cách tiếp cận của người trợ giúp có thể dẫn đến các vấn đề. Tôi nói từ kinh nghiệm.
Hãy lấy khối Mage_Catalog_Block_Breadcrumbs
. Có một dòng trông như thế này : Mage::helper('catalog')->__('Home')
.
Bạn sẽ nghĩ rằng bạn đang ở trong catalog
mô-đun để bạn có thể sử dụng $this
thay thế. Nhưng nếu bạn ghi đè khối bằng khối của bạn được gọi Namespace_Module_Block_Breadcrumbs
thì sao?
Nếu $this
được sử dụng thì mô-đun được sử dụng để dịch sẽ là Namespace_Module
và bạn có thể không muốn điều đó.
Có hai lựa chọn để tránh điều này. Hoặc sử dụng một trình trợ giúp có tên như đã xảy ra đối với hầu hết các khối cốt lõi.
Hoặc bạn là nhà phát triển có thể thêm phần này vào lớp khối:
public function getModuleName() {
return 'Mage_Catalog';
}
Sau đó, bạn chắc chắn rằng tất cả các văn bản sử dụng $this->__
từ khối của bạn (các mẫu kết xuất khối cũng được bao gồm) sẽ được dịch bằng mô-đun danh mục.