众里寻他千百度,蓦然回首,那人却在灯火阑珊处。。。。
这两天,一直被国际化所困扰着,一直在查询资料 ,从自己手动实现,到找到最佳实现方案,才知道,其实国际化很简单,现在将我的总结分享给大家。。。。
其实我们只要学会配置,了解国际化实现机制即可:
国际化:必备基础知识:
国际化(Internationalization,又称il8n),是越来越多的应用软件必须面临的问题,Java语言采用Unicode编码,并且提供了强大的类库支持国际化编程。采用Java语言编程,可以方便地实现应用软件界面语言的国际化。
国际化编程常用类:使用Java语言进行国际化编程,经常要用到Locale类及ResourceBundl e类,它们都在包java.util中.
1.Locale类
Locale类包含对主要地理区域的地域化特征的封装。通过设定Locale,我们可以为特定的国家或地区提供符合当地文化习惯的语言、表达格式等。一个Locale代码 可由语言代码和地区代码组合而成。常用的两种Locale代码如下:
语言代码 | 地区代码 | Locale代码 | 说明 |
en | US | en_US | 美国英语 |
zh | CN | zh_CN | 简体中文 |
2.ResoureeBundle类
ResourceBundle类是一个抽象类,需要通过getBundle(String baseName,Locale locale)方法加载扩展名为properties的资源文件。资源文件的名称由一个基本名称和Locale代码组成,而基本名称则可以在Java程序 中调用getBundle(StringbaseName,Locale locale)方法时传人参数指定。例如,我们在程序中指定基本名称为messages,Locale代码为zh_CN, 则对应的资源文件应为messages_zh_CN.properties
3 . 接下来,看实现方式
1)applicationContext.xml 国际化相关配置:
<!--start 定义国际化消息 -->
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<!-- 其中basename用来指定properties文件的通用名 如实例中的messages_en.properties,messages_ja.properties通用名都是messages -->
<property name="basename" value="myproperties" />
<property name="useCodeAsDefaultMessage" value="true" />
</bean>
<!-- 获取本地 -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />
<!--end 定义国际化消息 -->
2)spring mvc配置webmvc-config.xml
<!-- 国际化操作拦截器 如果采用基于(请求/Session/Cookie)则必需配置 -->
<mvc:interceptors>
<!-- Changes the locale when a 'locale' request parameter is sent; e.g. /?locale=de -->
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="locale" />
</bean>
</mvc:interceptors>
3)页面实现,
在jsp页面中引入spring标签
<%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>
下面展示的是jsp页面用spring标签直接绑定的国际化信息 <spring:message code="money"/>4) 在head页面添加国际化链接
<!-- start 使用message 标签配置需要显示的国际化文本, locale 对应国际化文件中对应的键的名称 -->
<a href="/alarm/system/user/login?locale=zh_CN">Chinese</a>
<a href="/alarm/system/user/login?locale=en_US">English</a>
5)相关国际化文件
a)myproperties_en_US.properties
login_title=monitoring processing system
login=login
user_name=username
password=password
verification_code=verification code
remember_me=remember the password
chinese=chinese
english=english
b)myproperties_zh_CN.properties
login_title=告警监测处理系统
login=登录
user_name=用户名
password=密码
verification_code=验证码
remember_me=请记住我
chinese=中文
english=英文
4.页面代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page import="java.io.*,java.util.*"%>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<jsp:include page="basemain.jsp"></jsp:include>
<!DOCTYPE html>
<html>
<!--Head-->
<head>
<style>
#change_language_chinese {
float: left;
padding-right: 20px;
color: #4374e0 !important;
}
#change_language_english {
color: #4374e0 !important;
}
</style>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><spring:message code="login_title" /></title>
<meta name="description" content="Dashboard" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="shortcut icon"
href="<c:url value="/resources/bootstrap/assets/img/favicon.png" />"
type="image/x-icon">
<!--Basic Styles-->
<link
href="<c:url value="/resources/bootstrap/assets/css/bootstrap.min.css" />"
rel="stylesheet" />
<link
href="<c:url value="/resources/bootstrap/assets/css/font-awesome.min.css" />"
rel="stylesheet" />
<!--Beyond styles-->
<link id="beyond-link"
href="<c:url value="/resources/bootstrap/assets/css/beyond.min.css" />"
rel="stylesheet" type="text/css" />
<link
href="<c:url value="/resources/bootstrap/assets/css/typicons.min.css" />"
rel="stylesheet" />
<link
href="<c:url value="/resources/bootstrap/assets/css/animate.min.css" />"
rel="stylesheet" />
<link id="skin-link" href="" rel="stylesheet" type="text/css" />
<!--Basic Scripts-->
<script
src="<c:url value="/resources/bootstrap/assets/js/jquery.min.js" />"></script>
<script
src="<c:url value="/resources/bootstrap/assets/js/bootstrap.min.js" />"></script>
<script
src="<c:url value="/resources/bootstrap/assets/js/slimscroll/jquery.slimscroll.min.js" />"></script>
<!--Beyond Scripts-->
<script src="<c:url value="/resources/bootstrap/assets/js/beyond.js" />"></script>
<script>
if (parent && parent != window && parent.location && typeof parent.location.reload === 'function') {
parent.location.reload();
}
window.CMS_URL = "<%=request.getContextPath() + "/"%>";
</script>
<!--Skin Script: Place this script in head to load scripts for skins and rtl support-->
<script src="<c:url value="/resources/bootstrap/assets/js/skins.js" />"></script>
</head>
<!--Head Ends-->
<!--Body-->
<body>
<div class="login-container animated fadeInDown">
<c:url value="/j_spring_security_check" var="loginurl" />
<form method="post" name="login" action="${loginurl}">
<div id="change_language_chinese">
<a href="/alarm/system/user/login?locale=zh_CN"><spring:message code="chinese" /></a>
</div>
<div id="change_language_english">
<a href="/alarm/system/user/login?locale=en_US"><spring:message code="english" /></a>
</div>
<div class="loginbox bg-white">
<div class="loginbox-title primary"><spring:message code="login_title" /></div>
<div class="loginbox-or">
<div class="or-line"></div>
<div class="or"><spring:message code="login" /></div>
</div>
<c:if test="${not empty errorMsg}">
<div class="loginbox-textbox red">${errorMsg}</div>
</c:if>
<div class="loginbox-textbox">
<input type="text" class="form-control"
placeholder="<spring:message code="user_name" />"
name="j_username" autocomplete="off" />
</div>
<div class="loginbox-textbox">
<input type="password" class="form-control"
placeholder="<spring:message code="password" />"
name="j_password" autocomplete="off" />
</div>
<div class="loginbox-textbox clearfix">
<div class="col-xs-6" style="padding-left: 0px; padding-right: 5px">
<input type="text" class="form-control "
placeholder="<spring:message code="verification_code" />"
name="regcode" autocomplete="off" />
</div>
<div class="col-xs-6" style="padding-right: 0px; padding-left: 5px">
<img class="form-control "
src="<c:url value='/regcode/renew' />?<%=(new java.util.Date().getTime())%>"
οnclick="this.src+=1" style="padding: 0px" />
</div>
</div>
<div class="loginbox-textbox">
<div class="checkbox">
<label> <input type="checkbox" class="colored-blue"
id="remember_me" name="_spring_security_remember_me"> <span
class="text"><spring:message code="remember_me" /></span>
</label>
</div>
</div>
<!--div class="loginbox-forgot">
<a href="">忘记密码?</a>
</div-->
<div class="loginbox-submit">
<input type="submit" class="btn btn-primary btn-block"
value="<spring:message code="login" />" />
</div>
</div>
</form>
</div>
</body>
<!--Body Ends-->
</html>
页面截图: