[英]How to make rails 3 I18n translation automatically safe?
我使用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>
保留原樣?
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 %>
另一方面,安全字符串是逐字插入的。
將名稱從user_with_name
更改為user_with_name_html
,然后rails將知道您已在文本中包含html。
老問題,但如果有人想要實現這一點,這就是我提出的猴子補丁:
module ActionView
module Helpers
module TranslationHelper
private
def html_safe_translation_key?(key)
true
end
end
end
end
把它放在初始化器中就是這樣! 適用於Rails 3.2.6。 僅將本地化文件中的文本標記為安全,而不是插值參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.