欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

25

程序员文章站 2022-06-13 21:10:47
...
             首页新闻博问专区闪存班级                                                  我的博客我的园子账号设置退出登录注册登录净重21克 博客园     首页     博问    闪存    新随笔     订阅      管理     随笔 -  19,     文章 -  0,     评论 -  6 SpringBoot第十集:国际化与Webjars的应用(2020最新最易懂)     SpringBoot第十集:i18n与Webjars的应用(2020最新最易懂)一,页面国际化  i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称。除了i18n(支持多种语言),L10n(localization),g11n(globalization),还有m17n(multilingualization)1,什么是国际化  国际化就是可以把页面中的中文变成英文。根据地区使用语言,及浏览器语言使用不同,页面语言也随之而变化。例如阿里巴巴官网,Dubbo的官方网站等2, 如何实现页面国际化?A,准备工作确保工作空间编码,和后续新建工程文件编码都是UTF-8(支持语言类型最强大,俗称万国码)新建SpringBoot工程整合Thymeleaf(一切网页交给模板引擎Thymeleaf接管),并提供默认模板。(整合参考:SpringBoot第九集整合模板引擎)至于页面模板,自己做一个挺麻烦的,可以参考很多后台组件或模板,BootStrap,EazyUI,layUI,Sematic UI,Admin,XAdmin,AdminLet, Light Year Admin等(我用过的都说了,你看着办)新增控制器,访问页面模板 1 @Controller

