2016-09-29 2 views
2

Silverstripe Translatable Plugin을 사용하여 여러 언어로 된 웹 사이트를 제공하고 있습니다. 그러나 로그인 또는 비밀번호 재설정 페이지와 같은 내장 된 페이지도 번역하고 싶습니다. URL 끝에 ?local=en_US을 적용하는 것만으로 도움이되지 않으며 제 2 언어로 정체 된 로그인 페이지를 만들 수있는 방법이 없습니다. 그 일을 할 수있는 방법이 있습니까?Silverstripe 로그인 양식 및 기타 기본 제공 페이지 번역

+0

난 당신이 컨트롤러 : 초기화에서 해당 매개 변수를() 자신을 확인하고 수동으로 로케일을 설정해야 할 것 같아요. – wmk

답변

1

다음은 해결책입니다. 이것은 Controller 클래스를 확장하여 작동합니다.이 클래스는 로그인을 처리하는 Security와 같은 컨트롤러에도 영향을 줄 정도로 충분히 낮습니다.

이전 페이지의 로캘을 기억한 다음이를 사용하여 "기본 제공 페이지"를 렌더링합니다.

ControllerDecorator.php

<?php 
class ControllerDecorator extends Extension { 
    function onBeforeInit() { 
     // If we're on a page, use its Locale information 
     if($this->getOwner() instanceof ContentController) { 
      $locale = $this->getOwner()->Locale; 
      i18n::set_locale($locale); 
      Cookie::set('Locale', $locale); 
     } 
     // Otherwise, use the stored Locale 
     else if(Cookie::get('Locale')) { 
      i18n::set_locale(Cookie::get('Locale')); 
     } 
    } 
} 

config.yml

Controller: 
    extensions: 
    - ControllerDecorator