我使用rails 3.有没有简单的方法告诉I18n尊重插值中使用的字符串'html safness'并默认使所有翻译的字符串html安全?如果我有这个en.yml
:
en:
user_with_name: 'User with name <em>%{name}</em>'
我使用t('user_with_name', :name => @user.name)
,我将用户名html转义,但<em>
和</em>
保留原样?
答案 0 :(得分:6)
http://guides.rubyonrails.org/i18n.html#using-safe-html-translations
官方Rails指南说你可以毫无顾虑地使用插值变量,因为它们是自动转义的html,除非你明确声明它们是String.html_safe。
从指南中:
尽管如此,插值可以逃脱。例如,给定:
en:
welcome_html: "<b>Welcome %{username}!</b>"
您可以安全地传递用户设置的用户名:
<%# This is safe, it is going to be escaped if needed. %>
<%= t('welcome_html', username: @current_user.username %>
另一方面,安全字符串是逐字插入的。
答案 1 :(得分:5)
将名称从user_with_name
更改为user_with_name_html
,然后rails会知道您已在文本中包含html。
答案 2 :(得分:2)
老问题,但是如果有人想要实现这个目标,那么这就是我提出的猴子补丁:
module ActionView
module Helpers
module TranslationHelper
private
def html_safe_translation_key?(key)
true
end
end
end
end
把它放在初始化器中,就是这样! 适用于Rails 3.2.6。 仅将本地化文件中的文本标记为安全,而不是插值参数。