7

.text.haml メーラー テンプレートで i18n を使用しており、en.yml に改行を含む文字列が必要ですが、html_safe を使用したり、キー名に _html をサフィックスしたりしても、t() は常にそれらをエスケープします。

これを行う方法はありますか??

p3_html: >
    You love monkeys:
     \n- You look like one
     \n- Your smell like one
     \n- Your account has been flagged

私の html.haml テンプレートでは:

!= t('emails.post.twitter_forbidden.p3_html').html_safe

\n がエスケープされていても。これらはテキスト テンプレートであるため、%br などは使用できません。これを 4 つの i18n 文字列に分割できることはわかっていますが、それは本当に悲しいことです。

ところで、確認したところ、haml ではなく i18n エスケープです。

4

5 に答える 5

9

次のようなことができます。

t('emails.post.twitter_forbidden.p3_html').html_safe.gsub("\n", '<br/>')

私の知る限り、これが唯一の方法です。

編集

実際、掘り下げた後、simple_formatヘルパーを見つけました。

http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format

于 2012-06-27T20:57:40.537 に答える
4

ここにいくつかのオプションがあります: 上記のように、simple_format が役に立ちます。yml ファイルを次のようにフォーマットします。

    p3_html: |
      Some text:
      - Point 1
      - Point 2
      - Point 3

そして、使用します

   =simple_format t(:p3_html)

これはあなたに次のようなものを与えるでしょう

    <p>Some text
      <br>
      - Point 1
      <br>
      - Point 2
      <br>
      - Point 3
    </p>

または、各行に新しい段落が必要な場合:

    p3_html: |
      Some text:

      - Point 1

      - Point 2

      - Point 3

あなたにこれを与えるべきです:

    <p>Some text</p>
    <p>- Point 1</p>
    <p>- Point 2</p>
    <p>- Point 3</p>

またはこのようなものはより柔軟です

    <% t(:p3_html).each_line do |line| %>
      <li>= |line|</li>
    <% end %>

さまざまな書式を設定できます。

    <li>- Point 1</li>
    <li>- Point 2</li>
    <li>- Point 3</li>

最後のオプションは、yaml で配列を使用することです。

      p3_html: 
        - Some text:
        - - Point 1
        - - Point 2
        - - Point 3

    <% t(:p3_html).each do |line| %>
      <p>= |line|</p>
    <% end %>

おそらくクリーンですが、コンマで陽気な地獄を再生すると思いますが、上記のバージョンの利点は、yaml を変更する必要なくフォーマットを切り替えることができることです。

于 2013-09-04T20:47:07.447 に答える
1

次のように、ロケールファイルでタグを使用するだけになりました。

a:
  b: "Some <br /> thing"

そして、テンプレート内でそれらを作成します.html_safe:

<%= t('a.b').html_safe %>
于 2015-07-15T17:12:48.933 に答える
0

I18n は yaml を使用するだけで、yaml は配列を持つことができます。:-)

したがって、このようなオプションを使用して調査します。

yaml ファイルには、p3_html というキーがあります。

# http://en.wikipedia.org/wiki/YAML#Lists_of_associative_arrays
p3_html:
- some text
- some more text
- some more more text

そして、haml ビューには、次の HAML コードがあります。

= t('p3_html').each do |x| 
  %p= x

または、必要に応じて 1 行で

= t('p3_html').each {|x| haml_tag :p, x }

また、これをヘルパーに移動する場合は、おそらく ruby​​ 変数の前で haml_concat ヘルパーを使用する必要があることを覚えておいてください。確かではありません。

また、翻訳 yaml 変数 t('p3_html') の相対/絶対命名をアプリの命名に調整する必要があります。

お役に立てれば!

于 2012-06-29T16:35:07.177 に答える
0

簡単です。これを行うだけで、新しい行にテキストを取得できます。

en.yml

long_text: |
  Lorem ipsum dolor sit amet.

  Consectetur adipisicing elit.

アプリ/ビュー/サンプル/file.html.erb

<%= simple_format t(:'long_text') %>

参照: http://apidock.com/rails/ActionView/Helpers/TextHelper/simple_format

于 2015-01-28T01:43:30.837 に答える