如何在kostache模板中使用kohana i18n __('translation')
?
答案 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类即可使其正常工作。您也可以在视图类中创建函数。