2016-11-07 12 views
1

私は自分のアプリケーションの翻訳に取り組んできました。データベースから翻訳を取り出してカタログに追加しました。 symfony内ですべて動作しますが、たとえば$translator->trans('TEST_TRANSLATION')という変換をエコーすると、正しい値が返されます。私は翻訳が正しいと思います。私のTwigテンプレートでSymfony Translatorを使用するには?

今私は{%trans%}タグでの翻訳をサポートするテンプレートエンジンとしてTwigを使用します。悲しいことに、翻訳者の変数からの翻訳は、Twigやグーグルでかなりの間働くことはできません。私は実際の解決策を見つけることができません。
私は$twig->addExtension()を使って拡張機能を追加することについて何かを読んだことがありますが、それを動作させることはできません。

誰かが正しい方向で私を指すことができたり、翻訳者を{%trans%}タグでどのように使用するかについてより明確な説明を提供していただければ幸いです。

ありがとうございます。

編集:ここで私はトランスレータを作成するために使用するコントローラーからのコードです:エコー使用している場合

$this->translator = new Translator('en'); 
$this->translator->addLoader('array', new ArrayLoader()); 
$this->translator->addResource('array', $translations, 'en'); 

echo $this->translator->trans('TEST_TRANSLATION'); 

$翻訳変数は翻訳を持つ配列が含まれていますが、それは正しく与えられた変換を示しています。 <p>{% trans %}TEST_TRANSLATION{% endtrans %}</p>を使用している場合、この翻訳者をTwigで動作させるにはどうすればよいですか?

編集2:私は過去1,5時間であらゆる種類のものを試してきましたが、何も動作しません。次のように私はこれを行う、小枝テンプレートのレンダリング機能のための配列に翻訳を与えることにその変数をアクセスもするように私にできることが、しかし私を見出した:

return $this->render('test/transTest.html.twig', array('translator'=>$this->translator)); 

私は上記を使用している場合は、私が翻訳にアクセスすることができます実行して、小枝内の変数:

<p>{{ translator.trans('TEST_TRANSLATION') }}</p> 

<p>{{ translator.locale }}</p>を使用しても、私に権利ロケール情報を提供します。

私は翻訳が間違っていないことを確信していますが、私が取り組んでいるサイトでは、Twigの翻訳で{%trans%}を使用しています。 。どんな助けでも大歓迎です。

+0

に助言を参照してください?トランスフィルターに '{{app.request.locale}}' – martin

+3

が正しく設定されていることを確認してください。 {{'' TEST_TRANSLATION '| trans}} – Matteo

+0

{%trans%}タグと{{' TEST_TRANSLATION '| trans}}の両方を試しましたが、ロケールも正しいです。 Twigがコントローラで作成したトランスレータクラスにアクセスできないようです。私はTwig内のコントローラで作成したトランスレータを使用する方法を探しています。 – user2467128

答えて

1

タグが{% trans %}の場合、または|transの場合は、symfonyのデフォルトのトランスレータサービスを使用していませんが、インスタンスを作成するだけなので、翻訳はtwigで機能しません。

翻訳者サービスが認識するように、タグtranslation.loaderでコンテナに宣言されているカスタムローダーサービスでデータベースから翻訳を読み込むことができます。

このSO postと(かなり古いが)それはどのように動作しないtutorial

+0

返信いただきありがとうございます!あなたがリンクしたチュートリアルは、私が今持っているものを作るために使ってきたものです。私のコードとチュートリアルのコードとの唯一の違いは、クラス 'AppBundle \ Utils \ DBLoader'を使用し、クラス 'MyApp \ CommonBundle \ Services \ DBLoader'を使用することです。私はキャッシュをクリアしようとしましたが、それは役に立たないようです。私はコントローラでそのサービスをインスタンス化したり呼び出す必要はありませんか?私はSymfonyにあまり経験がありませんので、load()関数がどのように呼び出されるか分かりません。 – user2467128

+0

Nevermind、すでにそれを修正しました。 2時間かかりましたが、最終的に私のドメインには「メッセージ」だけでなく、異なる名前があることに気がつきました。私は新しい翻訳ファイルを作りました。助けてくれてありがとう! – user2467128

関連する問題