Jump to content
MediaWiki

دعم اتجاه النص

From mediawiki.org
This page is a translated version of the page Directionality support and the translation is 100% complete.
محتوى باللغة الإنجليزية (من اليسار إلى اليمين) مع واجهة باللغة العبرية (من اليمين إلى اليسار).

يُعد دعم اتجاهات الكتابة المختلفة (من اليسار إلى اليمين ومن اليمين إلى اليسار) جانبًا مهمًا في البرمجيات متعددة اللغات. منذ MediaWiki 1.18 ، تحسّن الدعم بشكل ملحوظ.

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

نصائح على مستوى المستخدم

بعض النصائح العامة للمستخدمين، قبل الانتقال إلى التفاصيل الخاصة بالمطورين:

  • تدعم معظم المتصفحات تغيير اتجاه مساحة تحرير النص العادي، مثل صناديق بحث المقالات، وتحرير صيغة الويكي، وملخص التعديل، وغيرها. بناءً على المتصفحات وأنظمة التشغيل، يتم ذلك بواسطة Ctrl+⇧ Shift (كروم وإنترنت إكسبلورر على ويندوز)، Ctrl+⇧ Shift+X (فايرفوكس)، Option-Click-تغيير الاتجاه (ماك). من المفترض أن يساعدك هذا في الكتابة باتجاه مختلف عن الاتجاه المعتاد للموقع.
  • عند كتابة قسم بلغة ذات اتجاه يختلف عن اتجاه الموقع، أضف وسم div مع خصائص lang و dir و class المناسبة. على سبيل المثال، عند كتابة قسم باللغة الإنجليزية في ويكيبيديا العربية، اكتب <div lang="en" dir="ltr" class="mw-content-ltr"> في البداية و ‎</div> في النهاية.
  • عند كتابة بضع كلمات فقط داخل فقرة، ضعها داخل وسم ‎<span> مع خصائص lang و dir المناسبة. (تحتوي العديد من مواقع الويكي على قالب لهذا الغرض، مثل {{lang}}).
  • لفصل الأرقام عن كلمة مجاورة ذات اتجاه مختلف، استخدم علامات RLM أو LRM. العديد من مواقع الويكي تحتوي على قوالب لهذا الغرض، على سبيل المثال {{כ}} في ويكيبيديا العبرية، و {{RLM}} في ويكيبيديا العربية، و {{رچ}} في ويكيبيديا الفارسية، إلخ. عندما يكون هناك قالب متاح، يُفضل عادةً استخدامه بدلاً من استخدام حرف يونيكود نفسه.

يمكنك الإبلاغ عن الأخطاء في التعامل مع النصوص من اليمين إلى اليسار (RTL) في فابريكاتور في أي مشروع متعلق بميدياويكي باستخدام وسم RTL.

محمل الموارد (ResourceLoader)

بفضل ResourceLoader الذي يتضمن CSSJanus، يتم قلب CSS تلقائيًا من اليمين إلى اليسار عندما تكون لغة المستخدم RTL. هذا هو الوضع الافتراضي منذ 1.18 (في الإصدارات السابقة كان يعتمد على لغة محتوى الويكي). هناك القليل نسبيًا من CSS الذي يجب أن يعتمد على لغة المحتوى.

  • انتباه: عند استخدام وضع التنقيح الخاص بمحمل الموارد (ResourceLoader)، قد يتم تصيير CSS بشكل غير متسق مقارنة بوضع الإنتاج. كحل مؤقت، اختبر واجهة RTL مع إيقاف تشغيل وضع التنقيح. (يتم تتبع المشكلة على أنها Phabricator:T29025.)

ما نوع اللغات؟

