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 字符串,但这真的很难过。

顺便说一句,我检查了一下,它是 i18n 转义,而不是 haml。

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

很简单,只需执行此操作即可将文本换行:

en.yml

long_text: |
  Lorem ipsum dolor sit amet.

  Consectetur adipisicing elit.

app/views/sample/file.html.erb

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

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

于 2015-01-28T01:43:30.837 回答
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

或者如果您愿意,可以在一行中

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

还要记住,如果你把它移到一个帮助器中,你可能必须在你的 ruby​​ 变量前面使用 haml_concat 帮助器。我不确定。

您还必须将翻译 yaml 变量 t('p3_html') 的相对/绝对命名调整为应用的命名。

希望这可以帮助!

于 2012-06-29T16:35:07.177 回答