Spring3国际化和本地化

我最近想将Spring 3提供的国际化和本地化功能添加到我当前的项目之一中。 我浏览了Spring文档,然后在Internet上搜索以找到一些资源。
但是我找不到能够满足客户要求的资源。 大多数教程都像hello world应用程序,它提供了基本的理解。 即使是spring文档,也没有提供有关将此功能集成到我们自己的项目中的详细说明。 专业的开发人员可以从spring文档中挑选东西。 但是对于其他人,则必须付出额外的努力来使事情正常运行。 通过本教程,我将解释大多数客户期望的非常实际的情况。
要求
我在我的应用程序中使用Spring Security。 用户应该能够从登录页面中选择语言,该页面被指定为spring security XML文件的“登录页面”。 我在登录页面的右上角提供了“英语”,“中文”,“德语”和“西班牙语”链接,以选择语言。 用户可以选择语言并通过提供用户名和密码来登录系统。 然后,整个应用程序应来自所选语言。 同样,从登录页面选择语言时,登录页面的内容也应更改。
弹簧配置
第一步,我必须在dispatcher-servlet.xml中配置LocaleChangeInterceptor拦截器 文件。 此XML文件名将根据web.xml文件中分配给DispatcherServlet的名称进行更改。 我已将“ dispatcher”作为DispatcherServlet的名称。 所以我应该在/ WEB-INF文件夹下创建' dispatcher-servlet.xml '文件。 我的应用程序正在Tomcat 7上运行。
我不能像在Spring文档中那样通过声明此拦截器的方法来使其工作。 登录之前更改语言环境的请求(即,从登录页面开始)未被语言环境更改拦截器拦截。 因此,我不得不宣布它为休假。
<mvc:interceptors><mvc:interceptor><mvc:mapping path="/doChangeLocale*"/><bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" ><property name="paramName" value="locale" /></bean></mvc:interceptor>
</mvc:interceptors>
LocaleChangeInterceptor ”将拦截请求更改语言环境的请求,并借助“ SessionLocaleResolver ”将相应的语言环境代码存储在会话中。
接下来,我们将研究如何在“ dispatcher-servlet.xml”文件中声明“ SessionLocaleResolver”。
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"><property name="defaultLocale" value="en" />
</bean>
SessionLocaleResolver将在当前会话中存储区域设置,并针对当前会话的每个后续用户请求解析该区域设置。
接下来,我们必须声明消息资源bean。
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"><property name="useCodeAsDefaultMessage" value="true" /><property name="basenames"><list><value>classpath:messages</value></list></property><property name="cacheSeconds" value="0" /><property name="defaultEncoding" value="UTF-8"></property>
</bean>
我的应用程序应支持4种语言。 因此,我将4个属性文件添加到“ resources”文件夹中(最终,所有这些属性文件应位于“ classs”文件夹中),如下所示。
messages_de.properties –德语
messages_en.properties –英文
messages_zh.properties –中文
messages_es.properties –西班牙语
注意,所有文件名都应以您指定为消息资源bean的'basenames'属性的文本开头。
Spring 3安全配置在此实现中非常重要。 请记住,当您单击登录页面上的任何区域更改链接时,您尚未通过身份验证。 但是,该请求仍应由“ LocaleChangeInterceptor”拦截。 否则,语言将不会按预期更改。 因此,应该允许任何匿名用户发出区域更改请求,并且该请求应通过“ LocaleChangeInterceptor”。
仔细研究我的spring安全配置。
<http auto-config="false"><form-login login-page="/login.jsp"  authentication-failure-url="/login.jsp?login_error=true" default-target-url="/mainMenu.htm"/><logout logout-success-url="/login.jsp"/><intercept-url pattern="/doChangeLocale**" access="ROLE_ANONYMOUS,ROLE_ADMIN,ROLE_USER"/><intercept-url pattern="/**" access="ROLE_ADMIN,ROLE_USER"  />
</http>
用户可以通过login.jsp文件提供用户名和密码来登录系统,并且该页面具有用于更改语言环境的相应链接。 当用户未经身份验证而对受保护资源提出任何请求时,该用户将被重定向到login.jsp页面。 上面的配置说,所有传入应用程序的请求都应来自经过身份验证的用户,并且除了“ / doChangeLocale **”请求外,还应授权该用户。
拦截URL'/ doChangeLocale **'非常重要。 否则,语言环境更改拦截器将不会拦截更改语言环境的请求,并且最终语言环境也将不会更改。
以下是放置在login.jsp文件中的语言环境更改链接。
<a href="<%=request.getContextPath()%>/doChangeLocale?locale=en">English</a>
<a href="<%=request.getContextPath()%>/doChangeLocale?locale=de">German</a>
<a href="<%=request.getContextPath()%>/doChangeLocale?locale=es">Spanish</a>
<a href="<%=request.getContextPath()%>/doChangeLocale?locale=zh">Chinese</a>