مقال رئيسي: Manual:Language

  • $wgLang - لغة المستخدم (والاتجاه الخاص بها)
  • $wgContLang - لغة محتوى الموقع (والاتجاه الخاص بها) -> هنا من اليسار لليمين (LTR)
  • Title->getPageLanguage() - لغة محتوى الصفحة (والاتجاه الخاص بها) -> افتراضيًا نفس لغة محتوى الموقع
    • هناك بعض الاستثناءات الافتراضية: انظر أدناه
    • يمكن تعيينه في الإضافات بواسطة الخطاف PageContentLanguage
    • هذا يعيّن جدول المحتويات (TOC) (وأشياء أخرى مثل القواعد، رغم أنها ليست ذات صلة غالبًا) إلى تلك اللغة. للقيام بذلك فقط، استخدم parserOptions->setTargetLanguage()
  • في الإضافات التي يجب أن تظل متوافقة مع الإصدار 1.17، يمكنك استخدام wfUILang()، ومع ذلك فإن هذا يكسر التوافق مع 1.16 وما دونه. هذا يُرجع $wgLang في الإصدار 1.18 وما فوق ولكنه يُرجع $wgContLang في 1.17 (افتراضيًا).

ماذا يجب أن يتبع أي نوع؟

  • الصفحات الخاصة تتبع لغة المستخدم افتراضيًا.
  • يجب أن يكون الكود المصدري باللغة الإنجليزية (يتم تعيين صفحات CSS/JS إلى الإنجليزية افتراضيًا).
  • الصفحات التي تحتوي على ترجمة كصفحات فرعية يجب أن تتبع لغة الترجمة (على سبيل المثال "Page" هي wgContLang، و "Page/he" هي "he"). هذا هو الوضع الافتراضي لنطاق ميدياويكي.
  • صناديق الإدخال ومساحات النص تتبع اتجاه المحتوى افتراضيًا.
  • عند عرض فرق التعديلات، فإنه يتبع لغة المستخدم، لكن نص الفرق الفعلي يكون بلغة محتوى الصفحة.
قد يكون اتجاه النص مربكًا، لكن يمكنك مشاهدة حديث mooeypoo في مؤتمر linux.conf.au بعنوان "Wait, ?tahW: The Twisted Road to Right-to-Left Language Support" للحصول على فهم أفضل للقضايا والحلول المتعلقة به.

ماذا يجب أن أضيف في الكود المصدري؟

  • أي شيء في الصفحات الخاصة يختلف عن لغة المستخدم يجب أن يحتوي على وسم <div dir="..." lang="...">.
    مثال: SpecialRecentchanges->setTopText() الذي يضيف رسالة "recentchangestext" بلغة محتوى الويكي.
  • أي شيء في النطاقات المخصصة يحتوي على نص يختلف عن محتوى الويكي الافتراضي يجب أن يحتوي أيضًا على وسم div.
  • عندما لا يكون نص فرق التعديلات هو نفس لغة محتوى الصفحة، استخدم $diff->setTextLanguage( 'code' ); حيث $diff هو كائن DifferenceEngine.

خصائص lang/dir

يجب عليك استخدام HTML:

