0 レビュー
1 回答
php-スリムなフレームワークでトランスレータインスタンスを置き換える方法は?
スリムでLaravelのイルミネーション/トランスレーションを使用しています。私はこれらすべてに不慣れで、ページを翻訳するための解決策を見つけましたが、実行中に別のトランスレーターインスタンス(ページの翻訳を変更するため)をコンテナに渡そうとすると問題が発生します翻訳を変更する時間。 これが私がしていることです: このようなTwigのナビゲーションバーがあります:
<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;
};
これを間違った方法で行っているかどうかはわかりません。実行時に翻訳を変更できないためです。コンテナ内に設定した翻訳(この場合は英語)を常に取得します。コントローラの方法の代わりにグローバルを使用しますか?どうすればいいですか?
わからない
0
レビュー
答え :
解決策:
Accept-Language
ヘッダーを使用して、ユーザーが見たい言語を検出できます。これはミドルウェア内で実行できます。
まず、拡張機能の追加をコンテナから削除する必要があります
$container['view']= function($container){
$view= new \Slim\Views\Twig(__DIR__ .'/../resources/views',['cache'=> false,]);
return $view;
};
次に、ミドルウェアを介して拡張機能を追加し、ヘッダーから解析された言語を使用します。
$ container = $ app-> getContainer();
$ app-> add(function(\ Slim \ Http \ Request $ request、$ response、$ next)use($ container){
$ lang = $ request-> getHeader('Accept-Language');
// $langは'de-DE、de; q = 0.9、en-US; q = 0.8、en; q=0.7'のようになります
//解析の詳細については、上記のリンクを参照してください
$ parsedLang = parseLang($ lang);
$ loader = new FileLoader(new Filesystem()、__DIR__。'/../resources/lang');
$ translation = new Translator($ loader、$ parsedLang);
//拡張機能を小枝に追加します
$ view = $ container-> get('view');
$ view-> addExtension(new TranslatorExtension($ translator));
//他のミドルウェアと実際のルートを実行します
$ next($ request、$ response);を返します。
});
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。