无论您如何处理,您的问题都需要一个“创造性”的解决方案,值得开发人员注意以供后续的开发人员/维护人员使用。首先是一些背景,其次是注释,其次是<--
tl; dr的简单且我认为合理的解决方案。
正如Zyava所指出的,翻译受翻译模块的约束。模板在块实例中呈现,并且块实例具有module_name
调用翻译时使用的属性;参考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);
}
该module_name
属性(通常)是按需派生的,并且基于类名(参考::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;
}
因此,如果module_name
属性已设置,则适用该模块转换。对于核心布局中的现有块,可以通过布局XML设置此属性。例如:
<default>
<action block="root" method="setModuleName">
<name>Your_Module</name>
</action>
</default>
瞧!您的模块CSV拥有该实例的翻译。这可能是一种方法。当然,在模块实例(当然包括模板文件)中,通过模块特定的助手应用其他模块的翻译仍然存在棘手的情况,对于布局XML翻译总是如此。同样,此方法将破坏使用module_name
参数的“禁用模块输出”行为。
解
事实证明,可以为一个模块指定多个翻译文件。它不是在核心中完成的(每个模块仅声明一个.csv文件),但是该功能在其中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;
}
和
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;
}
由于文件的内容已合并(我已测试),因此可以仅指定要在自定义CSV中覆盖的字符串。例如,如果您要翻译产品页面上的附加信息字符串(由Mage_Catalog
模块翻译),则可以执行以下操作:
app / locale / Custom.csv:
"Additional Information","More Info, Dude"
在你的模块配置-这应该<depends />
在Mage_Catalog
保证其内容合并后-下面将导致Custom.csv翻译对合并原始的顶部:
<frontend>
<translate>
<modules>
<Mage_Catalog>
<files>
<additional>Custom.csv</additional>
</files>
</Mage_Catalog>
</modules>
</translate>
</frontend>
这种方法的好处是,您可以将主要的核心翻译收集到一个文件中。