6

Rayları kullanıyorum 3. İnterpolasyonda kullanılan dizgenin 'html güvenliğine' saygı göstermesi için I18n'ye söylenmenin kolay bir yolu var mı? Bu en.yml var öyleyse: olduğu gibiRaylar nasıl yapılır 3 I18n çeviri otomatik olarak güvenli midir?

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

ve ben kullanıcılar adı html kaçan olsun t('user_with_name', :name => @user.name) kullanın ama <em> ve </em> kaldı?

cevap

2

Eski soru, ama burada ben ile geldi maymun yaması:

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

bir başlatıcıları koy ve o kadar! Raylarla Çalışma 3.2.6. Yalnızca yerelleştirme dosyalarındaki metni enterpolasyon parametreleri değil, güvenli olarak işaretler.

+0

En kolay çözüm gibi görünüyor, test etmek gerekiyor – tig

+0

Raylar 3.0.17 üzerinde de çalışır. Ben kullanıyorum & eacute koyabilirsiniz ki; YML dosyaları içine. Eğer latin-1 ve UTF'yi karıştırırsanız üzülürler ... – mcr

+1

Araya girmiş değişkenler otomatik olarak kaçtığından, maymun yamalarına gerek yoktur. @onurozgurozkan'ın cevabına bakınız. Bu gerçekten kabul edilen cevap olmalı. – Magne

4

Adı user_with_name'dan user_with_name_html olarak değiştirin, daha sonra raylar metinde html eklediğinizi bilecektir.

+2

Bu şekilde biliyorum, ama bu çok kötü bir yoldur: 1) Bu birlikte yapmam gereken herhangi bir şekilde, ya da ben alabildiğine karşılıklı hesaplama paramitleri dezenfekte değil 2) Bu önek eklemek gerekiyor 3) Tüm xxx.ymls yazılarını yazarken, orada ne olduğunu bildiğimden neden öneki kullanmalıyım? 4) Bunun otomatik olarak çalışmasını istiyorum! – tig

5

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

resmi Raylar rehber onlar html otomatik karakterlidir beri özellikle String.html_safe olmalarını beyan sürece, endişe olmadan interpolated değişkenleri kullanabilirsiniz diyor. rehber itibaren

: gerçi gerektiği gibi

İnterpolasyon kaçar. Örneğin, verilen: Öte yandan

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

Güvenli dizeleri aynen interpole edilir: güvenle kullanıcı tarafından belirlenen kullanıcı adı geçebilir

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

. Birisi bunu başarmak istiyorsa

+0

Bu, kabul edilen yanıt, doğru olduğundan ve sorunu çözmenin en basit yolu olmalıdır. – Magne