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

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

המשתמשים יכולים לתרגם מספר מחרוזות יחד בפעם אחת, עם אפשרות של תרגום אוטומטי.
כפי שניתן לראות, חבילות מחרוזות מפשטות את תהליך התרגום על ידי כך שהן מאפשרות למשתמשים לתרגם מספר שדות משתמש מותאמים אישית בבת אחת. כדי לספק למשתמשים שלך את חוויית התרגום הטובה ביותר, עקבו אחר השלבים הבאים ליצירת חבילות מחרוזות משלך.
אם ברצונך לראות את היישום המלא של חבילת המחרוזות שאנו מכסים בשלבים הבאים, בדוק את מאגר GitHub הזה המכיל את תוסף הבדיקה שבו השתמשנו.
1. זיהוי תוכן שניתן לתרגום
השלב הראשון הוא לזהות תוכן שמשתמשים ירצו לתרגם, כגון כותרות, תוויות ותוכן שנוצר על ידי משתמשים.
2. הצהרה על סוג החבילה
לאחר מכן, עליך להצהיר על סוג החבילה שלך. שלב זה עוזר ל־WPML לזהות אילו חבילות מחרוזות מחוברות לתוספים פעילים, ולתרגם רק חבילות אלו.
לשם השוואה, פילטר זה פועל עבור חבילות מחרוזות בדיוק כפי שהפילטר register_post_types פועל עבור סוגי פוסטים.
כדי להצהיר על סוג חבילה, השתמשו בפילטר wpml_active_string_package_kinds:
define( 'FOO_USER_FIELD_PACKAGE_KIND_TITLE', 'OTGS Foo User Fields' );
define( 'FOO_USER_FIELD_PACKAGE_KIND_SLUG', 'otgs-foo-user-fields' );
add_filter( 'wpml_active_string_package_kinds', function( $kinds ) {
$kinds[ FOO_USER_FIELD_PACKAGE_KIND_SLUG ] = [
'title' => FOO_USER_FIELD_PACKAGE_KIND_TITLE,
'slug' => FOO_USER_FIELD_PACKAGE_KIND_SLUG,
'plural' => FOO_USER_FIELD_PACKAGE_KIND_TITLE,
];
return $kinds;
} );
הגדרת ארגומנטים
title – הכותרת של הסוג, צריכה להיות זהה לסוג (kind) עבור חבילות.plural – צורת הרבים של הכותרת.slug – מזהה הכתובת (slug) של הסוג, צריך להיות זהה ל־kind_slug עבור חבילות.
3. יצירת חבילה ורישום מחרוזות
לאחר מכן, עליכם ליצור חבילה ולרשום את המחרוזות שהיא עומדת לקבץ באמצעות ההוק wpml_register_string:
$userId = 123;
$user = get_user_by( 'id', $userId );
$package = [
'kind' => FOO_USER_FIELD_PACKAGE_KIND_TITLE, // The "namespace".
'kind_slug' => FOO_USER_FIELD_PACKAGE_KIND_SLUG, // The "namespace" slug.
'name' => $userId, // Can be a string or an integer, but should be unique inside the "kind" namespace.
'title' => $user->display_name, // The title for the package entity inside the "kind" namespace.
];
$fooUserFields = get_option( 'otgs_foo_user_fields' );
foreach ( $fooUserFields as $fooUserField ) {
$fieldValue = get_user_meta( $userId, $fooUserField, true );
do_action( 'wpml_register_string', $fieldValue, sanitize_key( $fooUserField ), $package, $fooUserField, 'LINE' );
}
הגדרת ארגומנטים
$kind – תווית מרחב השמות של הישות (לדוגמה, Gravity Form).$kind_slug – מזהה הכתובת (slug) של מרחב השמות של הישות (לדוגמה, gravity-form). אם חסר, תהיה זו גרסת מזהה כתובת של ה"סוג" (kind).$name – המזהה הייחודי של הישות בתוך הסוג, יכול להיות מחרוזת (לדוגמה, מזהה כתובת) או מספר שלם (לדוגמה, מזהה (ID)).$title – הכותרת של הישות בתוך הסוג. מומלץ להשתמש בכותרת של הישות האמיתית.
למרות שזה לא הכרחי, תוכל גם לכלול שני ארגומנטים נוספים:$edit_link – כתובת URL לעריכת האובייקט.$view_link – כתובת URL להצגת האובייקט.
4. אחזור תרגומים
לבסוף, כדי להציג תרגומים בצד הלקוח, עליכם להשתמש בהוק wpml_translate_string:
$userId = 123;
$user = get_user_by( 'id', $userId );
$package = [
'kind' => FOO_USER_FIELD_PACKAGE_KIND_TITLE, // The "namespace".
'kind_slug' => FOO_USER_FIELD_PACKAGE_KIND_SLUG, // The "namespace" slug.
'name' => $userId, // Can be a string or an integer, but should be unique inside the "kind" namespace.
'title' => $user->display_name, // The title for the package entity inside the "kind" namespace.
];
$fooUserFields = get_option( 'otgs_foo_user_fields' );
$translatedFieldValues = [];
foreach ( $fooUserFields as $fooUserField ) {
$fieldValue = get_user_meta( $userId, $fooUserField, true );
$translatedFieldValues[ $fooUserField ] = apply_filters( 'wpml_translate_string', $fieldValue, sanitize_key( $fooUserField ), $package );
}
עדכון והסרה של מחרוזות
בכל פעם שמשתמשים מעדכנים תוכן, WPML צריך להיות מסוגל לזהות את המחרוזות החדשות, כמו גם את אלו שהוסרו. כדי להודיע ל־WPML על שינויים אלו, עטוף את קוד הרישום שלך בשתי פונקציות:
$userId = 123;
$package = [
'kind' => FOO_USER_FIELD_PACKAGE_KIND_TITLE, // The "namespace".
'kind_slug' => FOO_USER_FIELD_PACKAGE_KIND_SLUG, // The "namespace" slug.
'name' => $userId, // Can be a string or an integer, but should be unique inside the "kind" namespace.
// The 'title' key is not not required in the "translate" context.
];
do_action( 'wpml_start_string_package_registration', $package );
$fooUserFields = get_option( 'otgs_foo_user_fields' );
foreach ( $fooUserFields as $fooUserField ) {
$fieldValue = get_user_meta( $userId, $fooUserField, true );
do_action( 'wpml_register_string', $fieldValue, sanitize_key( $fooUserField ), $package, $fooUserField, 'LINE' );
}
do_action( 'wpml_delete_unused_package_strings',$package );
מחיקת חבילות מחרוזות
כאשר משתמשים מסירים תוכן, עליכם להסיר גם את חבילת המחרוזות המשויכת אליו. זה כולל את כל המחרוזות, התרגומים ועבודות התרגום הקשורות. על ידי ביצוע ניקוי זה, אתה מבטיח שהאתר יישאר יעיל ללא נתונים מיותרים שמעמיסים על מסד הנתונים.
כדי להסיר חבילת מחרוזות, התחבר לפעולה מתאימה בתוך התוסף או התבנית שלך וקרא לפונקציה wpml_delete_package:
$userId = 123; do_action( 'wpml_delete_package', $userId, FOO_USER_FIELD_PACKAGE_KIND_TITLE );
משאבים נוספים
- קובץ הגדרות שפה של WPML – מדריך על השימוש ב־wpml-config.xml, הקובץ המציין אילו טקסטים WPML צריך לתרגם בתוספים ובתבניות.
- Multilingual Tools – כלי לבדיקת תצורת ההגדרה שלך ואישור תאימות עם WPML.