Accesskey n springt zur Seitennavigation. Springe zum Inhalt.

Dieses Dokument ist eine Übersetzung. Im Falle von Abweichungen oder Fehlern sollte das aktuelle englische Original als maßgeblich angenommen werden. Das W3C besitzt das Copyright am Original, wie unten beschrieben.

Übersetzer: Gunnar Bittersmann

s_gotoW3cHome Internationalisierung
 

Verwendung von Unicode-Steuerzeichen für bidirektionalen Text

Zielgruppe: Autoren von Inhalten in HTML oder XML-basierten Sprachen (die Web-Editoren/Texteditoren oder Scripte benutzen), Script-Entwickler (PHP, JSP usw.) und alle, die wissen wollen, wie man den richtigen Textfluss für von rechts nach links geschriebene Schriften erreicht, wenn kein Markup dafür verfügbar ist

Frage

Was kann ich tun, um bidirektionalen Text richtig anzuordnen, wenn ich kein Markup verwenden kann?

Hintergrund

Texte sollten immer in „logischer Reihenfolge“ gespeichert werden, d.h. die Zeichen folgen im Speicher in der Reihenfolge aufeinander, wie der Text gesprochen wird. Wenn der Text dargestellt wird, müssen jedoch Zeichen aus von rechts nach links geschriebenen Schriften (wie der arabischen, hebräischen, Thaana u.a.) von rechts nach links laufen, während Zeichen aus anderen Schriften (wie der lateinischen) und alle Ziffern von links nach rechts laufen – bei bidirektionalem Text auch innerhalb einer Zeile. Diesen visuellen Effekt erreicht man durch den Unicode-Bidi-Algorithmus.

Der Unicode-Bidi-Algorithmus bestimmt die Schreibrichtung des Textes anhand der Schreibrichtungs­eigenschaften der einzelnen Zeichen. Mitunter muss man etwas nachhelfen, damit der Algorithmus den Fluss der Textobjekte erkennen kann, wenn Schriften gemischt vorkommen. Zum Beispiel:

Einige Beispiele in diesem Artikel werden als Textgrafik gezeigt um sicherzustellen, dass Sie auch das sehen, was angedacht ist.

Klicken Sie auf das Quellcode ansehen-Icon um zu sehen, wie der wirkliche Text in Ihrem Browser dargestellt wird. Von der Seite aus können Sie auch den Quellcode für das jeweilige Beispiel ansehen.

Bei einigen Textgrafiken erscheinen beim Überfahren mit der Maus Tooltips mit einer lateinischen Umschrift für das, was Sie sehen sollten. Von rechts nach links geschriebener Text in Codebeispielen wird durch GROẞBUCHSTABEN dargestellt, von links nach rechts geschriebener Text durch kleinbuchstaben. Die Reihen­folge und Position der Zeichen in der Umschrift entspricht denen des Originals. Sie können diese Information – wenn verfügbar – sehen, indem Sie mit dem Mauszeiger über die Textgrafik gehen.

Dieser Beispielsatz zeigt das Ergebnis, wenn man sich einzig auf den bidirektionalen Algorithmus verlässt. Dieses Ergebnis ist jedoch nicht korrekt. Da das ganze Zitat auf Hebräisch ist, sollten der Text „W3C“ und das Komma links vom hebräischen Text (also dahinter) erscheinen.

Quellcode ansehenfalsch geordneter Text

Das richtig dargestellte Ergebnis ist jedoch:

Quellcode ansehenrichtig geordneter Text

In anderen Fällen möchte man das Ergebnis des Unicode-Bidi-Algorithmus insgesamt überschreiben.

Normalerweise verwendet man dafür Markup, aber in einigen Fällen ist kein Markup verfügbar (hoffentlich nur bei altem Markup, wo die Anforderung an die Unterstützung von bidirektionalem Text noch nicht bedacht wurde). Dieser Artikel zeigt, wie man in diesen Fällen Unicode-Steuerzeichen verwenden kann.

Für weitere Informationen, wie der Bidi-Algorithmus arbeitet und wann man nachhelfen muss, siehe Was man über den Bidi-Algorithmus und Inline-Markup wissen muss.

