Cambiar de idioma según demanda con Struts

2993 vistas

Para cambiar de idioma según demanda, tendremos que crear una action que actualice la locale en el objeto request.

La locale forma parte de los atributos de una consulta http y, por lo tanto, se conserva durante la navegación.

Además, la JVM carga todos los bundles al arrancar. Por lo tanto, todos los idiomas definidos están accesibles.

Imaginemos tres enlaces:



xml
  1. <html:link page='/switch.do?lang=fr&cty=FR'>FR</html:link>
  2. <html:link page='/switch.do?lang=en&cty=EN'>EN</html:link>
  3. <html:link page='/switch.do?lang=es&cty=ES'>ES</html:link>



Estos enlaces apuntan a una Action "SwitchAction" definida en el mapping por el alias "switch".



java
  1. public class SwithLangAction extends Action
  2. {
  3.   public ActionForward execute(ActionMapping mapping,
  4.                                                 ActionForm form,
  5.                                                 HttpServletRequest request,
  6.                                                 HttpServletResponse response)
  7.       throws IOException, ServletException
  8.   {
  9.       // recuperación de los parámetros pasados y de la url del referer
  10.       String country = request.getParameter("cty");
  11.       String language = request.getParameter("lang");
  12.       String referer = request.getHeader("referer");
  13.       HttpSession session = request.getSession();
  14.       ActionForward forward = null;
  15.  
  16.       // definición de la locale
  17.       setLocale( request, new Locale( language, country ) );
  18.  
  19.       // redirección hacia una página definida por defecto
  20.       if( referer==null )
  21.       {
  22.         forward = (mapping.findForward("success"));
  23.       }
  24.       // redirección hacia la url del referer
  25.       else
  26.       {
  27.         forward = new RedirectingActionForward();
  28.         forward.setPath( referer );
  29.       }
  30.  
  31.       return forward;
  32.   }
  33. }



Atención: ciertos servidores no trasmiten el referer. En este caso tendremos que recuperarlo de forma explÃcita (en un ActionForm por ejemplo).