Dans une extension sur laquelle je travaille, j'ai une mise en page XML ajoutée via le module config.xml. Cette disposition a quelques modifications au frontend. Cependant, certains de ces blocs appartiennent aux modules principaux de Magento. Les modèles s'affichent tous correctement comme prévu.
Les modèles que j'ai fournis avec le module lui-même utilisent les fichiers de traduction de mon propre module. Les modèles fournis avec le noyau Magento ne sont pas traduits. Si j'ajoute un fichier de traduction pour le module de base respectif, alors ce fichier de traduction est utilisé et le modèle affiche traduit.
Existe-t-il un moyen de faire en sorte que Magento utilise le fichier de traduction de mon module s'il ne trouve aucun fichier de traduction pour le module principal de Magento? Puis-je faire autre chose ici?
la source
$this->__()
ouMage::helper('...')->__()
. Dans le premier cas, vous pouvez forcer le blocage à utiliser votre assistant de traduction. Mais je crois que dans le cas général, la seule option est la mise à niveau des données pour lacore_translate
table. Ici, les questions d'internationalisation sont décrites en détail: blog.belvg.com/… .Réponses:
Quelle que soit la façon dont vous l'abordez, votre problème nécessite une solution "créative", digne d'une note de développeur pour les développeurs / mainteneurs suivants. Tout d'abord, quelques informations de base, suivies d'une note, suivies d'une solution facile et je pense raisonnable à la fin
<--
tl; dr .Comme l'a souligné Zyava , la traduction est soumise au module qui effectue la traduction. Les modèles s'affichent dans des instances de bloc et les instances de bloc ont une
module_name
propriété qui est utilisée lors de l'appel de la traduction; réfMage_Core_Block_Abstract::__()
:La
module_name
propriété est (normalement) dérivée sur demande et basée sur le nom de la classe (réf.::getModuleName()
):Donc, si la
module_name
propriété est déjà définie, cette traduction de module s'applique. Pour les blocs existants de la disposition principale, cette propriété peut être définie via XML de disposition; par exemple:Voilà! Votre module CSV possède la traduction de cette instance. Cela pourrait être une approche. Bien sûr, il y a toujours la situation délicate de la traduction d'autres modules appliquée via l'aide spécifique au module dans les instances de bloc (y compris les fichiers de modèle bien sûr), et c'est toujours vrai pour les traductions XML de mise en page. En outre, cette approche interrompra le comportement de sortie des modules désactivés, qui utilise la propriété
module_name
paramètre.Solution
Il s'avère qu'il est possible de spécifier plusieurs fichiers de traduction pour un module. Ce n'est pas fait dans le noyau (chaque module ne déclare qu'un seul fichier .csv ), mais la fonctionnalité est là dans
Mage_Core_Model_Translate
:et
Étant donné que le contenu des fichiers est fusionné (j'ai testé), il est possible de spécifier uniquement les chaînes que vous souhaitez remplacer dans vos CSV personnalisés. Par exemple, si vous souhaitez traduire la chaîne d' informations supplémentaires sur la page du produit (traduite par le
Mage_Catalog
module), ce qui suit fonctionnerait:app / locale / Custom.csv :
Dans votre configuration du module - qui devrait
<depends />
surMage_Catalog
pour assurer son contenu après fusion - ce qui suit provoque les Custom.csv paires de traduction pour la fusion au - dessus de l'original:La bonne chose à propos de cette approche est que vous pouvez collecter vos traductions principales de remplacement dans un fichier.
la source