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');
localisation
Brendan Falkowski
sumber
sumber
Jawaban:
Hanya berteori, tetapi saat Anda menelepon
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.
Tetapi Anda dapat yakin bahwa baris kode ini akan menggunakan
Mage_Catalog
informasi lokalisasi.sumber
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')->__()
sumber
Mage_Checkout::My Cart
sintaksisnya. Dan sangat penting modul mana yang digunakan untuk terjemahanPada 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 menggunakanMage_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 disebutNamespace_Module_Block_Breadcrumbs
?Jika
$this
digunakan maka modul yang digunakan untuk terjemahan akan menjadiNamespace_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:
Kemudian Anda yakin bahwa semua teks yang digunakan
$this->__
dari blok Anda (template yang membuat blok juga disertakan) akan diterjemahkan menggunakan modul katalog.sumber
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.sumber