SpringMVC+Freemarker+jQuery实现多语言(国际化)切换

2023-11-09

一、spring启动配置文件修改

其中<value>message/messages</value>指定的properties资源文件名,

文件在src/main/resources根目录的message文件夹下

    <!-- 资源文件绑定器 -->  
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basenames">
	    <list>
	        <value>message/messages</value>
	    </list>
	</property>
    </bean>
	
    <!-- 国际化操作 拦截器 必需配置,可以和其它国际化方式通用 --> 
    <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
    
    <!-- 基于Session的国际化配置 --> 
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
    </bean> 

除了写在xml配置文件中,也可以使用@Configuration注解的形式

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

/**
 * @author 
 * @date 2019-12-27 16:38
 * @description
 */
@Configuration
public class LanguageConfig {

    @Bean(name = "messageSource")
    public ResourceBundleMessageSource messageSource(){
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasenames("message/messages");
        return messageSource;
    }

    @Bean(name = "localeChangeInterceptor")
    public LocaleChangeInterceptor localeChangeInterceptor(){
        return new LocaleChangeInterceptor();
    }

    @Bean(name = "localeResolver")
    public SessionLocaleResolver localeResolver(){
        return new SessionLocaleResolver();
    }

}

二、添加依赖文件

如果是使用eclipse开发环境的

找到maven包spring-webmvc-4.2.6.RELEASE.jar路径下的spring.ftl文件

如果是使用IDEA开发环境的

找到Maven:org.springframework:spring-webmvc:4.2.6.RELEASE下面的spring.ftl文件

把该文件拷贝放在页面的文件根目录下

三、添加资源文件

添加资源文件messages.properties, messages_en_US.properties, messages_zh_CN.properties,
如需要支持多种国际化语言,只需添加对应的资源文件,
messages.properties配置文件作用是当找不到其他有关带有messages的文件时默认读取这个配置文件的信息

注意路径和上面配置的一致,在classpath的src/main/resources根目录的message文件夹下:

其中Resource Bundle 'messages'是IDEA自动生成的,不用理会,知道三个文件都在message目录下就可以

Messages.properties配置文件作用是当找不到其他有关带有messages的文件时默认读取这个配置文件的信息

messages_en_US.properties是英文的配置文件

messages_zh_CN.properties为中文的配置文件,字符串需为ASCII编码

中文与英文的配置文件当中的键位必须一致,切换时才能读取到该键位信息,如果配置当中没有该键位名称,而页面上却填写了,进入该页面上时会报错显示不了

配置文件中的键位名称可以根据自己项目的需求去定

四、数据库菜单列表修改

由于菜单列表是从数据库表当中获取数据显示,所以数据库当中添加了一张英文菜单列表,一张中文菜单列表

 

当前端页面切换语言的时候,后端把查询语句修改成获取对应的菜单就行了

五、后端代码修改

在获取语言菜单进行重定向进入主页面时,获取的是什么语言的菜单列表,Locale的值就设置什么样的语言

前两句代码是Locale设置语言,Locale locale = new Locale("en", "US")该代码设置为英文

      Locale locale = new Locale("en", "US");
      request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale);
      response.sendRedirect("/index/home");

 

在controller控制层注入MessageSource类,该类实现国际化i18n,找到对应的资源文件

 

    @Autowired
    private MessageSource messageSource;

String userManagement = messageSource.getMessage("user.userManagement", null, locale);

其中像user.userManagement这些为资源文件中的键位

六、前端页面

可以在web页面的头部.ftl文件中引入spring.ftl文件,这个根据自己的项目去操作,页面布局一般头部为所有页面共用部分

<#import "spring.ftl" as spring/>

写上js代码切换时使用ajax请求发送到后端进行切换配置文件和调用不同的数据库菜单表

<script type="text/javascript">
	$(function() {
		$(document).delegate(".language", "click", function() {
			$(this).addClass("active").siblings().removeClass("active");
			var html = $(this).find('a').html();
			$("#language").html(html);
			var data = $(this).find('input').val();
			$.ajax({
				type : "POST",
				data : {
					"new_lang" : data
				},
				url : "/index/changeLanguage",
				dataType : "json",
				success : function(json) {
					window.location.reload();
				}
			})
		});
	}); 
</script>

 

页面上需要切换显示中英文的地方改成配置文件中的键位,例如以下写法:

 

<@spring.message "language"/>

如页面上的标签内的姓名,原写法:

<label for="userName" class="col-sm-2 control-label">姓名</label>

全部修改为:

<label for="userName" class="col-sm-2 control-label"><@spring.message "user.userName"/></label>

user.userName是资源文件中的键位,每个键位必须唯一

中文配置文件与英文配置文件的键位必须一致

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringMVC+Freemarker+jQuery实现多语言(国际化)切换 的相关文章

