现在很多□□公司网站□□需要简体□□□版、繁体版和□□□英文版,英文版需□□□□要特别翻□□□译,而繁体版□□□一般采用JS翻译或者□□程序替换◇来翻译,因为繁体□□□丨和简体□□□□不□□□一样的大□□□□概有2300多个,字体大小□□□一样,完全可以□□□□通过程序□□□□替换。
JS繁体和程□□序替换翻◢译,两者对比,程序翻译□□□□体验度更◎好,JS翻译,会有个翻□□译的动作,影响用户□□体验。下面BG大游集团介绍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);
}
}
}