"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > الذعرة برمجيا إنشاء ترجمة الصفحة

الذعرة برمجيا إنشاء ترجمة الصفحة

تم النشر بتاريخ 2024-11-08
تصفح:137

Wagtail programmatically create page translation

لا أستطيع العثور على أي واجهة برمجية لإنشاء ترجمة للصفحة. يبدو أن جميع المنطق يتم تنفيذه في 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
  • ملء صفحة المدونة بعينات من المشاركات وإرفاقها ضمن صفحة BlogIndexPage
  • ترجمة BlogIndexPage باستخدام include_subtree=True

كل هذا يعمل بشكل جيد حتى نقوم بإعداد موقع جديد حيث تكون بنية الصفحة:-

BlogIndexPage ==> BlogPage

لذلك حذفنا الصفحة الرئيسية ( التي أعتقد أنها فكرة سيئة الآن ولكن دعونا نحفظها لموضوع آخر ) نظرًا لأن هذا الموقع عبارة عن مدونة بشكل أساسي. أول شيء لاحظته بعد تشغيل البرنامج النصي للإعداد هو عدم وجود ترجمة لمشاركات المدونة التي تم إنشاؤها، على الرغم من أننا مررنا بالفعل include_subtree عند ترجمة BlogIndexPage.

كان رد فعلي الأول هو أنه قد يكون هناك بعض التغييرات في إصدارات الذعرة الجديدة. تم إنشاء معظم مواقعنا منذ بضع سنوات مضت ولا تزال على الذعرة 5 ولكن بالنسبة لهذا الموقع الجديد، سنبدأ بالذعرة 6 نظرًا لأنها الأحدث.

ولكن بالنظر إلى سجلات التزام الذعرة لـ simple_translation view.py، فإن آخر تغييرات في الكود كانت قبل ثلاث سنوات. ويمكننا أن نرى الكود بشكل أساسي هو نفسه بين الذعرة 5 و6.

مشكلة وظيفة ترجمة_الصفحة أعلاه هي أنها لا تتحقق من وجود أي أخطاء. لأن اكتشاف الأخطاء يعني أنه يتعين عليك تحليل استجابة الطلب لبعض سلسلة الأخطاء. لكن تتبع تدفق التعليمات البرمجية يقودني إلى مرحلة حيث يمكنني رؤية عدم تنفيذ التعليمات البرمجية لأنه لم يتم التحقق من صحة النموذج.

أظهرت أخطاء طباعة النموذج رسائل خطأ تتعلق باللغة غير الصالحة. هذا أمر غريب لأنه يمكننا أن نرى في وظيفة Translator_page أعلاه أننا نقوم بإنشاء اللغة إذا لم تكن موجودة بعد.

وطباعة النموذج self.fields["locales"].choices أستطيع أن اللغة المحلية موجودة في الاختيار أثناء الاستدعاء الأول لـtranslator_page() عند ترجمة الصفحة الجذرية، لكن الاختيارات كانت فارغة عند الاتصال بها للمرة الثانية ترجمة BlogIndexPage.

قراءة كود النموذج، يتم تعيين اختيارات حقل اللغات ديناميكيًا في طريقة __init__، حيث ستتم إزالة لغة الصفحة التي تمت ترجمتها بالفعل. قد يكون هذا هو السبب وراء كون اللغة فارغة في المكالمة الثانية. لكن الصفحة لم تتم ترجمتها بعد!

دعونا نتذكر العملية:-

  • إنشاء صفحة فهرس المدونة
  • إرفاق صفحة فهرس المدونة بالصفحة الجذرية
  • ترجمة الصفحة الجذرية إلى جا
  • ملء صفحة المدونة وإرفاقها بصفحة BlogIndexPage
  • ترجمة BlogIndexPage إلى ja

وهذا هو المكان الذي جاء فيه المصباح الكهربائي (؟) بعد ساعات من التصحيح. في النص الأصلي، نقوم بترجمة HomePage إلى ja أولاً، ثم BlogIndexPage بكل أبنائها. ولكن في هذا البرنامج النصي الجديد، الصفحة الجذرية هي BlogIndexPage. لذا تمت ترجمة BlogIndexPage بالفعل في المرة الثانية التي نطلق عليها اسم "translate_page"!

ولهذا السبب تصبح خيارات اللغات فارغة.

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/k4ml/wagtail-programmatically-create-page-translation-2814?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3