1 16 17 package org.springframework.web.servlet.i18n; 18 19 import java.util.Locale ; 20 21 import javax.servlet.http.Cookie ; 22 import javax.servlet.http.HttpServletRequest ; 23 import javax.servlet.http.HttpServletResponse ; 24 25 import org.springframework.util.StringUtils; 26 import org.springframework.web.servlet.LocaleResolver; 27 import org.springframework.web.util.CookieGenerator; 28 import org.springframework.web.util.WebUtils; 29 30 47 public class CookieLocaleResolver extends CookieGenerator implements LocaleResolver { 48 49 57 public static final String LOCALE_REQUEST_ATTRIBUTE_NAME = CookieLocaleResolver.class.getName() + ".LOCALE"; 58 59 62 public static final String DEFAULT_COOKIE_NAME = CookieLocaleResolver.class.getName() + ".LOCALE"; 63 64 65 private Locale defaultLocale; 66 67 68 72 public CookieLocaleResolver() { 73 setCookieName(DEFAULT_COOKIE_NAME); 74 } 75 76 79 public void setDefaultLocale(Locale defaultLocale) { 80 this.defaultLocale = defaultLocale; 81 } 82 83 87 protected Locale getDefaultLocale() { 88 return defaultLocale; 89 } 90 91 92 public Locale resolveLocale(HttpServletRequest request) { 93 Locale locale = (Locale ) request.getAttribute(LOCALE_REQUEST_ATTRIBUTE_NAME); 95 if (locale != null) { 96 return locale; 97 } 98 99 Cookie cookie = WebUtils.getCookie(request, getCookieName()); 101 if (cookie != null) { 102 locale = StringUtils.parseLocaleString(cookie.getValue()); 103 if (logger.isDebugEnabled()) { 104 logger.debug("Parsed cookie value [" + cookie.getValue() + "] into locale '" + locale + "'"); 105 } 106 if (locale != null) { 107 request.setAttribute(LOCALE_REQUEST_ATTRIBUTE_NAME, locale); 108 return locale; 109 } 110 } 111 112 return determineDefaultLocale(request); 113 } 114 115 125 protected Locale determineDefaultLocale(HttpServletRequest request) { 126 Locale defaultLocale = getDefaultLocale(); 127 if (defaultLocale == null) { 128 defaultLocale = request.getLocale(); 129 } 130 return defaultLocale; 131 } 132 133 public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { 134 if (locale != null) { 135 request.setAttribute(LOCALE_REQUEST_ATTRIBUTE_NAME, locale); 137 addCookie(response, locale.toString()); 138 } 139 else { 140 request.setAttribute(LOCALE_REQUEST_ATTRIBUTE_NAME, request.getLocale()); 142 removeCookie(response); 143 } 144 } 145 146 } 147 | Popular Tags |