📄 languagefilter.java
字号:
/* * Copyright (C) butor.com. All rights reserved. * * This software is published under the terms of the GNU Library General * Public License (GNU LGPL), a copy of which has been included with this * distribution in the LICENSE.txt file. */package org.butor.web.filter;import java.io.IOException;import java.util.Locale;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.butor.config.Config;import org.butor.config.lowlevel.IProperties;import org.butor.log.Log;import org.butor.web.Constants;import org.butor.web.helper.StandardAttributes;/** * @author sawanai * * This filter check for language setting and changes. */public class LanguageFilter implements Filter { public final static String PROPERTY_HOST_LANGUAGE = "host_lang"; public final static String PARAM_LANGUAGE = "lang"; /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig config) throws ServletException { } /** * @see Filter#destroy() */ public void destroy() { } /** * @see Filter#doFilter() */ public void doFilter(ServletRequest req, ServletResponse resp, FilterChain fc) throws ServletException, IOException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; Log.logStr(this, Log.LOG_TYPE_INFO, "doFilter()", "..."); Cookie languageCookie = null; Locale locale = null; /* * FIRST, try to get lang from querystring. * This parameter may be used to change the language at any time * (even if the language cookie exists). */ String lang = request.getParameter(PARAM_LANGUAGE); if (lang != null) { Log.logStr(this, Log.LOG_TYPE_INFO, "doFilter()", "Got request parameter lang=[" +lang +"]"); languageCookie = new Cookie(Constants.LANGUAGE, lang); languageCookie.setMaxAge(365 * 24 * 60 * 60); languageCookie.setPath("/"); response.addCookie(languageCookie); locale = new Locale(lang); } else { Cookie[] cookies = request.getCookies(); if (cookies != null) { for (int i = 0; i < cookies.length; i++) { Cookie cookie = cookies[i]; if (cookie != null) { if (cookie.getName().equals(Constants.LANGUAGE)) { languageCookie = cookie; break; } } } } if (languageCookie != null) { Log.logStr(Log.LOG_LEVEL_MEDIUM, this, Log.LOG_TYPE_INFO, "doFilter()", "Got language cookie=[" +languageCookie.getValue() +"]"); locale = new Locale(languageCookie.getValue(), ""); } } /* * SECOND, if we have no locale yet, try to determine it from domain name */ if (locale == null) { String host = request.getServerName(); IProperties properties = Config.getPropertyList(PROPERTY_HOST_LANGUAGE); if (properties != null) { lang = (String)properties.getProperty(host, Locale.ENGLISH.getLanguage()); Log.logStr(Log.LOG_LEVEL_LOW, this, Log.LOG_TYPE_INFO, "doFilter()", "Got lang from domain name, lang=[" +lang +"]"); } else { lang = Locale.ENGLISH.getLanguage(); Log.logStr(Log.LOG_LEVEL_LOW, this, Log.LOG_TYPE_INFO, "doFilter()", "No lang parameter found! And, cant determine language by domain name!, Set default lang=[" +lang +"]"); } if (lang != null) { languageCookie = new Cookie(Constants.LANGUAGE, lang); languageCookie.setMaxAge(365 * 24 * 60 * 60); languageCookie.setPath("/"); response.addCookie(languageCookie); locale = new Locale(lang); } } if (locale != null) { request.setAttribute(StandardAttributes.LOCALE_KEY, locale); } Log.logStr(this, Log.LOG_TYPE_INFO, "doFilter()", "done with locale [" +locale +"]"); fc.doFilter(request, response); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -