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

يمكنك بناء محولات اللغة المخصصة الخاصة بك وإدخالها في السمة. سأريك كيف يمكنك إضافة قائمة باللغات المتاحة إلى المنشورات وقائمة لغات إلى ذيل الصفحة.

الحصول على قائمة اللغات (الأخرى)

استخدم الكود icl_get_languages() للحصول على قائمة ترجمات لأي صفحة. الاستخدام:

icl_get_languages('skip_missing=N&orderby=KEY&order=DIR&link_empty_to=str')

* N=0/1
* KEY=id/code/name/custom (name -> translated_name), (default: id)
* DIR=asc/desc (default: asc)
* link_empty_to = str (الافتراضي: empty، يعمل بالتضافر مع الكود skip_missing=0 ويسمح باستخدام الروابط المخصصة للغات التي ليست لها ترجمات للعنصر الحالي. الكود {%lang} يمكن استخدامه كعنصر نائب لكود اللغة)

ملاحظات:

  • تقوم المعلمة skip_missing بإخبار الوظيفة بما يجب عليها فعله مع اللغات التي ليست لها ترجمات.
  • يسمح الجمع بين orderby و order بإنشاء محول لغات ذي قائمة منسدلة أو محولات لغة يتم فيها دائمًا عرض اللغات في نفس الموضع.
  • يمكن تحديد الترتيب المخصص في صفحة مدير WordPress من خلال الذهاب إلى ‘WPML » Languages » Language Switcher Options’ (القائمة WPML>اللغات>محول اللغة)

تقوم الوظيفة بالرد مع array (مصفوفة) بها مدخلات لكل لغة. على سبيل المثال، بالنسبة لموقع WordPress يعمل باللغات الإنجليزية والفرنسية والإيطالية، سيكون الرد هكذا:

Array
(
 [en] => Array
  (
   [id] => 1
   [active] => 1
   [native_name] => English
   [missing] => 0
   [translated_name] => English
   [language_code] => en
   [country_flag_url] => http://yourdomain/wpmlpath/res/flags/en.png
   [url] => http://yourdomain/about
  )

 [fr] => Array
  (
   [id] => 4
   [active] => 0
   [native_name] => Français
   [missing] => 0
   [translated_name] => French
   [language_code] => fr
   [country_flag_url] => http://yourdomain/wpmlpath/res/flags/fr.png
   [url] => http://yourdomain/fr/a-propos
  )

 [it] => Array
  (
   [id] => 27
   [active] => 0
   [native_name] => Italiano
   [missing] => 0
   [translated_name] => Italian
   [language_code] => it
   [country_flag_url] => http://yourdomain/wpmlpath/res/flags/it.png
   [url] => http://yourdomain/it/circa
  )
)

كل لغة لها مصفوفتها الخاصة من المعلمات، والتي يمكن لوظيفة سمتك استخدامها لبناء أي محدد لغة.

  • id: معرف الهوية المرجعي الداخلي
  • active: هذه هي اللغة النشطة الحالية (لغة واحدة فقط تكون نشطة)
  • native_name: الاسم الأصلي للغة (لا يتم ترجمته أبدًا)
  • translated_name: اسم اللغة الذي تمت ترجمته إلى اللغة النشطة الحالية
  • country_flag_url: المسار إلى صورة PNG مع علم الدولة
  • url: الرابط إلى الترجمة بهذه اللغة
  • missing: تكون القيمة 1 إذا كانت الترجمة لهذا العنصر مفقودة، والقيمة 0 إذا كانت الترجمة موجودة.

التعامل مع الترجمات المفقودة

قد لا تكون الصفحات مترجمة إلى جميع اللغات. يمكنك إخبار الكود icl_get_languages ما يجب العودة به مع اللغات التي ليست لها ترجمات.

إذا كان الكود ‘skip_missing=1’، لن تظهر تلك اللغات في الشكل الخارجي. إذا كان الكود ‘skip_missing=0’، ستظهر جميع اللغات، واللغات التي ليست لها ترجمات ستقوم بالانتقال إلى الصفحة الرئيسية لهذه اللغة.

كيف يمكنك استخدامها في وظائف سمتك

يمكنك بناء محولات اللغة الخاصة بك بأي طريقة تختارها. وهنا سنقوم بعرض استخدامين شائعين.

ينبغي أن يتم إدخال وظائف PHP المستخدمة كمثال، والتي نعرضها هنا، إلى ملف functions.php الخاص بك (في مجلد السمة) – غير مضافة إلى الملحق.

هذا المنشور متاح أيضًا باللغة…

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

function icl_post_languages(){
  $languages = icl_get_languages('skip_missing=1');
  if(1 < count($languages)){
    echo __('This post is also available in: ');
    foreach($languages as $l){
      if(!$l['active']) $langs[] = '<a href="'.$l['url'].'">'.$l['translated_name'].'</a>';
    }
    echo join(', ', $langs);
  }
}

ما تفعله هذه الوظيفة:

  1. الحصول على قائمة باللغات من WPML – $languages = icl_get_languages(‘skip_missing=1’);
  2. التحقق ما إذا كانت هناك أكثر من لغة لهذا المنشور – if(1 < count($languages))
  3. إنشاء الخرج، تخطي اللغة المعروضة حاليًا – if(!$l[‘active’])

