Tìm hiểu cách sử dụng các hàm gettext để làm cho các văn bản trong giao diện và plugin có thể dịch được trong WPML.
Để đảm bảo các văn bản trong giao diện và plugin có thể dịch được và hiển thị chính xác trên trang web của bạn, bạn cần đáp ứng hai điều kiện:
- Bọc các văn bản trong một hàm gettext
- Bao gồm một đối số text domain
Cơ bản về gettext
Hãy xem xét chuỗi văn bản sau, “Thank you!”, thuộc về domain “my-plugin-domain”:
__( 'Thank you!', 'my-plugin-domain' );
Để xuất chuỗi văn bản ra trình duyệt, hãy sử dụng hàm _e() :
_e( 'Thank you!', 'my-plugin-domain' );
Khi sử dụng HTML, hãy bọc nó trong các thẻ HTML:
<h2><?php _e( 'Thank you!', 'my-plugin-domain' ); ?></h2>
Nếu bạn có một liên kết tách biệt với văn bản xung quanh, hãy sử dụng hàm esc_html_e():
<a href="http://wpml.org/" ><?php esc_html_e( 'Translated with WPML', 'my-domain' ); ?></a>
Các phương pháp hay nhất về gettext
1. Không bao giờ bọc một biến hoặc hằng số trong hàm gettext
Điều này sẽ làm cho các chuỗi văn bản không thể quét được và do đó không thể dịch được.
Không chính xác
<?php
if ( $morning ) {
define( 'GREETING', 'Good morning' );
} else {
define( 'GREETING', 'Good afternoon' );
}
_e( GREETING, 'my-domain' );
?>
Chính xác
<?php
if ( $morning ) {
_e( 'Good morning', 'my-domain' );
} else {
_e( 'Good afternoon', 'my-domain' );
}
?>
2. Escape dữ liệu đầu ra để bảo mật
Nếu một chuỗi văn bản được hiển thị ngay lập tức ở đầu ra, hãy sử dụng các hàm escape, như esc_html_ và esc_attr_ để bảo vệ khỏi các cuộc tấn công XSS.
echo '<div>' . esc_html__( 'Back to homepage', 'my-domain' ) . '</div>';
3. Thêm chú thích cho người dịch
Điều này giúp người dịch hiểu được ngữ cảnh mà các văn bản hoặc biến xuất hiện.
/* 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 );
Tài nguyên bổ sung
Để tìm hiểu thêm về gettext, hãy xem WordPress codex chính thức.