DisplayTagLocaleResolver.java

package sk.iway.iwcm.system;

import java.util.Locale;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;

import org.apache.struts.util.ResponseUtils;
import org.displaytag.localization.I18nResourceProvider;
import org.displaytag.localization.LocaleResolver;

import sk.iway.iwcm.Constants;
import sk.iway.iwcm.Logger;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.i18n.Prop;

/**
 *  DislpayTagLocaleResolver.java - resolver pre ResourceBundle
 *
 *@Title        webjet4
 *@Company      Interway s.r.o. (www.interway.sk)
 *@Copyright    Interway s.r.o. (c) 2001-2005
 *@author       $Author: jeeff $
 *@version      $Revision: 1.9 $
 *@created      Date: 10.4.2005 18:11:45
 *@modified     $Date: 2009/05/04 09:26:17 $
 */
public class DisplayTagLocaleResolver implements I18nResourceProvider, LocaleResolver
{
	/**
    * prefix/suffix for missing entries.
    */
   public static final String UNDEFINED_KEY = "???"; //$NON-NLS-1$

   /**
    * @see LocaleResolver#resolveLocale(HttpServletRequest)
    */
   @Override
   public Locale resolveLocale(HttpServletRequest request)
   {
       Locale userLocale = request.getLocale();
       
       String lng = getLng(null, request);
       if (Tools.isNotEmpty(lng))
       {
      	 if ("cz".equals(lng)) lng = "cs";
      	 userLocale = new Locale(lng);
       }
       
       Logger.debug(this,"resolveLocale, lng="+lng+" locale="+userLocale);

       return userLocale;
   }

   /**
    * @see I18nResourceProvider#getResource(String, String, Tag, PageContext)
    */
   @Override
   public String getResource(String resourceKey, String defaultValue, Tag tag, PageContext pageContext)
   {   		
      // if titleKey isn't defined either, use property
      String key = (resourceKey != null) ? resourceKey : defaultValue;
      
      if (key.indexOf("basic.msg.empty_list")!=-1)
      {
      	System.out.println("------------------ MAM TO -----------------");
      }      
       
      HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
		
      String lng = getLng(pageContext, request);
      
		boolean needRefresh = false;
		if (request.getSession().getAttribute("userlngr") != null)
		{
			//ak to mame v session, tak chceme pri kazdom zobrazeni stranky
			// spravit refresh
			needRefresh = true;
		}
		if (request.getParameter("userlngr") != null)
		{
			needRefresh = true;
		}
		if (pageContext.getAttribute("userlngr") != null)
		{
			//pri zobrazeni tejto stranky sme uz jazyk refreshli, nema zmysel to
			// robit znova
			needRefresh = false;
		}
		//Logger.debug(this,"userlngr="+request.getParameter("userlngr"));
		Prop prop = null;
		if (needRefresh)
		{
			pageContext.setAttribute("userlngr", "refreshed");
			prop = Prop.getInstance(Constants.getServletContext(), lng, true);
			if ("session".equals(request.getParameter("userlngr")))
			{
				//uloz si to do session, teraz sa bude refreshovat pri kazdom
				// zobrazeni stranky
				request.getSession().setAttribute("userlngr", "session");
			}
		}
		else
		{
			prop = Prop.getInstance(Constants.getServletContext(), lng, false);
		}
		
		Logger.debug(this,"resolver ("+lng+"): "+key);
		
		String text = prop.getText(key);
		//text = prop.getText(key);
		if (text != null)
		{
			return(text);
		}
       
       return key;
   }

   private String getLng(PageContext pageContext, HttpServletRequest request)
   {
   	String lng = "";
		if (pageContext != null && pageContext.getAttribute("lng") != null)
		{
			lng = (String) pageContext.getAttribute("lng");
		}
		else if (request.getAttribute("PageLng")!=null)
		{
			lng = (String)request.getAttribute("PageLng");
		}
		else
		{
			lng = ResponseUtils.filter(request.getParameter("language"));
			if (lng != null) request.getSession().setAttribute(Prop.SESSION_I18N_PROP_LNG, lng);
			if (lng == null)
			{
				lng = (String) request.getSession().getAttribute(Prop.SESSION_I18N_PROP_LNG);
			}
			if (lng == null)
			{
				lng = sk.iway.iwcm.Constants.getString("defaultLanguage");
			}			
		}
		
		return lng;
   }
	
}