Regarding your second question, in our project we have <%@ page 
contentType="text/html; charset=UTF-8" %> at the top of
each jsp page. We also enable page buffering, ie, <%@ page buffer="256kb" 
autoflush="true" %>. Then we define a custom
tag to dynamically set content type and character encoding based on request. 
<i18n:setContentType /> should appear
relatively early in the page, because otherwise the response would already be commited 
otherwise. The source code for
the setContentType tag is as follows.

import java.util.Locale;
import java.util.ResourceBundle;
import java.util.MissingResourceException;
import javax.servlet.jsp.JspException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.tagext.TagSupport;

/** Tag to set content type based on request. */
public class I18nSetContentTypeTag extends TagSupport {
    public int doStartTag() throws JspException {
        HttpServletRequest req = (HttpServletRequest) pageContext.getRequest ();
        HttpServletResponse res = (HttpServletResponse) pageContext.getResponse ();
        String charset = req.getCharacterEncoding ();
        if (charset != null) {
            res.setContentType ("text/html; charset=" + charset);
        }
        else {
            Locale locale = req.getLocale ();
            try {
                // set character encoding
                // MainProps is a class we define to retrieve application level 
properties
                // Here we define character encoding mappings in our properties file
                String enc = MainProps.getValue ("CharEncoding." + locale.toString (), 
null);
                if (enc != null)
                    res.setContentType ("text/html; charset=" + enc);
                else // default to utf-8
                    res.setContentType ("text/html; charset=utf-8");
            }
            catch (Throwable t) {
                t.printStackTrace ();
            }
        }
        return SKIP_BODY;
    }
}

--
Michael

-----Original Message-----
From: Vernon Wu [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, May 21, 2002 5:22 PM
To: Jan Luehe
Cc: [EMAIL PROTECTED]
Subject: Re: Usage of i18n in JSTL


Thanks Jan for your detailed explanation. I think I finally find the right document 
which is under the standard-doc of
the
taglib.

1)
I follow the instruction and insert the line:
<%@ taglib uri="http://java.sun.com/jstl/ea/fmt"; prefix="fmt" %>
in a JSP file, and the lines:

        <context-param>
                <param-name>javax.servlet.jsp.jstl.i18n.basename</param-name>
                <param-value>mm</param-value>
        </context-param>
in the web.xml file.

I also have three resource files in place: mm.properties, mm_en.properties, and 
mm_zh.properties.

I get an exception when I try to bring up the jsp page (see the error message on the 
bottom).

After I replace the format tag lib of JSTL with the followings:

<%@ taglib uri="http://jakarta.apache.org/taglibs/i18n-1.0"; prefix="i18n" %>

<i18n:bundle baseName="mm"
             id="bundle"/>

The English version displays properly under the browser language setting with ?en? 
higher than ?zh?.

To my understanding, the code base of i18n and fmt tag libraries are the same (You 
wrote it). I guess the problem is the
setting. Would you please point out where I did wrong.

2)
When 'zh' is higher than 'en' in the browser's language setting, all messages in the 
resource file are displayed as ???.
And I find out the locale and character setting on the page is en_US and ISP-8859-1 
respectively. All jsp files have the
character set as UTF-8 since each jsp file started with <%@ page 
contentType='text/html; charset=UTF-8' %>. All JSP
file is formed from several regions: banner, side bar, footer, and body.

How can I have the right locale and character set in the JSP file?

Thanks very much for your kindly help.

Vernon

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2002-05-22 04:41:41 ApplicationDispatcher[/mm] Servlet.service() for servlet jsp threw 
exception
javax.servlet.ServletException: org/mozilla/javascript/JavaScriptException
        at 
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:463)
        at org.apache.jsp.content$jsp._jspService(content$jsp.java:346)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at 
org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:202)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:382)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:474)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at 
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:683)
        at 
org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:574)
        at 
org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:497)
        at 
org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:819)
        at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:391)
        at com.vernonwu.waf.view.template.Section.render(Section.java:41)
        at com.vernonwu.waf.view.template.tags.RenderTag.doEndTag(RenderTag.java:57)
        at org.apache.jsp.hscf02$jsp._jspService(hscf02$jsp.java:137)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at 
org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:202)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:382)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:474)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at 
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:683)
        at 
org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:574)
        at 
org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:497)
        at 
