簡體   English   中英

如何使軌道3 I18n翻譯自動安全?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM