2012-03-09 83 views

回答

3

爲Kostache製作一個自定義的擴展方法並使用它。

我在模塊/ kostache /班/ 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; 
} 

現在你可以使用你的擴展方法在客戶端以及服務器。
不錯,是不是:)

+0

你好,你可以請檢查了這一點http://stackoverflow.com/questions/21204333/kohana-i18n-and-kostache-i-dont-understand – Karem 2014-01-18 19:34:43

0

接受的解決方案不適合我(也許一些版本兼容性問題),所以我在這裏寫我的解決方案,也許它會幫助某人。

我的問題是,鬍鬚傳遞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類爲了得到這個工作。您也可以在視圖類中創建該函數。