تطوير موقع متعدد اللغات

ان التطور الاكثر اهمية الذي يأتي به SPIP 1.7 هو دعمه «الطبيعي» للمواقع المتعددة اللغات. وينحصر حديثنا في هذا المقال في SPIP 1.7.

مقدمة: كيف ندير موقع متعدد اللغات

لا يمكن في هذا المقال كنابة تعليمات كاملة حول المواقع المتعددة اللغات: فمن جهة هناك عدة «وجهات نظر» حول مفهوم «تعدد اللغات» ومن جهة اخرى لا نملك قدرة الابتعاد الكافية لتحديد «الطريقة المثلى».

ستجد اذاً في ما يلي عرضاً لمختلف الادوات التي يقدمها SPIP لإدارة تعدد اللغات. فقم باستخدامها واهلاً بك لمناقشتها في المجالات المخصصة لذلك (منتدى ويكي، القوائم البريدية، الخ).

ولكن قبل متابعة القراءة، اتسى مشاريعك لبعض الوقت وتبحر في الحالات التالية:
 موقع شعري مصنّف حسب المواضيع (او الاقسام)
 موقع توثيق لتطبيق مثلاً، مثل SPIP
 موقع حكومي بـ25 لغة
 موقع تجاري لشركة بلغتين
 موقع مؤسسة يونانية يحتوي على بضع صفحات بالانكليزية للزوار الاجانب.

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

المبدأ

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

من اجل تطوير موقع متعدد اللغات بواسطة SPIP، يجب اولاً اعداد هذا الموقع ليستقبل تعدد اللغات: ويتم ذلك في قسم ادارة الموقع وفي صفحة «ادارة اللغات» تحديداً. وهنا يمكن تفعيل ادارة تعدد اللغات واختيار اللغات التي سيتم استخدامها في الموقع.

اعداد المجال الخاص

لتسهيل ادارة الموقع، يمكن اختيار دقة ضبط اللغات من قسم ادارة الموقع، مما يتيح حجب عناصر غير ضرورية من الواجهة والحد من مخاطر الوقوع في الخطأ [1]. ويقدم SPIP ثلاثة مستويات مختلفة لاختيار اللغات التي سيتم تخصيصها للمقالات (والاخبار ...)، وهي بالترتيب التصاعدي لتعقيدها:

 حسب القسم الاساسي (اي القسم الموجود في اصل الموقع او اعلى الهرم): لكل قسم أساسي موجود في اصل الموقع يتم تخصيص لغة يمكن تغييرها من قبل المدراء وتُطبق على كل الاقسام الفرعية والمقالات والاخبار المنشورة التي يحتويها القسم الاساسي. من المفروض ان هذا الاعداد يلبي حاجات معظم المواقع المتعددة اللغات مع الحفاظ على بنية وواجهة بسيطتين.

 حسب القسم: ان هذا الاعداد اكثر دقة من سابقه ويتيح تغيير اللغة لأي قسم في الموقع وليس فقط الاقسام الاساسية.

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

كتل تعدد اللغات

[SPIP 1.7.2]: يمكن لبعض العناصر مثل المؤلفين والمقاتيح ان تُكتب بطريقة مختلفة باختلاف لغات المقالات المرتبطة بها. الا انه من غير الواقعي ابتكار «ترجمة المفتاح» او «ترجمة المؤلف» لأن المؤلف هو نفسه الذي يوقع على المقالين وهو المفتاح (او «المفهوم») نفسه الذي نربطه بالمقال ونرجماته. اذا ليس لهذه العناصر لغة معينة حسب مفهوم SPIP، ولكنه من الممكن بفضل «كتل التعدد» (multi blocks) ان يتم عرض هذه العناصر بلغة السياق الذي تم نداؤهم فيه (اي بمعنى ابسط: جعل المفتاح «عراق» مثلاً يظهر «Iraq» عندما يتم ربطه بمقال بالانكليزية و«Irak» اذا تم ربطه بمقال بالفرنسية).

وتشكل كتلة التعدد «multi» اختصاراً جديداً من اختصارات SPIP ولها بنية بسيطة:

<multi>سلسلة 1 [xx] سلسلة 2 [yy]سلسلة 3  ...</multi>

اذا عدنا الى المثال المذكور اعلاه، تصبح كتابة العلامة في المجال الخاص كالتالي:

<multi>العراق [ar]Iraq [fr]Irak</multi>

واذا تم نداء كنلة تعدد بلغة ليست متوافرة، تعرض الكتلة دائماً الجزء الاول من الكتلة (اي السلسلة 1 في المثال الاول و«العراق» في المثال الثاني) وذلك لتفادي العرض الفارغ [2].

ملاحظة: يمكن استخدام كتل التعدد ايضاً حسب البنية نفسها في الصفحات النموذحية، راجع عولمة الصفحات النموذجية.

الحلقات والعلامات: كيف التعامل معها؟

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

1. في البداية، خبر سار: دعم تعدد اللغات في الصفحات النموذجية موجود في معظمه وطبيعي: فليس من الضروري انشاء صفحات نموذجية مختلفة لعرض مقالات بلغات مختلفة. فالصفحة النموذجية نفسها تكيّف الياً عرضها مع اللغة المناسبة.

