2012-04-10 11 views
6

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

मैं इन सूचियों स्क्रीन पर उपयोगकर्ताओं की भाषा में प्रदर्शित करने के लिए में विकल्प की जरूरत है, मैं तरीके यह करने के लिए की एक जोड़ी देख सकते हैं:

  1. मॉडल में। मॉडल से पूछताछ करते समय, मैं उस भाषा को प्रदान कर सकता हूं जिसे मैं परिणामों को वापस लौटने की इच्छा करता हूं। यह हर जगह अनुवादों को उपयोग करने की अनुमति देगा कि मॉडल के डेटा को बिना परिवर्तन किए प्रदर्शित किया जाता है। हालांकि, इसका यह भी अर्थ है कि मेरे उदाहरण में प्रांत मॉडल (साथ ही अन्य सभी एप्लिकेशन मॉडल) अब भाषा अनुवाद करने के तरीके को जानने की जरूरत है।
  2. नियंत्रक में। मैं सामान्य रूप से नियंत्रक कार्रवाई में मॉडल से पूछताछ कर सकता हूं और फिर 'ट्रांसलेटर' ऑब्जेक्ट बना सकता हूं जिसे मैं कार्रवाई को पूरा करने से पहले परिणाम पास कर सकता हूं। यह इंगित करेगा कि प्रत्येक नियंत्रक कार्रवाई संभावित रूप से उसी अनुवाद कोड को डुप्लिकेट कर देगी, जो DRY सिद्धांत का उल्लंघन करती है।
  3. दृश्य में। चूंकि आवेदन की प्रस्तुति आम तौर पर विचारों में मौजूद होने की उम्मीद है, और उपयोगकर्ता की भाषा प्रणाली के व्यावसायिक तर्क को प्रभावित नहीं करती है, इसलिए एक तर्क दिया जा सकता है कि भाषा अनुवाद यहां हैं। विशेष रूप से इस बात पर विचार करते हुए कि एक पृष्ठ में स्थैतिक सामग्री भी हो सकती है जिसे अनुवादित करने की आवश्यकता होगी। इसका नकारात्मक पक्ष यह है कि यह कुछ हद तक विचारों को जटिल करेगा, खासतौर पर सामने वाले डिजाइनरों के लिए जिन्हें नए अनुवाद कोड के आसपास काम करना होगा।

क्या वेब अनुप्रयोगों के लिए एमसीवी पैटर्न में पाठ अनुवाद कहां से एक स्वीकार्य सर्वोत्तम अभ्यास है? क्या यह बिल्कुल बदलता है अगर मैं पृष्ठ लोड समय के बजाय एक AJAX कॉल के माध्यम से चयन सूची विकल्प लोड करना चाहता था?

सहायता के लिए धन्यवाद!

उत्तर

1

यदि आपको अपने यूआई का हिस्सा अनुवाद करने की आवश्यकता है, तो मैं एक सहायक विधि तैयार करूंगा जो संसाधन फ़ाइल को पढ़ेगा और उन संसाधनों के लिए अनुवादित स्ट्रिंग आउटपुट करेगा। जैसे

@Translate("NewUserHeading") 

तो यूआई के संबंध में, यूआई में इसे संभालने का अर्थ है।

यदि किसी डेटा पर आप जिस डेटा का अनुवाद करने जा रहे हैं, उसे फ़्लैश क्लाइंट या मोबाइल ऐप में दिखाया जा सकता है, तो इसे सर्वर द्वारा अनुवादित किया जाना चाहिए और इसके पास आपके एमवीसी एप्लिकेशन से कुछ लेना देना नहीं चाहिए।

0

ईमानदारी से, किसी डेटाबेस के साथ किसी भी बातचीत को मॉडल में संभाला जाना चाहिए, और मॉडल में ही यही एकमात्र चीज है। उस डेटा को व्याख्या/व्यवस्थित करना नियंत्रक में संभाला जाना चाहिए। मुझे लगता है कि अधिक जानकारी की आवश्यकता होगी कि यह अनुवाद कहां से आ रहा है और यह वास्तव में ठोस जवाब देने के लिए कैसे काम करता है।

+0

मुझे लगता है कि यह वसा मॉडल/पतला नियंत्रकों और पतला मॉडल/वसा नियंत्रकों के बीच बहस को खोल देगा। क्या मैं सही हूं कि आपके पास नियंत्रकों में आपका व्यावसायिक तर्क होगा? –

+1

@WallyLawless कभी भी किसी ने वसा नियंत्रकों के लिए बहस नहीं सुना। नियंत्रक देखने के लिए मॉडल और मॉडल देखने के लिए अनुवाद करने वाली एक पतली परत हैं। नियंत्रकों को आमतौर पर पुन: उपयोग नहीं किया जाता है, वे केवल गोंद हैं, गोंद के साथ अपना कोड भरें नहीं। –

5

इसे संभालने के लिए सबसे अच्छी जगह दृश्य में है। आपका प्रश्न केवल डेटाबेस से गतिशील डेटा का संदर्भ देता है, लेकिन आपको अपने विचारों में स्थिर जानकारी को भी संभालना होगा। उन दोनों को एक ही स्थान पर संभालने के लिए सर्वश्रेष्ठ। कई भाषाओं को संभालने के लिए एमवीसी में एक आम प्रथा संसाधन संसाधन, प्रत्येक भाषा के लिए अलग-अलग विचार, या दोनों का संयोजन है। डेटाबेस संसाधन तारों से जानकारी के लिए अच्छी तरह से काम करेगा। आप सूची में विकल्पों के लिए डेटाबेस में टोकन स्टोर करेंगे (टोकन अंग्रेजी अनुवाद हो सकता है) और दृश्य निर्दिष्ट देश/लोकेल के लिए संसाधन से उपयुक्त अनुवाद प्राप्त करेगा। this blog post में इस दृष्टिकोण पर एक अच्छी विस्तृत व्याख्या है।

0

दृश्य केवल संसाधन फ़ाइल से स्ट्रिंग प्रदर्शित करेगा। लोकेल के लिए सही संसाधन फ़ाइल सहित इसे करना चाहिए। वेब अनुप्रयोगों में, यह अक्सर एक एकल भाषा जेएस फ़ाइल प्रति यूआई स्ट्रिंग को परिभाषित करती है, उदाहरण के लिए, strings.en-us.js, strings.pt-br.js और इसी तरह।

कुछ तार सर्वर से गतिशील रूप से आते हैं, नियंत्रक को इसके बारे में जानने की आवश्यकता नहीं है, मॉडल को केवल स्थानीय तारों को पकड़ना चाहिए और वापसी डेटा अनुरोध के हिस्से के रूप में होनी चाहिए।

तो यह या तो दृश्य में है (यदि यह स्थिर है) या मॉडल में, (यदि यह गतिशील है)। नियंत्रकों को सिर्फ दृश्य से मॉडल और मॉडल से देखने के लिए डेटा का अनुवाद करना चाहिए

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