2016-08-26 6 views
3

私は、異なる国のために以下の$url_handlersを翻訳する必要がある状況があります。私は、URLの「グループ研修」の部分を翻訳できるようにする必要がありhttp://website.com/gyms/boston/group-training

だから、英語サイトでURLは次のようになります。私は全体を通して_t()メソッドを使用してサイトの残りの部分を翻訳しました。

私の現在の設定:

class GymLocationPage_Controller extends Page_Controller { 

    private static $allowed_actions = array(
     'currentSpecials', 
     'sevenDayFreeTrial', 
     'groupTraining' 
    ); 

    private static $url_handlers = array(
     'current-specials' => 'currentSpecials', 
     'trial' => 'sevenDayFreeTrial', 
     'group-training' => 'groupTraining' 
    ); 


} 

どのようにこれを達成するであろうか?あなたはこのような何かやって、コントローラのinit()関数内で設定を更新することができ

+2

を... – Barry

答えて

6

:私はあなたができるかわからないので、私は、この中には非常に興味があると思い

public function init() { 

    parent::init(); 

    // Define your translated actions. 
    $translatedCurrentSpecials = _t('Actions.CURRENT_SPECIALS', 'aktuella-kampanjer'); 
    $translatedSevenDayFreeTrial = _t('Actions.SEVEN_DAY_TRIAL', 'sjudagars-prova-pa-period'); 

    // Define your url handlers. 
    $urlHandlers   = $this->config()->url_handlers; 
    $translatedUrlHandlers = [ 
     $translatedCurrentSpecials => 'currentSpecials', 
     $translatedSevenDayFreeTrial => 'sevenDayFreeTrial' 
    ]; 

    // Update the config. 
    Config::inst()->update(
     $this->class, 
     'url_handlers', 
     $translatedUrlHandlers + $urlHandlers // Important to prepend and not append. 
    ); 

} 
+1

パーフェクト! 'init'に' $ allowed_actions'を設定する必要はないことがわかりました。私はちょうど 'private static $ allowed_actions'のように許可されたアクションを設定しますが、あなたのコードに従って$ url_handlersをinitに設定します。本当にありがとう! :) – ifusion

+1

右、それは理にかなっています。私は答えを更新します。 –

+3

2年前にオーストリアのリンツで開催された最初のStripeConでこの議論が行われました。実際の例をコード化しました。https://github.com/wernerkrauss/silverstripe-translatable-actionsを参照してください。 – wmk

関連する問題