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 – ชื่อของชนิด ควรเหมือนกับชนิดสำหรับแพ็คเกจ
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) หากไม่มี จะเป็นเวอร์ชัน slug ของ "ชนิด"
$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