Domanda

In un'estensione su cui sto lavorando, ho un layout XML aggiunto tramite config.xml del modulo. Questa disposizione ha alcune modifiche al frontend. Alcuni di questi blocchi, tuttavia, appartengono a moduli di base Magento. I modelli sono tutti mostrando correttamente come previsto.

I modelli che ho confezionato con il modulo stesso stanno utilizzando i file di traduzione del mio modulo. I modelli confezionati con anima Magento mostrano non tradotta. Se posso aggiungere un file di traduzione per il rispettivo modulo di base, quindi il file di traduzione viene utilizzato e gli spettacoli di modello tradotte.

C'è un modo per rendere Magento utilizzare file di traduzione del mio modulo se non riesce a trovare alcun file di traduzione per modulo di base di Magento? C'è qualcos'altro che posso fare qui?

È stato utile?

Soluzione

Non importa come ci si avvicina, il problema richiede una soluzione "creativa", degno di una nota di sviluppo per devs successive / manutentori per l'uso. In primo luogo, alcuni retroscena, seguito da una nota, seguito da un facile e penso soluzione ragionevole alla fine <-- tl; dr

.

sottolineato , la traduzione è soggetta al modulo fare la traduzione. Modelli rendere in istanze di blocco, e istanze di blocco avere una proprietà module_name che viene utilizzato quando si richiama traduzione; 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);
}

La proprietà module_name è (normalmente) derivati ??su richiesta e in base a nome della classe (rif. ::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;
}

Quindi, se la proprietà module_name è già impostato, che di traduzione modulo si applica. Per i blocchi esistenti dal layout nucleo, questa proprietà può essere impostata tramite la layout XML; per esempio:

<default>
    <action block="root" method="setModuleName">
        <name>Your_Module</name>
    </action>
</default>

Voilà! Il tuo CSV modulo possiede la traduzione per tale istanza. Questo potrebbe essere un approccio. Naturalmente, c'è ancora la situazione difficile della traduzione di altri moduli essere applicata tramite modulo specifico aiuto nei casi di blocco (inclusi i file di modello naturalmente), ed è sempre vero per le traduzioni di layout XML. Inoltre, questo approccio si romperà il comportamento di uscita disattivare i moduli, che utilizza il parametro module_name.

Soluzione

Come si è visto, è possibile specificare più file di traduzione per un modulo. Non è fatto nel nucleo (ogni modulo dichiara un solo file .csv ), ma la funzionalità è lì in 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;
}

e

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;
}

Perché i contenuti dei file sono fusi (ho provato), è possibile specificare solo quelle stringhe che si desidera eseguire l'override nel CSV personalizzato (s). Ad esempio, se si desidera tradurre il Ulteriori informazioni della stringa sulla pagina del prodotto (tradotto dal modulo Mage_Catalog), il seguente dovrebbe funzionare:

app / locale / Custom.csv :

"Additional Information","More Info, Dude"

Nel modulo di configurazione - che dovrebbe <depends /> su Mage_Catalog per garantire il suo contenuto si fondono dopo - il seguente farà sì che il Custom.csv coppie di traduzione a fondersi in cima al originale:

<frontend>
    <translate>
        <modules>
            <Mage_Catalog>
                <files>
                    <additional>Custom.csv</additional>
                </files>
            </Mage_Catalog>
        </modules>
    </translate>
</frontend>

La cosa bella di questo approccio è che si può ritirare il sovrascrivendo traduzioni di base in un unico file.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top