كيف يعمل التعريب في Netflix - الترجمة

مرحبا يا هبر! أقدم إليكم ترجمة المادة "تقنيات التعريب في Netflix" التي كتبها فريق Netflix حول عمليات التعريب الداخلي والبرامج المصممة خصيصًا لهذا الغرض.

صورة

يعتمد برنامج التوطين في Netflix على ثلاثة مبادئ: اللغويات التي لا تشوبها شائبة ، والأجواء المتناغمة في الفريق ، والتقنيات المتقدمة.

نحن لسنا خائفين من تجربة وتجربة عمليات وأدوات جديدة ، لمعارضة المعايير المقبولة عمومًا في التوطين - وبفضل هذا وصلنا حتى الآن! العمل في Netflix يعني كونك رائدًا.

في هذه المقالة ، نتحدث عن تقنيتين ستقودنا إلى السيطرة على العالم ... المزيد تحت الخفض.

مستودع سلسلة Netflix العالمية


لم ينجح Netflix لأننا نصنع محتوى عالي الجودة ، ولكن لأننا نقدم هذا المحتوى. معظم النجاح عبارة عن واجهة مستخدم سهلة الاستخدام وسهلة الاستخدام (UI). يتوفر Netflix على منصات مختلفة: إصدار الويب و Apple iOS و Google Android و Sony PlayStation و Microsoft Xbox و Sony TVs و Panasonic وما إلى ذلك. كل من هذه المنصات لديها متطلباتها الخاصة للاستيعاب ، وهو تحد خطير لفريقنا.

فيما يلي بعض الأمثلة التي تتطلب توطين واجهة المستخدم:

  • أضف لغة جديدة
  • إضافة ميزات جديدة
  • التغييرات في النصوص والبيانات الموجودة

الترجمة النصية لواجهة المستخدم ليست عملية تلقائية ؛ أثناء عملية الترجمة ، يعمل مديرو الترجمة المحلية مع فريق التطوير من أجل فهم ما ينتمي هذا الخط أو هذا الخط بوضوح ، واللغات التي يجب ترجمتها إليها ، وبأي فترة زمنية يجب توفير الملفات المترجمة. يصبح الأمر أكثر تعقيدًا عندما يتم تطوير العديد من الميزات بشكل متوازٍ وتشغيلها في فروع Git مختلفة.

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

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

لحل هذه المشكلات ، قمنا بتطوير مستودع سلسلة UI عالمي يسمى مستودع السلسلة العالمي ؛ يتم تخزين السلاسل المترجمة هنا ، والتي يتم استبدالها في البيئة لتنفيذ التعليمات البرمجية. قمنا بدمج مستودع السلسلة العالمية في عملية التعريب ، بحيث يكمل كل منهما الآخر.

مستودع السلسلة العامة يفصل بين حزم الترجمة ومساحة الاسم (العناصر النائبة). تقوم حزمة التعريب بتخزين جميع البيانات بسطر بكل اللغات. العناصر النائبة هي عناصر نائبة للحزم التي يعمل عليها الفريق. أثناء التطوير ، يتم استخدام العناصر النائبة القياسية. سير العمل يشبه هذا:

  1. يقوم المطور بإجراء تغييرات على إصدار اللغة الإنجليزية من السلسلة في الحزمة (في مساحة اسم العنصر النائب)
  2. تبدأ عملية الترجمة تلقائيًا
  3. اللغويون يكملون الترجمة
  4. يقوم المترجمون بتوفير مجموعات العناصر النائبة

عند حدوث تكامل مع مستودع تخزين سلسلة عمومية ، هناك نوعان من سلوك التطبيق:

  • في وقت التشغيل: يسمح لك بإجراء تغييرات بسرعة على واجهة المستخدم
  • أثناء التجميع: استخدام مستودع Global String Repository بشكل منفصل للترجمة ، وحزم البيانات مع التجميع (build)

يتيح مستودع Global String Repository التكامل خلال مرحلة البناء من خلال توفير الوصول إلى البيانات المترجمة من خلال واجهة برمجة تطبيقات REST.

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

مثل Netflix ، يحتوي Global String Repository على بنية خدمات ميكروية. Microservice هو تطبيق ويب Java (مطبق في Apache Cassandra و ElasticSearch) يتم استضافته في ثلاث مناطق AWS. نقوم بجمع إحصائيات لكل طلب API.

تم تطوير واجهة مستودع السلسلة العالمية على Node.js و Bootstrap و Backbone واستضافتها في AWS.

على جانب المستخدم ، يستخدم مستودع السلسلة العالمي واجهة برمجة تطبيقات REST لاسترداد البيانات ويقدم لعميل Java ذاكرة تخزين داخلية مضمنة.

على الرغم من أننا قطعنا شوطًا طويلًا ونعمل بنشاط على تطوير مستودع السلسلة العالمية ، إلا أن لدينا ما نسعى جاهدين لتحقيقه. إليك ما نعمل عليه الآن:

  • نحن نطور الدعم للسلاسل ذات المتغيرات العددية والسلاسل ذات محددات النوع الاجتماعي
  • نحن نطور متانة حلولنا التقنية
  • تحسين عمليات التحجيم
  • نحن ندعم التصدير إلى تنسيقات مختلفة (Android XML و Microsoft .Resx وما إلى ذلك)

