1
22
23 package com.liferay.portal.servlet.filters.language;
24
25 import com.liferay.portal.kernel.language.LanguageUtil;
26 import com.liferay.portal.kernel.language.UnicodeLanguageUtil;
27 import com.liferay.portal.kernel.util.LocaleUtil;
28 import com.liferay.portal.kernel.util.StringPool;
29 import com.liferay.portal.servlet.filters.BasePortalFilter;
30 import com.liferay.util.servlet.filters.CacheResponse;
31 import com.liferay.util.servlet.filters.CacheResponseData;
32 import com.liferay.util.servlet.filters.CacheResponseUtil;
33
34 import java.util.Locale;
35 import java.util.regex.Matcher;
36 import java.util.regex.Pattern;
37
38 import javax.servlet.FilterChain;
39 import javax.servlet.http.HttpServletRequest;
40 import javax.servlet.http.HttpServletResponse;
41
42
47 public class LanguageFilter extends BasePortalFilter {
48
49 protected void processFilter(
50 HttpServletRequest request, HttpServletResponse response,
51 FilterChain filterChain)
52 throws Exception {
53
54 CacheResponse cacheResponse = new CacheResponse(
55 response, StringPool.UTF8);
56
57 processFilter(
58 LanguageFilter.class, request, cacheResponse, filterChain);
59
60 byte[] bytes = translateResponse(
61 request, cacheResponse, cacheResponse.getData());
62
63 CacheResponseData cacheResponseData = new CacheResponseData(
64 bytes, cacheResponse.getContentType(), cacheResponse.getHeaders());
65
66 CacheResponseUtil.write(response, cacheResponseData);
67 }
68
69 protected byte[] translateResponse(
70 HttpServletRequest request, HttpServletResponse response,
71 byte[] bytes) {
72
73 String languageId = LanguageUtil.getLanguageId(request);
74 Locale locale = LocaleUtil.fromLanguageId(languageId);
75
76 String content = new String(bytes);
77
78 Matcher matcher = _pattern.matcher(content);
79
80 while (matcher.find()) {
81 String match = matcher.group(0);
82 String key = matcher.group(1);
83
84 StringBuffer sb = new StringBuffer();
85
86 sb.append(StringPool.APOSTROPHE);
87 sb.append(UnicodeLanguageUtil.get(locale, key));
88 sb.append(StringPool.APOSTROPHE);
89
90 content = content.replace(match, sb.toString());
91 }
92
93 return content.getBytes();
94 }
95
96 private static Pattern _pattern = Pattern.compile(
97 "Liferay\\.Language\\.get\\([\"']([^)]+)[\"']\\)");
98
99 }