2016-10-05 2 views
0

私はページの内容を英語またはフランス語で書くことができるウェブサイトを翻訳する必要があります。
Symfony 2 - 双方向の翻訳

  • message.en.yml(ロケールがen_USですとき英語にフランス語を翻訳したりを表すen_GBする)
  • message.fr.yml:
    は、だから、私は翻訳リポジトリ内の2つのファイルが作られました私の問題を説明するために

(英語toフランス語ロケールがFRで変換します)私は例を取る、単語のペアHardware | Matériel

frロケールで表示された場合HardwareMatérielで翻訳する必要があります。
私はHardware: Matérielを私のmessage.fr.ymlに入れます。

ページをen_usまたはen_gbロケールで表示する場合MatérielHardwareで翻訳する必要があります。
だから私はMatériel: Hardwareを私のmessage.en.ymlに入れます。

翻訳動作は次のとおりです。
frロケールでページを表示すると、Hardwareが正しく翻訳されています。
en_gbロケールでページを表示すると、Hardwareは正しく翻訳されません。
en_usロケールでページを表示したときHardwareMatérielで間違って翻訳されています。

symfonyのキャッシュをクリアすると、動作が変更され、時にはすべてがMatérielで翻訳されることもあります。
1週間前に私はフランス語を英語に翻訳するだけで完璧でした単にmessage.en.ymlファイルを使用するだけで、多少のファイルを使用したときに気付かなかったことがあるかもしれません。
誰かにこの2方向の翻訳を処理する方法を教えてもらえますか?

答えて

0

さて、私は私が間違って何をしていたか理解。

  • 入れ:あなたが持っているこのような状況のために Hardware: Matériel私message.fr.ymlインチ(もしfrロケールがMatérielによってHardwareを翻訳した場合)
  • 私のmessage.en.ymlにMatériel: Hardwareを入れてください。 (en locale翻訳の場合HardwareMatériel
  • 私のmessage.en.ymlに入れてください:Hardware: Hardwareなぜなら翻訳フォールバックの

私が思うに、この起こったのすべてを(ロケールエン場合はHardwareを翻訳していない)、私はmessage.en.yml.firstでいずれかのHardwareので、symfonyの見た目の翻訳を頼みます(ロケールがエンコードされているため)、見つからない場合は、message.fr.ymlで検索します。ここではHardware: Matérielが見つかりました。
キャッシュに応じて、いつもen_gbロケールで翻訳が正常に機能しています...

1

変数を使用します。

私はこのような変換を使用しています:

messages.en.yml

string.hardware: Hardware 

messages.fr。YML小枝で

string.hardware: Matériel 

:小枝で

string.hardware: %variable% Hardware 

使用法:動的変数を使用して

{{ "string.hardware"|trans }} 

{{ "string.hardware"|trans({"%variable%": your_variable_or_string}) }} 
+0

私が翻訳するものは多くの場合変数ですから、これを行うことはできません。私はオブジェクトのプロパティをループし、オブジェクトのすべてのプロパティを変換する場所です。 – aurelienC

+0

はいできます。私の編集を参照してください。 –

+0

ありがとう、私はこれを試してみるつもりです。 – aurelienC

関連する問題