zuz*_*nen 6 csv translate magento
我想只使用一个csv文件翻译前端Magento商店.所以我做到了这一点:
我创建了一个名为Translator的自定义模块.在它的config.xml中我放了这些行:
<config>
....
<translate>
<modules>
<MyPackage_Translator>
<files>
<default>MyPackage_Translator.csv</default>
</files>
</MyPackage_Translator>
</modules>
</translate>
</config>
Run Code Online (Sandbox Code Playgroud)
然后我在Helper文件夹中创建了de default Data.php helper.
然后在app/locale/de_DE中我创建了MyPackage_Translator.csv文件,我放了所有字符串.
现在,如果在phtml(无论模块)文件中,如果我做了类似的事情:
echo $this->__('My string');
Run Code Online (Sandbox Code Playgroud)
它运作得很好.但我很好奇为什么Magento会在MyPackage_Translator.csv中查找字符串?
我也注意到,如果我使用$ this - > __('some string'); 在Customer模块中,Magento将首先在app/locale/de_DE/Mage_Customer.csv文件中查找该字符串,如果它在那里找不到该字符串,那么它将在MyPackage_Translator.csv文件中查找.这是为什么?例如,为什么它不在Enterprise_Customer.csv文件中查找?
有人可以解释一下Magento在寻找翻译文件时所做的工作流程吗?
Ver*_*ton 11
当你调用$ this - > __('some text');
你可以先看看 Mage_Core_Helper_Abstract
/**
* Translate
*
* @return string
*/
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);
}
Run Code Online (Sandbox Code Playgroud)
接下来是 Mage_Core_Model_App
/**
* Retrieve translate object
*
* @return Mage_Core_Model_Translate
*/
public function getTranslator()
{
if (!$this->_translator) {
$this->_translator = Mage::getSingleton('core/translate');
}
return $this->_translator;
}
Run Code Online (Sandbox Code Playgroud)
这是交给谁的 Mage_Core_Model_Translate
/**
* Translate
*
* @param array $args
* @return string
*/
public function translate($args)
{
$text = array_shift($args);
if (is_string($text) && ''==$text
|| is_null($text)
|| is_bool($text) && false===$text
|| is_object($text) && ''==$text->getText()) {
return '';
}
if ($text instanceof Mage_Core_Model_Translate_Expr) {
$code = $text->getCode(self::SCOPE_SEPARATOR);
$module = $text->getModule();
$text = $text->getText();
$translated = $this->_getTranslatedString($text, $code);
}
else {
if (!empty($_REQUEST['theme'])) {
$module = 'frontend/default/'.$_REQUEST['theme'];
} else {
$module = 'frontend/default/default';
}
$code = $module.self::SCOPE_SEPARATOR.$text;
$translated = $this->_getTranslatedString($text, $code);
}
//array_unshift($args, $translated);
//$result = @call_user_func_array('sprintf', $args);
$result = @vsprintf($translated, $args);
if ($result === false) {
$result = $translated;
}
if ($this->_translateInline && $this->getTranslateInline()) {
if (strpos($result, '{{{')===false || strpos($result, '}}}')===false || strpos($result, '}}{{')===false) {
$result = '{{{'.$result.'}}{{'.$translated.'}}{{'.$text.'}}{{'.$module.'}}}';
}
}
return $result;
}
Run Code Online (Sandbox Code Playgroud)
返回结果文本.这是一个如何处理所有内容的快速浏览,您应该自己查看类以获得更深入的理解.
| 归档时间: |
|
| 查看次数: |
22981 次 |
| 最近记录: |