创建过滤
packagecom.i18n.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
@WebFilter(filterName = "Filter", urlPatterns = "/*",initParams ={@WebInitParam(name = "default",value = "en")})
public class MyFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponseresp, FilterChain chain) throwsServletException,IOException {
HttpServletRequest request =(HttpServletRequest) req;
HttpServletResponse response =(HttpServletResponse) resp;
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String .getParameter("language");
if (lang != null) {
try{
String sFile =request.getServletContext().getRealPath("/") + "/WEB-INF/messages_" + lang + ".properties";
Properties properties = new Properties();
properties.load(new FileInputStream(sFile));
request.getSession().setAttribute("i18n", properties);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {
try {
String .getInitParameter("default");
if (lang == null) lang = "en";
String sFile =config.getServletContext().getRealPath("/") + "/WEB-INF/messages_" + lang + ".properties";
Properties properties = new Properties();
properties.load(new FileInputStream(sFile));
config.getServletContext().setAttribute("i18n", properties);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
创建properties文件
messages_en.properties
china=chinese
tag=tag
el=el
messages_zh.properties
china=中国
tag=标签
el=EL表达式
创建标签
package com.i18n.tag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
import java.util.Properties;
public class I18nTag extends SimpleTagSupport {
private String sKey;
public String getsKey() {
return sKey;
}
public void setsKey(String sKey) {
this. sKey = sKey;
}
@Override
public void doTag() throws JspException, IOException {
PageContext pageContext = (PageContext) getJspContext();
Properties prop = (Properties) pageContext.getSession().getAttribute( "i18n");
if (prop == null) prop = (Properties) pageContext.getServletContext().getAttribute( "i18n");
JspWriter out = pageContext.getOut();
if (prop == null)
out.print( sKey);
else
out.print(prop.getProperty( sKey));
}
}
配置TLD
<? xml version= "1.0" encoding= "ISO-8859-1"?>
< taglib xmlns= "http://java.sun.com/xml/ns/javaee"
xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi :schemaLocation= "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version= "2.1">
< tlib-version>1.0</ tlib-version>
< short-name>zsz</ short-name>
< uri>http://www.zsz.org</ uri>
< tag>
< name>i18n</ name>
< tag-class>com.i18n.tag.I18nTag</ tag-class>
< body-content>empty</ body-content>
< attribute>
< name>sKey</ name>
< required>true</ required>
</ attribute>
</ tag>
</ taglib>
使用i18n
<%@ page contentType=" text/html;charset=UTF-8" language=" java" %>
<%@ taglib prefix=" zsz" uri=" http://www.zsz.org" %>
< html>
< head>
< meta charset= "UTF-8">
< title>$Title$</ title>
</ head>
< body>
< a href= "?language=zh">中</ a>< a href= "?language=en">en</ a>< hr>
< zsz :i18n sKey= "tag"></ zsz :i18n> < zsz :i18n sKey= "china"/>
< hr>
${i18n.el } : ${i18n.china }
</ body>
</ html>