我在我的.text.haml邮件程序模板中使用了i18n,我希望在en.yml中有一个带换行符的字符串但是t()总是转义它们,即使我使用html_safe或后缀为key name _html。
有办法吗?
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
无论什么被转义。我不能使用%br或其他任何东西,因为这些是文本模板。我知道我可以将它分成4个i18n字符串,但那真的很难过。
顺便说一句,我检查过它是i18n逃避,而不是haml。答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分:1)
答案 3 :(得分: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')的相对/绝对命名调整为您应用的命名。
希望这有帮助!
答案 4 :(得分: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