2016-08-26 1 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' 
    ); 


} 

어떻게 이것을 달성 할 것인가?

+2

을 ... – Barry

답변

6

당신이 같은 일을, 컨트롤러의 init() 함수 내부의 설정을 업데이트 할 수 있습니다 : 당신이 할 수있는 확실하지 않다 때문에, 나는이에 관심이있을 것

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'에서와 같이 허용 된 액션을 설정하지만 코드에 따라 init에 $ url_handlers를 설정합니다. 정말 고마워! :) – ifusion

+1

맞아, 그건 의미가있다. 나는 대답을 업데이트 할 것이다. –

+3

2 년 전 오스트리아 린츠에있는 첫 번째 StripeCon에서이 토론을했습니다. 실제 사례를 코딩했습니다. https://github.com/wernerkrauss/silverstripe-translatable-actions를 참조하십시오. – wmk