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