עוד פוסט על מוודל. אני מקוה שאני לא משעממת אתכם יותר מדי. זו פשוט תקופה כזאת, וזה בטח יעבור בע”ה 🙂
באחד הקורסים שלנו במוודל, התבקשנו להוסיף כפתור “Back to course” ליד הכפתור “Finish Review” בסיום מבחן (אני כותבת את שמות הכפתורים באנגלית, משום שהקורס הזה בנוי באנגלית). בנוסף, התבקשנו להעלים את הכפתור “Finish Review”, מאחר שבקורס הזה אין משמעות להגעתו של התלמיד למסך ה-review – אין בו כל תועלת בקורס הספציפי הזה.
אחרי שביצענו את המבוקש, התברר שמבחינה שמישותית כדאי לשנות את המלל על הכפתור מ-“Back to course” ל-“Finish and back to course”, כדי לסייע לתלמיד להבין שזהו סוף המבחן.
כלומר, עלינו להוסיף מחרוזת לקבצי המחרוזות של מוודל. בבהתחלה חשבתי שזה פשוט כמו בוורדפרס: גם ב-moodle יש פונקציית תרגום – קוראים לה get_string – שמקבלת מחרוזת בתור הפרמטר הראשון (כמו בפונקציות התרגום של וורדפרס), ושם של רכיב (component) בתור פרמטר שני (שזה דומה ל-text domain שהפונקציות של וורדפרס מקבלות).
את התרגום עצמו עושים מתוך הניהול של מוודל, ב-
Administration > Site administration > Language> Language customization
לפי ההוראות במוודל דוקס.
אז שיניתי את המחרוזת backtocourse ל-finishandbacktocourse (לשמחתי, אני קוראת למחרוזת הזאת מתוך קבצי התבנית שלי, כך שלא הייתי צריכה לגעת ב-core של המוודל),
כך שבמקום
get_string('backtocourse', 'quiz')
החלפתי ל-
get_string('finishandbacktocourse', 'quiz')
ואז
הלכתי לניהול לחפש שם את המחרוזת, (כפי שהייתי עושה לו הייתי בוורדפרס כשאני משתמשת ב-Codestyling Localization).
חיפשתי וחיפשתי, אך לא הצלחתי למצוא את המחרוזת החדשה שלי. 🙁
אז הלכתי לגוגל, ושאלתי אותו איך מוסיפים מחרוזת חדשה ב-moodle. הוא מצא לי פתיל, שלא בדיוק שואל את השאלה שלי, אבל באחת התגובות היה משפט שענה לי על השאלה – אם גם לא בדיוק התשובה שרציתי לשמוע:
You can’t add extra strings in the standard Moodle language files. You can only customize the existing strings
המממ.. באסה.
וגם קצת מוזר. מה, אף אחד לא רוצה להוסיף מחרוזות למוודל?
אז חזרתי לגוגל, הוא הראה לי עוד פתיל רלוונטי. בפתיל הזה, השואל מתחבט איך להוסיף מחרוזות, אבל הוא לא רוצה להוסיף אותה לקובץ שפה קיים, כדי שבשדרוג של מוודל, המחרוזות שלו לא תידרסנה. אהה. הבנתי. אז כנראה שגם אני לא רוצה שהמחרוזת שלי תתווסף לרכיב ה-quiz, מאותה סיבה. נכון?
אם כך, מה אעשה?
אז ככה. כפי שאמרתי קודם, את הקריאה למחרוזת הזאת אני עושה מתוך התבנית שלי. אם כך, אולי מה שעלי לעשות הוא להחליף את את הפרמטר השני שאני מעבירה ל-get_string, ובמקום לומר לו quiz, לומר לו את שם התבנית שלי?
get_string('finishandbacktocourse', 'your_theme_name');
מתברר שכן. רק שאח”כ צריך לעשות עוד משהו:
לגשת לקובץ השפה הרלוונטי בתבנית
your_theme_name >lang > en > your_theme_name.php
ולהוסיף שם בסוף את השורה הזאת:
$string['finishandbacktocourse'] = 'Finish and back to course';
טוב, זה עבד. אבל לא ידעתי אם אני צודקת בתהליך הזה. במיוחד שאחרי זה מצאתי את הפתיל הזה. הוא מדבר על להוסיף language pack חדש, שמתבסס על השפה האנגלית, ולשם להוסיף מחרוזות. אז תהיתי לעצמי – האם זה יותר נכון?
לשם כך כתבתי לנדב , סיפרתי לו את כל הסאגה הנ”ל, ושאלתי בעצתו. נדב הצדיק הזה, ענה לי תשובה מפורטת ויפה. לצערי לא יישמתי אותה מפאת קוצר הזמן, אבל אני מביאה אותה פה, משתי סיבות: א) היא תשובה טובה, וחשוב לי שיהיה תיעוד לה ברשת, ב) מנסיוני, גלגל חוזר בעולם. אני מניחה שזו לא הפעם האחרונה שנצטרך להוסיף מחרוזות, ובפעם הבאה שנעשה זאת, בע”ה, נוכל כבר מראש לעשות את זה בדרך הטובה יותר. אז הנה תשובתו:
כל הוספה של string token חדשים לרכיבי ליבה של מוודל דורשת פתיחה של ISSUE ב TRACKER ונימוק ענייני לנושא. ואז תהליך Integration workflow in the tracker (“קצר”, “מפנק” ו”פשוט” של אישור ושילוב הקוד בליבה) – http://docs.moodle.org/dev/Process
כדי לדלג על ההרפתקאה…
אפשר להוסיף tokens המצביעים על strings באנגלית, בקבצים המתאימים אשר נמצאים ב quiz/lang/en/quiz.php
ואם רוצים גם לתרגם אותם לעברית או שפה אחרת… יש להוסיף תרגום שלהם ב: moodledata/lang/he_local/quiz/php
ולא ב moodledata/lang/he (מחרוזות אשר מגיעות משרת התרגום AMOS)
אם עובדים עם git, זה הזמן לבצע commit על השינוי, כך שבזמן שדרוג של הליבה, לא ידרס הטלאי אשר הוספת למערכת שלכם ואשר אינו קיים בליבה. כאשר תבצעו merge בעתיד (שחרור גרסת ליבה עולמית חדשה) הוא יתבצע באופן כזה שלא ימחקו התוספות לקבצי lang שלכם.
נראה לי שזו הדרך הבטוחה ביותר להוסיף משהו לליבה בלי לאבד אותו.
אגב, כאשר מבצעים שינויים שאינם בליבה, התהליך קצת יותר פשוט.
תגובה 1 על “הוספת מחרוזת ב-Moodle”