0

symfo は初めてですが、サイトのコンテンツを翻訳する必要があります。

私は a2lix (最終バージョン) と KNP 教義の動作 (翻訳可能) を使用しています。

2 つのエンティティ (記事とカテゴリなど) があるとします。

翻訳のドキュメント ( https://github.com/KnpLabs/DoctrineBehaviors ) のように、カテゴリに 2 つのクラス (Category と CategoryTranslation) を使用しています。私のカテゴリの翻訳を取得するために、ロケールでクエリを使用しています。Request $request ($locale = $request->getLocale();) でロケールを取得します。以下は、リポジトリ内のコントローラーとクエリの例です。

コントローラ

public function indexAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $locale = $request->getLocale();

        $entities = $em->getRepository('AcmeBundle:Category')->findAllByLocale($locale);

        return $this->render('CTCArtworkBundle:Backend/Artwork:index.html.twig', array(
            'entities' => $entities,
        ));
    }

リポジトリ ロケールの情報を取得しようとしています。

public function findAllByLocale($locale){

        return $this->createQueryBuilder('a')
                   ->join('a.translations', 'aTrans')
                   ->where('aTrans.locale = :locale')
                   ->setParameter("locale", $locale)
                   ->addSelect('aTrans')
                   ->getQuery()
                   ->getResult()
        ;        
}

それが良い習慣かどうかはわかりませんが、私にとってはうまくいきます。URL を変更すると、Twig テンプレートで fr/en カテゴリを取得します。

<tr>
    <th>Category</th>
    <td>{{ category.translations|First.name }}</td>
</tr>

私の問題

私の記事の翻訳についても、私は同じことをします。3 つのプロパティがあります - タイトル - 説明 - カテゴリ (私は a2lix_translatedEntity ( http://a2lix.fr/bundles/translation-form/#bundle-additional ) を使用しています)

記事のレコードをレンダリングしようとすると、カテゴリ名の翻訳は取得されませんが、タイトルと説明の翻訳は取得されます。

私もそれを読みました(https://github.com/KnpLabs/DoctrineBehaviors#guess-the-current-locale)が、よくわかりません。それは常に locale を渡す方法ですか?

私は何を間違っていますか?

ブロックされており、問題を解決するためのドキュメントが見つかりません。私の英語でごめんなさい;-)

どんな助けでも大歓迎です。どうもありがとう

4

2 に答える 2

1

KNP には、現在のリクエスト スコープにアクセスするだけで、現在のロケールを推測する独自の方法があります。特定のロケールのレコードを取得したい場合は、「ロケールを渡す」こと全体が役立ちます。

さて、あなたのカテゴリーの翻訳です。エンティティが含まれていないため、翻訳にアクセスするための例をいくつか示します。

Category エンティティに、カテゴリ名を返すプロパティ名があるとします。次に、現在のロケールでその名前を返す単純なヘルパー メソッドを定義できます。

public function getName() {
    if( $name == $this->translate()->getName() ) {
        return $name;
    }

    return '';
}

それで、私たちはここで何をしましたか?

  1. $this->translate()->getName() - この行は翻訳エンティティ (この場合は CategoryTranslation) を探し、メソッドgetName()を呼び出します。次に、翻訳されたカテゴリ名を返すか、翻訳が追加されていない場合は空の文字列を返します。

最後に、小枝テンプレートでカテゴリ名にアクセスする方法は次のとおりです。

ヘルパー メソッドを定義したので、テンプレートで.translationsにアクセスする必要はなくなりました。あなたは単に呼び出すことができます:

{{ category.name }}

あなたがアイデアを得たことを願っています。

于 2015-04-13T12:03:45.403 に答える