Consulting Work المدوّنة تواصل
← الرجوع إلى المدوّنة

تعليمة واحدة محت 26 لغة من الموقع بالخطأ

تعليمة واحدة محت 26 لغة من الموقع بالخطأ

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

خلاصة سريعة

  • تعليمة واحدة استهدفت قسم المدونة انتهى بها الأمر مطبَّقة على الموقع كله.
  • اختفت 26 من أصل 30 لغة من الصفحة الرئيسية، وصفحة السيرة الذاتية، وكل نصوص التنقّل.
  • لم يتعطّل شيء ولم تظهر صفحة 404، فلم ينتبه أحد لمدة يومين.
  • جاء الإصلاح من سجل Git، لا من الذاكرة عمّا كان شكل الموقع عليه سابقاً.
  • الدرس الحقيقي: قبل تنفيذ أي تغيير آلي، حدِّد الملفات الدقيقة التي سيمسّها، ثم اقرأ تلك القائمة قبل أن يُحذف أي شيء.

لماذا أردت لغات أقل في المقام الأول

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

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

جملة واحدة، نطاق خاطئ

أصدرتُ تعليمة واحدة: أبقوا المدونة عند أربع لغات. قصيرة ومحددة، أو هكذا ظننت. لكن ما نُفّذ فعلياً مسّ ثلاثة أشياء مختلفة دفعة واحدة. صحيح أنه قلّص مجلدات محتوى المدونة نفسها إلى الأربع التي أردتها. لكنه أيضاً أعاد كتابة قائمة لغات الموقع الرئيسية، أي ملف الإعداد الذي يحدد أصلاً أي اللغات موجودة، وحذف محتوى الصفحة الرئيسية ونصوص التنقّل للغات الـ26 الأخرى.

المشكلة أن “المدونة” و"قائمة لغات الموقع بأكمله" تعيشان داخل ملف الإعداد نفسه. لا شيء في ذلك الملف يميّز بين اللغات التي تدعمها المدونة واللغات التي يدعمها الموقع. فحين تحذف لغة من تلك القائمة، كل قسم يقرأ منها، بما فيه الصفحة الرئيسية، يفقدها دفعة واحدة. تعليمتي حدّدت قسماً واحداً. أما التغيير الذي نُفّذ فعلاً فامتدّ نطاقه ليشمل الموقع كله.

وهنا ما جعل الأمر خطيراً لا مجرد خاطئ: لا شيء تعطّل بصوت عالٍ. لا خطأ، لا صفحة 404، لا فشل في البناء. الموقع ببساطة توقف بصمت عن توليد صفحات الرئيسية والسيرة الذاتية للغات الـ26، وتوقف مبدّل اللغة عن عرضها. الزائر الذي كان يقرأ الموقع بالبرتغالية كان سينتهي به الأمر، بصمت، على النسخة الإنجليزية بدلاً من ذلك. المفقود بسبب الحذف يبدو تماماً كغير الموجود أصلاً، ولا واحد من الحالتين يُصدر خطأً.

مرّ يومان قبل أن ألاحظ الأمر، وبمحض الصدفة، في منتصف إصلاح لا علاقة له بالموضوع، حين لاحظت أن رابط “المدونة” في التنقّل يشير إلى مكان غريب بالنسبة لإحدى اللغات التي ظننت أنها ما زالت فعّالة. وكان ذلك الرابط المعلَّق وحده الخيط الظاهر الوحيد الذي قادني إلى المشكلة كلها.

ما كشفه الفرق الفعلي بين النسختين

الخطأ الحقيقي هنا ليس في خطأ النطاق نفسه، بل في أنني لم أتحقق قط من قائمة الملفات التي سيمسّها التغيير قبل أن أسمح له بالتنفيذ. قرأت وصفاً من سطر واحد لما يُفترض أن يفعله، وافترضت أن هذا الوصف يطابق ما فعله فعلاً. لم يكن كذلك.

بدأ الإصلاح بسؤال واحد: ما الذي تغيّر، وأين. قارنتُ الموقع الحيّ بآخر commit قبل تعليمة “تقليص المدونة”، وجاءت الإجابة فورية لا لبس فيها: ملف إعداد اللغات الرئيسي، ومجلد محتوى الصفحة الرئيسية، و26 ملف نصوص خاص بكل لغة، ولا واحد منها قريب من مجلد المدونة. احتفظ Git بكل واحد من هذه الملفات كما كانت تماماً. لم يُفقد شيء فعلياً، بل جرى نشر نسخة جديدة فوقه فقط.

أعدتُ الصفحة الرئيسية والسيرة الذاتية ونصوص التنقّل لكل اللغات الثلاثين من ذلك السجل، وتركتُ مجلد المدونة مقلَّصاً تماماً كما أردت: أربع لغات، عن قصد. وبقيت عقدة واحدة معلّقة: رابط “المدونة” في التنقّل، لدى إحدى اللغات المستعادة، كان يشير إلى نسخة من المدونة بتلك اللغة لم تعد موجودة. ولم يكن يستحق العناء أن أكرر أربعة مقالات في 26 لغة إضافية فقط لملء ذلك الرابط الواحد، فجعلت القالب يعيد توجيهه إلى المدونة الإنجليزية بدلاً من ذلك، وتركته على هذا الحال.

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

ما الذي سأتحقق منه بشكل مختلف في المرة القادمة

قبل أن أسمح الآن لأي تغيير آلي بلمس موقع حيّ متعدد الأقسام، أطرح سؤالاً إضافياً بصوت مسموع: سمّوا لي الملفات الدقيقة التي سيمسّها هذا التغيير، لا الميزة التي يُفترض أن يُصلحها. وإذا جاءت الإجابة غامضة، فتلك هي الإشارة للتوقف والتحقق، لا لتشغيله ومراقبة ما سيحدث. وقبل أن يُحذف أي شيء، أريد قائمة الملفات الفعلية أمامي أولاً، لا ملخصاً من سطر واحد لما كانت التعليمة يُفترض أن تعنيه. كلمة نطاق داخل تعليمة ما، مثل “المدونة”، أو “هذا الفريق”، أو “الواجهة الأمامية فقط”، ليست بالضرورة مطابقة لنطاق التغيير الذي تُطلقه تلك التعليمة، ولا يتطابق الاثنان إلا إذا تحقق أحد فعلاً من ذلك: وهذا بالضبط هو السؤال الذي أوجّهه إليك أنت. ما أصغر تعليمة، وأكثرها وضوحاً في تحديد النطاق، أصدرتَها مؤخراً ولم يتحقق أحد قط مما لمسته فعلياً؟

Need something like this for your own business? See how I can help →