使用JSP的fmt标签实现国际化支持 - smart-framework ; smart-plugin-i18n
使用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图,没有鼠标放到链接上的小手,所以显示的有点不太清楚):

使用JSP的fmt标签实现国际化支持 - smart-framework ; smart-plugin-i18n的更多相关文章
- 使用JSP的fmt标签实现国际化支持
使用JSP的fmt标签配置i18n国际化资源文件可以实现根据不同的地区和语言切换不同的显示. 具体做法如下: 1.在JSP页面中添加fmt标签的引用: <%@ taglib prefix=&qu ...
- [原创]java WEB学习笔记52:国际化 fmt 标签,国际化的总结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- jsp:jstl标签库国际化 fmt
首先资源文件目录是:src/man/sources (这是它默认的资源文件) i18n_en_US.properties文件内容 copyright=Copyright \u00A9 2013 lan ...
- jsp fmt标签详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt326 JSTL标签提供了对国际化(I18N)的支持,它可以根据发出请求的客户 ...
- JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】
什么是JSTL JSTL全称为 JSP Standard Tag Library 即JSP标准标签库. JSTL作为最基本的标签库,提供了一系列的JSP标签,实现了基本的功能:集合的遍历.数据的输出. ...
- 国际化之fmt标签
1. 什么是国际化和本地化: I. 本地化:一个软件在某个国家或地区使用时,采用该国家或地区的语言,数字,货币,日期等习惯.II. 国际化:软件开发时,让它能支持多个国家和地区的本地化应用.使得应用软 ...
- jsp中引用的jstl 和fmt标签-详解
JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.otherwise 3.循环标签:f ...
- springmvc:jsp fmt标签格式化Date时间,格式化后可以用于页面展示
java后台的对象时间参数是date类型,在前端想格式化,又是放在input输入框中的 先引入jstl标签库 <%@taglib uri="http://java.sun.com/js ...
- jstl-日期格式化-jsp页面需引入fmt标签
jsp页面需引入fmt标签: <taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"> ...
随机推荐
- RabbitMQ的使用Demo
rabbitmq消息队列,官网有六种,实战常用的也就如下五种. 下面开始demo讲解 大致三步:1.配置消息队列,2.生产者提供消息给队列,3.消费者监听消费队列消息 源码下载:https://pan ...
- python中的exec()函数和eval()函数
exec()函数 exec函数用于执行存储在字符串中的python语句 >>> exec("x=1") >>> x 但有时候,直接这样执行可能会 ...
- Windows & Ubuntu 双系统完美卸载Ubuntu(不残留,无污染)
双系统卸载Ubuntu时,如若直接从Windows磁盘管理里格式化Ubuntu分区,由于Ubuntu的引导盘的原因,会导致电脑启动时出现问题,所以不建议这样的操作. 卸载Ubuntu前需要区分BIOS ...
- SQL注入之Sqlmap使用
我们都知道,对于网络渗透最重要的一步是要拿到后台数据库管理员的密码与用户名,那么怎么得到这个用户名和密码呢?就要用到今天所说的Sqlmap,它不仅适用于内网环境,在外网环境也是非常受欢迎的,并且在Ka ...
- ELK快速入门(四)filebeat替代logstash收集日志
ELK快速入门四-filebeat替代logstash收集日志 filebeat简介 Filebeat是轻量级单用途的日志收集工具,用于在没有安装java的服务器上专门收集日志,可以将日志转发到log ...
- jenkins与gitlab集成,分支提交代码后自动构建任务(六)
一.在gitlab中创建token 复制token,此token只显示一次:6SB8y4jt31NnYG5-nWoi 二.在gitlab上为项目创建trunk分支 三.在jenkins中配置gitla ...
- js 正则表达式 贪婪与惰性
首先引入一个介绍比较详细的网站 http://www.jb51.net/article/31491.htm 接下来是本人的简介 其实贪婪和惰性很容易理解,从字面意思我们就可以知道,所谓的"贪 ...
- KVM-安装windows
硬盘.网卡选择vitio 虚拟机配置2个cd-rom,分别挂载系统iso与virtio-win 开始安装无法识别硬盘,加载光驱驱动 安装完成进入系统之后,设备管理器添加驱动,识别设备
- 第六次作业--static关键字、对象
##题目一 ##Computer package Train.Method.TeachDemo.Thread.Fuction; /** * 求n的阶乘算法 * @author 喵 * @date 20 ...
- 一个项目管理Master的心声
毕业第二年我被幸运女神所眷顾,一下成为了一个20多人研发团队的项目master,自己还未从职场菜鸟的称呼中走出来,就要开始管理团队,在接到通知的时候心里既兴奋又慌得六神无主,然而奔着初生牛犊不怕虎的精 ...