나는 슬림하고 Laravel의 조명/번역을 사용하고 있습니다. 이 모든 것을 처음 접했을 때 페이지를 번역 할 수있는 해결책을 찾았지만 다른 변환기 인스턴스 (페이지 변환을 변경)를 실행 중에 컨테이너에 전달하려고 할 때 문제가 있습니다. 번역을 변경할 시간. 내가 내비게이션과 같은 나뭇 가지에 줄이 있습니다 :슬림 프레임 워크에서 번역기 인스턴스를 바꾸는 방법은 무엇입니까?
<li><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">lang<span class="caret"></span> </a>
<ul class="dropdown-menu">
<li><a href="{{path_for('en')}}" >english</a> </li>
<li><a href="{{path_for('fr')}}">french</a> </li>
</ul>
</li>
내가 컨테이너에 번역자의 새로운 인스턴스를 설정 언어 컨트롤러 :
public function getFrench($request, $response){
$loader = new FileLoader(new Filesystem(), __DIR__ . '/../resources/lang');
// Register the french translator (set to "en" for English)
$translator = new Translator($loader, "fr");
$this->translator=$translator;
}
을 는 여기에 내가 뭘하는지입니다 이것은 내 컨테이너를 설정하는 방법입니다 :
$container['translator']= function($container){
$loader = new FileLoader(new Filesystem(), __DIR__ . '/../resources/lang');
// Register the french translator (set to "en" for English)
$translator = new Translator($loader, "en");
return $translator;
};
** 뷰 ** 나는 translationExtension을 추가 해요 여기서
$container['view']= function($container){
$view= new \Slim\Views\Twig(__DIR__ .'/../resources/views',['cache'=> false,]);
// add translator functions to Twig
$view->addExtension(new TranslatorExtension($container->get('translator')));
return $view;
};
내가 잘못 했어도 런타임에 변환을 변경할 수 없기 때문에이 방법이 잘못 될지 모르겠다. 컨테이너 (이 경우에는 영어) 컨트롤러 방식 대신 전역 변수를 사용해야합니까? 어떻게 내가 이것에 대해 가겠습니까?
당신은 미들웨어를 구현해야합니다 :
첫째로 당신은 형성
그리고이 분석 된 언어, 미들웨어를 통해 확장자를 추가 헤더를 확장-추가 컨테이너에서 제거해야합니다 그에 대한. 이 미들웨어에서는 언어를 헤더 수용 언어 또는 라우트 또는 세션별로 감지하고 언어를 번역기 객체로 설정합니다. – DanielO
그런데 어떻게합니까? 미들웨어의 메커니즘을 이해하지만,보기 (내 경우에는 나뭇 가지)의 출력을 다른 변환기로 어떻게 관련 지을 수 있습니까? 컨테이너에 대한 변환기 인스턴스와 함께 TranslatorExtension을 뷰에 추가해야한다는 점을 고려해야합니다. –
번역기 스위치를 트리거해야하는 것은 무엇입니까? 내 말은, 런타임에서 어떤 시점에서 변경하고 싶습니까? –