24

Twig テンプレート内には、リンクを含む翻訳済みテキストが必要です (パスは、静的に埋め込まれているのではなく、Router によって生成される必要があります)。Twig では、trans ブロック内で変数をレンダリングすることはできません。次のことも認識しています。

{% trans with {'%name%': 'Fabien'} from "app" %}
Hello %name%
{% endtrans %}

しかし、それを使用して翻訳の中にこのような部分を挿入する方法がわかりません

<a href="{{ path('privacy') }}">privacy policy</a>

(もちろん、アンカーテキストも翻訳する必要があります)

4

4 に答える 4

41

私が取ったアプローチはこれです:

翻訳ファイル:

page.privacy.policy: Please read our %link_start%privacy policy%link_end%

小枝ファイルで:

<p>{{ 'page.privacy.policy' | trans({'%link_start%' : '<a href="'~path('privacy-policy')~'">', '%link_end%' : '</a>'}, 'account') | raw }}</p>

上記のブロック構文を使用してこれを実行できるかどうかはわかりません。変換の結果を「生」フィルターにパイプしない限り機能しないことがわかったからです。また、メッセージ ドメインを使用して翻訳を分割しているため、'account' パラメータを使用しています。

あなたの例に最も近いのは次のようになると思います:

<p>{{ 'Please read our %link_start%privacy policy%link_end%' | trans({'%link_start%' : '<a href="'~path('privacy-policy')~'">', '%link_end%' : '</a>'}) | raw }}</p>

編集:

私が遭遇したこのアプローチの唯一の問題は、リンクテキストを表す単一の翻訳がないため、単体テストで翻訳されたリンクをプログラムでたどる必要がある場所です。面倒ですが、リンクテキストに別の翻訳を提供し、翻訳された値を追加の変数として全文に置き換えることで、これを回避できると思います。

于 2012-07-18T17:23:41.167 に答える
7

rebdirdo のソリューションは、メッセージ全体をエスケープしていないため、実際には安全ではありません。"don't use <b> tag, use <strong> tag instead. %link_start%Here%link_end% you can find why."タグがエスケープされず、表示されないため、 のようなメッセージでは正しく機能しません。

作業アプローチ:

翻訳ファイル:

advises.strong: don't use <b> tag, use <strong> tag instead. %link_start%Here%link_end% you can find why.

小枝ファイル:

{{ 'advises.strong'|trans|nl2br|replace({'%link_start%': '<a href="'~path('privacy-policy')~'">', '%link_end%': '</a>'})|raw }}

nl2br フィルターに注意してください。生のフィルターがリンクタグに対してのみ機能するようにするには、そこに何らかのフィルターを配置する必要があります。

于 2013-08-09T10:07:47.807 に答える
0

小枝:

{{'body.term'|trans('%link_terms%' :app.request.getSchemeAndHttpHost()~path('terms')},'AcmeTerm')|raw }}

AcmeTerm.yml

body
    term: >
      <ul>          
          <li>Read<a href="%link_terms%">Terms</a>.</li>
      </ul>

path('terms') は次のようなルートです。

it__RG__terms                             ANY      ANY    ANY  /it/termini-e-condizioni
en__RG__terms                             ANY      ANY    ANY  /en/terms-and-conditions
于 2013-10-05T11:45:54.323 に答える