Tidak peduli bagaimana Anda mendekatinya, masalah Anda membutuhkan solusi "kreatif", yang layak digunakan sebagai catatan pengembang untuk pengembang / pengelola berikutnya untuk digunakan. Pertama, beberapa latar belakang, diikuti oleh catatan, diikuti oleh solusi yang mudah dan saya pikir masuk akal di akhir <--
tl; dr .
Seperti yang ditunjukkan Zyava , terjemahan tunduk pada modul yang melakukan terjemahan. Templat disajikan dalam contoh blok, dan contoh blok memiliki module_name
properti yang digunakan saat memohon terjemahan; ref Mage_Core_Block_Abstract::__()
:
public function __()
{
$args = func_get_args();
$expr = new Mage_Core_Model_Translate_Expr(array_shift($args), $this->getModuleName());
array_unshift($args, $expr);
return Mage::app()->getTranslator()->translate($args);
}
The module_name
properti (biasanya) yang diperoleh pada permintaan dan berdasarkan nama kelas (ref. ::getModuleName()
):
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;
}
Jadi, jika module_name
properti sudah diatur, bahwa terjemahan modul berlaku. Untuk blok yang masih ada dari tata letak inti, properti ini dapat diatur melalui tata letak XML; sebagai contoh:
<default>
<action block="root" method="setModuleName">
<name>Your_Module</name>
</action>
</default>
Voa! CSV modul Anda memiliki terjemahan untuk contoh itu. Ini bisa menjadi pendekatan. Tentu saja, masih ada situasi yang sulit dari terjemahan modul-modul lain yang diterapkan melalui pembantu khusus modul dalam contoh blok (termasuk file templat tentu saja), dan itu selalu berlaku untuk tata letak terjemahan XML. Juga, pendekatan ini akan memutus perilaku Disable Modul Output, yang menggunakanmodule_name
param.
Larutan
Ternyata, dimungkinkan untuk menentukan beberapa file terjemahan untuk sebuah modul. Itu tidak dilakukan dalam inti (setiap modul hanya mendeklarasikan satu file .csv ), tetapi fungsinya ada di Mage_Core_Model_Translate
:
public function getModulesConfig()
{
if (!Mage::getConfig()->getNode($this->getConfig(self::CONFIG_KEY_AREA).'/translate/modules')) {
return array();
}
$config = Mage::getConfig()->getNode($this->getConfig(self::CONFIG_KEY_AREA).'/translate/modules')->children();
if (!$config) {
return array();
}
return $config;
}
dan
protected function _loadModuleTranslation($moduleName, $files, $forceReload=false)
{
foreach ($files as $file) {
$file = $this->_getModuleFilePath($moduleName, $file);
$this->_addData($this->_getFileData($file), $moduleName, $forceReload);
}
return $this;
}
Karena konten file digabung (saya uji), dimungkinkan untuk menentukan hanya string yang ingin Anda timpa dalam CSV khusus Anda. Misalnya, jika Anda ingin menerjemahkan string Informasi Tambahan pada halaman produk (diterjemahkan olehMage_Catalog
modul), yang berikut ini akan berfungsi:
app / locale / Custom.csv :
"Additional Information","More Info, Dude"
Dalam konfigurasi modul Anda - yang seharusnya <depends />
aktif Mage_Catalog
untuk memastikan kontennya bergabung setelah - yang berikut akan menyebabkan pasangan terjemahan Custom.csv bergabung di atas yang asli:
<frontend>
<translate>
<modules>
<Mage_Catalog>
<files>
<additional>Custom.csv</additional>
</files>
</Mage_Catalog>
</modules>
</translate>
</frontend>
Yang menyenangkan tentang pendekatan ini adalah Anda dapat mengumpulkan terjemahan inti utama Anda dalam satu file.