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_translate
tabel)
- Tema
translate.csv
File
app/locale/*/*.csv
File - file
Bagaimana susunan terjemahan dibangun?
Modul Terjemahan
Pertama semua file dari app/locale/*/*.csv
yang direferensikan dari modul modul aktif etc/config.xml
diuraikan. 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.csv
terjemahan 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.csv
file pertama dalam fallback tema untuk lokal saat ini cukup ganti catatan yang ada di array terjemahan.
Jadi melanjutkan contoh sebelumnya, sebuah translate.csv
catatan "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_translate
tabel 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::AAA
catatan. 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.csv
file tidak digunakan, ikuti daftar ini:
- Apakah cache terjemahan dimatikan / di-refresh? (Solusi: kosongkan cache)
- Apakah
translate.csv
file benar-benar dalam fallback tema untuk toko saat ini? (Solusi: memperbaiki konfigurasi tema)
- Apakah ada catatan yang bertentangan untuk terjemahan dalam
core_translate
tabel? (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 AAA
diterjemahkan DDD
melalui 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_translate
tabel 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.xml
dan 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 module
argumen yang ditentukan dalam XML, core/data
helper 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_translate
catatan
- Pro dan kontra menggunakan berbagai metode terjemahan
Silakan tanyakan pertanyaan terpisah jika diperlukan informasi lebih lanjut.