6

私はレール3を使用しています。補間に使用される文字列の 'html safness'を尊重し、すべての翻訳された文字列htmlをデフォルトで安全にするようにI18nに指示する簡単な方法はありますか?だから私はこのen.yml持っている場合:レールを作る方法3 I18n翻訳は自動的に安全ですか?

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

を、私はt('user_with_name', :name => @user.name)を使用し、私は、ユーザーがHTMLをエスケープ名前を取得、しかしあるよう<em></em>が残っていますか?

答えて

2

旧質問、しかし、ここで私が思い付いたモンキーパッチです:

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

は初期化子でこれを入れて、それはそれです! Rails 3.2.6で動作します。 ローカライゼーションファイル内のテキストには、補間パラメータではなく、安全であるとマークします。それは私がこのプレフィックスを追加する必要があります)intepolation paramsはサニタイズので、私はこれを行う必要がありますどのような方法、または私はtrobles 2に入ることができません) 1:私はこの方法を知っているが、これは非常に悪い方法です

+0

最も簡単な解決策であると思われます。テストする必要があります – tig

+0

レール3.0.17でも動作します。私は&eacuteを置くことができるように使用しています。 YMLファイルに変換します。あなたがラテン1とUTFを混ぜると、彼らはうんざりします... – mcr

+1

補間された変数は自動的にエスケープされるので、サルのパッチはまったく必要ありません。 @onurozgurozkanの答えを見てください。それは本当に受け入れられる答えでなければなりません。 – Magne

4

user_with_nameからuser_with_name_htmlに名前を変更すると、テキストにhtmlが含まれていることがわかります。

+2

3)私はすべてのxxx.ymlsを書いているので、そこにあるものを知っているよりも、なぜプレフィックスを使うのですか? 4)これは自動的に動作します! – tig

5

http://guides.rubyonrails.org/i18n.html#using-safe-html-translations

公式Railsのガイドでは、特に彼らがString.html_safeであることを宣言しない限り、彼らはHTMLは、自動的にエスケープされているので、あなたが、気にせずに補間変数を使用することができますと言います。

ガイドから:

補間は必要に応じてエスケープします。例えば、与えられた:

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

安全な文字列がそのまま補間されます。誰かがこれを達成したい場合

+0

これは正解であるため、受け入れられた答えであり、問​​題を解決する最も簡単な方法です。 – Magne

関連する問題