TL; DR
Jika Anda tidak tertarik dengan perincian cara kerja terjemahan, lewati konten ke bagian
Apa yang harus diperiksa jika terjemahan Anda tidak berfungsi di bawah ini, terutama
Solusi subbab untuk konflik Terjemahan Lingkup Modul .
Tinjauan Terjemahan Magento
Magento memprioritaskan sumber terjemahan (dari tertinggi ke terendah):
- DB (
core_translatetabel)
- Tema
translate.csvFile
app/locale/*/*.csvFile - file
Bagaimana susunan terjemahan dibangun?
Modul Terjemahan
Pertama semua file dari app/locale/*/*.csvyang direferensikan dari modul modul aktif etc/config.xmldiuraikan. Berikut adalah langkah-langkah prosesnya:
Asumsikan Magento menemukan bagian berikut config.xml:
<!-- excerpt from Mage/Catalog/etc/config.xml -->
<frontend>
<translate>
<modules>
<Mage_Catalog>
<files>
<default>Mage_Catalog.csv</default>
</files>
</Mage_Catalog>
</modules>
</translate>
</frontend>
Dan dalam file itu, terjemahan berikut ditentukan untuk lokal yang dikonfigurasi untuk tampilan toko saat ini:
"AAA","BBB"
Dalam keadaan ini, Magento membuat catatan berikut dalam array terjemahan:
array(
"AAA" => "BBB",
"Mage_Catalog::AAA" => "BBB"
)
Nilai kedua adalah Terjemahan Lingkup Modul . Nama modul awalan diambil dari simpul XML konfigurasi yang berisi deklarasi file terjemahan.
Jika terjemahan yang sama ditentukan lagi oleh berkas modul kedua , misalnya dalam Some_Module.csvterjemahan adalah "AAA","CCC", itu akan tidak menimpa para "AAA"pengaturan. Sebagai gantinya, itu hanya akan menambah catatan baru dengan nama modul kedua "Some_Module::AAA" => "CCC".
Jika mode pengembang diaktifkan, bahkan akan diset dengan "AAA"catatan jika menemukan rekor kedua dengan tombol yang sama dalam terjemahan modul lain. Ini membuatnya lebih mudah untuk menemukan konflik terjemahan modul selama pengembangan.
Terjemahan Tema
Kedua, terjemahan dimuat dari translate.csvfile pertama dalam fallback tema untuk lokal saat ini cukup ganti catatan yang ada di array terjemahan.
Jadi melanjutkan contoh sebelumnya, sebuah translate.csvcatatan "AAA","DDD"akan mengarah pada data terjemahan berikut:
array(
"AAA" => "DDD", // This is overwritten by the translate.csv file
"Mage_Catalog::AAA" => "BBB",
"Some_Module::AAA" => "CCC"
)
Tentu saja catatan dalam translate.csv dengan kunci terjemahan baru ditambahkan ke array.
Terjemahan Database
Terjemahan dari core_translatetabel pada dasarnya digabungkan ke dalam array terjemahan seperti terjemahan tema.
Kunci yang ada dari modul atau terjemahan tema ditimpa oleh catatan basis data, yang baru ditambahkan.
Pencarian Terjemahan
Ketika __()metode ini dipanggil, Magento pertama-tama mencari terjemahan dalam array yang cocok dengan modul saat ini.
Modul saat ini ditentukan oleh nama __()kelas tempat kelas tersebut dipanggil. Misalnya, dalam blok, metode yang bertanggung jawab terlihat seperti ini:
// Excerpt from Mage/Core/Block/Abstract.php
public function getModuleName()
{
$module = $this->getData('module_name');
if (is_null($module)) {
$class = get_class($this);
$module = substr($class, 0, strpos($class, '_Block'));
$this->setData('module_name', $module);
}
return $module;
}
Metode dalam Helpers and Controllers bekerja secara bersamaan.
Contoh Skenario Pencarian
Sebagai contoh, katakanlah $this->__('AAA')dipanggil dalam file templat. Jika blok terkait memiliki tipe Mage_Core_Block_Template, Magento akan terlebih dahulu memeriksa Mage_Core::AAAcatatan. Jika tidak menemukannya, maka akan kembali ke terjemahan untuk kunci AAA.
Dalam skenario contoh ini akan menghasilkan terjemahan DDD(daritranslate.csv file).
Dalam skenario yang berbeda, blok terkait bisa Mage_Catalog_Block_Product_View. Dalam hal ini Magento pertama-tama akan memeriksa catatan terjemahan Mage_Catalog::AAA, dan akan menemukan terjemahannya AAA.
Jadi sebenarnya, terjemahan lingkup modul memiliki prioritas lebih tinggi daripada terjemahan generik . Terjemahan mana yang digunakan tergantung pada modul mana kelas dari memanggil __()metode.
Apa yang harus diperiksa jika terjemahan Anda tidak berfungsi
Jika terjemahan Anda dari translate.csvfile tidak digunakan, ikuti daftar ini:
- Apakah cache terjemahan dimatikan / di-refresh? (Solusi: kosongkan cache)
- Apakah
translate.csvfile benar-benar dalam fallback tema untuk toko saat ini? (Solusi: memperbaiki konfigurasi tema)
- Apakah ada catatan yang bertentangan untuk terjemahan dalam
core_translatetabel? (Solusi: hapus data yang bertentangan dari core_translate)
- Jika semua poin sebelumnya bukan penyebabnya, pasti ada terjemahan yang bertentangan dari modul yang berbeda. (Solusi: lihat di bawah)
Solusi untuk konflik Terjemahan Lingkup Modul
Jika Anda menemukan kasus akhir benar, cukup tambahkan terjemahan untuk yang kedua kalinya translate.csv dengan cakupan modul modul yang melakukan terjemahan.
Dalam contoh, jika Anda selalu ingin AAAditerjemahkan DDDmelalui terjemahan tema, Anda dapat melakukannya di translate.csv:
"AAA","DDD"
"Mage_Catalog::AAA","DDD"
"Some_Module::AAA","DDD"
Dalam praktiknya, saya hanya menambahkan cakupan modul ke terjemahan jika ada konflik, yaitu, jika terjemahan tidak berfungsi.
catatan tambahan
Terjemahan Inline
Fitur terjemahan inline Magento juga menambahkan terjemahan khusus ke core_translatetabel menggunakan awalan lingkup modul.
Kompatibilitas terbalik
Prioritas terjemahan tema dulu lebih tinggi daripada terjemahan basis data hingga Magento versi 1.3 atau lebih.
Terjemahan XML
Magento kadang-kadang mengevaluasi translate=""argumen dalam config.xml, system.xmldan tata letak XML untuk menerjemahkan nilai-nilai simpul anak.
Kelas helper dapat ditentukan dalam kasus-kasus tersebut menggunakan module=""argumen untuk menentukan modul untuk lingkup terjemahan.
Jika tidak ada moduleargumen yang ditentukan dalam XML, core/datahelper digunakan untuk menerjemahkan nilai-nilai simpul anak.
Informasi lebih lanjut
Saya akui saya membahas beberapa detail dari proses terjemahan Magento di posting ini, tetapi hanya karena saya tidak ingin terlalu banyak informasi.
- Beberapa detail teknis saat susunan terjemahan dibuat
- Kemungkinan untuk menggunakan file terjemahan tambahan untuk modul
- Simpan cakupan tampilan untuk
core_translatecatatan
- Pro dan kontra menggunakan berbagai metode terjemahan
Silakan tanyakan pertanyaan terpisah jika diperlukan informasi lebih lanjut.