In an extension I'm working on, I have a layout XML added via module's config.xml. This layout has some modifications to the frontend. Some of these blocks, however, belong to Magento core modules. The templates are all showing correctly as expected.
The templates I have packaged with the module itself are using the translation files of my own module. The templates packaged with Magento core show untranslated. If I add a translation file for the respective core module, then that translation file is used & the template shows translated.
Is there a way to make Magento use my module's translation file if it can't find any translation files for Magento core module? Is there anything else I can do here?
Best Answer
No matter how you approach it, your problem requires a "creative" solution, worthy of a developer note for subsequent devs/maintainers to use. First, some background, followed by a note, followed by an easy and I think reasonable solution at the end
<--
tl;dr.As Zyava pointed out, translation is subject to the module doing the translation. Templates render in block instances, and block instances have a
module_name
property which is used when invoking translation; refMage_Core_Block_Abstract::__()
:The
module_name
property is (normally) derived on demand and based on class name (ref.::getModuleName()
):So, if the
module_name
property is already set, that module translation applies. For extant blocks from core layout, this property can be set via layout XML; for example:VoilĂ ! Your module CSV owns the translation for that instance. This could be an approach. Of course, there is still the sticky situation of other modules' translation being applied via module-specific helper in block instances (including template files of course), and it's always true for layout XML translations. Also, this approach will break the Disable Modules Output behavior, which uses the
module_name
param.Solution
As it turns out, it's possible to specify multiple translation files for a module. It's not done in the core (each module only declares one .csv file), but the functionality is there in
Mage_Core_Model_Translate
:and
Because the files' contents are merged (I tested), it's possible to specify only those strings which you want to override in your custom CSV(s). For example, if you want to translate the Additional Information string on the product page (translated by the
Mage_Catalog
module), the following would work:app/locale/Custom.csv:
In your module config - which should
<depends />
onMage_Catalog
to ensure its contents merge after - the following will cause the Custom.csv translation pairs to merge on top of the original:The nice thing about this approach is that you can collect your overriding core translations in one file.