2017-06-19 13 views
0

symfony 3のドキュメントを読んで、私は非常に混乱しています。これは私の普通のコントローラの1人がスタートを見た様子です:symfony 3プロジェクトに複数言語オプションを追加する

class IndexController extends Controller 

    { 
     /** 
     * @Route("/", name="index") 
     */ 
     public function indexAction(Request $request) 
     { 
      $articles = $this->getDoctrine() 
       ->getRepository(Article::class)->findAll(); 

      return $this->render("index.html.twig", array(
       'articles' => $articles 
      )); 
     } 
    } 

多言語用のオプションを追加したかったのです。 symfonyを使用する前に、私は簡単なセッションで言語を保存し、これを変更するためのボタンを使ってこれを行うのを見た。 symfonyでは、の翻訳フォルダと、各言語のファイルを追加しました。
@Route( "{_ロケール} /"、名前= "インデックス")
:私はこのような私のルートでは、私のから_locateを追加することができ、いくつかのtitorialで見たこの後

//messages.en.yml 
    base.menu.1: Home 
    base.menu.2: Products 
    base.menu.3: Brands 

//messages.bg.yml 
    base.menu.1: Начало 
    base.menu.2: Продукти 
    base.menu.3: Марки 

これは実際に働いた。私は私のホームページの言語をbg /、またはen /に変えることができます。
しかし、ロケールはどこにも保存されませんでした。私が他のページに行った場合、どの言語が以前に設定されたのかはわかりません。だから私はより多くのを読んで、私はこのようなのrouting.ymlに私のルートのすべてを保存することで、この問題を解決することができました。

index: 
    path:  /{_locale}/ 
    defaults: { _controller: AppBundle:Index:index } 
    requirements: 
     _locale: '%app.locales%' 

、その後、私の設定を設定します。

parameters: 
    locale: bg 
    app.locales: bg|en 

framework: 
    translator: { fallbacks: ['%locale%'] } 

このすべて私のルーティングをコントローラからrouting.ymlに移動しなければならないことを除いて、動作しています。私はこれが正しい方法であるかどうか、私は確信が持てないので、ドキュメントは100%明確ではない(おそらく私はそれを理解することはできません)、良いティトリアルを見つけることはできません。

答えて

0

上述したように、 'make locale sticky' メソッドを使用して、

次いで

$request->setLocale($locale); 
$request->getSession()->set('_locale', $locale); 

//now redirect as the locale change will take affect on the next pageload 

(両方を設定し、リダイレクト)

+0

それだった、ありがとう! – symfonypleb

0

アノテーションまたはYAMLの設定によって、最終結果は同じになります。注意を払わないと注釈の有無を議論することになります。個人的には推薦しません。あなたのrouting.ymlアプローチが私が推奨するアプローチであり、完全にうまく動作するはずです。

0

私はあなたがHow to Work with the User's Localeにsymfonyの投稿を読んだと思います。あなたが探しているのはMaking the Locale "Sticky" during a User's Sessionです。

symfonyはロケールの設定をリクエストに保存します。つまり、この設定はリクエスト間で自動的には保存されません( "sticky")。しかし、セッションにロケールを格納することができます。そのため、ロケールは後続のリクエストで使用されます。

+0

を使用してロケールを設定だから、カーネル・イベントサブスクライバを追加私はURLに触れていませんが、私は言語を変更することしかできないようです:public function __construct($ defaultLocale = '')$ request-> setLocale( 'bg');を使って試しました。私のコントローラでは、テストするだけで、実際にはロケールは変わりますが、$ request-> getLocale();で見ることができますが、ページの言語は変わりません。私はあまりにも遅く、すでにそれをやっていると思う。または私はそれを間違ってやっています。ここからラングを変える正しい方法は何ですか? – symfonypleb

関連する問題