CNoetzel
Elite Observer

Schriftrichtung (RTL) aus CMS_INPUT_DOM abgreifen

Werte Community,

wir verwenden als Eingabekomponente ein CMS_INPUT_DOM in das wir arabischen Text eintragen. Dieser Text wird von der Eingabekomponente korrekt erkannt in RTL (right-to-left) Form dargestellt. Die Ausgabe im HTML-Ausgabe im HTML-Ausgabekanal erfolgt wie gewohnt über:

$CMS_IF(!st_text.isEmpty)$

     $CMS_VALUE(st_text)$

$CMS_END_IF$

Dadurch wird der Text aber ganz gewöhnlich in LTR Schreibweise angezeigt. Die Eingabekomponente soll sowohl für LTR als auch RTL Texte verwendet werden.

Nun meine Frage: Ist es irgendwie möglich die Formatierung (RTL) aus dem DomElement abzugreifen, um Text automatisch auch im Ausgabekanal in RTL Schriftrichtung darzustellen?

Ziel sollte es sein, dass ein Redakteur in der Eingabekomponente Texte pflegt (deutsch, englisch, arabisch), die Schriftrichtung automatisch erkannt und im Ausgabekanal entsprechend dargestellt wird.

Vielen Dank im Voraus!

Freundliche Grüße

Carsten Noetzel

4 Replies
kscheuing
I'm new here

Hallo Carsten,

das ist meiner Meinung nach ein Style Thema. Versuchs mal mit dem "direction" Tag:

<div id="text" style="direction:rtl;" >حماة الحمى </div>

Die "direction" wiederrum könnte man über einen Radiobutton steuern:

<div id="text" $CMS_IF(st_radio.toString == "rtl")$ style="direction:rtl;" $CMS_END_IF$>

Gruß, Kai

Hallo Kai,

vielen Dank für Deine Rückmeldung. Das es einen Weg über das direction-Tag gibt, ist mir bewusst. Man könnte auch eine Formatvorlage anlegen, die den entsprechenden Text in RTL-Schreibweise und rechtsbündig ausgibt.

Meine Frage zielt aber darauf ab, ob es möglich ist das zu automatisieren, ohne dass der Redakteur einen Radiobutton betätigen oder eine Formatvorlage auswählen muss. Anscheinend bekommt die Eingabekomponente ja mit, dass es sich um RTL-Text handelt, denn man kann ihn ja so editieren.

Soweit ich das jetzt beurteilen kann, wird ein in RTL Schreibweise eingegebener Text auch in RTL Schreibweise ausgegeben. Was fehlt ist dennoch die Rechtsbündigkeit.

Grüße

Carsten

0 Kudos

Hallo Carsten,

weiß zwar nicht obs dich weiter bringt, habs auch nicht versucht, aber das hab ich in der API gefunden:

Interface DomEditorValue

String      toHtml(Language language)

Build an HTML representation for the given language's value.

0 Kudos

Nach weiteren Recherchen hat sich herausgestellt, dass die fehlende Rechtsbündigkeit auf den CSS-Style "text-align:left" im Parent-Container zurückzuführen ist.

Anscheinend sorgt diese Eigenschaft dafür, dass ein mittels dir="RTL" bzw. dir="auto" annotiertes p-Element links-bündig angezeigt wird, obwohl das dir-Attribut es rechtbündig anzeigen sollte.

Ein Minimalbeispiel zum Selbertesten:

<!doctype html>

<html>

<head>

<title>Test</title>

<meta charset="utf8">

</head>

<body style="text-align:left">

    <h4>Direction Test</h4>

    <p dir="auto">LTR Schrift mit dir="auto"!</p>

    <p dir="auto">بالرغم والروسية في جعل. دار كانت مدينة فاتّبع أم. فعل دفّة يا-فرنسا حول.</p>

</body>

</html>

Entfernt man den style-Teil aus dem Body-Tag, wird der arabische Text korrekt in RTL Form angezeigt.

Um das ursprüngliche Problem zu lösen, kann man in den Allgemeinen Formatvorlagen die Vorlage "Standard" um das dir-Attribut erweittern.

<p dir="auto">$CMS_VALUE(#content)$</p>

Damit wird automatisch erkannt, ob es sich bei dem eingegebenen Text um RTL oder LTR Text handelt und dieser entsprechend dargestellt. Es muss aber sichergestellt sein, dass die Parent-Container kein Text-Alignment vorgeben, da RTL-Text sonst nicht rechtsbündig dargestellt wird. Der Nachteil dieser Workarounds ist, dass die Schreibrichtung auf Basis des ersten Zeichens im Absatz festgelegt wird und es somit zu Alignment-Problemen kommt, wird RTL-Text (arabisch) mit LTR-Text (deutsch) gemischt (siehe dazu auch http://www.w3.org/TR/html5/dom.html#the-dir-attribute).