org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:819)
        at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:391)
        at com.vernonwu.waf.view.template.Region.render(Region.java:35)
        at com.vernonwu.waf.view.template.tags.RenderTag.doEndTag(RenderTag.java:61)
        at org.apache.jsp.page$jsp._jspService(page$jsp.java:1480)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at 
org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:202)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:382)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:474)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
        at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at 
org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
        at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at 
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at 
org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1017)
        at 
org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1115)
        at java.lang.Thread.run(Thread.java:536)
----- Root Cause -----
java.lang.NoClassDefFoundError: org/mozilla/javascript/JavaScriptException
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:130)
        at 
org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager.getEvaluatorByName
(ExpressionEvaluatorManager.java:219)
        at org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager.evaluate
(ExpressionEvaluatorManager.java:183)
        at 
org.apache.taglibs.standard.tag.el.core.ExpressionUtil.evalNotNull(ExpressionUtil.java:85)
        at 
org.apache.taglibs.standard.tag.el.fmt.MessageTag.evaluateExpressions(MessageTag.java:159)
        at 
org.apache.taglibs.standard.tag.el.fmt.MessageTag.doStartTag(MessageTag.java:108)
        at org.apache.jsp.content$jsp._jspService(content$jsp.java:192)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at 
org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:202)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:382)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:474)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at 
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:683)
        at 
org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:574)
        at 
org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:497)
        at 
org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:819)
        at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:391)
        at com.vernonwu.waf.view.template.Section.render(Section.java:41)
        at com.vernonwu.waf.view.template.tags.RenderTag.doEndTag(RenderTag.java:57)
        at org.apache.jsp.hscf02$jsp._jspService(hscf02$jsp.java:137)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at 
org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:202)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:382)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:474)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at 
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:683)
        at 
org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:574)
        at 
org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:497)
        at 
org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:819)
        at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:391)
        at com.vernonwu.waf.view.template.Region.render(Region.java:35)
        at com.vernonwu.waf.view.template.tags.RenderTag.doEndTag(RenderTag.java:61)
        at org.apache.jsp.page$jsp._jspService(page$jsp.java:1480)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at 
org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:202)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:382)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:474)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
        at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at 
org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
        at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at 
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at 
org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1017)
        at 
org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1115)
        at java.lang.Thread.run(Thread.java:536)

5/18/2002 5:57:35 AM, Jan Luehe <[EMAIL PROTECTED]> wrote:

>Vernon:
>
>> To my understanding, when I use the i18n tags from JSTL, I don't
>> need to write any class to get locale information stored. Only task
>> is to configure the locale information file. Please point it out if
>> I am wrong.  If I need to use the PropertyResourceBundle class as
>> the followings (this class, according to the JDK document, can't be
>> subclassed by the way):
>
>I never suggested you subclass PropertyResourceBundle. I said that
>JSTL's I18N tags work with any subclass of java.util.ResourceBundle,
>and the JDK happens to provide two subclasses: ListResourceBundle and
>PropertyResourceBundle. I mentioned that only in the unlikely case
>that neither of these fit your needs would you have to provide your
>own subclass of ResourceBundle (not PropertyResourceBundle).
>
>When using PropertyResourceBundle, all you need to provide is a
>properties file containing key/value pairs. PropertyResourceBundle has
>a constructor which takes an InputStream from which the properties
>file is read.
>
>For example, if you had this JSP fragment:
>
>  <fmt:setLocale value="en-US" />
>  <fmt:setBundle basename="com.acme.resources.Resources" />
>  <fmt:message key="greeting" />
>
>you would need to provide the following resource with your web application:
>
>  com/acme/resources/Resources_en_US.properties
>
>with these contents:
>
>  greeting=Hi
>
>You can also take a look at the standard-examples web application that
>ships with the JSTL reference implementation. It contains example
>pages that have been internationalized into German and Italian, and bundles
>the corresponding properties files containing the German and Italian
>localized messages.
>
>> At this point, I am very frustrated by the fact of lacking JSTL
>> documentation. I have searched all possible places and not much
>> helpful information available. The document comes with JSTL doesn't
>> help much. And the jwsdp document mentions JSTL, but still not much
>> on i18n. I guess that I shall use i18n tags other than
>> JSTL.
>
>Please note that JSTL leverages the I18N support provided by the JDK.
>on which there is a good tutorial at:
>
>  http://java.sun.com/docs/books/tutorial/i18n/
>
>Also, 3 books (that I am aware of) covering JSTL will be out shortly.
>
>
>Jan
>
>
>
>




--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>



--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to