springboot13 页面国际化(i18n)
员工管理系统
1、首页配置:注意点,所有也免得静态资源都需要使用thymeleaf接管;
2、页面国际化
- 配置i18n文件
- 如果需要在项目中进行按钮自动切换,我们需要自定义一个组件LocaleResolver
- 将自己写的组件配置到spring容器中----@Bean
#{}
3、登录 + 拦截器
4、员工列表展示
提取公共页面
th:fragment=“sidebar”
如果要传递参数,可以直接使用()传参,接收判断即可 列表循环展示 5、添加员工
按钮提交
跳转到添加页面
添加成功
返回首页
6、CRUD搞定
代码整理:https://gitee.com/su_shuwang/SpringBootLearn
13、页面国际化(i18n)
有的时候,我们的网站会去涉及中英文甚至多语言的切换,这时候我们就需要学习国际化了!
13.1、准备工作
先在IDEA中统一设置properties的编码问题!
编写国际化配置文件,抽取页面需要显示的国际化页面消息。我们可以去登录页面查看一下,哪些内容我们需要编写国际化的配置!
13.2、配置文件编写
1、我们在resources资源文件下新建一个i18n目录,存放国际化配置文件
2、建立一个login.properties文件,还有一个login_zh_CN.properties;发现IDEA自动识别了我们要做国际化操作;文件夹变了!
3、我们可以在这上面去新建一个文件;
弹出如下页面:我们再添加一个英文的;
这样就快捷多了!
4、接下来,我们就来编写配置,我们可以看到idea下面有另外一个视图;
这个视图我们点击 + 号就可以直接添加属性了;我们新建一个login.tip,可以看到边上有三个文件框可以输入
我们添加一下首页的内容!
然后依次添加其他页面内容即可!
然后去查看我们的配置文件;
login.properties :默认
login.btn=登录
login.password=密码
login.remember=记住我
login.tip=请登录
login.username=用户名
英文:
login.btn=Sign in
login.password=Password
login.remember=Remember me
login.tip=Please sign in
login.username=Username
中文:
login.btn=登录
login.password=密码
login.remember=记住我
login.tip=请登录
login.username=用户名
配置文件步骤搞定!
13.3、配置文件生效探究
我们去看一下SpringBoot对国际化的自动配置!这里又涉及到一个类:MessageSourceAutoConfiguration
里面有一个方法,这里发现SpringBoot已经自动配置好了管理我们国际化资源文件的组件 ResourceBundleMessageSource;
// 获取 properties 传递过来的值进行判断
@Bean
public MessageSource messageSource(MessageSourceProperties properties) {ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();if (StringUtils.hasText(properties.getBasename())) {// 设置国际化文件的基础名(去掉语言国家代码的)messageSource.setBasenames(StringUtils.commaDelimitedListToStringArray(StringUtils.trimAllWhitespace(properties.getBasename())));}if (properties.getEncoding() != null) {messageSource.setDefaultEncoding(properties.getEncoding().name());}messageSource.setFallbackToSystemLocale(properties.isFallbackToSystemLocale());Duration cacheDuration = properties.getCacheDuration();if (cacheDuration != null) {messageSource.setCacheMillis(cacheDuration.toMillis());}messageSource.setAlwaysUseMessageFormat(properties.isAlwaysUseMessageFormat());messageSource.setUseCodeAsDefaultMessage(properties.isUseCodeAsDefaultMessage());return messageSource;
}
我们真实 的情况是放在了i18n目录下,所以我们要去配置这个messages的路径;
spring.messages.basename=i18n.login
13.4、配置页面国际化值
去页面获取国际化的值,查看Thymeleaf的文档,找到message取值操作为:#{…}。我们去页面测试下:
IDEA还有提示,非常智能的!
我们可以去启动项目,访问一下,发现已经自动识别为中文的了!
但是我们想要更好!可以根据按钮自动切换中文英文!
配置国际化解析
在Spring中有一个国际化的Locale (区域信息对象);里面有一个叫做LocaleResolver (获取区域信息对象)的解析器!
我们去我们webmvc自动配置文件,寻找一下!看到SpringBoot默认配置:
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix = "spring.mvc", name = "locale")
public LocaleResolver localeResolver() {// 容器中没有就自己配,有的话就用用户配置的if (this.mvcProperties.getLocaleResolver() == WebMvcProperties.LocaleResolver.FIXED) {return new FixedLocaleResolver(this.mvcProperties.getLocale());}// 接收头国际化分解AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();localeResolver.setDefaultLocale(this.mvcProperties.getLocale());return localeResolver;
}
AcceptHeaderLocaleResolver 这个类中有一个方法
public Locale resolveLocale(HttpServletRequest request) {Locale defaultLocale = this.getDefaultLocale();// 默认的就是根据请求头带来的区域信息获取Locale进行国际化if (defaultLocale != null && request.getHeader("Accept-Language") == null) {return defaultLocale;} else {Locale requestLocale = request.getLocale();List<Locale> supportedLocales = this.getSupportedLocales();if (!supportedLocales.isEmpty() && !supportedLocales.contains(requestLocale)) {Locale supportedLocale = this.findSupportedLocale(request, supportedLocales);if (supportedLocale != null) {return supportedLocale;} else {return defaultLocale != null ? defaultLocale : requestLocale;}} else {return requestLocale;}}
}
那假如我们现在想点击链接让我们的国际化资源生效,就需要让我们自己的Locale生效!
我们去自己写一个自己的LocaleResolver,可以在链接上携带区域信息!
修改一下前端页面的跳转连接:
<!-- 这里传入参数不需要使用 ?使用 (key=value)-->
<a class="btn btn-sm" th:href="@{/index.html(l='zh_CN')}">中文</a>
<a class="btn btn-sm" th:href="@{/index.html(l='en_US')}">English</a>
我们去写一个处理的组件类!
//可以在链接上携带区域信息
public class MyLocaleResolver implements LocaleResolver {//解析请求@Overridepublic Locale resolveLocale(HttpServletRequest request) {String language = request.getParameter("l");Locale locale = Locale.getDefault(); // 如果没有获取到就使用系统默认的//如果请求链接不为空if (!StringUtils.isEmpty(language)){//分割请求参数String[] split = language.split("_");//国家,地区locale = new Locale(split[0],split[1]);}return locale;}@Overridepublic void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {}
}
为了让我们的区域化信息能够生效,我们需要再配置一下这个组件!在我们自己的MvcConofig下添加bean;
@Bean
public LocaleResolver localeResolver(){return new MyLocaleResolver();
}
我们重启项目,来访问一下,发现点击按钮可以实现成功切换!搞定收工!
小结:
页面国际化
- 配置i18n文件
- 如果需要在项目中进行按钮自动切换,我们需要自定义一个组件LocaleResolver
- 将自己写的组件配置到spring容器中----@Bean
springboot13 页面国际化(i18n)相关推荐
- html 语言国际化,js使用i18n实现页面国际化的方法
页面引用的插件 以下是页面引用的js /** * 设置语言类型: 默认为中文 */ var i18nLanguage = "zh-CN"; /* 设置一下网站支持的语言种类 zh- ...
- springMVC项目国际化(i18n)实现方法
SpringMVC项目国际化(i18n)实现方法 按照作息规律,每周五晚必须是分享知识的时间\(^o^)/~,这周讲点儿啥呢,项目需要逼格,咱们国际化吧(* ̄rǒ ̄)~,项目中碰到这类需求的童鞋可能并 ...
- javaweb学习总结(三十一)——国际化(i18n)
一.国际化开发概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationaliz ...
- spring 国际化-i18n
i18n(其 来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是"国际化"的简称.在资讯领域,国际化(i18n)指让产品(出版 物,软 ...
- 深入分析JavaWeb Item22 -- 国际化(i18n)
一.国际化开发概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationaliz ...
- 项目国际化I18N多语言切换
作为国际化的门户网站,支持多种不同的语言,以方便不同国家,不同语种的用户访问尤其重要,目前通过Vue I18n已实现中英文自由切换. 一.了解I18N 1.什么是I18N i18n(其来源是英文单词 ...
- nuxtjs 国际化i18n
1. 设置国际化匹配文字: locales/zh.json: (locales/en.json 英文同理) {"topbar": {"home": " ...
- SpringBoot -> 国际化(i18n)
文章目录 上结果 1.准备工作 配置文件编写 配置文件生效探究 配置页面国际化值 配置国际化解析 总结:我可能骗了你们,这个看了我都总结不出什么东西 上结果 1.准备工作 先在IDEA中统一设置pro ...
- Python中国际化(i18n)完整指南
这是一个完整的指南,展示了如何为一个Python应用程序进行国际化(i18n).当我在handroll项目中添加i18n时,我很难找到支持其他语言的明确建议.这是我个人的一点经验,解释了我是如何做到这 ...
最新文章
- 栈(stack)和堆(heap)
- 使用idea工具运行第一个spring boot项目
- 疫情当前,华为云数据库携手WeLink保障企业云上办公数据稳定可靠
- 跨境电商ERP系统怎么使用?
- java控制语句(超详细!)
- java get请求中文_Java语言get请求中文乱码问题解决办法!
- java飞机订票系统课程设计_基于Java+SSH的飞机票订票售票系统
- 少年宫计算机活动总结改进措施,少年宫乒乓球的活动总结
- Pytorch(一) —— 相关库和函数
- python获取计算机时间_在Python中获取计算机的UTC偏移量
- OpenGL 凹凸贴图实例
- java写入文件中文乱码问题_解决Java写入UTF-8文件中文乱码问题
- 复习Java第一个项目学生信息管理系统 04(权限管理和动态挂菜单功能) python简单爬数据实例Java面试题三次握手和四次挥手生活【记录一个咸鱼大学生三个月的奋进生活】016
- iOS中制作一张水印图片
- l1300打印机纸进不去_爱普生打印机不进纸该怎么解决?
- Sklearn机器学习——ROC曲线、ROC曲线的绘制和AUC面积、运用ROC曲线找到最佳阈值
- 【四级英语单词·LIST1】 B站网课笔记 新东方四级词汇词根+联想记忆法 乱序版
- java服务进程名_java设置进程名称 如何修改java程序的进程名
- 系统,网络,硬件,安全
- 复制构造函数java_Java中的拷贝构造函数
热门文章
- 【Linux】学习历程
- python 高性能http服务器_Python高性能HTTP客户端
- vue-cli3.x中使用axios发送请求,配合webpack中的devServer编写本地mock数据接口(get/post/put/delete)...
- idea - Error during artifact deployment. See server log for details.
- HDU 2819 Swap(二分图匹配)
- php反射API 获取属性/注释/方法 执行方法 实例
- 分布式平台下的HS(High-Security) --Shiro 授权
- 【Pygame】屏幕图形绘制
- Qt与Matlab混合编程细节总结
- Win10之打印机扫描为pdf格式