2 public class AdminController {
3
4 /**
5 * @return 跳转去登录
6 /
7 @RequestMapping("/login")
8 public String login() {
9 return “login”;
10 }
11
12 }http://localhost:8080/login访问效果:注意不要忘记整合Thymeleaf需要加如约束:1 新增国际化配置文件properties,抽取页面需要显示的国际化消息定义在不同命名的文件中。关于配置文件的命名格式:基本名称+“”+语言简称+“”+国家简称.properties  注意严格区分大小写(关于语言简称可以在附录中查阅,列举了 部分可供参考)该案例命名举例:login.properties:这个用于作为默认显示语言配置(默认访问页面时显示的语言配置)login_zh_CN.properties:这个用于当指定使用中文时显示的语言配置login_en_US.properties:这个用于当指定使用英文时显示的语言配置实现:a,在src/main/resources目录下新增i18n目录,新增三个配置文件(当然不同的开发工具,目录结构效果和适配使用效果是不一样的,参考SpringBoot第一集)本次演示使用的工具是Spring Tool  Suiteb,内容大概,实际情况根据你的情况而定  key对应value,其中key是自定义的,不一定要添加前缀,但是,几个文件中key一定要相同。 1 ###用于默认语言显示的配置文件
2 login.message=管理员登录
3 login.username=用户名
4 login.password=密码
5 login.submit=请登录
6 #########################################
7 ###用于指定英文语言显示的配置文件
8 login.message=Administrator Login
9 login.username=user name
10 login.password=password
11 login.submit=Please Loginc,对应关系修改网页默认数据区按照Thymeleaf语法,修改网页,将所有文字信息,替换为properties属性获取的方式。th:Thymeleaf配置属性语法,Thymeleaf替换值语法th:text,Thymeleaf取值语法#{…}。详情参考博主模板引擎Thymeleaf常用语法。 1

 B,实现步骤修改yml核心配置文件 1 spring:
2 # 国际化配置
3 messages:
4 # 国际化的文件的存储在src\main\resources 文件夹下的什么位置。注意这是个相对位置
5 basename: i18n/login
6 # 表示 messages 文件的缓存失效时间,如果不配置则缓存一直有效
7 cache-duration: 3600
8 # 配置编码
9 encoding: UTF-8
10 # 如果找不到语言,是不是返回服务器系统语言。
11 fallback-to-system-locale: true修改页面前端提交切换参数th:是Thymeleaf属性设置语法。链接语法@{…uri…}。参数语法(key=value&key=value…)详情参考博主模板引擎Thymeleaf常用语法。1 简体中文
2 English编写自定义语言信息解析器编写普通类实现接口LocaleResolver,仿SpringBoot默认语言解析器实现(至于为什么,可以参考附录SpringBoot国际化源码解析) 1 public class LocaleMessageResolver implements LocaleResolver{
2 /
*
3 * 用户可以使用request,根据指定的方式获取一个Locale,如果没有获取到,则使用用户指定的默认的Locale
4 /
5 @Override
6 public Locale resolveLocale(HttpServletRequest request) {
7 // 获取请求数据(切换语言传递的参数)
8 String language = request.getParameter(“language”);
9 System.out.println(“测试获取的语言环境参数:”+language);
10 // 获取Java虚拟机此的默认区域语言环境
11 Locale defaultLocale = Locale.getDefault();
12 // 判断页面是否选择切换了语言
13 if (!StringUtil.isEmpty(language)) {// 如果不为null
14 // 选择了切换语言环境,将语言环境,根据下划线拆分
15 String[] split = language.split("_");// zh CH
16 // 创建新的语言环境,并替换默认语言环境(参数一:语言,参数二:国家,详情参考附录或JDK-API)
17 defaultLocale = new Locale(split[0], split[1]);
18 }
19 // 返回给页面的语言环境(要么系统默认,要么已经选定的)
20 return defaultLocale;
21 }
22
23 /
*
24 * 用于实现Locale的切换。及响应(SpringBoot整合无需这个处理方法)
25 /
26 @Override
27 public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {}
28
29 }将自定义加如到Spring IOC如果不将自定义的语言解析器放入到Spring容器中,那么国际化就是无效的!!! 1 @Configuration //
2 public class LocaleConfig {
3 /
*
4 * 说明:注入语言解析器时,方法名必须交localeResolver
5 */
6 @Bean // 注入bean
7 public LocaleMessageResolver localeResolver() {
8 return new LocaleMessageResolver();
9 }
10
11 }重启SpringBoot工程,访问测试 二.SpringBoot整合WebJars  通常对于web开发而言,像js、css、images等静态资源版本管理是比较混乱的,比如Jquery、Bootstrap、Vue.js可能各个前端框架所依赖的自个组件的版本都不尽相同,一不注意就可能引起不同版本的冲突问题。WebJars是将web前端资源(如jQuery & Bootstrap & VUE 等)打成jar包文件。借助版本管理工具(Maven、gradle等)进行版本管理,保证这些Web资源版本唯一性。避免了文件混乱、版本不一致等问题。开始使用前,我们看下Jquery的webjars,借此来了解下webjars包的目录结构。 如上图,可以看到资源文件地址:META-INF/resources/webjars/jquery/3.5.1/jquery.js使用方式 1.修改pom文件引入webjars依赖。  例如:当前引入JQuery测试(注意,虽然已经讲过热部署,但新增依赖依然可能需要重启服务)。查找更多依赖1
2 org.webjars
3 jquery
4 3.5.1
5 2.页面引入JQueyr核心文件测试  webjars文件如何引入呢?参考SpringBoot第八集静态资源地址源码解析。1 页面测试访问    附录1.国际化配置文件语言命名格式说明(严格区分大小写):语言_国家命名下划线之前是:语言简称命名下划线之后是:国家简称语言简称简体中文(中国)zh_CN繁体中文(中国*)zh_TW繁体中文(中国香港)zh_HK英语(中国香港)en_HK英语(美国)en_US英语(英国)en_GB英语(全球)en_WW英语(加拿大)en_CA英语(澳大利亚)en_AU英语(爱尔兰)en_IE英语(芬兰)en_FI芬兰语(芬兰)fi_FI英语(丹麦)en_DK丹麦语(丹麦)da_DK英语(以色列)en_IL希伯来语(以色列)he_IL英语(南非)en_ZA英语(印度)en_IN英语(挪威)en_NO英语(新加坡)en_SG英语(新西兰)en_NZ英语(印度尼西亚)en_ID英语(菲律宾)en_PH英语(泰国)en_TH英语(马来西亚)en_MY英语(阿拉伯)en_XA韩文(韩国)ko_KR日语(日本)ja_JP荷兰语(荷兰)nl_NL荷兰语(比利时)nl_BE葡萄牙语(葡萄牙)pt_PT葡萄牙语(巴西)pt_BR法语(法国)fr_FR法语(卢森堡)fr_LU法语(瑞士)fr_CH法语(比利时)fr_BE法语(加拿大)fr_CA西班牙语(拉丁美洲)es_LA西班牙语(西班牙)es_ES西班牙语(阿根廷)es_AR西班牙语(美国)es_US西班牙语(墨西哥)es_MX西班牙语(哥伦比亚)es_CO西班牙语(波多黎各)es_PR德语(德国)de_DE德语(奥地利)de_AT德语(瑞士)de_CH俄语(俄罗斯)ru_RU意大利语(意大利)it_IT希腊语(希腊)el_GR挪威语(挪威)no_NO匈牙利语(匈牙利)hu_HU土耳其语(土耳其)tr_TR捷克语(捷克*)cs_CZ斯洛文尼亚语sl_SL波兰语(波兰)pl_PL瑞典语(瑞典)sv_SE西班牙语(智利)es_CL2.SpringBoot国际化源码解析  springboot国际化的时候,是通过interface LocaleResolver 接口的实现类的bean来确定是哪种语言的。这个接口有2个方法: 1、resolveLocale 用来获取当前语言环境。 2、setLocale 修改语言环境。(针对Cookie、Session这种有状态的请求。)  LocaleResolver的实现类只有4个:AcceptHeaderLocaleResolver(主要解析看这个源码)CookieLocaleResolverFixedLocaleResolverSessionLocaleResolver 默认使用AcceptHeaderLocaleResolver实现。 1 public class AcceptHeaderLocaleResolver implements LocaleResolver {
2 /**略其他源码
3 * 语言解方法
4 */
5 @Override
6 public Locale resolveLocale(HttpServletRequest request) {
7 // 每次请求的时候,获取http的名字叫Accept-Language的header参数,当Accept-Language==null时,使用系统默认Locale;
8 Locale defaultLocale = getDefaultLocale();
9 if (defaultLocale != null && request.getHeader(“Accept-Language”) == null) {
10 return defaultLocale;
11 }
12 // 从当前请求中获取Locale
13 Locale requestLocale = request.getLocale();
14 // 从配置中获取支持的Locale集合
15 List supportedLocales = getSupportedLocales();
16 // Locale集合为null或者Locale集合中包括请求语言,则直接使用客户请求Locale
17 if (supportedLocales.isEmpty() || supportedLocales.contains(requestLocale)) {
18 return requestLocale;
19 }
20 // 找到设置的Locale集合中是否有请求的Locale
21 Locale supportedLocale = findSupportedLocale(request, supportedLocales);
22 if (supportedLocale != null) {
23 return supportedLocale;
24 }
25 return (defaultLocale != null ? defaultLocale : requestLocale);
26 }
27 // 略其他源码
28 }  总结:AcceptHeaderLocaleResolver实现了国际化解析器接口LocaleResolver,当每次请求发出后,都会执行resolveLocale方法,并通过获取请求头"Accept-Language"来判断用户是否使用国际化语言切换,没有选择切换语言,则直接使用默认语言,当有切换并定义国际化语言时,直接返回指定切换的语言。   你是否还会在灯火下守候…… 分类: 国际化, webjars, 模板引擎, 微服务架构, Spring, SpringBoot, JavaScript+JQuery 标签: 模板引擎, SpringBoot, JQuery, 微服务, 国际化, i18n, webjars好文要顶 关注我 收藏该文 净重21克关注 - 3粉丝 - 5 +加关注 0 0

