实现原理

在Struts中,session中存放当前会话的Locale的key值为:Globals.LOCALE_KEY,更改session中的这个属性就可以同它关联的标签等实现国际化。

<bean:message>标签根据存储在session范围内的Locale实例,从默认的Resource Bundle中检索和Locale对应的资源文件,再从资源文件中读取key对应的消息字符串。同样的还有<html:errors />等,同时Struts的验证框架也是。

Action类中访问资源文件,实现国际化很也简单,因为在Action基类中定义了getResources(requset)方法,代表当前应用模块使用的默认Resource Bundle,它可以返回默认的MessaageResources对象,得到了MessageResources对象后,就可以通过它的方法来访问消息文本。

例:

MessageResources message = getResources(request);
String msg=messages.getMessage(local, "hell.message")

org.apacje.struts.util.MessageResources的getMessage()方法有好几种重载形式,下面列出常用的几种:

  • 根据参数指定的Locale检索对应的资源文件,然后返回和参数key对应的消息文本:
    getMessage(java.util.Locale locae, java.lang,String key)
  • 根据参数据定的Locale检索对应的资源文件,然后返回和参数key对应的消息文本,args参数用于替换复合消息文本的参数:
    getMessage(java.util.Locale locae, java.lang,String key, java.lang.Object[] args)
  • 根据默认的Locale检索对应的资源文件,然后返回和参数key对应的消息文本:
    getMessage(java.lang,String key)

下面通过一个简单的例子程序来展现在Struts1中如何实现国际化,具体的程序如下:

运行截图

刚开始进入,根据当前系统的语言环境默认选择:

切换语言提交后如下:

程序实现源码

1.视图页面index.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Struts国际化支持</title>
</head>
<body><html:form action="/changeLanguage.do" method="post"><bean:message key="sturts.i18n.choice_language" /><html:select property="language"><html:option value="english">English</html:option><html:option value="chinese">简体中文</html:option></html:select><html:submit><bean:message key="sturts.i18n.submit_button" /></html:submit></html:form><br /><br /><font size="14"><b><bean:message key="sturts.i18n.test_word" /></b></font>
</body>
</html>

2.Action Form:

package test.struts.i18n.form;import org.apache.struts.action.ActionForm;public class LanguageForm extends ActionForm {private static final long serialVersionUID = 1L;private String language;public String getLanguage() {return language;}public void setLanguage(String language) {this.language = language;}
}

3.对应Action:

package test.struts.i18n.action;import java.util.Locale;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.apache.struts.Globals;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;import test.struts.i18n.form.LanguageForm;public class ChangeLanguage extends Action {@Overridepublic ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {LanguageForm lf = (LanguageForm)form;String language = lf.getLanguage();HttpSession session = request.getSession();if(language!=null&&language.equalsIgnoreCase("english")) {Locale locale = new Locale("en", "US");session.setAttribute(Globals.LOCALE_KEY, locale);} else {Locale locale = new Locale("zh", "CN");session.setAttribute(Globals.LOCALE_KEY, locale);}return mapping.findForward("success");}}

这里创建的Locale对象要根据国家编码与语言编码两个参数来创建,可以到林格斯的网站上查看对应的编码: http://www.lingoes.net/zh/translator/langcode.htm

4.Struts配置文件:struts-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN""http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config><form-beans><form-bean name="languageForm" type="test.struts.i18n.form.LanguageForm" /></form-beans><action-mappings><action path="/changeLanguage" scope="request"type="test.struts.i18n.action.ChangeLanguage"name="languageForm"><forward name="success" path="/index.jsp" /></action></action-mappings><message-resources parameter="application"/>
</struts-config>

5.资源文件

关联的英文资源文件application_en_US.properties:

sturts.i18n.choice_language=Language
sturts.i18n.submit_button=Choice
sturts.i18n.test_word=Hello\!\!

对应的中文资源文件application_zh_CN.properties

sturts.i18n.choice_language=语言
sturts.i18n.submit_button=确定
sturts.i18n.test_word=你好!!

还要建立一个默认的资源文件application.properties同上面的中文文件,由于properties文件不支持中文,注意转码。

Struts-国际化支持相关推荐

  1. Spring Boot国际化支持

    文章目录 添加Maven支持 LocaleResolver LocaleChangeInterceptor 定义Message Sources Controller文件 html文件 运行应用程序 S ...

  2. AngularJS 国际化 支持记录语言刷新后语言不变

    AngularJS 国际化 支持记录语言刷新后语言不变 <!DOCTYPE html> <html ng-app='app'> <head><meta cha ...

  3. Android应用开发(7)---Unicode和国际化支持

    Unicode和国际化支持 Android利用 ICU库和 CLDR项目来提供Unicode和其他国际化支持.本文档关于Unicode和国际化支持的讨论分为两部分:Android 6.0(API级别2 ...

  4. Spring容器创建流程(6)国际化支持

    initMessageSource 初始化MessageSource,Spring国际化支持(之前的执行步骤可在系列文章中找到) 容器refresh总览: synchronized (this.sta ...

  5. qt linux 国际化,多语言,配置CLion管理Qt项目国际化支持

    随着Qt 6的发布,cmake也正式宣告接管qmake的工作了. 在之前的一篇博客里我介绍了如何使用cmake管理你的qt项目,不过有一点我没有讲,那就是对国际化(i18n)的处理. 今天我们就来介绍 ...

  6. 为React应用添加国际化支持

    国际化一般可分为以下几个挑战: 1.检测用户的语言环境; 2.翻译UI元素.标题和提示; 3.提供特定于地区的内容,如日期.货币和数字. 在本文中,我将只关注前端部分.我们将开发一个简单的通用Reac ...

  7. Go语言的国际化支持(基于gettext-go)

    Go语言的国际化支持(基于gettext-go) hello, world! 假设有以下的程序, 输出: "Hello, world!". package mainimport ( ...

  8. 探索Java应用程序的国际化支持

    Java国际化的支持,用以显示符合各种区域和文化标准格式方式的文本元素. 且多种数据格式基于语言和文化的多样性. 地区,日期,时间,和货币格式的显示根据不同区域进行智能显示. 例如,一个区域的日期格式 ...

  9. Spring Boot 架构中的国际化支持实践—— Spring Boot 全球化解决方案

    背景 Spring Boot 主要通过 Maven 或 Gradle 这样的构建系统以继承方式添加依赖,同时继承了 Spring 框架中的优秀元素,减少了 Spring MVC 架构中的复杂配置,内置 ...

  10. native2ascii工具转码struts国际化

    在struts国际化遇到这样问题 如果.properties文件编码格式是ISO 8859-1就会出现 如果.properties文件编码格式是UTF-8,当前问题是解决了,但是jsp页面的中文就会乱 ...

最新文章

  1. Python中实现ASCII码与字符相互转换
  2. Siamese Network (应用篇4) :块匹配中一致性特征和距离测度学习 CVPR2015
  3. 树形动态规划 - 树中距离之和
  4. Android 帧动画,加载动画,AnimationDrawable,仿京东加载动画
  5. 数组名与指向数组的指针之间的联系与区别【数据结构】
  6. Python中str.format()字典及list传入详解
  7. (附源码)Python在线办公系统 毕业设计 071116
  8. hive之经典sql面试题
  9. Window8专业版免序列号激活工具下载地址
  10. Web 前端本地化(一)
  11. 一个div实现太极图案+动画(简单易懂)
  12. 主机链接vm虚拟机中的oracle实例
  13. iOS开发 关于YY_Model中,modelContainerPropertyGenericClass解析数组出现崩溃问题
  14. React项目案例-影视资源网站
  15. 服务器导出excel文档,服务器导出excel功能配置
  16. 网络硬件三剑客 - 集线器、交换机与路由器
  17. 制作地图的那些事(四)——制图之地图调优
  18. 蓝牙杂散超标_蓝牙产品型号核准认证检测内容是什么 需要SRRC认证杂散功率测试...
  19. 微信公众号开发-菜单事件推送
  20. 连接池-DBCPUtils工具类(dbcp)

热门文章

  1. onethink学习之动态扩展菜单
  2. 前端全屏滚动学习总结
  3. 虚幻4html5游戏,开发者:虚幻5使游戏文件大小飞涨 呈现独特挑战
  4. ControlNet精准控制AI绘画教程
  5. mysql using mrr_Using MRR(Multi-Range Read )
  6. 大数据任务调度工具 Apache DolphinScheduler
  7. 中南大学应用统计专硕考研上岸经验分享
  8. 手游联运系统海外版丨游戏联运系统海外版丨海外游戏联运系统丨海外版游戏SDK
  9. dpsk调制解调 matlab,2DPSK调制与解调系统的MATLAB实现及性能分析.doc
  10. Python 自动化教程(4) : 自动生成PPT文件 Part 2 (干货)