私はスリムでLaravelのilluminate/Translationを使用しています。私はこのすべてに新しいです、私は私のページを翻訳する解決策を見つけましたが、私は別の翻訳者のインスタンス(ページの翻訳を変更する)を実行中にコンテナに渡そうとしているときに問題があります翻訳を変更する時間。 を私はこのような小枝とナビゲーションバーがあります:スリムフレームワークでトランスレータインスタンスを置き換える方法は?
<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
どうやってそれをしますか?私はミドルウェアの仕組みを理解していますが、ビューからの出力(私の場合はtwig)を別のトランスレータにどのように関係させますか? TranslatorExtensionをコンテナへのトランスレータインスタンスとともにビューに追加する必要があることを考慮してください。 –
トランスレータスイッチをトリガする必要がありますか?つまり、実行時のどの時点で変更したいのですか? –