« 上一篇: SpringBoot第七集:异常处理与整合JSR303校验(2020最新最易懂) posted on 2020-11-17 16:27  净重21克  阅读(98)  评论(0)  编辑  收藏

刷新评论刷新页面返回顶部 登录后才能发表评论,立即 登录 或 注册, 访问 网站首页。 首页 新闻 博问 专区 闪存 班级 【推荐】News: 大型组态、工控、仿真、CADGIS 50万行VC++源码免费下载【推荐】博客园 & 陌上花开HIMMR 给单身的程序员小哥哥助力脱单啦~【推荐】了不起的开发者,挡不住的华为,园子里的品牌专区【推荐】未知数的距离,毫秒间的传递,声网与你实时互动【福利】AWS携手博客园为开发者送免费套餐与抵扣券【推荐】 阿里云折扣价格返场,错过再等一年相关博文:· SpringBoot-Web开发· i18n中英文翻译· SpringBoot整合web三大组件· SpringBoot学习(四)开发web应用· 【Vue】国际化vue-i18n» 更多推荐…最新 IT 新闻: · iPhone 12:比绿更绿 · 负债90亿、万人维权,“蛋壳公寓”会成为下一个ofo吗? · 谷歌微软腾讯网易吹起的云游戏风口,又一个旧金山卖水人的故事 · 微软新提案:让Windows端Chrome/Edge支持计量连接模式 · 百度财报电话会议实录:直播将成为百度变现的一个很好渠道 » 更多新闻…

    昵称:                     净重21克                 园龄:                     2个月                 粉丝:                     5                 关注:                     3         +加关注

