现在很多公司网站需要简体版、繁体版和英文版,英文版需要特别翻译,而繁体版一般采用JS翻译或者程序替换来翻译,因为繁体和简体不一样的大概有2300多个,字体大小一样,完全可以通过程序替换。
JS繁体和程序替换翻译,两者对比,程序翻译体验度更好,JS翻译,会有个翻译的动作,影响用户体验。下面方维网络介绍JAVA开发的程序如何实现一段代码来替换简繁体。
主要采用Filter来实现,在页面输出结果前对输出内容进行拦截,然后替换文字,替换相关URL,然后再输出。代码如下:
@WebFilter(urlPatterns = "/zh/*",filterName = "ResponseFilter")
public class ResponseFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String url = req.getRequestURI();
if(url.startsWith("/zh/")) {//只拦截繁体版
UrlResponseWrapper wrapperResponse = new UrlResponseWrapper((HttpServletResponse) response);//转换成代理类
// 这里只拦截返回,直接让请求过去,如果在请求前有处理,可以在这里处理
filterChain.doFilter(request, wrapperResponse);
String content_type = wrapperResponse.getContentType();
byte[] content = wrapperResponse.getResponseData();
if(content_type != null && content_type.equals("text/html;charset=UTF-8")) {
String str = new String(content);
//替换繁体
String str_zh = ChineseUtils.toZh(str);
str_zh = str_zh.replace("href=\"/news/", "href=\"/zh/news/");
str_zh = str_zh.replace("href=\"/about/", "href=\"/zh/about/");
str_zh = str_zh.replace("href=\"/investor/", "href=\"/zh/investor/");
str_zh = str_zh.replace("href=\"/responsibility/", "href=\"/zh/responsibility/");
str_zh = str_zh.replace("href=\"/product/", "href=\"/zh/product/");
content = str_zh.getBytes();
ServletOutputStream out = response.getOutputStream();
out.write(content);
out.flush();
} else {
filterChain.doFilter(request, response);
}
} else {
filterChain.doFilter(request, response);
}
}
}