Magento çekirdek şablonunu modülümün çeviri dosyasını kullan


15

Üzerinde çalıştığım bir uzantıda, modülün config.xml yoluyla eklenen bir düzen XML var. Bu düzende ön uçta bazı değişiklikler var. Bununla birlikte, bu blokların bazıları Magento çekirdek modüllerine aittir. Şablonların tümü beklendiği gibi doğru şekilde gösteriliyor.

Modülle birlikte paketlediğim şablonlar kendi modülümün çeviri dosyalarını kullanıyor. Magento çekirdek ile paketlenmiş şablonlar çevrilmemiş gösterir. İlgili çekirdek modül için bir çeviri dosyası eklersem, o çeviri dosyası kullanılır ve şablon çevrilmiş olarak gösterilir.

Magento'nun Magento çekirdek modülü için herhangi bir çeviri dosyası bulamaması durumunda modülümün çeviri dosyasını kullanmanın bir yolu var mı? Burada yapabileceğim başka bir şey var mı?


Çevirilerinizi geçerli tema çeviri dosyasına ekleyebilir veya arka uçta satır içi çeviri arabirimini kullanabilirsiniz.
Dmytro Zavalkin

Çevirileri uzantıyla birlikte paketlemek istedim, yukarıdakileri yükleyen herkes için talimatlar eklemeniz gerekir. Koddan yapabileceğim herhangi bir seçenek var mı?
Mridul Aggarwal

4
Çevirinin geçici olarak nasıl kullanıldığına bağlıdır $this->__()veya Mage::helper('...')->__(). İlk durumda, çeviri yardımcısını kullanmak için bloğu zorlayabilirsiniz. Ama genel olarak tek seçenek core_translatetablo için veri yükseltme olduğuna inanıyorum . Burada uluslararasılaştırma soruları ayrıntılarıyla açıklanmıştır: blog.belvg.com/… .
Dmytro Zavalkin

Ayrıca, daha kolay uygulamalı bir çözüm için bir bloğun üzerine yazarken çeviri kaybından kaçının .
hakre

Yanıtlar:


20

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_nameparam 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_Catalogmodü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.


@Francesco Olmalı. Çeviri önbelleği temizlensin mi? Eğer işe yaramazsa, lütfen bunu yeni bir soru olarak gönderin (ve gelecek nesiller için buraya bağlantı verin).
benmarks

Hem $ this> _ hem de yardımcı ile çalıştığını onaylıyorum. haklısın, bu benim hatamdı (önceki hatalı yorumu kaldırdım)
Fra
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.