00:00
好,接下来呢,我们先来完成第一个功能,就是我们登录页面的国际化,也就是说我们想通过浏览器的语言信息来动态显示页面的国际化效果,包括我们这一块也有国际化的切换链接来,当我们点中文的时候,页面来显示中文,点英文的时候呢,页面的整个呢来显示成英文效果。那这个国际化要做起来呢?如果是以前spring mvc,我们需要这几步。第一步。我们首先呢需要编写国际化配置文件。国际化配置文件里边呢,我们将要显示的内容都配置出来,接下来第二步,然后呢,使用resource bundle resource bundle。Message s。Message source来管理国际化资源文件。国际化资源啊,有了它管理以后呢,如果是我们以前用JSP页面,我们可以在页面。
01:04
使用fmt标签,特别是FT MT message,然后呢,来取出国际化的内容。这是我们以前有VC的时候,我们这么来做,当然现在有了spring boot,那理应都是一些配置好的,那唯一需要我们做的可能就是来编写国际化配置文件。那我们就来看一下我们的使用步骤,好,我们来放在这儿,还是第一步,将页面我们都要显示的内容我们先编写到国际化配置文件中,编写国际化配置文件抽取。抽取页面需要。需要显示的国际化消息。好,比如呢,我们现在来到这个登录页面,登录页面这一块呢,有please sign啊,我们这个请登录,包括呢,我们这username password remember me,这些我们都需要进行国际化,那我们把这几个呢,我就提取出来。
02:01
怎么提取呢?我们先来编写国际化配置文件。我就来放在。我们专门来放一个文件夹,我就放在218N上,好,然后呢,我们先来写第一个文件。哎,我们是logo页面的国际化,我就叫logo。点properties,哎,国际化的配置文件呢,一定要是properties,当然这是默认的文件,如果是中文情况下,我们就应该写一个叫Logan-ZH-CN,语言代码加国家代码,点properties,哎,这个文件呢,就是表示在中文情况下的国际化文件。而且当我们的idea识别到我们这个要做国际化配置文件的时候,它还能切换到我们这个国际化视图,那么我们接下来就简单多了,比如我呢,再来添加一个,哎,英文的国际化文件,我们就用这个and property feels。然后呢,我们在这儿点一个加号,我们来输入一下国家语言代码跟国家代码就行了,叫en-us,好点一个OK,我们点OK,它呢给我们把这个enus也抽取过来了,那好接下来呢,我们就来写配置,怎么写配置呢?我们随便进一个国际化配置文件中,注意它这呢有一个叫resource bund视图。
03:18
这个视图里边呢,我们点一个加号,可以来添加属性,来点一个加号添加属性,添加什么属性呢?我们就来添加每一个页面,我们第一个页面要显示的第一个消息,我们这个登录提示好,我们来添加一个属性,那就叫Logan。点keep这个登录提示,我点一个OK这个属性呢,哎,在列举的这三个文件里边都是什么值,我们就一次性都编写在这儿,那如果是英文情况下,那当然就叫please s。啊,你就写在这儿,而如果是中文呢,我们就叫。哎,请登录。请登录好,那默认呢,我们就来显示请登录。啊,如果是默认显示呢,那就这样,那呢,有些语言信息没有在我们国际化中配置,那它就用默认的这个不带国家语言代码的配置文件,好,这是我们第一个登录的提示信息,第二个我们再来看页面还要抽取什么,然后还有这个用户名以及密码,这两个呢,Plan hold。
04:22
那我们就来写一个叫Logan。诶,我们不在这儿编辑,我们在它的这个国际化视图里边,好,我们再来添加上一个属性,我们就叫log.user nameme用户名,哎,在英文情况下呢,那就显示user nameme好,如果中文情况下呢,来显示用户名啊,默认呢,我们显示用户名也带一个这个线好,那么包括咱们这个密码log跟。点password。好,如果是默认,我们就叫密码。英文我们就叫passwword。
05:02
还有咱们这个中文,我们就叫密码,那么我们再来填一个属性,还有一个login的,Login的什么呢?我们这个页面上还有一个叫remember me这个按钮,我们就叫remember me。把它复制过来。点remember,好,我们就叫remember吧,点一个OK,好,我们这个登录呢,默认就是记住我。还有呢,我们这个叫remember me。诶。Remember me那?这个呢,我们就叫记住我。好这样我们就配好了,那么我们来还有一个这个登录按钮。再来。添加一个属性叫login.btn,好,那么这个是登录按钮,登录按钮呢,我们默认情况我们就叫登录。然后这个呢,我们就叫sin。三一好,那如果是中文,那我们就叫登录好这个国际化配置文件呢,我们就在这配置好,每点每一个进去,你看这一块呢,都是,哎,我们来切到test视图这一块呢,都是写好的啊,我们一次性配置就完了,这是第一步,我们先把国际化配置文件我们来配出来。
06:18
好,我们呢,就把这个截个图保存起来,主要呢,就是这三个国际化配置文件。ZHCN是中文的,En us是英文的啊,我们这个logo呢,是没有指定语言信息情况下默认的,我们将页面要显示的都出去配置在这。好,我们把这个截图呢保存起来。好。在我们这个image下边的这个图,好,这是我们编写好的国际化配置文件,再来第二,那如果是以前我们用spring VC或者什么,哎,我们需要配一个resource bundle message source,当然有了spring BOO,这个应该是配置好的,我们来给大家看一下,有一个类呢,叫source,诶有个东西叫什么呢?Auto,那么我们这个做国际化组建的这个source自动配置,这自动配置呢,我们往下翻,主要有这么一个at鼻音能看到,诶它在这呢,确实是扭了一个resource帮message source,并且呢,把我们这个基础名以编码方式等传过来,将这个message source返回了,也就是说S。
07:32
第二个。自动。自通呢,自动配置好了管理管理国际化资源文件的组向。的咱们这个组件,那么这一块的配置呢,我们复制过来看上几个比较重要的迹象,好把这个配置类呢,我们这个叫message source auto configuration,首先呢,我们还能看到,诶,它绑定了messages里边的一些配置,包括呢,那就核心的我把这一个复制来,这一个叫base name messages,而这个base呢,有用在下边。
08:16
在下面呢,我们用and being给容器中添加了一个组件,这个组件呢叫message source,就是我们管理国际化资源文件的组件,它的全称叫resource bund source,而这个resource bund呢,它需要调一个方法叫sets,这个呢就是来设置。设置国际化资源文件的基础名,什么叫基础名啊?就是我们说的去掉语言国家代码的。我们的这个配置文件呢,叫什么什么杠语言国家代码的properties,把这个去掉,Log就叫基础名,但是这个基础名我们能看到的是什么呢?诶,默认它是messages,也就是说通过这个配置我们得到一个结论,什么结论啊,也就是说我们的配置文件可以直接放在类路径下叫。
09:16
叫什么呢?叫messages properties,第2PROPERTIES即可了,这样的话呢,我们就可以不用做任何配置的情况下就能用到国际化功能了,但是呢,我们的这个文件现在我放在了L18N下,那接下来呢,我们就可以用S来设置咱们这个配置文件的基础名,基础名是什么呢?我们来看后边说呢,我们这个基础名可以包含一个指定的这个包名,什么包名如果不包含,将从类路径的根目录下来寻找,所以说呢,我们就来指定一下。在这呢,我们来指定spring点什么呢?人家绑定的这个叫messages base,好,我们来指定什么报名呢?从A18N下开始算A18N点一个,只需要来写一个基础名logo就行了。好,这就是我们第二步,我们相当于把国际化配置文件让咱们这boot配置的这个resource bund message source管了起来,那接下来就是第三步,去页面获取国际化的值。
10:26
那我去页面获取格局化的值,如果是以前的GSP,我们导入fmt标签库,那就可以取了,那现在是life模板引擎,那现在呢,那就更好取了,我们来到SIM life的引擎,这呢,标准语法里边有一个叫messages,我们能写的几个啊,几个符号大括号啊,什么Dollar星号,井号,其中呢,井号大括号就是来取国际化信息的,来,我们来点进message获取,井号大括号来获取,那怎么获取呢?我们就来到页面。把每一个呢,我们就来获取出来,我们先来看第一个,那么这个提示信息,Please sign,来,我们在这儿把它的文本变一下,变一个th test,它的文本内容是什么呢?我们就来井号大括号。
11:14
井号大括号什么呢?我们来写logon点一个,诶这还都有提示,我们提示的是咱们这个tip,哎,我们给它显示咱们这个请登录,还有咱们这个username啊,它里边的文本来演变一下th test等于井号大号来获取国际化log跟点username,好,包括这个plan hold里边也一样,那我们用TH对应的属性hold来修改它原生的hold,井号大括号log跟。那么这个还叫username,好,Password也一样,Th test来内容修改一下,井号大括号log跟点password,包括呢,我们这个密码的lets hold来也th hold,然后呢,井号大括号Logan点。
12:09
我们叫。Pass word,好,这要取出来,将来remember me的显示。这个remember me呢,也要按照中英文进行显示,这个显示呢,只是注意我们这个input的框啊们现在不能用这个th test,这个test是在标签体里边的内容,而input框它是一个字节数的,没有标签体,那我们可以用什么呢?可以用,我们有一个叫行内表达式,应暗行内写法,双中括号里边写我们表达式就行了,好,我就把这个删掉,直接写双中括号里边呢,井号大括号,这下呢就没提示了,Log点一个我们叫,哎,我来复制过来叫remember。好,还有咱们这个我们这个登录按钮,我们就直接th test。
13:00
井号、大号、log。第二这个BTN。好,这些呢,我们就取出来了,取出来我们来访问一下看页面,现在国际化是不是出来了,默认呢,就是根据浏览器的语言信息,我们来看一下我们浏览器的语言,现在呢,先是咱们这个。中文情况好,来回车。诶,取出来是取出来,只不过这一块给乱码了啊乱码呢,我们之前也说过这个原因,在idea里边我们写的这些properties你看啊,这些中文你看起来我们还能看得到,而idea呢,给我们没有进行编码,我们说这些properties文件里边的中文最终都要转换成埃吗?我们需要在fair里边,这有一个city呢,我们来搜索faircoco,来搜索这个fairco这一项,我们需要改变一项,把我们这个proper文件呢,我们现在是UTF8的,然后呢,让它自动转为S码。
14:03
哎,这么来一遍就行了,但是我们好像上一次是变过,那为什么都没变过来呢?我们来说一下这个setting里边的这个设置只是对当前项目的设置,我要设置idea全局的,我们可以来到这fair,这有一个呢other setting,这有一个叫default setting默认设置来修改全局默认设置,有一个叫非coding全局默认设置呢,我们都给它变成UTF8,并且自动转S,这就行了,一定注意我们在这呢,可以用default setting进行全局默认设置。好,我们把这个呢给大家截个图,这个还是非常啊,我们后来要经常使用的。好,我点一个OK,然后呢,我们这些中文我们就来重新编写一下,来到这个resource bund里边,每一个我们都来重新写一下keep,这个keep呢就叫请登录,好,那么下边呢就叫请登录,还有咱们这个BTN,那就是登录按钮,我们就叫登录一个波浪线。
15:09
好,然后呢,我们这个也一样叫登录,嗯,好把每一个呢,都重新改一下password,那就叫密码。这个呢就叫密码remember,你就叫记住我。好,还有我们下面的这个,记住啊,还有我们这个username用户名。用户名,还有我们这个用户名。好,我来重新再来启动一下。我们看我们现在的这个效果。有没有出来来刷新诶,我们看到这一块显示的是中文,当我切换浏览器语言信息的时候,我把这个设置这中文简体在前,我把英文美国移到顶部。好,来在这儿刷新一下来,现在呢看到的是英文,当我们再把中文简体移到底部,那它就看到的是中文,诶现在呢,默认都是根据我们浏览器的语言信息来的,好把这个图呢。
16:11
好,先是咱们这个修改properties文件的这个图。现在呢,我们已经看到效果了,去国际化页面来取值,我把咱们整个页面拿过来,诶,我们只需要使用井号大号来获取值,我们就能看到国际化效果,而现在默认的效果呢,是什么效果呢?就是我们根据浏览器语言的信息,现在的效果就是。记录一下效果,效果根据我们浏览器语言设置的信息切换了国际化。但是呢,我们现在想要做一个更好的效果,什么效果呢?我们这儿有中英文,我们点中文显示中文,点英文显示英文,如果不点呢,默认根据浏览器来进行显示,好我呢先把这个浏览器还是调成咱们这个英文优先,好我们来刷新它显示的是英文,那我如何实现点按钮来显示呢?这个呢跟我们spring mvc里边的一个。
17:14
原理有关什么原理呢?就说我们这个国际化之所以哎我们能有效果,就是呢,国际化有一个重要的对象叫local local呢就是我们的区域信息对象,在这个区域信息对象呢,只是说spring mvc里边所有要获取区域信息对象的时候,有一个组件叫。它的作用呢,就是来获取区域信息对象,而我们来看一下,我们来看一下自动配置的spring mvc,有一个叫外8MVC con,来看一下有没有跟local reserver国际化区域信息解析器有关的,来往下翻。
18:00
诶,这呢,配了一个local reserve原理在这,来把这个放在这。比如呢,Spring boot默认呢,它也配了区域信息解析器,而这个区域信息解析器它怎么配的呢?也就是说如果我们在属性里边指定用固定的,它就用这个固定的,否则呢,它用的是这个叫accept header,而这个accept header的作用它就是根据请求头来点进来,它呢有一个方法叫获取区域信息,诶解析区域信息,它怎么解析呢?就是从request从请求头中拿到。区域信息的,那么现在我们想要点击链接切换国际化,我就可以把这个区域信息解析器我换掉,我不让它用默认的,那我们这个默认的,默认的区域信息解析器就是根据请求头,请求头带来的区域信息。区域信息,然后呢获取进行国际化。
19:03
而我们请求图我们来可以看一下F12,如果我们现在是英文,我来刷新一下,你们随便发一个请求的时候,请求图里边呢,会有一个accept字段,Accept language enus就在前边,而如果呢,我来切成中文,哎,切成中文。切成中文,切成中文呢,我们再来发请求,随便看来一个请求头,那我们这个ZHCN就在前面,他现在呢,就是按照根据请求头的这个local reserve来用的,那么呢,我们可以自己来写一个local。好,我们把我们的组件呢,我们都来放在。来写一个class,那放在component里边,那么呢,就叫my local,那们现在呢,想要点击链接切换国际化,那点击链接切换国际化,我怎么知道呢?那我们就可以在链接上携带上国际化的区域信息,那可以在链接上携带区域信息。
20:10
比如我们在login里边,我们点中文,我们还是来这个页面来抄链接,好我们当然用这个TH属性按特大括号来发当前项目下,当前项目下呢,我们还是来到in htm页面,那发这个请求就是来到我们这个log页面的好都一样,那我来带上一个,比如我带一个L。等于ZH-CN,这是不是就是中文的,那如果是英文呢,我们就带一个PH h ref and,好,斜杠我们叫index.ht我们来带上L等于en-us,那我们在参数上带上这个,而如果用了我们模板引擎参数呢?我们就不用这么写了,我都是来写小括号。小括号呢,K等于Y6,然后Y6呢,我们这个ZHCN,它是一个字符串,那我们就来用单引号把这个字符串引起来,这块呢也一样。
21:10
哎,我们把它写起来,这样的话呢,我们来点链接就会来发这个请求,而发请求的时候呢,就会带上我们的这个国际化的值,哎,ZH来可以看一下走。当我们来点链接,我先来刷新。好,让它启动起来,启动起来我们点英语,那么它就带上了L等于eus,我点中文,它就带了L等于ZHCN,但是我们现在点来点去是切不了国际化的,因为我们的区域信息解析器还是按照请求头来的,那我们自己来写一个区域信息解析器,要成为区域信息解析器就得来实现实现我们叫local server接口,好,我们来把它。
22:00
有一个方法,哎,有一个方法叫什么呢?叫look来解析区域信息了,还有一个set look set呢我们就不写了,那就用咱们这个解析区域信息,怎么解析呢?我从request中我来getter来来获取它我们的参数的值,获取哪个参数啊,我们的L,那参数上呢,带了一个L,如果说这个参数有值,我们当然就用它了,我们可以来判断一下,我们用string u来检查一下这个参数有没有带来,我就用咱们这个spring framework的这个string YouTube工具检查一下它带来的这个L的值是不是为空,如果说不为空。不为空,那相当于我们就带来了区域信息,那这个区域信息呢,我们就来给他构造上一个搂对象。这对象是最终我们要返回出去的,哎,我们得知道是什么区域信息啊,那怎么构造呢。
23:02
我们来看一下。那我们现在就来,如果不为空,我们就来截串,嗯,我们用嗯l.split我们来分割一下,因为呢,我们带的这个区域信息中间我们有一个下划线,哎,前面呢是语言代码,后边呢是国家代码,好我们就用下划线把它分割出来。分割呢,就会得到一个死string数组,而我在这拗一个搂来创建一个对象,而拗的时候呢,我们用它带有两个参数的构造器,第一个参数呢,传的是语言代码,第二个参数country传的是国家代码,所以呢,我拿到split。第零个值,那就是语言代码和split第一个值,这是国家代码,这样呢,我们就得到了一个local对象来给他。就是说如果说我们超链接上带了这个local区域信息,我们就来用它,如果没带呢,怎么办?我就用local来获取到系统默认的get default,我们就用操作系统默认的,而如果我们参数上带了,那就用参数的,我用了这个local,我写起来以后MVC现在还没用到,因为自动配置里边用的还是,哎,我们这个accept header local,而且呢,这个自动配置也写的很好,是什么呢?叫conditional on b,就说容器中没有区域信息解析器的时候,它才配有了,它就不配了,所以呢,我们为了让我们区域信息解析器能生效,我们把它加在容器中。
24:38
好,我在咱们MVC这个配置类里边,我们来再来一个组织。就是我们的来,我们就叫local。Return return一个什么呢?我就拗一个my local,把我们的local创建出来,添到容器中,让MC用它就行了。
25:02
然后呢,我们来启动起来。启动起来。只要用到我们的local,那我们的local reserve的效果就是参数上没带区域信息,就用操作系统默认的,如果带了就用参数上指定的。好,我们现在启动起来了,我来刷新一下,现在呢是带了带了enus,所以说呢,我们是英文的,我点中文,现在是中文点英文是英文,如果什么都不带。回车,那这就用操作系统默认的,即使我们在浏览器上来切换语言效果,我把这个英文我贴在前边,那么再来刷新,它还是中文的,因为我们的区域信息解析器写的就是这个逻辑,当然大家也可以改变一下,如果没带呢,就用啊请求头的,如果带了呢,就用参数的,哎,这就是我们点击链接实现国际化效果的。我们主要定义了一个。
26:00
好,我们第四步点击链接切换国际化来,我们只做了一步,就是呢,自己来编写一个local,然后呢,把它加到容器中就行了,好,我们把这个加容器中的这块配置那也拿来。好,这样呢,我们就实现了我们这个国际化的完整功能。
我来说两句