Wie kann man einen Text mit Hyperlink in WordPress übersetzen lassen?

Ich habe verschiedene Möglichkeiten gesehen, einen Text mit einem Hyperlink übersetzbar zu machen. Ich konnte jedoch keine einzige Best Practice finden.

Also, einige der Lösungen, die ich gefunden habe:

// METHOD 1 sprintf( __( 'Please read %1$sthis%2$s.', 'tacoverdo-example-domain' ), '', '' ); // METHOD 2 echo ''; __( 'Please read this.', 'tacoverdo-example-domain' ); echo ''; // METHOD 3 sprintf( __( 'Please read this.', 'tacoverdo-example-domain' ), esc_url( 'https://goo.gl' ) ); // METHOD 4 sprintf( __( 'Please read https://wordpress.stackexchange.com/questions/165357/how-to-make-a-text-with-hyperlink-translatable-in-wordpress/%sthishttps://wordpress.stackexchange.com/questions/165357/how-to-make-a-text-with-hyperlink-translatable-in-wordpress/%s.', 'tacoverdo-example-domain' ), '', '' ); // METHOD 5 __( 'Please read this', 'tacoverdo-example-domain' ); 

Mein erster Gedanke wäre, dass Methode 1 die beste wäre. Ihre Übersetzer müssen HTML nicht kennen. Aber es erlaubt auch nicht denen, die damit zu tun haben. Es ist auch recht DRY (Do not Repeat Yourself), da Sie den gesamten HTML-Teil nicht immer wieder übersetzen müssen.

Wenn Sie diese Frage jedoch auf Twitter posten, antworten die Leute, dass Methode 3 am besten wäre, wie Sie hier sehen können .

Also, wie sollte ich einen Text mit Hyperlink in WordPress übersetzen lassen?

Solutions Collecting From Web of "Wie kann man einen Text mit Hyperlink in WordPress übersetzen lassen?"

Dies ist ein sehr facettiertes Problem. Es kombiniert inhärente Probleme mit HTML-Inhalten mit einer ganzen Reihe neuer Herausforderungen bei der Übersetzung, z. B. das Scannen nach Zeichenfolgen, den Übersetzungsprozess selbst und seine Überprüfung.

Also müssen wir kombinieren:

  1. Text (in übersetzbarer Form)
  2. HTML-Markup (in schwer zu knackender, aber vorzugsweise flexibler Form)
  3. URL-Ziel (in sicherer und vorzugsweise übersetzbarer Form, möglicherweise sprachspezifisch!)

Wir müssen auch die Vertrautheit und den Stand der Technik berücksichtigen, mit anderen Worten – was würde der core tun. Ok, es hilft nicht, dass aus der schnellen Überprüfung der core dies in den meisten (wenn nicht alle) dieser Möglichkeiten tut.

Aus diesen Faktoren und der damit verbundenen Diskussion würde ich sagen, dass es je nach Bedarf und Prioritäten drei Ansätze gibt.

Einfach – eine Saite mit allem

 __( 'Please read this', 'example-domain' ); 
  • einfach im Code zu folgen
  • ermöglicht es, alle Teile (Text, Markup, URL) als Ganzes zu übersetzen
  • URL fest codiert
  • anfällig für HTML-Pausen
  • beliebt im core

Ausgewogen – URL ausgebrochen

 sprintf( __( 'Please read this', 'example-domain' ), esc_url( 'https://goo.gl' ) ); 
  • einfach zu folgen
  • kann alle Teile übersetzen, aber die URL (s) benötigt einen separaten Übersetzungsaufruf
  • Die URL kann dynamisch und maskiert sein
  • anfällig für HTML-Pausen
  • beliebt im core
  • Anekdotisch beliebt bei Entwicklern / Übersetzern

Piecemeal – Markup ausgebrochen

 sprintf( __( 'Please read %1$sthis%2$s.', 'example-domain' ), '', '' ); 

