2016-01-02 10 views
9

私はTwig Date拡張機能を使って作業時間を取得しています。Twig date time_diff translation

{{ photo.getCreationDate|time_diff }} 

多言語にしたいです。私は文書を読んで、それは言うそれは言うそれはどのようにそれを行うかわからないが、それは私のために働かないようです。

これは私のコントローラで試した方法です。

$ twig = new Twig_Environment(new TranslatorInterface()); $ twig-> addExtension(new Twig_Extensions_Extension_Date());

私は次のエラーを取得しています

Error: Cannot instantiate interface Symfony\Component\Translation\TranslatorInterface

Twig_EnvironmentコンストラクタはTwig_LoaderInterfaceオブジェクトではなく、TranslatorInterfaceを待っています。

time_diffの出力を翻訳するにはどうすればよいですか?あなたが読んで何

おかげ

答えて

16

は、両方がSensioLabsによって作られていても、小枝のドキュメントではなく、Symfony2の者です。

あなたはsymfonyのフルスタックフレームワークを使用する場合は、のSymfony \コンポーネント\翻訳\ TranslatorInterfaceは、すでにあなたの小枝拡張のコンストラクタ引数として定義されます。

を確認するためには、

date.phpのlib \小枝\拡張\拡張\ \ \ベンダー\小枝\拡張子であるファイルを見ているあなたは、このように表示されます

*\vendor\twig\extensions\lib\Twig\Extensions\Extension\date.php* <?php /** * This file is part of Twig. * * (c) 2014 Fabien Potencier * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ use Symfony\Component\Translation\TranslatorInterface; /** * @author Robin van der Vleuten <[email protected]> */ class Twig_Extensions_Extension_Date extends Twig_Extension { public static $units = array( 'y' => 'year', 'm' => 'month', 'd' => 'day', 'h' => 'hour', 'i' => 'minute', 's' => 'second', ); /** * @var TranslatorInterface */ private $translator; /** * Constructor. * * @param TranslatorInterface $translator A TranslatorInterface instance. */ public function __construct(TranslatorInterface $translator = null) { $this->translator = $translator; } // etc. 

これがあなたにとって何を持っているのであれば、今自分がしなければならないのは翻訳そのものです。

symfony2には、あなたのロケールに応じて翻訳済みのファイルが付属していません。作成する必要があります(または既にこれを行っている人を見つけて、君は)。

まず、あなたのservices.ymlに小枝拡張にこの引数を追加します:リソース\アプリ\場所"date.fr.xliff"を作成し、その後

*services.yml* 

twig.extension.date: 
    class: Twig_Extensions_Extension_Date 
    arguments: ["@translator"] // careful of quotes 
    tags: 
     - { name: twig.extension } 

\翻訳。独自のバンドル、つまり異なるAppBundleで作業している場合は、場所を変更してください。 もちろん、あなたが探している言語に応じて、 "fr"( "de"、 "es" ...など)を適応させてください。 なぜ ".xliff"拡張?もちろん、 ".yml"ファイルを作成することもできます。しかし、 ".xliff"を使うと、私が次にあなたに提案するものを利用することができます。

フランス語の翻訳例を続けておけば、「date.fr.」を開いてください。wliff」ファイルコピー/ translation provided by the KnpTimeBundleを貼り付けます。

は、あなたがしなければならない場合、DEVのキャッシュをクリアすることを忘れないでください。

あなたが小枝テンプレートで場所を取るための翻訳を探しているなら、単に(「|トランス」第二のフィルタを追加しようとしていない)何も変更せずにフィルタを使用します。もちろん

{{ user.createdAt|time_diff }} 

、あなたがそこに必要なもので、「user.createdAt」を置き換える

た場合。あなたがしたい、ちょうどKを実装するあなたのためにこれをすべて行うには、アプリケーションのnpTimeBundleを使用します。 それ以外の場合は、KnpTimeBundleが提供する翻訳ファイルを、膨大な量の異なる言語用にコピー/ペーストして、ファイル名 "time.fr.xliff"を "date.fr.xliff"に置き換えるだけでOKです。これはSymfony2パックで利用可能なTwig Extensionが必要とします。

+1

もう1つのステップ:config.ymlでこの行のコメントを解除する必要があります: 'translator:{fallbacks:["%locale% "]}' –

+0

これは私を助けました。答えを投稿してくれてありがとう –