Spring Boot 页面国际化

internationalization详解

	国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式。它要求从产品中抽离所有地域语言,国家/地区和文化相关的元素。换言之,应用程序的功能和代码设计考虑在不同地区运行的需要,其代码简化了不同本地版本的生产。开发这样的程序的过程,就称为国际化。

中文语言页面
在这里插入图片描述
英文语言页面
在这里插入图片描述
浏览器切换中文,英文
在这里插入图片描述

启动类Application添加额外注解

package com.jege.spring.boot;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.PropertySources;/*** spring boot 启动类*/@SpringBootApplication
@PropertySources(value = { @PropertySource("classpath:messages.properties") })
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}

messages.properties

同messages_en_US.properties

title=User Management
id=Id
name=Name
age=Age
userinfo=UserInfoq=Keyword
add=Add
edit=Edit
remove=Remove
reload=Reload
search=Search
save=Save
cancel=CancelerrorMessage=Error Message
addUser=Add User
editUser=Edit UseroperationMessage=Operation Message
editSelete=Please select a row of data in the modification
deleteSelete=Please select a row of data in the delete

messages_zh_CN.properties

title=\u7528\u6237\u7BA1\u7406
id=\u7F16\u53F7
name=\u4E0B\u9762
age=\u5E74\u9F84
userinfo=\u7528\u6237\u4FE1\u606Fq=\u5173\u952E\u5B57
add=\u6DFB\u52A0
edit=\u7F16\u8F91
remove=\u5220\u9664
reload=\u5237\u65B0
search=\u641C\u7D22
save=\u4FDD\u5B58
cancel=\u53D6\u6D88errorMessage=\u9519\u8BEF\u63D0\u793A
addUser=\u6DFB\u52A0\u7528\u6237
editUser=\u7F16\u8F91\u7528\u6237
operationMessage=\u64CD\u4F5C\u63D0\u793A
editSelete=\u8BF7\u5148\u9009\u4E2D\u4E00\u884C\u6570\u636E\uFF0C\u5728\u4FEE\u6539\uFF01\uFF01\uFF01
deleteSelete=\u8BF7\u5148\u9009\u4E2D\u4E00\u884C\u6570\u636E\uFF0C\u5728\u4FEE\u6539\uFF01\uFF01\uFF01

