Spring MVC使用SessionLocaleResolver实现用户自定义切换语言实例

news2024/9/24 15:25:42

在许多成熟的商业软件系统中可以让用户自由切换语言,而不是修改浏览器的语言设置。一旦用户选择了自己需要使用的语言环境,整个系统的语言环境将一直是这种语言环境。

Spring MVC 也可以允许用户自行选择程序语言。本章通过 Web 应用 springMVCDemo09 演示用户自定义切换语言,在该应用中使用 SessionLocaleResolver 实现国际化,具体步骤如下:

1)创建应用

创建应用 springMVCDemo09,并导入 Spring MVC 相关的 JAR 包。

2)创建国际化资源文件

在 WEB-INF/resource 目录下创建中英文资源文件 messages_en_US.properties 和 messages_zh_CN.properties。

messages_en_US.properties 的内容如下:

  1. first=first
  2. second=second
  3. third={0} third{1}
  4. language.en=English
  5. language.cn=Chinese

messages_zh_CN.properties 的内容如下:

  1. first=\u7B2C\u4E00\u9875
  2. second=\u7B2C\u4E8C\u9875
  3. third={0} \u7B2C\u4E09\u9875 {1}
  4. language.cn=\u4E2D\u6587
  5. language.en=\u82F1\u6587

3)创建视图 JSP 文件

在 WEB-INF/jsp 目录下创建 3 个 JSP 文件,即 first.jsp、second.jsp 和 third.jsp。

first.jsp 的代码如下:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@taglib prefix="spring" uri="http://www.springframework.org/tags"%>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>Insert title here</title>
  9. </head>
  10. <body>
  11. <a href="${pageContext.request.contextPath }/i18nTest?locale=zh_ CN">
  12. <spring:message code="language.cn" /> </a> --
  13. <a href="${pageContext.request.contextPath }/i18nTest?locale=en_US">
  14. <spring:message code="language.en" /> </a>
  15. <br>
  16. <br>
  17. <spring:message code="first" />
  18. <br>
  19. <br>
  20. <a href="${pageContext.request.contextPath }/my/second">
  21. <spring:message code="second" /> </a>
  22. </body>
  23. </html>

second.jsp 的代码如下:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@taglib prefix="spring" uri="http://www.springframework.org/tags"%>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>Insert title here</title>
  9. </head>
  10. <body>
  11. <spring:message code="second"/><br><br>
  12. <a href="${pageContext.request.contextPath }/my/third">
  13. <spring:message code="third" arguments="888,999"/>
  14. </a>
  15. </body>
  16. </html>

third.jsp 的代码如下:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@taglib prefix="spring" uri="http://www.springframework.org/tags"%>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>Insert title here</title>
  9. </head>
  10. <body>
  11. <spring:message code="third" arguments="888,999" />
  12. <br>
  13. <br>
  14. <a href="${pageContext.request.contextPath }/my/first">
  15. <spring:message code="first" />
  16. </a>
  17. </body>
  18. </html>

4)创建控制器类

该应用有两个控制器类,一个是 I18NTestController 处理语言种类选择请求,一个是 MyController 进行页面导航。在 src 目录中创建一个名为 controller 的包,并在该包中创建这两个控制器类。

I18NTestController.java 的代码如下:

  1. package controller;
  2. import java.util.Locale;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. @Controller
  5. public class I18NTestController {
  6. @RequestMapping("/i18nTest")
  7. /**
  8. * locale接收请求参数locale值,并存储到session中
  9. */
  10. public String first(Locale locale) {
  11. return "first";
  12. }
  13. }

MyController 的代码如下:

  1. package controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. @Controller
  5. @RequestMapping("/my")
  6. public class MyController {
  7. @RequestMapping("/first")
  8. public String first() {
  9. return "first";
  10. }
  11. @RequestMapping("/second")
  12. public String second() {
  13. return "second";
  14. }
  15. @RequestMapping("/third")
  16. public String third() {
  17. return "third";
  18. }
  19. }

5)创建配置文件

