Global templates/Proposed specification/he

  Татары, узбеки и ненцы И весь украинский народ, И даже приволжские немцы К себе переводчиков ждут. И может быть в эту минуту Меня на турецкий язык Японец какой переводит И в самую душу проник. —Осип Мандельштам זוהי טיוטת הצעה לדרישות פונקציונליות לתבניות ויחידות גלובליות.

ניתן למצוא תיאור של ההצעה הזאת באורך של עמוד אחד בדף טיוטת אפיון לתבניות גלובליות – אמ;לק.

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

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

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


 * 1) אנשים שיוצרים ומתחזקים תבניות ויחידות.
 * 2) אנשים שיוצרים ועורכים דפים שמכלילים תבניות ויחידות. זה כולל את כל העורכים ואת כל סוגי הדפים:
 * 3) * כל רמות הניסיון: מאלה שלגמרי חדשים עד כאלה עשו אלפי עריכות
 * 4) * ==== השפה שבה המחרוזות מוצגות למשתמש ====
 * 5) * כל אתרי הוויקי: ויקיפדיה, ויקימילון, ויקימסע, ויקינתונים, אינקובטור, וכו', ומיזמים עתידיים
 * 6) * כל השפות: אנגלית, צרפתית, רוסית, ספרדית, ארמנית, פרסית, זולו, מניפורית, וכו'
 * 7) * כל סוגי הדפים: ערכי ויקיפדיה, דפי שיחה של ערכים, דפי שיחת משתמש, דפי דיונים של הקהילה, דפי מיזמים, קטגוריות, דפי תיעוד תבניות, וכו'.

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

הבעיה
הערה כללית: אלא אם נאמר אחרת, כל אזכור של "תבניות" מתכוון גם ליחידות לואה (Scribunto).

תבניות מממשות יכולות שונות של אתרי ויקימדיה. חלק מהן בולטות מאוד, במיוחד תבניות המידע (infoboxes), הערות השוליים, "דרוש מקור", ורבות אחרות. כל הקוראים רואים אותן, וכל העורכים נתקלים בהן כמעט בכל פעולת עריכה. בנוסף, הן מממשות רבים מהתהליכים הפנימיים של ניהול הקהילה: בקשות מחיקה, בקשות הסרת חסימה, הבעת תמיכה בדיונים, מיון ערכים בשביל מיזמי כתיבה, וכיו״ב.

קשיים לכל העורכים בכל אתרי הוויקי
פרויקטים שמייצגים הרחבות מדיה־ויקי מוגדרות בקובצי YAML במאגר translatewiki בגריט ומוצגות בממשק המשתמש של Translate בבורר הפרויקטים, הידוע גם כבורר קבוצות הודעות.

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

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

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

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

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

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

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

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

התלונות הנפוצות ביותר בנושא תרגום תוכן נוגעות לתבניות.

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

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

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

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

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

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

הפתרון המוצע: תקציר
יש כבר מאפיינים רבים של מדיה־ויקי שעובדים באופן גלובלי בכל אתרי הוויקי: תמונות (באמצעות ויקישיתוף), חסימה, חשבונות משתמש (CentralAuth), העדפות, דפי משתמש, דפי JS ו־CSS, ואחרים.

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

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

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

תבניות ויחידות גלובליות יעצימו את עורכי התוכן בכל אתרי הוויקי לכתוב ולתרגם תוכן שמשתמש בתבניות בלי הצורך לצלול לתוך ההבדלים ביניהם וללמוד מחדש חוקים שונים וכישורים שונים בכל אתר ויקי.

התחביר לפיתוח תבניות ויחידות, והשיטה הכללית לתחזוקה והשמשה של תבניות לא ישתנו, כך שכל הכישורים שמתחזקי התבניות רכשו לאורך השנים יישארו רלוונטיים.

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

תרגום תבניות יהיה נוח כמו תרגום הרחבות מדיה־ויקי.

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

הפירוש של גלובליות הוא שהקוד של התבנית אמור להיות מתוחזק במקום אחד ושמיש בכל אתרי הוויקי.

איך לעשות את התבניות סמנטיות
תבניות מעולם לא היו סמנטיות באופן אמין וכללי, במובן של להיות קלות להבנה עבור תוכנה שמעבדת דפים.

יש רק דוגמאות מעטות לתבניות שנעשו סמנטיות:


 * תבניות הערות שוליים מגוונות, ששמישות דרך כפתור "הערות שוליים" בסרגל עורך החזותי. נדרש לכתוב קוד נפרד ורב כדי להגדיר את Citoid בכל ויקי שרוצה להשתמש בהן.
 * "דרוש מקור", שנמצאת בתהליך אימוץ לעורך החזותי בספטמבר 2019. גם זה דורש הגדרות בכל אתר ויקי.
 * תבניות לאזכור משתמשים באמצעות ההרחבה Flow, שגם דורשות הגדרות מקומיות.
 * כלים לניתוחים ומחקרים בהיטלים (dumps) יכולים לפענח תבניות מיון והערכת איכות של דפים של מיזמים בוויקיפדיה האנגלית, שבדרך־כלל נוספות לדפי שיחה.
 * ההרחבה PageTriage מוגדרת לעבוד עם תבניות תחזוקה של ויקיפדיה האנגלית.

במקרה של PageTriage, ההרחבה למעשה רושמת במפורש בקוד שלה (hard-coded) שמות של תבניות בוויקי אחד, מה שגורם לה לא ראויה לשימוש באתרי ויקי אחרים ללא שכתוב מהותי. אף אם הצעד של ההגדרות המקומיות בוויקי הוא צעד קטן, כמו בדוגמה של Flow, זה עדיין חייב להיעשות. זה לא מסתלם (scalable) ל־900 אתרי הוויקי שיש לוויקימדיה, ולאלפים שיהיו בעתיד.

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

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

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

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

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

איך התבניות מובאות לאתר היעד היא שאלה של הנדסה וארכיטקטורה, כל עוד שאר הדרישות מבוצעות. השאלות האלה נדונו בעבר על־ידי כמה מפתחים, למשל סביב פרויקט Shadow namespaces. המסמך הזה מנסה לדון בשאלות של איך זה עובד מבחינת משתמש שעורך דף שמשתמש בתבנית, או שמתחזק את התבנית עצמה: איך לכתוב אותה כך שישי אפשר לתרגם אותה; איך היא מתורגמת; איך מתאימים אותה לוויקי המקומי; וכו'. השאלות האלה לא נדונו באופן מספק בדיוני הארכיטקטורה הקודמים בנושא.

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

פרויקטים שמייצגים הרחבות מדיה־ויקי מוגדרות בקובצי YAML במאגר translatewiki בגריט ומוצגות בממשק המשתמש של Translate בבורר הפרויקטים, הידוע גם כבורר קבוצות הודעות.

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

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

צריך לאפשר לחלק מהתבניות לא להיות גלובליות
אין לכפות על כל התבניות להיות גלובליות.

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

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

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

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

צריך להיות אפשרי לתרגם את כל המחרוזות שמוצגות למשתמשים
מחרוזות ממשק משתמש (הידועות גם בשם "הודעות מערכת") של תוכנת מדיה־ויקי, ההרחבות שלה, וחלק מהכלים החיצוניים (כגון Pageviews) מתורגמים באופן נוח ויציב באתר translatewiki.net. תהליך התרגום הזה מוכר לפחות לחלק מהעורכים בכל השפות.

כרגע זה לא אפשרי לעשות את אותו הדבר עם תבניות. באתרים רב־לשוניים כמו ויקישיתוף ו־mediawiki.org קיימת מערכת TNT לתרגום תבניות מסוימות, אבל היא מורכבת מאות, ואינה יכולה לשמש את ויקיפדיה, ויקיטקסט, וכו'.

המצב הרצוי ביותר הוא לתרגם תבניות בדיוק כמו את מדיה־ויקי ואת ההרחבות באמצעות ויקי עם ההרחבה Translate.