user.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!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><spring:message code="title"/></title>
<%@include file="/WEB-INF/page/common.jsp"%>
<script type="text/javascript">// 页面加载完毕之后才能写jQuery的代码$(function() {// 声明并缓存easyui组件var userDatagrid = $("#userDatagrid");var userDialog = $("#userDialog");var userForm = $("#userForm");var userSearchForm = $("#userSearchForm");// 表单的添加方法userForm.form({url : "/user/save",onSubmit : function() {// 在表单提交前,做一下验证return userForm.form("validate");},//data是后台save方法返回的json字符串success : function(data) {// 需要自己把字符串转变成json对象,easyiui没有提供转换data = $.parseJSON(data);// 判断保存是否成功if (data.meta.success) {// 成功就关掉对话框userDialog.dialog("close");//重新加载最新的数据userDatagrid.datagrid("reload");} else {$.messager.alert('<spring:message code="errorMessage"/>', data.meta.message, 'error');}}});// 创建操作data-url的json对象,把页面所有linkbutton组件的操作都统一添加到此对象上面var urlObjectUser = {addUser : function() {// 清空对话框里面的表单内容,防止原来的数据有缓存userForm.form("clear");// 打开对话框,修改标题,然后居中userDialog.dialog("open").dialog("setTitle", '<spring:message code="addUser"/>');},updateUser : function() {// 获取选中行数据var selectedRow = userDatagrid.datagrid("getSelected");// 判断是否选中行if (!selectedRow) {$.messager.alert('<spring:message code="operationMessage"/>', '<spring:message code="editSelete"/>', "info");return;}// 清空对话框里面的表单内容userForm.form("clear");//修改的时候才查询上级null数据$('#parentCombotree').combotree({url : '${ctx}/user/getTreeByParent'});// 使用easyui的form组件load方法,只要是相同的名称,会自动回显数据userForm.form("load", selectedRow);// 打开对话框userDialog.dialog("open").dialog("setTitle", '<spring:message code="editUser"/>');},removeUser : function() {// 获取选中行数据var row = userDatagrid.datagrid("getSelected");// 判断是否选中行if (!row) {$.messager.alert('<spring:message code="operationMessage"/>', '<spring:message code="deleteSelete"/>', "info");return;}$.get("/user/delete?id=" + row.id, function(data) {if (data.meta.success) {//删除成功userDatagrid.datagrid("reload");} else {$.messager.alert('<spring:message code="errorMessage"/>', data.meta.message, 'error');}}, 'json');},reloadUser : function() {//调用重新加载数据的方法userDatagrid.datagrid("reload");},saveUser : function() {//提交表单userForm.submit();},cancelUser : function() {//关闭对话框userDialog.dialog("close");},searchUser : function() {//简单搜索userDatagrid.datagrid("load", {q : $("input[name=q]").val()});}};// 对页面所有linkbutton组件,统一监听$("a[data-url]").on("click", function() {// 获取linkbutton的data-url信息 var url = $(this).data("url");//如果此目标方法是存在的并且linkbutton组件没有被禁用,才可以点击if (urlObjectUser[url] && !$(this).linkbutton('options').disabled) {//调用动态的方法urlObjectUser[url]();}});});
</script>
</head>
<body><!-- 数据表格组件 --><table id="userDatagrid" class="easyui-datagrid" url="/user/json" title="<spring:message code='title'/>" fit="true" border="false"fitColumns="true" singleSelect="true" pagination="true" rownumbers="true" toolbar="#userDatagridToolbar"><thead><tr><th data-options="field:'id'"><spring:message code='id'/></th><th data-options="field:'name',width:10"><spring:message code='name'/></th><th data-options="field:'age',width:10"><spring:message code='age'/></th></tr></thead></table><!-- 数据表格组件工具栏 --><div class="easyui-layout" fit="true"><div id="userDatagridToolbar" region="north" border="false"style="border-bottom: 1px solid #ddd; height: 32px; padding: 2px 5px; background: #fafafa;"><div style="float: left;"><a data-url="addUser" href="javascript:void(0)" class="easyui-linkbutton c1" iconCls="icon-add"><spring:message code='add'/></a> <adata-url="updateUser" href="javascript:void(0)" class="easyui-linkbutton c2" iconCls="icon-edit"><spring:message code='edit'/></a> <adata-url="removeUser" href="javascript:void(0)" class="easyui-linkbutton c3" iconCls="icon-remove"><spring:message code='remove'/></a><a data-url="reloadUser" href="javascript:void(0)" class="easyui-linkbutton c4" iconCls="icon-reload"><spring:message code='reload'/></a></div><div style="float: right"><form method="post"><spring:message code='q'/><input name="q" size="10" /> <a data-url="searchUser" href="javascript:void(0)"class="easyui-linkbutton c5" iconCls="icon-search"><spring:message code='search'/></a></form></div></div></div><!-- 添加/编辑用户对话框 --><div id="userDialog" class="easyui-dialog" style="width: 360px; height: 260px; padding: 10px 20px"title="管理用户对话框" data-options="closed:true,modal:true,buttons:'#userDialogButtons',resizable:true"><form id="userForm" method="post"><input type="hidden" name="id" /><div class="ftitle"><spring:message code='userinfo'/></div><table align="center"><tr><td><spring:message code='name'/>:</td><td><input class='easyui-validatebox' required="true" type='text' name='name'></input></td></tr><tr><td><spring:message code='age'/>:</td><td><input class='easyui-numberbox' required="true" min="20" max="80" precision="0" type='text'name='age'></input></td></tr></table></form></div><!-- 对话框按钮组件 --><div id="userDialogButtons"><a data-url="saveUser" href="javascript:void(0)" class="easyui-linkbutton c6" iconCls="icon-ok"style="width: 90px"><spring:message code='save'/></a> <a data-url="cancelUser" href="javascript:void(0)" class="easyui-linkbutton c7"iconCls="icon-cancel" style="width: 90px"><spring:message code='cancel'/></a></div>
</body>
</html>

公共jsp页面

<!-- 国际化的js-->
<c:if test="${fn:contains(pageContext.request.locale, 'en')}">
<script type="text/javascript" src="${ctx}/static/easyui/locale/easyui-lang-en.js"></script>
</c:if>
<c:if test="${fn:contains(pageContext.request.locale, 'zh')}">
<script type="text/javascript" src="${ctx}/static/easyui/locale/easyui-lang-zh_CN.js"></script>
</c:if>

如果感觉不错记得点赞哟!!!

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

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

相关文章

唯美计算机语言,唯美精辟的语句

1、当泪水一滴滴的掉落在我的手上&#xff0c;那时竟想为何我非你不可&#xff01;2、原来再美好的承诺&#xff0c;最终还是会被现实打败。3、明明不是陌生人&#xff0c;却装的&#xff0c;比陌生人&#xff0c;还要陌生。4、如果我是个瘦子&#xff0c;伤心时我还可以数数排…

不到30的成本,还不赶紧造起来——盘点软著申请小知识

今年上半年的时候跟着老师做项目&#xff0c;为了学习应付中期报告&#xff0c;就自己写了一个小软件&#xff0c;然后申请了一个软著&#xff0c;至于为啥要头铁的自己上呢&#xff0c;因为想要拿独立著作权&#xff0c;那当然是没有报销的啦~&#xff0c;这里有同学就要问啦&…

Linux系统安装及配置——Centos-7-X86_64-DVD-2009

目录 1.下载 VMware Workstation软件 2.下载 Centos-7-X86_64-DVD-2009.iso 3.安装并配置 3.1打开VMware Workstation&#xff0c;选择创建新的虚拟机 3.2选择自定义&#xff0c;然后下一步 3.3下一步 3.4选择稍后安装操作系统&#xff0c;然后下一步 3.5选择Linux&am…

2018年12月份计算机,CPU天梯图2018年12月最新版 十二月台式电脑CPU性能排行

Helio&#xff0c;大家好&#xff0c;11月再见12月你好&#xff01;欢迎关注IT数码通带来的最新一期桌面CPU天梯图。距离上一次天梯图更新已经过去一个月时间了&#xff0c;伴随着12月份到来&#xff0c;新的天梯图需要进行更新和完善了。接下来“IT数码通”小编为大家带来了CP…

C语言程序的错误和警告

一段C语言代码&#xff0c;在编译、链接和运行的各个阶段都可能会出现问题。编译器只能检查编译和链接阶段出现的问题&#xff0c;而可执行程序已经脱离了编译器&#xff0c;运行阶段出现问题编译器是无能为力的。 如果我们编写的代码正确&#xff0c;运行时会提示没有错误&am…

计算机的集成显卡是什么意思,IGD、PEG、PCI的含义,我的电脑是集成显卡该选哪一项...

请详细介绍IGD&#xff0c;PEG&#xff0c;PCI的含义&#xff0c;我应该为计算机的集成显卡选择其中的一种。 ...请详细说明IGD&#xff0c;PEG&#xff0c;PCI的含义&#xff0c;如果我的计算机是集成显卡&#xff0c;则应该选择IGD&#xff0c;PEG&#xff0c;PCI的含义。展开…

Spring Boot 数据国际化

internationalization详解 国际化&#xff08;internationalization&#xff09;是设计和制造容易适应不同区域要求的产品的一种方式。它要求从产品中抽离所有地域语言&#xff0c;国家/地区和文化相关的元素。换言之&#xff0c;应用程序的功能和代码设计考虑在不同地区运行的…

没有bug队——加贝——Python 练习实例 21,22

21.题目&#xff1a; 猴子吃桃问题&#xff1a;猴子第一天摘下若干个桃子&#xff0c;当即吃了一半&#xff0c;还不瘾&#xff0c;又多吃了一个第二天早上又将剩下的桃子吃掉一半&#xff0c;又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时&…

没有bug队——加贝——Python 练习实例 23,24

23.题目&#xff1a;打印菱形 程序分析&#xff1a;先把图形分成两部分来看待&#xff0c;前四行一个规律&#xff0c;后三行一个规律&#xff0c;利用双重for循环&#xff0c;第一层控制行&#xff0c;第二层控制列。 注&#xff1a;将这个图形看成对称的&#xff0c;前面和后…

Spring Boot 之 itext导出pdf下载

Java操作pdf框架详解 itext是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本&#xff0c;表格&#xff0c;图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。 下载效果演示 po…

从您的计算机移除此产品,解决office提示“此操作只对目前安装的产品有效”的方法...

Office软件是我们所有微软系统预装版本中都会有的一个组件&#xff0c;有的用户在购买电脑之后由于不想使用这个软件等种种原因会选择将这个软件从电脑中卸载。卸载的方法有很多&#xff0c;我们常用的方法就是使用电脑中自带的卸载软件卸载这个程序&#xff0c;还有一种就是使…

没有bug队——加贝——Python 练习实例 25,26

我非常认真的告诉大家今天这是一篇水文&#xff0c;别看了 25.题目&#xff1a; 求12!3!...20!的和。 程序分析&#xff1a;此程序只是把累加变成了累乘。 s 0 l range(1,21) def op(x):r 1for i in range(1,x 1):r * ireturn r s sum(map(op,l)) print (1! 2! 3! …

符江职高计算机教什么,高县符江职高具体地址

摘要&#xff1a;学校地址 :宜宾市高县清福镇学府路22号 公交路线 高县:进入盛兴路&#xff0c;行驶300米-左转&#xff0c;进入朔村路&#xff0c;行驶540米-左转&#xff0c;进入汉胜路&#xff0c;行驶440米-请直走&#xff0c;进入富悦路&#xff0c;行驶200米-请直走&…

MATLAB基础教程(7)——求解定积分和不定积分

目录 定积分的基本概念 什么是定积分&#xff1f; 如何深入的理解定积分&#xff1f; 如何计算定积分? 在matlab中计算定积分。 不定积分 在matlab中计算不定积分 在matlab中计算定积分 本期回顾 定积分的基本概念 什么是定积分&#xff1f; 简而言之&#xff0c;我…

微信公众号中选择时间css,微信公众号到底应该几点推文?

原标题&#xff1a;微信公众号到底应该几点推文&#xff1f;微信公众号到底应该几点推文&#xff1f;早晨上班&#xff0c;中午休息&#xff0c;晚上睡觉前&#xff0c;都是好时间。这些时间别说刚入行的小白知道&#xff0c;就连半只脚没踏进运营门槛的小灰都知道&#xff0c;…

没有bug队——加贝——Python 练习实例 27,28

今天这两题都是递归&#xff0c;如果你看不太明白&#xff0c;可以翻翻之前的&#xff0c;那里介绍的比较明白&#xff0c;嘿嘿&#xff0c;我今天继续水了&#xff0c;拜拜各位&#xff01;&#xff01; 27.题目&#xff1a; 利用递归函数调用方式&#xff0c;将所输入的5个…

MATLAB基础教程(9)——高级积分运算、二重积分

目录 复习定积分&#xff08;单变量&#xff09; 二重积分 今日小结 复习定积分&#xff08;单变量&#xff09; 在之前&#xff0c;先复习一下之前学习的内容。使用matlab求解定积分的步骤大概如下&#xff1a; 定义符号变量&#xff08;syms关键字&#xff09;定义内联函…

服务器怎么存储文件节省空间,超大空间云服务器文件存储

超大空间云服务器文件存储 内容精选换一换本节操作指导您完成Windows操作系统云服务器磁盘空间清理。弹性云服务器匀出一部分磁盘空间来充当内存使用&#xff0c;当内存耗尽时&#xff0c;云服务器可以使用虚拟内存来缓解内存的紧张。但当内存使用率已经非常高时&#xff0c;频…

C语言变量和数据类型

从数据在内存中的存储方式中可以得知 计算机要处理的数据&#xff08;诸如数字、文字、符号、图形、音频、视频等&#xff09;是以二进制的形式存放在内存中的&#xff1b;我们将8个比特&#xff08;Bit&#xff09;称为一个字节&#xff08;Byte&#xff09;&#xff0c;并将字…

MATLAB基础教程(10)——二维中的数据可视化

目录 MATLAB数据可视化 绘图 在同一个figure里面绘制多个图形 本期小结 MATLAB数据可视化 绘图 绘制图形&#xff08;二维&#xff09;一般使用plot函数&#xff0c;这个函数一般能满足很多画图的功能了&#xff0c;比如我们能绘制一个函数图像&#xff1a; 代码如下&…