הסבת דרופל 5 לעברית (RTL)

דרופל 5 מציגה את מנגנון ההפצות. החל מגרסה זו ניתן להגדיר מראש תצורות שונות של התקנה (profiles), שכוללות רכיבים (מודולים) שנבחרו במיוחד לכל תצורה, על מנת להגשים ייעוד מסויים שלשמו מותקנת המערכת.
על מנת להפוך את המערכת ליעילה יותר ומהירה יותר, קובץ הסגנונות הראשי (misc/drupal.css) פורק, וכעת כל מודול, גם אלו השייכים ל-core, מכיל, במידת הצורך, קובץ CSS שנטען רק אם המודול המדובר נבחר ברשימת המודולים. עובדה זו הופכת את מלאכת העברות למעט מסורבלת יותר, בשל העובדה שצריך לערוך קבצים מרובים ולא קובץ אחד. לשמחתנו - בכל גרסה של דרופל נצטרך לעשות את זה רק פעם אחת!
אז הפעם זה אני.
העברות עצמו כוסה כאן כבר בהרחבה, עד כמה שניתן להרחיב (הופכים ימין לשמאל ולהיפך בהגדרות ה-CSS, ומשתדלים לא לעשות את זה איפה שלא צריך...). בגרסת הבטא של דרופל 5, ואין סיבה שזה ישתנה בגרסה הרשמית, ישנם 16 מודולים שהסגנונות שלהם דורשים התייחסות. בכל תיקיה של אחד המודולים האלה יש קובץ CSS שאת שמו נשנה באופן הבא: modulename.css הופך ל- modulename-rtl.css. כעת נוספו לנו הקבצים הבאים (מצורפים):
admin-rtl.css, aggregator-rtl.css, block-rtl.css, book-rtl.css, comment-rtl.css, defaults-rtl.css, forum-rtl.css, help-rtl.css, menu-rtl.css, node-rtl.css, poll-rtl.css, profile-rtl.css, search-rtl.css, system-rtl.css, taxonomy-rtl.css, user-rtl.css
על מנת להמשיך את כוונת היעילות שבבסיס ריבוי הקבצים, עלינו לטעון את הקבצים החדשים במקום אלו הקיימים. בדרופל 5 נעשית טעינת קבצי CSS ע"י קריאה לפונקציה drupal_add_css. פונקציה זו מגדירה קובץ CSS השייך לאחת משלוש קטגוריות: core, module, theme. החלוקה נעשית על מנת להבטיח שהסגנונות יטענו בסדר הגיוני, ושהדירוג שלהם יהיה ברור יותר. כל קריאה לפונקציה מוסיפה אלמנט למערך css$. הכנסת הסגנונות למערך היא חלק מהגישה המקובלת היום בדרופל, שבה הכל מוכנס לתוך מערכים, מה שמאפשר לשנות אלמנטים שעד כה היה צורך בתעלולים מני תעלולים שונים על מנת לשנותם. לדוגמה:
drupal_add_css(drupal_get_path('module', 'menu') .'/menu.css');
בכדי לקרוא לקבצים החדשים עלינו לשנות את האלמנטים המתאימים במערך שנוצר. אני מביא כאן את הדרך שלי, אשמח מאוד לקבל הצעות לדרכים יעילות יותר, אם מצאתם כאלה. את התוספת הבאה יש להכניס בקובץ page.tpl.php, לפני הקריאה לסגנונות, ולא בקובץ phptemplate, כפי שעשינו עד כה:

<?php
/* Load RTL styles instead of default ones: */
foreach($css as $type => $files){
 
$current = $type;
  foreach(
$files as $name => $file){
   
$element = $name;
   
$rtl_style = str_replace(".css","-rtl.css",$file['path']);
    if(
file_exists($rtl_style)){
     
$css[$current][$element]['path'] = $rtl_style;
    } 
  }
}
?>

פעולה זו רק משנה את המערך הדפולטיבי של הסגנונות. בכדי לגרום למערך המתוקן להיטען במקום המערך הדפולטיבי, נבצע את השינוי הבא:
<?php
//print $styles // commented out in favour of drupal_get_css($css) to include the rtl styles
print drupal_get_css($css) ;
?>

