我在我的项目中使用ZendTranslate(csv适配器)和Smarty。 我使用ZendTranslate作为独立而不是所有Zend,因为它看起来非常好用且易于使用。 但我有一个问题。 我找不到抓住所有内容并发送给Smarty的最佳方法。 我的简单代码:
require_once 'Smarty/libs/Smarty.class.php';
require_once 'Zend/Translate.php';
$lang = $_GET["lang"];
$translate = new Zend_Translate(
array(
'adapter' => 'csv',
'content' => 'csv/lang_eng.csv',
'locale' => 'en'
)
);
$translate->addTranslation(
array(
'content' => 'csv/lang_' . $lang . '.csv',
'locale' => $lang
)
);
$smarty->assign("m2", "" . $translate->translate('m2', $lang));
$smarty->display("views/page.tpl");
这对于一个翻译是可以的,但我在一个页面上有超过30个。 如何以最佳方式抓住所有这些并发送给Smarty?
答案 0 :(得分:1)
注册smarty修改会更好。在初始化Smarty时将其添加到位:
require_once 'Smarty/Smarty.class.php';
// ...
$this->Smarty();
// ...
$obj = new TemplateTranslate();
$this->register_modifier('translate', array($obj, 'translate' ));
主要翻译课程:
class TemplateTranslate
{
public static $zt;
public function __construct()
{
self::$zt = new Zend_Translate(array(
'adapter' => 'csv',
'content' => 'csv/lang_eng.csv',
'locale' => 'en'
));
}
public static function translate($string)
{
return self::$zt->_($string);
}
}
lang_eng.csv:
"Text on another language";"English text"
然后你就可以这样使用:
<p>{'Text on another language'|translate}</p>
答案 1 :(得分:1)
这是你必须在最新版本的Smarty中注册修饰符的方法:
$smarty ->registerPlugin('modifier','translate', array($obj, 'translate' ));
有人觉得这很有用!