2012-03-09 12 views

答えて

3

Kostacheのカスタム拡張メソッドを作成し、そのように使用します。

私は モジュール/ kostache /クラス/ Kohanaの/ kostache.phpファイル内でこのようなsomehtingを使用

:あなたはおそらくそれをPHP 5.3で少しよりよいを行うことができ、これはすべての作品

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

口ひげの良いところは、そのヨーヨーです

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

:のようなPHPのバージョン

やテンプレートでは、あなたが何かを行いますほとんどの言語(jsを含む)で使用できるので、クライアント側とサーバ側で同じテンプレートを使用できます。カスタムメソッドで拡張すると少し複雑になるので、あなたは口ひげを使うすべての言語でそれらを実装する必要があります。幸いにも、すべてがオブジェクトなので、jsでそれを行うのはかなり簡単です。 例えば、このようなものは動作します:

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

は今、あなたは、サーバーだけでなく、クライアント上の拡張メソッドを使用することができます。
ニース、そうではありません:)

+0

こんにちは、これをチェックしてください。http://stackoverflow.com/questions/21204333/kohana-i18n-and-kostache-i-dont-understand – Karem

0

受け入れソリューションは私(おそらくいくつかのバージョンの互換性の問題)のために働いていなかったので、私は多分それが誰かを助けるだろう、ここに私の解決策を書いています。

私の問題は、MustacheがMustache_LambdaHelperオブジェクトを、I18n :: get()が言語を予期していて、例外をスローしていた第2のパラメータとして渡していたことです。

ソリューション:

匿名関数が問題ですが、あなたのようなので、これを処理するための追加のクラスまたは関数を作成する必要があるだろう場合にも、アレイ法を使用することができます
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クラスを修正してください。ビュークラスで関数を作成することもできます。