Kostache和kohana翻译系统

时间:2012-03-09 16:24:03

标签: kohana-3 mustache

如何在kostache模板中使用kohana i18n __('translation')

2 个答案:

答案 0 :(得分:3)

为Kostache制作一个自定义扩展方法并使用它。

我在 modules / kostache / classes / kohana / kostache.php 文件中使用了这样的东西:

public function i18n(){
    return array('I18n', 'get');
}

你可以用PHP 5.3做得更好,但这适用于所有PHP版本

在模板中,您将执行以下操作:

{{#i18n}}Some translatable text{{/i18n}}

关于小胡子的好处是你几乎可以在任何语言中使用它(包括js,所以你可以为客户端和服务器端使用相同的模板)。使用自定义方法进行扩展会增加一些复杂性,因此您必须在使用小胡子的所有语言中实现它们。幸运的是,在js中执行它非常简单,因为一切都是对象。 例如,像这样的东西可以工作:

var i18n= function(s){
    var someText = ""; // GET THE TRANSLATE TEXT (HOWEVER YOU LIKE)
    return someText;
}

现在,您可以在客户端和服务器上使用扩展方法 很好,不是吗:)。

答案 1 :(得分:0)

接受的解决方案对我不起作用(可能是一些版本兼容性问题),所以我在这里编写我的解决方案,也许它会帮助某人。

我的问题是Mustache正在传递一个Mustache_LambdaHelper对象作为第二个参数,其中I18n :: get()期待该语言并且它抛出异常。

解决方案:

public function i18n() {
    return function($value, $helper) {
        return I18n::get($value);
    };
}

如果匿名函数存在问题,您也可以使用数组方法,但是您必须创建一个额外的类或函数来处理它,如下所示:

class i18nFilter {
    public function get($value, $helper) {
        return I18n::get($value);
    }
}

在这种情况下,函数将变为:

public function i18n() {
    return array('I18nFilter', 'get');
}

此外,您无需修改​​Kohana_Kostache类即可使其正常工作。您也可以在视图类中创建函数。