6

मैं रेल का उपयोग करता हूं 3. क्या इंटरफ़ोलेशन में उपयोग की जाने वाली स्ट्रिंग के 'html safness' का सम्मान करने के लिए I18n को बताने का कोई आसान तरीका है और डिफ़ॉल्ट रूप से सभी अनुवादित स्ट्रिंग HTML को सुरक्षित बनाते हैं? तो अगर मैं इस en.yml है:रेलवे 3 I18n अनुवाद स्वचालित रूप से सुरक्षित कैसे करें?

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

और मैं 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 

एक initializers में इस रखो और काम हो गया! रेल 3.2.6 के साथ काम करता है। केवल स्थानीयकरण फ़ाइलों में टेक्स्ट को सुरक्षित के रूप में चिह्नित करता है, इंटरपोलेशन पैरामीटर नहीं।

+0

सबसे आसान समाधान लगता है, इसे जांचने की आवश्यकता है – tig

+0

रेल 3.0.17 पर भी काम करता है। मैं इसका उपयोग कर रहा हूं ताकि मैं रख सकूं; वाईएमएल फाइलों में। यदि आप लैटिन -1 और यूटीएफ मिश्रण करते हैं तो वे परेशान हो जाते हैं ... – mcr

+1

बिल्कुल बंदर पैच की आवश्यकता नहीं है, क्योंकि इंटरप्लाटेड चर स्वचालित रूप से बच निकले हैं। @onurozgurozkan द्वारा जवाब देखें। यह वास्तव में स्वीकार्य जवाब होना चाहिए। – Magne

4

बदलें user_with_name से user_with_name_html के नाम है, तो रेल पता चलेगा कि आप पाठ में एचटीएमएल शामिल किया है।

+2

मुझे इस तरह से पता है, लेकिन यह एक बहुत ही खराब तरीका है: 1) यह इंटिपोलेशन पैरा को स्वच्छ नहीं करता है, इसलिए किसी भी तरह से मुझे यह करना चाहिए, या मैं 2 में ट्रोबल्स में प्रवेश कर सकता हूं 2) मुझे यह उपसर्ग जोड़ना होगा 3) जैसा कि मैं सभी xxx.ymls लिख रहा हूं, मुझे पता है कि वहां क्या है, तो उपसर्ग का उपयोग क्यों करें ?? 4) मैं इसे स्वचालित रूप से काम करना चाहता हूं! – tig

5

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

सरकारी रेल गाइड आप चिंता के बिना अंतर्वेशित चर का उपयोग कर सकते हैं, क्योंकि वे एचटीएमएल स्वचालित रूप से भाग निकले हैं, जब तक आप विशेष रूप से उन्हें घोषित 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

संबंधित मुद्दे