00:00
我们来学习抓兔的消息处理跟国际化。在讲Java web国际化的时候。我们已经。研究过什么是国际化,什么是本地化,现在的话呢,我们来做一个简要的复习。国际化是?软件的一个功能。说国际化是什么呢?啊,把无需改写源代码即可让开发出的应用程序能够支持多种语言和数据格式的技术称之为国际化。按软件的一个功能。本地化,本地化实际上是一个动作。把具有国际化支持的应用程序,让他去支持某个特定的国家或者是地区,诶,本地化是一个动词。抓图的国际化是建立在扎瓦国际化基础之上的。
01:01
那么我们第一步,我们需要提供。不同国家。跟地区的这个消息资源文件就是那个点properties。Struts框架会根据请求中包含的local。加载对应的对应文件,然后在页面上我们通过标签的方式。把这个消息咨询文件给它获取出来就可以了,当然我们在这个action里边的话呢,我们也会有对应的方法。好,到这块的话呢,我们就能知道我们需要研究的这个基本的目标啊,会有这样的几个,第一个就是在stra two里面如何来配置这个。消息资源文件。第二个。我们在页面上。和在那个action类里面如何去获取消息资源,文件里边那个白就值。
02:00
第三个就是我们讲到的一个应用是吧,呃,我们如何通过超链接去进行国际化的一个切换啊,这节课就有这样的三个目标。来,我们来记个笔记。首先创建一个动态的Java工程。抓住。第。新建一个not。国际化。目标。如何配置国际化资源?点第二个。如何在页面?SH。和。
03:02
Action类中访问。国际化。资源。文件的外流值。他。直线通过高链接。切换语言。这样的一个处理代码,哎,实际上就这三个工作,第一个如何来配置国际化资源文件。BT吧。配置国际化资源文件呢?有这样的几种方式,第一个基于action。那应该是跟action在同一个包下来建一个action name language country,叫properties。第二个基于包的,在包的跟路,在包的根路径下,我们来建一个package,注意哈,不是package name,而这个报名就是package,然后是呃,语言国家proper,我们当然还可以来配置。
04:16
更全局的,全局的的话呢,就是呃,Basename鸡鸣,呃,Language country properties,那这个全局的呢,我们需要通过配置常量的方式来进行配置,这个我们在前边呢是做过的。我们在那个default properties里面有这样的一个常量,把这个常量拷过来,然后一配置就可以了,哎,我们也可以。最后一种方式哈,也可以在页面上使用这个I18N标签,在这个标签标签体里面指定一个临时的国际化文件。但实际上最后一种方式呢,用的这个机会并不是特别多,所以说我们说主要是有这样的三种方式。
05:02
一种方式。Action范围的。In action。同样的这个路径下,即同样的包下配一个什么action name language country proper,我们前面讲这个类型转换的时候。我们配置的那个,嗯,类型转换器,以及配置类型转换。他需要。想它需要这个显示消息的时候的话呢,我们都是基于这个action的配置方式跟那个相同。但格式有点区别哈。好,第二个。高范围内的。这个吧,看上去有点奇葩是吧,这样配的话呢,它必将。被当前包的所有action都适用,但是这个名字是什么呀,就是。
06:04
这个名就是package,而不是那个包名。也不是什么action名,还有一个是全局的这个什么呀,当适用于所有的action这个包。基于范围内呢,仅适用于当前包里边的X运行方式是这样的。我们可以通过这样的方式来进行定义。好了,这个的话呢,我就去掉了啊。三种方式,一会儿的话呢,我们可以逐一的来试一下。好了,那下边呢,实际上这里面有一个一个小问题。就是这里边儿了哈,既然你有这么这么多种这个配置方式的话,那么国际化。
07:05
资源文件。加载的顺序如何呢?怎么下载呀?实际上我们这块我们可以来说一个原则,就是离当前埃森越近的。它将被优先加载。说离。当前。减。Action较近的。将被优先加盖。
08:00
你想明白吧,比方说我同时有基于action的,基于包的跟全局的加载谁啊加载当前。Action。那如果没有这个的话呢,只有package跟全局的,我就加载这个。包的,如果这两个都没有的话,那我就只能加载它了,实际上我们这里边有一个这个,嗯,比较复杂的一个顺序原则是它。拿过来来看一下。这是整个的一个加载顺序。好了,这个加载顺序的话呢,我就不详细来说了,是吧,大家要是感兴趣的话呢,我可以在课后看一下,实际上。我们用不着那么那么复杂是吧,我们只要把我们的这个呃。原则搞清楚就可以了,这里边的话呢,还包含什么呀,包含什么实现的接口啦,负类啦,以及负包啦,哎等等等等。
09:03
那原理就是它,呃,我们不再一个一个解释。好了,这就是我们的第一个问题,如何配置国际化C文件,第二个问题,如何在页面跟action里边输出这个C文件的外流值。那这个里边的话呢,我们可以通过这样的几种方式,第一个就是在X类里边。对。内中。Action。直线了,Get直线了。Provider。People。则可以调用其at方法。获取Y流,嗯,OK啊,实现了这个接口怎么实现啊。
10:00
当然,通过继承。Action support。方式就可以,对这个借口,我们不用自己去写这个借口的一个一个方法啊页面上。可以使用标签。还有一个对于表单标签。可以只用。表单标签吧。T属性质。这个的话呢,有点讲究,就是我们可以再说一说啊,如果有占位符的话,若有占位符则。
11:02
可以使用s text。标签的。子标签来。天宫,但位OK。好了,那我如果当前页面是来自于一个action的话,我可以直接通过o gal访问action里边的属性值。若当前。页面来自于。Action则。可以直接访问。Action中的属性值,这么说的话呢,还是有点这个。嗯,是广义哈,我们说的再广一点。
12:02
来不来自于action,实际上并不一定访问的是action的属性值吧,是访问值站里边的属性值说。可以利用标签。直接访问直战中的属性值。啊,这样的属性是什么意思呢?包括对象战。好卖不成?你应该是利用标签。和什么呀?和OGNL表达式。方面。行了,这样的话呢,我们前两个基本上就说完了,下面我们来进行这个代码的实现。首先我来写两个国际化资源文件,那我们先来写这个全局的吧。
13:04
Fair写成I1,我写个name等于。Name。写一个password。等于。吓死我了。再写一个带单位符的。Time。等于。Time。零。保证哭了。CTRLC。EU。不用CTRL啊,这样直接复制过来了是吧,再来下一个。
14:03
下划线A_CN这边修改。名。密码。这叫什么呀?时间,OK。新建一个JSP。IO。Rnp。导入瓷砖度的标签。Uri没有提示哦。我还没有加入抓的环境吧。把这个直接复制过来。
15:11
But。And cross save life。还有一个stra to自身的配置文件。Copy。整体OK。然后呢?我们来写这个JSP。啊。圈库导进来。行了。来写我们的什么呀,写我们的表单S。Form。
16:00
Action就无所谓是吧。我们也。不去提交。Him。呃,名字叫u name为这个。江书记累不啊?你要这么写的话,是不是就写死了呀?是吧,这么写就写死了,现在的话呢,我们可以我多写几个吧。就这一个啊,这个我就可以写成。Key的方式。瞧着。T。叫。So the name。保存按国际化资源文件有的name就是key吗?回来K。下一个SS。
17:05
D。这个label呢,是写死了是吧。哎。Able的方式。是啊。这个写死了是吧。Li。铁死带。对吧。而这样的方式呢,直直接上国际化,对文件里边获取的外流值。地方是是。直接上。资源文件中。
18:01
或许。Y6值对吧,OK。还有一个。到S。发我还需要再加一个对吧。三米等于三米五吨。CTRLC复制一份。比较急交。回来。这个的话呢,也会有P啊三米。OK。可以跑一个试试是吧。刚才的话呢,落了一步,落了一个什么呀?嗯,没有在这个r to配置文件里边来配置这个全局的国际化文件。这个文件的话呢,也是复制过来的哈,好像没有清理呢。
19:02
先清理一下。里边配置国际化资源。地址。国际化资源简单是这个全局的啊来。Con name和value。于是我们去找。对。Stras call。第一个有个default properties。本超F去找A18N。这个就是。这个C拿过来。里边直接写成A18N就可以了,注意哈,这个名字是可以随意的,并不一定一定是叫18N,那么叫这个的话呢,借名之意是吧。我这个就叫218NOK,放下这个页面。
20:19
复制。IE访问。英文的我们切换成中文。上去确定确定。刷新。有中文的呀。只有用户名换了这个password啊,用户名跟提交按钮换了password,为什么没换呢?回来看一下。
21:02
Password没问题啊。Password OK,大家看。三个S少了一个W。改过来,每一个都需要改吧。布置的吗?保存。外企服务器。对,看。刷新。是不是改了呀?用户名密码提交这个为什么没改啊,这个我是不是写死的对吧。工具。In net选项语言。切换成英文,确定走。看一下OK,可以改。好了。再回到我们的JSP里边来。看一下它。这里边的话呢,我第一个用label啊,我是写死了,这样写死肯定不行是吧?哎,我们用这个label实际上也可以去访问。
22:08
咨询文件的外流值怎么访问呢?我们把这个sdbug打开。您刷新一下。来看sdbug,我在这个占领有一个什么呀,是不是有个default tr,这里边有那个T的方法。大家看这里边有很多的get t方法,那这个get t方法呢,它就提供了访问资源文件Y6值的功能,那这个是已经实现的啊,这并不是一个接口,而这个在直站的站顶OGL表达式告诉我们。我们可以直接访问。对象站里边的公有方法,那这些的话呢,其实实际上都是。
23:04
公有方法,我可以直接来访问。于是。我们可以通过。Get tag的方法去访问。写词肯定不行是吧。于是写一个带。Text,然后解成the same解上了。再调。有。没改变是吧,那你正常情况下,我这个label值是不是放一个字符串啊,现在你放的是一个O表达式,你得告诉我。呃,我放的是一个OG表达式,而不再是一个一般的字符串,怎么样呢?我需要强制的进行OGL解析包装就可以了。我觉。来刷新。再看是不是也可以呀。
24:01
大写的了吗?切换一下。哎,他也可以这样访问,所以说这里边儿的话呢,我们需要注意一下。写死肯定是不行的是吧,说落。若O这个label标签。使用这样的方式。就也可以。重。国际化。资源。文件中。
25:04
获取。Y留职了,那这样也可以啊,为什么可以呢?我们要说一下。因为此时在。对象站中有。At。Test provider。一个一个实力好了。该对象中。提供了访问。国际化。资源。之。原文件的。T text方法。好,同时我们还必须告诉这个label,还必须要那个label告诉告诉to,我里边放的不再是一个字符串了,而是一个ogn阳表达式。
26:11
同时,还需要。通知。抓框架。被迫中。放入的不再是一个。普通的四。耳饰。一个ODNL表达式是吧,所以。使用。这个包装起来啊。At text。O。
27:00
崩。起来一。强制进行O。也行。OK。这样的话呢,我们就可以通过强制强制进行OGL解析的方式来访问到国际化资源文件里边那个外流值。啊,两种情况。第一种情况,我们是使用。P属性,第二种情况是使用label属性啊,他们一种是直接可以访问到国际化资维文件的那个Y流值,另外一种方式的话呢,要曲折一点哈,它要通过进行强制OJL解析的方式访问到,但是这两个呀,我们都注意到这个label或者这个key是起作用的,这个主题默认是。XHTML,那如果这个主题。
28:02
换了换成S。主题换成simple。还会起作用吗?People tea都不会起作用,看一下。刷新。都不起作用,这个怎么办呢?这个时候需要我们自己来写那个label,就是那个标记,有的name啊,姓名啊,那个标记怎么写啊,使用标签。好了,这个值呢,叫user name。这一份儿。CV啊,这个也叫name。而这个呢,叫阿多。好了,最后这个提交按钮呢,啊,这个T不好用了是吧,这个时候我们要需要通过嗯来写,那我们需要注意到这是一个抓的标签,所以说这里边我们需要进行强制的OTL解析才可以艾。
29:12
Ask。结账要summit。保存搞一搞。这个是好用的。切换成英文看一下。上去。再刷新,OK。呃,这就是我们在页面上对这个。固定的这个文本进行国际化的。两种方式,第一种方式就是我大了说啊,如果要是使用。非simple主题的话,那你就可以用这个key来显示,这个key是最方便的,我们不建议使用这个label。那你如果要是C模主题的话,你就得手工的用这个s text啊,这个s text的话呢,我们也来这个做一个笔记。
30:12
页面上可以。直接使用S。Name等于。准备什么?PA。标签来访问。国际化资源文件里的外图纸。那就可以。好了,那实际上的话呢,我们还有一个任务没有完成是什么呢?哎,我们还有一个time等于什么呢?我们说我们还可以访问。
31:03
值站里边的属性值,我来写一个action。新建一个包。看点,爱硅谷点儿。The。Q点A18n.APP。借一个action。I18。Action,我让他继承。Action support。写一个方法。搞一个success,首先我们要测试一下。
32:00
在这个action里面如何去访问?国际化资源文件的Y6值说,在。Action中访问。国际化。资源。资源文件的就值准访问呢,我们说哎,我们通过继承这个support,实际上已经间接的实现了那个text。Provide方法啊,Take provider接口,我可以调用方法点一个来string name,找一个get text,点一个user name。好,有多少name,那如带站位符呢?带站位符的应该是。这个吧,还带了一个零。那我们这个,我们应该也可以访问。是的。
33:01
M等于代X,我们看我们是不是可以去传这个单位符的这个值啊。结账。要。Time后边是as。At least new。Out。这个是带单位符的。带占位出的啊,然后我页面上呢,还需要来访问一下这个。占位符是吧,一变成占位符的话呢,我们直接在我这个里边加一个属性,占点对象的属性吗?It。It等于六等于。这里边儿的话呢,我对这个date进行初始化好了。
34:05
需要提供对应的盖赛的方法。我这块的话呢,我就可以直接写这个对了是吧。返回这个时候页面上那个我们也可以看一下效果。配置一下。CC。Action。Action。Class。Result目录下的。A18NGP,我这个就叫。I18N就可以了,来,我来写一个in JSP导航到这个action。
35:04
Inexp。导航到这个action。1RNO了。搞一搞,看一看。Run。把这个呢复制到A里面。这是英文的是吧,看这块儿这个打印。没问题,有的name time,好了,我切换成中文的。切换成中文的字。注意我在刷新这个的话呢,全改了,注意看这块儿是是不是也改了呀。
36:04
Action里边去访问这个计划资源文件的一个方式,我们已经搞定了。就是使用这个get text方法。就可以,一个是呃,不带占位符的,一个是带占位符的,还差一个,还差一个谁呀。还差一个。国际化资源文件里面还有一个time是吧,这个的话呢,我们需要在页面上进行输出。页面上来写两个B2。然后是S。这个键叫time。那我们就要去填充这个单位符,使用S。Poem。Y6等于。K是谁呀?K是直占占顶的一个属性值。
37:03
找一个。我们看到哎,这个值是没问题的,好切换一下。嗯,他也可以访问。好了,这就是我们来访问这个。嗯。带占位符的这个外流指现在呢,我们再玩点玩点新的哈,我们除了这样去访问。我们还支持一个什么,我们还支持直接访问这个呢,用的不多,但是确实有这样的一个基础点啊,我们可以在这里边直接去访问值占的属性值这样写。直接访问。这个值叫什么呀?这个值叫。It。就是说我去访问这个date,同时抱着图拉图框架,我是值站的一个属性值,我拿这个Dollar中括号大括号给它包起来,类似于一个OGN表达式的情况,叫time to。
38:13
保存。我在这里边的话,你保存一下啊。保存时间。八这里边也有一份。欧了。启动。I'who。GP。这个的话呢,我直接访问s text。直接写time不就可以了。因为那个单位符我已经。搞定了是吧,我已经可以直接访问纸单里边的属性值了。找一个。刷新。大家看time。
39:00
这个时间。这是一个date类型嘛,是吧,时间。再来。切换一下。这走。哎。这样一个效果没问题,同学可能会想是吧,哎,这个显示的格式貌似有一点。不一样哈,我们这个可以通过那个SD标签进行进一步的格式化,或者是。干脆我在这里边怎么样,我在这个action里边进行输出的时候,我就给它输出。一个这个成功的一个格式,比方说啊,带什么什么格式的,什么长长格式啊,短格式啊,页面上你不就可以直接用了,就是在这块准备一个字符串就可以。好了,这个的话呢,我们不再说了哈,那这样式的话呢,我们关于这个国际化的第一部分呢,基本上就说完了,我们来看我们的笔记。
40:04
啊。第一个大的问题是如何配置国际化堆文件。我们现在都是基于。全局的。那也可以基于包的方式,或者是基于action的方式,我们来测试一下这个action的方式吧。我搞一个进去好吧。Action的方式。F2。要不改成?Test。A18。嗯。Properties。把这里边儿。加上一点标记。写完好了,这个写好之后的话呢,把这个往上移。搞一个中文的。
41:02
下划线A_CN。再搞一个英文的。下划线。En电话线us。这个内容呢,布置一份。就他。没错哈。那个标记啊,别忘加了。好。这个都是标记的对吧。重新启动服务器。根据我们前面讲到的话呢,它应该是优先加载离我近的,就是加载这个action,找一个就知道了。是不是全带这个小标记啊。
42:00
对吧,那。另外的方式的话呢,比方说那个拍的方式,我就不再举例了。继续看笔记,好,这是配置这个国际化资源文件好,加载顺序的话,大家课后看一下就可以,我们的一个原则就是啊,哪个离我当前action近,我就先加在哪一个。那么实际上我们更加推荐使用这个,呃。全局的,因为我们通常情况下,我们在一个项目里边有一个国际化资源文件就可以,消息文件可能有很多,但国际化咨询文件一般而言只有一个。啊,我我指的是这个鸡鸣的哈,那对于不同国家的话呢,可能会有很多个,有两个意思。好,然后我们如何在页面跟action里边来访问。国际对应国际化应的Y6值呢,我们在action里面,我们可以通过这个get t的方法,而且我还可以访问那个带占带占位符了,就是有一个重载的方法吗?后一个参数是一个list,它可以去填充那个占位符在页面上。
43:09
我们可以通过s text跟S标签来访问。带占位符的,那要是不带占位符的直接XT就可以好了,我们还可以利用标签跟OD表达式来访问值站里边的属性值也包括。Map占的,我们只举了一个这个。B项战的,实际上这个map战这个道理是一样的,有例子那我就不举了,那这里边。这个写法有两种方式来说一下,一个是在这里边。这样的方式写。CTRLC。那二班里边呢,是这样。C。另外一种方案这样写。
44:03
幺八里边是直接进行访问。啊,他直接把这个属性值啊拿到了,而页面上可以这样写。好了,我们第一部分有这么多,第二部分的话呢,我们将研究如何通过超链接,呃,切换这个语言,这里边我们需要比较详细的去看那个。国际化拦截器的这个源代码,OK。
我来说两句