תַרגום תכנים

תַרגום תכנים באתר דרופל 7.

אתר רב-לשוני אמיתי הנו אתר המספק תרגומים בשפות השונות של האתר לכל פריט מידע. מעבר בין שפה אחת לרעותה יציג את תרגום הדף עצמו ממנו הגענו.

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

דרופל 7 מכילה תשתית מלאה מבחינת הפלטפורמה לבנייה של אתר רב-לשוני. עם זאת, רכיבי הליבה עצמם אינם מספיקים, בדרך כלל, על מנת לקבל את האפשרויות המזעריות הנדרשות באתר רב-לשוני אמיתי. לשם כך באים לעזרתנו רכיבי קהילה מוצלחים מאוד שממלאים את החללים. להלן הנחיות מפורטות כדי לעשות בהם שימוש נכון. בדרופל 8 מרבית היכולות האלה משולבות כחלק מהליבה עצמה, לאו דווקא ממומשות באותה הדרך.

אסטרטגיות

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

האסטרטגיה השנייה, שהיא חדשה יחסית בדרופל, מנסה להימנע מכפילות של פריטי תוכן פיסיים לאותו פריט תוכן מהותי. כלומר, לא ליצור פריטי תוכן שונים עבור כל שפה, אלא כל התרגומים יהיו באותו פריט התוכן. טכנית, מה שמתורגם אלו השדות השונים של הפריט ולא כל הפריט והתרגומים של השדות הם אלו המקושרים זה לזה במסד הנתונים. אסטרטגיה זו אינה מאפשרת את הגמישות של האסטרטגיה הראשונה אך היא עשויה להילקח בחשבון במצבים בהם צריך לבצע פעולה כלשהי עם פריט תוכן (טרנזאקציה למשל, כמו במכירת מוצר). מצב נוסף בו היא עוזרת - כאשר רוצים לתרגם שדות של מונח במילון (taxonomy custom fields) ורוצים להשתמש באפשרות Localize עבור המילון. נכון לזמן כתיבת שורות אלה, הפתרון אינו שלם, נמצא בבטא ודורש הטלאה של פיסות קוד.

המדריך להלן מתמקד באסטרטגיה הראשונה, הקלאסית והחזקה.

הנחות

על מנת לעבוד לפי מדריך זה עליכם לבנות תחילה אתר דרופל 7 באנגלית. המדיך מסתמך על ההנחות הבאות:

  1. (מומלץ) - ייבאתם תרגום דרופל עבור שפה אחת לפחות (בשלב זה מדליקים גם את רכיב הליבה Locale).
  2. המילון - יצרתם מילון באנגלית וכן מונח כלשהו בתוכו (taxonomy dictionary and term).
  3. סוג התוכן - אתם משתמשים בסוג תוכן Basic page המגיע עם הליבה עבור ההדגמות שבמדריך.
  4. הוספתם שדה מסוג Term reference לסוג התוכן Basic page המצביע על מונח במילון.
  5. פריט התוכן - יצרתם פריט תוכן מסוג התוכן.

רכיבי ליבה

  1. הפעילו את רכיב Content Translation.
  2. אתרו את התיבה Language switcher בעמוד התיבות ומקמוה באזור שנוח לכם. כעת ביכולתכם להחליף שפות באופן נוח. למעוניינים בתמונות של דגלים לייצוג השפות, ניתן להשתמש ברכיב languageicons או ברכיב lang_dropdown אם ברצונכם לאפשר בחירה מתוך תיבת בחירה.
  3. גשו לעמוד עריכת סוג תוכן אותו ברצונכם להגדיר כניתן לתרגום. תחת לשונית Publishing option בחרו באפשרות Enabled, with translation (מי שרגיש, כמוני, לנושאי חוויית משתמש - UX - מרים ודאי גבותיו: "למה החביאו את זה כאן?!").
  4. גשו לפריט תוכן מאותו הסוג. תראו שחסרה לשונית Translate ברום העמוד. הסיבה לכך היא שהפריט הוא בשפה ניטרלית. ערכו אותו, בחרו בשפה בה הוא כתוב (אנגלית, נניח), שמרו ואז תופיעה הלשונית. תוכלו לתרגם פריט אחד לשם ניסיון.
    מזהים כאן בעיה? - הפריט היה בשפה ניטרלית היות ולא היה צורך בשום שפה מסוימת לפני תחילת תהליך הלוקליזציה - זה ברור ומתקבל על הדעת. אולם, עצם העובדה שניתן להוסיף במערכת דרופל פריטי תוכן ששפתם ניטרלית ולא מסוימת גם לאחר הפעלת רכיב התרגום, מוביל אותנו למסקנה שצריך רכיבים נוספים. בעיה זו באה לידי פתרון בקלות באמצעות חבילת הרכיבים העיקרית של דרופל: i18n בה נעשה שימוש להלן.