< 2020年11月> 日一二三四五六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12

搜索    常用链接 我的随笔我的评论我的参与最新评论我的标签最新随笔1.SpringBoot第十集:国际化与Webjars的应用(2020最新最易懂) 2.SpringBoot第七集:异常处理与整合JSR303校验(2020最新最易懂) 3.SpringBoot第九集:整合JSP和模板引擎Freemarker/Thymeleaf(2020最新最易懂) 4.WEB系统防退出账户,回退主页问题(2020最新最有效的方式没有之一) 5.SpringBoot第五集:整合Druid和MyBatis(2020最新最易懂) 6.SpringBoot第四集:整合JDBC和JPA(2020最新最易懂) 7.SpringBoot第六集:整合监听器/过滤器和拦截器(2020最新最易懂) 8.SpringBoot第八集:静态资源与首页定制(2020最新最易懂) 9.SpringBoot第三集:热部署与单元测试(2020最新最易懂) 10.SpringBoot第二集:注解与配置(2020最新最易懂) 我的标签SpringBoot(10) 微服务(10) Spring(9) Linux(6) JQuery(5) WEB(5) HTML+CSS(4) Java(4) JavaScript(3) JDBC(2) 更多 积分与排名 积分 - 2958 排名 - 161680 随笔分类 (67) Filter+Listnner(1) HTML+CSS(2) JavaScript+JQuery(3) JDBC(2) JSP(2) JSR-303(1) Linux(6) MyBatis(1) MySQL(2) Redis(2) Spring(10) SpringBoot(10) SSM整合(4) Tomcat(2) WEB前端小细节知识点(3) 连接池(1) 模板引擎(2) 数据校验(1) 微服务架构(10) 随笔档案 (19) 2020年11月(8) 2020年10月(9) 2020年8月(2) 最新评论1. Re:SpringBoot第一集:入门HelloWord(2020最新最易懂)用idea创建会更easy 更容易上手
–隨風.NET2. Re:SpringBoot第四集:静态资源与首页定制(2020最新最易懂)@KMSFan ?…–净重21克3. Re:SpringBoot第四集:静态资源与首页定制(2020最新最易懂)0x11 is always there andd T.
–KMSFan4. Re:SpringBoot第三集:热部署与单元测试(2020最新最易懂)@空白-JackDKing 老哥啊,你这个是私人博客,我咋关注啊!!!…–净重21克5. Re:SpringBoot第一集:入门(2020最新最易懂)@Naylor 配置好环境,安装SpringBoot插件就OK了…–净重21克阅读排行榜 1. Linux系统安装Redis(2020最新最详细)(384) 2. SpringBoot第六集:整合监听器/过滤器和拦截器(2020最新最易懂)(333) 3. Linux系统安装JDK1.8(2020最新最详细)(319) 4. Linux系统安装MySQL(2020最新最详细)(277) 5. SpringBoot第四集:整合JDBC和JPA(2020最新最易懂)(241) 评论排行榜 1. SpringBoot第一集:入门HelloWord(2020最新最易懂)(3) 2. SpringBoot第八集:静态资源与首页定制(2020最新最易懂)(2) 3. SpringBoot第三集:热部署与单元测试(2020最新最易懂)(1) 推荐排行榜 1. SpringBoot第七集:异常处理与整合JSR303校验(2020最新最易懂)(1) 2. SpringBoot第八集:静态资源与首页定制(2020最新最易懂)(1) 3. SpringBoot第二集:注解与配置(2020最新最易懂)(1) 4. SpringBoot第一集:入门HelloWord(2020最新最易懂)(1) 5. 框架集项目-登录账户过期,如何回到登录主页!(1)

Copyright © 2020 净重21克 Powered by .NET Core on Kubernetes Powered By博客园