Dans les modules de base et parfois les modèles, je vois des classes d'assistance utilisées pour la traduction:
Mage::helper('someModule')->__('translate me');
Pourquoi est-ce préférable de:
$this->__('translate me');
Dans les modules de base et parfois les modèles, je vois des classes d'assistance utilisées pour la traduction:
Mage::helper('someModule')->__('translate me');
Pourquoi est-ce préférable de:
$this->__('translate me');
Réponses:
Juste théoriser, mais quand tu appelles
$this->__('Foo')
dans un modèle, quel fichier de traduction CSV de module Magento utilisera-t-il pour traduire Foo?
Il n'est pas toujours clair quel assistant de traduction du module Magento appellera finalement pour traduire la chaîne / clé. Étant donné que Magento vous permet d'utiliser la même clé dans différents modules pour différentes chaînes, il est souvent important de savoir quel module de données de traduction vous utilisez. En fait, si un modèle est utilisé sur plusieurs modules, l'utilisation $this->__()
peut être "considérée comme nuisible", car elle renvoie des valeurs différentes selon le contexte de bloc dans lequel le système de disposition a utilisé le modèle.
Je suppose que les aides pratiques ont été ajoutées à l'avance, mais les développeurs qui construisent les modèles en commençant rapidement à instancier les aides afin qu'ils sachent quel fichier de traduction du module traduirait une chaîne, et ce modèle s'est propagé au test du cadre. Cette ligne de code, en soi, est ambiguë.
$this->__('Foo');
Mais vous pouvez être sûr que cette ligne de code utilisera les Mage_Catalog
informations de localisation.
Mage::helper('catalog')->__('Foo')
Parce que vous souhaitez utiliser un module explicite.
Si vous utilisez $this->__()
dans un contexte de bloc, le module du bloc est utilisé pour la traduction. Donc, si vous souhaitez utiliser un module spécial, vous devez utiliserMage::helper('mymodule')->__()
Mage_Checkout::My Cart
syntaxe. Et donc il est important de savoir quel module est utilisé pour la traduction
Fondamentalement, je vais dire la même chose que les autres gars.
Si vous utilisez, Mage::helper(...)
assurez-vous qu'un assistant spécifique est utilisé pour la traduction.
Prenons par exemple le Mage_Adminhtml_Block_Catalog_Product_Grid
bloc.
Pour les en- têtes de colonnes il c'est: 'header'=> Mage::helper('catalog')->__('Name'),
. si au lieu de l'aide au catalogue $this->__
aurait été utilisée, le texte aurait été traduit à l'aide du Mage_Adminhtml
module.
Mais c'est un cas où la logique derrière l'utilisation d'aides nommés est logique.
Je voulais juste montrer un cas où l'utilisation $this->__('..')
au lieu de l'approche d'assistance peut entraîner des problèmes. Je parle d'expérience.
Prenons le bloc Mage_Catalog_Block_Breadcrumbs
. Il y a une ligne qui ressemble à ceci: Mage::helper('catalog')->__('Home')
.
Vous penseriez que vous êtes dans le catalog
module afin que vous puissiez l'utiliser à la $this
place. Mais que se passe-t-il si vous remplacez le bloc par votre bloc appelé Namespace_Module_Block_Breadcrumbs
?
S'il $this
était utilisé, le module utilisé pour la traduction le serait Namespace_Module
et vous ne le voudrez probablement pas.
Il existe deux options pour éviter cela. Soit en utilisant un assistant nommé comme cela se produit déjà pour la plupart des blocs de base.
Ou vous, en tant que développeur, pouvez ajouter ceci dans la classe de bloc:
public function getModuleName() {
return 'Mage_Catalog';
}
Ensuite, vous êtes sûr que tous les textes utilisant $this->__
de votre bloc (les modèles qui rendent le bloc également inclus) vont être traduits à l'aide du module de catalogue.
Une raison (qui n'est que ma perception), lorsque vous utilisez l'assistant, vous êtes plus spécifique sur le fichier de traduction, car Mage::helper('catalog')
il trouvera la phrase dans le fichier de catalogue, tandis que lorsque vous l'utiliserez, $this
il recherchera aléatoirement tous les fichiers de traduction. C'est ce que je pense.