مستودع Global String Repository غير مرتبط بنطاق عمل Netflix ، لذلك نخطط لإصداره كبرنامج مفتوح المصدر.

العدار


Netflix - خدمة عالمية تدعم العديد من اللغات في عدد لا يحصى من المجموعات المختلفة على مختلف الأجهزة / واجهة المستخدم ؛ الاختبار اليدوي غير مناسب في هذه الحالة. في السابق ، قام فريق من المترجمين ومطوري واجهة المستخدم باختبار كل شيء يدويًا على أجهزة مختلفة - من لوحات المفاتيح إلى iOS و Android ؛ هذه هي الطريقة التي فحصنا بها جميع الخطوط للتأكد من توافقها مع السياق وواجهة المستخدم (على سبيل المثال ، إذا كان هناك أي "تشذيب" للنص).

لكن فلسفة Netflix هي أننا نسعى لتحقيق التميز. يتيح لنا هذا النهج إعادة التفكير فيما نقوم به. ولدت هيدرا.

تتمثل مهمة Hydra في إنشاء كتالوج يتضمن جميع الخيارات الممكنة لشاشة فريدة تعرض بالضبط الشاشة المطلوبة (يتم إجراء البحث بواسطة المرشحات ، على سبيل المثال ، يمكنك تحديد جهاز ولغات). على سبيل المثال ، كمتخصص في التوطين باللغة الألمانية ، يمكنك تكوين التصفية بحيث ترى المسار الكامل الذي يمر به المستخدمون غير المسجلون على PS3 والموقع الإلكتروني و Android. يمكن عرض نفس الشاشات بالسرعة التي سيفتح بها المستخدم على جهازه.

العمل مع الشاشات في هيدرا


هيدرا لا يعمل مع الشاشات مباشرة ؛ أنه يعمل على التسويقي وعرضها. لالتقاط عرض من كتالوج Hydra ، نستخدم نموذج أتمتة واجهة المستخدم. مع Jenkins CI ، تعمل الاختبارات المبنية على البيانات بالتوازي في جميع اللغات المدعومة: وهذا يخلق لقطات شاشة يتم نشرها على Hydra باستخدام البيانات التعريفية المناسبة (اسم الصفحة ، ومنطقة الوظيفة ، والنظام الأساسي لـ UI ، وواحدة من البيانات الوصفية الفريدة - تعريف فريد على الشاشة).

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

تكنولوجيا


Hydra هو تطبيق ويب AWS مكدس كامل. للواجهة الخلفية لـ Java وظيفتان رئيسيتان: تعالج لقطات الشاشة الواردة وتوفر بيانات للجهة الخلفية عبر واجهة برمجة تطبيقات REST.

صورة

عندما ترسل أتمتة واجهة المستخدم الشاشة إلى Hydra ، تتم كتابة ملف الصورة نفسه إلى S3 ، مما يضمن تخزينه غير المحدود (زائد أو ناقص) ، ويتم كتابة بيانات التعريف الأصغر بكثير إلى قاعدة بيانات RDS ، بحيث يمكن طلبها لاحقًا عبر واجهة برمجة تطبيقات REST. تعرض نقاط النهاية REST (نقاط النهاية REST) ​​معلمات سلسلة الاستعلام لاستعلامات MySQL.

على سبيل المثال:

REST/v1/lists/distinctList?item=feature&selectors=uigroup,TVUI;area,signupwizard;locale,da-DK

يحتوي هذا الطلب على معلمات لاختيار البيانات اللازمة من قاعدة البيانات:

select distinct feature where uigroup = 'TVUI' AND area = 'signupwizard' AND locale = 'da-DK'

تسمح واجهة JavaScript الأمامية ، والتي تستخدم knockout.js ، للمستخدمين بتحديد المرشحات وعرض الشاشات التي تتوافق مع تلك المرشحات. يتم توفير محتويات المرشحات ، وكذلك الشاشات التي تتوافق مع المرشحات المحددة ، من خلال المكالمات إلى نقاط النهاية REST المذكورة أعلاه.

تحجيم التطبيق


بعد تثبيت Hydra وبدء التشغيل الآلي ، تكون إضافة لغات جديدة سهلة مثل إضافة سطر واحد إلى ملف خصائص موجود ، والذي يتم إرساله إلى موفر البيانات لإطار عمل testNG. سيتم عرض الشاشات التي تحتوي على لغة جديدة مع تصميمات جينكينز العاملة التالية.

ما التالي؟


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

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

نحن لسنا خائفين من حل المشاكل المعقدة. ستصبح Netflix خدمة عالمية ، وسيوسع فريق التوطين لدينا. تسمح لنا هذه التحديات بجذب أكثر الناس موهبة ، وننشئ فريقًا يمكنه القيام بما يعتبر مستحيلًا.

Source: https://habr.com/ru/post/ar453456/


All Articles