ללא חבילת מחרוזות

המשתמשים צריכים לתרגם מחרוזות אחת אחת, ללא אפשרות של תרגום אוטומטי.
למד כיצד ליצור חבילות מחרוזות עבור התוספים והתבניות שלך כדי לעזור למשתמשים לתרגם תוכן בקלות באמצעות WPML.
חבילות מחרוזות הן קבוצות של מחרוזות "הארוזות" יחד בהקשר מסוים. מטרתן היא לעזור למשתמשי הקצה לתרגם תוכן ביעילות רבה יותר על ידי ביטול הצורך לתרגם כל מחרוזת בנפרד.
לדוגמה, כך משתמשים יתרגמו שדות משתמש מותאמים אישית, עם ובלי חבילת מחרוזות:
כפי שניתן לראות, חבילות מחרוזות מפשטות את תהליך התרגום בכך שהן מאפשרות למשתמשים לתרגם מספר שדות משתמש מותאמים אישית בבת אחת. כדי לספק למשתמשים שלך את חוויית התרגום הטובה ביותר, עקוב אחר השלבים הבאים כדי ליצור חבילות מחרוזות משלך.
אם ברצונך לראות את היישום המלא של חבילת מחרוזות שאנו מכסים בשלבים הבאים, בדוק את מאגר GitHub הזה המכיל את תוסף הבדיקה שבו השתמשנו.
השלב הראשון הוא לזהות תוכן שמשתמשים ירצו לתרגם, כגון כותרות, תוויות ותוכן שנוצר על ידי משתמשים.
לאחר מכן, עליך להצהיר על סוג החבילה שלך. שלב זה עוזר ל־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 עבור חבילות.
לאחר מכן, עליך ליצור חבילה ולרשום את המחרוזות שהיא עומדת לאגד באמצעות ההוק 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 – המזהה הייחודי של הישות בתוך הסוג, יכול להיות מחרוזת (לדוגמה, slug) או מספר שלם (לדוגמה, מזהה (ID)).$title – הכותרת של הישות בתוך הסוג. מומלץ להשתמש בכותרת של הישות האמיתית.
למרות שזה לא הכרחי, תוכל לכלול גם שני ארגומנטים נוספים:$edit_link – כתובת URL לעריכת האובייקט.$view_link – כתובת URL להצגת האובייקט.
לבסוף, כדי להציג תרגומים בצד הלקוח, עליך להשתמש בהוק 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_SLUG );