WordPressで翻訳可能なハイパーリンク付きのテキストを作成する方法は?


15

翻訳可能なハイパーリンクを使用してテキストを作成するさまざまな方法を見てきました。ただし、単一のベストプラクティスを見つけることができませんでした。

だから、ここに私が見つけた解決策のいくつかがあります:

// 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部分全体を何度も翻訳する必要がないため、非常に乾燥しています。

しかし、この質問をツイッターに投稿するとき、人々はあなたがここで見ることができるように方法3が最善であると答えまし

だから、WordPressで翻訳可能なハイパーリンク付きのテキストを作成するにはどうすればよいですか?

回答:


17

これは非常に多面的な問題です。固有のHTMLコンテンツの問題と、文字列のスキャン、翻訳プロセス自体、および検証などのまったく新しい負荷の課題とを組み合わせます。

だから私たちは組み合わせる必要があります:

  1. テキスト(翻訳可能な形式)
  2. HTMLマークアップ(壊れにくいが、柔軟な形式が望ましい)
  3. URL宛先(安全で、できれば翻訳可能な形式で、言語に固有の場合があります!)

また、親しみやすさと先行技術、言い換えれば、コアとなることを考慮する必要があります。クイックチェックからこれらの方法のほとんど(すべてではないにしても)でコアがこれを行うのは役に立ちません。

これらの要因と周囲の議論から、ニーズと優先度に応じて、3つのバケットのアプローチがあると思います。

シンプル—すべてが1つの文字列

__( 'Please read <a href="https://goo.gl">this</a>', 'example-domain' );
  • コードをフォローしやすい
  • 全体としてすべての部分(テキスト、マークアップ、URL)を翻訳できます
  • ハードコーディングされたURL
  • HTMLブレークが発生しやすい
  • コアで人気

バランスが取れている-URLが壊れている

sprintf( 
    __( 'Please read <a href="%s">this</a>', 'example-domain' ), 
    esc_url( 'https://goo.gl' ) 
);
  • フォローしやすい
  • すべての部分を翻訳できますが、URLには個別の翻訳呼び出しが必要です
  • URLは動的でエスケープ可能
  • HTMLブレークが発生しやすい
  • コアで人気
  • 開発者/翻訳者に逸話的に人気がある

断片的—マークアップの分割

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>';
  • 読みにくい
  • HTMLブレークに対してより回復力がある
  • コアではあまり人気がない
  • 翻訳のために提供されるより多くのコンテキストが必要です

経験則(私が見た限り)

  1. できるだけシンプルに保つのが簡単
  2. HTMLの中断を防ぐための断片
  3. 他のすべての場合のバランスが取れている(最も一般的な可能性が高い)

+1。「バランス」オプションが気に入っています。_x代わりに__
-gmazzapの

スニペットは、包括的なものではなく、基本的な例として意図したものです。シナリオや翻訳機能の数が非常に多いため、おそらくそれぞれにバリエーションがあります。
ラスト

バランスの取れたオプションには、翻訳者が間違ったマークアップを作成するという問題もあります。確実で安全な翻訳を行うには、htmlを除外することをお勧めします。また、コンテキスト付きの翻訳機能に投票します。これにより、翻訳者は、位置、プラグインのコンテキスト、テーマに関する知識がなくても、方法を理解できます。
bueltge

「翻訳者にはコンテキストが必要」という議論を以前に聞いたことがありますが、不思議に思います。この例でコンテキストは何に必要ですか?必要なときにコンテキストを提供することは良い習慣だと思いますが、この場合、翻訳者は本当にそれを必要としますか?彼らがいるかどうかを知る必要があります%sの略です<strong><a href target="#">?翻訳に影響しますか?
タコヴェル​​ド14年

リンクが勃発した場合、それは非常によく曖昧かもしれなくて@TacoVerdo私は、テキストを引き受けるその場合には、コンテキストは、教えてくださいどのようなテキストがあるため、宛先。コンテキストは、情報が完全で明確になるまで情報を埋めるのに役立ちます。テキストを小さなスタンドアロンの断片に分割すると、それぞれが全体に収まる場所により多くのコンテキストが必要になります。
ラスト14年

7

最近、私は多くの多言語ウェブサイトで仕事をしています。

  1. 多くの場合、リンクのURLは翻訳可能である必要があります。
  2. 信頼変換機能の出力が不良です。私はほとんど使用しません__()が、常にesc_html__()/ esc_attr__()。つまり、翻訳される文字列には、あらゆる種類のHTMLを含めることはできません。
  3. 英語で書くと、他の言語では単語が文脈に応じて異なる方法で書かれることに気付かないことがよくあります。そのため、テキストに1つまたは少数の単語が含まれる場合は、常に*_x()翻訳関数のバリアントを使用することをお勧めします。
  4. 翻訳可能な文字列ごとに複数のプレースホルダーを含めることは「危険」です。翻訳者が開発者でない場合、ページのレンダリングが簡単に中断されます。この例では%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」という単語を個別に翻訳可能にするには多すぎるように見えるかもしれませんが、これはおそらくこの特定の場合に当てはまります。しかし、ブランド名が間違っていると仮定することさえあります。例を挙げると、イタリアには、世界中で30の異なる名前で知られているブランド「Algida」があります

このような場合、URLやブランド名をハードコーディングすると問題が発生します。

翻訳のコンテキストを提供すると、翻訳者がブランド名を翻訳する必要があるかどうかを判断するのに役立ちます。


2

翻訳者はリンクがあることを知らなければならないため、翻訳可能な文字列にマークアップを保持する必要があります。一部の言語では、結果のリンクテキストが複数の単語にまたがる場合があり、内部にコンマ(または同等のもの)がある場合や、他のマークアップを正しくネストする必要がある場合もあります。

また、thisまたはhereではなく、話すリンクテキストを作成することも重要です

2または3のみが翻訳可能なオプションですが、URLも翻訳可能にする必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.