Save This Page
Home » displaytag-1.1.1-src » org » displaytag » localization » [javadoc | source]
    1   /**
    2    * Licensed under the Artistic License; you may not use this file
    3    * except in compliance with the License.
    4    * You may obtain a copy of the License at
    5    *
    6    *      http://displaytag.sourceforge.net/license.html
    7    *
    8    * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
    9    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   10    * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   11    */
   12   package org.displaytag.localization;
   13   
   14   import java.util.Locale;
   15   
   16   import javax.servlet.http.HttpServletRequest;
   17   import javax.servlet.http.HttpSession;
   18   import javax.servlet.jsp.PageContext;
   19   import javax.servlet.jsp.tagext.Tag;
   20   
   21   import org.apache.struts.Globals;
   22   import org.apache.struts.config.ModuleConfig;
   23   import org.apache.struts.util.MessageResources;
   24   
   25   
   26   /**
   27    * Struts implementation of a resource provider and locale resolver. Uses Struts
   28    * <code>RequestUtils.getUserLocale()</code> and <code>TagUtils.message()</code> for the lookup.
   29    * @author Fabrizio Giustina
   30    * @version $Revision: 1081 $ ($Author: fgiust $)
   31    */
   32   public class I18nStrutsAdapter implements I18nResourceProvider, LocaleResolver
   33   {
   34   
   35       /**
   36        * prefix/suffix for missing entries.
   37        */
   38       public static final String UNDEFINED_KEY = "???"; //$NON-NLS-1$
   39   
   40       /**
   41        * @see LocaleResolver#resolveLocale(HttpServletRequest)
   42        */
   43       public Locale resolveLocale(HttpServletRequest request)
   44       {
   45           Locale userLocale = null;
   46           HttpSession session = request.getSession(false);
   47   
   48           // Only check session if sessions are enabled
   49           if (session != null)
   50           {
   51               userLocale = (Locale) session.getAttribute(Globals.LOCALE_KEY);
   52           }
   53   
   54           if (userLocale == null)
   55           {
   56               // Returns Locale based on Accept-Language header or the server default
   57               userLocale = request.getLocale();
   58           }
   59   
   60           return userLocale;
   61       }
   62   
   63       /**
   64        * @see I18nResourceProvider#getResource(String, String, Tag, PageContext)
   65        */
   66       public String getResource(String resourceKey, String defaultValue, Tag tag, PageContext pageContext)
   67       {
   68   
   69           // if titleKey isn't defined either, use property
   70           String key = (resourceKey != null) ? resourceKey : defaultValue;
   71   
   72           // retrieve MessageResources. Don't use TagUtils to mantain Struts 1.1 compatibility
   73           MessageResources resources = (MessageResources) pageContext.getAttribute(
   74               Globals.MESSAGES_KEY,
   75               PageContext.REQUEST_SCOPE);
   76   
   77           if (resources == null)
   78           {
   79               ModuleConfig moduleConfig = (ModuleConfig) pageContext.getRequest().getAttribute(Globals.MODULE_KEY);
   80   
   81               if (moduleConfig == null)
   82               {
   83                   moduleConfig = (ModuleConfig) pageContext.getServletContext().getAttribute(Globals.MODULE_KEY);
   84                   pageContext.getRequest().setAttribute(Globals.MODULE_KEY, moduleConfig);
   85               }
   86   
   87               resources = (MessageResources) pageContext.getAttribute(
   88                   Globals.MESSAGES_KEY + moduleConfig.getPrefix(),
   89                   PageContext.APPLICATION_SCOPE);
   90           }
   91   
   92           if (resources == null)
   93           {
   94               resources = (MessageResources) pageContext
   95                   .getAttribute(Globals.MESSAGES_KEY, PageContext.APPLICATION_SCOPE);
   96           }
   97   
   98           String title = null;
   99           if (resources != null)
  100           {
  101               Locale userLocale = resolveLocale((HttpServletRequest) pageContext.getRequest());
  102               title = resources.getMessage(userLocale, key);
  103           }
  104   
  105           // if user explicitely added a titleKey we guess this is an error
  106           if (title == null && resourceKey != null)
  107           {
  108               title = UNDEFINED_KEY + resourceKey + UNDEFINED_KEY;
  109           }
  110   
  111           return title;
  112       }
  113   
  114   }

Save This Page
Home » displaytag-1.1.1-src » org » displaytag » localization » [javadoc | source]