java web 项目实现手动中英文切换
2016-08-16 12:17
357 查看
java国际化实现思路
Java程序的国际化思路是将程序中的标签、提示信息等放在资源文件中,程序需要支持国家/语言环境,则必须提供对应的资源文件。资源文件是key-value对,每个资源文件中的key不变,但value随不同的国家/语言变化。
Java程序的国际化主要通过如下3个类完成
Java.util.ResourceBundle:用于加载资源包
Java.util.Locale:对应一个特定的国家/地区、语言环境
Java.text.MessageFormat:用于将消息格式化
资源文件
为了实现程序的国际化,必须先提供程序所需要的资源文件。资源文件的内容是很多的 key-value对,其中key是程序使用的部分,而value是程序的显示部分。
资源文件的命名可以是如下3种形式:
baseName_language_country.properties
baseName_language.properties
baseName.properties
其中baseName是资源文件的基本名称,用户可以自由定义,而language和country都不可随意变化,必须是Java所支持的语言和国家如:中文: zh_CN 、英文:en_US。
实例:
1、搭建struts2环境。
2、在struts.xml文件中添加国际化的相关配置:
<constant name="struts.devMode" value="true" />
<constant name="struts.custom.i18n.resources" value="ApplicationResources" />
3、根据struts2的配置,插件一个名字为ApplicationResources_en_US.properties和ApplicationResources_zh_CN.properties的配置文件(如果还需要支持其他国家的语言只需要添加相应的配置文件并对其配置即可):
4、在ApplicationResources_en_US.properties和ApplicationResources_zh_CN.properties分别写入key-value对应关系。
5、编写语言切换方法。
/**
* 实现手动中英文切换的方法
* @author ldy
* @return
*/
public String changLanguage(){
String flag=ServletActionContext.getRequest().getParameter("lau_flag");
Locale l=null;
HttpSession session = super.getSession();
if(flag==null){
l = Locale.CHINA;
session.setAttribute("WW_TRANS_I18N_LOCALE", Locale.CHINA);
}else if (flag.equals("2")) {
l = Locale.CHINA;
session.setAttribute("WW_TRANS_I18N_LOCALE", Locale.CHINA);
} else if (flag.equals("1")) {
l = Locale.US;
ServletActionContext.getRequest().getSession().setAttribute("WW_TRANS_I18N_LOCALE", Locale.US);
}
ActionContext.getContext().setLocale(l); //解决把语言放入session后需要点击2次才切换语言的问题。
return SUCCESS;
}
6、在struts配置文件中配置action:
<action name="changLanguage" class="LoginAction" method="changLanguage">
<result name="success">/pages/layout/top.jsp</result>
</action>
7、在jsp界面中手动切换语言代码:
<%if(session.getAttribute("WW_TRANS_I18N_LOCALE") != null && ("en_US").equalsIgnoreCase(session.getAttribute("WW_TRANS_I18N_LOCALE").toString()) ){ %>
<button onclick="changeLanguage(2)">CHINESE</button>
<%}else{ %>
<button onclick="changeLanguage(1)">ENGLISH</button>
<%} %>
相对应的js代码:
function changeLanguage(flag) {
this.location.href = "${ctx}/login/changLanguage.action?lau_flag="+flag;
}
这样子可以实现action跳转的指定页面实现中英文切换,虽然我们把切换语言赋值给session的WW_TRANS_I18N_LOCAL属性,但是项目始终是只会读取浏览器发送过来的区域Locale对象信息。
解决这个问题我们可以自定义一个拦截器。
8、过滤器实现:
public class ChangeLanguageFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest r = (HttpServletRequest) req;
MyRequestLanguage request = new MyRequestLanguage(r);
filterChain.doFilter(request, resp);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
9、在web.xml文件中配置过滤器
<filter>
<filter-name>changeLanguage</filter-name>
<filter-class>com.jddba.webapp.filter.ChangeLanguageFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>changeLanguage</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
10、MyRequestLanguage实现语言的转换:
public class MyRequestLanguage extends HttpServletRequestWrapper{
private Locale locale = null;
public MyRequestLanguage(HttpServletRequest request) {
super(request);
HttpSession session = request.getSession();
locale = (Locale) session.getAttribute("WW_TRANS_I18N_LOCALE");
}
@Override
public Locale getLocale() {
if (locale != null) {
return locale;
}
return super.getLocale();
}
}
到此可以实现java web 项目的中英文手动切换。这种实现方式只有通过struts的acton跳转的界面可以实现手动进行中英文切换,直接以链接方式的跳转到jsp面不能使用此方式手动切换语言。
Java程序的国际化思路是将程序中的标签、提示信息等放在资源文件中,程序需要支持国家/语言环境,则必须提供对应的资源文件。资源文件是key-value对,每个资源文件中的key不变,但value随不同的国家/语言变化。
Java程序的国际化主要通过如下3个类完成
Java.util.ResourceBundle:用于加载资源包
Java.util.Locale:对应一个特定的国家/地区、语言环境
Java.text.MessageFormat:用于将消息格式化
资源文件
为了实现程序的国际化,必须先提供程序所需要的资源文件。资源文件的内容是很多的 key-value对,其中key是程序使用的部分,而value是程序的显示部分。
资源文件的命名可以是如下3种形式:
baseName_language_country.properties
baseName_language.properties
baseName.properties
其中baseName是资源文件的基本名称,用户可以自由定义,而language和country都不可随意变化,必须是Java所支持的语言和国家如:中文: zh_CN 、英文:en_US。
实例:
1、搭建struts2环境。
2、在struts.xml文件中添加国际化的相关配置:
<constant name="struts.devMode" value="true" />
<constant name="struts.custom.i18n.resources" value="ApplicationResources" />
3、根据struts2的配置,插件一个名字为ApplicationResources_en_US.properties和ApplicationResources_zh_CN.properties的配置文件(如果还需要支持其他国家的语言只需要添加相应的配置文件并对其配置即可):
4、在ApplicationResources_en_US.properties和ApplicationResources_zh_CN.properties分别写入key-value对应关系。
5、编写语言切换方法。
/**
* 实现手动中英文切换的方法
* @author ldy
* @return
*/
public String changLanguage(){
String flag=ServletActionContext.getRequest().getParameter("lau_flag");
Locale l=null;
HttpSession session = super.getSession();
if(flag==null){
l = Locale.CHINA;
session.setAttribute("WW_TRANS_I18N_LOCALE", Locale.CHINA);
}else if (flag.equals("2")) {
l = Locale.CHINA;
session.setAttribute("WW_TRANS_I18N_LOCALE", Locale.CHINA);
} else if (flag.equals("1")) {
l = Locale.US;
ServletActionContext.getRequest().getSession().setAttribute("WW_TRANS_I18N_LOCALE", Locale.US);
}
ActionContext.getContext().setLocale(l); //解决把语言放入session后需要点击2次才切换语言的问题。
return SUCCESS;
}
6、在struts配置文件中配置action:
<action name="changLanguage" class="LoginAction" method="changLanguage">
<result name="success">/pages/layout/top.jsp</result>
</action>
7、在jsp界面中手动切换语言代码:
<%if(session.getAttribute("WW_TRANS_I18N_LOCALE") != null && ("en_US").equalsIgnoreCase(session.getAttribute("WW_TRANS_I18N_LOCALE").toString()) ){ %>
<button onclick="changeLanguage(2)">CHINESE</button>
<%}else{ %>
<button onclick="changeLanguage(1)">ENGLISH</button>
<%} %>
相对应的js代码:
function changeLanguage(flag) {
this.location.href = "${ctx}/login/changLanguage.action?lau_flag="+flag;
}
这样子可以实现action跳转的指定页面实现中英文切换,虽然我们把切换语言赋值给session的WW_TRANS_I18N_LOCAL属性,但是项目始终是只会读取浏览器发送过来的区域Locale对象信息。
解决这个问题我们可以自定义一个拦截器。
8、过滤器实现:
public class ChangeLanguageFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest r = (HttpServletRequest) req;
MyRequestLanguage request = new MyRequestLanguage(r);
filterChain.doFilter(request, resp);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
9、在web.xml文件中配置过滤器
<filter>
<filter-name>changeLanguage</filter-name>
<filter-class>com.jddba.webapp.filter.ChangeLanguageFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>changeLanguage</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
10、MyRequestLanguage实现语言的转换:
public class MyRequestLanguage extends HttpServletRequestWrapper{
private Locale locale = null;
public MyRequestLanguage(HttpServletRequest request) {
super(request);
HttpSession session = request.getSession();
locale = (Locale) session.getAttribute("WW_TRANS_I18N_LOCALE");
}
@Override
public Locale getLocale() {
if (locale != null) {
return locale;
}
return super.getLocale();
}
}
到此可以实现java web 项目的中英文手动切换。这种实现方式只有通过struts的acton跳转的界面可以实现手动进行中英文切换,直接以链接方式的跳转到jsp面不能使用此方式手动切换语言。
相关文章推荐
- 用Eclipse在Web项目引用Java项目时实现热部署
- 使用Eclipse-jee3.6版本部署web项目已实现修改java代码不用重启
- 使用spring-loaded开源项目,实现java程序和web应用的热部署
- 使用spring-loaded开源项目,实现java程序和web应用的热部署
- Web项目中使用java Struts2实现Zip、xml文件的动态创建和下载(Zip文件中动态存在多个xml文件)
- JAVA_WEB项目之Lucene实现检索结果排序和关键字在索引库中多字段查询结果进行高亮显示
- Java web项目实现文件下载...【Pnoker】
- JAVA_WEB项目(结合Servlet+jsp+ckEditor编辑器+jquery easyui技术)实现新闻发布管理系统第一篇:前期环境准备
- JAVA_WEB项目(结合Servlet+jsp+ckEditor编辑器+jquery easyui技术)实现新闻发布管理系统第二篇:登陆和注销功能实现
- 在myeclipse的java web项目中手动添加jstl的步骤
- java web 项目 图书管理系统的设计与实现
- java web 项目 图书管理系统的设计与实现
- 用Eclipse在Web项目引用Java项目时实现热部署
- 利用自定义ClassLoader和接口逻辑后台可刷新缓存实现java-web项目的动态发布
- 比较使用的web项目中用到参数的地方的java实现.
- JAVAWEB项目如何实现验证码
- java web 项目实现 耦合-解耦 解决方案----工厂模式入门级别
- atitit.GUI图片非规则按钮跟动态图片切换的实现模式总结java .net c# c++ web html js
- atitit.GUI图片非规则按钮跟动态图片切换的实现模式总结java .net c# c++ web html js
- JAVA_WEB项目(结合Servlet+jsp+ckEditor编辑器+jquery easyui技术)实现新闻发布管理系统第三篇:新闻发布,新闻修改,新闻删除功能的实现