ملاحظات:

  1. تظهر الرسالة من خلال gettext. هذا هام جدًا، وعليه ستظهر هذه الرسالة التي ستقوم بإلحاقها إلى المنشورات باللغات المختلفة بلغتها الصحيحة:  __(‘هذا المنشور متاح أيضًا باللغة: ‘);
  2. أسماء اللغات المستخدمة ستكون الأسماء المترجمة للغات. هذا قد يضمن كتابة الجملة بأكملها باللغة الصحيحة: $l[‘translated_name’]

النتيجة هي:

Message about post available in other languages

Message about post available in other languages

لتضمين هذه الرسالة في المنشورات، قم بإضافة استدعاء إلى الكود icl_post_languages() من ملف single.php.

قائمة أسماء اللغات والأعلام لذيل الصفحة

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

function languages_list_footer(){
    $languages = icl_get_languages('skip_missing=0&orderby=code');
    if(!empty($languages)){
        echo '<div id="footer_language_list"><ul>';
        foreach($languages as $l){
            echo '<li>';
            if($l['country_flag_url']){
                if(!$l['active']) echo '<a href="'.$l['url'].'">';
                echo '<img src="'.$l['country_flag_url'].'" height="12" alt="'.$l['language_code'].'" width="18" />';
                if(!$l['active']) echo '</a>';
            }
            if(!$l['active']) echo '<a href="'.$l['url'].'">';
            echo icl_disp_language($l['native_name'], $l['translated_name']);
            if(!$l['active']) echo '</a>';
            echo '</li>';
        }
        echo '</ul></div>';
    }
}

هذه الوظيفة تفعل ما يلي:

  1. إذا كانت هناك أي لغة ترجمة، تقوم بإنشاء عنصر DIV وتبدأ قائمة غير مرتبة: if(!empty($languages)){ echo ‘<div id=”footer_language_list”><ul>’;
  2. تمر على كل لغة من اللغات وتضيفها كعنصر قائمة.
  3. إن لم تكن اللغة هي اللغة النشطة، تقوم أيضًا بإنشاء رابط إلى تلك الصفحة بتلك اللغة: if(!$l[‘active’]) echo ‘<a href=”‘.$l[‘url’].'”>’;
  4. تضيف علم الدولة الخاص باللغة: <img src=”‘.$l[‘country_flag_url’].'” alt=”‘.$l[‘language_code’].'” width=”18″ height=”12″ />
  5. تضيف كلاً من الاسم الأصلي والاسم المترجم للغة، إن كانا مختلفان: echo icl_disp_language($l[‘native_name’], $l[‘translated_name’]);

يتم إنشاء وظيفة icl_disp_language() بواسطة WPML. وما تفعله هو التحقق ما إذا كانت الوسيطتان (native_language_name, translated_language_name) مختلفتين. إذا كان الأمر كذلك، تقوم بإرجاعهما معًا، وإن كان الأمر غير ذلك، تقوم بإرجاعهم مرة واحدة فقط.

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

#footer_language_list{
  margin-bottom: 25px;
  text-align: center;
}

#footer_language_list ul{
  list-style: none;
  margin:0;
  padding:0;
}

#footer_language_list ul li img{
  margin-right:5px;
}

#footer_language_list ul li{
  display:inline;
  margin:0 5px 0 5px;
  padding:0;
}

#footer_language_list ul li a, #footer_language_list ul li a:visited{
  color: #fff;
  text-decoration:underline;
}

#footer_language_list ul li a:hover, #footer_language_list ul li a:active{
  color: #fff;
}

إليك محول اللغة:

Language footer

Language footer

لإضافته إلى سمتك، قم بإضافة الاستدعاء إلى languages_list_footer في الملف footer.php.

* ملحوظة: يمكنك تغيير اتجاه محول اللغة الأفقي هذا إلى محول لغة رأسي. ما عليك سوى إزالة بيان display: inline من كود CSS.

محدد اللغة مع أعلام دول فقط

وظيفة بسيطة لعرض الأعلام ذات الروابط إلى ترجمات الصفحة الحالية.

function language_selector_flags(){
    $languages = icl_get_languages('skip_missing=0&orderby=code');
    if(!empty($languages)){
        foreach($languages as $l){
            if(!$l['active']) echo '<a href="'.$l['url'].'">';
            echo '<img src="'.$l['country_flag_url'].'" height="12" alt="'.$l['language_code'].'" width="18" />';
            if(!$l['active']) echo '</a>';
        }
    }
}

خرج هذه الوظيفة يحتاج إلى تنميطه بشكلٍ منفصل. على سبيل المثال، وضع الوظيفة في كتلة div وتحديد الأنماط المخصصة لعلامات img.

<div id="flags_language_selector"><?php language_selector_flags(); ?></div >

كود CSS:

#flags_language_selector img{
      margin:1px;
      border:1px solid #333;
}

Flags language selector

استبدال أعلام الدول وتغيير أسماء اللغات

يحتوي WPML على واجهة رسوميات مخصصة لتحرير معلومات اللغة. اذهب إلى WPML->Languages (اللغات) وانقر على Edit languages (تحرير اللغات). ستكون قادرًا على تغيير أسماء اللغات، وتحرير قيم الموقع الجغرافي لها، واختيار أعلام مختلفة.

'skip_missing=0&orderby=name'