ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:22.85KB ,
资源ID:10044981      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10044981.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(国际化解决方案.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

国际化解决方案.docx

1、国际化解决方案SPRING MVC国际化问题解决方案1解决途径(1) 将所有包含中文的资源文件(包括 JS、图片、JSP等),翻译成多套;(2) 使用属性文件(Properties文件)配置JSP文件的语言,JS和图片等资源使用多套;第一种解决方案较为简单,但对于业务逻辑变动较频繁的应用来说不是很适用;第二种 解决方案,虽然会对开发进度有一定的影响,但相对比较灵活。本文以第二种解决方案为主线进行讨论。2网络解决方案对于SPRING MVC国际化的问题,网络上提供的解决方案大致如下:一、 基于浏览器语言的国际化配置使用Spring的MVC并且配置中有配置 Resource文件。vproperty

2、 n ame=base name value=message-i nfo /其 中,message-info 是 properties 文件的通用名。如: 我 的配置文件叫 message- info.properties,message-info_zh_CN.properties 等等,只要有了这个配置,然后配置 JSP 渲染器为 JSTL支持的,那么在你的 JSP文件中使用fmt标记就可以实现客户浏览器语言国际化了。如: 其中的info.login.title 和你的资源文件对应.另外一种方式是使用 spri ng自带的标签显示国际化信息,如:in put type=butto n val

3、ue=/二、 基于动态加载的国际化配置1、基于请求的国际化配置基于请求的国际化配置是指,在当前请求内,国际化配置生效,否则自动以浏览器为主。配置方式如下:首先配置拦截器这个配置呢,是不论请求级别的国际化, 还是Cookie级别的国际化,再或者Session级别的国际化,都必需有配置这个拦截器,否则会不能使用。配好上面的拦截器之后,就将拦截器注入到你的 UrlHandlerMapping 中,例如:1这个时候,但凡有了符合 UrlMapping的请求,就会被拦截,并且开始配置国际化参数 默认的参数名为locale主意大小写。里面放的就是你的提交参数。如 :en_US, zh_CN之类的,这个时候

4、,你在页面上加一句 简体中文如果你的资源中,饱含建议中文的配置,那么就会变成你确定的简体中文啦。2、 基于Session的国际化配置拦截器和基于请求的相同Session的配置如下:在你的处理的 Controller 中,将提交上来的locale 字段信息生成真正的 Locale对象,然后将对象保存在 Session 中,默认保存的 ID 是 SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME这样,当你的Session不过期,那么语言种类始终保持正确的说。我一直是这样子用的,我觉得还是 Session的好,老外们用了很满意。3、 基于Cooki

5、e的国际化配置三、注意事项如果不用默认的浏览器语言国际化方式,那么拦截器一定要配置,如果你有多个 UrlMapping,那么就每个都配上拦截器。至于配置的LocaleResolver 的名字,一定要用上面的配置中的名字 localeResolver 当然了,这个是默认的名字来的,自己设置成别的也可以,但是就是麻烦,反正我用默认的就感觉不错。3网络解决方案的BUG及局限性对于网络解决方案中提到的“基于请求的国际化配置”,与基于浏览器语言的国际化配置是等价的。通过分析AcceptHeaderLocaleResolver 的源码,发现“基于请求的国际化配置”调用的并不是浏览器上传递的locale参数

6、,而是request.getLocale()方法,即浏览器的语言配置。事实上,当按照“基于请求的国际化配置”的方法进行配置后,在浏览器端传递locale参数时,系统会提示如下错误:Cannot cha nge HTTP accept header - use a differe nt locale resoluti on strategy 此异常是由 AcceptHeaderLocaleResolver 的 setLocale 方法抛出的。由此可见,设置 AcceptHeaderLocaleResolver 起不到任何效果,不如直接使用基于浏览器端的国际化配置比较好此外,对于上面几种解决方案来

7、说,重点解决的是显示层面的国际化问题, 即通过locale 参数来控制国际化语言, session 和 cookie 只是存储 locale 参数的介质。有些需求,通过上面提到的解决方案则无法解决。(1)系统安装时,选择一个默认安装语言。不论浏览器语言的版本如何,默认均显示此 语言;且通过 locale 参数,可以手动调整显示的语言;(2)系统安装时,为不同语言的版本配置不同的 URL;当访问此URL时,不管浏览器语言的设置如何,均显示此 URL 对应的语言版本;4 SPRING MVC国际化解决方案前言:前面提供的网络解决方案也为 SPRING MVC 的国际化解决方案,但具有一定的 局限性

8、;接下来本文探讨一种基于 Spring 的 i18n 包实现的国际化解决方案。4.1Spring DispatcherServlet 工作原理DispatcherServlet 为 Spring 的神经中枢,所有的请求与分发均要通过此 Servlet 。此 Servlet 会加载 WEB 以及 applicationContext 中的配置,以初始化相应的相应的参数。对 于 Spring 应 用 的 国 际 化 来 说 , 最 重 要 的 参 数 有 三 个 : localeResolver 、 localeChangeInterceptor 以及 messageSource 。 Locale

9、 Resolver 在 i18n 中是一个接口, 具有 setLocale() 和 resolverLocale() 两个方法, setLocale() 方法用于在 locale 发生变化的时 候调用, 而 localeChangeInterceptor 用于监听浏览器端 locale 的变化(第一次访问此应用 时,会调用此方法来设置 locale; 之后,如果 locale 有变化,则会调用 setLocale() 方法), resolveLocale() 方法主要用于获得当前的 locale (如果为空,则返回浏览器端的 locale ), 在多个地方均会 调用此方法获得当前的 local

10、e , 其中对于页面显示最重要的一处为 DispatcherServlet 的 render() 方法。这个地方获得的 locale 直接决定浏览器端页面显示的 语言,通过 resolveLocale() 得到的 locale 即为 setLocale() 方法设置的值。 Spring 中, AcceptHeaderLocaleResolver, SessionLocaleResolver, CookieLocaleResolver 分别是LocaleResolver 的三种实现,这在前面的网络解决方案中已经讨论,这里不再赘述当 spring 配 置 文 件 中 , 没 有 配 置 local

11、eResolver 时 , spring 会 默 认 的 使 用 org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver ( 缺 省 策 略 )。 AcceptHeaderLocaleResolver 表示接受浏览器端的语言设置,即根据浏览器端的语言来 setLocale() 。也就是说,如果不设置 localeResolver , render() 时调用 resolverLocale() 方 法获得的 locale 始终是浏览器端的语言。 在 render 之前通过 filter,interceptors 以及 ser

12、vlet 等对 locale 进行修改也无济于事。因为在 spring MVC 中,当所有的 filter,interceptors 以 及 servlet 执行完毕后, DispatcherServlet 的 render() 方法此时会调用 localeResolver 的 resolveLocale 方法,获得当前的 locale 对象。然后 set 到 response 中去。因此,要想控制页面浏览器端页面的显示,必须配置 localeResolver 。而采用 Spring 自带的 LocaleResolver 接口的实现, 无法满足上述提及的需求, 且无法处理诸如图片类的资 源文件

13、。4.2实现思路自 定 义 类 实 现 LocaleResolver 接 口 的 setLocale() 和 resolveLocale() , 编 写 LanguageRequest 抽 象 类 ( 包 括 getLocale() 方 法 ) 及 其 相 应 的 实 现 类 ( LanguageRequestFromAppconfig 、 LanguageRequestFromHostName 、 LanguageRequestFromRequestHeader 、LanguageRequestFromUserSelection ),用于表示国际化解决方案的不同配置。编写过滤器,用于拦截请求

14、,并对设置的资源文件进行处 理。 resolveLocale() 直接从 languageRequest 中获得相应的 locale 。在四个实现类中,分 别实现相应的 locale 获得机制。4.3配置流程4.3.1 web 配置目的: 配置过滤器代理, 使得过滤器可以通过 Spring 注入的方式来进行配置, 方便属性 的设置。 WEB 配置如下。vfilter- namefilterCha in Proxyv/filter- nameorg.spri ngframework.web.filter.Delegati ngFilterProxyvparam-n amee ncodi ngut

15、f-8vfilter-mapp ingvfilter- namefilterCha in Proxyv/filter- name/*REQUESTv/filter-mapp ing4.3.2 Spri ng 配置所谓的Spring配置是指applicationContext.xml 文件的配置。下面给出了此国际化解决方案的最全配置。v/c on structor-argv/c on structor-argv/bea nvcon structor-arg value=e nx/con structor-argvcon structor-arg value=USv/c on structor-a

16、rgv/bea nvbea n id=localeResource class=c n. csdb.i ntern atio nal.resource.LocaleResourcevproperty n ame=i nstalledLocaleListvlistvref bea n=cn Locale/vref bea n=en Locale/v/listv/propertyv/bea nvbea n id=ha ndleResourceType class = cn.csdb.i nternatio nal.resource.Ha ndleResourceTypevproperty n am

17、e=listvlistvvalue.jpgv/valuevvalue.gifv/valuevvalue.p ngv/valuevvalue.jsv/valuevvalue.cssv/valuev/listv/propertyvproperty n ame=filterListdwr/!- 覆盖默认的session存储,而使用cookie存储locale , cookie有效期为一个月-entry key=localhost value-ref=c nLocale!- 覆盖默认的session存储,而使用cookie存储locale , cookie有效期为一个月-!- 覆盖默认的session

18、存储,而使用cookie存储locale , cookie有效期为一个月-vproperty n ame=localeResolver ref=localeResolverx/propertyvproperty n ame=ha ndleResourceType ref=ha ndleResourceType如上所述,本配置为此方案的最全配置,仅起到参考作用。实际应用过程中,可以根据需求来进行相应的删减。以下是部分配置的说明:(1) 本应用安装的语言资源列表:当应用需要读取其支持的语言时, 以进行进一步的配 置时,可以通过得到此 Bean (LocaleResource),进而得到应用所支持的语言。比如:利用 VDB Model Buider 进行建模时,需要读取当前支持的语言包,并为每套语言提供一套配置 界面。如无此需求,可以不进行配置;(2) 系统需要处理的资源类型:locale语言本身仅能解决页面国际化显示的问题, 而不 能解决诸如JS、JPEG GIF等资源文件的国际化,而这对于国际化应用来说又是必须的。比 如:中文系统的某个 JS 提示可能为:”对不起,您不允许进行此操作“,而对应的英文系统 应有对应的英文提示,可能为:“Sorry, You have no Privilege! ”(建议JS文件中尽量少写 中文)。此时,就需要有各个语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1