هكذا، فكل العناصر المعروضة حول مقال بلغة معينة وداخله تظهر بلغة المقال نفسها. ويشمل ذلك تاريخ النشر واستمارات منتدى المقال وتواقيع العرائض الخ. بشكل عام: تظهر كل علامة SPIP موجودة داخل حلقة ARTICLES بلغة هذا المقال (والشيء نفسه للاقسام والاخبار).

مثال: اذا كانت صفحة الموقع الاساسية تعرض محتويات الموقع المكونة من آخر عشرة مقالات منشورة اضافة الى تواريخ نشرها، تظهر تواريخ المقالات اليابانية باليابانية تواريخ المقالات الايطالية بالايطالية الخ.

ملاحظة: يفترض هذا التصرف ان لغة المقال هي احدى اللغات التي تمت الترجمة اليها في SPIP. فإذا كان مقال مكتوباً بالسنسكريتية ونسختك من SPIP لم تترجم بعد الى هذه اللغة (انت مدعو بالطبع للتطوع وتصحيح هذا الاهمال بالمشاركة في اعمال الترجمة)، يظهر تاريخ المقال بلغة الموقع الافتراضية - اي ربما العربية في وضعنا.

2. اتجاه الكتابة

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

لذلك يقدم SPIP علامة خاصة هي #LANG_DIR وتحدد اتجاه الكتابة للغة الحالية. ويتم استخدام هذه العلامة كقيمة للصفة dir في معظم علامات HTML (وتأخذ بالتالي قيمة «rtl» للغات التي تكتب من اليمين الى اليسار وقيمة «ltr» للغات الاخرى [4]).

هكذا، تصبح حلقة لعرض النصوص:

<BOUCLE_contents(ARTICLES){par date}{inverse}{0,10}>
  <li dir=”#LANG_DIR”>[(#DATE|affdate)]:
  <a href=”#URL_ARTICLE”>#TITRE</a></li>
</BOUCLE_contents>

واذا كان تصميم الصفحة يعتمد على عناصر منحاذة الى اليمين او اليسار، يجب قلب هذه العناصر اذا انعكس اتجاه الكتابة: وقد يستحسن اذاً استبدالكل [5] عناصر الصفحة النموذجية المعلمة left او right بعلامتي #LANG_LEFT او #LANG_RIGHT. اما في ما يتعلق بتعريف الصفحة نفسها، فمن الافضل البدء بتحديد لغة العنصر المطلوب والاتجاه العام للصفحة:

<html lang=”#LANG”>
<body dir=”#LANG_DIR”>
...
</body>
</html>

3. وصلات الترجمة

يقدم SPIP نظام ترمة بين المقالات: فيمكن تحديد الترجمات المختلفة التي يجب ان تنفذ على المقال (ملاحظة: هذه الترجمات هي نفسها مقالات بحد ذاتها). ويتيح معيار {traduction}، اذا وجد في حلقة ARTICLES، استرجاع كل ترجمات المقال.

فعلى سبيل المثال، لعرض كل ترجمات المقال الحالي:

