تخطي إلى المحتوى الرئيسي

ArtinTech Solution

A Multilingual, Right-to-Left Newspaper Reader in Laravel

جزء كبير من الصحف التي تريد نسخة إلكترونية يصدر بالبنغالية أو الهندية أو الأردية أو العربية. ولا ينبغي أن يرى قرّاؤها شريط أدوات إنجليزيًا فوق صفحة أولى بالبنغالية. في الإصدار 1.1 من Inkfold ترجمنا موقع القراءة كاملًا إلى البنغالية والهندية والعربية، مع تخطيط من اليمين إلى اليسار، بينما تبقى غرفة الأخبار بالإنجليزية لفريق العمل.

كل نص ظاهر يمر عبر دالة واحدة

كانت الخطوة الأولى أقلها إثارة: أصبح كل نص في الموقع العام يمر عبر الدالة __() في Laravel، وصيغ الجمع عبر trans_choice()، والتواريخ عبر translatedFormat() في Carbon، فيصبح «Monday, 26 October» بالعربية «الاثنين 26 أكتوبر» دون قوالب منفصلة. وتُحفظ الترجمات في ملفات JSON بسيطة، ملف لكل لغة، والمفتاح هو الجملة الإنجليزية. وإضافة الفرنسية أو الأردية لاحقًا تعني نسخ ملف واحد وترجمة قيمه.

اختيار اللغة

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

إعدادات اللغة في غرفة أخبار Inkfold مع الإنجليزية والبنغالية والهندية والعربية
تختار غرفة الأخبار اللغات المعروضة واللغة الافتراضية.

من اليمين إلى اليسار دون قلب الصحيفة

تحمل كل لغة اتجاه كتابتها في الإعدادات، ويكتبه القالب في سمة dir للصفحة، فيتبعه معظم الواجهة تلقائيًا. وتتولى مجموعة قواعد RTL مخصصة الباقي: تتبادل اللوحات الجانبية أماكنها، وتنقلب أسهم السابق والتالي، وتنتقل علامة «تابع في الصفحة» في نافذة الخبر إلى الجهة الأخرى.

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

قارئ Inkfold بواجهة عربية من اليمين إلى اليسار
واجهة عربية والصفحات المطبوعة كما هي.

خطوط للغة النشطة فقط

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

اختبار يفشل عند نقص ترجمة

تتآكل الترجمات بصمت: يضيف أحدهم زرًا وينسى ملفات JSON. أصبح اختبار آلي يفحص قوالب موقع القراءة بحثًا عن النصوص القابلة للترجمة ويفشل إذا نقص أي منها في ملف لغة. وقد كشف مفاجأة: مفتاح باسم «Pagination» كان يُقرأ من ملف pagination.php الخاص بـ Laravel على نظام ملفات لا يفرّق بين الأحرف الكبيرة والصغيرة فيعيد مصفوفة. تجنّب المفاتيح التي تطابق اسم ملف ترجمة.

أهم النقاط

  • مرّر كل نص عام عبر __() واحفظ الترجمات في JSON بمفتاح هو الجملة الأصلية.
  • حدّد اللغة من الجلسة ثم الحساب ثم المتصفح ثم الافتراضي، بهذا الترتيب.
  • اضبط dir على المستند واكتب قواعد RTL محددة، مع إبقاء المحتوى المطبوع على اتجاهه.
  • حمّل خطوط الكتابات الخاصة للغة النشطة فقط، واختبر غياب أي نص.

في مقال سابق من السلسلة: القراءة دون اتصال باستخدام Service Worker. بدّل اللغة من أعلى العرض التجريبي لـ Inkfold؛ والبرنامج متاح على Charming Theme.

هل تحتاج موقع Laravel أو WordPress بالعربية أو البنغالية أو بعدة لغات معًا؟ لنتحدث — تبني ArtinTech Solution مواقع متعددة اللغات كل أسبوع.

Share this article

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *