JSP Internationalisierung

Zwergi

Mitglied
Hallo,

Ich versuche mit Hilfe von Java JDBC und jsp ein Webportal zu verwirklichen. Als Feature möchte ich verschiedene Sprachversionen mit Hilfe von Internationalisierung anbieten.

Ich arbeite mit der Programmierumgebung Eclipse (Version: Galileo) in einem Dynamic Web Project.
Unter Java Resources: src habe ich diverse Packages mit Java-Dateien und unter dem Folder WebContent befinden sich die Subfolder für css, images und JSP. Ebenfalls befinden sich hier die beiden Folder META-INF (mit der MANIFEST.MF Datei) und der Folder WEB-INF (mit der Datei web.xml)

Meine Frage ist nun folgende:

a) Wohin muss ich die Property Dateien (bundles) packen, damit ich über die jsp-Seiten auf die keys zugreifen kann?

b) Wie lautet die korrekte Pfadbezeichnung, damit die bundles auch gefunden werden?

Wenn ich das alles auf Java-Ebene teste und die Java-Klasse mit mein-Methode und die properties.Dateien in einem Package habe, klappt der Zugriff. Aber ich konnte den Zugriff auf jsp-Ebene nicht umsetzen.Anscheinend mache bei der Pfadbenennung einen Fehler und bekomme

Java:
java.util.MissingResourceException: Can't find bundle for base name

oder auch

Java:
java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key

Ich hoffe, dass mir jemand mti diesem Problem weiterhelfen kann.

Vielen Dank im Voraus,
Sandra
 
N

nillehammer

Gast
Hallo Zwergi,

die properties Dateien gehören genau wie die class Dateien in die Packages der Anwendung. In dem fertigen Artefakt (war/jar-Dateien) liegen sie also direkt nebeneínander. In der Entwicklunsgumgebung hat es sich durchgesetzt, sie in verschiedenen Ordnern zu pflegen
Java-Dateien: /src/main/java/mein/package/name
Properties-Dateien: /src/main/resources/mein/package/name
Das Build-Tool sorgt dann dafür, dass die beiden Ordner zu einem Package in der Anwendung werden. Falls Du kein Build-Tool nutzt, kannst Du den /src/main/resources/ in Eclipse auch zu einem Source-Folder machen. Dadurch kopiert Eclipse die Dateien einfach in die Anwendung. Die Bessere Wahl ist aber auf jeden Fall ein Build-Tool.

Wie greifst Du denn von der jsp drauf zu? Poste bitte die jsp bitte mal.
 
Zuletzt bearbeitet von einem Moderator:

Zwergi

Mitglied
Hi nillehammer,

danke fürs schnelle zurückschreiben. Ich hatte wohl einen Denkfehler. Anstatt den Zugriff aufs bundle in der jsp zu machen, hab ich es mit einer Java-Bean versucht. Dabei ging die Pfadbenennung aufn Bart. Wenn ich den Code jetzt direkt in der jsp hab, klappt der Zugriff soweit.

Java:
// resouce bundle lesen
	ResourceBundle rb = PropertyResourceBundle.getBundle("inter",
			request.getLocale());

	// resource string lesen
	String title = rb.getString("box1");

	// resource string ausgeben
	out.println(title);

Soweit so gut. Eine Frage hätte ich aber noch:

Im Sinne von M-V-C möchte ich auf den für den User sichtbaren Pages kein/kaum Java Code sein (Ausnahme die jsp-tags). Sämtliche Programmierarbeit sollte auf sog. Applications-jsp's sein, die die eigentliche Datenverarbeitung mit den Beans regeln und mit response.sendRedirect("url") zur betreffenden Seite weiterleiten.

Was wäre eine sinnvolle Vorgehensweise?

a) in jedes <tag> anstelle des Texts ein
Java:
<% out.print(rb.getString("box1"));%>
einzubinden? Beliebig hässlich und nicht im Sinne von MVC

b) mit einer Bean arbeiten? Aber müsste ich dann nicht für jedes <tag> mit <jsp:setProperty> den key setzen und dann mit <jsp:getProperty> wieder auslesen? Ist das praktikabel?

c) irgend ne elegantere Lösung?

Nochmal danke im Voraus
 
N

nillehammer

Gast
Das Laden der ResourceBundles gehört definitiv nicht in den JSP-Code, sondern in eine Java-Klasse, die Du dann in der JSP benutzt.

<% out.print(rb.getString("box1"));%>
Wenn Du eine Instanz mit Namen rb in Deiner JSP referenzierst, ist das schon mal eine gute Näherung. Aber wie Du schon richtig schreibst, noch ziemlich hässlich. Am besten wäre ein Tag, der das macht. Den kannst Du entweder selbst schreiben oder Du benutzt externe Taglibs oder Du gehst weg von JSP hin zu (moderneren) Frameworks (z.B. JSF oder ein anderes Framework Deiner Wahl).
 

DerEisteeTrinker

Bekanntes Mitglied
Denk mal drüber nach, ob du diese "Internationalisierung" nicht ein Tag packst. Schreibst ne feine kleine Klasse, die von SimpleTagSupport erbt und bindest die Taglib dann ein. So kannst das ganze ohne Scriptlets realisieren.
 

Ähnliche Java Themen

Neue Themen


Oben