001
014
015 package com.liferay.portal.servlet.filters.language;
016
017 import com.liferay.portal.kernel.language.LanguageUtil;
018 import com.liferay.portal.kernel.log.Log;
019 import com.liferay.portal.kernel.log.LogFactoryUtil;
020 import com.liferay.portal.kernel.servlet.BufferCacheServletResponse;
021 import com.liferay.portal.kernel.servlet.PortletServlet;
022 import com.liferay.portal.kernel.servlet.ServletResponseUtil;
023 import com.liferay.portal.kernel.util.AggregateResourceBundle;
024 import com.liferay.portal.kernel.util.HttpUtil;
025 import com.liferay.portal.kernel.util.LocaleUtil;
026 import com.liferay.portal.language.LanguageResources;
027 import com.liferay.portal.model.Portlet;
028 import com.liferay.portal.model.PortletApp;
029 import com.liferay.portal.servlet.filters.BasePortalFilter;
030 import com.liferay.portlet.PortletConfigFactoryUtil;
031
032 import java.util.List;
033 import java.util.Locale;
034 import java.util.ResourceBundle;
035
036 import javax.portlet.PortletConfig;
037
038 import javax.servlet.FilterChain;
039 import javax.servlet.FilterConfig;
040 import javax.servlet.ServletContext;
041 import javax.servlet.http.HttpServletRequest;
042 import javax.servlet.http.HttpServletResponse;
043
044
048 public class LanguageFilter extends BasePortalFilter {
049
050 @Override
051 public void init(FilterConfig filterConfig) {
052 super.init(filterConfig);
053
054 ServletContext servletContext = filterConfig.getServletContext();
055
056 PortletApp portletApp = (PortletApp)servletContext.getAttribute(
057 PortletServlet.PORTLET_APP);
058
059 if ((portletApp == null) || !portletApp.isWARFile()) {
060 return;
061 }
062
063 List<Portlet> portlets = portletApp.getPortlets();
064
065 if (portlets.size() <= 0) {
066 return;
067 }
068
069 _portletConfig = PortletConfigFactoryUtil.create(
070 portlets.get(0), filterConfig.getServletContext());
071 }
072
073 @Override
074 protected void processFilter(
075 HttpServletRequest request, HttpServletResponse response,
076 FilterChain filterChain)
077 throws Exception {
078
079 BufferCacheServletResponse bufferCacheServletResponse =
080 new BufferCacheServletResponse(response);
081
082 processFilter(
083 LanguageFilter.class.getName(), request, bufferCacheServletResponse,
084 filterChain);
085
086 if (_log.isDebugEnabled()) {
087 String completeURL = HttpUtil.getCompleteURL(request);
088
089 _log.debug("Translating response " + completeURL);
090 }
091
092 String content = bufferCacheServletResponse.getString();
093
094 content = translateResponse(request, content);
095
096 ServletResponseUtil.write(response, content);
097 }
098
099 protected String translateResponse(
100 HttpServletRequest request, String content) {
101
102 String languageId = LanguageUtil.getLanguageId(request);
103 Locale locale = LocaleUtil.fromLanguageId(languageId);
104
105 ResourceBundle resourceBundle = LanguageResources.getResourceBundle(
106 locale);
107
108 if (_portletConfig != null) {
109 resourceBundle = new AggregateResourceBundle(
110 _portletConfig.getResourceBundle(locale), resourceBundle);
111 }
112
113 return LanguageUtil.process(resourceBundle, locale, content);
114 }
115
116 private static final Log _log = LogFactoryUtil.getLog(LanguageFilter.class);
117
118 private PortletConfig _portletConfig;
119
120 }