מניעת הוספה של פריט תוכן בשפה ניטרלית

רכיב i18n - Internationalization - השם i18n משמש כקיצור נפוץ בעולם התוכנה עבור המילה internationalization - הוא מורכב מהאות הראשונה ומהאות האחרונה וביניהן המספר 18 המייצג את מספר האותיות שביניהן במילה המקורית.

  1. הורידו את חבילת הרכיבים variable והדליקו את רכיב Variable עצמו (אין צורך באחרים) הדרוש לרכיב i18n.
  2. הורידו את חבילת הרכיבים i18n עצמה והדליקו את הרכיבים הבאים הנדרשים לקבל את יכולות הבסיס של התרגום:
    • Internationalization
    • String translation
    • Multilingual content
  3. אם בסוג התוכן אותו ערכתם קודם לכן לא בחרתם באפשרות Enabled, with translation שנמצאת תחת הלשונית Publishing options - עשו זאת כעת.
  4. כעת קיבלנו יכולות חדשות הפותרות את הבעיה שהסברתי קודם (פריט תוכן בשפה ניטרלית ולא בשפה מסוימת). היכן הן? - גשו לעמוד העריכה של סוג התוכן וראו שנוספה לכם לשונית בשם Multilingual settings. סמנו את שלוש האפשרויות תחת Extended language options ושמרו.
  5. כעת בניסיון ליצור פריט תוכן מסוג זה יוכל המשתמש ליצור פריט רק בשפה בה הוא מצוי באותו הזמן.
  6. כעת גם נוסף לנו פריט תחת Configuration > Regional and languages בשם Multilingual settings (נתיב admin/config/regional/i18n). תחת לשונית Strings אפשרו תרגום של פורמטי הטקסט בהם הנכם משתמשים.
  7. צרו פריט תוכן ולאחר שמירתו תראו שנוספה לכם לשונית בשם Translate ליד לשונית Edit. אם אין לשונית כזאת, זה חיווי לכך שלא הגדרתם כיאות את סוג התוכן ולכן נוצר לכם פריט תוכן בשפה ניטרלית ופריט כזה אינו ניתן לתרגום.
  8. לחצו על Translate ותקבלו טבלה המייצגת את השפות השונות הדלוקות במערכת - שורה אחת לכל שפה. עבור שפה שכבר מכילה פריט מופיע תחת העמודה Operations קישור לעריכה של הפריט. לעומת זאת, בשורה של שפה עבורה לא תורגם עדיין הפריט תמצאו קישור להוספת תרגום.
    שימו לב שהמערכת מספקת לכם, כחלופה ליצירת תרגום, חיבור לפריט תוכן שאולי כבר נוצר לפני כן עבור שפת היעד.

תרגום שדות

  1. אתר דרופל משתמש באופן נרחב בשדות שונים, ועל מנת לאפשר את תרגומם ולהוסיף הגדרות מתאימות, נזדקק להפעיל גם את שני הרכיבים הבאים המגיעים עם החבילה:
    • Field translation
    • Synchronize translations
  2. גשו לעמוד העריכה של סוג התוכן שלכם והיכנסו ללשונית Synchronize translations. כאן תמצאו את השדות אותם הגדרתם עבור סוג תוכן זה ואת ההגדרות אותן הגדירו רכיבי ליבת דרופל בעצמם. כברירת מחדל, כל השדות מוגדרים כניתנים לתרגום. שדות שהערכים שלהם משותפים לפריטי התוכן בכל השפות ניתנים להדרה (exclusion) מכלל זה על ידי סימון תיבת הבחירה לצד שמם. כלומר, שינוי ערך של שדה שהדרתם כחלק מעריכת פריט תוכן בו הוא נמצא ישפיע על כל התרגומים הקשורים לפריט תוכן זה - הערך ישתנה בכולם. אלו שדות יש להדיר? - אין כלל אצבע לשאלה זו, אך שדות קלאסיים המועמדים להדרה הנם שדות תמונה, שדות ערכים מספריים, שדות טקסט המייצגים מספר קטלוגי של מוצר, וכדומה. הבחירה בשדות המודרים צריכה להיות על פי דרישות המערכת המסוימות של האתר שלכם. פריטי תוכן מוצבעים (רפרנס) מסוג תוכן המאפשר תרגום לא יסונכרנו. לתשומת לבכם, כותרת פריטי תוכן אינה ניתנת להדרה (אם בכל זאת תרצו להדיר את הכותרת מתרגום, הפכו אותה לשדה רגיל באמצעות רכיב title.
  3. תווית השדה (label) ניתנת גם היא לתרגום וכן ערך ברירת המחדל של השדה. לשם תרגום ערכים אלו גשו לעמוד עריכת השדה ולחצו על הלשונית Translate.
  4. אם המערכת שלכם מכילה קשרים בין ישויות (סוגי תוכן, מונחי מילון וכולי) תצטרכו להפעיל רכיב נוסף: Multilingual select. קישור בין פריט לפריט הנעשה באמצעות הרכיב entityreference יתאפשר רק בין פריטים השייכים לאותה השפה. כך, כאשר אתם יוצרים פריט תוכן או עורכים כזה, יופיע ברשימת הפריטים אליהם ניתן לקשר רק פריטים בשפה של פריט התוכן המקשר.

תרגום תפריטים או פריטים בתפריט

  1. ערכו הן את המקור והן את התרגום על מנת להוסיפם כקישורים בתפריט הראשי (Main menu).
  2. נוצרת בעיה - רואים את שני הפריטים בשתי השפות.
  3. הדליקו את הרכיבים:
    • Translation sets
    • Menu translation
  4. גשו לעמוד העריכה של התפריט הראשי (נתיב: admin/structure/menu/manage/main-menu/edit) ובמאפיין Translation mode שנוסף לכם בחרו את האפשרות Translate and Localize ושמרו.
  5. עדיין תראו את שני הקישורים בתפריט כי הם מוגדרים כפריטי תפריט ללא שפה מסוימת (על אף העובדה שלעצמם הם כן מוגדרים כשייכים לשפה מסוימת). ערכו כל אחד מהם ושמרו. כעת מוצגים קישורים בתפריט רק לפריטים השייכים לשפה בה מצוי הגולש.

תרגום משתני סביבה

משתנים גלובליים כגון שם האתר ניתנים לתרגום אף הם.

  1. הפעילו את הרכיבים הבאים:
    • Variable realm
    • Variable store
    • Variable translation
  2. כעת ביכולתכם לתרגם את שם האתר לשפות הנתמכות. גשו לעמוד מידע על האתר (נתיב admin/config/system/site-information) ותראו שנוסף חיווי שקיימים משתנים רב-לשוניים בעמוד: שם האתר וסלוגן האתר. כמו כן, מתחת לכל שדה המייצג משתנה נוסף חיווי: This is a multilingual variable. לחצו על קישור השפה הרצוי, תרגמו ושמרו.
  3. הגדרת המשתנים התומכים ברב-לשוניות נקבעת בלשונית Variables שתחת Multilingual settings (נתיב admin/config/regional/i18n/variable). כאן תוכלו למשל להוסיף את המשתנה המייצג את נתיב דף החזית לתומך רב-לשוניות אף הוא - סמנו את התיבה Default front page. לאחר מכן חזרו לעמוד הגדרות האתר ותוכלו לתת ערך שונה עבור כל שפה.

תרגום מילונים ומונחים

ישנן מספר שיטות, אסביר בקצרה מה אומרת כל אחת מהן ואתמקד במימוש של השיטה הטובה שמספקת את מרב הגמישות.

  1. הדליקו את רכיב Taxonomy translation. לרכיב זה אין הגדרות רוחביות במערכת אלא עבור כל מילון בנפרד.
  2. גשו לעמוד עריכת מילון - תמצאו שם את ארבע הגישות לתמיכה ברב-לשוניות של מונחים.
    • גישת No multilingual options for terms - מאפשר תרגום של שם המילון בלבד, ללא המונחים.
    • גישת Localize - מאפשרת תרגום גם של המונחים. מופעי המונח בשפות השונות הן אך תרגום שמו של המונח ולא אובייקטים שונים. לא מאפשר רב-לשוניות של שדות custom אם הוספו למונח.
    • גישת Translate - רב-הלשוניות של מונח ממומשת באמצעות אובייקטים נפרד לכל שפה.
    • גישת Fixed Language - המילון מיועד רק לשפה מסוימת, אין תמיכה ברב-לשוניות.
  3. תמיד אני בוחר בגישת Translate כי היא מאפשרת גמישות רבה יותר במקרים שונים וכן תמיכה רב-לשונית לשדות custom אם קיימים עבור המונח. מאידך, יש גם מחיר נלווה לשיטה זו - היא דורש ת יותר זמן בעריכת התוכן בשל הצורך לחבר כל פריט תוכן מתורגם למונח המקביל למונח אליו מחובר הפריט המתורגם. נבחר, אם כן, באפשרות זו ונלחץ על הכפתור Save and translate.
  4. בלשונית Translate נלחץ על הקישור translate בשורת השפה עבורה ברצוננו להוסיף תרגום לשם המילון.
  5. תרגמו את שם המילון ושמרו.
  6. גשו לעמוד העריכה של מונח במילון - על מנת לתרגמו בצעד הבא, חובה להמיר את המאפיין השפה את הערך Language neutral בשם השפה הרצויה עבור אותו מונח. לחצו על כפתור Save and translate. לתשומת לב - גם ביצירת מונח חדש (ולא רק בעריכת מונח קיים) יש צורך באופן פעיל לבחור שפה, זאת להבדיל מיצירת פריט תוכן לגביו ניתן להגדיר שהוא יכול להשתייך רק לשפה מסוימת, כפי שראינו לעיל. כשל זה נפתר בדרופל 8 ועד אז, יש לוודא שבוחרים בשפה מסוימת ולא יוצרים מונח בשפה ניטרלית.
  7. בדומה לפריטי מידע קודמים, גם בעמוד התרגומים של מונח מוצגת טבלה ובסוף השורה קישור לתרגום. תרגמו את המונח ולחצו על כפתור Save.
  8. נכון לזמן כתיבת שורות אלה, בסוף התרגום מוצג בפניכם עמוד עריכת המונח ואתם מאבדים את ההקשר - עץ המונחים במילון. זו כמובן טעות מבחינת חוויית משתמש, נקווה שבעתיד תתוקן. מומלץ בינתיים בעת עריכה או תרגום של מונח לפתוח לשונית חדשה בדפדפן.
  9. סדרו את המונחים בעמוד מונחי המילון על פי הסדר בו תרצו שיוצגו. שימו לב - ברשימה מוצגים המונחים מכל השפות, אך בבחירת מונח בפריט תוכן לאחר מכן יוצגו רק המונחים מהשפה בה נערך אותו פריט התוכן. מומלץ לסדר את התרגומים השונים לאותו המונח יחדיו ואחר כך את התרגומים של המונח הבא, וכולי. סידור כזה נוח יותר לעריכה בהמשך מאשר קיבוץ כל המונחים של שפה אחת יחדיו ולאחרי קיבוץ זה קיבוץ של השפה הנוספת.
  10. כעת ערכו כל אחד מפריטי התוכן - המקורי והמתורגם - על מנת להצביע על מונח במילון. תוכלו להבחין שהמונחים הניתנים להוספה לפריט מסוים הנם רק המונחים שהוגדרו עבור אותה שפה של הפריט. אם זה לא המצב, טעיתם בהגדרות.

תרגום רכיבים אחרים

  1. אם אתם עושים שימוש ברכיב טופסי יצירת הקשר Contact המגיע כחלק מהליבה של דרופל, תוכלו לאפשר תרגום גם שלו. לשם כך הדליקו את רכיב Contact translation. גשו לעמוד יצירת הקשר ושם תגלו ממשק תרגום זהה לשל פריטי תוכן.
  2. עבור אפשרות להגדיר תיבות (Blocks) כך שתופענה רק עבור שפות מסוימות, הדליקו את רכיב Block languages. בעמוד העריכה של תיבה מסוימת נוזפה לכם לשונית בשם Languages תחת Visibility settings - סמנו שם את השפות עבורם יציג דרופל תיבה זו. הערת אזהרה: לרוב אין צורך להשתמש ברכיב זה כי תיבה מכילה לרוב אובייקטים שניתנים לתרגום, כגון תפריט או היבט. התיבה אמורה להיות קבועה המקומה ותוכנהּ הוא זה שמשתנה על פי השפה בה מוצג האתר. יוצא דופן - מתי כן צריך רכיב זה - זה כאשר מסיבה עסקית כלשהי רוצים להציג תוכן מסוים בשפות מסוימות ולא בשפות אחרות או אם מאיזושהי סיבה לא ניתן לתרגם כראוי את האובייקט המוצג בתיבה.

רכיבים קשורים נוספים

  1. החבילה multilink מאפשרת לעורך תוכן להוסיף קישורים לפריטי תוכן שעדיין לא קיימים בשפה של הפריט הערוך אך עשויים להיות קיימים בעתיד.
  2. החבילה translation_overview מספקת למנהל התוכן תמונה נוחה של מצב התרגום של התכנים באתר.
  3. אם יש לכם מונחי טקסונומיה מרובים הדורשים תרגום, הרכיב translation_table יאפשר לכם לתרגם הרבה מונחים בבת אחת, בעמוד אחד, במקום לתרגם בנפרד כל מונח.