希望这对您有帮助。

参考: Spring3国际化和本地化–并非来自“ Hello World”,而是来自JCG合作伙伴 Semika loku kaluge(来自Code Box博客)的“实用” 。


翻译自: https://www.javacodegeeks.com/2012/07/spring-3-internationalization-and.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

h3c交换机 查看二层交换机端口ip_【分享】项目中如何选到称心如意的交换机?...

项目中如何选择交换机&#xff1f;这七个步骤不能少如何选择交换机&#xff1f;如何根据项目确定网络结构&#xff1f;我们在做大部分项目都有这样的疑问&#xff0c;交换机做为弱电中最常用的设备之一&#xff0c;关于他的使用与选择&#xff0c;不得不知&#xff0c;本期我们…

SSH中一些典型的问题

struts2 1-1&#xff1a;为什么每次请求都要创建一个Action对象&#xff1f; 是出于对线程安全的考虑&#xff0c;每个request都不会相互影响 1-2&#xff1a;ModelDriven拦截器的配置中refreshModelBeforeResult解决了什么问题&#xff1f; 先把旧的model对象从ValueStack…

为什么计算机连接不上打印机,为什么电脑连接打印机后却没反应

2013-12-12我的笔记本怎么连接不了打印机 显示是这样的好&#xff1a;以下方法供您参考&#xff1a;看一下您的系统服务中这两个(最上面 和最下面的是不是没启用)总之是您的局域网连接没有连接上&#xff0c;要不在网上邻居里您会看到其他的机器的&#xff0c;这是搜到的解决的…

JavaFX 2.0布局窗格– BorderPane

BorderPane非常适合开发更复杂的布局。 通常&#xff0c; BorderPane提供五个不同的区域&#xff1a;顶部&#xff0c;右侧&#xff0c;底部&#xff0c;左侧和中央。 您可以通过调用setTop/setBottom/set…方法将Node设置到每个区域。 这种方法使开发“类似于网站”的应用程序…

页面排版简单样式

页面排版简单样式demo <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml" xml:lang"zh-cn"> &l…

JavaWeb基础(jsp初识)

jsp, java server page jsp页面是在服务器上运行的一个页面 动态网页 与后台有数据交互的页面 与其他语言的区别: jsp 使用java语言进行开发, 安全性高, 适合大型项目, 企业级的文本应用分布式项目, 服务器集群, hadoop asp.net 使用c#, .Net平台, 简单易用, 因为不开源, 所以安…

nao机器人拆解_一些机器人硬件网站

以前收集过一些网站&#xff0c;偏机器人机械结构、硬件、参数(也有模拟或算法)。在 https://www.zhihu.com/question/19826366 也夹杂着一些网址&#xff0c;但是有些网址没有深入的内容&#xff0c;排版也不好&#xff0c;所以 在这里编辑成一个列表&#xff0c;方便归档。欢…

心电图是模拟计算机吗,心电图仪

心电图仪是由威廉爱因托芬(W. Einthoven,1860-1927)发明的。 什么是心电图仪(机)M311986 心电图仪能将心脏活动时心肌激动产生的生物电信号(心电信号)自动记录下来&#xff0c;为临床诊断和科研常用的医疗电子仪器。国内一般按照记录器输出道数划分为&#xff1a;单道、三道、六…

从Java 8启动项目拼图?

在马克雷因霍尔德 &#xff08; Mark Reinhold &#xff09;在他的《 项目拼图&#xff1a;火车晚点 》一文中提出“将项目拼图推迟到Java 9的下一个发行版中”。 他解释了这样做的原因&#xff1a;“仍然存在一些重大的技术挑战”&#xff0c;并且“没有足够的时间来进行广泛的…

ChannelOption用到的socket的标准参数

ChannelOption.SO_BACKLOG, 1024 BACKLOG用于构造服务端套接字ServerSocket对象&#xff0c;标识当服务器请求处理线程全满时&#xff0c;用于临时存放已完成三次握手的请求的队列的最大长度。如果未设置或所设置的值小于1&#xff0c;Java将使用默认值50。 ChannelOption.SO_K…

