2

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

4

2 回答 2

1

这就是你必须在最新版本的 Smarty 中注册修饰符的方式:

$smarty ->registerPlugin('modifier','translate', array($obj, 'translate' ));

可能有人觉得这很有帮助!

于 2012-09-15T14:37:38.463 回答
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> 
于 2012-09-14T09:33:43.977 回答