2012-05-03 16 views
2

i18nをサポートする方法をたくさん考えた後、私は受け入れられたソリューションの1つを考えて、別々のテーブルを用意しました。
翻訳可能な問題
私はDoctrineの拡張機能から翻訳可能版をインストールしましたが、私は望みどおりに機能しませんでした。別のテーブルを持つ場合でも、変換可能な列はメインテーブルと変換テーブルの両方にあり、値をeavの方法で格納します。また、デフォルトのロケールが変更された場合(それは私に起こったし、再び起こるかもしれません)、メインテーブルのデフォルト値が指定されたロケールを持たないように複雑になります。また、いくつかの翻訳可能なフィールド(5〜)があります。フォールバックの場合にはさらに左のジョインになります。doctrineを使用したデータベースの翻訳

その他のソリューション
私は各テーブルに翻訳して別のテーブルを持って、私はobj.getTitleを呼び出すことができますポストロードイベントlistener.Thisの道を経由して、おそらくデフォルトのロケールを設定し、フォールバックされると思った他のソリューション()なしobj.translations ['en']。getTitle()、ロケールを指定する必要はありません。

問題
は、このアプローチの問題は、fallback.Oneの回避策は中example.Thisのために、「ロケールに( 『EN』、 『デ・』)でを追加するために参加されている多くの、より多くのデータを返すだろうが、他の方法では合体を使用することになりますが、ドクトリンがエンティティにマッピングすることは不可能です。

答えて

5

あなたはhttps://github.com/KnpLabs/DoctrineBehaviors#translatableを見ることができます。

現在、多くのエンティティで使用されていますかなりうまくいく。 DQLなどを使用して、他のエンティティ、ジョインとして変換をクエリできます。

はい、既存のAPIを使用して、簡単に代替メカニズムを想像することができます。

+0

knplabのAPIを使用したフォールバックのメカニズムについてもっと明示してください。私はドキュメンテーションで何も見つけることができませんでした。 –

+0

デフォルトロケールへのフォールバックは、すでにPHPレベルで提供されています:https://github.com/KnpLabs/DoctrineBehaviors/blob/master/src/Knp/DoctrineBehaviors/Model/Translatable/TranslatableMethods.php#L91 – Florian

+0

これを実装したい場合SQLレベルでcoallesceやIF(例えば)を使用すると、ネイティブ・クエリーを使用できます。 – Florian

関連する問題