6

난 레일 3을 사용합니다. 보간법에 사용되는 문자열의 'html safness'를 존중하고 모든 번역 된 문자열 html을 기본적으로 안전하다고 말하는 쉬운 방법이 있습니까? 나는이 en.yml이 그래서 경우 : 그대로레일을 만드는 법 3 I18n 번역은 자동으로 안전합니까?

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

내가, 내가 사용자 이름 HTML 탈출 얻을 t('user_with_name', :name => @user.name) 사용하지만, <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에서 작동합니다. 현지화 파일의 텍스트 만 보간 매개 변수가 아닌 안전으로 표시합니다.

+0

가장 쉬운 해결책 인 것 같습니다. 테스트해야합니다. – tig

+0

레일 3.0.17에서도 작동합니다. 내가 넣을 수 있도록 사용하고 있습니다. YML 파일로. 그들은 latin-1과 UTF를 혼합하면 화가납니다. – mcr

+1

보간 된 변수가 자동으로 이스케이프되므로 원숭이 패치가 필요 없습니다. @onurozgurozkan의 답변보기. 그것은 정말로 받아 들여진 대답이어야합니다. – Magne

4

user_with_name에서 user_with_name_html으로 이름을 변경하면 레일즈에 텍스트에 html이 포함되었다는 것을 알 수 있습니다.

+2

나는이 방법에 대해 알고있다. 그러나 이것은 매우 나쁜 방법이다. 1) intepolation 매개 변수를 위생적으로 처리하지 못하므로 어떤 식 으로든이 작업을 수행해야한다. 또는 trobles에 넣을 수있다. 2)이 접두어를 추가해야한다. 3) 내가 xxx.ymls를 모두 쓰고 있기 때문에 거기에 무엇이 있는지보다 왜 접두어를 사용합니까? 4) 자동으로 작동되기를 원합니다! – tig

5

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

공식 레일 가이드는 그들이 HTML을 자동으로 탈출 때문에 특별히 String.html_safe 수를 선언하지 않는 한, 걱정없이 보간 변수를 사용할 수 있습니다 말한다. 가이드에서

:하지만 필요에 따라

보간 이스케이프합니다. 예를 들어, 주어진 : 반면에

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

안전 문자열이 그대로 보간 : 안전하게 사용자가 설정 한 사용자 이름을 전달할 수 있습니다

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

. 누군가가 이것을 달성하고자하는 경우

+0

이 대답은 올바른 대답이어야하며 문제를 해결하는 가장 간단한 방법입니다. – Magne