המחרוזת המתורגמת צריכה להפוך להיות שמישה מייד אחרי שהתרגום מתפרסם דרך ממשק התרגום.

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

יש לאפשר גם תרגום דפי תיעוד תבניות. ממש תרגום הדפים הנוכחי של ההרחבה Translate אמור להיות מספיק בשביל, אולי עם התאמות מסוימות.

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

עם זאת, יש גם תבניות שמשמשות בתור רכיבי ממשק משתמש, אז אולי שייך לאפשר הצגה של מחרוזות מתורגמות גם בשפת המשתמש, כאשר היא שונה משפת התוכן. זה רלוונטי במיוחד לאתרים רב־לשוניים כאן ויקישיתוף, ויקינתונים, מטא, ו־mediawiki.org.

שרשראות הגיבוי (fallback) הרגילות של מדיה־ויקי צריכות לשמש כאשר אין תרגום זמין.

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

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

כדי שהמפתחות יהיו ייחודיים באופן גלובלי, כנראה אפשר לכלול את שם התבנית הגלובלית במפתח ההודעה.

ארגון הודעות
ההרחבה Translate מארגנת הודעות בקבוצות (groups), הידועות גם בשם פרויקטים (projects), שיכולות להיות מאורגנות בקבוצות משולבות (aggregate groups). למשל Article Placeholder‏, Score‏, ו־Poem הן קבוצות שמייצגות את הרחבות המדיה־ויקי עם השמות האלה וכולם כלולים בקבוצה המשולבת "Extensions used by Wikimedia - Advanced", יחד עם עוד מספר הרחבות.

פרויקטים שמייצגים הרחבות מדיה־ויקי מוגדרות בקובצי YAML במאגר translatewiki בגריט ומוצגות בממשק המשתמש של Translate בבורר הפרויקטים, הידוע גם כבורר קבוצות הודעות.

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

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

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

Finding how to translate a template
Every template description page needs to have a direct link to translating it to the user’s language.

Some templates use Wikidata labels as part of their UI instead of hard-coding strings. This is done at the moment in Wikidata Infobox on Commons, Infotaula persona (Infobox person) in the Catalan Wikipedia, and in several other templates. These labels and values can be localized in Wikidata itself. Such usage cannot cover all the needs of template localization, but it is legitimate and useful for particular purposes. As long as this is properly described in the template documentation, this can continue to be used, and probably doesn't need special infrastructure adaptations. (Perhaps the translation of the relevant labels and values can be somehow integrated into the Translate interface for localizing the template, but this is optional.)

