मुझे पृष्ठ अनुवाद बनाने के लिए कोई प्रोग्रामेटिक इंटरफ़ेस नहीं मिल रहा है। सभी तर्क Wagtail.contrib.simple_translation.views में SubmitTranslationView में लागू किए जा रहे हैं।
इसलिए प्रोग्रामेटिक रूप से उन तक पहुंचने का एकमात्र तरीका दृश्यों तक पहुंचने के अनुरोध का अनुकरण करना है। मैंने इसे Translate_page() नामक फ़ंक्शन में लपेटा है। किसी पृष्ठ का अनुवाद करने के लिए, हम इस फ़ंक्शन को इस प्रकार कॉल कर सकते हैं:-
page_ja = translate_page(user, page, "ja")
या हम वैकल्पिक पैरामीटर include_subtree:-
पास कर सकते हैं
page_ja = translate_page(user, page, "ja", include_subtree=True)
और फ़ंक्शन को इस प्रकार परिभाषित किया गया है:-
def translate_page(user, page, lang, include_subtree=False): locale, created = Locale.objects.get_or_create(language_code=lang) data = {"locales": [locale.id], "include_subtree": include_subtree} url = reverse( "simple_translation:submit_page_translation", kwargs={"page_id": page.id} ) factory = RequestFactory() request = factory.post(url) request.POST = data request.user = user get_response = lambda request: None middleware = SessionMiddleware(get_response) middleware.process_request(request) request.session.save() messages = FallbackStorage(request) setattr(request, "_messages", messages) SubmitPageTranslationView.model = type(page) SubmitPageTranslationView.as_view()(request, page_id=page.pk) page_translated = page.get_translations()[0].specific return page_translated
मेरे पास Translate_snippet() नामक एक अन्य फ़ंक्शन है। एकमात्र अंतर केवल सबमिट करने के लिए यूआरएल का है और कोई include_subtree पैरामीटर नहीं है।
हमारी सभी साइटों के लिए, हमारे पास एक सेटअप स्क्रिप्ट है जो स्वचालित रूप से कुछ पोस्ट और उनके अनुवाद को पॉप्युलेट करेगी ताकि डेवलपर मैन्युअल रूप से नमूना पृष्ठ बनाने के बजाय तुरंत काम करना शुरू कर सके।
हमारी पेज संरचना इस प्रकार है:-
HomePage ==> BlogIndexPage ==> BlogPage
और सेटअप स्क्रिप्ट निम्नलिखित कार्य करेगी:-
यह सब तब तक ठीक से काम करता है जब तक हम नई साइट स्थापित नहीं कर रहे हैं जहां पृष्ठ संरचना है:-
BlogIndexPage ==> BlogPage
इसलिए हमने होमपेज को छोड़ दिया (जो मुझे अब एक बुरा विचार लगता है लेकिन आइए इसे किसी अन्य विषय के लिए सहेजें) क्योंकि यह साइट मुख्य रूप से एक ब्लॉग है। सेटअप स्क्रिप्ट चलाने के बाद पहली बात जो मैंने नोटिस की, वह यह है कि ब्लॉग इंडेक्सपेज का अनुवाद करते समय हम पहले ही include_subtree पास कर चुके हैं, इसके बावजूद ब्लॉग पोस्ट का कोई अनुवाद नहीं किया गया।
मेरी पहली प्रतिक्रिया यह थी कि नए वैगटेल संस्करणों में कुछ बदलाव हो सकते हैं। हमारी अधिकांश साइटें कुछ साल पहले बनाई जा रही हैं और अभी भी वैगटेल 5 पर हैं, लेकिन इस नई साइट के लिए, हम वैगटेल 6 से शुरुआत करेंगे क्योंकि यह नवीनतम है।
लेकिन Simple_translation view.py के लिए वैगटेल के कमिट लॉग को देखने से पता चलता है कि कोड में आखिरी बदलाव तीन साल पहले हुआ था। और हम वैगटेल 5 और 6 के बीच कोड को मूल रूप से समान देख सकते हैं।
उपर्युक्त Translate_page फ़ंक्शन के साथ समस्या यह है कि यह किसी भी त्रुटि की जांच नहीं करता है। क्योंकि त्रुटियों को पकड़ने का मतलब है कि आपको कुछ त्रुटि स्ट्रिंग के लिए अनुरोध की प्रतिक्रिया को पार्स करना होगा। लेकिन कोड प्रवाह का पता लगाने से मैं एक ऐसे चरण पर पहुंच गया जहां मैं देख सकता हूं कि कोड निष्पादित नहीं हुआ है क्योंकि फॉर्म मान्य नहीं है।
प्रिंटिंग form.errors ने अमान्य लोकेल से संबंधित त्रुटि संदेश दिखाए। यह अजीब है क्योंकि हम ऊपर दिए गए Translate_page फ़ंक्शन में देख सकते हैं कि यदि यह अभी तक मौजूद नहीं है तो हम लोकेल बना रहे हैं।
और फॉर्म के self.fields["locales"].choices को प्रिंट कर रहा हूं, मुझे पता है कि रूट पेज का अनुवाद करते समय Translate_page() की पहली कॉल के दौरान विकल्प में लोकेल मौजूद था, लेकिन दूसरी बार कॉल करने पर विकल्प खाली था। BlogIndexPage का अनुवाद करें।
फॉर्म के कोड को पढ़ते हुए, लोकेशंस फ़ील्ड के विकल्पों को __init__ विधि में गतिशील रूप से सेट किया जाता है, जहां पहले से अनुवादित पृष्ठ का लोकेल हटा दिया जाएगा। यही कारण हो सकता है कि दूसरी कॉल में स्थान खाली था। लेकिन पेज का अभी तक अनुवाद नहीं किया गया है!
आइए इस प्रक्रिया को याद करें:-
और यहीं पर घंटों डिबगिंग के बाद प्रकाश बल्ब (?) आया। मूल स्क्रिप्ट में, हम पहले HomePage को ja में अनुवाद कर रहे हैं, और फिर BlogIndexPage को उसके सभी बच्चों के साथ अनुवाद कर रहे हैं। लेकिन इस नई स्क्रिप्ट में, रूट पेज BlogIndexPage है। इसलिए BlogIndexPage का दूसरी बार अनुवाद हो चुका है, जिसे हम Translate_page कहते हैं!
तो यही कारण है कि स्थानों के विकल्प खाली हो जाते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3