/*_########################################################################## _## _## Copyright (C) 2013 Kaito Yamada _## _########################################################################## */ package com.github.kaitoy.sneo.giane.action; import java.util.HashMap; import java.util.Locale; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.InterceptorRef; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.SessionAware; import org.apache.struts2.interceptor.validation.SkipValidation; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.conversion.annotations.TypeConversion; import com.opensymphony.xwork2.interceptor.I18nInterceptor; @ParentPackage("giane-default") @InterceptorRef("gianeDefaultStack") public class LocaleSelectorAction extends ActionSupport implements ServletRequestAware, SessionAware { /** * */ private static final long serialVersionUID = -6114265184234489677L; private static final Map<Locale, String> locales = new HashMap<Locale, String>(); private static final Locale DEFAULT_LOCALE = Locale.ENGLISH; private Locale currentLocale; private HttpServletRequest request; private Map<String, Object> session; static { locales.put(Locale.ENGLISH, "English"); locales.put(Locale.JAPANESE, "日本語"); } public Locale getCurrentLocale() { return currentLocale; } @TypeConversion(converter = "com.github.kaitoy.sneo.giane.typeconverter.LocaleConverter") public void setCurrentLocale(Locale currentLocale) { this.currentLocale = currentLocale; } public Map<Locale, String> getLocales() { return locales; } public void setServletRequest(HttpServletRequest request) { this.request = request; } public void setSession(Map<String, Object> session) { this.session = session; } @Override @Action( results = { @Result(name = "success", location = "locale-selector.jsp") } ) @SkipValidation public String execute() throws Exception { synchronized (session) { Locale sessionLocale = (Locale)session.get(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE); if (sessionLocale == null) { Locale reqLocale = new Locale(request.getLocale().getLanguage()); if (locales.containsKey(reqLocale)) { currentLocale = reqLocale; } else { currentLocale = DEFAULT_LOCALE; } session.put(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE, currentLocale); } else { currentLocale = sessionLocale; } } return "success"; } @Action( value = "change-locale", results = { @Result(name = "success", location = "empty.jsp") } ) @SkipValidation public String change() throws Exception { if (!locales.containsKey(currentLocale)) { currentLocale = DEFAULT_LOCALE; } session.put(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE, currentLocale); return "success"; } }