Rails 3 i18n如何*不*逃避换行

eag*_*poo 7 haml ruby-on-rails internationalization

我在我的.text.haml邮件程序模板中使用i18n,我想在en.yml中有一个带换行符的字符串但是t()总是转义它们,即使我使用html_safe或后缀为_html的键名.

有没有办法做到这一点??

p3_html: >
    You love monkeys:
     \n- You look like one
     \n- Your smell like one
     \n- Your account has been flagged
Run Code Online (Sandbox Code Playgroud)

在我的html.haml模板中:

!= t('emails.post.twitter_forbidden.p3_html').html_safe
Run Code Online (Sandbox Code Playgroud)

无论什么被逃脱.我不能使用%br或其他任何东西,因为这些是文本模板.我知道我可以将它分成4个i18n字符串,但那真的很难过.

顺便说一句,我检查过,它是i18n逃避,而不是haml.

Chu*_*ebs 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

  • 稍微纠正一下,它应该是`t('emails.post.twitter_forbidden.p3_html').gsub("\n",'<br/>').html_safe` (3认同)

Car*_*ela 5

这里有几个选项:如上所述,simple_format 会有所帮助。像这样格式化你的 yml 文件:

    p3_html: |
      Some text:
      - Point 1
      - Point 2
      - Point 3
Run Code Online (Sandbox Code Playgroud)

然后使用

   =simple_format t(:p3_html)
Run Code Online (Sandbox Code Playgroud)

这会给你类似的东西

    <p>Some text
      <br>
      - Point 1
      <br>
      - Point 2
      <br>
      - Point 3
    </p>
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望每一行都有一个新段落:

    p3_html: |
      Some text:

      - Point 1

      - Point 2

      - Point 3
Run Code Online (Sandbox Code Playgroud)

这应该给你这个:

    <p>Some text</p>
    <p>- Point 1</p>
    <p>- Point 2</p>
    <p>- Point 3</p>
Run Code Online (Sandbox Code Playgroud)

或者类似的东西更灵活

    <% t(:p3_html).each_line do |line| %>
      <li>= |line|</li>
    <% end %>
Run Code Online (Sandbox Code Playgroud)

使您能够输入不同的格式:

    <li>- Point 1</li>
    <li>- Point 2</li>
    <li>- Point 3</li>
Run Code Online (Sandbox Code Playgroud)

最后一个选项是在 yaml 中使用数组:

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

    <% t(:p3_html).each do |line| %>
      <p>= |line|</p>
    <% end %>
Run Code Online (Sandbox Code Playgroud)

可能更干净,尽管我认为它会用逗号玩得开心,并且上述版本的优点是您可以在格式之间切换而无需修改 yaml