Pouzivam nasledujici JSP stranku pro soucasne nastaveni locale pro Struts i JSTL (pouzivam oboje, protoze texty jdou pres JSTL a
chybove hlasky pres Struts):

<%@ page session="true" contentType="text/html;charset=utf-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"; %>
<%@ taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt"; %>

<%-- nastaveni locale pro JSTL fmt tagy pro tohoto uzivatele --%>
<f:setLocale value="${param.locale}" scope="session" />
<%-- zkopirovani do Struts locale, tj. h:messages tagy --%>
<% session.setAttribute(org.apache.struts.Globals.LOCALE_KEY,session.getAttribute(javax.servlet.jsp.jstl.core.Config.FMT_LOCALE+".session")); %>
<%-- a jeste jednou --%>
<c:set var="locale" value="${param.locale}" scope="session" />

<c:choose>
 <c:when test="${!empty param.kam}">
  <c:redirect url="${param.kam}" />
 </c:when>
 <c:otherwise>
  <c:redirect url="/index.do" />
 </c:otherwise>
</c:choose>

ta stranka se vola jako locale.jsp?locale=cs&kam=/neco.do pro nastaveni cestiny a redirect na /<context>/neco.do

Tag <fmt:setLocale> podle mne proste ulozi objekt java.util.Locale
do session pod klicem "javax.servlet.jsp.jstl.fmt.locale.session",
takze jste na spravne ceste.

Jeste asi taky vola response.setLocale(), nekuchal jsem ho, takze
to nevim jiste. Mozna je problem v tom, ze to mate jako filter,
a volate to pri kazdem requestu, takze JSTL tagy nedostanou sanci
si ze session vzit locale a zachovat se podle toho.

Makub


Petr Červinka wrote:
Dobry den,

muzete mi prosim poradit, jak mohu programove nastavit Locale pro <fmt:message>?

V dobe, kdy jsem pouzival Struts jsem pouzival nasledujici filter ktery fungoval k plne spokojenosti: public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
           throws IOException, ServletException {
 String l = request.getParameter("setLng");
       if (l != null) {
           Locale locale;
           String l2 = request.getParameter("setLng2");
           if (l2 != null)
               locale = new Locale(l, l2);
           else
               locale = new Locale(l);
((HttpServletRequest) request).getSession().setAttribute(org.apache.struts.Globals.LOCALE_KEY, locale);
       }
       chain.doFilter(request, response);
   }

zkousel jsem neco ekvivalentniho pro JSTL:
HttpSession session = ((HttpServletRequest) request).getSession();
           Config.set(session, Config.FMT_LOCALE, locale);
           Config.set(request, Config.FMT_LOCALE, locale);
session.setAttribute("javax.servlet.jsp.jstl.fmt.locale.session", locale); request.setAttribute("javax.servlet.jsp.jstl.fmt.locale.request", locale);

ale nic z toho nefunguje a locales se berou vzdy podle nastaveni browseru.

Pouzivam Spring MVC + Sitemesh ale myslim, ze by to na to nemelo mit vliv.

Diky za kazdou radu

Petr


--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Supercomputing Center Brno             Martin Kuba
Institute of Computer Science    email: [EMAIL PROTECTED]
Masaryk University             http://www.ics.muni.cz/~makub/
Botanicka 68a, 60200 Brno, CZ     mobil: +420-603-533775
--------------------------------------------------------------

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Odpovedet emailem