6

我使用 rails 3。有没有简单的方法告诉 I18n 尊重插值中使用的字符串的“html 安全性”,并默认使所有翻译的字符串 html 安全?所以如果我有这个en.yml

en:
  user_with_name: 'User with name <em>%{name}</em>'

我使用t('user_with_name', :name => @user.name),我让用户名 html 转义,但是<em></em>保持原样?

4

3 回答 3

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 %>

另一方面,安全字符串是逐字插入的。

于 2012-04-27T11:01:57.730 回答
5

将名称从 更改user_with_nameuser_with_name_html,然后 rails 会知道您在文本中包含了 html。

于 2011-04-01T11:41:34.450 回答
2

老问题,但如果有人想实现这一点,这是我想出的猴子补丁:

module ActionView
  module Helpers
    module TranslationHelper
      private
      def html_safe_translation_key?(key)
        true
      end
    end
  end
end

把它放在初始化器中,就是这样!适用于 Rails 3.2.6。仅将本地化文件中的文本标记为安全,而不是插值参数。

于 2012-07-27T12:44:02.750 回答