Antwort

Anwendungsfälle

Als erstes ist es wichtig zu sagen, dass es für Inhaltsautoren einige Vorteile bietet, zur Steuerung von bidirektionalem Verhalten (Bidi) möglichst Markup zu verwenden, nicht Unicode-Steuerzeichen (siehe Unicode-Steuerzeichen vs. Markup für bidirektionale Dokumente). Wenn Sie ein Schema oder eine Spezifikation erstellen oder aktualisieren, sollten Sie Markup zur Steuerung von Bidi-Verhalten implementieren anstatt auf Unicode-Steuerzeichen zu setzen und dabei Situationen vermeiden, in denen kein Markup eingesetzt werden kann (bspw. Text in natürlicher Sprache in Attributwerten). Für weitere Informationen siehe Best Practices for XML Internationalization.

Unicode-Steuerzeichen können dennoch in Situationen nützlich sein, wenn kein Markup zur Verfügung steht. Beispiele dafür sind bestehendes altes Markup wie title-Elemente in HTML und alle HTML-Attributwerte, die Text in natürlicher Sprache enthalten.

Wenn Unicode-Steuerzeichen verwendet werden, sollten sie nur zur Steuerung innerhalb der Zeile eingesetzt werden. Bidi-Steuerzeichen, die Absätze oder Listenelemente usw. umfassen, funktionieren für Markup auf Blockebene nicht richtig. Gründe dafür sind die Behandlung von Whitespace im Quelltext und die Anforderungen, um Vererbung und Scoping in der Markup-Hierarchie zu regeln.

Paarweise Steuerzeichen

Unicode bietet spezielle unsichtbare Steuerzeichen, um bei reinem Text die Grundrichtung festzulegen oder um den Unicode-Bidi-Algorithmus zu überschreiben. Das sind:

Diese Zeichen werden paarweise verwendet. Zuerst wird eins der ersten vier oben genannten Zeichen verwendet, um den Anfang eines Textbereichs zu markieren. Der Bereich wird in jedem Fall von dem letzten Zeichen (PDF) geschlossen.

Die Embedding-Steuerzeichen legen die Grundrichtung des von ihnen eingeschlossenen Textes fest. Die Override-Steuerzeichen setzen den Bidi-Algorithmus für den von ihnen eingeschlossenen Text außer Kraft.

Zum Verständnis, wann es wichtig ist, die Grundrichtung festzulegen, siehe Was man über den Bidi-Algorithmus und Inline-Markup wissen muss.

Das folgende Beispiel zeigt, wie diese Steuerzeichen in reinem Text verwendet werden können:

Das folgende Beispiel zeigt ein Tooltip in HTML, das den Titel des verlinkten Dokuments und die Angabe von dessen Zielsprache enthält. Der Text „(FAQ)“ steht rechts vom persischen Text, was nicht korrekt ist.

Quellcode ansehenTooltip ohne Steuerzeichen

Im korrekten Titel steht „(FAQ)“ links vom persischen Text, wie hier gezeigt.

Quellcode ansehenTooltip mit Steuerzeichen

Um dieses Ergebnis zu erzielen, wurden zwei unsichtbare Steuerzeichen eingefügt: U+202B RIGHT-TO-LEFT EMBEDDING (RLE) und U+202C POP DIRECTIONAL FORMATTING (PDF). Im nachfolgenden Code werden diese durch numerische Zeichenreferenzen repräsentiert:

title="»‫...‬« [auf Persisch]"

(Zum Vergleich, wie dasselbe Ergebnis erreicht werden kann, wenn Markup einsetzbar ist, siehe Abschnitt Entsprechungen weiter unten.)

Die Steuerzeichen RLM und LRM

Zwei andere unsichtbare Unicode-Steuerzeichen zur Steuerung der Schreibrichtung haben gewöhnlich kein entsprechendes Markup. Diese Zeichen sollten als solche oder als Escapes verwendet werden. Sie bereiten weniger Probleme, denn sie stehen einzeln, nicht paarweise als Begrenzer von Textbereichen wie die anderen oben genannten Steuerzeichen. Sie werden auch öfter verwendet als die oben genannten Steuerzeichen, die Textbereiche einschließen.

