ไม่มีแพ็คเกจสตริง

ผู้ใช้ต้องแปลสตริงทีละรายการโดยไม่มีตัวเลือกการแปลอัตโนมัติ
เรียนรู้วิธีสร้างแพ็คเกจสตริงสำหรับปลั๊กอินและธีมของคุณเพื่อช่วยให้ผู้ใช้แปลเนื้อหาด้วย 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 – ชื่อของชนิด ควรเหมือนกับชนิดสำหรับแพ็คเกจ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) หากไม่มี จะเป็นเวอร์ชัน slug ของ "ชนิด"$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 );