זהו. מצורף קובץ ובו הקבצים המעוברתים. תצטרכו לעבוד קצת ולהתאים כל קובץ לתיקיתו הוא, אבל זה שטויות.

עדכון:

הקובץ המצורף הוחלף והוא כולל כעת מספר מצומצם יותר של קבצים. כמו כן, הקבצים מותאמים לגרסה 5 RC2.

בכל זאת - משהו פה לא נראה לי. חייבת להיות דרך יותר יעילה ויותר גנרית מזה. רעיונות?

קובץ מצורףגודל
D5RC2-rtl-css.zip6.31 קילובייט

תגובות

טיפול ג'נרי ב-CSS עברי לגירסה 5

באמת, עניין כיווניות השפה צריך להיות מטופל ב-core של דרופל. ואז יהיה לנו הרבה יותר קל ונחסוך המון זמן (אחרת אנחנו סתם עושים לעצמנו עבודה קשר). בואו ונניח שאנחנו שמצליחים להכניס לטבלת השפות של ה-core של דרופל אינדיקציה על כיוון השפה (rtl/ltr/ttb) ושאינדיקציה זו נטענת בתור משתנה $direction בזמן טעינת ה-template (יחד עם $language). אז זה נותן פתרונות לכל השפות RTL (ולא רק לעברית), ואז כל העסק הזה של RTL יהיה בכלל בטיפול דרופל ולא בטיפולנו. יעשו את זה פעם אחת כמו שצריך, וזהו!

אבל, זה נותן פתרון רק לקבצי ה-css של ה-core. מה נעשה עם ה-contrib? (הפרודוקטיביות של מפתחי דרופל עצומה. יש אינפלציה של רכיבים בדרופל. לא זאת בלבד, אלא שנפח הרכיב הממוצע גדל בכל גירסה ונוספים לו גם בנים ונכדים. קחו את רכיב הסחר האלקטרוני (5 בנים שלכמה מהם יש כבר 5 נכדים), רכיב הקבוצות האורגניות (10+ מודולים), את ה-views, ה-CCK או ה-CiviCRM. כל אחד מהם - אופרה ענקית בפני עצמה).

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

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

אני מציע זוהר שתטען את הקבצים לאתר דרופל העולמי ותפתח issue על הנושא של טעינת אוטומטית של הקבצים במידה וכיוון השפה הוא rtl. צרף את הקבצים בתור attachment ואז שלח הודעה אישית על הנושא לכמה אנשים. הייתי מתחיל מ-kbashy (שניסה פעם להכניס לדרופל מודול bidi ולכן יש לו אינטרס מובנה בנושא), ומצרף עותק ל-Gábor Hojtsy ול-killes.

מה דעתך?

ובכן... קצת

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

<

p>
זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות

<

p>

זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות

סטטוס הכנסת RTL ל-CORE

לשמחתי הרבה נראתה איזשהי פעילות בנושא באתר דרופל העולמי, ובכן צירפתי את קובץ ה-ZIP שלך בתור ATTACHMENT וכתבתי על הנושא לאחראי על מודול I18N. הנה קישור: http://drupal.org/node/56106

תבורך

תבורך

זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות

RTL הוכנס למודול I18N - בבקשה לבדוק

זוהר יקירי - לפי דברי Jose A Reyaro, "התמיכה ב-RTL כבר הוכנסה לתוך גירסת HEAD של מודול i18n של גירסה 5. ראה את הפונקציה i18n_language_rtl במודול i18n. עם קצת תמיכה בעיצוב זה צריך לעבוד".

אשמח אם תבדוק את הנושא.

בדקתי את העניין

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

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

זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות

 

זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות

re: הכנסת RTL ל-CORE

יש issue לטיפול ב-RTL במודול locale.modue שפתחתי כבר בחודש מרץ. עכשיו עדכנתי אותו בסטטוס הנוכחי וסיפרתי על זה למשה וייצמן ול-killes.

קישור: http://drupal.org/node/56110

חלון הזדמנות להכנסת הקבצים ה-core

אני מציף את הנושא מחדש.

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

המדובר: א. על הכנסת הקבצים.
ב. על הכנסת הפונקציות הרלוונטיות מתוך garlandrtl.

אני אנסה

אני אנסה

זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות