2012-09-18 15 views
10

Wir haben eine Anwendung, die die grundlegende JSP/Servlet verwendet, dass alle Texte derzeit in Englisch in den JSP-Seiten fest codiert ist. Wir denken über Internationalisierungen unserer App nach, also brauchen wir eine Art, den Text in die Eigenschaftendatei zu extrahieren. HierJSTL Resource Bundle für Internationalisierung und Lokalisierung

ist, was ich bisher getan haben:
1) Erstellen Sie eine Datei XXXXX-messages_en.properties genannt, fügen Sie den Schlüssel/Wert-Paar in die Eigenschaftendatei, z.B. AAAAA = Hello World

2) Last JSTL relevant Taglibs in der JSP-Seite

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 

3) Ersetzen Sie den vorherigen Text mit

<fmt:message key="AAAAA" bundle="${XXXXX}"/> 

4) setBundle-Tag in der JSP-Seite hinzufügen:

<fmt:setBundle basename="XXXXX-messages" var="XXXXX"/> 

Und starten Sie den Server neu, alles wird korrekt angezeigt.

jedoch meine Frage in Bezug auf die Verwendung von JSTL Internationalisierung Bibliothek ist:

FRAGE 1) Es scheint, dass ich <fmt:setBundle> Tag in jede Seng JSP-Seiten hinzufügen müssen, die ein bisschen hässlich ist und wenn etwas muss Veränderung in der Zukunft (Namensänderung?) wird das Leben erschweren.

Ich habe darüber nachgedacht, vielleicht kann ich eine separate Seite erstellen und diese <fmt:setBundle> darin einfügen, und dann diese Seite mit <jsp:include>. Oder kann ich das über einen Servlet-Filter injizieren? Ich würde sagen, dass ich mit beiden Optionen nicht ganz zufrieden bin.

Gibt es einen empfohlenen Weg, dies zu tun?

FRAGE 2) Wie kann man eine Standardsprache angeben, wenn dort keine Datei mit den passenden Eigenschaften vorhanden ist? Ich habe in meinem Fall getestet, wenn ich <fmt:setLocale> auf die JSP-Seite mit einer französischen Sprache setze, kann die Seite immer noch korrekt geladen werden. Bedeutet das, dass die englische Version immer die Standardeinstellung ist oder ist es einfach, weil mein Betriebssystem/Browser Englisch ist?

Was passiert, wenn ein chinesischer/japanischer Benutzer meine Seite öffnet und ich sowohl englische als auch französische Eigenschaftendatei habe?

Antwort

6

können Sie ein Ersatzgebietsschema verwenden, um Ihre zweite Frage zu lösen:

Wenn keine Übereinstimmung Ausweich-locale Konfigurationseinstellung gefunden wird, sucht die Formatierung Aktion für die so genannte. Eine Konfigurationseinstellung ist ein Wert, der entweder durch einen Kontextparameter in der web.xml-Datei der Anwendung oder durch eine JSTL-Aktion oder einen Java-Code in einem der JSP-Bereiche festgelegt wird. So legen Sie das Ersatzgebietsschema im Web festXML-Datei, umfassen die folgenden Elemente:

<context-param> 
    <param-name>javax.servlet.jsp.jstl.fmt.fallbackLocale</param-name> 
    <param-value>en</param-value> 
</context-param> 

http://onjava.com/onjava/2002/09/11/jstl2.html

+0

ich dies auf jeden Fall lesen, wenn ich um Google, so wie kann ich es vergessen? Mein Verstand muss in diesem Moment aus meinem Kopf sein. Wie auch immer, danke für deine Antwort! –

8

OK, fand ich die Art und Weise meine eigene Frage 1. Grundsätzlich zu lösen, was ich tun muß, ist gesetzt, dass in web.xml:

<context-param> 
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> 
    <param-value>XXXXX-messages</param-value> 
</context-param> 

Auf diese Weise ich den Tag von setBundle sparen in jedem JSP-Seiten.

2

Unten ist die JSP-Vorlage JSTL erstellt verwenden, kann jemand helfen JSTL Ressourcenpaket für Internationalisierung und Lokalisierung integrieren.

template.tag

<%@tag description="UI Template" pageEncoding="UTF-8"%> 
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>   
<%@attribute name="header" fragment="true"%> 
<%@attribute name="footer" fragment="true"%> 
<fmt:setLocale value="en" scope="session" /> 
<fmt:setBundle basename="resources.labels" var="label" scope="session" /> 
<fmt:setBundle basename="resources.messages" var="msg" scope="session" /> 
<html> 
    <body> 
     <div id="pageHeader"> 
      <jsp:invoke fragment="header"/> 
     </div> 
     <div id="body">    
      <jsp:doBody/> 
     </div> 
     <div id="pageFooter">    
      <jsp:invoke fragment="footer"/> 
     </div> 
    </body> 
</html> 


Unten ist die home.jsp Datei die header.jsp und footer.jsp zusammen mit dem Körper enthalten ist.

home.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<%@taglib prefix="t" tagdir="/WEB-INF/tags"%> 
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> 
<!DOCTYPE html> 
<t:template> 
    <jsp:attribute name="header"> 
     <jsp:include page="../header.jsp" /> 
    </jsp:attribute> 
    <jsp:attribute name="footer"> 
     <jsp:include page="../footer.jsp" /> 
    </jsp:attribute> 
    <jsp:body>   
     <font style="font-family: Arial; font-size: 10pt; color: blue; font-weight: bold"> 
      <fmt:message bundle="${msg}" key="message.loginSuccess" /> 
     </font> 
     <br/> 
     <font style="font-family: Arial; font-size: 10pt; font-weight: bold"> 
      <fmt:message bundle="${label}" key="label.home" /> 
     </font> 
    </jsp:body> 
</t:template> 


Datei web.xml

<context-param> 
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> 
    <param-value>resources.labels</param-value> 
    <param-value>resources.messages</param-value> 
</context-param> 
Verwandte Themen