1. 程式人生 > java教程 > Windows新語言標籤國際化解決

Windows新語言標籤國際化解決

最近改一個05年的老專案。用Win8和Win10的IE瀏覽器總請求到英文資源,後來尋找原因發現是Win8以後Windows將中文(中國)從zh-CN換成了zh-Hans-CN,JSTL和Struts自然無法解析zh-Hans-CN,從而請求英文資源。


解決zh-Hans-CN需要解決介面的JSTL獲取錯誤和Struts獲取資源錯誤。


JSTL獲取錯誤我的解決思路是設立一個全域性過濾器,當發現是zh-Hans-CN的請求時,強制將zh-CN寫入session(P.S 剛開始想著重新封裝收到的request,後來找了很多方法發現都不適合JDK1.5,專案有點老)。同時將zh-CN寫入Globals.LOCAL_KEY。Struts的 TagUtils請求資源時,直接讀取Globals.LOCAL_KEY。

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.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.jstl.core.Config;
import org.apache.struts.Globals;
public class W10IE11FixFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if ("zh_HANS_CN".equals(request.getLocale().toString())) {
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession();
Config.set(session, Config.FMT_LOCALE, Locale.CHINA);
session.setAttribute(Globals.LOCALE_KEY, Locale.CHINA);
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}