web-dev-qa-db-ja.com

__()または_e()言語翻訳文字列内のHTML

翻訳文字列を構築するための適切な方法は何ですか?

例えば、

echo __( 'Hello ' . $first . ' you owe me money.' );
echo __( '<div><p>Top: ' . $t_margin . '</p>' . '<p>Bottom: ' . $b_margin . '</p></div>' )

文字列やHTMLを追加しても大丈夫ですか、それとも最初に実行してから次のような変換を実行する必要があります。

$html = '<div><p>Top: ' . $t_margin . '</p>' . '<p>Bottom: ' . $b_margin . '</p></div>';
echo __( $html ); 
23
Jason

__() 関数には2番目の引数があります。プラグインやテーマに使用しているドメインに設定する必要があります。以下の例では'text_domain'を使います。ドメイン文字列は一意である必要があります。他のドメイン文字列とは一致させないでください。テキストドメイン引数を使用しない場合、デフォルトではWordPressドメイン名の'default'になります。詳細はリンクを見てください。

常に文字列('text_domain')を使用してください。文字列を含む変数、関数、または定数は絶対に使用しないでください。ほとんどの(すべての?)翻訳プログラムでは、文字列がないと表示されません。

あなたのコード:

echo __( 'Hello ' . $first . ' you own me money.' );

文字列に変数を含めないでください。

もっと良い方法:

echo sprintf( __( 'Hello %s you own me money.', 'text_domain' ), $first );

あるいは単に:

printf( __( 'Hello %s you own me money.', 'text_domain' ), $first );

%sプレースホルダーは人間の翻訳者に文字列が入っていることを伝えます。数字には%dを使用してください。 他のプレースホルダーもあります

(この文章は文法的に不正確な英語です。意図した意味に応じて、'Hello %s, you owe me money.'または'Hello %s, you own my money.'を使用してください。)


あなたのコード:

$html = '<div><p>Top: ' . $t_margin . '</p>' . <p>Bottom: ' . $b_margin . '</p></div>';

HTMLを翻訳しないでください。どの言語でも同じです。

もっと良い方法:

$html = sprintf( '<div><p>%s</p><p>%s</p></div>', __( 'Top: ', 'text_domain' ) .  $t_margin, __( 'Bottom: ', 'text_domain' ) . $b_margin );

あるいはそれを複数の行に分割します。

$html = sprintf(
    '<div><p>%s</p><p>%s</p></div>',
    __( 'Top: ', 'text_domain' ) .  $t_margin,
    __( 'Bottom: ', 'text_domain' ) . $b_margin
);

Top および Bottom が明確でない場合は、 _x() を使用してこれらの用語の文脈を説明してください。


あなたはここで他の翻訳ケースを見つけることができます: 国際化:あなたはおそらくそれを間違ってやっている

37

それはすでに言われているので、私は文字列内の変数の問題に対処しません。

あなたはあなたの文字列を静的に保ちたい、それは内容が変わらないことを意味します。不要なHTMLも避けたいと思います。

__( '<p>Hello World!</p>' );
__( '<h1>Hello World!</h1>' );

上記は基本的に同じテキストが何であるかあなたのテーブルの2つの行を取ります。それらは次のように書き換えることができます。

'<p>' . __( 'Hello World!' ) . '</p>'
'<h1>' . __( 'Hello World!' ) . '</h1>'

それを単一行に減らします。

テキスト内のHTMLは避けられないことがあります。例を挙げましょう:

__( 'You currently owe <b>%s</b> dollars' );

言語は文法的なので、テキストを分割すると、翻訳している人には問題が生じます。

経験則HTMLテキスト フォーマット タグ半ば文はOKです。 HTMLで始まって終わる文はスペースを無駄にするだけです。

4
Twifty