浏览 2338 次
锁定老帖子 主题:bboss国际化功能简介
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-05-09
最后修改:2012-05-21
bboss国际化组件和相关标签在mvc框架、ioc框架、独立组件三种场景中的典型使用方 法,bboss还提供了国际化配置文件热加载的机制。 bboss最新源码可以从github获取: https://github.com/bbossgroups/bbossgroups-3.5 1.国际化属性配置文件管理组件 org.frameworkset.spi.support.HotDeployResourceBundleMessageSource 2.独立组件使用模式 2.1 HotDeployResourceBundleMessageSource的独立使用方法 HotDeployResourceBundleMessageSource messagesource = new HotDeployResourceBundleMessageSource( ); //如果有多个配置文件,可以在数组中追加,注意属性文件名不需要带语言信息和文件后缀 //HotDeployResourceBundleMessageSource会自动扫描并加载对应语言的属性文件,后文同理。 messagesource.setBasenames(new String[] {"org/frameworkset/spi/support/messages"}); //如果没有找到代码对应的配置项,直接输出code messagesource.setUseCodeAsDefaultMessage(true); System.out.println(messagesource.getMessage("probe.jsp.generic.abbreviations", Locale.US)); System.out.println(messagesource.getMessage("probe.jsp.generic.abbreviations", Locale.US)); 2.2 是否需要对HotDeployResourceBundleMessageSource实例管理的资源文件启用热加载机制 通过属性来控制: private boolean changemonitor = true; true 启用 false 关闭 默认启用 设置changemonitor属性值的方法为: messagesource.setChangemonitor(false); 2.3 通过ioc容器来管理独立的messagesource对象的方法 <property name="messageSource" class="org.frameworkset.spi.support.HotDeployResourceBundleMessageSource" > <property name="basename" value="/WEB-INF/messages"/> <property name="useCodeAsDefaultMessage" value="true"/> </property> DefaultApplicationContext context = DefaultApplicationContext.getApplicationContext("org/frameworkset/spi/support/messages.xml"); MessageSource messagesource = context.getTBeanObject("messageSource",MessageSource.class); 3.ioc容器的国际化机制 每个ioc容器默认自带一个MessageSource对象,对应的国际化资源配置文件和ioc组件配置必须在同一个包路径下: //ioc组件配置文件 /bbossaop/test/org/frameworkset/spi/support/messages.xml //ioc容器对应的国际化属性文件 /bbossaop/test/org/frameworkset/spi/support/messages_zh_CN.properties /bbossaop/test/org/frameworkset/spi/support/messages_en_US.properties 而且名称必须是messages,相应的语言信息部分为_en_US.properties 使用的实例为: DefaultApplicationContext context = DefaultApplicationContext.getApplicationContext("org/frameworkset/spi/support/messages.xml"); System.out.println(context.getMessage("Trans.Log.TransformationIsToAllocateStep", new Object[]{"a","b"}, (Locale)null)); System.out.println(context.getMessage("Trans.Log.TransformationIsToAllocateStep", new Object[]{"a","b"}, Locale.SIMPLIFIED_CHINESE)); System.out.println(context.getMessage("StepLoader.RuntimeError.UnableToInstantiateClass.TRANS0006",Locale.US)); Resource resource = context.getResource("org/frameworkset/spi/support/messages"); System.out.println(resource); 这里我们看到: context.getMessage("Trans.Log.TransformationIsToAllocateStep", new Object[]{"a","b"}, Locale.SIMPLIFIED_CHINESE); 第二个参数是一个对象数组,含义是代码Trans.Log.TransformationIsToAllocateStep代表的真实输出信息中包含两个需要被替换的变量占位符{0}和{1},定义如下: Trans.Log.TransformationIsToAllocateStep=\ 转换大约分配了 步骤 [{0}] 类型的 [{1}] 国际化组件解析Trans.Log.TransformationIsToAllocateStep时,会将数组new Object[]{"a","b"}第一个元素替换{0},第二个元素替换{1},最终输出为: 转换大约分配了 步骤 [a] 类型的 [b] 4. mvc框架国际化功能 mvc框架国际化功能涉及两个local解析器: org.frameworkset.web.servlet.i18n.AcceptHeaderLocaleResolver org.frameworkset.web.servlet.i18n.SessionLocalResolver org.frameworkset.web.servlet.i18n.AcceptHeaderLocaleResolver是默认的locale解析器,根据客户端浏览器所处的Locale来解析相应的code。 org.frameworkset.web.servlet.i18n.SessionLocalResolver类,从session中获取用户登录时存储的Locale对象,默认的key值为字符串: org.frameworkset.web.servlet.i18n.SESSION_LOCAL_KEY session中设置Locale对象的方法: session.setAttribute(SessionLocalResolver.SESSION_LOCAL_KEY, java.util.Locale.US); 或者 session.setAttribute("org.frameworkset.web.servlet.i18n.SESSION_LOCAL_KEY", java.util.Locale.US); 如果用户需要使用SessionLocalResolver必须在bboss-mvc.xml文件中增加以下配置: <property name="localeResolver" class="org.frameworkset.web.servlet.i18n.SessionLocalResolver"/> 以便覆盖默认的LocalResolver组件org.frameworkset.web.servlet.i18n.AcceptHeaderLocaleResolver(默认根据客户端所处的Locale来解析相应的code) 调整session中存放Locale对象的key值的方法: <property name="localeResolver" class="org.frameworkset.web.servlet.i18n.SessionLocalResolver" f:sessionlocalkey="yoursessionlocalkey" /> session中设置Locale对象的方法变为: session.setAttribute("yoursessionlocalkey", java.util.Locale.US); 另外包含一个message标签,通过message标签,可以在系统界面上方便实现国际化功能。 国际化标签的使用方式 <pg:message code="probe.jsp.wrongparams"/> 使用国际化标签时,必须在jsp的头部导入标签定义文件: <%@ taglib uri="/WEB-INF/pager-taglib.tld" prefix="pg"%> mvc国际化组件messageSource的获取方法: org.frameworkset.spi.support.MessageSource messageSource = org.frameworkset.web.servlet.support.WebApplicationContextUtils.getWebApplicationContext(); 详情请参考测试jsp页面:/bboss-mvc/WebRoot/jsp/i18n.jsp mvc国际化配置文件路径默认为 /bboss-mvc/WebRoot/WEB-INF/messages.properties /bboss-mvc/WebRoot/WEB-INF/messages_zh_CN.properties /bboss-mvc/WebRoot/WEB-INF/messages_en_US.properties 等等。 在web.xml文件的DispatchServlet中进行配置: <init-param> <param-name>messagesources</param-name> <param-value>/WEB-INF/messages,/WEB-INF/messages1</param-value> </init-param> <init-param> <param-name>useCodeAsDefaultMessage</param-name> <param-value>true</param-value> </init-param> messagesources用来指定国际化配置文件清单 useCodeAsDefaultMessage用来指定如果没有在相应的配置文件中找到相应的code对应的配置项是否直接输出code,默认值为true 为true时输出,false不输出 完整的配置如下: <servlet> <servlet-name>mvcdispather</servlet-name> <servlet-class>org.frameworkset.web.servlet.DispatchServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/bboss-*.xml,/WEB-INF/conf/bboss-*.xml</param-value> </init-param> <init-param> <param-name>messagesources</param-name> <param-value>/WEB-INF/messages,/WEB-INF/messages1</param-value> </init-param> <init-param> <param-name>useCodeAsDefaultMessage</param-name> <param-value>true</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> 这里不需要带国家标识,系统会自动在/WEB-INF/目录下查找对应国家语言的配置文件,如果有多个配置文件可以用逗号分割,例如: /WEB-INF/messages,/WEB-INF/messages1,/WEB-INF/messages2 5.国际化配置文件热加载机制配置 bboss提供了简单实用的国际化属性文件热加载机制,可以方便地开启和关闭。 检测文件是否改动的时间间隔默认5秒,如果有改动mvc框架会重新加载有修改的文件,没有修改的文件不会重新加载 如果想屏蔽改机制请修改bboss-aop.jar/aop.properties文件的选项 #国际化属性文件变更检测时间间隔,单位为毫秒,默认为5秒间隔 resourcefile.refresh_interval=5000 若果>0则启用热加载机制,<=0则屏蔽热加载机制,开发环境请开启,生产环境请关闭。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-05-16
根据项目需要,今天又完善了一下bboss国际化机制的mvc部分,已经修改正文内容,变更内容如下:
在web.xml文件的DispatchServlet中增加以下配置 <init-param> <param-name>messagesources</param-name> <param-value>/WEB-INF/messages,/WEB-INF/messages1</param-value> </init-param> <init-param> <param-name>useCodeAsDefaultMessage</param-name> <param-value>true</param-value> </init-param> messagesources用来指定国际化配置文件清单 useCodeAsDefaultMessage用来指定如果没有在相应的配置文件中找到相应的code对应的配置项是否直接输出code,默认值为true 为true时输出,false不输出 完整的配置如下: <servlet> <servlet-name>mvcdispather</servlet-name> <servlet-class>org.frameworkset.web.servlet.DispatchServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/bboss-*.xml,/WEB-INF/conf/bboss-*.xml</param-value> </init-param> <init-param> <param-name>messagesources</param-name> <param-value>/WEB-INF/messages,/WEB-INF/messages1</param-value> </init-param> <init-param> <param-name>useCodeAsDefaultMessage</param-name> <param-value>true</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> |
|
返回顶楼 | |