在 WEB-INF 目录下创建配置文件 springmvc-servlet.xml 和 web.xml。web.xml 的代码与 Spring MVC 简单应用的相同,这里不再赘述。springmvc-servlet.xml 的代码如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:mvc="http://www.springframework.org/schema/mvc"
  5. xmlns:p="http://www.springframework.org/schema/p"
  6. xmlns:context="http://www.springframework.org/schema/context"
  7. xsi:schemaLocation="
  8. http://www.springframework.org/schema/beans
  9. http://www.springframework.org/schema/beans/spring-beans.xsd
  10. http://www.springframework.org/schema/context
  11. http://www.springframework.org/schema/context/spring-context.xsd
  12. http://www.springframework.org/schema/mvc
  13. http://www.springframework.org/schema/mvc/spring-mvc.xsd">
  14. <!-- 使用扫描机制扫描包 -->
  15. <context:component-scan base-package="controller" />
  16. <!-- 配置视图解析器 -->
  17. <bean
  18. class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  19. <property name="prefix" value="/WEB-INF/jsp/" />
  20. <property name="suffix" value=".jsp" />
  21. </bean>
  22. <!-- 国际化操作拦截器,如果采用基于Session/Cookie则必须配置 -->
  23. <mvc:interceptors>
  24. <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
  25. </mvc:interceptors>
  26. <!-- 存储区域设置信息 -->
  27. <bean id="localeResolver"
  28. class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
  29. <property name="defaultLocale" value="zh_CN"></property>
  30. </bean>
  31. <!-- 加载国际化资源文件 -->
  32. <bean id="messageSource"
  33. class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
  34. <!-- <property name="basename" value="classpath:messages" /> -->
  35. <property name="basename" value="/WEB-INF/resource/messages" />
  36. </bean>
  37. </beans>

6)发布应用并测试

首先将 springMVCDemo09 应用发布到 Tomcat 服务器并启动 Tomcat 服务器,然后通过地址“http://localhost:8080/springMVCDemo08/my/first”测试第一个页面,运行结果如图 1 所示。


图 1 中文环境下 first.jsp 的运行结果

单击图 1 中的“第二页”超链接,打开 second.jsp 页面,运行结果如图 2 所示。


图 2 中文环境下second.jsp的运行结果

 

单击图 2 中的“第三页”超链接,打开 third.jsp 页面,运行结果如图 3 所示。


图 3 中文环境下third.jsp的运行结果

单击图 1 中的“英文”超链接,打开英文环境下的 first.jsp 页面,运行结果如图 4 所示。


图 4 英文环境下 first.jsp 的运行结果

单击图 4 中的 second 超链接,打开英文环境下的 second.jsp 页面,运行结果如图 5 所示。


图 5 英文环境下 second.jsp 的运行结果

单击图 5 中的 third 超链接,打开英文环境下的 third.jsp 页面,运行结果如图 6 所示。


图 6 英文环境下 third.jsp 的运行结果

 

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

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

相关文章

Linux安装使用Minio

目录简介安装方式1(推荐)安装方式2使用简介 需要一个靠谱的文件管理系统&#xff0c;所以想到了minio。在此记录过程。使用树莓派搭建。Linux下载不同的包即可。 官网地址&#xff1a;https://www.minio.org.cn/ 官方下载地址&#xff1a;https://dl.min.io/server/minio/rele…

FFmpeg二次开发

本文主要讲解 FFmpeg 的二次开发&#xff0c;ffmpeg.exe 的命令行功能特别强大&#xff0c;很多需求都能直接用命令行实现&#xff0c;但是总有一些需求用 命令行实现不太好做。 而你实现那些特殊需求&#xff0c;通常需要把 ffmpeg.exe 里面的某部分代码抄过来&#xff0c;本…

Android databinding之RecycleView使用与讲解(二)

一 、介绍 通过上一篇databinding接入&#xff0c;我们已大概了解到databinding接入的流程和数据的简单绑定。 如果你刚看这边&#xff0c;并不了解databinding的使用&#xff0c;可以查看&#xff1a;Android databinding的接入使用与详解(一) Activity和fragment的数据绑定…

Pr:导出设置之字幕

如果序列中包含字幕轨道&#xff0c;则导出设置中的字幕 CAPTIONS模块将提供用于处理字幕信息的选项。如果源序列不包含任何字幕轨道&#xff0c;此模块将被禁用。导出选项Export Options选择导出活动字幕轨道的方式。--无None若选择此项&#xff0c;则不以任何形式导出字幕。-…

flink状态与容错-1.13

1. 版本说明 本文档内容基于 flink-1.13.x&#xff0c;其他版本的整理&#xff0c;请查看本人博客的 flink 专栏其他文章。 2. Checkpoint 2.1. 概述 Checkpoint 使 Flink 的状态具有良好的容错性&#xff0c;通过 checkpoint 机制&#xff0c;Flink 可以对作业的状态和计算…

【Java实战】这样写代码与Bug说拜拜

目录 一、前言 二、OOP 规约 1.【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法&#xff0c;无谓增加编译器解析成本&#xff0c;直接用类名来访问即可。 2.【强制】所有的覆写方法&#xff0c;必须加 Override 注解。 3.【强制】相同参数类型&#xff0c;相…

手把手教你成为荣耀开发者:账户结算操作指南

