Komisches Verhalten bei JSF mit Locales

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo zusammen,

mir ist bei der Benutzung von Locales und JSF etwas komisches aufgefallen. Hab in meiner Webanwendung Englisch als Standardsprache und Deutsch als weitere zulässige Sprache eingestellt.

Code:
<application>
        ...
        <message-bundle>...bundle.Messages</message-bundle>
        <locale-config>
            <default-locale>en</default-locale>
            <supported-locale>de</supported-locale>
        </locale-config>
    </application>

und natürlich die entsprechenden Bundlefiles (Resources.properties und Resources_de.properties) erstellt. Zuerst hatte ich das ganze über die im Browser eingestellte Sprache regeln lassen, mittlerweile gibts aber auf der Loginseite eine Selectbox, die die Locales zur Auswahl stellt (en_EN und de_DE). Gesetzt wird das ganze dann direkt in der View.

Code:
<f:view locale="#{Application.locale}">

Komisch ist jetzt nur, dass ich auf meinem Rechner immer die deutschen Sprachfiles bekomme, selbst wenn ich in der View die locale="en_EN" fix reinschreibe. Einzige Abhilfe, damit ich die englischen Sprachfiles angezeigt bekomme ist, die deutschen Propertiesdateien zu löschen. Was mir hierbei noch aufgefallen ist: nutze ich ein Windows/Linux mit deutscher Lokalisierung, tritt das genannte Verhalten auf. Benutze ich ein englischsprachiges Linux ohne deutsche Lokalisierung, funktioniert alles wie gewünscht (sowohl die Browsereinstellung als auch die Variante mit der Selectbox führen dann zur Darstellung der richtigen Sprache).

Da ich bis dato im Forum nix dazu finden konnte, wunder ich mich schon ob das Phänomen nur bei mir auftritt? Hat vielleicht jemand ne Idee, was da falsch läuft?

Schonmal vielen Dank ;)
 
M

maki

Gast
Unter Windows setzt der Browser die sog. locale, hast du denn die Sprachleiste in Wndows aktiviert?
Damit könntest du sehr bequem zwischen den einzelnen umschlaten.

Trotzdem sollte eine manuell ausgewählte locale die des Browser überschreiben.

Setzt du denn das locale im request?
 
G

Guest

Gast
Hallo,

mit der Sprachleiste meinst du sicherlich die Language bar (hab hier nur ein englisches XP) in der Taskleiste oder? Die hab ich i.d.R. geschlossen, hatte sie jetzt mal aufgemacht aber eine Änderung der Sprache (hatte dort zuerst nur Deutsch drin, mittlerweile aber auch wieder Englisch angelegt) bringt keinerlei Veränderung.

Wie du eben schon sagst, dachte ich eben auch dass die lokalen Einstellungen höher priorisiert werden. Bei der Klasse Application handelt es sich um eine managed bean mit session scope. Das Attribut locale wird dabei via faces-config.xml schon mit dem Startwert en_EN initialisiert.

Code:
<managed-bean>
        <managed-bean-name>Application</managed-bean-name>
        <managed-bean-class>...bean.Application</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
        <managed-property>
            <property-name>locale</property-name>
            <value>en_EN</value>
        </managed-property>
        ...
    </managed-bean>

Und dann erfolgt lediglich die Zuweisung des locales mit Application.locale (siehe 1. Post). Der Code an sich funktioniert ja auch auf nicht "eingedeutschten" Systemen, daher gehe ich mal davon aus, dass es irgendwie an der Einstellung des Betriebssystems liegt. Aber selbst ein Ubuntu, bei dem ich im Setup Deutsch als Systemsprache ausgewählt hab, liefert das gleiche Ergebnis. Erst wenn ich mir ein Ubuntu mit Englisch als Systemsprache installier (hatte das in VMWare mit Konsoleninstallation getestet) zeigt er das gewünschte Verhalten. Alles n bissl komisch ^^

Hast du vielleicht noch ne Idee? Danke schonmal ;)
 
M

maki

Gast
Zeig doch mal ein bischen Code aus der JSP, wichtig wäre wo du den locale für die View setzt und wo dein Bundle geladen wird, natürlich kommt es auf die Reihenfolge an.
 
G

Guest

Gast
Hmm ich weiß jetzt glaub nicht so genau, was du meinst. Das Locale wird wie gesagt im View-Tag angegeben und das bundle selbst wird nirgendwo explizit geladen, sondern es erfolgt lediglich die Definition in der faces-config. Nachfolgend mal ein bischen Code.

Code:
<?xml version="1.0" encoding="UTF-8" ?>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<base href="<%=basePath%>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>CRM - Errorpage</title>
<link rel="stylesheet" type="text/css" href="style/modern/css/default.css" />
<link rel="stylesheet" type="text/css" href="style/modern/css/error.css" />
</head>
<body>
<f:view locale="#{Application.locale}">
    <t:graphicImage value="style/modern/images/logo_big.png" alt="ALFH" title="ALFH" styleClass="logo" />

    <t:div styleClass="messageBox">
        <h1><t:outputLabel for="messageBox" value="#{bundle.error_404_title}" /></h1>
        <t:outputText id="errorMessage" value="#{bundle.error_404_message}" escape="false" />
        

        

        <t:commandLink value="#{bundle.error_404_link}" action="applicationPage" styleClass="link" />
    </t:div>
</f:view>
</body>
</html>

Und das Bundle selbst steht wie gesagt in der faces-config.xml

Code:
<application>
    <resource-bundle>
        <base-name>crm.web.bundle.Resources</base-name>
        <var>bundle</var>
    </resource-bundle>
    <message-bundle>crm.web.bundle.Messages</message-bundle>
    <locale-config>
        <default-locale>en</default-locale>
        <supported-locale>de</supported-locale>
    </locale-config>
</application>
 
A

ahoehma

Gast
vielleicht fügst du mal "en" als supported locale hinzu?

<supported-locale>en</supported-locale>
 
G

Guest

Gast
Hallo,

da Englisch bereits als Standardsprache eingetragen ist, muss man die Sprache nicht nochmal explizit bei den unterstützten Sprachen anführen.

Ich vermute mittlerweile eher, dass der Fehler an meinem Rechner in Zusammenspiel mit dem AppServer irgendwo zu suchen ist. Wie gesagt, auf meinem Webserver (Debian 4.0, Systemsprache Englisch) funktioniert alles wie gewünscht. Auf meinem Rechner (englisches XP mit deutscher Lokalisierung und Ubuntu 7.10 mit deutscher Lokalisierung) tritt dieses komische Verhalten auf, so dass ich vermute, dass es irgendwie mit der Systemsprache zusammenhängen muss.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben