zend翻译和聪明

时间:2012-09-14 00:56:52

标签: php zend-framework smarty zend-translate

我在我的项目中使用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?

2 个答案:

答案 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' ));

有人觉得这很有用!