oder über Verkettung

 '' . __( 'Please read this.', 'example-domain' ); . ''; 
  • weniger lesbar
  • resistenter gegenüber HTML-Pausen
  • im core weniger beliebt
  • braucht mehr Kontext für die Übersetzung

Daumenregel (soweit ich es sehe)

  1. einfach , es so einfach wie möglich zu halten
  2. stückweise , um HTML-Pausen zu vermeiden
  3. ausgeglichen für alle anderen Fälle (wahrscheinlich am häufigsten)

In diesen Tagen arbeite ich mit vielen mehrsprachigen Websites, und ich muss sagen:

  1. URLs von Links müssen oft übersetzbar sein.
  2. Die Ausgabe der Trust-Übersetzungsfunktion ist schlecht. Ich benutze esc_html__() nie __() sondern immer esc_html__() / esc_attr__() . Dies bedeutet, dass die zu übersetzende Zeichenfolge kein HTML irgendeiner Art enthalten kann.
  3. In Englisch schreiben wir oft nicht, dass ein Wort in anderen Sprachen je nach Kontext anders geschrieben sein kann. Wenn also der Text 1 oder wenige Wörter enthält, ist es immer besser, die *_x() Variante der Übersetzungsfunktionen zu verwenden.
  4. Es kann “gefährlich” sein, mehr als einen Platzhalter für jede übersetzbare Zeichenfolge einzubeziehen. Wenn der Übersetzer kein Entwickler ist, wird das Seitenrendering leicht unterbrochen. In dem Beispiel %1$sthis%2$s ein nicht technischer Übersetzer nicht, dass das gerade vor dem richtigen Rendern erforderliche s ist, und könnte auch denken, dass der Entwickler das tippen wollte, aber einen Tipperrors hatte und sthis schrieb.

Aus all diesen Gründen ist die “richtige” Übersetzung von Texten, die Links enthalten, schwierig. Die einzige praktikable Lösung, die alle oben genannten Punkte berücksichtigt, ist:

 $anchor = esc_html_x( 'Google', 'link text for google.com', 'txt-domain' ); $domain = esc_url( __( 'google.com', 'txt-domain' ) ); $link = sprintf( 'https://wordpress.stackexchange.com/questions/165357/how-to-make-a-text-with-hyperlink-translatable-in-wordpress/%s', $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 ); 

Was sicher und leicht von nichttechnischen Leuten übersetzt werden kann, aber auch ausführlich und ein PITA zu implementieren, vor allem wenn dies für mehrere Links getan werden muss …

Für einen Code, der mit Tausenden von (echten oder potenziellen) Benutzern, die viele Sprachen sprechen, in freier Wildbahn veröffentlicht wird, ist dies die Art und Weise, wie ich es nehmen würde.

Dies ist eigentlich die Art, wie ich selbst für internen Gebrauch Code, aber das bin ich.


Hinweis :

Es mag zu viel erscheinen, um das Wort “Google” separat übersetzbar zu machen, und das trifft wahrscheinlich auf diesen speziellen Fall zu. Aber manchmal nehmen sogar Marken falsch an. Um nur ein Beispiel zu nennen, haben wir in Italien die Marke “Algida”, die mit ~ 30 verschiedenen Namen auf der ganzen Welt bekannt ist .

In diesem Fall führt die Hardcodierung der URL und / oder des Markennamens zu Problemen.

Stellen Sie Kontext für die Übersetzung bereit, damit die Übersetzer entscheiden können, ob sie den Markennamen übersetzen müssen oder nicht.

Sie müssen das Markup in der übersetzbaren Zeichenfolge beibehalten, da die Übersetzer wissen müssen, dass eine Verknüpfung vorhanden ist. In einigen Sprachen kann der resultierende Linktext mehrere Wörter umfassen, es könnte sogar ein Komma (oder ein Äquivalent) innerhalb oder ein anderes Markup geben, das korrekt verschachtelt werden muss.

Es ist auch wichtig, einen sprechenden Linktext zu erstellen, nicht dies oder hier .

2 oder 3 sind die einzigen übersetzbaren Optionen, aber Sie sollten die URL auch übersetzbar machen.