Considerations for modules
Lua modules can load and parse translatable MediaWiki strings, but there is no defined way for storing these strings for Lua modules that are maintained as wiki pages. It is possible to package Lua modules as parts of extensions, and then they are able to load translatable strings from the extensions’ i18/*.json files, but this is done in very few extensions at the moment. Rewriting templates in Lua may be a more robust solution from the engineering point of view, but Lua will not necessarily be embraced by all existing template maintainers, and their cooperation will be crucial to the project’s success, so this cannot be done to all templates.

Localizing the template name
The template may have a different name in every language, but it must be directly connected to the central storage

Global templates and modules are supposed to be immediately usable in all wikis without any extra steps, so it must be possible to transclude a global template in a local wiki page using its global name. The cross-wiki editors community shall decide what will be the policy for these global names.

Similarly to parameter names, templates may have different names in different languages, and this must be preserved. There must be a structured way to translate template names. Perhaps Wikibase sitelinks can play a role, but not necessarily.

If this is not done, editors will either avoid global templates, or wrap the global template in a local template with a translated name, and this will probably cause the template to lose the connection to the global entity. This is not desirable and misses the whole point of the project.

Template names must only be translated to languages that can be content languages of wikis. Translation to Formal German or British English are probably unnecessary. There may be a way to have aliases or redirects. Language variants, for example for Serbian and Chinese, must be supported according to these languages’ needs.

If a local template exists in a wiki and it has the same name as a localized name of a global template, the local template will be used. This is similar to how local files with identical names override global files on Commons, and how local messages in the MediaWiki space override the localization coming from the code.

Lua module names are often localized, too. Their names can be localized for direct invoking from wiki pages, but since code usually uses English-like identifiers, the internal global names should probably be preferred for use in the code itself, for example in  statements.

Localizing named parameters
Parameter names are different in every language. They are usually based on words in each language, so it’s important for editing the transclusion in wiki syntax conveniently.

Ideally, the global template should have generic internal parameter names that have translations to different languages. This is somewhat similar to Wikidata property name labels, but it can be simpler: since English is a kind of a lingua franca for software developers and templates are a kind of software, it’s probably OK to have English as the default source language rather than generic numbers as it is in Wikidata.

These translations of parameter names must be validated:


 * they must not include invalid characters
 * they must not be repeated within one template in one language
 * Anything else?

Automatic parameter translation
If the localized template names and all the localized parameter names are stored centrally, it will possible to have a simple service that gets a valid template with parameters, a source language name, and a target language name, and outputs a localized template. For example:

Input:

Output:

In visual editing and in 2017-style wiki syntax editing, simply copying and pasting a template from wiki in another language will do the parameter translation automatically.

For plain wiki syntax editing, there should be a simple way to operate this service, for example a special page or a dialog box where an editor can paste the template and the source language, and get the template with translated parameters.

In both cases only the names of the template and the parameters will be translated. Translating the parameter values is discussed separately.

Nameless parameters
Nameless numbered parameters must continue working, of course.

A decision is needed about how will their names be localized.

Translating parameter values
In addition to making the templates’ functionality and design shared, some thought must be given to making the template parameter values shared, as well as not shared.

Some parameter values are the same in all languages by their nature. For example an IPA pronunciation of a place’s native name (e.g. [dɛn ˈɦaːx] for The Hague), the year of foundation of a city, the chemical formula of a compound, etc. At least some of these should probably be stored in Wikidata and easily loadable in a template.

Some parameter values have to be translated or transliterated, for example people’s names, translations of country mottos, etc.

Global templates must make this possible, but in practice, these things are still often copied across wikis, and this must be taken into account as well.

Some parameter values can be reliably and predictably converted automatically, and the global templates infrastructure must support this. For example, number formats and digit characters are often different in Burmese, in languages of India, and in some other languages, but they can be reliably converted using simple software.

Text direction
Templates must adapt themselves to the text direction (ltr / rtl) of the wiki in which they are displayed.

It must convenient to write a template in a direction-neutral way, with as little explicit right and left alignment as possible.

For easier translation of content, templates that are common in the largest projects must become global
The most popular source language for translation in Content Translation is English, by far. After it come Spanish, Russian, French, German, Catalan, Ukrainian, Italian, Chinese, and Portuguese. Because of this, it makes sense that the common templates in the most common languages, especially those in English, are the ones that are the most important to make global for the benefit of all other languages.

Somewhat paradoxically, however, the editors in these largest languages are also the least interested in making them global:


 * The templates already work well for them and most people there don’t directly care about the convenience of translation to other languages.
 * Rewriting the templates so that the strings will be translatable may be time-consuming and may force them to change their template maintenance skills.
 * Making the templates suddenly used by many more projects may make it harder to achieve consensus about making future changes in how the templates work.

This is more a consideration of practicality and community relations than a consideration of engineering, but it must be taken into account when making technical architectural decisions. Without doing proper preparation in this area, the whole project may fail.

As long as there are important common templates that are not global, Content Translation will have to keep supporting them. If the infrastructure for global templates is created, and migration of existing templates proceeds in a good pace, then Content Translation developers may consider stopping developing and some day deprecating the code for non-global template adaptation.

The pace of migrating templates from large wikis to the central repository can be one of the success metrics for the project.

It must be possible to use templates completely in both wiki syntax and in visual editing
It’s obvious, but should be mentioned anyway: Wiki syntax editing is not going away soon, and it must be possible to keep editing template transclusions in pages as it is done now. This must not become more complicated.

However, Visual Editor is increasingly embraced by both experienced and new editors, so every feature of how templates work must work well in both Visual Editor and wiki syntax editing.

Extra templates features
There are some extra features of core and extensions around templates. All of them must continue working, and may need updating for the global templates age.

TemplateData

 * Template description must be translatable, just like other user interface strings.
 * Parameter names, aliases, and descriptions must be centrally translatable.
 * Wikitext format parameter (inline, block, custom) must keep working.

TemplateStyles

 * There must be a possibility to write Template Styles pages in the same central repository as templates. The central style must be loaded by default, and it must be possible to override it locally.

TemplateSandbox

 * Special:TemplateSandbox must keep working.
 * It must be possible to edit a template in the central repository and preview it in a page in the target wiki.

TemplateWizard

 * Uses a wiki’s standard search to find templates. The results are presented in a list that might need to be changed to make the global/local status visible.
 * TemplateWizard gets its information for templates from the TemplateData API, so as long as that keeps returning the same structure there shouldn’t be any issues, and i18n is already working.

Wikibase

 * Wikidata can be used to bring in some parameter values from a central repository to the wiki. This is used productively in several wikis, among them French, Hebrew, Basque, Catalan, Estonian, and some others, although the actual implementation may differ. This must continue working, of course. Unifying the way in which it is done across different wikis may become one of this project’s most significant impact areas.
 * It may also affect the project of editing template values from within wikis.

VisualEditor

 * VisualEditor obviously needs to be able to insert both global and local templates.
 * VisualEditor shows a link to the template description page in the template editing dialog. This link should point directly to the global template when it is used.

Making templates easily reusable on non-Wikimedia projects may be desirable, too
Even though it doesn’t directly benefit Wikimedia projects, it may make sense to consider making templates easily reusable not only across Wikimedia projects, but also on other MediaWiki sites. Doing this will probably require some more work, but it may contribute to better modularization, and this may eventually benefit Wikimedia projects, too.

This is comparable to the capability of direct embedding of images from Commons on non-Wikipedia websites.

Imagine a world
Imagine a world in which every single human being can freely share in the sum of all knowledge and it's actually a really easy thing to do because templates are global:

(Note: The "With global templates" column assumes that the infrastructure is deployed in all Wikimedia wikis, and that the most often used templates are moved to the central infrastructure.)

Status
As noted above, as of October 2019, this page is only an idea, and not a commitment to implement a project.

The Platform Evolution project (2018) indicated some intentions to have support for global templates in the future. The page Platform Evolution/Recommendations discusses ideas for updating content modularity, and says:
 * ... “boxes” are an ideal focus area for creating modularity. They represent self contained features and also an opportunity to enable equitable sharing of user features across projects and languages be establishing a cross-project service to share templates. This project will also force us to consider how to handle content layout and structure separately from composable pieces content.

The closely related page Platform Evolution/Goals lists this as one of the goals:
 * Increase equity and power of contribution tools. We want to support the contribution of more content types of content, including media, in more interactive ways and across all projects. This means making some existing tools - like templates - available for consistent reuse across all projects and languages. It also means improving translation tools to remove silos of content. Finally, we also want to make it easy for contributors to create new cross-project, localizable content tools.

Other than these goals, however, there is no detailed plan for how such a feature will work. This page is an attempt to propose such a plan and listen to feedback from editing communities.

Useful links
Some relevant pages that discuss similar topics:
 * Platform Evolution/Goals
 * Platform Evolution/Recommendations
 * Multilingual Templates and Modules - An attempt to implement a similar feature using bots
 * meta:Community Wishlist Survey 2015/Results - Central Global Repository for Templates, Lua modules, and Gadgets came in as #3 in the Community Wishlist vote. Listed as “In development - Parsing team”, but not actually done.
 * meta:Which templates should be global? - an informal list made by various editors