Dalam modul inti dan kadang-kadang templat, saya melihat kelas pembantu digunakan untuk terjemahan:
Mage::helper('someModule')->__('translate me');
Mengapa ini lebih disukai daripada:
$this->__('translate me');
Dalam modul inti dan kadang-kadang templat, saya melihat kelas pembantu digunakan untuk terjemahan:
Mage::helper('someModule')->__('translate me');
Mengapa ini lebih disukai daripada:
$this->__('translate me');
Jawaban:
Hanya berteori, tetapi saat Anda menelepon
$this->__('Foo')
dalam templat, file terjemahan CSV modul mana yang akan digunakan Magento untuk menerjemahkan Foo?
Tidak selalu jelas pembantu terjemahan modul mana yang pada akhirnya akan dipanggil Magento untuk menerjemahkan string / kunci. Karena Magento memungkinkan Anda untuk menggunakan kunci yang sama di modul yang berbeda untuk string yang berbeda, seringkali penting untuk mengetahui data terjemahan modul mana yang Anda gunakan. Bahkan, jika templat digunakan di beberapa modul, menggunakan $this->__()
mungkin "dianggap berbahaya", karena akan mengembalikan nilai yang berbeda tergantung pada konteks blok sistem tata letak yang digunakan templat.
Dugaan saya adalah help helper ditambahkan di bagian depan, tetapi pengembang membangun template dengan cepat memulai instantiating sehingga mereka tahu file terjemahan modul mana yang akan menerjemahkan string, dan pola itu menyebar ke pengujian kerangka kerja. Baris kode ini, dengan sendirinya, bersifat ambigu.
$this->__('Foo');
Tetapi Anda dapat yakin bahwa baris kode ini akan menggunakan Mage_Catalog
informasi lokalisasi.
Mage::helper('catalog')->__('Foo')
Karena Anda ingin menggunakan modul eksplisit.
Jika Anda menggunakan $this->__()
dalam konteks blok, modul blok digunakan untuk terjemahan. Jadi jika Anda ingin menggunakan modul khusus, maka Anda harus menggunakannyaMage::helper('mymodule')->__()
Mage_Checkout::My Cart
sintaksisnya. Dan sangat penting modul mana yang digunakan untuk terjemahan
Pada dasarnya saya akan mengatakan hal yang sama seperti yang dikatakan orang lain.
Jika Anda menggunakan Mage::helper(...)
Anda pastikan bahwa pembantu tertentu digunakan untuk terjemahan.
Sebagai contoh, mari kita ambil Mage_Adminhtml_Block_Catalog_Product_Grid
blokirnya.
Untuk header kolom ada ini: 'header'=> Mage::helper('catalog')->__('Name'),
. jika alih-alih bantuan katalog $this->__
akan digunakan, teks akan diterjemahkan menggunakan Mage_Adminhtml
modul.
Tapi ini adalah kasus di mana logika di balik menggunakan penolong bernama masuk akal.
Saya hanya ingin menunjukkan sebuah kasus di mana menggunakan $this->__('..')
alih-alih pendekatan pembantu dapat menyebabkan masalah. Saya berbicara dari pengalaman.
Mari ambil blokir Mage_Catalog_Block_Breadcrumbs
. Ada satu baris yang terlihat seperti ini: Mage::helper('catalog')->__('Home')
.
Anda akan berpikir bahwa Anda berada di catalog
modul sehingga Anda bisa menggunakannya $this
. Tetapi bagaimana jika Anda mengganti blok dengan blok Anda disebut Namespace_Module_Block_Breadcrumbs
?
Jika $this
digunakan maka modul yang digunakan untuk terjemahan akan menjadi Namespace_Module
dan Anda mungkin tidak menginginkannya.
Ada dua opsi untuk menghindari hal ini. Baik menggunakan helper bernama seperti yang sudah terjadi untuk sebagian besar blok inti.
Atau Anda sebagai pengembang dapat menambahkan ini di kelas blok:
public function getModuleName() {
return 'Mage_Catalog';
}
Kemudian Anda yakin bahwa semua teks yang digunakan $this->__
dari blok Anda (template yang membuat blok juga disertakan) akan diterjemahkan menggunakan modul katalog.
Salah satu alasan (yang hanya persepsi saya), ketika Anda menggunakan pembantu Anda lebih spesifik tentang file terjemahan, seperti Mage::helper('catalog')
itu akan menemukan kalimat dalam file katalog, sedangkan ketika Anda menggunakannya $this
akan mencari secara acak di semua file terjemahan. Itu yang saya pikirkan.