6

Uso de raíles 3. ¿Hay alguna manera fácil de decirle a I18n que respete la "seguridad html" de la cadena utilizada en la interpolación y que todas las cadenas traducidas html sean seguras de forma predeterminada? Así que si tengo este en.yml:¿Cómo hacer que la traducción de los rieles 3 I18n sea automáticamente segura?

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

Y uso t('user_with_name', :name => @user.name), consigo nombre de los usuarios html escapó, pero <em> y </em> se deja como está?

Respuesta

2

vieja pregunta, pero si alguien quiere conseguir esto, aquí está el parche mono que se me ocurrió:

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

Pon esto en un inicializadores y eso es todo! Funciona con Rails 3.2.6. Solo marca el texto de los archivos de localización como seguro, no los parámetros de interpolación.

+0

Parece ser la solución más fácil, necesita probarlo – tig

+0

Funciona en rieles 3.0.17 también. Estoy usando para que pueda poner y eacute; en archivos YML. Se molestan si mezclas latin-1 y UTF ... – mcr

+1

No es necesario ningún parche mono, ya que las variables interpoladas se escapan automáticamente. Ver la respuesta por @onurozgurozkan. Esa debería ser realmente la respuesta aceptada. – Magne

4

Cambie el nombre de user_with_name a user_with_name_html, luego los rieles sabrán que ha incluido html en el texto.

+2

Sé de esta manera, pero esta es una muy mala manera: 1) No desinfecta los parámetros de intepolación, así que de cualquier manera que deba hacer esto, o puedo entrar en los trozos 2) Tengo que agregar este prefijo 3) Como estoy escribiendo todos los xxx.ymls, entonces sé por qué, ¿para qué usar el prefijo? 4) ¡Quiero que esto funcione automáticamente! – tig

5

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

La guía oficial Carriles dice que usted puede utilizar las variables interpolados sin preocupación, ya que son html escapó de forma automática, a menos que se declara específicamente que sean String.html_safe.

De la guía:

interpolación escapa según sea necesario sin embargo. Por ejemplo, teniendo en cuenta:

en: 
    welcome_html: "<b>Welcome %{username}!</b>" 

puede pasar con seguridad el nombre de usuario según lo establecido por el usuario:

<%# This is safe, it is going to be escaped if needed. %> 
<%= t('welcome_html', username: @current_user.username %> 

cadenas seguro en el otro lado se interpolan pie de la letra.

+0

Esta debería ser la respuesta aceptada, ya que es correcta, y la forma más simple de resolver el problema. – Magne

Cuestiones relacionadas