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.language.UnicodeLanguageUtil;
019 import com.liferay.portal.kernel.log.Log;
020 import com.liferay.portal.kernel.log.LogFactoryUtil;
021 import com.liferay.portal.kernel.servlet.PortletServlet;
022 import com.liferay.portal.kernel.servlet.ServletResponseUtil;
023 import com.liferay.portal.kernel.servlet.StringServletResponse;
024 import com.liferay.portal.kernel.util.HttpUtil;
025 import com.liferay.portal.kernel.util.LocaleUtil;
026 import com.liferay.portal.kernel.util.StringBundler;
027 import com.liferay.portal.kernel.util.StringPool;
028 import com.liferay.portal.model.Portlet;
029 import com.liferay.portal.model.PortletApp;
030 import com.liferay.portal.servlet.filters.BasePortalFilter;
031 import com.liferay.portlet.PortletConfigFactoryUtil;
032
033 import java.util.List;
034 import java.util.Locale;
035 import java.util.regex.Matcher;
036 import java.util.regex.Pattern;
037
038 import javax.portlet.PortletConfig;
039
040 import javax.servlet.FilterChain;
041 import javax.servlet.FilterConfig;
042 import javax.servlet.ServletContext;
043 import javax.servlet.http.HttpServletRequest;
044 import javax.servlet.http.HttpServletResponse;
045
046
050 public class LanguageFilter extends BasePortalFilter {
051
052 @Override
053 public void init(FilterConfig filterConfig) {
054 super.init(filterConfig);
055
056 ServletContext servletContext = filterConfig.getServletContext();
057
058 PortletApp portletApp = (PortletApp)servletContext.getAttribute(
059 PortletServlet.PORTLET_APP);
060
061 if ((portletApp == null) || !portletApp.isWARFile()) {
062 return;
063 }
064
065 List<Portlet> portlets = portletApp.getPortlets();
066
067 if (portlets.size() <= 0) {
068 return;
069 }
070
071 _portletConfig = PortletConfigFactoryUtil.create(
072 portlets.get(0), filterConfig.getServletContext());
073 }
074
075 @Override
076 protected void processFilter(
077 HttpServletRequest request, HttpServletResponse response,
078 FilterChain filterChain)
079 throws Exception {
080
081 StringServletResponse stringResponse = new StringServletResponse(
082 response);
083
084 processFilter(
085 LanguageFilter.class, request, stringResponse, filterChain);
086
087 if (_log.isDebugEnabled()) {
088 String completeURL = HttpUtil.getCompleteURL(request);
089
090 _log.debug("Translating response " + completeURL);
091 }
092
093 String content = translateResponse(request, stringResponse);
094
095 ServletResponseUtil.write(response, content);
096 }
097
098 protected String translateResponse(
099 HttpServletRequest request, StringServletResponse stringResponse) {
100
101 String languageId = LanguageUtil.getLanguageId(request);
102 Locale locale = LocaleUtil.fromLanguageId(languageId);
103
104 String content = stringResponse.getString();
105
106 StringBundler sb = new StringBundler();
107
108 Matcher matcher = _pattern.matcher(content);
109
110 int x = 0;
111
112 while (matcher.find()) {
113 int y = matcher.start(0);
114
115 String key = matcher.group(1);
116
117 sb.append(content.substring(x, y));
118 sb.append(StringPool.APOSTROPHE);
119
120 String value = null;
121
122 if (_portletConfig != null) {
123 value = UnicodeLanguageUtil.get(_portletConfig, locale, key);
124 }
125 else {
126 value = UnicodeLanguageUtil.get(locale, key);
127 }
128
129 sb.append(value);
130 sb.append(StringPool.APOSTROPHE);
131
132 x = matcher.end(0);
133 }
134
135 sb.append(content.substring(x));
136
137 return sb.toString();
138 }
139
140 private static Log _log = LogFactoryUtil.getLog(LanguageFilter.class);
141
142 private static Pattern _pattern = Pattern.compile(
143 "Liferay\\.Language\\.get\\([\"']([^)]+)[\"']\\)");
144
145 private PortletConfig _portletConfig;
146
147 }