员工管理系统
1、首页配置:注意点,所有也免得静态资源都需要使用thymeleaf接管;

2、页面国际化

  1. 配置i18n文件
  2. 如果需要在项目中进行按钮自动切换,我们需要自定义一个组件LocaleResolver
  3. 将自己写的组件配置到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();
}

我们重启项目,来访问一下,发现点击按钮可以实现成功切换!搞定收工!

小结:

页面国际化

  1. 配置i18n文件
  2. 如果需要在项目中进行按钮自动切换,我们需要自定义一个组件LocaleResolver
  3. 将自己写的组件配置到spring容器中----@Bean

springboot13 页面国际化(i18n)相关推荐

  1. html 语言国际化,js使用i18n实现页面国际化的方法

    页面引用的插件 以下是页面引用的js /** * 设置语言类型: 默认为中文 */ var i18nLanguage = "zh-CN"; /* 设置一下网站支持的语言种类 zh- ...

  2. springMVC项目国际化(i18n)实现方法

    SpringMVC项目国际化(i18n)实现方法 按照作息规律,每周五晚必须是分享知识的时间\(^o^)/~,这周讲点儿啥呢,项目需要逼格,咱们国际化吧(* ̄rǒ ̄)~,项目中碰到这类需求的童鞋可能并 ...

  3. javaweb学习总结(三十一)——国际化(i18n)

    一.国际化开发概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationaliz ...

  4. spring 国际化-i18n

    i18n(其 来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是"国际化"的简称.在资讯领域,国际化(i18n)指让产品(出版 物,软 ...

  5. 深入分析JavaWeb Item22 -- 国际化(i18n)

    一.国际化开发概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationaliz ...

  6. 项目国际化I18N多语言切换

    作为国际化的门户网站,支持多种不同的语言,以方便不同国家,不同语种的用户访问尤其重要,目前通过Vue I18n已实现中英文自由切换. 一.了解I18N 1.什么是I18N i18n(其来源是英文单词 ...

  7. nuxtjs 国际化i18n

    1. 设置国际化匹配文字: locales/zh.json: (locales/en.json 英文同理) {"topbar": {"home": " ...

  8. SpringBoot -> 国际化(i18n)

    文章目录 上结果 1.准备工作 配置文件编写 配置文件生效探究 配置页面国际化值 配置国际化解析 总结:我可能骗了你们,这个看了我都总结不出什么东西 上结果 1.准备工作 先在IDEA中统一设置pro ...

  9. Python中国际化(i18n)完整指南

    这是一个完整的指南,展示了如何为一个Python应用程序进行国际化(i18n).当我在handroll项目中添加i18n时,我很难找到支持其他语言的明确建议.这是我个人的一点经验,解释了我是如何做到这 ...

最新文章

  1. 栈(stack)和堆(heap)
  2. 使用idea工具运行第一个spring boot项目
  3. 疫情当前,华为云数据库携手WeLink保障企业云上办公数据稳定可靠
  4. 跨境电商ERP系统怎么使用?
  5. java控制语句(超详细!)
  6. java get请求中文_Java语言get请求中文乱码问题解决办法!
  7. java飞机订票系统课程设计_基于Java+SSH的飞机票订票售票系统
  8. 少年宫计算机活动总结改进措施,少年宫乒乓球的活动总结
  9. Pytorch(一) —— 相关库和函数
  10. python获取计算机时间_在Python中获取计算机的UTC偏移量
  11. OpenGL 凹凸贴图实例
  12. java写入文件中文乱码问题_解决Java写入UTF-8文件中文乱码问题
  13. 复习Java第一个项目学生信息管理系统 04(权限管理和动态挂菜单功能) python简单爬数据实例Java面试题三次握手和四次挥手生活【记录一个咸鱼大学生三个月的奋进生活】016
  14. iOS中制作一张水印图片
  15. l1300打印机纸进不去_爱普生打印机不进纸该怎么解决?
  16. Sklearn机器学习——ROC曲线、ROC曲线的绘制和AUC面积、运用ROC曲线找到最佳阈值
  17. 【四级英语单词·LIST1】 B站网课笔记 新东方四级词汇词根+联想记忆法 乱序版
  18. java服务进程名_java设置进程名称 如何修改java程序的进程名
  19. 系统,网络,硬件,安全
  20. 复制构造函数java_Java中的拷贝构造函数

热门文章

  1. 【Linux】学习历程
  2. python 高性能http服务器_Python高性能HTTP客户端
  3. vue-cli3.x中使用axios发送请求,配合webpack中的devServer编写本地mock数据接口(get/post/put/delete)...
  4. idea - Error during artifact deployment. See server log for details.
  5. HDU 2819 Swap(二分图匹配)
  6. php反射API 获取属性/注释/方法 执行方法 实例
  7. 分布式平台下的HS(High-Security) --Shiro 授权
  8. 【Pygame】屏幕图形绘制
  9. Qt与Matlab混合编程细节总结
  10. Win10之打印机扫描为pdf格式