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 (name -> translated_name), (ברירת מחדל: id)
* DIR=asc/desc (ברירת מחדל: asc)
* link_empty_to = str (ברירת מחדל: ריקה, פועלת בשילוב עם skip_missing=0 ומאפשרת את השימוש בקישורים מותאמים אישית עבור השפות שאין להן תרגומים עבור הרכיב הנוכחי . {$lang} ניתן לשימוש כמורה מקום עבור קוד השפה)

הערות:

  • הפרמטר skip_missing אומר לפונקציה כיצד לטפל בשפות ללא תרגום.
  • השילוב של orderby ו-order מאפשר את היצירה של מחליף השפה הנפתח או מחליפי שפה שבהם השפות תמיד מוצגות באותו מקום.

הפונקציה מחזירה מערך עם כניסות לכל שפה. לדוגמה, עבור אתר של WordPress הפועל באנגלית, צרפתית ואיטלקית, היא תחזיר את הדבר הבא:

Array
(
 [0] => 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
  )

 [1] => 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
  )

 [2] => 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: כתובת ה-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']

התוצאה היא זו:

הודעה על פוסט הזמין בשפות אחרות
הודעה על פוסט הזמין בשפות אחרות

כדי לכלול את ההודעה הזו בפוסטים, הוסף קריאה לפונקציה 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;
}

הנה מחליף השפה:

כותרת תחתית לשפה
כותרת תחתית לשפה

כדי להוסיף אותו לערכת העיצוב שלך, הוסף את הקריאה לפונקציה 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;
}
בורר שפות עם דגלים

החלפת דגלי הארצות ושינוי שמות השפות

WPML כולל ממשק משתמש לעריכת פרטי שפה. עבור אל WPML->שפות ולחץ על ערוך שפות. תוכל לשנות את שמות השפות, לערוך את האזורים שלהן ולבחור דגלים שונים.

'skip_missing=0&orderby=name'