لا أستطيع العثور على أي واجهة برمجية لإنشاء ترجمة للصفحة. يبدو أن جميع المنطق يتم تنفيذه في SubmitTranslationView في wagtail.contrib.simple_translation.views.
لذا فإن الطريقة الوحيدة للوصول إليها برمجيًا هي محاكاة طلب الوصول إلى طرق العرض. لقد قمت بتغليف هذا في وظيفة تسمىترجم_الصفحة(). لترجمة صفحة، يمكننا استدعاء هذه الوظيفة على النحو التالي:-
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
لدي وظيفة أخرى تسمى Translation_snippet (). والفرق الوحيد هو عنوان URL المطلوب إرساله فقط ولا توجد معلمة include_subtree.
بالنسبة لجميع مواقعنا، لدينا برنامج نصي للإعداد يقوم تلقائيًا بملء بعض المنشورات وترجمتها حتى يتمكن المطور من بدء العمل على الفور بدلاً من الاضطرار إلى إنشاء نماذج للصفحات يدويًا.
هيكل صفحتنا كالتالي:-
HomePage ==> BlogIndexPage ==> BlogPage
وسيقوم البرنامج النصي للإعداد بما يلي:-
كل هذا يعمل بشكل جيد حتى نقوم بإعداد موقع جديد حيث تكون بنية الصفحة:-
BlogIndexPage ==> BlogPage
لذلك حذفنا الصفحة الرئيسية ( التي أعتقد أنها فكرة سيئة الآن ولكن دعونا نحفظها لموضوع آخر ) نظرًا لأن هذا الموقع عبارة عن مدونة بشكل أساسي. أول شيء لاحظته بعد تشغيل البرنامج النصي للإعداد هو عدم وجود ترجمة لمشاركات المدونة التي تم إنشاؤها، على الرغم من أننا مررنا بالفعل include_subtree عند ترجمة BlogIndexPage.
كان رد فعلي الأول هو أنه قد يكون هناك بعض التغييرات في إصدارات الذعرة الجديدة. تم إنشاء معظم مواقعنا منذ بضع سنوات مضت ولا تزال على الذعرة 5 ولكن بالنسبة لهذا الموقع الجديد، سنبدأ بالذعرة 6 نظرًا لأنها الأحدث.
ولكن بالنظر إلى سجلات التزام الذعرة لـ simple_translation view.py، فإن آخر تغييرات في الكود كانت قبل ثلاث سنوات. ويمكننا أن نرى الكود بشكل أساسي هو نفسه بين الذعرة 5 و6.
مشكلة وظيفة ترجمة_الصفحة أعلاه هي أنها لا تتحقق من وجود أي أخطاء. لأن اكتشاف الأخطاء يعني أنه يتعين عليك تحليل استجابة الطلب لبعض سلسلة الأخطاء. لكن تتبع تدفق التعليمات البرمجية يقودني إلى مرحلة حيث يمكنني رؤية عدم تنفيذ التعليمات البرمجية لأنه لم يتم التحقق من صحة النموذج.
أظهرت أخطاء طباعة النموذج رسائل خطأ تتعلق باللغة غير الصالحة. هذا أمر غريب لأنه يمكننا أن نرى في وظيفة Translator_page أعلاه أننا نقوم بإنشاء اللغة إذا لم تكن موجودة بعد.
وطباعة النموذج self.fields["locales"].choices أستطيع أن اللغة المحلية موجودة في الاختيار أثناء الاستدعاء الأول لـtranslator_page() عند ترجمة الصفحة الجذرية، لكن الاختيارات كانت فارغة عند الاتصال بها للمرة الثانية ترجمة BlogIndexPage.
قراءة كود النموذج، يتم تعيين اختيارات حقل اللغات ديناميكيًا في طريقة __init__، حيث ستتم إزالة لغة الصفحة التي تمت ترجمتها بالفعل. قد يكون هذا هو السبب وراء كون اللغة فارغة في المكالمة الثانية. لكن الصفحة لم تتم ترجمتها بعد!
دعونا نتذكر العملية:-
وهذا هو المكان الذي جاء فيه المصباح الكهربائي (؟) بعد ساعات من التصحيح. في النص الأصلي، نقوم بترجمة HomePage إلى ja أولاً، ثم BlogIndexPage بكل أبنائها. ولكن في هذا البرنامج النصي الجديد، الصفحة الجذرية هي BlogIndexPage. لذا تمت ترجمة BlogIndexPage بالفعل في المرة الثانية التي نطلق عليها اسم "translate_page"!
ولهذا السبب تصبح خيارات اللغات فارغة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3