gettext関数を使用して、テーマやプラグインのテキストをWPMLで翻訳可能にする方法について説明します。
テーマやプラグインのテキストを翻訳可能にし、サイトに正しく表示するには、次の2つの条件を満たす必要があります。
- テキストをgettext関数で囲む
- テキストドメインの引数を含める
Gettextの基本
「my-plugin-domain」ドメインに属する次の文字列「Thank you!」を例に考えます。
__( '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. セキュリティのための出力のエスケープ
文字列がすぐに出力にレンダリングされる場合は、XSS攻撃から保護するために、esc_html_やesc_attr_などのエスケープ関数を使用します。
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をご覧ください。