मैं इस सवाल से पिछले कुछ महीनों से जूझ रहा था, लेकिन मैं ऐसी स्थिति में नहीं था कि मुझे पहले सभी संभावित विकल्पों का पता लगाने की जरूरत थी। अभी, मुझे ऐसा लग रहा है कि संभावनाओं को जानने और अपनी आगामी परियोजनाओं में उपयोग करने के लिए अपनी व्यक्तिगत पसंद बनाने का समय आ गया है।
मुझे पहले जिस स्थिति की तलाश है, उसका वर्णन करता हूं
मैं एक कंटेंट मैनेजमेंट सिस्टम को अपग्रेड / रिडेवलप करने वाला हूं, जिसका उपयोग मैं काफी समय से कर रहा हूं। हालाँकि, मुझे लग रहा है कि बहु भाषा इस प्रणाली में एक महान सुधार है। इससे पहले कि मैं किसी भी ढांचे का उपयोग नहीं करता था, लेकिन मैं आगामी परियोजना के लिए लारावल 4 का उपयोग करने जा रहा हूं। Laravel PHP को कोड करने के लिए एक क्लीनर तरीके का सबसे अच्छा विकल्प लगता है। Sidenote: Laraval4 should be no factor in your answer
। मैं अनुवाद के सामान्य तरीकों की तलाश कर रहा हूं जो प्लेटफ़ॉर्म / फ्रेमवर्क स्वतंत्र हों।
क्या अनुवाद किया जाना चाहिए
जैसा कि सिस्टम मैं देख रहा हूं कि उपयोगकर्ता के अनुकूल होने की आवश्यकता है जितना संभव हो अनुवाद का प्रबंधन करने का तरीका सीएमएस के अंदर होना चाहिए। अनुवाद फ़ाइलों या किसी html / php पार्स किए गए टेम्प्लेट को संशोधित करने के लिए एफ़टीपी कनेक्शन शुरू करने की आवश्यकता नहीं होनी चाहिए।
इसके अलावा, मैं अतिरिक्त टेबल बनाने की आवश्यकता के बिना कई डेटाबेस तालिकाओं का अनुवाद करने का सबसे आसान तरीका ढूंढ रहा हूं।
मैं खुद क्या लेकर आया था
जैसा कि मैं पहले से ही चीजों को खोज रहा हूं, पढ़ रहा हूं और कोशिश कर रहा हूं। मेरे पास कुछ विकल्प हैं। लेकिन मुझे अभी भी ऐसा महसूस नहीं होता है कि मैं वास्तव में जो चाह रहा हूं, उसके लिए एक सर्वोत्तम अभ्यास विधि तक पहुंच गया हूं। अभी, यह वही है जिसके साथ मैं आया हूं, लेकिन इस पद्धति के दुष्प्रभाव भी हैं।
- PHP पार्स्ड टेम्पलेट : टेम्पलेट सिस्टम को PHP द्वारा पार्स किया जाना चाहिए। इस तरह से मैं HTML में अनुवादित मापदंडों को सम्मिलित करने में सक्षम हूं, बिना टेम्पलेट्स को खोलने और उन्हें संशोधित किए बिना। इसके अलावा, PHP पार्स किए गए टेम्पलेट मुझे प्रत्येक भाषा के लिए एक सबफ़ोल्डर (जो मैंने पहले किया है) के बजाय एक पूर्ण वेबसाइट के लिए 1 टेम्पलेट रखने की क्षमता देता है। इस लक्ष्य तक पहुँचने की विधि स्मार्टी, टेम्प्लेटपावर, लारवेल्स ब्लेड या कोई अन्य टेम्प्लेट पार्सर हो सकती है। जैसा कि मैंने कहा कि यह लिखित समाधान के लिए स्वतंत्र होना चाहिए।
- डेटाबेस संचालित : शायद मुझे फिर से इसका उल्लेख करने की आवश्यकता नहीं है। लेकिन समाधान डेटाबेस संचालित होना चाहिए। CMS का उद्देश्य ऑब्जेक्ट ओरिएंटेड और MVC है, इसलिए मुझे स्ट्रिंग्स के लिए एक तार्किक डेटा संरचना के बारे में सोचना होगा। जैसा कि मेरे टेम्पलेट संरचित होंगे: टेम्प्लेट / नियंत्रक / View.php शायद यह संरचना सबसे अधिक समझ में आएगी
Controller.View.parameter
:। डेटाबेस तालिका में ये फ़ील्ड एक फ़ील्ड के साथ एक लंबा होगाvalue
। टेम्प्लेट के अंदर हम कुछ तरह की विधि का उपयोग कर सकते हैंecho __('Controller.View.welcome', array('name', 'Joshua'))
और पैरामीटर में शामिल हैWelcome, :name
। इस प्रकार परिणाम हो रहा हैWelcome, Joshua
। ऐसा करने का यह एक अच्छा तरीका है, क्योंकि पैरामीटर जैसे: नाम संपादक द्वारा समझना आसान है। - निम्न डेटाबेस लोड : निश्चित रूप से उपरोक्त सिस्टम डेटाबेस लोड का कारण होगा यदि ये तार चलते समय लोड किए जा रहे हैं। इसलिए मुझे एक कैशिंग प्रणाली की आवश्यकता होगी जो भाषा फ़ाइलों को प्रशासन वातावरण में संपादित / सहेजते ही पुनः प्रस्तुत कर दे। क्योंकि फाइलें उत्पन्न होती हैं, एक अच्छी फाइल सिस्टम लेआउट की भी जरूरत होती है। मुझे लगता है कि हम
languages/en_EN/Controller/View.php
या .इन के साथ जा सकते हैं , जो भी आपको सबसे अच्छा लगता है। शायद अनीनी भी अंत में तेज तर्रार है। इस fould में डेटा होना चाहिएformat parameter=value;
। मुझे लगता है कि यह ऐसा करने का सबसे अच्छा तरीका है, क्योंकि प्रत्येक दृश्य जो प्रदान किया गया है, उसमें मौजूद होने पर यह स्वयं की भाषा फ़ाइल शामिल कर सकता है। भाषा मापदंडों को तब एक विशिष्ट दृश्य में लोड किया जाना चाहिए और एक वैश्विक दायरे में नहीं होना चाहिए ताकि मापदंडों को एक-दूसरे को अधिलेखित करने से रोका जा सके। - डेटाबेस टेबल अनुवाद : यह वास्तव में वह चीज है जिसके बारे में मैं सबसे अधिक चिंतित हूं। मैं समाचार / पृष्ठ / आदि के अनुवाद बनाने का एक रास्ता खोज रहा हूँ। जितना जल्दी हो सके। प्रत्येक मॉड्यूल (उदाहरण के लिए के लिए दो तालिकाओं के बाद
News
औरNews_translations
) एक विकल्प है, लेकिन यह एक अच्छा प्रणाली पाने के लिए ज्यादा काम करने के लिए की तरह लगता है। बातें मैं के साथ एक पर आधारित है आया से एकdata versioning
प्रणाली मैं ने लिखा है: वहाँ एक डेटाबेस तालिका नाम हैTranslations
, इस तालिका का एक अद्वितीय संयोजन हैlanguage
,tablename
औरprimarykey
। उदाहरण के लिए: en_En / News / 1 (ID = 1 के साथ समाचार आइटम के अंग्रेजी संस्करण का संदर्भ)। लेकिन इस विधि के लिए 2 बड़े नुकसान हैं: सबसे पहले यह तालिका डेटाबेस में बहुत अधिक डेटा के साथ बहुत लंबा हो जाता है और दूसरी बात यह है कि तालिका को खोजने के लिए इस सेटअप का उपयोग करना एक नौकरी का नरक होगा। उदाहरण के लिए आइटम के एसईओ स्लग की खोज एक पूर्ण पाठ खोज होगी, जो बहुत गूंगा है। लेकिन दूसरी ओर: यह बहुत तेजी से हर तालिका में अनुवाद करने योग्य सामग्री बनाने का एक त्वरित तरीका है, लेकिन मुझे विश्वास नहीं है कि यह समर्थक शंकुओं पर हावी है। - फ्रंट-एंड वर्क : इसके अलावा फ्रंट-एंड को कुछ सोच की आवश्यकता होगी। निश्चित रूप से हम उपलब्ध भाषाओं को एक डेटाबेस में संग्रहीत करेंगे और (डी) उन लोगों को सक्रिय करेंगे जिनकी हमें आवश्यकता है। इस तरह से स्क्रिप्ट किसी भाषा का चयन करने के लिए एक ड्रॉपडाउन उत्पन्न कर सकती है और बैक-एंड स्वचालित रूप से निर्णय ले सकती है कि सीएमएस का उपयोग करके क्या अनुवाद किए जा सकते हैं। तब चुनी गई भाषा (उदाहरण के लिए en_EN) का उपयोग तब किया जाएगा जब भाषा फ़ाइल को देखने के लिए या वेबसाइट पर एक सामग्री आइटम के लिए सही अनुवाद प्राप्त करने के लिए।
तो, वे वहाँ हैं। मेरे विचार अब तक। वे अभी तक तारीखों आदि के लिए स्थानीयकरण के विकल्पों को भी शामिल नहीं करते हैं, लेकिन जैसा कि मेरा सर्वर PHP5.3.2 का समर्थन करता है + सबसे अच्छा विकल्प यहां बताए अनुसार इंटैल एक्सटेंशन का उपयोग करना है: http://devzone.zend.com/1500/internationalization-in -php-53 / - लेकिन यह विकास के किसी भी बाद के स्टेडियम में उपयोग किया जाएगा। अब मुख्य मुद्दा यह है कि किसी वेबसाइट में सामग्री के अनुवाद का सर्वोत्तम अभ्यास कैसे किया जाए।
यहाँ मैंने जो कुछ भी समझाया उसके अलावा, मेरे पास अभी भी एक और बात है, जो मैंने अभी तक तय नहीं की है, यह एक साधारण प्रश्न की तरह दिखता है, लेकिन वास्तव में यह मुझे सिरदर्द दे रहा है:
URL अनुवाद? हमें ऐसा करना चाहिए या नहीं? और किस तरीके से
इसलिए .. अगर मेरे पास यह url है: http://www.domain.com/about-us
और अंग्रेजी मेरी डिफ़ॉल्ट भाषा है। क्या http://www.domain.com/over-ons
मुझे अपनी भाषा के रूप में डच चुनने पर इस URL का अनुवाद करना चाहिए ? या हमें आसान सड़क पर जाना चाहिए और बस पृष्ठ की सामग्री को बदलना चाहिए /about
। आखिरी चीज एक वैध विकल्प नहीं लगती है क्योंकि यह एक ही URL के कई संस्करण उत्पन्न करेगा, सामग्री को अनुक्रमित करने से यह सही तरीके से विफल हो जाएगा।
http://www.domain.com/nl/about-us
इसके बजाय दूसरा विकल्प उपयोग कर रहा है । यह प्रत्येक सामग्री के लिए कम से कम एक अद्वितीय URL बनाता है। इसके अलावा दूसरी भाषा में जाना आसान होगा, उदाहरण के लिए http://www.domain.com/en/about-us
और प्रदान किया गया URL Google और मानव आगंतुकों दोनों के लिए समझना आसान है। इस विकल्प का उपयोग करते हुए, हम डिफ़ॉल्ट भाषाओं के साथ क्या करते हैं? क्या डिफ़ॉल्ट भाषा को डिफ़ॉल्ट रूप से चयनित भाषा को हटा देना चाहिए? इसलिए पुनर्निर्देशित http://www.domain.com/en/about-us
करना http://www.domain.com/about-us
... मेरी नजर में यह सबसे अच्छा समाधान है, क्योंकि जब सीएमएस केवल एक भाषा के लिए सेटअप होता है तो URL में इस भाषा की पहचान होने की कोई आवश्यकता नहीं है।
और तीसरा विकल्प दोनों विकल्पों में से एक संयोजन है: http://www.domain.com/about-us
मुख्य भाषा के लिए "भाषा-पहचान-कम" -URL ( ) का उपयोग करना। और sublanguages के लिए अनुवादित एसईओ स्लग के साथ एक URL का उपयोग करें: http://www.domain.com/nl/over-ons
औरhttp://www.domain.com/de/uber-uns
मुझे आशा है कि मेरा प्रश्न आपके सिर को क्रैक करता है, उन्होंने मुझे यकीन है कि फटा! इसने मुझे पहले से ही एक प्रश्न के रूप में यहाँ काम करने में मदद की। मुझे उन तरीकों की समीक्षा करने की संभावना दी है जो मैंने पहले इस्तेमाल किए हैं और मुझे अपने आगामी सीएमएस के लिए विचार हो रहा है।
पाठ के इस समूह को पढ़ने के लिए समय निकालने के लिए मैं आपको धन्यवाद देना चाहता हूं!
// Edit #1
:
मैं उल्लेख करना भूल गया: __ () फ़ंक्शन किसी दिए गए स्ट्रिंग का अनुवाद करने के लिए एक उपनाम है। इस पद्धति के भीतर स्पष्ट रूप से कुछ प्रकार की फ़ॉलबैक विधि होनी चाहिए जहाँ अभी तक अनुवाद उपलब्ध नहीं होने पर डिफ़ॉल्ट पाठ लोड किया जाता है। यदि अनुवाद गायब है, तो इसे या तो डाला जाना चाहिए या अनुवाद फ़ाइल को फिर से बनाया जाना चाहिए।