springmvc 国际化
springmvc 国际化
LonnyDong 发表于1年前
springmvc 国际化
  • 发表于 1年前
  • 阅读 15
  • 收藏 1
  • 点赞 0
  • 评论 0

华为云·免费上云实践>>>   

摘要: 最近有用到springmvc的国际化,贴出来记录一下

1。配置文件springmvc.xml

    <!-- 国际化支持 -->
    <bean id="messageSource"
        class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="i18n/test_i18n" />
    </bean>

    <bean id="localeResolver"
        class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
        <property name="defaultLocale" value="en_US" />
    </bean>

    <bean id="localeChangeInterceptor"
        class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
        <property name="paramName" value="lang" />
    </bean>

    <bean
        class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="interceptors">
            <list>
                <ref bean="localeChangeInterceptor" />
            </list>
        </property>
    </bean>

红字标示的为存放i18文件的文件夹,且在src目录下

2。配置controller,根据用户自己的选择,修改语言环境

  if(lang.equals("zh")){
                    Locale locale = new Locale("zh", "CN"); 
                    request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale); 
                }else if(lang.equals("en")){
                    Locale locale = new Locale("en", "US"); 
                    request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale);
                }else 
                    request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,LocaleContextHolder.getLocale());

             }

 

3。配置完成就可以用了,通常会有以下几种情况

    2.1 页面信息的国际化,比如加载一个注册表单,那么  用户名/username 应该根据语言环境呈现。

    jsp 页面引入s 标签

     <%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>

       需要国际化的地方,引入对应的i18 属性 

    <spring:message code="loginpage.username"/>

    2.2  第二种情况是提示信息,比如用户提交表单,邮箱格式不合法,可以用过下面的方法获取国际化信息

locale = (Locale) httpRequest.getSession().getAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME);

或者:

Locale locale = RequestContextUtils.getLocaleResolver(request).resolveLocale(request);  

String message = applicationContext.getMessage(code,args, locale);

getMessage中有四个变量,依次分别为message_*.properties文件中的key,key中{0}、{1}等对应的值,默认值和Locale。

再将拿到的信息返回页面

 2.3 还有其他的情形,比如jquery 的提示信息等等,官方好像有提供方案,待研究

 

 

共有 人打赏支持
粉丝 0
博文 14
码字总数 15163
×
LonnyDong
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: