5

मैं अंतर्राष्ट्रीयकरण का उपयोग करने के लिए सर्वोत्तम प्रथाओं के लिए कुछ सुझाव और सलाह ढूंढ रहा हूं। मैंने चारों ओर खोज की है, लेकिन मैं जो पढ़ता हूं उससे मैं संतुष्ट नहीं हूं। I18n के लिए yml फ़ाइलों का उपयोग करने पर ध्यान केंद्रित किए गए अधिकांश लेख जो मेरी स्थिति में काम नहीं करेंगे।डेटाबेस टेबल के लिए रेल 3 I18n

मेरे पास वर्तमान में अंग्रेजी में टेक्स्ट के साथ कई डेटाबेस टेबल हैं। इनमें से कुछ तालिकाओं में टेक्स्ट फ़ील्ड हैं जो कुछ वाक्यों में लंबे हैं और कुछ पाठ के 6+ पैराग्राफ हैं। मैं इन क्षेत्रों को स्पेनिश में भी रखना चाहता हूं।

दृष्टिकोण मैं वर्तमान पर विचार कर रहा हूँ I18n सक्रिय रिकॉर्ड मणि का उपयोग करें और 1 अनुवाद तालिका कि एप्लिकेशन को एप्लिकेशन

class CreateTranslations < ActiveRecord::Migration 
    def self.up 
     create_table :translations do |t| 
     t.string :locale 
     t.string :key 
     t.text :value 
     t.text :interpolations 
     t.boolean :is_proc, :default => false 

     t.timestamps 
     end 
    end 

    def self.down 
     drop_table :translations 
    end 
    end 

में सभी अनुवाद के लिए इस्तेमाल करेगा है यह सबसे अच्छा तरीका है आगे बढ़ने के लिए?

