使用JSP的fmt标签实现国际化支持

  Smart-framework框架使用smart-plugin-i18n插件来完成国际化处理,原理相同,使用过滤器进行参数设置。

====================

使用JSP的fmt标签配置i18n国际化资源文件可以实现根据不同的地区和语言切换不同的显示.

具体做法如下:

1.在JSP页面中添加fmt标签的引用:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

2.设置需要用到的bundle :

<fmt:setBundle basename="i18n/i18n_${system_language}"/>

其中,system_language是从request中传入的

3.在需要显示变量的地方使用fmt标签来显示:

<div style="font-size: large;color: darkcyan">
<fmt:message key="common.bookname"/> </div>

这里为了演示,假设我们需要显示的东西是是引用的资源文件里的common.bookname这个属性

4.在src/main/resources 路径下新建i18n文件夹(或者在其他的路径下也可以,编译之后,文件夹要在classes目录下),新建资源文件 i18n_en_US.properties 和 i18n_zh_CN.properties,内容如下:

i18n_en_US.properties:

common.copyright=Copyright \u00A9 2013
common.language=language
common.bookname=HTTP by picture

i18n_zn_CN.properties:

common.copyright=\u7248\u6743\u6240\u6709 \u00A9 2013
common.language=\u7cfb\u7edf\u8bed\u8a00
common.bookname=\u56fe\u89e3HTTP

5.在服务器端添加一个filter,在请求中判断需要显示哪种语言,通过设置system_language的值,使页面的显示发生变化:

package com.jiaoyiping.websample;
/*
* Created with Intellij IDEA
* USER: 焦一平
* Mail: jiaoyiping@gmail.com
* Date: 2016/10/19
* Time: 14:27
* To change this template use File | Settings | Editor | File and Code Templates
*/ import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Locale; @WebFilter(urlPatterns = "/*")
public class I18NFilter implements Filter {
private static final String COOKIE_LANGUAGE = "cookie_language";
private static final String SYSTEM_LANGUAGE = "system_language"; @Override
public void init(FilterConfig filterConfig) throws ServletException { } @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String systemLanguage = getSystemLanguage(httpServletRequest);
request.setAttribute(SYSTEM_LANGUAGE, systemLanguage);
chain.doFilter(request, response);
} @Override
public void destroy() {
System.out.println("init....");
} private String getSystemLanguage(HttpServletRequest request) {
String systemLanguage = null;
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (COOKIE_LANGUAGE.equals(cookie.getName())) {
systemLanguage = cookie.getValue();
break;
}
}
} if (systemLanguage == null || "".equals(systemLanguage)) {
systemLanguage = request.getLocale().toString();
}
if (systemLanguage == null || "".equals(systemLanguage)) {
systemLanguage = Locale.getDefault().toString();
}
return systemLanguage;
}
}

我们通过request.setAttribute("system_language",${system_language}); 来改变JSP中的bundle的名字,实现切换显示语言的功能,

getSystemLanguage()方法,先是从cookie中找显示语言,若没有找到,则使用浏览器的语言,如果是空,则取操作系统的默认语言

5.为了能够动态显示出来效果,我们提供两个按钮,点击之后可以切换语言:

<div id="footer">
<div id="copyright">
<span><fmt:message key="common.copyright"/></span>
</div>
<div id="language">
<span><fmt:message key="common.language"/>:</span>
<a href="#" data-value="zh_CN">中文</a>
<span>|</span>
<a href="#" data-value="en_US">English</a>
</div>
</div>

引入jquery文件,在dom被加载完毕之后执行一些操作

<script type="text/javascript">
$(function () {
$('#language').find('a').click(function () {
var language = $(this).data('value');
document.cookie = "cookie_language=" + language +
";expires=365";
location.reload();
});
});
</script>

最终的结果实现了点击切换语言的功能(截取的git图,没有鼠标放到链接上的小手,所以显示的有点不太清楚):

Smart-framework
智能框架
 

最新文章

  1. Django中Form的Textarea字段
  2. PADS在注册表中的菜单栏数据
  3. SDRAM的主要参数
  4. winform里怎样在一个按钮上实现“单击”和“双击”事件?
  5. 使用read write 读写socket
  6. centos kvm
  7. BoneCP主要配置参数
  8. SQL语句の集锦
  9. UVA11324-- The Largest Clique(SCC+DP)
  10. 工作介绍xml书包文件
  11. 请教&lt;context:component-scan/&gt;和&lt;mvc:annotation-driven/&gt;的区别20
  12. Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之ssh框架整合
  13. AngularJS学习篇(二十三)
  14. 谷歌浏览器插件-jsonView插件安装与使用
  15. https和http有什么区别
  16. java 集合框架(十五)Deque
  17. 最小化安装CentOS7的网卡设置
  18. 简单的C语言编译器--词法分析器
  19. react-native自定义TextInput光标颜色
  20. 图解CSS3核心技术与案例实战(1)

热门文章

  1. MySQL倒序索引测试2
  2. java实现快速排序,归并排序
  3. 《linux就该这么学》课堂笔记06 编写shell脚本、if、for
  4. shell中read用法
  5. 折腾deepin修改终端语言
  6. 用户体验报告(Echo)
  7. A* 第k短路
  8. Hibernate学习:Exception in thread &quot;main&quot; java.lang.NullPointerException
  9. [RN] React Native :Error: Cannot find module &#39;asap/raw&#39;
  10. 传统IT容量估算思路