ResourceBundles - "... cannot be resolved"

Status
Nicht offen für weitere Antworten.

PeterRRR

Mitglied
Hallo!

Ich probiere gerade mit Eclipse JSF aus. Ich hab jetzt zwei Resource Bundles erstellt (messages_en.properties, messages_de.properties)

In der faces-config.xml hab ich folgendes hinzugefügt:

Code:
	<application>
		<locale-config>
			<default-locale>en</default-locale>
			<supported-locale>de</supported-locale>
		</locale-config>
		<resource-bundle>
			<base-name>mypackage.i18n.messages</base-name>
			<var>msg</var>
		</resource-bundle>
	</application>

Im JSP-File greife ich dann mit "#{msg.irgendwas}" darauf zu. Wenn ich die Anwendung ausführe funktioniert das auch sehr gut und ich bekomme je nach eingestellter Sprache im Betriebssystem die entsprechenden Texte ausgegeben (deutsch oder eben englisch).

Eclipse zeigt mir aber im JSP-File bei jeder Verwendung von "msg" den Warnhinweis: "msg cannot be resolved". Warum ist das so (vor allem weil es ja in Wirklichkeit auch funktioniert) bzw. wie kann ich diese störenden Warnungen wegbekommen?

Alternativ hab ich auch versucht mit <f:loadBundle basename="mypackage.i18n.messages" var="msg" darauf zuzugreifen, wobei dann allerdings bei basename konkret "...message_de" oder "...messages_en" stehen muss, sonst wird das richtige Bundle nicht automatisch gefunden.

Danke schon jetzt für eure Hilfe!

lg Peter
 

PeterRRR

Mitglied
Ja, dieses Tutorial hab ich mir schon angesehen. Leider funktioniert es bei mir nicht, wenn ich es so mache wie dort beschrieben. Wenn ich in der faces-config.xml wie im Tutorial vorgeschlagen beispielsweise das einfüge...

Code:
<message-bundle>
	mypackage.i18n.messages
</message-bundle>

... und dann im JSP mit ...

Code:
<f:loadBundle basename="mypackage.i18n.messages" var="msg"/>

... darauf zugreifen will, funktioniert es eben nicht, weil dann im JSP die messages_de bzw. messages_en nicht gefunden werden, wenn bei basename nur "mypacke.i18n.messages" steht. D.h. die richtige Sprache wird NICHT automatisch richtig ausgewählt.

Das hab ich aber grundsätzlich ja schon im ersten Posting erwähnt. Aber trotzdem danke für die Antwort!

lg
Peter
 

gex

Bekanntes Mitglied
Ah ok. Also wenn du beim loadBundle den korrekten basename angibst, der dem package + basisnamen des bundles entspricht, brauchst du im faces-config gar nichts anzugeben, denn er sucht sich das bundle selbständig im Classpath.
 

PeterRRR

Mitglied
Ich fürchte es ist noch immer nicht so wirklich rübergekommen, wie ich das eigentlich meine. :noe:

Nochmal kurz zusammengefasst:

  • Ich will zwei verschiedene Sprachen zur Verfügung stellen (en + de)
  • je nach eingestellter Sprache im Betriebssystem, soll eine der beiden Sprachen ausgewählt und die JSP-Seite in der entsprechenden Sprache angezeigt werden
  • die beiden ResourceBundles heißten "messages_de" und "messages_en"
  • bei Angabe von z.B. basename="package.messages_en" wird die Datei gefunden, bei Angabe von basename="package.messages" eben nicht, wobei ersteres wenig Sinn macht, da ja dann IMMER englisch verwendet wird
  • wie realisiere ich es, dass die Sprache AUTOMATISCH eingestellt wird

Oder ist es NICHT möglich, die Sprache automatisch vom Betriebssystem auszulesen und es MUSS immer konkret ein ResourceBundle (z.B. Englisch) angegeben werden?

lg
Peter
 

gex

Bekanntes Mitglied
Doch doch, ich verstehe schon was du haben möchtest.

Da bei den Resource Bundles immer ein Bundle das Default Bundle ist, hat dieses File keinen Postfix.
Wenn bei dir English die Default Language ist, dann heisst dieses File nur messages.properties und fungiert überdies immer als Fallback, falls ein Key in einer anderen Sprache nicht übersetzt wurde.
package/messages.properties
package/messages_de.properties

Ausserdem ist nicht die Sprache des Betriebssystem ausschlaggebend, sondern die bevorzugte Sprache im Browser (also das was beim HTTP-Request abgesetzt wird).
 

PeterRRR

Mitglied
Daaaankeschön!!! :toll:

Endlich verstehe ich wie das ganze gemeint ist. Ich hab nämlich nicht gewusst, dass das Properties-File der Default-Sprache keine Sprachendung haben muss. Daran ist's wohl bei mir gescheitert, jetzt ist die Sache natürlich klar und funktioniert auch einwandfrei.

Dass die Browsersprache ausschlaggebend ist wusste ich auch nicht, aber ich nehme an, dass dann letztendlich ja auch wieder der Browser aus dem Betriebssystem die Sprache ausliest, sofern man die Sprache im Browser nicht gesondert einstellen kann.

Aber wie gesagt, das eigentlich Problem ist damit gelöst, ein ganz großes Dankeschön nochmal! :applaus:

lg
Peter
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben