Nasıl yaklaşırsanız yaklaşın, sorununuz daha sonraki geliştiricilerin / bakımcıların kullanması için bir geliştirici notuna layık "yaratıcı" bir çözüm gerektirir. İlk olarak, bir arka plan, ardından bir not, ardından bir kolay ve bence sonunda makul bir çözüm <--
tl; dr .
Zyava'nın belirttiği gibi , çeviri çeviriyi yapan modüle tabidir. Şablonlar blok örneklerinde oluşturulur ve blok örneklerinde module_name
çeviri çağrılırken kullanılan bir özellik bulunur; 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);
}
module_name
(Ref. Özellik (normal olarak) isteğe bağlı olarak elde edilen ve sınıf adına göre olan ::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;
}
Dolayısıyla, module_name
özellik önceden ayarlanmışsa, o modül çevirisi uygulanır. Temel mizanpajdaki mevcut bloklar için bu özellik mizanpaj XML'i ile ayarlanabilir; Örneğin:
<default>
<action block="root" method="setModuleName">
<name>Your_Module</name>
</action>
</default>
Voila Modül CSV'niz bu örnek için çeviriye sahiptir. Bu bir yaklaşım olabilir . Tabii ki, blok modüllerinde (tabii ki şablon dosyaları da dahil olmak üzere) modüle özgü yardımcı aracılığıyla diğer modüllerin çevirisinin yapışkan durumu hala vardır ve XML düzenleri için her zaman doğrudur. Ayrıca, bu yaklaşım module_name
param kullanan Modülleri Çıktıyı Devre Dışı Bırak davranışını kırar .
Çözüm
Anlaşıldığı üzere, bir modül için birden fazla çeviri dosyası belirtmek mümkündür . Çekirdekte yapılmaz (her modül sadece bir .csv dosyası bildirir ), ancak işlevsellik oradadır 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;
}
ve
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;
}
Dosyaların içerikleri birleştirildiğinden (test ettim), yalnızca özel CSV'lerinizde geçersiz kılmak istediğiniz dizeleri belirtmeniz mümkündür. Örneğin, ek bilgi dizesini ürün sayfasında çevirmek istiyorsanız ( Mage_Catalog
modül tarafından çevrilir ), aşağıdakiler işe yarar :
app / locale / Custom.csv :
"Additional Information","More Info, Dude"
Modül yapılandırmanızda - içeriğinin daha sonra birleştirilmesini sağlamak için <depends />
açılması gerekir Mage_Catalog
- aşağıdakiler Custom.csv çeviri çiftlerinin orijinalin üstünde birleşmesine neden olur :
<frontend>
<translate>
<modules>
<Mage_Catalog>
<files>
<additional>Custom.csv</additional>
</files>
</Mage_Catalog>
</modules>
</translate>
</frontend>
Bu yaklaşımla ilgili güzel olan, geçersiz kılınan çekirdek çevirilerinizi tek bir dosyada toplayabilmenizdir.