WPML

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

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

לדוגמה, כך משתמשים יתרגמו שדות משתמש מותאמים אישית, עם ובלי חבילת מחרוזות:

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

ארבעת השדות כמחרוזות נפרדות, ב־WPML → תרגומים → מחרוזות
ארבעת השדות כמחרוזות נפרדות, ב־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 – המזהה הייחודי של הישות בתוך הסוג, יכול להיות מחרוזת (לדוגמה, slug) או מספר שלם (לדוגמה, מזהה (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_SLUG );

משאבים נוספים

  • קובץ תצורת השפה של WPML – מדריך על שימוש ב־wpml-config.xml, הקובץ המציין אילו טקסטים WPML צריך לתרגם בתוספים ובתבניות.
  • Multilingual Tools – כלי לבדיקת הגדרות התצורה שלך ואישור תאימות עם WPML.

נכתב על ידיAmir