Xml::rawElement( 'div', array( 'lang' => $wgContLang->getCode(), 'dir' => $wgContLang->getDir() );

لكن أحيانًا يكون ذلك صعبًا في العناصر المُنشأة ديناميكيًا ويمكنك اللجوء إلى CSS:

.class{direction:ltr;}

محتوى الويكي

إصدار ميدياويكي:
≥ 1.18

يمكنك استخدام أصناف mw-content-ltr و mw-content-rtl للاستفادة من روابط تحرير الأقسام وعناصر ul/ol بناءً على ذلك الاتجاه.

على سبيل المثال
Xml::rawElement( 'div', array(
 'class' => 'mw-content-' . $wgLang->getDir(),
 'lang' => $wgLang->getCode(),
 'dir' => $wgLang->getDir(),
 'Text'
);

يُستخدم هذا بالطبع لمحتوى صفحات المقالات.

  • في صفحات الملفات، يُضاف فقط حول النص الفعلي بينما بقية صفحة الملف عبارة عن واجهة مستخدم مخصصة (تاريخ الملف، وما إلى ذلك).
  • في صفحات التصنيفات يُضاف كما في الصفحات العادية، لكن النص بلغة المستخدم يتم تضمينه في div مع خصائص lang و dir وفقًا للغة المستخدم.
  • في الصفحات الخاصة لا يُضاف لأنها تكون في الغالب بلغة المستخدم. يمكن أن يكون جزء من النص في الصفحات الخاصة بلغة المحتوى، والذي يجب عندئذٍ تضمينه في هذه الأصناف. يتم استخدامه على سبيل المثال في إضافة CodeReview لملخص الكود وتعليقاته، والتي يمكن أن تحتوي على عناصر ul/ol (نص الويكي * و #) بلغة محتوى الويكي ومن حيث المبدأ ليس بلغة المستخدم بوضوح.

يجب عدم إضافة عناصر واجهة المستخدم داخل هذه الأصناف. على سبيل المثال، روابط التصنيفات ونموذج مراجعة FlaggedRevs موجودة داخل #bodyContent ولكن خارج .mw-content-ltr/rtl.

انظر أيضًا المعرفات والأصناف (IDs and classes).

أصناف body (body classes)

يحتوي وسم body على صنف ltr أو rtl افتراضيًا، والذي يتبع لغة المستخدم. لا ينبغي لك استخدام ذلك، لأن CSS يتم قلبه تلقائيًا بناءً على لغة المستخدم. يتميز وسم body أيضًا بصنف sitedir-ltr و sitedir-rtl جديدين (بدءاً من الإصدار 1.18) يتبعان $wgContLang->getDir(). إذا كانت هناك حاجة لذلك، يمكن إضافة "userlang-ltr/rtl" و/أو "pagelang-ltr/rtl" أيضًا.

المحاذاة float/text-align

يمكنك استخدام $wgLang->alignStart(), $wgContLang->alignStart(), $wgLang->alignEnd(), $wgContLang->alignEnd() والذي يعطي القيم المناسبة 'right' أو 'left'.

يمكنك استخدام float أو text-align من CSS والذي تنعكس قيمته (left/right) للغات الواجهة من اليمين إلى اليسار (RTL).

أمثلة

Special:AllMessages هي صفحة خاصة، مما يعني أنها تتبع اتجاه لغة المستخدم. ومع ذلك، يجب أن تتبع الرسائل الفعلية اتجاه اللغة المحددة.

الخلايا في الجدول التي تحتوي على محتوى الرسائل، لها خاصية lang و dir.

تقوم الإضافة Translate ، بالاستفادة من خطاف PageContentLanguage، بتعيين اللغة الصحيحة (وبالتالي الاتجاه الصحيح) للصفحات المترجمة، انظر على سبيل المثال meta:Wikimedia_maintenance_notice/ar والتي تستفيد من صنف mw-content-rtl في موقع ويكي LTR.

مواقع الويكي المحلية

صفحات MediaWiki:Common.css وما يتعلق بها يتم قلبها أيضًا. هذا يعني أنه عليك إضافة @noflip عند الحاجة.

انظر T33923: يجب ألا يتم قلب CSS الخاص بالموقع افتراضيًا.

مشاكل

  • تم تحسين الدعم لمعظم الميزات والإضافات الرئيسية منذ الإصدار 1.19 تقريبًا، انظر translatewiki:Project:Better directionality and i18n development لمعرفة ذلك.
  • المشاكل المتبقية المعروفة:
    • يتم قلب أيقونات الروابط الخارجية وفقًا لاتجاه لغة المستخدم (مشكلة بسيطة)
    • LiquidThreads - استخدم contlang بدلاً من pagelang، وإلا فإن الصفحة الخاصة ستُرجع userlang
    • WikiLove - صورة القطط المحاذاة لليسار ([[File:Blabla.jpg|left]]) يجب محاذاتها لليمين في مواقع الويكي ذات اتجاه RTL (مشكلة بسيطة)
    • أوميغا ويكي (OmegaWiki): بحاجة إلى إصلاح شامل (يجب أن تتبع صفحات Expression و DefinedMeaning اتجاه المستخدم) + 23035
  • أخطاء البحث: https://bugzilla.wikimedia.org/buglist.cgi?quicksearch=rtl

انظر أيضًا

AltStyle によって変換されたページ (->オリジナル) /