荣耀开发者服务平台是荣耀面向开发者的统一生态入口&#xff0c;通过聚合周边内外部系统&#xff0c;分全球多站点部署&#xff0c;为全球开发者提供业务全生命周期的商业支撑服务&#xff0c;拥有应用分发、智慧服务、开放能力、HONOR Connect等众多业务等您来合作。 账户结算…

408 考研《操作系统》第一章第二节:操作系统的发展与分类和操作系统的运行机制与体系结构

文章目录教程1. 操作系统的发展与分类1.1 手工操作阶段1.2 批处理阶段1.2.1 单道批处理系统1.2.2 多道批处理系统1.3 分时操作系统1.4 实时操作系统1.5 其他几种操作系统1.6 总结教程 操作系统的发展与分类https://www.bilibili.com/video/BV1YE411D7nH/?p4&share_source…

本周推荐 | mysql中业务系统可借鉴的设计

推荐语&#xff1a;学习优秀的开源系统来优化我们业务的架构设计&#xff0c;这是我们作为业务开发的必修课&#xff0c;这篇文章从经典的mysql系统原理引申到业务系统设计思考&#xff0c;让人耳目一新&#xff0c;值得我们学习。——大淘宝技术工程师 默达如果一个系统能存活…

HTML+CSS鲜花静态网页设计

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Win11的两个实用技巧系列之如何关闭文字热门搜索、任务栏上的应用

目录 in10和Win11 22H2如何关闭文字热门搜索? Win11 22H2关闭文字热门搜索 Win10 22H2关闭文字热门搜索 Win11中如何不用鼠标打开已固定在任务栏上的应用 鼠标的操作方式如下&#xff1a; 点击拿去 in10和Win11 22H2如何关闭文字热门搜索? 不管是Win10还是Win11&#…

R语言GARCH-DCC模型和DCC(MVT)建模估计

这个简短的演示说明了使用r软件包的DCC模型及其方法的使用&#xff0c;尤其是在存在MVT分布形状参数的情况下进行2级DCC估计的另一种方法。 最近我们被客户要求撰写关于GARCH-DCC的研究报告&#xff0c;包括一些图形和统计输出。 相关视频&#xff1a;时间序列分析&#xff…

[附源码]计算机毕业设计springboot小型银行管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

用HTML、CSS技术设计的个人网页与实现制作(web前端期末大作业)

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

“极致成本向左,本质安全向右”-谈谈锂电池储能系统的发展趋势

极致成本 or 本质安全? 1 快速增长的电化学储能电站 根据CNESA全球储能项目库的不完全统计,截至 2021 年底,全球已投运电力储能项目累计装机规模 209.4GW, 同比增长 9%。其中,抽水蓄能的累计装机规模占比首次低于 90%,比去年同期下降4.1个百分点;新型储能的累计装机规模…

Windows性能监视器使用说明

如何使用性能计数器 进入性能计数器 方式一&#xff1a; 命令行 perfmon 方式二&#xff1a;图形化操作 控制面板→系统与安全→管理工具→性能监视器 创建计数器收集器 创建收集器 在采集数据前&#xff0c;需要做好相应的收集器创建。 监视工具性能监视器&#xf…

Global Mapper将0-255的色彩映射表导出为RGB波段

当我们拿到0-255的色彩映射表栅格文件的时候&#xff0c;可能不太好用&#xff0c;需要导出为RGB波段或者其他波段形式的&#xff0c;在Global Mapper中可以做到。 打开0-255色彩映射表的栅格文件&#xff0c;在Arcmap中可以看到是这样的&#xff1a; 在Global Mapper中操作…

android灰色滤镜布局

android灰色滤镜布局 h5网页灰色滤镜 只要给 html 加下列css 样式就可以了 html {filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale1);-webkit-filter: grayscale(100%); }Android组件灰色滤镜 ColorMartrix类&#xff0c;这个类对外提供了很多 API&#x…

重点问题!CPU利用率过高排查思路|原创

本文讲解了重点面试问题CPU利用率高如何排查和解决。点击上方“后端开发技术”&#xff0c;选择“设为星标” &#xff0c;优质资源及时送达CPU利用率高怎么办&#xff1f;如何排查和解决这是一个常见的面试问题&#xff0c;也是线上常遇到的问题之一。遇到线上服务器异常告警&…

【Win10】如何关闭Windows10自动更新

如何关闭Windows10自动更新 零、问题 Windows10老是自动更新&#xff0c;有时候第二天起来又得重新打开软件&#xff0c;真麻烦&#xff0c;Win10自动更新的时候还有点卡。 如何关闭&#xff1f; 经过上网查询&#xff0c;发现完全关闭难度比较大&#xff0c;但是我们可以选…