كيف تعلمت 12 لغة - في ليلة واحدة

استخدام الأحدث من التعلم الآلي وبعض التخزين المؤقت الذكي

طريق طويل إلى اللغات

لقد كنت أتحرك حول فكرة لبعض الوقت الآن بدت مثيرة للاهتمام وكذلك صعبة: ما الذي سيكون ضروريًا لتحقيق دعم متعدد اللغات لتطبيق الويب الخاص بي بأقل قدر ممكن من الصيانة؟ ضع في اعتبارك أيضًا التكاليف كعائق رئيسي (لا يعرض هذا الموقع أي إعلانات ولا يستخدم أي تتبع على الإطلاق ، لذلك لا توجد أرباح واردة هنا) ، كيف سيبدو الحل الصالح؟

الخطة

كل شيء يبدأ وينتهي باستخدام محرك الترجمة. بفضل استخدام Ubuntu كواحد من برامج التشغيل اليومية لدي ، اكتشفت ذات مرة تطبيقًا صغيرًا لطيفًا في متجر التطبيقات يسمى "Argos translate" ، وهو محرك ترجمة مفتوح المصدر مبني على أحدث طرازات ML التي تشبه تلك التي تشغل DeepL . إذا كنت لا تعرف DeepL ، فهذا مترجم رائع لاستخدامه مجانًا على موقعه على الويب.

لكن بالعودة إلى Argos: بعد إلقاء نظرة على المستودع ذي الصلة ، رأيت أن هناك أيضًا OSS python-lib متاحًا ، والذي يناسب بشكل جيد بيئة ذاتية الاستضافة. بعد اللعب لفترة قصيرة من الوقت ، قررت إلقاء نظرة على بعض المترجمين عبر عروض SaaS ، حيث أن عملية الدمج الكاملة لترجمة argos لم تنجح حقًا كما كنت أتمنى.

لذلك قمت بتعيين خدمة أخرى ، الترجمة السحابية من GCP والتي تقدم 500000 حرف مجانًا شهريًا ثم تتقاضى بعض المال مقابل كل 1000000.

الأمر كله يتعلق بالتخزين المؤقت

بفضل إعداد Next.js مع ISG (إنشاء موقع تزايدي) يمكنني استدعاء الترجمات لكل صفحة عند الطلب ، مما يبسط التخطيط كثيرًا لأنه لا يلزم تنفيذ عملية نشر واحدة مع جميع الترجمات في وقت واحد.

ما زلت غير متأكد من كيفية التعامل مع التخزين المؤقت للسلاسل المترجمة. بالتأكيد ، يمكن لشبكة الحافة الخاصة بـ Vercel (حيث يتم استضافة PWA هذا) الاستفادة من هذه المهمة تمامًا. لكنني أردت أن تكون عمليات النشر مستقلة عن الترجمات. وهذا هو سبب إنشاء طبقة إضافية واحدة من التخزين المؤقت عبر مثيل Firestore بسيط ، يتم استضافته أيضًا على GCP.

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

رجل واحد ، أكثر من 12 لغة

اللغات (حاليًا) المدعومة هي:

  • "en": الإنجليزية
  • "de": الألمانية
  • "fr": الفرنسية
  • "es": الإسبانية
  • "eo": اسبرانتو
  • "el": اليونانية
  • "ja": اليابانية
  • "ru": الروسية
  • "مرحبًا": الهندية
  • "هو": عبري
  • "tr": التركية
  • "af": الأفريكانية
  • "ar": العربية
  • "كو": كوري

لاختبار المتغيرات المختلفة ، ضع رمز اللغة ببساطة بعد عنوان url الأساسي. على سبيل المثال: "https://flaming.codes/fr". وهذا كل شيء!

تلخيصًا للتنفيذ الخاص بي ، يبدو الإعداد كما يلي:

  • يتم إنشاء كل صفحة بشكل ثابت كل 4 ساعات على الأقل ، ولكن عند الطلب فقط ؛ هذا يعني أن مهمة ترجمة جديدة تتم كل 4 ساعات على الأكثر لموقع معين
  • يتم تحميل الترجمات نفسها أولاً من Firestore ؛ فقط في حالة عدم توفر أي شيء ، يتم ترجمة السلاسل + التخزين المؤقت في Firestore

يعمل هذا الإعداد جيدًا لدرجة أنني لن أستخدم أي ترجمات بالطريقة الكلاسيكية ، على سبيل المثال إنشاء ملفات json يدويًا تحافظ على أزواج قيم المفاتيح. سأستخدم Cloud Translation API لكل ما يحتاج إلى تدويل ، مما يجعلها ديناميكية بالكامل. بفضل هذه التغييرات ، يحتوي PWA على حوالي 430 صفحة حتى وقت الكتابة.

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

  • Tom