Anmerkung des Übersetzers: HTML stellt die Zeichen-Entity-Referenzen ‎ und ‏ zur Verfügung.
  • U+200E:   LEFT-TO-RIGHT MARK (LRM)
  • U+200F:   RIGHT-TO-LEFT MARK (RLM)

Das folgende Bild zeigt, was wahrscheinlich dargestellt wird, wenn man sich bei der Anzeige einer MAC-Adresse in einem Rechts-nach-links-Umfeld allein auf den Bidi-Algorithmus verlässt.

Quellcode ansehenfalsche Reihenfolge in MAC-Adresse

Das folgende Bild zeigt das erwünschte Ergebnis.

Quellcode ansehenrichtige Reihenfolge in MAC-Adresse

Um dieses korrekte Ergebnis zu erzielen, wurde ein unsichtbares Steuerzeichen unmittelbar vor der MAC-Adresse eingefügt: U+200E LEFT-TO-RIGHT MARK (LRM).

(Dasselbe Ergebnis ließe sich mit den vorher genannten paarweisen Steuerzeichen erzielen. So ist es jedoch einfacher und wird deshalb vom Unicode Standard empfohlen.)

Für weitere Informationen, wie diese beiden Steuerzeichen zu verwenden sind, siehe Was man über den Bidi-Algorithmus und Inline-Markup wissen muss.

Übrigens

Entsprechungen

Wenn Markup zur Angabe der Schreibrichtung existiert und verwendet werden kann, entsprechen diese Steuerzeichen in ihrem Verhalten dem Markup. Die folgende Tabelle (übernommen aus Unicode in XML and other Markup Languages) gibt das entsprechende Markup zur Ersetzung der Steuerzeichenpaare in HTML an:

Steuer­zeichen Zeichen­code Äquivalentes Markup Kommentar
LRE U+202A dir="ltr" Attribut für Block- oder Inline-Elemente
RLE U+202B dir="rtl" Attribut für Block- oder Inline-Elemente
RLO U+202E <bdo dir="rtl">  
LRO U+202D <bdo dir="rtl">  
PDF U+202C kein Markup um RLE oder LRE abzuschließen (der Abschluss erfolgt durch das End-Tag des Elements mit dem dir-Attribut)
</bdo> um RLO oder LRO abzuschließen

An Stellen in HMTL, an denen Markup verwendet werden kann, sieht der entsprechende Code zur Darstellung des Textes aus dem obigen Beispiel im Abschnitt „Paarweise Steuerzeichen“ folgendermaßen aus:

Siehe »<a dir="rtl" lang="fa" href="...">...</a>« [auf Persisch].

Das führt zu folgendem Ergebnis:

Quellcode ansehenrichtig geordneter Text

In XML verwendet man Bidi-Markup, das von DTD oder Schema zur Verfügung gestellt wird, und gibt das Richtungs­verhalten mit CSS an.

Beachten Sie, dass das Markup, das für das dir-Attribut verwendet wird, auch zur Angabe der Sprachinformation dient. Gewöhnlich findet man bereits Markup an Stellen, wo ein dir-Attribut nötig ist. (Sprachinformation kann nicht durch Steuerzeichen angegeben werden.)

Ein bedeutender Unterschied zwischen Markup und Steuerzeichen ist, dass ein einziges dir-Attribut für eine ganze Seite oder einen Abschnitt einer Seite gelten kann, während der Effekt von LRE/RLE am Absatzende aufhört.

Sagen Sie uns, was Sie denken (auf Englisch).

Abonnieren Sie unseren RSS-Feed.

Neue Ressourcen

News auf der Startseite

Twitter (News auf der Startseite)

‎@webi18n

Literaturhinweise

Autor: Richard Ishida, W3C. Übersetzer: Gunnar Bittersmann.

Valides XHTML 1.0!
Valides CSS!
Kodiert in UTF-8!

Übersetzung der englischen Version vom 2009-07-10. Letzte Änderung der übersetzten Version am 2014-01-21 09:22 UTC.

Suchen Sie nach qa-bidi-unicode-controls im i18n-Blog, um alle Dokumentänderungen nachzuvollziehen.