एक ओर सभी अनुवाद अच्छी तरह से एक तालिका में संग्रहीत किए जाएंगे। दूसरी तरफ, जब भी उपयोगकर्ता I18n सामग्री के लिए डेटाबेस से पूछताछ करता है। ऐप कुंजी के लिए मूल तालिका से पूछताछ करेगा, और उसके बाद अनुवाद तालिका भी पूछेगा। एक और चिंता यह है कि अनुवाद तालिका भारी होगी और इसमें बड़ी संख्या में पंक्तियां होंगी क्योंकि यह ऐप के लिए सभी अनुवादों को संग्रहित करेगी (अनुभाग शीर्षक [कुछ शब्द] से पाठ के सभी पृष्ठों तक।

कोई जानकारी सराहना की है। धन्यवाद

+0

आप यह भी एक https://github.com/tr8n/tr8n चेकआउट कर सकते हैं। –

उत्तर

6

डीबी में अनुवाद संग्रहीत करना बहुत खराब नहीं है। बड़ी टेबल से डरो मत - इसके लिए डेटाबेस बनाए जाते हैं! बस सुनिश्चित करें कि आपकी अनुक्रमणिका सही तरीके से कॉन्फ़िगर की गई हैं और आप जो कुछ भी कर सकते हैं उसे कैश कर सकते हैं।

एक और तेज़ और संभवतः बेहतर समाधान I18n के लिए बैकएंड के रूप में रेडिस का उपयोग करना है। http://guides.rubyonrails.org/i18n.html#using-different-backends और http://railscasts.com/episodes/256-i18n-backends देखें।

जहां भी आप अनुवादों को स्टोर करते हैं, वहां इंटरपोलेशंस को प्रबंधित करने की कोई आवश्यकता नहीं है क्योंकि I18n लाइब्रेरी इसे काफी अच्छी तरह से संभालती है (जब तक कि आप वास्तव में कुछ कस्टम नहीं कर रहे हों)।

-1

एकमात्र लाभ आपको डेटाबेस पर स्टोर करना होगा यदि आप इसे फ्लाई पर संपादित करने का नाटक करते हैं। तो अगर यह आपका इरादा था, तो idlefingers सुझाव जाने का एक तरीका है। लेकिन यदि आप इसके बारे में सोच नहीं रहे हैं, तो एक सादा वाईएमएल इंटरफ़ेस, टेबल नाम, फ़ील्ड नाम इत्यादि का अनुवाद करने का काम करेगा।

यदि आप अपने डेटा को एक से अधिक भाषा के साथ स्टोर करना चाहते हैं, तो उन्हें खर्च करना चाहिए एक विशिष्ट डेटाबेस मॉडलिंग के साथ कुछ समय।

आप मूल रूप से दो तरह से यह कर सकते हैं: - खेतों आप एक से अधिक भाषा में आवश्यकता डुप्लिकेट - डुप्लिकेट डाला भाषा के साथ itens और झंडा, आप भी बेहतर ट्रैक करने के लिए सभी प्रतियों पर मूल संस्करण इंगित कर सकते हैं उन्हें।

+2

डेटाबेस में इसे संग्रहीत करने से भाषा अपडेट के लिए पुश करने और खींचने की आवश्यकता कम हो जाती है, यह भी बनाता है ताकि आपको एक नई फ़ाइल को रोल करने की आवश्यकता न हो क्योंकि आप एक भाषा फ़ाइल अपडेट करते हैं। यह "फ्लाई पर संपादन" के साथ कुछ भी नहीं है, यह उन सभी अनुवादों के साथ करना है जिन्हें डेवलपर्स द्वारा प्रबंधित करने की आवश्यकता नहीं है। अगर मुझे लगातार एक अनुवादक के लिए एक भाषा अद्यतन करना पड़ा, तो मुझे बहुत परेशान होना पड़ेगा और व्यस्त नहीं होगा। कुछ लोग कॉपीकोप्टर पसंद करते हैं ... –

+0

कोड को अनुवाद से बाहर रखने का विकल्प चुनकर, आप अनुवाद परिवर्तनों में कोड परिवर्तनों के संबंधों को खो देते हैं। यह एक समस्या हो सकती है या नहीं भी हो सकती है, यह सब इस बात पर निर्भर करता है कि आपकी साइट कितनी बदलती है।साथ ही, यदि आप किसी कारण से वापस जाना चाहते हैं और बदलाव को वापस करना चाहते हैं, तो आप संशोधन प्रणाली पर संस्करण की जांच करके इसे नहीं कर सकते हैं, आपको अपने डेटाबेस में अनुवाद सामग्री से निपटना होगा। यहां तक ​​कि जिनके पास सामान का अनुवाद करने के लिए कुछ वेब एप्लिकेशन हैं (वर्डप्रेस एक अच्छा उदाहरण है, उबंटू प्रोजेक्ट एक और है) वे कुछ बिंदु पर कोड को संस्करण नियंत्रण में उत्पन्न करते हैं। –

+0

आपके अनुवादों को एक बार परिभाषित करने के बाद कोड के साथ नहीं बदला जाना चाहिए, यह तब तक रहना चाहिए जब तक कि कोड हटाया न जाए या कोड जोड़ा जाए। इस तरह के कठोर रिफैक्टरिंग में समस्याएं होती हैं और फिर आपको उन समस्याओं को रोकने के लिए अपने परीक्षणों में उनको गुंजाइश करने की आवश्यकता होती है। आईएमओ अगर आप लगातार अपनी अनुवाद कुंजी बदल रहे हैं तो आप इसे गलत कर रहे हैं। बेस सिस्टम अनुवाद कुछ भी नहीं है कि आप किसी उत्पादन साइट पर अनुवाद कैसे संभालते हैं। मैं जो कह रहा हूं वह है कि आप अपनी नाव में ActiveModel या ActiveSupport के बेस सिस्टम अनुवादों को फेंक न दें। जरूरत के साथ उनके साथ सौदा करें। –

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