cbrt c语音_isgraph - [ C语言中文开发手册 ] - 在线原生手册 - php中文网

在头文件中定义int isgraph(int ch);检查给定字符是否具有图形表示形式&#xff0c;即它是数字(0123456789)&#xff0c;大写字母(ABCDEFGHIJKLMNOPQRSTUVWXYZ)&#xff0c;小写字母(abcdefghijklmnopqrstuvwxyz)或标点符号(!"#$%&()*,-./:;<>?[\]^_{|}~)或特定…

计算机的内存和cpu,内存与CPU二者之间的关系_Intel服务器CPU_服务器产业-中关村在线...

“在一起&#xff0c;在一起”&#xff0c;相信这也是很多人希望的结果&#xff0c;无论是从技术角度&#xff0c;还是从空间角度&#xff0c;似乎二者都有着很多理由被放在一起完成任务。但是&#xff0c;二者为何一直没有“在一起”呢&#xff1f;也许这句歌词可以回答原因&a…

JUnit,Logback,带有Maven 3的Maven

在本系列中&#xff0c;我们已经学习了建立基本的Spring MVC应用程序并学习了如何在Spring MVC中处理表单 。 现在该讨论更多涉及的主题了。 但是&#xff0c;在我们涉足更深的领域之前&#xff0c;让我们先进行一些基础设置。 单元测试 我不是TDD传播者。 我在那里说了。 我从…

Gradle中的buildScript,gradle wrapper,dependencies等一些基础知识

就想收藏一篇好文&#xff0c;哈哈&#xff0c;无他 Gradle中的buildScript代码块 - 黄博文 然后记录一些gradle的基础知识&#xff1a; 1.gradle wrapper就是对gradle的封装&#xff0c;可以理解为项目内部内置了gradle 2.dependencies的参数 上官方参数表https://docs.gradle…

phonegap工程中修改app的名字

针对phonegap比较高的版本&#xff0c;我的是6.4.0。 在phonegap工程中&#xff0c;当添加了iOS和android平台或多个平台后&#xff0c;工程进行了开发&#xff0c;然后觉得app的名字想修改一下&#xff08;比如在手机上显示的app名字&#xff0c;或者通过ipa导入安装或者apk包…

ac ap方案 华为_华为无线_AC+AP小型无线网络配置实验_v1

【如果在实验中有什么疑问&#xff0c;欢迎关注微信公众号“IT后院”给我留言&#xff0c;我会抽空回答你的问题】华为无线-ACAP小型无线网络配置实验_v1网络结构图&#xff1a;步骤一&#xff1a;配置网络连通性SW:interface Vlanif100ip address 192.168.0.1 255.255.255.0in…

css类选择器或逻辑,深入理解CSS中选择器的逻辑处理

在过去的很长一段时间中&#xff0c;我们都说 CSS 是不带有任何逻辑的&#xff0c;意思是在 CSS 中没有控制流&#xff0c;也没有某种类似于其他编程语言的方式来组织 CSS。CSS 天生缺乏逻辑性的问题导致了预处理器的出现。然而业界却对 CSS 预处理器褒贬不一&#xff0c;支持预…

JSF基于事件的交流:新派方法

在上一篇文章中 &#xff0c;我们学习了基于Observer / Event Listener和Mediator模式的基于事件的通信。 由于它们的缺点&#xff0c;我想展示基于事件的通信的更有效方法。 我们将从Google Guava EventBus开始&#xff0c;以CDI &#xff08;Java EE平台的上下文和依赖注入&a…

菜鸟之路-浅谈设计模式之单例设计模式

单例设计模式 定义&#xff1a;确保一个类仅仅有一个实例&#xff0c;并且自行实例化并向整个系统提供这个实例。单例模式是一种经常使用的软件设计模式。在它的核心结构中仅仅包括一个被称为单例的特殊类。通过单例模式能够保证系统中一个类仅仅有一个实例并且该实例易于外界訪…

python 32bit数据结构_python实现bitmap数据结构详解

bitmap是很常见的算法设计&#xff0c;例如用以Bloom Filter中&#xff1b;用以无反复整数金额的排列这些。bitmap一般根据数组来完成&#xff0c;数组中每一个原素能够当做是一系列二进制数&#xff0c;全部元素组成更高的二进制结合。针对Python而言&#xff0c;整数金额种类…