【Java框架篇】Struts+displaytag国际化简单使用
2017-12-05 16:02
519 查看
说明:
本篇基于上一篇
mvc方式再做简要说明,说明Struts国际化其与的不同之处。
用的框架比较老,基于Struts1。
首先配置方面,属性和配置文件必不可少,然后起初的的想法是在自己封装的ActionBase里处理每次请求的拦截(class ActionBase extends Action)。 后来改为只在登录时处理下即可。主要逻辑如下代码所示,其中加了一层本地存储的cookie记忆每次系统使用的语言。便于下次使用时语言可以记忆。然后关键一步用了Action里的一个setLocal(),将存到localde里的语言放在session中用于以后的请求时拿到当前语言用于不同语言的展示。如下代码示例二。
简要分析:首先根据传递的语言类型去跟本地cookie查找是否有已经存在,若空去浏览器默认语言去库里查找是否是系统需要切换的几种语言,如果库里没有就设置默认语言。所有的判断结束后。将拿到的语言的字符串存在local,然后存在cookie中。最后放入setlocal.
主要java代码:
示例代码一(java核心处理类)
示例代码二(Action.java 中setlocal源码)
前端代码:
通过Struts <%@ taglib uri=”struts-bean” prefix=”bean”%>
配置文件:
我的属性文件放在resource包下,均已application
属性文件新建以resource的属性文件后追加以_zh_CN,_zh_TW,en_US结尾的不同语言的属性文件即可,详见上一篇。读取的时候配置文件只需配置resource的即可。
备注:项目中的分页功能用的displaytag标签。其国际化需要单独处理,具体的办法有有几种
以上几种均可实现国际化,具体的使用,需要在display.properties文件里的做如下配置:
说明:locale provider (Jstl provider by default)
locale.provider=org.displaytag.localization.I18nStrutsAdapter
说明:locale.resolver (nothing by default, simply use locale from request)
locale.resolver=org.displaytag.localization.I18nStrutsAdapter
如果要使用默认的jstl方式国际化,则需要修改locale.provider的配置为I18nJstlAdapter。并且在jsp的分页出把需要替换分页的表头用titleKey。并设置如下的引入:
如果使用jstl的方式,那么就无需上述的java类的处理,但是想达到以上的需求无法实现。因此改用Struts的方式,既
配置locale.provider和locale.resolver为Struts的方式。jsp中无需上述的fmt引入。
如果使用spring的方式亦可。再此不做介绍。
本篇基于上一篇
mvc方式再做简要说明,说明Struts国际化其与的不同之处。
用的框架比较老,基于Struts1。
首先配置方面,属性和配置文件必不可少,然后起初的的想法是在自己封装的ActionBase里处理每次请求的拦截(class ActionBase extends Action)。 后来改为只在登录时处理下即可。主要逻辑如下代码所示,其中加了一层本地存储的cookie记忆每次系统使用的语言。便于下次使用时语言可以记忆。然后关键一步用了Action里的一个setLocal(),将存到localde里的语言放在session中用于以后的请求时拿到当前语言用于不同语言的展示。如下代码示例二。
简要分析:首先根据传递的语言类型去跟本地cookie查找是否有已经存在,若空去浏览器默认语言去库里查找是否是系统需要切换的几种语言,如果库里没有就设置默认语言。所有的判断结束后。将拿到的语言的字符串存在local,然后存在cookie中。最后放入setlocal.
主要java代码:
示例代码一(java核心处理类)
Locale defaultLocale = getLocale(request); // 获取浏览器系统语言 public Locale getLocale(ActionEvent ae, String defaultLocale) { HttpServletRequest request = ae.getRequest(); HttpServletResponse response = ae.getResponse(); String localeParam = request.getParameter(LOCALE_PARAM_NAME); if (StringUtils.isEmpty(localeParam)) { // 获取本地cookie Cookie[] cookies = request.getCookies(); for (Cookie cookie : cookies) { if (StringUtils.equals(cookie.getName(), LOCALE_PARAM_NAME)) { localeParam = cookie.getValue(); } } if (StringUtils.isEmpty(localeParam)) { localeParam = defaultLocale; } } Language language = new Language(); language.setLangName(localeParam); Language languageObj = languageDAO.selectLanguage(language); if (languageObj == null) { languageObj = languageDAO.selectDefaultLanguage(); } Locale locale = LocaleUtils.toLocale(languageObj.getLangName()); Cookie cookie = new Cookie(LOCALE_PARAM_NAME, locale.toString()); cookie.setMaxAge(Integer.MAX_VALUE); response.addCookie(cookie); return locale; } setLocale(request, locale);
示例代码二(Action.java 中setlocal源码)
protected Locale getLocale(HttpServletRequest request) { HttpSession session = request.getSession(); Locale locale = (Locale) session .getAttribute("org.apache.struts.action.LOCALE"); if (locale == null) { locale = defaultLocale; } return locale; } protected void setLocale(HttpServletRequest request, Locale locale) { HttpSession session = request.getSession(); if (locale == null) { locale = defaultLocale; } session.setAttribute("org.apache.struts.action.LOCALE", locale); }
前端代码:
通过Struts <%@ taglib uri=”struts-bean” prefix=”bean”%>
<bean:message key="XXXX"/>可拿到属性文件的值。
配置文件:
我的属性文件放在resource包下,均已application
<description>应用程序属性配置组件</description> ba76 <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename"><value>resources.application</value></property> <property name="useCodeAsDefaultMessage"><value>true</value></property> </bean>
属性文件新建以resource的属性文件后追加以_zh_CN,_zh_TW,en_US结尾的不同语言的属性文件即可,详见上一篇。读取的时候配置文件只需配置resource的即可。
备注:项目中的分页功能用的displaytag标签。其国际化需要单独处理,具体的办法有有几种
以上几种均可实现国际化,具体的使用,需要在display.properties文件里的做如下配置:
说明:locale provider (Jstl provider by default)
locale.provider=org.displaytag.localization.I18nStrutsAdapter
说明:locale.resolver (nothing by default, simply use locale from request)
locale.resolver=org.displaytag.localization.I18nStrutsAdapter
如果要使用默认的jstl方式国际化,则需要修改locale.provider的配置为I18nJstlAdapter。并且在jsp的分页出把需要替换分页的表头用titleKey。并设置如下的引入:
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt"%> <%@ taglib uri="displaytag" prefix="display"%> <fmt:setLocale value="${sessionScope['org.apache.struts.action.LOCALE']}"/> <fmt:setBundle basename="resources.application" />
如果使用jstl的方式,那么就无需上述的java类的处理,但是想达到以上的需求无法实现。因此改用Struts的方式,既
配置locale.provider和locale.resolver为Struts的方式。jsp中无需上述的fmt引入。
如果使用spring的方式亦可。再此不做介绍。
相关文章推荐
- Java后台框架篇--Struts2.0简单使用
- 使用异或进行简单的密码加密(JAVA实现)
- Java语言中包的简单使用
- java中使用向量做的一个简单翻页程序
- 图片查看软件使用JAVA编写的,比较简单!从书上看下来的,练习使用!
- 使用java简单模拟ping和telnet的实现
- 使用Java实现对dbf文件的简单读写
- 使用java简单模拟ping和telnet的实现
- java.util.Properties 的一些简单使用
- 使用Java实现对dbf文件的简单读写
- 【Java插件开发】JFreeChart简单使用
- 浅析Java执行外部命令的几个要点(1)——简单的使用范例以及在Cygwin上的注意点
- flex 与 java交互 的一个简单示例 (使用RemoteObject)
- 使用jsp生成验证码使用简单在java或jsp页面调用简单
- JOONE(Java Object-Oriented Network Engine)使用初探(简单实例源代码)
- java连接postgreSQL数据库简单使用
- 使用 java 的反射 和 comparator 实现java bean 的简单排序
- 关于java -classpath 命令的简单使用
- 使用java简单模拟ping和telnet的实现
- 在ASP中使用简单Java类