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');
localisation
Brendan Falkowski
la source
la source
Réponses:
Juste théoriser, mais quand tu appelles
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ë.
Mais vous pouvez être sûr que cette ligne de code utilisera les
Mage_Catalog
informations de localisation.la source
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')->__()
la source
Mage_Checkout::My Cart
syntaxe. Et donc il est important de savoir quel module est utilisé pour la traductionFondamentalement, 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 duMage_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 seraitNamespace_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:
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.la source
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.la source