0

StofDoctrineExtensionsBundle から Translatable を実装した 2 つの言語で Symfony 2 アプリを構築しています。Translatable は他のテーブル ext_translations を作成し、翻訳を保存します。

翻訳に使用するテーブルは次のとおりです(オブジェクトテーブル):

ここに画像の説明を入力

テーブル ext_translations (ext_translations テーブル) は次のとおりです。

ここに画像の説明を入力

コードを実行して、何らかの理由で翻訳を ext_translations テーブルに保存すると。

    $entity = $em->getRepository('ObjectsBundle:Object')->find(1);
    $entity->setTitle('my title in ru');
    $entity->setTranslatableLocale('ru'); // change locale
    $em->persist($entity);
    $em->flush();

作成時にオブジェクト テーブルにタイトルを書き込みますが、後で更新すると、ext_translations テーブルのみが更新されます。

2 つの言語を持つ symfony 2 で更新と作成をどのように処理しますか?

これらの入力のコピーを作成し、1 回の送信で保存する必要がありますか。たとえば、オブジェクトテーブルでは、タイトルが必要ですか:

<input type="text" name="title_bg">
<input type="text" name="title_en">

そして、それらが送信されたら、パラメーター local を変更します。

 $entity->setTranslatableLocale('ru'); -- or what lang parameter we have

そして、上のコードを提出してください。この種のアプリケーションに最適なソリューションは何ですか?

4

1 に答える 1

1

「翻訳テーブル以外」のテキスト (適切なエンティティ内のもの) は、デフォルトのロケールのものです。したがって、通常は「en」です (または、より適切には en_US または en_GB にする必要があります)。

デフォルトで翻訳をロシア語 ("ru" または "ru_RU") にしたい場合は、デフォルトのロケールをそのように設定する必要があります。

翻訳 (および ext_translations テーブルへのエントリ) は、デフォルト以外のロケールの翻訳のエントリです。

デフォルトのロケールを設定するには、parameters.yml.dist に移動して設定します

parameters:
    [...]
    locale: de

実行php composer.phar installして parameters.yml に転送します。もちろん、parameters.yml で直接編集できますが、composer の更新/インストール後に再度上書きされる可能性があります。

編集 (コメント用): CRUD (またはおそらく U) に問題がある場合は、適切なエンティティが読み込まれていることを常に確認する必要があります。翻訳可能な拡張機能は、エンティティ内で設定したロケールに常に依存します。編集したいテキストを含む適切なエンティティをロードするには、ロード時に次のことを行う必要があります

$entity = $em->getRepository('ObjectsBundle:Object')->find(1);
$entity->setTranslatableLocale('ru'); // change locale
$em->refresh($entity);

これは、デフォルト以外の言語テキストを編集したい場合に行います。保存している間は、エンティティにも適切にロケールを設定する必要があります (上記で述べたように)。

編集 #2: https://gist.github.com/Koalabaerchen/8ed60894cdbbdcd42f3c これは、ユーザーのセッション内に設定された _locale パラメータの例です (存在しない場合)。Symfony 2.7.7 以下でテスト済み

(他の翻訳を取得するために) ユーザー セッションの _locale を切り替えたい場合は、_locale セッション属性を設定するコントローラー アクションを作成するだけで、翻訳可能なバンドルによって他の言語が「魔法のように」読み込まれます。

于 2015-11-24T16:25:46.780 に答える