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

כך משנים במערכת דרופל 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 שכל מפתח ווב צריך להכיר וכדאי שיכיר.

פתרונות ומאמרים על פיתוח אינטרנט

רינדור של קליינט סייד עם SSR

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

פתרונות ומאמרים על פיתוח אינטרנט

עבודה עם GPT למתכנתים

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

צילום מסך של סוואגר
יסודות בתכנות

openAPI

שימוש בתשתית הפופולרית למיפוי ותיעוד של API וגם הסבר בסיסי על מה זה API

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