JSF Markup und Resource-Bundles - Best Practices?!

B

Brackelmann

Gast
Hallo zusammen!

Ich bastel gerade an einer kleinen Webapp, die in mehreren Sprachen verfügbar sein soll.

Ich verwende ResourceBundles für die einzelnen Bereiche. Mein Problem ist gerade, dass einige Texte hervorgehoben werden sollen und ich keine elegante Lösung finde. Ich hoffe das Beispiel macht deutlich, was ich meine:

Faces-Config:

[XML]
<faces-config version="2.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
<application>
<resource-bundle>
<base-name>resources.example.text</base-name>
<var>example</var>
</resource-bundle>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>de</supported-locale>
<supported-locale>fr</supported-locale>
</locale-config>
</application>
</faces-config>

[/XML]

text.properties:

Code:
someText=Dies ist ein besonders bespielhafter Bespielsatz!

HTML:
...
<h:outputtext value="#{example.someText}" />
...

Wenn nun aber, sagen wir mal, das "besonders" kursiv dargestellt werden soll, stehe ich vor einem Problem.

Irgendwelches Html in den properties halte ich für chaotisch. Es bliebe also nur die Möglichkeit someText zu splitten:

Alternative text.properties:

Code:
someText_a=Dies ist ein
someText_b= besonders
someText_c= bespielhafter Bespielsatz!

Dann würde man das etwa so einsetzen:

HTML:
...
<h:outputtext value="#{example.someText_a} "  />
<em><h:outputtext value="#{example.someText_b} "  /></em>
<h:outputtext value="#{example.someText_c} "  />
...

Auf diese Weise werden sowohl die Einträge in den properties, als auch die JSF-Seiten unglaublich unübersichtlich.

Gibt es noch andere, übersichtlichere Möglichkeiten?
 

sence

Bekanntes Mitglied
im normalen HTML würdest du auch das Wort mit dem entsprechendem kursiv tag ummandeln.
Ich verwende es seit einigen Jahren so, dass direkt im Resourcebundle die Wörter "getaged" werden.

Die andere Möglichkeit besteht darin sich einen entsprechenden Controller zu bauen, der die Texte aus der DB Lädt und nach wörtern in einer extra Column sucht, die getagted werden müssen.

Abstraktes Denkbeispiel:

Layout DB:
TextDE | TextEn | TextFR | MarkupDE | MarkupEn | MarkupFR


Beispieltext in TextDE:
das ist ein einfacher Text.

Beispiel in MarkupDE:
einfach=<i>


Controller implementierung - nur abstrakte Beschreibung:
wenn suchwort aus Markup<lang> in aktueller Sprachausgabe (Text<lang>) vorhanden, dann ummantele das Wort mit dem Tag hinter "="
- Nehme das Tag und setzte es vor das wort.
- nehme das Tag und baue es als endTag um (replace("<","</"))

Das wäre eine etwas für meinen Geschmack saubere "Art".
Jedoch wird die Performance darunter leiden.

Grüße
 
Zuletzt bearbeitet:
B

Brackelmann

Gast
Danke für die Antwort!

Das mit der DB wäre eventuell etwas für die Zukunft, werde mir das merken.

Die reinen Text-Properties werde ich mal so beibehalten, da etwaige Übersetzungsarbeiten nicht dadurch behindert werden sollen, dass sich derjenige, den man damit betraut (aller Wahrscheinlichkeit jemand ohne Programmierkenntnisse) von dem Markup verwirren lassen muss.

Noch mal danke!
 

sence

Bekanntes Mitglied
wird aber sehr aufwendig :(

nur zur Anmerkung, alternative Schreibweise:
Java:
<h:outputText value="#{example.someText_a} &lt;em&gt;#{example.someText_b}&lt;/em&gt; #{example.someText_c}"  escape="false"/>
 

Ähnliche Java Themen

Neue Themen


Oben