随机推荐

  • 《深度学习中的字符识别在工业视觉中的实际应用》

    最近在公司做了一个构建卷积神经网络来识别字符的项目 编程环境为pycharm2019 使用的是OpenCv Pytorch进行项目的实现 因此想总结和归纳一下方法 本次的字符识别项目可以分为以下几个步骤 一 图像处理和字符分割 二 创建自己
  • Linux文件权限学习笔记

    文件权限共10个字符 第一个字符表示该文件是 文件夹 或 文件 如果是字符 d 则表示该文件是文件夹 如果是字符 则表示是文件 后九个字符 三个一组 共三组 分别表示 所有者权限 所属组权限 其他人的权限 固定位置固定字符 rwx 分别表示
  • Cpp学习——list的模拟实现

    目录 一 实现list所需要包含的三个类 二 三个类的实现 1 list node 2 list类 3 iterator list类 三 功能实现 1 list类里的push back 2 iterator类里的运算符重载 3 list类里
  • Centos7.5配置iptables防火墙-网络系统管理赛项

    废话不多说 直接上真题 这是2021年6月国赛Linux模块的IspSrv的工作任务 唯一不同的是我们要拿centos7 5来做 准备工作 一台安装centos7 5系统的虚拟机 需要提前配置好yum源以及安装ssh服务 这里ssh工具使用
  • 毕业设计 - 基于stm32的示波器设计

    文章目录 1 简介 2 主要器件 3 实现效果 4 设计原理 5 部分实现代码 6 最后 1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 基于stm32的示波器设计 大家可用于 课程设计 或 毕业设计 2 主要器件 3 实现效
  • 别了 摩托罗拉

    别了 摩托罗拉 仅仅在10年前 摩托罗拉还一直是引领尖端技术和卓越典范的代表 享有着全球最受尊敬公司之一的尊崇地位 它一度前无古人地每隔10年便开创一个工业 有的10年还开创两个 但当这些工业兴盛起来 进入寡头竞争的成熟阶段之后 它却遭遇一
  • Postman工具——环境变量与全局变量

    转载请注明出处 http blog csdn net water 0815 article details 53326990 本文同步发表于我的微信公众号和简书社区 微信公众号 惜福 xifu forever 扫一扫文章底部的二维码即可关注
  • 使用popen实现system函数功能

    之前写Linux应用程序的时候 最喜欢使用system命令了 后来发现这个命令使用需要很谨慎 之前使用该命令来进行MD5校验 通过返回值来判断校验是否成功不够严谨 有时候因为system调用MD5sum文件不存在导致的错误 应用并不能够直观
  • LeetCode 200. 岛屿数量(C++)

    题目地址 力扣 思路 我们从题目中可以得知 孤立的岛屿旁边全是海 假设岛屿范围内每一个 1 是岛屿的一部分 那么我们从岛屿的任意一部分登岛 走遍岛屿的每一块土地 就能确定岛屿的大小和范围 为了找遍所有的岛屿 我们还需要把走过的土地都标记为0
  • 音频常见问题总结

    音频文件在播放时出现断断续续或类似 爆破 Pop Click 杂音的现象 称之为 Xrun 可以是 underrun 也可以是 overrun 原因 通常来说 出现 Xrun 问题时原因可能是以下几个之一 1 Linux CFS 调度器导致
  • el-select下拉框多选远程搜索反显

  • 若依框架前端打包踩坑

    官网 http www ruoyi vip 目录 一 下载并运行项目 二 关于 若依 接口地址配置 2 1 若依的跨域代理介绍 2 2 配置跨域代理 调用后台接口 2 2 1 配置 后台 ip 地址 2 2 2 页面报 系统接口404 错误
  • 创宇技能表_[OPEN]知道创宇研发技能表

    HI 今天夜里 我们开放知道创宇的研发技能表 这个Checklist里大体总结了在知道创宇做研发工作所需具备的技能 包括我们的安全研究员 这份技能表给出了许多的 点 而 面 需要靠自己 否则如何证明自己具备牛逼的学习能力 技能都样样掌握好的
  • base64图片互转

    String a base substring base indexOf 1 GenerateImage a D 1 jpg public static void main String args throws IOException St
  • 使用Nginx发布Vue应用

    使用Nginx发布Vue应用 本教程将指导你如何使用Nginx来发布Vue应用 Nginx是一个高性能的开源Web服务器 可以用于部署静态网页 反向代理和负载均衡等 Vue是一个流行的JavaScript框架 用于构建现代化的单页面应用 步
  • [人工智能-综述-1]:人工智能系统架构

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 人工智能 综述 1 人工智能系统架构 文火冰糖 王文兵 的博客 CSDN博客 人工智能系统的技术架构 目录 第1部分 什么是人工智能 1 1
  • VLC Activex控件(VideoLAN.VLCPlugin.1 VideoLAN.VLCPlugin.2)的所有方法 属性及使用 在一个老外的网站上找到的...

    无意中在老外的网站上发现了关于VideoLAN VLCPlugin 1和VideoLAN VLCPlugin 2所有方法和属性 公布出来 以免大家浪费时间去寻找 注意你使用的VLC的版本 If you open a link to a vi
  • 构建配置ESP8266 MQTT服务器

    我们将了解ESP8266模块如何通过消息队列遥测传输 MQTT 相互通信 MQTT术语 已经使用了诸如中央代理 主题 发布 订阅之类的术语 因此现在该用类似于邮局的方式来解释它们了 消息是报纸或杂志 代理 这是一个接收客户端消息的软件应用程
  • 数字保留有效数字_分析化学有效数字问题

    一 有效数字位数 1 非整数数据 有效数字为从左端开始首个非零数字算起 至右端最后一个数字 例如 0 0518有3位有效数字 0 05180有4位有效数字 同时注意 在用科学记数法表示数字时 有效数字位数不变 例如 0 05180改写为 2
  • SpringMVC+Freemarker+jQuery实现多语言(国际化)切换

    一 spring启动配置文件修改 其中