ハイパーリンクを使ってテキストを翻訳可能にする方法はいくつかあります。しかし、私は単一のベストプラクティスを見つけることができませんでした。
だから、ここで私が見つけた解決策のいくつかは次のとおりです。
// METHOD 1
sprintf( __( 'Please read %1$sthis%2$s.', 'tacoverdo-example-domain' ), '<a target="_blank" href="' . esc_url( 'https://goo.gl' ) . '">', '</a>' );
// METHOD 2
echo '<a target="_blank" href="' . esc_url( 'https://goo.gl' ) . '">';
_e( 'Please read this.', 'tacoverdo-example-domain' );
echo '</a>';
// METHOD 3
sprintf( __( 'Please read <a href="%s">this</a>.', 'tacoverdo-example-domain' ), esc_url( 'https://goo.gl' ) );
// METHOD 4
sprintf( __( 'Please read %sthis%s.', 'tacoverdo-example-domain' ), '<a target="_blank" href="' . esc_url( 'https://goo.gl' ) . '">', '</a>' );
// METHOD 5
_e( 'Please read <a target="_blank" href="' . esc_url( 'https://goo.gl' ) . '">this</a>', 'tacoverdo-example-domain' );
私の最初の考えは、方法1が最善であるということでしょう。翻訳者がHTMLを知っている必要はありません。しかしそれはまたそれを台無しにするものを許可しません。 HTML部分全体を何度も何度も翻訳する必要がないので、これはかなりのDRY(自分自身を繰り返さないでください)でもあります。
しかし、この質問をTwitterに投稿すると、 here を見ればわかるように、方法3が最善であると人々は答えました。
それでは、どのように私はWordPressで翻訳可能なハイパーリンクのテキストを作るべきですか?
これは非常に多面的な問題です。固有のHTMLコンテンツの問題と、文字列のスキャン、翻訳プロセス自体、およびその検証など、まったく新しい翻訳の課題とを組み合わせたものです。
だから我々は組み合わせる必要があります:
また、親しみやすさと先行技術、つまりコアとなることについても考慮する必要があります。さて、それはクイックチェックからコアがこれらの方法のほとんど(全部ではないにしても)でこれをするのを助けません。
これらの要因と 周辺の議論 私は、ニーズと優先順位に応じて、3つのアプローチのアプローチがあると思います。
__( 'Please read <a href="https://goo.gl">this</a>', 'example-domain' );
sprintf(
__( 'Please read <a href="%s">this</a>', 'example-domain' ),
esc_url( 'https://goo.gl' )
);
sprintf(
__( 'Please read %1$sthis%2$s.', 'example-domain' ),
'<a href="' . esc_url( 'https://goo.gl' ) . '">',
'</a>'
);
または連結を介して
'<a href="' . esc_url( 'https://goo.gl' ) . '">'
. __( 'Please read this.', 'example-domain' );
. '</a>';
最近私は多くの多言語ウェブサイトを扱っています、そして私は言わなければなりません:
__()
を使いませんが、常にesc_html__()
/esc_attr__()
を使います。つまり、翻訳対象の文字列にはいかなる種類のHTMLも含めることができません。*_x()
変種の翻訳関数を使用することをお勧めします。%1$sthis%2$s
では、s
の直前のthis
が適切なレンダリングに必要であることを理解していません。また、開発者がthis
と入力したが、タイプミスがありsthis
と書いたとします。これらすべての理由から、リンクを含むテキストを「正しく」翻訳するのは困難です。上記のすべてを考慮に入れた唯一の実行可能な解決策は、次のとおりです。
$anchor = esc_html_x( 'Google', 'link text for google.com', 'txt-domain' );
$domain = esc_url( __( 'google.com', 'txt-domain' ) );
$link = sprintf( '<a href="https://%s">%s</a>', $domain, $anchor );
/* translators: 1 is a link with text "Google" and URL google.com */
echo sprintf( esc_html__( 'Use %1$s to search.', 'example-domain' ), $link );
これは安全で技術的でない人々によって翻訳されるのが簡単ですが、特に冗長でPITAを実装することもできます。特に複数のリンクでこれを行う必要がある場合は...
しかし、たくさんの言語を話す何千人もの(本物または潜在的な)ユーザーがいる、実際に公開されているコードの場合、これが私のとる方法です。
これは実際には私が内部使用専用のコードでも取る方法ですが、それは私です。
注:
「Google」という単語を個別に翻訳できるようにするには多すぎるように思われるかもしれませんが、これはおそらくこの特定のケースに当てはまります。しかし、ブランド名が間違っていると考えることさえあります。一例を挙げると、イタリアには "Algida" というブランド名があり、 世界中で30種類の異なる名前で知られています 。
そのような場合、URLやブランド名をハードコーディングすると問題が発生します。
翻訳の文脈を提供することで、翻訳者はブランド名を翻訳する必要があるかどうかを判断するのに役立ちます。
翻訳者は 知る にリンクがあるので、翻訳可能な文字列にマークアップを保存する必要があります。一部の言語では、結果として得られるリンクテキストが複数の単語にまたがっている場合があります。内部にカンマ(またはそれと同等のもの)があったり、正しくネストする必要があるその他のマークアップもあります。
this または here ではなく、話すリンクテキストを作成することも重要です。
2または3が唯一の翻訳可能なオプションですが、URLも翻訳可能にする必要があります。