注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

无线时代辐射无穷

抓紧生宝宝,小心辐射

 
 
 

日志

 
 

关于spring2.5工程的国际化问题  

2008-10-30 10:20:31|  分类: spring |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

关于spring2.5工程的国际化问题

目前对spring 2.5的一个工程进行了国际化修改工作,走了一些弯路,最后
把相关的方法罗列如下,如果还有更好的方式也需要大家一起探讨。
1、对于所有的.do,采用拦截器进行国际化拦截,在spring配置文件里面加入
 <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
 <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
 <bean id="messageSource"
  class="org.springframework.context.support.ResourceBundleMessageSource"
  p:basename="messages" />
并且把localeChangeInterceptor加入到拦截器链里面(注:spring2.5中采用注释方式开发的action,做拦截器处理的时候一定要用如下的bean类)。
 <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
  <property name="interceptors">
   <list>
    <ref bean="openSessionInViewInterceptor" />
    <ref bean="localeChangeInterceptor" />
    <ref bean="userRightInterceptor" />
   </list>
  </property>
 </bean>
2、在jsp页面中,采用
<spring:message code="latest_group"></spring:message>标签导入国际化的文字内容,
其中latest_group为messages.properties中定义的key值。
3、对于action文件,可以采用
 @Autowired
 private MyMessageBundle myMessageBundle;
 注入,并使用
 myMessageBundle.getMessage("welcome", null, request);方法进行国际化文字获取,welcome为key值。
 其中MyMessageBundle.java中内容为
 package org.g12a.moodle.action;

import java.util.Locale;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.stereotype.Repository;
import org.springframework.web.servlet.LocaleResolver;

@Repository
public class MyMessageBundle
{
 @Autowired
 @Qualifier("messageSource")
 private ResourceBundleMessageSource messageSource;
 @Autowired
 @Qualifier("localeResolver")
 private LocaleResolver    localeResolver;

 public Locale getLocale(HttpServletRequest request)
 {
  return localeResolver.resolveLocale(request);
 }

 /**
  * @author fengch
  * @see 方法描述 给action方法中添加国际化支持,得到国际化的信息
  * @param key
  * @param args
  * @param request
  * @return
  */
 public String getMessage(String key, Object[] args, HttpServletRequest request)
 {
  return messageSource.getMessage(key, args, this.getLocale(request));
 }
}


4、对于dwr,则采用
 private MyMessageBundle    myMessageBundle = new MyMessageBundle();
 定义,并使用
 myMessageBundle.getMessage("welcome", null, request);方法进行国际化文字获取,welcome为key值。
 其中MyMessageBundle.java中内容为
 package org.g12a.moodle.action;

import java.util.Locale;

import javax.servlet.http.HttpServletRequest;

import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

public class MyMessageBundle
{
 public static ResourceBundleMessageSource myMessageSource;
 public static SessionLocaleResolver  mySessionLocaleResolver;

 public Locale getLocale(HttpServletRequest request)
 {
  return mySessionLocaleResolver.resolveLocale(request);
 }

 public MyMessageBundle()
 {
  myMessageSource = new ResourceBundleMessageSource();
  myMessageSource.setBasename("messages");
  mySessionLocaleResolver = new SessionLocaleResolver();
 }

 /**
  * @author fengch
  * @see 方法描述 给action方法中添加国际化支持,得到国际化的信息
  * @param key
  * @param args
  * @param request
  * @return
  */
 public String getMessage(String key, Object[] args, HttpServletRequest request)
 {
  return myMessageSource.getMessage(key, args, this.getLocale(request));
 }
}

5、对于javascrip中的国际化问题,
采用隐藏输入框的方式,把国际化的文字(采用上述的方式导入)放入隐藏输入框中,
然后再通过javascript脚本进行文字调用。


 

  评论这张
 
阅读(613)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017