שינוי פרמטרים בדרופל בהתאם לשפה

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

הקמת אתר רב לשוני באמצעות דרופל היא מאד קלה ונעימה, באמצעות המודול המובנה Locale ובאמצעות מודול i18n אפשר ליצור תכנים בשפות שונות באותו אתר בקלות ובמהירות ובעצם ליצור אתר רב לשוני בעל מספר שפות.

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

כיצד משנים את שם האתר לפי השפה?

ראשית, נתקין את המודולים Locale ו-i18n. אני מאד אוהב להתקין גם את המודול Language Icons שיוצר לנו Language switcher עם דגלים. באמצעות Site configuration -> Languages -> Add language נוסיף את השפה שאנו רוצים ובתפריט ה-Blocks נדאג ש-Language switcher שהוא Block שנוצר לאחר שהתקנו את ה-i18n מופיע במקום כלשהו. הוא צריך להראות כך:

תפריט ה-Language Switcher
תפריט ה-Language Switcher

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


$conf['i18n_variables'] = array(
  'site_name',
  'site_slogan',
  'site_mission',
  'site_footer',
);

נשמור את הקובץ, ננקה את ה-cache של דרופל (דרך Performance) ואז ניגש אל Site Information. אנו נראה שליד כל הפרמטרים שהכנסנו כתוב This is a multilingual variable. הנה, כך זה נראה:
שדה רב לשוני

כל מה שצריך לעשות זה לעדכן את השדה והשדה יתעדכן בהתאם לשפה שנמצאת ב-Language switcher. אם אני צריך לשנות את שם האתר ברוסית, כל מה שעלי לעשות זה להעביר את השפה לרוסית, להכניס את שם האתר ולשמור – זה הכל!

הנה רשימה של משתנים שניתן לייצר להם גרסאות לשוניות:


/**
* Multilingual settings
*
* This is a collection of variables that can be set up for each language when i18n enabled.
* These are the basic ones for Drupal core, but you can add your own here.
* Find them by looking through source of page for name=
*/
$conf['i18n_variables'] = array(
'theme_default',
'file_directory_path',
'menu_primary_links_source',
'menu_default_node_menu',
'nice_menus_custom_css',
'site_mail',
'site_name',
'site_slogan',
'site_mission',
'site_footer',
'anonymous',
'site_frontpage',

/* User configuration */
'user_registration_help',
'user_mail_register_admin_created_subject',
'user_mail_register_admin_created_body',
'user_mail_register_no_approval_required_subject',
'user_mail_register_no_approval_required_body',
'user_mail_register_pending_approval_subject',
'user_mail_register_pending_approval_body',
'user_mail_password_reset_subject',
'user_mail_password_reset_body',
'user_mail_status_activated_subject',
'user_mail_status_activated_body',
'user_mail_status_blocked_subject',
'user_mail_status_blocked_body',
'user_mail_status_deleted_subject',
'user_mail_status_deleted_body',

/* Node help */
'blog_help',
'story_help',
'contact_form_information',

/* Location */
'location_default_country',
'location_settings_user',

/* Invite */
'invite_subject',
'invite_default_mail_template',

/* User_relationships */
'user_relationship_mailer_request_subject',
'user_relationship_mailer_request_message',
'user_relationship_mailer_cancel_subject',
'user_relationship_mailer_cancel_message',
'user_relationship_mailer_approve_subject',
'user_relationship_mailer_approve_message',
'user_relationship_mailer_disapprove_subject',
'user_relationship_mailer_disapprove_message',
'user_relationship_mailer_remove_subject',
'user_relationship_mailer_remove_message',
'user_relationship_mailer_pre_approved_subject',
'user_relationship_mailer_pre_approved_message',
'user_relationships_ui_msg_submitted',
'user_relationships_ui_msg_accepted',
'user_relationships_ui_msg_disapproved',
'user_relationships_ui_msg_cancel',
'user_relationships_ui_msg_default',
'user_relationships_ui_msg_removed',
'user_relationships_ui_msg_pending',
'user_relationships_ui_msg_pre_approved',
'user_relationships_ui_msg_too_many_relationships',
'user_relationships_ui_msg_existing_request',
'user_relationships_ui_msg_existing_relationship',
'user_relationships_ui_msg_not_accepting_requests',
'user_relationships_ui_msg_self_request',
'user_relationships_ui_msg_non_existant_user',
'user_relationships_ui_msg_non_existant_type',
'user_relationships_ui_msg_unknown_error',
'user_relationships_ui_msg_relationship_type_not_set',
'user_relationships_ui_msg_relationship_type_not_allowed',
);

פוסטים נוספים שכדאי לקרוא

תמונת תצוגה של מנעול על מחשב
פתרונות ומאמרים על פיתוח אינטרנט

הגנה מפני XSS עם Trusted Types

תכונה ב-CSP שמאפשרת מניעה כמעט הרמטית להתקפות XSS שכל מפתח ווב צריך להכיר וכדאי שיכיר.

פייתון

קבצי קונפיגורציה בפואטרי

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

פיתוח ב-JavaScript

Axios interceptors

תכנון נכון של קריאות AJAX באפליקציה ריאקטית וניהול השגיאות או ההצלחות עם פיצ׳ר נחמד של axios

גלילה לראש העמוד