给指定模块添加对应翻译文件,并在配置文件config.php配置好
<config>
<frontend>
<translate>
<modules>
<test>
<files>
<default>Test.csv</default>
</files>
</test>
</modules>
</translate>
</frontend>
</config>
根据指定的店铺找到对应的店铺code
/**
* 指定店铺翻译
*
* @param [type] $storeId
* @param [type] $string
* @return void
*/
public function translate($storeId, $string)
{
$newLocaleCode = Mage::getStoreConfig(
Mage_Core_Model_Locale::XML_PATH_DEFAULT_LOCALE, $storeId
);
$initialEnvironmentInfo = Mage::getSingleton('core/app_emulation')->startEnvironmentEmulation($storeId);
Mage::app()->getLocale()->setLocaleCode($newLocaleCode);
Mage::getSingleton('core/translate')->setLocale($newLocaleCode)->init(Mage_Core_Model_App_Area::AREA_FRONTEND, true);
$translatedString = Mage::helper('test')->__($string);
Mage::getSingleton('core/app_emulation')->stopEnvironmentEmulation($initialEnvironmentInfo);
return $translatedString;
}
$newLocaleCode
是根据当前的$storeId
得到对应的站点code
$initialEnvironmentInfo
是根据$storeId
模拟出该店铺环境
第三句是将指定的店铺code设定为当前店铺code
第四句是设置好当前店铺,然后初始化找到对应的翻译
第五句是根据要翻译的语句找到指定的翻译后的语句
第六句是停止当前环境模拟
这段代码整体思路也算是magento内部翻译的处理逻辑,底层方法比较乱,感兴趣的可以自己研究一下,不过这段代码总结起来如下:
- 先根据指定的店铺模拟出一个对应店铺的虚拟环境;
- 将指定的店铺设置成当前店铺找到当前店铺对应的翻译;
- 初始化将该店铺下的所有翻译文件里面的翻译语句拿出来组装到一起;
- 根据给定的语句到这个组装好的翻译里面去找这句话对应的翻译;
- 关闭当前模拟的虚拟店铺
翻译中主要的是在指定的店铺文件夹中添加指定模块的翻译文件,将对应的语句以及翻译语句添加到翻译文件中