เรียนรู้วิธีใช้ฟังก์ชัน 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 อย่างเป็นทางการ