Javaweb切换中英文功能

本文分享了在JavaWeb项目中实现中英文切换功能的心得,涉及国际化基础,包括Spring MVC框架和jsp+servlet架构下的处理方法。通过修改jsp页面,添加切换链接,并利用js传递语言参数。在Spring MVC中,通过localeChangeInterceptor配置实现,而在jsp+servlet架构下,需要自定义localeResolver类来处理语言切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Javaweb 切换中英文功能实现——国际化

小博也是小白,自己参与了一个javaweb项目,项目要求加入一个中英文转换的功能,自己也是断断续续弄了一个星期,这里分享下自己的心路历程。由于这个项目中有些页面使用Spring mvc的框架写的,有些则是jsp+servlet的架构。所以这里把这两种架构下的解决方式都进行说明。

这里也说明一下项目中关于国际化的基本情况。项目中本来就有很多资源文件.properties,有中英两种语言。以admin.properties为例,admin.properties是英文的资源文件,那么admin_zh.properties就为中文的资源文件。

  • Spring mvc
  • jsp+servlet

jsp页面的修改

不论哪种架构下,在页面上都需要添加中英文切换的链接。除此之外还需要用js来为URL加上对应的语言参数,如点击id=”change_language_zh”则会在本页的URL后面加上一个参数“?choiceLanguage=zh”,这些参数传入后端进行处理。

        <li>
            <a href="#" id="change_language_zh" style="padding-right: 1px">中文</a>
        </li>
        <li style="margin-top: 10px">
            |
        </li>
        <li>
            <a href="#" id="change_language_en" style="padding-left: 1px">Engilsh</a>
        </li>

        <script type="text/javascript">
            var url = window.location.search;
            var dom_zh = document.getElementById("change_language_zh");
            var dom_en = document.getElementById("change_language_en");
            if(url.length > 0) {
                var theinx = url.indexOf("choiceLanguage=");
                if(theinx > 0) {
                    var temp = url.substring(theinx, theinx+17);
                    dom_zh.href = window.location.href.replace(temp, "choiceLanguage=zh");
                    dom_en.href = window.location.href.replace(temp,"choiceLanguage=en");
                } else {
                    dom_zh.href = window.location.href+"?choiceLanguage=zh";
                    dom_en.href = window.location.href+"?choiceLanguage=en";
                }
            } else {
                dom_zh.href = window.location.href+"?choiceLanguage=zh";
                dom_en.href = window.location.href+"?choiceLanguage=en";
            }
        </script>

Spring mvc框架

小博查过很多资料,Spring mvc有很多国际化的一些功能,参考到博文“Spring MVC之LocaleResolver(解析用户区域)”中的方法。在Spring的配置文件中设置localeChangeInterceptor来进行语言的切换,这个方法非常的简单方便,但只适用于项目中的部分页面(用Spring mvc的页面)。设置如下:

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

这样这些页面就可以根据参数choiceLanguage的值来改变语言。

jsp+servlet

从上文Spring的配置文件中可以看出,Spring框架下的localeResolver直接使用的Springmvc框架里提供的关于国际化的SessionLocaleResolver,jsp+servlet架构下可以自行写一个localeResolver类然后重写getLocale方法。

public final static Locale getLocale(HttpServletRequest request) {
        String lang = request.getParameter("choiceLanguage");
        Locale locale = null;
        if(lang != null) {
            if (lang.equals("zh")) {
                locale = new Locale("zh", "CN");
                request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale);
                return locale;
            } else if (lang.equals("en")) {
                locale = new Locale("en");
                request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale);
                return locale;
            }
        }else {
            locale = getLocaleInSession(request.getSession(false));
        }
        if(locale == null) {
            return resolveLocale(request);
        }
        return locale;
    }

这个方法的主要思想如下:首先如果URL的choiceLanguage参数不为空则根据参数值来设置session中locale的值并返回locale。其次,若参数值为空,就调用resolveLocale方法(这个方法是根据request.getLocales()的顺序来取locale值的)

注意:这里改完之后如果还是不能成功,可以考虑是不是localeFilter里面又重新根据浏览器的语言顺序来取locale值,要在这个页面进行修改。

此次修改经历是在前人已经写过一部分localeResolver类的基础上进行的修改,还是致敬前人!每个人遇到的问题可能不一样,但是理清逻辑结构后再进行问题的定位是非常有必要的!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值