تعرّف على كيفية إنشاء حزم السلاسل النصية لإضافاتك وقوالبك لمساعدة المستخدمين على ترجمة المحتوى بسهولة باستخدام WPML.
حزم السلاسل النصية هي مجموعات من السلاسل النصية «المجمعة» معاً في سياق معين. الغرض منها هو مساعدة المستخدمين النهائيين على ترجمة المحتوى بكفاءة أكبر من خلال التخلص من الحاجة إلى ترجمة كل سلسلة نصية على حدة.
على سبيل المثال، إليك كيفية قيام المستخدمين بترجمة حقول المستخدم المخصصة، باستخدام حزمة سلاسل نصية وبدونها:
بدون حزمة سلاسل نصية

يحتاج المستخدمون إلى ترجمة السلاسل النصية واحدة تلو الأخرى، دون خيار الترجمة التلقائية.
باستخدام حزمة سلاسل نصية

يمكن للمستخدمين ترجمة عدة سلاسل نصية معاً دفعة واحدة، مع توفر خيار الترجمة التلقائية.
كما ترى، تعمل حزم السلاسل النصية على تبسيط عملية الترجمة من خلال السماح للمستخدمين بترجمة عدة حقول مستخدم مخصصة في وقت واحد. لتزويد مستخدميك بأفضل تجربة ترجمة، اتبع الخطوات أدناه لإنشاء حزم السلاسل النصية الخاصة بك.
إذا كنت تريد رؤية التنفيذ الكامل لحزمة السلاسل النصية الذي نغطيه في الخطوات أدناه، فتحقق من مستودع GitHub هذا الذي يحتوي على الإضافة الاختبارية التي استخدمناها.
1. تحديد المحتوى القابل للترجمة
الخطوة الأولى هي تحديد المحتوى الذي سيرغب المستخدمون في ترجمته، مثل العناوين والتسميات والمحتوى الذي ينشئه المستخدمون.
2. التصريح عن نوع الحزمة
بعد ذلك، تحتاج إلى التصريح عن نوع الحزمة (package kind) الخاصة بك. تساعد هذه الخطوة 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)، ويجب أن يكون مطابقاً لـ 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 – المعرّف الفريد للكيان داخل النوع (kind)، ويمكن أن يكون سلسلة نصية (مثل المعرّف النصي للرابط) أو عدداً صحيحاً (مثل المعرّف ID).$title – عنوان الكيان داخل النوع (kind). يوصى باستخدام عنوان الكيان الحقيقي.
رغم أنه ليس ضرورياً، إلا أنه يمكنك أيضاً تضمين وسيطتين إضافيتين:$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.