WPML

เรียนรู้วิธีใช้ฟังก์ชัน gettext เพื่อทำให้ข้อความในธีมและปลั๊กอินแปลได้ใน WPML

เพื่อให้แน่ใจว่าข้อความในธีมและปลั๊กอินแปลได้ และแสดงบนไซต์ของคุณได้อย่างถูกต้อง คุณต้องปฏิบัติตามเงื่อนไขสองประการ:

  • ครอบข้อความด้วยฟังก์ชัน gettext
  • รวมอาร์กิวเมนต์ text domain ไว้ด้วย

พื้นฐานของ Gettext

พิจารณาสตริงข้อความต่อไปนี้ "Thank you!" ซึ่งอยู่ในโดเมน "my-plugin-domain":

__( 'Thank you!', 'my-plugin-domain' );

หากต้องการแสดงสตริงข้อความในเบราว์เซอร์ ให้ใช้ฟังก์ชัน _e()

_e( 'Thank you!', 'my-plugin-domain' );

เมื่อใช้ HTML ให้ครอบด้วยแท็ก HTML:

<h2><?php _e( 'Thank you!', 'my-plugin-domain' ); ?></h2>

หากคุณมีลิงก์ที่แยกจากข้อความโดยรอบ ให้ใช้ฟังก์ชัน esc_html_e()

<a href="http://wpml.org/" ><?php esc_html_e( 'Translated with WPML', 'my-domain' ); ?></a>

แนวทางปฏิบัติที่ดีที่สุดสำหรับ Gettext

1. ห้ามครอบตัวแปรหรือค่าคงที่ด้วยฟังก์ชัน gettext

การทำเช่นนี้จะทำให้ไม่สามารถสแกนสตริงได้ และส่งผลให้ไม่สามารถแปลได้

ไม่ถูกต้อง

<?php
if ( $morning ) {
   define( 'GREETING', 'Good morning' );
} else {
   define( 'GREETING', 'Good afternoon' );
}
 
_e( GREETING, 'my-domain' );
?>

ถูกต้อง

<?php
if ( $morning ) {
   _e( 'Good morning', 'my-domain' );
} else {
   _e( 'Good afternoon', 'my-domain' );
}
?>

2. Escape เอาต์พุตเพื่อความปลอดภัย

หากมีการเรนเดอร์สตริงข้อความในเอาต์พุตทันที ให้ใช้ฟังก์ชัน escaping เช่น esc_html_ และ esc_attr_ เพื่อป้องกันการโจมตีแบบ XSS

echo '<div>' . esc_html__( 'Back to homepage', 'my-domain' ) . '</div>';

3. เพิ่มความคิดเห็นสำหรับนักแปล

สิ่งนี้ช่วยให้นักแปลเข้าใจบริบทที่ข้อความหรือตัวแปรปรากฏขึ้น

/* translators: %1$s is status label (e.g. "active" and  %2$s is quantity of bits/s (e.g. 12 Gbit/s) */

printf(
esc_html__( 'State of your network is %1$s. Maximum download speed is %2$s.', 'my-plugin-domain' ),
$state, $speed
);

แหล่งข้อมูลเพิ่มเติม

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ gettext โปรดดู WordPress codex อย่างเป็นทางการ

เขียนโดย Amir · อัปเดตล่าสุด 21 กุมภาพันธ์ 2025