<BOUCLE_traductions(ARTICLES){traduction}{exclus}>
[<a href="#URL_ARTICLE" rel="alternate" hreflang="#LANG">(#LANG|traduire_nom_langue)</a>]
</BOUCLE_traductions>

لاحظ المعيار {exclus} الذي تيتح عدم عرض النسخة الحالية من المقال والمرشح |traduire_nom_langue الذي يعطي الاسم الحقيقي للغة بالاعتماد على رمزها المعروف في مجال الكومبيوتر (مما يتيح عرض «العربية» بدلاً من «ar و«English» بدلاً من en...).

ويتيح معيار اضافي {origine_traduction} (اي اصل الترجمة، وهو للمتحمسين) استرجاع النسخة الاصلية من المقال الحالي فقط.

وتجمع صفحة ويكي في spip-contrib امثلة حلقات تستخدم هذه المعايير: http://www.spip-contrib.net/-Carnet....

4. عناصر اضافية

يأتي [SPIP 1.7.2] بعناصر اضافية تتيح انتاج مواقع متعددة اللغات:

— ويستخدم معيار {lang_select} لفرض اختيار اللغة في حلقة المؤلفين (AUTEURS) التي لا تقدم عادة هذا الخيار (وعلى العكس فمعيار {lang_select=non} يتيح اعلام حلقات (ARTICLES) او (RUBRIQUES) او (BREVES) بألا تختار اللغة.

— يدل متغيّر التخصيص $forcer_lang النظام الى انه سيدقق في ما كان الزائر يملك كعكة لغة وفي حال الايجاب، توجيه هذا الزائر الى صفحة اللغة المناسبة. وهذا ما تفعله صفحة الدخول الى المجال الخاص التي تأتي مع SPIP.

— تعرض العلامتان #MENU_LANG#MENU_LANG_ECRIRE) قائمة لغات تتيح للزائر اختيار لغة الصفحة التي يزورها (اي قائمة من نوع «هذه الصفحة بكذا لغة»). فالعلامة الاولى تعرض قائمة لغات الموقع والثانية تعرض قائمة بلغات المجال الخاص (وتستخدم في صفحة الدخول الى المجال الخاص).

— — اخيراً تتيح المعايير الاختيارية (انظر نظام SPIP 1.7، 1.7.2استخدام الحلقة نفسها (في الحقيقة، الصفحة النموذجية نفسها) اما لعرض كل مقالات الموقع بكل اللغات او لعرض المقالات باللغة التي تم تمريرها في عنوان URL فقط. وتظهر فائدة ذلك مثلاً في الملفات الخلفية (backend) او حلقات البحث:

<BOUCLE_recents(ARTICLES){lang?}{par date}{inverse}{0,10}>
<BOUCLE_recherche(ARTICLES){lang?}{recherche}{par points}{inverse}{0,10}>

صفحات نموذجية عالمية لموقع متعدد اللغات بكثافة

يسمح لنا ما سبق جعل الاجزاء الخاصة بـSPIP من صفحاتنا النموذجية متعددة اللغات: فكل ما ينتج عن الحلقات يتم عرضه بالاتجاه الصحيح وبالكتابة الصحيحة وبدورها العناصر التي ينتجها SPIP (التواريخ والاستمارات ...) تظهر باللغة المطلوبة.

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

الا انك اذا اردت تطوير موقع يحتوي كثيراً اللغات التي تكون على قدم المساواة وادارته بفعالية، يصبح من الواهي انشاء صفحات نموذجية مختلفة لكل لغة او فرض عناصر تصفح بلغة واحدة (حتى لو كانت الانكليرية او الاسبرانتو). لإنشاء مجموعة من الصفحات النموذجية التي تعمل بكل اللغات، يجب «عولمة» هذه الصفحات النموذجية من اجل تغيير النصوص فيها بشكل مستقل عن HTML الذي يحتويها (والذي يبقى هو جامداً عبر اللغات). وتتطلب هذه المهمة التشمير عن السواعد وهي موضوع مقال مختلف.

تفاصيل ملحقة

 اختصارات الكتابة <code> و<cadre> تنتج دائماً نصاً من اليسار الى اليمين حتى لو كانت لغة المقال من اليمين الى اليسار. والحال ان هذين الاختصارين مخصصان لعرض رموز او بيانات برمجية تكون غالباً مكتوبة من اليسار الى اليمين (وغالباً بحروف لاتينية).

 في ما يخص اتجاه الكتابة كذلك، تجدر الاشارة الى ان صفتي left وright الخاصة بعلامات HTML موجودة ايضاً في اوراق الانماط (css). ويعني ذلك انك قد تضطر الى ادخال الجزء المناسب من ورقة الانماط في صفحاتك النموذجية (لاستخدام علامتي #LANG_LEFT و#LANG_RIGHT) بدلاً من وضعها في ملف خارجي.

وهنا ملخص لتصرف علامات SPIP المتعلقة باتجاه الكتابة:

اللغة#LANG_RIGHT#LANG_LEFT#LANG_DIR
اللغات المكتوبة من اليسار الى اليمين right left ltr
العربية، الفارسية،... left right rtl

هناك مرشح اسمه |direction_css يتيح «عكس» ملف أوراق الأنماط (CSS) للغات المكتوبة من البمبن الى اليسار. فإذا كانت ورقة الأنماط المطلوب عكسها تحمل اسم style.css مثلاً، سيستخدم هذا المرشح (في حال كانت اللغة الحالية تكتب من اليمين الى اليسار) ملف style_rtl.css. اذا كان هذا الملف غير موجود أصلاً، يقوم المرشح بإنشائه آلياً وذلك باستبدال كل ورود لخاصية left بمقابلتها right وبالعكس (ويقوم بتخزين هذا الملف في مجلد IMG/cache-css/). ويتم تطبيق هذا المرشح خاصة في علامة المسار #CHEMIN كالتالي: [(#CHEMIN{style.css}|direction_css)].

حواشي

[1يجدر التوضيح هنا انه يتم توزيع SPIP بإعداد احادية اللغة لتفادي تعقيد الواجهة.

[2على العكس اذا اردنا فرض عرضاً فارغاً نترك الجزء الاول من العلامة فارغاً يسبقه اسم اي لغة.

[3نظرياً، يفترض بلغة HTML ان تتكفل بهذه التفاصيل آلياً الا ان النتيجة ليست دائماً مرضية لا سيما في حال الرجوع الى اول السطر وفي فقرات نصوص تخلط لغتين في اتجاهين معاكسين.

[4لسوء الحظ، يبدو ان الهيئات المكلفة وضع المقاييس تتجاهل حالياً كتابة boustrophédon مما يعذّر استخدامها في HTML.

[5الكل او تقريباً الكل حسب تصميم صفحاتك وما اذا كانت تحتوي على اشتثناءات.

مؤلف George نُشر في: تم التحديث: 21/03/23

الترجمات: عربي, català, English, Español, français, italiano, Nederlands, Türkçe